# 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

$(H^0-\epsilon^0 + \omega )|\psi^{1}>=-P_{\rm c} H^{1}|\psi^{0}>\ ,$

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
%



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 em_resp.

CalculationMode = em_resp


Next, to specify the frequency of the response we use the EMFreqs block; 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