ABAQUS
软件介绍:Abaqus 是一款广泛使用的有限元分析(FEA)软件,由 Dassault Systèmes 提供,主要用于结构分析、热分析、流体分析和多物理场耦合仿真。它广泛应用于工程、航空航天、汽车、土木工程等领域,帮助工程师模拟和分析复杂的物理现象。Abaqus 由多个模块组成,具有强大的求解能力,能够处理静态、动态、线性和非线性问题。
提交脚本
8581
#!/bin/bash
#SBATCH -p INTEL_8581 ##8581C分区正式队列
#SBATCH -J abaqus ##指定作业名称
#SBATCH --nodes=1 ##指定节点数
#SBATCH --ntasks-per-node=16 ##指定核心数
#SBATCH -o out.log ##指定输出文件名
#SBATCH -e error.log ##指定报错信息输出文件名
export TMPDIR=$HOME/tmp
export PATH=/home/software/abaqus/abaqus2024/Commands/:$PATH
source /home/software/intel/oneapi/2022.1/setvars.sh
ulimit -l unlimited
nameflag=`scontrol show hostname $SLURM_JOB_NODELIST`
beginflag="mp_host_list=["
endflag="]"
for line in $nameflag
do
tempflag="['$line',96],"
beginflag=$beginflag$tempflag
/usr/bin/ssh -o StrictHostKeyChecking=no -tt $line &
done
eflag=`echo $beginflag | sed 's/.\{0\}.$//'`
endflag=$eflag$endflag
echo $endflag > abaqus_v6.env
#修改xxx为自己算例文件名即可
#单精度
abq2024 analysis job=Job-1 input=xxx.inp cpus=$SLURM_NPROCS mp_mode=mpi interactive
#双精度
#abq2024 analysis job=Job-1 input=xxx.inp cpus=$SLURM_NPROCS mp_mode=mpi double=both interactive
9654
#!/bin/bash
#SBATCH -p AMD_9654 ##9654分区测试队列
#SBATCH -J abaqus ##指定作业名称
#SBATCH --nodes=1 ##指定节点数
#SBATCH --ntasks-per-node=16 ##指定核心数
#SBATCH -o out.log ##指定输出文件名
#SBATCH -e error.log ##指定报错信息输出文件名
mkdir -p $HOME/tmp
export TMPDIR=$HOME/tmp
export PATH=/home/software/abaqus/abaqus2024/Commdans/:$PATH
module use /home/software/modulefiles/
module load openmpi/4.1.6-aocc
ulimit -s unlimited
ulimit -l unlimited
nameflag=`scontrol show hostname $SLURM_JOB_NODELIST`
beginflag="mp_host_list=["
endflag="]"
for line in $nameflag
do
tempflag="['$line',96],"
beginflag=$beginflag$tempflag
/usr/bin/ssh -o StrictHostKeyChecking=no -tt $line &
done
eflag=`echo $beginflag | sed 's/.\{0\}.$//'`
endflag=$eflag$endflag
echo $endflag > abaqus_v6.env
#修改xxx为自己算例文件名即可
#单精度
#abq2024 analysis job=Job-1 input=xxx.inp cpus=$SLURM_NPROCS mp_mode=mpi interactive
#双精度
abq2024 analysis job=Job-1 input=xxx.inp cpus=$SLURM_NPROCS mp_mode=mpi double=both interactive
8576
#!/bin/bash
#SBATCH -J abaqus_job # 作业名称
#SBATCH --nodes=1 # 节点数
#SBATCH --ntasks-per-node=64 # 每节点核心数
#SBATCH --time=24:00:00 # 最大运行时间
#SBATCH -o out.log # 正常输出
#SBATCH -e error.log # 错误输出
# 设置临时目录
[ -d "$HOME/tmp" ] || mkdir -p "$HOME/tmp"
export TMPDIR=$HOME/tmp
# 加载模块
module swap gnu14 intel/2024.0.0
module swap openmpi5 impi/2021.11
# Abaqus 命令路径
export PATH=/opt/ohpc/pub/software/abaqus/2024/Commands/:$PATH
# 允许锁定内存无限制
ulimit -l unlimited
# 创建作业专用 scratch 目录
SCRATCH_DIR=~/tmp/${SLURM_JOBID}
mkdir -p $SCRATCH_DIR
# 输入文件名(不带扩展名)
INPUT="Job-Triangular-Batch01-20250810_123558"
# Abaqus 参数
CPUS=$SLURM_NTASKS # 使用的总核心数
ARGS="cpus=$CPUS mp_mode=mpi scratch=$SCRATCH_DIR interactive"
# 单精度运行(默认)
#abq2024 analysis job=$INPUT input=${INPUT}.inp $ARGS
# 如果需要双精度,可取消下面注释
ARGS_DOUBLE="cpus=$CPUS mp_mode=mpi scratch=$SCRATCH_DIR double=both interactive"
abq2024 analysis job=${INPUT}_double input=${INPUT}.inp $ARGS_DOUBLE
# 清理 scratch
rm -rf $SCRATCH_DIR
计算方式
前置准备:
在 abaqus 的计算界面选择写入数据文件
找到刚刚写入的文件并上传到超算平台上自己新建的计算文件夹,将提供的脚本复制到跟计算文件一个目录的文件夹。
修改脚本以及核心数并进行提交计算的方式:
计算单精度则将单精度执行命令一行的 #
去掉,将双精度一行用 #
去掉,如果是计算双精度,则相反。
最佳实践
为每个算例创建一个算例目录,以便清晰的管理算例数据
上传自己数据后,将脚本里的最后一行的xxx.inp修改为自己的inp文件,xxx为自己的文件名,然后进入到终端,正常进行sbatch abaqus.slurm即可
常见问题与解答
1、tmp目录空间不足
在计算中有时会遇到: Error: could not write file 'xxx stdsolver factor,local 8': check the disk space on your system
这个是提示作业当前的计算节点tmp目录空间不足,此时可以使用命令把tmp文件写进自己的目录里,随后跑完删除
先依次执行
mkdir -p /home/$USER/tmp
再在脚本里加入
export TMPDIR=$HOME/tmp
完整脚本示例
#!/bin/bash
#SBATCH -p INTEL_8581 ## 使用8581C分区测试队列
#SBATCH -J abaqus ## 指定作业名称为abaqus
#SBATCH --nodes=1 ## 指定使用1个计算节点
#SBATCH --ntasks-per-node=16 ## 指定每个节点使用16个核心
#SBATCH -o out.log ## 指定标准输出文件名
#SBATCH -e error.log ## 指定错误输出文件名
export TMPDIR=$USER/tmp
export PATH=/home/software/abaqus/2022/Commands/:$PATH ## 添加 Abaqus 命令到环境变量
source /home/software/intel/oneapi/2022.1/setvars.sh ## 加载 Intel 编译器环境
ulimit -l unlimited ## 设置内存锁定限制为无限制
nameflag=`scontrol show hostname $SLURM_JOB_NODELIST` ## 获取分配的计算节点主机名
beginflag="mp_host_list=[" ## 初始化主机列表字符串
endflag="]" ## 设置主机列表结束符
for line in $nameflag ## 遍历所有分配的节点
do
tempflag="['$line',16]," ## 为每个节点创建配置项,16 为处理器数量,和节点核心数保持一致
beginflag=$beginflag$tempflag ## 将节点信息添加到主机列表
/usr/bin/ssh -o StrictHostKeyChecking=no -tt $line & ## 建立到计算节点的 SSH 连接
done
eflag=`echo $beginflag | sed 's/.\{0\}.$//'` ## 处理主机列表字符串,移除末尾字符
endflag=$eflag$endflag ## 组合完整的主机列表配置
echo $endflag > abaqus_v6.env ## 将主机列表写入 Abaqus 环境配置文件
# 修改 xxx 为自己算例文件名即可,不含 inp 后缀
case_name=xxx
# 单精度
# abq2022 analysis job=${case_name} input=${case_name}.inp cpus=$SLURM_NPROCS mp_mode=mpi interactive ## 单精度计算命令(已注释)
# 双精度
abq2022 analysis job=${case_name} input=${case_name}.inp cpus=$SLURM_NPROCS mp_mode=mpi double=both interactive ## 双精度计算命令
2、锁文件残留
遇到报错提示
Abaqus Error:; Detected lock file Job-1.Ick. please confirm that no other aplications are attempting to write to the output database associated with this job be Abaqus/Analysis exited with error(s).
关键词是Job-1.Ick,这个文件就是锁文件,出现这个的原因是上一个计算取消或者完成后残留的文件,如果在当前目录继续进行下一个计算时,新产生的文件无法替换旧文件,就会报错
解决思路
每一个inp文件都放置在不同的文件夹下,即方便管理,也方便后续查询计算结果。
3、abaqus输出日志
job-1.msg
文件是 Abaqus 运行时的 消息文件(message file)。
这个 .msg
文件主要记录 Abaqus 作业执行过程中的运行信息和提示消息。
包含求解过程中的各种状态信息、警告(warnings)、错误(errors)简要提示、以及计算进度等。
它是检查 Abaqus 计算是否正常进行的重要日志文件之一。
其他相关文件:
job-1.dat
— 数据文件job-1.odb
— 输出数据库文件(结果文件)job-1.sta
— 状态文件(详细记录步骤状态)job-1.log
— 日志文件(更详细的运行日志)
4、abaqus计算遇到publickey问题
Warning: Permanently added 'node01' (ED25519) to the list of known hosts. Permission denied, please try again. Permission denied, please try again. Liu_bo126914064@node01: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
这是一类错误,是计算无法ssh到其他节点。
解决思路