-
ORCA
ORCA
ORCA is an ab initio quantum chemistry program package that contains modern electronic structure methods including density functional theory, many-body perturbation, coupled cluster, multireference methods, and semi-empirical quantum chemistry methods. Its main field of application is larger molecules, transition metal complexes, and their spectroscopic properties. ORCA is developed in the research group of Frank Neese. The free version is available only for academic use at academic institutions.
Available
- Puhti: 6.0.0
- Mahti: 6.0.0
- Roihu-CPU: 6.1.1
Note that due to licensing issues every user has to install their own copy of the program.
License
ORCA users should register, agree to the EULA, download and install a private copy of the program (via the ORCA forum website). The free version is available only for academic use at academic institutions.
Usage
- Download ORCA 6.0.0, Linux, x86-64, shared-version,
orca_6_0_0_linux_x86-64_avx2_shared_openmpi416.tar.xz - Move the downloaded file to your computing project's application area
(
/projappl/<proj>) on Puhti or Mahti - Unpack the package:
tar xf orca_6_0_0_linux_x86-64_avx2_shared_openmpi416.tar.xz
- Download ORCA 6.1.1, Linux, x86-64, shared-version,
orca_6_1_1_linux_x86-64_shared_openmpi418_avx2.tar.xz - Move the downloaded file to your computing project's application area
(
/projappl/<proj>/<user>/orca/) - Unpack the package:
mkdir -p /projappl/<project>/<user>/orca
cd /projappl/<project>/<user>/orca
tar xf orca_6_1_1_linux_x86-64_shared_openmpi418_avx2.tar.xz
On Roihu, set ORCADIR before loading the module. The module then
loads the required MPI libraries (gcc/15.2.0, openmpi/5.0.10)
automatically — no manual module loads are needed.
Jobs must be submitted from the CPU login node (roihu-cpu).
Example batch scripts
Note
Wave function-based correlation methods, both single and multireference, often create a substantial amount of disk I/O. In order to achieve maximal performance for the job and to avoid excess load on the Lustre parallel file system it is advisable to use the local disk where available.
#!/bin/bash
#SBATCH --partition=test
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=40 # MPI tasks per node
#SBATCH --account=yourproject # insert here the project to be billed
#SBATCH --time=00:15:00 # time as hh:mm:ss
module purge
module load gcc/11.3.0 openmpi/4.1.4 intel-oneapi-mkl/2022.1.0
export ORCADIR=<path to your ORCA directory>/orca_6_0_0_shared_openmpi416_avx2/
export LD_LIBRARY_PATH=${ORCADIR}:${LD_LIBRARY_PATH}
# Set $ORCA_TMPDIR to point to the submission directory
export ORCA_TMPDIR=$SLURM_SUBMIT_DIR
# create an mpirun script that executes srun
echo exec 'srun $(echo "${@}" | sed 's/^-np/-n/')' >./mpirun
chmod +x ./mpirun
export PATH=${SLURM_SUBMIT_DIR}:${PATH}
touch Jobid_is_$SLURM_JOB_ID
${ORCADIR}/orca orca6.inp > orca6.out
rm -f ${SLURM_SUBMIT_DIR}/mpirun
#!/bin/bash
#SBATCH --partition=large
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=40
#SBATCH --account=yourproject # insert here the project to be billed
#SBATCH --time=00:15:00 # time as hh:mm:ss
#SBATCH --gres=nvme:100 # requested local disk space in GB
module purge
module load gcc/11.3.0 openmpi/4.1.4 intel-oneapi-mkl/2022.1.0
export ORCADIR=<path to your ORCA directory>/orca_6_0_0_shared_openmpi416_avx2/
export LD_LIBRARY_PATH=${ORCADIR}:${LD_LIBRARY_PATH}
# create a mpirun script that executes srun
echo exec 'srun $(echo "${@}" | sed 's/^-np/-n/')' >./mpirun
chmod +x ./mpirun
export PATH=${SLURM_SUBMIT_DIR}:${PATH}
touch Jobid_is_$SLURM_JOB_ID
#Set $ORCA_TMPDIR to point to the local disk
export ORCA_TMPDIR=$LOCAL_SCRATCH
# Copy only necessary files to $ORCA_TMPDIR
cp $SLURM_SUBMIT_DIR/*.inp $ORCA_TMPDIR/
# Move to $ORCA_TMPDIR
cd $ORCA_TMPDIR
$ORCADIR/orca orca6.inp > ${SLURM_SUBMIT_DIR}/orca6.out
rm -f ${SLURM_SUBMIT_DIR}/mpirun
# Copy all output to submit directory
cp -r $ORCA_TMPDIR $SLURM_SUBMIT_DIR
#!/bin/bash
#SBATCH --partition=test
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=128
#SBATCH --account=yourproject # insert here the project to be billed
#SBATCH --time=0:10:00 # time as hh:mm:ss
module purge
module load gcc/11.2.0 openmpi/4.1.2 openblas/0.3.18-omp
export ORCADIR=<path to your ORCA directory>/orca_6_0_0_shared_openmpi416_avx2/
export LD_LIBRARY_PATH=${ORCADIR}:${LD_LIBRARY_PATH}
# create a mpirun script that executes srun
echo exec 'srun $(echo "${@}" | sed 's/^-np/-n/')' >./mpirun
chmod +x ./mpirun
export PATH=${SLURM_SUBMIT_DIR}:${PATH}
touch Jobid_is_$SLURM_JOB_ID
${ORCADIR}/orca orca6.inp > orca6.out
rm -f ${SLURM_SUBMIT_DIR}/mpirun
On Roihu, the module loads MPI automatically. No mpirun wrapper
script is needed. Set ORCADIR before loading the module. For a
full list of available partitions see the
Roihu batch job partitions
page.
Note
Local NVMe disk is not yet available for standard M-node jobs on Roihu. Scratch I/O goes to Lustre. NVMe support will be enabled in a future update.
#!/bin/bash
#SBATCH --partition=small # see batch-job-partitions for all options
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=12
#SBATCH --mem-per-cpu=2667 # MB; total memory = nprocs * maxcore
#SBATCH --account=yourproject
#SBATCH --time=01:00:00
export ORCADIR=/projappl/<project>/<user>/orca/orca_6_1_1_linux_x86-64_shared_openmpi418_avx2
module purge
module load orca/6.1.1
${ORCADIR}/orca orca6.inp > orca6.out
Memory — ORCA's %maxcore directive sets memory per MPI process in
MB. The corresponding --mem-per-cpu value should match:
For example, with 12 MPI processes and 32 GB total memory:
%maxcore 2667 and --mem-per-cpu=2667.
After the job completes, check actual memory usage with:
Note
Please remember to adjust %pal nprocs in your input file according to
the total number of requested MPI tasks (--nodes × --ntasks-per-node).
Example of scalability
The following results were obtained on Roihu for a naphthalene
DLPNO-CCSD(T)/aug-cc-pVTZ single-point energy calculation using
%maxcore 5000 (6 tasks: %maxcore 8000) on an M-node with Lustre scratch.
Jobs were run sequentially. Wall times on shared nodes may vary due to
I/O and memory bandwidth contention from co-located jobs.
| MPI tasks | Wall time | Peak scratch | MaxRSS total | %maxcore |
|---|---|---|---|---|
| 6 | 56 min | ~32 GB | 47 GiB | 8000 MB |
| 12 | 48 min | ~34 GB | 59 GiB | 5000 MB |
| 24 | 38 min | ~34 GB | 117 GiB | 5000 MB |
| 48 | 31 min | ~34 GB | 231 GiB | 5000 MB |
The input file is available at naphthalene_dlpno.inp.
DLPNO-CCSD(T) shows good parallel scaling for this system. Peak scratch disk (~34 GB) is essentially independent of core count — the total integral work is determined by the system size, not the number of processes. Memory per task decreases with more processes, reflecting DLPNO's domain decomposition.
Estimating memory requirements
ORCA's %maxcore sets memory per MPI process in MB. Set
--mem-per-cpu to match:
After a completed run, check actual memory usage with:
Divide MaxRSS by the number of MPI tasks to get actual peak
per process and adjust %maxcore and --mem-per-cpu accordingly.
Note that ORCA may require more memory per process with fewer tasks
— if you reduce %pal nprocs, increase %maxcore proportionally.
References
The generic references for ORCA are:
- Frank Neese. The ORCA program system. Wiley Interdiscip. Rev. Comput. Mol. Sci., 2(1):73–78, 2012. doi:https://doi.wiley.com/10.1002/wcms.81.
- Frank Neese. Software update: the ORCA program system, version 4.0. Wiley Interdiscip. Rev. Comput. Mol. Sci., 8(1):e1327, 2018. doi:https://doi.wiley.com/10.1002/wcms.1327.
- Frank Neese, Frank Wennmohs, Ute Becker, and Christoph Riplinger. The ORCA quantum chemistry program package. J. Chem. Phys., 152(22):224108, 2020. doi:https://aip.scitation.org/doi/10.1063/5.0004608.
Please do not only cite the above generic references, but also cite in addition the original papers that report the development and ORCA implementation of the methods you have used in your studies!