首页/文章/ 详情

位移差?应力差?利用python实现结果文件间运算。

6月前浏览1094
摘要:利用python实现结果文件间运算。

1.前情提要

2020年采用fish语言实现了结果文件间的运算,但过程涉及到文件写入写出,较为复杂。详见下文:

——

呱太Gekota,公 众号:FLAC3D小技巧位移差?应力差?利用fish语言实现结果文件间运算。

因此,本文通过python简化流程。

2.代码

2.1 老代码
    model newzone create brick size 20 20 20 group 'a'zone group 'b' range position-x 5 15 position-z 5 15zone gridpoint initialize pore-pressure 1e3 model save 'a'zone gridpoint initialize pore-pressure 0 range group 'a'model save 'b'model restore 'a.f3sav'fish def setup    io_read = 0     io_write = 1    io_ascii = 1    arr_size = gp.numend@setupfish def pp_out    array id1(arr_size)    array pp1(arr_size)    n = 0    loop foreach gp1 gp.list        n = n+1        id1(n) = gp.id(gp1)        pp1(n) = gp.pp(gp1)    endloop    status = file.open('id_list',io_write,io_acsii)    status = file.write(id1,string(arr_size))    status = file.close    status = file.open('pp_list',io_write,io_acsii)    status = file.write(pp1,string(arr_size))    status = file.closeend@pp_outmodel restore 'b.f3sav'fish def setup    io_read = 0    io_write = 1    io_ascii = 1    arr_size = gp.numend@setupfish def pp_minus    array id(arr_size)    array pp(arr_size)    status = file.open('id_list',io_read,io_acsii)    status = file.read(id,arr_size)    status = file.close    status = file.open('pp_list',io_read,io_acsii)    status = file.read(pp,arr_size)    status = file.close    loop i(1,arr_size)        gp = gp.find(id(i))        gp.pp(gp) = pp(i) - gp.pp(gp)    endloopend@pp_minusmodel save 'c';以上代码共计56行。

    2.2 新代码

      import itasca as itit.command('python-reset-state false')app = {}bpp = {}it.command("""model newmodel largestrain offzone create brick size 20 20 20  group 'a'zone group 'b' range position-x 5 15 position-z 5 15zone gridpoint initialize pore-pressure 1e3 model save 'a'zone gridpoint initialize pore-pressure 0 range group 'a'model save 'b' """)it.command(""" model restore 'a.sav """)for gp in it.gridpoint.list():    app[gp.id()] = gp.pp()it.command(""" model restore 'b.sav' """)for gp in it.gridpoint.list():    bpp[gp.id()] = gp.pp()for key in app.keys():     gp = it.gridpoint.find(key)     gp.set_pp(app[key]-bpp[key])     #以上代码共计23行。

      3.结果对比

      图3-1 计算结果一(2020)

      图3-2 计算结果二(2023)


      4.总结

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