
图1 fish调用结果文件报错

图2 是我杀了我
; 建立模型并进行初始平衡model newzone create brick size 6 6 6 group 'a'zone group 'b' range p-x 2 4 position-z 2 4zone splitzone cmodel assign elasticzone prop bulk 3e8 shear 1e8 dens 1800zone face skinzone 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.81model solve; 开挖6步并存储相应的结果文件fish def _kwloop i(0,5)j = i+1filename = 'kw_' + string(j) + '.f3sav'commandzone cmodel assign null range group 'b' p-y @i @jmodel solvemodel save @filenameendcommandendloopend@_kw; 使用fish语言实现结果文件的自动调用fish def _postProcessarray 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"endlooparr(1) = msgoo = file.open('list.txt',1,1)oo = file.write(arr,1)oo = file.close()end@_postProcess; 调用生成的命令流文件call 'list.txt'


图4 生成的命令流文件
======命令解释======
; 使用fish语言实现结果文件的自动调用fish def _postProcessarray 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"endlooparr(1) = msgoo = 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等第三方库,极大地便利了批量后处理,相关内容择日发布。