当通过 FEtch 将有限元语言脚本成功地转化成了可执行的计算程序,整个工作应该说仅仅才完成了一半。用户还需要为计算程序准备输入文件,以及将计算结果进行图形化显示。这就需要有一款合适的前后处理器与用户开发的计算程序进行对接。在众多的可选择的前后处理器中,考虑到灵活性和稳定性,FEtch 研发团队选择了欧洲工程数值模拟国际中心(CIMNE)研发的 GiD 软件作为对接目标。这里简单介绍一下与前后处理有关的技术细节及其背后的机理。
GiD 作为通用前后处理器的—般原理
GiD 是一款通用的计算内核程序的前后处理软件。作为第三方软件,FEtch 将其集成在系统中。GiD 具有图形交互的可操作性,可以处理和可视化数值模拟的相关数据,包括几何模型的建立、初值和边界条件施加、有限元网格划分以及计算数据后处理。需要明确的是,GiD 在 FEtch 中实际上是作为 "FEtch 所开发出来的有限元程序" 的前后处理软件,而不是作为 "FEtch 自身" 的前后处理软件。因为 FEtch 本身是一套软件开发平台,是搭建有限元程序和 GiD 之间数据交互桥梁的工具。
用 GiD 作为前后处理器,首先要理解 GiD 和用户所开发的计算内核(GiD 称其为用户问题求解器)的关系。在 GiD 软件的总体架构上,这种关系如下图所示。
从 GiD 的角度出发,任何需要前后处理的计算内核程序,即用户问题求解器,都可以嵌入到 GiD 软件中。GiD 同时包含前处理和后处理的功能。其前处理功能可以生成对应用户程序所需格式的输入数据文件,用户程序计算完毕后的结果文件也可以用 GiD 的后处理功能进行可视化展示。
对于首次使用 GiD 的用户,这里有几个细节需要了解:
- GiD 工作项目是以文件夹的形式存在的,里面可能会包含 .dat、.res、.geo 和 .lin 等多个文件。其中 .dat 是 GiD 前处理导出的网格数据,.res 是有限元程序计算得到的结果数据,供 GiD 后处理调用。这两个文件一个作为输入,一个作为输出,与 FEtch 生成的计算内核程序直接相关。它们都是纯本文格式,可以用文本编辑器查看和编辑。 其他文件一般不必作深入了解,如果用户对具体细节感兴趣,可参阅 GiD 的帮助文档。
- 一个目录下最多有一个由工程项目名命名的 GiD 工作项目。用户可以通过 FEtch 客户端菜单 "后处理->GiD备份与还原…" 对当前的 GiD 文件夹进行存档和替换。
在 GiD 中启用 FEtch 前处理配置
使用 FEtch 系统进行程序开发工作,用户首先应正确理解边界。边界区域并不一定就是外部边界。例如,对于二维区域,边界可能是外部边界线的全部或者一部分,也可能是区域内的分界线。三维问题可以以此类推。因此,边界究竟是什么,用户应该在微分方程的提法阶段就要了然于胸。如果边界位于区域内部,用户在前处理开始时就应该画出这些分界线来分隔不同的区域。
我们知道,常见的边界条件有三类。FEtch 系统约定,第一类边界条件直接在 GiD 中添加赋值;第二类、三边界条件由于已根据弱形式写入到了 FBC 边界条件描述文件中,因此参数的值需要在 MAT 文件中给出,并在 GiD 中以材料号的形式对所属区域进行赋值。
面向不同的有限元内核程序,GiD 软件本身内置了多种前处理界面,供用户选用。使用 FEtch 进行常规的有限元建模操作时,在进入 GiD 前处理界面后,对于新建项目,用户首先需要选择 Data->Problem type->FEtch,激活 FEtch 对页面的个性化配置。如下图所示。
然后,选择 Data->Conditions,弹出 Conditions 对话框。用户需要在该对话框中施加各种初值、边值条件和赋材料号。Conditions 对话框如何显示,以及这些条件的填写究竟是何种含义,完全是由用户编写的脚本文件决定的。
事实上,这些条件是由 GiD 的配置文件 CND 文件来设定的,而 CND 文件又主要是 FEtch 系统依据 MDI 文件生成的。为方便用户查看,生成的 CND 文件存放在了当前的工作目录下,在前处理时 FEtch 会自动将其拷贝到 GiD 的安装路径,以供调用。对于不同的有限元模型来说,MDI 文件是变化的,因此,与之对应的 CND 文件和 GiD 界面也是不一样的。CND 文件格式在 GiD 的帮助文档中有详细的介绍,对于有自定义界面的需求的高级用户,不妨深入学习一下。接下来,我们仅对前处理界面的操作方法作一简单介绍。
MDI 文件内容与 GiD 前处理界面
MDI 文件是 FEtch 系统的重要原型文件。它不仅是用来统筹管理每个物理场的信息的,还会用生成面向 GiD 的前处理界面。这里通过典型的具体算例来简单介绍一下前处理界面上的条件选项同 MDI 文件内容的关系。我们选取一个热固两场耦合问题, MDI 文件内容如下。
tds.mdi ( 2 场耦合 ) | 说明 |
---|---|
2dxy #a 1 1 t pde heat q4g2 fbc heat l2g2 #b 0 2 u v pde dispd q4g2 fbc dispd l2g2 # |
在二维直角坐标系下求解 a 场,1 个初值,1 个自由度,自由度名称为 t 调用 heat.pde,采用 4 节点四边形单元,2点高斯积分 调用 heat.fbc,采用 2 节点线单元,2点高斯积分 b 场,无初值,2 个自由度,自由度名称为 u、v 调用 dispd.pde,单元类型同 a 场 调用 dispd.fbc,单元类型同 a 场 (文件结束符,可留空) |
由此生成的 Conditions 对话框界面与 MDI 文件内容存在如下对应关系。
上图从上到下依次为面、线、点三种几何体所对应的条件选项。如果是三维坐标系(例如 MDI 文件的首行为 3dxyz),则 Conditions 对话框界面还会出现应用于体的条件选项。
对于 Conditions 对话框界面,这里有几个细节需要说明:
- "变量名-I" 文本框:用于填写节点规格数。本系统用 1,0,-1 和大于 1 的整型数来表示节点规格数,具体含义为: -1:节点上有自由度,但有约束 1:节点上有自由度,且无约束 0:节点上无自由度 > 1:具有相同整型数的自由度会对应相同的方程号,常用于主从约束或周期性边界条件
- "变量名-D" 文本框:用于填写约束值,仅当它上方的 "变量名-I" 文本框填写的节点规格数为 -1 时发挥作用。
- "变量名-D1" 文本框:用于填写场变量的初始值,可能没有或者有多个(变量名-D1、变量名-D2 …),这与 MDI 文件对场的初始值数量的声明直接相关。
- "场名[e或l]单元类型" 文本框:用于填写场的材料号。这里需要填写一个整数,它与 MAT 文件中的材料类型编号是一一对应的。
- 不同条件的施加需要结合所模拟问题的具体物理意义,必须保证待求解问题的适定性。遇到界面下拉列表框中有而实际上没有或者无需添加的条件,直接跳过不加即可。
最后需要补充说明的是,GCN 文件在生成前处理界面的过程中也发挥了一定作用,体现在特定求解器对界面配置的限制上。具体来说,如果是求解梯度场,使用了#stress 求解器,如 #stress b a,则 b 场会继续使用 a 场的数据,也就是说不需要单独施加边界条件和赋材料号,因此不需要对 b 场进行前处理,相关内容也就不会出现在 Conditions 对话框中。
GiD 后处理文件准备
当用户在 GiD 中完成了全部的前处理,需要进行计算 (Calculate->Calculate) 来导出 dat 文件,之后即可退出 GiD ,开始有限元计算。
当计算成功时,工作目录下的 GiD 文件夹里会增加一个 .flavia.res 文件,全部的计算结果都存放在该文件中。这时候就可以对结果文件进行后处理可视化了。
后处理可视化的结果文件(.flavia.res )是由用户程序自动产生的。追根溯源,上升到有限元语言文件层面,是在 NFE 文件中通过 gidpost 语句实现的。GiD 软件对后处理文件格式有特定的要求,而 gidpost 语句则提供了一种接口,帮助用户的有限元程序实现了格式的快速对接。因此,用户应熟知 gidpost 语句的语法规则,避免出现不必要的后处理错误。
另外,在后处理中,网格可能发生变化,因此,GiD 后处理允许用户程序在后处理中重新提交网格文件 .flavia.msh 文件。当然这是可选操作,如果用户不提供,则在后处理中仍然使用前处理得到的网格。有限元语言暂未提供与网格文件更新相关的语句,有需求的用户可参照网格文件的格式要求可自行编程开发,请感兴趣的用户查看 GiD 的帮助文档或者技术手册。
小结
以上是站在 GiD 软件的角度,即以 GiD 为中心、用户计算程序向 GiD 集成的思路,介绍了前后处理的技术细节和背后机理。这需要每个用户开发的计算程序去适应 GiD 的数据格式。FEtch 系统实现了这一过程的自动化,帮助用户大幅缩短了开发时间。当然,这里生成的 GiD 模板文件只是初级的,用户完全可以根据自身的程序需求,对 GiD 前后处理进行更深层次的定制。