以前做材料本构和细观建模的时候,第一个拦路虎就是建模。尤其是机织编织类的材料,需要搞懂一系列织造参数,才可能完成三维模型创建。这还不算完,搞完模型还要继续弄网格,一旦需要研究几何参数变化规律,上述的过程又得整一遍。
即便后面我已经很熟练了,这个过程仍然需要花费很多时间。那个时候我就在想,以后要是能自己搞一个参数化建模工具就好了。
后来做项目多了,发现不仅是细观结构,很多宏观上的部件,比如加筋壁板。在结构上设计迭代中,也需要一个自动建模工具,最好是一步搞出网格然后直接可以导入ABAQUS中使用,这样结构-力学评估-优化的效率将大大提高。
然而,对于复合材料而言,还面临一个问题就是铺层定义。尤其我们做UMAT/VUMAT,需要使用实体网格,这时候ABAQUS的自带的铺层模块就没法用了。铺层一多,搞铺层定义就需要花时间。
在这个执念下,后来我编写了很多参数化建模的小工具在项目里使用。
本期我们就以最简单的层合板为例,介绍一下自己搞自动建模工具的思路,本次开发采用MATLAB语言。
我们首先需要了解两个数据结构。一是ABAQUS inp文件的数据格式,这是我们的工具需要输出的。二是,了解ABAQUS有限元模型的数据结构,简单讲就是搞清楚网格这个东西在ABAQUS中是如何表达的。
随手打开一个ABAQUS的inp文件,我们可以看到它主要包含如下部分:
1 Part1.1 Node1.2 Element1.3 Nset1.4 Elset2 ASSEMBLY2.1 Instance2.2 Nset2.3 Elset3 MATERIALS4 STEP5 BOUNDARY CONDITIONS6 OUTPUT REQUESTS
我们需要重点关注Part 和ASSEMBLY,前者负责创建网格,后者则关系到材料局部坐标系的赋予,即铺层定义的实现。
所有的有限元网格都是由节点坐标信息(Node)和单元(Element)信息构成。ABAQUS自然也不例外。它主要在Part部分。ABAQUS对于不同的网格,在描述单元内节点排序的时候是有专门规律的,如果搞错了生成的单元就是负体积。
对于层合板而言,我们知道它是一层一层的,像魔方一样。
1. 基本思路
整个建模过程的基本思路是从二维平面网格出发,通过坐标扩展生成三维实体网格,然后为每一层单元指定相应的材料方向,最后按照ABAQUS的inp文件格式要求组织输出。
首先需要明确层合板的基本几何参数,包括板的长度、宽度、单层厚度以及总层数。这些参数构成了后续网格生成的基础。
在本方法中,用户可以灵活设置这些尺寸参数,同时还可以指定每一层的铺层角度,形成一个角度向量。铺层角度是层合板设计的核心参数,不同的角度组合会带来截然不同的力学性能。材料的弹性常数也需要在开始阶段给定,这些参数将在后续的材料定义部分被使用。
2. 二维平面网格创建
二维平面网格的生成是整个建模过程的第一步。这一步的目标是在层合板的中面上建立规则的四边形网格划分。网格划分采用结构化网格的方式,通过指定网格密度参数来控制单元数量。
具体实现时:
首先在板的一条边界上按照均匀间距生成一列节点,这些节点的坐标由板的宽度和网格密度决定。
然后通过坐标平移的方式,沿着板的长度方向复 制这列节点,生成整个平面上的节点矩阵。
每个节点都被赋予一个唯一的编号,这个编号系统在后续的三维扩展和单元定义中将被延续使用。
节点坐标的生成采用了矩阵运算的方式,利用MATLAB的向量化特性提高了计算效率。
在节点生成之后,需要根据节点的拓扑关系定义单元连接。
每个四边形单元由四个节点按照逆时针顺序定义。单元的生成同样采用分列处理的策略,先定义第一列的单元连接关系,然后通过节点编号的规律性偏移生成其他列的单元。
这种方法保证了单元编号的连续性和规律性,为后续按层分配单元提供了便利。二维网格生成完成后,可以通过绘图功能将网格可视化,检查网格质量和节点连接的正确性。
3. 三维网格创建
三维实体网格的生成是在二维平面网格的基础上,沿着厚度方向进行坐标扩展实现的。
层合板的每一层都需要上下两个节点面,因此对于N层的层合板,需要生成N加1个节点层。三维节点的生成通过在二维节点坐标上增加第三维坐标分量来实现,厚度方向的坐标值由单层厚度和当前层数决定。所有节点按照从下到上的顺序依次编号,这样的编号规则使得同一竖直线上的节点编号具有固定的间隔,这个间隔等于单层平面节点的总数。这种规律性为后续单元定义中的节点检索提供了极大便利。
三维单元的定义相比二维情况更为复杂,每个六面体单元需要八个节点来定义。这八个节点分为上下两层,每层四个节点,节点的排列顺序必须符合ABAQUS对C3D8R单元类型的要求。单元的生成采用了逐层处理的策略,对于每一层材料,将二维网格信息复 制并扩展为三维单元信息。具体做法是,对于第i层,其下表面的四个节点来自第i层的二维网格节点,而上表面的四个节点来自第i加1层的二维网格节点。通过节点编号的系统性偏移,可以高效地生成所有层的单元连接关系。生成的单元信息以矩阵形式存储,每一行代表一个单元,包含该单元的八个节点编号。
4. 材料方向的定义
材料方向的定义是层合板建模的核心内容。每一层材料都有自己的纤维方向,这个方向通过局部坐标系来描述。
在ABAQUS中,材料方向通过Orientation命令来定义,需要指定局部坐标系的两个基向量。
本方法采用的做法是,根据用户给定的铺层角度,计算该角度下的局部坐标系基向量。第一个基向量沿着纤维方向,其在整体坐标系中的分量可以通过角度的三角函数计算得到。第二个基向量垂直于纤维方向,在平面内与第一个基向量正交。对于每一层,都生成一个独立的Orientation定义,并赋予唯一的名称。这些Orientation定义将在后续的Section定义中被引用。
5. 集 合的定义
单元集 合的定义是为了将属于同一层的所有单元归为一组,以便对这一组单元统一指定材料方向和截面属性。
由于单元是按层依次生成的,每层的单元编号是连续的,因此可以通过单元编号的范围来定义每层的单元集 合。
ABAQUS支持使用generate关键字来定义连续编号的单元集 合,只需要指定起始编号、终止编号和步长即可。
对于N层的层合板,会生成N个单元集 合,每个集 合对应一层材料。这种按层分组的方式为后续的材料属性指定提供了清晰的逻辑结构。
6. 截面属性的定义
截面属性的定义将材料属性、材料方向和单元集 合关联起来。
对于每一层,通过Solid Section命令定义该层的截面属性,命令中需要指定该截面应用的单元集 合、使用的材料方向以及材料名称。由于本方法假设所有层使用相同的材料,只是方向不同,因此所有Section定义都引用同一个材料定义,但引用不同的Orientation定义。这样的设置准确反映了层合板的真实构造:材料相同但铺设方向各异。
材料属性的定义包括材料的弹性常数。对于正交各向异性材料,需要定义九个独立的弹性常数,包括三个方向的杨氏模量、三个泊松比和三个剪切模量。这些参数按照ABAQUS规定的顺序排列输出。材料定义部分相对独立,可以根据实际材料的试验数据进行修改。本方法中材料参数作为输入变量,用户可以根据实际使用的材料体系进行调整。
7. inp的生成定义
inp文件的生成采用了模块化的策略。整个inp文件被分解为多个模块,包括文件头、节点定义、单元定义、材料方向定义、装配定义、材料属性定义和分析步定义等。
每个模块的内容被分别写入临时文本文件,然后按照ABAQUS要求的顺序将这些文件内容合并,生成最终的inp文件。这种模块化方法的优点是结构清晰,便于调试和修改。如果需要修改某一部分内容,只需要修改对应模块的生成代码即可,不影响其他部分。
我们自己开发一个渲染程序,用于查看铺层分布。
将生成的inp文件导入到ABAQUS中,可以看出铺层定义正确: