; 建立模型并进行初始平衡
model new
zone create brick size 6 6 6 group 'a'
zone group 'b' range p-x 2 4 position-z 2 4
zone split
zone cmodel assign elastic
zone prop bulk 3e8 shear 1e8 dens 1800
zone face skin
zone 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.81
model 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
endloop
end
@_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为False
it.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 it
import pandas as pd
it.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_z
disp['disp-x'] = disp_x
# 将提取的结果输出到名为ceshi的excel表格中
df = pd.DataFrame(disp)
df.to_excel('ceshi.xlsx', index=False)
图3 使用pandas直接输出的excel表格
本推文只是演示了python在flac后处理中的一点皮毛,更多的可能性需要各位读者通过自己的学习去开拓。本推文若是对你有用,还请点击下方喜欢作者,你的钞能力是我进行原创的动力;如果方便请点击文中的广告,这对我很重要。