PES point properties¶

No matter what application the AMS driver is used for, in one way or another it always explores the potential energy surface (PES) of the system. One can furthermore ask AMS to calculate additional properties of the PES in the points that are visited. These are mostly derivatives of the energy, e.g. we can ask AMS to calculate the gradients or the Hessian in the visited points. In general all these PES point properties are requested through the Properties block in the AMS input:

Properties
StressTensor [True | False]
Hessian [True | False]
SelectedAtomsForHessian integer_list
NormalModes [True | False]
ElasticTensor [True | False]
Phonons [True | False]
End

Note that because these properties are tied to a particular point on the potential energy surface, they are found on the engine output files. Note also that the properties are not always calculated in every PES point that the AMS driver visits during a calculation. By default they are only calculated in special PES points, where the definition of special depends on the task AMS is performing: For a geometry optimization properties would for example only be calculated at the final, converged geometry. This behaviour can often be modified by keywords special to the particular running task.

The first derivative with respect to the nuclear coordinates can be requested as follows:

Properties
End
Properties
Type: Bool False Whether or not to calculate the gradients.

Note that these are gradients, not forces, the difference being the sign. The gradients are printed in the output and written to the engine result file belonging to the particular point on the PES in the AMSResults%Gradients variable as a $$3 \times n_\mathrm{atoms}$$ array in atomic units (Hartree/Bohr).

For periodic systems (chains, slabs, bulk) one can also request the clamped-ion stress tensor (note: the clamped-ion stress is only part of the true stress tensor):

Properties
StressTensor [True | False]
End
Properties
StressTensor
Type: Bool False Whether or not to calculate the stress tensor.

The clamped-ion stress tensor $$\sigma_\alpha$$ (Voigt notation) is computed via numerical differentiation of the energy $$E$$ WRT a strain deformations $$\epsilon_\alpha$$ keeping the atomic fractional coordinates constant:

$\sigma_\alpha= \frac{1}{V_0} \left. \frac{\partial E}{\partial \epsilon_\alpha} \right|_\text{constant atomic fractional coordinates}$

where $$V_0$$ is the volume of the unit cell (for 2D periodic system $$V_0$$ is the area of the unit cell, and for 1D periodic system $$V_0$$ is the lenght of the unit cell).

The clamped-ion stress tensor (in Cartesian notation) is written to the engine result file in AMSResults%StressTensor.

Hessian and normal modes of vibration¶

The calculation of the second derivative of the total energy with respect to the nuclear coordinates is enabled by:

Properties
Hessian [True | False]
End
Properties
Hessian
Type: Bool False Whether or not to calculate the Hessian.

The Hessian is not printed to the text output, but is saved in the engine result file as variable AMSResults%Hessian. Note that this ist just the plain second derivative (no mass-weighting) of the total energy and that for the order of its $$3 \times n_\mathrm{atoms}$$ columns/rows, the component index increases the quickest: The first column refers to changes in the $$x$$-component of atom 1, the second to the $$y$$-component, the fourth to the $$x$$-component of the second atoms, and so on.

It is also possible to request the calculation of the normal modes of vibration:

Properties
NormalModes [True | False]
End
Properties
NormalModes
Type: Bool False Whether or not to calculate the normal modes of vibration (and of molecules the corresponding Ir intensities.)

This implies the calculation of the Hessian, which is required for calculating normal modes. For engines that are capable of calculating dipole moments, this also enables the calculation of the infrared intensities, so that the IR spectrum can be visualized by opening the engine result file with ADFSpectra. The normal modes of vibration and the IR intensities are saved to the engine result file in the Vibrations section.

Note

The calculation of the normal modes of vibration needs to be done the system’s equilibrium geometry. So one should either run the normal modes calculation using an already optimized geometry, or combine both steps into one job by using the geometry optimization task together with the Properties%NormalModes keyword.

Elastic tensor¶

The elastic tensor $$c_{\alpha, \beta}$$ (Voigt notation) is computed via second order numerical differentiation of the energy $$E$$ WRT strain deformations $$\epsilon_\alpha$$ and $$\epsilon_\beta$$:

$c_{\alpha, \beta} = \frac{1}{V_0} \frac{\partial^2 E}{\partial \epsilon_\alpha \partial \epsilon_\beta}$

where $$V_0$$ is the volume of the unit cell (for 2D periodic system $$V_0$$ is the area of the unit cell, and for 1D periodic system $$V_0$$ is the lenght of the unit cell).

For each strain deformation $$\epsilon_\alpha \epsilon_\beta$$, the atomic positions will be optimized. The elastic tensor can be computed for any periodicity, i.e. 1D, 2D and 3D.

To compute the elastic tensor, request it in the Properties input block of AMS:

Properties
ElasticTensor [True | False]
End

Note

The elastic tensor should be computed at the fully optimized geometry. One should therefore perform a geometry optimization of all degrees of freedom, including the lattice vectors. It is recommended to use a tight gradient convergence threshold for the geometry optimization (e.g. 1.0E-4). Note that all this can be done in one job by combining the geometry optimization task with the elastic tensor calculation.

The elastic tensor (in Voigt notation) is printed to the output file and stored in the engine result file in the AMSResults section (for 3D system, the elastic tensor in Voigt notation is a 6x6 matrix; for 2D systems is a 3x3 matrix; for 1D systems is just one number).

Options for the numerical differentiation procedure can be specified in the ElasticTensor input block:

ElasticTensor
Parallel
nCoresPerGroup integer
nGroups integer
nNodesPerGroup integer
End
StrainStepSize float
End
ElasticTensor
Type: Block Options for numerical evaluation of the elastic tensor.
Type: Float 0.0001 Hartree/Angstrom Maximum nuclear gradient for the relaxation of the internal degrees of freedom of strained systems.
Parallel
Type: Block The evaluation of the elastic tensor via numerical differentiation is an embarrassingly parallel problem. Double parallelization allows to split the available processor cores into groups working through all the available tasks in parallel, resulting in a better parallel performance. The keys in this block determine how to split the available processor cores into parallelly working groups.
nCoresPerGroup
Type: Integer Number of cores in each parallelly working group.
nGroups
Type: Integer Total number of processor groups. This is the number of tasks that will be executed in parallel.
nNodesPerGroup
Type: Integer Number of nodes in each group. This option should only be used on homogeneous compute clusters, where all used compute nodes have the same number of processor cores.
StrainStepSize
Type: Float 0.001 Step size (relative) of strain deformations used for computing the elastic tensor numerically.

Phonons¶

Collective oscillations of atoms around theirs equilibrium positions, giving rise to lattice vibrations, are called phonons. AMS can calculate phonon dispersion curves within standard harmonic theory, implemented with a finite difference method. Within the harmonic approximation we can calculate the partition function and therefore thermodynamic properties, such as the specific heat and the free energy.

The calculation of phonons is enabled in the Properties block.

Properties
Phonons [True | False]
End

Note

Phonon calculations should be performed on optimized geometries, including the lattice vectors. This can be done by either reading an already optimized system as input, or combining the phonon calculation with the geometry optimization task.

The details of the phonon calculations are configured in the NumericalPhonons block:

NumericalPhonons
SuperCell # Non-standard block. See details.
...
End
StepSize float
DoubleSided [True | False]
UseSymmetry [True | False]
Interpolation integer
NDosEnergies integer
Parallel
nCoresPerGroup integer
nGroups integer
nNodesPerGroup integer
End
End
NumericalPhonons
SuperCell
Type: Non-standard block Used for the phonon run. The super lattice is expressed in the lattice vectors. Most people will find a diagonal matrix easiest to understand.

The most important setting here is the super cell transformation. In principle this should be as large as possible, as the phonon bandstructure converges with the size of the super cell. In practice one may want to start with a 2x2x2 cell and increase the size of the super cell until the phonon band structure converges:

NumericalPhonons
SuperCell
2 0 0
0 2 0
0 0 2
End
End

Other keywords in the NumericalPhonons block modify the details of the numerical differentiation procedure and the accuracy of the results:

NumericalPhonons
StepSize
Type: Float 0.04 Angstrom Step size to be taken to obtain the force constants (second derivative) from the analytical gradients numerically.
DoubleSided
Type: Bool True By default a two-sided (or quadratic) numerical differentiation of the nuclear gradients is used. Using a single-sided (or linear) numerical differentiation is computationally faster but much less accurate. Note: In older versions of the program only the single-sided option was available.
UseSymmetry
Type: Bool True Whether or not to exploit the symmetry of the system in the phonon calculation.
Interpolation
Type: Integer 100 Use interpolation to generate smooth phonon plots.
NDosEnergies
Type: Integer 1000 Nr. of energies used to calculate the phonon DOS used to integrate thermodynamic properties. For fast compute engines this may become time limiting and smaller values can be tried.

Note that the numerical phonon calculation supports AMS’ double parallelism, which can perform the calculations for the individual displacements in parallel. This is disabled by default but can be enabled using the keys in the NumericalPhonons%Parallel block:

NumericalPhonons
Parallel
Type: Block Computing the phonons via numerical differentiation is an embarrassingly parallel problem. Double parallelization allows to split the available processor cores into groups working through all the available tasks in parallel, resulting in a better parallel performance. The keys in this block determine how to split the available processor cores into parallelly working groups. Keep in mind that the displacements for a phonon calculation are done on a super-cell system, so that every task requires more memory than the central point calculated using the primitive cell.
nCoresPerGroup
Type: Integer Number of cores in each parallelly working group.
nGroups
Type: Integer Total number of processor groups. This is the number of tasks that will be executed in parallel.
nNodesPerGroup
Type: Integer Number of nodes in each group. This option should only be used on homogeneous compute clusters, where all used compute nodes have the same number of processor cores.

Numerical differentiation options¶

The following options apply whenever AMS computes gradients, hessians or stress tensors via numerical differentiation.

NumericalDifferentiation
NuclearStepSize float
StrainStepSize float
End
NumericalDifferentiation
Type: Block Define options for numerical differentiations, that is the numerical calculation of gradients, Hessian and the stress tensor for periodic systems.
NuclearStepSize
Type: Float 0.0001 Bohr Step size for numerical nuclear gradient calculation.
StrainStepSize
Type: Float 0.001 Step size (relative) for numerical stress tensor calculation.