Difference between revisions of "Manual:Linear Response"

From OctopusWiki
Jump to navigation Jump to search
Line 1: Line 1:
There are two ways of calculating polarizabilities in {{octopus}}. The first one is to use Linear Response (TD)DFT and the second one is just doing finite differences, this was the first implemented but is slower and more limited and is only recomendend for comparison and testing.
+
''This part of the code is quite recent and it is being actively developed, so not all the features might be available in the stable version.''
  
For both cases, you need to do a ground state calculation first.
+
{{Octopus}} can calculate dynamic polarizabilities and first order hyperpolarizabilites in a linear response scheme using the Sternheimer equation. It also possible to calculate optical spectra with this technique, but it is slower than time evolution.
  
==== Linear Response ====
+
===== Ground state =====
  
In this method the derivative of the energy is calculated analytically through Density Functional Perturbation Theory.
+
The first thing we will need to do a linear response, it is a [[Manual:Ground State|Ground State]] calculation. Unlike other techniques, when using the Sterheimer equation you needn't do a unoccupied states calculation. To improve the convergency of the linear response calculation, it is better to use tightly converged wave functions. For example you can add this parameteres to your gs calculation:
 
 
====== Ground state ======
 
 
 
To do a polarizability calculation you need a gs calculation for the system with very well converged wave functions, the following convergency parameters are recommended:
 
  
 
<pre>
 
<pre>
 
EigenSolverFinalTolerance = 1e-10
 
EigenSolverFinalTolerance = 1e-10
 +
ConvAbsDens = 1e-9
 +
</pre>
 +
  
ConvAbsDens = 0
+
===== Input =====
ConvRelDens = 0
 
ConvAbsEv = 1e-10
 
ConvRelEv = 0
 
</pre>
 
  
===== Polarizability =====
+
The {{Variable|CalculationMode|Generalities}} for polarizability calculations is {{code| pol_lr}}. The main parameter you have to specify is the frequency of the perturbation, this is given by the {{Variable|PolFreqs|Linear_Response}} block. You can also add an imaginary part to the frequency by setting the variable {{Variable|PolEta|Linear_Response}}. Adding a small imaginary part is required if you want to get the imaginary part of the polarizability or to calculate polarizabilities near resonance, a reasonable value is {{code|0.1 eV}}.
  
After that you can calculate the hyperpolarizabity using ''RunMode = pol_lr''. This will run a self consistent iteration for each dimension, each one takes about 10-20 steps and the calculation time is about the same for the ground state. The results will be in the ''linear/'' directory in two files:
+
To get the hyperpolarizabilties, you also have to specify the {{Variable|PolHyper|Linear_Response}} with the three coefficients with respect to the base frequency, the three values must sum zero.
  
 +
===== Output =====
  
* The ''polarizability_lr'' file contains the static polarizability <math>\alpha_i</math> given as a matrix and the mean static polarizablity
+
After running, fr each frequency in the input file, {{octopus}} will generate a subdirectory under {{file|linear/}}. In each subdirectory there is a file called {{file|alpha}} that contains the real part of the polarizability tensor <math>\alpha_{ij}</math> and the average polarizability
  
 
<math>
 
<math>
\bar{\alpha}=\frac13\sum_{i=1}^3\alpha_ii
+
\bar{\alpha}=\frac13\sum_{i=1}^3\alpha_{ii}\,,
 
</math>
 
</math>
  
* The ''beta_lr'' file which contains the first static hyperpolarizability <math>\beta_{ijk}</math> given by components (as the tensor is symmetrical there are only 10 independent components). Finally there are the 3 values <math>\beta_{||i}</math> defined as
+
there is also a file called {{file|cross_section_tensor}} that contains the photo-absorption cross section tensor for that frequency, that it is related to the imaginary part of the polarizability.
 +
 
 +
The hyperpolarizabilty will be in a file called {{file|beta}}, containing all the 27 components and some reduced quantities:
  
 
<math>
 
<math>
B_{||i} = \frac15 \sum_{j=1}^3(B_{ijj}+B_{jij}+B_{jji})\ .
+
B_{//\,i} = \frac15 \sum_{j=1}^3(B_{ijj}+B_{jij}+B_{jji})\ .
 
</math>
 
</math>
  

Revision as of 13:44, 5 February 2007

This part of the code is quite recent and it is being actively developed, so not all the features might be available in the stable version.

Octopus can calculate dynamic polarizabilities and first order hyperpolarizabilites in a linear response scheme using the Sternheimer equation. It also possible to calculate optical spectra with this technique, but it is slower than time evolution.

Ground state

The first thing we will need to do a linear response, it is a Ground State calculation. Unlike other techniques, when using the Sterheimer equation you needn't do a unoccupied states calculation. To improve the convergency of the linear response calculation, it is better to use tightly converged wave functions. For example you can add this parameteres to your gs calculation:

EigenSolverFinalTolerance = 1e-10
ConvAbsDens = 1e-9


Input

The CalculationMode for polarizability calculations is pol_lr. The main parameter you have to specify is the frequency of the perturbation, this is given by the PolFreqs block. You can also add an imaginary part to the frequency by setting the variable PolEta. Adding a small imaginary part is required if you want to get the imaginary part of the polarizability or to calculate polarizabilities near resonance, a reasonable value is 0.1 eV.

To get the hyperpolarizabilties, you also have to specify the PolHyper with the three coefficients with respect to the base frequency, the three values must sum zero.

Output

After running, fr each frequency in the input file, Octopus will generate a subdirectory under linear/. In each subdirectory there is a file called alpha that contains the real part of the polarizability tensor and the average polarizability

there is also a file called cross_section_tensor that contains the photo-absorption cross section tensor for that frequency, that it is related to the imaginary part of the polarizability.

The hyperpolarizabilty will be in a file called beta, containing all the 27 components and some reduced quantities:

Finite differences

In this mode only static polarizability can be obtained, the calculation is done by taking the numerical derivative of the energy with respect to an external static and uniform electric field. To use this run with CalculationMode =pol_fd. Octopus will run several ground state energy calculations (2 per dimension) and then calculate the polarizability using a finite differences formula for the derivative, the resulting tensor will be in the linear/polarizability_fd file.



Previous [[{{{prev}}}]] - Next [[{{{next}}}]]

Back to Manual