在二维矢量有限元问题中,这里继续聊一聊混合阶有限元的实现。在前文依次实现矢量有限元的一阶、二阶后,混合阶有限元的实现难点不再是矢量基函数的推导,而是对二阶网格的重排序等问题的处理。
边值问题依旧是沿用电场在电介质中的衰减过程,这里不再赘述整个有限元的实现流程,具体可以参考:
在实际物理问题背景中,对电场最开始的衰减部分的精度是所需要的,而衰减到一定程度后的电场精度不再关心。因此在考虑混合阶矢量有限元中,可以将电场快速衰减的区域网格设置为2阶,而衰减后期的区域设置为1阶。如此在考虑到精度的同时又降低了矩阵求解维度,从而提高计算效率。
从一阶、二阶的基函数表达式看出:二阶矢量基函数完全包含一阶基函数,这个本质原因是混合矢量有限元可以实现的根本原因。
在混合阶的实现中,难点在于不同阶数之间的网格映射关系。下面给出实现步骤:
I.标记单元阶数:确定每个网格单元的阶数,并存储;
II.重排高阶编号:找出网格单元中高阶(二阶)单元,并存储其单元的棱边编号与单元编号;然后将高阶部分的棱边编号与单元编号进行重新排布;
III.重组映射关系:将高阶部分的棱边编号与单元编号组合到一阶单元编号里面,得到新的编号则是连续的编号与未知数映射关系。
IV.组装全局系数矩阵:上述步骤完成了混合网格的单元与未知数的映射关系,然后根据每个单元的阶数一一组合单元系数矩阵;
V.边界条件的加载:加载方式采用第一类边界条件,一阶部分按照传统的强加边界条件的方式分别对系数矩阵与右端项进行处理;二阶部分采取全部赋值为零的加载方式。
VI.高低阶棱边处理:高阶单元与低阶单元的连接棱边需要特殊处理。对连接棱边强行降低阶数,将高阶降低成与低阶一致的阶数。
测试模型为10m*20m的矩形,频率为1000Hz的电场垂直入射Y方向,介质体电导率为1欧姆米,模拟电场在介质中的衰减过程。
首先给出1阶在Y方向的电场结果与误差分布。
Eg1:以Y方向作为分界线,一阶二阶各取一半网格。
其中,红色表示2阶,蓝色表示1阶网格。混合阶网格的解与精度:
可以发现,混合阶在电场衰减剧烈的地方矢量二阶网格后,精度得到了明显提升,体现在二维图像上的误差分布更加的直观:
可见,二阶部分的精度与一阶网格部分的精度泾渭分明。
Eg2:以X方向作为分界线,一阶二阶各取一半网格
求解结果如下:
同样,二阶与一阶的精度结果泾渭分明,二阶部分的精度明显由于一阶部分。说明实现的混合阶有限元是正确的。
矢量混合阶有限元的实现关键在于未知数编号的重组,这个过程比较复杂,需要重新查找高阶部分的单元、棱边以及之间的映射关系。
本文仅仅实现小案例,对于大规模的案例,不同的网格映射方式对效率、内存之间的平衡将是一个挑战。