Potentials

We can define a potential in a unified input file (worker.yaml) for later simulation and training. The MLIP calculations are performed by ase calculators using either python built-in codes (PyTorch, TensorFlow) or File-IO based external codes (e.g. lammps).

Formulations

We have already implemented interfaces to the potentials below:

Suported MLIPs:

MLIPs are the major concern.

Name

Representation

Backend

Notes

eann

(Recursive) Embedded Atom

Python, LAMMPS

lasp

Atom-Centred Symmetry Function

LASP, LAMMPS

schnet

Graph Neueral Network

Python

deepmd

Deep Descriptor

Python, LAMMPS

Only potential model.

nequip

E(3)-Equivalent Message Passing

Python, LAMMPS

Allegro is supported as well.

mace

Equivalent Graph Neueral Network

Python

Note

GDPy does not implement any MLIP but offers a unified interface. Therefore, certain MLIP could not be utilised before corresponding required packages are installed correctly.

Other Potentials:

Some potentials besides MLIPs are supported. Force fields or semi-empirical potentials are used for pre-sampling to build an initial dataset. Ab-initio methods are used to label structures with target properties (e.g. total energy, forces, and stresses).

Name

Description

Backend

Notes

reax

Reactive Force Field

LAMMPS

xtb

Tight Binding

xtb

vasp

Density Functional Theory

VASP

cp2k

Density Functional Theory

cp2k

plumed

Collective-Variable Enhanced Sampling

plumed

Simulation

We should define the potential in worker.yaml before running any simulation.

Basic Definition

For most potentials, type_list and model are two required parameters that are used by different backends. If the lammps backend is used, command must be set to specify how to run lammps. The example below shows how to define a potential (eann, deepmd, nequip, reax) in a yaml file (worker.yaml):

# -- ase interface
potential:
  name: deepmd # name of the potential
  params: # potential-specifc params
    backend: ase # ase or lammps
    type_list: ["H", "O"]
    model: ./graph.pb

# -- lammps interface
potential:
  name: deepmd
  params:
    backend: lammps
    command: lmp -in in.lammps 2>&1 > lmp.out
    type_list: ["H", "O"]
    model: ./graph.pb

Note

Allegro can be accessed through the nequip potential but with an extra parameter flavour: allegro in the params section.

For vasp, the input can be much different as:

potential:
  name: vasp
  params:
    # NOTE: below paths should be absolute/resolved
    pp_path: _YOUR-PSEUDOPOTENTIAL-PATH_
    vdw_path: _YOUR-VDWKERNEL-PATH_
    incar: _YOUR-INCAR-PATH_
    # - system depandent
    kpts: [1, 1, 1] # kpoints, mesh [1,1,1] or spacing 30 AA^-1
    # - run vasp
    commad: mpirun -n 32 vasp_std 2>&1 > vasp.out

After setting a driver in the input file (worker.yaml), we can run simulations with the defined potential. See Driver section for more details.

Mixing Potentials

Sometimes the simulation requires several potentials, for example, enhanced sampling. A mixer potentical can be defined to realise this. Currently, it only supports the ase backend. The parameter accepts a list of potential definitions.

The example below uses a deepmd model in tandem with plumed that adds external forces defined in an input file ./plumed.inp.

potential:
  name: mixer
  params:
    backend: ase
    potters:
      - name: deepmd
        params:
          backend: ase
          type_list: ["H", "O"]
          model:
            - ./graph.pb
      - name: plumed
        params:
          backend: ase
          inp: ./plumed.inp

Training

See Trainer for more details.