作者:李振
版权申明:本文版权归ITASCA中国公司所有,引用或转载请注明出处。
另,本文案例代码可通过百度网盘下载:
链接:https://pan.baidu.com/s/1jN9KAclwEbJQqyOSuuKI0w
提取码:rw92
Geometry是继FLAC3D 5.0/3DEC 5.0之后,ITASCA研发工程师根据咨询项目需求,形成一整套借助几何对象辅助数值模型前后处理的特色功能。
Geometry功能的直接操作对象是几何对象,几何对象可通过Geometry提供的图元创建与编辑功能(命令或fish函数)来直接构建,也允许用户导入由外部平台生成的图形(导入以dxf、stl后缀格式的图形文件)。几何对象在ITASCA软件中被组织成几何数据集合(即Geometry Set)。按几何对象的维度差异,Geometry Set可细分为点、线、面三类。
Geometry功能针对性丰富了用户利用常规几何数据对ITASCA数值模型进行快速编辑与干预的能力,其应用主要区分为前后处理两方面,相关代表性应用一般包括:
l 前处理:
Ø 作为模型范围逻辑(range logic)过滤器,普遍用于帮助筛选与确定用户输入命令的实际执行范围;
Ø 辅助构建、编辑网格与结构单元模型。如基于封闭Geometry几何形态的网格自动生成,采用Geometry几何对象修正网格模型边界形态等;
Ø 为裂隙岩体数值模型的构建提供裂隙网络几何数据。
后处理:主要功能在于复制数值单元力学响应至指定几何对象,再利用几何对象进行后处理展示。该项功能的常用情形是,由于尺度差异过大,大尺度宏观模型往往无法同时直接模拟小尺度工程结构,该功能可以帮助直观考察工程结构部位受其他部位施工扰动的潜在影响和程度。
本期推文主要介绍以下内容:
1. Geometry功能的基本应用
2. Geometry的其他用法
3. Geometry用法注意事项
4. Geometry用法小结
1. Geometry功能的基本应用
本节基于最新版的FLAC3D 7.0软件,对Geometry的应用场景进行相关的解析,并给出了相关案例。
1. 直接构建网格模型
Ø 命令格式为:
u 【zone generate from-geometry ...】
Ø 操作流程:
l 通过外部软件构建封闭的面网格的geometry文件,本例通过Rhino构建并导出为stl文件;
l 通过命令导入FLAC3D,用zone填充Geometry对象;
l 通过命令划分类组,生成简单模型文件。
图 1 给出了最终生成的网格模型,并在下方给出了相应的命令流。需要注意的是,在Rhino中构建的面网格是四边形,但导入到FLAC3D中会自动显示为三角网格。
图 1 通过导入封闭的stl格式的geometry生成的简单城门洞网格模型
相关命令为:
model new
;import stl ,named 'tuns'
geometry import 'simpleTun.stl' format stl set 'tuns'
;based 'tuns',generate the mesh
zone generate from-geometry ...
minimum-edge 0.5 ...
maximum-edge 1 ...
size-surface 0.0 ...
size-volume 0.0 ...
set 'tuns'
; set groups of the mesh
zone group 'rock'
zone group 'tunnel' range cylinder end-1 (25,0,25) end-2 (25,50,25) radius 0 5 ...
p-z 25 10000
zone group 'tunnel' range p-x 20 30 p-z 15 25
model save 'simpleTun'
此外,用于直接构建网格模型的命令还有【zone generate from-building-blocks】和【zone generate from-extruder】,这两条命令主要是在FLAC3D内置的GUI界面(即building blocks和extrusion面板中)构建模型时会用到,用户可留意GUI操作完成后FLAC3D下方命令行的输出文字,因此,本小节未对此两条命令进行详述。
2. 构建起伏地表模型
对于埋深较浅的隧道、地下洞室工程,由于地表起伏较大,地表对工程场地的地应力场有较大的影响,而对于起伏地表起伏更大的边坡堆积体的稳定分析,地表的形态直接决定了边坡的安全系数。因此数值模型中需要将地表考虑进去。图 2给出了相应的地表模型构建示例,并在下方给出了相应的命令流。需要注意的是,例题中利用FLAC3D命令创建了一个具有4个顶点的geometry对象,并命名为’surf01’,后续正是利用了该对象来生成土层。
当然,如果下图模型中,根据地质勘察资料,得到的‘Clay’与‘Sand’之间的接触层面为曲面,也可以将该曲面导入,从而构建跟接近实际的土层网格模型。
图 2 通过geometry对象生成带有起伏地表的网格模型
model new
; import outfile 'Topo_01.stl' named 'topo'
geometry import 'Topo_01.stl' set 'topo'
;Use FLAC3D command , generate geometry object named 'surf01'
geometry polygon create by-positions ...
(-200 ,-200 ,300) ...
(1700,-200 ,300) ...
(1700,1200 ,300) ...
(-200 ,1200 ,300) ...
set 'surf01'
; generate based mesh named 'Rock'
zone create brick size 50 40 5 ...
point 0 (0 ,0 ,-100) ...
point 1 (1500,0 ,-100) ...
point 2 ( 0,1000 ,-100) ...
point 3 (0 ,0 ,100) ...
group 'Rock'
; generate material layer mesh named 'Sand' by geometry-set 'surf01'
zone generate from-topography geometry-set 'surf01' ...
segments 5 ...
ratio 1.0 ...
group 'Sand'
; generate material layer mesh named 'Clay' by geometry-set 'topo'
zone generate from-topography geometry-set 'topo' ...
segments 8 ...
ratio 0.8 ...
group 'Clay'
model save 'topoModel'
3. 辅助划分复杂模型的类组group
图 3给出了一个露天矿坑开挖的模型,假定项目前期并不需要做太精细的分析,因此完全可以构建一个宏观的大区域模型来了解分步开采过程中的响应。基于此,借助导入的geometry对象(dxf格式的网格面),便可对基本网格模型进行复杂类组(group)的划分。文中一并给出了该模型构建的命令流。
图 4 给出了利用Geometry对象划分露天矿坑类组group的原理示意图。以命令行【zone group 'Rock01' range geometry-space 's1' count 1 direction (0,1,0) 】为例:对于初始的'Rock00'网格,s1和s2两个面将整个网格模型分成了A、B、C、D四块区域,遍历整个模型中的单元,从每个单元的中心(Center)以参数direction (0,1,0)(方向向量)定义的方向来发射射线,根据射线与geometry对象的相交次数来判定是否属于用户定义的group,该条命令中,C、D区域的网格都与‘s1’相交1次,满足条件,因此将‘s1’面网格下方(指图片中的下方)的单元定义为类组group 'Rock01'。后续命令原理与此相同。于是就最终得到了属于不同slot的两个类组,其中slot ‘default’用于划分岩体材料,slot ‘exc’用于划分开挖步。
此外,对于【zone densify segments 2 maximum-length 50 range geometry-distance 'Y0' gap 80 extent 】命令,是用来对’Y0’面附近80m距离的网格进行加密的,加密采用FLAC3D的octree网格(八叉树网格)技术。
图 3 Geometry用于辅助划分露天矿坑类组group的示例
图 4 Geometry划分露天矿坑类组group的原理
; Open pit model command
model new
;;step01-------set rock material groups---------------------------
geometry import 's1.dxf'
geometry import 's2.dxf'
zone create brick size (50,50,50) point 0 (2700,-10500,-1000) ...
edge 4000 group 'Rock00'
zone delete range position-z 0 1000000
zone group 'Rock01' range geometry-space 's1' count 1 direction (0,1,0)
zone group 'Rock02' range geometry-space 's2' count 1 direction (1,0,0) group 'Rock00'
zone group 'Rock03' range geometry-space 's2' count 1 direction (1,0,0) group 'Rock01'
model save 'mdl_01'
;;step02-------set rock excavate groups---------------------------
geometry import 'Y0.dxf'
geometry import 'Y1.dxf'
geometry import 'Y2.dxf'
;;use octree mesh to dens the excav boundary-------
zone densify segments 2 maximum-length 50 ...
range geometry-distance 'Y0' gap 80 extent
zone densify segments 2 maximum-length 50 ...
range geometry-distance 'Y1' gap 80 extent
zone densify segments 2 maximum-length 50 ...
range geometry-distance 'Y2' gap 80 extent
zone group 'rockAll' slot 'exc'
zone group 'excav03' slot 'exc' range geometry-space 'Y2' count 1 direction (0,0,-1)
zone group 'excav02' slot 'exc' range geometry-space 'Y1' count 1 direction (0,0,-1)
zone group 'excav01' slot 'exc' range geometry-space 'Y0' count 1 direction (0,0,-1)
model save 'mdl_02'
4. 辅助构建模型的断层类组group
Geometry划分类组的功能非常丰富,本例给出了利用导入的断层面构建实体断层带的案例,本例基于1节的隧道模型,构建了一个与隧道大角度相交的陡倾断层带,断层带宽度假定为4m,如图 5 所示。
重点命令:【zone densify segments 4 maximum-length 0.5 range geometry-distance 'Fault01' gap 2.0 extent 】,其中【segments 4】表示每个方向上网格分裂的份数(此处在x,y,z的3个方向上都再分为4份),【maximum-length 0.5】表示网格最大长度限定为0.5m,【geometry-distance 'Fault01' gap 2.0 extent】表示选择与'Fault01' 的两侧距离为2m的网格单元,并将其进行octree网格再细分。命令【zone group 'fault01' slot 'flt' range geometry-distance 'Fault01' gap 2.0】,则将剖分完的网格,满足与'Fault01' 的距离为2m(两侧的网格)的zone设置为group 'fault01' slot 'flt'的类组。
图 5 Geometry辅助生成实体断层带的示例
model res 'simpleTun'
;import stl ,named 'Fault01'
geometry import 'Fault01.stl' format stl set 'Fault01'
zone densify segments 4 maximum-length 0.5 ...
range geometry-distance 'Fault01' gap 2.0 extent
zone group 'fault01' slot 'flt' range geometry-distance 'Fault01' gap 2.0
zone attach by-face
model save '02Fault'
5. 计算结果数据的喷涂映射paint
喷涂映射paint指的是,可以将计算结果的标量scalar,如应力、应变等,或用户自定义的fish标量等,映射到导入的geometry的节点上,以云图的形式展示出来。譬如,大型水电站厂房选址过程中,首先要进行大场地的地应力反演,然后再根据地应力的方位和量值来确定厂房的位置,此时就可以在拟定的厂房位置导入geometry文件,将应力投射在geometry对象上,以便进行后续的选址评估。
图 6给出了将变形和大主应力喷涂到Geometry对象的示例,并给出了相应的命令流。
主要命令为:【 geometry paint-extra i keyword... <range>】
图 6 Geometry数据的喷涂映射的示例
model new
model large-strain off
zone create radial-cylinder fill group 'Excavate'
zone reflect origin (0,0,0) normal (0,0,1)
zone cmodel assign mohr-coulomb
zone property bulk 3e8 shear 2e8 density 1000 cohesion 1e6 friction 25
zone face skin
zone face apply velocity-normal 0 range group 'East' or 'West'
zone face apply velocity-normal 0 range group 'North' or 'South'
zone face apply velocity-normal 0 range group 'Bottom'
model gravity 9.81
zone initialize-stresses
model solve convergence 1
zone relax excavate range group 'Excavate'
model solve convergence 1
model save 'exc01'
;---------------------------------------------------------------------------------
geometry select 'Tun'
;利用FLAC3D内置的命令创建一个小型隧道面网格,并用于喷涂映射paint
geometry edge create by-position (2,1,0) (2,1,0.5) (2,1.5,0.6) ...
(2,2,0.5) (2,2,0) (2,1,0)
geometry generate from-edges extrude (8,0,0) segments 32
geometry paint-extra 1 displacement
geometry paint-extra 2 stress quantity minimum
model save 'exc01_paint'
2. Geometry的其他用法
1. 构建水位面
对于考虑地下水作用的洞室、边坡工程,通过勘探资料可以构建起伏不规则的地下水位面,然后生成静水孔隙水压力。图 7 给出了借助外部导入的dxf水位曲面,生成边坡静水压力场并进行边坡稳定分析的示例。其中,【zone water set 'water' 】命令用于生成水位面,并自动根据水位面形成梯度变化的孔压场。本例来源于FLAC3D手册案例,详细参考‘SlopeCurvature.dat’。
图 7 借助Geometry生成边坡的静水压力场
关键命令为:
;------------------------------------------
; Import water table from DXF file.
geometry import 'water.dxf'
zone water density 1000
zone water set 'water'
;------------------------------------------
2. 构建结构单元模型
对于形态复杂的洞室、边坡支护结构,如曲线型的隧道支护,分台阶开挖的隧道、高陡边坡,其锚杆、锚索和喷层单元形态复杂多变,此时可以考虑采用外部软件构建相应的文件(如利用CAD中的镜像、阵列,可很容易批量生成空间线),然后导入FLAC3D生成相应的支护结构单元。图 8 给出了利用导入的三维多段线和面网格生成FLAC3D的cable和liner支护单元的示例,并给出了所用到的关键命令流。
图 8 利用导入的三维多段线和面网格生成FLAC3D的cable和liner支护单元
关键命令为:
;------------------------------------------
;;.....
geometry import 'cables_tunnel_2.dxf' format dxf
struct cable import from-geometry 'cables_tunnel_2' id 12
struct cable property density @_de_cab young @_Em_cab yield-tension @_yld_ten cross-sectional-area @_area2 ...
grout-stiffness @_stiffness2 grout-cohesion @_cohesion2 grout-perimeter @_perimeter2 range id 12
;;.....
struct liner import from-file "meshxzPw.stl" id=1
struct liner import from-file "meshxzWsYs.stl" id=2
struct liner import from-file "meshyzPw.stl" id=3
struct liner property isotropic (15e3,0.25) thickness 0.2 density 2500e-6
;;.....
;------------------------------------------
3. Geometry用法注意事项
l 导入到模型中的Geometry对象,如果用于构建地表、水位面、面结构单元、切割块体或辅助划分类组等,其格式一般为DXF、STL或通过软件内置命令和fish手动生成的对象。特别需要注意的是,Geometry的面对象必须由离散的三角网构成,外部软件如AutoCAD/Rhino/Gocad,皆可用于构建这种文件。
l 使用geometry辅助划分类组时,如果用到了OCTREE(八叉树网格)技术,在计算之前,切记要使用【zone attach by-face 】将网格进行连接,否则,这些网格分裂的地方是不连续的,导致计算错误、或不收敛。
l 用于喷涂映射的Geometry对象,既可以是面网格类型也可以是空间线类型;
l 用于生成线结构单元的Geometry对象,一般为线类型,实际使用过程中,不同的线型可能会出现一些错误,可将外部文件中的线类型更改一下再试试(如将直线改为三维多段线等)。
4. Geometry用法小结
本文对FLAC3D 7.0软件中Geometry对象的使用方法进行了演示和总结,并给出了相应的命令流,案例大都是根据手册的案例改编而成。
实际工作中,用户可参考上述内容灵活使用Geometry对象,使自己能更加轻松的完成数值计算工作;本文所列举的Geometry的使用并不一定全面,更多内容可参考软件说明手册,文中给出的关键命令的解释言简意赅,如果不太明白,可详细阅读手册中对应的关键词对应的词条解释;Geometry尚有更多高级应用,并且软件手册中给出了与geometry对应的的fish函数,综合灵活运用可使我们能更为高效地完成计算分析工作。
本文仅给出了FLAC3D 7.0中的Geometry使用方法,对与3DEC和PFC,使用方法类似,并未详述。
参考文献:
[1] ItascaConsulting Group Inc.. FLAC3D User’s Manual[R]. Minneapolis:Itasca Consulting Group Inc.,2021.