首页/文章/ 详情

二维四面体任意高阶通式有限元实现-泊松方程

17天前浏览203

简述

上篇文章:任意高阶通式有限元玩法-泊松方程,详细介绍了一维任意高阶有限元的详细实现过程。本文就该技术继续前行,对于二维四面体网格而言,其基函数是通过一维基函数各个方向组合而成,因此实现了一维任意高阶有限元,对于二维四面体网格的任意高阶也就基本上没有技术盲区。

本文就根据一维的任意高阶基函数,实现二维四面体网格的任意阶。其中属于一维的任意高阶有限元介绍不再详细介绍,可参考:任意高阶通式有限元玩法-泊松方程

边值问题依旧沿用简单的泊松方程作为例子,这里也不再介绍,详细可参考:泊松方程三维结构化有限元实现初探

1.四面体基函数

已知X、Y方向一维基函数的基底可以表示为:

上述已经将线单元无量纲化,处理到[-1,1]区间,以便于使用高斯积分。处理方式如下:

对应一维度的高阶基函数通式,这里给出X,Y方向的通式,详细推导参考:任意高阶通式有限元玩法-泊松方程

   

对于四面体而言,我们已知的一阶基函数可以表示为:

二阶基函数也很容易写出来,共计9个:

不难发现,一维度的基函数阶数与二维的基函数阶数是对应的,二维基函数个数是一维基函数的平方个,很容易写出其具体关系:

因此,发现一阶2*2=4个基函数,二阶3*3=9个基函数,三阶4*4=16个基函数。如果使用原来推导出系数矩阵的方法,就会发现,二阶9个基函数需要得到9*9系数矩阵还勉强可以接受,但是16*16的系数矩阵着实让人生畏。

这更加体现了高斯积分的强大,给了我们一个不逐个计算系数矩阵的方法。继续推导,对于基函数通式的梯度求解可以写成:

2.系数矩阵的推导

对于泊松方程,需要求解梯度乘积的积分,其对X偏导的通式一般为:

   

将1小节中的基函数带入,进一步推导可以得到:

推导到这里就可以用高斯积分对其进行离散求解,最终可以写成:

可见,高斯积分分别对X方向处理然后再对Y积分处理。对于Y方向的通式同样推导得到:

对右端项的推导相对更为简单:    

如此,泊松方程的左右端项通式的推导基本上完成,不需要在进一步推导。

3.系数矩阵组装

实现了任意阶基函数的通式后,还有一处难点就是网格单元到节点的映射关系。首先要确定单元四面体的局部坐标顺序,以此来确定全局单元节点的映射顺序。

根据2小节基函数通式,不难得出这种映射关系的顺序,如图所示:

清楚单元与节点的局部映射顺序后,接下来就是实现单元到节点的具体映射关系,这里也没有什么技巧,实现即可,首先找到每个节点(四面体顶点与其他插值点)的坐标,然后根据四面体与这些节点的关系,一一得出对应关系。

这里需要仔细寻找节点与网格之间的拓扑关系,繁琐比较费时间。例如nx*ny=2*1的两个2阶四面体网格而言:

节点坐标信息如下:    

单元映射节点信息如下:


 

4.结果展示

泊松方程,研究区域为[0,1;0,1],网格大小为nx*ny=4*3=12个四面体网格。

a.1阶基函数结果 20个未知数

b.3阶基函数结果:130个未知数    

c.6阶基函数结果 475个未知数

d.10阶基函数结果 1271个未知数

总结

1.通过一维的任意阶基函数拓展到实现二维四面体任意阶有限元的策略是可行的,并且实际证明实现难度也远比直接推导系数矩阵简单。

2.简单的实现了泊松方程的任意阶有限元案例,后续还可以继续探究这种任意高阶的在实际物理问题中的运用。

          

Ps:如果对您有帮助,请点赞关注,在评论区与我讨论哦!

          

             


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

三棱柱矢量有限元实现

简述本篇介绍三棱柱矢量有限元实现过程,难度较大,期间遇到了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.三棱柱的网格剖分知之甚少,对了解的能实现三棱柱网格剖分的软件几乎没有,因此在实现过程中三棱柱的网格剖分成为一个难点,当然本次实现是将均匀六面体网格一分为二实现的。来源:实践有限元

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