本文摘要(由AI生成):
本文介绍了使用FLAC3D软件的Building Blocks功能生成网格的详细步骤,包括新建项目、选择工具、创建和导入块体、从块体生成单元、给模型面赋值组名以及保存模型等。此外,还说明了如何在FLAC3D中通过命令或FISH函数对模型进行回溯和修改。最后,展示了如何在Python中运行FLAC3D,通过代码封装FLAC3D命令,并介绍了it.zone模块中一些函数的用法,用于查看模型运行后的变量值。本文旨在教授读者如何使用FLAC3D和Python进行岩土力学模拟和分析。
对于真实的岩土工程数值模拟来说,如果单纯使用基元命令生成模型,FLAC3D的建模及网格划分工作是非常复杂的,因此许多年来开发人员和研究人员一直在寻求相对高效的建模和划分网格方法,包括从外部程序导入和FLAC3D自身内置。本文首先简要回顾了这些发展历史,在此基础上,介绍了使用Building Blocks产生网格划分的方法,最后把产生的模型集成在Python环境中。
以前为了把外部程序建立的网格导入到FLAC3D,用户必须自己编写接口程序,现在FLAC3D已经内置了ABAQUS和ANSYS的导入接口,如下图所示。
除了可以导入自身的FLAC3D *f3grid文件外,也可以导入ABAQUS的*.inp文件和ANSYS的*lis文件, 对于那些熟悉ABAQUS和ANSYS的朋友, 这下是不是方便多了。
FLAC3D 曾经与CivilFEM合作推出过一个模型交换接口。后来FLAC3D放弃了这种合作,不过现在CivilFEM仍然保留着这个接口。
作为Rhinoceros的一个插件,Griddle是目前FLAC3D力推的独立网格生成程序。网上有许多关于这个插件的讨论,在此就不赘述了。
FLAC3D内置了一些网格生成方法,统称为Building Blocks。尽管这些方法没有Griddle的处理能力强大,但可以应付一些几何形状相对规则的模型。FLAC3D建立模型是通过基元命令组合形成的,如下图所示。Building Blocks的作用就是封装这些基元命令,简化用户建立模型的复杂性。下面的部分详细介绍如何使用Building Blocks。
下面通过一个简单的例子演示如何使用Building Blocks来生成网格。
(1) 第一步
建立一个新的项目3dslope.f3prj,基本操作可参看笔记《 FLAC3D与Python的集成 (2)---数据交换至Numpy 》,然后把下图所示的第5项(Building Blocks)和第6项(Model)选上。
顶部主菜单的右侧会出现这两个工具相应的工具条。
Model面板工具条
Building Blocks面板工具条
(2) 第二步
在Building Blocks面板的任意空白区域点击鼠标左键,弹出如下对话框,输入Set名, 去掉"Include an initial block"的选项,然后点击"OK"按钮,如下图所示。
(3) 第三步
从顶部的Import Blocks图标中选择其中一个,在本例中我们选择如上图所示的第4项,弹出下面的对话框,按“Import"按钮。
产生如下图形。
按住鼠标右键拖动,可以改变模型的视角。
也可以使用工作环境右侧的视角调节器,作用是一样的。
(4) 第四步
如下图所示,选择工具栏中最后一项,这个按钮的作用是从Block中产生单元。
(5) 第五步
给模型的面赋值组名, 按如下图所示的工具按钮。
弹出下面的对话框,按 “Assign Groups"按钮,完成网格划分。
(6) 第六步
保存模型。按照如图所示的操作,把模型保存到original-geometry.f3sav中。
Building Blocks产生的模型可以通过命令或FISH函数进行回溯和修改。FLAC3D的帮助文件中右非常详细的介绍。大致的命令格式如下所示:
set delete building-blocks
set create "Demo" building-blocks
building-blocks block create hexahedron
building-blocks block delete range id-list 1
通过File->Add New Data Files...建立一个文件3dtunnel.f3dat.
在这个数据文件中,首先使用下面的命令调入上面产生的网格模型,接着就可以输入其余的FLAC3D命令了。
model restore "original-geometry"
一个可变化的方法是在Python中运行FLAC3D,在项目中新建一个文件3dtunnel.py,然后把FLAC3D命令封装在it.command内,如下图所示的代码。在这个代码中,首先使用restore命令导入先前产生的网格模型,然后设置模型需要的参数,接着设置边界条件和初始条件,最后运行模型,让模型达到初始应力下的平衡状态。
当模型运行完毕,我们使用Python查看一些变量值,涉及到的函数包括:
it.zone.list()
it.zone.count()
it.zone.mech_convergence()
it.zone.mech_ratio()
it.zone.mech_ratio_avg()
it.zone.mech_ratio_local()
it.zone.mech_ratio_max()
it.zone.unbal()
it.zone.maxid()
it.zone.find()
z.vol()
z.props()
代码如下:
这段代码的运行结果如下:
本文描述了Building Blocks的网格生成方法以及如何把产生的模型集成在Python文件内。同时,也演示了it.zone模块一些函数的用法。下一节将接着本例继续深入探讨其它的知识点。
Thanks a lot and have a good day!