Siesta¶
Running Siesta on Arrhenius CPU nodes¶
To use Siesta 5.4.2, load the following modules in this order:
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.
Source repository