FLAC3D学习(SIMWE论坛君之枫整理)
p0 x4 y1 z0 & p1 x2 y1 z4 & p2 x4 y2 z0 & p3 x2 y1 z0 & p4 x2 y2 z4 & p5 x2 y2 z0 & p6 x2 y1 z6 & p7 x2 y2 z6 & p8 x3 y1 z5 & p9 x1 y1 z0& p10 x3 y2 z5 & p11 x1 y2 z0
end_command end_if if y2#y3 then command
; lower-right outside
gen zone radcyl size nx ny2 nz1 nr ratio 1 raty 1 ratr group 'g2' &
p0 x4 y2 z0 & p1 x2 y2 z4 & p2 x4 y3 z0 & p3 x2 y2 z0 & p4 x2 y3 z4 & p5 x2 y3 z0 & p6 x2 y2 z6 & p7 x2 y3 z6 & p8 x3 y2 z5 & p9 x1 y2 z0 & p10 x3 y3 z5 & p11 x1 y3 z0 end_command end_if end def make3 if y1#y2 then command
; bottom outside
gen zone brick size nx ny1 nr ratio 1 1 ratr2 group 'g3' &
p0 x0 y1 z4 & p1 x6 y1 z4 & p2 x0 y2 z4 & p3 x0 y1 z5 & p4 x6 y2 z4 & p5 x0 y2 z5 & p6 x5 y1 z5 & p7 x5 y2 z5 end_command end_if if y2#y3 then command
; bottom outside
gen zone brick size nx ny2 nr ratio 1 raty ratr2 group 'g3' &
p0 x0 y2 z4 & p1 x6 y2 z4 & p2 x0 y3 z4 & p3 x0 y2 z5 & p4 x6 y3 z4 & p5 x0 y3 z5 & p6 x5 y2 z5 & p7 x5 y3 z5 end_command end_if end def make4 if y1#y2 then command
; bottom-right outside
gen zone brick size nu ny1 nr ratio 1 1 ratr2 group 'g4' &
21
FLAC3D学习(SIMWE论坛君之枫整理)
p0 x6 y1 z4 & p1 x2 y1 z4 & p2 x6 y2 z4 & p3 x5 y1 z5 & p4 x2 y2 z4 & p5 x5 y2 z5 & p6 x3 y1 z5 & p7 x3 y2 z5 end_command end_if if y2#y3 then command
; bottom-right outside
gen zone brick size nu ny2 nr ratio 1 raty ratr2 group 'g4' &
p0 x6 y2 z4 &p1 x2 y2 z4 &p2 x6 y3 z4 & p3 x5 y2 z5 & p4 x2 y3 z4 & p5 x5 y3 z5 & p6 x3 y2 z5 &p7 x3 y3 z5 end_command end_if end def make5 if y1#y2 then command ; top inside
gen zone radtunnel size nx ny1 nx nu group 'g5' &
p0 x0 y1 z0 &p1 x7 y1 z0 &p2 x0 y2 x0 &p3 x0 y1 z8 &p4 x7 y2 z0 & p5 x0 y2 z8 &p6 x7 y1 z8 &p7 x7 y2 z8 &p8 x5c y1 z0 &p9 x0 y1 z7c & p10 x5c y2 z0 &p11 x0 y2 z7c &p12 x5b y1 z7b &p13 x5b y2 z7b gen zone brick size nx ny1 nx group 'g5' &
p0 x0 y1 z0 &p1 x5c y1 z0 &p2 x0 y2 z0 &p3 x0 y1 z7c &p4 x5c y2 z0 & p5 x0 y2 z7c &p6 x5b y1 z7b &p7 x5b y2 z7b end_command end_if if y2#y3 then command ; top inside
gen zone radtunnel size nx ny2 nx nu ratio 1 raty 1 group 'g5' &
p0 x0 y2 z0 & p1 x7 y2 z0 & p2 x0 y3 x0 &p3 x0 y2 z8 &p4 x7 y3 z0 &p5 x0 y3 z8 &p6 x7 y2 z8 &p7 x7 y3 z8 &p8 x5c y2 z0 &p9 x0 y2 z7c &p10 x5c y3 z0 &p11 x0 y3 z7c &p12 x5b y2 z7b &p13 x5b y3 z7b
gen zone brick size nx ny2 nx ratio 1 raty 1 group 'g5' &
p0 x0 y2 z0 &p1 x5c y2 z0 &p2 x0 y3 z0 &p3 x0 y2 z7c &p4 x5c y3 z0 & p5 x0 y3 z7c p6 x5b y2 z7b &p7 x5b y3 z7b end_command end_if
22
FLAC3D学习(SIMWE论坛君之枫整理) end def make6 if y1#y2 then command ; bottom inside
gen zone brick size nx ny1 nz1 group 'g6' &
p0 x0 y1 z5 &p1 x5 y1 z5 &p2 x0 y2 z5 &p3 x0 y1 z0 &p4 x5 y2 z5 & p5 x0 y2 z0 &p6 x5c y1 z0 &p7 x5c y2 z0 ; bottom-right inside
gen zone brick size nu ny1 nz1 ratio 1 1 1 group 'g6' &
p0 x5 y1 z5 &p1 x3 y1 z5 &p2 x5 y2 z5 &p3 x5c y1 z0 &p4 x3 y2 z5 & p5 x5c y2 z0 &p6 x7 y1 z0 &p7 x7 y2 z0 end_command end_if if y2#y3 then command ; bottom inside
gen zone brick size nx ny2 nz1 ratio 1 raty 1 group 'g6' & p0 x0 y2 z5 &p1 x5 y2 z5 &p2 x0 y3 z5 &p3 x0 y2 z0 &p4 x5 y3 z5 & p5 x0 y3 z0 &p6 x5c y2 z0 &p7 x5c y3 z0 ; bottom-right inside
gen zone brick size nu ny2 nz1 ratio 1 raty 1 group 'g6' & p0 x5 y2 z5 &p1 x3 y2 z5 &p2 x5 y3 z5 &p3 x5c y2 z0 &p4 x3 y3 z5 & p5 x5c y3 z0 &p6 x7 y2 z0 &p7 x7 y3 z0 end_command end_if end
define make7 if nxr>0 then command
; primitive right of inner primitive - near - lower
gen zone brick size nxr ny1 nz1 ratio 1.0 1.0 1.0 group 'g7' & p0 x2 y1 z4 &p1 xr y1 z4 &p2 x2 y2 z4 &p3 x2 y1 z0 ; primitive right of inner primitive - far - lower
gen zone brick size nxr ny2 nz1 ratio 1.0 raty 1.0 group 'g7' & p0 x2 y2 z4 &p1 xr y2 z4 &p2 x2 y3 z4 &p3 x2 y2 z0 ; primitive right of inner primitive - near - upper
gen zone brick size nxr ny1 nx ratio 1.0 1.0 1.0 group 'g7' &
23
FLAC3D学习(SIMWE论坛君之枫整理)
p0 x2 y1 z0 &p1 xr y1 z0 &p2 x2 y2 z0 &p3 x2 y1 z2 ; primitive right of inner primitive - far - upper
gen zone brick size nxr ny2 nx ratio 1.0 raty 1.0 group 'g7' & p0 x2 y2 z0 &p1 xr y2 z0 &p2 x2 y3 z0 &p3 x2 y2 z2 end_command end_if if nzt>0 then command
; primitive above inner primitive - near
gen zone brick size nx ny1 nzt p0 x0,y1,z2 p1 x2,y1,z2 p2 x0,y2,z2 p3 x0 y1 zt &ratio 1.0 1.0 1.0 group g7
; primitive above inner primitive - far
gen zone brick size nx ny2 nzt p0 x0,y2,z2 p1 x2,y2,z2 p2 x0,y3,z2 p3 x0 y2 zt &ratio 1.0 raty 1.0 group g7
; primitive above right lower primitive - near end_command if nxr>0 then command
gen zone brick size nxr ny1 nzt p0 x2 y1 z2 p1 xr y1 z2 p2 x2 y2 z2 p3 x2 y1 zt & ratio 1.0 1.0 1.0 group g7
; primitive above right lower primitive - far
gen zone brick size nxr ny2 nzt p0 x2 y2 z2 p1 xr y2 z2 p2 x2 y3 z2 p3 x2 y2 zt & ratio 1.0 raty 1.0 group g7 end_command end_if end_if end
def map1a ; below tunnel center (Correct need for initial points to match kx=(x3-x0)/(x7-x0) p_gp=gp_head loop while p_gp#null
; if p_gp in group 'g6', apply delta-x transformation from line to circle if gp_group(p_gp,1)='g6' then xx=gp_xpos(p_gp)-x0 zz=z0-gp_zpos(p_gp) mu=zz/height x37=x3*mu+x7*(1-mu) kk=x3/x37
24
FLAC3D学习(SIMWE论坛君之枫整理) gp_xpos(p_gp)=x0+xx*kk end_if
p_gp=gp_next(p_gp) end_loop end
def map1 ; below tunnel center tanmax=height/(base-(x4-x0)) maxang=atan(tanmax) kk=maxang/tanmax cosmaxang=cos(maxang) p_gp=gp_head loop while p_gp#null
; if p_gp in group 'g6', apply delta-r transformation from line to circle if gp_group(p_gp,1)='g6' then xx=gp_xpos(p_gp)-x4 if xx>0 then zz=z0-gp_zpos(p_gp) zx=zz/xx
if zx ang2=kk*zx ; remap from uniform lengths to uniform angles rr=xx/cosmaxang ; remap radius from square to sector gp_xpos(p_gp)=x4+rr*cos(ang2) gp_zpos(p_gp)=z0-rr*sin(ang2) end_if end_if end_if p_gp=gp_next(p_gp) end_loop end def map2 ; above tunnel center angmax=pi/4 sqrt2=sqrt(2) cosangmax=cos(angmax) p_gp=gp_head loop while p_gp#null ; if p_gp in group 'g5', apply delta-r transformation from line to circle if gp_group(p_gp,1)='g5' then xx=gp_xpos(p_gp)-x0 25