Energy Calculation¶
Each energy calculator has its own config section. Available calculators: maceoff, uma, aimnet, aims, vasp, dftb.
maceoff¶
MACE-OFF machine-learned interatomic potential. Requires GPU.
[maceoff]
model_size = large
save_flag = True
model_size:str| default =large.Model size (
small,medium,large).save_flag:bool| default =True.Checkpoint after each structure.
uma¶
UMA (Universal Model for Atoms) from Meta FAIR. Requires GPU.
[uma]
model_name = uma-s-1p1
task_name = omc
model_name:str| default =uma-s-1p1.Pretrained model name. See fairchem docs.
task_name:str| default =omc.The task specifies the level of theory/DFT calculations to emulate. See fairchem docs.
aimnet¶
AIMNet2 neural network potential. Requires GPU.
[aimnet]
model = aimnet2
model:str| default =aimnet2.AIMNet2 model name or model path.
DFT execution modes¶
DFT calculators (aims, vasp) support two execution modes via the
dft_mode option:
parallel(default)Every Genarris MPI rank launches its own DFT subprocess. This is the original behavior, suitable when each rank has dedicated cores for its DFT job (e.g. via
use_slurmhost pinning).serialStructures from all ranks are gathered to rank 0 via MPI. Rank 0 runs each DFT calculation sequentially, giving the DFT binary the full SLURM / MPI allocation (e.g.
srun -n 256 aims.x). Results are broadcast back so every rank has the computed energies. This avoids nested-MPI conflicts and is recommended when you have relatively few structures but need maximum parallelism per DFT job.Works with any number of Genarris ranks – use many ranks for earlier steps (generation, clustering) and the same job transitions seamlessly into serial DFT when that task is reached.
SLURM script + config for dft_mode = serial (recommended)
#!/bin/bash
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=64
#SBATCH --ntasks=256
#SBATCH --time=48:00:00
# 256 ranks for generation/clustering/descriptor steps.
# During DFT tasks, all structures are gathered to rank 0, which
# calls "srun -n 256 aims.x" for each structure one at a time.
mpirun -np 256 gnrs -c ui.conf
[aims]
command = /path/to/aims.x
species_dir = /path/to/species_defaults/defaults_2020/light
energy_settings_path = ./aims_settings.json
num_cores = 256
mpi_launcher = srun
dft_mode = serial
With this setup, during DFT steps rank 0 calls
srun -n 256 /path/to/aims.x for each structure sequentially.
Other Genarris ranks wait at the MPI gather/broadcast. num_cores
can be set independently of the Genarris rank count – e.g. 128 Genarris
ranks for generation but num_cores = 256 to give each DFT job more
cores than Genarris ranks.
SLURM script + config for dft_mode = parallel
#!/bin/bash
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=64
#SBATCH --ntasks=256
#SBATCH --time=48:00:00
# 4 Genarris ranks, each launches its own DFT subprocess with 64 cores.
# Total: 4 parallel DFT jobs * 64 cores = 256 cores.
mpirun -np 4 gnrs -c ui.conf
[aims]
command = /path/to/aims.x
species_dir = /path/to/species_defaults/defaults_2020/light
energy_settings_path = ./aims_settings.json
num_cores = 64
mpi_launcher = mpirun
dft_mode = parallel
use_slurm = True
Each rank runs its own DFT subprocess pinned to a specific SLURM host. Use this when you have many structures and want parallel DFT jobs.
aims¶
FHI-aims all-electron DFT via the ASE calculator.
[aims]
command = /path/to/aims.x
species_dir = /path/to/species_defaults/defaults_2020/light
energy_settings_path = ./aims_settings.json
num_cores = 128
mpi_launcher = mpirun
dft_mode = parallel
use_slurm = False
command:str.Path to the FHI-aims binary. Do not include
mpirun/srunhere; the MPI launcher is controlled bympi_launcher.species_dir:str.Path to the FHI-aims
species_defaultsdirectory.energy_settings_path:str.Path to a JSON file with FHI-aims settings (passed to
ase.calculators.aims.Aims).
Example aims_settings.json
{
"spin": "none",
"relativistic": "atomic_zora scalar",
"charge": 0,
"occupation_type": "gaussian 0.01",
"mixer": "pulay",
"n_max_pulay": 8,
"charge_mix_param": 0.2,
"sc_accuracy_etot": 1e-06,
"sc_accuracy_rho": 1e-05,
"sc_accuracy_forces": 0.0001,
"sc_accuracy_eev": 0.001,
"sc_iter_limit": 10000,
"KS_method": "parallel",
"empty_states": 6,
"basis_threshold": 1e-05,
"many_body_dispersion": " ",
"compute_forces": ".true."
}
num_cores:int.CPU cores per DFT process. Required when
mpi_launcheris notnone.mpi_launcher:str| default =mpirun.MPI launcher to use for DFT runs. One of:
mpirun– launch withmpirun -np {num_cores}.srun– launch withsrun -n {num_cores}.ibrun– launch withibrun.none– run the binary directly with no MPI wrapper. Use this when the job is already running inside an MPI allocation (e.g. the SLURM job script already usessrun).
dft_mode:str| default =parallel.DFT execution mode. One of:
parallel– every Genarris MPI rank runs its own DFT subprocess (original behavior).serial– structures are gathered to rank 0, which runs DFT sequentially. Results are broadcast back. The DFT binary gets the full allocation. Works with any number of Genarris ranks (e.g.mpirun -np 128 gnrs ...for generation, then serial DFT).
use_slurm:bool| default =False.When
mpi_launcherismpirunanddft_modeisparallel, parse SLURM node list and pin each rank to a specific host. Ignored whenmpi_launcherissrunornone, or whendft_modeisserial.
vasp¶
VASP plane-wave DFT via the ASE calculator.
[vasp]
command = /path/to/vasp_std
energy_settings_path = ./vasp_settings.json
num_cores = 128
mpi_launcher = mpirun
dft_mode = parallel
use_slurm = False
command:str.Path to the VASP binary. Do not include
mpirun/srunhere; the MPI launcher is controlled bympi_launcher.energy_settings_path:str.Path to a JSON file with VASP settings (passed to
ase.calculators.vasp.Vasp).num_cores:int.CPU cores per DFT process. Required when
mpi_launcheris notnone.mpi_launcher:str| default =mpirun.MPI launcher for DFT runs. One of
mpirun,srun,ibrun, ornone. See theaimssection above for details.dft_mode:str| default =parallel.DFT execution mode (
serialorparallel). See theaimssection above for details.use_slurm:bool| default =False.When
mpi_launcherismpirunanddft_modeisparallel, pin each rank to a SLURM host. Ignored forsrun,none, orserial.
dftb¶
DFTB+ density functional tight-binding via the ASE calculator.
[dftb]
command = dftb+ > dftb.out
sk_files = ./3ob-3-1/
energy_settings_path = ./dftb_settings.json
command:str.Shell command to run DFTB+.
sk_files:str.Path to the Slater-Koster parameter files.
energy_settings_path:str.Path to a JSON file with DFTB+ settings (passed to
ase.calculators.dftb.Dftb).
Example dftb_settings.json
{
"Hamiltonian_MaxAngularMomentum_": "",
"Hamiltonian_MaxAngularMomentum_C": "\"p\"",
"Hamiltonian_MaxAngularMomentum_H": "\"s\"",
"Hamiltonian_MaxAngularMomentum_O": "\"p\"",
"Hamiltonian_MaxAngularMomentum_N": "\"p\"",
"Hamiltonian_SCC": "Yes",
"Hamiltonian_ThirdOrderFull": "Yes",
"kpts": "[3, 3, 3, 'gamma']",
"Hamiltonian_HubbardDerivs_": "",
"Hamiltonian_HubbardDerivs_C": "-0.1492",
"Hamiltonian_HubbardDerivs_H": "-0.1857",
"Hamiltonian_HubbardDerivs_O": "-0.1575",
"Hamiltonian_HubbardDerivs_N": "-0.1535",
"Hamiltonian_HCorrection_": "Damping",
"Hamiltonian_HCorrection_Exponent": "4.000",
"Hamiltonian_Dispersion_": "DftD3",
"Hamiltonian_Dispersion_Damping_": "BeckeJohnson",
"Hamiltonian_Dispersion_Damping_a1": "0.746",
"Hamiltonian_Dispersion_Damping_a2": "4.191",
"Hamiltonian_Dispersion_s6": "1.0",
"Hamiltonian_Dispersion_s8": "3.209"
}