AKMC with GAP

Run the AKMC example of two oxygen atoms on a Pd(110) slab with the bundled GAP model. This walkthrough uses the Pd/O GAP example at examples/akmc/pd_oxygen_gap/ and follows the preparation and monitoring pattern of First diffusion run with EAM.

Choose AKMC, GAP, and CPU in the installation selector. The threaded setup below requires LAMMPS built with QUIP and its OPENMP package, as provided by the matching installation recipe.

1. Copy and unpack the inputs

export SODA_ROOT="$HOME/soda"
export SODA_BIN="$SODA_ROOT/build/your-gap-prefix/soda"
source "$SODA_ROOT/build/your-gap-prefix/modules.rc"

export SODA_EXAMPLE="$SODA_ROOT/examples/akmc/pd_oxygen_gap"
export SODA_RUN="$HOME/soda-runs/akmc-pd-oxygen-gap"
mkdir -p "$HOME/soda-runs"
mkdir "$SODA_RUN"
cp "$SODA_EXAMPLE/config.ini" "$SODA_EXAMPLE/pos.con" \
  "$SODA_EXAMPLE/GAP_model.tar.bz2" "$SODA_EXAMPLE/decompress.sh" "$SODA_RUN/"
cd "$SODA_RUN"
bash ./decompress.sh

Use a new run-directory name if this one already exists. The script unpacks GAP_model/ and creates potfiles/in.lammps with an absolute path to GAP_model/GAP_0.xml. Keep the complete model directory, including its auxiliary files, on storage accessible to every node. If you move the run, update that path before launching.

The generated LAMMPS input uses pair_style quip; the atomic numbers 8 46 map its atom types to O and Pd. Preserve that mapping when adapting inputs. Optimize replacement structures with the selected GAP model first, keeping the intended cell, fixed atoms, and input-format conventions.

2. Match settings to a small CPU run

Add job = akmc to the existing [Main] section and set the existing [AKMC] max_kmc_steps to 1 for the first check (the supplied value is 2). Keep the example’s temperature of 600 K and confidence = 0.99.

For the local command below, change the existing potential entry from nine threads to three:

[Potential]
lammps_threads = 3

A positive lammps_threads overrides the thread count passed to LAMMPS via OMP_NUM_THREADS. Match both to the CPU cores allocated per rank; setting threads does not allocate cores. See threaded workers.

3. Check and launch

python "$SODA_ROOT/src/python/soda_analyzer.py" check-run-folder . \
  --soda-exe "$SODA_BIN" --check

After resolving blocking findings, use the following Open MPI command on a machine or allocation with nine available physical CPU cores. It assigns three cores to each of two workers and one head/master:

export OMP_NUM_THREADS=3
export OMP_PLACES=cores
export OMP_PROC_BIND=close
export MKL_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
mpirun -n 3 --map-by slot:PE=3 --bind-to core --report-bindings \
  "$SODA_BIN" \
  --num-gpu-workers-per-node=0 \
  --numjobsperwgroup=2 \
  --numjobsdonetotriggerupdate=2 \
  --storesummariesinfile=1 \
  --flushafterjobsdone=1 \
  --flushafterminutes=0

For Raven, copy submitjob.raven from the example directory. It requests three nodes with eight ranks per node and nine cores per rank. Restore lammps_threads = 9 if using that allocation, or adjust the INI entry, Slurm directives, and srun arguments together for a smaller run. Edit SODA_ROOT and BUILD_NAME before submitting with sbatch. The template removes existing output/ data and disables search summaries; set --storesummariesinfile=1 to retain them.

4. Inspect the result

Follow AKMC progress and check [LAMMPS runtime] measurements after the first force evaluation. Confirm that the model loads and that the CPU placement and thread count agree. A one-step run can still take many searches; it is not a performance or kinetics convergence result.

Use Analyzing AKMC output for states, process barriers, the transition history, and structure exports. The settings reference explains confidence and thermal windows. Cite AKMC and EON, SODA, and the GAP model publication when reporting calculations based on this example.