论坛首页    职业区    学术与写作    工程技术区    软件区    资料区    商务合作区    社区办公室
 您好! 欢迎 登录 或 注册 最新帖子 邀请注册 活动聚焦 统计排行 社区服务 帮助
 
  • 帖子
  • 日志
  • 用户
  • 版块
  • 群组
帖子
  • 3541阅读
  • 1回复

[求助]求大神解释下面打锚杆cable和shell支护的代码! [复制链接]

上一主题 下一主题
离线龙biscuit
 

发帖
322
土币
2507
威望
45
原创币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2015-12-03

; -----------------------------+
;  Author: qiaoch@yeah.net
;       2012/2/20
; -----------------------------+
new
def SetVariables1
    array cx0(5),cz0(5),cx1(5),cz1(5)  ;store inner and outer x z coordinates of bolts
     _ySection=0.8
     _yspace = 0.8     ; space between rockbolt along y axes
     _cableSpace = 2.4 ; space between cables
     _boltRad = 2.5    ;length of rockbolt
     _cableRad = 6.5   ;length of cable
     _cabEMod = 200e9  ;Young Model of cable and rockbolt
     _excaLength = 3*_yspace   ;开挖进尺
     _beganOnY = 0.0     ; start point on Y axes for excavation
     _cableSteps = 100   ;steps after cable installed
     _tunRad = 2.05    ;巷道上半拱半径
     _ntunRad = (-1)*_tunRad
     _sideWHeight = 1.5
     _sideWallz = (-1)*_sideWHeight
     _boltAng = 2*asin(_yspace/2/_tunRad)
     _cableAng = 2*asin(_cableSpace/2/_tunRad)
     _rightWall0 = _tunRad - 0.01     ;for liner install
     _rightWall1 = _tunRad + 0.01
     _leftWall0 = (-1)*_tunRad + 0.01
     _leftWall1 = (-1)*_tunRad - 0.01
end
SetVariables1
;--------------------------------------------------------------------
def SetVariables2
    _endony = _beganOnY +  _excaLength
    _beganOnY_01 = _beganOnY - 0.01
    _beganOnY_10 = _beganOnY + 0.01
    _endony_01 = _endony - 0.01
    _endony_10 = _endony + 0.01
    _ySection2 = _ySection + 1*_yspace
    _ySection3 = _ySection + 2*_yspace
end
SetVariables2
;--------------------------------------------------------------------
def RightCoords
    loop n (1,4)
       cx0(n) = _tunRad*cos((pi/2)-_boltAng*float(n))
       cz0(n) = _tunRad*sin((pi/2)-_boltAng*float(n))
       cx1(n) = (_tunRad + _boltRad)*cos((pi/2)-_boltAng*float(n))
       cz1(n) = (_tunRad + _boltRad)*sin((pi/2)-_boltAng*float(n))
    end_loop
end
;--------------------------------------------------------------------
def LeftCoords
   loop m (1,4)  
       cx0(m) = _tunRad*cos((pi/2)+_boltAng*float(m))
       cz0(m) = _tunRad*sin((pi/2)+_boltAng*float(m))
       cx1(m) = (_tunRad + _boltRad)*cos((pi/2)+_boltAng*float(m))
       cz1(m) = (_tunRad + _boltRad)*sin((pi/2)+_boltAng*float(m))
   end_loop
end
;---------------------------定位拱顶节点-----------------------------
def FindNode1
        ;---begin node of cable---
        _x0=cx0(n)
        _y0=_ySection
        _z0=cz0(n)
        ;---end node of cable-----
        _x1=cx1(n)
        _y1=_y0
        _z1=cz1(n)
end
;---------------------------定位右竖墙节点---------------------------
def FindNode2
        ;---begin node of cable---
        _x0=cx0(n)
        _y0=_ySection
        _z0=cz0(n)
        ;---end node of cable-----
          if n = 1 then
             _x1 = _x0 + _boltRad
             _y1 = _y0
             _z1 = _z0
          else
           _x1 = _tunRad + _boltRad*cos(60*degrad)
           _y1 = _y0
           _z1 = _z0 - _boltRad*sin(60*degrad)
          endif
end
;---------------------------定位左竖墙节点----------------------------
def FindNode3
        ;---begin node of cable---
        _x0=cx0(n)
        _y0=_ySection
        _z0=cz0(n)
        ;---end node of cable-----
         if n = 1 then
             _x1 = _x0 - _boltRad
             _y1 = _y0
             _z1 = _z0
          else
             _x1 = _ntunRad - _boltRad*cos(60*degrad)
             _y1 = _y0
             _z1 = _z0 - _boltRad*sin(60*degrad)
          endif
end
;------------------------定位锚索起节点坐标-----------------
def FindCableNode
        ;begin node of cable
        _x0=cx0(n)
        _y0=_ySection
        _z0=cz0(n)
        ;end node of cable
        _x1=cx1(n)
        _y1=_y0
        _z1=cz1(n)
end
;---------------------------安装锚杆----------------------------
def InstallBolt
        command
           sel cable begin _x0 _y0 _z0 end _x1 _y1 _z1 nseg=5
        end_command
end
;---------------------------安装锚索----------------------------
def InstallCable
        command
           sel cable  begin _x0 _y0 _z0 end _x1 _y1 _z1 nseg=13
        end_command
end
;---------------------------rockbolt----------------------------
def SetBoltProps
   command        
      sel cable pro emod _cabEMod xcarea 3.8e-4 gr_per 0.25 &    
                    yten 25e4 gr_k 3.8e7 gr_c 4e5  
      sel cable pretension 8e4  
   end_command
end
;------------------------ cable -----------------------------------
def SetCableProps
   command        
      sel cable pro emod _cabEMod xcarea 2.6e-4 gr_per 0.22 &  
                    yten 35e4 gr_k 3.6e7 gr_c 3.5e5
      sel cable pretension 8e4
   end_command
end
;--------------------------------------------------------------------
def rWallCables
        ;--- install the rockbolts on the straight wall of right ---
    cx0(1) = _tunRad
    cz0(1) = cz0(5) - 0.7
    cx1(1) = _tunRad + _boltRad
    cz1(1) = cz0(1)
    cx0(2) = _tunRad
    cz0(2) = cz0(1) - 0.65
        loop n (1,2)
           FindNode2
           InstallBolt
           SetBoltProps
        end_loop
end
;-----------------------------------------------------
def lWallCables
    ;install the cable on the straight wall of left
    cx0(1) = _ntunRad
    cz0(1) = cz0(5) - 0.7
    cx1(1) = _ntunRad - _boltRad
    cz1(1) = cz0(1)
    cx0(2) = _ntunRad
    cz0(2) = cz0(1) - 0.65
        loop n (1,2)
           FindNode3
           InstallBolt
           SetBoltProps
        end_loop
end
;-------------------------------------------------------
def InstallBolts
    ;install right top cables
    RightCoords
    loop n (1,4)
        FindNode1
        InstallBolt
        SetBoltProps
    end_loop
    ;install left top cables
    LeftCoords  
    loop n (1,4)
        FindNode1
        InstallBolt
        SetBoltProps
    end_loop
   ;install the cable on the top of arch
    _ndd=nd_near(0,_ySection,_tunRad)  
    _nddid=nd_id(_ndd)        
    _x0=nd_pos(_ndd,2,1)
    _y0=nd_pos(_ndd,2,2)
    _z0=nd_pos(_ndd,2,3)
    ;end node of cable
    _x1=0
    _y1=_ySection
    _z1=_tunRad + _boltRad
    ;---------------------
    InstallBolt
    SetBoltProps
end
;---------------------------------
;计算锚索端点坐标
def cableCoords
    cx0(1) = _tunRad*sin(_cableAng)
    cz0(1) = _tunRad*cos(_cableAng)
    cx1(1) = (_tunRad + _cableRad)*sin(_cableAng)
    cz1(1) = (_tunRad + _cableRad)*cos(_cableAng)
    cx0(2) = 0.0
    cz0(2) = _tunRad
    cx1(2) = 0.0
    cz1(2) = _tunRad + _cableRad
    cx0(3) = (_ntunRad)*sin(_cableAng)
    cz0(3) = _tunRad*cos(_cableAng)
    cx1(3) = -1*(_tunRad + _cableRad)*sin(_cableAng)
    cz1(3) = (_tunRad + _cableRad)*cos(_cableAng)
end
;--------------------------------------------------
;-------------------安装锚索-----------------------
def InstallCables
    cableCoords
    loop n (1,3)
        FindNode1
        InstallCable
        SetCableProps
    end_loop
end
;---------------------------------------------------
def Excavating
command
   mod null range y _beganOnY _endony group upexcav
   mod null range y _beganOnY _endony group lowexcav  
   ;
   sel shell id=1 range cyl end1 0 _beganOnY 0 end2 0 _endony 0 rad _tunRad z 0 _tunRad
   sel shell id=1 range x _rightWall0 _rightWall1 y _beganOnY _endony z _sideWallz 0.1 ; liner on right straight wall
   sel shell id=1 range x _leftWall0 _leftWall1 y _beganOnY _endony z _sideWallz 0.1 ; liner on left straight wall
   sel delete shell range cyl end1 0 _endony_01 0 end2 0 _endony_10 0 rad _tunRad
   ;
   sel node fix y xr zr range y _beganOnY_01 _beganOnY_10  
   sel node fix y xr zr range y _endony_01 _endony_10
   ;--- Assign the property of Liner  ---
   sel shell id=1 prop iso=(2e9, 0.25) thick=0.3
end_command
end
;------------------------------------------------------------
def InstallBoltOfOneSection
   if _beganOnY = 0 then
      command
         print _beganOnY
      end_command
   else
      _ySection = _beganOnY
      InstallBolts
      rWallCables
      lWallCables
   endif
    _ySection = _beganOnY + _yspace
    InstallBolts
    rWallCables
    lWallCables
    _ySection = _beganOnY + 2*_yspace
    InstallBolts
    rWallCables
    lWallCables
end
;------------------------------------------------------------
def InstallCableOfOneSection
   _ySection = _beganOnY + _yspace/2
   InstallCables
end
;------------------------------------------------------------
;                      Geo model            
;------------------------------------------------------------
gen zone radcylinder dim _tunRad _tunRad _tunRad _tunRad p0 0 0 0 p1 30 0 0 p2 0 12.0 0 p3 0 0 30 &
    ratio 1.0 1.0 1.0 1.1 size 6 30 16 20 fill group uptunnel
group upexcav range cyl end1 0 0 0 end2 0 12.0 0 rad _tunRad group uptunnel
group uptunnel range group upexcav not
;------------------------------------------------------------
gen zone radtunnel dim _sideWHeight _tunRad _sideWHeight _tunRad p0 0 0 0 p1 0 0 -30 p2 0 12.0 0 &
    p3 30 0 0 ratio 1.0 1.0 1.0 1.1 size 7 30 6 20 fill        
group lowtunnel  range group uptunnel not group upexcav not
group lowexcav   range x 0 _tunRad z -1.7 0 group lowtunnel
;------------------------------------------------------------
gen zone reflect norm -1,0,0  ori 0,0,0
;------    Assign model  property     -----------
model el
pro bulk 10e10 she 10e10  
;------------------------------------------------
def DriveInitial
    _sxxval = _kh * _szzval
    _sxgrad = _sxxval / (-960)
    _szgrad = _szzval / (-960)
    _szztop = (930 * _szzval)/960
end
set _szzval = -24.5e6  
set _kh = 1.0
DriveInitial
;--- Boundary Condition ---
apply szz _szztop range z  29.99 30.01
fix z range z -30.01 -29.99
fix x range x -30.01 -29.99
fix x range x  29.99 30.01
fix y range y -0.01 0.01
fix y range y 11.9 12.1  ;//attention!
;--- initial condition ---
set grav 0 0 -10
ini density 2500
;-------------------------
ini szz _szzval grad 0 0 _szgrad
ini sxx _sxxval grad 0 0 _sxgrad
ini syy _sxxval grad 0 0 _sxgrad
;-------------------------
plot create _view01
plot add surface
plot set mag 5
plot show
;-------------------------
solve
; save initialstress.sav
;-----------------------------------------------------
ini xdisp 0 ydisp 0 zdisp 0
;-----------------------------------------------------
def derive
  s_mod1 = y_mod1 / (2.0 * (1.0 + p_ratio1))
  b_mod1 = y_mod1 / (3.0 * (1.0 - 2.0 * p_ratio1))
  s_mod2 = y_mod2 / (2.0 * (1.0 + p_ratio2))
  b_mod2 = y_mod2 / (3.0 * (1.0 - 2.0 * p_ratio2))
  s_mod3 = y_mod3 / (2.0 * (1.0 + p_ratio3))
  b_mod3 = y_mod3 / (3.0 * (1.0 - 2.0 * p_ratio3))
end
set y_mod1 = 3.35e9 p_ratio1 = 0.25  
set y_mod2 = 4.20e9 p_ratio2 = 0.25
set y_mod3 = 4.10e9 p_ratio3 = 0.25
derive
;----------------------------------------
model hoekbrown
prop bulk=b_mod1 shear=s_mod1 hbs=0.0054 hbmb=1.203 hbsigci=2.8E7 &
     hba=0.508 hbs3cv=0 range z -30. -5.
prop bulk=b_mod2 shear=s_mod2 hbs=0.0084 hbmb=1.403 hbsigci=3.1E7 &
     hba=0.508 hbs3cv=0 range z -5. 6.
prop bulk=b_mod3 shear=s_mod3 hbs=0.0082 hbmb=1.302 hbsigci=3.0E7 &
     hba=0.506 hbs3cv=0 range z 6. 30.
;pause
prop density 2560
;---------------------------------------
set _beganOnY = 0
SetVariables2
Excavating
InstallBoltOfOneSection
;-------------------------------------
InstallCableOfOneSection
step _cableSteps
;pause
;save excavate01.sav
;-------------------------------------
set _beganOnY = 2.4
SetVariables2
Excavating
InstallBoltOfOneSection
step _cableSteps
;pause
;save excavate02.sav
;--------------------------------------
set _beganOnY = 4.8
SetVariables2
Excavating
InstallBoltOfOneSection
InstallCableOfOneSection
step _cableSteps
;pause
;save excavate03.sav
;-------------------------------------
set _beganOnY = 7.2
SetVariables2
Excavating
InstallBoltOfOneSection
InstallCableOfOneSection
step _cableSteps
;save excavate04.sav
;-------------------------------------
set _beganOnY = 9.6
SetVariables2
Excavating
InstallBoltOfOneSection
InstallCableOfOneSection
step _cableSteps
;save excavate05.sav
;-------------------------------------
solve
save excavateFinal.sav


下面是我搜到的一些解释:
    FLAC3D用户中有较大比例是研究地下结构支护的,由其是在煤矿方面的应用更多。因此,结合自己以前编写的命令流,发一个简单的、供初学者参考的例子。实为供初学者入门参考,为抛砖引玉。

在巷道的模拟当中有这样几个关键问题需要注意:
1
)边界条件的设置及地应力的施加
一般巷道模型在z坐标方向都不可能从地表开始建模,因此截取的模型部分不要忘了加一个顶面的应力边界--apply szz;如果模型较大,最好考虑初始应力的渐变。

2
)锚杆的安装
锚杆的坐标通过循环语句依据锚杆的长度自动生成,为体现打在不同纵深的锚杆则只需要改变原锚杆坐标的y坐标即可,需要注意的是用于存储锚杆起点和终点坐标的数组需要事先采用array关键词进行声明,而通常fish里面使用的变量一般都不需要显式的声明其变量类型,数组则不同。数组的大小是固定的。

3
)围岩本构
本人倾向于采用Hoek-Brown本构模型模拟围岩,可以依据围岩表观特征按照GSI指标对围岩的强度适当折减。高级的应用还可以考虑岩石的峰后效应。

4
)应力释放
应力释放确实是一个较难准确考虑的问题。巷道截面一旦开挖就会出现应力的释放,但究竟但支护结构安装前究竟释放了多大的应力很难准确考量。相关讨论可以参考论坛里的帖子,借鉴隧道中的应力释放来考虑。本人倾向于依据施工现场测得或观察到的围岩位移和变形情况对应力释放的大小进行估计。以此确定模拟中支护结构安装前的计算步数。在本示例中没有采用复杂的应力释放方式。
5)、因为喷层使用liner模拟的,所以,显示liner的法向应力的菜单操作:plotitems -> add ->structure element-> liner ->coupling -> stress -> normal
6)、显示锚杆轴力:plot add sel cable force 最终效果,如图:
7)、在建模时要定义好分组,在开挖时是分别开挖upexcav和lowexcav这两个分组,因此,分组的位置和范围对,才能正确的开挖

邮箱:blzhu@buaa.edu.cn ,欢迎交流!
离线龙biscuit

发帖
322
土币
2507
威望
45
原创币
0
只看该作者 1楼 发表于: 2016-03-13
邮箱:blzhu@buaa.edu.cn ,欢迎交流!
快速回复
限100 字节
温馨提示:欢迎交流讨论,请勿纯表情、纯引用!
 
上一个 下一个

      https://beian.mps.gov.cn/ 粤公网安备 44010602012919号 广州半山岩土网络科技有限公司 粤ICP备2024274469号

      工业和信息化部备案管理系统网站