Circles-4

Circles-4 is the newest version of the Circles program. Circles was originally forged as public domain software back in 1992 by Joseph S. Bittman and Clyde R. Magill, III, while they were at Rocky Flats. Since then fixes, modifications, and extensive additions have been added by James J. Bazley. The software is currently considered shareware and may be freely distributed as long as the code and the initial credit screen are not altered. The program is written in Basic and is in its fourth major release. (View Version History)

The Circles program allows for simplified generation of the coordinates for tightly-packed cylindrical container placement and the placement of reflective water walls around container arrays. These coordinates can then be used to generate criticality code input decks. The code also has an option that generates a simplified KENO-V.a input deck, that is viewable under KENO-3D but must be further developed prior to achieve desired models. The program displays the x-and y-axes along with circles denoting the two-dimensional projection of upright cylindrical containers and rectangles denoting vertical slab water walls on a x,y coordinate system.

Command functions allow the circles to be placed at specific locations or tightly packed around each other or against the coordinate system walls. In this manner, arrays of containers can be modeled in and out of corners or against walls. Additional functions can surround the circles with another circle or build vertical water walls around the circle array. Manipulation commands allow the circles to be moved and rotated.

Click here to DOWNLOAD.

The following sections provide more details:
General Use and Introduction (Including Three Practical Examples)
Command/Function Summary
Detailed Command/Function Explanations
Advanced Uses (Including Two Practical Examples)
Generating Hoop Models
Guide to Circles' Input Files

Return to Main Page
Return to Tools Page


Circles-4 Commands/Functions Summary

(Click on the Command/Function for a Detailed Explanation.)


Circle Generation Functions:

bot,id#,(-)c1#(,r#)packs circle id#, (with radius r#) below (-inside) circle c1
circle,id#,x#,y#(,r#)places circle id# (of radius r#) with its center at x#,y#
delete,id#deletes circle of id#
delta,dv#adds a delta spacing dv# to the radius r#
left,id#,(-)c1#(,r#)packs circle id# (with radius r#) directly left (-inside) of c1
mirrorxreflects existing circles along x-axis and generates new circles
mirroryreflects existing circles along y-axis and generates new circles
pack,id#,(-)c1#,(-)c2#(,r#)close packs circle id# (with radius r#) next to (-inside) c1 & c2; id, c1, c2 traverse counter clockwise
radius,id#,r#changes radius of circle id# to r#
replicate,id#,c1#replicates circle id# with the coordinates and radius of circle c1
right,id#,(-)c1#(,r#)packs circle id# (with radius r#) directly right of (-inside) c1
surround2,id#,c1#,c2#surrounds circles c1 & c2 with the same radius, r#, by circle id# whose origin is on the y-axis and minimizes the area above/below the x-axis. Chord is the y-coordinate.
surround3,id#,c1#,c2#,c3#surrounds circles c1, c2, & c3 with circle id# that attempts to enclose all three circles by touching their edges. The resulting circle does not always minimize area.
top,id#,(-)c1#(,r#)packs circle id# (with radius r#) directly above (-inside) circle c1
xneg,(-)id#,(-)c1#(,r#)packs circle id# (with radius r#) next to (-opposite) x-axis and on negative of (-inside) c1
xpos,(-)id#,(-)c1#(,r#)packs circle id# (with radius r#) next to (-opposite) x-axis and on positive of (-inside) c1
ybot,(-)id#,(-)c1#(,r#)packs circle id# (with radius r#) next to (-opposite) y-axis and on bottom of (-inside) c1
ytop,(-)id#,(-)c1#(,r#)packs circle id# (with radius r#) next to (-opposite) y-axis and on top of (-inside) c1

Water Wall Generation Functions:
delta,dv#adds a delta spacing dv# between walls and the circles
killquadrant,q#deletes all water walls in the q# quadrant; +x,+y is quadrant 1
nowalldeletes all water walls
quadrant,q#removes water walls from all quadrants except q#; +x,+y is quadrant 1
wall,wt#generates water walls of thickness, wt#; overwrites old walls, if they exist

Circle and Wall Manipulation Functions:
centerxcenters circles and walls at x=0 (i.e., on the y-axis)
centerycenters circles and walls on y=0 (i.e., on the x-axis)
flipxflips circles and walls along x-axis; does not mirror them
flipyflips circles and walls along y-axis; does not mirror them
move,id#,sx#,sy#moves circle id# by sx# and sy# along x- and y-coordinates
pushxpushes circles and walls to the edge of the x-axis; overall center affects side of x-axis
pushypushes circles and walls to the edge of the y-axis; overall center affects side of y-axis
rotate,rx#rotates circles by rx# degrees ccw about center (rerun "wall" command as necessary)
shiftx,sx#shifts circles and walls along x-axis by sx#
shifty,sy#shifts circles and walls along y-axis by sy#

Plot/Listing Functions:
listlists circle centers and radii
listwlists water wall coordinates
listplists circle centers and radii, pauses, and then lists water wall coordinates
output,&filenamegenerates a KENO-V.a input deck in &filename
plotplots circles and water walls on screen
printprints circle centers and radii and water wall coordinates (when lpt1: defined for DOS).
{Print Screen} keyprints the screen as is, including graphics (for true DOS only). (Under windows, pastes screen to clip board.)
size,s#changes size of plot centered at 0,0 by s#, turns off zoom function, and restores autosizing. A value of s# =1.0 plots an area of 50 x 66.
zoom,z#zooms into plot centered at x#,y# by a factor of z#, turns off autosizing function
zoomat,x#,y#zooms into plot centered at x#,y#, turns off autosize function. Use size,s# to restore.
zoomcenterzooms into center of circles and walls, sets zoom factor to display all circles and walls
zoomdownzooms down half a screen
zoomleftzooms left half a screen
zoomprintzooms circles and walls into right half of screen so a 'list/listw/listp' doesn’t overwrite graphics
zoomrightzooms right half a screen
zoomupzooms up half a screen

Operating Functions:
dir(,&directory/&filename)displays the directory of &directory (or the default directory) or a specified &filename
exitexits the Circles program
file,&filenameaccepts input from &filename; note &filename must be a maximum of 8 characters
helptypes help data
newinitializes Circles program, removes all previous data
save,&filenamesaves circle data in &filename; note &filename must be a maximum of 8 characters

Housekeeping Functions:
clsclears the screen
consets input to console

Shortcuts to Functions:
The following shortcut versions of the commands exist:
'cx''centerx''quad''quadrant''zc''zoomcenter'
'cy''centery''rad''radius''zd''zoomdown'
'cir''circle''rep''replicate''zl''zoomleft'
'del''delete''rot''rotate''zp''zoomprint'
'dx''delta''shx''shiftx''zr''zoomright'
'kill''killquadrant''shy''shifty''zu''zoomup'
'mirx''mirrorx''sur2''surround2'
'miry''mirrory''sur3''surround3'

Recovery from Common Errors:
size,1 (or zoom,1)if plot only shows last circle id# at origin such as when a size,0 or zoom,0 is issued

Use of Directory Structures in "Save," "File," "Output," and "Dir" Functions:
The "save," "file," "output," and "dir" functions can be used with existing directories as follows: (Note that filenames must not exceed 8 characters.)
save, FILES\filenamewhere FILES is an existing subdirectory under the directory where Circles is installed.
save, \FILES\filenamewhere FILES is an existing directory off the root drive.
save, C:\FILES\filenamewhere C:\FILES is an existing directory on Drive C: (same as previous example).
save, ..\FILES\filenamewhere FILES is an existing directory off the parent directory where Circles is installed. (Note that ".." is a DOS directory structure referring to the parent directory.)


General Use of and Introduction to Circles Commands (Including Three Practical Examples)

The Circles program allows for simplified generation of the coordinates for cylindrical container placement and the placement of reflective water walls around a container array. The program displays the x-and y-axes along with circles denoting the two-dimensional projection of upright cylindrical containers and rectangles denoting vertical slab water walls on the x,y coordinate system. The program starts with the credits screen and the command prompt is active at the top left corner of the screen. A "plot" or "new" command can be issued to bring up the coordinate system grid. A previously stored file can be read into the program to initially locate circles. (Note that a previously stored file can be read into the program at any time, allowing for the addition or manipulation of circles and walls based on the stored data.) All commands are issued with variables, as appropriate, separated by commas.

If this is a new arrangement being generated, a "circle" command is issued to place the first circle. Note that many of the functions use the x- and y-axis along with location of an existing circle or circles to locate new circles. The use of the x- and y-axis facilitates modeling of corners and walls and allows for the consistent placement of circles around and along them. Each circle generation function requires that a circle number be assigned or specified as part of the command. The only exception to this is the "mirrorx" and "mirrory" commands, which autonumber unique mirrored circles.

Let us assume that several bottles are being modeled in the corner of a glovebox. The outside edge of the glovebox will be reflected. The largest and most reactive bottle is to be placed at the corner of the box. Therefore, a "circle" command is issued to place the initial circle in the corner. If, in this example, the bottle has a radius of 5.08 cm and we want to space the bottle 0.0001 cm from the edge of the corner (to assure ourselves that no intersection errors will occur), a "circle,1,5.0801,5.0801,5.08" command is issued. A circle identified as "1" will be located at the x,y coordinate of 5.0801,5.0801 with a radius of 5.08. The circle will be plotted and, if a "list" command is issued, the listed values for the circle will be the same. Subsequent circles will be added with the other circle generation commands; but, to alleviate intersection errors (associated with certain computer codes that may use this data), a delta spacing of 0.0001 cm will be used. A "delta, 0.0001" command is issued and all subsequent circles (other than those placed using the "circle" command) will be spaced 0.0001 cm from the x or y-axis and/or the circles specified as variables in the commands. Next, let us assume that a set of three 2.54-cm radius containers are to be placed around the first container. We'll start by positioning the first of the 2.54-cm radius containers along the y-axis wall and next to the first container. A "ytop,2,1,2.54" command is issued. A circle identified as "2," with a radius of 2.54, will be located next to the y-axis and on top of circle "1." The next two containers will be added in contact with the previous container and next to circle "1." A "pack,3,2,1,2.54" command is issued to pack circle "3," with radius 2.54, between circle "2," the last circle, and circle "1," the container in the corner. Another "pack,4,3,1,2.54" command is used to place the third and final 2.54-cm radius container around the most reactive container and next to the last container.

Finally, a 3.81-cm radius container is to be added. It's most reactive position will again be next to or as close to the most reactive container as possible. It's close proximity to a glovebox wall will also assure a conservative model because of the reflection. A "pack,5,4,1,3.81" command is issued to pack the 3.81-cm container, now identified as circle "5" next to circle "4," the last 2.54-cm container, and circle "1," the most reactive container. Notice though, that circle "5" crosses the x-axis and would therefore intersect a reflector modeled on the outside of the corner. Hence, a "xpos" command must be issued to located the container next to the x-axis wall and keep it in contact with the array of containers. Therefore, a "xpos,5,1,3.81" command is issued to locate the 3.81-cm container next to the x-axis and in contact with most reactive container. This command can also be issued as "xpos,5,1" without specifying the radius because circle "5" already exists and its radius will be used as the default. First, notice that since circle "5" was used in the command that it was moved to a new location; second, notice that circle "5" now intersects with circle "4." To get around this intersection problem, either circle "4" or "5" must be moved; so, either a "xpos,5,4,3.81" command or a "pack,4,3,5,2.54" command must be issued. Because, in this example, the 3.81-cm container is determined to be more reactive, the later command is used to tightly pack all the bottles.

Since we have made significant progress, it is a good idea to temporarily save the data if we're going to make subsequent changes or need to access it in the future. The file is saved, in this example, by issuing a "save,5bottle" command to save, the data to a file named "5bottle.cir." (The .cir extension is added automatically. The file may subsequently be read by issuing a "file,5bottle" command.) Prior to major circle (and/or wall) manipulations, it is a good idea to save the data to file to aid in recovery from typos and mistakes. (Mistakes in generation and manipulation can be remedied by reissuing commands. Because circle generation may involve several different commands and manipulations in specific sequences, it is generally more complex to recover from errors involving circles commands and, hence, it is strongly recommended that data be periodically saved. Wall manipulations can be remedied by reissuing wall generation on a fairly simple basis.)

Next, for this example, the position of water walls are calculated such that a 2.54-cm water reflector is generated around the container array. The 2.54-cm water walls take account of and bound reflection from hands and various pieces of equipment in the glovebox. A "wall,2.54" command is issued to generate the water walls. This command may take a few seconds to calculate the position of an array of rectangular walls that enclose the array of containers located in the corner. The resulting coordinates provide a continuous, non-intersecting array of rectangular walls. (Sometimes the division of water walls may not be desirable for the problem being modeled. In that case, a "wall,0" command should be entered to provide a starting point for defining water walls. The analyst while editing the input deck should then inflate the water walls. This will allow the analyst to determine wall divisions advantageous to the problem being modeled.) Note that the walls are spaced a delta of 0.0001 cm from the circles because the delta spacing value is still specified. Also note that the walls extend outside of the corner into the other quadrants defined by the x- and y-axes. Since, in this example, we are only generating circles and walls within a corner, the water walls must be truncated such that they do not extend past the corner walls (i.e., the x- and y-axes). This is done by issuing a "quadrant,1" command. The resulting plot shows the water walls only defined in the first quadrant of the x-y coordinate system. At this point, a "save" command may be issued to add the water wall data to the saved file.

A "list" and "listw" command can be issued to retrieve coordinate data for circles and walls, respectively. (Note that this could also have been issued as a "listp" command if both the circle and water wall coordinates are wanted at the same time.) This water wall listing includes the coordinates and reference to the originating circle for the water wall. This is contained under the "O" heading and refers to the wall orientation and associated circle it was generated for. L, T, R, and B refer to the left, top, right, and bottom side of the associated circle. (Note that because these walls are consolidated to minimize complication and split to address intersections, the circle called out in the listing as being associated with the wall may not be the nearest and only circle that could be associated with the wall.) The wall coordinate data can be entered by hand into computer input files or the "output" command can be used to generate a simplified KENO-V.a input deck using the circle and wall configuration generated within Circles. An "output,5bottle" command is issued to generate a roughed-out KENO-V.a input deck. (An .inp extension is added automatically so that the file name may be used for both the circles data file and the input deck file. Note that the .inp file can not be read by the Circles program.) The file generated by the "output" command is ready to be run by either KENO-V.a or KENO-3D. In generating the file, certain parameters are assumed. Each cylinder is assumed to be unique and therefore may be redundant. Note that line comments in the generated input deck provide a reminder of what needs to be changed. The generation of a finalized input deck requires revision to title cards, mixtures, parameters, +Z and -Z dimensions for cylinders, water walls, and the global unit so that the input deck represents the system being modeled. Additionally, units may need to be adjusted and horizontal water walls may need to be added.

Figure #1 provides a look at the final Circles Program screen after a "zoomprint" and a "listp" command have been executed. Example #1 provides the KENO-V.a input deck generated in this example. This can be compared to the saved file for this example in Example #2. Note that the saved file does not reissue the commands used to originally generate the example but, rather, the file saves the commands required to recreate the position of circles and regenerate the water walls associated with the example.


Figure #1: Final Circles Program Screen.
(Click on image for larger, more detailed version)

Example #1:

=CSAS25
INPUT GENERATED FROM CIRCLES PROGRAM
'revise title cards, mixtures, parameters, and adjust units as appropriate
27GROUP  INFH
UO2        1 0.5952 293 92235 100 END
H2O        1 0.4048 END
H2O        2 1.0 END
END COMP
INPUT GENERATED FROM CIRCLES PROGRAM
READ PARAM NPG=1000 GEN=300 NUB=YES TME=100 END PARM
READ GEOM
'replace +Z and -Z dimensions for cylinders
'replace +Z and -Z dimensions for water walls
'replace +Z and -Z dimensions for global unit
UNIT   1
COM='CONTAINER'
CYLINDER 1 1     5.0800 10.0 0.0
UNIT   2
COM='CONTAINER'
CYLINDER 1 1     2.5400 10.0 0.0
UNIT   3
COM='CONTAINER'
CYLINDER 1 1     2.5400 10.0 0.0
UNIT   4
COM='CONTAINER'
CYLINDER 1 1     2.5400 10.0 0.0
UNIT   5
COM='CONTAINER'
CYLINDER 1 1     3.8100 10.0 0.0
UNIT 101
COM='CYLINDER   2 +Y WATER WALL'
CUBOID 2 1   10.1600    0.0003   17.3447   14.8047 10.0 0.0
UNIT 102
COM='CYLINDER   3 +X WATER WALL'
CUBOID 2 1   12.7005   10.1605   17.3447   12.4529 10.0 0.0
UNIT 103
COM='CYLINDER   4 +X WATER WALL'
CUBOID 2 1   17.2035   14.6635   14.9929    7.6204 10.0 0.0
UNIT 104
COM='CYLINDER   4 +Y WATER WALL'
CUBOID 2 1   14.6630   12.7006   14.9929   12.4529 10.0 0.0
UNIT 105
COM='CYLINDER   5 +X WATER WALL'
CUBOID 2 1   20.2293   17.6893   10.1604    0.0001 10.0 0.0
UNIT 106
COM='CYLINDER   5 +Y WATER WALL'
CUBOID 2 1   17.6888   17.2036   10.1604    7.6204 10.0 0.0
GLOBAL
UNIT 200
COM='CONTAINERS AND WATER WALLS'
CUBOID 0 1    20.2294    0.0000   17.3448    0.0000 10.0001 -0.0001
HOLE   1    5.0801    5.0801 0.0
HOLE   2    2.5401   12.2644 0.0
HOLE   3    7.6202   12.2644 0.0
HOLE   4   12.1232    9.9126 0.0
HOLE   5   13.8790    3.8101 0.0
HOLE 101    0.0       0.0    0.0
HOLE 102    0.0       0.0    0.0
HOLE 103    0.0       0.0    0.0
HOLE 104    0.0       0.0    0.0
HOLE 105    0.0       0.0    0.0
HOLE 106    0.0       0.0    0.0
END GEOM
END DATA
END

Example #2:

"size",1
"circle",1,5.0801,5.0801,5.08
"circle",2,2.5401,12.26441091308594,2.54
"circle",3,7.620199898044691,12.26437555657814,2.54
"circle",4,12.1231611440712,9.912619020577951,2.54
"circle",5,13.87901872406006,3.8101,3.81
"delta",.0001
"wall",2.54
"kill",2
"kill",3
"kill",4
"con"

Second Practical Example. Another example is the modeling of three 11-liter bottles in a 55-gallon drum. The 55-gallon drum is assumed to be located in a corner to maximize potential reflection conditions. The model can be generated in several different orientations. In this case, it is desirable to model the three 11-liter bottles in two different configurations that would bound all possible configurations. The first configuration is with the three bottles in a tight-packed triangular-pitched arrangement within the drum next to one of the corner walls. The other is with the three bottles tightly packed along the inner circumference of the drum next to one of the corner walls.

The first configuration is generated by first specifying a "circle,10,0,0,28.1483" command to place a circle representing the inside of a 55-gallon drum centered on the y-axis. (Issue a "new" command prior to this if the previous practical example is still displayed by the Circles program.) The y-coordinate for the circle could have been located at a different position (as will be done later) but it was set at zero for the simplicity of entering the circle. A "delta,0.0001" command is entered as the previous examples to provide a 0.0001 buffer space between the circles as they’re created. (If the "delta" was previously set before the "new" command was issued, it was reset to zero by the "new" command and, hence, still has to be set to the desired value.) A "shiftx,-0.0001" command is issued to offset the drum just slightly from the y-axis. This could have been done initially when the command to create circle "10" was issued (as "circle,10,-0.0001,0,28.1483" instead). This is done so that the subsequent placement of an 11-liter cylinder via the "ybot" command places the circle to the left of the y-axis (i.e., the negative side of the x-axis). If circle "10" were left sitting on the y-axis, the resulting circle created by the "ybot" command would also be located on the y-axis (i.e., with an x-coordinate of zero). A "ybot,1,-10,5.842" command is issued to place circle "1" with a 5.842 cm radius, the outside diameter of an 11-liter bottle, next to the y-axis and inside of circle "10." The negative sign in front of the circle id# indicates that circle "1" is to be placed inside circle "10." The second 11-liter bottle is placed using a "pack,2,-10,1,5.842" command to place it within circle "10" and next to circle "1" with the same radius. Again, the negative circle identification number within the "pack" command specifies that circle "2" is to be packed inside circle "10" such that as one traverses circle "2" through circle "10" to circle "1" the direction is counter clockwise. (The resulting packed circle, with radius r#, results in the center of circle "id#" being the starting point following a counter clockwise arc around to circle "c1#" and then to circle "c2#" if the command is issued as "pack,id#,c1#c2#,r#." Sometimes while determining which circles to specify in sequence, it is easier to envision circle "id#" being placed on the clockwise portion of an arc formed from the center of circle "c1#" to circle "c2#.") The last 11-liter bottle is packed on top of the other two bottles with the "pack,3,1,2,5.842" command. In this case, circle "3" is packed on top of circles "1" and "2." (This also could have been done by replicating circle "1" two times with a "rep,2,1" and a "rep,3,1" command and packing the 11-liter bottles using the default radii with the "pack,2,-10,1" and "pack,3,1,2" commands.)

The outside diameter of the 55-gallon drum is created with the "replicate,11,10" command to create a new circle "11" based on the existing coordinates for circle "10", the inner drum surface for the 55-gallon drum, followed by a "radius,11,28.257" command to expand the radius out to its outer diameter. (This also could have been done by just increasing circle "10’s" radius to that of the outside diameter of the 55-gallon drum, after having placed the bottles, by issuing a "radius,10,28.257" command.) A "shiftx,1" command is used to arbitrarily nudge the center of the circles array toward the positive side of the y-axis and a "pushy" and "pushx" command are used to place the finished array into the corner. The "push" commands push the circles (and water walls if present) to the edge of the particular axis specified. The side of the axis is determined by the center of the array.

The arrangement is saved or viewed using the "list," "save," or "output" commands. Figure #2 provides a look at the final Circles Program screen after a "zoomprint" and a "list" command have been executed.


Figure #2: Three Bottles in a Tight-Packed Triangular-Pitched Arrangement within a Drum.
(Click on image for larger, more detailed version)

The second configuration, with the three bottles tightly packed along the inner circumference of the drum, is generated more easily by either first deleting the 11-liter bottles using the "del,1", "del,2", and "del,3" commands or just applying the following circle generation commands to the existing 11-liter bottle circles. (One could also start "new" by recreating the drum with a "circle,11,28.2571,28.2571,28.257" command, a "replicate,10,11" command, a "radius,10,28.1483" command, and a "delta,0.0001" command.) The first 11-liter bottle is placed closest to the corner wall but inside the 55-gallon drum using the "bot,1,-10,5.842" command (if circle "1" hasn't been deleted, the command can be shortened to "bot,1,-10""). (Note that if circle "10" was previously redefined with a radius of 28.257, it will have to be revised back to a radius of 28.1483 so that the 11-liter bottles pack along the inside of the drum, since steel is assumed between the inside and outside diameters.) The second 11-liter bottle is placed to the right of the first with a "pack,2,1,-10,5.842" command (again, if circle "2" hasn't been deleted, the command can be shortened to "pack,2,-10") and the third is placed to the left with a "pack,3,-10,1,5.842" command ("pack,3,-10" if circle "3" exists). Again, a "list," "save," or "output" command is issued to obtain the coordinate information and the final Circles Program screen is shown in Figure #3.


Figure #3: Three Bottles Tightly Packed Bottles Along the Inner Circumference of a Drum Oriented Along a Wall Next to a Corner.
(Click on image for larger, more detailed version)

This arrangement can be turned as shown in Figure #4, if one is required to determine that the corner reflection from a circular drum is less reactive than the wall reflection. This is accomplished by issuing a "rotate,-45" command followed by a "pushy" and "pushx" command to realign the drum to the corner.


Figure #4: Three Bottles Tightly Packed Bottles Along the Inner Circumference of a Drum Oriented Next to a Corner.
(Click on image for larger, more detailed version)

Third Practical Example. Another example is the modeling of two 2-liter bottles next to an 11-liter bottle in a birdcage drum. The birdcage drum is assumed to be located in a corner to maximize potential reflection conditions. The model can be generated in several different orientations using the two 2-liter bottles. One could initially place the birdcage drum in the corner by issuing a "circle,10,28.2571,28.2571,28.257" command, assuming the birdcage drum radius is 28.257 cm in this example. The 11-liter bottle located in the inner sleeve of the drum could be placed by issuing a "replicate,1,10" command followed by a "radius,1,5.842" command to first locate the 11-liter cylinder (circle "1") in the center of the birdcage drum (circle "10") and then change its radius to 5.824 cm. The first 2-liter bottle placed next to the 11-liter bottle could be placed by a "bot," "left," "right," or "top" command with the subsequent bottle placed with a "pack" command. But, since the 2-liter bottle is a different size, any water walls built around the two bottles will have extra walls that will generally make the problem a little more complicated to model. See Figure #5. It would be desirable to simplify the model such that one of the 2-liter bottles shares the same wall as the 11-liter bottle on one of its sides. See Figure #6.


Figure #5: Two-Liter Bottle Placed to Right of 11-Liter Bottle (Note Jag in Bottom-Most Water Walls Requiring Two Extra Water Walls to Model). Figure #6: Two-Liter Bottle Placed Slightly Up and to the Right of the 11-Liter Bottle (Note Continuous Common Bottom-Most Wall Resulting in Fewer Water Walls).
(Click on image for larger, more detailed version)(Click on image for larger, more detailed version)

To model the arrangement as shown in Figure #6, the arrangement is generated differently than from above. First, the 11-liter bottle is placed in corner using a "circle,1,5.8421,5.8421,5.84" command. A delta spacing of 0.0001 is specified using "delta,0.0001." The first 2-liter bottle is placed to the right of the 11-liter bottle with the "xpos" command that will pack the bottle between the x-axis and the 11-liter bottle. A "xpos,2,1,6.35" command is issued and a "pack,3,1,2,6.35" command is issued to placed the second 2-liter bottle. One-inch water walls are built around the bottle array by issuing a "wall,2.54" command. Next, a "replicate,10,1" command followed by a "radius,10,28.257" command defines the outside of the birdcage drum. A "pushx" and "pushy" command are used to move the birdcage drum and bottle arrangement into the corner as shown in Figure #6. As before, a "zoomprint," "listp," and "{print screen} key" command are issued to capture the final Circles Program screen. If the geometry is going to be subsequently reused, a "save" command would be issued to save the information to disk. See the discussion in the next section concerning advanced applications using the Circles input file functions.


Guide to Circles' Input Files

Circles' "save" and "file" functions provide memory and repetitive routine capabilities. Once a basic model is generated in Circles, "save" it to a file to recall later, allowing subsequent modifications without retyping circles data. (Circles automatically saves the file with a .cir extension unless otherwise specified. The "file" function automatically reads the file with the .cir extension unless otherwise specified.) In this way, minor variations to a complex Circles' layout can be done easily without retyping particular redundant parameters. This file can be read over an existing file or read into a "new" plot. Therefore, if existing circles need to be repositioned, an earlier saved file can be executed to reposition them. If particular circles need to be added to a series of plots, number the circles with unique numbers and "save" them and read them back into plots as needed. Example #3 is a sample file generated by the "save" function. Additionally, the input files can be used to generate plots (and coordinate systems) for systems that may have the same relationships (e.g., circle "4" is to the right of circle "1":, whose radius is routinely changed) but have slightly different dimensions. In this manner, minor changes entered into the file by hand can be read into Circles without retyping. Example #4 is a sample file modified in a text editor to read into Circles via the "file" function. It takes an existing circle "1" (assumed to be placed at 0,0 as if generated with a "circle,1,0,0,6.35" command or a "radius,1,6.35" command.) and uses it to make two more circles of the same radius and packs them into a triangular pitched array in the corner. Note that all edited files must end with "con" to redirect the input back to the console. All functions must appear surrounded by quotes and all functional parameters must be separated by commas. Commas go on the outside of the quotes. Only one function per line.. (If comment lines are desired within the file, place them in quotes similar to the commands.)


Example #3:

"circle",1,6.121,6.121,6.121
"circle",4,17.27461785888672,5.081,5.081
"size",.96
"delta",0
"con"

Example #4:

"delta",0.0001
"pushy"
"pushx"
"rep",2,1
"rep",3,1
"xpos",2,1
"pack",3,1,2
"zp"
"con"


Advanced Uses of Circles Functions (Including Two Practical Examples)

The complex models can be generated with the Circles program if the individual takes advantage of the full array of functions provided by the program. For example, the "flipx," "flipy," and "rotate" functions can be used to adjust old models to new orientations. An example would be to move an already modeled array of bottle around the coordinate system to model them in a different corner. The "shiftx" and "shifty" commands can be used to move an array being modeled to different locations to allow use of the coordinate walls in placing new circles. An example would be to use to move already generated circles array, aligned along a coordinate wall, such that an additional corner or rectangular piece of equipment accounted for near areas where new bottles are to be placed. Remember that the coordinates for the existing circles can be viewed with the "list" command so that hand calculations can be performed, if necessary, to determine the amount of displacement needed with the "shiftx" or "shifty" command. In this manner, an existing array of circles can be displaced a particular amount to allow for the placement of new circles. An example is offered below after the first example. After new bottles are placed around the revised coordinates, a "shiftx" or "shify" may be used to restore the array to the original coordinate system. Also note that a "pushx" or "pushy" could be used. Additionally, the "delta" spacing between circles can be changed, as needed, to provide additional spacing between circles being added to the problem. (Note that the "delta" spacing should be reset to the desired value if subsequent circles are to be added or water walls are to be generated. Since the "wall" function uses the "delta" spacing in generating water walls, subsequently generated water walls will be spaced the "delta" amount off the circle array, if it isn't reset. Note, that as such, water walls can be spaced any particular distance from the circles array by specifying a "delta.") Similarly, the "centerx" and "centery" commands can be used to center a generated array before final modeling. Also because "centerx" and "centery" use the "zoom" display function, the coordinates for the center of the array at listed at the bottom right corner of the screen. Finally, the size of the circles themselves can be temporarily modified to allow modeling of some complex geometries. The following example will illustrate this.

Additional Practical Example A. Let us assume that four bottles are being modeled in the corner of a concrete wall. One is a large reactive bottle of a simple cylindrical design. The second one is a slightly smaller but still reactive bottle with a squared off shoulder and a tall neck. The other two bottles are small sample containers. The largest and most reactive bottle is to be placed at the corner of the box by issuing a "circle,1,6.1201,6.1201,6.12" command since the bottle radius is 6.12 cm. A "delta, 0.0001" command is issued to eliminate intersection errors (associated with particular computer code being used). Hence, all subsequent circles (other than those placed using the "circle" command) will be spaced 0.0001 cm from the x or y-axis and/or the circles specified as variables in the commands. The second bottle is added using a "ytop,2,1,5.08" command to place the bottle against the y-axis wall and next to the first bottle (circle "1"). Let us assume that we want to model the two smaller sample containers on top of the shoulder of the second bottle next to the first bottle. This is done because the height of the shoulder of the second bottle is such that the sample containers will interact well with the tall neck of the second container and the side of the large first bottle. To allow for the placement of the sample containers in contact with the neck portion of the second bottle, the neck portion must also be modeled. The neck is placed with a "replicate,12,2" command followed by a "radius,12,2.54" comand to place the 2-in. diameter neck at the center of circle "2". (Note that the circle was numbered "12" to allow subsequent circles to have the numbers "3" and "4" and associate the neck with the main bottle portion, circle "2".) The first of the 2-in. diameter sample containers is packed tightly against the neck of the second bottle and the side of the first bottle using a "pack,3,1,12,2.54" command. Upon issuing the command, one can see that the sample container added has to extend past the wall to fit in this location. See Figure #7.


Figure #7: Arrangement with First and Second Bottle Against Wall and Third Bottle Tightly Packed Between the First Bottle and the Neck of the Second Bottle.
(Click on image for larger, more detailed version)

Therefore, to fit the sample container against the wall while still being tightly packed against the first and second bottle, the second bottle must move out away from the wall. Determining the coordinates for where the second bottle must be placed can not be accomplished directly because the sample container must be tightly packed to the wall, the side of the first bottle, and the tall neck of the second bottle while the second bottle's body must be in contact with the first bottle. To do this, we first place the sample container against the wall and the first bottle by issuing a "ytop,3,1,2.54" command. Next, we increase the radius of the first bottle by the difference between the outside of the tall neck and the body of the second bottle. This will allow us to tightly pack the neck of the second bottle next to the sample container (circle "3") and the enlarged first bottle (circle "1"). Because the radius of the first bottle includes the space between the outer edge of the second bottle and the neck, the second bottle will be properly spaced so that it is tightly packed against the first bottle. To do this, we issue a "radius,1,8.66" command to expand the radius while keeping the bottle located at its current coordinates. See Figure #8. Note that the neck of the second bottle is now in contact with the enlarged first bottle.


Figure #8: Enlarged First Bottle in Contact with Second Bottle's Neck after the Third Container has Been Placed But Before the Second Bottle has Been Repositioned.
(Click on image for larger, more detailed version)

A pack command is issued to place the neck of the second bottle (circle "12") in tightly against the sample container (circle "3") and the enlarged first bottle (circle "1") as "pack,12,3,1,2.54." Next, the second bottle body is aligned with the bottle's neck by issuing a "replicate,2,12" command to obtain the neck's coordinates and issuing a "radius,2,5.08" command. Finally, a "radius,1,6.12" command is issued to resize the first bottle to it's original radius. The fourth bottle, that is the second sample container, is placed using a "pack,4,12,1,2.54" command. The resulting arrangement is shown in Figure #9.


Figure #9: Final Bottle Arrangement.
(Click on image for larger, more detailed version)

Additional Practical Example B. Another example, which uses the "shiftx" command, involves modeling two containers in a corner. One is a simple cylindrical bottle. The second is a cylindrical container with two larger flanges at the top and bottom. The flanges separate other similar containers by the amount of the flange and space the container off any large surface by the amount of the flange. The problem is that the height of the container is such that a shorter container will fit in between the flanges and can be in contact with the central section of the container.

To derive the coordinates for this, we first place either container in the corner. For this example, we'll assume we're going to place the first bottle in the corner. This is the same first bottle as above. A "circle,1,6.1201,6.1201,6.12" command is issued followed by a "delta,0.0001" command. We want to place the second container tight against the wall and the first bottle; but, since the flange restricts the proximity of the central portion of the container from the wall but not from the bottle, we must first "shift" the first bottle in a negative x direction by the amount of spacing provided by the flange. In this manner, we will have accounted for the spacing provided by the flange when we place the second container, with its central section diameter, next to the first bottle and the wall. The second container has a central section diameter of 4-3/4 inches and flange has a 7-1/4-inch diameter. Therefore, to do this, we issue a "shiftx,-3.175" command, to shift the first bottle over by the amount of the flange (i.e., half of 7-1/4 in. minus 4-3/4 in. converted to centimeters). Issue a "ytop,2,1,6.0325" command to position the central section of the second container against the wall and on top of the first bottle. See Figure #10. Next, we issue a "shiftx,3.175" command or a "pushy" command to move the containers back to their intended position in the corner. The final arrangement is shown in Figure #11. (To allow one to confirm that the flange is in the proper position, the flange is added as circle "12".)


Figure #10: Shifted First Bottle Next to Central Section of Second Bottle.Figure #11: Final Arrangement with First Bottle Inside Second Container's Flange and Second Container Against the Corner Wall.
(Click on image for larger, more detailed version)(Click on image for larger, more detailed version)


How to Generate Hoop Models (Including a Practical Example)

A fairly standard model used for handcarry involves the modeling of an array of containers surrounded by a hoop (i.e., 1-in. thick truncated-hemicylinder of water representing hands and arms) against a slab (i.e., a 24-in. wide, 4-in. thick, 72-in. tall water wall representing a person). See Figure #12 for an x-y cut of the model. See Figure #13 for the Circles Program screen with the circles generated to provide coordinates for the model.


Figure #12: Handcarry Hoop Model X-Y Cut.Figure #13: Circles Programs Screen Providing Listing.
(Click on image for larger, more detailed version)

Use the Circles program to place the circles (i.e., containers) in the position to be analyzed. Center the array on the y-axis (at x=0) using the "centerx" command. Use the "surround2" or "surround3" command to generate a tight-fitting cylinder that will be used to develop the truncated hemicylinder. Either generate a KENO-V.a input deck using the "output" command and edit it as follows or use the data displayed via the "list" command.

The hoop unit is generated by first generating the enclosing truncated hemicylinder as follows. For this example from Figure #12 and #13, circle "10" is the surrounding circle. It has a "radius" of 15.2901 and a "y-coordinate" of 3.6690. The enclosing truncated hemicylinder is defined as:

ZHEMICYL+Y 0 1 "radius" +Z -Z chord "y-coordinate" origin 0.0 "y-coordinate".

Therefore, using the example, the first card of the hoop unit would be:

ZHEMICYL+Y 0 1 15.2901 +Z -Z chord 3.6690 origin 0.0 3.6690, where +Z and -Z represent the z-coordinates necessary to enclose the containers modeled therein.

The containers are holed into this enclosing truncated hemicylinder using the coordinates as follows:

HOLE "number" "x-coordinate" "y-coordinate" "Z-offset".

Therefore, using the example, circle "1" would be holed in to the unit as:

HOLE 1 5.0800 5.0801 Z-offset, where Z-offset is the z-coordinate offset from the center of the model, usually zero.

(Note these holes are already generated in the global unit of the file generated by the "output" command. Of course, HOLE 10 in the "output" file must be delete as well as the first card of the global unit if that unit is to be used to generate the hoop unit.)

After holing all the containers, define the 1-in. thick truncated-hemicylinder of water as:

ZHEMICYL+Y 2 1 "radius+2.54cm" +Z+2.54 -Z-2.54 chord "y-coordinate" origin 0.0 "y-coordinate".

Therefore, using the example, the 1-in. hoop card would be:

ZHEMICYL+Y 2 1 17.8301 +Z+2.54 -Z-2.54 chord 3.6690 origin 0.0 3.6690, where +Z+2.54 and -Z-2.54 represent the z-coordinates necessary to enclose the containers modeled therein with the addition of 1-in. of water on top and bottom.

The slab person is generated next by enclosing the hoop in a void cuboid defined by:

CUBOID 0 1 2p30.48 "radius+2.54+chord+0.0001" 0.0 +ZSLAB -ZSLAB. (Note that a 0.0001 cm spacing is added to avoid intersections.) Using the example, the void cuboid would be:

CUBOID 0 1 2p30.48 21.4992 0.0 +ZSLAB -ZSLAB, where +ZSLAB and -ZSLAB represent the dimensions for the 182.88-cm (72-in.) height, usually input as "2p91.44".

Finally, the 4-in. water thickness is added as:

CUBOID 2 1 2p30.48 "radius+2.54+chord+0.0001" -10.16 +ZSLAB -ZSLAB.

Using the example, the water slab cuboid would be:

CUBOID 2 1 2p30.48 21.4992 -10.16 +ZSLAB -ZSLAB, again where +ZSLAB and -ZSLAB represent the dimensions for the 182.88-cm (72-in.) height, usually input as "2p91.44".

The finished hoop unit should look like Example #5.


Example #5:

ZHEMICYL+Y 0 1   15.2901 +Z -Z chord 3.6690 origin 0.0 3.6690
HOLE   1    5.0800    5.0801 0.0
HOLE   2   -5.0801    5.0801 0.0
HOLE   3    0.0000   13.8790 0.0
HOLE   4    7.4588   12.3194 0.0
HOLE   5   12.2644    2.5401 0.0
HOLE   6   11.4804    9.2155 0.0
HOLE   7   -7.4588   12.3194 0.0
HOLE   8  -12.2644    2.5401 0.0
HOLE   9  -11.4804    9.2155 0.0
ZHEMICYL+Y 2 1   17.8301 +Z+2.54 -Z-2.54 chord 3.6690 origin 0.0 3.6690
CUBOID 0 1 2p30.48 21.4992   0.0  2p91.44
CUBOID 2 1 2p30.48 21.4992 -10.16 2p91.44


Complete Alphabetical List of Commands/Functions (With Expanded Explanations)

{Print Screen} key
Under the Windows operating environment, the keyboard {Print Screen} key pastes the screen to the clipboard as a bitmapped graphic. Use the "paste" or "paste special" function found in the "edit" menu of specific programs to paste from the clipboard into a program. The pasted bitmapped image is 640x400 pixels and, although it is monochrome the program that you paste the image into will recognize it with the default resolution of your display. This leads to a large graphics file. It is recommended that the image should be pasted into a graphics program first and reduce the number of colors to 2 (i.e., black and white). Consideration should also be given to inverting the colors, if necessary, such that text and the plot are in black and the background is in white. MS Paint, which comes with Windows, is a recommended graphics program because it’s simple and fast. (In Windows 95 MS Paint, first make sure the default attributes for the graphics are via the "Attribute..." command under the "Image" menu are set to a small size such as a width and height of 10 x 10 pels and black and white under colors. Next paste in the image from the clipboard via the "Paste" command in the "Edit" menu or hitting Ctrl-V. Next select the "Invert Colors" command, if necessary, under the "Image" menu. Resize the file and/or erase aspects, if desired. Finally, either copy and paste the file into an OLE program or save the file. Many times it is helpful to just print the file directly from MS Paint if a permanent copy is not wanted.) Under true DOS, the keyboard {Print Screen} key prints the screen as is, including graphics (if the DOS runtime module, HPscreen.exe has been loaded separately or as part of the Circles batch file).

bot,id#,(-)c1#(,r#)
packs a circle with ID number, id#, and radius, r#, directly below (in the -y direction from) circle c1#, if c1# is positive. The radius, r#, may be omitted from the command if circle id# currently exists in the plot and its current radius is desired to be used. If c1# is negative, the resulting circle is packed on the bottom inside of circle c1# (i.e., the most negative -y portion inside circle c1#). The resulting circle center is aligned along the same x-coordinate as circle c1#. The resulting circle is packed tightly to circle c1# and is spaced by the amount specified by the "delta" function. (A small spacing, e.g. 0.0001, is usually specified by the "delta" command to assure that no intersection errors will occur. Certain computer codes that may use this data will have intersection errors if a small spacing is not added.) This command is used to pack circles directly below an existing circle. If a circle needs to be placed below another circle but not directly below, refer to the "ybot" and "pack" commands.

centerx
centers the array of circles and walls at x=0 (i.e., on the y-axis). This command centers the overall array x-coordinate. This command can be confused with "centery" because all other commands that contain an "x" or a "y" refer to the axis upon which the command works. In this case, the command centers the overall x-coordinate at zero, which is on the y-axis; but the command refers to the centering of x-coordinates not the axis. Remember that if the x-coordinates need to be centered, a "centerx" command has to be issued.
centery
centers the array of circles and walls at y=0 (i.e., on the x-axis). This command centers the overall array y-coordinate. As discussed above, this command can be confused with "centerx." Remember that if the y-coordinates need to be centered, a "centery" command has to be issued.
cir,id#,x#,y#(,r#)
is the shortcut for the 'circle' command.
circle,id#,x#,y#(,r#)
The "circle" command places a circle of ID number, id#, and radius, r#, with its center at x#,y#. The radius, r#, may be omitted from the command if circle id# currently exists in the plot and its current radius is desired to be used. Note that id# must always be a positive, non-zero integer and r# must be positive and non-zero. The Circles program currently can not handle an id# greater than 50. (A circle with a zero radius is treated by the majority of commands as a deleted circle, i.e., it is not plotted, listed, or treated in any circle manipulation commands, with the exception of a few commands such as "move." Note that a "radius" command can be used to regenerate a zero-radius circle at its previously specified position so that a circle can be temporarily deleted and regenerated fairly simply. A zero-radius circle is nothing more than a point as such it can be used in circle generation commands such as "top," "left," "xpos," and "pack" among others. If a point is desired, it is suggested that a very small radius circle be generated instead of a zero-radius circle. In this way, the position of the point will be plotted and listed and you will be assured that all associated commands will work with it.) The units of measure associated with x#, y#, and r# are at the discretion of the user; but it is suggested that, for the ease of transferring the generated data from this program over to another program, the unit of measure should agree with its end use. (Note, though, that due to the limitations of the code, the numbers should not be more than 1000 and less than 0.0001. This is not a problem for the vast majority of criticality safety modeling work. If values outside this range are required, transform the numbers used in the program by a given factor such that the numbers are within this range.) Note that r# is the radius, not the diameter. This command is the building block for all subsequent Circles commands and is usually the first command issued when a problem is being modeled. To place a circle in the center of the coordinate system, set the x# and y# values to zero. If the circle is to be placed in a corner, set the x# and y# values to +/- r# depending upon which corner the circle is to be placed in. (A small spacing, e.g. 0.0001, is usually added to these values to assure that no intersection errors with whatever is modeled in the corner will occur. Certain computer codes that may use this data will have intersection errors if a small spacing is not added.) For example, to place a circle in the third quadrant corner, x# and y# are each set to -r#. Note that the "circle" command does not use the delta spacing defined by the "delta" or "dv" function. The "cir" command is the shortcut for the "circle" command.
cls
clears the screen. This command serves little additional function because all the Circles data is retained. A subsequent "plot" command will re-render the plot on the screen. If the user wants to clear the data to generate new circles, a "new" command should be used.
con
sets the program input to the console/keyboard. This command is used at the end of circles input files read with the "file" command. This command must be at the end of an input file for control of the program to transfer to the user's keyboard. Note that this command may be omitted from the input file if Circles is run in a batch mode. In the case of a batch mode, the "exit" command must be at the end of the input file. Refer to the "Guide to Circles' Input Files" Section for further details.
cx
is the shortcut for the 'centerx' command.
cy
is the shortcut for the 'centery' command.

del,id#
is the shortcut for the 'delete' command.
delete,id#
deletes the circle with ID number id#. There is no command for deleting groups of circles. If multiple circles need to be deleted, they must be deleted one at a time. Note that a "new" command will delete all circles and all water walls. The "del" command is the shortcut for the "delete" command.

delta,dv#
adds a delta spacing of dv# between circles, walls, and the coordinate axes. The "delta" command affects the majority of circle and water wall generation and manipulation commands forcing the closest distance between generated circles and walls to be spaced by dv# from each other. Circles are also spaced from the coordinate axes for commands such as "ytop" and "xpos." And water walls are spaced from the coordinate axes after "quadrant" and "killquadrant" commands. (Water walls are not spaced from coordinate axes during formation; only from the array of circles.) The "delta" command affects all spacing between circles except for those generated with the "circle" command. Circles generated by the "circle" command are placed exactly at the coordinates specified in the command. Note that circles may still intersect if the circles were not associated through a command such as "pack" or "surround3." These commands do not check for all intersections; they only act on circles specified in the command. The "delta" command may be reissued several times to obtain different spacing between different circles and walls. When an input file is saved only the last specified "delta" is stored in the file; hence, when a "file" command is issued to load a circles arrangement, only the last delta is effective in generating new circles and walls. (Note, though, that circles are saved with their exact coordinates not by the relational commands issued to generate them; so, all saved circles are generated at their previous positions. This is not true for water walls, though. Water walls are regenerated at the end of the "file" read and are generated according to the saved delta spacing value.) The "dx" command is the shortcut for the "delta" command.
dir(,&directory/&filename)
displays the directory of &directory or confirms that a directory contains a specific &filename. If a &directory or &filename is not specified the default directory is displayed. Note that &directory and &filename must be a maximum of 8 characters (since it is an old DOS filename). Both &directory and &filename may also have a file extension (a period followed by a maximum of three characters). (As this is an old DOS format, the characters are limited to letters, with no distinction made between upper and lower case letters, numbers, and the underline character.) A file extension of ".cir" is automatically appended to &filename unless otherwise specified. (Circles automatically saves files with a ".cir" extension, unless otherwise specified, when a "save" command is executed.) Note that if files generated by the "output" command are to be displayed, a ".inp" extension may have to be specified. (Circles automatically saves an "output" file with a ".inp" extension, unless otherwise specified.) &directory must end with a backslahs (i.e.,\) to be identified as a directory name; otherwise it will be treated as a filename. &filename may use wildcards such as the * and ? characters. Examples of directory requests are "dir,a:" which displays the default directory of drive a:, "dir,.." which provides the parent directory for the working directory where Circles is installed, "dir,file\" which displays the file\ directory off of the working directory, and "dir,c:\circles\data\" which displays the \circles\data\ directory off of the c: drive. Directory information may also be included with &filename. Also note that most directory names do not include an extension, so a list of directories can generally be obtained by specifying "*." as part of the directory call, e.g., "dir,..\*." provides a list of the directories to the parent directory where Circles is installed, hence, the Circles directory will appear on the list of directories and files. Examples of directory requests for &filename are "dir,*.cir" which provides a list of all files in the working directory (this is the same as just specifying "dir" without any additional information), "dir,make3" which will echo back if a file name make3.cir is contained in the working directory, and "dir,c:\windows\command.com" which will echo back the filename of command.com for the directory c:\windows. The "file" command can subsequently be used after a "dir" command to retrieve a program input file for Circles. The "dir" command is also advisable before a "save" or "output" command if the user is not certain that a filename does not already exist and wants to make sure that it isn't accidentally overwritten by the "save" or "output" command, which will save a file without prompting if it already exists.
dx,dv#
is the shortcut for the 'delta' function.

exit
exits the Circles program. All data that has not been saved will be lost. If an error has occurred that kicks the user out of the program and into the BASIC interpreter, a "system" command (a Basic command) will have the same affect as the "exit" command and close the program. (For those using the compiled version of Circles, an error that kicks the user out of the program will not cause the program to enter into the BASIC interpreter since no interpreter is being used.)

file,&filename
accepts program input from &filename. Note that &filename must be a maximum of 8 characters (since it is an old DOS filename) and may also have a file extension (a period followed by a maximum of three characters). (As this is an old DOS filename, the characters are limited to letters, with no distinction made between upper and lower case letters, numbers, and the underline character.) Note that the "dir" command can be used to locate and/or confirm a filename or directory location. A file extension of ".cir" is automatically appended to &filename unless otherwise specified. (Circles automatically saves the file with a ".cir" extension, unless otherwise specified, when a "save" command is executed.) The "file" command (along with the "save" command) provides a means of recalling models previously generated in Circles. Note that the a saved file, unless subsequently modified by hand, does not contain the commands used to originally generate the model but, rather, the file contains the commands required to recreate the position of circles and regenerate the water walls. The file also contains the last specified delta spacing. Hence, when water walls are generated at the end of the "file" read, they are generated with the saved delta spacing value, which is not necessarily the delta spacing specified at the time the water walls were generated when the file was saved. A file can be read over an existing plot or read into a "new" plot. The "file" command only reads Circles’ commands and will not read in a KENO input deck. This function provides a memory and repetitive routine capability such that once a model is generated in Circles and saved to a file to recall later, subsequent modifications can be made without retyping circles data. Refer to the "save" command and the "Guide to Circles’ Input Files" Section for further details.
flipx
flips all circles and water walls along x-axis. When a "flipx" command is executed, circles located on the +x side of the x-axis are moved to the -x side of the axis with their x-coordinates becoming negative and vice versa. A "flipx" command flips all circles and walls to the opposite side of the x-axis from where they previously were located. The "flip" commands shift the circles and water walls around; they do not copy them like the "mirror" commands. If a replication of all circles around the x-axis is required (such that one array of circles on one side of the x-axis is copied over the other side of the axis), refer to the "mirrorx" command.
flipy
flips all circles and water walls along y-axis. When a "flipy" command is executed, circles located on the +y side of the y-axis are moved to the -y side of the axis with their y-coordinates becoming negative and vice versa. A "flipy" command flips all circles and walls to the opposite side of the y-axis from where they previously were located. The "flip" commands shift the circles and water walls around; they do not copy them like the "mirror" commands. If a replication of all circles around the y-axis is required (such that one array of circles on one side of the x-axis is copied over the other side of the axis), refer to the "mirrory" command.

help
types the help menu and help data on screen. This lists all Circles commands and shortcuts along with a cryptic discussion of their use.

kill,q#
is the shortcut for the 'killquadrant' command.
killquadrant,q#
deletes all water walls in the q# quadrant. The quadrant number, q#, must be an integer number between 1 and 4, inclusive. Note that the plot area within which all coordinates are positive (i.e., +x,+y) is quadrant 1 with the remaining quadrants being successively number in a counter clockwise direction. The "quadrant" command differs from the "killquadrant" command in that "quadrant" keeps water walls within the specified quadrant (and deletes all others) and "killquadrant" deletes the water walls in the specified quadrant (and keeps all others). The remaining water walls are truncated off of the axes by the amount specified in the delta spacing value. If water walls need to be regenerated refer to the "wall" command. If all water walls need to be deleted, use the "nowall" command. The "kill" command is the shortcut for the "killquadrant" command.

left,id#,(-)c1#(,r#)
packs a circle with ID number, id#, and radius, r#, directly to the left of (in the -x direction from) circle c1#, if c1# is positive. The radius, r#, may be omitted from the command if circle id# currently exists in the plot and its current radius is desired to be used. If c1# is negative, the resulting circle is packed on the left inside of circle c1# (i.e., the most negative -x portion inside circle c1#). The resulting circle center is aligned along the same y-coordinate as circle c1#. The resulting circle is packed tightly to circle c1# and is spaced by the amount specified by the "delta" function. This command is used to pack circles directly to the left of an existing circle. If a circle needs to be placed to the left of another circle but not directly to the left, refer to the "xneg" and "pack" commands. Refer to Figure #14, under the "pack" command description, for a demonstration of the use of the "left" command along with a demonstration of the use of the "pack" command in association with it.
list
lists circle centers, x- and y-coordinates, and radii on the screen. The screen listing provides the current delta spacing value and tabulates a sorted list of currently defined (i.e., with radii greater than zero) circles. The circle id# is listed in the "ID" column, followed by the x-coordinate and the y-coordinate of the circle center in the "---X---" and "---Y---" columns, and the circle radius in the "Radius" column. (The list can only display values between 999.9999 and -99.9999 for the circle center coordinates. The displayed values for radii are between 99.9999 and 0.0. Circle id# must be less than 99.) The "list" lists 19 circles at a time before pausing and waiting for a key to continue listing. The "list" command just lists circle values; refer to the "listw" or "listp" command if a list of water wall coordinates is desired. If a printed version of the "list" is required also refer to the "{Print Screen} key" function or the "print" command.
listp
lists circle centers and radii, pauses, and then lists water wall coordinates on the screen. The "listp" command is basically just a "list" command followed by a "listw" command. For further information refer to the "list" and "listw" commands. If a printed version of "listp" is required refer to the "{Print Screen} key" function or the "print" command.
listw
lists water wall coordinates on the screen. The screen listing provides the current delta spacing value and the water wall thickness used at the time of generation and tabulates a list of displayed water walls. The water wall coordinates are generated for the lower left corner, which is designated X1 and Y1, and the upper right corner, which is designated X2 and Y2, for each wall. The water wall coordinates are listed in a KENO format, with the most positive x-coordinate listed first followed by the most negative x-coordinate followed by the most positive y-coordinate and finally the most negative y-coordinate (i.e., +X -X +Y -Y). This is done so that the user can easily take the values listed for water walls and use them in generating water filled cuboids in a KENO input deck. The tabulation of water walls lists the orientation and originating circle id# in the "-O-" column, followed by the most positive and most negative x-coordinate in the "---X2---" and "---X1---" columns, and the most positive and most negative y-coordinate in the "---Y2---" and "---Y1---" columns. (The list can only display values between 999.9999 and -99.9999 for the x,y coordinates. The displayed values for delta spacing and wall thickness are less than or equal to 99.9999. The originating Circle id# must be less than 99.) The water wall orientation and associated circle is given as "R," "T," "L," or "B," referring to the right, top, left, and bottom side, and the associated circle. (Note that because water walls are consolidated to minimize complication and split to address intersections, the circle called out in the listing as being associated with the wall may not be the nearest and only circle that could be associated with the wall.) The "listw" command lists 19 walls at a time before pausing and waiting for a key to continue listing. The "listw" command just lists water wall values; refer to the "list" or "listp" command if a list of circle coordinates is desired. If a printed version of the "listw" is required also refer to the "{Print Screen} key" function or the "print" command.

mirrorx
reflects existing circles along the x-axis and generates new circles on the opposite side of the x-axis. When a "mirrorx" command is executed, circles located on the +x side of the x-axis are copied to the -x side of the axis with their x-coordinates becoming negative and vice versa. A "mirrorx" command reflects all circles to the opposite side of the x-axis so that mirror-opposite circles are created in addition to the existing circles. The mirrored circles are autonumbered with unique circle ID numbers, id#. Since the circles are mirrored and the commands, which were used to originally generated them, are not applied (such as "pack" and "xpos"), the new mirrored circles may intersect existing circles. Also note that an existing circle is not mirrored if an existing circle (with the exact same x,y coordinates but not necessarily with the same radius) is at the new mirrored coordinates. The "mirror" commands copy circles around an axis; they do not shift the circles (and water walls) around an axis like the "flip" commands do. If the translation of all circles around the x-axis is required (such that one array of circles on one side of the x-axis is shifted over to the other side of the axis), refer to the "flipx" command. Note that this command does not mirror water walls; rerun the "wall" command if water walls are required. The "mirx" command is the shortcut for the "mirrorx" command.
mirrory
reflects existing circles along the y-axis and generates new circles on the opposite side of the y-axis. When a "mirrory" command is executed, circles located on the +y side of the y-axis are copied to the -y side of the axis with their y-coordinates becoming negative and vice versa. A "mirrory" command reflects all circles to the opposite side of the y-axis so that mirror-opposite circles are created in addition to the existing circles. The mirrored circles are autonumbered with unique circle ID numbers, id#. Since the circles are mirrored and the commands, which were used to originally generated them, are not applied (such as "pack" and "ypos"), the new mirrored circles may intersect existing circles. Also note that an existing circle is not mirrored if an existing circle (with the exact same x,y coordinates but not necessarily with the same radius) is at the new mirrored coordinates. The "mirror" commands copy circles around an axis; they do not shift the circles (and water walls) around an axis like the "flip" commands do. If the translation of all circles around the y-axis is required (such that one array of circles on one side of the y-axis is shifted over to the other side of the axis), refer to the "flipy" command. Note that this command does not mirror water walls; rerun the "wall" command if water walls are required. The "miry" command is the shortcut for the "mirrory" command.
mirx
is the shortcut for the 'mirrorx' command.
miry
is the shortcut for the 'mirrory' command.
move,id#,sx#,sy#
moves an existing circle with ID number, id#, by the amount of sx# and sy# along the x- and y-coordinates. This command moves an individual circle. To move all of the circles (and water walls), refer to the "shift," "push," and "center" commands.

new
reinitializes the Circles program. It removes all previous data including circles and water walls and resets the autosizing function via a "size,1" command. All unsaved data will be lost; therefore, the user is reminded to save their data, if desired, via the "save" or "output" commands. Note that a "file" command will just overwrite portions of the existing data; it will not remove all previous data unless the file read into the Circles program overwrites all of the existing data. If the user desires to remove all existing data before importing a file via the "file" command, a "new" command should first be issued. Also note that a "cls" (clear screen) command does not reinitialize the Circles program; it just clears the screen.
nowall
deletes all water walls. If water walls in a particular quadrant need to be deleted, use the "killquadrant" command. If all the water walls except for those in a particular quadrant need to be deleted, use the "quadrant" command.

output,&filename
generates a simplified KENO-V.a input deck in &filename. Note that &filename must be a maximum of 8 characters (since it is an old DOS filename) and may also have a file extension (a period followed by a maximum of three characters). (As this is an old DOS filename, the characters are limited to letters, with no distinction made between upper and lower case letters, numbers, and the underline character.) Note that the "dir" command can be used to locate and/or confirm a filename or directory location. This may be advisable because the "output" command will overwrite an existing file. Circles automatically saves the file with a ".inp" extension, unless otherwise specified. Note that the Circles program can not read the "output" file. The simplified KENO-V.a input deck uses the circle and wall configuration data produced within Circles to generate an almost-ready-to-run input deck in a KENO-V.a format (which is directly readable by KENO-V.a or KENO-3D). (Individual circles are generated with unit numbers equal to their id#. Water walls are generated sequentially from Unit 101 on according to their order of listing, via the "listw" command. Comment cards are generated with each water wall to provide the associated circle and orientation data. The R, T, L, and B orientation designators, given by a listing and refering to the right, top, left, and bottom side of the associated circle, are translated into +X, +Y, -X, and -Y designations. Note that because water walls are consolidated and split during their generation, the circle called out in the comment, as being associated with the wall, may not be the nearest and only circle that could be associated with the wall. The global unit is generated as Unit 200.) In generating the file, certain parameters are assumed. Each cylinder is assumed to be unique and therefore may be redundant. The user may want to consolidate similar cylinders into one unit and revise the associated unit in the global unit. Line comments in the generated input deck provide a reminder of what needs to be changed. The generation of a finalized input deck requires revision to title cards, mixtures, parameters, +Z and -Z dimensions for cylinders, water walls, and the global unit so that the input deck represents the system being modeled. Additionally, units may need to be adjusted and horizontal water walls may need to be added. The "output" command provides a means of saving models generated in Circles. Refer to the "save" command if a Circles readable file format is desired.

pack,id#,(-)c1#,(-)c2#(,r#)
close packs a circle with ID number, id#, and radius, r#, next to (against) circle c1# and c2#, if c1# and c2# are positive. See Figure #14, below. The resulting circle is packed tightly between circle c1# and c2# and spaced by the amount specified by the "delta" function. It is packed on the side that results in a counter clockwise movement as circle id#, c1#, and c2# are traversed. (That is, one traverses circle id# through circle c1# to circle c2# in a direction that is in counter clockwise rotation. The packed circle, id#, results in its center being the starting point for a counter clockwise arc around the overall center of the three circles following from circle id# to circle c1# and then to circle c2#. Sometimes it is easier to envision circle id# being placed on the 12 o’clock clockwise portion of an arc formed from the center of circle c1#, at the 9 o’clock position, to circle c2#, at the 3 o’clock position.) Note that circle c1# and c2# do not have to contact each other; but, if the specified circle radius, r#, is not large enough to allow the resulting circle to contact circle c1# and c2#, no circle will result. The radius, r#, may be omitted from the command if circle id# currently exists in the plot and its current radius is desired to be used. If a minus sign is placed in front of circle c1# and/or c2# (i.e., c1# and/or c2# is negative), the resulting circle is packed tightly inside the circle(s) with the minus sign. The packing still occurs in a counter clockwise fashion while traversing from id# to c1# to c2#. Refer to Figure #14, below, while reading this explanation. If c1# is negative and c2# is positive, the resulting circle is packed inside circle c1# but outside circle c2# and vice versa. In the case of packing a circle inside circle c1#, circle c2# must go through or be inside circle c1# for the resulting circle to come into contact with circle c2#. The same is true for packing inside circle c2#. (If circle c2# is outside of circle c1# when packing inside of circle c1# and next to circle c2#, the resulting circle is placed inside circle c1# at the closest point to circle c2# and vice versa.) Again, note that circle c1# and c2# do not have to contact each other; but, if the specified circle radius, r#, is not large enough to allow the resulting circle to contact circle c1# and c2#, the resulting circle will only contact circle c1#. If the specified circle radius, r#, is too large to fit within circle c1# while packing against the outside of circle c2#, the resulting circle will cross into circle c2# or vice versa. If c1# and c2# are negative, the resulting circle is packed inside both circles c1# and c2#. In the case of packing a circle inside circle c1# and circle c2#, circle c2# must go through circle c1# for the resulting circle to come into contact with circle c2#. Circle c1# and c2# do have to contact each other and if the specified circle radius, r#, is too large to fit within the intersection between circle c1# and circle c2#, the resulting circle will cross into circle c2#. This command, with all its variations, is used to pack circles next to existing circles either inside or outside of each other. If a circle needs to be placed directly to the side of another circle or next to an axis but not in contact with additional circle, refer to the "bot," "left," "right," "top," "xneg," "xpos," "ybot," and "ytop" commands.
Figure #14: Demonstration of Various Packing Functions.
(Click on image for larger, more detailed version)
The circles input file, packdemo.cir, will generate the screen plot shown.

plot
plots circles and water walls on the screen. As circles and water walls are generated, they are rendered on the screen as a plot automatically. The "plot" command can be used after a "cls" (clear screen) command to re-render the plot. If it is desired to graphically print the plot, refer to the "{Print Screen} key" function. If particular aspects of the screen plot need to be altered, refer to the "size" and "zoom" functions. (The "size" function provides an axes-center plot that automatically adjusts to fit all circles and water walls on to the plot. The "zoom" function, along with its associated commands, such as "zoomat" and "zoomcenter", provides a user-specified plot center and zoom factor to allow particular circles, water walls, and views to be plotted.)
print
prints circle radii and centers and water wall coordinates (when LPT1: is defined for DOS). (Under Windows, LPT1: can be specified by selecting that port, under printer properties, or specifying that printing "from MS-DOS-based programs" is desired during the printer installation. To do this, go to the Printers folder either under the "Settings" section of the "Start" button or through the "My Computer" icon. If the printer is an existing printer right click on the printer, select the details tab, and choose LPT1: under the "print to the following port" field. If the printer is a network printer, the port field will have LPT1: designated with the network address in parentheses. If the printer is to be installed, double click "Add Printer." to run the "Add Printer Wizard" and either make sure that LPT1: is selected as the printer port for a local printer or specify that printing "from MS-DOS-based programs" is wanted.) The printed list first provides the current delta spacing value and tabulates a sorted list of currently defined (i.e., with radii greater than zero) circles. The circle id# is printed in the "ID" column, followed by the x-coordinate and the y-coordinate of the circle center in the "---X---" and "---Y---" columns, and the circle radius in the "Radius" column. (The printed list can only display values between 999.9999 and -99.9999 for the circle center coordinates. The displayed values for radii are between 99.9999 and 0.0. Circle id# must be less than 99.) Next, the printed list provides the current delta spacing value and the water wall thickness used at the time of generation and tabulates a list of displayed water walls. The water wall coordinates are generated for the lower left corner, which is designated X1 and Y1, and the upper right corner, which is designated X2 and Y2, for each wall. The water wall coordinates are listed in a KENO format, with the most positive x-coordinate listed first followed by the most negative x-coordinate followed by the most positive y-coordinate and finally the most negative y-coordinate (i.e., +X -X +Y -Y). This is done so that the user can easily take the values listed for water walls and use them in generating water filled cuboids in a KENO input deck. The tabulation of water walls prints the water wall orientation and originating circle id# in the "-O-" column, followed by the most positive and most negative x-coordinate in the "---X2---" and "---X1---" columns, and the most positive and most negative y-coordinate in the "---Y2---" and "---Y1---" columns. (The printed list can only display values between 999.9999 and -99.9999 for the x,y coordinates. The displayed values for delta spacing and wall thickness are less than or equal to 99.9999. The originating Circle id# must be less than 99.) The water wall orientation and associated circle is given as "R," "T," "L," or "B," referring to the right, top, left, and bottom side, and the associated circle. (Note that because water walls are consolidated and split during generation, the circle called out in the printed list as being associated with the wall may not be the nearest and only circle that could be associated with the wall.) The "print" command just prints circle and water wall values without providing a plot of the circles arrangement; refer to the "{Print Screen} key" function if a plot is desired. Also refer to the "list," "listp," and "listw" commands if a print out is not desired.
pushx
pushes the array of existing circles and water walls to the edge of the x-axis (i.e., y=0). This command shifts the entire circle and water wall arrangement such that either the negative most or positive most y-coordinate lies next to the x-axis. The side of the axis is determined by the center of the array. The delta spacing value, specified by the "delta" function, is used to space the outer array element y-coordinate away from the x-axis. This command can be confused with "pushy"; but the user is reminded that the "x" referred in the command is the axis upon which the command works (i.e., that it pushes to the x-axis). This is the standard convention used in most commands like "flipx" and "shiftx" (with the exception of the "centerx" command). If the user wants to center the overall array on the x-axis (i.e., center the overall y-coordinate), refer to the "centery" command. If the user wants to shift the entire circles and water wall array but does not care about the x-axis, refer to the "shiftx" command.
pushy
pushes the array of existing circles and water walls to the edge of the y-axis (i.e., x=0). This command shifts the entire circle and water wall arrangement such that either the negative most or positive most x-coordinate lies next to the y-axis. The side of the axis is determined by the center of the array. The delta spacing value, specified by the "delta" function, is used to space the outer array element x-coordinate away from the y-axis. This command can be confused with "pushx"; but the user is reminded that the "y" referred in the command is the axis upon which the command works (i.e., that it pushes to the y-axis). This is the standard convention used in most commands like "flipy" and "shifty" (with the exception of the "centery" command). If the user wants to center the overall array on the y-axis (i.e., center the overall x-coordinate), refer to the "centerx" command. If the user wants to shift the entire circles and water wall array but does not care about the y-axis, refer to the "shifty" command.

quad,q#
is the shortcut for the 'quadrant' command.
quadrant,q#
removes water walls from all quadrants except quadrant, q#. The quadrant number, q#, must be an integer number between 1 and 4, inclusive. Note that the plot area within which all coordinates are positive (i.e., +x,+y) is quadrant 1 with the remaining quadrants being successively number in a counter clockwise direction. The "quadrant" command differs from the "killquadrant" command in that "quadrant" keeps water walls within the specified quadrant (and deletes all others) and "killquadrant" deletes the water walls in the specified quadrant (and keeps all others). The remaining water walls are truncated off of the axes by the amount specified in the delta spacing value. If water walls need to be regenerated refer to the "wall" command. If all water walls need to be deleted, use the "nowall" command. The "quad" command is the shortcut for the "quadrant" command.

rad,id#,r#
is the shortcut for the 'radius' command.
radius,id#,r#
changes the radius of circle id# to r#. (The radius, r#, can be specified as zero to temporarily delete a circle without loosing it’s coordinate information but it is strongly suggested that the "delete" or "del" command should be used to delete a circle permanently if that is the intent. It is easier.) The "rad" command is the shortcut for the "radius" command.
rep,id#,c1#
is the shortcut for the 'replicate' command.
replicate,id#,c1#
replicates a circle with ID number, id#, that has the coordinates and radius of circle c1#. Since the resulting circle, id#, is located at the same coordinates as the generating circle, c1#, the plot will only show the circle with the highest ID number. (A "list" or "print" command will contain both circles id# and c1#.) The "replicate" command can be used to make several of the same sized circles and then use commands such as "radius" to change to the radius of the circle (so that a flange can be modeled) or any of the packing commands, "bot," "left," "right," "pack," "top," "xneg," "xpos," "ybot," and "ytop." Since these packing commands can be used without respecifying the radius, the user may prefer to generate one circles first, replicate several more (representing like sized containers), and then use the packing commands to arrange them. The "rep" command is the shortcut for the "replicate" command.
right,id#,(-)c1#(,r#)
packs a circle with ID number, id#, and radius, r#, directly to the right of (in the +x direction from) circle c1#, if c1# is positive. The radius, r#, may be omitted from the command if circle id# currently exists in the plot and its current radius is desired to be used. If c1# is negative, the resulting circle is packed on the right inside of circle c1# (i.e., the most positive +x portion inside circle c1#). The resulting circle center is aligned along the same y-coordinate as circle c1#. The resulting circle is packed tightly to circle c1# and is spaced by the amount specified by the "delta" function. This command is used to pack circles directly to the right of an existing circle. If a circle needs to be placed to the right of another circle but not directly to the right, refer to the "xpos" and "pack" commands.
rot,rx#
is the shortcut for the 'rotate' command.
rotate,rx#
rotates all existing circles around the origin (i.e., x=0 and y=0) by rx# degrees in a counter clockwise direction. The "rotate" command translates each circle counter clockwise around the origin. It does not shift the entire circles coordinate array around the origin. The amount of rotation is determined by the rx# variable. The amount of rotation, rx#, may be any positive or negative number but it is suggested that, for simplicity, the range should be restricted to 360 to -360 degrees. To rotate a circle from one quadrant to the next, a 90-degree rotation would be specified. To rotate a circle from one quadrant to the opposite quadrant, a 180-degree rotation would be specified. Since, the "rotate" command may translate the circles as well reorient them, unless the array of circles is centered on the origin, the user may want to use the "shift," "center," and "push" commands, as necessary, to relocate the entire array in reference to the axes. Note that this command does not rotate water walls; rerun the "wall" command if water walls are required. If the user wants to shift the entire circles and water wall array but does not want to change the orientation of the circles, refer to the "shift" commands. If the translation of all circles around an axis is required (such that one array of circles on one side of the axis is shifted over to the other side of the axis), refer to the "flip" command. The "rot" command is the shortcut for the "rotate" command.

save,&filename
saves Circles’ data in &filename. Note that &filename must be a maximum of 8 characters (since it is an old DOS filename) and may also have a file extension (a period followed by a maximum of three characters). (As this is an old DOS filename, the characters are limited to letters, with no distinction made between upper and lower case letters, numbers, and the underline character.) Note that the "dir" command can be used to locate and/or confirm a filename or directory location. This may be advisable because the "save" command will overwrite an existing file. Circles automatically saves the file with a ".cir" extension, unless otherwise specified. The "save" command (along with its companion "file" command) provides a means of saving models generated in Circles. The file can be subsequently read over an existing plot or read into a "new" plot. The "save" command only writes simple Circles’ commands. The saved file does not contain the commands used to originally generate the model but, rather, the file contains the commands required to recreate the position of circles and regenerate the water walls. The file also contains the last specified delta spacing. Note that water walls, generated at the end of the "file" read, are generated according to the saved delta spacing value. The "save" function provides a memory and repetitive routine capability such that once a model is generated in Circles and saved to a file to recall later, subsequent modifications can be made without retyping circles data. Refer to the "file" command and the "Guide to Circles’ Input Files" Section for further details. Refer to the "output" command if a KENO input deck is the desired file format.
shiftx,sx#
shifts the array of existing circles and water walls along x-axis by sx#. This command shifts the x-coordinates of the entire circle and water wall arrangement by the amount of sx#. If the user wants to shift the entire circles and water wall array up against the x-axis, refer to the "pushx" command. If the user wants to center the overall array on the x-axis (i.e., center the overall y-coordinate), refer to the "centery" command. If the user wants to flip the entire array of circles and water walls around the x-axis, refer to the "flipx" command. The "shx" command is the shortcut for the "shiftx" command.
shifty,sy#
shifts the array of existing circles and water walls along y-axis by sy#. This command shifts the y-coordinates of the entire circle and water wall arrangement by the amount of sy#. If the user wants to shift the entire circles and water wall array up against the y-axis, refer to the "pushy" command. If the user wants to center the overall array on the y-axis (i.e., center the overall x-coordinate), refer to the "centerx" command. If the user wants to flip the entire array of circles and water walls around the y-axis, refer to the "flipy" command. The "shy" command is the shortcut for the "shifty" command.
shx,sx#
is the shortcut for the 'shiftx' command.
shy,sy#
is the shortcut for the 'shifty' command.
size,s#
changes the size of the screen plot by the size factor, s#. The screen plot displays the current size factor at the bottom, left corner, when the "size" function is active. This command is different than the "zoom" command. The "size" function provides an axes-centered plot (i.e., centered at x=0 and y=0). An initial size factor of 1.0 is provided when the Circles program is started or a "new" command is issued. (A "new" command will turn off the "zoom" function, if it was previously on so that autosizing is working.) A value of s# =1.0 renders a plotted area of 50 vertically by 66 horizontally. (Since the Circles program does not use require a particular unit of measure, the units for the plotted area may be any unit of concern, although it is recommended that the standard unit of the calculational code should be used, such as centimeters.) A size factor greater than 1.0 will enlarge the plot while a size factor less than 1.0 will shrink the plot. If all the circles and water walls won’t fit on the plot, the "size" function automatically adjusts the plot size to fit all of them onto the plot. In this manner, the "size" of a plot is automatically adjusted (i.e., autosized) as new circles or water walls are added that do not fit onto the plot. Because of the autosizing function, the size factor, s#, can not be set any larger than the value that will display the generated circles and water walls. If the user desires to enlarge an area of the plot to view particular circles, intersections, or water walls, the "zoom" function should be used. The "zoom" function, along with its associated commands, such as "zoomat" and "zoomcenter", provides a user-specified plot center and zoom factor. When the "size" command is issued, the "zoom" function is turned off and autosizing is restored with the previously specified size factor, s#, being used. Note that the size factor, s#, can be different from the zoom factor, z#. If the desired size factor is not known, choose any reasonable factor and let the autosize function size the plot for you. (Note that size factors greater than ~130 will cause an error and sufficiently small size factors, such as zero, will provide no detail. For these situations, it is generally recommended that a "size,1" command should be issued to fix the plot.) If autosizing is not desired or a zoomed perspective is desired, refer to the "zoom" function and its associated commands.
sur2,id#,c1#,c2#
is the shortcut for the 'surround2' command.
sur3,id#,c1#,c2#,c3#
is the shortcut for the 'surround3' command.
surround2,id#,c1#,c2#
surrounds and encloses circles c1# and c2# with a circle with ID number, id#. Circles c1# and c2# must have the same radius. If circles c1# and c2# have different radii, use the "surround3" command. The surrounding circle is centered on the y-axis (i.e., the x-coordinate is zero) and minimizes the surface area either above or below the x-axis, depending on which side of the x-axis circles c1# and c2# are located. If a better enclosing circle would have its origin off the y-axis, use the "surround3" command. If several circles are present, the user must select the best two circles to define the best enclosing circle that contains all the desired circles. Circle c1# and c2# do not have to be specified in any particular order. The delta spacing value is used to provide spacing between the enclosing circle and the other specified circles. The command is provided to allow the generation of hoop-type models, where several tightly packed containers are surrounded by a hemicylinder. The KENO chord value for the hemicylinder is the y-coordinate of the surrounding circle. For further details of how hoop-type models are generated, see the "How to Generate Hoop Models" section. The "sur2" command is the shortcut for the "surround2" command.
surround3,id#,c1#,c2#,c3#
surrounds and encloses circles c1#, c2#, & c3# with a circle with ID number, id#. The command attempts to enclose all three circles by touching their edges. The resulting circle does not always minimize surface area. Unlike the "surround2" command, the specified circles do not have to have the same radius and the resulting surrounding circle is not tied to the y-axis. Because the command uses an iterative approach to solving the problem, it does not always arrive at the exact solution. If several circles are present, the user must select the best three circles to define the best enclosing circle that contains all the desired circles. Circle c1#, c2#, and c3# do not have to be specified in any particular order. The delta spacing value is used to provide spacing between the enclosing circle and the other specified circles. The command is provided to allow the generation of hoop-type models, where several tightly packed containers are surrounded by a hemicylinder. The KENO chord value for the hemicylinder is the y-coordinate of the surrounding circle. For further details of how hoop-type models are generated, see the "How to Generate Hoop Models" section. The "sur3" command is the shortcut for the "surround3" command.

top,id#,(-)c1#(,r#)
packs a circle with ID number, id#, and radius, r#, directly on top of (in the +y direction from) circle c1#, if c1# is positive. The radius, r#, may be omitted from the command if circle id# currently exists in the plot and its current radius is desired to be used. If c1# is negative, the resulting circle is packed on the top inside of circle c1# (i.e., the most positive +y portion inside circle c1#). The resulting circle center is aligned along the same x-coordinate as circle c1#. The resulting circle is packed tightly to circle c1# and is spaced by the amount specified by the "delta" function. This command is used to pack circles directly on top of an existing circle. If a circle needs to be placed above another circle but not directly above, refer to the "ytop" and "pack" commands.

wall,wt#
generates tangential water walls of thickness, wt#, around all circles within the plot. The water walls surround the exterior tangential surfaces of tightly packed arrays of circle. The water walls do not intersect circles or each other. The water walls are spaced from each other and the circles according to the "delta" function. If a plot already contains water walls, the old water walls are overwritten when a "wall" command is issued. Water walls may have to be regenerated after new circles are generated or existing circles are moved and they must be regenerated after a "rotate" command is used. The "center," "flip," "push," and "shift" commands will move water walls along with circles. Water walls, if unwanted within a plot, may be deleted with the "nowall" command or they may be removed from different quadrants (i.e., regions between the x- and y-axes) with the "quadrant" and "killquadrant" commands. The command is provided to allow the generation of cuboidal water walls, where tangential water walls are used to bound personnel and equipment reflection. The command calculates only the vertical water walls that would be used in a model. Horizontal water walls must still be calculated by hand, as required, by the user. Refer to the "output" command and the "listw" or "listp" commands to view the associated x,y-coordinates for the generated water walls.

xneg,(-)id#,(-)c1#(,r#)
packs a circle with ID number, id#, and radius, r#, next to (against) the x-axis and on the negative x-coordinate side (i.e., the side with the lowest x-coordinate value) of circle, c1#, if id# and c1# are positive. The resulting circle is packed tightly to the x-axis and circle c1#, spaced by the amount specified by the "delta" function, on the side of the x-axis where the center of circle c1# is located. If the center of circle c1# is on the x-axis, the resulting circle center is also positioned on the x-axis and the resulting circle is similar to that produced by the "left" command. (If it is desired to have the resulting circle on either side of the x-axis when the circle c1# center is located on the x-axis, the location of circle c1# should be first shifted a small amount prior to executing the "xneg" command and shifted back after the command. This could be done by performing a "shifty" command with a small amount, e.g., 0.0001, and setting the delta value to its current value plus the small amount.) Note that circle c1# does not have to contact the x-axis; but, if the specified circle radius, r#, is not large enough to allow the resulting circle to contact the x-axis and circle c1#, no circle will result. The radius, r#, may be omitted from the command if circle id# currently exists in the plot and its current radius is desired to be used. If the specified ID number, id#, is negative, the center of the resulting circle, specified with the absolute (positive) value of id#, is positioned on the x-axis side opposite that of the circle c1# center. In the case of "xneg" packing a circle on the opposite side of the circle c1# center, the x-axis must go through circle c1# or no resulting circle will result. If a minus sign is placed in front of circle c1# (i.e., c1# is negative), the resulting circle is packed tightly inside circle c1# and next to the x-axis. In the case of "xneg" packing a circle inside circle c1#, the x-axis must go through circle c1# for the resulting circle to come into contact with the x-axis. This command, with all its variations, is used to pack circles next to the x-axis and either inside or outside of an existing circle. If a circle needs to be placed directly left of another circle but not in contact with the x-axis, refer to the "left" command or the "pack" command, if another circle is involved. Refer to Figure #14, under the "pack" command description, for a demonstration of the use of the "xpos" command, which functions similar to the "xneg" command.
xpos,(-)id#,(-)c1#(,r#)
packs a circle with ID number, id#, and radius, r#, next to (against) the x-axis and on the positive x-coordinate side (i.e., the side with the highest x-coordinate value) of circle, c1#, if id# and c1# are positive. The resulting circle is packed tightly to the x-axis and circle c1#, spaced by the amount specified by the "delta" function, on the side of the x-axis where the center of circle c1# is located. If the center of circle c1# is on the x-axis, the resulting circle center is also positioned on the x-axis and the resulting circle is similar to that produced by the "right" command. (If it is desired to have the resulting circle on either side of the x-axis when the circle c1# center is located on the x-axis, the location of circle c1# should be first shifted a small amount prior to executing the "xpos" command and shifted back after the command. This could be done by performing a "shifty" command with a small amount, e.g., 0.0001, and setting the delta value to its current value plus the small amount.) Note that circle c1# does not have to contact the x-axis; but, if the specified circle radius, r#, is not large enough to allow the resulting circle to contact the x-axis and circle c1#, no circle will result. The radius, r#, may be omitted from the command if circle id# currently exists in the plot and its current radius is desired to be used. If the specified ID number, id#, is negative, the center of the resulting circle, specified with the absolute (positive) value of id#, is positioned on the x-axis side opposite that of the circle c1# center. In the case of "xpos" packing a circle on the opposite side of the circle c1# center, the x-axis must go through circle c1# or no resulting circle will result. If a minus sign is placed in front of circle c1# (i.e., c1# is negative), the resulting circle is packed tightly inside circle c1# and next to the x-axis. In the case of "xpos" packing a circle inside circle c1#, the x-axis must go through circle c1# for the resulting circle to come into contact with the x-axis. This command, with all its variations, is used to pack circles next to the x-axis and either inside or outside of an existing circle. If a circle needs to be placed directly right of another circle but not in contact with the x-axis, refer to the "right" command or the "pack" command, if another circle is involved. Refer to Figure #14, under the "pack" command description, for a demonstration of the use of the "xpos" command.

ybot,(-)id#,(-)c1#(,r#)
packs a circle with ID number, id#, and radius, r#, next to (against) the y-axis and below (in the -y direction from) circle, c1#, if id# and c1# are positive. The resulting circle is packed tightly to the y-axis and circle c1#, spaced by the amount specified by the "delta" function, on the side of the y-axis where the center of circle c1# is located. If the center of circle c1# is on the y-axis, the resulting circle center is also positioned on the y-axis and the resulting circle is similar to that produced by the "bot" command. (If it is desired to have the resulting circle on either side of the y-axis when the circle c1# center is located on the y-axis, the location of circle c1# should be first shifted a small amount prior to e