3. Abaqus材料库与参数化建模
在Abaqus中,材料定义并不是“填几个数”那么简单。每一种材料模型背后都对应一套参数体系,参数之间还存在量纲、约束和物理意义的耦合。理解这些参数体系,是后续标定与校准工作的前提。本节先梳理常用材料模型的参数构成,再介绍如何用Python脚本把这些参数组织成可批量修改、可复用的参数化模型。
一、常用材料模型的参数体系
Abaqus的材料库大致可分为弹性、塑性、超弹性、粘弹性、损伤五大类,它们分别描述材料在不同变形阶段和不同时间尺度下的响应。
弹性模型是最基础的一类。线弹性只需两个参数:杨氏模量 E 和泊松比 ν,对应关键字 *ELASTIC。若材料在某个方向上明显各向异性,则改用工程常数形式,需要 E1、E2、E3、ν12、ν13、ν23、G12、G13、G23 共9个参数,对应 *ELASTIC, TYPE=ENGINEERING CONSTANTS。超弹性材料在小应变段也常先给一个等效线弹性参数,用于接触稳定和初始增量步。
塑性模型描述屈服后的不可逆变形。金属常用各向同性硬化塑性,参数包括弹性段(E、ν)加塑性段:屈服应力与塑性应变的关系表(*PLASTIC),以及硬化曲线数据对。若考虑包辛格效应,则需加入随动硬化(*KINEMATIC HARDENING)或组合硬化。对于率相关材料,还要叠加 *RATE DEPENDENT,给出屈服应力随等效塑性应变率的变化。
超弹性模型用于橡胶、软组织等大变形材料,参数以应变能势函数形式给出。常见的有Neo-Hookean(C10、D1)、Mooney-Rivlin(C10、C01、D1)、Yeoh(C10、C20、C30、D1、D2、D3)以及Ogden(μi、αi、Di)。其中 D 系列参数控制可压缩性,D1=0 表示完全不可压,此时需配合杂交单元使用。
粘弹性模型描述时间或频率相关的松弛行为。时域常用Prony级数,参数为 g_i、k_i、τ_i,分别表示剪切松弛模量比、体积松弛模量比和松弛时间;频域则用 *VISCOELASTIC, FREQUENCY=FORM 给出储能模量和损耗模量。粘弹性通常叠加在弹性或超弹性基体之上。
损伤模型用于描述刚度退化与失效。延性损伤(*DUCTILE DAMAGE)以等效塑性应变为驱动量,给出损伤起始应变与应力三轴度的关系;剪切损伤、Mises损伤、Hashin纤维损伤等各有独立的起始准则和演化参数(如 *DAMAGE EVOLUTION 中的断裂能 Gf 或位移 u_f)。
二、参数体系的层级关系
这些模型并非彼此孤立,而是按“基体响应 + 附加机制”的方式叠加。下图给出常用材料模型在Abaqus中的参数层级与组合关系,帮助理解一个完整材料定义由哪些关键字块构成。
三、Python脚本参数化建模的基本方法
Abaqus的Python接口(Abaqus Scripting Interface)把GUI中的每一次操作都映射为脚本命令。参数化建模的核心思路是:把材料参数、几何尺寸、网格密度等写成变量,再用循环和函数批量生成模型。
下面是一个可直接在Abaqus/CAE中运行的示例,演示如何用参数字典定义两种材料并赋给截面:
from abaqus import *
from abaqusConstants import *
# 1. 参数集中定义(示例值,单位:mm-N-MPa-s)
mat_params = {
'Steel': {
'elastic': {'E': 210000.0, 'nu': 0.30},
'plastic': [(350.0, 0.0), (420.0, 0.02), (480.0, 0.08)]
},
'Rubber': {
'hyperelastic': {'C10': 0.85, 'C01': 0.21, 'D1': 0.0}
}
}
# 2. 循环创建材料
for name, props in mat_params.items():
m = mdb.models['Model-1'].Material(name=name)
if 'elastic' in props:
e = props['elastic']
m.Elastic(table=((e['E'], e['nu']),))
if 'plastic' in props:
m.Plastic(table=tuple(props['plastic']))
if 'hyperelastic' in props:
h = props['hyperelastic']
m.Hyperelastic(materialType=NEO_HOOKE, table=((h['C10'], h['C01'], h['D1']),))
# 3. 赋给截面
mdb.models['Model-1'].HomogeneousSolidSection(
name='Sec-Steel', material='Steel', thickness=None)
这段脚本的关键点有三处。第一,参数用字典集中管理,修改时只动字典,不动建模逻辑;第二,table 参数必须是元组的元组,例如塑性数据 ((350,0.0),(420,0.02)),格式错误会直接报错;第三,超弹性模型通过 materialType 指定类型,NEO_HOOKE 对应Neo-Hookean,若换成 MOONEY_RIVLIN 则需提供 C10、C01、D1 三个值。
对于需要批量标定的场景,更实用的做法是把参数写入外部文件(如CSV或JSON),脚本读取后循环生成多个模型并提交计算。例如用 job.submit() 和 job.waitForCompletion() 实现自动求解,再用 odbAccess 读取结果,形成“参数输入—建模—求解—提取响应”的闭环。这正是后续章节中参数标定与模型校准的脚本基础。
mdb.models['Model-1'] 的清空或新建操作,避免多次运行后模型污染。掌握参数体系与脚本方法后,材料定义就从“手工填表”变成了“可编程对象”。下一阶段的工作,就是让这些参数通过试验数据被反算出来,并验证模型在目标工况下的预测能力。