OpticalSpectrum

class OpticalSpectrum(configuration, kpoints=None, energies=None, broadening=None, bands_below_fermi_level=None, bands_above_fermi_level=None)

Constructor for the optical spectrum object.

Parameters:
  • configuration (BulkConfiguration) – The bulk configuration with an attached calculator for which to calculate the optical spectrum.
  • kpoints (MonkhorstPackGrid) – The k-points for which to calculate the transitions.
    Default: MonkhorstPackGrid(nx,ny,nz), where nx, ny, nz is the k-point sampling in the self-consistent calculation.
  • energies (PhysicalQuantity of type energy) – The energies for which to calculate the optical spectrum.
    Default: numpy.linspace(0, 4, 101)*eV
  • broadening (PhysicalQuantity of type energy) – The broadening parameter used for the optical spectrum.
    Default: 0.1 * eV
  • bands_below_fermi_level (int) – The maximum number of valence band states per principal spin channel to include at each k-point.
    Default: 4
  • bands_above_fermi_level (int) – The maximum number of conduction band states per principal spin channel to include at each k-point.
    Default: 4
broadening()
Returns:The broadening parameter used for the optical spectrum.
Return type:PhysicalQuantity of type energy
energies()
Returns:The energies for which to calculate the optical spectrum.
Return type:PhysicalQuantity of type energy
evaluateDielectricConstant(spin=None)

Function for evaluating the real part of the dielectric constant using the Kubo-Greenwood formalism.

Parameters:spin (Spin.Up | Spin.Down | Spin.Sum) – The spin to calculate for.
Default: Spin.Sum
Returns:The real part of the dielectric constant.
Return type:numpy.array
evaluateImaginaryDielectricConstant(spin=None)

Function for evaluating the imaginary part of the dielectric constant using the Kubo- Greenwood formalism.

Parameters:spin (Spin.Up | Spin.Down | Spin.Sum) – The spin to calculate for.
Default: Spin.Sum
Returns:The imaginary part of the dielectric constant.
Return type:numpy.array
evaluateImaginaryPolarizability(spin=None)

Function for evaluating the imaginary part of the polarizability using the Kubo-Greenwood formalism.

Parameters:spin (Spin.Up | Spin.Down | Spin.Sum) – The spin to calculate for.
Default: Spin.Sum
Returns:The imaginary part of the polarizability.
Return type:PhysicalQuantity with the unit Hartree**3 * vacuum_permitivity
evaluatePolarizability(spin=None)

Function for evaluating the real part of the polarizability using the Kubo-Greenwood formalism.

Parameters:spin (Spin.Up | Spin.Down | Spin.Sum) – The spin to calculate for.
Default: Spin.Sum
Returns:The real part of the polarizability.
Return type:PhysicalQuantity with the unit Hartree**3 * vacuum_permitivity
maxConductionStates()
Returns:The maximum number of conduction states to include.
Return type:int
maxValenceStates()
Returns:The maximum number of valence states to include.
Return type:int
metatext()
Returns:The metatext of the object or None if no metatext is present.
Return type:str | unicode | None
nlprint(stream=None)

Print a string containing an ASCII table useful for plotting the AnalysisSpin object.

Parameters:stream (python stream) – The stream the table should be written to.
Default: NLPrintLogger()
setMetatext(metatext)

Set a given metatext string on the object.

Parameters:metatext (str | unicode | None) – The metatext string that should be set. A value of “None” can be given to remove the current metatext.

Usage Examples

Calculate the OpticalSpectrum of silicon, save it to a file, and print out the dielectric tensor:

# Set up silicon crystal.
bulk_configuration = BulkConfiguration(
    bravais_lattice=FaceCenteredCubic(5.4306*Angstrom),
    elements=[Silicon, Silicon],
    cartesian_coordinates=[[ 0.     , 0.     , 0.],
                           [ 1.35765, 1.35765, 1.35765]]*Angstrom
    )
# Setup calculator.
numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=(6, 6, 6),
    )

# Setup DFT calculator using TB09 meta-GGA.
calculator = LCAOCalculator(
    basis_set=LDABasis.DoubleZetaDoublePolarized,
    exchange_correlation=MGGA.TB09LDA,
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    )
bulk_configuration.setCalculator(calculator)
bulk_configuration.update()

# Optical spectrum.
optical_spectrum = OpticalSpectrum(
    configuration=bulk_configuration,
    kpoints=MonkhorstPackGrid(15,15,15),
    energies=numpy.linspace(0,5,101)*eV,
    broadening=0.1*eV,
    bands_below_fermi_level=4,
    bands_above_fermi_level=4,
    )

nlsave('si_optical.hdf5', optical_spectrum)

# Print out the dielectric constant (Experimental value is 11.9).
print('Dielectric Tensor')
print(optical_spectrum.evaluateDielectricConstant()[:,:,0])

si_optical.py

Notes

  • We use the Kubo-Greenwood formula to calculate the susceptibility tensor [oHar70]

    \[\chi_{ij}(\omega) = - \frac{ e^2 \hbar^4}{m^2 \epsilon_0 V \omega^2} \sum_{nm} \frac{f(E_m)-f(E_n)}{E_{nm}-\hbar \omega - i \Gamma} \pi_{nm}^i \pi_{mn}^j,\]

    where \(\pi_{nm}^i\) is the \(i\)-th component of the dipole matrix element between state \(n\) and \(m\), \(V\) the volume, \(\Gamma\) the broadening, and \(f\) the Fermi function.

  • The response coefficients, the relative dielectric constant, \(\epsilon_r\), polarizability, \(\alpha\), and optical conductivity, \(\sigma\), are related to the susceptibility as

    \[\begin{split}\epsilon_r(\omega) &= (1 + \chi(\omega) ),\end{split}\]\[\begin{split}\alpha(\omega) &= V \epsilon_0 \chi(\omega),\end{split}\]\[\begin{split}\sigma(\omega) &= - i \omega \epsilon_0 \chi(\omega).\end{split}\]

    The derivation of the last relation can be found in Ref. [oMar04].

    Note

    Accounting for spin, the relation between the dielectric constant and the susceptibility can be written as \(\epsilon_r(\omega) = 1 + \sum_\sigma \chi_\sigma(\omega).\) The dielectric constant has no explicit spin dependency. For calculations of type polarized, textual representations of the susceptibility will show the spin resolved result, i.e. Spin.Up and Spin.Down components while the sum over spins always is given for the dielectric constant. Nonetheless, it is possible to obtain the “spin-resolved dielectric constant” using the corresponding query methods with either Spin.Up or Spin.Down for the spin parameter. In these cases, the vacuum contribution is split up equally between up and down components. This feature is maintained for backward compatibility reasons and might disappear in future releases.

  • The refractive index, \(n\), is related to the complex dielectric constant through

    \[n + i \kappa = \sqrt{\epsilon_r},\]

    here \(\kappa\) is the extinction coefficient. In terms of the real (\(\epsilon_1\)) and complex parts (\(\epsilon_2\)) of the dielectric constant

    \[\begin{split}n &= \sqrt{\frac{\sqrt{\epsilon_1^2+\epsilon_2^2}+\epsilon_1}{2}},\end{split}\]\[\begin{split}\kappa &= \sqrt{ \frac{ \sqrt{ \epsilon_1^2+ \epsilon_2^2} - \epsilon_1}{2}}.\end{split}\]
  • The optical absorption coefficient is related to the extinction coefficient through [oGri99]

    \[\alpha_a = 2 \frac{\omega}{c} \kappa.\]

    The reflectivity is given by [oDes05]

    \[r = \frac{(1-n)^2 + \kappa^2}{(1+n)^2 + \kappa^2}.\]
  • The definition of bands_above_fermi_level and bands_below_fermi_level depends on the spin type of the calculation, as described in the Notes of the EffectiveMass analysis object.

Thus from the dielectric constant a number of other optical properties are easily obtained. For further background information on optical spectra see Optical response functions.

[oDes05]M. P. Desjarlais. Density functional calculations of the reflectivity of shocked xenon with ionization based gap corrections. Contrib. Plasma Phys., 45(3-4):300–304, 2005. doi:10.1002/ctpp.200510034.
[oGri99]David J. Griffiths. Introduction to Electrodynamics (3rd Edition). Prentice Hall, 1999.
[oHar70]Walter A. Harrison. Solid State Theory. McGraw-Hill, 1970.
[oMar04]Richard M. Martin. Electronic structure: Basic theory and practical methods. Cambridge University Press, New York, 2004.