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,结果会整体偏差。
*INCLUDE 机制把参数化部分拆成独立文件,避免污染主模型。五、K 文件结构与参数化切入点的关系图
下图把 K 文件的块结构、卡片列宽格式以及参数化修改的切入点放在同一张关系图中,帮助建立“结构—字段—可改点”的对应关系。
把这张图当作检查表使用:每次参数化前,先确认目标字段属于哪一块、位于哪几列、是否被其他卡片引用,再决定替换方式。这样可以把 K 文件修改从“凭感觉改文本”变成“按结构改数据”,为后续的 DOE、代理模型和优化循环提供稳定输入。