4. 参数化建模方法一
在碰撞性能优化中,真正消耗时间的往往不是一次求解,而是“改一个料厚、跑一轮模型、再改一个料厚”的反复迭代。如果每次都要手工打开关键字文件去搜索、替换数字,不仅效率低,还极易改错、漏改。LS-DYNA 提供了一套原生的参数化机制:用 *PARAMETER 定义变量,用 *INCLUDE 拆分与拼装模型,用 *DEFINE 系列关键字把曲线、函数、坐标系等抽象为可复用的对象。三者配合,就能把“一堆写死数字的模型”变成“变量驱动的可复用模型框架”。
一、*PARAMETER:把数字变成变量
*PARAMETER 是 LS-DYNA 关键字文件中的变量声明段,通常放在主文件最前面。它支持两类写法:*PARAMETER(局部参数,仅在本文件内有效)和 *PARAMETER_LOCAL(作用域更受限)。变量名以字母开头,可含字母、数字和下划线,引用时用 &名字 的形式,例如 &T_RAIL。LS-DYNA 在读取关键字时会先做一次“文本替换”,把 &T_RAIL 替换成其数值,再交给求解器解析。
*PARAMETER
T_RAIL = 1.80 $ 前纵梁料厚
T_SHOT = 1.20 $ 加强板料厚
V_IMPACT = 15.0 $ 台车初速度 m/s
M_TOTAL = 1200.0 $ 整车等效质量 kg
L_RAIL = 620.0 $ 纵梁长度 mm
这里有一个关键约定:LS-DYNA 关键字文件默认使用 mm、ms、kg、kN 单位制,速度若按 m/s 输入需换算为 mm/ms(1 m/s = 1 mm/ms),因此 15 m/s 直接写 15.0 即可。参数定义后,在 *SECTION_SHELL 中就可以写成:
*SECTION_SHELL
$ SECID ELFORM SHRF NIP PROPT QR/IRID ICOMP
100 2 0.833 5 1.0 0.0 0
$ T1 T2 T3 T4
&T_RAIL &T_RAIL &T_RAIL &T_RAIL
这样,改料厚只需改一处 T_RAIL,所有引用它的单元、截面、质量点会同步更新。参数还可以做算术运算,例如 T_RAIL2 = T_RAIL * 1.2,实现“加强板比基板厚 20%”这类工程规则;也可以引用其他参数,形成参数依赖链。需要注意的是,参数替换发生在解析阶段,因此不能用于控制卡片数量或关键字结构本身,只能替换数值和字符串字段。
二、*INCLUDE:把模型拆成可组装的模块
当模型包含白车身、电池包、座椅、假人、台车、壁障等多个子系统时,把所有内容塞进一个文件会让维护变得极其困难。*INCLUDE 允许主文件只保留“装配清单”,各子系统放在独立文件中:
*INCLUDE
$ 子系统文件
./parts/rail_front.k
./parts/rail_rear.k
./parts/battery_pack.k
./parts/seat.k
./parts/dummy.k
./parts/barrier.k
$ 公共定义
./common/materials.k
./common/curves.k
./common/control.k
路径可以是相对路径或绝对路径,建议统一用相对路径并保持目录结构稳定,便于在不同机器和版本控制系统中复用。一个常见工程做法是:主文件只放 *PARAMETER、*INCLUDE、*CONTROL 和 *DATABASE,所有几何、材料、连接都放在被包含文件中。这样,同一套子系统文件可以通过不同的主文件组合出“整车正碰”“台车侧碰”“电池包挤压”等多个工况,而不必复制模型。
需要特别注意两点:其一,*INCLUDE 是文本级拼接,被包含文件中的 ID 必须全局唯一,否则会出现节点、单元或部件 ID 冲突;其二,参数的作用域是“先定义后使用”,主文件中的 *PARAMETER 必须出现在引用它的 *INCLUDE 之前,否则替换会失败。
三、*DEFINE:把曲线、函数、坐标系抽象为对象
碰撞模型中大量使用曲线和函数,例如材料应变率曲线、气囊质量流曲线、加速度时间曲线。*DEFINE_CURVE 把“横纵坐标点对”定义为一个带 ID 的对象,供 *MAT、*LOAD、*BOUNDARY 等卡片通过 LCID 引用:
*DEFINE_CURVE
$ LCID SIDR SFA SFO OFFA OFFO DATTYP
200 0 1.0 1.0 0.0 0.0 0
$ A(横坐标) O(纵坐标)
0.0 0.0
5.0 12.0
10.0 28.0
15.0 45.0
配合参数化,可以把曲线缩放因子也写成参数,例如 SFA = &SCALE_TIME、SFO = &SCALE_FORCE,从而在不修改曲线点的情况下整体缩放加载历程。*DEFINE_FUNCTION 则允许用表达式定义函数,例如把某点的位移写成速度的积分形式,供 *DEFINE_TRANSFORMATION 或传感器使用。*DEFINE_COORDINATE_SYSTEM 定义局部坐标系,用于给壁障、假人、电池包指定方向,避免因整车坐标系与子系统坐标系不一致导致加载方向错误。
四、参数化模型框架的组织方式
把上述机制组合起来,一个可复用的参数化碰撞模型框架通常呈现“主控—参数—子系统—公共库”的四层结构。下面的示意图展示了这种组织关系:主文件负责参数与装配,参数层集中管理设计变量,子系统层按部件拆分,公共库层提供材料、曲线、控制等共享定义。
五、实操要点与常见问题
第一,参数命名要有工程语义。不要用 P1、P2,而用 T_RAIL、V_IMPACT、M_TOTAL,这样在优化软件或脚本中批量替换时一目了然。第二,参数集中管理。把所有设计变量放在一个 params.k 中,主文件只 *INCLUDE 它,避免参数散落在各子系统文件里。第三,用注释标注单位和含义,LS-DYNA 关键字以 $ 开头的行为注释行,建议在每个参数后写清物理意义和单位。
常见报错有三类:一是 unknown parameter,说明变量未定义或定义位置在引用之后;二是 duplicate ID,说明两个被包含文件使用了相同的节点、单元或部件 ID,需要统一编号规则;三是路径找不到文件,通常是相对路径基准目录与提交目录不一致,建议在提交脚本中先 cd 到主文件所在目录再调用求解器。
params.k、main.k、parts/、common/ 四个位置,并把 params.k 纳入版本控制。每次优化迭代只改 params.k,其余文件保持不动,这样既能保证可追溯,也方便用脚本批量生成不同参数组合的求解任务。掌握 *PARAMETER、*INCLUDE、*DEFINE 这三类关键字,本质上是在建立一种“模型即数据”的工程习惯:几何、材料、连接、加载都不再是写死的数字,而是由参数驱动的可配置对象。这是后续做 DOE、代理模型和自动优化循环的前提,也是把碰撞仿真从“手工试错”推进到“系统寻优”的第一步。