求解偏微分方程开源有限元软件deal.II学习–Step 2
Posted on 2016-08-04 | In computational material science | 暂无评论
引子
在step1中创建了 格,下面就是在 格上定义自由度。此例中使用一阶线性有限元,其自由度的个数与 格的顶点数相关。后面的例子将展示更高次的单元,其上面的自由度与顶点、边、面及cell都有关。
自由度可以理解为形函数中的系数个数,因为它们是未知的,所以称之为未知量或自由度。
定义 格上的自由度很简单,因为deal.II已经内置该功能了,唯一要做的是创建有限元空间。
头文件
该头文件将自由度与顶点、线、cell联系起来。
该头文件包含双线性有限元的描述,即只在顶点上有自由度,在边上和cell内部无自由度。
该头文件包含对自由度的操作工具。
产生 格
这里用了step-1中的方法,只不过这里将 格triangulation作为参数返回,同时将manifold object声明为static,防止其过早销毁:
创建DoFHandler
目前为止,只创建了一个 格,包含几何信息(顶点的位置)和拓扑信息(顶点怎样连成线,线连成cell,cell之间怎样连接)。为了执行数值运算,还需要一些逻辑信息,比如将自由度赋给顶点,创建矩阵和矢量,用来描述 格上的场量。
首先描述自由度是如何分布的。这里使用类模板FE_Q来创建拉格朗日单元,它的成员函数需要一个参数来描述单元的多项式次数,此处是1,表明是双线性单元,也就意味着自由度只在顶点上。如果参数是3,那么意味着是双三次单元,自由度分布为:每个顶点上一个,每条边上两个,每个cell内有四个。
示意图为:
对于Q1单元:
对自由度重新编
上面的结果可以看出,非0元素离对角线很远。对于有些算法,如不完全LU分解和Gauss-Seidel预条件子,这样的分布不好,因此需要改进。
注意:对于矩阵中非0的元素(i,j),对应的形函数i和j必须相交,而此时其所在的顶点需要相邻,因此,同一个cell内顶点的编 不能差太多才行。这可以通过一种简单的步进方法实现:首先给定一个顶点标识为0,然后对它的邻居连续标 。这里使用的是Cuthill_Mckee提出的方法:
结果为:

#deal.II
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!