跳转至

单元编号体系与形函数库

形函数与有限元近似中引入的形函数 \(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 为参数的统一接口调用形函数库。模块 elementInfofistr1/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_convfistr1/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 输入格式与内部格式的中间节点顺序一致,因此不进行转换。

相关项目