POD - Proper Orthogonal Descriptors¶
Description¶
The POD potential writes the energy of an atom as a linear combination of orthogonal descriptors. The descriptors are built from two-body and three-body (and optionally higher-order) radial and angular basis functions, compressed by a proper orthogonal decomposition. POD also supports environment clustering: atoms are assigned to clusters of local environments, each with its own set of coefficients.
A POD potential is defined by two files:
- a parameter file (
.pod): species, cutoffs, basis sizes, body orders, number of environment clusters, ... - a coefficient file (
.pod): the fitted coefficients.
Build
Configure exaStamp with -DEXASTAMP_MLIP_POD_BUILD=ON. POD requires BLAS and LAPACK. To force a given BLAS implementation, set -DEXASTAMP_MLIP_POD_BLAS_VENDOR=<vendor> (for instance OpenBLAS or Intel10_64lp). The value is passed to CMake's FindBLAS as BLA_VENDOR.
Operators¶
pod_init reads both files once, in init_parameters, and raises rcut_max to the POD cutoff. pod_force computes energies, forces and the virial in compute_force.
init_parameters:
- species
- pod_init:
parameters:
pod_file: <string>
coeff_file: <string>
compute_force:
- pod_force
parameters.pod_file: string, required # POD parameter file.
parameters.coeff_file: string, required # POD coefficient file.
pod_init needs the species operator to have run before it, so list species first in init_parameters.
includes:
- config_update_symmetric_forces.msp
species:
- Ta: { mass: 180.95 Da, z: 73, charge: 0 e- }
init_parameters:
- species
- pod_init:
parameters:
pod_file: "Ta_param.pod"
coeff_file: "Ta_coefficients.pod"
compute_force:
- pod_force
Examples are in exaStamp/data/regression_new/mliaps/pod/: Ta_pod.msp, Ta_pod_nClusters_2.msp (two environment clusters) and Ta_enhanced_pod.msp (short-range options below).
Short-range options¶
The parameter file accepts optional keywords that control the radial basis at short distances:
| Keyword | Default | Description |
|---|---|---|
rin |
0.5 | Inner cutoff: the radial basis functions are evaluated on \(r = r_{ij} - r_{in}\). |
fadein_mu, fadein_delta |
0, 0 | When both are positive, every radial basis function is multiplied by the fade-in function \(f_{in}(r_{ij}) = 1/\left(1+e^{2(\mu-r_{ij})/\delta}\right)\), which goes from 0 below \(\mu\) to 1 above it over a width of about \(\delta\). |
use_scaled_lj |
0 | When set, the inverse-power radial functions use \((r_{ij}/r_{in})^{-k}\) instead of \(r_{ij}^{-k}\). |
rin 0.4
rcut 5.0
fadein_mu 0.4
fadein_delta 0.04
use_scaled_lj 1
The fade-in function enters both the projection of the descriptors and the radial basis used for energies, forces and descriptors. It only changes the results for pair distances within a few \(\delta\) of \(\mu\) or below.
Descriptors¶
POD descriptors, their derivatives and the global fitting matrix are computed by compute_descriptor_pod, compute_descriptor_pod_global and write_descriptor_pod_global. See Descriptors.