本文为短文“Python在ITASCA系列软件中的应用(一)”(简称为“文(一)”)的续篇,介绍ITASCA软件Python应用环境的技术框架。极为丰富的开源类库是Python语言的核心优势所在,技术框架因此主要涉及在科学计算领域常用类库,以及为满足其与ITASCA数值分析模型交互控制而特别定制开发的功能库(模块)-itasca(小写)。
ITASCA系列软件中Python的实现及Ipython简介
考虑到成熟性因素,目前ITASCA软件纳入的Python版本是3.6(最新版本为3.8),且为Python应用嵌入了shell版运行环境-IPython。
Ipython是一个用于Python开发的交互式shell,较Python默认提供的shell环境更为方便,支持变量自动补全、自动缩进、bash shell命令等便捷化功能,且内置大量高效的功能和函数。Ipython将会使我们更为效率的使用python,目前普遍认为,Ipython是利用Python进行科学计算和交互可视化的一个最佳的平台。
ITASCA类库概况
除Python基本环境外,ITASCA软件对常用科学计算类库进行了整合。支持的公共开源类库包括:
l Numpy: 矩阵运算;
l Matplotlib: 绘图库;
l Scipy:科学计算;
l Networkx: 复杂网格分析;
l Fipy: 有限体积分析;
l Numexpr: 提高计算效率;
l Pyside2: 图形界面;
l …
其中,MSN(Matplotlib 、Scipy 、Numpy)被称为科学计算三剑客。可见,ITASCA软件中已包含的Python类库可满足普遍的数据处理、分析、绘图等需求。
以FLAC3D 7.0为例,以上Python类库可见于安装目录: …\Itasca\FLAC3D700\exe64\python36\Lib\site-packages。
图 1 : FLAC3D 7.0 Python库
对于Numpy等公共类库的使用方法,在此不作展开,本文主要介绍itasca类库相关的内容。
ITASCA功能库 — itasca
在Python面向对象程序开发的概念中,功能库(模块)总体由属性和方法构成。基于这一概念,可以简单对itasca功能库的技术特点作简单概述:
l 属性:基于ITASCA软件数值模型的特点,为模型全局控制(设置)、模型元素(节点、单元、块体、颗粒等)提供基于Python环境进行模型访问的专用数据类型,这些数据类型综合利用了整型、浮点型、数组等一系列基本数据类型。以FLAC3D为例,itasca模块为节点(gridpoint)、实体单元(zone)、结构单元等模型元素的基本属性(如id等)、几何信息(如位置等)、模型响应(如变形、速度等)定制了多种数据结构。其中,数组数据类型特别满足了数据分析对便捷、高效化访问数据的一般要求;
l 方法:从程序开发角度,方法即为函数。itasca类库为模型控制和数据分析提供大量功能函数,用于进行模型控制(如建模命令嵌入、重力加速度、计算迭代时间步长等全局化参数设置),以及对上述数值模型构成元素的属性进行访问、编辑、分析等处理操作,如依据模型元素位置数组调整模型形态。
图 2 : itasca模块主要属性和方法函数
1) itasca功能库调用方法
依据Python命令及语法规则调用itasca功能库。以FLAC3D为例:
主模块调用:
import itasca as it 或
from itasca import *
子模块调用:
from itasca import zonearray as za
from itasca import gridpointarray as gpa
其中,it、za、gpa为模块别名,支持用户自定义。
2) 简单示例
以FLAC3D为例,本小节用简单案例展示采用Python进行模型控制和分析的基本方法和流程。
用户可调用FLAC3D程序主菜单功能创建后缀为py的Python文件,在其中尝试调试理解如下代码:
① import itasca as it
② from itasca import zonearray as za
③ from itasca import gridpointarray as gpa
④ it.command("python-reset-state false")
以上语句实现如下意图:
l 导入itasca主模块,及其子模块zonearray、gridpointarray,别名分别为it、za和gpa;
l 第④句采用主模块提供的command函数嵌入FLAC3D命令,此处python-reset-state false为标准语句,设定Python状态独立于FLAC3D模型状态,即Python环境下变量的生存状态不受FLAC3D模型文件调用操作影响。
⑤ it.command("""
model new
model large-strain off
zone create brick size 10 10 10
zone cmodel assign elastic
zone property density 2950 young 12e9 poisson 0.25
zone gridpoint fix velocity-z range position-z -0.1 0.1
""")
以上语句采用主模块command函数嵌入FLAC3D命令,依次设定了大变形关闭模式、创建网格模型、本构模型设定、材料参数赋值以及边界条件定义。
⑥ it.set_gravity((0,0,-10))
⑦ it.command("""
model cyc 10
model save 'demo'
""")
以上语句实现如下操作:
l 第⑥句采用主模块命令set_gravity设定重力加速度这一全局化分析条件;
l 第⑦句完成模型迭代计算和文件保存操作。
⑧ print(it.zone.count())
⑨ print(za.stress())
⑩ print(gpa.disp())
以上语句简单展示采用Python环境和itasca模块功能进行模型后处理分析:
l 第⑧句利用主模块命令zone.count统计得到模型单元数;
l 第⑨句利用子模块zonearray提供的stress函数打印单元应力数组;
l 第⑩句利用子模块gridpointarray提供的disp函数打印节点变形数组。
结 语
本文在文(一)的基础上,对ITASCA系列软件中Python的实现和Ipython进行了简单介绍。ITASCA软件安装完成后,内置的Python中已包含较多python常用类库。本文主要对itasca类库的构成和功能进行了概括性介绍,并通过简单案例演示该类库的使用方法。
参考文献:
[1] FLAC3D 7.0 Manual. Itasca Consulting Group, Inc.