1 引言
使用Python进行数值分析最广泛的一个用途是参数化研究,例如【HYRCAN使用Python进行边坡稳定性的参数化分析】。而在Itasca软件中,通过FISH函数的传递可以更灵活地进行参数化研究,这样作的好处是能够最大程度地把Python代码与Itasca命令实现分离,便于修改和扩充代码的功能。下面讨论手册中一个例子《Uniaxial Compressive Strength of a Jointed Material Sample》。这个例子使用ubiquitous-joint模型计算带有节理面试件的单轴抗压强度,试件的单轴抗压强度是岩石材料和节理属性的函数,如下图所示。在此省略了所有的过程模拟过程,仅把注意力集中在参数化研究上。
2 参数化研究
在Python代码中,使用range改变节理的角度beta,把beta传递给UCS计算代码ucs_test,从而得到19组数据。
betas = range(0,91,5)
for beta in betas:
it.command(f"""
model new
[global beta = {beta}]
program call 'ucs_test'
""")
使用的主要Python函数:
(1) gp.force_unbal_y
(2) it.gridpoint.list
(3) gp.in_group
ucs = []
for beta in betas:
filesav = f"./ucs_{beta}.sav"
if os.path.exists(filesav):
it.command(f"model restore '{filesav}'")
sigmavs = [-gp.force_unbal_y() for gp in it.gridpoint.list() if gp.in_group("bottom")]
ucs.append(sum(sigmavs)/3.06*1e-3)
3 绘图
使用matplotlib绘制参数化研究得到的计算结果【FLAC3D与Python的集成 (2)---数据交换至Numpy】。
import matplotlib.pyplot as plt
对曲线形状的控制试验了如下四种可以使用的类型:
plt.plot(betas,ucs,"r*--")
plt.plot(betas,ucs,"bD-.")
plt.plot(betas,ucs,"go--")
plt.plot(betas,ucs,"b*-")
plt.xlabel("Weak-plane angle [°]")
plt.ylabel("Axial strength [kPa]")
plt.xlim(0,90)
plt.ylim(3,10)
plt.grid()
plt.title("UCS test using ubiquitous-joint model")
plt.show()