首页/文章/ 详情

三棱柱矢量有限元实现

1月前浏览1141

简述

本篇介绍三棱柱矢量有限元实现过程,难度较大,期间遇到了bug,花费了接近两周的时间搞定。

三棱柱的优点在实现节点有限元过程中也说过,本身由四面体和三角形组合而成,因此也具备二者特性,在一个方向上是结构化网格,另外两个方向是非结构三角形网格。这特性对于一些特殊问题(例如极薄模型)非常有优势,能够避开四面体网格质量极差,甚至无法剖分的情况。

废话不多说,边值问题还是以电场矢量波动方程为例,具体的有限元推导这里不再介绍,详细参考:电场矢量波动方程的三维有限元实现

1.三棱柱矢量基函数

三棱柱网格单元如下,其包括6个顶点,9条边,假设三角形面所在平面为XY,则三棱柱的柱状朝向是Z方向。

不难发现,三棱柱的矢量基函数是由三角形基函数与线单元基函数组合而成,因此首先给出二者插值基函数表达式与梯度:    

由此,给出三棱柱矢量基函数表达式:

根据以上规律,给出各个基函数对应的节点编号顺序如下:

从表达式不难看出,XY方向的三角形矢量基函数和Z方向线单元基函数组合而成。同时需要注意,根据单独插值基函数的梯度表达式发现其均具有方向,因此可以得到三棱柱三个方向的插值基函数:

   

可以发现,Ez的方向插值基函数仅使用了N7~N9,因为N1~N6的基函数不具有Z分量。

2.单元系数矩阵的推导

根据矢量波动方程的有限元方程:

首先考虑第一项积分,根据三棱柱矢量基函数规律,可以把系数矩阵分为9块亚矩阵:

已知,二维三角形基函数的旋度结果为:

首先推导三棱柱基函数N1~N3求旋度:

根据N1~N3和N4~N6的相似度,观察可知二者相差一个负号:

继续推导N7~N9的旋度公式:    

得到各个部分单独的旋度结果后,进而继续推导其乘积:

为了简化,这里可以令常数项为:

因此,简化curN13curN13推导结果为:

观察不难发现,curN46curN46的结果与curN13curN13相差仅仅是Z方向,因此可以直接得到:

继续推导curN79curN79的结果,比较容易得到:    

非对角线结果也同样可以得到:

继续推导Knn部分,相对就简单很多:

由此,剩下就是把对应部分根据下面基本部分的积分结果积分即可:    

例如,对curN13curN13的积分表达式为:

将XY面的三角形基函数积分和Z轴的线单元分开积分,根据LiLj中i.j的不同取值,得到具体结果。这里不再扩大篇幅推导得到具体的系数值,因为给出了上述通式后对于编程实现会更加的容易。

3.系数矩阵组装

这里组装与常见的矢量有限元的注意点是一致的:

a.确保棱边方向唯一性

每个棱边具有唯一方向,因此在组装过程中,务必确保唯一性,三棱柱的棱边方向不同于六面体几乎已知的,因此采取四面体的方法,将节点小到节点大作为棱边正方向。

b.棱边编号的获取

获取棱边编号与每个三棱柱映射关系,这也是一个难点,由于没有现成的剖分三棱柱的软件,因此只能自己实现,这里给出最简单的三棱柱,以供参考,对于numx*numy*numz=2*1*1的网格,三棱柱网格共计有4个:    

12个节点坐标信息:

24条棱边与节点编号映射关系:   

三棱柱单元到节点编号映射关系:

三棱柱单元到棱边编号映射关系:

c.第一类边界条件的加载

这里的棱边不再仅仅是固定的三个轴向方向,因此第一类边界的加载需要乘以该方向的方向向量,具体做法参考四面体的做法:三维矢量有限元实现过程-电场矢量波动方程

4.结果展示

测试模型大小10*10*20m,各个方向网格大小为10*10*20,共计4000个三棱柱,9140个棱边。网格如下:

可视化结果的插值公式,将结果插值到三棱柱的中心点上,然会将两个同在六面体的三棱柱的结果取平均作为六面体的结果,如此能更好实现三维可视化结果。三棱柱中心点插值公式如下:

需要注意:上述没有考虑棱边的方向性问题,因此具体实施的时候还需要乘积单元上棱边对应的正负系数。    

a.频率为1e4Hz,电导率为1欧姆米,与解析解对比

误差低于1%,并且可以发现,该结果与六面体的矢量有限元结果误差是一致的。三维可视化结果,仅展示Ex方向结果:

   

与预期一致,当电场传播方向为Z方向,振动方向为X方向时,仅有Ex存在,而在YZ方向的电场基本上等于零。

b.频率为1e4Hz,电阻率为1欧姆米。中间存在一个立方体的区域电阻率为0.001欧姆米。其三维可视化结果如下:    

   

可见,在材料不一致的区域,电场的异常反应还是非常明显,并且在Ex的振动方向,在X的方向碰到分界面出现了明显的突变情况,也是符合预期的。其他两个方向也分布有电场响应,这是由于电场的在分界面的散射导致的,同样,在各自方向的分界面上出现了明显电场突变情况。

5.总结

a.所有矢量有限元的关键,必须确保棱边方向具有唯一性;

b.可以对比之前的三维四面体与三维六面体结果,可以发现虽然三棱柱具有一定非结构网格的特征,但是其精度可以达到与六面体网格几乎一样的精度,当然,这可能也是由于网格比较均匀的缘故。

c.期间遇到的一个bug,虽然单元系数矩阵中编程的时候存在小错误,但是却不体现在结果上,只有对各个方向均实验电场发射之后,才发现问题所在,这一点需要特别注意,一个方向发射不一定正确,只有所有方向发射均为错误才能保证系数矩阵完全正确。

d.三棱柱的网格剖分知之甚少,对了解的能实现三棱柱网格剖分的软件几乎没有,因此在实现过程中三棱柱的网格剖分成为一个难点,当然本次实现是将均匀六面体网格一分为二实现的。

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

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

简述本文再次以电磁波在真空中的传播为物理问题,介绍一维有限元中各个阶数之间的精度关系、精度随着网格变化的关系、乘以大数的处理方式对精度的影响并且介绍了一种新的第一类边界条件加载方法。最后,给出该边值问题的一维有限元代码:其中包括一阶、二阶插值、二阶叠层、三阶叠层有限元。(这部分付费)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的精度完全一致。来源:实践有限元

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