Tutorial 6: Time-Dependent DFT¶
Version: all versions Tim Zuehlsdorf;
TDDFT in ONETEP¶
This tutorial aims at showing how to run a simple linear-response TDDFT calculation in ONETEP. Linear-response TDDFT is the main method of choice when computing optical excitations for large system sizes. In this formalism, excitation energies are directly obtained as the solutions to an effective eigenvalue equation. The approach implemented in ONETEP can be made to scale fully linearly with systems size, allowing for the computation of excitations in systems containing thousands of atoms.
In linear-response TDDFT, an excitation is expressed through a transition vector that can be
written in the basis of all possible Kohn-Sham transtions from occupied to unoccupied states.
Thus unlike in standard ground state DFT, where a good representation of the occupied KohnSham states is sufficient
to obtain accurate results, in a TDDFT calculation an equally good
representation of a subset of the unoccupied Kohn-Sham space is vital. Since the ONETEP
support functions are optimised in situ to ideally represent the occupied manifold, they generally
provide a relatively poor description of the unoccupied manifold, making them insufficient for
describing excitations in a linear-response framework. In practice, this problem is removed by
optimising a second set of support functions to ideally span a low energy subset of the conduction
space in a post-processing step after a Singlepoint
calculation. Together, the two sets of support
functions form an ideal representation of any given low energy excitation, thus enabling efficient
iand accurate TDDFT calculations in very large systems.
Setting up a TDDFT calculation in ONETEP¶
A TDDFT calculation in ONETEP thus proceeds in three separate steps:
- A standard ground state calculation using
Task: Singlepoint
. The code will write out.dkn
and.tightbox_ngwfs
files containing the valence density kernel and the NGWF support functions. - A conduction optimisation using
Task: Cond
. The code will read in the converged.dkn
and.tightbox_ngwfs
files from the ground-state optimisation and perform a postprocessingconduction optimisation
of some low energy part of the conduction space manifold. It will write out.dkn_cond
and.tightbox_ngwfs_cond
files containing an effective density kernel for the low energy conduction space, as well as the NGWF support functions for the conduction space. - A TDDFT calculation using
Task: Lr_tddft
. The code will read in the density kernels and support functions for both the ground state and the conduction space calculations and then calculate the lowest n excitations of the system, where n is determined by the keywordlr_tddft_num_states
.
In practice, it is possible to string these tasks together using Task: Singlepoint Cond Lr_tddft
in an input file that lists appropriate keywords for all three calculation types. The tasks will be
performed one after another, without the user having to restart the calculation in between.
An NN-substituted nanoribbon¶
We turn to a simple example of an excited state calculation in a periodic system, namely that of an infinitely long graphene nanoribbon with two nitrogen substitutions. We will aim to compute excited states that are associated with the substitution and that are thus relatively localised in character. In a first step, we aim to build an input file for a pristine graphene nanoribbon in periodic boundary conditions. A primitive unit cell for the nanoribbon in question can be found below:
1 2 3 4 5 6 7 8 |
|
To generate an appropriate input file, copy the above primitive unit cell block into a new input
file called ribbon.dat
. ONETEP does not make use of any k-point sampling and all calculations
are effectively done at the \(\Gamma\)-point. Therefore, in order to accurately simulate periodic structures
it is necessary to simulate supercells rather than primitive cells as would be done in standard
plane wave DFT codes. An appropriate supercell from the above primitive cell can be created by
repeating the primitive cell 7 times along the z-axis, translating the z-coordinates of the atoms
by the lattice vector of the primitive unit cell. The resulting supercell should contain 48 atoms
in total.
Now create an appropriate %block lattice_cart
for the system. The length of the supercell is
specified by the length of your primitive cell and the number of repeats of that cell. However,
the size of the unit cell in the x and y direction is free to specify by the user. Since the ONETEP
method uses periodic boundary conditions in all three directions, it is necessary to include enough
vacuum in the x and y direction of the simulation cell to prevent it from interacting with its
periodic neighbours. In this case, about 20 a0 of vacuum between any atoms of different periodic
images is a reasonable length.
Using the lessons learnt from previous tutorials add a %block species
and %block species_pot
block to your input file. Choose an appropriate NGWF radius (try 8 a0) and kinetic energy cutoff
(around 600 eV) for your calculation. When choosing the NGWF radius, note that ONETEP will
not allow you to pick an NGWF diameter that is larger than the dimensions of your simulation
cell, as this would cause an NGWF to interact with its periodic image. Finally, perform a
singlepoint calculation of the system. You can add a keyword do_properties: T
to the input
file. This will trigger the code to perform a properties calculation, write out a file .val_bands
containing all Kohn-Sham energies and write cube files of selected Kohn-Sham states around the
band gap.
Conduction optimisation¶
Once the ground state calculation is finished, it is necessary to perform a conduction optimisation.
First, set Task: Cond
and add a new block %block species_cond
to the input file. This block
is made up in an identical way as %block species
and specifies the number of support functions
and their radius in the conduction optimisation. In many practical examples, it is often advisable
to choose a larger NGWF radius for the conduction optimisation than for the ground state
calculation, especially if one is interested in lightly bound states, as unoccupied Kohn-Sham
states tend to be more diffuse than occupied ones (try 10 a0 for example).
A second keyword required for the conduction optimisation is the number of conduction states
that should be explicitly optimised (cond_num_states
). It is normally advisable to optimise only
well-bound states as unbound states are difficult to describe with localised orbitals. In order to do
so, have a look at the file .val_bands
and count the number of Kohn-Sham states with negative
energy that are unoccupied. Note that cond_num_states
expects the number of electrons to be
optimised as an input, thus in order to optimise the five lowest unoccupied Kohn-Sham states in
a spin-degenerate system, one should choose cond_num_states: 10
.
Once you have run the calculation, have a look at the output. You will find that ONETEP has generated a number of files such as cube files of unoccupied Kohn-Sham states expressed in terms of the optimised conduction NGWFs.
TDDFT calculation¶
We can now perform a full ONETEP TDDFT calculation of the system at hand. To do so, set
Task: Lr_tddft
in the input file. Furthermore, add the keywords lr_tddft_num_states: 6
,
lr_tddft_write_densities: T
and lr_tddft_analysis: T
. The code will compute the lowest 8 singlet excitations of the system and generate cube files for the electron, hole and transition
density for each excitation that can be visualised. Furthermore lr_tddft_analysis: T
triggers
a breakdown of the converged TDDFT eigenvectors into Kohn-Sham transitions, allowing you
to study which are the dominant transitions for each excitations.
Once you have performed the TDDFT calculation, look at the output file. You will see that the excitation energies and oscillator strengths for each of the excitations are printed out, as well as a detailed breakdown of excitation energies into Kohn-Sham transtions. Have a look at some of the cube files produced. Where are the excitations located in the system?
Nitrogen substitution¶
We can now move on from the case of the pristine nanoribbon to one with two nitrogen substitutions.
For this purpose, copy the input file ribbon.dat
to a new file ribbon_NN.dat
. In that file,
remove two C-H from the %block positions_abs
that are opposite to each other in the ribbon,
and replace them by two N at the same positions where the C were located.
Note that in order to run the calculation, you will have to add the nitrogen species to the
%block species_pot
, %block species
and %block species_cond
blocks.
Change the task to Task: Singlepoint Cond Lr_tddft
.
The code will run a ground state and conduction optimisation, followed by a TDDFT calculation for the full system.
Have a look at the output. How do the excited states change due to the nitrogen substitutions?
Where is each excited state located within the system?
Additional tasks¶
Substituting nitrogen atoms in the same place as carbon atoms does not yield a relaxed ground state structure, as the N-C bond is not of the same length as the C-C bond. Thus in order to obtain more realistic results for the substituted system, perform a geometry optimisation (see tutorial 4), followed by a ground state, conduction and TDDFT calculation of the full system. How do the results change? Furthermore, create a system where the nitrogen atoms are not substituted at exactly opposite positions in the structure, but an asymmetry along the z-axis is introduced. How does the character of the low energy excitations change?
Input files¶
All the files needed for the simulation can be downloaded from: