1. 引言
最初相识Python的时候大约是在6年前,那时我正使用Abaqus做土和结构相互作用的数值模拟。作为一个old school毕业的学生,以前使用的编程语言主要是Fortran和 Visual Basic, 但当时看到Abaqus 6.13版提供的Python语言后感到很亲切,部分原因是觉得Python语言的编程风格和Itasca软件中的FISH语言极为相似。于是开始自学Python语言,入门之后才知道Python语言是当下最火的人工智能编程语言,主要用在机器学习上来处理大数据。也就是在那时,盼望着一些岩土工程领域工业标准的软件也能有象Abaqus那样的Python接口。
2. PLAXIS与Python的集成
不负所望,在随后几年里,PLAXIS首先推出了与Python的集成方法,它用一个简单的py文件可以封装整个计算过程包括模型建立和结果输出。以后将单独描述PLAXIS与Python的集成方法。一个完整的例子代码如下所示。
3. FLACD3D与Python的集成
随后Itasca的系列软件也开始推出与Python的集成方法。首先在PFC3D中试验,然后应用到FLAC3D中。经过测试,使用Python的速度比FISH的速度差不多能快一倍,当然最快的应该是使用NumPy了,对于FLAC3D的单元循环来说速度差不多是FISH的34倍。下面的部分描述FLAC3D与Python的集成方法。
FLAC3D集成了IPython的控制台,当进入FLACD3D的运行环境后,在面板(Panes)菜单下选择IPython Console, 编进入到Python的编程环境。
目前IPython的最新版本是7.12.0, 应该可以使用最新版本的IPython代替FLAC3D安装中的旧版本(IPython 3.1.0), 这是一个在PY2下运行的非常老的版本。不过目前没有测试是否能够成功。
新的IPython版本
首先需要使用下面的命令建立二者的联系。
import itasca as it
it command ("python-reset-state false")
it.command函数能够产生一系列FLAC3D的命令,python-reset-state false命令能够确保FLAC3D使用New或Restore命令后python变量不会删除。
接下来我们便可以封装FLAC3D的命令
it.command("""
model new
zone create brick size 10 10 10
zone cmodel assign elastic
zone property density 2950 young 12e9 poisson 0.25
cycle 1
""")
我们可以使用it.zone.count()函数来检查模型是不是有10*10*10=1000个单元, 当运行这个命令后,结果显示1000,说明运行正确。
我们可以使用it.zone.find命令来返回某个单元对象:
接着使用pos()方法便可获得该对象的坐标。
一旦获得了一个对象,本质上可以获得该对象的所有属性,例如
得到了z单元的ID, 材料模型以及坐标位置。下面的代码通过对整个模型中所有的单元体积相加来得到整个模型的体积。这个功能非常有用, 因为有时我们需要比较模型变形前后的体积变化量。
prop()方法能够输出单元所有的材料参数
4. 结束语
Pyhton作为强大的计算语言与数值模拟软件集成是自然而然的事情,本文简单介绍了FLAC3D与Python的集成方法。作为一个完整的专辑,下一节将继续探讨这个非常有趣的课题。