Descriptors
- r_cut (real)
-
The cut-off of the descriptor (in Å).
Default
r_cut=5.0
- desc_forces (logical)
-
Compute or not the force descriptors. Also the writting of the force descriptors is desactivated. Active for all descriptors. In the case
desc_forces=.false.only the positions are read.Default
desc_forces=.true.
- descriptor_type (integer)
-
Type of descriptor to be used.
descriptor_type=1G2descriptor_type=2G3descriptor_type=3Behlerdescriptor_type=4Angular Fourier Series (AFS)descriptor_type=6Power Spectrum SO3descriptor_type=8Power Spectrum SO4descriptor_type=9Bispectrum SO4descriptor_type=14hybrid G2 + AFSdescriptor_type=18hybrid G2 + Power Spectrum SO4descriptor_type=19hybrid G2 + Bispectrum SO4descriptor_type=77MiLaDy native descriptordescriptor_type=100MTP\(^3\) (up to order \(M_{\mu,\nu}\), with \(\nu \le 3\))descriptor_type=200PiP permutationally invariant polynomials (N-body)descriptor_type=202Fourier N-body (ftnbody)descriptor_type=204Zeta-body (real-space 2-body / 3-body)descriptor_type=300ACE (atomic cluster expansion)descriptor_type=603Power Spectrum SO3 (3-body variant)
Note
The legacy SOAP (former
descriptor_type=5) and Bispectrum SO3 (formerdescriptor_type=7) descriptors are no longer available in this version ofMILADY.Default
1.
G2
To use G2, set descriptor_type=1.
Parameters
- eta_max_g2 (integer)
-
The max value of \(\eta\). The grid will be taken between \(10^{-2}\) and this value.
Default
eta_max_g2=0.8
- n_g2_eta (integer)
-
The grid for \(\eta\) with the following generatig formulae:
\[\eta_p = 10^{-2} + \frac{p-1}{\textrm{n_g2_eta}}( \textrm{eta_max_g2}- 10^{-2})\]where \(p\) range strats to 1 up to
n_g2_eta.Default
3
- n_g2_rs (integer)
-
The grid for \(r_s\) with the following generating formulae:
\[r_s^p = p-1\]where \(p\) range starts to 1 up to
n_g2_rs.Default
1
G3
To use G3, set descriptor_type=2.
Parameters
- n_g3_eta (integer)
-
The grid for \(\eta\) with the following generatig formulae:
\[\eta_p = 10^{-2} + \frac{p-1}{\textrm{n_g2_eta}}(1 - 10^{-2})\]where \(p\) range strats to 1 up to
n_g2_eta.Default
3
- n_g3_lambda (integer)
-
the grid for \(\lambda\) with the following generating formulae:
\[\lambda_p = -1 + 2(p-1)\]where \(p\) range starts to 1 up to
n_g3_lambda. Is highly recommended the valuen_g3_lambda\(=2\) i. e. \(\lambda\) will have the value \(1\) and \(-1\).Default
2
- n_g3_zeta (integer)
-
The grid for \(\zeta\) with the following generating formulae:
\[\zeta_p = 2^{p-1}\]where \(p\) range starts to 1 up to
n_g3_zeta.Default
2
Behler
To use Behler, set descriptor_type=3.
Parameters
The parameters of the descriptors are controlled by the options of the case \(G2\) and \(G3\). Additional options are available:
- strict_behler (logical)
-
All the parameters are set-up automatically following one of the Behler’s paper.
Default
F
AFS
To use AFS, set descriptor_type=4.
Parameters
The parameters of the descriptors are controlled by the options of the number of radial
channels and Tchbychev polynomials. There are two types of AFS
descriptors introduced by the option afs_type.
- afs_type (integer)
-
afs_type=1:integerthis option activates the orginal AFS published in the PRB paper cite{bartok2013}:\[\textrm{AFS}_{n,l}^j = \sum_{i,k} g_n(r_{ji}) g_n(r_{jk}) T_l (\cos{\theta_{ijk}})\]and has the dimension equal to
n_rbf\(\times\)(n_cheb + 1). The \(g_n\) and \(T_l\) are the radial channels and Tchebychev polynomials, respectivelly. -
afs_type=2:integerthis option activates a new AFS descriptor with strong coupling between the radial channels:\[\textrm{AFS}_{n,n^\prime, l}^j = \sum_{i,k} g_n(r_{ji}) g_{n^{\prime}}(r_{jk}) T_l (\cos{\theta_{ijk}})\]The dimension of this descriptor is equal to
n_rbf\(^2\) \(\times\)(n_cheb + 1).Default
afs_type = 1
- n_rbf (integer)
-
The number of radial channels.
Default
n_rbf=4
- n_cheb (integer)
-
The number of Tchebychev polynomials.
Default
n_cheb=5
Power Spectrum SO3
To use power spectrum SO3, set descriptor_type=6.
Parameters
The parameters of this descriptor are controlled by the
number of radial functions, n_rbf, and the angular momentum of spherical harmonics l_max.
This descriptor has two radial function choices given by radial_pow_so3 flag.
The
dimension of the descriptor will be: n_rbf \(\times\)
(l_max + 1) if radial_pow_so3 = 1 and n_rbf + 1 \(\times\)
(l_max + 1) if radial_pow_so3 = 2
- radial_pow_so3 (integer)
-
The type of radial function.
radial_pow_so3 = 1is the default choice and give the original polynomial radial basis (the same as the default basis of AFS descritor) whilstradial_pow_so3 = 2gives the radial basis based on Chebyshev polynomials described in refXXX. This option is common and acitve for others two descriptors: Power Spectrum SO3-3body and Bispectrum SO3 descriptors.Default
radial_pow_so3 = 1
- n_rbf (integer)
-
The number of Gaussian (radial) functions.
Default
n_rbf=4
- l_max (integer)
-
The max values of the angular moment.
Default
l_max=4
The \(n_{rbf} \times (1 + l_{\textrm{max}})\) or \((n_{rbf} + 1) \times (1 + l_{\textrm{max}})\) components of the power spectrum SO(3) descriptor of the \(j^{th}\) atom is written:
with \(n\) in the range \(0/1\) to \(n_{rbf}\), whilst \(l = 0, \ldots l_{max}\). The Wigner coefficients can be written:
the functions \(g_n(r_{ij})\) are polynomial basis functions (the same as the radial function on which AFS is built) or Chebyshev polynomials from refXXX. \(Y_{lm}\) is the spherical function in the Cartesian form.
Power Spectrum SO3 3body
To use power spectrum SO3 3body, set descriptor_type=603. This descriptor follows the ideea
of 3 body descriptor proposed by refXXXdeGironcoli.
Parameters
The parameters of this descriptor are controlled by the
number of radial functions, n_rbf, and the angular momentum of spherical harmonics l_max.
This descriptor has two radial function choices given by radial_pow_so3 flag.
The dimension of the descriptor will be: \(n_{\textrm{rbf}}^2 \times (l_{\textrm{max}})\)
if radial_pow_so3 = 1 or \((1 + n_{\textrm{rbf}})^2 \times (l_{\textrm{max}})\)
if radial_pow_so3 = 2
- radial_pow_so3 (integer)
-
The same utility as described before for Power Spectrum SO3 descriptor.
Default
radial_pow_so3 = 1
- n_rbf (integer)
-
The same utility as described before for Power Spectrum SO3 descriptor.
Default
n_rbf=4
- l_max (integer)
-
The max values of the angular moment.
Default
l_max=4
The \(n_{rbf}^2 \times (1 + l_{\textrm{max}})\) or \((n_{rbf} + 1)^2 \times (1 + l_{\textrm{max}})\) components of the power spectrum SO(3) 3 body descriptor of the \(j^{th}\) atom is written:
with \(n_{1,é}\) are in the range of \(0/1\) to \(n_{rbf}\), whilst \(l = 0, \ldots l_{max}\). The Wigner coefficients are the same described for Power Spectrum SO3.
Power Spectrum SO4
To use power spectrum SO4, set descriptor_type=8.
Parameters
The parameters of this descriptor are controlled by the maximum angular
moment \(j_{max}\). Its dimension is \(2 j_{max} + 1\). The same
two options as for the Bispectrum SO4 descriptor (below),
j_max and inv_r0_input, are used.
- j_max (real)
-
The maximum component of the spectral function.
Default
j_max=1.5
- inv_r0_input (real)
-
The value of the maximum projection at the north pole in \(\pi\) units (see Bispectrum SO4 for details).
Default
inv_r0_input=1.d0 - 0.02/\(\pi\)
Bispectrum SO4
To use bispectrum SO4, set descriptor_type=9.
Parameters
The parameters of the descriptors are controlled by maximum angular moment \(j_{max}\). The dimension is not easy to guess. Moreover, it depends on the choice on diagonal (\(j_1=j_2\)) or full the complete set of \(j_1, j_2\).
- j_max (integer)
-
The maximum componenet of the spectral function.
Default
j_max=1.5
- inv_r0_input (real)
-
The value of the maximum projection at north pole in \(\pi\) units. The final value that will be used in code will be multiplied by \(\pi\). The value should be slightly lower that 1 but strictly positive. The default value is suggested by the brilliant paper of Bartok et al. If you do not have ideea about the \(SO(4)\) theory, trust the default value.
Default
inv_r0_input=1.d0 - 0.02/\(\pi\)
- lbso4_diag (logical)
-
If
.true.only the diagonal components are selected (as in GAP). If.false.is SNAP-like way and all the components are selected. It should be notted that the bi-spectrum is overcomplete descriptor and only diagonal components are mathematically justified. However, in the original SNAP potential of Thompsson is was used in full version.Default
lbso4_diag=.false.
MTP
To use MTP, set descriptor_type=100.
Parameters
The parameters of the descriptors are controlled by minimum and the maximum degree of the
polynomials mtp_poly_min and mtp_poly_max. The degree of the
generating radial function will be the internal parameter
mtp_rad_order =mtp_poly_max - mtp_poly_min +1. The dimension of
the descriptor i.e. number of basis function is given by
mtp_dim=mtp_rad_order + 2*mtp_rad_order**2 + mtp_rad_order**3.
- mtp_poly_min (integer)
-
The minimum degree of the radial function
Default
mtp_poly_min=2
- mtp_poly_max (integer)
-
The minimum degree of the radial function
Default
mtp_poly_max=4
- lambda_krr (real)
-
The regularization using \(L^2\) or \(L^1\) norm. It is active only for cases
mld_fit_type=0(for a fixed positive value oflambda_krrandmld_fit_type=10(for a grid). For details see the correspoding documentation. For negative values this option is skipped and standard fit is performed.Default
lambda_krr=-1.d0
PiP
To use PiP (permutationally invariant polynomials), set descriptor_type=200.
Note
The current implementation of PiP treat only one single type of atoms
Parameters
This descriptors is based by a cluster expansion of the system energy:
The total energy is expressed as a sum of one-atom \(V_1\) ,
pair \(V_2\), threeatom (angle) \(V_3\) terms, and so forth. The order of expansion, or even a
combination of expantion terms are driven by l_body_order. This version of Milady enables a developement
up to the fourth order. The number of PiP terms for each term are driven by body_D_max,
bond_dist_transform, bond_beta and bond_dist_ann.
- l_body_order (logical vector)
-
This logical vertor of dimention 4 design the order of cluster expension. For example
l_body_order(2)=.true.,l_body_order(3)=.true.,l_body_order(4)=.false.enable a cluster expension up to the third order.Default
l_body_order(:)=.true.
- body_D_max (integer vector)
-
This integer vector fix the number of PiP terms for each term of expansion.
body_D_max(2)for \(V_2\),body_D_max(3)for \(V_3\) andbody_D_max(4)for \(V_4\). A reasonable choice can be 20, 9, 7. Try more less depending on th design that you made for your expension.Default
body_D_max(i)=i
- bond_dist_transform (integer)
-
TODO: choose 3
Default:
bond_dist_transform=3
- bond_beta (real)
-
TODO: choose 2.0
Default:
bond_beta=2.0
- bond_dist_ann
-
TODO: choose bond_dist_ann=1.0
Default:
bond_dist_ann=1.0
ACE
To use ACE (atomic cluster expansion), set descriptor_type=300.
Parameters
This descriptor is based on a hierarchy of many-body basis functions.
The energy descriptor of an atom \(a\) is:
The total energy is expressed as a sum of the \(\nu\)-body order terms, where \(\nu\) is the number of atoms in the cluster. The index \(\mathbf{u}\) indicates a collection of indices \(\mathbf{\mu n l L}\) that define the basis functions, where each of them is a vector of \(\nu\) elements: \(\mathbf{\mu}\) is the chemical species, \(\mathbf{n}\) is the index of the radial function, \(\mathbf{l}\) is the angular momentum, and \(\mathbf{L}\) is the order of coupling. The coefficients \(c_{\mathbf{m}}^{\mathbf{l} \mathbf{L}}\) are the Clebsch-Gordan coefficients that couple the spherical harmonics. The \(\mathbf{A}_{a, \mathbf{v}}^{(\nu)}(\mathbf{R}_a)\) are the atomic basis functions, which are products of one-atom basis functions \(A_{a,\mu n l m}(\mathbf{R}_a)\):
For the case of k-ACE with a drastic reduction of number of basis functions by tensor contraction, we define \(\mathbf{G}^{l,\mu_a,\mu_j}\) a matrix composed of \(M\) row vectors \(\mathbf{R}_{l}^{\mu_a \mu_j}(r_m)\) at a given sampled distance \(r_m (m=1,\ldots,M)\). Then \(\mathbf{k}\) denotes the order of contraction, i.e., the truncation order retained in the SVD of the matrix \(\mathbf{G}^{l,\mu_a,\mu_j}\).
The parameters of the descriptors are controlled by the options below.
- ace_numax (integer)
-
The maximum body order set by the user.
- ace_chem (integer)
-
The way to encode chemical species.
ace_chem=0: incomplet version, treatement for single element systems.ace_chem=1: full version, treatement for multi-element systems.
Default
ace_chem=1
- ace_radial_chem (integer)
-
The type of the radial part treatement.
ace_radial_chem=1: Ralf version, classical ACE.ace_radial_chem=3: k-ACE version with tensor contraction.
Default
ace_radial_chem=1
- ace_gencg (integer)
-
The type of the generation of the Clebsch-Gordan coefficients.
ace_gencg=1: redundant version.ace_gencg=2: SVD Dusson-Ortner version.
Default
ace_gencg=2
- l_ace_order (logical vector)
-
This logical vector defines which order(s) of cluster expension is activated. For example, the setting
l_body_order(1)=.true.l_body_order(2)=.true.l_body_order(3)=.true.l_body_order(4)=.false.l_body_order(5)=.false.l_body_order(6)=.false.enables a cluster expension up to the third order.
- ace_nmax_list (string)
-
A string of integer numbers that define the maximum value of \(\mathbf{n}\) for each body order. The length of this string should be at least equal to
ace_numax.Example:
ace_nmax_list = "14 5 4 3 2 1"
- ace_lmax_list (string)
-
A string of integer numbers that define the maximum value of \(\mathbf{l}\) for each body order. The length of this string should be at least equal to
ace_numax.Example:
ace_lmax_list = "0 4 3 2 1 1"
- ace_kmax_list (string)
-
A string of integer numbers that define the maximum value of \(\mathbf{k}\) for each body order. The length of this string should be at least equal to
ace_numax.Example:
ace_kmax_list="5 3 3 3 3 3"
- ace_radial_poly (integer)
-
The type of the polynomial in the radial part.
1 - powPftouny; 2 - expPaftouny; 3 - simpBessel
Default
ace_radial_poly=2
- ace_lambda_list (string)
-
A string of real numbers that define the value of \(\lambda\) for each body order. The length of this string should be at least equal to
ace_numax.Example:
ace_lambda_list="2.0 2.0 2.0"Default
ace_lambda_list=" 2.d0 2.d0 2.d0"
- ace_npoints_spline (integer)
-
The number of points of the radial spline grid used to tabulate the ACE radial functions. A larger value gives a finer radial interpolation.
Default
ace_npoints_spline=1000
Low-rank chemical compression
For k-ACE with HSVD radial contraction (ace_radial_chem=3) and a large number
of species (typically 25-108), each \((k,l)\) channel carries
\(S \times S\) pair radial functions (\(S\) being the number of species).
The following options compress every channel to rank \(Q\) through a
symmetric Alternating Least Squares (ALS) factorization,
\(g_k^{l\mu\nu}(r) \approx \sum_{q} A_{\mu q}^{kl} A_{\nu q}^{kl} u_q^{kl}(r)\),
reducing the storage from \(\mathcal{O}(N_r S^2)\) to
\(\mathcal{O}(SQ + N_r Q)\) per channel. They are only effective with
ace_radial_chem=3.
- ace_chem_low_rank (integer)
-
Enable the low-rank chemical compression:
0disabled,1enabled.Default
ace_chem_low_rank=0
- ace_chem_low_rank_q (integer)
-
The compression rank \(Q\).
Default
ace_chem_low_rank_q=4
- ace_chem_low_rank_niter (integer)
-
The number of ALS iterations used to build the compression.
Default
ace_chem_low_rank_niter=50
- ace_chem_low_rank_lambda (real)
-
The ridge regularization of the ALS factorization.
Default
ace_chem_low_rank_lambda=1.d-6
Per-body-order radial cutoffs
By default the ACE radial functions use the global cutoffs (r_cut /
r_cut_in). The options below allow a different inner/outer cutoff (and
transition width) for each body order.
- l_ace_set_rcut (logical)
-
If
.true., the per-body-order cutoff lists below are used instead of the global cutoffs.Default
l_ace_set_rcut=.false.
- ace_rcut_out_list (string)
-
The outer cutoff radius (Å) for each body order.
Default
ace_rcut_out_list=" 5.d0 5.d0 5.d0 "
- ace_rcut_width_out_list (string)
-
The outer cutoff transition width (Å) for each body order.
Default
ace_rcut_width_out_list=" 0.5d0 0.5d0 0.5d0 "
- ace_rcut_in_list (string)
-
The inner cutoff radius (Å) for each body order.
Default
ace_rcut_in_list=" 1.2d0 1.2d0 1.2d0 "
- ace_rcut_width_in_list (string)
-
The inner cutoff transition width (Å) for each body order.
Default
ace_rcut_width_in_list=" 0.4d0 0.4d0 0.4d0 "
Hybrid descriptors
MILADY provides several hybrid descriptors that concatenate a radial
\(G2\) part with an angular/many-body part. The resulting descriptor is the
direct sum of the two blocks, and its parameters are simply those of the two
parent descriptors:
descriptor_type=14— hybrid G2 + AFS (parameters of the G2 and AFS sections).descriptor_type=18— hybrid G2 + Power Spectrum SO4 (parameters of the G2 and Power Spectrum SO4 sections).descriptor_type=19— hybrid G2 + Bispectrum SO4 (parameters of the G2 and Bispectrum SO4 sections).
MiLaDy native descriptor
To use the MiLaDy native descriptor, set descriptor_type=77.
Parameters
- rmat_dim (integer)
-
The linear size of the native descriptor matrix; the descriptor dimension is
rmat_dim\(\times\)rmat_dim.Default
rmat_dim=20
- img_weighted (logical)
-
Use a multi-channel (chemically weighted) variant of the descriptor.
Default
img_weighted=.false.
- img_num_ch (integer)
-
The number of channels used when
img_weighted=.true..Default
img_num_ch=1
Fourier N-body (ftnbody)
To use the Fourier N-body descriptor, set descriptor_type=202.
Parameters
This descriptor expands the N-body interaction on a Fourier radial basis. The
active body orders are selected with l_body_order (a logical vector, see
the PiP section); the size, length and grid spacing of the Fourier basis are
provided per body order as strings.
- l_body_order (logical vector)
-
Selects which body orders are activated (same convention as for the PiP descriptor).
- dim_fourier_nbody (string)
-
The number of Fourier basis functions for each active body order.
- length_fourier_nbody (string)
-
The length (range) of the Fourier basis for each active body order.
- delta_fourier_nbody (string)
-
The grid spacing of the Fourier basis for each active body order.
Zeta-body
To use the Zeta-body descriptor, set descriptor_type=204. It provides an
explicit real-space 2-body / 3-body description of the local environment.
Note
Zeta-body uses body orders 2 and 3 only (l_body_order(2) and
l_body_order(3)); the other body orders are turned off automatically.
For the pure 2-body channel it is recommended to use active_k2b=.true.
instead.
Parameters
- zetabody_order (integer)
-
The order of the zeta-body expansion. It must be strictly smaller than the internal limit
MAX_ZETABODY_ORDER(= 6).
- r_cut_z2b (real)
-
The cut-off radius (in Å) of the 2-body channel. If negative, the global
r_cutis used.Default
r_cut_z2b=r_cut
- r_cut_z3b (real)
-
The cut-off radius (in Å) of the 3-body channel. If negative, the global
r_cutis used.Default
r_cut_z3b=r_cut
- r_cut_width_z2b (real)
-
The width of the cut-off transition region of the 2-body channel. If negative, the global
r_cut_widthis used.
- r_cut_width_z3b (real)
-
The width of the cut-off transition region of the 3-body channel. If negative, the global
r_cut_widthis used.
Low-distance behaviour: cutoffs, k2b and ZBL
At short interatomic distances the many-body descriptors become unreliable, as
training sets rarely sample close encounters. MILADY controls this
low-distance regime with three ingredients that can be combined: the smooth
cutoff functions that bound the descriptor in distance, an explicit k2b
two-body channel that adds a learnable pair interaction, and the physics-based
ZBL repulsive core for very close encounters.
Cutoff functions
Every descriptor is bounded by a smooth cutoff. The outer cutoff removes
interactions beyond r_cut; an optional inner cutoff removes them below
r_cut_in.
- r_cut (real)
-
The outer cutoff radius (Å). All interactions vanish for \(r > r_{\textrm{cut}}\). Mandatory.
- r_cut_width (real)
-
The width (Å) of the smooth transition near the outer cutoff (used by
type_fcut=3).
- type_fcut (integer)
-
The functional form of the outer cutoff function \(f_{\textrm{cut}}(r)\):
-
type_fcut=1power law:\[f_{\textrm{cut}}(r) = \left[ \left(\frac{r}{r_{\textrm{cut}}}\right)^2 - 1 \right]^2\] -
type_fcut=2cosine (default):\[f_{\textrm{cut}}(r) = \frac{1}{2}\left[ \cos\left( \pi \frac{r}{r_{\textrm{cut}}} \right) + 1 \right]\] -
type_fcut=3smooth plateau + cosine (constant 1 up to \(r_{\textrm{cut}} - r_{\textrm{cut,width}}\), then a cosine taper). This is the form used internally for the inner cutoff of several descriptors:\[f_{\textrm{cut}}(r) = \frac{1}{2}\left[ \cos\left( \pi \frac{ r - r_{\textrm{cut}} + r_{\textrm{cut,width}} }{ r_{\textrm{cut,width}} } \right) + 1 \right] , \quad r_{\textrm{cut}} - r_{\textrm{cut,width}} \le r \le r_{\textrm{cut}}\] type_fcut=4quadratic: \(f_{\textrm{cut}}(r) = 2\,(r - r_{\textrm{cut}})\).
Default
type_fcut=2. -
- r_cut_in (real)
-
The inner cutoff radius (Å). When positive, the descriptors are smoothly turned off below \(r_{\textrm{cut,in}}\), with the same value for all element pairs (global mode). When negative, the inner cutoff is computed automatically for each element pair \((A,B)\) from the covalent radii,
\[r_{\textrm{cut,in}}^{AB} = 0.60\,\frac{ r_{\textrm{cov}}(A) + r_{\textrm{cov}}(B) }{100}\](\(r_{\textrm{cov}}\) in pm), clamped to \([0.60, 1.80]\) Å.
Default
r_cut_in=-1.2(automatic, element-specific inner cutoffs).
- r_cut_width_in (real)
-
The width (Å) of the smooth inner-cutoff transition, applied over the interval \([\,r_{\textrm{cut,in}},\; r_{\textrm{cut,in}} + r_{\textrm{cut,width,in}}\,]\).
Default
r_cut_width_in=0.4.
k2b: explicit two-body channel
The k2b (kernel 2-body) channel appends an explicit, learnable pair interaction to the design matrix, independent of the many-body descriptor:
It places \(n_{\textrm{rad}}=\) np_radial_2b Gaussian radial functions on
a linearly-spaced grid from 0.2 Å to \(r_{\textrm{cut}}^{(2b)}\), with
one block of \(n_{\textrm{rad}}\) columns per unique element pair, so the channel dimension is \(D_{\textrm{k2b}} = n_{\textrm{rad}} \times N_{\textrm{elem}}(N_{\textrm{elem}}+1)/2\). It is especially useful together with ZBL, as it provides the learnable short-range pair interaction that bridges the repulsive core and the many-body domain.
- activate_k2b (logical)
-
The master switch of the k2b channel. If
zbl_potential=.true.butactivate_k2b=.false., k2b is activated automatically (with a warning), because the ZBL bridge mode requires it.Default
activate_k2b=.false..
- np_radial_2b (integer)
-
The number of Gaussian radial functions \(n_{\textrm{rad}}\).
Default
np_radial_2b=30.
- sigma_2b (real)
-
The Gaussian width \(\sigma_{2b}\) (Å) of each radial basis function. Smaller values give sharper, more localized functions.
Default
sigma_2b=0.05.
- delta_2b (real)
-
The amplitude \(\delta_{2b}\) scaling the whole k2b channel; it sets the typical magnitude (in eV) of a 2-body interaction and the weight of the k2b channel relative to the many-body descriptor.
Default
delta_2b=1.0.
- r_cut_2b (real)
-
The cutoff radius of the k2b channel. Defaults to
r_cutif not set.
- r_cut_width_2b (real)
-
The width of the k2b cutoff transition. Defaults to
r_cut_width.
ZBL: short-range repulsive core
The ZBL (Ziegler-Biersack-Littmark) potential adds a physics-based repulsive core for close encounters, where the screened Coulomb repulsion between the nuclei \(Z_i, Z_j\) dominates:
with the universal screening function and length
and \(\varepsilon_0 = 55.26349406\times10^{-4}\) e2/(eV·Å). A \(C^2\)-continuous switching function turns ZBL off between \(r_1^{\textrm{ZBL}}\) and \(r_2^{\textrm{ZBL}}\):
- zbl_potential (logical)
-
The master switch enabling the ZBL repulsive core.
Default
zbl_potential=.false..
- zbl_type (integer)
-
The way ZBL is integrated with the many-body (MB) potential:
zbl_type=1bridge mode (default). ZBL is connected to the MB potential through the k2b channel and a smooth raccordement (bridge) function, so the total energy reads \(E = E_{\textrm{ZBL+bridge}} + E_{\textrm{k2b}} + E_{\textrm{MB}}\). It requires k2b (auto-activated if needed).zbl_type=2additive mode. The total energy is simply \(E = E_{\textrm{ZBL}} + E_{\textrm{MB}}\); the MB descriptors use the inner cutoffr_cut_into vanish at short range, so only ZBL acts there. No k2b channel or bridge is needed.
Default
zbl_type=1.
- r1_zbl (real)
-
Below this distance (Å) only the pure ZBL screened Coulomb is used (\(f_{\textrm{cut}}^{\textrm{ZBL}}=1\)). Typically 0.8-1.2 Å.
Default
r1_zbl=1.0.
- r2_zbl (real)
-
Above this distance (Å) ZBL is fully switched off. Typically 1.8-2.5 Å.
Default
r2_zbl=2.2.
- type_rac_zbl (integer)
-
The bridge (raccordement) function connecting ZBL to k2b in
zbl_type=1:type_rac_zbl=1exponential, \(f_{\textrm{bridge}}(r)=\exp(a+br+cr^2+dr^3)\) (\(C^1\) continuity at the two endpoints).type_rac_zbl=2polynomial, \(f_{\textrm{bridge}}(r)=a+br+cr^2+dr^3+er^4+fr^5\) (\(C^2\) continuity, default and recommended).
Default
type_rac_zbl=2.
Note
In bridge mode (zbl_type=1) the three radii must satisfy the strict
ordering \(r_1^{\textrm{ZBL}} < r_{\textrm{cut,in}}\,(=r_{\textrm{k2b}}) < r_2^{\textrm{ZBL}}\);
if r_cut_in is negative it defaults to
\((r_1^{\textrm{ZBL}} + r_2^{\textrm{ZBL}})/2\), and MILADY aborts if
the ordering is violated.
Switching ZBL on/off, with or without k2b
The two switches activate_k2b and zbl_potential (with zbl_type)
combine as follows:
Settings |
Short-range core |
Behaviour |
|---|---|---|
|
none |
Standard many-body descriptor only. |
|
learnable pair |
k2b pair channel appended to the many-body descriptor; no physics-based repulsion. |
|
ZBL + k2b + bridge |
Bridge mode: ZBL → smooth bridge → k2b + many-body. k2b is
required and auto-activated if |
|
ZBL (additive) |
\(E_{\textrm{ZBL}} + E_{\textrm{MB}}\); the inner cutoff removes the many-body part at short range. k2b not required. |