Stress
Stress
For periodic condensed systems also the stress can be calculated analytically.
In general, the stress tensor \(\sigma\) contains a kinetic contribution and a static contribution.
The kinetic stress \(\sigma^{\rm kin}\) is calculated from the atomic velocities \(v\) and masses \(m\) in the molecular dynamics simulation according to
This has to be done by the MD code and is not part of RuNNer.
The static stress \(\sigma^{\rm static}\) can be calculated analytically from the NN. We define
\(\alpha\) being the \(x\), \(y\) or \(z\) coordinate. We first calculate atomic contributions to the stress tensor separately for the radial and the angular symmetry functions. The radial stress contribution of atom \(i\) to the static stress matrix element \(\sigma^{\rm static}_{i,\alpha\beta}\) is
Here \(F_j^{\beta}\) is the force acting on atom \(j\) in direction \(\beta\). The angular stress contribution of atom \(i\) is
The final matrix element of the static stress tensor is then obtained by adding all atomic contributions. $$ \begin{aligned} \sigma^{\rm static}{\alpha\beta} =\sum^N \left( \sigma^{\rm static,rad}{i,\alpha\beta} +\sigma^{\rm static,ang} \right) \end{aligned} $$
In Eqs. $\eqref{eq:radstress} and $\eqref{eq:angstress} we have to take into account the mapping of the Cartesian Coordinates on the symmetry functions.
Short range stress
For the radial stress of the short range component we obtain
and for the angular short range stress
In RuNNer the short range stress is calculated using the quantities
strs
\((3,3,\mu,k)\)=\(\sum_i\sum_j R_{ij}^{\alpha}\frac{\partial G_k^{\mu}}{\partial \beta_j}\)
and deshortdsfunc
\((k,\mu)\)\(=\frac{\partial E_k}{\partial G_k^{\mu}}\).
Electrostatic stress
The electrostatic stress is not yet implemented.
van-der-Waals Stress
For a general introduction to dispersion interactions in
RuNNer
, see
here.
In the original derivation of the Tkatchenko-Scheffler (TS) dispersion correction scheme, as presented by Bucko et al.,[^1] the expression for the gradient of the dispersion energy \(E_{\mathrm{disp}}\) with respect to the lattice vector components \(h^{\alpha,\beta}\) takes the form
Please note the formal similarity of this equation to \(\eqref{eq:vdwForceExpression}\).
The derivative of the screening function \(f\) with respect to the interatomic distance \(r_{ij,L}\) is given in \(\eqref{eq:vdWScreeningDerivative}\). The derivative of the interatomic distance with respect to \(h^{\alpha,\beta}\) is
Code implementation
In RuNNer
prediction mode, the predict
routine collects all stress
contributions. Relevant variables are:
Name | Data Type | Description |
---|---|---|
vdwstress(3, 3) |
REAL*8 | The vdw contribution to the stress tensor components. |
The stress is calculated
alongside the energies.
The main vdw calculation routine calc_tkatchenko_scheffler
iterates over all
atoms (loop_block_of_atoms
) in one block of atoms and all their neighbours
(loop_neighbors
). For each pair, the contribution to the stress tensor
is computed according to the equations given above and stored in vdwstress(3, 3).
[^1] T. Bucko, S. Lebègue, J. Hafner, J. G. Angtn, Phys. Rev. B 87 (6) 064110 (2013)