Skip to content
NAISS Logo Allocations Support Training Software naiss.se

Siesta

Running Siesta on Arrhenius CPU nodes

To use Siesta 5.4.2, load the following modules in this order:

ml buildtool-easybuild
ml gmpflf/2026.03
ml Siesta/5.4.2

This CPU build uses GCC 14.3.0 and MPICH. It includes:

  • MPI and OpenMP parallelism
  • ELPA and the ELSI solver interface, including PEXSI
  • LibXC exchange-correlation functionals through libGridXC
  • PSML pseudopotential support through libPSML
  • Simple-DFTD3 dispersion corrections
  • FLOOK for Lua scripting and simulation control
  • Wannier90 support

The build information and enabled features can also be found at the top of the Siesta output file (*.out). Available features may need to be selected explicitly in the input. See the official Siesta documentation.

Example job scripts

Replace YOUR_CPU_PROJECT with your CPU allocation account in the examples below.

Sub-node MPI job

#!/bin/bash
#SBATCH --job-name=siesta
#SBATCH --account=YOUR_CPU_PROJECT
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=1
#SBATCH --time=00:30:00
#SBATCH --output=siesta-%j.log

ml buildtool-easybuild
ml gmpflf/2026.03
ml Siesta/5.4.2

export OMP_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
export MKL_NUM_THREADS=1

FI_PROVIDER=cxi srun --mpi=pmi2 --network=single_node_vni --distribution=block:block \
    --ntasks="$SLURM_NTASKS" \
    siesta < my-system.fdf > my-system.out

Benchmark what a suitable number of cores (--ntasks-per-node) is for your system. The single-node VNI is currently needed for sub-node jobs using MPICH on Arrhenius.

Multi-node MPI job

This example runs 512 MPI ranks across two nodes, with 256 ranks per node. Note that currently multi-node jobs receive full-node allocations even when fewer CPUs are requested. Check AllocTRES in the output of scontrol show job <jobid> to confirm the allocated resources.Benchmark your calculation to choose a suitable number of MPI ranks per node.

#!/bin/bash
#SBATCH --job-name=siesta
#SBATCH --account=YOUR_CPU_PROJECT
#SBATCH --nodes=2
#SBATCH --ntasks=512
#SBATCH --ntasks-per-node=256   # maximum of 256
#SBATCH --cpus-per-task=1
#SBATCH --time=01:00:00
#SBATCH --output=siesta-%j.log

ml buildtool-easybuild
ml gmpflf/2026.03
ml Siesta/5.4.2

export OMP_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
export MKL_NUM_THREADS=1

FI_PROVIDER=cxi srun --mpi=pmi2 --distribution=block:block \
    --ntasks="$SLURM_NTASKS" \
    siesta < my-system.fdf > my-system.out

Match --ntasks to the node count multiplied by --ntasks-per-node when changing this example. Reducing --ntasks-per-node may improve performance for memory-intensive calculations.

Both examples use --distribution=block:block for the task placement. Benchmark CPU affinity and alternative placement settings with representative calculations. This distribution may not have optimal performance for all cases, especially for memory-hungry simulations.