批量执行 (Batch Execution) — CAE术语解说

分类:术语集 | 2026-03-28
CAE visualization for batch execution - technical simulation diagram

批量执行概述

定义与基本概念

批量执行(Batch Execution)是指通过命令行或脚本启动CAE求解器,而无需通过GUI(图形用户界面)进行交互的执行方式。用户无需坐在屏幕前,投入作业后可以放置不管,等待结果生成。这是最大的优点。

典型的批量执行命令示例:

# Abaqus情况
abaqus job=model_01 cpus=8 interactive

# OpenFOAM情况
mpirun -np 16 simpleFoam -parallel > log.simpleFoam 2>&1

# ANSYS Mechanical情况
ansys212 -b -np 4 -i input.dat -o output.txt
🧑‍🎓

批量执行与用GUI普通运行分析有什么区别?我们公司的人都是从Abaqus/CAE界面上点"提交"按钮……


🎓

从GUI点提交时,实际上后台也在运行批量执行。但GUI需要人坐在电脑前逐个操作,而直接使用批量执行则可以在夜间或周末一次性运行50个计算,早上来时结果就齐了。这样的效率差异在实务CAE中差异巨大。


🧑‍🎓

听起来不错,但命令行看起来很难……没有Linux知识可以吗?


🎓

最少需要掌握一些基础Linux命令——cd切换目录、ls列出文件、cat查看文件内容——就够了。只要这些就可以开始了。因为HPC集群基本都是Linux系统,迟早要学,不如现在就学吧。


HPC队列系统

企业和研究机构通常在多用户共享的HPC(High Performance Computing)集群上进行CAE分析。为了公平分配计算资源,需要使用作业调度程序(队列系统)来管理。

代表性的作业调度程序:

🧑‍🎓

在HPC集群上运行分析时,经常听说SLURM和PBS,那是什么?与在自己电脑上运行有什么区别?


🎓

这是作业调度程序。比如100个工程师共用一个集群,如果大家随意运行作业会耗尽资源。调度程序自动分配"这个人的作业用节点3-6,那个人的作业用节点10-12"。


🧑‍🎓

具体怎样投入作业呢?


🎓

以SLURM为例,首先编写一个"作业脚本"的Shell脚本,其中记述所需的CPU数、内存、最大执行时间、执行命令。然后用sbatch job.sh投入。作业进入队列,资源空闲时自动执行。等待时间长时用squeue -u 用户名查看自己作业的状态。


作业脚本的编写

SLURM作业脚本的基本结构:

#!/bin/bash
#SBATCH --job-name=crash_sim_01
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=32
#SBATCH --time=24:00:00
#SBATCH --partition=general
#SBATCH --output=job_%j.out
#SBATCH --error=job_%j.err

module load abaqus/2024
cd $SLURM_SUBMIT_DIR

abaqus job=crash_model cpus=$SLURM_NTASKS scratch=$TMPDIR mp_mode=mpi

PBS作业脚本的情况:

#!/bin/bash
#PBS -N thermal_analysis
#PBS -l nodes=1:ppn=16
#PBS -l walltime=12:00:00
#PBS -q batch
#PBS -o thermal.log
#PBS -e thermal.err

module load ansys/2024r1
cd $PBS_O_WORKDIR

ansys242 -b -np 16 -i thermal_input.dat -o thermal_output.txt
🧑‍🎓

#SBATCH --time=24:00:00的墙时间超过会怎样?


🎓

作业被强制停止。这是初学者最容易遇到的坑。设置较短的墙时间通常队列等待时间会减少,但太短就会被切断。最好先留足余量,然后根据实际经验调整合适的值。


🧑‍🎓

被切断了就要从头再来吗?那太浪费了……


🎓

有些求解器有重启功能。比如Abaqus可以用oldjob=前次作业名从中断点继续。LS-DYNA也用R=rstfile支持重启。大规模非线性解析或显式衝撞解析,要设置频繁输出重启文件。


参数化研究的结合应用

批量执行的真正威力体现在改变设计参数,自动执行多个案例的参数化研究(参数扫描)中。板厚5阶段、材料3种、荷载4水平——全组合是5×3×4=60个案例,用GUI手工逐个运行不现实,但用批量执行就能自动化。

🧑‍🎓

用批量执行运行参数化研究时,怎样生成60个不同的输入文件?不能手工写吧。


🎓

标准做法是"模板+替换脚本"。先写一个输入文件模板,把参数部分用@@THICKNESS@@这样的占位符表示。然后用Python或Shell脚本循环替换这些占位符为实际值,自动生成文件。大概是这样:


# Python生成参数化输入文件的例子
import itertools, os

thicknesses = [1.0, 1.5, 2.0, 2.5, 3.0]
materials   = ['steel', 'aluminum', 'titanium']
loads       = [1000, 2000, 3000, 4000]

template = open('template.inp').read()

for t, mat, load in itertools.product(thicknesses, materials, loads):
    case_name = f"case_t{t}_mat{mat}_F{load}"
    inp = template.replace('@@THICKNESS@@', str(t))
    inp = inp.replace('@@MATERIAL@@', mat)
    inp = inp.replace('@@LOAD@@', str(load))

    os.makedirs(case_name, exist_ok=True)
    with open(f"{case_name}/model.inp", 'w') as f:
        f.write(inp)
🧑‍🎓

输入文件生成后,作业投入也能自动化吗?60个一个个sbatch也麻烦。


🎓

SLURM有作业数组功能。写#SBATCH --array=0-59就能一次投入60个作业,每个作业自动获得$SLURM_ARRAY_TASK_ID标识符0到59。脚本内部用这个编号从参数列表取对应参数,一个脚本就能管理全部案例。这是HPC运维的基本技巧。


#!/bin/bash
#SBATCH --job-name=param_sweep
#SBATCH --array=0-59
#SBATCH --ntasks=8
#SBATCH --time=04:00:00
#SBATCH --output=logs/job_%A_%a.out

# 从参数列表获取案例
CASE_DIR=$(sed -n "$((SLURM_ARRAY_TASK_ID + 1))p" case_list.txt)
cd $CASE_DIR

module load abaqus/2024
abaqus job=model cpus=$SLURM_NTASKS scratch=$TMPDIR
🧑‍🎓

结果的后处理也能自动化吗?60个案例的图表手工做太累了。


🎓

后处理自动化才是批量执行的真髓。用Python读取odb文件提取结果,把最大应力写进CSV,再用pandas和matplotlib一次性绘图可视化。这样就能快速看出"改变参数后结果如何变化"的趋势。结合DOE(实验设计法),就能找到最优设计的入口。


故障排查

🧑‍🎓

批量作业中途失败时怎样调试?GUI也没有错误对话框。


🎓

首先查看作业的标准输出和标准错误日志文件。SLURM情况下是job_12345.outjob_12345.err。还要看求解器特有的日志。Abaqus看.msg.sta文件,OpenFOAM看log.simpleFoam。常见原因有三个:


🧑‍🎓

许可证不足时,作业会报错吗?还是在队列中等待?


🎓

这取决于求解器和调度程序的设置。Abaqus许可证不足时会立即错误退出,导致一次性投入大量作业时多数失败。解决方法是编写脚本在投入前检查许可证空闲,或使用SLURM的许可证资源管理功能。而OpenFOAM这样的开源求解器就不用担心许可证了。


准确理解CAE术语是团队内沟通的基础。— Project NovaSolver也面向实务者的学习支援。

在批量执行实务中遇到的课题,请告诉我们

Project NovaSolver致力于解决CAE工程师日常面临的课题——设置的复杂性、计算成本、结果解释——等问题。你的实务经验将成为更优工具开发的原动力。

联系我们(准备中)
本文评价
感谢您的回答!
有参考
价值
希望
更详细
报告
错误
有参考价值
0
希望更详细
0
报告错误
0
撰写者:NovaSolver Contributors
匿名工程师 & AI — 网站地图
查看个人资料