Using Abaqus
An MPI (multi-node) Abaqus implementation example is shown below:
#!/bin/bash
#SBATCH -N 3
#SBATCH --exclusive
#SBATCH --ntasks-per-node=1
#SBATCH -p debug -q wildfire -t 15
#SBATCH -o slurm.%j.out # STDOUT (%j = JobId)
#SBATCH -e slurm.%j.err # STDERR (%j = JobId)
#SBATCH --export=NONE
##SBATCH --mail-type=ALL # Send a notification when the job starts, stops, or fails
##SBATCH --mail-user=%u@asu.edu # send-to address
module load abaqus/2018 intel-mpi/2017x
abaqus_opts=(
job=test_50x50x20_f7
input=../50x50x20_f7.inp
user=../coupled_uel9.f
mp_mode=mpi
)
##############################################################
# DO NOT MODIFY BEYOND THIS UNLESS YOU KNOW WHAT YOU ARE DOING
##############################################################
unset SLURM_GTIDS
# dump the hosts to a text file
HOSTS_FILE=slurm-hosts-${SLURM_JOBID}.out
NPROC_PER_NODE=$(nproc)
#
# generate the mp_host_list environment variable
#
echo '[' > ${HOSTS_FILE}
srun -c $NPROC_PER_NODE bash -c 'echo [\"$(hostname)\",$(nproc)],' >> ${HOSTS_FILE}
echo ']' >> ${HOSTS_FILE}
mapfile -t mp_host_list < ${HOSTS_FILE}
mp_host_list=$(echo ${mp_host_list[@]})
TOTAL_CPUS=$(
sed -e 's/\],//g' "${HOSTS_FILE}" \
| awk -F ',' '{s+=$NF} END{print s}'
)
#
# write the abaqus environment file
#
ABAQUS_ENV_FILE="abaqus_v6.env"
cat > ${ABAQUS_ENV_FILE} << EOF
import os
os.environ['ABA_BATCH_OVERRIDE'] = '1'
verbose=3
mp_host_list=${mp_host_list}
mp_mpi_implementation=IMPI
mp_mpirun_path={IMPI:'$(which mpirun)'}
if 'SLURM_PROCID' in os.environ:
del os.environ['SLURM_PROCID']
EOF
cat $ABAQUS_ENV_FILE
export TMPDIR="/scratch/$USER/abaqus-tmp"
mkdir $TMPDIR
export I_MPI_HYDRA_BOOTSTRAP=ssh
abaqus "${abaqus_opts[@]}" cpus=$TOTAL_CPUS interactive