Abaqus
------
`Abaqus `_ is an
application that is used for solving structural simulation of multi-physics problems.
There are two main modes of running Abaqus on Octopus:
- batch mode (using the command line or scripts)
- graphical user interface mode (using desktop sessions)
To use any of these two the ``abaqus`` module should be loaded:
.. code-block:: bash
module load abaqus
Graphical user interface mode
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To launch the ``Abaqus`` GUI after connecting to a desktop environment, to launch
``CAE`` (Complete Abaqus Environment) the following command can be executed in a
terminal:
.. code-block:: bash
module load abaqus
abaqus cae
Template Abaqus job (batch mode)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The following job script can be used as a template to run ``abaqus`` batch jobs on
one compute node.
.. code-block:: bash
#!/bin/bash
## specify the job and project name
#SBATCH --job-name=abaqus
#SBATCH --account=ab123
## specify the required resources
#SBATCH --partition=normal
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=16
#SBATCH --mem=64000
#SBATCH --time=1-00:00:00
source ~/.bashrc
module load abaqus/2020
# module load intel/2021 # uncomment to load the intel compiler to build user subroutines
abaqus job=my_abaqus_sim_name input=my_sim.inp cpus=`nproc` mp_mode=threads interactive
Multi-node parallel Abaqus jobs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The following job script :ref:`below ` can be used to run a
parallel Abaqus job using multiple compute nodes in batch mode. The script below can be
downloaded by clicking :download:`here `
If a graphica user interface job is used then the following :download:`script `
should be executed in the same folder where the command ``abaqus cae -mesa`` is executed:
.. code-block:: bash
module load abaqus
chmod +x slurm_abaqus_mpi_env_gen.sh
./slurm_abaqus_mpi_env_gen.sh
abaqus cae -mesa
After the job is executed ``MPI`` must be selected in the the ``ABAQUS`` job in the GUI.
.. image:: abaqus/abaqus_mpi_job.png
:width: 3000px
**script for running a multi-node parallel job in batch mode**
.. _abaqus_multinode_mpi:
.. code-block:: bash
#!/bin/bash
## specify the job and project name
#SBATCH --job-name=abaqus
#SBATCH --account=ab123
## specify the required resources
#SBATCH --partition=large
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=64
#SBATCH --mem=64000
#SBATCH --time=1-00:00:00
source ~/.bashrc
module load abaqus/2020
##############################################################
# DO NOT MODIFY BEYOND THIS UNLESS YOU KNOW WHAT YOU ARE DOING
##############################################################
# dump the hosts to a text file
SLURM_HOSTS_FILE=slurm-hosts-${SLURM_JOBID}.out
#
# generate the mp_host_list environment variable
#
srun hostname > ${SLURM_HOSTS_FILE}
mp_host_list="["
for HOST in `sort ${SLURM_HOSTS_FILE} | uniq`; do
echo ${HOST}
mp_host_list="${mp_host_list}""['${HOST}',`grep ${HOST} ${SLURM_HOSTS_FILE} | wc -l`]"
done
mp_host_list=`echo ${mp_host_list} | sed 's/\]\[/\]\,\[/g'`"]"
echo $mp_host_list
#
# 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}
if 'SLURM_PROCID' in os.environ:
del os.environ['SLURM_PROCID']
EOF
abaqus job=my_input_file.inp cpus=$SLURM_NPROCS` -verbose 3 standard_parallel=all mp_mode=mpi interactive
User defined subroutines and functions in Abaqus
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To define user subroutines and functions in Abaqus the following steps should be followed:
#. Create the subroutine file (e.g. ``my_custom_constants.f``)
#. Compile it to build a library
#. Run the simulation using the compiled library
The ``.inp`` and the ``.f`` file should be in the same folder. It is possible
to organize them into different folders but the paths should be specified with
care (check the abaqus help and documentation for more information).
The following should exist in the directory of the simulation:
* job.sh
* my_simulation.inp
* my_custom_constants.f
* libstandardU.so # this is generated in step-2 below
Step-1: Create the subroutine file
""""""""""""""""""""""""""""""""""
The following example shows how to create a subroutine file (disclamer, this
subroutine does not do anything useful, please make sure to replace the content
with your own):
.. code-block:: fortran
SUBROUTINE CREEP(DECRA,DESWA,STATEV,SERD,EC,ESW,P,QTILD,
1 TEMP,DTEMP,PREDEF,DPRED,TIME,DTIME,CMNAME,LEXIMP,LEND,
2 COORDS,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
INCLUDE 'aba_param.inc'
CHARACTER*80 CMNAME
DIMENSION DECRA(*)
DECRA(1) = 0.001 * DTIME
RETURN
END
Step-2: Compile the subroutine file
"""""""""""""""""""""""""""""""""""
The Intel compiler environment should be loaded since abaqus relies on Intel's
fortran compiler to build the libraries. The following command can be used to
.. code-block:: bash
module load intel/2021
$ abaqus make library=my_custom_constants.f
[john@node ~]$ abaqus make library=foo.f
Abaqus JOB foo.f
Begin Compiling Abaqus/Standard User Subroutines
Mon 13 May 2024 05:28:07 AM EEST
Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.2.0 Build 20210228_000000
Copyright (C) 1985-2021 Intel Corporation. All rights reserved.
Intel(R) Fortran 2021.2.0-2262
End Compiling Abaqus/Standard User Subroutines
Begin Linking Abaqus/Standard User Subroutines
Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.2.0 Build 20210228_000000
Copyright (C) 1985-2021 Intel Corporation. All rights reserved.
GNU ld version 2.27-34.base.el7
End Linking Abaqus/Standard User Subroutines
Mon 13 May 2024 05:28:13 AM EEST
Abaqus JOB foo.f COMPLETED
```
The following file will be generated ``libstandardU.so`` that is automatically
picked up by abaqus when running the simulation.