1. 引言
大多数商业的岩土工程软件只提供用户定义的本构模型的接口,而没有用户定义变量接口的能力,仅Itasca软件拥有这种额外存储数据的功能。几乎每个对象都有extra变量,例如zone, gp, interface, struct等,这允许用户定义的数据与模型对象相关联,例如,如果想存储每个单元的质量和面积,那么可以使用zone.extra把这些信息存储在与每个单元相关的额外变量中。因此在一个程序中,每个具有额外变量能力的模型对象可以分配给多个额外变量,不过最多只能是128个。额外变量可以是任何具有相应FISH类型的类型,即布尔型、整数型、浮点数、字符串、矢量、矩阵等。
无论什么样的对象,extra变量总的表达形式是.extra(pnt,1), 其中第一个变量pnt是对象的指针,第二个变量是相应的额外变量的索引值,值域为1到128。与Pyhton的索引起始值0不同,extra变量的索引值是从1开始,即使在Python的应用中。
fish define setExtra
bi = block.head
loop while bi # 0
zi = block.(bi)
loop while zi # 0
block.zone.extra(zi,1) = block.zone.mass(zi)
block.zone.extra(zi,2) = block.zone.area(zi)
zi = block.zone.next(zi)
endloop
bi = block.next(bi)
endloop
end
2. 主要的extra变量
如前所述,大多数对象都有extra变量,一些主要的extra变量总结如下:
block.contact.extra
block.extra
block.gp.extra
block.zone.extra
data.scalar.extra
data.vector.extra
data.tensor.extra
dfn.extra
fracture.extra
geom.edge.extra
geom.node.extra
geom.poly.extra
interface.elem.extra
struct.link.extra
struct.node.extra
zone.extra
zone.field.extra
zone.face.extra
extra变量的一些应用在以下文章中曾经讨论过:
Update---在FLAC3D中使用Python
FLAC3D与Python的集成 (4)---zone.Zone类和方法
FLAC3D与Python的集成 (3)---网格划分Building Blocks
结构元链接(structural element links)
离散断裂网络[DFN.]FISH函数分类与解析(UDEC和3DEC)
FLAC3D与Python的集成 (2)---数据交换至Numpy
3. set_extra变量
当使用Python时,使用set_extra变量可以直接把额外变量存储,下面的例子存储了三个变量:z.vol, z.model和gp.pos。
z = it.block.zone.find(1)
z.set_extra(1, z.vol())
z.set_extra(2, z.model())
print(z.extra(1))
print(z.extra(2))
gp = it.block.gridpoint.near((2,2,2))
gp.set_extra(1, gp.pos())
print(gp.extra(1))
4. 应用例子
Itasca软件的应力和位移是在直角坐标系中建立的,也就是说,单元的正应力和剪应力是zone.stress.xx,zone.stress.zz,zone.stress.xz之类的形式,节点位移是gp.disp.x,gp.disp.z之类的形式。对于一些圆形的几何形状,如果要获得单元的径向应力和节点的径向位移,需要进行坐标变换。因此需要引入extra变量来存储这两个变量值(extra.prj)。
网格点径向应力(Vector>Magnitude>Gridpoint)
网格点径向位移(Vector>Magnitude>Gridpoint)