mirror of https://github.com/abinit/abinit.git
642 lines
33 KiB
Markdown
642 lines
33 KiB
Markdown
---
|
|
authors: XG, DCA
|
|
---
|
|
|
|
# The DFPT (respfn) code
|
|
|
|
This page complements the main [[help:abinit]], for matters related
|
|
to responses to perturbations computed with DFPT.
|
|
It will be easier to discover the present file with the help of the [[tutorial:rf1|DFPT1 tutorial]].
|
|
|
|
<a id="intro"></a>
|
|
## 0 Introducing the computation of responses
|
|
|
|
ABINIT can compute the response to different perturbations, and provide access
|
|
to quantities that are second derivatives of total energy (2DTE) with respect
|
|
to these perturbations.
|
|
Presently, they can be of five types:
|
|
|
|
1. phonons
|
|
2. static homogeneous electric field
|
|
3. strain
|
|
4. magnetic field (coupling to the spin, not the orbital motion)
|
|
5. long-wave perturbations (including magnetic field that couples to the orbital motion)
|
|
|
|
The physical properties connected to 2DTE with respect to perturbations (1) and (2) are the phonon
|
|
dynamical matrices, the dielectric tensor, and the Born effective charges,
|
|
while the additional strain perturbation (3), mixed with phonon and electric
|
|
field leads to elastic constant, internal strain, and piezoelectricity.
|
|
The magnetic field perturbation is a recent addition to ABINIT, and will not be detailed at present.
|
|
|
|
|
|
More functionalities of the computation of responses should be implemented
|
|
sooner or later. Some third derivatives of the
|
|
total energy (3DTE) are also implemented. The 3DTE might give phonon-phonon
|
|
coupling, non-linear electric response, anharmonic elastic constants, Gruneisen parameters,...
|
|
|
|
The basic quantities that ABINIT will compute are the **first-order** derivatives
|
|
of the wavefunctions (1WF) with respect to these perturbations. The later
|
|
calculation of the 2DTE and 3DTE from these 1WF is an easy computational task:
|
|
the construction of the 2DTE with respect to perturbations j1 and j2
|
|
involves mainly evaluating matrix elements between the 1WF of j1 and/or the 1WF of j2.
|
|
|
|
A basic introduction to the theory is given in [[cite:Gonze2005]]. You might also benefit from reading the longer review [[cite:Baroni2001]].
|
|
Further details are in [[cite:Gonze1997]] and [[cite:Gonze1997a]].
|
|
|
|
The calculation of the 1WF for a particular perturbation is done using a
|
|
variational principle and an algorithm rather similar to the one used to find
|
|
the unperturbed ground-state wavefunctions. Thus, a lot of technical details
|
|
and parameters are the same for both ground-state and response-function
|
|
calculations. This justifies the development of one unique code for these two
|
|
classes of properties: many of the routines of abinit are common in these
|
|
calculations, or had to be duplicated, but with relatively small modifications.
|
|
|
|
The ABINIT code performs a rather primitive analysis of the calculated 2DTEs.
|
|
For example, it gives the phonon frequencies, electronic dielectric tensor and
|
|
effective charges. But the main output of the code is the Derivative DataBase
|
|
(DDB): a file that contains the set of all 2DTEs and 3DTEs calculated by the
|
|
code. This DDB can be manipulated by the MRGDDB code, and fully analyzed by
|
|
the Anaddb code. See the corresponding [[help:mrgddb]] and [[help:anaddb]].
|
|
|
|
<a id="1"></a>
|
|
## 1 Description of perturbations
|
|
|
|
Perturbations are described by two indices, **ipert** and **idir**, and possibly a wavevector.
|
|
The first index runs (at present) from 1 to [[natom]]+11, while the second one runs from 1 to 3.
|
|
We also define the index of the perturbation, called *pertcase*, equal to idir + 3 * (ipert - 1).
|
|
Accordingly, pertcase runs from 1 to 3 * (natom + 11), and will be
|
|
needed to identify output and input files, see section 6.
|
|
|
|
### 1.1 Atomic displacements / phonons
|
|
|
|
The perturbation of the **phonon** type is the displacement of one atom along
|
|
one of the axis of the unit cell, by a unit of length (in reduced coordinates).
|
|
It is characterized by the above-mentioned two integer numbers and one wavevector.
|
|
The two integer numbers are the number of the moved atom, which will be noted
|
|
**ipert**, and the number of the axis of the unit cell, which will be noted **idir**,
|
|
for the direction of the displacement of the moved atom.
|
|
|
|
!!! important
|
|
|
|
*ipert* for phonon perturbation can have values between 1 and [[natom]],
|
|
*idir* can have values between 1 and 3.
|
|
|
|
The set of all possible phonon perturbations for one wavevector has thus 3 * [[natom]] elements.
|
|
From this basis set, all phonons can be constructed by linear combination.
|
|
The set of atoms to be moved in one dataset of ABINIT is determined by the input
|
|
variable [[rfatpol]]. The set of directions to be considered in one dataset of
|
|
ABINIT is determined by the input variable [[rfdir]]. The wavevector to be
|
|
considered in one dataset of ABINIT is determined by the input variables
|
|
[[nqpt]], [[qpt]], and [[qptnrm]].
|
|
|
|
### 1.2 Electric field (and associated change of wavevector)
|
|
|
|
The perturbations of the **electric field** type are
|
|
|
|
* the application of the homogeneous electric field along the axes of the reciprocal lattice
|
|
* the derivative of the Hamiltonian with respect to the electronic wavevector along
|
|
the axes of the reciprocal lattice (which allows to compute derivatives of wavefunctions with respect to their wavevector),
|
|
an **auxiliary** quantity needed **before** the application of the homogeneous electric field.
|
|
The perturbation is the change of wavevector by dk in the Hamiltonian, hence the perturbation
|
|
is referred to as the derivative dk perturbation ("ddk" perturbation).
|
|
|
|
Note 1
|
|
: the ddk perturbation is defined as the derivative with respect to k
|
|
in reduced coordinates; this is equivalent to applying a linear perturbation
|
|
of strength $2\pi$ along the conjugate direction in real space. This statement
|
|
comes from the derivation of the phase factor $\exp(i2\pi kr)$ with respect to
|
|
k in reduced coordinates.
|
|
|
|
Note 2
|
|
: in case the electric field type perturbation is computed inside a
|
|
finite electric field, the derivative of the Hamiltonian with respect to the
|
|
electronic wavevector is not computed: everything is done by a finite-
|
|
difference technique. Also, the definition of the homogeneous electric field
|
|
perturbation is not along the axes of the reciprocal lattice, but in cartesian
|
|
coordinates. Sorry for the possible confusion ...
|
|
|
|
These electric-type perturbations are also characterized by two numbers:
|
|
*ipert* being natom + 1 for the ddk perturbation and natom + 2 for the electric
|
|
field, and *idir* being 1, 2 or 3, as for phonon perturbations. Although the
|
|
possibility of electric field characterized by a non-zero wavevector is
|
|
envisioned for a future version of the code, at present only homogeneous
|
|
fields are considered. So the wavevector of the electric field type
|
|
perturbations is $\Gamma$ (q=0).
|
|
|
|
### 1.3 Strain
|
|
|
|
The perturbations of the **strain** type are either an uniaxial strain or a
|
|
shear strain. The strain perturbations are considered in cartesian coordinates
|
|
(x,y,z). They are characterized by two numbers, with *ipert* being natom + 3 for
|
|
the uniaxial strains, and natom + 4 for the shear strains, and *idir* describes
|
|
the particular component.
|
|
|
|
Explicitly, for uniaxial strains:
|
|
|
|
* idir = 1 gives the xx strain perturbation,
|
|
* idir = 2 gives the yy strain perturbation,
|
|
* idir = 3 gives the zz strain perturbation,
|
|
|
|
while for shear strains:
|
|
|
|
* idir=1 gives the yz strain perturbation,
|
|
* idir=2 gives the xz perturbation,
|
|
* idir=3 gives the xy perturbation.
|
|
|
|
Note that the "rigid-atom" elastic constants, as output of ABINIT, are those
|
|
obtained with **frozen** internal coordinates. The internal coordinate
|
|
relaxation, needed to give "physical" elastic constants can be handled through
|
|
the knowledge of the internal strain and dynamical matrix at $\Gamma$, in ANADDB.
|
|
Of course, if all the internal coordinate are fixed by symmetry, all the
|
|
internal strains vanish, and the "rigid-atom" and "physical" elastic constants are equal.
|
|
Limitations of the present implementation (as of v5.7):
|
|
|
|
* Symmetry is presently used to skip redundant k points in the BZ sum,
|
|
but not to skip redundant strain perturbations.
|
|
|
|
### 1.4 Zeeman magnetic field
|
|
|
|
The perturbations of the **Zeeman magnetic field** type couple to the spin of the electrons,
|
|
not to their orbital moment. They are considered in cartesian coordinates (x,y,z).
|
|
They are characterized by two numbers, with *ipert* being natom+5, and
|
|
*idir* being 1 for the x direction, 2 for the y direction and 3 for the z direction.
|
|
Calculations for such perturbations are driven by the input variable [[rfmagn]].
|
|
Such perturbation only have a relevance in the non-collinear-spin case, with [[nspinor]]=2.
|
|
|
|
### 1.5 Long-wave type perturbations.
|
|
|
|
Long-wave type perturbations are related to the long-wave formalism developed by M. Stengel,
|
|
M. Royo, and coworkers over the years. See for example [[cite:Royo2019]].
|
|
Also, similar quantities have been used (and implemented before) by
|
|
L. Baguet and M. Torrent for the specific computation of Raman spectra,
|
|
see the section 3.2.3 of [[cite:Gonze2020]] and the section 5 of [[cite:Romero2020]].
|
|
The description of the long-wave formalism goes beyond this introductory user guide.
|
|
If interested, the user should read the above references, as well as the description of the
|
|
[[rf2_dkdk]] and [[rf2_dkde]] input variables. This formalism allows one to define
|
|
a magnetic field that couples with the orbital motion, complementary to the one that couples to the
|
|
spin-magnetization.
|
|
|
|
The associated values of **ipert** are [[natom]]+8 (ddq), [[natom]]+10 (dkdk) and [[natom]]+11 (dkde).
|
|
|
|
The values [[natom]]+6 and [[natom]]+7 had been booked, but their implementation has been halted in 2015. They should be removed and reused.
|
|
|
|
|
|
|
|
!!! summary
|
|
|
|
To summarize, the perturbations are characterized by two numbers, **ipert** from
|
|
1 to [[natom]] + 11, and **idir**, from 1 to 3, as well as one wavevector (that is
|
|
gamma when a non-phonon perturbation is considered). A number called
|
|
**pertcase** combines *ipert* and *idir*, and runs from 1 to 3 * ([[natom]] + 11).
|
|
Not all values of **ipert** in the range from 1 to [[natom]]+11 are attributed, though.
|
|
|
|
The 2DTE, being derivative of the total energy with respect to two
|
|
perturbations, will be characterized by two sets of (idir,ipert), or by two
|
|
pertcase numbers, while 3DTE will need three such sets or pertcase numbers.
|
|
In addition they will depend on one wavevector (for 2DTE) or two wavevectors (for 3DTE).
|
|
|
|
In the non-stationary implementation of the 2DTE, used for off-diagonal elements in ABINIT, the first pertcase
|
|
corresponds to the perturbation that gives the derivative of the potential,
|
|
and the second pertcase corresponds to the perturbation that gives the
|
|
derivative of the wavefunctions.
|
|
|
|
<a id="2"></a>
|
|
## 2 Filenames and input of ground-state wavefunctions
|
|
|
|
The **same** 'files' file as for GS calculations is used for RF calculations.
|
|
Actually, in the multi-dataset mode, one will be able to make in one ABINIT
|
|
run, ground-state computations as well as response-function computations, so
|
|
that the 'files' file must be the same.... The 'input' file will have many
|
|
common input variables for these different cases, but also some separate ones.
|
|
|
|
Two ground-state wavefunction files might be needed:
|
|
|
|
* the file of ground-state wavefunctions at a set of wavevectors, named k-points
|
|
* the file of ground-state wavefunctions at the corresponding k+q, where q is the wavevector of the perturbation
|
|
|
|
These files also contain the corresponding eigenvalues.
|
|
|
|
Note that the second file (k+q) will be identical to the first one (k), in the
|
|
case of zero-wavevector perturbation. Also, if the q-wavevector maps the
|
|
k-point grid onto itself (q being the difference between points that belong to
|
|
the grid), all the information on the k+q grid is contained in the k grid, a
|
|
fact that ABINIT is able to exploit.
|
|
|
|
One should have a look at the input variables [[irdwfk]], and [[irdwfq]], for
|
|
a description of the ground-state wavefunction file names generated from the
|
|
root names provided in the 'files' file. In the multi-dataset mode, the
|
|
following input variables will be relevant: [[getwfk]], and [[getwfq]]. The
|
|
file names of the ground-state wavefunction file follow the same convention as
|
|
for the ground-state case. Thus, read the
|
|
[[help:abinit#files-file|corresponding section]] of the abinit help file, if needed.
|
|
|
|
In the case of an electric field perturbation, the output 1WF of the
|
|
corresponding ddk perturbation is needed as input. If the option [[rfelfd]]=1
|
|
is used, then the code will take care of doing first the derivative dk
|
|
perturbation calculation, then write the 1WF at the correct place, as an
|
|
output file, then begin the homogeneous field perturbation calculation.
|
|
Usually, the use of [[rfelfd]]=1 is not recommended, as the ddk computation is
|
|
the most often done with different parameters as the electric field perturbation,
|
|
a dataset with [[rfelfd]]=2 being followed with a dataset with [[rfelfd]]=3.
|
|
|
|
The nomenclature for first-order wavefunction files is also given in the
|
|
[[help:abinit#files-file|abinit help]] file, but it is worth to specify it in more
|
|
detail here. The root name is formed from the string of character in the third
|
|
line of the 'files' file (for an input file) or the fourth line of the 'files'
|
|
file (for an output file), that is complemented, in the multi-dataset mode, by
|
|
' **_DS** ' and the dataset number, and then,
|
|
the string ' **_1WF** ' is added, followed by pertcase (the index of the perturbation). This gives, e.g., for
|
|
a 'files' file whose fourth line is '/tmp/o', for the dataset number 3, and a
|
|
perturbation corresponding to the displacement of the second atom in the x
|
|
direction (pertcase=4), the following name of the corresponding 1st-order
|
|
wavefunction output file:
|
|
|
|
/tmp/o_DS3_1WF4
|
|
|
|
Such a file might be used as input of another computation, or of another dataset.
|
|
|
|
The relevant input variables are: [[ird1wf]], and [[irdddk]], as well as
|
|
[[get1wf]], and [[getddk]], in the multi-dataset mode.
|
|
|
|
<a id="symmetries"></a>
|
|
## 3 The use of symmetries
|
|
|
|
In order to understand correctly the behaviour of response-function runs,
|
|
some information on the use of symmetries must be given.
|
|
|
|
Some perturbations (including their wavevector) may be invariant for some
|
|
symmetries. The code is able to use symmetries to skip perturbations of which a
|
|
symmetric has already been calculated (except in the case of strain
|
|
perturbations). ABINIT is also able to use the symmetries that keeps the
|
|
perturbations invariant, to reduce the number of k points needed for the
|
|
sampling of electronic wavefunctions in the Brillouin zone (although this
|
|
feature is not optimal yet). There is one exception to this, the ddk
|
|
perturbation, for which the spatial symmetries cannot be used yet.
|
|
|
|
In any case, unlike for the ground-state, the input k-point set for response
|
|
function should NOT have been decreased by using spatial symmetries, prior to
|
|
the loop over perturbations (see section 4). Only the time-reversal symmetry,
|
|
retained by calculations at q=0, ought to be used to decrease this input
|
|
k-point set. Considering each perturbation in turn, ABINIT will be able to
|
|
select from this non-reduced set of k-points, the proper k-point set,
|
|
automatically, by using the symmetries that leave each perturbation invariant.
|
|
|
|
Accordingly, the preferred way to generate the k-point grid is of course to
|
|
use the [[ngkpt]] or [[kptrlatt]] input variables, with different values of [[kptopt]]:
|
|
|
|
* kptopt = 1 for the ground state
|
|
* kptopt = 2 for response functions at q=0
|
|
* kptopt = 3 for response functions at non-zero q
|
|
|
|
<a id="4"></a>
|
|
## 4 Organisation of response-function computations
|
|
|
|
In agreement with the information provided in the previous sections, different
|
|
cases can be distinguished.
|
|
|
|
When one considers the response to an atomic displacement with q=0, the
|
|
following procedure is suggested:
|
|
|
|
* first, a self-consistent ground-state computation with the restricted set of k-points
|
|
in the Irreducible Brillouin Zone (with [[kptopt]]=1)
|
|
|
|
* second, a self-consistent response-function computation with the atomic displacement perturbation,
|
|
with the half set of k-points (with [[kptopt]]=2)
|
|
|
|
When one considers the response to an electric field (with q=0), the following
|
|
procedure is suggested:
|
|
|
|
* first, a self-consistent ground-state computation with the restricted set of k-points
|
|
in the Irreducible Brillouin Zone (with [[kptopt]]=1)
|
|
|
|
* second, a non-self-consistent response-function computation of the d/dk perturbation,
|
|
with the half set of k-points (with [[kptopt]]=2, and [[iscf]]=-3)
|
|
|
|
* third, a self-consistent response-function computation of the electric field perturbation,
|
|
with the half set of k-points (with [[kptopt]]=2)
|
|
|
|
When one considers the response to an atomic displacement in the special case
|
|
where q connects k-points that both belong to the special k-point grid, the
|
|
following procedure is suggested:
|
|
|
|
* first, a self-consistent ground-state computation with the restricted set of k-points
|
|
in the Irreducible Brillouin Zone (with [[kptopt]]=1)
|
|
|
|
* second, a self-consistent response-function computation of the atomic displacement perturbation,
|
|
with the full set of k-points (with [[kptopt]]=3)
|
|
|
|
When one considers the response to an atomic displacement for a general q
|
|
point, the following procedure is suggested:
|
|
|
|
* first, a self-consistent ground-state computation with the restricted set of k-points
|
|
in the Irreducible Brillouin Zone (with [[kptopt]]=1)
|
|
|
|
* second, a non-self-consistent ground-state run with the set of k+q points, that might be
|
|
reduced thanks to symmetries (with [[kptopt]]=1)
|
|
|
|
* third, a self-consistent response-function computation of the atomic displacement perturbation,
|
|
with the full set of k-points (with [[kptopt]]=3)
|
|
|
|
Of course, these different steps can be combined when a set of responses is
|
|
looked for. In particular, the computations of responses at gamma, in the case
|
|
where the full dynamical matrix as well as the dielectric tensor and the Born
|
|
effective charges are needed, can be combined as follows:
|
|
|
|
* first, a self-consistent ground-state computation with the restricted set of k-points
|
|
in the Irreducible Brillouin Zone (with [[kptopt]]=1)
|
|
|
|
* second, the three non-self-consistent response-function computations (one for each direction)
|
|
of the d/dk perturbation, with the half set of k-points (with [[kptopt]]=2, and [[iscf]]=-3)
|
|
|
|
* third, all the self-consistent response-function computations of the electric field perturbations
|
|
and of the atomic displacements, with the half set of k-points (with [[kptopt]]=2)
|
|
|
|
Still, computations of perturbations at different q wavevectors cannot be
|
|
mixed. But they can follow the other computations. Supposing that
|
|
perturbations at q=0 and a general q point are to be performed, they will be combined as follows:
|
|
|
|
* first, a self-consistent ground-state computation with the restricted set of k-points
|
|
in the Irreducible Brillouin Zone (with [[kptopt]]=1)
|
|
|
|
* second, the three non-self-consistent response-function computations (one for each direction)
|
|
of the d/dk perturbation, with the half set of k-points (with [[kptopt]]=2, and [[iscf]]=-3)
|
|
|
|
* third, all q=0 self-consistent response-function computations of the electric field perturbations
|
|
and of the atomic displacements, with the half set of k-points (with [[kptopt]]=2)
|
|
|
|
* fourth, a non-self-consistent ground-state computation with the set of k+q points,
|
|
that might be reduced thanks to symmetries (with [[kptopt]]=1)
|
|
|
|
* fifth, the self-consistent response-function computations of the atomic displacement perturbations
|
|
with a q wavevector, with the full set of k-points (with [[kptopt]]=3)
|
|
|
|
Note that the error in the 2DTE is **linear** in the **ground-state**
|
|
wavefunction error (unlike the error due to the 1WFs). Moreover, a large
|
|
prefactor is associated with this source of error (it can even cause cause the
|
|
instability of the SCF procedure). As a consequence, the convergence of the
|
|
ground-state wavefunction should be very good. The same is true at the level
|
|
of the ddk wavefunctions.
|
|
|
|
As mentioned in the introduction, inside the response-function part of the
|
|
code, the calculation proceeds in two steps: first the calculation of the
|
|
first-order derivative of the wavefunctions (1WF), then the combinations of
|
|
these 1WF to build the 2DTE and 3DTE.
|
|
|
|
In an initialisation part, the input file and all the ground-state files are
|
|
read, and a few basic quantities are constructed.
|
|
|
|
In the first part, every perturbation is examined, one at a time, separately:
|
|
|
|
* A file containing previous RF wavefunctions is eventually read.
|
|
|
|
* The minimisation of the variational expression is performed, and this procedure generates
|
|
the 1WF as well as the first-order density and potential.
|
|
|
|
* It is possible, knowing these quantities for the perturbation ipert1, to construct all the 2DTE
|
|
with respect to this perturbation and any ipert2, except for ipert2 being an homogeneous electric field,
|
|
in which case the derivative of the ground-state wavefunctions with respect to their wavevector (ddk) is also needed.
|
|
This feature has been implemented for ipert2 being any phonon (of the same wavevector than ipert1),
|
|
or an homogeneous electric field.
|
|
|
|
* The first-order wavefunctions (1WF) are written as well as the first-order density or potential (if requested).
|
|
|
|
<a id="5"></a>
|
|
## 5 List of relevant input variables
|
|
|
|
Some input variables are new for RF calculations.
|
|
Also, a subset of the ABINIT input variables have a modified meaning or a modified
|
|
behaviour in case of such calculations. Here is the list of the most relevant input
|
|
variables.
|
|
Note that the code will do a RF calculation ([[optdriver]]=1) when one of
|
|
[[rfphon]] or [[rfelfd]] or [[rfstrs]] is non-zero.
|
|
|
|
* [[amu]]
|
|
* [[asr]]
|
|
* [[chneut]]
|
|
* [[getwfk]], [[getwfq]], [[get1wf]], [[getddk]]
|
|
* [[irdwfk]], [[irdwfq]], [[ird1wf]], [[irdddk]]
|
|
* [[iscf]]
|
|
* [[nkpt]]
|
|
* [[nqpt]], [[qpt]], [[qptnrm]]
|
|
* [[nsym]]
|
|
* [[rfatpol]]
|
|
* [[rfdir]]
|
|
* [[rfelfd]]
|
|
* [[rfphon]]
|
|
* [[rfstrs]]
|
|
* [[dfpt_sciss]]
|
|
* [[tolwfr]], [[toldfe]], [[tolvrs]]
|
|
|
|
<a id="output"></a>
|
|
## 6 The different output files
|
|
|
|
Output from the code goes to several places listed below.
|
|
|
|
**6.1. The log file**
|
|
|
|
This file is the same as the log file of the abinit code when computing ground
|
|
state (GS) results. Possibly, the output of datasets related to response
|
|
functions will be intertwined with those concerned with ground-state case. The
|
|
purpose of this file is the same as in the GS case, and the use of error messages is unchanged.
|
|
|
|
<a id="6.2"></a>
|
|
**6.2. The main output file**
|
|
|
|
This file is the same as the main output file of the abinit code when
|
|
computing ground state (GS) results. Possibly, the output of datasets
|
|
related to response functions will be intertwined with those concerned with
|
|
ground-state case. We explain here the parts related to the RF computation.
|
|
|
|
The initialisation part is the same as for the GS. So, the reader is advised
|
|
to read the [[help:abinit#outputfile|section 6.2]] of the abinit help file,
|
|
as well as the first paragraph of the section [[help:abinit#6.3|6.3]] of
|
|
this file. Afterwards, the content of the main output file differs a bit...
|
|
|
|
The main output file reports on the initialisation of the ground-state
|
|
wavefunctions at k+q, then the loop on the perturbations begins. For each
|
|
perturbation, there is:
|
|
|
|
* a short description of the perturbation
|
|
* the timing information
|
|
* the report on the initialisation of the 1WF
|
|
* then the iterations for the minimisation begin, and the output file describes
|
|
the number of the iteration, the second derivative of the total energy obtained (2DTEnergy in Ha),
|
|
the change in 2DTEnergy since last iteration, the maximum residual over all bands and k points,
|
|
and the square of the potential residual.
|
|
* after the iterations are completed, the residuals are reported
|
|
* in case of the derivative dk perturbation, ek2 (to be explained) and the f-sum rule ratio value are printed.
|
|
The f-sum rule ratio should be close to 1 (not when ecutsm/=0, however).
|
|
* then the components of the 2DTEnergy, broken in at most 14 pieces, depending on the perturbation
|
|
* then the 2DTEnergy in Hartree and in eV
|
|
* then the relaxation contribution (caused by changes in wavefunctions), and the non-relaxation contribution
|
|
(Ewald and frozen-wavefunction contribution)
|
|
* then the 2DTEnergy evaluated using a non-variational expression.
|
|
|
|
After the computation of each perturbation, the output file reports on the
|
|
2DTE matrix elements. This part is not executed if the only perturbation is
|
|
the derivative dk perturbation. It will give the following information:
|
|
|
|
* if [[prtvol]]=1 or bigger, the full detail of every contribution to the 2DTE in reduced coordinates.
|
|
* the 2DTE in reduced coordinates.
|
|
* then it will use the 2DTE to perform already some analysis of the data without use the Mrgddb and Anaddb codes, namely:
|
|
the full dynamical matrix (cartesian coordinates, masses included) the effective charges, and the dielectric tensor,
|
|
the phonon frequencies (including the analysis of the non- analyticity if we are at $\Gamma$).
|
|
Note that phonon frequencies lower than 1.0d-8Ha (absolute value) are automatically set to zero,
|
|
while imaginary phonon frequencies (square roots of negative eigenvalues - indicating an instability)
|
|
are printed as negative (this facilitates the post-processing).
|
|
|
|
For this last analysis, the code assumes that the whole set of perturbations
|
|
in a class has been calculated, either all the phonon perturbations or the
|
|
homogeneous electric field perturbation, or both. If this is not true, the
|
|
code will give results that may be wrong in the case that the reduced system
|
|
of coordinates is not cartesian (for the dynamical matrix, the effective
|
|
charge tensor of the dielectric matrix), or in all case wrong (the phonon
|
|
frequencies); also the code will put zero in the matrix elements that have not been calculated.
|
|
A Warning message is issued if the above information cannot be trusted.
|
|
|
|
Finally, the code provides the timing information.
|
|
|
|
<a id="6.3"></a>
|
|
**6.3. The first-order wavefunction (1WF) files**
|
|
|
|
These are unformatted data files containing the planewaves coefficients of all
|
|
the wavefunctions, written in the following format. First, the header (see
|
|
[[help:abinit#header|section 6.4]] of the abinit help file), followed by
|
|
|
|
```fortran
|
|
bantot=0 <-- counts over all bands
|
|
index=0 <-- index for the wavefunctions
|
|
do isppol=1,nsppol
|
|
do ikpt=1,nkpt
|
|
write(unit) npw1,nspinor,nband <-- for each k point
|
|
write(unit) kg(1:3,1:npw1) <-- plane wave reduced coordinates
|
|
do iband=1,nband1
|
|
write(unit) (eigen1(jband+(iband-1)*nband+bantot),jband=1,2*nband) <-- column of eigenvalue matrix
|
|
write(unit) (cg(ii+index),ii=1,2*npw1*nspinor) <-- wavefunction coefficients
|
|
enddo for a single band and k point
|
|
bantot=bantot+nband
|
|
index=index+2*npw1*nspinor*nband1
|
|
enddo
|
|
enddo
|
|
```
|
|
|
|
In this code section, npw1(ikpt) is the number of planewaves in the basis at
|
|
the k+q point, nband1(ikpt) is likewise the number of bands at the k point
|
|
(which may vary among k points depending on occopt), and the factor of 2 in
|
|
writing the wavefunction results from the fact that it is complex.
|
|
eigen1 is the array that contains the matrix element of the first-order
|
|
Hamiltonian between the different ground-state wavefunctions. It could be used
|
|
to build the electron-phonon coupling and deformation potentials.
|
|
Note that the format for first-order WF file differs from the format used for
|
|
the ground-state WF file by the fact that eigen1 is now an array, and no more
|
|
a vector, and is written with the corresponding wf, and no more before the
|
|
writing of all wf for one k point.
|
|
|
|
**6.4. The first-order density files**
|
|
|
|
They consist of the header lines, followed by
|
|
|
|
```fortran
|
|
write(unit) (rhor1(ir),ir=1,cplex*ngfft(1)*ngfft(2)*ngfft(3))
|
|
```
|
|
|
|
Here, rhor1 is the change of electron density in electrons/Bohr^3. The
|
|
parameter cplex is 1 when q=0 and 2 when q/=0 . Indeed, for q=0, the density
|
|
change is a real quantity, while it is complex in general when q/=0 .
|
|
|
|
<a id="ddb"></a>
|
|
**6.5. The derivative database (DDB)**
|
|
|
|
It is made of two parts. The first should allow one to unambiguously identify
|
|
the run that has generated the DDB, while the second part contains the 2DTE,
|
|
grouped by blocks of data.
|
|
|
|
Note that the DDB output of the ABINIT code can be merged with other DDBs as
|
|
described in the [[help:mrgddb|Mrgddb help file]].
|
|
|
|
The first part contains:
|
|
|
|
* the DDB version number (that defines the structure of the DDB)
|
|
* seven parameters needed for the dimensionning of the DDB file
|
|
([[natom]], [[nkpt]], [[nsppol]], [[nsym]], [[ntypat]], [[occopt]], and [[nband]] -
|
|
or the array [[nband]] ([[nkpt]]* [[nsppol]]) if [[occopt]]=2)
|
|
* different information on the run that generated the 2DTE
|
|
([[acell]],[[amu]],[[ecut]],[[iscf]],[[ixc]],[[kpt]],[[kptnrm]],
|
|
[[ngfft]],[[occ]],[[rprim]],[[dfpt_sciss]],[[symrel]],[[xred]],[[tnons]],[[typat]],[[tolwfr]],[[wtk]],[[ziontypat]],
|
|
as well as information on the pseudopotentials by means of their Kleinman-Bylander energies).
|
|
These values are simply a transcription of the input data, or other simple internal parameters.
|
|
|
|
Note: the format and content of this first part of the DDBs have to be updated in the future ...
|
|
|
|
The second part contains:
|
|
|
|
* the number of data blocks
|
|
* for each data block, the type of the block, its number of elements, and the list of elements.
|
|
|
|
The elements of a 2DTE block are described by 4 integers and 2 real numbers.
|
|
The 2 first integers define a first perturbation in the form (idir1,ipert1),
|
|
the two next define a second perturbation in the form (idir2,ipert2). The
|
|
matrix element corresponds to the derivative of the total energy with respect
|
|
to the parameters corresponding to these perturbations. The real numbers are
|
|
the real and imaginary parts of the 2DTE. Sometimes, the code uses spatial
|
|
symmetries, the time-reversal symmetry, or even the permutation of first and
|
|
second perturbations to deduce the value of non-computed matrix elements. This
|
|
behaviour might be improved, as it is sometimes confusing ...
|
|
|
|
<a id="numerical-quality"></a>
|
|
## 7 Numerical quality of the calculations
|
|
|
|
It is possible to get from the RF calculations essentially EXACT derivatives
|
|
of the total energy with respect to perturbations. There is a published
|
|
account of this fact in [[cite:Gonze1995]]. An agreement of 8 digits
|
|
or more was obtained in the comparison with finite-difference derivatives of GS data.
|
|
|
|
The accuracy of these calculations are thus entirely determined by the input
|
|
parameters the user choose for the RF run, and the preparatory GS runs.
|
|
|
|
We will now review the convergence parameters, usually the same as for the GS
|
|
calculations, indicating only the specific features related to RF calculations.
|
|
|
|
Input parameters that could influence the accuracy of the calculation are:
|
|
|
|
* [[ecut]] (the energy cut-off, that depends strongly on the pseudopotential)
|
|
* [[ixc]] (describing the exchange-correlation functional)
|
|
* [[nkpt]](or, more accurately, the Brillouin zone sampling, that can be determined
|
|
alternatively by the inputs variables [[ngkpt]] or [[kptrlatt]])
|
|
* one of the self-consistent convergence tolerance parameters, [[toldfe]], [[tolvrs]], or [[tolwfr]].
|
|
|
|
The input parameters [[ecut]], [[ecutsm]], [[ixc]], [[intxc]], the set of
|
|
k-wavevectors, as well as the related variables have to be the SAME in the
|
|
ground-state calculations that go before a RF run and this RF run.
|
|
|
|
Namely: do not try to use ground-state wavefunction files produced with
|
|
[[ecut]]=10Ha for a RF run with [[ecut]]=20Ha. In some cases, the code will complain
|
|
and stop, but in other cases, it might simply produce garbage !
|
|
|
|
If the value of [[ngfft]] is input by hand, its value must also be equal in
|
|
the GS and RF cases. ALWAYS use [[ngfft]] large enough to have boxcut=2 or
|
|
larger, in order to avoid any FFT filter error. In the GS case, boxcut as
|
|
small as 1.5 could be allowed in some cases. It is not allowed with RF
|
|
calculations, because they are more sensitive to that error.
|
|
|
|
The convergence tests with respect to [[ecut]], and the k-point grid should be
|
|
done carefully. This was already emphasized in the [[help:abinit]] and is re-
|
|
emphasized here. The user should test the convergence DIRECTLY on the property
|
|
he or she is interested in. For example, if the user wants a phonon frequency
|
|
accurate to 10 cm^-1, he/she could be lead to do a full calculation (GS+RF) of
|
|
phonons at 30Ha, then another full calculation at 35Ha, then another at
|
|
40Ha... It is an error to rely on tolerance on the total energy (for example
|
|
1mHa/atom) or geometry (accuracy of one part per thousand on the bond lengths)
|
|
to draw 'a priori' conclusions on the convergence of other quantities, and not
|
|
monitor the convergence of these directly. To be clear: if phonon frequencies
|
|
are needed, check the convergence of phonon frequencies !
|
|
|
|
The user should note that for bands with very small occupancy in the metallic
|
|
case as well as unoccupied bands for insulators, the ground state run
|
|
preceeding response function runs will not necessarily converge these
|
|
wavefunctions using usual ground-state tests such as [[toldfe]] or (better)
|
|
[[tolvrs]]. To be sure that inaccuracies are not introduced into the response
|
|
function calculation by poorly converged unoccupied bands, a separate run
|
|
starting from a saved charge density ([[prtden]]=1 in the self-consistent run)
|
|
and using [[iscf]]=-2 and [[tolwfr]] may be needed.
|