1 引言
一些现代工程计算软件带有生成计算书的功能,例如Rocscience的系列软件【岩土工程软件的引领者Rocscience收购NovoTech软件公司】,Itasca系列软件没有这样的功能,但可以使用log文件记录下所有的计算过程。
program log on
program log-file 'beam.log'
不过,这样的记录不能自动提取出对象的属性值。提取对象的属性值有两个目的:一个目的是用于程序自身的计算,一个典型的场景是数值解与解析解的比较;另一个目的是导出数据,产生计算书或者把数据传递到其它应用程序。
为了达成上述目的,可以使用FISH提取对象的属性值,也可以使用Python提取对象的属性值。下面以【梁结构元简要回顾(struct beam)】中的例子为基础,分别使用FISH和Python提取梁单元的属性值。由于支护元的脚本结构一样,因而梁单元的实现方法也能应用于其它类型的结构元。
2 Beam FISH
为了提取梁单元的属性,首先需要获得结构元的指针,[beam_pointer = struct.find(1)]。在获得结构元的指针后,便可以提取单元的属性值。
struct.beam.young()
struct.beam.moi()
struct.beam.length()
struct.beam.moment()
除了与本题相关的这些属性外,还可以提取出其它属性:
struct.beam.area()
struct.beam.moment.plastic()
struct.beam.moment.plastic.y()
struct.beam.moment.plastic.z()
struct.beam.poisson()
struct.beam.volume()
struct.beam.ydir()
struct.beam.load()
struct.beam.force()
3 Beam Python
尽管FISH能够实现梁单元属性的提取,但Python的灵活性更强。下面是上述解析解的代码:
import itasca as it
import math
beam = it.structure.Beam
element = it.structure.find(1)
young = beam.young(element)
moi = beam.moi(element)[2]
EI = young*moi
moment_vec = beam.moment(element)
Moment = moment_vec[1][2]
beam_count = it.structure.count()
element_length = beam.length(element)
v_tip = (EI/Moment)*(1-math.cos((Moment*beam_count*element_length)/EI))
这个Python代码得出的解析解是5.48190,下面直接输入数值的FISH代码得出的解析解是5.47742,而数值解是5.49793。
[global analytical = (2e11*200e-6/5e6)*(1-math.cos((5e6*10)/(2e11*200e-6)))]
上述代码中,moi和Moment的初始提取值都是矢量,按索引值进行了提取,由于Itasca手册没有这方面的例子,因此目前不确定这样编码是不是最佳的表示方式。