文档介绍:专业资料专业专心专注多心圆隧道直接用 FLAC3D 建模丁其乐 2013/6/ 18 多心圆隧道模型使用 FLAC3 D 建模的难点在于 FLAC3 D 中并没有以不规则曲线为边界的原始 3D 基本网格,隧道的断面图见图一 37° R643,68 O1 O2 O4 17° R590 O3 R300 54° R109 图一隧道内轮廓线是由多个圆弧做成的,所以内部区域模型只能通过 3D 基本网格拼接而成,这时我想到了使用 cylinder (圆柱体形网格)拼接,但是这个圆弧的圆心并不是一个点,怎么办?这时我想到了通过 fish 来调整圆心位置, 使得各圆弧的圆心都调整到 O1 位置, 同时又要保证各圆弧的圆弧线不变,且内部网格点的相对位置不变。下面我以一个简单的例子来说明我调整的过程: O1 O2 M1 M2 AB 图二在图二中圆弧 O1AB 的圆心为 O1 ,圆心坐标为( X1,Z1 ), 现在通过坐标调整把圆弧 O1A B 所占区域调整到 O2AB (如上图所示), O2 的坐标为( X2 , Z2 ) ,同时 O1A 上面一点 M1 , 调整之后在 O2A 上为 M2 。A和 M1 的坐标分别为 A(Ax,Az) 和 M1(M1x,M1z) 。设: 专业资料专业专心专注| 1 1| | 1 | O M k O A ?(1) ' | 1 | 1 | 1 | M A k k O A ? ??(2) M2 的坐标为 M2x,M2y 则: ' 2 1 ( 2 1 ) M x M x k O x O x ? ??(3) ' 2 1 ( 2 1 ) M z M z k O z O z ? ??(4) 由( 3)、(4 )就以求出来 M2 的坐标。下面用一个简单的例子说明实现代码。 new title 调整圆弧区域到指定位置; 定义参数 def para ;O1 的平面坐标 O1x=- O1z=0 ;O2 的平面坐标 O2x=0 O2z=0 r1= ; O1 的半径 a1=0*degrad ;A 点与 X 轴的夹角 a2=30*degrad ;B 点与 X 轴的夹角;AB 点的坐标 Ax=r1*cos(a1)+O1x Az=r1*sin(a1)+O1z Bx=r1*cos(a2)+O1x Bz=r1*sin(a2)+O1z end para ; 生产模型 gen zo cyl p0 (O1x,0,O1z) p1 (Ax,0,Az) p2(O1x,1,O1z) p3(Bx,0,Bz) size 416 group ' 调整' gen zo cyl p0 (O1x,2,O1z) p1 (Ax,2,Az) p2(O1x,3,O1z) p3(Bx,2,Bz) size 416 group ' 原始'; 为了对比而建; 调整节点位置 def ding pg=gp_head loop while gp_group(pg,1) =' 调整' xx=gp_xpos(pg) 专业资料专业专心专注 zz=gp_zpos(pg) k=sqrt((xx-O1x)^2+(zz-O1z)^2)/r1 k1=1-k gp_xpos(pg)=k1*(O2x-O1x)+xx gp_zp