先说结论:我给 PFC 6.0 写了一个新技能 pfc-flaw,专门做预制裂隙。给它四个数——位置、角度、长度、厚度——它就在试样里开出一条真正的矩形空腔:能一次开多条,能在加载前把量测该查的都查一遍,也能一键生成整套脚本链去扫参数。下面讲这个技能是怎么做的、能干什么、怎么用;最后顺手用它跑了一次裂隙倾角扫描。
做含裂隙岩石数值试验的人绕不开一个问题:试样里那条裂隙,到底该怎么"放"进去。
主流做法是弱面法:不动几何,只在裂隙经过的位置,把颗粒之间的接触换成一套"易坏"的接触模型(PFC 自带的 smoothjoint,或者用分组配不同的胶结参数)。我之前的层理技能走的就是这条路——层理面不切几何,只是给不同层的颗粒配不同的胶结参数。
这条路很好用,但它做出来的东西本质上是一个面:还在传压,只是传得弱一点。加载时它先坏,看起来像裂隙。
可真实的预制裂隙不是面,是洞。你不删颗粒,裂隙两侧始终贴着,法向还传着压应力。裂隙试样那些经典现象——尖端起裂、翼型裂纹从尖端往外长、岩桥贯通——前提都是"这里真的空着"。
所以这个技能走另一条路:真的把裂隙内的颗粒删掉。
难点在于,直接删颗粒,删出来的洞边缘是毛的——洞壁是一堆球面,凹凸不平,厚度也没法控制。你没法说"我开了个 20 毫米长、2 毫米厚的矩形洞"。
所以真正要做的是先修边、再开洞。
第一步,插墙。 在裂隙的位置,用 wall create 建一个刚性的矩形墙环——不是一整块板,是四条边围成的一个框。
第二步,压平。 让模型跑几千步。颗粒被框推开,紧紧压在框的内外两侧。因为墙是刚性的、框是矩形的,贴上去的颗粒球心到墙面正好差一个半径,裂隙面就规整了。
第三步,删球。 把球心落在矩形框内的颗粒全部删掉。留下的就是一个尺寸完全等于设计值的矩形空腔,洞壁由一层排列整齐的颗粒构成。
图1:插墙压平、删球之后的试样。中间那道 45° 的白条就是裂隙空腔,洞壁颗粒被压得很整齐。这是技能里 2flaw 阶段结束时的状态。
第四步,胶结,然后才拆墙。
这是整条链上最要命的一个先后顺序,也是我在设计这个技能时花时间最多的地方。
墙环是唯一撑着那个洞的东西。提前拆掉,两侧颗粒立刻贴回来,洞就没了——而且更糟:下一步加胶结时,contact method bond 会把它们直接焊死,裂隙彻底消失,你还什么都看不出来。
反过来,先加胶结:颗粒被键锁住,这时再拆墙,洞只会发生一点点弹性回弹,不会闭合。
图2:胶结完成、墙环拆掉之后的同一个试样。墙没了,洞还在,周围颗粒由键网络撑着。
代价是脚本链里多了一步:拆墙被单独做成一个阶段,排在胶结后面。好处也很实在——"胶结时墙还在"和"胶结后墙已拆"这两件事可以分别验证,出了问题能立刻定位是哪一步。
这是我认为这个技能最值得说的部分:能不能用不靠"跑通没跑通",靠几个数。
| 洞有没有被"焊住" | |
4+N 回到 4 | |
第三行那个"跨洞的键"是我最在意的:它专门用来拦"厚度给太小、两侧颗粒隔着洞还碰得到、于是被胶结焊上"的情况。判据是 0,不满足就说明参数有问题。
一次做多条,把 --flaw 重复写:
加 --dry-run 只校验不写文件,它会把每条裂隙的角点、厚度相对粒径的倍数、离边界的余量都打出来——几何错了当场报错,不用等 PFC 跑起来。
扫参数(倾角、长度、厚度都行):
这个驱动会让所有算例共用同一份成样:先跑一次成样,再把那个快照复 制到每个算例。初始状态逐位相同,最后结果的差异就只可能来自裂隙本身。后面再跟一个汇总脚本,把每个算例日志里的数据抓成表、出图、生成一份 HTML 报告。
技能写完,总得拿它做点东西。四个参数里"角度"最好调,就扫了一遍。
七个角度,每个试样中央一条裂隙,长 20 mm、厚 2 mm,位置不变,只转角度。七个算例共用同一份成样,另外跑了一个完整试样作对照(UCS 92.5 MPa)。
这里的"倾角"指裂隙长轴与水平方向的夹角。所以 0° 是水平躺着的一道缝(垂直于加载方向),90° 是竖直的一道缝(平行于加载方向)。
图3:七个角度实际开出来的裂隙。每一格是试样中心 24×24 mm 的窗口,颗粒按真实半径绘制——中间那道白色条带就是裂隙空腔。红色虚线是该角度的设计轮廓(20×2 mm),可以看到开出来的洞和设计值基本完全重合。
图4:UCS 随裂隙倾角的变化。虚线是完整试样的 92.5 MPa。
趋势很干净:裂隙越"躺平",试样越弱。水平裂隙把试样横向切开,荷载只能通过裂隙尖端那点材料往下传,强度掉一半还多;竖直裂隙则相反,两侧岩桥仍完整承担荷载,试样几乎是"绕开"了这条缝。
图5:七条应力-应变曲线叠在一起。弹性段几乎完全重合(同一个材料),差别全在峰值高度和峰后的跌落位置上。
顺带一个有意思的现象:越强的试样,破坏前积累的微裂纹反而越多。90° 那根掉了 2886 条裂纹,0° 只有 1065 条。0° 试样是被那条水平缝直接劈开的,破坏来得干脆;接近完整的试样要撑到更高应力,过程中不断产生微裂纹,最后才崩。
七个算例的六个闸门全部通过,跨洞键无一例外是 0。
两个必须说清的限制:
一、删球判据是"球心落在矩形内",所以裂隙厚度得容得下至少一层半颗粒。这次用的 2 mm 厚约等于 2.2 倍最大粒径,能做出一条干净的缝,但算不上细裂纹。想要更薄的裂纹得走随机 DFN + smoothjoint 那条路——那也做不出空腔,是另一种东西。
二、扫描的七个算例里,30° 那一个第一次跑在求解阶段静默退出了(PFC 这类概率性崩溃偶有发生,重跑一次就过)。所有给出的数据都是重跑通过后的结果。
—— 关于作者:超级大的Lobby ——