Skip to content

DIRAC

Description

The DIRAC program computes molecular properties using relativistic quantum chemical methods. It is named after P.A.M. Dirac, the father of relativistic electronic structure theory.


User guide

You can find the software documentation and user guide on the official DIRAC website.


Available Versions

The following versions of DIRAC are currently available:

  • Runtime dependencies:
    • None, required libraries and dependencies are loaded automatically with the DIRAC/22.0-foss-2021a module.

You can load the DIRAC module with the following command:

module load DIRAC/22.0-foss-2021a

  • Runtime dependencies:
    • None, required libraries and dependencies are loaded automatically with the DIRAC/25.0-intel-2022b-int64 module.

You can load the DIRAC module with the following command:

module load DIRAC/25.0-intel-2022b-int64

This version is built with 64-bit integers (int64), which allows allocating larger amounts of memory.


Benchmarking DIRAC

In order to better understand how DIRAC utilizes the available hardware on Devana and how to get good performance we can examine the effect on benchmark performance of the choice of the number of MPI ranks and OMP threads per node.

The following command has been used to run the benchmarks:

    export OMP_NUM_THREADS=$ntomp
    pam-dirc --mpi=$ntmpi --ag=$mem_cpu --scratch=$dirac_dir --inp=$benchmark.inp --mol=$benchmark.mol
where variables ntmpi and ntomp represent the number of MPI ranks and OMP threads, respectively. Variable mem_cpu, representing maximum allocatable memory per MPI rank, was defined as echo "scale=0; ($SLURM_MEM_PER_NODE / (64 / $ntomp))" | bc. Temporary working dirac_dir directory was set to /scratch.

Benchmarks have been made on the following systems:

pbf.mol
INTGRL
DHF energy calculation for Ba atom
dyall.v2z basis set
C   2  0           A
     82.    1
Pb      .0000000000        .0000000000       2.0575
LARGE BASIS dyall.cv2z
     9.     1
F     0.0000000000        0.0000000000       0.00
LARGE BASIS dyall.cv2z
FINISH
pbf-ccsdt-505000-cv2z.inp
**DIRAC
.TITLE
 PbF
.WAVE F
.4INDEX
**GENERAL
**INTEGRALS
.PRINT
1
*READIN
.UNCONTRACTED
**HAMILTONIAN
.X2C
*AMFI
.AMFICH
+6
**WAVE FUNCTIONS
.SCF
.RELCCSD
*SCF
.CLOSED SHELL
90
.OPEN SHELL
1
1/2
.MAXITR
200
.ERGCNV
1.0D-9 1.0D-9
.EVCCNV
5.0D-6 5.0D-6
.PRINT
1
**MOLTRA
.ACTIVE
energy -50.0 100.0 1.0
.PRINT
1
**RELCC
.NELEC
32 31
.ENERGY
.PRINT
1
*CCENER
.NTOL
9
.MAXIT
150
*END OF

SCF calculation of PbF molecule utilizing 2-component X2C Hamiltonian.

Single-node Performance Cross-node Performance
DIRAC_single_node_perf DIRAC_cross_node_perf

SCF calculation of the PbF molecule utilizing the 4-component Dirac-Coulomb Hamiltonian (DCSSSS) in conjunction with the GAUNT correction to the two-electron interaction.

Single-node Performance Cross-node Performance
DIRAC_single_node_perf DIRAC_cross_node_perf

Example run script

You can copy and modify this script to dirac_run.sh and submit a job to a compute node by the command sbatch dirac_run.sh.

#!/bin/bash
#SBATCH -J "dirac_job"   # name of job in SLURM
#SBATCH --account=<project> # project account
#SBATCH --partition=long # selected partition, short, medium or long
#SBATCH --nodes=1        # number of used nodes
#SBATCH --ntasks=        # number of mpi tasks (parallel run)
#SBATCH --cpus-per-task= # number of cpus per mpi task (parallel run)
#SBATCH --time=72:00:00  # time limit for a job
#SBATCH -o stdout.%J.out # standard output
#SBATCH -e stderr.%J.out # error output
#SBATCH --exclusive      # exclusive run on node

module load DIRAC/22.0-foss-2021a

INPUT=dirac.inp # input file
MOL=dirac.xyz   # xyz or mol file

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
mkdir -p /scratch/$SLURM_JOB_ACCOUNT/$SLURM_JOB_ID
pam-dirc --mpi=$SLURM_NTASKS --inp=$INPUT --scratch=/scratch/$SLURM_JOB_ACCOUNT/$SLURM_JOB_ID --mol=$MOL
Created by: Andrej Hurajt, Jozef Federic, Marek Štekláč, Marek Štekláč