Optical spectra from Casida

In this tutorial we will again calculate the absorption spectrum of methane, but this time using Casida’s equations.


Once again our first step will be the calculation of the ground state. We will use the following input file:

CalculationMode = gs
UnitsOutput = eV_angstrom

Radius = 6.5*angstrom
Spacing = 0.24*angstrom

CH = 1.097*angstrom
 "C" |           0 |          0 |           0
 "H" |  CH/sqrt(3) | CH/sqrt(3) |  CH/sqrt(3)
 "H" | -CH/sqrt(3) |-CH/sqrt(3) |  CH/sqrt(3)
 "H" |  CH/sqrt(3) |-CH/sqrt(3) | -CH/sqrt(3)
 "H" | -CH/sqrt(3) | CH/sqrt(3) | -CH/sqrt(3)

Note that we are using the values for the spacing and radius that were found in the Convergence_of_the_optical_spectra tutorial to converge the absorption spectrum.

Unoccupied States

The Casida equation is a (pseudo-)eigenvalue equation written in the basis of particle-hole states. This means that we need both the occupied states – computed in the ground-state calculation – as well as the unoccupied states, that we will now obtain, via a non-self-consistent calculation using the density computed in gs. The input file we will use is

CalculationMode = unocc
UnitsOutput = eV_angstrom

Radius = 6.5*angstrom
Spacing = 0.24*angstrom

CH = 1.097*angstrom
 "C" |           0 |          0 |           0
 "H" |  CH/sqrt(3) | CH/sqrt(3) |  CH/sqrt(3)
 "H" | -CH/sqrt(3) |-CH/sqrt(3) |  CH/sqrt(3)
 "H" |  CH/sqrt(3) |-CH/sqrt(3) | -CH/sqrt(3)
 "H" | -CH/sqrt(3) | CH/sqrt(3) | -CH/sqrt(3)

ExtraStates = 10

Here we have changed the CalculationMode to unocc and added 10 extra states by setting the ExtraStates input variable.

By running Octopus, you will obtain the first 10 unoccupied states (do not forget to run the ground-state calculation first). The solution of the unoccupied states is controlled by the variables in section Eigensolver. You can take a look at the eigenvalues of the unoccupied states in the file static/eigenvalues :

All states converged.
Criterion =      0.100000E-06

Eigenvalues [eV]
 #st  Spin   Eigenvalue      Occupation     Error
   1   --   -16.789588       2.000000      ( 2.4E-08)
   2   --    -9.470218       2.000000      ( 6.3E-08)
   3   --    -9.470218       2.000000      ( 6.3E-08)
   4   --    -9.470218       2.000000      ( 6.3E-08)
   5   --    -0.287600       0.000000      ( 8.1E-08)
   6   --     0.822696       0.000000      ( 9.8E-08)
   7   --     0.822696       0.000000      ( 7.4E-08)
   8   --     0.822696       0.000000      ( 8.2E-08)
   9   --     1.599657       0.000000      ( 5.1E-08)
  10   --     1.599657       0.000000      ( 1.7E-08)
  11   --     1.599657       0.000000      ( 1.7E-08)
  12   --     1.813359       0.000000      ( 4.8E-08)
  13   --     1.813359       0.000000      ( 7.1E-08)
  14   --     2.309004       0.000000      ( 5.4E-08)

Casida calculation

Now modify the CalculationMode to casida and rerun Octopus. Note that by default Octopus will use all occupied and unoccupied states that it has available.

Sometimes, it is useful not to use all states. For example, if you have a molecule with 200 atoms and 400 occupied states ranging from -50 to -2 eV, and you are interested in looking at excitations in the visible, you can try to use only the states that are within 10 eV from the Fermi energy. You could select the states to use with CasidaKohnShamStates or CasidaKSEnergyWindow.

A new directory will appear named casida , where you can find the file casida/casida :

                E [eV]          [A]          [A]          [A]             
     1  9.27873948E+00 -8.66322347E-02  1.35464366E-01  3.03039382E-01  9.55386826E-02
     2  9.27873949E+00 -3.49255464E-02  3.07731812E-01 -1.47546412E-01  9.55386827E-02
     3  9.27873949E+00  3.30096452E-01  6.81112516E-02  6.39202247E-02  9.55386826E-02
     4  1.02487547E+01 -1.27468620E-08  2.59206471E-08  9.84932815E-09  8.35122117E-16
     5  1.02487547E+01 -1.86301991E-08 -2.33796142E-08  7.03750262E-08  5.24216450E-15
     6  1.02654344E+01 -2.28909989E-02  9.72392687E-02 -2.97086972E-02  9.75542455E-03
     7  1.02654344E+01 -4.30296098E-02  1.83261159E-02  9.31379991E-02  9.75542530E-03
     8  1.02654344E+01 -9.21223933E-02 -3.27224414E-02 -3.61218430E-02  9.75542560E-03

The <x>, <y> and <z> are the transition dipole moments:

$$ <x> = <\Phi_0|x|\Phi_I> \,;\qquad <y> = <\Phi_0|y|\Phi_I> \,;\qquad <z> = <\Phi_0|z|\Phi_I> $$

where $\Phi_0$ is the ground state and $\Phi_I$ is the given excitation. The oscillator strength is given by:

$$ f_I = \frac{2 m_e}{3 \hbar^2} \omega_I \sum_{n\in x,y,z} |<\Phi_0|n|\Phi_I>|^2\, $$

as the average over the three directions. The optical absorption spectrum can be given as the “strength function”, which is

$$ S(\omega) = \sum_I f_I \delta(\omega-\omega_I)\, $$

Note that the excitations are degenerate with degeneracy 3. This could already be expected from the $T_d$ symmetry of methane.

Note that within the degenerate subspaces, there is some arbitrariness (possibly dependent on the details of your compilation and machine) in the linear combinations of transitions. Therefore, you should not be concerned if you do not have the same results for the components of the transition dipole moments (above) and analysis of the excitations (below). However, the energies and resulting spectra should agree.

Further information concerning the excitations can be found in the directory casida/casida_excitations . For example, the first excitation at 9.27 eV is analyzed in the file casida/casida_excitations/00001 :

# Energy [eV] =    9.27874E+00
#  [A] =   -8.66322E-02
#  [A] =    1.35464E-01
#  [A] =    3.03039E-01
           1           5           1   5.8758985145978070E-011
           2           5           1  -4.1862480222542540E-002
           3           5           1 -0.66212260015570956     
           4           5           1  0.74612311897436945     
           1           6           1   7.6966629877645021E-003

These files contain basically the eigenvector of the Casida equation. The first two columns are respectively the index of the occupied and the index of the unoccupied state, the third is the spin index (always 1 when spin-unpolarized), and the fourth is the coefficient of that state in the Casida eigenvector. This eigenvector is normalized to one, so in this case one can say that 74.7% (0.8642) of the excitation is from state 3 to state 5 (one of 3 HOMO orbitals->LUMO) with small contribution from some other transitions.

Absorption spectrum

Absorption spectrum of methane calculated with time-propagation and with the Casida equation.
Absorption spectrum of methane calculated with time-propagation and with the Casida equation.

To visualize the spectrum, we need to broaden these delta functions with the utility oct-casida_spectrum (run in your working directory, not in casida ). It convolves the delta functions with Lorentzian functions. The operation of oct-casida_spectrum is controlled by the variables CasidaSpectrumBroadening (the width of this Lorentzian), CasidaSpectrumEnergyStep, CasidaSpectrumMinEnergy, and CasidaSpectrumMaxEnergy. If you run oct-casida_spectrum you obtain the file casida/spectrum.casida . It contains all columns of casida broadened. If you are interested in the total absorption spectrum, then you should plot the first and fifth columns. You should obtain a picture like the one on the right.

Comparing the spectrum obtained with the time-propagation in the Convergence of the optical spectra tutorial with the one obtained with the Casida approach using the same grid parameters, we can see that

You probably noticed that the Casida calculation took much less time than the time-propagation. This is clearly true for small or medium-sized systems. However, the implementation of Casida in Octopus has a much worse scaling with the size of the system than the time-propagation, so for larger systems the situation may be different. Note also that in Casida one needs a fair amount of unoccupied states which are fairly difficult to obtain.

If you are interested, you may also compare the Casida results against the Kohn-Sham eigenvalue differences in casida/spectrum.eps_diff and the Petersilka approximation to Casida in casida/spectrum.petersilka .