首页/文章/ 详情

一维各阶有限元精度随网格等因素变化规律(附代码)

1月前浏览1017

简述

本文再次以电磁波在真空中的传播为物理问题,介绍一维有限元中各个阶数之间的精度关系、精度随着网格变化的关系、乘以大数的处理方式对精度的影响并且介绍了一种新的第一类边界条件加载方法。

最后,给出该边值问题的一维有限元代码:其中包括一阶、二阶插值、二阶叠层、三阶叠层有限元。(这部分付费)

1.有限元基本公式

该物理问题的边值问题、有限元推导等这里均不再介绍,详细可参考:

一阶有限元参考:最简单的一维有限元问题:求解cos函数分布

二阶插值有限元参考:一维高阶插值基函数有限元实现

二、三阶叠层有限元参考:一维高阶叠层有限元实现

2.介绍第一类边界条件加载的新方法

针对如下线性方程组,假设已知第一类边界x1 = p:

常用的第一类方式是乘以大数的处理方式,如下处理:

   

这种方法即保留了系数矩阵的对称性,又简单容易实现。但是求解结果容易所设置的大数的量级影响,如果大数设置不足够大,会对结果精度造成影响。

新的方式则是避免这种问题,对于求解线性方程组,从线性方程组的角度出发,可以如下处理:

求解该方程组,也能得出x1=p,求解的出正确的结果,但是处理破坏了系数矩阵的对称性,如果使用的求解器需要系数矩阵具有对称性,就需要进一步处理,例如对上述矩阵的第二排乘开,推导如下:

其他排类似处理,重新整理系数矩阵,得到:

这时候系数矩阵重新变成了对称矩阵,已经可以了。如此得到的系数矩阵就不会引入大数,在求解的过程中也不会对精度造成影响。

当然如果是想要继续处理,可以发现第一排第一列的非对角全部为0,也就是第一排与其他排没有关系了,因此可以把第一列第一排去掉,从而还可以减少未知数个数,如下:

但是如此,求解的结果需要重新排序处理到对应的节点上,实现难度又增加了一些。

3.测试对比

对研究区域进行均匀剖分,网格从10~1000,间隔50个网格,依次求解,得出各个阶数的结果,对比其节点、方程未知数、最大误差之间的关系。

其中图中对最大误差取10的对数,以方便对比。

a.单元个数与未知量个数变化的关系

      很容易得到,阶数p的单元个数与未知数的个数的曲线的斜率大概等于p。阶数越大,未知数增加的越大。    

b.单元个数与最大误差变化的关系

阶数越大,精度越高,尤其三阶叠层的精度,在200个网格就能高达1e-10次方,而一阶即使网格足够大,精度变化也非常缓慢,能达到1e-3次方的精度就非常不错了。

c.未知量个数与最大误差变化的关系    

虽然高阶导致未知量增加,但是其得到的精度要远远高于同等未知量下低阶的精度。因此从求解线性方程组的角度上来说,高阶有限元的确是必不可少的,其高精度有时候是低阶无法达到的。

4.乘以大数对精度的影响与替代方法的对比

a.一阶有限元的精度结果对比 

可见,由于一阶有限元的精度最高大概在1e-3次方,因此大数的量级对其影响还是比较小,只有在网格大于600的时候,largenum=1e6才会显示与其他大数量级的结果不同。

b.二阶叠层与插值有限元的精度结果对比

其中,实线为二阶插值基函数结果,虚线为二阶叠层基函数结果。

取不同大数的量级,对于二阶插值与叠层有限元的精度结果影响就很明显,1e6次方的大数精度最大才1e-4,并且随着网格增加,误差有增大的迹象,1e10次方的大数精度高达1e-7但是依旧无法与处理成1的精度对比,只有大数达到1e12次方,结果才与处理成1的精度一致。

同时,叠层与插值受到大数量级的影响效果不一致,这也会让我们对同阶下叠层精度和插值精度的一致性产生怀疑,实际上看处理成1的精度对比,二者的最大误差是一模一样的。

c.三阶叠层有限元结果对比

三阶叠层有限元的精度相差就更加的明显,即使大数取1e10次方,对应的精度在网格100的时候就开始受到影响,只有大数选择1e16次方,才和处理成1的精度完全一致。

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

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

简述在高阶有限元中,有两种高阶基函数形式:一种是插值基函数,一种是叠层基函数。高阶插值基函数即使在上篇文章中介绍,它是依据线性基函数组装而成,形成的每个基函数在单元上都有具体的点一一对应,并且每个基函数均满足插值基本原则,细节参考:泊松方程三维二阶插值有限元实现-四面体本文继续介绍二阶叠层基函数,它也是由线性基函数组装而成,特点是高阶基函数具有叠层的规律,即高阶基函数包含低阶基函数,并且其高阶部分的基函数在单元上并没有与之对应的点。这是与高阶插值基函数本质的差别。也正是由于叠层基函数的高阶包含低阶的规律,这使得高阶叠层基函数能够实现混合阶数有限元,而插值基函数则不能。本文通过泊松方程的边值问题为例,实现三维的高阶叠层基函数有限元。泊松方程的有限元理论推导不再赘述,参考:泊松方程三维结构化有限元实现初探。1.四面体二阶叠层基函数已知线性基函数表达式(推导可参考:泊松方程三维结构化有限元实现初探):根据四面体示意图可以发现,5~10号位置也是使用棱边表示,但仅仅如此,并不意味着如插值基函数一样,在棱边上有具体的点。同样,棱边编号的顺序如下;由此给出二阶叠层基函数的表达式:可以发现,二阶叠层基函数的N1~N4与一阶基函数是一样的,5~10阶的则是由对应棱边的两个节点基函数乘积而得。这可以理解为高阶项仅仅表示线性基函数组合的高阶,就好比泰勒级数展开的高阶项。此时,四面体内任意一点p的插值公式同样为:对应的基函数梯度项可以表示为:2.单元系数矩阵推导观察二阶叠层基函数,仔细对比二阶插值基函数,我们发现有很多相似的地方:除了低阶项完全不一样之外,N5~N10的形函数方式组装一样,仅仅相差了四倍而已,因此在系数推导的过程中,我们可以直接利用二阶插值基函数相同的结果。因此同样把10*10的单元系数矩阵分成9个亚矩阵:K11的推导非常简单,同时可以发现,K11与一阶基函数的系数矩阵是一样的,这正是由于二阶叠层基函数包含了一阶基函数的原因。K22,K23,K33系数矩阵与二阶插值基函数中的一致,仅仅相差16倍,因此可以直接获得(详细参考:泊松方程三维二阶插值有限元实现-四面体):剩下的仅有K12,K13两个块矩阵需要推导,首先推导K12:根据上述结果,很容易发现,由于N1~N4的偏导数等于常系数a,因此积分就非常容易获得,根据规律很容易得到K12以及K13项的结果:将所有亚矩阵整理,得到对x方向偏导数的10*10系数矩阵,对y、z方向的系数矩阵只需要将系数a改成b、c即可获得,如下:右端项的推导相对也是很容易:3.系数矩阵组装使用的网格同样是tetgen剖分得到二阶网格,其中的注意细节参考:泊松方程三维二阶插值有限元实现-四面体。此外还需要注意,虽然生成的节点文件node包含棱边中点信息,实际这是不需要的,需要的仅是elem文件中对棱边顺序的排序。边界条件加载与插值基函数也存在差异,因为叠层基函数的高阶项不表示网格上具体位置的物理数值,因此在加载第一类边界条件的时候,低阶项会强加第一类边界,高阶项强加为零。例如,假设第一类边界条件如下,则高阶叠层基函数的第一类边界的加载方法:完成组装系数矩阵和添加完边界条件后,最终组合成完整的系数矩阵方程可以表示如下,求解线性方程组即可获得数值结果。4.结果展示网格量2234,四面体顶点数目:593,顶点数+棱边中点数=3847。使用相同的网格求解的二阶叠层有限元泊松方程与上篇文章的二阶插值有限元对比如下:上图中对比结果显示,一阶部分(红色区域)二者的结果是一致的,而高阶部分完全不相同。再次说明了二者虽然均是二阶能提高计算精度,但是由于基函数不同,求解的数值在高阶部分也不同。从图中可以发现,使用同等网格,二阶叠层有限元的结果与二阶插值基函数的结果可以比拟,从三维显示图的光滑程度上看也同样优于一阶基函数。5.总结1.使用高阶叠层基函数实现的泊松方程的结果与高阶插值有限元结果具有同等的精度。2.实现高阶叠层基函数需要注意的点:i高阶部分仅使用棱边编号表示,并不代表某个点的物理数值;ii第一类边界条件的加载也需要注意高阶项强加为零。来源:实践有限元

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