3.29 TDDFT - linear response
In FHI-aims, linear-response time-dependent density-functional theory (LR-TDDFT), i.e., Casida’s equation, is implemented for non-periodic systems. Currently, the adiabatic LDA kernel is supported and can be combined with different ground-state density functionals. Serial calculations can be carried out using linear-response time-dependent Hartree-Fock theory (LR-TDHF).
The original author of this functionality is Jan Kloppenburg, with significant help from Heiko Appel. The method, as well as reference data, benchmarks and basis sets, are published in Ref. [201] Please cite this reference when using the functionality.
Theory
The goal is to calculate excitation energies and corresponding oscillator strengths from
| (3.105) |
Linear response theory (see [52]) is the basis for this calculation. We construct
| (3.106) |
with the coupling kernel
| (3.107) |
In this notation I refer with the indices to occupied and with to virtual orbitals, while and denote the spin. The input energies are obtained from either ground state Hartree-Fock or DFT calculations. Going by this rule we contruct the matrix which then is solved for eigenvalues and eigenvectors. The excitation energies then follow from From the eigenvectors the oscillator strengths can be obtained from
| (3.108) |
with the being the spatial operator for the X direction and the others respectively with being the all electron ground state wave function and being the all electron excited state wave function for the state with excitation energy .
For the TDHF calculation mode, the kernel is modified to become
| (3.109) |
that has only the bare Coulomb part and the exact exchange part from Hartree-Fock theory. This Hartree-Fock Kernel creates a non-Hermitian matrix . Please not that this calculation mode is as yet only available for single processor runs due to the lack of a non-Hermitian parallel eigenvalue solver.
Available Kernels and libxc
As of now, only the pw-lda kernel is available for TDDFT calculation in aims, as well as other LDA lernels from libxc [194]. 22 2 http://libxc.gitlab.io Additionally, for the full TDDFT calculation it is possible to choose functionals at will that are available from this libxc. Importantly, the initial DFT calculation that generates the input energies for 3.107 is not restricted to only the same XC functional as the subsequent LR-TDDFT calculation. Different ground state functionals can be employed, though we recommend careful benchmarking for any new combination. For example, it might come in handy to be able to mix different hybrid functionals or do a DFT ground state calculation with a functional that does not provide an kernel and still be able to perform a TDDFT calculation on top of that using the supported LR-TDDFT kernel.
Basis sets for LR-TDDFT
Reference [201] provides extensive benchmarks, identifying basis sets that are applicable both to LR-TDDFT and BSE@GW calculations for molecules in FHI-aims.
In particular, for light-element molecules, we recommend the “tier2+aug2” basis sets, currently found in:
species_defaults/non-standard/Tier2_aug2
for these calculations.
Tags for general section of control.in
Tag: neutral_excitation(control.in)
Usage: neutral_excitation type
Purpose: Triggers the calculation of neutral excitations.
type: String that defines the type of calculation to be performed.
With the keyword neutral_excitation the user can specify the calculation mode for the linear response theory.
Also the keyword empty_states should be set to 1000, or the keyword calculate_all_eigenstates should be used, to make sure the code generates all
possible empty states provided from the basis set. This number will also be reduced automatically by the code to the maximum number that can be generated from the basis set.
Tag: tddft_kernel(control.in)
Usage: tddft_kernel string
Purpose: Specify the origin of the TDDFT kernel for 3.107
string: pw-lda/pz-lda or libxc
Both pw-lda or pz-lda are built-in options in FHI-aims. They are equivalent to the keywords defined in xc.
When using libxc, one must specify the desired kernels through keywords tddft_x and tddft_c. Note that libxc is only possible when the user has compiled aims with libxc binding.
Tag: tddft_x(control.in)
Usage: tddft_x string
Purpose: Set the desired exchange kernel to use from libxc. The definition is from libxc’s manual and can be found at the
libxc33
3
https://libxc.gitlab.io website.
string: The name of the selected exchange functional, i.e. XC_LDA_X
Tag: tddft_c(control.in)
Usage: tddft_c string
Purpose: Set the desired correlation kernel to use from libxc. The definition is from libxc’s manual and can be found at the
libxc website as well.
string: The name of the selected correlation functional, i.e. XC_LDA_C_PW
Tag: excited_mode(control.in)
Usage: excited_mode string
Purpose: Select which excitations will be calculated.
string: one of {singlet|triplet|both}. To calculate both singlets and triplets is set as the default when this keyword is omitted.
Tag: excited_states(control.in)
Usage: excited_states n
Purpose: Specify the number of excited state energies and oscillator strengths to be printed.
n: Integer number
With the keyword excited_states the user can specify the number of excited states that will be printed in the output. The default for this is 50 if there are that many. Normal production runs will generally have many more (depending on the basis set and the number of electrons involved) that can easily reach beyond 10000. So to avoid a really huge output from this routine this defaut is set rather low. Feel free to choose any number of your liking, if it should be too large it will automatically be defaulting to all excited states. At the end of a calculation the file TDDFT_LR_Spectrum_(singlet/triplet).dat will be written into the directory the FHI-aims program was run in. It contains all computed excitation energies and the corresponding oscillator strengths.
Tag: casida_reduce_matrix(control.in)
Usage: casida_reduce_matrix boolean
Purpose: Set to .true. if you want to reduce the energy range for the Kohn-Sham eigenvalues to be included in the computation.
boolean: .true. or .false.
Tag: casida_reduce_occ(control.in)
Usage: casida_reduce_occ x
Purpose: Specify the energy in Hartree below which the occupied states are cut off.
x: Cutoff energy in Hartree
Tag: casida_reduce_unocc(control.in)
Usage: casida_reduce_unocc x
Purpose: Specify the energy in Hartree above which the virtual states are cut off.
x: Cutoff energy in Hartree