2. LS-DYNA关键字文件结构解析

LS-DYNA 的输入文件通常称为 K 文件(Keyword File),它本质上是一份纯文本的“关键字卡片序列”。求解器按顺序读取卡片,逐条解释模型数据。理解 K 文件的组成方式,是后续做参数化设计与自动优化的前提:只有知道哪些字段可以被脚本安全替换、哪些字段一旦改动会破坏卡片对齐,参数化流程才可控。

一、K 文件的整体组成

一个典型的 K 文件由若干“关键字块”组成,每个块以 *KEYWORD 开头,后跟若干数据卡片行。常见的块包括:

  • *KEYWORD:控制求解类型、终止时间、时间步、输出间隔等全局设置。
  • *SECTION 系列:定义壳、实体、梁等单元的截面属性,如厚度、积分点。
  • *PART:把材料、截面、单元集合绑定为一个部件,是参数化最常改的对象。
  • *MAT 系列:材料本构,如 *MAT_ELASTIC、*MAT_PLASTIC_KINEMATIC,含密度、弹性模量、屈服应力等。
  • *NODE / *ELEMENT:节点坐标与单元连接关系,通常由前处理器生成,参数化时较少直接改。
  • *BOUNDARY、*LOAD、*CONTACT、*CONTROL:边界、载荷、接触与控制卡片。

这些块之间没有强制顺序,但求解器对某些引用关系有要求:*PART 引用的材料号和截面号必须已经或同时被定义。因此,参数化脚本在替换数值时,必须保证“引用关系”不被破坏。

二、关键字卡片的格式规则

LS-DYNA 卡片采用固定列宽格式,这是最容易踩坑的地方。每行通常为 80 列,字段按 10 列或 8 列划分。以 *MAT_ELASTIC 为例:

*MAT_ELASTIC
$#     mid        ro         e        pr        da        db
         1     7.85e-9   210000.0       0.3       0.0       0.0

第一行是关键字,第二行以 $# 开头的是注释行,列出字段名;第三行才是数据。字段 mid 占第 1–10 列,ro 占第 11–20 列,依此类推。如果脚本用字符串替换时改变了字段宽度,例如把 7.85e-9 写成 7.85e-09 并多出字符,就会挤占下一字段,导致读入错误。因此参数化修改应遵循“等宽替换”原则,或使用支持固定列宽写入的库。

建议在脚本中先按列切片读取字段,再按原列宽格式化写回,而不是直接对整行做正则替换。这样能最大程度避免列错位。

三、参数化修改的切入点

从优化角度看,K 文件中真正值得参数化的对象通常集中在少数几类卡片上:

  • 几何类:*SECTION 中的厚度、*PART 中的质量缩放、节点坐标的偏移量。
  • 材料类:*MAT 中的弹性模量、密度、屈服应力、硬化模量。
  • 载荷与边界类:*LOAD 中的幅值、*BOUNDARY 中的速度或位移。
  • 控制类:*CONTROL_TERMINATION 的终止时间、*CONTROL_TIMESTEP 的时间步缩放。

一个实用的做法是:在 K 文件中用注释标记可参数化字段,例如在字段行前加 $ PARAM: thickness,脚本按标记定位并替换。这样即使模型更新,参数入口仍然稳定。

四、常见陷阱与规避

第一,列宽错位:如前所述,数值格式变化会破坏固定列。第二,关键字大小写与拼写:LS-DYNA 关键字不区分大小写,但拼写错误会导致整块被忽略,且不一定报错。第三,注释行误改:以 $ 开头的行是注释,脚本若不加判断地替换数字,可能改到注释里的示例值。第四,引用号冲突:批量替换材料号时,若多个 PART 共用同一材料号,替换后可能产生非预期绑定。第五,单位制不一致:K 文件本身不声明单位,参数化时若混用 mm-t-s 与 m-kg-s,结果会整体偏差。

在批量替换前,务必先备份原始 K 文件,并用 LS-DYNA 的 *INCLUDE 机制把参数化部分拆成独立文件,避免污染主模型。

五、K 文件结构与参数化切入点的关系图

下图把 K 文件的块结构、卡片列宽格式以及参数化修改的切入点放在同一张关系图中,帮助建立“结构—字段—可改点”的对应关系。

K 文件块结构 · 卡片列宽 · 参数化切入点 K 文件块结构 *KEYWORD(全局控制) *SECTION(截面属性) *PART(材料+截面绑定) *MAT(材料本构) *NODE / *ELEMENT *BOUNDARY / *LOAD *CONTACT / *CONTROL 块间通过 ID 引用,顺序可调 卡片固定列宽格式 *MAT_ELASTIC $# mid ro e pr da db 1 7.85e-9 210000 0.3 0 0 每字段 10 列,共 80 列 mid: 列 1–10 ro: 列 11–20 e: 列 21–30 pr: 列 31–40 列宽错位 → 读入错误 等宽替换 → 安全 参数化切入点 几何参数 厚度 / 坐标偏移 材料参数 E / ρ / σy / 硬化模量 载荷与边界 幅值 / 速度 / 位移 控制参数 终止时间 / 时间步 标记法定位 $ PARAM: thickness 脚本按标记替换 陷阱:注释误改 / ID 冲突 单位制不一致 字段 可改

把这张图当作检查表使用:每次参数化前,先确认目标字段属于哪一块、位于哪几列、是否被其他卡片引用,再决定替换方式。这样可以把 K 文件修改从“凭感觉改文本”变成“按结构改数据”,为后续的 DOE、代理模型和优化循环提供稳定输入。