分享自编 城市交叠隧道 实例 (基于FLAC3D 5.0)
基本信息:模型分三层土,从上往下依次是:土,风化岩,软岩,,所建立的模型长150 m,宽 90m,高79 m。开挖4个隧道,上面 两个,下面两个;
隧道断面均为三心圆模型;
支护方式:初支采用 预应力锚杆 和壳单元模拟,用实体单元模拟二衬砌永久支护;
上面的两个隧道每次开挖均为5m,分30次开挖,下面的两个隧道每次开挖也均为5m,分18次开挖,上下隧道的锚杆均为每隔2m设置锚杆,上面两个隧道断面每次设置9根锚杆,下面隧道每次设置11根锚杆支护。
具体图如下:
整体模型:
隧道:
隧道衬砌:
隧道加衬砌:
锚杆和壳单元:
z方向位移:
衬砌z方向位移:
结构单元应力:
问题:
本次模型计算的工作量较大,大部分时间都耗在锚杆与liner单元建立链接的~~以前网上分享的自动建立链接的程序原理主要是两个足够相近结构单元节点之间建立起链接,每次循环建立链接的时候都要把所有的节点都要遍历一遍建立链接,都会把以前建立过的链接删去再重新重头开始建立链接,这样到后面就越浪费时间,以至于在分析开挖第三和第四个隧道时候花费的时间越来越多,中间做了好多无用功!!比如开挖第四个隧道的时候,每次建立链接都要重新从第一个隧道开始循环到第四个隧道~~~想要问的问题就是 :能否控制遍历的范围,比如开挖第三个隧道的时候就只让其遍历第三个隧道范围内的结构单元,只在第三个隧道范围内循环建立链接,如果可以实现,这样就可以节约大量的时间,预计以上四个隧道开挖计算估计3~4个小时就可以搞定,而实际我用FLAC3D 5.0算的时候用了近两天的时间~~求各位大侠能提出自己的建议,能在白忙之中给予交流指点,不胜感激!!!
用 in_range 、id 或 location 缩减 node_arr 的长度:
node_arr = get_array(node_num)
node_num = 0
node_pnt0 = nd_head
loop while node_pnt0 # null
node_num = node_num + 1
node_arr(node_num) = node_pnt0
node_pnt0 = nd_next(node_pnt0)
endloop
echowasd 发表于 2015-10-6 22:41
用 in_range 、id 或 location 缩减 node_arr 的长度:
node_arr = get_array(node_num)
node_num...
看过尝试了一下, 还是不大会,感觉这个挺好,可不可以把 in_range 、id 或 location 缩减 node_arr 的长度的具体命令的方法给我发下让我学习学习呀,在邮箱或这上面发下都行,谢谢呀! 涛声依旧2015 发表于 2015-10-7 10:25
看过尝试了一下, 还是不大会,感觉这个挺好,可不可以把 in_range 、id 或 location 缩减 node_ar ...
随机应变,根据你的模型来的,比如你只考虑y=范围内的单元重新链接,那你先判断单元的ypos,在此范围内的话放入array。 顶一下。。 echowasd 发表于 2015-10-7 13:57
随机应变,根据你的模型来的,比如你只考虑y=范围内的单元重新链接,那你先判断单元的ypos,在此范 ...
我根据以前编的大致编写了一个,但是运行的时候提示 *** Fish: Integer must be between 1 and 2147483647.感觉有问题,想让你在百忙之中帮我看看;谢谢!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fenquyujianlilianjie;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
def fenquyurelink
global node_dist
global dist_tol
global _xloc
global _yloc
global _zloc
global xx1
global yy1
global zz1
global xx2
global yy2
global zz2
global link_id1
global link_id2
global node_id1
global node_id2
global link_pnt1
global link_pnt2
global node_num_minus1
local node_pnt0
local node_pnt1
local node_pnt2
global ii_plus1
global node_num=0
global node_arr = get_array(node_num)
node_pnt0=nd_head
loop while node_pnt0 # null
_xloc = nd_pos(node_pnt0,2,1)
_yloc = nd_pos(node_pnt0,2,2)
_zloc = nd_pos(node_pnt0,2,3)
if _xloc > 0 then ;可以根据需要变动需要遍历的范围
if _zloc > -7 then
node_num = node_num + 1
node_arr(node_num) = node_pnt0
node_pnt0 = nd_next(node_pnt0)
endif
endif
endloop
node_num_minus1 = node_num-1
;link_id=30000
loop ii (1,node_num_minus1)
node_pnt1 = node_arr( ii )
node_id1=nd_id(node_pnt1)
xx1 = nd_pos(node_pnt1,2,1)
yy1 = nd_pos(node_pnt1,2,2)
zz1 = nd_pos(node_pnt1,2,3)
ii_plus1 = ii+1
loop jj (ii_plus1,node_num)
node_pnt2 = node_arr( jj )
node_id2=nd_id(node_pnt2)
xx2 = nd_pos(node_pnt2,2,1)
yy2 = nd_pos(node_pnt2,2,2)
zz2 = nd_pos(node_pnt2,2,3)
node_dist = sqrt((xx1-xx2)^2+(yy1-yy2)^2+(zz1-zz2)^2)
dist_tol = 1e-3
if node_dist < dist_tol then
link_pnt1 = nd_link(node_pnt1)
link_pnt2 = nd_link(node_pnt2)
if link_pnt1 # null then
;link_id = link_id + 1
link_id1 = lk_id(link_pnt1)
command
sel delete link range id @link_id1
; sel set link node_tol=dist_tol
sel link id=@link_id1 @node_id1 target=node tgt_num=@node_id2
sel link attach xdir=rigid ydir=rigid zdir=rigid &
xrdir=rigid yrdir=rigid zrdir=rigid range id=@link_id1
end_command
else
if link_pnt2 # null then
;link_id = link_id + 1
link_id2 = lk_id(link_pnt2)
command
sel delete link range id @link_id2
sel link id=@link_id2 @node_id2 target=node tgt_num=@node_id1
sel link attach xdir=rigid ydir=rigid zdir=rigid &
xrdir=rigid yrdir=rigid zrdir=rigid range id=@link_id2
end_command
endif
endif
endif
endloop
endloop
end
@fenquyurelink
感谢楼主的分享 好牛啊。。。。太高端的我也学不会。。。我只想学习一下建模 和打锚杆在5.0中怎么实现的 楼主可以分型命令流吗不胜感激啊 1158202454@qq.com
还有我的模型在5.0中运行不了楼主可否帮忙看一下啊? :):(:D:):):(:D:D:D:D 确实是牛 谢谢楼主分享啊 谢谢楼主无私的分享 感谢!!!!!!!!!!!!!!!!
做的真好~
感谢楼主的分享 做的真好,学习了 感谢楼主分享 感谢楼主分享 sel shell id=1 range cyl end1 0 0 0 end2 0 4 0 rad 1
非常感谢!
页:
[1]
2