; 建立模型并进行初始平衡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

======FLAC3D 6.0======
在第一节里,我们得到了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)

图2 disp.txt文本
======FLAC3D 7.0======
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)

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