3. LS-DYNA关键字文件结构

LS-DYNA 的输入文件通常称为 K 文件(Keyword File),它是一个纯文本文件,求解器按“关键字块”逐段读取。理解 K 文件结构,本质上就是理解 LS-DYNA 如何把几何、网格、属性、材料、边界和求解控制组织成一套可被程序解析的数据体系。K 文件不是简单的命令堆叠,而是有明确层级和引用关系的结构化数据:节点定义空间位置,单元引用节点形成网格,PART 把单元、SECTION 和 MATERIAL 绑定在一起,控制卡片则决定求解器如何运行。

K 文件的基本组成

一个典型的 K 文件由若干关键字块组成,每个块以 *KEYWORD 开头,后跟若干数据行,直到下一个关键字出现为止。常见的关键字块包括:

  • *KEYWORD:控制卡片,如 *CONTROL_TERMINATION、*CONTROL_TIMESTEP、*DATABASE_BINARY_D3PLOT。
  • *NODE:定义节点坐标。
  • *ELEMENT_SHELL、*ELEMENT_SOLID、*ELEMENT_BEAM:定义单元及其节点连接。
  • *PART:定义部件,引用 SECTION 和 MATERIAL。
  • *SECTION_SHELL、*SECTION_SOLID:定义单元截面属性。
  • *MAT_*:定义材料本构,如 *MAT_PLASTIC_KINEMATIC、*MAT_JOHNSON_COOK。
  • *EOS_*:定义状态方程,常与材料卡片配合使用。
  • *BOUNDARY_*、*LOAD_*、*INITIAL_*:边界、载荷和初始条件。

关键字块之间通过 ID 建立引用关系。例如,*ELEMENT_SHELL 中的节点 ID 必须能在 *NODE 中找到;*PART 中的 SECTION ID 和 MAT ID 必须分别对应已定义的 SECTION 和 MATERIAL。这种“定义—引用”机制是 K 文件组织的核心。

关键原则:K 文件中所有被引用的 ID 必须唯一且已定义。节点、单元、PART、SECTION、MAT 各自有独立的 ID 空间,但同一类对象内部不能重复。

节点与单元定义

节点是网格的最小几何单位,用 *NODE 定义。每行格式通常为:节点 ID、x 坐标、y 坐标、z 坐标。例如:

*NODE
       101    0.000000    0.000000    0.000000
       102   10.000000    0.000000    0.000000
       103   10.000000   10.000000    0.000000
       104    0.000000   10.000000    0.000000

单元通过节点 ID 连接形成网格。以壳单元为例,*ELEMENT_SHELL 每行包含单元 ID、PART ID、节点 1 至节点 4。例如:

*ELEMENT_SHELL
         1         1       101       102       103       104

这里单元 1 属于 PART 1,由节点 101、102、103、104 构成一个四边形壳单元。实体单元 *ELEMENT_SOLID 则通常需要 8 个节点。单元定义必须保证节点顺序符合右手法则,否则法向和厚度方向会出错,直接影响接触和应力输出。

PART 与 SECTION

PART 是 LS-DYNA 中非常关键的“装配单元”。它把单元集合、截面属性和材料属性绑定在一起。一个 PART 对应一组单元,并引用一个 SECTION 和一个 MATERIAL。典型 *PART 卡片如下:

*PART
         1         1         1         0         0         0
shell_part

其中第一行各字段依次为:PART ID、SECTION ID、MAT ID、EOS ID、Hourglass ID、初始速度 ID。第二行是 PART 名称。SECTION 定义单元的几何属性,例如壳单元的厚度、积分点数量;实体单元则定义单元算法和积分方式。以 *SECTION_SHELL 为例:

*SECTION_SHELL
         1         2         1.000000         5         0.0
0.000000  0.000000  0.000000  0.000000

这里 SECTION ID 为 1,壳厚度为 1.0 mm,沿厚度方向 5 个积分点。厚度和积分点数量会直接影响弯曲刚度和计算成本,是碰撞分析中需要重点确认的参数。

材料与状态方程

材料卡片定义本构关系,状态方程定义压力—体积—能量关系。对于金属碰撞分析,常用 *MAT_PLASTIC_KINEMATIC 或 *MAT_JOHNSON_COOK。以 Johnson-Cook 模型为例,材料卡片通常包含密度、弹性模量、泊松比、屈服强度、硬化参数和失效应变等。状态方程 *EOS_GRUNEISEN 则描述冲击波下的压力响应,常用于高应变率、大变形问题。

材料与状态方程通过 PART 中的 MAT ID 和 EOS ID 关联。如果材料卡片中已经包含状态方程参数,则 EOS ID 可以留空;如果使用独立状态方程,则必须在 PART 中正确引用。材料参数的单位必须与模型单位制一致,例如 mm、ms、kg、GPa 或 m、s、kg、Pa,混用单位是常见错误来源。

控制卡片的组织方式

控制卡片决定求解器行为,通常放在 K 文件前部或单独文件中。常见控制卡片包括:

  • *CONTROL_TERMINATION:设置终止时间,例如 0.05 s。
  • *CONTROL_TIMESTEP:设置时间步长缩放因子和最小时间步。
  • *CONTROL_ENERGY:控制能量耗散和沙漏能统计。
  • *DATABASE_BINARY_D3PLOT:设置结果输出间隔。
  • *DATABASE_ASCII_*:输出节点、单元、接触等 ASCII 数据。

控制卡片通常按“求解控制—输出控制—接触控制—初始条件”的顺序组织,便于检查和维护。对于大型碰撞模型,建议把控制卡片集中放在文件开头,材料、PART、SECTION 放在中间,节点和单元放在后面,这样既符合 LS-DYNA 的读取习惯,也方便人工排查引用错误。

LS-DYNA K 文件结构关系图 定义 → 引用 → 装配 → 求解控制 控制卡片区 *CONTROL_TERMINATION *CONTROL_TIMESTEP *CONTROL_ENERGY *DATABASE_BINARY_D3PLOT 决定求解时间、步长、能量统计与结果输出频率 节点与单元 *NODE → 节点 ID + 坐标 (x, y, z) *ELEMENT_SHELL → 单元 ID + PART ID + 节点 *ELEMENT_SOLID → 8 节点六面体 节点顺序决定法向与厚度方向 PART 装配 *PART → PART ID + SECTION ID + MAT ID + EOS ID 把单元集合、截面、材料绑定为一个部件 PART 是 K 文件中的“装配中心” 一个 PART 对应一组单元和一套属性 SECTION *SECTION_SHELL 厚度、积分点数量 *SECTION_SOLID 单元算法、积分方式 MATERIAL *MAT_PLASTIC_KINEMATIC *MAT_JOHNSON_COOK 密度、模量、屈服、硬化 失效应变、应变率参数 状态方程 EOS *EOS_GRUNEISEN *EOS_LINEAR_POLYNOMIAL 压力—体积—能量关系 冲击波、高应变率问题 引用 SECTION ID 引用 MAT ID 引用 EOS ID 节点 ID 引用 核心规则:所有被引用的 ID 必须已定义且唯一;单位制必须统一;PART 是连接网格、截面、材料与状态方程的枢纽。

K 文件组织建议与常见错误

在实际建模中,建议按以下顺序组织 K 文件:控制卡片 → 材料与状态方程 → SECTION → PART → 节点 → 单元 → 边界与载荷。这样做的原因是 LS-DYNA 在读取时并不要求严格顺序,但按“先定义后引用”的顺序排列,可以显著降低人工排查难度。常见错误包括:PART 引用了不存在的 SECTION ID、单元引用了未定义的节点 ID、材料单位与模型单位不一致、壳单元厚度方向定义错误、状态方程与材料模型不匹配等。

排障提示:如果求解器报 “undefined node” 或 “undefined part”,优先检查对应 ID 是否在 K 文件中真正定义,以及是否存在重复 ID 覆盖。对于大型模型,建议用文本编辑器的“查找”功能逐个核对引用关系。

掌握 K 文件结构后,读者应能独立阅读一个 LS-DYNA 输入文件,判断其节点、单元、PART、SECTION、材料和状态方程是否完整,控制卡片是否合理。这是后续进行碰撞冲击建模、调试和结果分析的基础。