跳到主要内容
版本:FCP 24.11

Abaqus

parameters:
- name: version
display: 版本
type: enum
required: true
option:
enum:
- value: 2022
display: 2022
- name: input_file
display: 输入文件
type: path
required: true
description: abaqus输入文件(*.inp)
option:
path:
pattern: '.inp$'
- name: include_file
display: 输入文件
type: path
required: false
description: abaqus任务的关联文件(*.zip)
option:
path:
pattern: '.zip$'
- name: job_name
display: 作业名称
type: string
description: 输入作业的名称
- name: abaqus_double
display: 精度选项
type: enum
required: true
option:
enum:
- value: explicit
display: explicit
- value: both
display: both
- value: constraint
display: constraint
- value: "off"
display: "off"
description: abaqus精度选项
- name: np
display: 每个节点并发数
type: int
required: true
usage: SCHEDULER
schedPrefix: --ntasks-per-node
option:
int:
min: 1
max: 48
description: 输入值范围1~48
- name: node_num
display: 节点数
type: enum
required: true
usage: SCHEDULER
schedPrefix: -N
option:
enum:
- value: 1
display: 1
- value: 2
display: 2
outputs:
- path: taskout.log
type: TEXT
script: |-
#!/bin/bash
set -ex
BASE_DIR=/fastone/softwares

NODELIST=${BASE_DIR}/nodelist

case {{ version }} in

2020)
AppFolder=""
;;
2021)
AppFolder=""
;;
2022)
AppFolder="${BASE_DIR}/Dassault/abaqus/2022/Commands"
;;
2023)
AppFolder=""
;;
*)
echo "ERROR: Unsupported versions"
exit 1
;;
esac

ENV_FILE=abaqus_v6.env
### Configure environment variables, need to unset SLURM's Global Task ID for ABAQUS's PlatformMPI to work
unset SLURM_GTIDS

# 默认假设license跑master?
#USE_LICENSE=${USE_LICENSE:-27800@master1}
license_server_type=FLEXNET
USE_LICENSE=${USE_LICENSE:-27800@10.105.1.10}
LogFile=taskout.log

# 生成环境文件
tee > ${ENV_FILE} <<EOF
abaquslm_license_file = "${USE_LICENSE}"
mp_file_system = (SHARED, LOCAL)
ask_delete = OFF
{{ "mp_host_list = [$(${NODELIST} -delim , -format [\'{{.Host}}\',{{.Cpu}}])]" }}

EOF

# 检查输入文件后缀
function check_input_file(){
if [ -n "$1" ];then
input_file_status=0
for sub_str in $(echo "$1" | tr "," " ")
do
if $(echo ${2}|grep -i ${sub_str} >/dev/null 2>&1);then
input_file_status=0
break
else
input_file_status=1
fi
done

if [ ${input_file_status} -ne 0 ];then
echo "Invalid inputs file"
exit 2
fi
fi
}

if [ -f "{{input_file}}" ];then

check_input_file ".inp$" {{input_file}}

cp -rf {{input_file}} .

Input_File_Name=$(basename {{input_file}})

else
echo "Input file does not exist !"
exit 1
fi

if [ -n "{{include_file}}" ];then

check_input_file ".zip$"

unzip {{include_file}} -d .

fi


export TMPDIR=$PWD
export HOME=$PWD

{{ "TOTAL_NPROC=$(expr $(${NODELIST} -delim ' + ' --format '{{.Cpu}}'))" }}

#background mode

# 如果没有输入Jobname,默认使用输入文件名作为JobName
if [ -n "{{job_name}}" ];then

JobName={{job_name}}

else

JobName=$(basename ${Input_File_Name} .inp)
fi

#default value:parallel=domain standard_parallel=all
${AppFolder}/abaqus job=${JobName} double={{abaqus_double}} input=${Input_File_Name} cpus=${TOTAL_NPROC} mp_mode=mpi interactive >> ${LogFile}