图1 fish调用结果文件报错
图2 是我杀了我
; 建立模型并进行初始平衡
model new
zone create brick size 6 6 6 group 'a'
zone group 'b' range p-x 2 4 position-z 2 4
zone split
zone cmodel assign elastic
zone prop bulk 3e8 shear 1e8 dens 1800
zone face skin
zone face apply v-n 0 range group 'West' or 'East'
zone face apply v-n 0 range group 'South' or 'North'
zone face apply v-n 0 range group 'Bottom'
model gravity 9.81
model solve
; 开挖6步并存储相应的结果文件
fish def _kw
loop i(0,5)
j = i+1
filename = 'kw_' + string(j) + '.f3sav'
command
zone cmodel assign null range group 'b' p-y @i @j
model solve
model save @filename
endcommand
endloop
end
@_kw
; 使用fish语言实现结果文件的自动调用
fish def _postProcess
array arr(1)
msg = ''
loop i(1,6)
filename = 'kw_' + string(i) + '.f3sav'
msg += "model restore " + "'" + filename + "'\n"
msg += "zone gridpoint list displacement range position 3 3 6\n\n"
endloop
arr(1) = msg
oo = file.open('list.txt',1,1)
oo = file.write(arr,1)
oo = file.close()
end
@_postProcess
; 调用生成的命令流文件
call 'list.txt'
图4 生成的命令流文件
======命令解释======
; 使用fish语言实现结果文件的自动调用
fish def _postProcess
array arr(1)
msg = ''
loop i(1,6)
filename = 'kw_' + string(i) + '.f3sav'
msg += "model restore " + "'" + filename + "'\n"
msg += "zone gridpoint list displacement range position 3 3 6\n\n"
endloop
arr(1) = msg
oo = file.open('list.txt',1,1)
oo = file.write(arr,1)
oo = file.close()
end
@_postProcess
以上是生成重复命令流的代码,从中可以看出,使用fish批量后处理的流程为:首先通过将需要执行的命令流写作字符串msg,然后将字符串msg写入数组arr中,最后将数组arr写入文本文件list中。
在这个过程中,需要注意以下几点:
1、需要进行后处理的结果文件,在命名时应具有一定规律,参考本例的命名方式。
2、想要在字符串中加入引号时,推荐利用双引号""将单引号'括起来,见第7行的"'"。
3、+=为复合赋值运算符,其应用举例: a = a + 1 等效于 a += 1。
4、'\n'表示换一行,'\n\n'即为换两行。
5、以上案例只是简单示范,读者应根据实际需要自行构造msg的内容。
使用fish语言进行计算结果间的后处理存在很大局限性,推荐使用python进行后处理操作,尤其是FLAC3D7.0中的python可以安装pandas等第三方库,极大地便利了批量后处理,相关内容择日发布。