好文档 - 专业文书写作范文服务资料分享网站

FLAC3D中一些问题的讨论

天下 分享 时间: 加入收藏 我要投稿 点赞

对于建模方法的选择,建议根据以下步骤进行。首先,对于特定的问题条件和特性,确定扩散进程的特征时间,且将此时间同所关注的实际时间进行对比。其次,考虑对于系统的扰动是由孔压控制还是由固体控制。第三,确定流体刚度对固体基质骨架的刚度比。最后,基于这3个因素综合考虑选择合适的建模方法。 在建模时需注意:

(1)为建立无地下水流动的有效应力分析的初始条件,用water table或initial pp命令,或者用FISH函数建立稳定状态的孔压分布。指定正确的位于地下水位以下区域的湿密度和地下水位以上区域的干密度。

(2)为建立地下水流动的有效应力分析的初始条件,如果地下水位位置未知,用initial命令或FISH函数建立稳定孔压分布,或者指定set fluid on和set mech off并逐步计算到稳定状态。将流体模量设为一个较小的值以加快部分饱和系统的收敛速度。注意设定的流体模量值应满足数值稳定。

(3)为建立孔压驱动分析的初始条件,如果地下水位位置未知,用initial命令或FISH函数建立稳定孔压分布,或者指定set fluid on和set mech off并逐步计算到稳定状态。将流体模量设为一个较小的值以加快部分饱和系统的收敛速度。注意设定的流体模量值应满足数值稳定。

(4)非流固耦合方法推荐用于孔压驱动系统,且在相对刚度比远大于1时谨慎使用。注意在单纯流动分析阶段调整流体模量的值以满足耦合扩散率是正确的。

(5)完全耦合分析中,注意对于相对刚度比远大于1时的情况,如果流体模量调整得低于某个值,时间响应将会接近于无限大的流体模量的时间。

2.FLAC3D固流耦合学习小结

通过几天来对FLAC3D手册固流耦合部分的翻译和学习,对FLAC3D在流体方面的应用有了大致的了解。其计算模式主要分为几种情况:无渗流、非耦合方法以及各种不同程度的固流耦合方法。这些方法都有各自的适应条件,应根据需要模拟问题的具体情况加以选择。总体来说,固流耦合涉及到了两种不同形态物质的力学行为研究甚至二者的相互作用,这比单一介质的分析复杂多了,其参数也比单一介质分析要多得多。众所周知,数值模拟的一个最大难题便是参数的确定,参数越多,各种不可预测因素就越多,直接影响到数值计算的有效性和准确性。尤其是对于岩土工程,各种不确定因素太多,很多人由此对数值模拟结果产生了怀疑,认为那是花架子,放在项目报告里只有唬人的作用。中尉对此不敢苟同。任何技术的发展均遵从实践-理论-实践的过程,经验以及由经验得出的方法确实在很多工程中起到了不可抹杀的作用,但经验如果上升不到理论,就永远是经验,不能是“放之四海皆准”的真理,真理虽然没有绝对,但在一定时期内它是推动整个技术进步的源动力。没有理论,就不能把实践上升到更高程度的实践。数值模拟目前在所有领域内均取得了广泛的应用便是其具有强大生命力的最好证明。诚然,岩土工程领域是有很多不确定因素,数值模拟结果的不尽人意应该是多种因素造成的,我们为何不检讨获取数值模拟参数的现场观测手段、实验室手段,而去质疑这种方法本身?

在这几天的学习过程中,还有一点对翻译的额外体会。以前也看过很多中国人直接翻译自老外的教材,以计算机教材最多,看的过程中总感觉翻译的痕迹太重,可当自己翻译出来时,才发现无论怎么修改,润色,仍然晦涩不堪。中尉的一位朋友对这个问题曾有评论,中尉很以为然,援引之:中文的表达方式惯用短句,层层推进,像一条河,后浪推前浪,引人入胜。而英文的句子像一棵棵枝繁叶茂的大树,句子套句子,得透过无数的从句、定语去寻找主干。翻译者或许是在两种思维方式中穿梭得迷了路,翻译过来的句子披着中文的外衣

5

却完全是英文的表达方式,看到主语之后就是一大堆莫名其妙的短句、分号、连接符,最后找到谓语、宾语时已经不知所云。

3.关于流固耦合的问题

http://www.simwe.com/cgi-bin/english/topic_show.cgi?id=62969&pg=2 qinjianshe 记住概念:

ko为有效应力之比, ini应力为总应力

按此原则计算初始应力场 水平应力=k0×竖向有效应力+水应力 hfm009 请问

水平应力=k0×竖向有效应力+水应力,其水应力还需要乘以Porosity吗?

下面是我所建立的模型,总觉得初始应力场有点怪,调试了好几天,还是老样子,还望抽空指点! new

config fluid def para_model wid_x=70 h_model=-100

rad_tun=3.5 ;隧道半径 rad_tunnel=(-1)*rad_tun width_m=1 dep_r1=20

dep_r11=(-1)*dep_r1 dep_r2=15

dep_r22=-dep_r2

depth_r=-(dep_r1+dep_r2) wid_add=wid_x-dep_r1

h_add=-dep_r2-dep_r1-dep_r1-h_model end

para_model

gen zon cyl p0 0 0 depth_r p1 add rad_tun 0 0 p2 add 0 width_m 0 p3 add 0 0 rad_tun size 6 1 8 rat 1.2 1 1 group tunnel

gen zon radcyl p0 0 0 depth_r p1 add dep_r1 0 0 p2 add 0 width_m 0 p3 add 0 0 dep_r1 & dim rad_tun rad_tun rad_tun rad_tun size 5 1 8 8 rat 1 1 1 1.2

gen zone brick p0 dep_r1 0 depth_r p1 add wid_add 0 0 p2 add 0 width_m 0 p3 add 0 0 dep_r1 & size 5 1 4 rat 1.3 1 1

gen zon reflect normal 0 0 1 origin 0 0 depth_r

gen zone brick p0 0 0 h_model p1 add dep_r1 0 0 p2 add 0 width_m 0 p3 add 0 0 h_add & size 4 1 4 rat 1 1 1

6

gen zone brick p0 dep_r1 0 h_model p1 add wid_add 0 0 p2 add 0 width_m 0 p3 add 0 0 h_add & size 5 1 4 rat 1.3 1 1 ; assign names to groups of zones group rock1 range group tunnel not

gen zone brick p0 0 0 dep_r22 p1 add dep_r1 0 0 p2 add 0 width_m 0 p3 add 0 0 dep_r2 & size 4 1 3 rat 1 1 1

gen zone brick p0 dep_r1 0 dep_r22 p1 add wid_add 0 0 p2 add 0 width_m 0 p3 add 0 0 dep_r2 & size 5 1 3 rat 1.3 1 1

group rock2 range group rock1 not group tunnel not gen zon reflect normal 1 0 0 origin 0 0 0 ; --------------fluid flow model---------------- model fl_iso range group rock1 prop perm 1.0e-9 poro 0.3 biot_c 1 model fl_iso range group tunnel prop perm 1.0e-9 poro 0.3 biot_c 1 model fl_iso range group rock2 prop perm 1.0e-7 poro 0.3 biot_c 1 ini fmod 2e9 ini fdensity 1e3

; -------------- mechanical model ---------------- model elas ini dens 1500

prop bulk 5e10 shear 3.0e9 range group rock1 prop bulk 5e10 shear 3.0e9 range group tunnel prop bulk 5e10 shear 3.0e9 range group rock2 ; assign boundary conditions fix x range x 69.9 70.1 fix x range x -70.1 -69.9 fix z range z -100.1 -99.9 fix y

; --- initial stress state --- ini pp 2.0e5 grad 0 0 -10000 fix pp range z -0.1 0.1 fix pp range z -100.1 -99.9 ;

set fluid biot on ;该处取消,则产生超空隙水压力 set fluid off set grav 0 0 -10 set large solve

plot sketch plot add cont pp qinjianshe

个人愚见:水应力不需要乘以Porosity

7

4.也谈采用FLAC3D对地下采矿的模拟

以下转自中尉发到SIMWE论坛FLAC\\FLAC3D版面的帖子

地下采矿,以层状的煤层开采为例,目前很多都是采用全部垮落法,煤层开采后,采空区岩层从弯曲下沉到出现裂隙并最终垮落,按开采沉陷“上三带”的说法,就是采空区上覆岩层形成了垮落带、裂隙带和弯曲下沉带。对于这样一个会出现完整岩层垮落成松散矸石的过程,采用基于连续介质的FLAC来模拟,本身就并不十分恰当!因为采空区上覆岩层垮落后,已经不再是连续介质。如果采用FLAC模拟,在大范围的开采(长壁开采一般范围都很大)后,绝大多数情况下是算不到平衡状态的,但有可能出现稳定的塑性流动状态,从计算原理上来说,这是非常正常的,而不是什么参数选取的问题。采矿工程不同于其他地下岩土工程之处就在于,它不对采空区进行任何支护处理,而其他工程不论是地下厂房,隧道开挖等都会进行及时支护,保持了围岩的完整性和稳定性。虽然从开采沉陷角度来说,岩层移动最终会有个稳定过程,但由于FLAC本身不能模拟岩层垮落后形成的散体对上覆岩层起到一定的支撑作用,因此如果不对采空区进行另外的处理,一般是不会计算到系统默认的平衡状态(最大不平衡力比率达到1×10-5)的,除非开采范围很小。于是,论坛里出现了很多关于用FLAC模拟地下开采后对采空区进行处理方法的讨论,如对采空区进行弹性充填等。对于这些方法,本人也曾做过一些试验,效果并不好,毕竟采空区垮落不是充填,这样做有一种“亡羊补牢”的感觉。

如果非要用FLAC来模拟地下开采,本人建议研究重点放在裂隙带及以上的弯曲下沉带到地表这段范围,因为这部分岩层还比较完整、连续,对于涉及到采场覆岩破坏结构方面的研究,建议还是采用离散元进行。

以上观点,是。己应用FLAC做开采沉陷两年来的体会,如有不妥,欢迎各位指正并交流!

5.FLAC3D本构模型开发

FLAC3D基于显式有限差分格式,计算过程首先调用运动方程,由初始应力和边界条件计算出新的速度和位移,然后,由速度计算出应变率,进而根据本构方程获得新的应力或力。显式有限差分法计算流程如图。

FLAC3D本构模型的主要功能就是根据应变增量(应变率)返回新的应力张量。 FLAC3D采用面向对象的语言C++编写。C++语言的特点是采用面向对象方法,使用类来代表对象进行编程。与对象有关的信息被封装在类中,这些信息在类的外部是不可见的。与对象的通信通过成员函数操作封装数据来完成。一个新的对象类型可以从基类派生而来,基类的成员函数也可被派生类的同名函数覆盖。这种方式便于程序的模块化设计。 FLAC3D中的所有本构模型都是以动态链接库文件(.dll文件)的形式提供,自定义本构模型也不例外。

8

动态链接库文件必须采用VC++6.0(SP4)或更高版本编译得到。用VC++编写自定义FLAC3D本构模型的过程主要包括:基类、成员函数的定义,模型注册,模型与FLAC3D间的数据传递以及模型状态指示。 基类的描述

基类提供了实际本构模型的框架,用户自定义模型类都继承于该类。基类命名为ConstitutiveModel,由于它定义了一系列“虚”(语法上以0为标志)的成员函数,因此又被称为“抽象”类。这也是说不能创建该类的任何对象,而其它继承自该类的类的对象必须给出实际的成员函数来代替基类的“虚”函数。基类的头文件(.h文件)中定义了这些“虚”的成员函数。

模型成员函数

ConstitutiveModel类有很多成员函数,主要有: const char *Keyword() 返回一个指向包括模型名称的字符数组的指针,以便用户在FLAC3D中使用MODEL命令时,C++能够识别。 const char *Name() 返回一个指向包含模型名称的字符数组的指针,以识别用户使用如PRINT Zone等命令。 const char **Properties() 返回一个指向包含模型力学参数名称的字符串数组的指针,并用一个空指针代表字符串数组的结束。这样程序能识别用户输入的PROPERTY命令。 const char *States() 返回一个包含单元状态名称的字符串数组的指针,并用一个空指针代表字符串数组的结束。这样程序就能输出或显示用户自定义的模型内部状态(如:塑性流动、屈服、受拉)。 const char *Run(unsigned uDim, State *ps) 该函数在FLAC3D计算循环的每一步对每一个子单元使用。模型根据应变增量对应力张量进行更新。这个函数是本构模型的核心,不同的本构模型通过不同的Run()函数得到不同的应力张量。所有本构模型的Run()函数都继承自ConstitutiveModel类的Run()函数。 模型注册

每一个用户自定义本构模型有其自己的模型名称、力学参数名称和状态指示器。FLAC3D通过调用模型对象的静态全局实例获得用户定义模型的信息并使用结构子(constructor)将新模型注册到模型列表中。一个特定模型只有一个静态注册产生,方便将其放到模型的C++源码中,这样当相应的.dll文件被装载时,模型被注册。 数据传递

在FLAC3D和用户自定义模型间的最重要的连接就是成员函数Run(unsigned nDim, State *ps),它在模型的计算循环时计算其力学响应。State结构被用来传输信息和生成模型。同时,在非线性模型中,Run()函数也用来传递模型的内部状态。 状态指示

FLAC3D中的单元是由四面体子单元所组成,每一个四面体有记录其当前状态的成员变量。该成员变量共有16位,能够代表最多15种不同的状态。对于用户定义本构模型,用户可以命名一种状态并为其分配特定的位。 头文件和源文件

在C++中,主要有头文件(.h)和C++源文件(.cpp)两种文件类型,头文件作为一种包含功能函数、数据接口声明的载体文件,用于保存程序的声明(declaration),是用户应用程序和函数库之间的桥梁和纽带。而源文件(.cpp)用于保存程序的实现(implementation),是具体实现代码。先在VC++6.0环境中建立一个工程(project)文件jdmohr.dsw,工程文件中包含了空的头文件和源文件。 FLAC3D的本构模型需要用到如表所示的一些头文件和源文件: FLAC3D本构模型的C++头文件和源文件名称 功能

CONMODEL.h 声明与本构模型交换数据的变量数据类型State,保存结果的数据类型ModelSaveObject和本构模型基类ConstitutiveModel

STENSOR.h 声明存储对称张量(应力或应变张量)STensor类

9

FLAC3D中一些问题的讨论

对于建模方法的选择,建议根据以下步骤进行。首先,对于特定的问题条件和特性,确定扩散进程的特征时间,且将此时间同所关注的实际时间进行对比。其次,考虑对于系统的扰动是由孔压控制还是由固体控制。第三,确定流体刚度对固体基质骨架的刚度比。最后,基于这3个因素综合考虑选择合适的建模方法。在建模时需注意:(1)为建立无地下水流动的有效应力分析的初始条件,用watertable或ini
推荐度:
点击下载文档文档为doc格式
5p63s517te4mn0g1luee
领取福利

微信扫码领取福利

微信扫码分享