工程师平台
Abaqus 实战2026-09-09

Ansys 不会给你一个能直接喂给 Abaqus 的文件

项目从 Ansys 切到 Abaqus,最不想重填的就是材料。 Ansys 不会给你一个能直接喂给 Abaqus 的文件 —— 它的工程数据库导出是 MatML 格式的 XML,Abaqus 不认 XML,本插件只吃 JSON,所以迁移这条路真实的形状是:XML → 解析 → 字段映射 → 单位换算 → JSON。 这篇讲清楚每一步做什么、哪些字段能直接对、哪三处必须人工判断、哪些东西根本搬不过去。
先解析,再映射,换算放最后
MatML 里数据和「字典」是分开的,直接读数值会读错属性。 单位换算在 JSON 落盘前做,混着做最容易漏比热的 10⁶。
哨兵值 7.888e-31 不是数据
它是 Ansys 的「未指定」标记,真值在 Default Data。 原样搬过去就是近零的密度和模量,而且不报错。
疲劳、电磁、岩土那几组块没有落点
插件和 Abaqus 都有对应不了的模型。 迁移脚本要显式跳过并列清单,不能安静丢掉。

01迁移路的真实形状:五段,没有「一键」

Ansys 侧能拿到的是一套 XML:随安装包分发的样例库有 15 个 XML、按 <Material> 口径共 805 条材料(MatML 详解页第 01 节逐个数过);Workbench 的 Engineering Data 里 Export 出来的也是同一套 MatML 结构。Abaqus 侧的入口是本插件的本地 JSON。中间没有官方转换器, 所以完整的路是五段:

Ansys Engineering Data / 样例库 XML
        │  ① 拿到 XML(安装目录搜文件名,或 Engineering Data 导出)
        ▼
MatML 解析(先读 Metadata 字典,再读每条材料)
        │  ② pr/pa 三层寻址,拿到「属性名 + 数值 + 单位」
        ▼
字段映射(Ansys 属性名 → 插件 JSON 键)
        │  ③ 对得上的直接对,对不上的进跳过清单
        ▼
单位换算(SI → tonne-mm-s)
        │  ④ 密度 ×1e-12、应力 ×1e-6、比热 ×1e6
        ▼
标准 JSON 材料库 → 插件「本地文件」页签导入

第 ②③ 步的完整规则(五层嵌套、pr/pa 三层寻址、单位 power 幂次、 多点曲线逗号配对)在Ansys 材料库 XML(MatML)格式详解里逐条写过,还附了一个只用标准库的解析骨架;这篇不重复, 只讲从解析结果到 Abaqus 材料之间这一段。

先认清 id 会漂移
MatML 里的属性靠 pr/pa 编号回查 Metadata 才知道名字,而编号只在同一个文件里有效。 实测样例库三份文件:密度在通用非线性库里是 pr0、 在线弹性通用库里是 pr2、在热库里是 pr1; 弹性在两份通用库里分别是 pr6 和 pr11, 而通用线弹性库里的 pr6 反而是热膨胀系数。 所以脚本只能按解析出的属性名字符串映射, 绝不能写「pr6 就是弹性」这种硬编码。

02六组直接对得上的字段

把 Ansys 库里的属性名字符串和插件 JSON 的键对起来, 结构分析常用的六组是干净的。单位一列全部按 Ansys 库存 SI、 Abaqus 用 tonne-mm-s:

Ansys XML 里的属性名插件 JSON单位动作
Densitydensitykg/m³ → t/mm³,乘 1e-12
Elasticity(Young’s Modulus + Poisson’s Ratio)elastic.youngsModulus / poissonsRatioPa → MPa,乘 1e-6;泊松比不动
Specific Heatthermal.specificHeatJ/(kg·K) → mJ/(t·K),乘 1e6
Thermal Conductivitythermal.conductivity数值原样,W/(m·K) 与 mJ/(s·mm·K) 同值
Coefficient of Thermal Expansionthermal.expansion.alpha1/°C → 1/°C,数值不动;Definition 必须是 Secant
Zero-Thermal-Strain Reference Temperaturethermal.expansion.zeroTemperature直接取数,摄氏就保持摄氏
高亮两行:密度差 10¹²、比热差 10⁶,是迁移里毁掉结果最多的两个数。

导热系数数值不变这件事反直觉(能量和长度各换一千,正好抵消), 完整推导在导热系数与比热里;十项单位的完整对照在帮助文档单位表。

用库里的一条材料走完换算

拿样例库 General Materials Non-linear.xml 里的 Aluminum Alloy NL 一条当算例(以下是 Ansys 自带样例库里该条目的数, 随版本可能不同,这里只演示换算): 密度 2770 kg/m³、比热 875 J/(kg·K)、 弹性模量 7.1e10 Pa、泊松比 0.33。 换算完落进 JSON:

{
  "name": "Aluminum_Alloy_NL",
  "description": "from Ansys sample library, Aluminum Alloy NL, SI converted to tonne-mm-s",
  "density": { "value": 2.77e-9 },
  "elastic": { "youngsModulus": 71000.0, "poissonsRatio": 0.33 },
  "thermal": {
    "specificHeat": 8.75e8,
    "expansion": { "zeroTemperature": 22.0 }
  }
}

2770 × 1e-12 = 2.77e-9,7.1e10 × 1e-6 = 71000,875 × 1e6 = 8.75e8 —— 三个数都能手工复核。 名字里的空格要换成下划线,原因在材料名规则那篇;这条样例没给导热和膨胀,缺的键就不写,不要用 0 补齐(0 在 Abaqus 里是合法值,会被当真数据算下去)。

03三处不能「直接搬」,必须人工判断

一、双线性等向硬化:Abaqus 没有「切线模量」这一格

还是上面那条铝合金,它在样例库里的 Isotropic Hardening 带 Definition = Bilinear,给的是两个数: 屈服 2.8e8 Pa、切线模量 5.0e8 Pa。 Abaqus 的 *PLASTIC 是「真应力–真塑性应变」的数表, 没有切线模量这个参数。搬法只有一个:按直线关系采两个点 ——

σ(εp) = σy + Et · εp

第 1 行(必须正好是 0):  280.0,  0.0
选 εp = 0.01 采一个点:    280 + 50000×0.01 = 780.0,  0.01

50000 是切线模量 5.0e8 Pa 换成 MPa。采点的塑性应变区间要盖住分析里实际会到的量, 超出表外 Abaqus 不外推。如果 Ansys 侧给的本来就是多线性表(一串逗号分隔的 应力/应变),那只需要拆逗号、同序配对 —— 但前提是那一列的名字确实是 Plastic Strain。

换软件不换曲线语义
试验报告给的是工程应力–工程应变,不管迁到哪个求解器, 进 *PLASTIC 之前都要先换成真应力–真塑性应变、第一行归零。 怎么判断 Ansys 表里那列能不能直接用、怎么换算,见真应力真应变换算和塑性表三类报错。

二、热膨胀:Secant 才能直接对,Instantaneous 要先积分

样例库通用线弹性库每条材料的膨胀系数块都带 Definition = Secant(割线/平均膨胀系数), 这正好对应 Abaqus *EXPANSION 的默认口径, 连同块的 Zero-Thermal-Strain Reference Temperature 一起搬进alpha 和 zeroTemperature 即可。

如果源数据给的是 Instantaneous(瞬态系数),直接填会错, 要先按平均口径积分:ᾱ(T*) = ∫ₜ₀ᵀ α_inst(T)dT / (T*−T⁰), 逐温度点换成平均系数再进 JSON。插件没有这个开关,不替你做这个积分。 参考温度为什么只有在系数随温度变时才真正参与计算,见热膨胀与零应变温度。

三、温度表:默认温度不是曲线上的点

MatML 里每个随温度变的块都有一个独立变量列,往往挂着Default Data = 22,而该列的 <Data> 写的是 哨兵 7.88860905221012e-31(2⁻¹⁰⁰)。 解析时必须按哨兵规则把它替换成 Default Data —— 原样搬,材料就带着一个近零的「室温点」进了模型。 真正的温度点在同一列的逗号列表里,与应力值的逗号列表同序配对(曲线一节)。

进了 JSON 之后温度永远在每行最后一列, 而且塑性表要按温度分组、每组第一行塑性应变重新从 0 起, 规则见温度相关材料表。

04搬不过去的东西:让脚本报清单,别让它安静丢

805 条里有不少属性在 Abaqus/CAE 通用结构分析里没有对应块, 插件 JSON 也不设这些键。映射脚本遇到它们的正确做法是跳过并逐条打印「哪条材料、哪个属性、为什么跳过」 —— 这与插件导入时对不支持块的处理是同一个原则:材料照建,但少了什么必须说。

Ansys 侧属性(样例库里的名字)集中出现的文件为什么不搬
S-N Curve、Strain-Life ParametersGeneral_Materials.xml疲劳寿命模型,插件没有对应属性块
Resistivity、Relative Permeability、B-H 曲线General_Materials / Magnetic B-H / Thermal电磁属性,超出本插件结构+热的范围
Drucker-Prager Strength、Compression、Crack Softening 及 Nonlinear UnloadingGeneral Materials Non-linear.xml岩土与混凝土本构的 Ansys 方言定义,不能和 Abaqus CDP 按同名直接对
Tensile Pressure Failure、状态方程类参数Explicit_Materials.xml显式专用失效/EOS,Abaqus 要另选关键字手工建
流体、混合物、压电耦合、磁致伸缩整库Fluid_*、Mixtures、Piezoelectric 等场域都不在结构力学材料这一层

两类要单独说,它们不是直接跳过:

  • 正交异性/复合材料弹性。Composite_Materials.xml 里 28 条铺层材料的九个工程常数, 在插件 JSON 里走非等向 elastic 的显式表 (Abaqus 侧 ENGINEERING CONSTANTS / LAMINA 等类型)。 列数必须和声明的类型严格对上 —— 六个常数被当成五个加一个温度 是不报错的,各类型的列数规则见温度相关材料表里的速查表。
  • 超弹系数。Hyperelastic_Materials.xml 的 Mooney-Rivlin、Ogden 已拟合系数, 插件 1.3 起有 hyperelastic 块可接(固定阶数的模型按固定列序, Ogden/多项式阶数可变,要显式给表);给的是试验曲线的另走 testData 路子。 混凝土方面插件有按 GB 50010 的 CDP 生成器,但那是按标号重新生成, 不是从 Ansys 的 Compression/Crack Softening 曲线翻译,两套数据不要混。

05推荐流程:七步,每步留下可核对的东西

  1. 拿 XML。在 Ansys 安装盘按文件名搜 (如 General_Materials.xml,目录跨版本挪过), 或在 Engineering Data 里 Export 公司私有库 —— 导出的是同一套 MatML 结构。
  2. 先解析 Metadata 建字典,再遍历材料。用 MatML 详解页第 09 节的解析骨架(标准库即可),映射按属性名字符串,不按 pr 编号。
  3. 哨兵替换、曲线配对。单值且小于 1e-30 判为 2⁻¹⁰⁰,取 Default Data; 逗号列表按 Variable Type 同序配对;顺手数一下哨兵命中次数, 一次不命中说明判断写错了。
  4. 字段映射 + 跳过清单。六组直接映射的字段照第 02 节;双线性/瞬态膨胀按第 03 节人工处理; 第 04 节那些逐条进跳过清单,最后人工过一遍。
  5. 统一换算到 tonne-mm-s。换算集中在这一步、这个脚本里做,JSON 里只放换算后的值;units 字段写清单位制,与示例库同一习惯。
  6. 写 JSON(UTF-8、材料名 ASCII 下划线)。文件形状和全部键的含义在帮助文档 JSON 一节;中文名、连字符、逗号这些坑见材料名规则。
  7. 导入后看消息区,再跑材料健康检查。导入报告里有 FAILED、skipped、ignored 三类异常行; 健康检查在菜单 材料库 → 材料健康检查..., 不要求激活,扫模量范围、硬化曲线、互斥组合和单位制一致性。
空模型里,单位制冲突检查没有参照物
插件导入时会把待导入数据和模型里已有材料比对单位制, 对不上就整批拒绝(见材料复用三条路第 6 节)。但新模型是空的、没有任何已有材料可比时,这道保护不启动 —— 密度 2770 原样进去也不拦。所以第 ⑦ 步的量级抽查不能省: 钢密度该是 7.85e-9 量级、模量该是几万,抽一条和 Workbench 界面对一眼。

迁完只代表材料建出来了,不代表模型用上了: Section 和指派这两环没做,材料管理器里再齐全也不参与计算。 五个断点的排查顺序在材料建好了却不生效。

06为什么不是 805 条一次全搬

技术上七步脚本可以批处理,但「能跑」和「搬过来敢用」是两件事。 MatML 详解页第 10 节已经把这一层说透:样例库条目普遍没有牌号、没有试验标准、 没有热处理状态,Granta 那份还是商业数据集样本, 它自己的 Description 都写着不提供数据担保。

所以这批库在 Ansys 语境里做演示、做量级估算是合适的, 整份搬进自己的模型当设计依据不合适。工程上真正值得迁的是: 公司私有材料库(带牌号和试验报告、导出也是这套 MatML), 以及项目上一代模型里已经评审过的那几条。把流程在样例库上调通, 用在自己有数的材料上 —— 这是这条路的正确用法。

常见问题

Ansys 的材料参数能直接导入 Abaqus 吗?

没有直接格式。Ansys Engineering Data 导出的是 MatML 结构的 XML,Abaqus 不读 XML,材料导入插件读的是 JSON。中间要走五步:解析 XML(先读 Metadata 字典再按 pr/pa 编号回查属性名)、按属性名映射到 JSON 键、处理哨兵值和温度曲线、把 SI 单位换算成 tonne-mm-s(密度乘 1e-12、应力乘 1e-6、比热乘 1e6)、写成 UTF-8 的 JSON 再用插件本地文件页签导入。MatML 详解页有只用标准库的解析骨架可以直接用。

Ansys XML 里的 7.88860905221012e-31 是什么数?

那是 2 的 -100 次方,Ansys 用来标记「这个温度点没有单独给值」的哨兵,不是真实数据。真正要用的默认值写在同一参数的 Default Data 限定符里(通常是 22)。解析时遇到单值且数值小于 1e-30,就要去读 Default Data;如果把哨兵原样搬进 JSON,材料会带着近零的密度、模量或温度点进模型,Abaqus 不会报任何错。一份库里一次哨兵都没命中,反而说明解析判断写错了。

Ansys 双线性等向硬化的切线模量在 Abaqus 里填哪?

Abaqus 的 *PLASTIC 只有真应力-真塑性应变数表,没有切线模量这个参数。要按直线 σ(εp)=σy+Et·εp 采至少两个点:第一行必须是(屈服应力,0),第二行选一个塑性应变点(比如 0.01)按公式算出对应应力。采点区间要覆盖分析里实际达到的塑性应变,表外 Abaqus 不外推。多线性表则直接拆逗号、应力应变同序配对,但要先确认那一列确实是真塑性应变;来自试验报告的工程曲线要先做真应力真塑性应变换算。

Ansys 的 S-N 曲线和电磁属性能不能一起迁?

不能直接迁。S-N Curve、Strain-Life 是疲劳寿命模型,Resistivity、Relative Permeability、B-H 曲线是电磁属性,插件的 JSON 没有这些键,Abaqus/CAE 通用结构材料里也没有同名块可对;Drucker-Prager、Compression、Crack Softening 等岩土和混凝土方言参数也不能按名字直接翻译成 CDP。正确做法是让迁移脚本把这些逐条列入跳过清单人工确认。正交异性弹性常数和已拟合的超弹系数可以映射,但列数和类型必须严格对齐。

材料从 Ansys 迁到 Abaqus 后怎么确认没有搬错?

四道确认:一是迁移脚本打印跳过清单,不认识的属性必须显式列出;二是导入后看 CAE 消息区的报告,FAILED、skipped、ignored 三类行逐条过;三是抽一条材料和 Workbench 的 Engineering Data 面板对量级(界面显示 MPa,解析出来的应是 Pa,换算后 JSON 里是几万的 MPa);四是跑菜单「材料库 → 材料健康检查」,它不要求激活,会扫模量范围、硬化曲线、互斥组合和单位制一致性。注意空模型里没有参照物,单位制冲突检查不会启动,不能拿它代替抽查。

这一步可以不自己做

迁移脚本最容易漏掉的不是字段,是哨兵值和单位。插件导入前会核列数、单调性、 起点规则,还会把待导入数据与模型已有材料的单位制一致性比对一遍 —— 让机器守最后一道关,比人肉盯 XML 可靠。

在线材料库需要 Abaqus 2023 或更高版本;2022 及更早只能用本地 JSON 材料库。