gbor
is a body of revolution with a cross section described
as a general polygon.
This cross section is swept along an axis in a general direction,
additionally, only cells that fulfill some additional condition
will be filled.
############################################################################## # Flags: nomenu, noprompt, nomessage, # ############################################################################## # section -gbor # ############################################################################## # material = 1 # # whichcells = all, taboo= none # # show = off -- (off | all | later | now) # # name = gbor-000000000 # # inside = yes -- (yes|no) # # originprime = ( 0.0, 0.0, 0.0 ) # # zprimedirection= ( 0.0, 0.0, 1.0 ) # # rprimedirection= ( 1.0, 0.0, 0.0 ) # # range = ( 0.0, 360.0 ) # # xscaleprime = 1.0 -- elliptic coords. # # yscaleprime = 1.0 -- elliptic coords. # ############################################################################## ## syntax: # # point= (Zi, Ri) # # arc, radius= RADIUS, type= [clockwise | counterclockwise] # # size= [small | large ] # # deltaphi= 5 # # ellipse, center= (Z0, R0), size= [small | large ] # # deltaphi= 5 # ############################################################################## # doit, return, help, list, reset, clear # ##############################################################################
material= MAT
:
whichcells
all
, or a material-index.
whichcells=all
, all volume inside the
ggcylinder
is assigned the material-index,
provided the former material is not taboo
.
If whichcells
is a material-index, only the parts of the
ggcylinder
that are currently filled with the given index
are assigned the new material-index.
taboo
none
, or a material-index.
taboo=none
, all volume inside the
ggcylinder
is assigned the material-index.
If taboo
is a material-index, only the parts of the
ggcylinder
that are currently filled with another index
than the given index are assigned the new material-index.
originprime
:
gbor
.
zprimedirection
:
gbor
.
rprimedirection
:
range
:
xscaleprime
, yscaleprime
:
inside
:
gbor
should be assigned material index MAT
, or
whether the cells outside of it should be changed.
show
:
gbor
should be displayed.
show=off
, no outline will be displayed.
show=later
,
the outline will be shown later together
with other specified
gccylinder
s, ggcylinder
s and gbor
s.
show=all
,
the outlines of all
gccylinder
s, ggcylinder
s and gbor
s so far
where show
was not off
will be displayed.
point= (XI, YI)
:
XI, YI
are the coordinates of the i.th point in the polygon
that describes the polygon of the gbor
.
There have to be minimum 3 points,
or 2 points and an arc
or 2 points and an ellipse.
arc
:
radius= RADIUS
:
RADIUS
size= [small | large]
(optional):
type= [clockwise | counterclockwise]
:
clear
:
doit
:
# /usr/local/gd1/examples-from-the-manual/plunger0.gdf define(PlungerInnerRadius, 100e-3/2 ) define(PlungerCurvature, 16e-3 ) define(PlungerAngle, -67.5*@pi/180 ) -general outfile= /tmp/UserName/example scratch= /tmp/UserName/scratch- text()= A Plunger, modelled as a body of revolution. text()= Curvature : PlungerCurvature text()= Radius : PlungerInnerRadius text()= Angle of Axis : eval(PlungerAngle * 180 / @pi) Degrees -mesh spacing= 0.2e-2 pxlow= -5e-2, pxhigh= 12e-2 pylow= -18e-2, pyhigh= 3e-2 pzlow= -6e-2, pzhigh= 6e-2 -gbor material= 4 originprime= ( 0, 0, 0 ) zprimedirection= ( -cos(PlungerAngle), -sin(PlungerAngle), 0 ) rprimedirection= ( 0, 0, 1 ) range= ( 0, 360 ) clear # point= ( z, r ) point= ( 0, 0 ) point= ( 0, PlungerInnerRadius-PlungerCurvature ) arc, radius= PlungerCurvature, size= small, type= counterclockwise point= ( -PlungerCurvature, PlungerInnerRadius ) point= ( -170e-3, PlungerInnerRadius ) point= ( -170e-3, 0 ) doit -volumeplot scale= 3 doit
# /usr/local/gd1/examples-from-the-manual/gbor-example1.gdf define(LargeNumber, 10000) # some big number define(MAXCELLS, 1e+5) define(XLOW, 0) define(XHIGH, 5e-2) define(YLOW, 0) define(YHIGH, 6e-2) define(ZLOW, -1.1e-2) define(ZHIGH, 0) define(STPSZE, ((XHIGH-XLOW)*(YHIGH-YLOW)*(ZHIGH-ZLOW)/MAXCELLS)**(1/3) ) -mesh volume= ( XLOW, XHIGH, \ YLOW, YHIGH, \ ZLOW, ZHIGH ) spacing= STPSZE -general outfile= /tmp/UserName/example scratch= /tmp/UserName/scratch define(R, 1.0e-2) text()= Intersection of two circular cylinders with radius R text()= generated as general cylinders text()= where 'taboo' is specified text()= stpsze= STPSZE, maxcells= MAXCELLS # # Fill everything with metal # -brick material= 1 volume= ( -LargeNumber, LargeNumber, \ -LargeNumber, LargeNumber, \ -LargeNumber, LargeNumber ) doit # # First step, # fill cells above the diagonal with material 3 # these cells will not be filled by the first circular cylinder, # since we will specify 'taboo= 3' # # -ggcylinder material= 3, origin= ( 0, 0, 0 ), xprime= ( 1, 0, 0 ), yprime= ( 0, 1, 0 ), range= ( ZLOW, ZHIGH ), clear point= ( XLOW, YLOW ), point= ( XLOW, YHIGH ), point= ( XLOW+(YHIGH-YLOW), YLOW ) doit # # Second step: # fill a circular cylinder in x-direction, # but NOT cells with material index 3 (taboo=3) # -ggcylinder material= 0, taboo= 3, xprime= ( 0, 1, 0 ), yprime= ( 0, 0, 1 ), # so the axis will be in +x origin= ( 0, 4e-2, 0 ), # shift of origin range= ( XLOW, XHIGH ), clear point= ( -R, 0 ), arc, radius= R, type= counterclockwise, point= ( 0, -R ), arc, radius= R, point= ( R, 0 ), doit # # Third step: # fill a circular cylinder in y-direction, # but ONLY cells with material index 3 (whichcells=3), # -ggcylinder material= 0, whichcells= 3, taboo= none xprime= ( 1, 0, 0 ), yprime= ( 0, 0, -1 ), # so the axis will be in +y origin= ( 2.e-2, 0, 0 ), # shift of origin range= ( YLOW, YHIGH ), clear point= ( -R, 0 ), arc, radius= R, type= clockwise, point= ( 0, R ), arc, radius= R, point= ( R, 0 ), doit -volumeplot eyeposition= ( 1, 2, 1 ) scale= 3.5 doit
# /usr/local/gd1/examples-from-the-manual/gbor-example.gdf define(MaxCells, 2e+6) # # define the geometry parameters # define(RBeamTube, 4.7625e-2) define(RCurve, 1.0e-2) define(ZGapNose, 10.9e-2) define(RLarge, 25.0e-2) define(RSmall, 15.0e-2) define(RCenter, 10.0e-2) define(INF, 10000) define(EL, 1) define(MAG, 2) define(XLOW, -0.250) define(XHIGH, 0.250) define(YLOW, -0.250) define(YHIGH, 0.250) define(ZLOW, -0.200) define(ZHIGH, 0.200) define(STPSZE, ((XHIGH-XLOW)*(YHIGH-YLOW)*(ZHIGH-ZLOW)/MaxCells)**(1/3) ) # # gdfidl can evaluate sin(), cos(), atan() and X**Y # definition of functions degsin() and degcos() # sdefine(degsin, [sin((@arg1)*@pi/180)]) sdefine(degcos, [cos((@arg1)*@pi/180)]) sdefine(degtan, [sin((@arg1)*@pi/180)/cos((@arg1)*@pi/180)]) -general outfile= /tmp/UserName/example scratch= /tmp/UserName/scratch- text(3)= A quarter of a reentrant cavity text()= The cavity is described as a body of revolution, text()= text()= maxcells= MaxCells, stpsze= STPSZE -mesh pxlow= 0*XLOW, pxhigh= 1*XHIGH pylow= 0*YLOW, pyhigh= 1*YHIGH pzlow= 1*ZLOW, pzhigh= 1*ZHIGH cxlow= mag, cxhigh= mag cylow= mag, cyhigh= mag czlow= ele, czhigh= ele spacing= 1*STPSZE -material material= 3, type= electric -brick # # we fill the universe with metal # material= 3 volume= ( -INF,INF, -INF,INF, -INF,INF ) doit # # carve out the cavity itself # -gbor material= 0, range= ( 0, 360 ) origin= ( 0, 0, 0 ) show= later, # don't show now, but show later # clear # clear a possible previous polygon list point= ( 0 , 0 ), point= ( ZHIGH+2*STPSZE , 0 ), point= ( ZHIGH+2*STPSZE , RBeamTube ), point= ( ZGapNose+RCurve, RBeamTube ), arc, radius= RCurve, size= small, type= clockwise, deltaphi= 10 define(rdum, RBeamTube+(1+degcos(30))*RCurve) define(zdum, ZGapNose +(1-degsin(30))*RCurve) point= ( zdum, rdum ) define(deltaz, RSmall-zdum) define(deltar, deltaz*degtan(30)) define(ffac, 0.85) ## adjust this for a smooth transition define(zdum2, zdum+ffac*deltaz) define(rdum2, rdum+ffac*deltar) point= ( zdum2, rdum2 ) arc, radius= RCurve, size= small, type= counterclockwise, deltaphi 10 point= ( RSmall, RCenter-0.8*RCurve ), point= ( RSmall, RCenter ), arc, radius= RSmall, size= small, type= counterclockwise, delta= 3 point= ( -RSmall, RCenter ), point= ( -RSmall, RCenter-0.8*RCurve ), arc, radius= RCurve, size= small, type= counterclockwise, deltaphi= 10 point= ( -zdum2, rdum2 ) point= ( -zdum, rdum ) arc, radius= RCurve, size= small, type= clockwise, delta 10 point= ( -(ZGapNose+RCurve), RBeamTube ), point= ( ZLOW-2*STPSZE, RBeamTube ), point= ( ZLOW-2*STPSZE, 0 ) list doit # # enforce some meshplanes: # -mesh zfixed( 2, -(ZGapNose+RCurve), -ZGapNose ) # at the noses zfixed( 2, (ZGapNose+RCurve), ZGapNose ) # at the noses zfixed( 2, -RSmall, RSmall) # at the z-borders of the cavity -volumeplot scale= 3 doit
Example
The following describes two bodies of revolution that look similiar to glasses.
The shape is only specified once, but two different glasses
are generated by varying 'zprime' and 'rprime'
# /usr/local/gd1/examples-from-the-manual/gbor-glasses.gdf define(MAXCELLS,1e+6) define(XLOW,-5e-2) define(XHIGH,18e-2) define(YLOW,-0e-2) define(YHIGH,17e-2) define(ZLOW,-3e-2) define(ZHIGH,18e-2) define(STPSZE, ((XHIGH-XLOW)*(YHIGH-YLOW)*(ZHIGH-ZLOW)/MAXCELLS)**(1/3) ) -general outfile= /tmp/UserName/glasses scratch= /tmp/UserName/glasses-scratch- -mesh spacing= STPSZE volume= ( XLOW, XHIGH, \ YLOW, YHIGH, \ ZLOW, ZHIGH ) # Fill the universe with vacuum define(LargeNumber,10000) -brick material= 0 volume= ( -LargeNumber, LargeNumber, \ -LargeNumber, LargeNumber, \ -LargeNumber, LargeNumber ) doit # # The glasses: # -gbor # # Definition of the cross-section: # clear point= ( 0.7e-2, 0 ), point= ( 0, 4.0e-2 ), arc, radius=0.25e-2, size= large, type= clockwise point= ( 0.3e-2, 4.0e-2 ), point= ( 1.0e-2, 1.0e-2 ), point= ( 8.0e-2, 0.8e-2 ), point= ( 10.0e-2, 1.4e-2 ), point= ( 15.0e-2, 6.0e-2 ), arc, radius= 0.4e-2, type= clockwise point= ( 15.2e-2, 5.4e-2 ), point= ( 10.0e-2, 0 ) # # That cross-section is used twice, # with different parameters for origin, zprime etc.. # material= 1, origin= ( -2e-2, 0, 4e-2 ), zprimedir= ( 1, 0, 0 ), rprimedir= ( 0, 1, 0 ), range= ( -90, 90 ), show= now doit # this 'doit' generates the first 'glass' material= 3 origin= ( 0, 12e-2, 4e-2 ), zprimedir= ( 1, -0.5, 0.7 ), rprimedir= ( 0, 1, 0 ), range= ( 0, 360 ), show= all doit # this 'doit' generates the second 'glass' -volumeplot eyeposition= ( 0.7, 1, 0.5 ) scale= 4 doit