找回密码
 注册
Simdroid-非首页
查看: 4572|回复: 76

[命令/FISH] 【原创】借用interface生成任意空间形状的弧形水面(修正版)

[复制链接]
发表于 2006-11-6 08:55:12 | 显示全部楼层 |阅读模式 来自 安徽马鞍山
本帖最后由 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

查看全部评分

 楼主| 发表于 2006-11-6 16:57:51 | 显示全部楼层 来自 安徽马鞍山
Simdroid开发平台
第一张图是生成的空间水位面,第二张图是空间水位面在网格模型种的位置。

[ 本帖最后由 benjackxu 于 2006-11-6 19:22 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2006-11-6 19:26:01 | 显示全部楼层 来自 安徽马鞍山
下面的第一张图是从某侧面观看,孔隙水压力云图,明显表现出不连续,第二张图是从另一侧面观看,孔隙水压力云图,同样表现出不连续。不知何故

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2006-11-6 19:27:37 | 显示全部楼层 来自 安徽马鞍山
这最后一章是模型底部的孔隙水压力云图,从这个视角看,孔隙水压力等值线几近完美。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2006-11-6 21:20:44 | 显示全部楼层 来自 湖南长沙
很新颖的想法啊,强烈支持。 !!!!!!!!!!!!!!!!!
发表于 2006-11-6 23:48:16 | 显示全部楼层 来自 北京
强烈支持,非常好的帖子,又让我开了眼界,多学了一招!!!!!!!!
 楼主| 发表于 2006-11-7 17:24:50 | 显示全部楼层 来自 安徽马鞍山
用sch的程序也非常容易的生成了水面。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2006-11-7 20:36:28 | 显示全部楼层 来自 广东广州
很好的思路,我是新手,下下来研究一下。谢谢lz
 楼主| 发表于 2006-11-9 08:27:30 | 显示全部楼层 来自 安徽马鞍山
这次我又练了把手,把水位面以下的模型都剖分成六面体了,可是孔隙水压力云图还是不连续,奇怪之极,是软件本生的原因吗?。按照这个办法,我的水面可是完全依附于网格模型内部空间的某个面上的啊,因为我是借用界面获取点信息,构造的水面,理论上不存在水面与网格模型不公用点的问题,也就是说不会出现sch老大说的水面穿过网格模型内部zone的问题呀。郁闷ing!

[ 本帖最后由 benjackxu 于 2006-11-9 10:04 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2006-11-9 13:54:48 | 显示全部楼层 来自 北京
我帮你做做看怎样才能解决这个问题! !!!!!!!!!!!!!
 楼主| 发表于 2006-11-9 15:10:27 | 显示全部楼层 来自 安徽马鞍山
谢谢sch (sch),我也在琢磨这个事情,我用不同版本的都试过了,都存在这个问题,本来想把对比的结果给贴出来的,想来也没多少意义,就不贴出来了。最后没试验的就是网格导入方式用call的方式了。
发表于 2006-11-10 10:36:03 | 显示全部楼层 来自 北京
我按着你的思路把你的改了一下,模型边缘没有施加上水位,原因是你生成interface 1没有完全盖住下面模型,也就是你的模型太不规则,解决办法:1)加大interface覆盖面积;2)或者修改一下模型。
你把我的施加水位的代码考入,应该没问题了。

[ 本帖最后由 sch 于 2006-11-10 12:06 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

 楼主| 发表于 2006-11-10 11:00:23 | 显示全部楼层 来自 安徽马鞍山
嗯,好,谢谢sch老大,yahoo!!可惜不在北京,要不请你吃饭。搞得这么复杂?我好好研究研究。

[ 本帖最后由 benjackxu 于 2006-11-10 11:08 编辑 ]
 楼主| 发表于 2006-11-12 17:59:54 | 显示全部楼层 来自 安徽马鞍山

稍微改进了一下,有点效果,不过不明显

把原来命令流稍微修改了一下,效果好了点,不过问题依然存在,边角部分的某些节点还是没能加上孔隙水压力。将原先为建水面导入的网格删除由model null改用del彻底删除,不在占用空间了。
从图1来看,,这个比原来要完美一些,不过不知道那上面的两个“太阳黑子”般的东东怎么会如此不协调得出现在这里。其它地方和还是先前得贴图一样。用print gp pp检查,发现那些“黑子区域”的点的pp确实为0,没加上。估计解决的办法就如sch所说,想办法延展一下界面单元,使它全覆盖水面以下网格模型空间。不过比较麻烦,在ANSYS中把模型设置得比分析的大,生成水面后,删除多余部分。不过不敢再试了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2006-12-4 16:19:02 | 显示全部楼层 来自 北京

君之枫,nihao

你这个模型是模拟什么的?有时间交流以下!!QQ:380928570
发表于 2006-12-28 11:55:29 | 显示全部楼层 来自 广东广州
认真看完了这个帖子,很不错,谢谢benjackxu (君之枫) !
发表于 2007-1-25 17:16:33 | 显示全部楼层 来自 湖南长沙
各位高手真是太厉害了!小弟不胜佩服!各位高手真是太厉害了!小弟不胜佩服!
发表于 2007-7-17 15:55:23 | 显示全部楼层 来自 云南昆明
这种方法不是很完善,我今天按加大inter的方法做了,可是对复杂的模型仍然存在孔压不连续问题。云图好像中毒一样,到处是斑点!  不过对很简单的问题云图比较好 !
希望有好的方法能处理这个问题,也请版主继续研究,进一步完善!呵呵
回复 不支持

使用道具 举报

 楼主| 发表于 2007-7-17 16:25:14 | 显示全部楼层 来自 安徽马鞍山
原帖由 男人 于 2007-7-17 15:55 发表
这种方法不是很完善,我今天按加大inter的方法做了,可是对复杂的模型仍然存在孔压不连续问题。云图好像中毒一样,到处是斑点!  不过对很简单的问题云图比较好 !
希望有好的方法能处理这个问题,也请版主继 ...



事实上这个只是边角部分的极个别点的PP没有加上(虽然云图显得有些夸张),我后来是采用输出所有点的PP值,然后找出未加上PP的点,利用附近点的PP值进行线性差值,单独赋上的,方法笨点,不过管用
回复 不支持

使用道具 举报

发表于 2007-7-18 09:18:25 | 显示全部楼层 来自 云南昆明
是不是需要对程序作限制?让生成water table face 的顺序从一侧到另一侧,有顺序的进行。版主的好像是随机生成的,然后一块块计算最后拼接成一个整体water 面,这中间计算可能就有计算问题。    手册上的一个例子计算时是按顺序生成的,我在想是不是这个问题哟?

    用这程序对简单的问题 确实很适用,云图完美 只要使inter 的大小超过模型大小,而且inter不用依附于原模型!
  谢谢版主的回答!

[ 本帖最后由 男人 于 2007-7-18 09:24 编辑 ]
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-19 19:27 , Processed in 0.057794 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表