3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-22 04:13:47 +01:00

Added some documentation on PLOtools

The documentation has been slightly rewritten and extended to follow
the recent changes. The modifications include:

- ProjectorSet class is now replaced by ProjectorShell
- the workflow has been refined
- the electronic structure part is represented by class ElectronicStructure
This commit is contained in:
Oleg E. Peil 2015-02-19 21:27:37 +01:00 committed by Michel Ferrero
parent 3317371762
commit 4c920b8312

View File

@ -1,37 +1,39 @@
.. highlight:: python .. highlight:: python
#########
PLO tools PLO tools
######### #########
Introduction Introduction
============ ************
This set of tools is intended for processing of raw projectors read This set of tools is intended for processing of raw projectors read
from VASP. One of the main tasks is to generate an orthonormalized subset from VASP. One of the main tasks is to generate an orthonormalized subset
of PLOs constructed according to the :doc:`config-file </config>`. of PLOs constructed according to the :doc:`config-file </config>`.
As an input this sub-library accepts a dictionary with parameters from To produce the final output the following steps are undertaken:
the config-file and a dictionary containing VASP-data objects.
Generally, the following workflow is adopted:
* The VASP data is checked for consistency. * Parse input config-file
* Input raw VASP data
* Convert the raw VASP data into an internal representaion and check it for consistency.
* For each group of PLOs a corresponding subset of projectors and eigenvalues * Generate a set of projector shells according to the parameters of the config-file
is selected according to the config-file.
* The selected subsets of projectors are orthogonalized. In general, there are different ways * Create a set of projector groups
how it can be done (see :ref:`Orthogonalization<ortho>`).
* Perform necessary group operations (such as :ref:`orthogonalization<ortho>`) on the constituing shells
* Calculate and output some useful quantities (bare density matrix, DOS, etc.)
Initial Processing Initial Processing
================== ******************
Consistency check The raw data from VASP files is initially read in simple objects (containers).
----------------- Then these objects are combined in an another object containing all necessary
electronic structure data. At this stage simple consistency checks are performed:
The purpose of a consistency check is to make sure that the VASP data passed
to PLOtools are complete and originating from the same calculation.
In particular, the following things are supposed to be checked:
* the basic dimensions, such as the number of bands, number of `k`-points, etc., * the basic dimensions, such as the number of bands, number of `k`-points, etc.,
are consistent for all data are consistent for all data
@ -42,6 +44,14 @@ In particular, the following things are supposed to be checked:
* in case tetrahedron data is read from IBZKPT, the tetrahedron volume must be related * in case tetrahedron data is read from IBZKPT, the tetrahedron volume must be related
to the total volume of the unit cell as derived from POSCAR to the total volume of the unit cell as derived from POSCAR
All electronic structure from VASP is stored in a class ElectronicStructure:
.. autoclass:: elstruct.ElectronicStructure
:members:
Consistency with parameters
* parameters in the config-file should pass trivial checks such as that the ion * parameters in the config-file should pass trivial checks such as that the ion
list does not contain non-existing ions (boundary check for ion indices) list does not contain non-existing ions (boundary check for ion indices)
@ -64,7 +74,28 @@ In particular, the following things are supposed to be checked:
Selecting projector subsets Selecting projector subsets
--------------------------- ---------------------------
.. autoclass:: plotools.ProjectorSet The first step of PLO processing is to select subsets of projectors
corresponding to PLO groups. Each group contains a set of shells.
Each projector shell is represented by an object 'ProjectorShell'
that contains an array of projectors and information on the shell itself
(orbital number, ions, etc.). 'ProjectorShell's are contained in
both a list of shells (according to the original list as read
from config-file) and in a 'ProjectorGroup' object, the latter
also providing information about the energy window.
`[In fact, shell container can be a simple dictionary.]`
Order of operations:
- transform projectors (all bands) in each shell
- select transformed shell projectors for a given group within the window
- orthogonalize if necessary projectors within a group by performing
the following operations for each k-point:
* combine all projector shells into a single array
* orthogonalize the array
* distribute back the arrays assuming that the order is preserved
.. autoclass:: plotools.ProjectorShell
:members: :members:
@ -100,15 +131,10 @@ at least two options can be considered:
#. Projectors are normalized for all ions in the unit cell simultaneously. This #. Projectors are normalized for all ions in the unit cell simultaneously. This
ensures that the Wannier functions for different ions are mutually orthogonal. ensures that the Wannier functions for different ions are mutually orthogonal.
If more than one shells is considered (say, `p` and `d` orbitals), the The way the normalization of a PLO group is done is controlled by two group parameters:
normalization can be imposed either for a combined set of shells or for each shell
separately.
The way the normalization of a PLO group is done is controlled by two flags: - *NORMALIZE* (True/False) : indicates whether the PLO group is normalized (True by default)
- *NORMION* (True/False) : indicates whether the PLO group is normalized on a per-ion basis
(False by default)
- **NORMALIZE** (True/False) : indicates whether the PLO group is normalized (True by default)
- **NORMION** (True/False) : indicates whether the PLO group is normalized on a per-ion basis
If there are several PLO groups defined, the convention is the following: All PLO groups
marked with `NORMALIZE = True` are orthogonalized with respect to each other.