FBC 文件
概述
FBC 文件的主要内容是书写偏微分方程弱形式中的边界积分项的表达式。基于 FBC 文件,生成器会自动生成与边界积分相关的单元子程序,并进行相应的局部坐标变换。因此,当待求解的微分方程存在第二类或第三类边界条件时,由于必然存在边界积分项,此时编写 FBC 文件是必需的。对于第一类边界条件,如果是定值或仅随空间坐标作简单变化,通常可在前处理时通过 GiD 操作界面来施加;如果是随时间变化的较为复杂的动态边界,则需要结合 FBC 文件和点单元通过 "置大数法" 来实现。
下面各小节分别阐述使用常规边界单元和点单元时的注意事项,在每小节的最后均附有具体示例与说明。
常规边界单元
对于常规的边界单元,FBC 文件的编写方法与 PDE 文件的编写方法基本相同。最大的区别在于,因为 FBC 文件描述的是偏微分方程弱形式所包含的边界积分项,所以它使用的单元在几何上要比相应 PDE 文件使用的单元低一维。
注意事项
编写 FBC 文件时,主要需要注意以下几点:
- 由于在几何上边界单元比相应的体单元要低一维,所以体现在语法上,FBC 文件的 DEFI 信息段的 coor 语句的坐标分量的数量要比对应的 PDE 文件的少一个。同时,coor 语句的坐标分量为局部坐标系下的变量,这是 FBC 与 PDE 文件的一个重要区别。
- 在单元类型选择上,PDE 文件使用的体单元和 FBC 文件使用的边界单元必须互相匹配,即全部是线性单元或二次单元,保证体单元的边界上的节点和边界单元的节点,在数目上保持一致。
- 对于同一物理场,FBC 文件中 mass 和 damp 信息段的声明方式,必须和 PDE 文件保持一致,即同为集中式(由 DEFI 信息段给出)或者分布式(由单独的 MASS 和 DAMP 信息段给出)。如果边界积分在数学表达式上本身不含有 mass 或 damp 项,则可以选择留空。当然,也可以采用乘 0 的方式,显式地将 mass 或 damp 项设为零矩阵。
- 为了适应边界条件随整体空间坐标变化的情况,FBC 文件对 coef 语句的功能进行了扩充。对于 n 维坐标系,FBC 文件中 coef 语句的最后 n 个变量被默认是整体坐标分量。其他的功能完全遵循 PDE 文件对 coef 语句的定义。
举例说明
范例 1
defi
disp u
coor x
shap %1 %2
gaus %3
mass %1 0.0
mate ea eb 1.4e-2;8.0e1;
stif
dist=+[u;u]*ea
load=+[u]*eb*ea
end
本例选取自二维瞬态热传导问题的 FBC 文件。因为体积分是二维的(对应 PDE 文件里的 coor x y),所以相关联的边界积分是一维的(对应此处的 coor x)。 由于 PDE 文件中的 DEFI 信息段使用了 mass 语句,为了与其保持一致,这里的 FBC 文件也在 DEFI 信息段对 mass 项进行了声明,并将其定义为零矩阵。更方便地,也可以选择不使用 mass 行,直接将其留空。
范例 2
disp u
coor x
shap %1 %2
gaus %3
coef gx gy
mate ex ey 0 0
stif
null
load=+[u]*(ex*gx+ey*gy)
end
本例展示了边界荷载随整体空间坐标变化的情况。当前坐标系为 2dxy,coef 语句有 2 个变量 gx 和 gy,分别代表了 x 方向和 y 方向的整体坐标分量。
如果存在其他系数函数,例如多场耦合或非线性迭代的情况,只要将这些系数函数按顺序排放在 gx 和 gy 之前即可。这与 PDE 文件的语法规定是完全一样的。
点单元
点单元也叫弹簧单元,单元标识符为 s1,是一类特殊的边界单元。使用时通过前处理操作将其施加到指定的节点上,可以用于定点地修改单元矩阵和荷载向量,非常适合用来实现随时间和空间变化的动态边界条件。它保留了 PDE 和 FBC 文件的大部分语法规则,仅对部分内容进行了删减。
注意事项
使用点单元时,除了上述常规的边界单元的注意事项,还需要注意以下几点:
-
MDI 文件中对使用点单元的 filename.fbc 文件的调用格式为
fbc filename s1
-
使用点单元的 FBC 文件的 DEFI 信息段与 PDE 文件的 DEFI 信息段相比,shap、gaus 语句都失效了,不再发挥作用,而其他语句保持不变。这是很容易理解的。因为点单元只有单个点,不存在形函数,也不需要数值积分,所以 shap 和 gaus 语句自然而然地就失效了。
-
不同于常规边界单元,DEFI 信息段 的 coor 语句声明的坐标分量为整体坐标分量,而且可以用多少声明多少。变量数量上限与当前项目对应的坐标系有关,最多三个分量。
-
由于不存在形函数,FUNC、STIF、MASS 等信息段的表达式中不能含有导数项,即不再支持未知函数的导数 [• / •] 和系数函数的导数 {• / •} 。
-
点单元可以用于定点地修改单元矩阵和荷载向量,常见的三类边界条件都可以通过它来灵活地实现。当然,前提是用户对有限元理论有着深刻的理解。
举例说明
范例 1
defi
disp u
coor x y
mate big ek 1e20 1e1
stif
$c6 ef=ek*(10+time*2+y*5)
dist=+[u;u]*big
load=+[u]*big*ef
end
本例选取自二维瞬态热传导问题的 FBC 文件。这里通过 "置大数法" 实现了第一类边界条件,即强制边界条件。不但如此,这个边界条件还是随时间和空间坐标动态变化的。通过利用 $c6 在 STIF 信息段插入 Fortran 语句,轻松地建立起了边界约束值与时间(time)和 空间纵坐标(y)之间的关系。
范例 2
defi
disp u,v
coor x,y
func ss
mate tx ty ek ef 1.0 1.0 1e8 0.0
func
ss = +[u]*tx+[v]*ty
stif
dist=+[ss;ss]*ek
load=+[ss]*ef
end
本例选取自弹性力学问题,包含 2 个位移自由度。这里通过 FUNC 段的 ss 自定义函数,在 [tx, ty] 方向设置了一个刚度为 ek 的弹簧,并施加了大小为 ef 的荷载。不难发现,通过改变 ek 和 ef 的参数值,就能够轻松实现全部的三类边界条件。用户可通过自行设计数值实验,来体会点单元的奥妙。