FLAC3D学习笔记(自己总结版) 下载本文

内容发布更新时间 : 2024/11/20 20:27:09星期一 下面是文章的全部内容请认真阅读。

一、建立模型笔记

1键盘上的键的功能:X,Y,Z分别控制所建立的模型围绕X,Y,Z三个轴做逆时针旋转.如果打开大小写锁定键,分边按XYZ时建立的模型会做顺时针旋转.+号的功能是加大模型旋转的角度,-号的功能是减小模型旋转的角度。

2键盘上的上下左右四个键可以实现图形的向上向下,向左和向右的移动.

3当在一个区域建立多个模型的时候,有时候为了镜像单个模块儿,需要预先编组,编组的方法如下: gen zon tunint p0 0 0 0 p1 0 10 0 p2 5 5 0 p3 0 0 -5 p4 5 10 0 &

p5 5 5 -5 p6 0 10 -5 p7 5 10 -5 dim sq2 sq2 1 sq2 1 1 1 group(编组) z1(组名为:z1) & fill group tunnel

4镜像整个模型的方法:首先判断即将镜像的模型在原模型的哪个方向(即三个轴的方向),然后在轴所在的方向上去两个点.其中一个是原点(origin(xyz)).

5镜像部分模型的方法: gen zone reflect normal (x,y,z) origin (x,y,z) range group z1就可以了.

6特别要注意的一点:交叉巷道的巷道充填和巷道的网格是两个组,所以在镜像的时候不要忘了给充填部分镜像.

7 group radcyl range group cylint not (编组的时候不包括cylint) 7 快捷键总结

Ctrl+Z 局部缩放的功能。Ctrl+R的功能是恢复到初始状态。 8模型建立的方法:

方法1:利用默认值生成网格,

各个默认值:(1)p0的默认值是(0,0,0),网格的每边的单元格数size默认值是10,网格每边的长度默认值为size的值.

方法2:利用4个点的坐标来生成矩形网格.p0~p3 size 方法3:利用edge来确定边长生成矩形网格.

方法4:利用参数ratio来确定单元体几何边画边生成矩形网格. 方法5:利用参数add(相对坐标)来生成矩形网格. 方法6:利用八个点的左边来生成矩形网格. 9、用户自定义模型的方法 我来贡献一点自己的成果:

FLAC3D的二次开发环境提供了开放的用户接口,在软件安装文件中包含了软件自带所有本构模型的源代码,且给出了Mohr-Coulomb模型和应变软化模型的编译示例,因此可以方便地进行本构模型的修改与开发。为了方便起见,下面的说明以建立UserModel模型为例。

(1) 在模型头文件(usermodel.h)中进行新的本构模型派生类的声明,修改模型的ID(为避免与已有模型冲突,一般要求大于100)、名称和版本,修改派生类的私有成员,主要包括模型的基本参数及程序执行过程中主要的中间变量。( ? p6 u' J5 Q3 y( a

(2) 在程序C++文件(usermodel.cpp)中修改模型结构(UserModel::UserModel(bool bRegister): Constit -utive Model)的定义,这是一个空函数,主要功能是给(1)中定义的所有私有成员赋初值,一般均赋值为0.0。 (3) 修改const char **UserModel: roperties()函数,该函数包含了给定模型的参数名称字符串,在FLAC3D的计算命令中需要用到这些字符串进行模型参数赋值。

(4) const char **UserModel::States()函数是单元在计算过程中的状态指示器,可以按照需要进行修改指示器的内容。

(5) 按照派生类中定义的模型参数变量修改double UserModel::GetProperty()和void UserModel:: SetProperty()函数,这两个函数共同完成模型参数的赋值功能。' U; e G' W\

(6) const char * UserModel::Initialize()函数在执行CYCLE命令或大应变模式下对于每个模型单元(zone)调用一次,主要执行参数和状态指示器的初始化,并对派生类声明中定义的私有变量进行赋值。值得注意的是,Initialize()函数调用时没有定义应变分量,但可以调用应力分量,但不能对应力进行修改。9 n# e8 |' c- B/ q, B B5 m

(7) const char * UserModel::Run()是整个模型编制过程中最主要的函数,它对每一个字单元(sub-zone)在每次循环时均进行调用,由应变增量计算得到应力增量,从而获得新的应力。在计算过程中,要根据单元应力情况对单元状态指示器进行赋值。当进行塑性模型编制时,需对达到塑性的应力状态进行修正。2 [/ ~. U( A\G. b3 @6 ]. `

(8) 修改const char * UserModel::SaveRestore()中的变量,修改方法同(2)和(5),该函数的主要功能是对计算结果进行保存。

(9) 程序的调试有两种方法。①在VC++的工程设置中将FLAC3D软件中的EXE文件路径加入到程序的调试范围中,并将FLAC3D自带的DLL文件加入到附加动态链接库(Additional DLLs)中,然后在Initialize()或Run()函数中设置断点,进行调试;②在程序文件中加入return()语句,这样可以将希望得到的变量值以错误提示的形式在FLAC3D窗口中得到。 10、网格剖面的画法

方法:首先在命令行里输入edit 11、想知道有多少单元体和节点? 方法:用命令 print info

12、绘制塑形区域命令是什么?

方法: Plot block state shear ;获得剪切屈服的单元,包括shear-n和shear-p

Plot block state tension-p ;获得过去拉伸屈服的单元

Plot block state now ;获得当前处于塑性状态的单元,包括shear-n 和tension-n Plot block state past ;获得过去处于塑性状态的单元,包括shear-p 和tension-p

13、step后面的数字是怎么确定的? 答:

14、开挖模型的命令

Model null range group 组名 Model null range group x x1,x2

画圈的正负号是啥意思?

答:正号表示10的正的几次方.而负号表示负的几次方. 11、关于ratio

ratio代表单元体尺寸变化率,关于只需要记住一点:不同模型的两个尺寸相等的面,采用相同的集合变化率,网格才会重合,ratio对于减少单元的数目有很好的效果。 12、地震波的模拟命令流

set dyn on set dyn multi on set large

free x y z range z -35.1 -34.9 ;去掉模型底部原有的静力条件 apply nquiet squiet dquiet ran z -35.1 -34.9 ;静态边界条件 table 1 read crvel20.txt

apply szz -1.524293e7 hist table 1 ran z -35.1 -34.9 ;加动力载荷

apply syz -1.26984e7 hist table 1 ran z -35.1 -34.9 apply ff ;设置阻尼

set dyn damp rayleigh 0.05 7.14 set dyn time=0

http://www.baisi.net/thread-769057-1-1.html http://www.baisi.net/thread-769129-1-4.html 参考资料

二、材料参数、边界条件,初始条件

1要特别注意fix x y z range z <范围>与fix z range z <范围>之间的差别,前者是x、y、z三方向的位移全被限制,后者只限制了z方向的位移。

[fix x range (范围)命令的功能是保持网格节点在x轴方向制定的参数(速度、压力和温度)不变,range为指定的范围]

Fix x y z range x -0.1 0.1 表示x=0是一个平面,且是固定的

Fix x range x -0.1 0.1 表示x=0是一个平面,只是x的方向不能发生运动。 2、plot hist m vs n 其中m代表y轴,n代表x轴。 3、sxx sxy syy这都是指那个方向:

SXX是x方向的正应力,SYY是y方向的正应力, SXY是指法向指向x轴方向平面(也就是yz面)上的y方向剪应力。

4、history命令

Hist unbal 监测不平衡力,并保留记录

Hist gp zdisp 4,4,8 监测网格坐标点(4,4,8)在z轴方向的记录,并保留记录.

Plot his -2 -3 vs 1 其中的符号表示图形的方向及位置的不同,1代表hist代码中的第一条记录,2代

表hist代码中的第二条记录,3代表hist代码中的第三条记录.一次类推.

补充:在记录历史记录的时候可以自己定义记录的编号:如 his id 12 gp zdisp 4,4,4 绘制图形: 如 plot his 12 5、在fish函数中

如:(1)p_gp=gp_head (意思是指向节点表) 那么后面肯定有一个: p_gp=gp_next(p_gp) (意思是查找下一个节点的ID号) (2) pnt=zone_head ;zone_head指向单元体表 pnt=z_next(pnt) ;查找下一个单元体表 6、sel del link range id 23

sel link id=23 23 target node tgt_num(代表目标节点的ID号) 1, 7、想知道一个节点的x y z 三个分量则用它: ;已知ID

def getgpxyz

gp1=find_gp(1) gp1x=gp_xpos(gp1) gp1y=gp_ypos(gp1) gp1z=gp_zpos(gp1) end getgpxyz

print gp1x gp1y gp1z

8、交集就是range group a group b指的是a和b的公共部分;并集就是range group a any group b any指的是a和b两个部分;Not指的是出了什么什么之外。