首页/文章/ 详情

使用python批量处理结果文件

8月前浏览656
======建模&计算======
使用fish进行批量后处理存在较大不足,特别是对于跨结果文件的后处理,因此推荐使用python进行结果文件的批量后处理。python可以在bilibili搜索相应课程进行学习,关于python在flac中的其他应用可在flac3d说明书中查看Using Python with FLAC3D相关内容。案例如下:
    ; 建立模型并进行初始平衡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

    图1 模型图

    ======FLAC3D 6.0======

    提示:FLAC3D6.0内置python版本为2.7.9,属于python2,对于很多python初学者(包括我)来说,难以安装第三方库,因此在使用时并不能得到很好的体验。

    在第一节里,我们得到了6个结果文件,分别为kw_1.f3sav~kw_6.f3sav。在FLAC3D 6.0中,若没有安装pandas或者xlwt库时,对于单个结果文件的后处理还是推荐使用fish;对于跨结果文件的后处理,示例如下:

      # 以提取各个结果文件中(3,3,3)点处的竖向位移为例# 导入itasca模块import itasca as it# 设置python-reset-state为Falseit.command('python-reset-state False')# 创建名为disp的空列表以接收位移值disp = []# 使用for循环实现遍历结果文件并执行后处理操作for i in range(1, 7): #range(a,b)的取值范围是[a,b)   #  循环调用结果文件   it.command('''   model restore 'kw_{}.f3sav' # 根据实际情况更改结果文件名   '''.format(i))   # 获取网格点对象(gridpoint object)   gp = it.gridpoint.near((3, 3, 6))   # 将网格点的z位移以字符串的形式追加至列表disp中   disp.append(str(gp.disp_z()))# 使用换行符使得每一个位移值为单独一行sep = '\n'disp = sep.join(disp)# 将列表写入txt文件中with open('disp.txt', 'w') as wstream:   wstream.writelines(disp)
      输出的disp.txt文本见下图,可用excel直接打开进行绘图等操作。

      图2 disp.txt文本

      ======FLAC3D 7.0======

      在FLAC3D 7.0中,呱太个人推荐使用pandas进行数据的输出,pandas的安装教程可加入Itasca专有技术交流群(289141433),在群文件中搜索“python包”即可获取相应安装教程。使用示例如下:
        import itasca as itimport pandas as pdit.command('python-reset-state False')# 创建名为disp_z/x的空列表以接收z/x位移disp_z = []disp_x = []# 创建一个名为disp的空字典disp = {}for i in range(1, 7):    it.command('''    model restore 'kw_{}.f3sav'    '''.format(i))    gp = it.gridpoint.near((3, 3, 6))    disp_z.append(gp.disp_z())    disp_x.append(gp.disp_x())# 在disp中创建键值对,其中key为'disp-z/x'(可自定义名称),value为接收了位移的disp_z/x列表disp['disp-z'] = disp_zdisp['disp-x'] = disp_x# 将提取的结果输出到名为ceshi的excel表格中df = pd.DataFrame(disp)df.to_excel('ceshi.xlsx', index=False)
        输出的ceshi.xlsx见下图。

        图3 使用pandas直接输出的excel表格

        ======总结======

        本推文只是演示了python在flac后处理中的一点皮毛,更多的可能性需要各位读者通过自己的学习去开拓。本推文若是对你有用,还请点击下方喜欢作者,你的钞能力是我进行原创的动力;如果方便请点击文中的广告,这对我很重要。

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