开源有限元框架 deal.ii
本文摘要(由AI生成):deal.II是一个基于C++的有限元库,广泛用于数值分析和偏微分方程求解。它包含多个组件,如Triangulation处理几何建模和网格划分,FiniteElement定义有限元空间,Quadrature用于数值积分,DoFHandler分配自由度,Mapping映射信息到实际网格,FEValues计算形函数值,Linear Systems组装刚度矩阵和等效节点力,Linear Solver求解线性系统,以及Output支持多种输出格式。虽然安装复杂,但社区支持强大,提供丰富资源帮助用户。源代码托管在GitHub,方便用户获取、报告问题和贡献代码。官网:https://www.dealii.org/deal.ii安装过程很麻烦,需要装个虚拟机。deal.ii基于c++语言开发,目前活跃度较高。整体框架如图所示1)TriangulationTriangulation类相当于前处理的几何建模和网格划分。Triangulation存储了网格的几何和拓扑性质,如单元接触形式和顶点位置。一个triangulation对象不知道我们要在这个网格上使用的有限元的任何信息,它甚至都不知道它的单元的形状,它只知道2维时有4个面和4个顶点,三维时有6个面、12条边和8个顶点,其他信息都在映射类中定义。2)FiniteElementFiniteElement类用来描述定义在参考单元上的有限元空间(有限维的函数空间)的性质,比如单元的顶点、边界和内部有多少自由度,此外还给出了节点上形函数的值和梯度。3)QuadratureQuadrature类与FinteElement类一起,在参考单元上定义,它们仅用来描述参考单元上积分点的位置和每个积分点的权重。4)DoFHandlerDoFHandler类是triangulation和finite elements的汇聚点:finite elements描述了每个节点、边和单元内部需要多少自由度,DoFHandler类按照finite elements对自由度的要求在triangulation的节点、边和单元内部分配自由度,并获得每个自由度的全局标识。如同triangulation对象,DoFHandler类的大部分操作也是通过对单元进行循环来完成的,我们可以得到的信息包括:单元的几何和拓扑信息(该信息在之前通过triangulation的迭代器获得),当前单元的自由度的全局标识,从一个存储triangulation全部自由度相关联的值的数据向量中提取当前单元的自由度相关联的值。DoFHandler类也不知道从参考单元到实际单元的映射的任何信息,它也不知道它管理的自由度的形函数的信息,它只知道每个节点、每条边、每个单元内部有多少自由度5)Mapping当我们需要计算矩阵和右端项的元素或每一个triangulation单元上的某个值时,我们需要知道实际单元上的有限元形函数和积分公式的积分点位置(finite elements对象提供形函数值和梯度等信息,quadrature对象提供积分公式、积分点位置和积分点权重,但是这些信息都是定义在参考单元上的;通过mapping类,将参考单元上的这些信息映射到实际的triangulation单元上),通过Mapping类及其派生类将参考单元的诸多信息映射到实际单元。6)FEValuesFEValues类计算单元上积分点处的形函数的值和梯度、散度等其他信息。当我们计算在一个单元上的积分时,我们实际上是用近似的求积公式来代替积分,因此我们只需要知道单元区域的有限个点的位置的形函数值、梯度即可。FEValues就提供这些信息:给定有限元、积分信息和映射,FEValues类计算"the restriction of a continuous function space"。7)Linear Systems类似于组装刚度矩阵以及等效节点力向量。8)Linear Solver使用求解器来求解有限维的线性系统。FEM中,通常是用迭代法来求解矩阵方程。当然deal.II也提供了矩阵方程直接求解器或稀疏矩阵直接求解器。9)Output输出结果及后处理。deal.II没有直接将结果进行后处理的功能,但是它提供了多种计算结果输出格式,可以用多种可视化软件进行可视化处理。来源:数值分析与有限元编程