首页/文章/ 详情

泊松方程三维二阶插值有限元实现-四面体

20天前浏览551

简述

相比于线性基函数,高阶基函数的优势在于能使用较少的网格数量实现精度更高的计算求解,因此对于高阶有限元的实现是数值模拟中不可避免的重点话题。

本文还是以简单的泊松方程边值问题入手,介绍四面体的二阶插值基函数有限元的实现过程。其中,实现的关键还是在于基函数的确定与系数矩阵的推导。本文将重点介绍系数矩阵的推导,对于泊松方程的描述与有限元方程的推导不再赘述,可参考:泊松方程三维结构化有限元实现初探

1.四面体二阶插值基函数

对于四面体的二阶插值基函数,与二维三角形高阶基函数一样是由线性基函数组合而来,已知线性基函数表达式(推导可参考:三维非结构化有限元实现-possion方程):

根据上述四面体示意图可知,二阶基函数基函数由4个顶点和6条边的中点组成,共计10个节点。其中六个中点编号与顶点关系的顺序如下:

因此可以得到四面体的二阶插值基函数:

此时,四面体内任意一点p的插值公式可以表示为:

进一步理解插值基函数,通过p点的移动,根据面积坐标原理,可以分析得到,当p点落在1号点时,L1=1,L2~4=0,带入二阶基函数中,得到N1=1,N2~10=0;编号2~4同样可以推导得到相同的结果;当p点落在5号点时:

如上图显示,根据基函数面积坐标原理,可以得到:

带入二阶基函数,得到:

同理6~10号中点能推导得到相同的结果。由此可知上述组合二阶基函数满足基本的插值基函数原理,即p点落在任意插值节点的时候,对应节点的形函数为1,其他形函数为0.

对应二阶基函数的在x方向的偏导数如下,根据线性基函数L表达式,y或者z方向的偏导数将系数a变成b或者c即可得到。

2.单元系数矩阵推导

已知三维泊松方程的有限元公式,包括左端的偏导数项与右端项激励项。当f=0时,退化为拉普拉斯方程。

左端项对各个方向的偏导,从四面体二阶基函数不难发现,各方向的偏导数在形式上一致的,区别在于偏导得到的线性基函数系数(a,b,c)不同,因此仅需要推导一个方向的系数矩阵,其他方向改变系数即可得到。

以x方向的偏导为例,根据二阶基函数规律,将10*10的系数矩阵分成9块亚系数矩阵:

可见,由于系数矩阵的对称性,仅需要推导对角线三个加上三角三个共计六个亚系数矩阵求解即可,如此更容易根据规律推导,

a.首先推导K11系数矩阵

根据其中推导的规律性,得出其他部分的系数项:

因此,K11系数矩阵为:

b.推导K12系数矩阵

总汇得到K12系数矩阵:

c.推导K13的系数矩阵

N3N8~10与N4N8~10可以通过规律类比得出:

最终得出K13的系数矩阵:  

d.推导K22的系数矩阵

总汇得出K22系数矩阵:

e.推导K23的系数矩阵

汇总得出K23系数矩阵:

f.推导K33的系数矩阵

由此,对x方向的偏导数的系数矩阵推导结束,将上述亚系数矩阵组合起来,即可得到10*10的完整的系数矩阵,如下:

右端项的向量推导相对而言要简单很多:

因此,右端项的向量为:

3.全局系数矩阵组装

组装全局系数矩阵的前提,必须得知道每个二阶单元与节点的映射关系。这里使用tetgen网格剖分中的-o2命令生成二阶四面体网格,如此生成的ele文件中每个单元包含10个节点的映射关系。在node文件中包含四面体4个顶点与6个边中点的所有信息。

需要注意的是,本文中使用的单元10个节点的顺序为下图中“自定义节点位置顺序”,而tetgen的节点顺序是左图“tetgen节点位置顺序”,因此需要将生成的单元映射关系转化为“自定义节点位置顺序”,如此才能使得单元系数矩阵顺序与实际单元节点顺序是一致的。否则组装结果错误。

例如,tetgen生成的网格单元映射关系:

转化后的单元映射关系:

统一映射关系后,再根据正确单元映射关系,将单元系数矩阵组装成全局系数矩阵,过程与以前介绍的组装方式基本一致(参考:最简单的一维有限元问题:求解cos函数分布)。
对于第一类边界条件的加载也和以前介绍的方法一致,使用乘以大数的方法加载。需要注意的是二阶四面体对应的边界面也是二阶三角形,因此加载第一类边界的时候不仅考虑三角形顶点,同时也要考虑三角形棱边中点的加载。

4.结果展示

在组装好系数矩阵与右端项后,使用matlab自带求解器,求解结果。本次网格信息:四面体单元:2234,总节点个数:3847。

a.首先当不考虑右端项,处理成拉普拉斯方程,边界条件在Z=0处放置0,Z=10处放置1,其他边界不进行处理。
数值模拟的结果与理论解对比:
 

 

可见,从节点数据对比与三维插值结果显示,二阶基函数有限元的整个流程与系数矩阵均是正确的。

b.加入右端项,将边界条件全部以乘以大数的方法置零,求解泊松方程。

下图为2阶基函数有限元的泊松方程结果,网格量2234,节点3847:

下图为1阶基函数有限元的泊松方程结果,网格单元2234,节点593,参考:三维非结构化有限元实现-possion方程  

可见,同等网格单元量,使用2阶四面体网格,得到的结果明显要比1阶的精度更高,结果更加光滑。耗时也仅仅花费了4.6s时间。

5.总结

    1.二阶插值基函数有限元的关键在于基函数与单元系数矩阵,在这过程中一定要保证四面体单元的节点顺序与基函数定义的顺序一致。如此才能保证组装的过程是正确的。

    2.系数矩阵的推导看似繁琐众多,实际其中有规律可循,在检查最终的系数矩阵的时候,也可以通过隐藏在其间的规律查找问题。

 
 

来源:实践有限元
MATLAB理论
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-12-06
最近编辑:20天前
实践有限元
硕士 签名征集中
获赞 0粉丝 0文章 57课程 0
点赞
收藏
作者推荐

使用二维矢量有限元展示一个实际例子

简述二维电场从空气中入射地下空间。电场从高空中垂直入射到地面,电场在传播过程中遇到电阻率不同的物体会反射电磁波,通过在地面监测电阻率可以获得地下空间的实际电阻率变化情况。假设电场的振动方向是x方向,传播方向为y方向,因此在OXY平面,要模拟电场的传播规律,选择矢量有限元实现。具体实现参考:二维矢量有限元的详细实现过程1.基本信息频率:0.1Hz~1000Hz选择13个频点;视电阻率公式针对二维三角形网格矢量有限元,其插值任意一点公式为:2.网格整个仿真区域分为研究区域与外扩区域:研究区域是感兴趣的区域,实际做研究的区域;外扩区域是为了保证电场衰减下在边界面最小反射而添加的区域,外扩区域的范围大小与所研究频段的趋肤深度有关。趋肤深度,是定义电场在良导体内衰减会衰减1/e,即36.8%时,所深入的距离。本例子中的最大频率、最小频率的区域深度:因此,区域深度最好在0.1Hz的趋肤深度左右,如此在底面造成的反射才有可能尽量规避;同时在地表面为了保证1000Hz的精度,研究区域的网格尺度小于1000Hz的趋肤深度。由此获得符合实际物理情景的网格:3.仿真案例a.地下空间的电阻率为均匀电阻率100欧姆米。可以发现,在地表获得的视电阻率结果基本上保持在100欧姆米,与理论预期一致。在高频下的结果102欧姆米也基本上保证在精度范围内。b.在100欧姆米的地下空间存在一个10欧姆米的低阻物体,在实际情况中可能是矿等异常的资源。c.在100欧姆米的地下空间存在一个1000欧姆米的高阻物体。d.在100欧姆米的地下空间存在一个1000欧姆的高阻物体,一个10欧姆低阻的复杂情况。几个模型的结果基本上都能通过视电阻率反应地下异常体区域的电阻率情况。总结a.有限元在实际运用中的建模必须得考虑具体物理规律,保证仿真求解的结果能反应实际物理规律,这需要专业的知识与有限元算法特征的配合。b.可以发现本案例中虽然使用的三角形网格,但是是通过结构化网格实现的,造成了很多冗余的质量差的网格,实际上可以通过三角形网格生成软件生成更加优质的网格。来源:实践有限元

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈