pfc2d 活动门试验模拟,土拱效应,应力十字架生成,内置python自动生成等值线云图。
(假装这里有个手绘土拱示意图)
当你在工地看到堆得老高的砂子突然塌方时,最前排的砂粒总会卡在豁口形成拱形——这就是土拱效应最野生的打开方式。今天咱们用PFC2D复刻这个现象,顺便搞点好玩的应力可视化,整个过程就像用代码在虚拟沙盒里搭乐高。
第一步:先整点颗粒开开胃
new domain extent -2 2 wall generate box -1 1 ball distribute porosity 0.3 radius 0.03 0.05 box -1 1 ball attribute density 2000 damp 0.7 cycle 2000 calm 10这段代码就像往盒子里倒沙子:box -1 1划出1m×1m的容器,porosity 0.3控制沙子的松紧程度。跑完2000步迭代后颗粒们终于不再乱窜,这时候突然把底部的"门"抽掉——在PFC里其实是用wall delete命令干掉底部墙体。
土拱现身时刻:
当底部支撑消失的瞬间,颗粒开始自由落体。但神奇的是总会有几个硬核颗粒卡在开口两侧,形成肉眼可见的应力拱。这时候赶紧用measure stress记录应力分布,你会看到拱脚位置应力突然飙高,就像老式木门那个承重的门轴。
pfc2d 活动门试验模拟,土拱效应,应力十字架生成,内置python自动生成等值线云图。
给应力场拍个X光
拿到应力数据后,咱们整点花活——用Python脚本生成应力十字架:
import matplotlib.pyplot as plt # 从PFC导出的应力数据 stresses = [...] # 假设这是n行4列的数据[x,y,sigma1,sigma2] for x, y, s1, s2 in stresses: angle = 0.5 * np.arctan2(2*s1, s1-s2) # 主应力方向计算 plt.plot([x-0.05*np.cos(angle), x+0.05*np.cos(angle)], [y-0.05*np.sin(angle), y+0.05*np.sin(angle)], 'r-') plt.plot([x-0.05*np.sin(angle), x+0.05*np.sin(angle)], [y+0.05*np.cos(angle), y-0.05*np.cos(angle)], 'b-')这段代码把每个测点的最大最小主应力画成十字,红色代表最大主应力方向。跑出来的效果就像在模型上撒了一把红色小风车,瞬间看清哪里在"憋着劲"。
云图生成黑科技
PFC内置的Python接口可以直接调取网格测值:
from itasca import pfc2d import numpy as np grid = pfc2d.get_grid_measurements("stress-zz") X, Y = np.meshgrid(grid.x_coords(), grid.y_coords()) plt.contourf(X, Y, grid.values(), 20, cmap='jet') plt.colorbar() plt.show()注意getgridmeasurements这个隐藏功能,它能直接把测量结果网格化成numpy数组。配合matplotlib的等高线填充,一张应力云图就新鲜出炉了,比用后处理软件导出再处理快得多。
踩坑指南:
- 颗粒数量别太抠门,5000起步才能看到明显拱形
- 测量频率建议每50步采一次样,否则容易错过精彩瞬间
- 云图插值选'cubic'比默认的线性插值更丝滑
- 遇到颗粒喷涌可以适当调大阻尼系数
最后放个彩蛋:试试在拱形成后突然加载个集中力,你会看到应力十字架像被惊动的鱼群一样四散逃开——数值模拟的乐趣,就在于这种看得见的力学狂欢。