Tutorial:Sternheimer linear response
The Sternheimer approach to perturbation theory allows efficient calculations of linear and non-linear response properties. The basis of this method, just as in standard perturbation theory, is to calculate the variation of the wave-functions ψ1 under a given perturbing potential. The advantage of the method is that the variations are obtained by solving the linear equation
that only depends on the occupied states instead of requiring an (infinite) sum over unoccupied states. In the case of (time-dependent) density functional theory the variation of the Hamiltonian includes a term that depends on the variation of the density, so this equation must be solved self-consistently.
To run a Sternheimer calculation with Octopus, the only previous calculation you need is a ground-state calculation. For this tutorial we will use a water molecule, with this basic input file for the ground state:
CalculationMode = gs %Coordinates 'O' | 0.000000 | -0.553586 | 0.000000 'H' | 1.429937 | 0.553586 | 0.000000 'H' | -1.429937 | 0.553586 | 0.000000 % Radius = 10
Note that we will use the default spacing, but we will increase a bit the size of the box as response calculations tend to require more space around the molecule than ground-state calculations.
After the ground-state calculation is finished, we change the run mode to
CalculationMode = em_resp
Next, to specify the frequency of the response we use theblock; in this case we will use three values 0.00, 0.15 and 0.30 [Ha]:
%EMFreqs 3 | 0.0 | 0.3 %
and we will also specify a small imaginary part to the frequency of 0.1 [eV]:
EMEta = 0.1/27.211383