单元编号体系与形函数库¶
形函数与有限元近似中引入的形函数 \(N_\alpha^e(\boldsymbol{r})\) 对不同单元类型具有不同的具体形式。本章按照三位数单元类型编号对 FrontISTR 提供的单元组进行分类,并介绍用于统一处理各类单元的形函数库接口。三维实体单元的自然坐标系、形函数具体形式以及二次单元中间节点顺序的转换,请参见三维实体单元的形函数;单元类型选择指南请参见单元库(功能)。
单元的分类与命名规则¶
FrontISTR 的单元类型通过三位数编号进行识别。各位数字的含义如下。
- 第1位(单元组):1=线单元、桁架,2=平面单元,3=实体单元,5=界面单元,6=梁单元,7=壳单元。
- 第2位(基本形状):区分单元组内的几何形状(三角形、四边形、四面体、三棱柱、六面体)。
- 第3位(插值阶次):1=一次(仅角节点),2=二次(含中间节点)。例外情况是2节点桁架单元编号为301。
按单元组列出的可用单元如下表所示。
| 单元组 | 单元类型 | 节点数 | 说明 |
|---|---|---|---|
| 线单元 | 111 | 2 | 2节点连接单元(不可用于应力分析) |
| 112 | 3 | 3节点连接单元(不可用于应力分析) | |
| 平面单元 | 231 | 3 | 三角形一次单元 |
| 232 | 6 | 三角形二次单元 | |
| 241 | 4 | 四边形一次单元 | |
| 242 | 8 | 四边形二次单元(Serendipity 族) | |
| 实体单元 | 301 | 2 | 2节点桁架单元 |
| 341 | 4 | 四面体一次单元 | |
| 342 | 10 | 四面体二次单元 | |
| 351 | 6 | 三棱柱一次单元 | |
| 352 | 15 | 三棱柱二次单元 | |
| 361 | 8 | 六面体一次单元 | |
| 362 | 20 | 六面体二次单元(Serendipity 族) | |
| 界面单元 | 541 | 4×2 | 四边形面一次单元(不可用于应力分析) |
| 542 | 8×2 | 四边形面二次单元(不可用于应力分析) | |
| 梁单元 | 611 | 2 | 2节点 Bernoulli-Euler 梁单元(节点6自由度) |
| 641 | 2×2 | 2节点 Bernoulli-Euler 梁单元(节点3自由度,用于混合自由度) | |
| 壳单元 | 731 | 3 | MITC3 三角形壳单元(节点6自由度) |
| 741 | 4 | MITC4 四边形壳单元(节点6自由度) | |
| 743 | 9 | MITC9 四边形壳单元(节点6自由度) | |
| 761 | 3×2 | MITC3 三角形壳单元(节点3自由度,用于混合自由度) | |
| 781 | 4×2 | MITC4 四边形壳单元(节点3自由度,用于混合自由度) |
六面体一次单元361具有多种公式化方法(完全积分、非协调、B-bar、F-bar),可通过分析控制进行选择。详见高性能单元公式化。
梁单元641以及壳单元761/781用于将具有6个自由度的结构单元与3自由度实体单元连接到同一节点,其公式化中用两个3自由度节点表示一个结构节点。其公式化本身与对应的6自由度版本(611、731、741)相同。
形函数库¶
单元计算例程(刚度矩阵和内力向量的构造)不为每种单元类型分别设置例程,而是通过以单元类型编号 fetype 为参数的统一接口调用形函数库。模块 elementInfo(fistr1/src/lib/element/element.f90)提供以下函数。
NumOfQuadPoints(fetype):返回该单元类型的积分点数 \(n_q\)。getQuadPoint(fetype, np, pos):返回积分点 \(i\) 的自然坐标 \(\boldsymbol{r}_i\)。getWeight(fetype, np):返回积分点 \(i\) 的权重 \(w_i\)。getShapeFunc(fetype, r, N):返回自然坐标 \(\boldsymbol{r}\) 处的形函数值 \(N_\alpha^e(\boldsymbol{r})\)。getShapeDeriv(fetype, r, dN):返回形函数对自然坐标的导数 \(\partial N_\alpha^e/\partial \boldsymbol{r}\)。getGlobalDeriv(fetype, n_e, r, X^e, J, dN_x):给定单元节点坐标 \(\boldsymbol{X}^e\),返回对物理坐标的导数 \(\partial N_\alpha^e/\partial \boldsymbol{x}\) 以及雅可比行列式 \(J\)。getNumberOfSubface(fetype)、getSubFace(fetype, k, ...):返回单元边界面的数量以及构成各面的节点编号。用于构造面载荷和接触面。
各函数内部根据单元类型编号分支,并调用为各单元类型准备的下层模块(tet4n.f90, tet10n.f90, prism6n.f90, prism15n.f90, hex8n.f90, hex20n.f90, tri3n.f90, tri6n.f90, quad4n.f90, quad8n.f90, quad9n.f90, line2n.f90, line3n.f90)中的形函数和形函数导数子例程。积分点坐标和权重数值表集中在 quadrature.f90 中。添加新的单元类型时,只需实现相应的下层模块,并将其加入 elementInfo 各函数的分支。
三角形二次单元的中间节点顺序转换¶
三角形二次单元232在 HEC-MW 网格输入格式(先依次列出角节点,然后按边1-2、2-3、……的顺序列出中间节点)与单元库形函数所假定的 FrontISTR 内部格式之间,中间节点顺序不同。两种格式的差异通过网格读入后立即调用的 hecmw2fstr_mesh_conv(fistr1/src/common/hecmw2fstr_mesh_conv.f90 以及 hecmw2fstr_connect_conv.c),按照转换表 Table232 将6个节点重新排列为 \(\{1,2,3,6,4,5\}\) 来消除。由于转换直接作用于存储单元连接信息的数组,因此后续所有单元库调用均使用 FrontISTR 内部节点顺序。结果输出时,通过逆转换 fstr2hecmw_mesh_conv 恢复为 HEC-MW 格式后再写出,因此用户在输入和输出两端只需关注 HEC-MW 格式。
三维实体单元342(四面体二次)和352(三棱柱二次)也存在同类自动转换,而362(六面体二次)不进行转换。其处理方式请参见三维实体单元的形函数。对于二次四边形平面单元242和界面单元542,HEC-MW 输入格式与内部格式的中间节点顺序一致,因此不进行转换。
相关项目¶
- 形函数与有限元近似 — 形函数的数学定义
- 数值积分 — 积分点、权重与单元积分的近似形式
- 三维实体单元的形函数 — 连续体实体单元的自然坐标和形函数的具体形式
- 高性能单元公式化 — B-bar / F-bar / 非协调 / 壳 / 梁
- 单元库(功能) — 单元类型的选择项及用法