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.

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.


User guide

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

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:

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áč