MDI 文件
概述
在求解实际的物理问题时,往往会包含多个物理场的求解。每个物理场至少包含一个微分方程。在对每个物理场进行求解的时候,除了 FEtch 系统提供的代码库,用户可能还需要调用一些自定义的 Fortran 子程序或函数库。这里要介绍的 MDI 文件就是用来统筹管理每个物理场的信息的。它会从一种全局的视角对求解的问题进行说明。文件的主要内容包括:
- 待求解问题的坐标系;
- 待求解问题中每个物理场的自由度的个数和名字以及初始值的个数;
- 每个物理场的微分方程的表述文件,单元类型以及 Fortran 子程序模块。
MDI 文件名代表工程项目名,要与 GCN 文件名保持一致。各个物理场信息在 MDI 文件中的编写顺序也要与 GCN 文件中的编写顺序保持一致。
语法规则
坐标系声明
第一行给出坐标系名称,表示该问题采用什么样的坐标系,如二维直角坐标表示为
2dxy
系统全面支持最常用的 7 种坐标系,具体选项如下表。
标志符 | 坐标系 |
---|---|
1dx | 一维直角坐标 |
1dr | 一维极坐标 |
2dxy | 二维直角坐标 |
2drz | 二维轴对称柱坐标 |
3dxyz | 三维直角坐标 |
3droz | 三维柱坐标 |
3drso | 三维球坐标 |
物理场信息
从第二行开始,每个物理场都要给出一个信息段。该段信息的编写格式如下。
1)以 "#" 字符开头,然后按顺序给出场符、初始值个数、自由度个数、自由度名称(彼此之间用空格隔开)。如
#a 0 3 u v w
这表示 a 场没有初始值,总共 3 个自由度,自由度名称为 u、v 和 w。
2)随后给出本场所采用的 PDE 类型(包括 PDE 和 FBC)的文件, 每个 PDE 类型文件名占用一行,并在文件名的后面给出所采用的单元类型和数值积分方式(可以有多个)。如
pde disp t3g2 q4g2
fbc disp l2g2
这表示该场的控制方程由 disp.pde 和 disp.fbc 文件给出,体单元为 3 节点的三角形单元(t3)和 4 节点的四边形单元(q4),边界单元为 2 节点的线单元(l2),数值积分方式全部为 2 点高斯积分。
系统当前支持的单元类型如下表。
形状符 | 单元类型 | 节点数 | 英文名参考 |
---|---|---|---|
s | 点\弹簧单元 | 1 | Point\Spring |
l | 线单元 | 2、3 | Line |
t | 三角形单元 | 3、6 | Triangle |
q | 四边形单元 | 4、8、9 | Quadrangle |
w | 四面体单元 | 4、10 | Wedge\Tetrahedron |
p | 三棱柱单元 | 6、15、18 | Tri-Prism |
c | 六面体单元 | 8、20、27 | Cube\Hexahedron |
在此基础上,对于多物理场全耦合问题,系统还全面支持使用 Taylor-Hood 单元,即对不同的自由度采用不同阶次的插值方法。具体使用方法可参考相关的多场耦合算例。
关于数值积分,FEtch 系统提供了两种方案:节点积分和高斯积分。单元类型符之后,如果留空,则表示使用节点积分;如果紧跟 g1、g2 或 g3,则表示采用 1 点、2 点或 3 点的高斯积分。
理论上,在相同节点数的条件下,节点积分的精度要低于高斯积分的精度,但不会改变整体的有限元逼近精度的阶次。使用节点积分的一个重要原因是,在生成单元质量矩阵和阻尼矩阵时可以得到对角矩阵,从而提高数值稳定性,并简化方程的求解。相关的更深入的内容,请参考有限元理论的专业文献。
注:与其他单元相比,点单元是一种非常规的单元,主要用于施加点荷载和点约束。它只支持 FBC 类型文件,且不需要单元积分。详见 FBC 文件语法说明。
3)如果脚本中调用了自定义的 Fortran 源文件,应给出所使用文件的名称。为此,本系统提供了 f90、for、lib 和 mod 语句,用于声明项目用到的不同类型的源文件名。具体说明参见下表。
语句 | 对应文件 |
---|---|
f90 | f90 自由格式的源文件 |
for | f77 固定格式的源文件 |
lib | 已编译好的 lib 库文件 |
mod | 已编译好的 mod 模块接口文件 |
也就是说,如果一行以 f90 开头,则应附上 f90 自由格式的源文件;以 for 开头,则应给出 f77 固定格式的源文件;以此类推。例如
f90 plasa stresa
for plasb stresb
lib myplas
mod plasmod
注:在整个 MDI 文件中,用户调用的 Fortran 源文件声明一次即可。也就是说,这些文件是所有物理场共享的。
综合案例
在此给出一个固体弹塑性力学问题的 MDI 文件,其中 a 场用来算位移,b 场用来算应力,文件具体内容如下:
mdi 文件 | 说明 |
---|---|
2dxy #a 0 2 u v pde disp q4 fbc disp l2 fbc load s1 f90 plas stres #b 0 3 sx sy sxy pde stress q4 # |
在二维直角坐标系下求解 a 场,无初始值,两个自由度,自由度名称为 u、v 调用 disp.pde,单元类型为 4 节点矩形单元,采用节点积分 调用 disp.fbc,单元类型为 2 节点线单元,采用节点积分 调用 load.fbc,单元类型为 1 节点点单元 调用 plas.f90 和 stres.f90 文件 b 场,无初值,三个自由度,自由度名称为 sx、sy、sxy 调用 stress.pde 来描述,单元类型为 4 节点矩形单元,采用节点积分 文件结束 |