首页/文章/ 详情

在FLAC3D6.0中使用fish语言批量处理结果文件

8月前浏览792
有时在计算完成之后,需要对多个结果文件进行重复的操作。若是直接在fish函数中调用结果文件,则会出现以下报错:

图1 fish调用结果文件报错

这是因为flac3d在执行model new或是model restore操作时,会清空当前的所有fish函数,从而出现错误,因此在fish函数中调用restore就可以认为是我杀死了我。

图2 是我杀了我

 同时,我们知道FLAC3D是一款命令流驱动的软件,即软件所执行的所有操作都依靠发送给底层的命令流实现。因此,对于不同结果文件间的重复操作,我们虽不能直接使用fish函数去执行,但我们可以通过fish函数生成重复的调用命令,从而实现批量处理结果文件。看下面例子:
    ; 建立模型并进行初始平衡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 _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    endloopend@_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'

    图3 模型图

    图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等第三方库,极大地便利了批量后处理,相关内容择日发布。

      来源:FLAC3D小技巧
      pythonFLAC3D
      著作权归作者所有,欢迎分享,未经许可,不得转载
      首次发布时间:2023-12-26
      最近编辑:8月前
      FLAC3D小技巧
      硕士 专注FLAC3D中的小技巧分享...
      获赞 31粉丝 171文章 40课程 0
      点赞
      收藏
      未登录
      还没有评论
      课程
      培训
      服务
      行家
      VIP会员 学习 福利任务 兑换礼品
      下载APP
      联系我们
      帮助与反馈