1 引言
今天中午在<FLAC3D 7.0 新特性简介(P4)---软件集成>的留言区内看到有位同学问FLAC3D的本构模型能不能使用Pyhton编写, 由于使用手机操作, 不小心把这条留言删除但不能恢复, 因此把这个问题拿出来与大家分享一下. 近期家中的突发事件导致有将近10天没有接触任何工作上的事情, 不过今天头脑较为清醒, 因此就这个问题说一下, 因为没有参考任何资料, 全凭印象作答, 有不对的地方请指出来大家共同探讨.
2 使用自定义本构模型
现代先进的岩土数值模拟软件都允许使用用户自定义本构模型, 比如Itasca软件系列, Abaqus, Plaxis, Sigma/W等, 用户自定义本构模型的调用都使用了DLL(动态链接库), DLL可以使用Fortran, C, C 等编译型的语言编译器生成. 这些商业性的数值模拟软件都为用户提供了标准的自定义本构模型界面, 因此很容易生成自己的本构模型DLL.
FLAC3D已经内置了33个本构模型
3 Python 生成DLL
如果要在FLAC3D中使用Python编写自定义的本构模型, 除了需要满足程序的接口要求外, 一个附加的任务是需要把Python语言编写的本构模型代码转换为DLL. 由于Python是解释性语言, 因此不能使用编译型的编译器产生DLL. 有一种方法是使用clr模块把Python转化为DLL文件.
import clr
也可以在FLAC3D提供的C 框架中嵌入Pyhton, 一些嵌入的方法可以参考文档:
https://docs.python.org/2/extending/embedding.html
此外, Visual Studio应该能把Pyhton代码直接转化为DLL, 但我没试过.
4 结束语
总的来说, 自定义的本构模型建议直接使用程序提供的C 框架,这样做可以节省许多时间. 如果想练习使用Pyhton, 可以参考下面的笔记, FLAC3D的所有代码都可以集成在Pyhton中.
FLAC3D与Python的集成 (2)---数据交换至Numpy
FLAC3D与Python的集成 (3)---网格划分Building Blocks
FLAC3D与Python的集成 (4)---zone.Zone类和方法
此外, 可以使用FISH语言来编写用户自定义的本构模型, 详情参看FLAC3D等系列软件的用户手册.
FLAC3D 7.0 新特性简介(P3)---新的本构模型
FLAC2D---过去,现在和将来
FLAC3D 7.0 新特性简介(P4)---软件集成
程序之间的相互通讯方法---FISH socket与Python
Python 与 PLAXIS 的集成方法