☰
应力三轴度在Abaqus韧性断裂仿真中的提取与材料参数标定全攻略
2026/10/13 21:54:29 网站建设 项目流程

做韧性断裂仿真的人,早晚会跟“应力三轴度”正面撞上。在Abaqus里定义材料损伤时,好多关键参数都挂在它名下:Ductile Damage的断裂应变表、J-C模型里的D1到D3、甚至单元删除后的结果解释,全都绕不开这个数。不少新手第一次碰到它时,脑子里只有一句话:这玩意儿到底是啥?怎么取出来?填到材料里又该怎么填?

我打算把这期FAQ写成一份能直接“抄作业”的实操笔记。不只讲公式,还会把Abaqus里的提取方法、材料卡片写法、试样反推流程,以及我在项目里遇到的各种坑一次性说清楚。适合刚接触Abaqus损伤仿真的同学,也合适正在做韧性断裂参数标定、但被三轴度折腾到怀疑人生的老手。

1. 应力三轴度:断裂仿真里的那个“隐藏主角”

1.1 从一张断裂应变曲线说起

凡是做金属韧性断裂的,都会接触到这样一张材料输入表:横向是应力三轴度η,纵向是对应这个应力状态下的断裂等效塑性应变εf。三轴度小的时候,材料能扛住很大的塑性变形才断裂;三轴度大的时候,比如三向受拉的缺口根部,很快就断了。

这张表其实就是韧性损伤模型的核心输入。问题是,以前我们做强度校核,只关心Mises应力或者主应力,对“应力三轴度”基本没概念。直到要在Abaqus里做断裂分析,才发现很多损伤本构(Ductile Damage、J-C Damage、GTN这类细观模型)都需要以应力三轴度为自变量来定义失效条件。

其实应力三轴度本身并不复杂,它衡量的是一个应力状态下,体积应力(静水应力)相对于等效应力的占比。公式就一行:

η = σm / σvM

其中σm是平均应力(也叫静水应力),σvM是Mises等效应力。分子描述的是应力状态中的“拉伸/压缩张量”部分,分母描述的是“偏斜变形”部分。三轴度的绝对值越大,说明这个点越接近于“被四面八方的力挤压或拉伸”;三轴度接近零,说明应力状态偏剪切。

理解它是怎么从无所谓变成绕不开的核心参数,是上手Abaqus损伤仿真的第一课。

1.2 三轴度的物理直觉与典型数值

三轴度不是“材料属性”,而是“应力状态属性”。同样一块钢,在单轴拉伸条件下它可能在塑性应变换到0.5时才破裂,但在缺口根部那样高三轴度的应力场里,可能在塑性应变只有0.1时就提前断裂。

为了建立数值直觉,我把最常见应力状态的η值列在下面,这个表建议直接存下来:

应力状态σm近似值σvM近似值η
单轴拉伸σ/3σ0.333
单轴压缩-σ/3σ-0.333
纯剪切0τ·√30
平面应变拉伸约σ_biaxial约1.15倍剪切屈服约0.577
等双轴拉伸2σ/3σ0.667
三向等拉(静水拉伸)σ0趋向无穷大

这表里的数值多看一眼就有感觉了:三轴度从负到正,材料的“脆性倾向”越来越大。压缩时三轴度是负的,材料倾向于被压实,孔洞难以增长,因此很难发生韧性断裂;纯剪切时分子为零,孔洞不受体积应力影响,断裂机制以剪切带为主;拉伸时分子为正,孔洞在静水应力作用下形核、长大、聚合,最终形成典型的韧窝断口。

这就是为什么很多损伤模型都以三轴度为横轴来组织断裂应变数据——因为孔洞长大的驱动力,很大程度上就取决于这个参数。

1.3 为什么韧性断裂模型处处都要它

在Abaqus的材料模块里点开Damage for Ductile Metals,你会发现几乎所有内置的损伤起始准则都跟应力三轴度挂钩。Ductile Damage是直接用表格给出“εf随η变化”;J-C损伤则用一个指数关系式把εf表达成η、应变率和温度的函数。

道理其实很深:韧性断裂不是某个应力分量超过阈值就发生的,它是孔洞萌生、长大、聚合整个过程的结果。孔洞长大速率对静水应力十分敏感,而三轴度恰好是静水应力与等效应力的比值,相当于把“应力状态对孔洞演化的影响”浓缩成一个无量纲量。

我举个例子你就懂。两块同样的试样,一块做单轴拉伸,一块做带缺口的拉伸。单轴拉伸试样断前伸长量很大,因为中心应力三轴度从初始的0.333慢慢涨到颈缩后的0.5左右;而缺口试样断后伸长量明显更小,因为缺口根部在加载一开始就处于三轴度0.6甚至1.0以上的应力状态,孔洞加速长大,材料根本没有积累足够塑性应变的空间。

如果不考虑三轴度,只用“等效塑性应变达到某值就断裂”这个单一判据,那你永远无法同时预测这两种试样的断裂行为。这是我在多个项目里反复验证过的结论,也是应力三轴度如此重要的根本原因。

2. Abaqus里提取应力三轴度的几种做法

2.1 最省事的方式:PRESSURE与MISES的组合场输出

Abaqus默认并不会直接输出Stress Triaxiality这一项,但你需要的数据点它都有。一个是Mises等效应力,另一个是PRESSURE(压力)。

这里先记住一个符号约定,后面会反复用到:Abaqus中PRESSURE的物理含义是“静水压力的相反数”,也就是:

PRESSURE = -(σ11 + σ22 + σ33) / 3 = -σm

注意这个负号。Abaqus默认拉应力为正,在单轴拉伸状态下σm是正数,PRESSURE却是负数。因此正确计算三轴度的公式是:

η = -PRESSURE / MISES

实操上最简单的流程是:在Step模块的Field Output Request中同时勾选Mises和Pressure,提交计算后进入Visualization,用Contour Plot先把Mises显示出来,再切换成PRESSURE,或者直接使用“Create Field Output”功能做一个自定义组合场。

如果你偏向在CAE里手动算,也可以这样:进入视图菜单创建场输出,类型选Arbitrary,然后输入表达式:

TRIAX = (-PRESSURE) / MISES

这样新得到的TRIAX就可以像普通变量一样画云图、提取历史曲线。这个方法不需要写子程序,几分钟就能完成,是我日常最常用的做法。

有个地方需要提个醒:这个组合场输出是对每一个积分点计算的,单元积分点越多,云图在节点外推后的分布越平滑,但也越容易“抹掉”局部峰值。平时我建议先把原始PRESSURE和MISES两个场都保留一份,再生成TRIAX组合,这样对比排查时不用重算模型。

2.2 用UVARM自动生成三轴度云图

如果你需要在很多模型中反复提取三轴度,或者要在计算过程中实时使用这个值(比如作为子程序中的状态变量),那么写一个UVARM子程序是一劳永逸的办法。Abaqus允许用户自定义最多8个额外的场变量,UVARM正好用来做这件事。

子程序的思路很简单:在每个积分点拿到应力张量S,算出张量中三个对角分量之和得到平均应力,再算出Mises等效应力,两者相除后赋给UVDIR。写成伪代码大概是:

  • 从S(1)、S(2)、S(3)提取正应力分量
  • 计算平均应力 SM = (S1 + S2 + S3) / 3
  • 计算Mises应力(也可以直接拿Abaqus传入的等效应力EEQ)
  • 自定义变量 UVAR(1) = SM / MISES

用UVARM的好处是可以把三轴度作为标准场变量输出,Color Contour直接选择这个UVARM变量就能看到分布。而且这个值还可以进一步用于后续的状态变量处理,比如做周向平均、路径提取,比后处理里临时组合要稳定。

当然也有代价。子程序的调试比界面操作麻烦,而且模型里有很多单元类型混用时要小心:壳单元、梁单元的应力张量维度与实体单元不同,子程序里必须在循环里根据单元类型分支处理。如果只是做一次后处理分析,我建议还是先用2.1的PRESSURE/MISES组合,UVARM留给批量计算或者需要实时调用三轴度的场景。

2.3 场输出与历史输出,到底该怎么选

这里有个常见困惑:三轴度应该用场输出还是历史输出?

我的建议是分场景。场输出适合看空间分布,比如云图上哪个区域三轴度最高、最高值多少;历史输出适合看时间演化,比如某个关键单元(通常是裂纹起始位置的单元)三轴度随加载过程怎么变化。

如果你在做试样参数反推,历史输出才是主力。因为反推三轴度—断裂应变曲线时,你需要的是“断裂时刻那个单元的三轴度和等效塑性应变”,不是整个试样某个时刻的云图。实际做法是:在历史输出请求中指定一个单元集合ELEMENT_SET,输出Mises、PRESSURE、PEEQ(等效塑性应变),计算结束后把时间轴上的几条曲线叠加对比,找到试验断裂点对应的时刻,读取三轴度与断裂应变。

有一个特别容易踩的坑:如果你在Explicit分析中启用了单元删除,损伤单元一旦达到失效应变后会在后续增量步中被移除,云图上就看不到这个单元了。这种情况下,历史输出一定要设置为“整步输出”或者扩容输出频率,保证断裂前最后一个有效增量的数据被记录到,否则你抓到的峰值不是真实峰值。

3. 用三轴度定义Abaqus韧性损伤材料

3.1 材料卡片的标准骨架

在Abaqus里给金属材料加上韧性损伤,其实就是在原有弹塑性材料描述后面挂三个段落:弹性、塑性、损伤起始、损伤演化。一个最典型的结构是这样:

  • *Elastic 设置杨氏模量和泊松比
  • *Plastic 输入真实应力-真实塑性应变数据
  • *Damage Initiation, criterion=DUCTILE 三轴度与断裂应变的关系表
  • *Damage Evolution, type=DISPLACEMENT 定义失效位移或断裂能
  • *Section Controls,设定Element Deletion=YES

材料卡片里最影响结果的就是Damage Initiation那张表。很多工程师第一次填的时候,直接把文献里查到的断裂应变按一个固定值填进去,完全忽略了三轴度列。这样做的结果是:只要应力状态稍有变化,材料行为预测就会严重失真,因为模型没有表达出不同应力状态下的失效差异。

正确做法是先想清楚你的应用工况处于哪个三轴度区间。拉伸板、管件、剪切压溃,三轴度区间各不相同,对应的参数表要覆盖到你要分析的整个范围。如果只给一个点,Abaqus会把常数外推,缺少实验依据的精度保障。

3.2 Ductile Damage参数表格怎么填

在Abaqus/CAE里定义Ductile Damage时,你看到的表格第一列是“断裂等效塑性应变”,第二列是“应力三轴度”。每一行代表一个标定状态点,多行连成一条“断裂极限线”。

比如某中强度钢在不同缺口试样下标定得到的数据:

三轴度η断裂等效塑性应变εf
00.61
0.3330.42
0.5770.28
0.80.19
1.20.12

把这些点按顺序输入材料卡片时,表格会自然生成一条由折线逼近的断裂极限线。求解器在每个增量步计算当前积分点的三轴度,临时查找对应的断裂阈值,当累积等效塑性应变跨过这个阈值,就认为损伤起始。

填表时有几个细节我强调一下。第三列通常是应变率,可通过设置定义忽略;第四列还可以加温度。如果是常温准静态,这两列不用填。另外表格中的三轴度允许填负值,但绝大多数标定试验集中在0到1之间,压缩类工况很难用这种模型准确描述。

还有一个容易忽略的限制:Abaqus内部对表格做插值和外推时,如果你的数据点在某个三轴度区间内太稀疏,断裂应变预测会出现跳跃。尽量让相邻两个三轴度点的间距不超过0.2左右,曲线过渡才平顺。

3.3 J-C损伤准则与三轴度的关系

除了Ductile Damage,Abaqus里另一款高频使用的韧性损伤模型是J-C损伤准则。它的数学形式虽然被称为“准则”,本质上是一条经验断裂极限曲线。

J-C模型把断裂等效塑性应变写成:

εf = [D1 + D2·exp(D3·η)] · [1 + D4·ln(εdot/εdot0)] · [1 + D5·T*]

其中D1、D2、D3控制三轴度影响,D4控制应变率敏感性,D5控制温度软化效应。这里只讨论三轴度这部分:当D2和D3取正值时,三轴度越高,εf越低,整体趋势和物理规律一致。

我在实际标定时,经常碰到有人直接把网上的D1到D5参数抄过来用。这里必须提醒:J-C参数与材料热-力历史强相关,而且对单位制敏感。同一套牌号的钢材,不同产线、不同工况标出来的D1/D3差异可能达到30%以上。如果只是做方案对比,用文献参数勉强可以;如果要输出定量预测结果,必须用你自己的试样数据重新标定至少D1、D2、D3三个参数。

另外一点:J-C模型与Ductile Damage都是宏观唯象模型,不能混用在同一份材料定义里。二选一就好,同时启用会让求解器报错或者用后一个覆盖前一个,很多材料定义报错就是从这里来的。

3.4 Element Deletion与网格敏感性控制

给材料定义加上损伤演化后,还要在Section Controls里打开Element Deletion,否则单元只会软化不会消失,分析往往因为严重畸变而中断。

Element Deletion一旦开启,就又带出一个老生常谈的话题:网格敏感性。损伤演化如果采用位移型定义(type=DISPLACEMENT),断裂位移u_f本身会通过单元特征长度与能量耗散挂钩。相同材料、相同u_f下,网格越粗单元特征长度越大,单位体积耗散的能量越小,宏观响应偏软。

控制网格敏感性的常用办法是给Damage Evolution输入能量型参数(type=ENERGY),用断裂能Gf来定义。这样不同尺寸的单元,虽然在局部依然会有差异,但总体能量释放量接近,结果稳定性好很多。具体选哪个,取决于你的分析目标:如果你主要关心断裂位置和三轴度分布,用位移型也能接受;如果你要输出的载荷-位移曲线和试验对得很准,建议优先考虑能量型。

4. 实战场景:用试样反推“三轴度—断裂应变”曲线

4.1 测试试样怎么选:光滑圆棒、缺口圆棒与剪切试样

真实工程里拿到一种新材料,第一步往往不是直接进有限元,而是先做一套“应力状态标定试验”。目标很明确:在尽可能宽的三轴度范围内,测出不同应力状态下的断裂应变量。

最经典的试样组合是光滑圆棒、缺口圆棒和剪切试样。光滑圆棒单轴拉伸时,中心三轴度约0.333,随着颈缩发展会缓慢上升到0.5左右;缺口圆棒的缺口半径越小,根部三轴度越高,半径1毫米的尖缺口试样中心三轴度可以逼近1.5以上;平板剪切试样或双面剪切试样,中心应力状态接近纯剪切,三轴度趋近于0。

这一套试样做下来,你至少能在η = 0、η = 0.33、η = 0.6~1.5这三个区间各拿到一个断裂点数据,已经足够给多数宏观韧性损伤模型做初步标定。我再补一个经验:缺口试样至少做三个不同的缺口半径,这样数据点分布更均匀,拟合J-C模型时D2、D3才不至于飘。

4.2 仿真后处理与参数折算

试样试验做完后,下一步是在Abaqus里建对应的仿真模型。这有个关键认知:不能直接从试验机记录的工程应力应变曲线里读断裂应变换,因为试样断口位置的局部应力三轴度和等效塑性应变,是随着缺口类型、加载过程、几何变形实时变化的。

正确流程是先只定义弹塑性材料(不含损伤,或者把损伤阈值设得非常大),把各个试样模型算一遍。在模型中选取断口对应的最危险单元,提取它的单元积分点三轴度历程和等效塑性应变历程。试验中试样断裂的瞬间,在这个单元上对应的等效塑性应变,就是你想要的某个三轴度下的εf。

这里有个细节要重点讲:三轴度在加载过程中通常不是常数。光滑圆棒从初始0.333到颈缩后可能涨到接近0.6;缺口试样则相对稳定,但也会随塑性变形略有变化。那么反推时到底取哪个值?

我的处理方法是:取断裂前整个塑性变形阶段三轴度的“累积平均值”,用塑性应变增量为权重做加权平均。这样得到的等效三轴度与断裂应变成对,材料模型标定出来后再做标准试样预测,载荷-位移曲线和中部收缩率都能对得比较准。直接取初始值或直接用断裂时刻瞬时值,虽然简单,但在颈缩明显的高延性材料上会带来明显偏差。

4.3 反推流程与误差控制

整条反推流程可以用四步概括:

  1. 用Mises塑性模型标定材料的塑性段参数(真实应力-真实塑性应变)
  2. 分别建立光滑圆棒、缺口圆棒、剪切试样仿真模型,提取危险单元的三轴度与等效塑性应变历史
  3. 将试验断裂时刻对应的仿真等效塑性应变,与加权平均三轴度一一配对
  4. 整理成Ductile Damage输入表,或者拟合出J-C损伤参数

流程本身不复杂,最容易出误差的环节在第3和第4步之间。很多新材料试样的断裂位置不在中心,而在表面或者缺口根部附近,用云图肉眼判断危险单元不够可靠。我习惯在每个试样模型中建立一条“路径”,从试样中心到表面输出三轴度沿路径的分布,再结合试样的实际断口位置,确定到底取哪个积分点的数据。

这样做下来,基本上每个三轴度标定点的不确定度可以控制在10%以内。超过这个范围,先检查是不是网格太粗导致峰值被平滑掉,再检查是不是应变率效应混入了准静态标定数据中。

5. 高频问题排查速查表(FAQ内部版)

5.1 符号坑:PRESSURE前面的负号到底哪来的

这是我见到问得最多的问题,没有之一。Abaqus的PRESSURE输出是负静水应力,所以单轴拉伸时PRESSURE显示负值,不少人直接用PRESSURE/MISES,算出来全是负三轴度,还以为材料处于压缩状态。

记住这个对应关系:PRESSURE = -σm,所以η = -PRESSURE / MISES。检验方法很简单,随便跑一个单轴拉伸模型,提取某个内部单元的PRESSURE和MISES,如果按这个公式算出来接近0.333,说明符号没问题;如果算出的是-0.333,那一定是公式用反了。

5.2 三轴度云图出现离群尖峰

三轴度云图里偶尔会出现一两个颜色特别极端的单元,比如η显示成十几甚至几十,明显不符合物理常识。这种尖峰绝大多数出现在应力奇异点或几何尖角位置,原因是Mises等效应力趋于零而静水应力未必为零,比值被放大。

处理办法不是去修改材料参数,而是先判断这个尖峰是否在关注区域。如果尖峰出现在远离断裂路径的固定边界角点,抱歉,这是网格奇异性导致的伪值,把它当作模型噪声忽略即可;如果尖峰恰好出现在你关心的缺口根部,那就要加密网格,用足够细的网格确认峰值的收敛性。

5.3 失效单元删除以后看不到云图

显式分析开了Element Deletion后,模拟到一定阶段,后处理里失效单元会“消失”,云图出现大片空洞。有人以为模型出错了,其实这只是显示层面的问题。

解决方法是在Visualization模块中,Contour Options里设置指定场变量,把STATUS字段调出来做过滤,或者直接在场变量输出中勾选STATUS,用阈值显示有效单元。这样既能看清失效区域,又不影响读取其他场变量的云图。

5.4 输入了工程应力应变导致结果失真

做塑性参数标定时,Abaqus的*Plastic表格需要的是真实应力、真实塑性应变。很多人直接把材料试验机输出的工程应力-工程应变数据填入,结果屈服后材料表现偏硬,损伤触发点全不对。

计算时把工程应力σ_eng、工程应变ε_eng换算成真实应力σ_true和真实塑性应变ε_pl,公式是:

σ_true = σ_eng·(1 + ε_eng) ε_true = ln(1 + ε_eng) ε_pl = ε_true - σ_true / E

换算完成后,检查第一行塑性应变应该为0,后续数值单调递增。这一步做对了,后面的损伤标定才有意义。

5.5 积分点与节点平均值的差异

后处理云图默认显示的是节点值,而节点值是对周围积分点外推后再平均的结果。在应力梯度大的位置,比如缺口根部、裂纹尖端,节点平均值与积分点真实值会有明显差异。

如果发现提取的三轴度在云图上很“圆润”,跟理论分析对不上,试试切换到积分点数据。在查询结果时选择“积分点值”,或者在创建历史输出时用单元积分点而不是节点。用C3D8R这类单积分点单元时,这个问题不明显;一旦用了C3D8或C3D10,就要格外小心。

5.6 压缩与剪切工况下损伤参数缺失

Ductile Damage表格如果只标定了η≥0的数据,那么在压缩工况下三轴度为负,求解器按最小断应变端外推,可能过早判定失效或完全无法触发失效,结果都不合理。

我建议标定时补一组剪切或压缩-剪切组合试样,把η的负半轴数据也覆盖到。如果项目工况确实不存在负三轴度,那么至少把表格的物理范围限制在合理区间,并理解你的模型适用范围,不要跑到范围外去解读结果。

结尾

这期FAQ写到这里,基本把“应力三轴度”从概念、提取、材料定义到标定实战都过了一遍。我个人在实际操作中的体会是:这个参数最折磨人的不是它有多难懂,而是符号、单位、数据来源这些“脏活”里藏了太多坑。我见过有人因为符号反了,把韧性断裂问题硬生生算成压缩问题;也见过有人把工程应变直接填进Damage表格,结果标定出来的断裂应变全部偏大。信息时代资料满天飞,Abaqus的文档和各类教程都在,但真正让仿真结果可用的,往往是这些细节上的处理。

最后再分享一个小技巧:如果后续要扩展这个模型,可以把这三个点加进你的标定清单里——一侧是试样断口的显微照片(判断韧窝断裂还是剪切断裂),一侧是三轴度历程曲线,还有一侧是断裂点的截面积收缩率。三者对照着看,比单看一条载荷-位移曲线可靠得多。等到你把这套流程跑熟了,再回头处理复杂结构的损伤演化,心里会非常有底。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询