pyxtal_ff.descriptors.EAD

class pyxtal_ff.descriptors.EAD.EAD(parameters, Rc=5.0, derivative=True, stress=False, cutoff='cosine')[source]

Bases: object

EAD is an atom-centered descriptor that is inspired by Embedded Atom method (EAM). The EAM utilizes the orbital-dependent density components. The orbital-dependent component consists of a set of local atomic density descriptions.

The functional form of EAD is consistent with:
Zhang, Y., et. al. (2019). The Journal of Physical Chemistry Letters, 10(17), 4962-4967.
Parameters:
  • parameters (dict) – The user-defined parameters for component of local atomic density descriptions. i.e. {‘L’: 2, ‘eta’: [0.36], ‘Rs’: [1.0]}
  • Rc (float) – The EAD will be calculated within this radius.
  • derivative (bool) – If True, calculate the derivative of EAD.
  • stress (bool) – If True, calculate the virial stress contribution of EAD.
calculate(crystal, ids=None)[source]

Calculate and return the EAD.

Parameters:
  • crystal (object) – ASE Structure object.
  • ids (list) – A list of the centered atoms to be computed if None, all atoms will be considered
Returns:

d – The user-defined EAD that represent the crystal. d = {‘x’: [N, d], ‘dxdr’: [N, m, d, 3], ‘rdxdr’: [N, m, d, 3, 3], ‘elements’: list of elements}

Return type:

dict

load_from_dict(dict0)[source]
save_dict()[source]

save the model as a dictionary in json

pyxtal_ff.descriptors.EAD.calculate_eamd(i, m, ri, rij, dij, Z, IDs, Rc, parameters, derivative, stress)[source]

Calculate the EAD for a center atom i.

Parameters:
  • i (int) – The i-th atom center.
  • m (int) – The total atoms in the crystal unit cell.
  • ri (array [3]) – The position of atom i.
  • rij (array [j, 3]) – The vector distances of atom i to neighbors j.
  • dij (array [j]) – The array of distances of i-th center atom.
  • Z (array [j]) – The atomic numbers of neighbors.
  • IDs (int array [j]) – The indices of neighbors centering about atom i.
  • Rc (float) – The cutoff radius.
  • parameters (dict) –
    Rs: float array (d1)
    The shift from the center of the Gaussian-type orbitals.
    etas: float array (d2)
    The width of the Gaussian-type orbitals.
    L: int (d3)
    The total orbital angular momentum.
    cutoff: str
    The cutoff function.
  • derivative – If True, calculate the derivative of EAD.
  • stress (bool) – If True, calculate the virial stress contribution of EAD.
Returns:

Return type:

Dict of EAD descriptors with its derivative and stress contribution.

pyxtal_ff.descriptors.EAD.dRij_dRm_norm(Rij, ijm_list)[source]

Calculate the derivative of Rij norm w. r. t. atom m. This term affects only on i and j.

Parameters:
  • Rij (array [j, 3]) – The vector distances of atom i to atom j.
  • ijm_list (array [j, 3] or [j*k, 3]) – Id list of center atom i, neighbors atom j, and atom m.
Returns:

dRij_m – The derivative of pair atoms w.r.t. atom m in x, y, z directions.

Return type:

array [j, 3]

pyxtal_ff.descriptors.EAD.dij_dm_list(unique_js, ij_list)[source]

Get the sign of the derivative of x-y-z ** lx-ly-lz.

Parameters:
  • uN (int) – the unique index of the atom that force is acting on.
  • ij_list (list) – The list of center atom i w.r.t. the neighbors atom j.
Returns:

result – The signs (+ or -) for dXij_dm (YZ) * dYij_dm (XZ) * dZij_dm (XY)

Return type:

array [j, uN]

pyxtal_ff.descriptors.EAD.get_xyz(unique_js, rij, ij_list, L, derivative)[source]

(x ** l_x) * (y ** l_y) * (z ** l_z) / (l_x! * l_y! * l_z!) ** 0.5