01一个名字,四种活法
先把「为什么名字会出事」讲清楚。同一个材料名在迁移链路上要过四关:
| 它出现在 | 谁来解释它 | 错了的样子 |
|---|---|---|
| JSON 文件里的 name 键 | 插件读入、查重、勾选用 | 空名或库内重名:整份文件被拒 |
| CAE 模型里的 Material 对象 | Abaqus:model.Material(name=…) | 非法字符由 Abaqus 拒绝,中文名可能显示成问号 |
| .inp 关键字文件 | Abaqus 关键字读取器 | 问号名字随文件传下去,多个材料无法区分 |
| 插件勾选名单 | 逗号分隔的字符串 | 名字含逗号被劈成两个不存在的名字 |
插件做的是它能负责的那部分:文件形状、库内重名、勾选一致。 字符集它故意不查 —— 名字是原样传给 model.Material() 的, Abaqus 接受什么由 Abaqus 决定,插件不替它立规矩。 帮助文档 5.1 节因此把字符集写成建议而不是校验规则。
02插件这一层:只查三件事
读 JSON 时,和名字有关的检查一共三条,全在材料开始建之前:
一、名字去掉首尾空白后不能为空
name 缺失、是空串、或只有空格,报的是同一条, 编号按文件里的次序从 1 起:
第 3 个材料缺少 "name" 字段。
material #3 has no "name"注意是去掉首尾空白之后判空。中间的空格插件不管(见第 4 节)。
二、同一个文件里不能重名
第二条材料与第一条同名,整份文件被拒,消息把名字带出来:
材料名重复:"Steel_Q345"
duplicate material name "Steel_Q345"- 查重在 strip 之后进行,所以
"Steel"和" Steel "也算重名。 - 大小写敏感:
Steel与steel是两个材料,插件和 Abaqus 都不折叠大小写。靠大小写区分名字是合法的,但读报告时极易看混,不建议。 - 这条只管同一个文件内。两个文件各有一个同名材料,分别导入不冲突。
三、勾选导入时,名字要能在文件里找到
勾选若干种导入时,插件内部把名字用逗号拼成一个名单再拆开。 拼好的名单里若有文件中不存在的名字,整次导入停在:
not in the library: <名单里找不到的名字>正常流程这条消息不该出现(勾选框给的都是真名);它主要在脚本调用时遇到。 但它牵出一个字符集上的硬规则 —— 名字里不能有逗号,第 4 节讲。
03和模型里已有的材料同名:跳过,不是报错
文件内重名是非法的;文件与模型之间同名则完全合法, 因为材料本来就挂在 model 下面,不同模型里有同名材料是常态。 默认行为是跳过不覆盖,报告里点名:
skipped, already present (2): Steel_Q345, Al_6061_T6 [tick "Overwrite" to replace]这解释了「我明明重新导了一遍,材料怎么没变」—— 不是没生效,是被跳过了。 勾上覆盖之后也不是先删旧的再建新的:新材料先建在暂存名zzMaterialImporterScratch 下,成功才换名。 这套机制的三种失败结局和报告原话,在材料复用三条路第 5 节逐条列了。这里只补一条与名字有关的: 暂存名故意不根据你的材料名派生 —— Abaqus 对材料名长度有上限,按原名加前缀就要截断, 截断后 Steel_A36_Plate 和 Steel_A36_Pipe 会撞名, 而那恰好是「丢了一个都不容易发现」的情形。
model.materials.changeKey(fromName=旧, toName=新)。 自己写脚本批量改名时也用它,不要「新建一个再删旧的」—— 后者在有 Section 引用旧名时会把材料弄没。04字符集:五个具体结论
- 只用字母、数字、下划线。这是帮助文档 5.1 节给的字符集。它不是插件的校验项, 而是按 Abaqus 侧行为总结出来的安全集。
- 连字符「-」不要用。帮助文档明确写了 Abaqus 不接受
-。 想表达分段,用下划线:Al_6061_T6,不要写Al-6061-T6。 名字在这一层被拒时,插件材料照建流程会给这一条留一行 FAILED, 拒你的是 Abaqus,消息以 CAE 返回的为准。 - 中文、全角标点:不配 locale 就全是问号。没按帮助文档第 07 节配置中文界面时,CAE 里中文材料名全部显示成
???,而且这个问号名会跟着 .inp 文件传下去 —— 交付出去的关键字文件里多个材料都叫问号,谁也对不回谁。 配好 locale 别名之后中文名可以正常显示, 但团队里只要有一个人没配、或 inp 要交给别的单位,问题就回来。 所以建议仍然是:中文写description,名字保持 ASCII。 - 逗号是结构性禁忌。勾选名单是逗号分隔的字符串,名字
"Steel, Q345"传进去会被拆成Steel和Q345两个名字, 两个都找不到,整次导入停在not in the library。 句号、括号、斜杠等标点也一律不用 —— 它们在 inp 关键字行和脚本里都有特殊含义, 下划线足够表达所有层次。 - 空格:首尾会被吃掉,中间的别留。插件只 strip 首尾空白,中间空格原样传给 CAE; 帮助文档的建议字符集里没有空格。 Ansys 样例库里材料名带空格(比如「Aluminum Alloy NL」), 迁过来时把空格换成下划线 —— 这正是Ansys 材料迁到 Abaqus算例里
Aluminum_Alloy_NL的由来。
长度方面,Abaqus 对材料名长度有上限(这是内核里写死了的事实), 但公开文档没有给出具体数字,插件也不去踩这条线。 工程上把名字控制在二三十个字符以内足够:消息区和报告里超长名字会被截断显示, 真正长的信息(牌号全称、状态、出处)放进 description。
05一套不出事的命名法
插件自带示例库里的名字本身就是示范(以下是示例库的演示名):
Steel_Q345
Al_6061_T6
Steel_S355_TempDep
Rubber_NR_Yeoh
CFRP_T300_5208_Lamina规律很简单,按「材料体系_牌号/代号_状态或变体」用下划线分层:
Steel_Q345_Normalized—— 正火态放后缀,不要开一个新材料叫「Q345 正火」。Steel_S355_TempDep—— 温度相关版本用后缀区分,基础名保持一致。Al_6061_T6_JC—— 同一牌号两种本构(简单塑性 / Johnson-Cook)时,本构缩写收尾。- 公司库可以加项目前缀:
ACME_Bolt_40Cr,跨项目复用一眼能认出来源。
- 单位。单位是整个模型一致的约定, 不是某个材料的属性。名字里写
_mm救不了半 SI 半 mm 的库; 单位写在 JSON 顶层的units字段和 description 里。 - 数据来源的完整出处。
GB_T_3077_2015_page_12这种名字三个月后没人看得懂, 还白占长度。description 才是放「40Cr,860℃油淬,E=206GPa,来源 xxx」的地方, 它会进材料的说明栏但不进 inp。
JSON 的字段全集和 description 的写法在帮助文档 JSON 一节;中文界面(locale 别名)配置在第 07 节。
06已经起坏了,怎么改
| 现状 | 正确做法 | 别做的事 |
|---|---|---|
| JSON 还没导 | 在文件里直接改名,UTF-8 存盘后重新导入 | 不要先导入再到 CAE 里改,多一道手就多一道不一致 |
| 材料已在模型里,名字不合法或不想要 | CAE 材料管理器里改名(脚本用 model.materials.changeKey),然后按 Section 着色确认指派还在 | 不要删了重建 —— Section 引用会断,排查顺序见「材料建了不生效」 |
| 中文名已经显示成问号 | 回 CAE 把每个材料改成 ASCII 名(按参数辨认),重新生成 inp | 不要在 inp 里把问号替换成名字 —— 多个问号材料无法确认谁是谁 |
| 同名材料分不清哪份数据对 | 先改名导入做对比(名字加后缀),确认后再勾覆盖导入正式名 | 不要直接覆盖 —— 覆盖替换的是整个材料定义,手工加过的东西会没 |
| 从 Ansys/Excel 迁来的名字带空格、连字符 | 在转换脚本里统一替换成下划线后再落 JSON | 不要手工一个一个改,十个材料里必然漏一个 |
改完名别忘了材料到单元之间还隔着 Section 和指派两步; 改名后按 Section 着色扫一眼,是防止「材料对了、链子断了」最便宜的手段。 五个断点的完整排查顺序在材料建好了却不生效;Excel/CSV 批量改名的脚本写法在Excel 材料表怎么进 Abaqus。