1
无网格法理论及MATLAB程序
1.8.1.2 6.1.2 模拟裂纹扩展的水平集更新算法
6.1.2 模拟裂纹扩展的水平集更新算法

在裂纹不断生长的过程中,水平集函数f 和gi也要随之重建以适应新裂纹的位置。通常的做法是对式(6.3)采用有限差分进行离散求解。文献[47]提出一种不需要求解偏微分方程的向量水平集算法,但是该算法比较复杂,编程困难,不利于向复杂裂纹扩展问题推广。考虑到水平集函数的更新仅仅需要在裂纹前缘附近的一个小区域内完成,参考文献[122]中的算法,我们给出了一种更为简单的水平集更新算法。

令xi=(xi,yi)为当前裂纹尖端坐标,fn为第n 步扩展时f 和gi的节点值。f、gi的演化由裂纹扩展角θc确定。每一扩展步,裂纹尖端位移由向量F=[Fx,Fy]确定。则水平集更新算法的实施步骤为

①旋转的位置,使其与F垂直,则过裂尖且垂直的单位切向量与F的方向一致(见图6.2),即=(Fx/‖F‖,Fx/‖F‖)。则由式(6.5)可知,任意节点的值为

②由图6.2 知,只有那些>0 的节点才需要修改f 的值。又因为fn+1与F 相互正交,因此有

式中:正负号表示裂纹两侧更新部分的符号与未更新部分的符号保持一致。

图6.2 更新水平集

③由式(6.8)可知,,因此任何时刻恒有。代入方程(6.3)更新gin,则

其中△an为第n 步的扩展增量或步长。

④如果是边界裂纹,则;如果是内部裂纹,则按照步骤①~③对其另外一侧的水平集进行更新,并由式(6.6)更新gn+1

⑤当和gn+1更新完成后,裂尖i 的位置由与fn+1=0 的交集确定,然后进入下一扩展步,继续执行步骤①~④。

下面以矩形板中心裂纹扩展为例说明和验证水平集及其更新算法,当然这里暂不考虑裂纹的扩展准则等问题。如图6.3(a),红色线段为中心裂纹。初始时刻平行于裂纹的那些线段为裂纹面水平集f 的等值线,其中f=0 为裂纹及其延长线的0 水平集。图6.3(b)中,与裂纹垂直的线段为裂纹波前水平集g 的等值线,其中gi为通过裂纹尖端并与裂纹线垂直的0 水平集。显然,f=0 和g=0 相交的部分为裂纹的真实位置,也即水平集函数可以隐式描述裂纹面。

图6.3 中心裂纹初始水平集描述

图6.4 为裂纹扩展后,水平集的更新描述。与图6.3 相同,红色线段为裂纹的当前位置,平行[见图6.4(a)]和垂直[见图6.4(b)]分别为新的裂纹面水平集和波前水平集。新裂纹的位置由f=0 和g=0 相交的部分确定。

图6.4 中心裂纹扩展后的水平集描述

从图6.3 和图6.4 可以看出,上述的水平集及其更新算法在描述裂纹及其扩展后的几何位置是准确、高效的;由于不需要求解水平集演化的偏微分方程,大大简化了计算的难度,提高了计算效率。