- 积分
- 0
- 注册时间
- 2004-8-30
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 benjackxu 于 2009-10-14 15:48 编辑
进行边坡稳定行分析时,往往要考虑地下水的影响。在三维空间里,水位面往往是一个空间曲面。用water table face 的办法比较麻烦,所以想了个办法:由于界面单元可以非常容易的依附于不规则模型表面生成,那么可以先生成与水面一致的interface,然后用FISH编制一段小程序,遍历该界面上的节点,生成复杂形状的空间水位面。换句话说,这个界面只是为了生成水面而设置的一个辅助界面,生成水面后删除即可。下面的编码,是一个实现这一目的的一个简单实例的命令流(经由由csuroylin版友修改后推出,个人以为可以作为实现建复杂空间水面的通用做法),该命令流的编制过程中,得到了好多朋友的帮忙,不敢独享,把它贴出来。附件是贴出的命令流和我用这种方法做的一个实例,不过有不完美之处,就是有些节点的孔隙压力没加上,不知是什么原因,希望与大家共同探讨。
new
gen zone brick size 3 3 3 &
p0 (0,0,0) p1 (3,0,0) p2 (0,3,0) p3 (0,0,1.5) &
p4 (3,3,0) p5 (0,3,1.5) p6 (3,0,4.5) p7 (3,3,4.5)
group Base
; Create Top - 1 unit high for initial spacing
gen zone brick size 3 3 3 &
p0 (0,0,2.5) p1 (3,0,5.5) p2 (0,3,2.5) p3 (0,0,7) &
p4 (3,3,5.5) p5 (0,3,7) p6 (3,0,7) p7 (3,3,7)
group Top range group Base not
;
; Create interface elements on the top surface of the base
interface 1 face range plane norm (-1,0,1) origin (1.5,1.5,3) dist 0.1
ini z add -1.0 range group Top
water dens 1000
set grav 0 0 -10
def water_table
p_i=i_head
p_ie=i_elem_head(p_i) ;界面1单元指针赋予p_ie
loop while p_ie # null
;返回界面单元的三个顶点的地址
p_gp1=ie_vert(p_ie,1)
p_gp2=ie_vert(p_ie,2)
p_gp3=ie_vert(p_ie,3)
;以这三个界面单元顶点为水面的三个顶点,生成水面
;========interface的节点和网格节点的地址是分别存放的
x1=in_pos(p_gp1,1)
y1=in_pos(p_gp1,2)
z1=in_pos(p_gp1,3)
x2=in_pos(p_gp2,1)
y2=in_pos(p_gp2,2)
z2=in_pos(p_gp2,3)
x3=in_pos(p_gp3,1)
y3=in_pos(p_gp3,2)
z3=in_pos(p_gp3,3)
command
water table face x1,y1,z1 x2,y2,z2 x3,y3,z3
endcommand
p_ie=ie_next(p_ie)
endloop
end
model null range group Base
model null range group Top
water_table
int 1 del
plo water
Sample Text
修正版本:
;================
;导入网格数据以生成水面
impgrid ww
;为建立水面设置“虚拟界面”而分组为水上部分和水下部分
group water_below range group 1 any group 2 any
group water_above range group water_below not
gen separate water_below
interface 1 wrap water_below water_above
set grav 0 -9.81 0
water den 1000
;==================================
;利用遍历界面单元节点生成水面
def water_table
p_i=i_head
p_ie=i_elem_head(p_i) ;界面1单元指针赋予p_ie
loop while p_ie # null
;返回界面单元的三个顶点的地址
p_gp1=ie_vert(p_ie,1)
p_gp2=ie_vert(p_ie,2)
p_gp3=ie_vert(p_ie,3)
;以这三个界面单元顶点为水面的三个顶点,生成水面
;========interface的节点和网格节点的地址是分别存放的
x1=in_pos(p_gp1,1)-0.001
y1=in_pos(p_gp1,2)-0.001
z1=in_pos(p_gp1,3)-0.001
x2=in_pos(p_gp2,1)+0.001
y2=in_pos(p_gp2,2)+0.001
z2=in_pos(p_gp2,3)+0.001
x3=in_pos(p_gp3,1)+0.001
y3=in_pos(p_gp3,2)+0.001
z3=in_pos(p_gp3,3)+0.001
command
water table face x1,y1,z1 x2,y2,z2 x3,y3,z3
endcommand
p_ie=ie_next(p_ie)
endloop
end
;删除单元组water_below和组water_above,为导入实际的材料分组做准备
model null range group water_below
model null range group water_above
;===========================
;建立实际材料分组部分
;导入网格数据,重新分组
impgrid ww
attach face
group soil range group 2 any group 4 any
group rock range group 1 any group 3 any
;建立真实的“界面”
gen separate rock
interface 2 wrap rock soil
;生成水面
water_table
;删除虚拟界面单元
int 1 dele
;彻底删除原先的分组,减少存储空间
dele range group water_below
dele range group water_above
plot set cent 300 125.6 350 dist 2061 rotation 130 290 0 ang 22.5 mag 1.25
plot add axes red scal 0.5
plo add water lgre
plo add sketch red
plo sho
关键部分在于红色突出显示的部分,因为FLAC3D自身似乎有些小BUG,导致界面单元不能完全覆盖所依附的表面,所以把这个界面加上一个比较小的值(比如0.001)扩大范围,使之完全覆盖所依附的表面就可以了(修正程序由ssw1216提供,在此表示感谢)。
[ 本帖最后由 benjackxu 于 2006-11-9 08:24 编辑 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
1
查看全部评分
-
|