Descriptors
Two-Body
List of all two-body descriptors supported by Tadah!
D2_LJ
-
class D2_LJ : public D2_Base
Standard Lennard - Jones descriptor.
\[ V_i = \sum_{j \neq i} 4 \epsilon \Bigg(\Big(\frac{\sigma}{r_{ij}}\Big)^{12} - \Big(\frac{\sigma}{r_{ij}}\Big)^6\Bigg) f_c(r_{ij}) \]or equivalently:
\[ V_i = \sum_{j \neq i} \frac{C_{12}}{r_{ij}^{12}} - \frac{C_6}{r_{ij}^6} f_c(r_{ij}) \]Note that machined learned coefficients \(C_6\) and \(C_{12}\) corresponds to \(\sigma\) and \(\epsilon\) through the following relation:
\[ \sigma = \Big(\frac{C_{12}}{C_6}\Big)^{1/6} \]\[ \epsilon = \frac{1}{4} \frac{C_6^2}{C_{12}} w(Z) \]where \(w(Z)\) is a species depended weight factor (default is an atomic number).The machine learned \(\sigma\) and \(\epsilon\) only make sense (say to compare with the literature ones) when BIAS false and NORM false and system in monatomic. It is ok thought to set them to true it’s just that numerical values will be different.
Required Config Key: INIT2B
Public Functions
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor for the atom local environment.
For two body this is essentiall df/dr where f is a descriptor function. Do not include negative sign (as you mifht think E=-df/dr). The negative sign is included elsewhere in the code.
Computes x-direction only.
The resulting vector must be scaled by the unit directional vector delij/rij where delij = r_i - r_j, and rij is |r_i - r_j|
-
virtual void calc_all(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, fd_type &fd_ij, const double scale = 1) override
Calculate AED + FD.
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
D2_BP
-
class D2_BP : public D2_Base
Behler-Parrinello two-body descriptor.
\[ V_i^{\eta,r_s} = \sum_{j \neq i} \exp{\Big(-\eta(r_{ij}-r_s)^2\Big)}f_c(r_{ij}) \]CGRID2B parameters control position \( r_s \) of the gaussian basis function.
SGRID2B parameters control width \( \eta \) of the gaussian basis function.
This is essentially a \( G^1_i \) descriptor from the below paper with an exception that it can use any cutoff function defined in Ta-dah!:
Behler, J., Parrinello, M. (2007). Generalized neural-network representation of high-dimensional potential-energy surfaces. Physical Review Letters, 98(14), 146401. https://doi.org/10.1103/PhysRevLett.98.146401
Required Config keys: INIT2B CGRID2B SGRID2B
Public Functions
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor for the atom local environment.
For two body this is essentiall df/dr where f is a descriptor function. Do not include negative sign (as you mifht think E=-df/dr). The negative sign is included elsewhere in the code.
Computes x-direction only.
The resulting vector must be scaled by the unit directional vector delij/rij where delij = r_i - r_j, and rij is |r_i - r_j|
-
virtual void calc_all(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, fd_type &fd_ij, const double scale = 1) override
Calculate AED + FD.
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
D2_Blip
-
class D2_Blip : public D2_Base
Blip two-body descriptor.
\[ V_i^{\eta,r_s} =\sum_{j \neq i} \mathcal{B}(\eta(r_{ij}-r_s))f_c(r_{ij}) \]where \( f_c \) is a cutoff function and \( \mathcal{B} \) is a blip basis function centered at \(r_s\) of width \(4/\eta\).
CGRID2B parameters control position \( r_s \) of blip centres.
SGRID2B parameters control width \( \eta \) of blips.
Blip basis function is built out of 3rd degree polynomials in the four intervals [-2,-1], [-1,0], [0,1], [1,2] and is defined as:
\[\begin{split} \begin{equation} \mathcal{B}(r) = \begin{cases} 1-\frac{3}{2}r^2+\frac{3}{4}|r|^3 & \text{if} \qquad 0<|r|<1\\ \frac{1}{4}(2-|r|)^3 & \text{if} \qquad 1<|r|<2\\ 0 & \text{if} \qquad |r|>2 \end{cases} \end{equation} \end{split}\]More details about the blip basis functions can be found in the following paper:
Hernández, E., Gillan, M., Goringe, C. (1997). Basis functions for linear-scaling first-principles calculations. Physical Review B - Condensed Matter and Materials Physics, 55(20), 13485–13493. https://doi.org/10.1103/PhysRevB.55.13485
Required keys: INIT2B CGRID2B SGRID2B
Public Functions
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor for the atom local environment.
For two body this is essentiall df/dr where f is a descriptor function. Do not include negative sign (as you mifht think E=-df/dr). The negative sign is included elsewhere in the code.
Computes x-direction only.
The resulting vector must be scaled by the unit directional vector delij/rij where delij = r_i - r_j, and rij is |r_i - r_j|
-
virtual void calc_all(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, fd_type &fd_ij, const double scale = 1) override
Calculate AED + FD.
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
D2_EAM
-
class D2_EAM : public D2_Base
Pair-wise part for the Embedded Atom Method descriptor.
\[ V_i = \frac{1}{2} \sum_{j \neq i} \psi(r_{ij}) \]This descriptor will load tabulated values for the two-body potential \( \phi \) from the provided SETFL file.
This descriptor is usually used together with the many-body descriptor DM_EAM although this is not required and user can mix it with any other descriptors or use it on its own.
This descriptor will enforce cutoff distance as specified in a SETFL file. Set RCUT2B to the same value to suppress the warning message.
Required Config keys: INIT2B SETFL
Public Functions
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor for the atom local environment.
For two body this is essentiall df/dr where f is a descriptor function. Do not include negative sign (as you mifht think E=-df/dr). The negative sign is included elsewhere in the code.
Computes x-direction only.
The resulting vector must be scaled by the unit directional vector delij/rij where delij = r_i - r_j, and rij is |r_i - r_j|
-
virtual void calc_all(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, fd_type &fd_ij, const double scale = 1) override
Calculate AED + FD.
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
D2_Dummy
-
class D2_Dummy : public D2_Base
Dummy two-body descriptor.
Use it to satisfy DescriptorsCalc requirements in case when two-body descriptor is not required.
Public Functions
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor for the atom local environment.
For two body this is essentiall df/dr where f is a descriptor function. Do not include negative sign (as you mifht think E=-df/dr). The negative sign is included elsewhere in the code.
Computes x-direction only.
The resulting vector must be scaled by the unit directional vector delij/rij where delij = r_i - r_j, and rij is |r_i - r_j|
-
virtual void calc_all(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, fd_type &fd_ij, const double scale = 1) override
Calculate AED + FD.
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double, aed_type &aed, const double scale = 1) override
D2_Base
-
class D2_Base : public D_Base
Base class for all two-body type descriptors.
All two-body descriptors must inherit this class.
Subclassed by D2_BP, D2_Blip, D2_Dummy, D2_EAM, D2_Join< D1, D2 >, D2_LJ, D2_MIE, D2_ZBL, D2_mJoin
Public Functions
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, const double scale = 1) = 0
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, fd_type &fd_ij, const double scale = 1) = 0
Calculate FD.
Calculate Force Descriptor for the atom local environment.
For two body this is essentiall df/dr where f is a descriptor function. Do not include negative sign (as you mifht think E=-df/dr). The negative sign is included elsewhere in the code.
Computes x-direction only.
The resulting vector must be scaled by the unit directional vector delij/rij where delij = r_i - r_j, and rij is |r_i - r_j|
-
virtual void calc_all(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, fd_type &fd_ij, const double scale = 1) = 0
Calculate AED + FD.
-
inline void calc_fd_approx(const int Zi, const int Zj, double r, fd_type &fd, double h = 1e-8)
Central difference approximation to FD
Calculate Force Descriptor for the atom local environment using central difference approximation.
fc: a pointer to initialised cutoff object. r: a separation between two particles fd: appropriate size container to store computation h: central difference parameter
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, const double scale = 1) = 0
D2_mJoin
-
class D2_mJoin : public D2_Base, public D_mJoin
Meta two-body descriptor for combining multiple D2 descriptors.
This descriptor provides a convenient interface for concatenating multiple two-body descriptors. The resulting descriptor can then be used by Tadah! like any standard two-body descriptor.
Each descriptor must have a specified type in a configuration file, along with a cutoff function, cutoff distance, and optionally SGRID2B and CGRID2B values if applicable.
When listing descriptors under the TYPE2B key, you must include parameters relevant to this descriptor.
Here is an example of how to configure these descriptors:
TYPE2B D2_mJoin # <-- Meta descriptor for concatenating two-body descriptors TYPE2B D2_MIE 11 6 Ti Ti # <-- MIE exponents RCTYPE2B Cut_Cos RCUT2B 3.0 TYPE2B D2_Blip 6 6 Ti Nb Nb Nb # <-- grid sizes RCTYPE2B Cut_Tanh RCUT2B 7.5 SGRID2B -2 6 0.1 10 # Grid for D2_Blip, blips widths, auto generated CGRID2B 0 0 0 0 0 0 # Grid for D2_Blip, blip centers
Note: Grids can be specified on a single line, and the order of the grids is important.
There is no limit to the number of descriptors that can be concatenated.
Ensure the types and grids are correctly specified in the configuration file.
The cutoff functions (RCTYPE2B) and distances (RCUT2B) must be defined for each descriptor.
Both SGRID2B and CGRID2B should be included if relevant, with their sizes matching the given descriptors.
Public Functions
-
virtual void calc_aed(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, const double scale = 1) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor for the atom local environment.
For two body this is essentiall df/dr where f is a descriptor function. Do not include negative sign (as you mifht think E=-df/dr). The negative sign is included elsewhere in the code.
Computes x-direction only.
The resulting vector must be scaled by the unit directional vector delij/rij where delij = r_i - r_j, and rij is |r_i - r_j|
-
virtual void calc_all(const int Zi, const int Zj, const double rij, const double rij_sq, aed_type &aed, fd_type &fd_ij, const double scale = 1) override
Calculate AED + FD.
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
Three-Body
As is stands Tadah! does not support three-body type descriptors. They are simply slow to compute and there exist a number of angularly dependend many-body descriptors. However if there is enough interest in three-body descriptors they can be fairly easily added to the library. Just drop us an email…
Many-Body
List of all many-body type descriptors supported by Tadah! Note that some many-body type descriptors can calculate non-spherical charge distributionis hence they overcome Embedded Atom Method limitations.
DM_EAD
-
class DM_EAD : public DM_Base
Embedded Atom Descriptor
\[ V_i^{L,\eta,r_s} = \sum_{l_x,l_y,l_z}^{l_x+l_y+l_z=L} \frac{L!}{l_x!l_y!l_z!} \Big( \rho_i^{\eta,r_s,l_x,l_y,l_z} \Big)^2 \]where density \( \rho \) is calculated using Gaussian Type Orbitals:
\[ \rho_i^{\eta,r_s,l_x,l_y,l_z} = \sum_{j \neq i} x_{ij}^{l_x}y_{ij}^{l_y}z_{ij}^{l_z} \exp{\Big(-\eta(r_{ij}-r_s)^2\Big)}f_c(r_{ij}) \]CGRIDMB parameters control position \( r_s \) of the gaussian basis function.
SGRIDMB parameters control width \( \eta \) of the gaussian basis function.
e.g. \(L_{max}=2\) will calculate descriptors with \( L=0,1,2 \) (s,p,d orbitals).
More information about this descriptor:
Zhang, Y., Hu, C.,Jiang, B. (2019). Embedded atom neural network potentials: efficient and accurate machine learning with a physically inspired representation. Journal of Physical Chemistry Letters, 10(17), 4962–4967. https://doi.org/10.1021/acs.jpclett.9b02037
Required Config keys: INITMB CGRIDMB SGRIDMB
Public Functions
-
virtual void calc_aed(rho_type &rho, aed_type &aed) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri_dXjidri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, rho_type &rhoj, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for half NN lists and linear models.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} + \frac{\partial \mathbf{X}_{ji}}{\partial \mathbf{r}_i} \]
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for full NN lists and all models.
mode=0 inidcates only x-direction is computed and the resulting descriptor must be multiplied by delx/r.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} \]
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init_rhoi(rho_type &rhoi) override
Resize arrays for a density and F’.
-
virtual void calc_rho(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rho, const double scale = 1) override
Calculate density.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
-
virtual void calc_aed(rho_type &rho, aed_type &aed) override
DM_EAM
-
class DM_EAM : public DM_Base
many-body part for the Embedded Atom Method descriptor.
\[ V_i = F\Bigg(\sum_{j \neq i} \rho(r_{ij}) \Bigg) \]This descriptor will load tabulated values for the density \( \rho \) and embedded energy \( F \) from the provided SETFL file.
This descriptor is usually used together with the two-body descriptor D2_EAM although this is not required and user can mix it with any other descriptors or use it on its own.
This descriptor will enforce cutoff distance as specified in a SETFL file. Set RCUTMB to the same value to suppress the warning message.
Required Config keys: INITMB SETFL
Public Functions
-
virtual void calc_aed(rho_type &rho, aed_type &aed) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri_dXjidri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, rho_type &rhoj, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for half NN lists and linear models.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} + \frac{\partial \mathbf{X}_{ji}}{\partial \mathbf{r}_i} \]
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for full NN lists and all models.
mode=0 inidcates only x-direction is computed and the resulting descriptor must be multiplied by delx/r.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} \]
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init_rhoi(rho_type &rhoi) override
Resize arrays for a density and F’.
-
virtual void calc_rho(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rho, const double scale = 1) override
Calculate density.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
-
virtual void calc_aed(rho_type &rho, aed_type &aed) override
DM_Dummy
-
class DM_Dummy : public DM_Base
Dummy many-body descriptor.
Use it to satisfy DescriptorsCalc requirements in case when many-body descriptor is not required.
Public Functions
-
virtual void calc_aed(rho_type &rho, aed_type &aed) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri_dXjidri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, rho_type &rhoj, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for half NN lists and linear models.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} + \frac{\partial \mathbf{X}_{ji}}{\partial \mathbf{r}_i} \]
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for full NN lists and all models.
mode=0 inidcates only x-direction is computed and the resulting descriptor must be multiplied by delx/r.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} \]
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init_rhoi(rho_type &rhoi) override
Resize arrays for a density and F’.
-
virtual void calc_rho(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rho, const double scale = 1) override
Calculate density.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.
-
virtual void calc_aed(rho_type &rho, aed_type &aed) override
DM_Base
-
class DM_Base : public D_Base
Base class for all many-body type descriptors.
All many-body descriptors must inherit this class.
Subclassed by DM_Blip, DM_Dummy, DM_EAD, DM_EAM, DM_mEAD< F >, DM_mJoin
Public Functions
-
virtual void calc_aed(rho_type &rho, aed_type &aed) = 0
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri_dXjidri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, rho_type &rhoj, fd_type &fd_ij, const double scale = 1) = 0
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for half NN lists and linear models.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} + \frac{\partial \mathbf{X}_{ji}}{\partial \mathbf{r}_i} \]
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, fd_type &fd_ij, const double scale = 1) = 0
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for full NN lists and all models.
mode=0 inidcates only x-direction is computed and the resulting descriptor must be multiplied by delx/r.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} \]
-
virtual void init_rhoi(rho_type &rhoi) = 0
Resize arrays for a density and F’.
-
virtual void calc_rho(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rho, const double scale = 1) = 0
Calculate density.
-
inline void calc_dXijdri(const int Zi, const int Zj, Vec3d &del, rho_type &rhoi, fd_type &fdij, double scale = 1)
This is just a convenient wrapper.
-
inline void calc_rho_mb(const int Zi, const int Zj, Vec3d &del, rho_type &rhoi, double scale = 1)
This is just a convenient wrapper.
-
inline virtual size_t rhoi_size()
Return size of the density array.
-
inline virtual size_t rhoip_size()
Return size of the derivative of the embedding energy array.
-
inline virtual size_t size()
Return dimension of the descriptor.
-
virtual std::string label() = 0
Return label of this descriptor.
-
virtual void calc_aed(rho_type &rho, aed_type &aed) = 0
DM_mJoin
-
class DM_mJoin : public DM_Base, public D_mJoin
Meta many-body descriptor for combining multiple DM descriptors.
This descriptor provides an interface for concatenating various many-body descriptors. The resulting descriptor can then be used by Tadah! like any standard many-body descriptor.
Each descriptor must have a specified type in a configuration file, along with a cutoff function, cutoff distance, and other optional keys that are typically expected for this descriptor, such as SGRIDMB and CGRIDMB.
When listing descriptors under the TYPEMB key, include parameters relevant to this descriptor.
Here is an example of configuring these descriptors:
TYPEMB DM_mJoin # Meta descriptor for concatenating many-body descriptors TYPEMB DM_EAD 1 5 5 * * # L number, cgrid, sgrid, list of element pairs RCTYPEMB Cut_Cos RCUTMB 3.0 CGRIDMB -1 5 0 3.0 # Grid for DM_EAD, blips centers, auto-generated SGRIDMB -2 5 1.0 10.0 # Grid for DM_EAD, blips widths, auto-generated TYPEMB DM_Blip 0 7 7 Ta Ta # L number, cgrid, sgrid, list of element pairs RCTYPEMB Cut_Tanh RCUTMB 7.5 SGRIDMB -2 7 0.1 10 # Grid for DM_Blip, blips widths, auto-generated CGRIDMB 0 0 0 0 0 0 0 # Grid for DM_Blip, blips centers
Note: Grids can be specified on a single line, and the order of the grids should match the order of descriptors.
There is no limit to the number of descriptors that can be concatenated.
Ensure the types and grids are correctly specified in the configuration file.
The cutoff functions (RCTYPEMB) and distances (RCUTMB) must be defined for each descriptor.
Both SGRIDMB and CGRIDMB should be included if relevant, with their sizes matching the given descriptors.
Public Functions
-
virtual void calc_aed(rho_type &rho, aed_type &aed) override
Calculate AED.
Calculate Atomic Energy Descriptor for the atom local environment.
-
virtual void calc_dXijdri_dXjidri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, rho_type &rhoj, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for half NN lists and linear models.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} + \frac{\partial \mathbf{X}_{ji}}{\partial \mathbf{r}_i} \]
-
virtual void calc_dXijdri(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rhoi, fd_type &fd_ij, const double scale = 1) override
Calculate FD.
Calculate Force Descriptor between to atoms.
This method works for full NN lists and all models.
mode=0 inidcates only x-direction is computed and the resulting descriptor must be multiplied by delx/r.
\[ \mathbf{fd}_{ij} \mathrel{+}= \frac{\partial \mathbf{X}_{ij}}{\partial \mathbf{r}_i} \]
-
virtual std::string label() override
Return label of this descriptor.
-
virtual void init_rhoi(rho_type &rhoi) override
Resize arrays for a density and F’.
-
virtual void calc_rho(const int Zi, const int Zj, const double rij, const double rij_sq, const Vec3d &vec_ij, rho_type &rho, const double scale = 1) override
Calculate density.
-
virtual void init() override
Initialize the descriptor.
This method sets up the required keys names and number of parameters for the descriptor.
Note: The implementation of the descriptor should not rely on these initial values, allowing for greater flexibility in how the Config file is parsed.
The keys and parameters are utilized by other classes inheriting from this implementation, such as meta-descriptors.