简介
有限元语言(Finite Element Language)是一种专用的有限元模型标记语言,语法简练清晰,被广泛地应用于偏微分方程的数值求解。
发明有限元语言的初衷是为了解决以下两大问题:
- 如何描述各种偏微分方程的表达式,并转化成某种高级语言程序
- 如何描述不同类型的偏微分方程的求解算法,并转化成某种高级语言程序
经过近三十年的发展,有限元语言已经基本实现了当初的设想,使得用户可以以一种类似于数学公式书写和推导的方式,非常自然和简单地描述待解问题的控制方程。采用有限元语言编写程序,开发者的主要工作就是针对具体的偏微分方程,书写相对应的表达式文件和算法文件。随后,只需简单地调用一下有限元语言生成器,就可以自动将这些文件的内容解析成某种高级语言(如 Fortran 和 C),编译之后即可得到完整的可执行的有限元计算程序。有限元语言常用于多物理场耦合计算和大规模并行计算程序的开发,是至今为止数值计算领域中最专业的编程语言之一。
有限元语言具有如下一些典型特点:
✓ 简约性:表达方式与教科书、学术文章等的书面表达非常相似
✓ 完备性:完备的语法规则
✓ 普适性:适用于各个学科领域的各种有限元问题
✓ 高效性:自动生成代码量百倍以上的高级语言源程序
✓ 超平台性:不依赖操作系统、不依赖于体系结构
任何计算机高级语言的实现都需要具备与之配套的编译软件。FEtch 系统是新一代的有限元语言生成器,它将有限元语言的源代码进行解释,并生成完整的 Fortran 90 有限元计算程序和配套的 GiD 前处理模板。具体流程如下。
文件类型概述
针对前面提到的两大问题,有限元语言主要需要实现以下两大部分的内容。
1) 书写偏微分方程(组)的表达式,即偏微分方程(组)的虚功方程
2) 描述偏微分方程的有限元求解算法,包括
- 空间离散方法,即有限元的单元类型和积分方法
- 瞬态问题的时域离散方法
- 非线性问题的线性化和迭代方法
- 具体的计算流程
为此,有限元语言文件也主要分为两大部分,具体包括 5 种文件。
1) 表达式文件
- PDE 文件:描述偏微分方程表达式中的体积分项
- FBC 文件:描述偏微分方程表达式中的边界积分项
- MDI 文件:组织管理 PDE 文件和 FBC 文件等
说明:表达式文件用于描述多物理场的偏微分方程(组)表达式,生成单元子程序。用户需要按照偏微分方程(组)的弱形式填写 PDE 和 FBC 文件。偏微分方程表达式格式与教科书和学术论文的公式表达格式十分相似,非常符合有限元专业人员的习惯。单元的刚度矩阵、质量矩阵、阻尼矩阵和荷载向量等全部都依赖于表达式的描述,因此,请务必认真填写。MDI 文件结构则较为简单。它主要用于组织管理 PDE 和 FBC 文件,声明不同文件之间的相互关系。
注:表达式文件其实还有其他的文件类型,如 GES、GLT、GVS、FDE 和 VDE 等,但学习成本较高,适用范围较小。它们更适合于有特别需求的少部分高级用户。FEtch 系统暂未对外开放上述文件格式相关的编译功能。用户如有任何需求,请直接联系 FEtch 技术团队。
2)算法文件
-
NFE 文件:给出离散后的线性代数方程组的左端矩阵和右端向量的表达式,以及场变量计算结果的处理分析方法等内容
-
GCN 文件:给出多物理场的耦合方式和计算流程等
说明:算法文件用于描述求解微分方程的具体算法,即描述如何将一个非线性的偏微分方程线性化,如何针对时间依赖问题进行时域离散,以及如何控制迭代过程,等等。总的来说,NFE 文件主要用于配置单物理场的求解器,生成单场子程序,即求解器组件;GCN 文件主要用于进一步组织和调用 NFE 文件配置的求解器组件,生成用于计算的主程序。两者互相配合,不可或缺。
注:算法文件,尤其是 GCN 文件,与原 FEPG 支持的语法格式相比有较大的改动。因此,对于以前 FEPG 的书籍资料和算例文件,请慎重参考和使用。在使用时,应根据具体问题针对性地进行修改,以免出现语法错误。
脚本文件与最终生成的 Fortran 源程序之间的联系大致如下图所示。各个脚本文件的具体语法规则请参见后续章节的详细介绍。
语法基本约定
有限元语言不区分大小写,这与 Fortran 语法习惯一致。
有限元语言以 "\" 符号作为注释符号和续行符号。
如果一行以 "\" 开始,则该行被视为注释行。本语言不支持行中或行尾进行注释,注释全部以整行的形式出现。
如果一行以 "\" 结束,则表示续行,该行与下一行将合并为一行。
以上注释和换行规则在所有的 5 种脚本文件的任何位置均适用。单独的 Fortran 源文件使用的是 Fortran 语言本身的注释和续行规则,不受本规则的影响。
参考书籍
关于有限元语言的更多语法说明和算例应用,可参考以下书籍。
[1] 梁国平. 有限元语言[M]. 北京:科学出版社, 2009.01.
评论:最早的有限元语言专著,内容与 FEPG 帮助文档基本一致,仅供参考。
[2] 北京飞箭软件有限公司. FEPG6.0 用户手册[R]. 2008.12.
评论:最全面的 FEPG 手册,电子版,方便阅读和参考。
[3] 白冰,李小春. FEPG 有限元应用深入剖析[M]. 北京:清华大学出版社, 2011.09.
评论:作者作为 FEPG 的骨灰级用户,以开发者的视角,从一个瞬态非线性算例入手,深入阐述了 FEPG 的内部工作原理。本书语言风格直白朴实,内容启发性极高。
[4] 梁国平,周永发. 有限元语言及其应用[M]. 北京:科学出版社, 2013.02.
评论:《有限元语言》一书的再版,体积翻倍。此书后续还发行了上下两册的英文版。书中增加了大量的算例,内容丰富,推荐阅读。