案例模型为6*6*6*的立方体,分组情况见图1。进行初始平衡后挖去分组‘2’,提取并输出模型各节点的位移。
命令流如下:
;建立模型并完成开挖计算
model new
zone create brick size 6 6 6 group '1'
zone cmodel assign m-c
zone prop bulk 5e8 shear 3e8 coh 1e6 fric 20
zone ini dens 2800
zone face skin
zone face apply v-n 0 range group 'West' or 'East'
zone face apply v-n 0 range group 'North' or 'South'
zone face apply v-n 0 range group 'Bottom'
model gravity 9.81
model solve elastic
zone group '2' range p-x 1 5 p-z 1 5
zone cmodel assign null range group '2'
model solve
;提取全部节点位移
zone gridpoint list displacement
;提取某个分组(包括面分组)的节点位移,则命令变为:
zone gridpoint list displacement range group 'xxx'
;提取某一个节点(x,y,z)的位移,则命令变为:
zone gridpoint list displacement range position (x,y,z)
;提取某个范围内的节点位移,则命令变为:
zone gridpoint list displacement range position-x x1 x2 position-y y1 y2 position-x z1 z2
图3 list位移输出示意
;提取单个节点(x,y,z)结果并输出到console
fish def disp_out
gpnt = gp.near(x,y,z)
xdisp = gp.disp.x(gpnt)
ydisp = gp.disp.y(gpnt)
zdisp = gp.disp.z(gpnt)
io.out('The x-displacement of gridpoint is: \n' + string(xdisp))
io.out('The y-displacement of gridpoint is: \n' + string(ydisp))
io.out('The z-displacement of gridpoint is: \n' + string(zdisp))
end
@disp_out
;提取模型所有节点的编号与x/y/z位移并输出到txt文件,以输出x位移为例:
fish def disp_out
n = 0
loop foreach gpnt gp.list
n = n+1
table.x(1,n) = gp.id(gpnt)
table.y(1,n) = gp.disp.x(gpnt)
endloop
command
table '1' export 'xdisp.txt'
endcommand
end
@disp_out
提取单个节点的位移情况,建议用list功能,如果节点坐标正确,但输出为空时,采用fish语言输出。这是因为flac内部存在一定容差,可能导致找不到该节点。
提取多个节点位移时,建议采用fish提取。