在二维结构化四边形网格中,可能会遇到网格中存在悬挂点的情况,即研究区域的节点并不完全是四边形的顶点,这时候在有限元的实现过程中需要对这类悬挂点进行约束处理,让其符合基本的变化规律。
该知识点在二维四边形或者三维六面体网格的自适应中尤为重要,自适应加密让加密区域与非加密区域的分界面处很容易出现悬挂点,如果不进行约束处理很容易导致求解结果错误。
针对这种悬挂点的约束处理方式这里给出了两种方法。并最终以二维泊松方程为例子,展示了约束处理与不约束处理的效果。
二维泊松方程的有限元实现过程不再详细介绍,参考:二维四面体任意高阶通式有限元实现-泊松方程。
如下图所示,网格下半区域比上半部分更加密集,因此分界边上出现悬挂点(如图标记为三角形点),共计5个悬挂点。
悬挂点所在位置的节点编号如上,则对于1号四边形单元而言,通过插值函数,不难得出节点2与1号四边形的四个顶点关系为:
根据悬挂点2在1号单元的位置关系,不难得出各个型函数的具体数值:
该等式即是悬挂点2的约束方程。实际上在有限元组装过程中,不难发现悬挂点2并没有使用1号四边形单元进行关联,加入约束条件的本质则是将1号单元与其下两个单元共同拥有的悬挂点2关联起来。
其他悬挂的约束方程一致,有了约束方程,接下来就是考虑如何将它们加入到有限元系数矩阵中。
已知将所有四边形单元组装得到系数矩阵与右端项的关系如下:
将1部分中悬挂点的约束方程,进一步写成矩阵形式:
将所有悬挂点得到的Q矩阵,按照对于节点位置一一对应排列,即可得到M*N矩阵的Q矩阵,其中M为悬挂点数目,N为未知数个数。
方法1:采用拉格朗日乘子法的约束方法
系数方程组变成:
方法2:直接加入惩罚项的约束方法:
其中,系数lamda是惩罚大数。
可见,方法1增加了系数方程组的维度,并且主对角线元素有零元素;方法2虽然没有增加维度,但是引入惩罚大数lamda也会导致线性方程组稳定性变差。
求解二维泊松方程:
将网格剖分成上下不均匀的情况,得到如下结果。
I:如果不加入约束条件,求解结果如下:
II:加入约束条件,求解结果为:
根据理论,网格在x=0.4~0.6,y=0.2~0.3的位置应该与x=0.4~0.6,y=0.7~0.8的结果应该是对称一致的,但是没有加约束的结果明显偏小,而加了约束条件的结果基本上一致,这说明约束条件加载成功。
进一步均匀加密网格,悬挂点位置的上下值就更显得光滑连续: