diff --git a/.markdownlint.yaml b/.markdownlint.yaml new file mode 100644 index 00000000..9395b58c --- /dev/null +++ b/.markdownlint.yaml @@ -0,0 +1,20 @@ +# config file markdownlint-cli2 + +# MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/main/doc/md007.md +# this is to make sure mkdocs can correctly render nested lists +MD007: + # Spaces for indent + indent: 4 + +# MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md033.md +MD033: + allowed_elements: + - br + - figure + - table + - figcaption + - em + - sub + - a + - sup + - code diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9ac79f51..58aca208 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,3 +31,11 @@ repos: pwscf/.* )$ verbose: true +- repo: https://github.com/DavidAnson/markdownlint-cli2 + rev: v0.12.1 + hooks: + - id: markdownlint-cli2 + args: ['--fix'] + files: (?x)^( + docs/.* + )$ diff --git a/docs/README.md b/docs/README.md index 5e5f8125..df0de252 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,10 +4,12 @@ Wannier90 documentation using `mkdocs`. ## Project layout - mkdocs.yml # The configuration file. - docs/ - index.md # The documentation homepage. - ... # Other markdown pages, images and other files. +```bash +mkdocs.yml # The configuration file. +docs/ + index.md # The documentation homepage. + ... # Other markdown pages, images and other files. +``` ## Installation @@ -24,7 +26,9 @@ pip install -r requirements.txt ## Notes on conversion -The original wannier90 latex documentation was converted to markdown using `pandoc`. The resulting markdown files were then manually edited to fit the `mkdocs` format. +The original wannier90 latex documentation was converted to markdown using +`pandoc`. The resulting markdown files were then manually edited to fit the +`mkdocs` format. ```bash pandoc -s wannier90/doc/user_guide/user_guide.tex -o user_guide.md diff --git a/docs/docs/index.md b/docs/docs/index.md index 61d582d9..a5eb1346 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -2,7 +2,8 @@ ![Wannier90 logo](assets/wannier-logo.svg){ width=400 } -This is the home of the documenation of [Wannier90](https://wannier.org), which a computer program for maximally-localised Wannier functions (MLWFs). +This is the home of the documenation of [Wannier90](https://wannier.org), +which a computer program for maximally-localised Wannier functions (MLWFs). - [User guide](user_guide/introduction.md) - [Tutorials](tutorials/preliminaries.md) diff --git a/docs/docs/tutorials/preliminaries.md b/docs/docs/tutorials/preliminaries.md index 70865531..dbc8ceb8 100644 --- a/docs/docs/tutorials/preliminaries.md +++ b/docs/docs/tutorials/preliminaries.md @@ -1,52 +1,44 @@ ---- -author: -- Version 3.1 -bibliography: -- ../wannier90.bib -title: ": Tutorials" ---- - -# Preliminaries {#preliminaries .unnumbered} +# Preliminaries Welcome to `wannier90`! The examples contained in these tutorials are designed to help you become familiar with the procedure of generating, analysing and using maximally-localised Wannier functions (MLWFs). As a first step, install `wannier90` following the instructions in the -` README` file of the `wannier90` distribution. For an introduction to +`README` file of the `wannier90` distribution. For an introduction to the theory underlying MLWFs, you are encouraged to refer to the brief -overview given in the `wannier90` User Guide [@UserGuide], to the two -seminal papers of Refs. [@marzari-prb97; @souza-prb01], a recent review -article [@marzari-rmp12] and to a paper [@mostofi-cpc08] describing +overview given in the `wannier90` [User Guide](../user_guide/introduction.md), +to the two seminal papers of Refs. [@marzari-prb97; @souza-prb01], a recent +review article [@marzari-rmp12] and to a paper [@mostofi-cpc08] describing `wannier90`. The following additional programs may be installed in order to visualise the output of `wannier90` (they are optional, not all of them are necessary) -- `gnuplot` is used to plot bandstructures. It is available for many +- `gnuplot` is used to plot bandstructures. It is available for many operating systems and is often installed by default on Unix/Linux distributions
-- `xmgrace` may also be used to plot bandstructures.
+- `xmgrace` may also be used to plot bandstructures.
-- `XCrySDen` is used to visualise crystal structures, MLWFs, and Fermi +- `XCrySDen` is used to visualise crystal structures, MLWFs, and Fermi surfaces. It is available for Unix/Linux, Windows (using cygwin), and OSX. To correctly display files from `wannier90`, version 1.4 or later must be used.
-- `vmd` can also be used to visualise crystal structures and MLWFs.
+- `vmd` can also be used to visualise crystal structures and MLWFs.
-- `python` with the `numpy` and `matplotlib` modules is used in +- `python` with the `numpy` and `matplotlib` modules is used in tutorials 17 — 19


-# Parallel execution {#parallel-execution .unnumbered} +## Parallel execution `postw90.x` and `wannier90.x` can be run in parallel to speed up the calculations, using the MPI @@ -68,7 +60,7 @@ mpirun -np 8 postw90.x seedname libraries installed on your system: refer to your MPI manual and/or to your system administrator for further information). -# About these tutorials {#about-this-tutorials .unnumbered} +## About these tutorials The first part of this collection of tutorials comprises four examples taken from Refs. [@marzari-prb97; @souza-prb01]: gallium arsenide, lead, silicon @@ -79,7 +71,7 @@ The second part of this collection of tutorials covers the generation of calculation. We have provided input files for the `pwscf` interface () to `wannier90`. Therefore, you will need to install and compile elements of -the ` quantum-espresso` package, namely `pw.x` and ` pw2wannier90.x`, in +the `quantum-espresso` package, namely `pw.x` and `pw2wannier90.x`, in order to run these tutorials. Please visit to download the package, and for installation instructions. The tutorials work with @@ -98,13 +90,13 @@ including abinit (), fleur (), VASP (), and Wien2k () -# Contact us {#contact-us .unnumbered} +## Contact us If you have any suggestions regarding ways in which these tutorials may be improved, then send us an email. For other questions, email the `wannier90` forum at -` wannier@quantum-espresso.org`. Note that first you will need to +`wannier@quantum-espresso.org`. Note that first you will need to register in order to post emails. Emails from non-registered users are deleted automatically. You can register by following the links at . diff --git a/docs/docs/tutorials/tutorial_1.md b/docs/docs/tutorials/tutorial_1.md index 90887b4f..48913327 100644 --- a/docs/docs/tutorials/tutorial_1.md +++ b/docs/docs/tutorials/tutorial_1.md @@ -1,28 +1,28 @@ -# 1: Gallium Arsenide — MLWFs for the valence bands {#gallium-arsenide-mlwfs-for-the-valence-bands .unnumbered} +# 1: Gallium Arsenide — MLWFs for the valence bands -- Outline: *Obtain and plot MLWFs for the four valence bands of GaAs.* +- Outline: *Obtain and plot MLWFs for the four valence bands of GaAs.* -- Generation details: *From `pwscf`, using norm-conserving - pseudopotentials and a
+- Generation details: *From `pwscf`, using norm-conserving + pseudopotentials and a
2$\times$2$\times$2 k-point grid. Starting guess: four bond-centred Gaussians.* -- Directory: `tutorials/tutorial01/` *Files can be downloaded from +- Directory: `tutorials/tutorial01/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial01)* -- Input Files +- Input Files - - `gaas.win` *The master input file* + - `gaas.win` *The master input file* - - `gaas.mmn` *The overlap matrices - $\mathbf{M}^{(\mathbf{k},\mathbf{b})}$* + - `gaas.mmn` *The overlap matrices + $\mathbf{M}^{(\mathbf{k},\mathbf{b})}$* - - `gaas.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the Bloch - states onto a set of trial localised orbitals* + - `gaas.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the Bloch + states onto a set of trial localised orbitals* - - `UNK00001.1` *The Bloch states in the real space unit cell. For - plotting only.* + - `UNK00001.1` *The Bloch states in the real space unit cell. For + plotting only.* -1. Run `wannier90` to minimise the MLWFs spread +1. Run `wannier90` to minimise the MLWFs spread ```bash title="Terminal" wannier90.x gaas @@ -36,7 +36,7 @@ each k-point by just the 4$\times$4 unitary matrices $\mathbf{U}^{(\mathbf{k})}$. -2. Plot the MLWFs by adding the following keywords to the input file +2. Plot the MLWFs by adding the following keywords to the input file `gaas.win` ```vi title="Input file" @@ -44,16 +44,21 @@ ``` and re-running `wannier90`. To visualise the MLWFs we must represent - them explicitly on a real space grid (see the [User guide page](../user_guide/wannier90/methodology.md#methodology)). As a - consequence, plotting the MLWFs is slower and uses more memory than + them explicitly on a real space grid (see the + [User guide page](../user_guide/wannier90/methodology.md#methodology)). + As a consequence, plotting the MLWFs is slower and uses more memory than the minimisation of the spread. The four files that are created - (`gaas_00001.xsf`, etc.) can be viewed using `XCrySDen`[^1], + (`gaas_00001.xsf`, etc.) can be viewed using `XCrySDen`, e.g., ```bash title="Terminal" xcrysden --xsf gaas_00001.xsf ``` + !!! hint + Once `XCrySDen` starts, click on `Tools` $\rightarrow$ `Data Grid` + in order to specify an isosurface value to plot. + For large systems, plotting the MLWFs may be time consuming and require a lot of memory. Use the keyword `wannier_plot_list` to plot a subset of the MLWFs. E.g., to plot the 1st and 3rd MLWFs use @@ -63,7 +68,7 @@ ``` The MLWFs are plotted in a supercell of the unit cell. The size of - this supercell is set through the keyword ` wannier_plot_supercell`. + this supercell is set through the keyword `wannier_plot_supercell`. The default value is 2 (corresponding to a supercell with eight times the unit cell volume). We recommend not using values great than 3 as the memory and computational cost scales cubically with @@ -72,9 +77,9 @@ Plot the 3rd MLWFs in a supercell of size 3. Choose a low value for the isosurface (say 0.5). Can you explain what you see? - *Hint:* For a finite k-point mesh, the MLWFs are in fact periodic - and the period is related to the spacing of the k-point mesh. For - mesh with $n$ divisions in the $i^{\mathrm{th}}$ direction in the - Brillouin zone, the MLWFs "live" in a supercell $n$ times the unit - cell. - [^1]: http://www.xcrysden.org/ + !!! hint + For a finite k-point mesh, the MLWFs are in fact periodic + and the period is related to the spacing of the k-point mesh. For + mesh with $n$ divisions in the $i^{\mathrm{th}}$ direction in the + Brillouin zone, the MLWFs "live" in a supercell $n$ times the unit + cell. diff --git a/docs/docs/tutorials/tutorial_10.md b/docs/docs/tutorials/tutorial_10.md index d4581b54..6074216b 100644 --- a/docs/docs/tutorials/tutorial_10.md +++ b/docs/docs/tutorials/tutorial_10.md @@ -1,43 +1,43 @@ -# 10: Graphite {#graphite .unnumbered} +# 10: Graphite -- Outline: *Obtain MLWFs for graphite (AB, Bernal)* +- Outline: *Obtain MLWFs for graphite (AB, Bernal)* -- Directory: `tutorials/tutorial10/` *Files can be downloaded from +- Directory: `tutorials/tutorial10/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial10)* -- Input Files +- Input Files - - `graphite.scf` *The `pwscf` input file for ground + - `graphite.scf` *The `pwscf` input file for ground state calculation* - - `graphite.nscf` *The `pwscf` input file to obtain + - `graphite.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `graphite.pw2wan` *Input file for `pw2wannier90`* + - `graphite.pw2wan` *Input file for `pw2wannier90`* - - `graphite.win` *The `wannier90` input file* + - `graphite.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of graphite +1. Run `pwscf` to obtain the ground state of graphite ```bash title="Terminal" pw.x < graphite.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < graphite.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `graphite.nnkp` file). ```bash title="Terminal" wannier90.x -pp graphite ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `graphite.mmn` and `graphite.amn` files). @@ -45,10 +45,8 @@ pw2wannier90.x < graphite.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x graphite ``` - - diff --git a/docs/docs/tutorials/tutorial_11.md b/docs/docs/tutorials/tutorial_11.md index bd4afa34..24ee1e4d 100644 --- a/docs/docs/tutorials/tutorial_11.md +++ b/docs/docs/tutorials/tutorial_11.md @@ -1,44 +1,44 @@ -# 11: Silicon — Valence and low-lying conduction states {#silicon-valence-and-low-lying-conduction-states .unnumbered} +# 11: Silicon — Valence and low-lying conduction states -## Valence States {#valence-states .unnumbered} +## Valence States -- Outline: *Obtain MLWFs for the valence bands of silicon.* +- Outline: *Obtain MLWFs for the valence bands of silicon.* -- Directory: `tutorials/tutorial11/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial11)* +- Directory: `tutorials/tutorial11/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial11)* -- Input Files +- Input Files - - `silicon.scf` *The `pwscf` input file for ground + - `silicon.scf` *The `pwscf` input file for ground state calculation* - - `silicon.nscf` *The `pwscf` input file to obtain + - `silicon.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `silicon.pw2wan` *Input file for `pw2wannier90`* + - `silicon.pw2wan` *Input file for `pw2wannier90`* - - `silicon.win` *The `wannier90` input file* + - `silicon.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of silicon +1. Run `pwscf` to obtain the ground state of silicon ```bash title="Terminal" pw.x < silicon.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid. Note that we request the lower 4 (valence) bands ```bash title="Terminal" pw.x < silicon.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `silicon.nnkp` file). ```bash title="Terminal" wannier90.x -pp silicon ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `silicon.mmn` and `silicon.amn` files). @@ -46,7 +46,7 @@ pw2wannier90.x < silicon.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x silicon @@ -60,7 +60,7 @@ the MLWFs are defined by just the 4$\times$4 unitary matrices $\mathbf{U}^{(\mathbf{k})}$. Plot the MLWFs by adding the following keywords to the input file -` silicon.win` +`silicon.win` ```vi title="Input file" wannier_plot = true @@ -72,23 +72,23 @@ and re-running `wannier90`. Visualise them using `XCrySDen`, e.g., xcrysden --xsf silicon_00001.xsf ``` -## Valence + Conduction States {#valence-conduction-states .unnumbered} +## Valence + Conduction States -- Outline: *Obtain MLWFs for the valence and low-lying conduction-band +- Outline: *Obtain MLWFs for the valence and low-lying conduction-band states of Si. Plot the interpolated bandstructure. Apply a scissors correction to the conduction bands.* -- Input Files +- Input Files - - `silicon.scf` *The `pwscf` input file for ground + - `silicon.scf` *The `pwscf` input file for ground state calculation* - - `silicon.nscf` *The `pwscf` input file to obtain + - `silicon.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `silicon.pw2wan` *Input file for `pw2wannier90`* + - `silicon.pw2wan` *Input file for `pw2wannier90`* - - `silicon.win` *The `wannier90` input file* + - `silicon.win` *The `wannier90` input file* The valence and lower conduction states can be represented by MLWFs with $sp^3$-like symmetry. The lower conduction states are not separated by @@ -97,7 +97,7 @@ use the disentanglement procedure introduced in Ref. [@souza-prb01]. The position of the inner and outer energy windows are shown in [this plot](tutorial_3.md#fig:si.bnd){reference-type="ref" reference="fig:si.bnd"}. -1. Modify the input file and run `pwscf` and `wannier90`.\ +1. Modify the input file and run `pwscf` and `wannier90`.\ Inspect the output file `silicon.wout`. The minimisation of the spread occurs in a two-step procedure. First, we minimise $\Omega_{\rm @@ -105,7 +105,7 @@ position of the inner and outer energy windows are shown in disentanglement procedure. Then, we minimise $\Omega_{\rm O}+\Omega_{{\rm OD}}$. -2. Plot the bandstructure by adding the following commands to the input +2. Plot the bandstructure by adding the following commands to the input file `silicon.win` ```vi title="Input file" @@ -115,7 +115,7 @@ position of the inner and outer energy windows are shown in ``` and re-running `wannier90`. The files `silicon_band.dat` and - ` silicon_band.gnu` are created. To plot the bandstructure using + `silicon_band.gnu` are created. To plot the bandstructure using gnuplot ```bash title="Terminal" @@ -127,16 +127,16 @@ position of the inner and outer energy windows are shown in ``` The k-point path for the bandstructure interpolation is set in the - ` kpoint_path` block. Try plotting along different paths. + `kpoint_path` block. Try plotting along different paths. -## Further ideas {#further-ideas-2 .unnumbered} +## Further ideas -- Compare the Wannier-interpolated bandstructure with the full +- Compare the Wannier-interpolated bandstructure with the full `pwscf` bandstructure. Recompute the MLWFs using a finer $k$-point grid (e.g., 6$\times$6$\times$6 or 8$\times$8$\times$8) and note how the accuracy of the interpolation increases [@yates-prb07]. -- Compute four MLWFs spanning the low-lying conduction states (see +- Compute four MLWFs spanning the low-lying conduction states (see Ref. [@souza-prb01]). diff --git a/docs/docs/tutorials/tutorial_12.md b/docs/docs/tutorials/tutorial_12.md index e755128e..ee5a16a6 100644 --- a/docs/docs/tutorials/tutorial_12.md +++ b/docs/docs/tutorials/tutorial_12.md @@ -1,42 +1,42 @@ -# 12: Benzene — Valence and low-lying conduction states {#benzene-valence-and-low-lying-conduction-states .unnumbered} +# 12: Benzene — Valence and low-lying conduction states -## Valence States {#valence-states-1 .unnumbered} +## Valence States -- Outline: *Obtain MLWFs for the valence states of benzene* +- Outline: *Obtain MLWFs for the valence states of benzene* -- Directory: `tutorials/tutorial12/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial12)* +- Directory: `tutorials/tutorial12/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial12)* -- Input Files +- Input Files - - `benzene.scf` *The `pwscf` input file for ground + - `benzene.scf` *The `pwscf` input file for ground state calculation* - - `benzene.pw2wan` *Input file for `pw2wannier90`* + - `benzene.pw2wan` *Input file for `pw2wannier90`* - - `benzene.win` *The `wannier90` input file* + - `benzene.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of benzene +1. Run `pwscf` to obtain the ground state of benzene ```bash title="Terminal" pw.x < benzene.scf > scf.out ``` -2. Run `wannier90` to generate a list of the required overlaps (written +2. Run `wannier90` to generate a list of the required overlaps (written into the `benzene.nnkp` file). ```bash title="Terminal" wannier90.x -pp benzene ``` -3. Run `pw2wannier90` to compute the overlap between Bloch states and +3. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `benzene.mmn` and `benzene.amn` files). ```bash title="Terminal" pw2wannier90.x < benzene.pw2wan > pw2wan.out - ``` + ``` -4. Run `wannier90` to compute the MLWFs. +4. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x benzene @@ -46,7 +46,7 @@ Inspect the output file `benzene.wout`. The total spread converges to its minimum value after just a few iterations. Plot the MLWFs by adding the following keywords to the input file -` benzene.win` +`benzene.win` ```vi title="Input file" restart = plot @@ -57,35 +57,35 @@ wannier_plot_list = 2-4 and re-running `wannier90`. Visualise them using, e.g., `XCrySDen`. -## Valence + Conduction States {#valence-conduction-states-1 .unnumbered} +## Valence + Conduction States -- Outline: *Obtain MLWFs for the valence and low-lying conduction +- Outline: *Obtain MLWFs for the valence and low-lying conduction states of benzene.* -- Input Files +- Input Files - - `benzene.scf` *The `pwscf` input file for ground + - `benzene.scf` *The `pwscf` input file for ground state calculation* - - `benzene.nscf` *The `pwscf` input file to obtain + - `benzene.nscf` *The `pwscf` input file to obtain Bloch states for the conduction states* - - `benzene.pw2wan` *Input file for `pw2wannier90`* + - `benzene.pw2wan` *Input file for `pw2wannier90`* - - `benzene.win` *The `wannier90` input file* + - `benzene.win` *The `wannier90` input file* In order to form localised WF we use the disentanglement procedure. The position of the inner energy window is set to lie in the energy gap; the outer energy window is set to 4.0 eV. Modify the input file appropriately. -1. Run `pwscf` and `wannier90`.\ +1. Run `pwscf` and `wannier90`.\ Inspect the output file `benzene.wout`. The minimisation of the spread occurs in a two-step procedure. First, we minimise $\Omega_{\rm I}$. Then, we minimise $\Omega_{\rm O}+\Omega_{{\rm OD}}$. -2. Plot the MLWFs by adding the following commands to the input file +2. Plot the MLWFs by adding the following commands to the input file `benzene.win` ```vi title="Input file" @@ -96,5 +96,3 @@ appropriately. ``` and re-running `wannier90`. Visualise them using, e.g., `XCrySDen`. - - diff --git a/docs/docs/tutorials/tutorial_13.md b/docs/docs/tutorials/tutorial_13.md index f8fca71c..25dce0e6 100644 --- a/docs/docs/tutorials/tutorial_13.md +++ b/docs/docs/tutorials/tutorial_13.md @@ -1,21 +1,21 @@ -# 13: (5,5) Carbon Nanotube — Transport properties {#carbon-nanotube-transport-properties .unnumbered} +# 13: (5,5) Carbon Nanotube — Transport properties -- Outline: *Obtain the bandstructure, quantum conductance and density +- Outline: *Obtain the bandstructure, quantum conductance and density of states of a metallic (5,5) carbon nanotube* -- Directory: `tutorials/tutorial13/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial13)* +- Directory: `tutorials/tutorial13/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial13)* -- Input Files +- Input Files - - `cnt55.scf` *The `pwscf` input file for ground + - `cnt55.scf` *The `pwscf` input file for ground state calculation* - - `cnt55.nscf` *The `pwscf` input file to obtain + - `cnt55.nscf` *The `pwscf` input file to obtain Bloch states for the conduction states* - - `cnt55.pw2wan` *Input file for `pw2wannier90`* + - `cnt55.pw2wan` *Input file for `pw2wannier90`* - - `cnt55.win` *The `wannier90` input file* + - `cnt55.win` *The `wannier90` input file* In order to form localised WF that describe both the occupied and unoccupied $\pi$ and $\pi^{\ast}$ manifolds, we use the disentanglement @@ -49,18 +49,18 @@ translation_centre_frac = 0.0 0.0 0.0 Descriptions of these and other keywords related to the calculation of transport properties can be found in the User Guide. -1. Run `pwscf` and `wannier90`.\ +1. Run `pwscf` and `wannier90`.\ Inspect the output file `cnt55.wout`. The minimisation of the spread occurs in a two-step procedure. First, we minimise $\Omega_{\rm I}$. Then, we minimise $\Omega_{\rm O}+\Omega_{{\rm OD}}$. -2. Note that the initial $p_{z}$ projections on the carbon atoms are +2. Note that the initial $p_{z}$ projections on the carbon atoms are oriented in the radial direction with respect to the nanotube axis. -3. The interpolated bandstructure is written to ` cnt55_band.agr` +3. The interpolated bandstructure is written to `cnt55_band.agr` (since `bands_plot_format = xmgr` in the input file). -4. The quantum conductance and density of states are written to the +4. The quantum conductance and density of states are written to the files `cnt55_qc.dat` and `cnt55_dos.dat`, respectively. Note that this part of the calculation may take some time. You can follow its progress by monitoring the output to these files. Use a package such @@ -68,7 +68,6 @@ transport properties can be found in the User Guide. get something that looks like [this](#fig:cnt.tran){reference-type="ref" reference="fig:cnt.tran"}. -
![Image title](./cnt_tran.webp){ width="500" }
Wannier interpolated bandstructure, quantum conductance and @@ -77,4 +76,3 @@ transport properties can be found in the User Guide. data-reference-type="ref" data-reference="fig:cnt.win">plot.
- diff --git a/docs/docs/tutorials/tutorial_14.md b/docs/docs/tutorials/tutorial_14.md index 60298378..e255a0b4 100644 --- a/docs/docs/tutorials/tutorial_14.md +++ b/docs/docs/tutorials/tutorial_14.md @@ -1,33 +1,35 @@ -# 14: Linear Sodium Chain — Transport properties {#linear-sodium-chain-transport-properties .unnumbered} +# 14: Linear Sodium Chain — Transport properties -- Outline: *Compare the quantum conductance of a periodic linear chain +- Outline: *Compare the quantum conductance of a periodic linear chain of Sodium atoms with that of a defected chain* -- Directories: `tutorials/tutorial14/periodic`
-                       `tutorials/tutorial14/defected`
- *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial14)* +- Directories: + - `tutorials/tutorial14/periodic` + - `tutorials/tutorial14/defected` -- Input Files + *Files can be downloaded from + [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial14)* - - `Na_chain.scf` *The `pwscf` input file for ground +- Input Files + + - `Na_chain.scf` *The `pwscf` input file for ground state calculation* - - `Na_chain.nscf` *The `pwscf` input file to obtain + - `Na_chain.nscf` *The `pwscf` input file to obtain Bloch states for the conduction states* - - `Na_chain.pw2wan` *Input file for `pw2wannier90`* + - `Na_chain.pw2wan` *Input file for `pw2wannier90`* - - `Na_chain.win` *The `wannier90` input file* + - `Na_chain.win` *The `wannier90` input file* The periodic system contains two unit cells evenly distributed along the supercell. Transport calculations are performed using -` transport_mode = bulk` and so the resulting quantum conductance +`transport_mode = bulk` and so the resulting quantum conductance represents that of an infinite periodic chain. The part of the `wannier90` input file that controls the transport part of the calculation looks like: - ```vi title="Input file" transport = true transport_mode = bulk @@ -60,21 +62,18 @@ tran_num_cell_ll = 2 Descriptions of these and other keywords related to the calculation of transport properties can be found in the User Guide. -1. Run `pwscf` and `wannier90` for the periodic system. +1. Run `pwscf` and `wannier90` for the periodic system. -2. Run `pwscf` and `wannier90` for the defected system. +2. Run `pwscf` and `wannier90` for the defected system. -3. The quantum conductance is written to the files +3. The quantum conductance is written to the files `periodic/Na_chain_qc.dat` and , respectively. Compare the quantum conductance of the periodic (bulk) calculation with the defected (LCR) calculation. Your plot should look like [this](#fig:Na_qc){reference-type="ref" reference="fig:Na_qc"}. -
![Image title](./Na_qc.webp){ width="500" }
Quantum conductance of periodic Sodium chain (black) compared to that of the defected Sodium chain (red).
- - diff --git a/docs/docs/tutorials/tutorial_15.md b/docs/docs/tutorials/tutorial_15.md index 90577fb9..7651ff2e 100644 --- a/docs/docs/tutorials/tutorial_15.md +++ b/docs/docs/tutorials/tutorial_15.md @@ -1,66 +1,66 @@ -# 15: (5,0) Carbon Nanotube — Transport properties {#carbon-nanotube-transport-properties-1 .unnumbered} +# 15: (5,0) Carbon Nanotube — Transport properties *Note that these systems require reasonably large-scale electronic structure calculations.* -## Bulk Transport properties {#bulk-transport-properties .unnumbered} +## Bulk Transport properties -- Outline: *Obtain the quantum conductance of a pristine single-walled +- Outline: *Obtain the quantum conductance of a pristine single-walled carbon nanotube* -- Directory: `tutorials/tutorial14/periodic` *Files can be downloaded fron [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial15)* +- Directory: `tutorials/tutorial14/periodic` *Files can be downloaded fron [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial15)* -- Input Files +- Input Files - - `cnt.scf` *The `pwscf` input file for ground state + - `cnt.scf` *The `pwscf` input file for ground state calculation* - - `cnt.nscf` *The `pwscf` input file to obtain Bloch + - `cnt.nscf` *The `pwscf` input file to obtain Bloch states for the conduction states* - - `cnt.pw2wan` *Input file for `pw2wannier90`* + - `cnt.pw2wan` *Input file for `pw2wannier90`* - - `cnt.win` *The `wannier90` input file* + - `cnt.win` *The `wannier90` input file* First we consider a single unit cell, with 10 k-points. With `transport_mode = bulk` we compute the transport properties of a pristine, infinite, periodic (5,0) carbon nanotube. Later, we will compare the quantum conductance of this system with a defected nanotube. -1. Run `pwscf` and `wannier90`. +1. Run `pwscf` and `wannier90`. -2. The quantum conductance and density of states are written to the +2. The quantum conductance and density of states are written to the files `cnt_qc.dat` and `cnt_dos.dat`, respectively. -## LCR transport properties — Defected nanotube {#lcr-transport-properties-defected-nanotube .unnumbered} +## LCR transport properties — Defected nanotube -- Outline: *Use the automated LCR routine to investigate the effect of +- Outline: *Use the automated LCR routine to investigate the effect of a single silicon atom in a infinite (5,0) carbon nanotube.* -- Directory: `tutorials/tutorial15/defected` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial15)* +- Directory: `tutorials/tutorial15/defected` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial15)* -- Input Files +- Input Files - - `cnt+si.scf` *The `pwscf` input file for ground + - `cnt+si.scf` *The `pwscf` input file for ground state calculation* - - `cnt+si.nscf` *The `pwscf` input file to obtain + - `cnt+si.nscf` *The `pwscf` input file to obtain Bloch states for the conduction states* - - `cnt+si.pw2wan` *Input file for `pw2wannier90`* + - `cnt+si.pw2wan` *Input file for `pw2wannier90`* - - `cnt+si.win` *The `wannier90` input file* + - `cnt+si.win` *The `wannier90` input file* In this calculation an 11-atom supercell is used with a single silicon substitutional defect in the central unit cell. The supercell is chosen so that is conforms to the 2c2 geometry (see User Guide for details) with principal layers set to be two unit cells long. -1. Run `pwscf` and `wannier90`. Again these are large +1. Run `pwscf` and `wannier90`. Again these are large calculations, progress can be monitored by viewing respective output files. -2. The quantum conductance is written to `cnt+si_qc.dat`. Compare the +2. The quantum conductance is written to `cnt+si_qc.dat`. Compare the quantum conductance with the periodic (bulk) calculation. Your plot should look like [this](#fig:cnt_qc){reference-type="ref" reference="fig:cnt_qc"}. @@ -73,15 +73,13 @@ with principal layers set to be two unit cells long. silicon defect (red). -## Further ideas {#further-ideas-3 .unnumbered} +## Further ideas -- Set `write_hr = true` in the bulk case. Consider the magnitude of +- Set `write_hr = true` in the bulk case. Consider the magnitude of Hamiltonian elements between Wannier functions in increasingly distant unit cells. Are two unit cell principal layers really large enough, or are significant errors introduced? -- Does one unit cell either side of the defected unit cell shield the +- Does one unit cell either side of the defected unit cell shield the disorder so that the leads are ideal? Does the quantum conductance change if these 'buffer' regions are increased? - - diff --git a/docs/docs/tutorials/tutorial_16.md b/docs/docs/tutorials/tutorial_16.md index c4efb851..b421cc9c 100644 --- a/docs/docs/tutorials/tutorial_16.md +++ b/docs/docs/tutorials/tutorial_16.md @@ -1,46 +1,46 @@ -# 16: Silicon — Boltzmann transport {#silicon-boltzmann-transport .unnumbered} +# 16: Silicon — Boltzmann transport -- Outline: *Obtain MLWFs for the valence and low-lying conduction +- Outline: *Obtain MLWFs for the valence and low-lying conduction states of Si. Calculate the electrical conductivity, the Seebeck coefficient and the thermal conductivity in the constant relaxation time approximation using the `BoltzWann` module.* -## If you want to use Quantum ESPRESSO {#if-you-want-to-use-quantum-espresso .unnumbered} +## If you want to use Quantum ESPRESSO -- Directory: `tutorials/tutorial16-withqe/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial16)* +- Directory: `tutorials/tutorial16-withqe/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial16)* -- Input Files +- Input Files - - `Si.scf` *The `pwscf` input file for ground state + - `Si.scf` *The `pwscf` input file for ground state calculation* - - `Si.nscf` *The `pwscf` input file to obtain Bloch + - `Si.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `Si.pw2wan` *Input file for `pw2wannier90`* + - `Si.pw2wan` *Input file for `pw2wannier90`* - - `Si.win` *The `wannier90` and `postw90` input file*  + - `Si.win` *The `wannier90` and `postw90` input file* -## If you do not want to use Quantum ESPRESSO {#if-you-do-not-want-to-use-quantum-espresso .unnumbered} +## If you do not want to use Quantum ESPRESSO -- Directory: `tutorials/tutorial16-noqe/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial16)* +- Directory: `tutorials/tutorial16-noqe/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial16)* -- Input Files +- Input Files - - `Si.win` *The `wannier90` and `postw90` input file* + - `Si.win` *The `wannier90` and `postw90` input file* - - `Si.mmn` *The overlap matrices + - `Si.mmn` *The overlap matrices $\mathbf{M}^{(\mathbf{k},\mathbf{b})}$* - - `Si.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the Bloch + - `Si.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the Bloch states onto a set of trial localised orbitals* - - `Si.eig` *The Bloch eigenvalues at each k-point. For + - `Si.eig` *The Bloch eigenvalues at each k-point. For interpolation only* -Note the first five steps in the following are the same of Tutorial [11](tutorial_11.md#silicon-valence-and-low-lying-conduction-states), +Note the first five steps in the following are the same of Tutorial [11](tutorial_11.md), and are needed only if you want to use the `PWscf` code of Quantum -ESPRESSO. Otherwise, if you have already run Tutorial [11](tutorial_11.md#silicon-valence-and-low-lying-conduction-states) with Quantum +ESPRESSO. Otherwise, if you have already run Tutorial [11](tutorial_11.md) with Quantum ESPRESSSO (in particular, the section "*Valence + Conduction States*") you can start from those files and continue from point 6, after having added the `BoltzWann` flags to the input file. @@ -49,28 +49,28 @@ If instead you do not have Quantum ESPRESSO installed, or you do not want to use it, you can start from step 5 using the files in the `tutorials/tutorial16-noqe/` folder. -1. Run `pwscf` to obtain the ground state of silicon +1. Run `pwscf` to obtain the ground state of silicon ```bash title="Terminal" pw.x < Si.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid. Details on the disentanglement procedure are discussed - in Tutorial [11](tutorial_11.md#silicon-valence-and-low-lying-conduction-states). + in Tutorial [11](tutorial_11.md). ```bash title="Terminal" pw.x < Si.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `Si.nnkp` file). ```bash title="Terminal" wannier90.x -pp Si ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `Si.mmn` and `Si.amn` files). @@ -78,7 +78,7 @@ want to use it, you can start from step 5 using the files in the pw2wannier90.x < Si.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs.\ +5. Run `wannier90` to compute the MLWFs.\ ```bash title="Terminal" wannier90.x Si @@ -86,10 +86,11 @@ want to use it, you can start from step 5 using the files in the Inspect the output file `Si.wout` and check if the convergence was reached both in the disentanglement and in the wannierisation steps - (as discussed in further detail in Tutorial [11](tutorial_11.md#silicon-valence-and-low-lying-conduction-states)). You may also want to - plot the Wannier functions and the interpolated band structure. + (as discussed in further detail in Tutorial [11](tutorial_11.md)). + You may also want to plot the Wannier functions and the interpolated + band structure. -6. Run `postw90` to calculate the transport coefficients.\ +6. Run `postw90` to calculate the transport coefficients.\ `postw90.x Si` (serial execution)\ `mpirun -np 8 postw90.x Si` (example of parallel execution with 8 MPI processes) @@ -113,13 +114,13 @@ Using your favourite plotting program, plot columns 1 and 3 of the `Si_seebeck.dat` file to inspect the $S_{xx}$ component of the Seebeck coefficient as a function of the chemical potential $\mu$, at $T=300$ K. -## Further ideas {#further-ideas-4 .unnumbered} +## Further ideas -- Change the interpolation to a $60\times 60\times 60$ mesh and run +- Change the interpolation to a $60\times 60\times 60$ mesh and run again `postw90` to check if the results for the transport properties are converged. -- Change the `Si.win` input file so that it calculates the transport +- Change the `Si.win` input file so that it calculates the transport coefficients for temperatures from 300 to 700 K, with steps of 200 K. Rerun `postw90` and verify that the increase in execution time is neglibile (in fact, most of the time is spent to interpolate @@ -139,7 +140,7 @@ coefficient as a function of the chemical potential $\mu$, at $T=300$ K. Then, you can plot columns 1 and 2 of the output file `Si_seebeck_xx_500K.dat`. -- Try to calculate the Seebeck coefficient as a function of the +- Try to calculate the Seebeck coefficient as a function of the temperature, for a $n-$doped sample with, e.g., $n=10^{18}$ cm$^{-3}$. Note that to this aim, you need to calculate consistently the value $\mu(T)$ of the chemical potential as a function of the diff --git a/docs/docs/tutorials/tutorial_17.md b/docs/docs/tutorials/tutorial_17.md index 38cf03bc..2c3b49a6 100644 --- a/docs/docs/tutorials/tutorial_17.md +++ b/docs/docs/tutorials/tutorial_17.md @@ -1,4 +1,4 @@ -# 17: Iron — Spin-orbit-coupled bands and Fermi-surface contours {#iron-spin-orbit-coupled-bands-and-fermi-surface-contours .unnumbered} +# 17: Iron — Spin-orbit-coupled bands and Fermi-surface contours Note: It is recommended that you go through Tutorial 8 first (bcc Fe without spin-orbit). @@ -6,22 +6,22 @@ without spin-orbit). Note: This tutorial requires a recent version of the `pw2wannier90` interface. -- Outline: *Plot the spin-orbit-coupled bands of ferromagnetic bcc Fe. +- Outline: *Plot the spin-orbit-coupled bands of ferromagnetic bcc Fe. Plot the Fermi-surface contours on a plane in the Brillouin zone.* -- Directory: `tutorials/tutorial17/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial17)* +- Directory: `tutorials/tutorial17/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial17)* -- Input files +- Input files - - `Fe.scf` *The `pwscf` input file for ground state + - `Fe.scf` *The `pwscf` input file for ground state calculation* - - `Fe.nscf` *The `pwscf` input file to obtain Bloch + - `Fe.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `Fe.pw2wan` *The input file for `pw2wannier90`* + - `Fe.pw2wan` *The input file for `pw2wannier90`* - - `Fe.win` *The `wannier90` and `postw90` input file* + - `Fe.win` *The `wannier90` and `postw90` input file* Note that `num_wann =18` in `Fe.win`, but only nine trial orbitals are provided. The line @@ -33,37 +33,37 @@ spinors = true tells `wannier90` to use in step 3 below the specified trial orbitals on both the up- and down-spin channels, effectively doubling their number. -1. Run `pwscf` to obtain the ferromagnetic ground state of +1. Run `pwscf` to obtain the ferromagnetic ground state of iron[^2] ```bash title="Terminal" pw.x < Fe.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < Fe.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `Fe.nnkp` file) ```bash title="Terminal" wannier90.x -pp Fe ``` -4. Run `pw2wannier90` to compute: +4. Run `pw2wannier90` to compute: - - The overlaps $\langle u_{n{\bf k}}\vert u_{m{\bf + - The overlaps $\langle u_{n{\bf k}}\vert u_{m{\bf k}+{\bf b}}\rangle$ between *spinor* Bloch states (written in the `Fe.mmn` file) - - The projections for the starting guess (written in the `Fe.amn` + - The projections for the starting guess (written in the `Fe.amn` file) - - The spin matrix elements $\langle \psi_{n{\bf + - The spin matrix elements $\langle \psi_{n{\bf k}}\vert \sigma_i\vert \psi_{m{\bf k}}\rangle$, $i=x,y,z$ (written in the `Fe.spn` file) @@ -71,13 +71,13 @@ both the up- and down-spin channels, effectively doubling their number. pw2wannier90.x < Fe.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs.\ +5. Run `wannier90` to compute the MLWFs.\ ```bash title="Terminal" wannier90.x Fe ``` -6. Run `postw90` to compute the energy eigenvalues and spin expectation +6. Run `postw90` to compute the energy eigenvalues and spin expectation values. ```bash title="Terminal" @@ -85,8 +85,8 @@ both the up- and down-spin channels, effectively doubling their number. mpirun -np 8 postw90.x Fe # (2)! ``` - 1. serial execution - 2. example of parallel execution with 8 MPI processes + 1. serial execution + 2. example of parallel execution with 8 MPI processes In this tutorial we use the module `kpath` to plot the energy bands coloured by the expectation value of the spin along \[001\]: @@ -113,7 +113,6 @@ load 'Fe-bands.gnu' or, using `python`, - ```bash title="Terminal" python Fe-bands.py ``` @@ -122,7 +121,6 @@ Next we plot the Fermi-surface contours on the (010) plane $k_y=0$, using the `kslice` module. Set `kpath = false` and uncomment the following instructions in `Fe.win`, - ```vi title="Input file" kslice = true @@ -142,10 +140,9 @@ kslice_2dkmesh = 200 200 taking the Fermi level value from `scf.out`. The energy eigenvalues are computed on a $200\times 200$ $k$-point grid covering the BZ slice. The lines of intersection between the Fermi surface and the (010) plane can -be visualized with the `gnuplot` or ` python` scripts generated at +be visualized with the `gnuplot` or `python` scripts generated at runtime, - ```bash title="Terminal" gnuplot ``` @@ -156,28 +153,26 @@ load 'Fe-kslice-fermi_lines.gnu' or - ```bash title="Terminal" python Fe-kslice-fermi_lines.py ``` The Fermi lines can be colour-coded by the spin expectation value $\langle S_z\rangle$ of the states on the Fermi surface. Add to -` Fe.win` the line - +`Fe.win` the line ```vi title="Input file" kslice_fermi_lines_colour = spin ``` -and re-run `postw90`. The names of the `gnuplot` and ` python` scripts +and re-run `postw90`. The names of the `gnuplot` and `python` scripts generated at runtime are unchanged. (However, the plotting algorithm is different in this case, and the lines are not as smooth as before. You may want to increase `kslice_2dkmesh`.) -## Further ideas {#further-ideas-5 .unnumbered} +## Further ideas -- Redraw the Fermi surface contours on the (010) plane starting from a +- Redraw the Fermi surface contours on the (010) plane starting from a calculation without spin-orbit coupling, by adding to the input files `iron_{up,down}.win` in Tutorial 8 the lines @@ -212,7 +207,8 @@ may want to increase `kslice_2dkmesh`.) and without spin-orbit, and note the spin-orbit-induced avoided crossings. -- In Tutorial [8](tutorial_8.md#iron-spin-polarized-wfs-dos-projeced-wfs-versus-mlwfs) we obtained MLWFs separately for the up- and down-spin +- In Tutorial [8](tutorial_8.md#iron-spin-polarized-wfs-dos-projeced-wfs-versus-mlwfs) + we obtained MLWFs separately for the up- and down-spin channels of bcc Fe without spin-orbit. The Wannier-interpolated DOS was therefore automatically separated into minority and majority contributions. For a spinor calculation we can still spin-decompose diff --git a/docs/docs/tutorials/tutorial_18.md b/docs/docs/tutorials/tutorial_18.md index ebbe2d84..eba28917 100644 --- a/docs/docs/tutorials/tutorial_18.md +++ b/docs/docs/tutorials/tutorial_18.md @@ -1,53 +1,53 @@ -# 18: Iron — Berry curvature, anomalous Hall conductivity and optical conductivity {#iron-berry-curvature-anomalous-hall-conductivity-and-optical-conductivity .unnumbered} +# 18: Iron — Berry curvature, anomalous Hall conductivity and optical conductivity Note: This tutorial requires a recent version of the `pw2wannier90` interface. -- Outline: *Calculate the Berry curvature, anomalous Hall +- Outline: *Calculate the Berry curvature, anomalous Hall conductivity, and (magneto)optical conductivity of ferromagnetic bcc Fe with spin-orbit coupling. In preparation for this tutorial it may be useful to read Ref. [@yao-prl04] and Ch. 11 of the User Guide.* -- Directory: `tutorials/tutorial18/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial18)* +- Directory: `tutorials/tutorial18/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial18)* -- Input files +- Input files - - `Fe.scf` *The `pwscf` input file for ground state + - `Fe.scf` *The `pwscf` input file for ground state calculation* - - `Fe.nscf` *The `pwscf` input file to obtain Bloch + - `Fe.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `Fe.pw2wan` *The input file for `pw2wannier90`* + - `Fe.pw2wan` *The input file for `pw2wannier90`* - - `Fe.win` *The `wannier90` and `postw90` input file* + - `Fe.win` *The `wannier90` and `postw90` input file* -The sequence of steps below is the same of Tutorial [17](tutorial_17.md#iron-spin-orbit-coupled-bands-and-fermi-surface-contours). If you have -already run that example, you can reuse the output files from steps +The sequence of steps below is the same of Tutorial [17](tutorial_17.md). +If you have already run that example, you can reuse the output files from steps 1 — 5, and only step 6 must be carried out again using the new input file `Fe.win`. -1. Run `pwscf` to obtain the ground state of iron +1. Run `pwscf` to obtain the ground state of iron ```bash title="Terminal" pw.x < Fe.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < Fe.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `Fe.nnkp` file) ```bash title="Terminal" wannier90.x -pp Fe ``` -4. Run `pw2wannier90` to compute the overlaps between Bloch states and +4. Run `pw2wannier90` to compute the overlaps between Bloch states and the projections for the starting guess (written in the `Si.mmn` and `Si.amn` files) @@ -55,26 +55,28 @@ already run that example, you can reuse the output files from steps pw2wannier90.x < Fe.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs +5. Run `wannier90` to compute the MLWFs ```bash title="Terminal" wannier90.x Fe ``` -6. Run `postw90`  +6. Run `postw90` ```bash title="Terminal" postw90.x Fe # (1)! mpirun -np 8 postw90.x Fe # (2)! ``` - 1. serial execution - 2. example of parallel execution with 8 MPI processes + 1. serial execution + 2. example of parallel execution with 8 MPI processes -## Berry curvature plots {#berry-curvature-plots .unnumbered} +## Berry curvature plots The Berry curvature $\Omega_{\alpha\beta}({\bf k})$ of the occupied -states is defined in this [equation](../user_guide/postw90/berry.md#mjx-eqn:eq:ahc)  of the User Guide. The following lines +states is defined in this +[equation](../user_guide/postw90/berry.md#mjx-eqn:eq:ahc) +of the User Guide. The following lines in `Fe.win` are used to calculate the energy bands and the Berry curvature (in bohr$^2$) along high-symmetry lines in $k$-space. @@ -102,8 +104,8 @@ python Fe-bands+curv_z.py and compare with Fig. 2 of Ref. [@yao-prl04]. -In Tutorial [17](tutorial_17.md#iron-spin-orbit-coupled-bands-and-fermi-surface-contours) we plotted the Fermi lines on the (010) plane $k_y=0$. To -combine them with a heatmap plot of (minus) the Berry curvature set +In Tutorial [17](tutorial_17.md) we plotted the Fermi lines on the (010) plane +$k_y=0$. To combine them with a heatmap plot of (minus) the Berry curvature set `kpath = false`, uncomment the following lines in `Fe.win`, re-run `postw90`, and issue @@ -113,9 +115,9 @@ python Fe-kslice-curv_z+fermi_lines.py Compare with Fig. 3 in Ref. [@yao-prl04]. Note how the Berry curvature "hot-spots" tend to occur near spin-orbit-induced avoided crossings (the -Fermi lines with and without spin-orbit were generated in Tutorial [17](tutorial_17.md#iron-spin-orbit-coupled-bands-and-fermi-surface-contours)). +Fermi lines with and without spin-orbit were generated in Tutorial [17](tutorial_17.md)). -## Anomalous Hall conductivity {#anomalous-hall-conductivity .unnumbered} +## Anomalous Hall conductivity The intrinsic anomalous Hall conductivity (AHC) is proportional to the BZ integral of the Berry curvature. In bcc Fe with the magnetization @@ -140,10 +142,10 @@ As a result of the strong and rapid variations of the Berry curvature across the BZ, the AHC converges rather slowly with $k$-point sampling, and a $25\times 25\times 25$ does not yield a well-converged value. -\- Increase the BZ mesh density by changing ` berry_kmesh`. +\- Increase the BZ mesh density by changing `berry_kmesh`. \- To accelerate the convergence, adaptively refine the mesh around - spikes in the Berry curvature, by adding to ` Fe.win` the lines + spikes in the Berry curvature, by adding to `Fe.win` the lines This adds a $5\times 5\times 5$ fine mesh around those points where $\vert{\bm \Omega}({\bf k})\vert$ exceeds 100 bohr$^2$. The percentage @@ -156,10 +158,10 @@ The Wannier-interpolation formula for the Berry curvature comprises three terms, denoted $D$-$D$, $D$-$\overline{A}$, and $\overline{\Omega}$ in Ref. [@wang-prb06], and $J2$, $J1$, and $J0$ in Ref. [@lopez-prb12]. To report in `Fe.wpout` the decomposition of the -total AHC into these three terms, set ` iprint` (verbosity level) to a -value larger than one in ` Fe.win`. +total AHC into these three terms, set `iprint` (verbosity level) to a +value larger than one in `Fe.win`. -## Optical conductivity {#optical-conductivity .unnumbered} +## Optical conductivity The optical conductivity tensor of bcc Fe with magnetization along $\hat{\bf z}$ has the form @@ -198,7 +200,6 @@ berry_task = ahc with - ```vi title="Input file" berry_task = kubo ``` @@ -222,30 +223,38 @@ plot 'Fe-kubo_A_xy.dat' u 1:2 w l ``` Comapare the $\omega\rightarrow 0$ limit with the result obtained -earlier by integrating the Berry curvature.[^3] +earlier by integrating the Berry curvature. + +!!! note + The calculation of the AHC using `berry_task = kubo` involves a + truncation of the sum over empty states in the Kubo-Greenwood + formula: see description of the keyword `kubo_eigval_max` in the + User Guide. As discussed around [the formula for anomalous Hall + conductivity](../user_guide/postw90/berry.md#mjx-eqn:eq:ahc) of the + User Guide, no truncation is done with `berry_task = ahc`. Next we plot the MCD spectrum. Following Ref. [@yao-prl04], we plot ${\rm Im}[\omega\sigma_{xy}(\hbar\omega)]$, in units of $10^{29}$ sec$^{-2}$. The needed conversion factor is $9\times 10^{-18}\times e/\hbar\simeq 0.0137$ ($e$ and $\hbar$ in SI units), - ```gnuplot title="Gnuplot shell" set yrange[-5:15] plot 'Fe-kubo_A_xy.dat' u 1:(\$1)\*(\$3)\*0.0137 w l ``` -## Further ideas {#further-ideas-6 .unnumbered} +## Further ideas \- Recompute the AHC and optical spectra of bcc Fe using projected $s$, $p$, and $d$-type Wannier functions instead of the hybridrized MLWFs - (see Tutorial [8](tutorial_8.md#iron-spin-polarized-wfs-dos-projected-wfs-versus-mlwfs)), + (see Tutorial [8](tutorial_8.md)), and compare the results. \- A crude way to model the influence of heterovalent alloying on the AHC is to assume that its only effect is to donate or deplete electrons, i.e., to shift the Fermi level of the pure - crystal [@yao-prb07]. Recalculate the AHC of bcc Fe for a range of Fermi energies within + crystal [@yao-prb07]. Recalculate the AHC of bcc Fe for a range of Fermi + energies within $\pm 0.5$ eV of the true Fermi level. This calculation can be streamlined by replacing in `Fe.win` diff --git a/docs/docs/tutorials/tutorial_19.md b/docs/docs/tutorials/tutorial_19.md index 59cb6741..c0817d02 100644 --- a/docs/docs/tutorials/tutorial_19.md +++ b/docs/docs/tutorials/tutorial_19.md @@ -1,59 +1,60 @@ -# 19: Iron — Orbital magnetization {#iron-orbital-magnetization .unnumbered} +# 19: Iron — Orbital magnetization Note: This tutorial requires a recent version of the `pw2wannier90` interface. -- Outline: *Calculate the orbital magnetization of ferromagnetic bcc +- Outline: *Calculate the orbital magnetization of ferromagnetic bcc Fe by Wannier interpolation.* -- Directory: `tutorials/tutorial19/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial19)* +- Directory: `tutorials/tutorial19/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial19)* -- Input files +- Input files - - `Fe.scf` *The `pwscf` input file for ground state + - `Fe.scf` *The `pwscf` input file for ground state calculation* - - `Fe.nscf` *The `pwscf` input file to obtain Bloch + - `Fe.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `Fe.pw2wan` *The input file for `pw2wannier90`* + - `Fe.pw2wan` *The input file for `pw2wannier90`* - - `Fe.win` *The `wannier90` and `postw90` input file* + - `Fe.win` *The `wannier90` and `postw90` input file* -The sequence of steps below is the same of Tutorials [17](tutorial_17.md#iron-spin-orbit-coupled-bands-and-fermi-surface-contours) and [18](tutorial_18.md#iron-berry-curvature-anomalous-hall-conductivity-and-optical-conductivity). If you +The sequence of steps below is the same of Tutorials [17](tutorial_17.md) and +[18](tutorial_18.md). If you have already run one of those tutorials, you can reuse the output files from steps 1 — 3 and 5. Steps 4 and 6 should be carried out again using the new input files `Fe.pw2wan` and `Fe.win`. -1. Run `pwscf` to obtain the ground state of iron +1. Run `pwscf` to obtain the ground state of iron ```bash title="Terminal" pw.x < Fe.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < Fe.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `Fe.nnkp` file). ```bash title="Terminal" wannier90.x -pp Fe ``` -4. Run `pw2wannier90` to compute: +4. Run `pw2wannier90` to compute: - - The overlaps $\langle u_{n{\bf k}}\vert u_{m{\bf k}+{\bf + - The overlaps $\langle u_{n{\bf k}}\vert u_{m{\bf k}+{\bf b}}\rangle$ (written in the `Fe.mmn` file) - - The projections for the starting guess (written in the ` Fe.amn` + - The projections for the starting guess (written in the `Fe.amn` file) - - The matrix elements $\langle u_{n{\bf k}+{\bf b}_1}\vert + - The matrix elements $\langle u_{n{\bf k}+{\bf b}_1}\vert H_{\bf k}\vert u_{m{\bf k}+{\bf b}_2}\rangle$ (written in the `Fe.uHu` file) @@ -61,24 +62,24 @@ the new input files `Fe.pw2wan` and `Fe.win`. pw2wannier90.x < Fe.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x Fe ``` -6. Run `postw90` to compute the orbital magnetization. +6. Run `postw90` to compute the orbital magnetization. ```bash title="Terminal" postw90.x Fe # (1)! mpirun -np 8 postw90.x Fe # (2)! ``` - 1. serial execution - 2. example of parallel execution with 8 MPI processes + 1. serial execution + 2. example of parallel execution with 8 MPI processes The orbital magnetization is computed as the BZ integral of the quantity -${\bf M}^{\rm orb}({\bf k})$ defined in this [equation](../user_guide/postw90/berry.md#mjx-eqn:eq:morb) +${\bf M}^{\rm orb}({\bf k})$ defined in this [equation](../user_guide/postw90/berry.md#mjx-eqn:eq:morb) of the User Guide. The relevant lines in `Fe.win` are @@ -98,7 +99,7 @@ reported in `Fe.wpout` with the spin magnetization in `scf.out`. Set terms $J0$, $J1$, and $J2$ defined in Ref. [@lopez-prb12]. To plot $M_z^{\rm orb}({\bf k})$ along high-symmetry lines set -` berry = false` and uncomment in `Fe.win` the block of instructions +`berry = false` and uncomment in `Fe.win` the block of instructions containing ```vi title="Input file" @@ -118,7 +119,7 @@ of $-1/2$ difference in the definition of ${\bf M}^{\rm orb}({\bf k})$ (see Ch. 11 in the User Guide). To plot $M_z^{\rm orb}({\bf k})$ together with the Fermi contours on the -(010) BZ plane set `kpath = false`, uncomment in ` Fe.win` the block of +(010) BZ plane set `kpath = false`, uncomment in `Fe.win` the block of instructions containing ```vi title="Input file" @@ -134,5 +135,5 @@ python Fe-kslice-morb_z+fermi_lines.py ``` $M_z^{\rm orb}({\bf k})$ is much more evenly distributed in $k$-space -than the Berry curvature (see Tutorial [18](tutorial_18.md#iron-berry-curvature-anomalous-hall-conductivity-and-optical-conductivity)). As a result, the integrated +than the Berry curvature (see Tutorial [18](tutorial_18.md)). As a result, the integrated orbital magnetization converges more rapidly with the BZ sampling. diff --git a/docs/docs/tutorials/tutorial_2.md b/docs/docs/tutorials/tutorial_2.md index c4a0ab5a..890c509a 100644 --- a/docs/docs/tutorials/tutorial_2.md +++ b/docs/docs/tutorials/tutorial_2.md @@ -1,34 +1,34 @@ -# 2: Lead — Wannier-interpolated Fermi surface {#lead-wannier-interpolated-fermi-surface .unnumbered} +# 2: Lead — Wannier-interpolated Fermi surface -- Outline: *Obtain MLWFs for the four lowest states in lead. Use +- Outline: *Obtain MLWFs for the four lowest states in lead. Use Wannier interpolation to plot the Fermi surface.* -- Generation Details: *From `pwscf`, using norm-conserving +- Generation Details: *From `pwscf`, using norm-conserving pseudopotentials and a
4$\times$4$\times$4 k-point grid. Starting guess: atom-centred sp$^3$ hybrid orbitals* -- Directory: `tutorials/tutorial02/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial02)* +- Directory: `tutorials/tutorial02/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial02)* -- Input Files +- Input Files - - `lead.win` *The master input file* + - `lead.win` *The master input file* - - `lead.mmn` *The overlap matrices + - `lead.mmn` *The overlap matrices $\mathbf{M}^{(\mathbf{k},\mathbf{b})}$* - - `lead.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the Bloch + - `lead.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the Bloch states onto a set of trial localised orbitals* - - `lead.eig` *The Bloch eigenvalues at each k-point. For + - `lead.eig` *The Bloch eigenvalues at each k-point. For interpolation only* The four lowest valence bands in lead are separated in energy from the -higher conduction states (see bandstructure [plot](#fig:pb-bnd)). The MLWFs of these states have partial -occupancy. MLWFs describing only the occupied states would be poorly -localised. +higher conduction states (see bandstructure [plot](#fig:pb-bnd)). The MLWFs of +these states have partial +occupancy. MLWFs describing only the occupied states would be poorly localised. -1. Run `wannier90` to minimise the MLWFs spread +1. Run `wannier90` to minimise the MLWFs spread ```bash title="Terminal" wannier90.x lead @@ -36,7 +36,7 @@ localised. Inspect the output file `lead.wout`. -2. Use Wannier interpolation to generate the Fermi surface of lead. +2. Use Wannier interpolation to generate the Fermi surface of lead. Rather than re-running the whole calculation we can use the unitary transformations obtained in the first calculation and restart from the plotting routine. Add the following keywords to the `lead.win` @@ -44,9 +44,7 @@ localised. ```vi title="Input file" restart = plot - fermi_energy = 5.2676 - fermi_surface_plot = true ``` @@ -56,7 +54,7 @@ localised. interpolation, on a dense mesh of k-points in the Brillouin zone. The density of this grid is controlled by the keyword - ` fermi_surface_num_points`. The default value is 50 (i.e., 50$^3$ + `fermi_surface_num_points`. The default value is 50 (i.e., 50$^3$ points). The Fermi surface file `lead.bxsf` can be viewed using `XCrySDen`, e.g., diff --git a/docs/docs/tutorials/tutorial_20.md b/docs/docs/tutorials/tutorial_20.md index adc4452a..3d304935 100644 --- a/docs/docs/tutorials/tutorial_20.md +++ b/docs/docs/tutorials/tutorial_20.md @@ -1,43 +1,43 @@ -# 20: Disentanglement restricted inside spherical regions of $k$ space {#disentanglement-restricted-inside-spherical-regions-of-k-space .unnumbered} +# 20: Disentanglement restricted inside spherical regions of $k$ space -## LaVO$_3$ {#lavo_3 .unnumbered} +## LaVO$_3$ -- Outline: *Obtain disentangled MLWFs for strained LaVO$_3$.* +- Outline: *Obtain disentangled MLWFs for strained LaVO$_3$.* -- Directory: `tutorials/tutorial20/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial20)* +- Directory: `tutorials/tutorial20/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial20)* -- Input Files +- Input Files - - `LaVO3.scf` *The `pwscf` input file for ground + - `LaVO3.scf` *The `pwscf` input file for ground state calculation* - - `LaVO3.nscf` *The `pwscf` input file to obtain + - `LaVO3.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `LaV03.pw2wan` *Input file for `pw2wannier90`* + - `LaV03.pw2wan` *Input file for `pw2wannier90`* - - `LaVO3.win` *The `wannier90` input file* + - `LaVO3.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of LaVO$_3$. +1. Run `pwscf` to obtain the ground state of LaVO$_3$. ```bash title="Terminal" `pw.x < LaVO3.scf > scf.out` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid. ```bash title="Terminal" pw.x < LaVO3.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `LaVO3.nnkp` file). ```bash title="Terminal" wannier90.x -pp LaVO3 ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `LaVO3.mmn` and `LaVO3.amn` files). @@ -45,11 +45,11 @@ pw2wannier90.x < LaVO3.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x LaVO3 - ``` + ``` Inspect the output file `LaVO3.wout`. In the initial summary, you will see that the disentanglement was performed only within one sphere of @@ -73,9 +73,9 @@ non-degenerate, while the $X$ point has degeneracy two, hence one must specify both $(1/2,0,0)$ and $(0,1/2,0)$ (see the SrMnO$_3$ example here below). -## Further ideas {#further-ideas-7 .unnumbered} +## Further ideas -- Try to obtain the Wannier functions using the standard +- Try to obtain the Wannier functions using the standard disentanglement procedure (without spheres, `dis_spheres_num = 0`). You will notice that the Wannier-interpolated band structure now shows deviations also in regions of $k$-space far away from $A$, @@ -83,7 +83,7 @@ where disentanglement is actually not necessary. If you disable the disentanglement completely, instead, the Wannierisation procedure does not converge. -- In order to illustrate all possible cases, it is instructive to +- In order to illustrate all possible cases, it is instructive to apply this method to SrMnO$_3$, where the $t_{2g}$ bands are entangled with the above-lying $e_g$ bands, and also with the deeper O-$2p$ states. In the SrMnO$_3$ subfolder, you can find input files @@ -96,8 +96,6 @@ show entanglement of the targeted bands. Also the index disentanglement window, which here contains also states below the lowest-lying Wannier function (at variance with the
LaVO$_3$ case). - -
![Image title](./LaVO3.webp){ width="700" }
@@ -107,5 +105,3 @@ red circles: Wannier-interpolated band structure. The disentanglement was performed only for k-points within a sphere of radius 0.2 Å−1 centered in A.
- - diff --git a/docs/docs/tutorials/tutorial_21.md b/docs/docs/tutorials/tutorial_21.md index 30034fe6..f8367c6f 100644 --- a/docs/docs/tutorials/tutorial_21.md +++ b/docs/docs/tutorials/tutorial_21.md @@ -1,48 +1,50 @@ -# 21: Gallium Arsenide — Symmetry-adapted Wannier functions {#gallium-arsenide-symmetry-adapted-wannier-functions .unnumbered} +# 21: Gallium Arsenide — Symmetry-adapted Wannier functions Note: This tutorial requires a recent version of the `pw2wannier90` interface. -- Outline: *Obtain symmetry-adapted Wannier functions out of four +- Outline: *Obtain symmetry-adapted Wannier functions out of four valence bands of GaAs. For the theoretical background of the symmetry-adapted Wannier functions, see R. Sakuma, Phys. Rev. B **87**, 235109 (2013).* -- Directory: `tutorials/tutorial21/atom_centered_As_sp/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial21)* +- Directory: `tutorials/tutorial21/atom_centered_As_sp/` *Files can be + downloaded from + [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial21)* -- Input Files +- Input Files - - `GaAs.scf` *The `pwscf` input file for ground state + - `GaAs.scf` *The `pwscf` input file for ground state calculation* - - `GaAs.nscf` *The `pwscf` input file to obtain Bloch + - `GaAs.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `GaAs.pw2wan` *The input file for `pw2wannier90`* + - `GaAs.pw2wan` *The input file for `pw2wannier90`* - - `GaAs.win` *The `wannier90` input file* + - `GaAs.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of GaAs +1. Run `pwscf` to obtain the ground state of GaAs ```bash title="Terminal" pw.x < GaAs.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < GaAs.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `GaAs.nnkp` file). ```bash title="Terminal" wannier90.x -pp GaAs ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states, the +4. Run `pw2wannier90` to compute the overlap between Bloch states, the projections for the starting guess, and the symmetry information needed for symmetry-adapted mode (written in the `GaAs.mmn`, `GaAs.amn`, and `GaAs.dmn` files, respectively). @@ -51,7 +53,7 @@ interface. pw2wannier90.x < GaAs.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x GaAs @@ -59,5 +61,3 @@ interface. Each directory creates different kind of symmetry-adapted Wannier function. See more detail in `tree/develop/tutorials/tutorial21/README`. - - diff --git a/docs/docs/tutorials/tutorial_22.md b/docs/docs/tutorials/tutorial_22.md index efa7d684..9e1d3ae4 100644 --- a/docs/docs/tutorials/tutorial_22.md +++ b/docs/docs/tutorials/tutorial_22.md @@ -1,58 +1,58 @@ -# 22: Copper — Symmetry-adapted Wannier functions {#copper-symmetry-adapted-wannier-functions .unnumbered} +# 22: Copper — Symmetry-adapted Wannier functions Note: This tutorial requires a recent version of the `pw2wannier90` interface. -- Outline: *Obtain symmetry-adapted Wannier functions for Cu. By +- Outline: *Obtain symmetry-adapted Wannier functions for Cu. By symmetry-adapted mode, for example, we can make atomic centered $s$-like Wannier function, which is not possible in the usual procedure to create maximally localized Wannier functions. For the theoretical background of the symmetry-adapted Wannier functions, see R. Sakuma, Phys. Rev. B **87**, 235109 (2013).* -- Directory: `tutorials/tutorial22/s_at_0.00/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial22)* +- Directory: `tutorials/tutorial22/s_at_0.00/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial22)* \ -- Input Files +- Input Files - - `Cu.scf` *The `pwscf` input file for ground state + - `Cu.scf` *The `pwscf` input file for ground state calculation* - - `Cu.nscf` *The `pwscf` input file to obtain Bloch + - `Cu.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `Cu.pw2wan` *The input file for `pw2wannier90`* + - `Cu.pw2wan` *The input file for `pw2wannier90`* - - `Cu.sym` *Used only in `tutorials/tutorial22/s_at_0.25/`. + - `Cu.sym` *Used only in `tutorials/tutorial22/s_at_0.25/`. `pw2wannier90` reads this file when `“read_sym = .true.”` in `Cu.pw2wan`. By default, `“read_sym = .false.” and ``Cu.sym`` is the output of ``pw2wannier90`, in which the symmetry operations employed in the calculation are written for reference.* - - `Cu.win` *The `wannier90` input file* + - `Cu.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of Cu +1. Run `pwscf` to obtain the ground state of Cu ```bash title="Terminal" pw.x < Cu.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < Cu.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `Cu.nnkp` file). ```bash title="Terminal" wannier90.x -pp Cu ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states, the +4. Run `pw2wannier90` to compute the overlap between Bloch states, the projections for the starting guess, and the symmetry information needed for symmetry-adapted mode (written in the `Cu.mmn`, `Cu.amn`, and `Cu.dmn` files, respectively). @@ -61,7 +61,7 @@ interface. pw2wannier90.x < Cu.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x Cu @@ -70,5 +70,3 @@ interface. Each directory creates $s$-like symmetry-adapted Wannier function centered at different position on top of atomic centered $d$-like Wannier functions. See more detail in `tutorials/tutorial22/README`. - - diff --git a/docs/docs/tutorials/tutorial_23.md b/docs/docs/tutorials/tutorial_23.md index 27fee72f..60fd6ddd 100644 --- a/docs/docs/tutorials/tutorial_23.md +++ b/docs/docs/tutorials/tutorial_23.md @@ -1,48 +1,48 @@ -# 23: Silicon — $G_0W_0$ bands structure interpolation {#silicon-g_0w_0-bands-structure-interpolation .unnumbered} +# 23: Silicon — $G_0W_0$ bands structure interpolation Note: This tutorial requires a recent version of the `ypp` post-processing code of `yambo`. -- Outline: *Interpolate the bands structure of silicon obtained from +- Outline: *Interpolate the bands structure of silicon obtained from many-body perturbation theory at the $G_0W_0$ level. Using the `yambo` code, the quasi-particle corrections (QP) are summed to - Kohn-Sham eigenvalues, while the wavefunctions remain the same. * + Kohn-Sham eigenvalues, while the wavefunctions remain the same.* -- Directory: `tutorials/tutorial23/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial23)* +- Directory: `tutorials/tutorial23/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial23)* -- Input Files +- Input Files - - `silicon.scf` *The `pwscf` input file for the + - `silicon.scf` *The `pwscf` input file for the ground state calculation* - - `silicon.nscf ` *The `pwscf` input file to obtain + - `silicon.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `silicon.gw.nscf ` *The `pwscf` input file to + - `silicon.gw.nscf` *The `pwscf` input file to obtain Bloch states on a reduced grid with many empty bands* - - `silicon.pw2wan` *The input file for `pw2wannier90`* + - `silicon.pw2wan` *The input file for `pw2wannier90`* - - `silicon.win` *The `wannier90` input file* + - `silicon.win` *The `wannier90` input file* - - `silicon.gw.win` *The `wannier90` input file* (for the $G_0W_0$ + - `silicon.gw.win` *The `wannier90` input file* (for the $G_0W_0$ step) - - `yambo.in` *The `yambo` input file* + - `yambo.in` *The `yambo` input file* - - `ypp.in` *The `ypp` input file* + - `ypp.in` *The `ypp` input file* -1. Copy the input files from the `INPUT directory` into a working +1. Copy the input files from the `INPUT directory` into a working directory (e.g. `WORK`) -2. Run `pwscf` to obtain the ground state charge of +2. Run `pwscf` to obtain the ground state charge of silicon ```bash title="Terminal" pw.x < silicon.scf > scf.out ``` -3. Run `pwscf` to obtain the Bloch states reduced grid. We +3. Run `pwscf` to obtain the Bloch states reduced grid. We use a 8x8x8 with many bands (many empty bands are needed to perform a $G_0W_0$ with `yambo`) @@ -50,7 +50,7 @@ post-processing code of `yambo`. pw.x < silicon.gw.nscf > nscf.gw.out ``` -4. Use the `k_mapper.py` utility to find the indexes of a 4x4x4 uniform +4. Use the `k_mapper.py` utility to find the indexes of a 4x4x4 uniform grid into the 8x8x8 reduced grid ```bash title="Terminal" @@ -70,10 +70,10 @@ post-processing code of `yambo`. ... ``` -5. Enter the `si.save` directory and run `p2y`. A `SAVE` folder is +5. Enter the `si.save` directory and run `p2y`. A `SAVE` folder is created, you can move it up in the `/WORK/` directory. -6. Run a $G_0W_0$ calculation from the `/WORK/` directory (remember, we +6. Run a $G_0W_0$ calculation from the `/WORK/` directory (remember, we are using a 8x8x8 grid but computing QP corrections only on a 4x4x4 grid) @@ -81,21 +81,21 @@ post-processing code of `yambo`. yambo ``` -7. Run `pwscf` to obtain the Bloch states on a uniform +7. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < silicon.nscf > nscf.out ``` -8. Run `wannier90` to generate a list of the required overlaps (written +8. Run `wannier90` to generate a list of the required overlaps (written into the `silicon.nnkp` file). ```bash title="Terminal" wannier90.x -pp silicon ``` -9. Run `pw2wannier90` to compute the overlap between Bloch states, the +9. Run `pw2wannier90` to compute the overlap between Bloch states, the projections for the starting guess (written in the `silicon.mmn` and `silicon.amn` respectively). @@ -141,5 +141,3 @@ After you completed the tutorial for the valence bands only, you can repeat the final steps to interpolate also some conduction bands using disentanglement (the code is already present as comments in the input files). - - diff --git a/docs/docs/tutorials/tutorial_24.md b/docs/docs/tutorials/tutorial_24.md index 48db03d9..3ef5804c 100644 --- a/docs/docs/tutorials/tutorial_24.md +++ b/docs/docs/tutorials/tutorial_24.md @@ -1,57 +1,57 @@ -# 24: Tellurium — gyrotropic effects {#tellurium-gyrotropic-effects .unnumbered} +# 24: Tellurium — gyrotropic effects -- Outline: *Calculate the gyrotropic effects in trigonal right-handed +- Outline: *Calculate the gyrotropic effects in trigonal right-handed Te* Similar to the calculations of [@tsirkin-arxiv17] -- Directory: `tutorials/tutorial24/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial24)* +- Directory: `tutorials/tutorial24/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial24)* -- Input files +- Input files - - `Te.scf` *The `pwscf` input file for ground state + - `Te.scf` *The `pwscf` input file for ground state calculation* - - `Te.nscf` *The `pwscf` input file to obtain Bloch + - `Te.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `Te.pw2wan` *The input file for `pw2wannier90`* + - `Te.pw2wan` *The input file for `pw2wannier90`* - - `Te.win` *The `wannier90` input file* + - `Te.win` *The `wannier90` input file* To make things easy, the tutorial treats Te without spin-orbit -1. Run `pwscf` to obtain the ground state of tellurium +1. Run `pwscf` to obtain the ground state of tellurium ```bash title="Terminal" pw.x < Te.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform `3x3x4` k-point grid ```bash title="Terminal" pw.x < Te.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `Te.nnkp` file). ```bash title="Terminal" wannier90.x -pp Te ``` -4. Run `pw2wannier90` to compute: +4. Run `pw2wannier90` to compute: - - The overlaps $\langle u_{n{\bf k}}\vert u_{m{\bf k}+{\bf + - The overlaps $\langle u_{n{\bf k}}\vert u_{m{\bf k}+{\bf b}}\rangle$ (written in the `Te.mmn` file) - - The projections for the starting guess (written in the ` Te.amn` + - The projections for the starting guess (written in the `Te.amn` file) - - The matrix elements $\langle u_{n{\bf k}+{\bf b}_1}\vert + - The matrix elements $\langle u_{n{\bf k}+{\bf b}_1}\vert H_{\bf k}\vert u_{m{\bf k}+{\bf b}_2}\rangle$ (written in the `Te.uHu` file) - - The spin matrix elements $\langle \psi_{n{\bf + - The spin matrix elements $\langle \psi_{n{\bf k}}\vert \sigma_i\vert \psi_{m{\bf k}}\rangle$ (would be written in the `Te.spn` file, but only if spin-orbit is included, which is not the case for the present tutorial) @@ -60,13 +60,13 @@ To make things easy, the tutorial treats Te without spin-orbit pw2wannier90.x < Te.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x Te ``` -6. Add the following lines to the `wannier90.win` file: +6. Add the following lines to the `wannier90.win` file: ```vi title="Input file" gyrotropic=true @@ -87,19 +87,17 @@ To make things easy, the tutorial treats Te without spin-orbit gyrotropic_kmesh=50 50 50 ``` -7. Run `postw90`  +7. Run `postw90` to compute the gyrotropic properties: tensors $D$, $\widetilde{D}$, $K$, $C$ (See the User Guide): - ```bash title="Terminal" postw90.x Te # (1)! mpirun -np 8 postw90.x Te # (2)! ``` - 1. serial execution - 2. example of parallel execution with 8 MPI processes - + 1. serial execution + 2. example of parallel execution with 8 MPI processes The integration in the $k$-space is limited to a small area around the H point. Thus it is valid only for Fermi levels near the band @@ -107,7 +105,7 @@ To make things easy, the tutorial treats Te without spin-orbit H' point. To integrate over the entire Brillouin zone, one needs to remove the `gyrotropic_box_`$\ldots$ parameters -8. Now change the above lines to +8. Now change the above lines to ```vi title="Input file" gyrotropic=true @@ -129,5 +127,5 @@ To make things easy, the tutorial treats Te without spin-orbit mpirun -np 8 postw90.x Te # (2)! ``` - 1. serial execution - 2. example of parallel execution with 8 MPI processes + 1. serial execution + 2. example of parallel execution with 8 MPI processes diff --git a/docs/docs/tutorials/tutorial_25.md b/docs/docs/tutorials/tutorial_25.md index 1a81c115..8630e8dc 100644 --- a/docs/docs/tutorials/tutorial_25.md +++ b/docs/docs/tutorials/tutorial_25.md @@ -1,62 +1,62 @@ -# 25: Gallium Arsenide — Nonlinear shift current {#gallium-arsenide-nonlinear-shift-current .unnumbered} +# 25: Gallium Arsenide — Nonlinear shift current -- Outline: *Calculate the nonlinear shift current of inversion +- Outline: *Calculate the nonlinear shift current of inversion asymmetric fcc Gallium Arsenide. In preparation for this tutorial it may be useful to read Ref. [@ibanez-azpiroz_ab_2018]* -- Directory: `tutorials/tutorial25/` *Files can be downlowaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial25)* +- Directory: `tutorials/tutorial25/` *Files can be downlowaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial25)* -- Input files: +- Input files: - - `GaAs.scf` *The `pwscf` input file for ground state calculation* + - `GaAs.scf` *The `pwscf` input file for ground state calculation* - - `GaAs.nscf` *The `pwscf` input file to obtain Bloch states on a + - `GaAs.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `GaAs.pw2wan` *The input file for* `pw2wannier90` + - `GaAs.pw2wan` *The input file for* `pw2wannier90` - - `GaAs.win` *The* `wannier90` *and* `postw90` *input file* + - `GaAs.win` *The* `wannier90` *and* `postw90` *input file*   -1. Run `pwscf` to obtain the ground state of Gallium Arsenide +1. Run `pwscf` to obtain the ground state of Gallium Arsenide ```bash title="Terminal" pw.x < GaAs.scf > scf.out ``` -2. Run `pwscf` to obtain the ground state of Gallium Arsenide +2. Run `pwscf` to obtain the ground state of Gallium Arsenide ```bash title="Terminal" pw.x < GaAs.nscf > nscf.out ``` -3. Run `Wannier90` to generate a list of the required overlaps +3. Run `Wannier90` to generate a list of the required overlaps (written into the `GaAs.nnkp` file) ```bash title="Terminal" wannier90.x -pp GaAs ``` -4. Run `pw2wannier90` to compute: +4. Run `pw2wannier90` to compute: - - The overlaps $\langle u_{n\bf{k}}|u_{n\bf{k+b}}\rangle$ + - The overlaps $\langle u_{n\bf{k}}|u_{n\bf{k+b}}\rangle$ between spinor Bloch states (written in the `GaAs.mmn` file) - - The projections for the starting guess (written in the + - The projections for the starting guess (written in the `GaAs.amn` file) ```bash title="Terminal" pw2wannier90.x < GaAs.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute MLWFs +5. Run `wannier90` to compute MLWFs ```bash title="Terminal" wannier90.x GaAs ``` -6. Run `postw90` to compute nonlinear shift current +6. Run `postw90` to compute nonlinear shift current ```bash title="Terminal" postw90.x GaAs` # (1)! @@ -64,15 +64,14 @@ mpirun -np 8 postw90.x GaAs # (2)! ``` - 1. serial execution - 2. example of parallel execution with 8 MPI processes + 1. serial execution + 2. example of parallel execution with 8 MPI processes -## Shift current $\sigma^{abc}$ {#shift-current-sigmaabc .unnumbered} +## Shift current $\sigma^ The shift current tensor of GaAs has only one independent component that is finite, namely $\sigma^{xyz}$. For its computation, set - ```vi title="Input file" berry = true berry_task = sc @@ -129,5 +128,3 @@ gnuplot ```gnuplot title="Gnuplot shell" plot 'GaAs-sc_xyz.dat' u 1:2 w l ``` - - diff --git a/docs/docs/tutorials/tutorial_26.md b/docs/docs/tutorials/tutorial_26.md index 572ba944..3adeca4a 100644 --- a/docs/docs/tutorials/tutorial_26.md +++ b/docs/docs/tutorials/tutorial_26.md @@ -1,62 +1,62 @@ -# 26: Gallium Arsenide — Selective localization and constrained centres {#gallium-arsenide-selective-localization-and-constrained-centres .unnumbered} +# 26: Gallium Arsenide — Selective localization and constrained centres -- Outline: *Application of the selectively localised Wannier function +- Outline: *Application of the selectively localised Wannier function (SLWF) method to gallium arsenide (GaAs), following the example in Ref. [@Marianetti], which is essential reading for this tutorial tutorial.* -- Directory: `tutorials/tutorial26/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial26)* +- Directory: `tutorials/tutorial26/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial26)* -- Input files: +- Input files: - - `GaAs.scf` *The `pwscf` input file for ground state calculation* + - `GaAs.scf` *The `pwscf` input file for ground state calculation* - - `GaAs.nscf` *The `pwscf` input file to obtain Bloch states on a + - `GaAs.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `GaAs.pw2wan` *The input file for* `pw2wannier90` + - `GaAs.pw2wan` *The input file for* `pw2wannier90` - - `GaAs.win` *The* `wannier90` *and* `postw90` *input file* + - `GaAs.win` *The* `wannier90` *and* `postw90` *input file*   -1. Run `pwscf` to obtain the ground state of Gallium Arsenide +1. Run `pwscf` to obtain the ground state of Gallium Arsenide ```bash title="Terminal" pw.x < GaAs.scf > scf.out ``` -2. Run `pwscf` to obtain the ground state of Gallium Arsenide +2. Run `pwscf` to obtain the ground state of Gallium Arsenide ```bash title="Terminal" pw.x < GaAs.nscf > nscf.out ``` -3. Run `Wannier90` to generate a list of the required overlaps +3. Run `Wannier90` to generate a list of the required overlaps (written into the `GaAs.nnkp` file) ```bash title="Terminal" wannier90.x -pp GaAs ``` -4. Run `pw2wannier90` to compute: +4. Run `pw2wannier90` to compute: - - The overlaps $\langle u_{n\bf{k}}|u_{n\bf{k+b}}\rangle$ + - The overlaps $\langle u_{n\bf{k}}|u_{n\bf{k+b}}\rangle$ between Bloch states (written in the `GaAs.mmn` file) - - The projections for the starting guess (written in the + - The projections for the starting guess (written in the `GaAs.amn` file) ```bash title="Terminal" pw2wannier90.x < GaAs.pw2wan > pw2wan.out ``` -5. Inspect the `.win` file. +5. Inspect the `.win` file. - - Make sure you understand the new keywords corresponding to + - Make sure you understand the new keywords corresponding to the selective localisation algorithm. - - Run `wannier90` to compute the SLWFs, in this case using one + - Run `wannier90` to compute the SLWFs, in this case using one objective Wannier function. ```bash title="Terminal" @@ -81,5 +81,3 @@ value of `slwf_lambda` in this case to converge? Take a look at the result in Vesta and explain what you see. Do these functions transform like the identity under the action of the $T_d$ group? - - diff --git a/docs/docs/tutorials/tutorial_27.md b/docs/docs/tutorials/tutorial_27.md index 39c81843..443da69d 100644 --- a/docs/docs/tutorials/tutorial_27.md +++ b/docs/docs/tutorials/tutorial_27.md @@ -1,9 +1,9 @@ -# 27: Silicon — Selected columns of density matrix algorithm for automated MLWFs {#silicon-selected-columns-of-density-matrix-algorithm-for-automated-mlwfs .unnumbered} +# 27: Silicon — Selected columns of density matrix algorithm for automated MLWFs Note: This tutorial requires a recent version of the `pw2wannier90.x` post-processing code of `Quantum ESPRESSO` (v6.4 or above). -- Outline: *For bulk crystalline Silicon, generate the $A_{mn}$ +- Outline: *For bulk crystalline Silicon, generate the $A_{mn}$ matrices via the selected columns of density matrix (SCDM) algorithm and the corresponding MLWFs for 1) Valence bands 2) Valence bands and 4 low-lying conduction bands 3) Conduction bands only. To better @@ -12,73 +12,73 @@ post-processing code of `Quantum ESPRESSO` (v6.4 or above). methods explained in Ref. [@LinLin-ArXiv2017]. More info on the keywords related to the SCDM method may be found in the user_guide.* -- Directory: `tutorials/tutorial27/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial27)* +- Directory: `tutorials/tutorial27/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial27)* -- Input Files: `input_files`, and in the three subfolders +- Input Files: `input_files`, and in the three subfolders `isolated, erfc` and `gaussian`. The `input_files` folder contains: - - `si.scf` *The `pwscf` input file for the ground + - `si.scf` *The `pwscf` input file for the ground state calculation* - - `si_4bands.nscf ` *The `pwscf` input file to obtain + - `si_4bands.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid for 4 bands.* - - `si_12bands.nscf ` *The `pwscf` input file to + - `si_12bands.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid for 12 bands.* -- Whereas the three subfolders `isolated, erfc` and `gaussian` +- Whereas the three subfolders `isolated, erfc` and `gaussian` contain the `si.win` `wannier90`  input files and `si.pw2wan` `pw2wannier90` input files each corresponding to one of the scenarios listed in the outline. +## Valence bands -###Valence bands In this case we will compute 4 localized WFs corresponding to the 4 valence bands of Silicon. These 4 bands constitute a manifold that is separated in energy from other bands. In this case the columns of the density matrix are already localized in real space and no extra parameter is required. -1. Copy the input files `si.scf` and `si_4bands.nscf` from the +1. Copy the input files `si.scf` and `si_4bands.nscf` from the `input_files` directory into the `isolated` folder -2. Run `pwscf` to obtain the ground state charge of +2. Run `pwscf` to obtain the ground state charge of bulk Silicon. ```bash title="Terminal" pw.x < si.scf > scf.out ``` -3. Run `pwscf` to obtain the Bloch states on a uniform +3. Run `pwscf` to obtain the Bloch states on a uniform k-point grid of 4x4x4 for 4 bands. ```bash title="Terminal" pw.x < si_4bands.nscf > nscf.out ``` -4. Inspect the `si.win` input file and make sure that the +4. Inspect the `si.win` input file and make sure that the `auto_projections` flag is set to `.true.`. Also, make sure that no projections block is present. -5. Run `wannier90` to generate a list of the required overlaps and +5. Run `wannier90` to generate a list of the required overlaps and also info on the SCDM method (written into the `si.nnkp` file). ```bash title="Terminal" wannier90.x -pp si ``` -6. Inspect the `si.nnkp` file and make sure you find the +6. Inspect the `si.nnkp` file and make sure you find the `auto_projections` block and that no projections have been written in the `projections` block. -7. Inspect the `.pw2wan` input file. You will find two new +7. Inspect the `.pw2wan` input file. You will find two new keywords, i.e. `scdm_proj` and `scdm_entanglement`. The former, will instruct `pw2wannier90.x` to use the SCDM method when generating the $A_{mn}$ matrix. The latter, defines which formula to adopt for the function $f(\varepsilon_{n\mathbf{k}})$ (see [@LinLin-ArXiv2017] and point below). -8. Run `pw2wannier90` to compute the overlap between Bloch states +8. Run `pw2wannier90` to compute the overlap between Bloch states and the projections via the SCDM method (written in the `si.mmn` and `si.amn` respectively). @@ -86,7 +86,7 @@ in real space and no extra parameter is required. pw2wannier90.x < si.pw2wan > pw2wan.out ``` -9. Run `wannier90` to compute the MLWFs. +9. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x si @@ -97,10 +97,11 @@ the interpolated valence bands for Silicon. Inspect the output file `si.wout`. In particular, look at the geometric centres of each WF, do they lie at the centre of the Si-Si bond as for the MLWFs computed from user-defined initial $s$-like projections -(see Tutorial [11](tutorial_11.md#silicon-valence-and-low-lying-conduction-states))? Plot these WFs using Vesta. Do they show the +(see Tutorial [11](tutorial_11.md))? Plot these WFs using Vesta. Do they show the $\sigma$ character one would expect from chemical arguments? -###Valence bands + conduction bands +## Valence bands + conduction bands + In this case we will compute 8 localized WFs corresponding to the 4 valence bands and 4 low-lying conduction bands. Here, we don't have a separate manifold, since the @@ -120,47 +121,48 @@ $f(\varepsilon_{n,\mathbf{k}})$ contains two free parameters $\mu$ and $\sigma$ and is defined as a complementary error function: $$ -f(\varepsilon_{n,\mathbf{k}}) = \frac{1}{2}\mathrm{erfc}\left(\frac{\varepsilon_{n,\mathbf{k}} - \mu}{\sigma}\right). +f(\varepsilon_{n,\mathbf{k}}) = \frac{1}{2}\mathrm{erfc} +\left(\frac{\varepsilon_{n,\mathbf{k}} - \mu}{\sigma}\right). $$ -1. Copy the input files `si.scf` and `si_12bands.nscf` from the +1. Copy the input files `si.scf` and `si_12bands.nscf` from the `input_files` folder into the `erfc` folder -2. Run `pwscf` to obtain the ground state charge of +2. Run `pwscf` to obtain the ground state charge of bulk Silicon. ```bash title="Terminal" pw.x < si.scf > scf.out ``` -3. Run `pwscf` to obtain the Bloch states on a uniform +3. Run `pwscf` to obtain the Bloch states on a uniform k-point grid of 4x4x4 for 12 bands this time. ```bash title="Terminal" pw.x < si_12bands.nscf > nscf.out ``` -4. Inspect the `si.win` input file and make sure that the +4. Inspect the `si.win` input file and make sure that the `auto_projections` flag is set to `.true.`. Also, make sure that no projection block is present. -5. Run `wannier90` to generate a list of the required overlaps and +5. Run `wannier90` to generate a list of the required overlaps and also info on the SCDM method (written into the `si.nnkp` file). ```bash title="Terminal" wannier90.x -pp si ``` -6. Inspect the `si.nnkp` file and make sure you find the +6. Inspect the `si.nnkp` file and make sure you find the `auto_projections` block and that no projections have been written in the `projections` block. -7. Inspect the `.pw2wan` input file. You will find other two new +7. Inspect the `.pw2wan` input file. You will find other two new keywords, i.e. `scdm_mu` and `scdm_sigma`. These are the values in eV of $\mu$ and $\sigma$ in $f(\varepsilon_{n,\mathbf{k}})$, respectively. -8. Run `pw2wannier90` to compute the overlap between Bloch states +8. Run `pw2wannier90` to compute the overlap between Bloch states and the projections via the SCDM method (written in the `si.mmn` and `si.amn` respectively). @@ -168,7 +170,7 @@ $$ pw2wannier90.x < si.pw2wan > pw2wan.out ``` -9. Run `wannier90` to compute the MLWFs. +9. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x si @@ -177,14 +179,15 @@ $$ At this point, you should have obtained 8 localized Wannier functions and the interpolated valence and conduction bands for Silicon. Again, compare the results for the geometric centres -and the individual spreads with the ones from Tutorial [11](tutorial_11.md#silicon-valence-and-low-lying-conduction-states). Is the +and the individual spreads with the ones from Tutorial [11](tutorial_11.md). Is the final value of total spread bigger or smaller than the one from -Tutorial [11](tutorial_11.md#silicon-valence-and-low-lying-conduction-states)? +Tutorial [11](tutorial_11.md)? Look at the WFs with Vesta. Can you explain what you see? Where do the major lobes of the $sp3$-like WFs point in this case? -###Conduction bands only +## Conduction bands only + In this case we will compute 4 localized WFs corresponding to the 4 low-lying conduction bands only. As for the previous point, we need to define a modified density @@ -196,48 +199,47 @@ $$ f(\varepsilon_{n,\mathbf{k}}) = \exp\left(-\frac{(\varepsilon_{n,\mathbf{k}} - \mu)^2}{\sigma^2}\right). $$ - -1. Copy the input files `si.scf` and `si_12bands.nscf` from the +1. Copy the input files `si.scf` and `si_12bands.nscf` from the `input_files` directory into the `gaussian` folder -2. Run `pwscf` to obtain the ground state charge of +2. Run `pwscf` to obtain the ground state charge of bulk Silicon. ```bash title="Terminal" pw.x < si.scf > scf.out ``` -3. Run `pwscf` to obtain the Bloch states on a uniform +3. Run `pwscf` to obtain the Bloch states on a uniform k-point grid of 4x4x4 for 12 bands this time. ```bash title="Terminal" pw.x < si_12bands.nscf > nscf.out ``` -4. Inspect the `si.win` input file and make sure that the +4. Inspect the `si.win` input file and make sure that the `auto_projections` flag is set to `.true.`. Also, make sure that no projections block is present. -5. Run `wannier90` to generate a list of the required overlaps and +5. Run `wannier90` to generate a list of the required overlaps and also info on the SCDM method (written into the `si.nnkp` file). ```bash title="Terminal" wannier90.x -pp si ``` -6. Inspect the `si.nnkp` file and make sure you find the +6. Inspect the `si.nnkp` file and make sure you find the `auto_projections` block and that no projections have been written in the `projections` block. -7. Run `pw2wannier90` to compute the overlap between Bloch states, +7. Run `pw2wannier90` to compute the overlap between Bloch states, the projections for the starting guess via the SCDM method (written in the `si.mmn` and `si.amn` respectively). ```bash title="Terminal" pw2wannier90.x < si.pw2wan > pw2wan.out - ``` + ``` -8. Run `wannier90` to compute the MLWFs. +8. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x si diff --git a/docs/docs/tutorials/tutorial_28.md b/docs/docs/tutorials/tutorial_28.md index 063a5f60..ea25451c 100644 --- a/docs/docs/tutorials/tutorial_28.md +++ b/docs/docs/tutorials/tutorial_28.md @@ -1,44 +1,45 @@ -# 28: Diamond — plotting of MLWFs using Gaussian cube format and VESTA {#diamond-plotting-of-mlwfs-using-gaussian-cube-format-and-vesta .unnumbered} +# 28: Diamond — plotting of MLWFs using Gaussian cube format and VESTA -- Outline: *Obtain MLWFs for the valence bands of diamond and output +- Outline: *Obtain MLWFs for the valence bands of diamond and output them in Gaussian cube format* -- Directory: `tutorials/tutorial28/` *The input files for this tutorials - are the same as the ones in Tutorial [5](tutorial_5.md#diamond-mlwfs-for-the-valence-bands) and can be downloaded [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial28)* +- Directory: `tutorials/tutorial28/` *The input files for this tutorials are the + same as the ones in Tutorial [5](tutorial_5.md) and can be downloaded + [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial28)* -- Input Files +- Input Files - - `diamond.scf` *The `pwscf` input file for ground + - `diamond.scf` *The `pwscf` input file for ground state calculation* - - `diamond.nscf` *The `pwscf` input file to obtain + - `diamond.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `diamond.pw2wan` *The input file for `pw2wannier90`* + - `diamond.pw2wan` *The input file for `pw2wannier90`* - - `diamond.win` *The `wannier90` input file* + - `diamond.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of diamond +1. Run `pwscf` to obtain the ground state of diamond ```bash title="Terminal" pw.x < diamond.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < diamond.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `diamond.nnkp` file). ```bash title="Terminal" wannier90.x -pp diamond ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `diamond.mmn` and `diamond.amn` files). @@ -46,7 +47,7 @@ pw2wannier90.x < diamond.pw2wan > pw2wan.out ``` -5. When the lattice vectors are non-orthogonal, not all the +5. When the lattice vectors are non-orthogonal, not all the visualisation programs are capable to plot volumetric data in the Gaussian cube format. One program that can read volumetric data for these systems is VESTA. To instruct `wannier90` to output the MLWFs @@ -69,7 +70,7 @@ wannier90.x diamond ``` -6. Plot the first MLWF with VESTA `vesta diamond_00001.cube` +6. Plot the first MLWF with VESTA `vesta diamond_00001.cube` Extra: Instead of using `wannier_plot_mode = crystal` try to use the molecule mode as `wannier_plot_mode = molecule` (see the user guide for diff --git a/docs/docs/tutorials/tutorial_29.md b/docs/docs/tutorials/tutorial_29.md index 98250101..5e2667d6 100644 --- a/docs/docs/tutorials/tutorial_29.md +++ b/docs/docs/tutorials/tutorial_29.md @@ -1,49 +1,50 @@ -# 29: Platinum — Spin Hall conductivity {#platinum-spin-hall-conductivity .unnumbered} +# 29: Platinum — Spin Hall conductivity -- Outline: *Calculate spin Hall conductivity (SHC) and plot Berry +- Outline: *Calculate spin Hall conductivity (SHC) and plot Berry curvature-like term of fcc Pt considering spin-orbit coupling. To gain a better understanding of this tutorial, it is suggested to read - Ref. [@qiao-prb2018] for a detailed description of the theory and - the [berry_task=shc: spin Hall conductivity](../user_guide/postw90/berry.md#sec:shc) + Ref. [@qiao-prb2018] for a detailed description of the theory and the + [berry_task=shc: spin Hall conductivity](../user_guide/postw90/berry.md#sec:shc) chapter of the User Guide.* -- Directory: `tutorials/tutorial29/` *Files can be downloaded [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial29)* +- Directory: `tutorials/tutorial29/` *Files can be downloaded + [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial29)* -- Input files +- Input files - - `Pt.scf` *The `pwscf` input file for ground state + - `Pt.scf` *The `pwscf` input file for ground state calculation* - - `Pt.nscf` *The `pwscf` input file to obtain Bloch + - `Pt.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `Pt.pw2wan` *The input file for `pw2wannier90`* + - `Pt.pw2wan` *The input file for `pw2wannier90`* - - `Pt.win` *The `wannier90` and `postw90` input file* + - `Pt.win` *The `wannier90` and `postw90` input file*   -1. Run `pwscf` to obtain the ground state of platinum - +1. Run `pwscf` to obtain the ground state of platinum + ```bash title="Terminal" pw.x < Pt.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform $k$-point grid - + ```bash title="Terminal" pw.x < Pt.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `Pt.nnkp` file) - + ```bash title="Terminal" wannier90.x -pp Pt ``` -4. Run `pw2wannier90` to compute the overlaps between Bloch states and +4. Run `pw2wannier90` to compute the overlaps between Bloch states and the projections for the starting guess (written in the `Pt.mmn` and `Pt.amn` files) @@ -51,23 +52,23 @@ pw2wannier90.x < Pt.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs +5. Run `wannier90` to compute the MLWFs ```bash title="Terminal" wannier90.x Pt ``` -6. Run `postw90` +6. Run `postw90` ```bash title="Terminal" - postw90.x Pt # (1)! - mpirun -np 8 postw90.x Pt # (2)! + postw90.x Pt # (1)! + mpirun -np 8 postw90.x Pt # (2)! ``` - 1. serial execution - 2. example of parallel execution with 8 MPI processes + 1. serial execution + 2. example of parallel execution with 8 MPI processes -## Spin Hall conductivity {#spin-hall-conductivity .unnumbered} +## Spin Hall conductivity The intrinsic spin Hall conductivity $\sigma_{\alpha\beta}^{\text{spin}\gamma}$ is proportional to the BZ @@ -77,9 +78,7 @@ $25\times ```vi title="Input file" berry = true - berry_task = shc - berry_kmesh = 25 25 25 ``` @@ -88,7 +87,6 @@ following two lines, ```vi title="Input file" #kubo_adpt_smr = false - #kubo_smr_fixed_en_width = 1 ``` @@ -102,9 +100,7 @@ or invoke Fermi energy scan by setting ```vi title="Input file" fermi_energy_min = [insert here your lower range] - fermi_energy_max = [insert here your upper range] - fermi_energy_step = [insert here your step] ``` @@ -130,10 +126,10 @@ curvature-like term across the BZ, the SHC converges rather slowly with $k$-point sampling, and a $25\times 25\times 25$ kmesh does not yield a well-converged value. -- Increase the kmesh density by changing ` berry_kmesh`. +- Increase the kmesh density by changing `berry_kmesh`. -- To accelerate the convergence, adaptively refine the kmesh around - spikes in the Berry curvature-like term, by adding to ` Pt.win` the +- To accelerate the convergence, adaptively refine the kmesh around + spikes in the Berry curvature-like term, by adding to `Pt.win` the lines This adds a $5\times 5\times 5$ fine mesh around those points where $\vert{\Omega_{\alpha\beta}^{\text{spin}\gamma}}({\bm k})\vert$ @@ -147,22 +143,30 @@ Note some rough estimations of computation progress and time are reported in `Pt.wpout` (see the SHC part of the Solution Booklet). These may be helpful if the computation time is very long. -## Notes {#notes .unnumbered} +!!! note + - Since the Kubo formula of SHC involves unoccupied bands, we need to + include some unoccupied bands and construct more MLWF. Thus the + following parameters should be increased accordingly: -- Since the Kubo formula of SHC involves unoccupied bands, we need to - include some unoccupied bands and construct more MLWF. Thus the - following parameters should be increased accordingly: + + ```vi title="Input file" + dis_froz_max + dis_win_max + projections + ``` + -- Normally we calculate the SHC $\sigma_{xy}^{\text{spin}z}$, i.e. - $\alpha = x, \beta = y, \gamma = z$. To calculate other components, - the following parameters can be set as `1, 2, 3` with `1, 2, 3` - standing for `x, y, z` respectively. + - Normally we calculate the SHC $\sigma_{xy}^{\text{spin}z}$, i.e. + $\alpha = x, \beta = y, \gamma = z$. To calculate other components, + the following parameters can be set as `1, 2, 3` with `1, 2, 3` + standing for `x, y, z` respectively. -## Berry curvature-like term plots {#berry-curvature-like-term-plots .unnumbered} +## Berry curvature-like term plots The band-projected Berry curvature-like term $\Omega_{n,\alpha\beta}^{\text{spin} \gamma}({\bm k})$ is defined in -this [equation](../user_guide/postw90/berry.md#mjx-eqn:eq:kubo_shc_berry) of the User Guide. +this [equation](../user_guide/postw90/berry.md#mjx-eqn:eq:kubo_shc_berry) +of the User Guide. The following lines in `Pt.win` are used to calculate the energy bands colored by the band-projected Berry curvature-like term @@ -174,19 +178,12 @@ lines in $k$-space, i.e. the `kpath` plot. First comment the line ```vi title="Input file" kpath = true - kpath_task = bands+shc - kpath_bands_colour = shc - kpath_num_points = 400 - kubo_adpt_smr = false - kubo_smr_fixed_en_width = 1 - fermi_energy = [insert your value here] - berry_curv_unit = ang2 ``` @@ -229,36 +226,107 @@ python Pt-kslice-shc+fermi_lines.py Compare the generated figure with Fig. 3 in Ref. [@qiao-prb2018], or the Solution Booklet. -## Notes {#notes-1 .unnumbered} - -- Adaptive smearing depends on a uniform kmesh, so when running +!!! note + Adaptive smearing depends on a uniform kmesh, so when running `kpath` and `kslice` plots adaptive smearing should not be used. A - fixed smearing is needed to avoid near zero number in the - denominator of the [Kubo formula](../user_guide/postw90/berry.md#mjx-eqn:eq:kubo_shc) - in the User Guide. To - add a fixed smearing of 0.05 eV, add the following keywords in the - `Pt.win`, + fixed smearing is needed to avoid near zero number in the denominator of the + [Kubo formula](../user_guide/postw90/berry.md#mjx-eqn:eq:kubo_shc) + in the User Guide. To add a fixed smearing of 0.05 eV, add the following + keywords in the`Pt.win`, + + + ```vi title="Input file" + kubo_adpt_smr = .false. + kubo_smr_fixed_en_width = 0.05 + ``` + -## Input parameters for SHC {#input-parameters-for-shc .unnumbered} +## Input parameters for SHC Finally, we provide a complete list of input parameters that can be used to control the SHC calculation, including the calculation of alternating current (ac) SHC which will be introduced in the next tutorial. -- general controls for SHC +- general controls for SHC -- kmesh + ```vi title="Input file" + shc_freq_scan + shc_alpha + shc_beta + shc_gamma -- ac SHC + kubo_eigval_max + exclude_bands + berry_curv_unit + ``` -- smearing +- kmesh -- Fermi energy + ```vi title="Input file" + berry_task + berry_kmesh -- kpath + berry_curv_adpt_kmesh + berry_curv_adpt_kmesh_thresh + ``` -- kslice +- ac SHC + + ```vi title="Input file" + kubo_freq_min + kubo_freq_max + kubo_freq_step + + shc_bandshift + shc_bandshift_firstband + shc_bandshift_energyshift + + scissors_shift + num_valence_bands + ``` + +- smearing + + ```vi title="Input file" + [kubo_]adpt_smr + [kubo_]adpt_smr_fac + [kubo_]adpt_smr_max + + [kubo_]smr_fixed_en_width + ``` + +- Fermi energy + + ```vi title="Input file" + fermi_energy + fermi_energy_min + fermi_energy_max + fermi_energy_step + ``` + +- kpath + + ```vi title="Input file" + kpath + kpath_task + kpath_num_points + kpath_bands_colour + ``` + +- kslice + + ```vi title="Input file" + kslice + kslice_task + kslice_corner + kslice_b1 + kslice_b2 + kslice_2dkmesh + + kslice_fermi_level + kslice_fermi_lines_colour + ``` -Their meanings and usages can be found in the +Their meanings and usages can be found in the [berry_task=shc: spin Hall conductivity](../user_guide/postw90/berry.md#sec:shc) chapter of the User Guide. diff --git a/docs/docs/tutorials/tutorial_3.md b/docs/docs/tutorials/tutorial_3.md index 3647f551..8942681c 100644 --- a/docs/docs/tutorials/tutorial_3.md +++ b/docs/docs/tutorials/tutorial_3.md @@ -1,26 +1,26 @@ -# 3: Silicon — Disentangled MLWFs {#silicon-disentangled-mlwfs .unnumbered} +# 3: Silicon — Disentangled MLWFs -- Outline: *Obtain disentangled MLWFs for the valence and low-lying - conduction states of Si. Plot the interpolated bandstructure* +- Outline: *Obtain disentangled MLWFs for the valence and low-lying + conduction states of Si. Plot the interpolated band structure* -- Generation Details: *From `pwscf`, using norm-conserving +- Generation Details: *From `pwscf`, using norm-conserving pseudopotentials and a
4$\times$4$\times$4 k-point grid. Starting guess: atom-centred sp$^3$ hybrid orbitals* -- Directory: `tutorials/tutorial03/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial03)* +- Directory: `tutorials/tutorial03/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial03)* -- Input Files +- Input Files - - `silicon.win` *The master input file* + - `silicon.win` *The master input file* - - `silicon.mmn` *The overlap matrices + - `silicon.mmn` *The overlap matrices $\mathbf{M}^{(\mathbf{k},\mathbf{b})}$* - - `silicon.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the + - `silicon.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the Bloch states onto a set of trial localised orbitals* - - `silicon.eig` *The Bloch eigenvalues at each k-point* + - `silicon.eig` *The Bloch eigenvalues at each k-point* The valence and lower conduction states can be represented by MLWFs with $sp^3$-like symmetry. The lower conduction states are not separated from @@ -29,7 +29,7 @@ use the disentanglement procedure introduced in Ref. [@souza-prb01]. The position of the inner and outer energy windows are shown in the bandstructure [plot](#fig:si.bnd). -1. Run `wannier90`. +1. Run `wannier90`. ```bash title="Terminal" wannier90.x silicon @@ -42,7 +42,7 @@ position of the inner and outer energy windows are shown in the bandstructure $\Omega_{\rm D} + \Omega_{{\rm OD}}$. -2. Plot the energy bands by adding the following commands to the input +2. Plot the energy bands by adding the following commands to the input file `silicon.win` ```vi title="Input file" @@ -52,15 +52,15 @@ position of the inner and outer energy windows are shown in the bandstructure ``` and re-running `wannier90`. The files `silicon_band.dat` and - ` silicon_band.gnu` are created. To plot the bandstructure run + `silicon_band.gnu` are created. To plot the bandstructure run gnuplot - + ```bash title="Terminal" gnuplot ``` and within the gnuplot shell type - + ```gnuplot title="Gnuplot shell" load 'silicon_band.gnu' ``` diff --git a/docs/docs/tutorials/tutorial_30.md b/docs/docs/tutorials/tutorial_30.md index 802a9039..3114aa96 100644 --- a/docs/docs/tutorials/tutorial_30.md +++ b/docs/docs/tutorials/tutorial_30.md @@ -1,49 +1,49 @@ -# 30: Gallium Arsenide — Frequency-dependent spin Hall conductivity {#gallium-arsenide-frequency-dependent-spin-hall-conductivity .unnumbered} +# 30: Gallium Arsenide — Frequency-dependent spin Hall conductivity -- Outline: *Calculate the alternating current (ac) spin Hall +- Outline: *Calculate the alternating current (ac) spin Hall conductivity of gallium arsenide considering spin-orbit coupling. To gain a better understanding of this tutorial, it is suggested to read Ref. [@qiao-prb2018] for a detailed description of the theory and the - [berry_task=shc: spin Hall conductivity](../user_guide/postw90/berry.md#sec:shc) + [berry_task=shc: spin Hall conductivity](../user_guide/postw90/berry.md#sec:shc) chapter of the User Guide.* -- Directory: `tutorials/tutorial30/` *Files can downloaded from +- Directory: `tutorials/tutorial30/` *Files can downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial30)* -- Input files +- Input files - - `GaAs.scf` *The `pwscf` input file for ground state + - `GaAs.scf` *The `pwscf` input file for ground state calculation* - - `GaAs.nscf` *The `pwscf` input file to obtain Bloch + - `GaAs.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `GaAs.pw2wan` *The input file for `pw2wannier90`* + - `GaAs.pw2wan` *The input file for `pw2wannier90`* - - `GaAs.win` *The `wannier90` and `postw90` input file* + - `GaAs.win` *The `wannier90` and `postw90` input file* -1. Run `pwscf` to obtain the ground state of gallium +1. Run `pwscf` to obtain the ground state of gallium arsenide ```bash title="Terminal" pw.x < GaAs.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform $k$-point grid ```bash title="Terminal" pw.x < GaAs.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `GaAs.nnkp` file) ```bash title="Terminal" wannier90.x -pp GaAs ``` -4. Run `pw2wannier90` to compute the overlaps between Bloch states and +4. Run `pw2wannier90` to compute the overlaps between Bloch states and the projections for the starting guess (written in the `GaAs.mmn` and `GaAs.amn` files) @@ -51,26 +51,27 @@ pw2wannier90.x < GaAs.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs +5. Run `wannier90` to compute the MLWFs ```bash title="Terminal" wannier90.x GaAs ``` -6. Run `postw90` +6. Run `postw90` ```bash title="Terminal" postw90.x GaAs # (1)! mpirun -np 8 postw90.x GaAs # (2)! ``` - 1. serial execution - 2. example of parallel execution with 8 MPI processes + 1. serial execution + 2. example of parallel execution with 8 MPI processes -## ac spin Hall conductivity {#ac-spin-hall-conductivity .unnumbered} +## ac spin Hall conductivity The spin Hall conductivity is also dependent on the frequency $\omega$ -in this [equation](../user_guide/postw90/berry.md#mjx-eqn:eq:kubo_shc) of the User Guide. +in this [equation](../user_guide/postw90/berry.md#mjx-eqn:eq:kubo_shc) of the +User Guide. The direct current (dc) SHC calculated in the previous tutorial corresponds to $\sigma_{\alpha\beta}^{\text{spin}\gamma}$ in the limit $\omega\rightarrow @@ -82,11 +83,8 @@ add the lines ```vi title="Input file" shc_freq_scan = true - kubo_freq_min = 0.0 - kubo_freq_max = 8.0 - kubo_freq_step = 0.01 ``` @@ -107,17 +105,47 @@ plot 'GaAs-shc-freqscan.dat' u 2:3 w l title 'Re', and then compare the result with Fig. 4 in Ref. [@qiao-prb2018] or the Solution Booklet. -## Notes {#notes-2 .unnumbered} +## Notes -- When calculating ac SHC, adaptive smearing can be used by add the +- When calculating ac SHC, adaptive smearing can be used by add the following keywords in the `GaAs.win`, -- Adaptive kmesh refinement is not implemented for ac SHC calculation. + ```vi title="Input file" + kubo_adpt_smr = true + kubo_adpt_smr_fac = [insert here your smearing factor] + kubo_adpt_smr_max = [insert here your maximum smearing] + ``` + +- Adaptive kmesh refinement is not implemented for ac SHC calculation. + +- The first 10 semi-core states are excluded from the calculation by + using the following keywords + + ```vi title="Input file" + exclude_bands = 1-10 + ``` -- The first 10 semi-core states are excluded from the calculation by - using the following keywords and in the case of GaAs disentanglement + and in the case of GaAs disentanglement is not adopted so -- Since the band gap is often under estimated by LDA/GGA calculations, + ```vi title="Input file" + num_bands = 16 + num_wann = 16 + ``` + +- Since the band gap is often under estimated by LDA/GGA calculations, a scissors shift is applied to recover the experimental band gap by - using the following keywords or by + using the following keywords + + ```vi title="Input file" + shc_bandshift = true + shc_bandshift_firstband = 9 + shc_bandshift_energyshift = 1.117 + ``` + + or by + + ```vi title="Input file" + num_valence_bands = 8 + scissors_shift = 1.117 + ``` diff --git a/docs/docs/tutorials/tutorial_31.md b/docs/docs/tutorials/tutorial_31.md index 5ce9c0f9..f31a8add 100644 --- a/docs/docs/tutorials/tutorial_31.md +++ b/docs/docs/tutorials/tutorial_31.md @@ -1,9 +1,9 @@ -# 31: Platinum — Selected columns of density matrix algorithm for spinor wavefunctions {#platinum-selected-columns-of-density-matrix-algorithm-for-spinor-wavefunctions .unnumbered} +# 31: Platinum — Selected columns of density matrix algorithm for spinor wavefunctions Note: This tutorial requires a recent version of the `pw2wannier90.x` post-processing code of `Quantum ESPRESSO` (v6.3 or above). -- Outline: *For bulk crystalline platinum with spin-orbit coupling, +- Outline: *For bulk crystalline platinum with spin-orbit coupling, generate the $A_{mn}$ matrices via the selected columns of density matrix (SCDM) algorithm and the corresponding spinor-MLWFs. To better understand the input files and the results of these @@ -16,73 +16,72 @@ post-processing code of `Quantum ESPRESSO` (v6.3 or above). spin-noncollinear systems. For the overview of the use of SCDM method to spinless systems, please refer to this [tutorial](tutorial_27.md). -- Directory: `tutorials/tutorial31/` *Files can be downloaded from +- Directory: `tutorials/tutorial31/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial31)* - The input files for this tutorials are similar to the ones in Tutorial - [29](tutorial_29.md#platinum-spin-hall-conductivity), except that a coarser k-point grid is used and that the keywords - related to `postw90.x` are removed. + The input files for this tutorials are similar to the ones in Tutorial + [29](tutorial_29.md), except that a coarser k-point grid is used and that + the keywords related to `postw90.x` are removed. -- Input Files: +- Input Files: - - `Pt.scf` *The `pwscf` input file for the ground + - `Pt.scf` *The `pwscf` input file for the ground state calculation* - - `Pt.nscf` *The `pwscf` input file to obtain Bloch + - `Pt.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `Pt.pw2wan` *The input file for `pw2wannier90` with keywords + - `Pt.pw2wan` *The input file for `pw2wannier90` with keywords related to the SCDM method* - - `Pt.win` *The `wannier90` input file* + - `Pt.win` *The `wannier90` input file* We will compute 18 localized WFs. Since the band structure of platinum is metallic, the low-lying bands are entangled with other high-energy bands, and the columns of the density matrix are not exponentially localized by construction. Thus, we use a modified density matrix [@LinLin-ArXiv2017], with the function $f(\varepsilon_{n,\mathbf{k}})$ -defined as a complementary error function. Refer to Tutorial [27](tutorial_27.md#silicon-selected-columns-of-density-matrix-algorithm-for-automated-mlwfs) +defined as a complementary error function. Refer to Tutorial [27](tutorial_27.md) for the definition of the modified density matrix and the functional form of $f(\varepsilon_{n,\mathbf{k}})$. -1. Run `pwscf` to obtain the ground state of platinum +1. Run `pwscf` to obtain the ground state of platinum ```bash title="Terminal" pw.x < Pt.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform $7\times 7\times 7$ $k$-point grid ```bash title="Terminal" pw.x < Pt.nscf > nscf.out ``` - -3. Inspect the `Pt.win` input file and make sure that the +3. Inspect the `Pt.win` input file and make sure that the `auto_projections` flag is set to `.true.`. Also, make sure that no projection block is present. -4. Run `wannier90` to generate a list of the required overlaps (written +4. Run `wannier90` to generate a list of the required overlaps (written into the `Pt.nnkp` file) ```bash title="Terminal" wannier90.x -pp Pt ``` -5. Inspect the `Pt.nnkp` file and make sure you find the +5. Inspect the `Pt.nnkp` file and make sure you find the `auto_projections` block and that no projections have been written in the `projections` block. -6. Inspect the `Pt.pw2wan` input file. You will find four SCDM-related +6. Inspect the `Pt.pw2wan` input file. You will find four SCDM-related keywords: `scdm_proj`, `scdm_entanglement`, `scdm_mu` and `scdm_sigma`. In particular, the keyword `scdm_proj` will instruct `pw2wannier90.x` to use the SCDM method when generating the $A_{mn}$ matrix. The remaining three keywords defines the formula and parameters to define the function $f(\varepsilon_{n\mathbf{k}})$ - (see Ref. [@LinLin-ArXiv2017] and Tutorial [27](tutorial_27.md#silicon-selected-columns-of-density-matrix-algorithm-for-automated-mlwfs)). + (see Ref. [@LinLin-ArXiv2017] and Tutorial [27](tutorial_27.md)). -7. Run `pw2wannier90` to compute the overlap between Bloch states and +7. Run `pw2wannier90` to compute the overlap between Bloch states and the projections via the SCDM method (written in the `Pt.mmn` and `Pt.amn` respectively). @@ -90,7 +89,7 @@ $f(\varepsilon_{n,\mathbf{k}})$. pw2wannier90.x < Pt.pw2wan > pw2wan.out ``` -8. Inspect the `pw2wan.out` output file. Compared to the spinless case, +8. Inspect the `pw2wan.out` output file. Compared to the spinless case, you will find the following two additional lines. ```vi title="Output file" @@ -105,7 +104,7 @@ $f(\varepsilon_{n,\mathbf{k}})$. in the electronic structure code. In `pwscf`, the basis states are spin up and down states along the Cartesian $z$-axis. -9. Run `wannier90` to compute the MLWFs +9. Run `wannier90` to compute the MLWFs ```bash title="Terminal" wannier90.x Pt diff --git a/docs/docs/tutorials/tutorial_32.md b/docs/docs/tutorials/tutorial_32.md index bdf7b0d0..7b3368e4 100644 --- a/docs/docs/tutorials/tutorial_32.md +++ b/docs/docs/tutorials/tutorial_32.md @@ -1,9 +1,9 @@ -# 32: Tungsten — SCDM parameters from projectability {#tungsten-scdm-parameters-from-projectability .unnumbered} +# 32: Tungsten — SCDM parameters from projectability -- Outline: Compute the Wannier interpolated band structure of +- Outline: Compute the Wannier interpolated band structure of tungsten (W) using the SCDM method to calculate the initial guess - (see Tutorial [27](tutorial_27.md) for more details). The free parameters in the SCDM - method, i.e., $\mu$ and $\sigma$, are obtained by fitting a + (see Tutorial [27](tutorial_27.md) for more details). The free parameters + in the SCDM method, i.e., $\mu$ and $\sigma$, are obtained by fitting a complementary error function to the projectabilities. The number of MLWFs is given by the number of pseudo-atomic orbitals (PAOs) in the pseudopotential, $21$ in this case. All the steps shown in this @@ -11,69 +11,72 @@ can be downloaded from the MaterialsCloud website[@MaterialsCloudArchiveEntry]. -- Directory: `tutorials/tutorial32/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial32)* +- Directory: `tutorials/tutorial32/` *Files can be downloaded from + [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial32)* -- Input files +- Input files - - `W.scf` *The `pwscf` input file for ground state + - `W.scf` *The `pwscf` input file for ground state calculation* - - `W.nscf` *The `pwscf` input file to obtain Bloch + - `W.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `W.pw2wan` *The input file for `pw2wannier90`* + - `W.pw2wan` *The input file for `pw2wannier90`* - - `W.proj` *The input file for `projwfc`* + - `W.proj` *The input file for `projwfc`* - - `generate_weights.sh` *The bash script to extract the + - `generate_weights.sh` *The bash script to extract the projectabilities from the output of `projwfc`* - - `W.win` *The `wannier90` input file* + - `W.win` *The `wannier90` input file*   -1. Run `pwscf` to obtain the ground state of tungsten +1. Run `pwscf` to obtain the ground state of tungsten ```bash title="Terminal" pw.x -in W.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a +2. Run `pwscf` to obtain the Bloch states on a $10\times10\times10$ uniform $k$-point grid ```bash title="Terminal" pw.x -in W.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `W.nnkp` file) ```bash title="Terminal" wannier90.x -pp W ``` -4. Run `projwfc` to compute the projectabilities of the Bloch states +4. Run `projwfc` to compute the projectabilities of the Bloch states onto the Bloch sums obtained from the PAOs in the pseudopotential ```bash title="Terminal" projwfc.x -in W.proj > proj.out ``` -5. Run `generate_weights` to extract the projectabilitites from - `proj.out` in a format suitable to be read by Xmgrace or gnuplot +5. Run `generate_weights` to extract the projectabilitites from + `proj.out` in a format suitable to be read by `Xmgrace` or gnuplot ```bash title="Terminal" ./generate_weights.sh ``` -6. Plot the projectabilities and fit the data with the complementary +6. Plot the projectabilities and fit the data with the complementary error function $$ - f(\epsilon;\mu,\sigma) = \frac{1}{2}\mathrm{erfc}(-\frac{\mu - \epsilon}{\sigma}). + f(\epsilon;\mu,\sigma) = \frac{1}{2} + \mathrm{erfc}(-\frac{\mu - \epsilon}{\sigma}). $$ - We are going to use Xmgrace to plot the projectabilities and perform the fitting. Open Xmgrace + We are going to use `Xmgrace` to plot the projectabilities and perform the + fitting. Open `Xmgrace` ```bash title="Terminal" xmgrace @@ -92,7 +95,12 @@ fitting, go to `Data -> Transformations -> Non-linear curve fitting`. In this window, select the source from the `Set` box and in the `Formula` - box insert the following `y = 0.5 * erfc( ( x - A0 ) / A1 )` + box insert the following + + ```vi title="Input file" + y = 0.5 * erfc( ( x - A0 ) / A1 ) + ``` + Select 2 as number of parameters, give 40 as initial condition for `A0` and 7 for `A1`. Click `Apply`. A new window should pop up with the stats of the fitting. In particular you should find a @@ -105,17 +113,23 @@ in Ref. [@Vitale2019automated], where the authors also show validation of this approach on a dataset of 200 materials. You should now see the fitting function, as well as the - projectabilities, in the graph [below](#fig:W_fit){reference-type="ref" reference="fig:W_fit"}. + projectabilities, in the graph [below](#fig:W_fit). +
![Image title](./W_fit.webp){ width="500"}
Each blue dot represents the projectability as defined - in Eq. (22) of Ref. [@Vitale2019automated] of the state |nk⟩ as a function of the corresponding energy ϵnk + in Eq. (22) of Ref. [@Vitale2019automated] of the state + $\vert n\mathbf{k} \rangle$ as a function of the corresponding energy + $\epsilon_{n\mathbf{k}}$ for tungsten. The yellow line shows the fitted complementary error - function. The vertical red line represents the value of σfit while the vertical green line represents the optimal value of μSCDM, - i.e. μSCDM = μfit − 3σfit.
+ function. The vertical red line represents the value of + $\sigma_{fit}$ while the vertical green + line represents the optimal value of + $\mu_{SCDM}$, + i.e. $\mu_{SCDM} = \mu_{fit} - 3\sigma_{fit}$.
-7. Open `W.pw2wan` and append the following lines +7. Open `W.pw2wan` and append the following lines ```vi title="Input file" scdm_entanglement = erfc @@ -127,7 +141,7 @@ scdm_sigma = 6.6529 ``` -8. Run `pw2wannier90` to compute the overlaps between Bloch states and +8. Run `pw2wannier90` to compute the overlaps between Bloch states and the projections for the starting guess (written in the `W.mmn` and `W.amn` files) @@ -135,7 +149,9 @@ pw2wannier90.x -in W.pw2wan > pw2wan.out ``` -9. Run `wannier90` to obtain the interpolated bandstructure (see the band structure [plot](#fig:W_bs){reference-type="ref" reference="fig:W_bs"}). +9. Run `wannier90` to obtain the interpolated bandstructure (see the band + structure [plot](#fig:W_bs)). + ```bash title="Terminal" wannier90.x W ``` @@ -145,6 +161,8 @@
![Image title](./W_bs.webp){ width="500"} -
Band structure of tungsten on the Γ-H-N-Γ path from DFT calculations (solid black) and Wannier interpolation using the SCDM method to construct the +
Band structure of tungsten on the Γ-H-N-Γ path +from DFT calculations (solid black) and Wannier interpolation using the SCDM +method to construct the initial guess (red dots).
diff --git a/docs/docs/tutorials/tutorial_33.md b/docs/docs/tutorials/tutorial_33.md index a8a3722a..7815f8c8 100644 --- a/docs/docs/tutorials/tutorial_33.md +++ b/docs/docs/tutorials/tutorial_33.md @@ -1,61 +1,67 @@ -# 33: Monolayer BC$_2$N — $k\cdot p$ expansion coefficients {#monolayer-bc_2n-kcdot-p-expansion-coefficients .unnumbered} +# 33: Monolayer BC$_2$N — $k\cdot p$ expansion coefficients -- Outline: *Calculate $k\cdot p$ expansion coefficients monolayer +- Outline: *Calculate $k\cdot p$ expansion coefficients monolayer BC$_2$N using quasi-degenerate (Löwdin) perturbation theory. In preparation for this example it may be useful to read Ref. [@ibanez-azpiroz-ArXiv2019]* -- Directory: `tutorial/tutorial33/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial33)* +- Directory: `tutorial/tutorial33/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial33)* -- Input files: +- Input files: - - `bc2n.scf` *The `pwscf` input file for ground state calculation* + - `bc2n.scf` *The `pwscf` input file for ground state calculation* - - `bc2n.nscf` *The `pwscf` input file to obtain Bloch states on a + - `bc2n.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `bc2n.pw2wan` *The input file for* `pw2wannier90` + - `bc2n.pw2wan` *The input file for* `pw2wannier90` - - `bc2n.win` *The* `wannier90` *and* `postw90` *input file* + - `bc2n.win` *The* `wannier90` *and* `postw90` *input file*   -1. Run `pwscf` to obtain the ground state +1. Run `pwscf` to obtain the ground state ```bash title="Terminal" pw.x < bc2n.scf > scf.out ``` -2. Run `pwscf` to obtain the ground state +2. Run `pwscf` to obtain the ground state + ```bash title="Terminal" pw.x < bc2n.nscf > nscf.out ``` -3. Run `Wannier90` to generate a list of the required overlaps + +3. Run `Wannier90` to generate a list of the required overlaps (written into the `bc2n.nnkp` file) + ```bash title="Terminal" wannier90.x -pp bc2n ``` -4. Run `pw2wannier90` to compute: - - The overlaps $\langle u_{n\bf{k}}|u_{n\bf{k+b}}\rangle$ + +4. Run `pw2wannier90` to compute: + - The overlaps $\langle u_{n\bf{k}}|u_{n\bf{k+b}}\rangle$ between spinor Bloch states (written in the `bc2n.mmn`file) - - The projections for the starting guess (written in the + - The projections for the starting guess (written in the `bc2n.amn` file) - + ```bash title="Terminal" pw2wannier90.x < bc2n.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute MLWFs +5. Run `wannier90` to compute MLWFs + ```bash title="Terminal" wannier90.x bc2n ``` -6. Run `postw90` to compute expansion coefficients +6. Run `postw90` to compute expansion coefficients + ```bash title="Terminal" postw90.x bc2n ``` -## Expansion coefficients {#expansion-coefficients .unnumbered} +## Expansion coefficients For computing $k\cdot p$ expansion coefficients as given by quasi-degenerate (Löwdin) perturbation theory, set @@ -96,7 +102,10 @@ fermi_energy = [insert your value here] On output, the program generates three files, namely `SEED-kdotp_0.dat`, `SEED-kdotp_1.dat` and `SEED-kdotp_2.dat`, which -correspond to the zeroth, first and second order expansion coefficients, respectively. The dimension of the matrix contained in each file is $3^{l}\times N^{2}$, where $N$ is the number of bands set by `kdotp_num_bands`, and $l$ is the order of the expansion term (currently $l=0,1$ or $2$). +correspond to the zeroth, first and second order expansion coefficients, +respectively. The dimension of the matrix contained in each file is +$3^{l}\times N^{2}$, where $N$ is the number of bands set by `kdotp_num_bands`, +and $l$ is the order of the expansion term (currently $l=0,1$ or $2$). These coefficients can be used, among other things, to compute the energy dispersion of the bands of interest around the chosen @@ -108,24 +117,15 @@ provided in the example folder python kdotp_plot.py ``` -For comparison, the exact band structure calculated usingWannier90 (file `bc2n_band.dat`, generated automatically) is also plotted along (see the band dispersion [plot](#fig:bc2n-bnd)). +For comparison, the exact band structure calculated usingWannier90 +(file `bc2n_band.dat`, generated automatically) is also plotted along +(see the band dispersion [plot](#fig:bc2n-bnd)).
![Image title](./kdotp_bands_SX.webp){ width="500"} -
Band dispersion of monolayer BC2N around S point. Exact results (solid dots) are compared to first-order (blue) and second-order (red) k⋅ p model results for valence and conduction bands.
+
Band dispersion of monolayer +BC2N around $S$ point. +Exact results (solid dots) are compared to first-order (blue) and +second-order (red) $k\cdot p$ model results for valence and conduction bands. +
- -  - -[^1]: Once `XCrySDen` starts, click on `Tools` $\rightarrow$ `Data Grid` - in order to specify an isosurface value to plot. - -[^2]: Please note the following counterintuitive feature in `pwscf`: in - order to obtain a ground state with magnetization along the - *positive* $z$-axis, one should use a *negative* value for the - variable `starting_magnetization`. - -[^3]: The calculation of the AHC using `berry_task = kubo` involves a - truncation of the sum over empty states in the Kubo-Greenwood - formula: see description of the keyword [`kubo_eigval_max`]() in the - User Guide. As discussed around [the formula for anomalous Hall conductivity](../user_guide/postw90/berry.md#mjx-eqn:eq:ahc) of the User Guide, no truncation is done with `berry_task = ahc`. diff --git a/docs/docs/tutorials/tutorial_4.md b/docs/docs/tutorials/tutorial_4.md index b504c600..301a3982 100644 --- a/docs/docs/tutorials/tutorial_4.md +++ b/docs/docs/tutorials/tutorial_4.md @@ -1,29 +1,29 @@ -# 4: Copper — Fermi surface, orbital character of energy bands {#copper-fermi-surface-orbital-character-of-energy-bands .unnumbered} +# 4: Copper — Fermi surface, orbital character of energy bands -- Outline: *Obtain MLWFs to describe the states around the Fermi-level +- Outline: *Obtain MLWFs to describe the states around the Fermi-level in copper* -- Generation Details: *From `pwscf`, using ultrasoft +- Generation Details: *From `pwscf`, using ultrasoft pseudopotentials [@vanderbilt-prb90] and a
4$\times$4$\times$4 k-point grid. Starting guess: five atom-centred d orbitals, and two s orbitals centred on one of each of the two tetrahedral interstices.* -- Directory: `tutorials/tutorial04/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial04)* +- Directory: `tutorials/tutorial04/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial04)* -- Input Files +- Input Files - - `copper.win` *The master input file* + - `copper.win` *The master input file* - - `copper.mmn` *The overlap matrices + - `copper.mmn` *The overlap matrices $\mathbf{M}^{(\mathbf{k},\mathbf{b})}$* - - `copper.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the + - `copper.amn` *Projection $\mathbf{A}^{(\mathbf{k})}$ of the Bloch states onto a set of trial localised orbitals* - - `copper.eig` *The Bloch eigenvalues at each k-point* + - `copper.eig` *The Bloch eigenvalues at each k-point* -1. Run `wannier90` to minimise the MLWFs spread +1. Run `wannier90` to minimise the MLWFs spread ```bash title="Terminal" wannier90.x copper @@ -31,10 +31,10 @@ Inspect the output file `copper.wout`. -2. Plot the Fermi surface, it should look familiar! The Fermi energy is +2. Plot the Fermi surface, it should look familiar! The Fermi energy is at 12.2103 eV. -3. Plot the interpolated bandstructure. A suitable path in k-space is +3. Plot the interpolated bandstructure. A suitable path in k-space is ```vi title="Input file" begin kpoint_path @@ -46,7 +46,7 @@ end kpoint_path ``` -4. Plot the contribution of the interstitial WF to the bandstructure. +4. Plot the contribution of the interstitial WF to the bandstructure. Add the following keyword to `copper.win` ```vi title="Input file" diff --git a/docs/docs/tutorials/tutorial_5.md b/docs/docs/tutorials/tutorial_5.md index fb853350..50d8771a 100644 --- a/docs/docs/tutorials/tutorial_5.md +++ b/docs/docs/tutorials/tutorial_5.md @@ -1,43 +1,43 @@ -# 5: Diamond — MLWFs for the valence bands {#diamond-mlwfs-for-the-valence-bands .unnumbered} +# 5: Diamond — MLWFs for the valence bands -- Outline: *Obtain MLWFs for the valence bands of diamond* +- Outline: *Obtain MLWFs for the valence bands of diamond* -- Directory: `tutorials/tutorial05/` *Files can be downloaded from +- Directory: `tutorials/tutorial05/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial05)* -- Input Files +- Input Files - - `diamond.scf` *The `pwscf` input file for ground + - `diamond.scf` *The `pwscf` input file for ground state calculation* - - `diamond.nscf` *The `pwscf` input file to obtain + - `diamond.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `diamond.pw2wan` *The input file for `pw2wannier90`* + - `diamond.pw2wan` *The input file for `pw2wannier90`* - - `diamond.win` *The `wannier90` input file* + - `diamond.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of diamond +1. Run `pwscf` to obtain the ground state of diamond ```bash title="Terminal" pw.x < diamond.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid\ ```bash title="Terminal" pw.x < diamond.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `diamond.nnkp` file). - + ```bash title="Terminal" wannier90.x -pp diamond ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `diamond.mmn` and `diamond.amn` files). @@ -45,10 +45,8 @@ pw2wannier90.x < diamond.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x diamond ``` - - diff --git a/docs/docs/tutorials/tutorial_6.md b/docs/docs/tutorials/tutorial_6.md index 4401836b..2856d712 100644 --- a/docs/docs/tutorials/tutorial_6.md +++ b/docs/docs/tutorials/tutorial_6.md @@ -1,44 +1,44 @@ -# 6: Copper — Fermi surface {#copper-fermi-surface .unnumbered} +# 6: Copper — Fermi surface -- Outline: *Obtain MLWFs to describe the states around the Fermi-level +- Outline: *Obtain MLWFs to describe the states around the Fermi-level in copper* -- Directory: `tutorials/tutorial06/` *Files can be downloaded from +- Directory: `tutorials/tutorial06/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial06)* -- Input Files +- Input Files - - `copper.scf` *The `pwscf` input file for ground + - `copper.scf` *The `pwscf` input file for ground state calculation* - - `copper.nscf` *The `pwscf` input file to obtain + - `copper.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `copper.pw2wan` *Input file for `pw2wannier90`* + - `copper.pw2wan` *Input file for `pw2wannier90`* - - `copper.win` *The `wannier90` input file* + - `copper.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of copper +1. Run `pwscf` to obtain the ground state of copper ```bash title="Terminal" pw.x < copper.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < copper.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `copper.nnkp` file). ```bash title="Terminal" wannier90.x -pp copper ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `copper.mmn` and `copper.amn` files). @@ -46,7 +46,7 @@ pw2wannier90.x < copper.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x copper @@ -54,11 +54,11 @@ Inspect the output file `copper.wout`. -1. Use Wannier interpolation to obtain the Fermi surface of copper. +1. Use Wannier interpolation to obtain the Fermi surface of copper. Rather than re-running the whole calculation we can use the unitary transformations obtained in the first calculation and restart from the plotting routine. Add the following keywords to the - ` copper.win` file: + `copper.win` file: ```vi title="Input file" restart = plot @@ -76,12 +76,12 @@ Inspect the output file `copper.wout`. `fermi_surface_num_points`. The default value is 50 (i.e., 50$^3$ points). The Fermi surface file `copper.bxsf` can be viewed using `XCrySDen`, e.g., - + ```bash title="Terminal" xcrysden --bxsf copper.bxsf ``` -2. Plot the interpolated bandstructure. A suitable path in k-space is +2. Plot the interpolated bandstructure. A suitable path in k-space is ```vi title="Input file" begin kpoint_path @@ -93,17 +93,17 @@ Inspect the output file `copper.wout`. end kpoint_path ``` -## Further ideas {#further-ideas .unnumbered} +## Further ideas -- Compare the Wannier interpolated bandstructure with the full +- Compare the Wannier interpolated bandstructure with the full `pwscf` bandstructure. Obtain MLWFs using a denser k-point grid. To plot the bandstructure you can use the `pwscf` tool `bands.x` or the small FORTRAN program available at . -- Investigate the effects of the outer and inner energy windows on the +- Investigate the effects of the outer and inner energy windows on the interpolated bands. -- Instead of extracting a subspace of seven states, we could extract a +- Instead of extracting a subspace of seven states, we could extract a nine dimensional space (i.e., with $s$, $p$ and $d$ character). Examine this case and compare the interpolated bandstructures. diff --git a/docs/docs/tutorials/tutorial_7.md b/docs/docs/tutorials/tutorial_7.md index eacfd989..9a4afe9c 100644 --- a/docs/docs/tutorials/tutorial_7.md +++ b/docs/docs/tutorials/tutorial_7.md @@ -1,44 +1,44 @@ -# 7: Silane (SiH$_4$) — Molecular MLWFs using $\Gamma$-point sampling {#silane-sih_4-molecular-mlwfs-using-gamma-point-sampling .unnumbered} +# 7: Silane (SiH$_4$) — Molecular MLWFs using $\Gamma$-point sampling -- Outline: *Obtain MLWFs for the occupied states of molecular silane. +- Outline: *Obtain MLWFs for the occupied states of molecular silane. $\Gamma$-point sampling* -- Directory: `tutorials/tutorial07/` *Files can be downloaded from +- Directory: `tutorials/tutorial07/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial07)* -- Input Files +- Input Files - - `silane.scf` *The `pwscf` input file for ground + - `silane.scf` *The `pwscf` input file for ground state calculation* - - `silane.nscf` *The `pwscf` input file to obtain + - `silane.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `silane.pw2wan` *Input file for `pw2wannier90`* + - `silane.pw2wan` *Input file for `pw2wannier90`* - - `silane.win` *The `wannier90` input file* + - `silane.win` *The `wannier90` input file* -1. Run `pwscf` to obtain the ground state of silane +1. Run `pwscf` to obtain the ground state of silane ```bash title="Terminal" pw.x < silane.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < silane.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `silane.nnkp` file). ```bash title="Terminal" wannier90.x -pp silane ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `silane.mmn` and `silane.amn` files). @@ -46,9 +46,8 @@ pw2wannier90.x < silane.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x silane ``` - diff --git a/docs/docs/tutorials/tutorial_8.md b/docs/docs/tutorials/tutorial_8.md index 2c027f19..8195973c 100644 --- a/docs/docs/tutorials/tutorial_8.md +++ b/docs/docs/tutorials/tutorial_8.md @@ -1,44 +1,49 @@ -# 8: Iron — Spin-polarized WFs, DOS, projected WFs versus MLWFs {#iron-spin-polarized-wfs-dos-projected-wfs-versus-mlwfs .unnumbered} +# 8: Iron — Spin-polarized WFs, DOS, projected WFs versus MLWFs -- Outline: *Generate both maximally-localized and projected Wannier +- Outline: *Generate both maximally-localized and projected Wannier functions for ferromagnetic bcc Fe. Calculate the total and orbital-projected density of states by Wannier interpolation.* -- Directory: `tutorials/tutorial08/` *Files can be downloaded from +- Directory: `tutorials/tutorial08/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial08)* -- Input Files +- Input Files - - `iron.scf` *The `pwscf` input file for the + - `iron.scf` *The `pwscf` input file for the spin-polarized ground state calculation* - - `iron.nscf` *The `pwscf` input file to obtain Bloch + - `iron.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `iron_{up,down}.pw2wan` *Input files for `pw2wannier90`* + - `iron_{up,down}.pw2wan` *Input files for `pw2wannier90`* - - `iron_{up,down}.win` *Input files for `wannier90` and - ` postw90`* + - `iron_{up,down}.win` *Input files for `wannier90` and + `postw90`* -- Note that in a spin-polarized calculation the spin-up and spin-down +- Note that in a spin-polarized calculation the spin-up and spin-down MLWFs are computed separately. (The more general case of spinor WFs - will be treated in Tutorial [17](tutorial_17.md#iron-spin-orbit-coupled-bands-and-fermi-surface-contours). + will be treated in Tutorial [17](tutorial_17.md)). -1. Run `pwscf` to obtain the ferromagnetic ground state of - bcc Fe +1. Run `pwscf` to obtain the ferromagnetic ground state of bcc Fe ```bash title="Terminal" pw.x < iron.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform + !!! note + Please note the following counterintuitive feature in `pwscf`: in + order to obtain a ground state with magnetization along the + *positive* $z$-axis, one should use a *negative* value for the + variable `starting_magnetization`. + +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < iron.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `.nnkp` files). ```bash title="Terminal" @@ -46,7 +51,7 @@ wannier90.x -pp iron_dn ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `.mmn` and `.amn` files). @@ -55,14 +60,14 @@ pw2wannier90.x < iron_dn.pw2wan > pw2wan_dn.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x iron_up wannier90.x iron_dn ``` -### Density of states {#density-of-states .unnumbered} +## Density of states To compute the DOS using a $25\times 25 \times 25$ $k$-point grid add to the two `.win` files @@ -90,11 +95,11 @@ plot 'iron_up_dos.dat' u (-\$2):(\$1-12.6256) w l,'iron_dn_dos.dat' u 2:(\$1-12.6256) w l ``` -Energies are referred to the Fermi level (12.6256 eV, from ` scf.out`). +Energies are referred to the Fermi level (12.6256 eV, from `scf.out`). Note the exchange splitting between the up-spin and down-spin DOS. Check the convergence by repeating the DOS calculations with more $k$-points. -### Projected versus maximally-localized Wannier functions {#projected-versus-maximally-localized-wannier-functions .unnumbered} +## Projected versus maximally-localized Wannier functions In the calculations above we chose $s$, $p$, and $d$-type trial orbitals in the `.win` files, @@ -111,8 +116,8 @@ look at the final state towards the end of the file. The Wannier spreads have re-organized in two groups, 6+3; moreover, the six more diffuse WFs are off-centred: the initial atomic-like orbitals hybridized with one another, becoming more localized in the process. It is instructive to -visualize the final-state MLWFs using `XCrySDen`, following Tutorial -[1](tutorial_1.md#gallium-arsenide-mlwfs-for-the-valence-bands). +visualize the final-state MLWFs using `XCrySDen`, following Tutorial +[1](tutorial_1.md). For more details, see Sec. IV.B of Ref. [@wang-prb06]. Let us plot the evolution of the spread functional $\Omega$, @@ -127,14 +132,12 @@ gnuplot plot 'sprd_up' u 6 w l ``` - The first plateau corresponds to atom-centred WFs of separate $s$, $p$, and $d$ character, and the sharp drop signals the onset of the hybridization. With hindsight, we can redo steps 4 and 5 more efficiently using trial orbitals with the same character as the final MLWFs, - ```vi title="Input file" Fe:sp3d2;dxy;dxz,dyz ``` @@ -158,11 +161,11 @@ the hybridized set of MLWFs. Visualize the projected WFs using `XCrySDen`, to see that they retain the pure orbital character of the individual trial orbitals. -### Orbital-projected DOS and exchange splitting {#orbital-projected-dos-and-exchange-splitting .unnumbered} +## Orbital-projected DOS and exchange splitting With projected WFs the total DOS can be separated into $s$, $p$ and $d$ contributions, in a similar way to the orbital decomposition of the -energy bands in Tutorial [4](tutorial_4.md#copper-fermi-surface-orbital-character-of-energy-bands). +energy bands in Tutorial [4](tutorial_4.md). In order to obtain the partial DOS projected onto the $p$-type WFs, add to the `.win` files @@ -193,7 +196,8 @@ the density of states at the Fermi level.
![Image title](./Fe-spread.webp){ width="500" } -
Evolution of the Wannier spread $\Omega$ of the minority (spin-up) bands of -bcc Fe during the iterative minimization of $\widetilde{\Omega}$, starting from s, p and -d-type trial orbitals.
+
Evolution of the Wannier spread $\Omega$ of the +minority (spin-up) bands of +bcc Fe during the iterative minimization of $\widetilde{\Omega}$, starting from +s, p and d-type trial orbitals.
diff --git a/docs/docs/tutorials/tutorial_9.md b/docs/docs/tutorials/tutorial_9.md index 8e07a290..93425a70 100644 --- a/docs/docs/tutorials/tutorial_9.md +++ b/docs/docs/tutorials/tutorial_9.md @@ -1,21 +1,21 @@ -# 9: Cubic BaTiO$_3$ {#cubic-batio_3 .unnumbered} +# 9: Cubic BaTiO$_3$ -- Outline: *Obtain MLWFs for a perovskite* +- Outline: *Obtain MLWFs for a perovskite* -- Directory: `tutorials/tutorial09/` *Files can be downloaded from +- Directory: `tutorials/tutorial09/` *Files can be downloaded from [here](https://github.com/wannier-developers/wannier90/tree/develop/tutorials/tutorial09)* -- Input Files +- Input Files - - `batio3.scf` *The `pwscf` input file for ground + - `batio3.scf` *The `pwscf` input file for ground state calculation* - - `batio3.nscf` *The `pwscf` input file to obtain + - `batio3.nscf` *The `pwscf` input file to obtain Bloch states on a uniform grid* - - `batio3.pw2wan` *Input file for `pw2wannier90`* + - `batio3.pw2wan` *Input file for `pw2wannier90`* - - `batio3.win` *The `wannier90` input file* + - `batio3.win` *The `wannier90` input file* To start with, we are going to obtain MLWFs for the oxygen 2p states. From the bandstructure [@marzari-aip98], these form an isolated group @@ -23,27 +23,27 @@ of bands. We use the `wannier90` keyword `exclude_bands` to remove all but the 2p bands from the calculation of the overlap and projection matrices (we don't have to do this, but it saves time). -1. Run `pwscf` to obtain the ground state of BaTiO$_3$ +1. Run `pwscf` to obtain the ground state of BaTiO$_3$ ```bash title="Terminal" pw.x < BaTiO3.scf > scf.out ``` -2. Run `pwscf` to obtain the Bloch states on a uniform +2. Run `pwscf` to obtain the Bloch states on a uniform k-point grid ```bash title="Terminal" pw.x < BaTiO3.nscf > nscf.out ``` -3. Run `wannier90` to generate a list of the required overlaps (written +3. Run `wannier90` to generate a list of the required overlaps (written into the `BaTiO3.nnkp` file). ```bash title="Terminal" wannier90.x -pp BaTiO3 ``` -4. Run `pw2wannier90` to compute the overlap between Bloch states and +4. Run `pw2wannier90` to compute the overlap between Bloch states and the projections for the starting guess (written in the `BaTiO3.mmn` and `BaTiO3.amn` files). @@ -51,7 +51,7 @@ matrices (we don't have to do this, but it saves time). pw2wannier90.x < BaTiO3.pw2wan > pw2wan.out ``` -5. Run `wannier90` to compute the MLWFs. +5. Run `wannier90` to compute the MLWFs. ```bash title="Terminal" wannier90.x BaTiO3 @@ -62,7 +62,6 @@ Inspect the output file `BaTiO3.wout`. Plot the second MLWF, as described in Section 1, by adding the following keywords to the input file `BaTiO3.win` - ```vi title="Input file" wannier_plot = true restart = plot @@ -87,13 +86,11 @@ and regenerate the MLWFs (i.e., compute the ground-state charge density and Bloch states using `pwscf`, etc.) and look at the change in the second MLWF. -## Further ideas {#further-ideas-1 .unnumbered} +## Further ideas -- Look at MLWFs for other groups of bands. What happens if you form +- Look at MLWFs for other groups of bands. What happens if you form MLWFs for the whole valence manifold? -- Following Ref. [@marzari-aip98], compute the Born effective +- Following Ref. [@marzari-aip98], compute the Born effective charges from the change in Wannier centres under an atomic displacement. - - diff --git a/docs/docs/tutorials/with_pwscf.md b/docs/docs/tutorials/with_pwscf.md index 12a13c0c..0f6a75bd 100644 --- a/docs/docs/tutorials/with_pwscf.md +++ b/docs/docs/tutorials/with_pwscf.md @@ -1,4 +1,4 @@ -# Tutorials Using the pwscf Interface {#examples-using-the-pwscf-interface .unnumbered} +# Tutorials Using the pwscf Interface The `pwscf` plane-wave, density-functional theory code, which is available as part of the @@ -10,7 +10,7 @@ of `pw2wannier90` is included as part of the `wannier90` distribution. Please see the `pwscf` directory for instructions on how to incorporate it into `pwscf`. -Note that both the `pwscf` executable `pw.x` *and* ` pw2wannier90.x` can +Note that both the `pwscf` executable `pw.x` *and* `pw2wannier90.x` can be run in parallel, which for large calculations can reduce the computation time very significantly. This requires compiling the code in its parallel version, using the MPI libraries. Refer to the @@ -22,5 +22,4 @@ processors as `pw.x`. Moreover we remind here that both the `wannier90` executable and `postw90.x` can be run in parallel. In this case any number of processors can be used, independently of the number used for `pw.x` and -` pw2wannier90.x`. - +`pw2wannier90.x`. diff --git a/docs/docs/user_guide/appendices/faq.md b/docs/docs/user_guide/appendices/faq.md index c12275d9..086b54eb 100644 --- a/docs/docs/user_guide/appendices/faq.md +++ b/docs/docs/user_guide/appendices/faq.md @@ -30,21 +30,21 @@ General Public Licence. See the file `LICENSE` that comes with the ### Is there a Tutorial available for `wannier90`? Yes! The `tutorials` directory of the `wannier90` distribution contains -input files for a number of tutorial calculations. The ` doc` directory +input files for a number of tutorial calculations. The `doc` directory contains the accompanying tutorial handout. ### Where do I get support for `wannier90`? There are a number of options: -1. The `wannier90` User Guide, available in the `doc` directory of the +1. The `wannier90` User Guide, available in the `doc` directory of the distribution, and from the webpage () -2. The `wannier90` webpage for the most recent announcements +2. The `wannier90` webpage for the most recent announcements () -3. The `wannier90` mailing list (see +3. The `wannier90` mailing list (see ) ### Is there a mailing list for `wannier90`? @@ -56,14 +56,14 @@ follow the instructions. ### I think I found a bug. How do I report it? -- Check and double-check. Make sure it's a bug. +- Check and double-check. Make sure it's a bug. -- Check that it is a bug in `wannier90` and not a bug in the software +- Check that it is a bug in `wannier90` and not a bug in the software interfaced to `wannier90`. -- Check that you're using the latest version of `wannier90`. +- Check that you're using the latest version of `wannier90`. -- Send us an email. Make sure to describe the problem and to attach +- Send us an email. Make sure to describe the problem and to attach all input and output files relating to the problem that you have found. diff --git a/docs/docs/user_guide/appendices/utilities.md b/docs/docs/user_guide/appendices/utilities.md index 31942dba..1f967d17 100644 --- a/docs/docs/user_guide/appendices/utilities.md +++ b/docs/docs/user_guide/appendices/utilities.md @@ -1,16 +1,17 @@ - -## Utilities +# Utilities The `wannier90` code is shipped with a few utility programs that may be useful in some occasions. In this chapter, we describe their use. -### `kmesh.pl` +## `kmesh.pl` The `wannier90` code requires the definition of a full Monkhorst--Pack grid of $k$ points. In the input file the size of this mesh is given by means of the `mp_grid` variable. E.g., setting - mp_grid = 4 4 4 +```vi title="Input file" +mp_grid = 4 4 4 +``` tells `wannier90` that we want to use a $4\times 4\times 4$ $k$ grid. @@ -22,7 +23,9 @@ required list. The script can be be found in the `utility` directory of the `wannier90` distribution. To use it, simply type: - ./kmesh.pl nx ny nz +```bash title="Terminal" +./kmesh.pl nx ny nz +``` where `nx`, `ny` and `nz` define the size of the Monkhorst--Pack grid that we want to use (for instance, in the above example of the @@ -39,7 +42,9 @@ the weight (in order to copy and paste the output inside the `seedname.win` file), one simply has to provide a fourth argument on the command line. For instance, for a $4\times 4\times 4$ $k$ grid, use - ./kmesh.pl 4 4 4 wannier +```bash title="Terminal" +./kmesh.pl 4 4 4 wannier +``` and then copy the output inside the in the `kpoints` block in the `seedname.win` file. @@ -49,7 +54,7 @@ allows to provide the $k$ point coordinates with the accuracy required by `wannier90`, and moreover it makes sure that the $k$ grid used in the ab-initio code and in `wannier90` are the same. -### `w90chk2chk.x` +## `w90chk2chk.x` During the calculation of the Wannier functions, `wannier90` produces a `.chk` file that contains some information to restart the calculation. @@ -69,22 +74,28 @@ machine, and then converted back on the second machine. To this aim, use the `w90chk2chk.x` executable. Note that this executable is not compiled by default: you can obtain it by executing - make w90chk2chk +```bash title="Terminal" +make w90chk2chk +``` in the main `wannier90` directory. A typical use is the following: -1. Calculate the Wannier functions with `wannier90` +1. Calculate the Wannier functions with `wannier90` -2. At the end of the calculation you will find a `seedname.chk` file. +2. At the end of the calculation you will find a `seedname.chk` file. Run (in the folder with this file) the command - w90chk2chk.x -export seedname + ```bash title="Terminal" + w90chk2chk.x -export seedname + ``` or equivalently - w90chk2chk.x -u2f seedname + ```bash title="Terminal" + w90chk2chk.x -u2f seedname + ``` (replacing `seedname` with the seedname of your calculation). @@ -92,24 +103,28 @@ A typical use is the following: file `seedname.chk.fmt` that is safe to be transferred between different machines. -3. Copy the `seedname.chk.fmt` file (together with the `seedname.win` +3. Copy the `seedname.chk.fmt` file (together with the `seedname.win` and `seedname.eig` files) on the machine on which you want to run `postw90`. -4. On this second machine (after having compiled `w90chk2chk.x`) run +4. On this second machine (after having compiled `w90chk2chk.x`) run - w90chk2chk.x -import seedname + ```bash title="Terminal" + w90chk2chk.x -import seedname + ``` or equivalently - w90chk2chk.x -f2u seedname + ```bash title="Terminal" + w90chk2chk.x -f2u seedname + ``` This command reads the `seedname.chk.fmt` file and creates an unformatted file `seedname.chk` ready to be used by `postw90`. -5. Run the `postw90` code. +5. Run the `postw90` code. -### `PL_assessment` +## `PL_assessment` The function of this utility is to assess the length of a principal layer (in the context of a Landauer-Buttiker quantum conductance @@ -122,7 +137,7 @@ The utility requires the real-space Hamiltonian in the MLWF basis, The `seedname_hr.dat` file should be copied to a directory containing executable for the utility. Within that directory, run: -```bash +```bash title="Terminal" ./PL_assess.x nk1 nk2 nk3 num_wann ``` @@ -134,7 +149,7 @@ k-points in y-direction `nk3` is the number of k-points in z-direction e.g., -```bash +```bash title="Terminal" ./PL_assess.x 1 1 20 16 ``` @@ -146,16 +161,16 @@ When prompted, enter the seedname. The programme will return an output file `seedname_pl.dat`, containing four columns -1. Unit cell number, $R$ +1. Unit cell number, $R$ -2. Average 'on-site' matrix element between MLWFs in the home unit +2. Average 'on-site' matrix element between MLWFs in the home unit cell, and the unit cell $R$ lattice vectors away -3. Standard devaition of the quantity in (2) +3. Standard devaition of the quantity in (2) -4. Maximum absolute value in (2) +4. Maximum absolute value in (2) -### `w90vdw` +## `w90vdw` This utility provides an implementation of a method for calculating van der Waals energies based on the idea of density decomposition via MLWFs. @@ -171,7 +186,7 @@ For further details of this program, please see the documentation in `utility/w90vdw/doc/` and the related examples in `utility/w90vdw/examples/`. -### `w90pov` +## `w90pov` An utility to create Pov files (to render the Wannier functions using the PovRay utility) is provided inside `utility/w90pov`. @@ -179,7 +194,7 @@ the PovRay utility) is provided inside `utility/w90pov`. Please refer to the documentation inside `utility/w90pov/doc` for more information. -### `k_mapper.py` +## `k_mapper.py` The `wannier90` code requires the definition of a full Monkhorst--Pack grid of $\mathbf{k}$-vectors, which can be obtained by means of the @@ -191,12 +206,14 @@ calculation than what you need to interpolate the band structure. The a full grid needed for interpolation into the reduced grid needed for the GW calculation with Yambo. Usage: - path/k_mapper.py nx ny nz QE_nscf_output +```bash title="Terminal" +path/k_mapper.py nx ny nz QE_nscf_output +``` where `path` is the path of `utility` folder, `QE_nscf_output` is the path of the QE nscf output file given to Yambo. -### `gw2wannier90.py` +## `gw2wannier90.py` This utility allows to sort in energy the input data of `wannier90` (e.g. overlap matrices and energy eigenvalues). `gw2wannier90.py` allows @@ -204,16 +221,20 @@ to use `wannier90` at the $G_0W_0$ level, where quasi-particle corrections can change the energy ordering of eigenvalues (Some `wannier90` modules require states to be ordered in energy). Usage: - path/gw2wannier90.py seedname options +```bash title="Terminal" +path/gw2wannier90.py seedname options +``` where `path` is the path of `utility` folder. Available options are: - mmn, amn, spn, unk, uhu, uiu, - spn_formatted, unk_formatted, uhu_formatted, uiu_formatted, - write_formatted +```bash title="Terminal" +mmn, amn, spn, unk, uhu, uiu, +spn_formatted, unk_formatted, uhu_formatted, uiu_formatted, +write_formatted +``` If no options are specified, all the files (`mmn, amn, spn, UNK, uHu, uIu`) are considered. @@ -228,7 +249,7 @@ In default, the output format is the same as the input format. To generate formatted files with unformatted input, use option: `write_formatted` -### `w90spn2spn.x` +## `w90spn2spn.x` The interface between ab-initio code and `wannier90` (e.g. `pw2wannier90.x`) can produce a `.spn` file that is used by `postw90` to @@ -247,25 +268,29 @@ machine. To this aim, use the `w90spn2spn.x` executable. Note that this executable is not compiled by default: you can obtain it by executing - make w90spn2spn +```bash title="Terminal" +make w90spn2spn +``` in the main `wannier90` directory. A typical use is the following: -1. Calculate the `.spn` file, e.g. by `pw2wannier90.x` +1. Calculate the `.spn` file, e.g. by `pw2wannier90.x` -2. At the end of the calculation you will find a `seedname.spn` file. +2. At the end of the calculation you will find a `seedname.spn` file. If the file is "unformatted", run (in the folder with this file) the command - w90spn2spn.x -export seedname - + ```bash title="Terminal" + w90spn2spn.x -export seedname + ``` or equivalently - w90spn2spn.x -u2f seedname - + ```bash title="Terminal" + w90spn2spn.x -u2f seedname + ``` (replacing `seedname` with the seedname of your calculation). @@ -273,23 +298,25 @@ A typical use is the following: file `seedname.spn.fmt` that is safe to be transferred between different machines. -3. Copy the `seedname.spn.fmt` file on the machine on which you want to +3. Copy the `seedname.spn.fmt` file on the machine on which you want to run `postw90`. -4. On this second machine (after having compiled `w90spn2spn.x`) run +4. On this second machine (after having compiled `w90spn2spn.x`) run - w90spn2spn.x -import seedname - + ```bash title="Terminal" + w90spn2spn.x -import seedname + ``` or equivalently - w90spn2spn.x -f2u seedname - + ```bash title="Terminal" + w90spn2spn.x -f2u seedname + ``` This command reads the `seedname.spn.fmt` file and creates an unformatted file `seedname.spn` ready to be used by `postw90`. -5. Run the `postw90` code. +5. Run the `postw90` code. Note if `spn_formatted` is set to `true` in both `pw2wannier90.x` and `postw90` input files, then the `.spn` file will be written and read as @@ -300,7 +327,7 @@ rerun `pw2wannier90.x`, then `w90spn2spn.x` can be useful. Also, once a if `spn_formatted` is set to `true` in `postw90` input file `seedname.win`. -### `write_pdwf_projectors.py` +## `write_pdwf_projectors.py` A python script to extract projectors from a `UPF` file and write them into a `pw2wannier90.x`-recognizable `dat` file, which can be used to @@ -308,7 +335,9 @@ compute `amn` using pseudo-atomic orbital projection. Usage: - path/write_pdwf_projectors.py UPF_filename +```bash title="Terminal" +path/write_pdwf_projectors.py UPF_filename +``` where `path` is the path of `utility` folder, `UPF_filename` is the path of a `UPF` file. diff --git a/docs/docs/user_guide/postw90/berry.md b/docs/docs/user_guide/postw90/berry.md index 62df3e1e..0c40aa2d 100644 --- a/docs/docs/user_guide/postw90/berry.md +++ b/docs/docs/user_guide/postw90/berry.md @@ -1,13 +1,13 @@ # Overview of the `berry` module -The `berry` module of `postw90` is called by setting ` berry = true` and +The `berry` module of `postw90` is called by setting `berry = true` and choosing one or more of the available options for `berry_task`. The routines in the `berry` module which compute the $k$-space Berry curvature, orbital magnetization and spin Hall conductivity are also called when `kpath = true` and `kpath_task = {curv,morb,shc}`, or when `kslice = true` and `kslice_task = {curv,morb,shc}`. -### Background: Berry connection and curvature +## Background: Berry connection and curvature The Berry connection is defined in terms of the cell-periodic Bloch states $\vert u_{n{\bf k}}\rangle=e^{-i{\bf k}\cdot{\bf r}}\vert @@ -18,7 +18,7 @@ $$ {\bf A}_n({\bf k})=\langle u_{n{\bf k}}\vert i\bm{\nabla}_{\bf k}\vert u_{n{\bf k}}\rangle, \end{equation} -$$ +$$ and the Berry curvature is the curl of the connection, @@ -29,7 +29,7 @@ $$ \langle \bm{\nabla}_{\bf k} u_{n{\bf k}}\vert \times \vert\bm{\nabla}_{\bf k} u_{n{\bf k}}\rangle. \end{equation} -$$ +$$ These two quantities play a central role in the description of several electronic properties @@ -42,21 +42,21 @@ $$ {\bf A}_{nm}({\bf k})=\langle u_{n{\bf k}}\vert i\bm{\nabla}_{\bf k}\vert u_{m{\bf k}}\rangle={\bf A}_{mn}^*({\bf k}), \end{equation} -$$ +$$ and write the curvature as an -antisymmetric tensor, +antisymmetric tensor, $$ \begin{equation} \label{eq:curv} \Omega_{n,\alpha\beta}({\bf k}) =\epsilon_{\alpha\beta\gamma} -\Omega_{n,\gamma}({\bf k})=-2{\rm Im}\langle +\Omega_{n,\gamma}({\bf k})=-2{\rm Im}\langle \nabla_{k_\alpha} u_{n\bf k}\vert \nabla_{k_\beta} u_{n\bf k}\rangle. \end{equation} $$ -### `berry_task=kubo`: optical conductivity and joint density of states +## `berry_task=kubo`: optical conductivity and joint density of states The Kubo-Greenwood formula for the optical conductivity of a crystal in the independent-particle approximation reads @@ -81,7 +81,7 @@ frequency, and $\eta>0$ is an adjustable smearing parameter with units of energy. The off-diagonal velocity matrix elements can be expressed in terms of -the connection matrix [@blount-ssp62], +the connection matrix [@blount-ssp62], $$ \begin{equation} @@ -90,9 +90,9 @@ $$ -\frac{i}{\hbar}(\varepsilon_{m{\bf k}}-\varepsilon_{n{\bf k}}) {\bf A}_{nm}({\bf k})\,\,\,\,\,\,\,\,(m\not= n). \end{equation} -$$ +$$ -The conductivity becomes +The conductivity becomes $$ \begin{equation} @@ -110,7 +110,7 @@ A_{nm,\alpha}({\bf k})A_{mn,\beta}({\bf k}) $$ Let us decompose it into Hermitian (dissipative) and anti-Hermitean -(reactive) parts. Note that +(reactive) parts. Note that $$ \begin{equation} @@ -118,7 +118,7 @@ $$ \overline{\delta}(\varepsilon)=\frac{1}{\pi}{\rm Im} \left[\frac{1}{\varepsilon-i\eta}\right], \end{equation} -$$ +$$ where $\overline{\delta}$ denotes a "broadended" delta-function. Using this identity we find for @@ -140,7 +140,7 @@ Improved numerical accuracy can be achieved by replacing the Lorentzian analytical form of $\overline{\delta}(\varepsilon)$ is controlled by the keyword `[kubo_]smr_type`. -The anti-Hermitean part of Eq. $\eqref{eq:sig-k}$ is given by +The anti-Hermitean part of Eq. $\eqref{eq:sig-k}$ is given by $$ \begin{equation} @@ -153,10 +153,10 @@ $$ \right] A_{nm,\alpha}({\bf k})A_{mn,\beta}({\bf k}). \end{equation} -$$ +$$ Finally the joint density -of states is +of states is $$ \begin{equation} @@ -167,9 +167,9 @@ f_{n{\bf k}}(1-f_{m{\bf k}}) \end{equation} $$ -Equations $\eqref{eq:lorentzian}$--$\eqref{eq:jdos}$ contain the parameter $\eta$, whose value can be -chosen using the keyword -` [kubo_]smr_fixed_en_width`. Better results can often be achieved by +Equations $\eqref{eq:lorentzian}$--$\eqref{eq:jdos}$ contain the parameter +$\eta$, whose value can be chosen using the keyword +`[kubo_]smr_fixed_en_width`. Better results can often be achieved by adjusting the value of $\eta$ for each pair of states, i.e., $\eta\rightarrow \eta_{nm\bf k}$. This is done as follows (see description of the keyword `adpt_smr_fac`) @@ -203,7 +203,7 @@ $$ whose independent components are written as a function of frequency onto nine separate files. -### `berry_task=ahc`: anomalous Hall conductivity +## `berry_task=ahc`: anomalous Hall conductivity The antisymmetric tensor $\sigma^{\rm A}_{\alpha\beta}$ is odd under time reversal, and therefore vanishes in non-magnetic systems, while in @@ -226,7 +226,7 @@ $$ \langle u_{m\bf k}\vert\nabla_{k_\beta} u_{n\bf k}\rangle, \end{equation} $$ - + where we replaced $f_{n\bf k}-f_{m\bf k}$ with $f_{n\bf k}(1-f_{m\bf k})-f_{m\bf k}(1-f_{n\bf k})$. @@ -235,11 +235,11 @@ This expression is not the most convenient for *ab initio* calculations, as the sums run over the complete set of occupied and empty states. In practice the sum over empty states can be truncated, but a relatively large number should be retained to obtain accurate results. Using the -resolution of the identity +resolution of the identity $1=\sum_m \vert u_{m\bf k} \rangle \langle u_{m\bf k}\vert$ and noting that the term $\sum_{n,m}f_{n\bf k}f_{m\bf k}(\ldots)$ vanishes identically, we arrive at the celebrated formula for the intrinsic AHC in terms of the Berry -curvature, +curvature, $$ \begin{equation} @@ -251,7 +251,7 @@ $$ \Omega_{\alpha\beta}({\bf k})&=\sum_n f_{n\bf k}\Omega_{n,\alpha\beta}({\bf k}). \end{aligned} \end{equation} -$$ +$$ Note that only *occupied* states enter this expression. Once we have a set of Wannier functions spanning the valence bands @@ -260,10 +260,10 @@ Eq. $\eqref{eq:ahc}$ can be evaluated by Wannier interpolation as described in Refs. [@wang-prb06; @lopez-prb12], with no truncation involved. -### `berry_task=morb`: orbital magnetization +## `berry_task=morb`: orbital magnetization The ground-state orbital magnetization of a crystal is given -by [@xiao-rmp10; @ceresoli-prb06] +by [@xiao-rmp10; @ceresoli-prb06] $$ \begin{equation} @@ -280,7 +280,7 @@ $$ \vert \bm{\nabla}_{\bf k}u_{n{\bf k}}\rangle, \end{aligned} \end{equation} -$$ +$$ where $\varepsilon_F$ is the Fermi energy. The Wannier-interpolation calculation is described in Ref. [@lopez-prb12]. @@ -288,11 +288,11 @@ Note that the definition of ${\bf M}^{\rm orb}({\bf k})$ used here differs by a factor of $-1/2$ from the one in Eq. (97) and Fig. 2 of that work. -### `berry_task=shc`: spin Hall conductivity {#sec:shc} +## `berry_task=shc`: spin Hall conductivity {#sec:shc} The Kubo-Greenwood formula for the intrinsic spin Hall conductivity (SHC) of a crystal in the independent-particle approximation reads -[@qiao-prb2018; @ryoo-prb2019; @guo-prl2008] +[@qiao-prb2018; @ryoo-prb2019; @guo-prl2008] $$ \begin{equation} @@ -301,7 +301,7 @@ $$ \sum_{\bm{k}}\sum_{n} f_{n\bm{k}} \\ \sum_{m \neq n} \frac{2\operatorname{Im}[\langle n\bm{k}| \hat{j}_{\alpha}^{\gamma}|m\bm{k}\rangle - \langle m\bm{k}| -e\hat{v}_{\beta}|n\bm{k}\rangle]} + \langle m\bm{k}| -e\hat{v}_{\beta}|n\bm{k}\rangle]} {(\epsilon_{n\bm{k}}-\epsilon_{m\bm{k}})^2-(\hbar\omega +i\eta)^2}. \end{equation} $$ @@ -328,8 +328,10 @@ elements are evaluated, $$ \begin{equation} -\langle u_{n{\bf k}}\vert\sigma_\gamma H_{\bf k}\vert u_{m{\bf k}+{\bf b}}\rangle, -\langle u_{n{\bf k}}\vert\sigma_\gamma \vert u_{m{\bf k}+{\bf b}}\rangle, \gamma = x, y, z +\langle u_{n{\bf k}}\vert\sigma_\gamma H_{\bf k} +\vert u_{m{\bf k}+{\bf b}}\rangle, +\langle u_{n{\bf k}}\vert \sigma_\gamma \vert u_{m{\bf k}+{\bf b}}\rangle, +\gamma = x, y, z \end{equation} $$ @@ -342,15 +344,15 @@ the input file. For a full derivation please refer to Ref. [@qiao-prb2018] or Ref. [@ryoo-prb2019]. The Eq. $\eqref{eq:kubo_shc}$ can be further separated into band-projected -Berry curvature-like term +Berry curvature-like term $$ \begin{equation} \label{eq:kubo_shc_berry} \Omega_{n,\alpha\beta}^{\text{spin}\gamma}(\bm{k}) = {\hbar}^2 \sum_{ - m\ne n}\frac{-2\operatorname{Im}[\langle n\bm{k}| - \frac{1}{2}\{\hat{\sigma}_{\gamma},\hat{v}_{\alpha}\}|m\bm{k}\rangle - \langle m\bm{k}| \hat{v}_{\beta}|n\bm{k}\rangle]} + m\ne n}\frac{-2\operatorname{Im}[\langle n\bm{k}| + \frac{1}{2}\{\hat{\sigma}_{\gamma},\hat{v}_{\alpha}\}|m\bm{k}\rangle + \langle m\bm{k}| \hat{v}_{\beta}|n\bm{k}\rangle]} {(\epsilon_{n\bm{k}}-\epsilon_{m\bm{k}})^2-(\hbar\omega+i\eta)^2}, \end{equation} $$ @@ -363,17 +365,17 @@ $$ \Omega_{\alpha\beta}^{\text{spin}\gamma}(\bm{k}) = \sum_{n} f_{n\bm{k}} \Omega_{n,\alpha\beta}^{\text{spin}\gamma}(\bm{k}), \end{equation} -$$ +$$ -and the SHC is +and the SHC is $$ \begin{equation} -\sigma_{\alpha\beta}^{\text{spin}\gamma}(\omega) = +\sigma_{\alpha\beta}^{\text{spin}\gamma}(\omega) = -\frac{e^2}{\hbar}\frac{1}{\Omega_c N_k}\sum_{\bm{k}} \Omega_{\alpha\beta}^{\text{spin}\gamma}(\bm{k}). \end{equation} -$$ +$$ The unit of the $\Omega_{n,\alpha\beta}^{\text{spin}\gamma}(\bm{k})$ is @@ -415,7 +417,7 @@ or > principles using maximally localized Wannier functions*, > Phys. Rev. B. 99, 235113 (2019), DOI:10.1103/PhysRevB.99.235113. -### `berry_task=sc`: shift current +## `berry_task=sc`: shift current The shift-current contribution to the second-order response is characterized by a frequency-dependent third-rank tensor [@sipe-prb00] @@ -431,7 +433,7 @@ $$ &\times \left[\delta(\omega_{mn\bm{k}}-\omega)+\delta(\omega_{nm\bm{k}}-\omega)\right], \end{split} \end{equation} -$$ +$$ where $a,b,c$ are spatial indexes and $\omega_{mn\bm{k}}=(\epsilon_{n\bm{k}}-\epsilon_{m\bm{k}})/\hbar$. The @@ -443,10 +445,10 @@ $$ \label{eq:r} r^a_{ nm}(\bm{k})=(1-\delta_{nm})A^a_{ nm}(\bm{k}), \end{equation} -$$ +$$ and its -*generalized derivative* +*generalized derivative* $$ \begin{equation} @@ -476,16 +478,16 @@ the keyword `[kubo_]adpt_smr`. Please cite Ref. [@ibanez-azpiroz_ab_2018] when publishing shift-current results using this method. -### `berry_task=kdotp`: $k\cdot p$ coefficients {#sec:kdotp} +## `berry_task=kdotp`: k ⋅ p coefficients -Consider a Hamiltonian +Consider a Hamiltonian $$ \begin{equation} \label{eq:H} H=H^{0}+H^{\prime} \end{equation} -$$ +$$ where the eigenvalues $E_{n}$ and eigenfunctions $\vert n\rangle$ of $H^{0}$ are known, and $H^{\prime}$ is a @@ -500,12 +502,12 @@ $$ \label{eq:pert-exp} \tilde{H}=\tilde{H}^{0}+\tilde{H}^{1}+\tilde{H}^{2} + \cdots \end{equation} -$$ +$$ where $\tilde{H}^{j}$ contain matrix elements of $H^{\prime}$ to the $j$th power. According to Appendix B of Ref [@winkler_spin-orbit_2003], the -first three terms are +first three terms are $$ \begin{equation} @@ -516,12 +518,12 @@ $$ & \tilde{H}^{1}_{mm'} = H^{'}_{mm'},\\ \label{eq:pert-matelem2} & \tilde{H}^{2}_{mm'} = \dfrac{1}{2}\sum_{l}H^{'}_{ml}H^{'}_{lm'} -\left( +\left( \dfrac{1}{E_{m}-E_{l}}+\dfrac{1}{E_{m'}-E_{l}} \right), \end{aligned} \end{equation} -$$ +$$ where $m,m'\in A$ and $l\in B$. The approximation $\tilde{H}\sim \tilde{H}^{0}+\tilde{H}^{1}$ amounts to truncating $H$ to @@ -532,7 +534,7 @@ elements of the truncated matrix. We adopt the notation described in Sec. III.B of Ref. [@wang-prb06]. We shift the origin of $k$ space to the point where the band edge (or some other band extremum of interest) is located, and Taylor expand around -that point the Wannier-gauge Hamiltonian, +that point the Wannier-gauge Hamiltonian, $$ \begin{equation} @@ -542,28 +544,32 @@ H^{(W)}(\bm{k})=H^{(W)}(0) +\dfrac{1}{2}\sum_{ab}H_{ab}^{(W)}(0)k_{a}k_{b} + \mathcal{O}(k^{3}) \end{equation} -$$ +$$ -where $a,b=x,y,z$, and +where $a,b=x,y,z$, and $$ \begin{equation} \begin{aligned} -&H_{a}^{(W)}(0)=\left. \dfrac{\partial H^{(W)}(\bm{k})}{\partial k_{a}}\right\rvert_{\bm{k}=0}\\ -&H_{ab}^{(W)}(0)=\left. \dfrac{\partial^{2} H^{(W)}(\bm{k})}{\partial k_{a}\partial k_{b}}\right\rvert_{\bm{k}=0} +&H_{a}^{(W)}(0)=\left. \dfrac{\partial H^{(W)}(\bm{k})}{\partial k_{a}} +\right\rvert_{\bm{k}=0}\\ +&H_{ab}^{(W)}(0)=\left. \dfrac{\partial^{2} H^{(W)}(\bm{k})} +{\partial k_{a}\partial k_{b}}\right\rvert_{\bm{k}=0} \end{aligned} \end{equation} $$ We now apply to $H^{(W)}(\bm{k})$ a similarity transformation $U(0)$ that diagonalizes $H^{(W)}(0)$, and call the transformed Hamiltonian -$H(\bm{k})$, +$H(\bm{k})$, $$ \begin{equation} \label{eq:Hbar} -H(\bm{k})=\overbrace{\overline{H}}^{H^{0}} + \overbrace{\sum_{a}\overline{H}_{a}k_{a} -+\dfrac{1}{2}\sum_{ab}\overline{H}_{ab}k_{a}k_{b}}^{H^{\prime}} + \mathcal{O}(k^{3}), +H(\bm{k})=\overbrace{\overline{H}}^{H^{0}} + +\overbrace{\sum_{a}\overline{H}_{a}k_{a} ++\dfrac{1}{2}\sum_{ab}\overline{H}_{ab}k_{a}k_{b}}^{H^{\prime}} + +\mathcal{O}(k^{3}), \end{equation} $$ @@ -573,7 +579,7 @@ $$ \begin{equation} \overline{\mathcal{O}}=U^{\dagger}(0)\mathcal{O}^{(W)}(0)U(0), \end{equation} -$$ +$$ and applied it to $\mathcal{O}=H,{H}_{a},{H}_{ab}$. We can now apply @@ -586,30 +592,29 @@ Eq. $\eqref{eq:pert-exp}$ up to second order in $k$ we get $$ \begin{equation} \label{eq:Htilde} - \tilde{H}_{mm'}(\bm{k}) = + \tilde{H}_{mm'}(\bm{k}) = \overline{H}_{mm'} + \sum_{a} \left(\overline{H}_{a}\right)_{mm'}k_{a} + \dfrac{1}{2}\sum_{a,b}\left[ \left(\overline{H}_{ab}\right)_{mm'} + \left({T}_{ab}\right)_{mm'} \right]k_{a}k_{b}+ \mathcal{O}(k^{3}), \end{equation} -$$ +$$ where $m,m'\in A$ and we have -defined the virtual-transition matrix +defined the virtual-transition matrix $$ \begin{equation} \label{eq:Tab} \left({T}_{ab}\right)_{mm'}=\sum_{l\in B} -\left(\overline{H}_{a}\right)_{ml}\left(\overline{H}_{b}\right)_{lm'} +\left(\overline{H}_{a}\right)_{ml}\left(\overline{H}_{b}\right)_{lm'} \times -\left( +\left( \dfrac{1}{E_{m}-E_{l}}+\dfrac{1}{E_{m'}-E_{l}} \right) -= -\left({T}_{ab}\right)_{m'm}^{*}. += \left({T}_{ab}\right)_{m'm}^{*}. \end{equation} -$$ +$$ (The $T_{ab}$ term in Eq. $\eqref{eq:Htilde}$ @@ -621,13 +626,14 @@ The implementation in `wannier90` follows the scheme proposed in Ref. [@ibanez-azpiroz-ArXiv2019], and outputs $\overline{H}_{mm'}$ in `seedname-kdotp_0.dat`, $\left(\overline{H}_{a}\right)_{mm'}$ in `seedname-kdotp_1.dat`, and -$\left[\left(\overline{H}_{ab}\right)_{mm'} + \left({T}_{ab}\right)_{mm'}\right]/2$ +$\left[\left(\overline{H}_{ab}\right)_{mm'} + +\left({T}_{ab}\right)_{mm'}\right]/2$ in `seedname-kdotp_2.dat`. Please cite Ref. [@ibanez-azpiroz-ArXiv2019] when publishing $k\cdot p$ results using this method. -### Needed matrix elements +## Needed matrix elements All the quantities entering the formulas for the optical conductivity and AHC can be calculated by Wannier interpolation once the Hamiltonian @@ -637,7 +643,8 @@ and position matrix elements $\langle {\bf 0}n\vert H\vert elements are readily available at the end of a standard MLWF calculation with `wannier90`. In particular, $\langle {\bf 0}n\vert {\bf r}\vert {\bf R}m\rangle$ can be calculated by Fourier -transforming the overlap matrices in [Methodology Eq. \[overlap matrices\]](../wannier90/methodology.md#mjx-eqn:eq:overlap-matrix), +transforming the overlap matrices in +[Methodology Eq. \[overlap matrices\]](../wannier90/methodology.md#mjx-eqn:eq:overlap-matrix), $$ \begin{equation} @@ -656,45 +663,52 @@ $$ \langle u_{n{\bf k}+{\bf b}_1}\vert H_{\bf k}\vert u_{m{\bf k}+{\bf b}_2}\rangle \end{equation} -$$ +$$ over the *ab-initio* $k$-point mesh [@lopez-prb12]. These are evaluated by `pw2wannier90`, -the interface routine between ` pwscf` and `wannier90`, by adding to the -input file ` seedname.pw2wan` the line +the interface routine between `pwscf` and `wannier90`, by adding to the +input file `seedname.pw2wan` the line - write_uHu = .true. +```vi title="Input file" +write_uHu = .true. +``` The calculation of spin Hall conductivity needs the spin matrix elements $$ \begin{equation} -\langle u_{n{\bf k}}\vert \sigma_\gamma \vert u_{m{\bf k}}\rangle, +\langle u_{n{\bf k}}\vert \sigma_\gamma \vert u_{m{\bf k}}\rangle, \gamma = x, y, z \end{equation} -$$ +$$ from the *ab-initio* $k$-point mesh. These are also evaluated by `pw2wannier90` by adding to the input file -` seedname.pw2wan` the line +`seedname.pw2wan` the line - write_spn = .true. +```vi title="Input file" +write_spn = .true. +``` If one uses Ryoo's method to calculate spin Hall conductivity, the -further matrix elements are needed: +further matrix elements are needed: $$ \begin{equation} \langle u_{n{\bf k}}\vert -\sigma_\gamma H_{\bf k}\vert u_{m{\bf k}+{\bf b}}\rangle, \langle u_{n{\bf k}}\vert +\sigma_\gamma H_{\bf k}\vert u_{m{\bf k}+{\bf b}}\rangle, +\langle u_{n{\bf k}}\vert \sigma_\gamma \vert u_{m{\bf k}+{\bf b}}\rangle, \gamma = x, y, z \end{equation} -$$ +$$ and these are evaluated by adding to the input file -` seedname.pw2wan` the lines +`seedname.pw2wan` the lines - write_sHu = .true. - write_sIu = .true. +```vi title="Input file" +write_sHu = .true. +write_sIu = .true. +``` diff --git a/docs/docs/user_guide/postw90/boltzwann.md b/docs/docs/user_guide/postw90/boltzwann.md index d7142fba..9b4d371b 100644 --- a/docs/docs/user_guide/postw90/boltzwann.md +++ b/docs/docs/user_guide/postw90/boltzwann.md @@ -10,7 +10,7 @@ $\mathrm{\bm{S}}$ and the coefficient $\mathrm{\bm{K}}$ (defined below; it is the main ingredient of the thermal conductivity). The list of parameters of the `BoltzWann` module are summarized in -Table [ `BoltzWann` Parameters](postw90params.md#boltzwann-parameters). +Table [`BoltzWann` Parameters](postw90params.md#boltzwann-parameters). A [tutorial of a Boltzmann transport](../../tutorials/tutorial_16.md) calculation can be found in the `wannier90` Tutorial. @@ -18,8 +18,8 @@ calculation can be found in the `wannier90` Tutorial. By default, the code assumes to be working with a 3D bulk material, with periodicity along all three spatial directions. If you are interested in studying 2D systems, set the correct value for the - `boltz_2d_dir` variable - (see Sec. [boltz_2d_dir](postw90params.md/#sec:boltz2ddir) for the documentation). + `boltz_2d_dir` variable + (see Sec. [boltz_2d_dir](postw90params.md#sec:boltz2ddir) for the documentation). This is important for the evaluation of the Seebeck coefficient. @@ -32,7 +32,7 @@ obtained using the `BoltzWann` module: > basis*, > Comp. Phys. Comm. 185, 422 (2014), DOI:10.1016/j.cpc.2013.09.015. -### Theory {#sec:boltzwann-theory} +## Theory The theory of the electronic transport using the Boltzmann transport equations can be found for instance in @@ -45,11 +45,13 @@ flux density) $\mathrm{\bm{J}}_Q$ can be written, respectively, as $$ \begin{equation} \begin{aligned} - \mathrm{\bm{J}} &= \mathrm{\bm{\sigma}}(\mathrm{\bm{E}} - \mathrm{\bm{S}} \mathrm{\bm{\nabla }}T) \\ - \mathrm{\bm{J}}_Q &= T \mathrm{\bm{\sigma }}\mathrm{\bm{S}} \mathrm{\bm{E}} - \mathrm{\bm{K}} \mathrm{\bm{\nabla }}T, + \mathrm{\bm{J}} &= \mathrm{\bm{\sigma}}(\mathrm{\bm{E}} - \mathrm{\bm{S}} + \mathrm{\bm{\nabla }}T) \\ + \mathrm{\bm{J}}_Q &= T \mathrm{\bm{\sigma }}\mathrm{\bm{S}} \mathrm{\bm{E}} - + \mathrm{\bm{K}} \mathrm{\bm{\nabla }}T, \end{aligned} \end{equation} -$$ +$$ where the electrical conductivity $\mathrm{\bm{\sigma}}$, the Seebeck coefficient $\mathrm{\bm{S}}$ and @@ -61,7 +63,8 @@ $\mathrm{\bm{K}}$ are $3\times 3$ tensors, in general. heat current per unit of temperature gradient in open-circuit experiments (i.e., with $\mathrm{\bm{J}}=0$) is not precisely $\mathrm{\bm{K}}$, but - $\mathrm{\bm{\kappa }}= \mathrm{\bm{K}}-\mathrm{\bm{S}} \mathrm{\bm{\sigma }}\mathrm{\bm{S}} T$ + $\mathrm{\bm{\kappa }}= \mathrm{\bm{K}}-\mathrm{\bm{S}} + \mathrm{\bm{\sigma }}\mathrm{\bm{S}} T$ (see for instance Eq. (7.89) of Ref. [@ziman-book72] or Eq. (XI-57b) of Ref. [@grosso-book00]). The thermal conductivity $\mathrm{\bm{\kappa}}$ can be then calculated from the $\mathrm{\bm{\sigma}}$, @@ -74,12 +77,19 @@ $$ \begin{equation} \label{eq:boltz-sigmas} \begin{aligned} - \mathrm{[\bm{\sigma}]}_{ij}(\mu,T)&=e^2 \int_{-\infty}^{+\infty} d\varepsilon \left(-\frac {\partial f(\varepsilon,\mu,T)}{\partial \varepsilon}\right)\Sigma_{ij}(\varepsilon), \\ - [\mathrm{\bm{\sigma }}\mathrm{\bm{S}}]_{ij}(\mu,T)&=\frac e T \int_{-\infty}^{+\infty} d\varepsilon \left(-\frac {\partial f(\varepsilon,\mu,T)}{\partial \varepsilon}\right)(\varepsilon-\mu)\Sigma_{ij}(\varepsilon),\\ - [\mathrm{\bm{K}}]_{ij}(\mu,T)&=\frac 1 T \int_{-\infty}^{+\infty} d\varepsilon \left(-\frac {\partial f(\varepsilon,\mu,T)}{\partial \varepsilon}\right)(\varepsilon-\mu)^2 \Sigma_{ij}(\varepsilon), + \mathrm{[\bm{\sigma}]}_{ij}(\mu,T)&=e^2 \int_{-\infty}^{+\infty} d\varepsilon + \left(-\frac {\partial f(\varepsilon,\mu,T)}{\partial \varepsilon}\right) + \Sigma_{ij}(\varepsilon), \\ + [\mathrm{\bm{\sigma }}\mathrm{\bm{S}}]_{ij}(\mu,T)&=\frac e T + \int_{-\infty}^{+\infty} d\varepsilon \left(-\frac {\partial + f(\varepsilon,\mu,T)}{\partial \varepsilon}\right)(\varepsilon-\mu) + \Sigma_{ij}(\varepsilon),\\ + [\mathrm{\bm{K}}]_{ij}(\mu,T)&=\frac 1 T \int_{-\infty}^{+\infty} + d\varepsilon \left(-\frac {\partial f(\varepsilon,\mu,T)} + {\partial \varepsilon}\right)(\varepsilon-\mu)^2 \Sigma_{ij}(\varepsilon), \end{aligned} \end{equation} -$$ +$$ where $[\mathrm{\bm{\sigma }}\mathrm{\bm{S}}]$ denotes the product of the two tensors $\mathrm{\bm{\sigma}}$ and @@ -90,7 +100,7 @@ $$ \begin{equation} f(\varepsilon,\mu,T) = \frac{1}{e^{(\varepsilon-\mu)/K_B T}+1} \end{equation} -$$ +$$ and $\Sigma_{ij}(\varepsilon)$ is the Transport Distribution Function (TDF) @@ -98,7 +108,9 @@ tensor, defined as $$ \begin{equation} -\Sigma_{ij}(\varepsilon) = \frac 1 V \sum_{n,\mathrm{\bm{k}}} v_i(n,\mathrm{\bm{k}}) v_j(n,\mathrm{\bm{k}}) \tau(n,\mathrm{\bm{k}}) \delta(\varepsilon - E_{n,k}). +\Sigma_{ij}(\varepsilon) = \frac 1 V \sum_{n,\mathrm{\bm{k}}} +v_i(n,\mathrm{\bm{k}}) v_j(n,\mathrm{\bm{k}}) \tau(n,\mathrm{\bm{k}}) +\delta(\varepsilon - E_{n,k}). \end{equation} $$ @@ -115,9 +127,9 @@ approximation* adopted here, $\tau$ is assumed as a constant, i.e., it is independent of $n$ and $\mathrm{\bm{k}}$ and its value (in fs) is read from the input variable `boltz_relax_time`. -### Files +## Files -#### `seedname_boltzdos.dat` +### `seedname_boltzdos.dat` OUTPUT. Written by `postw90` if `boltz_calc_also_dos` is `true`. Note that even if there are other general routines in `postw90` which @@ -132,7 +144,8 @@ describe the content of the file. Then, there is a line for each energy $\varepsilon$ on the grid, containing a number of columns. The first column is the energy $\varepsilon$. The following is the DOS at the given energy $\varepsilon$. The DOS can either be calculated using the -adaptive smearing scheme (see the following note) if `boltz_dos_adpt_smr` is `true`, or using +adaptive smearing scheme (see the following note) if `boltz_dos_adpt_smr` +is `true`, or using a "standard" fixed smearing, whose type and value are defined by `boltz_dos_smr_type` and `boltz_dos_smr_fixed_en_width`, respectively. If spin decomposition is required (input flag `spin_decomp`), further @@ -148,7 +161,7 @@ spin-down projection. the DOS may be slightly different with respect to that given by the `dos` module. -#### `seedname_tdf.dat` +### `seedname_tdf.dat` OUTPUT. This file contains the Transport Distribution Function (TDF) tensor $\mathrm{\bm{\Sigma}}$ on a grid of energies. @@ -168,7 +181,7 @@ The energy $\varepsilon$ is in eV, while $\mathrm{\bm{\Sigma}}$ is in $\displaystyle\frac{1}{\hbar^2}\cdot{\mathrm{eV}\cdot\mathrm{fs}}\cdot {\mathring{\mathrm{A}}^{-1}}$. -#### `seedname_elcond.dat` +### `seedname_elcond.dat` OUTPUT. This file contains the electrical conductivity tensor $\mathrm{\bm{\sigma}}$ on the grid of $T$ and $\mu$ points. @@ -183,7 +196,7 @@ The chemical potential is in eV, the temperature is in K, and the components of the electrical conductivity tensor ar in SI units, i.e. in 1/$\Omega$/m. -#### `seedname_sigmas.dat` +### `seedname_sigmas.dat` OUTPUT. This file contains the tensor $\mathrm{\bm{\sigma}}\mathrm{\bm{S}}$, i.e. the product of the @@ -200,7 +213,7 @@ symmetric). The chemical potential is in eV, the temperature is in K, and the components of the tensor ar in SI units, i.e. in A/m/K. -#### `seedname_seebeck.dat` +### `seedname_seebeck.dat` OUTPUT. This file contains the Seebeck tensor $\mathrm{\bm{S}}$ on the grid of $T$ and $\mu$ points. @@ -222,10 +235,10 @@ from the other three files (elcond, sigmas and kappa)! The chemical potential is in eV, the temperature is in K, and the components of the Seebeck tensor ar in SI units, i.e. in V/K. -#### `seedname_kappa.dat` +### `seedname_kappa.dat` OUTPUT. This file contains the tensor $\mathrm{\bm{K}}$ defined in -Sec. [Theory](#sec:boltzwann-theory) on the grid of $T$ and $\mu$ points. +Sec. [Theory](#theory) on the grid of $T$ and $\mu$ points. The first lines are comments (starting with \# characters) which describe the content of the file. Then, there is a line for each diff --git a/docs/docs/user_guide/postw90/geninterp.md b/docs/docs/user_guide/postw90/geninterp.md index 9576fde4..99bdfc56 100644 --- a/docs/docs/user_guide/postw90/geninterp.md +++ b/docs/docs/user_guide/postw90/geninterp.md @@ -7,14 +7,14 @@ points provided by the user. The list of parameters of the Generic Band Interpolation module are summarized in -Table [ `geninterp` Parameters](postw90params.md#geninterp-parameters). +Table [`geninterp` Parameters](postw90params.md#geninterp-parameters). The list of input $k$ points for which the band have to be calculated is read from the file named `seedname_geninterp.kpt`. The format of this file is described below. -### Files +## Files -#### `seedname_geninterp.kpt` +### `seedname_geninterp.kpt` INPUT. Read by `postw90` if `geninterp` is `true`. @@ -47,7 +47,7 @@ where `kpointidx` is an integer identifying the given $k$ point, and `k1`, `k2` and `k3` are the three coordinates of the $k$ points in the chosen units. -#### `seedname_geninterp.dat` or ` seedname_geninterp_NNNNN.dat` {#sec:seedname.geninterp.dat} +### `seedname_geninterp.dat` or `seedname_geninterp_NNNNN.dat` {#sec:seedname.geninterp.dat} OUTPUT. This file/these files contain the interpolated band energies (and also the band velocities if the input flag `geninterp_alsofirstder` @@ -57,7 +57,7 @@ If the flag `geninterp_single_file` is `true`, then a single file `seedname_geninterp.dat` is written by the code at the end of the calculation. If instead one sets `geninterp_single_file` to `false`, each process writes its own output file, named -`seedname_geninterp_00000.dat`, ` seedname_geninterp_00001.dat`, ... +`seedname_geninterp_00000.dat`, `seedname_geninterp_00001.dat`, ... This flag is useful when one wants to parallelize the calculation on many nodes, and it should be used especially for systems with a small @@ -73,8 +73,8 @@ significant bottleneck). number of processors, care is needed to avoid to mix the results of the older calculations with those of the new one. In case of doubt, either check the date stamp in the first line of the - ` seedname_geninterp_*.dat` files, or simply delete the - ` seedname_geninterp_*.dat` files before starting the new calculation. + `seedname_geninterp_*.dat` files, or simply delete the + `seedname_geninterp_*.dat` files before starting the new calculation. To join the files, on can simply use the following command: diff --git a/docs/docs/user_guide/postw90/gyrotropic.md b/docs/docs/user_guide/postw90/gyrotropic.md index a20779d9..44e2cf07 100644 --- a/docs/docs/user_guide/postw90/gyrotropic.md +++ b/docs/docs/user_guide/postw90/gyrotropic.md @@ -1,13 +1,13 @@ # Overview of the `gyrotropic` module The `gyrotropic` module of `postw90` is called by setting -` gyrotropic = true` and choosing one or more of the available options +`gyrotropic = true` and choosing one or more of the available options for `gyrotropic_task`. The module computes the quantities, studied in [@tsirkin-arxiv17], where more details may be found. -### `gyrotropic_task=-d0`: the Berry curvature dipole +## `gyrotropic_task=-d0`: the Berry curvature dipole -The traceless dimensionless tensor +The traceless dimensionless tensor $$ \begin{equation} @@ -19,7 +19,9 @@ D_{ab}=\int[d{\bm k}]\sum_n \end{equation} $$ -### `gyrotropic_task=-dw`: the finite-frequency generalization of the Berry curvature dipole + +## `gyrotropic_task=-dw`: the finite-frequency generalization of the Berry curvature dipole + $$ \begin{equation} @@ -31,7 +33,7 @@ $$ $$ where $\widetilde{\bm\Omega}_{{\bm k}n}(\omega)$ is a finite-frequency -generalization of the Berry curvature: +generalization of the Berry curvature: $$ \begin{equation} @@ -47,7 +49,7 @@ $\tilde{\bm\Omega}_{{\bm k}n}(\omega)$ is generally nonzero. As a result, $\widetilde{D}(\omega)$ can have a nonzero trace at finite frequencies, $\tilde{D}_\|\neq-2\tilde{D}_\perp$ in Te. -### `gyrotropic_task=-C`: the ohmic conductivity +## `gyrotropic_task=-C`: the ohmic conductivity In the constant relaxation-time approximation the ohmic conductivity is expressed as $\sigma_{ab}=(2\pi e\tau/\hbar)C_{ab}$, with @@ -64,20 +66,20 @@ $$ a positive quantity with units of surface current density (A/cm). -### `gyrotropic_task=-K`: the kinetic magnetoelectric effect (kME) +## `gyrotropic_task=-K`: the kinetic magnetoelectric effect (kME) A microscopic theory of the intrinsic kME effect in bulk crystals was recently developed [@yoda-sr15; @zhong-prl16]. -The response is described by +The response is described by $$ \begin{equation} \label{eq:K_ab} -K_{ab}=\int[d{\bm k}]\sum_n\frac{\partial E_n}{\partial{k_a}} m_n^b +K_{ab}=\int[d{\bm k}]\sum_n\frac{\partial E_n}{\partial{k_a}} m_n^b \left(-\frac{\partial f_0}{\partial E}\right)_{E=E_n}, \end{equation} -$$ +$$ which has the same form as Eq. $\eqref{eq:D_ab}$, but with the Berry curvature replaced by the @@ -96,16 +98,16 @@ m^{\rm spin}_{{\bm k}n}&=-\frac{1}{2}g_s\mu_{\rm B} \langle\psi_{{\bm k} (H_{\bm k}-E_{{\bm k}n})\vert{\bm\partial}_{\bm k}u_{{\bm k}n}\rangle, \end{aligned} \end{equation} -$$ +$$ where $g_s\approx 2$ and we chose $e>0$. -### `gyrotropic_task=-dos`: the density of states +## `gyrotropic_task=-dos`: the density of states The density of states is calculated with the same width and type of smearing, as the other properties of the `gyrotropic` module -### `gyrotropic_task=-noa`: the interband contributionto the natural optical activity +## `gyrotropic_task=-noa`: the interband contributionto the natural optical activity Natural optical rotatory power is given by [@ivchenko-spss75] @@ -130,14 +132,14 @@ $$ {\rm Re}\,\gamma_{abc}^{\mathrm{inter}}(\omega)=\frac{e^2}{\varepsilon_0\hbar^2} \int[d{\bm k}] \sum_{n,l}^{o,e}\, -\Bigl[ \frac{1}{\omega_{ln}^2-\omega^2} +\Bigl[ \frac{1}{\omega_{ln}^2-\omega^2} {\rm Re}\left(A_{ln}^bB_{nl}^{ac}-A_{ln}^aB_{nl}^{bc}\right) \\ --\frac{3\omega_{ln}^2-\omega^2}{(\omega_{ln}^2-\omega^2)^2} -\partial_c(E_l+E_n){\rm Im}\left(A_{nl}^aA_{ln}^b\right) +-\frac{3\omega_{ln}^2-\omega^2}{(\omega_{ln}^2-\omega^2)^2} +\partial_c(E_l+E_n){\rm Im}\left(A_{nl}^aA_{ln}^b\right) \Bigr]. \end{gathered} \end{equation} -$$ +$$ The summations over $n$ and $l$ span the occupied ($o$) and empty ($e$) bands respectively, $\omega_{ln}=(E_l-E_n)/\hbar$, and @@ -164,7 +166,7 @@ $$ B_{nl}^{ac\,({\rm spin})}=-\frac{i\hbar^2}{m_e}\epsilon_{abc} \langle u_n\vert\sigma_b\vert u_l\rangle. \end{equation} -$$ +$$ The spin matrix elements contribute less than 0.5% of the total $\rho_0^{\rm inter}$ of Te. @@ -174,16 +176,17 @@ the orbital matrix elements $$ \begin{equation} \label{eq:Bnl-sum} -B_{nl}^{ac\,({\rm orb})}=-i\partial_a(E_n+E_l)A_{nl}^c \sum_m \Bigl\{ (E_n-E_m) A_{nm}^aA_{ml}^c -(E_l-E_m) A_{nm}^cA_{ml}^a \Bigr\}. +B_{nl}^{ac\,({\rm orb})}=-i\partial_a(E_n+E_l)A_{nl}^c \sum_m +\Bigl\{ (E_n-E_m) A_{nm}^aA_{ml}^c -(E_l-E_m) A_{nm}^cA_{ml}^a \Bigr\}. \end{equation} -$$ +$$ This reduces the calculation of $B^{\text{(orb)}}$ to the evaluation of band gradients and off-diagonal elements of the Berry connection matrix. Both operations can be carried out efficiently in a Wannier-function basis following Ref. [@yates-prb07]. -### `gyrotropic_task=-spin`: compute also the spin component of NOA and KME +## `gyrotropic_task=-spin`: compute also the spin component of NOA and KME Unless this task is specified, only the orbital contributions are calcuated in NOA and KME, thus contributions from diff --git a/docs/docs/user_guide/postw90/postw90params.md b/docs/docs/user_guide/postw90/postw90params.md index 5ab1f4cd..80e7ee03 100644 --- a/docs/docs/user_guide/postw90/postw90params.md +++ b/docs/docs/user_guide/postw90/postw90params.md @@ -1,12 +1,10 @@ -Parameters -========== +# Parameters -Introduction ------------- +## Introduction The `wannier90.x` code described in -Part [wannier90.x](../wannier90/methodology.md) calculates the maximally-localized Wannier -functions. +Part [wannier90.x](../wannier90/methodology.md) calculates the +maximally-localized Wannier functions. The `postw90.x` executable contains instead a series of modules that take the Wannier functions calculated by `wannier90.x` and use them to @@ -21,22 +19,21 @@ Sec. [w90chk2chk](../appendices/utilities.md#w90chk2chkx) in the Appendices for a description of how to export/import this file. -Usage ------ +## Usage `postw90.x` can be run in parallel using MPI libraries to reduce the computation time. For serial execution use: `postw90.x [seedname]` -- `seedname`: If a seedname string is given the code will read its +- `seedname`: If a seedname string is given the code will read its input from a file `seedname.win`. The default value is `wannier`. One can also equivalently provide the string `seedname.win` instead of `seedname`. For parallel execution use: `mpirun -np NUMPROCS postw90.x [seedname]` -- `NUMPROCS`: substitute with the number of processors that you want +- `NUMPROCS`: substitute with the number of processors that you want to use. Note that the `mpirun` command and command-line flags may be different @@ -49,8 +46,7 @@ compiled in its parallel version (follow the instructions in the file and that the MPI libraries and binaries are installed and correctly configured on your machine. -`seedname.win` File -------------------- +## `seedname.win` File The `postw90.x` uses the same `seedname.win` input file of `wannier90.x`. The input keywords of `postw90.x` must thus be added to @@ -71,71 +67,74 @@ The easiest thing to do is therefore to simply *add* the `postw90` input keywords to the `seedname.win` file that was used to obtain the Wannier functions. -List of available modules -------------------------- +## List of available modules The currently available modules in `postw90.x` are: -- `dos`: Calculation of the density of states (DOS), projected density +- `dos`: Calculation of the density of states (DOS), projected density of states (PDOS), net spin etc. -- `kpath`: Calculation of $k$-space quantities such as energy bands, +- `kpath`: Calculation of $k$-space quantities such as energy bands, Berry curvature and Berry curvature-like term of spin Hall conductivity along a piecewise linear path in the BZ (see tutorials - [17](../../tutorials/tutorial_17.md), - [18](../../tutorials/tutorial_18.md) + [17](../../tutorials/tutorial_17.md), + [18](../../tutorials/tutorial_18.md) and [29](../../tutorials/tutorial_29.md) of the tutorial). -- `kslice`: Calculation of $k$-space quantities on a planar slice of - the BZ (see tutorials [17](../../tutorials/tutorial_17.md), - [18](../../tutorials/tutorial_18.md) +- `kslice`: Calculation of $k$-space quantities on a planar slice of + the BZ (see tutorials [17](../../tutorials/tutorial_17.md), + [18](../../tutorials/tutorial_18.md) and [29](../../tutorials/tutorial_29.md) of the tutorial). -- `berry`: Calculation of properties related to the BZ integral of the +- `berry`: Calculation of properties related to the BZ integral of the Berry curvature, Berry connection and Berry curvature-like term of spin Hall conductivity, including anomalous Hall conductivity, orbital magnetisation, optical conductivity, nonlinear shift current and spin Hall conductivity (see - Chap. [Berry](berry.md) and tutorials - [18](../../tutorials/tutorial_18.md), - [19](../../tutorials/tutorial_19.md), - [25](../../tutorials/tutorial_25.md), + Chap. [Berry](berry.md) and tutorials + [18](../../tutorials/tutorial_18.md), + [19](../../tutorials/tutorial_19.md), + [25](../../tutorials/tutorial_25.md), [29](../../tutorials/tutorial_29.md) and [30](../../tutorials/tutorial_30.md) of the tutorial). It also includes an option to compute $k\cdot p$ expansion coefficients (see - Sec. [kdotp](berry.md#sec:kdotp) and tutorial [33](../../tutorials/tutorial_33.md) of the tutorial). + Sec. [kdotp](berry.md#berry_taskkdotp-k-p-coefficients) and tutorial + [33](../../tutorials/tutorial_33.md) of the tutorial). -- `gyrotropic`: Calculation of gyrotropic properties, including +- `gyrotropic`: Calculation of gyrotropic properties, including natural and current0induced optical rotation, and the current-induced magnetization (see - Chap. [Gyrotropic](gyrotropic.md) and tutorial [24](../../tutorials/tutorial_24.md) of the tutorial). + Chap. [Gyrotropic](gyrotropic.md) and tutorial + [24](../../tutorials/tutorial_24.md) of the tutorial). -- `BoltzWann`: Calculation of electronic transport properties for bulk +- `BoltzWann`: Calculation of electronic transport properties for bulk materials using the semiclassical Boltzmann transport equation (see - Chap. [BoltzWann](boltzwann.md) and tutorial [16](../../tutorials/tutorial_16.md) of the tutorial). + Chap. [BoltzWann](boltzwann.md) and tutorial + [16](../../tutorials/tutorial_16.md) of the tutorial). -- `geninterp` (Generic Band Interpolation): Calculation band energies +- `geninterp` (Generic Band Interpolation): Calculation band energies (and band derivatives) on a generic list of $k$ points (see Chap. [Geninterp](geninterp.md)). -Keyword List ------------- +## Keyword List On the next pages the list of available  input keywords is reported. In particular, -Table [Global Parameters of `postw90`](#global-parameters-of-postw90) reports keywords that affect the +Table [Global Parameters of `postw90`](#global-parameters-of-postw90) reports +keywords that affect the generic behavior of all modules of . Often, these are "global" variables that can be overridden by module-specific keywords (as for instance the `kmesh` flag). The subsequent tables describe the input parameters for each specific module. A description of the behaviour of the global flags is described -Sec. [Global variables](#sec:postw90-globalflags); the description of the flags +Sec. [Global variables](#global-variables); the description of the flags specific to the modules can be found in the following sections. ### Global Parameters of `postw90` + | Keyword | Type | Description | | :---------------------------------:| :--: | :----------------------------------------------------------------------------------| | kmesh | I | Dimensions of the uniform interpolation \(k\)-mesh (one or three integers) | @@ -155,8 +154,9 @@ specific to the modules can be found in the following sections. | uHu\_formatted | L | Read a formatted `seedname.uHu` file | | spn\_formatted | L | Read a formatted `seedname.spn` file | | berry\_curv\_unit | S | Unit of Berry curvature | + -` seedname.win` file keywords controlling the general behaviour of +`seedname.win` file keywords controlling the general behaviour of the modules in `postw90`. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. @@ -165,6 +165,8 @@ specific to the modules can be found in the following sections. lack of a better place. ### `berry` Parameters + + | Keyword | Type | Description | | :-------------------------------------------: | :--: | :-------------------------------------------------------------------------------------------------------------------------------------------- | | berry | L | Calculate Berry-type quantities | @@ -198,14 +200,16 @@ specific to the modules can be found in the following sections. | kdotp\_num\_bands | I | Number of bands for \(k\cdot p\) expansion | | kdotp\_bands | I | Band indexes corresponding to the \(k\cdot p\) bands | | | | | + -` seedname.win` file keywords controlling the `berry` module. +`seedname.win` file keywords controlling the `berry` module. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. ### `dos` Parameters + | Keyword | Type | Description | | :--------------------------------: | :--: | :---------------------------------------------------------------------------- | | dos | L | Calculate the density of states and related properties | @@ -221,24 +225,31 @@ specific to the modules can be found in the following sections. | \[dos\_\]adpt\_smr\_max | P | Maximum allowed value for the adaptive energy smearing (eV) | | \[dos\_\]smr\_fixed\_en\_width | P | Energy smearing (if non-adaptive) for the DOS (eV) | | \[dos\_\]smr\_type | S | Analytical form used for the broadened delta function when computing the DOS. | + -` seedname.win ` file keywords controlling the `dos` module. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. +`seedname.win` file keywords controlling the `dos` module. +Argument types are represented by, I for a integer, R for a real number, +P for a physical value, L for a logical value and S for a text string. ### `kpath` Parameters + | Keyword | Type | Description | | :-------------------------------: | :--: | :----------------------------------------------------------- | | kpath | L | Calculate properties along a piecewise linear path in the BZ | | kpath\_task | L | List of properties to evaluate | | kpath\_num\_points | I | Number of points in the first kpath segment | | kpath\_bands\_colour | S | Property used to colour the energy bands along the path | + -` seedname.win` file keywords controlling the `kpath` module. +`seedname.win` file keywords controlling the `kpath` module. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. ### `kslice` Parameters + + | Keyword | Type | Description | | :---------------------------------------: | :--: | :------------------------------------------------------------------------------------ | | kslice | L | Calculate properties on a slice in the BZ | @@ -249,11 +260,15 @@ specific to the modules can be found in the following sections. | kslice\_2dkmesh | I | Dimensions of the uniform interpolation \(k\)-mesh on the slice (one or two integers) | | kslice\_fermi\_level | P | This parameter is not used anymore. Use fermi_energy instead. | | kslice\_fermi\_lines\_colour | S | Property used to colour the Fermi lines | + -`seedname.win` file keywords controlling the `kslice` module. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. +`seedname.win` file keywords controlling the `kslice` module. Argument types +are represented by, I for a integer, R for a real number, P for a physical +value, L for a logical value and S for a text string. ### `gyrotropic` Parameters + | Keyword | Type | Description | | :------------------------------------: | :--: | :---------------------------------------------------------------------------------------- | | gyrotropic | L | Calculate gyrotropic quantities | @@ -268,14 +283,17 @@ specific to the modules can be found in the following sections. | \[gyrotropic\_\]smr\_type | S | Analytical form used for the broadened delta function | | \[gyrotropic\_\]smr\_fixed\_en\_width | P | Energy smearing (eV) | | \[gyrotropic\_\]band\_list | I | list of bands used in the calculation | - gyrotropic\_box\_center
gyrotropic\_box\_b1
gyrotropic\_box\_b2
gyrotropic\_box\_b3 | R
R
R
R | The center and three basis vectors, defining the box for integration (in reduced coordinates, three real numbers for each vector) | +| gyrotropic\_box\_center
gyrotropic\_box\_b1
gyrotropic\_box\_b2
gyrotropic\_box\_b3 | R
R
R
R | The center and three basis vectors, defining the box for integration (in reduced coordinates, three real numbers for each vector) | + -` seedname.win` file keywords controlling the `gyrotropic` module. +`seedname.win` file keywords controlling the `gyrotropic` module. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. ### `BoltzWann` Parameters + + | Keyword | Type | Description | | :--------------------------------------------: | :--: | :------------------------------------------------------------------------- | | boltzwann | L | Calculate Boltzmann transport coefficients | @@ -304,6 +322,7 @@ specific to the modules can be found in the following sections. | boltz\_bandshift | L | Rigid bandshift of the conduction bands | | boltz\_bandshift\_firstband | I | Index of the first band to shift | | boltz\_bandshift\_energyshift | P | Energy shift of the conduction bands (eV) | + `seedname.win` file keywords controlling the `BoltzWann` module (calculation of the Boltzmann transport coefficients in the Wannier basis). Argument @@ -312,16 +331,20 @@ specific to the modules can be found in the following sections. ### `geninterp` Parameters + | Keyword | Type | Description | | :----------------------------------: | :--: | :-------------------------------------------- | | geninterp | L | Calculate bands for given set of \(k\) points | | geninterp\_alsofirstder | L | Calculate also first derivatives | | geninterp\_single\_file | L | Write a single file or one for each process | + -`seedname.win` file keywords controlling the Generic Band Interpolation (`geninterp`) module. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. +`seedname.win` file keywords controlling the Generic Band Interpolation +(`geninterp`) module. Argument types are represented by, I for a integer, +R for a real number, P for a physical value, L for a logical value and S for +a text string. -Global variables {#sec:postw90-globalflags} ----------------- +## Global variables ### `integer :: kmesh(:)` @@ -336,7 +359,7 @@ $l\times m\times n$ grid (including $\Gamma$). If only one integer $m$ is given, an $m\times m\times m$ grid is used. If you use a module which needs a k-mesh, either `kmesh_spacing` or -` kmesh` must be defined. +`kmesh` must be defined. ### `real(kind=dp) :: kmesh_spacing` @@ -347,7 +370,7 @@ the three directions in $k$ space. The units are Å$^{-1}$. If you use a module which needs a k-mesh, either `kmesh_spacing` or -` kmesh` must be defined. +`kmesh` must be defined. ### `logical :: adpt_smr` @@ -365,7 +388,7 @@ band $n$ at point ${\bf k}$ is calculated as $\eta_{n{\bf k}}=\alpha\vert \nabla_{\bf k} \varepsilon_{n{\bf k}}\vert \Delta k,$ where $\varepsilon_{n{\bf k}}$ is the energy eigenvalue and the dimensionless factor $\alpha$ is given -by ` adpt_smr_fac`. $\Delta k$ is taken to be the largest of the mesh +by `adpt_smr_fac`. $\Delta k$ is taken to be the largest of the mesh spacings along the three reciprocal lattice vectors ${\bf b_1}$, ${\bf b_2}$, and ${\bf b_3}$. If the calculated value of $\eta_{n{\bf k}}$ exceeds `adpt_smr_max`, the latter value is used. @@ -384,24 +407,24 @@ Defines the analytical form used for the broadened delta function in the computation of the DOS and similar quantities defined on the energy axis. -- `gauss`: Gaussian smearing +- `gauss`: Gaussian smearing -- `m-pN`: derivative of the $N$-th order Methfessel-Paxton function +- `m-pN`: derivative of the $N$-th order Methfessel-Paxton function ($N\geq 0$). Example: `m-p2` for the second-order Methfessel-Paxton function. If only `m-p` is provided, the first-order function is used, i.e., it is equivalent to `m-p1`. -- `m-v` or `cold`: derivative of the Marzari--Vanderbilt cold-smearing +- `m-v` or `cold`: derivative of the Marzari--Vanderbilt cold-smearing function -- `f-d`: derivative of the Fermi-Dirac distribution function +- `f-d`: derivative of the Fermi-Dirac distribution function The default value is `gauss`. ### `logical :: smr_fixed_en_width` Energy width for the smearing function for the DOS. Used only if -` adpt_smr` is `false`. +`adpt_smr` is `false`. The units are eV. The default value is 0 eV. Note that if the width is smaller than twice the energy step (e.g. `dos_energy_step` for the `dos` @@ -418,7 +441,7 @@ The default value is 1 if `spinors=true`, 2 otherwise. Scissors shift applied to the conduction bands. -!!! note +!!! note This variable is deprecated and will be removed in future versions of the code. This applies the scissors shift only to the Hamiltonian, but also other matrices might need to be updated if a @@ -446,9 +469,9 @@ For the `dos` and `BoltzWann` modules, two further columns are generated, which contain the decomposition of the required property (e.g., total or orbital-projected DOS) of a spinor calculation into up-spin and down-spin parts (relative to the quantization axis defined -by the input variables `spin_axis_polar` and ` spin_axis_azimuth`). For -the `berry` module with ` berry_task = kubo`, three extra columns are -added to ` seedname-jdos.dat`, containing the decomposition of the JDOS +by the input variables `spin_axis_polar` and `spin_axis_azimuth`). For +the `berry` module with `berry_task = kubo`, three extra columns are +added to `seedname-jdos.dat`, containing the decomposition of the JDOS into up $\rightarrow$ up, down $\rightarrow$ down, and spin-flip transitions. In the same way, six extra columns are added to the data files `seedname-kubo*.dat` where the complex optical conductivity is @@ -500,77 +523,16 @@ The default value is `false`. ### `character(len=20) :: berry_curv_unit` Unit in which the Berry curvature is specified at input (in -` berry_curv_adpt_kmesh_thresh`) or written to file (when -` kpath_task=curv` or ` kpath_task=shc` or `kslice_task=curv` or +`berry_curv_adpt_kmesh_thresh`) or written to file (when +`kpath_task=curv` or `kpath_task=shc` or `kslice_task=curv` or `kslice_task=shc`). -- `ang2`: Angstrom$^2$ +- `ang2`: Angstrom$^2$ -- `bohr2`: Bohr$^2$ (atomic units) +- `bohr2`: Bohr$^2$ (atomic units) The default value is `ang2`. -### `real(kind=dp) :: sc_eta` - -The width $\eta$ used to broaden energy differences in denominators of -the form - -$$ -\begin{equation} -\frac{1}{\varepsilon_{n\bf{k}}-\varepsilon_{m\bf{k}}}\rightarrow -\text{Re}\frac{1}{\varepsilon_{n\bf{k}}-\varepsilon_{m\bf{k}}+i\eta}. -\end{equation} -$$ - -The above is needed in shift-current calculations in order to avoid -numerical problems caused by near-degeneracies in the sum over virtual -states. - -The units are eV. The default value is 0.4. - -### `integer :: sc_phase_conv` - -Convention for the expansion of the Bloch states in shift-current -calculations. It can only take the values one or two. We follow the -convention of Ref. [@pythtb]: - -- 1: Include Wannier centre - ${\bm \tau}_{n}=\langle w_{n{\bf 0}}|{\bf r}| w_{n{\bf 0}} \rangle$ - in the phase factor (so-called tight-binding convention): - - $$ - \begin{equation} - |u_{n\bf{k}}\rangle = \sum_{\bf{R}} e^{-i{\bf k}({\bf r}-{\bf R}-{\bm \tau}_{n})}| w_{n\bf{R}} \rangle - \end{equation} - $$ - -- 2: Do not include Wannier centre in the phase factor (usual - `Wannier90` convention): - - $$ - \begin{equation} - |u_{n\bf{k}}\rangle = \sum_{\bf{R}} e^{-i\bf{k}(\bf{r}-\bf{R})}| w_{n\bf{R}} \rangle - \end{equation} - $$ - -If `sc_use_eta_corr=true`, the convention does not affect the full -shift-current matrix element, but it does affect the weights of the -internal components that compose it (see Ref. -[@ibanez-azpiroz_ab_2018]). If `sc_use_eta_corr=false`, the convention -can affect the full shift-current matrix element (see Ref. -[@Lihm_shift_eta_2021]). - -The default value is 1. - -### `real(kind=dp) :: sc_w_thr` - -Parameter $\alpha_{t}$ for speeding up the frequency integration in -shift-current calculations. It settles the frequency threshold -$\omega_{t}=\alpha_{t}\eta_{n{\bf k}}$ (a factor times the broadening) -beyond which the delta functions are taken as zero. - -The default value is 5.0. - ### `logical :: sc_use_eta_corr` If `sc_use_eta_corr=true`, apply the finite-eta correction of the shift @@ -581,12 +543,11 @@ correction, the convention of the Bloch sum (determined by The default value is `true`. -DOS ---- +## DOS Note that the behavior of the `dos` module is also influenced by the value of some global flags (listed in -Table [Global Parameters of postw90](#global-parameters-of-postw90)), +Table [Global Parameters of postw90](#global-parameters-of-postw90)), as `spin_decomp`, `spin_axis_polar`, `spin_axis_azimuth`, `scissors_shift`, etc. Some of the global flags can be possibly overridden by local flags of the DOS @@ -605,7 +566,7 @@ The quantity to compute when `dos=true` The valid options for this parameter are: -- `dos_plot` Density of states. An output data file `seedname-dos.dat` +- `dos_plot` Density of states. An output data file `seedname-dos.dat` is created, containing the energy values in eV in the first column, and the total DOS per unit cell and unit energy range (in eV$^{-1}$) in the second. Two additional columns are present if @@ -651,7 +612,7 @@ $$ \begin{equation} \begin{aligned} \rho_{\cal S}(E)&=\frac{1}{N_k}\sum_{\bf k}\sum_n -\langle \psi_{n\bf k}^{({\rm H})}\vert \hat{P}_{\bf k}({\cal S})\vert +\langle \psi_{n\bf k}^{({\rm H})}\vert \hat{P}_{\bf k}({\cal S})\vert \psi_{n\bf k}^{({\rm H})}\rangle\delta(\varepsilon_{n\bf k}-E)\\ \hat{P}_{\bf k}({\cal S})&=\sum_{m\in{\cal S}} \vert \psi_{n\bf k}^{({\rm W})}\rangle\langle \psi_{n\bf k}^{({\rm W})}\vert, @@ -666,32 +627,32 @@ gauge* [@wang-prb06]. ### `integer :: dos_kmesh(:)` Overrides the `kmesh` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: dos_kmesh_spacing` Overrides the `kmesh_spacing` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `logical :: dos_adpt_smr` Overrides the `adpt_smr` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: dos_adpt_smr_fac` Overrides the `adpt_smr_fac` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: dos_adpt_smr_max` Overrides the `adpt_smr_max` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `logical :: dos_smr_fixed_en_width` Overrides the `smr_fixed_en_width` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). Note that if the width is smaller than twice the energy step `dos_energy_step`, the DOS will be unsmeared (thus the default is to @@ -700,10 +661,9 @@ have an unsmeared DOS). ### `character(len=20) :: dos_smr_type` Overrides the `smr_type` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). -kpath ------ +## kpath ### `logical :: kpath` @@ -717,68 +677,68 @@ The quantities to plot when `kpath=true` The valid options for this parameter are: -- `bands` Energy bands, in eV. The following files are created: +- `bands` Energy bands, in eV. The following files are created: - - `seedname-bands.dat` (data file) + - `seedname-bands.dat` (data file) - - `seedname-bands.gnu` (`gnuplot` script) + - `seedname-bands.gnu` (`gnuplot` script) - - `seedname-bands.py` (`python` script) + - `seedname-bands.py` (`python` script) - - `seedname-path.kpt` (list of $k$-points along the path, written - in the `pwscf` format) + - `seedname-path.kpt` (list of $k$-points along the path, written + in the `pwscf` format) -- `curv` Minus the Berry curvature given by +- `curv` Minus the Berry curvature given by [Berry Eq. \[anomalous Hall Conductivity\]](berry.md#mjx-eqn:eq:ahc) of - Ch. [Berry](berry.md), in units of ` berry_curv_unit`. The following + Ch. [Berry](berry.md), in units of `berry_curv_unit`. The following files are created: - - `seedname-curv.dat` (data file) + - `seedname-curv.dat` (data file) - - `seedname-curv_{x,y,z}.gnu` (`gnuplot` scripts) + - `seedname-curv_{x,y,z}.gnu` (`gnuplot` scripts) - - `seedname-curv_{x,y,z}.py` (`python` scripts) + - `seedname-curv_{x,y,z}.py` (`python` scripts) -- `morb` The integrand of the $k$-space orbital magnetization formula +- `morb` The integrand of the $k$-space orbital magnetization formula \[[Berry Eq. \[orbital magnetization\]](berry.md#mjx-eqn:eq:morb) of Ch. [Berry](berry.md)\] in eV$\cdot$Å$^2$. Four output files are created: - - `seedname-morb.dat` (data file) + - `seedname-morb.dat` (data file) - - `seedname-morb_{x,y,z}.gnu` (`gnuplot` scripts) + - `seedname-morb_{x,y,z}.gnu` (`gnuplot` scripts) - - `seedname-morb_{x,y,z}.py` (`python` scripts) + - `seedname-morb_{x,y,z}.py` (`python` scripts) -- `shc` The band-projected Berry curvature-like term of spin Hall +- `shc` The band-projected Berry curvature-like term of spin Hall conductivity given by [Berry Eq. \[spin Hall conductivity\]](berry.md#mjx-eqn:eq:kubo_shc_berry) of - Ch. [Berry](berry.md), in units of ` berry_curv_unit`. The following + Ch. [Berry](berry.md), in units of `berry_curv_unit`. The following files are created: - - `seedname-shc.dat` (data file) + - `seedname-shc.dat` (data file) - - `seedname-shc.gnu` (`gnuplot` scripts) + - `seedname-shc.gnu` (`gnuplot` scripts) - - `seedname-shc.py` (`python` scripts) + - `seedname-shc.py` (`python` scripts) -- Any combination of the above. The following combinations are of +- Any combination of the above. The following combinations are of special interest - - `kpath_task = bands+curv` + - `kpath_task = bands+curv` - - `kpath_task = bands+morb` + - `kpath_task = bands+morb` - - `kpath_task = bands+shc` + - `kpath_task = bands+shc` They generate the following files: - - `seedname-bands.dat` (data file) + - `seedname-bands.dat` (data file) - - `seedname-{curv,morb,shc}.dat` (data file) + - `seedname-{curv,morb,shc}.dat` (data file) - - `seedname-bands+{curv,morb}_{x,y,z}.py` or - `seedname-bands+shc.py` (`python` scripts) + - `seedname-bands+{curv,morb}_{x,y,z}.py` or + `seedname-bands+shc.py` (`python` scripts) Two-panel figures are produced, with the energy bands within $\pm 0.65$ eV of the Fermi level in the top panel, and the Berry @@ -802,21 +762,20 @@ specified quantity. The valid options for this parameter are: -- `spin` Spin projection (in units of $\hbar/2$) along the - quantization axis defined by the variables ` spin_axis_polar` and +- `spin` Spin projection (in units of $\hbar/2$) along the + quantization axis defined by the variables `spin_axis_polar` and `spin_axis_azimuth`, for a spinor calculation -- `shc` Band-projected Berry curvature-like term of spin Hall +- `shc` Band-projected Berry curvature-like term of spin Hall conductivity (in units of - `berry_curv_unit`) defined by the variables ` shc_alpha`, `shc_beta` + `berry_curv_unit`) defined by the variables `shc_alpha`, `shc_beta` and `shc_gamma`, for a spinor calculation -- `none` no colour coding +- `none` no colour coding The default value is `none`. -kslice ------- +## kslice ### `logical :: kslice` @@ -830,73 +789,74 @@ The quantity to plot when `kslice=true` The valid options for this parameter are: -- `fermi_lines` Lines of intersection between constant-energy surfaces +- `fermi_lines` Lines of intersection between constant-energy surfaces and the slice. The energy level is specified by the keyword `fermi_energy`. Output files: - - `seedname-kslice-fermi-spn.dat` (data file when - `kslice_fermi_lines_colour = spin`) + - `seedname-kslice-fermi-spn.dat` (data file when + `kslice_fermi_lines_colour = spin`) - - `seedname-bnd_n.dat` (`gnuplot` data files when - `kslice_fermi_lines_colour = none`) + - `seedname-bnd_n.dat` (`gnuplot` data files when + `kslice_fermi_lines_colour = none`) - - `seedname-kslice-coord.dat` (`python` data files when - `kslice_fermi_lines_colour = none`) + - `seedname-kslice-coord.dat` (`python` data files when + `kslice_fermi_lines_colour = none`) - - `seedname-kslice-bands.dat` (`python` data file when - `kslice_fermi_lines_colour = none`) + - `seedname-kslice-bands.dat` (`python` data file when + `kslice_fermi_lines_colour = none`) - - `seedname-kslice-fermi_lines.gnu` (`gnuplot` script) + - `seedname-kslice-fermi_lines.gnu` (`gnuplot` script) - - `seedname-kslice-fermi_lines.py` (`python` script) + - `seedname-kslice-fermi_lines.py` (`python` script) -- `curv`\[+`fermi_lines`\] Heatmap of the Berry curvature of the +- `curv`\[+`fermi_lines`\] Heatmap of the Berry curvature of the occupied states \[together with the constant-energy contours\]. The unit of Berry curvature is `berry_curv_unit`. Output files: - - `seedname-kslice-coord.dat` (data files) + - `seedname-kslice-coord.dat` (data files) - - `seedname-kslice-curv.dat` (data file) + - `seedname-kslice-curv.dat` (data file) - - `[seedname-kslice-bands.dat]` (data file) + - `[seedname-kslice-bands.dat]` (data file) - - `seedname-kslice-curv_{x,y,z}[+fermi_lines].py` (` python` - scripts) + - `seedname-kslice-curv_{x,y,z}[+fermi_lines].py` (`python` + scripts) -- `morb`\[+`fermi_lines`\] Heatmap of the $k$-space orbital +- `morb`\[+`fermi_lines`\] Heatmap of the $k$-space orbital magnetization in eV$\cdot$Å$^2$ \[together with the constant-energy contours\]. Output files: - - `seedname-kslice-coord.dat` (data files) + - `seedname-kslice-coord.dat` (data files) - - `seedname-kslice-morb.dat` (data file) + - `seedname-kslice-morb.dat` (data file) - - `[seedname-kslice-bands.dat]` (data file) + - `[seedname-kslice-bands.dat]` (data file) - - `seedname-kslice-morb_{x,y,z}[+fermi_lines].py` (` python` - scripts) + - `seedname-kslice-morb_{x,y,z}[+fermi_lines].py` (`python` + scripts) -- `shc`\[+`fermi_lines`\] Heatmap of the Berry curvature-like term of +- `shc`\[+`fermi_lines`\] Heatmap of the Berry curvature-like term of the occupied states \[together with the constant-energy contours\]. The unit of Berry curvature-like term is `berry_curv_unit`. Output files: - - `seedname-kslice-coord.dat` (data files) + - `seedname-kslice-coord.dat` (data files) - - `seedname-kslice-shc.dat` (data file) + - `seedname-kslice-shc.dat` (data file) - - `[seedname-kslice-bands.dat]` (data file) + - `[seedname-kslice-bands.dat]` (data file) - - `seedname-kslice-shc[+fermi_lines].py` (` python` scripts) + - `seedname-kslice-shc[+fermi_lines].py` (`python` scripts) The default value is `fermi_lines`. !!! note + When `kslice_fermi_lines_colour = none` the `gnuplot` scripts draw - the $k$-slices with a square shape, even when ` kslice_b1` and + the $k$-slices with a square shape, even when `kslice_b1` and `kslice_b2` below are not at right angles, or do not have equal lengths. (The `python` scripts draw the slices with the correct parallelogram shape.) @@ -931,22 +891,21 @@ The default value for `kslice_kmesh` is 50. ### `character(len=20) :: kslice_fermi_lines_colour` -When `kslice_task=fermi_lines` (but not when combined with ` curv` or +When `kslice_task=fermi_lines` (but not when combined with `curv` or `morb`), colour code the Fermi lines according to the specified quantity. The valid options for this parameter are: -- `spin` Spin projection (in units of $\hbar/2$) along the - quantization axis defined by the variables ` spin_axis_polar` and +- `spin` Spin projection (in units of $\hbar/2$) along the + quantization axis defined by the variables `spin_axis_polar` and `spin_axis_azimuth`, for a spinor calculation -- `none` no colour coding +- `none` no colour coding The default value is `none`. -berry ------ +## berry ### `logical :: berry` @@ -960,10 +919,11 @@ The quantity to compute when `berry=true` The valid options for this parameter are: -- `kubo` Complex optical conductivity and joint density of states. +- `kubo` Complex optical conductivity and joint density of states. + Output files: - - `seedname-kubo-S_{xx,yy,zz,xy,xz,yz}.dat` (data files). First + - `seedname-kubo-S_{xx,yy,zz,xy,xz,yz}.dat` (data files). First column: optical frequency $\hbar\omega$ in eV. Second and third columns: real and imaginary parts of the symmetric conductivity $\sigma^{\rm @@ -971,14 +931,14 @@ The valid options for this parameter are: S}_{\beta\alpha}(\hbar\omega)$ in S/cm. Six additional columns are present if `spin_decomp = true`. - - `seedname-kubo-A_{yz,zx,xy}.dat` (data files). First column: + - `seedname-kubo-A_{yz,zx,xy}.dat` (data files). First column: optical frequency $\hbar\omega$ in eV. Second and third columns: real and imaginary parts of the antisymmetric conductivity $\sigma^{\rm A}_{\alpha\beta}(\hbar\omega)=-\sigma^{\rm A}_{\beta\alpha}(\hbar\omega)$ in S/cm. Six additional columns are present if `spin_decomp = true`. - - `seedname-jdos.dat` (data file). First column: energy difference + - `seedname-jdos.dat` (data file). First column: energy difference $\hbar\omega$ in eV between conduction ($c$) and valence ($v$) states with the same crystal momentum ${\bf k}$. Second column: joint density of states @@ -986,33 +946,37 @@ The valid options for this parameter are: unit energy range, in eV$^{-1}$). Three additional columns are present if `spin_decomp = true`. -- `ahc` Anomalous Hall conductivity, in S/cm. The three independent +- `ahc` Anomalous Hall conductivity, in S/cm. The three independent components $\sigma_x=\sigma_{yz}$, $\sigma_y=\sigma_{zx}$, and - $\sigma_z=\sigma_{xy}$ are computed. Output files: + $\sigma_z=\sigma_{xy}$ are computed. + + Output files: - - `seedname-ahc-fermiscan.dat` (data file). The first column + - `seedname-ahc-fermiscan.dat` (data file). The first column contains the Fermi level $\varepsilon_F$ in eV, and the following three column the values of $\sigma_{x,y,z}(\varepsilon_F)$. This file is written if a range of Fermi energies is specified via `fermi_energy_min` and - ` fermi_energy_max`. If a single Fermi energy is given, the AHC + `fermi_energy_max`. If a single Fermi energy is given, the AHC is printed in `seedname.wpout` only. -- `morb` Orbital magnetisation, in bohr magnetons per cell. +- `morb` Orbital magnetisation, in bohr magnetons per cell. Output files: - - `seedname-morb-fermiscan.dat` (data file). The first column + - `seedname-morb-fermiscan.dat` (data file). The first column contains the Fermi level $\varepsilon_F$ in eV, and the following three column the values of $M^{\rm orb}_{x,y,z}(\varepsilon_F)$. This file is written if a range of Fermi energies is specified via `fermi_energy_min` and - ` fermi_energy_max`. If a single Fermi energy is given, ${\bf + `fermi_energy_max`. If a single Fermi energy is given, ${\bf M}^{\rm orb}$ is printed in `seedname.wpout` only. -- `sc` Nonlinear shift current. Output files: +- `sc` Nonlinear shift current. - - `seedname-sc_{xxx,xxy,xxz,...}.dat` (data files). The shift + Output files: + + - `seedname-sc_{xxx,xxy,xxz,...}.dat` (data files). The shift current is described by a $3\times3\times3$ tensor $\sigma^{abc}$. The program outputs a set of 18 files, and the 9 remaining components can be obtained by taking into account that @@ -1021,20 +985,21 @@ The valid options for this parameter are: Second column: nonlinear shift current $\sigma^{abc}(\hbar\omega)$ in A/V$^{2}$. -- `shc` Spin Hall conductivity (SHC), in $(\hbar/e)$S/cm. Output - files: +- `shc` Spin Hall conductivity (SHC), in $(\hbar/e)$S/cm. - - `seedname-shc-fermiscan.dat` (data file). The first column is + Output files: + + - `seedname-shc-fermiscan.dat` (data file). The first column is the number of entries in the list, the second column contains the Fermi level $\varepsilon_F$ in eV, and the last column contains the values of $\sigma_{\alpha\beta}^{\text{spin}\gamma}(\varepsilon_F)$. This file is written if a range of Fermi energies is specified via - `fermi_energy_min` and ` fermi_energy_max`. If a single Fermi + `fermi_energy_min` and `fermi_energy_max`. If a single Fermi energy is given, the file will contain SHC at this specific energy. - - `seedname-shc-freqscan.dat` (data file). The first column is the + - `seedname-shc-freqscan.dat` (data file). The first column is the number of the entry in the list, the second column contains the frequency $\hbar\omega$ in eV, and the following two columns contain the values of the real part @@ -1042,11 +1007,13 @@ The valid options for this parameter are: imaginary part $\Im[\sigma_{\alpha\beta}^{\text{spin}\gamma}(\omega)]$ of ac SHC. This file is written if a range of frequencies is specified - via `kubo_freq_min` and ` kubo_freq_max`. + via `kubo_freq_min` and `kubo_freq_max`. + +- `kdotp` $k\cdot p$ expansion coefficients. -- `kdotp` $k\cdot p$ expansion coefficients. Output files: + Output files: - - `seedname-kdotp_{0,1,2}.dat` (data files); respectively, the + - `seedname-kdotp_{0,1,2}.dat` (data files); respectively, the zeroth, first and second order $k\cdot p$ expansion coefficients, in units of eV, eV$\cdot$Å, and eV$\cdot$Å$^{2}$. @@ -1055,12 +1022,12 @@ There is no default value. ### `integer :: berry_kmesh(:)` Overrides the `kmesh` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: berry_kmesh_spacing` Overrides the `kmesh_spacing` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `integer :: berry_curv_adpt_kmesh` @@ -1069,7 +1036,7 @@ If a positive integer $n$ is given and `berry_task=ahc`\[or on the uniform mesh (defined by either `berry_kmesh` or `berry_kmesh_spacing`) where the magnitude of the $k$-space Berry curvature\[$k$-space Berry curvature-like term of SHC\] exceeds the -threshold value specified in ` berry_curv_adpt_kmesh_thresh`. This can +threshold value specified in `berry_curv_adpt_kmesh_thresh`. This can be used to densify the BZ integration mesh around spikes in the Berry curvature\[Berry curvature-like term of SHC\]. @@ -1096,7 +1063,7 @@ Upper limit of the frequency range for computing the optical conductivity, JDOS and ac SHC. Units are eV. If an inner energy window was specified, the default value is -` dis_froz_max`-`fermi_energy`+0.6667. Otherwise it is the difference +`dis_froz_max`-`fermi_energy`+0.6667. Otherwise it is the difference between the maximum and the minimum energy eigenvalue stored in `seedname.eig`, plus 0.6667. @@ -1119,27 +1086,27 @@ maximum energy eigenvalue stored in `seedname.eig` plus 0.6667. ### `logical :: kubo_adpt_smr` Overrides the `adpt_smr` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: kubo_adpt_smr_fac` Overrides the `adpt_smr_fac` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: kubo_adpt_smr_max` Overrides the `adpt_smr_max` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `logical :: kubo_smr_fixed_en_width` Overrides the `smr_fixed_en_width` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `character(len=120) :: kubo_smr_type` Overrides the `smr_type` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `logical :: shc_freq_scan` @@ -1191,7 +1158,7 @@ values, the $\sigma_{xy}^{\text{spin}z}$ is computed. Shift all conduction bands by a given amount (defined by `shc_bandshift_energyshift`). -!!! note +!!! note this flag slightly differs from the global `scissors_shift` flag: with `shc_bandshift`, an exact rigid shift is applied *after* interpolation; `scissors_shift` applies instead the shift *before* @@ -1208,7 +1175,7 @@ The default value is `false`. Index of the first conduction band to shift. That means that all bands with index -$i\ge {\tt shc\_bandshift\_firstband}$ will be shifted by +$i\ge {\tt shc\_bandshift\_firstband}$ will be shifted by `shc_bandshift_energyshift`, if `shc_bandshift` is `true`. The units are eV. No default value; if `shc_bandshift` is `true`, this @@ -1245,28 +1212,33 @@ Convention for the expansion of the Bloch states in shift-current calculations. It can only take the values one or two. We follow the convention of Ref. [@pythtb]: -- 1: Include Wannier centre +- 1: Include Wannier centre ${\bm \tau}_{n}=\langle w_{n{\bf 0}}|{\bf r}| w_{n{\bf 0}} \rangle$ in the phase factor (so-called tight-binding convention): $$ \begin{equation} - |u_{n\bf{k}}\rangle = \sum_{\bf{R}} e^{-i{\bf k}({\bf r}-{\bf R}-{\bm \tau}_{n})}| w_{n\bf{R}} \rangle + |u_{n\bf{k}}\rangle = \sum_{\bf{R}} e^{-i{\bf k}({\bf r}-{\bf R} + -{\bm \tau}_{n})}| w_{n\bf{R}} \rangle \end{equation} $$ -- 2: Do not include Wannier centre in the phase factor (usual +- 2: Do not include Wannier centre in the phase factor (usual `Wannier90` convention): $$ \begin{equation} - |u_{n\bf{k}}\rangle = \sum_{\bf{R}} e^{-i\bf{k}(\bf{r}-\bf{R})}| w_{n\bf{R}} \rangle + |u_{n\bf{k}}\rangle = \sum_{\bf{R}} e^{-i\bf{k}(\bf{r}-\bf{R})}| + w_{n\bf{R}} \rangle \end{equation} $$ -The convention does not affect the full shift-current matrix element, -but it does affect the weights of the internal components that compose -it (see Ref. [@ibanez-azpiroz_ab_2018]). +If `sc_use_eta_corr=true`, the convention does not affect the full +shift-current matrix element, but it does affect the weights of the +internal components that compose it (see Ref. +[@ibanez-azpiroz_ab_2018]). If `sc_use_eta_corr=false`, the convention +can affect the full shift-current matrix element (see Ref. +[@Lihm_shift_eta_2021]). The default value is 1. @@ -1300,8 +1272,7 @@ labelling follows that of "wannierised" bands. No default value. -Gyrotropic ----------- +## Gyrotropic ### `logical :: gyrotropic` @@ -1316,43 +1287,43 @@ The quantity to compute when `gyrotropic=true` May contain one or more of the following valid options (note that each option starts with a '-'): -- `-D0` The Berry-curvature dipole tensor (dimensionless) +- `-D0` The Berry-curvature dipole tensor (dimensionless) Output file: `seedname-gyrotropic-D.dat` ( see Sec. [output data format](#output-data-format) for file format description) -- `-Dw` The finite-frequency Berry-curvature dipole tensor +- `-Dw` The finite-frequency Berry-curvature dipole tensor (dimensionless) Output file: `seedname-gyrotropic-tildeD.dat` ( see Sec. [output data format](#output-data-format) for file format description) -- `-C` The ohmic conductivity tensor (Ampere/cm) +- `-C` The ohmic conductivity tensor (Ampere/cm) Output file: `seedname-gyrotropic-C.dat` ( see Sec. [output data format](#output-data-format) for file format description) -- `-K` The orbital contribution to the kME tensor (Ampere) +- `-K` The orbital contribution to the kME tensor (Ampere) Output file: `seedname-gyrotropic-K_orb.dat` ( see Sec. [output data format](#output-data-format) for file format description) - - `-spin` : if this task is present, compute also the spin + - `-spin` : if this task is present, compute also the spin contribution. - + Output file: `seedname-gyrotropic-K_spin.dat` -- `-NOA` The orbital contribution to the NOA (Å) +- `-NOA` The orbital contribution to the NOA (Å) Output file: `seedname-gyrotropic-NOA_orb.dat` ( see Sec. [output data format](#output-data-format) for file format description) - - `-spin` : if this task is present, compute also the spin + - `-spin` : if this task is present, compute also the spin contribution. - + Output file: `seedname-gyrotropic-NOA_spin.dat` -- `-dos` the density of states +- `-dos` the density of states Output file: `seedname-gyrotropic-DOS.dat`. First column - energy (eV), second @@ -1379,12 +1350,12 @@ $(D_{yz}-D_{zy})/2$, $(D_{zx}-D_{xz})/2$, $(D_{xy}-D_{yx})/2$ ### `integer :: gyrotropic_kmesh(:)` Overrides the `kmesh` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: gyrotropic_kmesh_spacing` Overrides the `kmesh_spacing` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: gyrotropic_freq_min` @@ -1398,7 +1369,7 @@ Upper limit of the frequency range for computing the optical activity. Units are eV. If an inner energy window was specified, the default value is -` dis_froz_max`-`fermi_energy`+0.6667. Otherwise it is the difference +`dis_froz_max`-`fermi_energy`+0.6667. Otherwise it is the difference between the maximum and the minimum energy eigenvalue stored in `seedname.eig`, plus 0.6667. @@ -1421,12 +1392,12 @@ maximum energy eigenvalue stored in `seedname.eig` plus 0.6667. ### `logical :: gyrotropic_smr_fixed_en_width` Overrides the `smr_fixed_en_width` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `character(len=120) :: gyrotropic_smr_type` Overrides the `smr_type` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `character(len=120) :: gyrotropic_degen_thresh` @@ -1458,8 +1429,7 @@ In reduced coordinates. Default value is 0.5 0.5 0.5 \- three real numbers. In reduced coordinates. Default value is 0.0 0.0 1.0 -BoltzWann ---------- +## BoltzWann ### `logical :: boltzwann` @@ -1473,12 +1443,12 @@ It determines the interpolation $k$ mesh used to calculate the TDF (from which the transport coefficient are calculated). If `boltz_calc_also_dos` is `true`, the same $k$ mesh is used also for the DOS. Overrides the `kmesh` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: boltz_kmesh_spacing` Overrides the `kmesh_spacing` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `character(len=4) :: boltz_2d_dir` {#sec:boltz2ddir} @@ -1603,27 +1573,27 @@ The units are eV. The default value is 0.001 eV. ### `character(len=120) :: boltz_dos_smr_type` Overrides the `smr_type` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `logical :: boltz_dos_adpt_smr` Overrides the `adpt_smr` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: boltz_dos_adpt_smr_fac` Overrides the `adpt_smr_fac` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `real(kind=dp) :: boltz_dos_adpt_smr_max` Overrides the `adpt_smr_max` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `logical :: boltz_dos_smr_fixed_en_width` Overrides the `smr_fixed_en_width` global variable (see -Sec. [Global variables](#sec:postw90-globalflags)). +Sec. [Global variables](#global-variables)). ### `logical :: boltz_bandshift` @@ -1661,8 +1631,7 @@ Energy shift of the conduction bands. The units are eV. No default value; if `boltz_bandshift` is `true`, this flag must be provided. -Generic Band Interpolation --------------------------- +## Generic Band Interpolation ### `logical :: geninterp` diff --git a/docs/docs/user_guide/wannier90/code_overview.md b/docs/docs/user_guide/wannier90/code_overview.md index a8489388..93090f05 100644 --- a/docs/docs/user_guide/wannier90/code_overview.md +++ b/docs/docs/user_guide/wannier90/code_overview.md @@ -2,12 +2,12 @@ `wannier90` can operate in two modes: -1. *Post-processing mode:* read in the overlaps and projections from +1. *Post-processing mode:* read in the overlaps and projections from file as computed inside a first-principles code. We expect this to be the most common route to using `wannier90`, and is described in Chapter [Post-processing](postproc.md); -2. *Library mode:* as a set of library routines to be called from +2. *Library mode:* as a set of library routines to be called from within a first-principles code that passes the overlaps and projections to the `wannier90` library routines and in return gets the unitary transformation corresponding to MLWF. This route should diff --git a/docs/docs/user_guide/wannier90/files.md b/docs/docs/user_guide/wannier90/files.md index 47dac03a..ba41a049 100644 --- a/docs/docs/user_guide/wannier90/files.md +++ b/docs/docs/user_guide/wannier90/files.md @@ -13,42 +13,42 @@ the `wannier90` Tutorial. The following are the dimensional quantities that are specified in the master input file: -- Direct lattice vectors +- Direct lattice vectors -- Positions (of atomic or projection) centres in real space +- Positions (of atomic or projection) centres in real space -- Energy windows +- Energy windows -- Positions of k-points in reciprocal space +- Positions of k-points in reciprocal space -- Convergence thresholds for the minimisation of $\Omega$ +- Convergence thresholds for the minimisation of $\Omega$ -- `zona` (see Section [Projections](projections.md)) +- `zona` (see Section [Projections](projections.md)) -- `wannier_plot_cube`: cut-off radius for plotting WF in Gaussian cube +- `wannier_plot_cube`: cut-off radius for plotting WF in Gaussian cube format Notes: -- The units (either `ang` (default) or `bohr`) in which the lattice +- The units (either `ang` (default) or `bohr`) in which the lattice vectors, atomic positions or projection centres are given can be set in the first line of the blocks `unit_cell_cart`, `atoms_cart` and `projections`, respectively, in `seedname.win`. -- Energy is always in eV. +- Energy is always in eV. -- Convergence thresholds are always in Å$^{2}$ +- Convergence thresholds are always in Å$^{2}$ -- Positions of k-points are always in crystallographic coordinates +- Positions of k-points are always in crystallographic coordinates relative to the reciprocal lattice vectors. -- `zona` is always in reciprocal Angstrom (Å$^{-1}$) +- `zona` is always in reciprocal Angstrom (Å$^{-1}$) -- The keyword `length_unit` may be set to `ang` (default) or `bohr`, +- The keyword `length_unit` may be set to `ang` (default) or `bohr`, in order to set the units in which the quantities in the output file `seedname.wout` are written. -- `wannier_plot_radius` is in Angstrom +- `wannier_plot_radius` is in Angstrom The reciprocal lattice vectors $\{\mathbf{B}_{1},\mathbf{B}_{2},\mathbf{B}_{3}\}$ are defined in terms @@ -109,38 +109,39 @@ authors, the code version and release, and the execution time of the current run. The header looks like the following different (the string might slightly change across different versions): - - +---------------------------------------------------+ - | | - | WANNIER90 | - | | - +---------------------------------------------------+ - | | - | Welcome to the Maximally-Localized | - | Generalized Wannier Functions code | - | http://www.wannier.org | - | | - | Wannier90 Developer Group: | - | Giovanni Pizzi (EPFL) | - | Valerio Vitale (Cambridge) | - | David Vanderbilt (Rutgers University) | - | Nicola Marzari (EPFL) | - | Ivo Souza (Universidad del Pais Vasco) | - | Arash A. Mostofi (Imperial College London) | - | Jonathan R. Yates (University of Oxford) | - | | - | For the full list of Wannier90 3.x authors, | - | please check the code documentation and the | - | README on the GitHub page of the code | - | | - | | - | Please cite | - . - . - | | - +---------------------------------------------------+ - | Execution started on 18Dec2018 at 18:39:42 | - +---------------------------------------------------+ +```vi title="Output file" + +---------------------------------------------------+ + | | + | WANNIER90 | + | | + +---------------------------------------------------+ + | | + | Welcome to the Maximally-Localized | + | Generalized Wannier Functions code | + | http://www.wannier.org | + | | + | Wannier90 Developer Group: | + | Giovanni Pizzi (EPFL) | + | Valerio Vitale (Cambridge) | + | David Vanderbilt (Rutgers University) | + | Nicola Marzari (EPFL) | + | Ivo Souza (Universidad del Pais Vasco) | + | Arash A. Mostofi (Imperial College London) | + | Jonathan R. Yates (University of Oxford) | + | | + | For the full list of Wannier90 3.x authors, | + | please check the code documentation and the | + | README on the GitHub page of the code | + | | + | | + | Please cite | + . + . + | | + +---------------------------------------------------+ + | Execution started on 18Dec2018 at 18:39:42 | + +---------------------------------------------------+ +``` ### System information @@ -150,46 +151,48 @@ includes real and reciprocal lattice vectors, atomic positions, k-points, parameters for job control, disentanglement, localisation and plotting. - ------ - SYSTEM - ------ - - Lattice Vectors (Ang) - a_1 3.938486 0.000000 0.000000 - a_2 0.000000 3.938486 0.000000 - a_3 0.000000 0.000000 3.938486 - - Unit Cell Volume: 61.09251 (Ang^3) - - Reciprocal-Space Vectors (Ang^-1) - b_1 1.595330 0.000000 0.000000 - b_2 0.000000 1.595330 0.000000 - b_3 0.000000 0.000000 1.595330 - - *----------------------------------------------------------------------------* - | Site Fractional Coordinate Cartesian Coordinate (Ang) | - +----------------------------------------------------------------------------+ - | Ba 1 0.00000 0.00000 0.00000 | 0.00000 0.00000 0.00000 | - | Ti 1 0.50000 0.50000 0.50000 | 1.96924 1.96924 1.96924 | +```vi title="Output file" + ------ + SYSTEM + ------ + + Lattice Vectors (Ang) + a_1 3.938486 0.000000 0.000000 + a_2 0.000000 3.938486 0.000000 + a_3 0.000000 0.000000 3.938486 + + Unit Cell Volume: 61.09251 (Ang^3) + + Reciprocal-Space Vectors (Ang^-1) + b_1 1.595330 0.000000 0.000000 + b_2 0.000000 1.595330 0.000000 + b_3 0.000000 0.000000 1.595330 + + *----------------------------------------------------------------------------* + | Site Fractional Coordinate Cartesian Coordinate (Ang) | + +----------------------------------------------------------------------------+ + | Ba 1 0.00000 0.00000 0.00000 | 0.00000 0.00000 0.00000 | + | Ti 1 0.50000 0.50000 0.50000 | 1.96924 1.96924 1.96924 | + . + . + *----------------------------------------------------------------------------* + + ------------ + K-POINT GRID + ------------ + + Grid size = 4 x 4 x 4 Total points = 64 + + *---------------------------------- MAIN ------------------------------------* + | Number of Wannier Functions : 9 | + | Number of input Bloch states : 9 | + | Output verbosity (1=low, 5=high) : 1 | + | Length Unit : Ang | + | Post-processing setup (write *.nnkp) : F | . - . - *----------------------------------------------------------------------------* - - ------------ - K-POINT GRID - ------------ - - Grid size = 4 x 4 x 4 Total points = 64 - - *---------------------------------- MAIN ------------------------------------* - | Number of Wannier Functions : 9 | - | Number of input Bloch states : 9 | - | Output verbosity (1=low, 5=high) : 1 | - | Length Unit : Ang | - | Post-processing setup (write *.nnkp) : F | - . - . - *----------------------------------------------------------------------------* + . + *----------------------------------------------------------------------------* +``` ### Nearest-neighbour k-points @@ -197,26 +200,28 @@ This part of the output files provides information on the $\mathrm{b}$-vectors and weights chosen to satisfy the condition of Eq. [B1](parameters.md#mjx-eqn:eq:B1). - *---------------------------------- K-MESH ----------------------------------* - +----------------------------------------------------------------------------+ - | Distance to Nearest-Neighbour Shells | - | ------------------------------------ | - | Shell Distance (Ang^-1) Multiplicity | - | ----- ----------------- ------------ | - | 1 0.398833 6 | - | 2 0.564034 12 | - . - . - +----------------------------------------------------------------------------+ - | The b-vectors are chosen automatically | - | The following shells are used: 1 | - +----------------------------------------------------------------------------+ - | Shell # Nearest-Neighbours | - | ----- -------------------- | - | 1 6 | - +----------------------------------------------------------------------------+ - | Completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)] | - +----------------------------------------------------------------------------+ +```vi title="Output file" + *---------------------------------- K-MESH ----------------------------------* + +----------------------------------------------------------------------------+ + | Distance to Nearest-Neighbour Shells | + | ------------------------------------ | + | Shell Distance (Ang^-1) Multiplicity | + | ----- ----------------- ------------ | + | 1 0.398833 6 | + | 2 0.564034 12 | + . + . + +----------------------------------------------------------------------------+ + | The b-vectors are chosen automatically | + | The following shells are used: 1 | + +----------------------------------------------------------------------------+ + | Shell # Nearest-Neighbours | + | ----- -------------------- | + | 1 6 | + +----------------------------------------------------------------------------+ + | Completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)] | + +----------------------------------------------------------------------------+ +``` ### Disentanglement @@ -226,40 +231,44 @@ the localisation procedure in the next step. First, a summary of the energy windows that are being used is given: - *------------------------------- DISENTANGLE --------------------------------* - +----------------------------------------------------------------------------+ - | Energy Windows | - | --------------- | - | Outer: 2.81739 to 38.00000 (eV) | - | Inner: 2.81739 to 13.00000 (eV) | - +----------------------------------------------------------------------------+ +```vi title="Output file" + *------------------------------- DISENTANGLE --------------------------------* + +----------------------------------------------------------------------------+ + | Energy Windows | + | --------------- | + | Outer: 2.81739 to 38.00000 (eV) | + | Inner: 2.81739 to 13.00000 (eV) | + +----------------------------------------------------------------------------+ +``` Then, each step of the iterative minimisation of $\Omega_{\mathrm{I}}$ is reported. - Extraction of optimally-connected subspace - ------------------------------------------ - +---------------------------------------------------------------------+<-- DIS - | Iter Omega_I(i-1) Omega_I(i) Delta (frac.) Time |<-- DIS - +---------------------------------------------------------------------+<-- DIS - 1 3.82493590 3.66268867 4.430E-02 0.36 <-- DIS - 2 3.66268867 3.66268867 6.911E-15 0.37 <-- DIS - . - . - - <<< Delta < 1.000E-10 over 3 iterations >>> - <<< Disentanglement convergence criteria satisfied >>> - - Final Omega_I 3.66268867 (Ang^2) - - +----------------------------------------------------------------------------+ +```vi title="Output file" + Extraction of optimally-connected subspace + ------------------------------------------ + +---------------------------------------------------------------------+<-- DIS + | Iter Omega_I(i-1) Omega_I(i) Delta (frac.) Time |<-- DIS + +---------------------------------------------------------------------+<-- DIS + 1 3.82493590 3.66268867 4.430E-02 0.36 <-- DIS + 2 3.66268867 3.66268867 6.911E-15 0.37 <-- DIS + . + . + + <<< Delta < 1.000E-10 over 3 iterations >>> + <<< Disentanglement convergence criteria satisfied >>> + + Final Omega_I 3.66268867 (Ang^2) + + +----------------------------------------------------------------------------+ +``` The first column gives the iteration number. For a description of the minimisation procedure and expressions for $\Omega_{\mathrm{I}}^{(i)}$, see the original paper [@souza-prb01]. The procedure is considered to be converged when the fractional difference between $\Omega_{\mathrm{I}}^{(i)}$ and $\Omega_{\mathrm{I}}^{(i-1)}$ is less -than `dis_conv_tol` over ` dis_conv_window` iterations. The final column +than `dis_conv_tol` over `dis_conv_window` iterations. The final column gives a running account of the wall time (in seconds) so far. Note that at the end of each line of output, there are the characters "`<– DIS`". This enables fast searching of the output using, for example, the Unix @@ -275,75 +284,78 @@ The next part of the output file provides information on the minimisation of $\widetilde{\Omega}$. At each iteration, the centre and spread of each WF is reported. - *------------------------------- WANNIERISE ---------------------------------* - +--------------------------------------------------------------------+<-- CONV - | Iter Delta Spread RMS Gradient Spread (Ang^2) Time |<-- CONV - +--------------------------------------------------------------------+<-- CONV - - ------------------------------------------------------------------------------ - Initial State - WF centre and spread 1 ( 0.000000, 1.969243, 1.969243 ) 1.52435832 - WF centre and spread 2 ( 0.000000, 1.969243, 1.969243 ) 1.16120620 - . - . - 0 0.126E+02 0.0000000000 12.6297685260 0.29 <-- CONV - O_D= 0.0000000 O_OD= 0.1491718 O_TOT= 12.6297685 <-- SPRD - ------------------------------------------------------------------------------ - Cycle: 1 - WF centre and spread 1 ( 0.000000, 1.969243, 1.969243 ) 1.52414024 - WF centre and spread 2 ( 0.000000, 1.969243, 1.969243 ) 1.16059775 - . - . - Sum of centres and spreads ( 11.815458, 11.815458, 11.815458 ) 12.62663472 - - 1 -0.313E-02 0.0697660962 12.6266347170 0.34 <-- CONV - O_D= 0.0000000 O_OD= 0.1460380 O_TOT= 12.6266347 <-- SPRD - Delta: O_D= -0.4530841E-18 O_OD= -0.3133809E-02 O_TOT= -0.3133809E-02 <-- DLTA - ------------------------------------------------------------------------------ - Cycle: 2 - WF centre and spread 1 ( 0.000000, 1.969243, 1.969243 ) 1.52414866 - WF centre and spread 2 ( 0.000000, 1.969243, 1.969243 ) 1.16052405 - . - . - Sum of centres and spreads ( 11.815458, 11.815458, 11.815458 ) 12.62646411 - - 2 -0.171E-03 0.0188848262 12.6264641055 0.38 <-- CONV - O_D= 0.0000000 O_OD= 0.1458674 O_TOT= 12.6264641 <-- SPRD - Delta: O_D= -0.2847260E-18 O_OD= -0.1706115E-03 O_TOT= -0.1706115E-03 <-- DLTA - ------------------------------------------------------------------------------ - . - . - ------------------------------------------------------------------------------ - Final State - WF centre and spread 1 ( 0.000000, 1.969243, 1.969243 ) 1.52416618 - WF centre and spread 2 ( 0.000000, 1.969243, 1.969243 ) 1.16048545 - . - . - Sum of centres and spreads ( 11.815458, 11.815458, 11.815458 ) 12.62645344 - - Spreads (Ang^2) Omega I = 12.480596753 - ================ Omega D = 0.000000000 - Omega OD = 0.145856689 - Final Spread (Ang^2) Omega Total = 12.626453441 - ------------------------------------------------------------------------------ +```vi title="Output file" + *------------------------------- WANNIERISE ---------------------------------* + +--------------------------------------------------------------------+<-- CONV + | Iter Delta Spread RMS Gradient Spread (Ang^2) Time |<-- CONV + +--------------------------------------------------------------------+<-- CONV + + ------------------------------------------------------------------------------ + Initial State + WF centre and spread 1 ( 0.000000, 1.969243, 1.969243 ) 1.52435832 + WF centre and spread 2 ( 0.000000, 1.969243, 1.969243 ) 1.16120620 + . + . + 0 0.126E+02 0.0000000000 12.6297685260 0.29 <-- CONV + O_D= 0.0000000 O_OD= 0.1491718 O_TOT= 12.6297685 <-- SPRD + ------------------------------------------------------------------------------ + Cycle: 1 + WF centre and spread 1 ( 0.000000, 1.969243, 1.969243 ) 1.52414024 + WF centre and spread 2 ( 0.000000, 1.969243, 1.969243 ) 1.16059775 + . + . + Sum of centres and spreads ( 11.815458, 11.815458, 11.815458 ) 12.62663472 + + 1 -0.313E-02 0.0697660962 12.6266347170 0.34 <-- CONV + O_D= 0.0000000 O_OD= 0.1460380 O_TOT= 12.6266347 <-- SPRD + Delta: O_D= -0.4530841E-18 O_OD= -0.3133809E-02 O_TOT= -0.3133809E-02 <-- DLTA + ------------------------------------------------------------------------------ + Cycle: 2 + WF centre and spread 1 ( 0.000000, 1.969243, 1.969243 ) 1.52414866 + WF centre and spread 2 ( 0.000000, 1.969243, 1.969243 ) 1.16052405 + . + . + Sum of centres and spreads ( 11.815458, 11.815458, 11.815458 ) 12.62646411 + + 2 -0.171E-03 0.0188848262 12.6264641055 0.38 <-- CONV + O_D= 0.0000000 O_OD= 0.1458674 O_TOT= 12.6264641 <-- SPRD + Delta: O_D= -0.2847260E-18 O_OD= -0.1706115E-03 O_TOT= -0.1706115E-03 <-- DLTA + ------------------------------------------------------------------------------ + . + . + ------------------------------------------------------------------------------ + Final State + WF centre and spread 1 ( 0.000000, 1.969243, 1.969243 ) 1.52416618 + WF centre and spread 2 ( 0.000000, 1.969243, 1.969243 ) 1.16048545 + . + . + Sum of centres and spreads ( 11.815458, 11.815458, 11.815458 ) 12.62645344 + + Spreads (Ang^2) Omega I = 12.480596753 + ================ Omega D = 0.000000000 + Omega OD = 0.145856689 + Final Spread (Ang^2) Omega Total = 12.626453441 + ------------------------------------------------------------------------------ +``` -It looks quite complicated, but things look more simple if one uses -`grep`: +It looks quite complicated, but things look more simple if one uses `grep`: -```bash +```bash title="Terminal" grep CONV wannier.wout ``` gives - +--------------------------------------------------------------------+<-- CONV - | Iter Delta Spread RMS Gradient Spread (Ang^2) Time |<-- CONV - +--------------------------------------------------------------------+<-- CONV - 0 0.126E+02 0.0000000000 12.6297685260 0.29 <-- CONV - 1 -0.313E-02 0.0697660962 12.6266347170 0.34 <-- CONV - . - . - 50 0.000E+00 0.0000000694 12.6264534413 2.14 <-- CONV +```vi title="Output file" + +--------------------------------------------------------------------+<-- CONV + | Iter Delta Spread RMS Gradient Spread (Ang^2) Time |<-- CONV + +--------------------------------------------------------------------+<-- CONV + 0 0.126E+02 0.0000000000 12.6297685260 0.29 <-- CONV + 1 -0.313E-02 0.0697660962 12.6266347170 0.34 <-- CONV + . + . + 50 0.000E+00 0.0000000694 12.6264534413 2.14 <-- CONV +``` The first column is the iteration number, the second is the change in $\Omega$ from the previous iteration, the third is the root-mean-squared @@ -351,21 +363,24 @@ gradient of $\Omega$ with respect to variations in the unitary matrices $\mathbf{U}^{(\mathbf{k})}$, and the last is the time taken (in seconds). Depending on the input parameters used, the procedure either runs for `num_iter` iterations, or a convergence criterion is applied on -$\Omega$. See Section [Wannierise Parameters](parameters.md#wannierise-parameters) for details. +$\Omega$. See Section +[Wannierise Parameters](parameters.md#wannierise-parameters) for details. Similarly, the command -```bash +```bash title="Terminal" grep SPRD wannier.wout ``` gives - O_D= 0.0000000 O_OD= 0.1491718 O_TOT= 12.6297685 <-- SPRD - O_D= 0.0000000 O_OD= 0.1460380 O_TOT= 12.6266347 <-- SPRD - . - . - O_D= 0.0000000 O_OD= 0.1458567 O_TOT= 12.6264534 <-- SPRD +```vi title="Output file" + O_D= 0.0000000 O_OD= 0.1491718 O_TOT= 12.6297685 <-- SPRD + O_D= 0.0000000 O_OD= 0.1460380 O_TOT= 12.6266347 <-- SPRD + . + . + O_D= 0.0000000 O_OD= 0.1458567 O_TOT= 12.6264534 <-- SPRD +``` which, for each iteration, reports the value of the diagonal and off-diagonal parts of the non-gauge-invariant spread, as well as the @@ -387,13 +402,16 @@ gauge-dependent part. Instead, one has $\Omega^{'} = \Omega_{\mathrm{IOD}} + \Omega_{\mathrm{D}}$, where $$ -\Omega^{'} = \sum_{n=1}^{J' | Keyword | Type | Description | |:-----------------:|:----:|:---------------------------------------------------------------------------------| | num_wann | I | Number of WF | @@ -74,6 +77,7 @@ For further examples see Section [Master input file: `seedname.win`](sample_inp | skip_B1_tests | L | Check the condition B1 of Ref [@marzari-prb97].  | | nnkpts | I | Explicit list of nearest-neighbour k-points. | | kmesh_tol | R | The tolerance to control if two kpoint belong to the same shell | + `seedname.win` file keywords defining the system. Argument types are represented by, I for a integer, R for a real number, P for a physical @@ -81,9 +85,9 @@ value, L for a logical value and S for a text string. \* `atoms_cart` and `atoms_frac` may not both be defined in the same input file. -### Job Control - +### Job Control Parameters + | Keyword | Type | Description | |:--------------------:|:----:|:------------------------------------------------------------------------------------------------| | postproc_setup | L | To output the `seedname.nnkp` file | @@ -102,14 +106,16 @@ file. | write_xyz | L | To write atomic positions and final centres in xyz file format | | write_vdw_data | L | To write data for futher processing by w90vdw utility | | write_hr_diag | L | To write the diagonal elements of the Hamiltonian in the Wannier basis to `seedname.wout` (in eV) | + `seedname.win` file keywords defining job control. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. translate_home_cell only relevant if `write_xyz` is `.true.` - ### Disentanglement Parameters + + | Keyword | Type | Description | |:--------------------------:|:----:|:-----------------------------------------------------------------------| | dis_win_min | P | Bottom of the outer energy window | @@ -123,12 +129,15 @@ translate_home_cell only relevant if `write_xyz` is `.true.` | dis_spheres_num | I | Number of spheres in k-space where disentaglement is performed | | dis_spheres_first_wann | I | Index of the first band to be considered a Wannier function | | dis_spheres | R | List of centres and radii, for disentanglement only in spheres | + `seedname.win` file keywords controlling the disentanglement. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. ### Wannierise Parameters + + | Keyword | Type | Description | |:---------------------:|:----:|:-----------------------------------------------------------------------------------------------------------------| | num_iter | I | Number of iterations for the minimisation of $\Omega$ | @@ -153,6 +162,7 @@ physical value, L for a logical value and S for a text string. | slwf_constrain | L | Whether to constrain the centres of the objective WFs | | slwf_lambda | R | Value of the Lagrange multiplier for constraining the objective WFs | | slwf_centres | P | The centres to which the objective WFs are to be constrained | + `seedname.win` file keywords controlling the wannierisation. Argument types are represented by, I for a integer, R for a real number, P for a @@ -163,6 +173,8 @@ file. \*\*Cannot be used in conjunction with disentanglement. window. ### Plot Parameters + + | Keyword | Type | Description | |:--------------------------:|:----:|:-------------------------------------------------------------| | wannier_plot | L | Plot the WF | @@ -201,13 +213,16 @@ window. | ws_distance_tol | R | Absolute tolerance for the distance to equivalent positions. | | ws_search_size | I | Maximum extension in each direction of the super-cell of the Born-von Karmann cell to search for points inside the Wigner-Seitz cell | | write_u_matrices | L | Write $U^{(\bm{k})}$ and $U^{dis(\bm{k})}$ matrices to files | + `seedname.win` file keywords controlling the plotting. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. \* Only applies when `wannier_plot_format` is `cube`. -### Transport Parameters +### Transport Parameters + + | Keyword | Type | Description | |:------------------------:|:----:|:----------------------------------------------------------| | transport | L | Calculate quantum conductance and density of states | @@ -234,12 +249,12 @@ applies when `wannier_plot_format` is `cube`. | dist_cutoff_mode | S | Dimension in which the distance between WF is calculated | | one_dim_axis | S | Extended direction for a one-dimensional system | | translation_centre_frac | R | Centre of the unit cell to which final WF are translated | + `seedname.win` file keywords controlling transport. Argument types are represented by, I for a integer, R for a real number, P for a physical value, L for a logical value and S for a text string. - ## System ### `integer :: num_wann` @@ -258,10 +273,10 @@ Default `num_bands`=`num_wann` The cell lattice vectors should be specified in Cartesian coordinates. -``` +```vi title="Input file" begin unit_cell_cart [units] -``` +``` \begin{array}{ccc} A_{1x} & A_{1y} & A_{1z} \\ @@ -269,7 +284,7 @@ A_{2x} & A_{2y} & A_{2z} \\ A_{3x} & A_{3y} & A_{3z} \end{array} -``` +```vi title="Input file" end unit_cell_cart ``` @@ -291,18 +306,18 @@ the input file. #### Cartesian coordinates -``` +```vi title="Input file" begin atoms_cart [units] -``` +``` \begin{array}{cccc} P & R^{P}_{x} & R^{P}_{y} & R^{P}_{z} \\ Q & R^{Q}_{x} & R^{Q}_{y} & R^{Q}_{z} \\ \vdots \end{array} - -``` + +```vi title="Input file" end atoms_cart ``` @@ -314,7 +329,7 @@ not present, the default is `ang`. #### Fractional coordinates -``` +```vi title="Input file" begin atoms_frac ``` @@ -324,7 +339,7 @@ Q & F^{Q}_{1} & F^{Q}_{2} & F^{Q}_{3} \\ \vdots \end{array} -``` +```vi title="Input file" end atoms_frac ``` @@ -338,7 +353,7 @@ the cell lattice vectors $\mathbf{A}_i$, $i\in [1,3]$. Dimensions of the regular (Monkhorst-Pack) k-point mesh. For example, for a $2\times2\times2$ grid: -``` +```vi title="Input file" mp_grid : 2 2 2 ``` @@ -353,7 +368,7 @@ primitive reciprocal lattice vectors $\mathbf{B}_{i}$, $i \in [1,3]$. The position of each k-point in this list assigns its numbering; the first k-point is k-point 1, the second is k-point 2, and so on. -``` +```vi title="Input file" begin kpoints ``` @@ -363,7 +378,7 @@ begin kpoints \vdots \end{array} -``` +```vi title="Input file" end kpoints ``` @@ -402,7 +417,7 @@ nearest neighbours. $N_{\mathrm{sh}}$ shells of neighbours are included in the finite-difference formula, with $M_s$ vectors in the $s^{\mathrm{th}}$ shell. For $\nabla_{{\bf k}}$ to be correct to linear order, we require that the following equation is satisfied (Eq. B1 of -Ref. [@marzari-prb97]): +Ref. [@marzari-prb97]): $$ \begin{equation} @@ -437,7 +452,7 @@ The default value is 36. If set to `.true.`, does not check the B1 condition Eq. $\eqref{eq:B1}$. This -should *only* be used if one knows why the B1 condition should not be +should _only_ be used if one knows why the B1 condition should not be verified. A typical use of this flag is in conjunction with the Z2PACK code: . @@ -449,11 +464,13 @@ Specifies the nearest-neighbour k-points which are written to the `.nnkp` file. This can be used to explicitly specify which overlap matrices should be calculated. - begin nnkpts - 1 2 0 0 0 - . - . - end nnkpts +```vi title="Input file" +begin nnkpts +1 2 0 0 0 +. +. +end nnkpts +``` Each nearest neighbour $\mathbf{k + b}$ is given by a line of 5 integers. The first specifies the k-point number `nkp` of $\mathbf{k}$. @@ -483,7 +500,7 @@ generate an initial guess for the unitary transformations. This data will be written in the `seedname.nnkp` file to be used by a first-principles code. -``` +```vi title="Input file" begin projections . . @@ -532,9 +549,9 @@ The length unit to be used for writing quantities in the output file The valid options for this parameter are: -- `Ang` (default) +- `Ang` (default) -- `Bohr` +- `Bohr` ### `character(len=50) :: devel_flag` @@ -583,19 +600,19 @@ The default value of this parameter is `false`. ### `character(len=20) :: restart` If `restart` is present the code will attempt to restart the calculation -from the `seedname.chk ` file. The value of the parameter determines the +from the `seedname.chk` file. The value of the parameter determines the position of the restart The valid options for this parameter are: -- `default`. Restart from the point at which the check file +- `default`. Restart from the point at which the check file `seedname.chk` was written -- `wannierise`. Restart from the beginning of the wannierise routine +- `wannierise`. Restart from the beginning of the wannierise routine -- `plot`. Go directly to the plotting phase +- `plot`. Go directly to the plotting phase -- `transport`. Go directly to the transport routines +- `transport`. Go directly to the transport routines ### `character(len=20) :: wvfn_formatted` @@ -695,7 +712,7 @@ To activate projectability disentanglement procedure, which selectively discard/disentangle/freeze state $\vert n \mathbf{k}\rangle$ based on its projectability onto some localized atomic orbitals. -!!! note +!!! note this requires the `amn` file is properly normalized, i.e., projectability computed from $A A^\dagger$ must be smaller than or equal to 1. The pseudo-atomic projection satisfies such requirement, see @@ -800,7 +817,8 @@ coordinate $\mathbf{K}^i$ must the followed by the respectice sphere radius $r_{i}$ in inverse angstrom (on the same line). The number of lines must be equal to `dis_spheres_num`. -``` + +```vi title="Input file" begin dis_spheres ``` @@ -810,7 +828,7 @@ begin dis_spheres \vdots \end{array} -``` +```vi title="Input file" end dis_spheres ``` @@ -839,8 +857,8 @@ The default value is 5 ### `integer :: conv_window` If `conv_window`$\:>1$, then the minimisation is said to be converged if -the change in $\Omega$ over ` conv_window` successive iterations is less -than ` conv_tol`. Otherwise, the minimisation proceeds for num_iter +the change in $\Omega$ over `conv_window` successive iterations is less +than `conv_tol`. Otherwise, the minimisation proceeds for num_iter iterations (default). The default value is -1 @@ -872,10 +890,10 @@ the minimisation is continued until convergence is achieved once more. If the same value of $\Omega$ as before is arrived at, then the calculation is considered to be converged. If not, then random noise is added again and the procedure repeated up to a maximum of -` conv_noise_num` times. `conv_noise_amp` is the amplitude of the random +`conv_noise_num` times. `conv_noise_amp` is the amplitude of the random noise $f$ that is added to the search direction: $0 < |f| <\:$`conv_noise_amp`. This functionality requires -` conv_window`$\:>1$. If `conv_window` is not specified, it is set to +`conv_window`$\:>1$. If `conv_window` is not specified, it is set to the value 5 by default. If `conv_noise_amp`$\:\leq 0$, then no noise is added (default). @@ -1009,7 +1027,8 @@ If `slwf_constrain=true`, then the centres of the objective Wannier functions are constrained to either the centres of the first `slwf_num` orbitals in the `projections` block or to new positions specified in the `slwf_centres` block (see -Sec. [Constraints on centres](#constraints-on-centres)). In this case, a modified spread +Sec. [Constraints on centres](#constraints-on-centres)). In this case, +a modified spread functional, $\Omega_c$, with the addition of a constraint term, as described in Ref. [@Marianetti]. @@ -1038,22 +1057,22 @@ functions. The block below shows an example of how to set the constraints: -``` +```vi title="Input file" begin slwf_centres 2 0.0 0.0 0.0 4 0.25 0.0 0.0 end slwf_centres ``` -- The first line sets the constraint for the centre of objective WF +- The first line sets the constraint for the centre of objective WF number 2 (as defined by the order of WFs in the `projections` block) to (0.0, 0.0, 0.0) in fractional coordinates. -- The second line sets the constraint for the centre of objective WF +- The second line sets the constraint for the centre of objective WF number 4 (as defined by the order of WFs in the `projections` block) to (0.25, 0.0, 0.0) in fractional coordinates. -- The target centres of all other objective Wannier functions remain +- The target centres of all other objective Wannier functions remain as the centres given in the corresponding rows of the `projections` block. @@ -1061,15 +1080,15 @@ end slwf_centres Capabilities: -- Plot the WF +- Plot the WF -- Plot the interpolated band structure +- Plot the interpolated band structure -- Plot the Fermi surface +- Plot the Fermi surface -- Output the Hamiltonian in the WF basis +- Output the Hamiltonian in the WF basis -- Transport calculation (quantum conductance and density of states) +- Transport calculation (quantum conductance and density of states) ### `logical :: wannier_plot` @@ -1086,7 +1105,7 @@ after the minimisation of the spread. The default behaviour is to plot all WF. For example, to plot WF 4, 5, 6 and 10: -``` +```vi title="Input file" wannier_plot_list : 4-6, 10 ``` @@ -1108,9 +1127,9 @@ The default value is 2. WF can be plotted in either XCrySDen (xsf) format or Gaussian cube format. The valid options for this parameter are: -- `xcrysden` (default) +- `xcrysden` (default) -- `cube` +- `cube` If `wannier_plot_format=xsf`: the code outputs the WF on the entire super-unit-cell specified by `wannier_plot_supercell`. @@ -1128,7 +1147,6 @@ of dealing with non-orthogonal lattice vectors is VESTA (). !!! note - It's worth noting that another visualisation program, VMD (), is able to deal with certain special cases of non-orthogonal lattice vectors; see @@ -1142,13 +1160,13 @@ crystal. The valid options for this parameter are: -- `crystal` (default) +- `crystal` (default) -- `molecule` +- `molecule` If `wannier_plot_format=cube`: -- if `wannier_plot_mode = molecule`, then wherever the WF centre sits +- if `wannier_plot_mode = molecule`, then wherever the WF centre sits in the supercell, the origin of the cube is shifted (for the purpose of plotting only, ie, nothing is done to the U matrices etc) to coincide with the centre of mass of the atomic positions specified @@ -1156,19 +1174,19 @@ If `wannier_plot_format=cube`: also written to the cube file, so when it is visualised, the WF appears superimposed on the molecular structure. -- if `wannier_plot_mode = crystal`, then the WF is not shifted, but +- if `wannier_plot_mode = crystal`, then the WF is not shifted, but instead the code searches for atoms that are within a radius of `wannier_plot_scale` $\times$ `wannier_plot_radius` of the WF centre and writes the coordinates of these atoms to the cube file. In this way, when the cube file is visualised, the WF appears superimposed on the nearest atoms to the WF centre. -- `crystal` mode can be used for molecules, and `molecule` mode can be +- `crystal` mode can be used for molecules, and `molecule` mode can be used for crystals. ### `real(kind=dp) :: wannier_plot_radius` -If `wannier_plot_format=cube`, then ` wannier_plot_radius` is the radius +If `wannier_plot_format=cube`, then `wannier_plot_radius` is the radius of the sphere that must fit inside the parallelepiped in which the WF is plotted. `wannier_plot_radius` must be greater than 0. Units are Å. @@ -1192,15 +1210,15 @@ If `spinors = true` then this parameter controls the quantity to plot. For a spinor WF with components $[\phi,\psi]$ the quatity plotted is -- `total` (default). $\sqrt{[|\phi|^2+|\psi|^2]}$ +- `total` (default). $\sqrt{[|\phi|^2+|\psi|^2]}$ -- `up`. $|\phi|\times sign(Re\{\phi\})$ if +- `up`. $|\phi|\times sign(Re\{\phi\})$ if `wannier_plot_spinor_phase = true`, otherwise $|\phi|$ -- `down`. $|\psi|\times sign(Re\{\psi\})$ if +- `down`. $|\psi|\times sign(Re\{\psi\})$ if `wannier_plot_spinor_phase = true`, otherwise $|\psi|$ -!!! note +!!! note making a visual representation of a spinor WF is not as straightforward as for a scalar WF. While a scalar WF is typically a real valued function, a spinor WF is a complex, two component spinor. @@ -1229,9 +1247,9 @@ Each line gives the start and end point (with labels) for a section of the path. Values are in fractional coordinates with respect to the primitive reciprocal lattice vectors. -``` +```vi title="Input file" begin kpoint_path -``` +``` \begin{array}{cccccccc} G & 0.0 & 0.0 & 0.0 & L & 0.0 & 0.0 & 1.0 \\ @@ -1239,7 +1257,7 @@ L & 0.0 & 0.0 & 1.0 & N & 0.0 & 1.0 & 1.0 \\ \vdots \end{array} -``` +```vi title="Input file" end kpoint_path ``` @@ -1258,9 +1276,9 @@ The default value for `bands_num_points` is 100. Format in which to plot the interpolated band structure. The valid options for this parameter are: -- `gnuplot` (default) +- `gnuplot` (default) -- `xmgrace` +- `xmgrace` !!! note it is possible to request output in both formats eg @@ -1276,7 +1294,7 @@ in the `seedname_band.dat` file, and a corresponding gnuplot script to For example, to project on to WFs 2, 6, 7, 8 and 12: -``` +```vi title="Input file" bands_plot_project : 2, 6-8, 12 ``` @@ -1289,9 +1307,9 @@ the WF basis. Truncation criteria are provided by `hr_cutoff` and The valid options for this parameter are: -- `s-k` (default) +- `s-k` (default) -- `cut` +- `cut` ### `integer :: bands_plot_dim` @@ -1304,11 +1322,11 @@ structure interpolation. The valid options for this parameter are: -- 3 (default) +- 3 (default) -- 2 +- 2 -- 1 +- 1 ### `logical :: fermi_surface_plot` @@ -1329,12 +1347,19 @@ The default value for `fermi_surface_num_points` is 50. ### `real(kind=dp) :: fermi_energy` -The Fermi energy in eV. This parameter is written into the bxsf file. If -`fermi_energy` is specified, ` fermi_energy_min`, `fermi_energy_max`, -and ` fermi_energy_step` should not be specified, and vice-versa. +The Fermi energy in eV. +If `fermi_energy` is specified, `fermi_energy_min`, `fermi_energy_max`, +and `fermi_energy_step` should not be specified, and vice-versa. The default value is 0.0 +- For Fermi surface: + This parameter is written into the bxsf file. + +- For transport: + The energy axis of the quantum conductance and + density of states data will be shifted rigidly by this amount. + ### `real(kind=dp) :: fermi_energy_min` Instead of specifyfing a single Fermi energy, it is possible to scan the @@ -1343,7 +1368,6 @@ each $\varepsilon_F$. This is the minimum value in the range (in eV). !!! note - Scanning the Fermi level is currently supported only by the `postw90` module `berry`, for `berry_task=ahc,morb`. For all other functionalities that require a knowledge of $\varepsilon_F$, use @@ -1360,7 +1384,7 @@ The default value is `fermi_energy_min + 1.0`. ### `real(kind=dp) :: fermi_energy_step` Difference between consecutive values of the Fermi energy when scanning -from `fermi_energy_min` to ` fermi_energy_max`. Units are eV. +from `fermi_energy_min` to `fermi_energy_max`. Units are eV. The default value is 0.01. @@ -1369,7 +1393,7 @@ The default value is 0.01. Format in which to plot the Fermi surface. The valid options for this parameter are: -- `xcrysden` (default) +- `xcrysden` (default) ### `logical :: write_hr` @@ -1432,13 +1456,14 @@ must be provided by the five external files: `seedname_htL.dat, seedname_htLC.dat, seedname_htC.dat, seedname_htCR.dat, seedname_htR.dat`. If `tran_read_ht = false` then the Hamiltonian matrices are found automatically provided the supercell adheres to conditions -outlined in Section [Automated lcr Transport Calculations: The 2c2 Geometry](transport.md#sec:2c2). +outlined in Section +[Automated lcr Transport Calculations: The 2c2 Geometry](transport.md#automated-lcr-transport-calculations-the-2c2-geometry). The valid options for this parameter are: -- `bulk` (default) +- `bulk` (default) -- `lcr` +- `lcr` ### `real(kind=dp) :: tran_win_min` @@ -1461,13 +1486,6 @@ Sampling interval of the energy values from `tran_win_min` to The default value is 0.01. -### `real(kind=dp) :: fermi_energy` - -The Fermi energy in eV. The energy axis of the quantum conductance and -density of states data will be shifted rigidly by this amount. - -The default value is 0.0 - ### `integer :: tran_num_bb` Size of a bulk Hamiltonian matrix. This number is equal to the number of @@ -1560,7 +1578,8 @@ If `tran_write_ht = true`, then the Hamiltonian matrix formatted for the transport calculation will be read from a set of files described in the parameter `transport_mode`. Set `tran_write_ht = false` to perform automated lcr -calculations (see Section [Automated lcr Transport Calculations: The 2c2 Geometry](transport.md#sec:2c2)). +calculations (see Section +[Automated lcr Transport Calculations: The 2c2 Geometry](transport.md#automated-lcr-transport-calculations-the-2c2-geometry)). The default value is `false`. @@ -1612,7 +1631,8 @@ Tolerance when determining whether two values $\|\mathbf{d}_{ij\mathbf{R}} + \tilde{\mathbf{R}}_{nml} \|$ and $\|\mathbf{d}_{ij\mathbf{R}} + \tilde{\mathbf{R}}_{n'm'l'} \|$ (as defined in -chapter [Some notes on the interpolation](notes_interpolations.md)) for the shortest distance between two +chapter [Some notes on the interpolation](notes_interpolations.md)) +for the shortest distance between two Wannier functions are equivalent. If the difference in distance (in Angstrom) is less than `ws_distance_tol`, they are taken to be equivalent. @@ -1623,7 +1643,8 @@ The default value is $10^{-5}$. Maximum absolute value for the integers $n,m,l$ that identify the super-lattice vectors $\tilde{\mathbf{R}}_{nml}$ (see -chapter [Some notes on the interpolation](notes_interpolations.md)) when searching for points inside the +chapter [Some notes on the interpolation](notes_interpolations.md)) when +searching for points inside the Wigner-Seitz cell. If `ws_search_size` is provided as a single integer, then the number of repetitions of the Born-von Karman cell is the same along all three linear dimensions; otherwise, if three integers are @@ -1649,7 +1670,7 @@ The default value is `false`. ### `real(kind=dp) :: hr_cutoff` The absolute value of the smallest matrix element of the Hamiltonian in -the WF basis. If $h_{mn}(\mathbf{R})>\:$` hr_cutoff`, then the matrix +the WF basis. If $h_{mn}(\mathbf{R})>\:$`hr_cutoff`, then the matrix element $h_{mn}(\mathbf{R})$ is retained and used in the band structure interpolation (when `bands_plot_mode = cut`) or in the transport calculation. Otherwise it is deemed to be insignificant and is @@ -1676,11 +1697,11 @@ plane (`two_dim`). The size of the projected vector is calculated, and The valid options for this parameter are: -- `three_dim` (default) +- `three_dim` (default) -- `two_dim` +- `two_dim` -- `one_dim` +- `one_dim` ### `character(len=20) :: one_dim_axis` @@ -1690,10 +1711,10 @@ the Cartesian axes. The valid options for this parameter are: -- `x` +- `x` -- `y` +- `y` -- `z` +- `z` No default. diff --git a/docs/docs/user_guide/wannier90/postproc.md b/docs/docs/user_guide/wannier90/postproc.md index 9db9000d..e4e40922 100644 --- a/docs/docs/user_guide/wannier90/postproc.md +++ b/docs/docs/user_guide/wannier90/postproc.md @@ -44,35 +44,41 @@ The only logical keyword is `calc_only_A`, eg, ### `Real_lattice` block - begin real_lattice - 2.250000 0.000000 0.000000 - 0.000000 2.250000 0.000000 - 0.000000 0.000000 2.250000 - end real_lattice +```vi title="Input file" +begin real_lattice + 2.250000 0.000000 0.000000 + 0.000000 2.250000 0.000000 + 0.000000 0.000000 2.250000 +end real_lattice +``` The real lattice vectors in units of Angstrom. ### `Recip_lattice` block - begin recip_lattice - 2.792527 0.000000 0.000000 - 0.000000 2.792527 0.000000 - 0.000000 0.000000 2.792527 - end recip_lattice +```vi title="Input file" +begin recip_lattice + 2.792527 0.000000 0.000000 + 0.000000 2.792527 0.000000 + 0.000000 0.000000 2.792527 +end recip_lattice +``` The reciprocal lattice vectors in units of inverse Angstrom. ### `Kpoints` block - begin kpoints - 8 - 0.00000 0.00000 0.00000 - 0.00000 0.50000 0.00000 - . - . - . - 0.50000 0.50000 0.50000 - end kpoints +```vi title="Input file" +begin kpoints + 8 + 0.00000 0.00000 0.00000 + 0.00000 0.50000 0.00000 + . + . + . + 0.50000 0.50000 0.50000 +end kpoints +``` The first line in the block is the total number of k-points `num_kpts`. The subsequent `num_kpts` lines specify the k-points in crystallographic @@ -80,15 +86,17 @@ co-ordinates relative to the reciprocal lattice vectors. ### `Projections` block - begin projections - n_proj - centre l mr r - z-axis x-axis zona - centre l mr r - z-axis x-axis zona - . - . - end projections +```vi title="Input file" +begin projections + n_proj + centre l mr r + z-axis x-axis zona + centre l mr r + z-axis x-axis zona + . + . +end projections +``` Notes: @@ -101,7 +109,9 @@ crystallographic co-ordinates relative to the direct lattice vectors. `l mr r`: three integers; $l$ and $m_\mathrm{r}$ specify the angular part $\Theta_{lm_{\mathrm{r}}}(\theta,\varphi)$, and $\mathrm{r}$ specifies the radial part $R_{\mathrm{r}}(r)$ of the projection function -(see Tables [Angular functions](projections.md/#angular-functions), [Hybrids](projections.md#hybrids) and [Radial functions](projections.md/#radial-functions)). +(see Tables [Angular functions](projections.md#angular-functions), +[Hybrids](projections.md#hybrids) and +[Radial functions](projections.md#radial-functions)). `z-axis`: three real numbers; default is `0.0 0.0 1.0`; defines the axis from which the polar angle $\theta$ in spherical polar coordinates is @@ -117,17 +127,19 @@ radial part of the atomic orbital. Units are in reciprocal Angstrom. ### `spinor_projections` block - begin spinor_projections - n_proj - centre l mr r - z-axis x-axis zona - spin spn_quant - centre l mr r - z-axis x-axis zona - spin spn_quant - . - . - end spinor_projections +```vi title="Input file" +begin spinor_projections + n_proj + centre l mr r + z-axis x-axis zona + spin spn_quant + centre l mr r + z-axis x-axis zona + spin spn_quant + . + . +end spinor_projections +``` Notes: Only one of projections and spinor_projections should be defined. Variables are the same as the projections block with the addition of @@ -141,12 +153,14 @@ Cartesian coordinates. ### `nnkpts` block - begin nnkpts - 10 - 1 2 0 0 0 - . - . - end nnkpts +```vi title="Input file" +begin nnkpts + 10 + 1 2 0 0 0 + . + . +end nnkpts +``` First line: `nntot`, the number of nearest neighbours belonging to each k-point of the Monkhorst-Pack mesh @@ -164,13 +178,15 @@ the actual $\mathbf{k+b}$ that we need. ### `exclude_bands` block - begin exclude_bands - 8 - 1 - 2 - . - . - end exclude_bands +```vi title="Input file" +begin exclude_bands + 8 + 1 + 2 + . + . +end exclude_bands +``` To exclude bands (independent of k-point) from the calculation of the overlap and projection matrices, for example to ignore shallow-core @@ -179,10 +195,12 @@ lines give the states for be excluded. ### `auto_projections` block - begin auto_projections - 8 - 0 - end auto_projections +```vi title="Input file" +begin auto_projections + 8 + 0 +end auto_projections +``` This block is only printed if `auto_projections=true` in the input. The choice of an additional block has been made in order to maintain @@ -207,15 +225,17 @@ method [@LinLin-ArXiv2017] is one way of generating the initial $A_{mn}^{(\mathbf{k})}$ in an automatic way. This has been implemented in the `pw2wannier90` interface code (you need v6.3 with the files provided in the `pwscf` folder of Wannier90, or v6.4), see for instance -Tutorial [27](../../tutorials/tutorial_27.md) in the `wannier90` tutorial that shows how to use it. +Tutorial [27](../../tutorials/tutorial_27.md) in the `wannier90` tutorial +that shows how to use it. Moreover, also the automatic generation of initial projections with spinor WFs is implemented in the `pw2wannier90` interface. See Tutorial -[31](../../tutorials/tutorial_31.md) in the `wannier90` tutorial that shows how to use it. +[31](../../tutorials/tutorial_31.md) in the `wannier90` tutorial that shows +how to use it. Another automatic projection method is projectability-disentangled Wannier function (PDWF) [@Qiao2023-pdwf], which uses pseudo-atomic -orbitals inside pseudopotentials as initial guesses. +orbitals inside pseudopotentials as initial guesses. @@ -226,29 +246,34 @@ projection orbitals on, say, a carbon atom at (0.5,0.5,0.5) in fractional co-ordinates relative to the direct lattice vectors. In this case `seedname.win` will contain the following lines: - begin projections - C:l=-1 - end projections +```vi title="Input file" +begin projections + C:l=-1 +end projections +``` and `seedname.nnkp`, generated on the first pass of `wannier90` (with `postproc_setup=T`), will contain: - begin projections - 4 - 0.50000 0.50000 0.50000 -1 1 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - 0.50000 0.50000 0.50000 -1 2 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - 0.50000 0.50000 0.50000 -1 3 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - 0.50000 0.50000 0.50000 -1 4 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - end projections +```vi title="Input file" +begin projections + 4 + 0.50000 0.50000 0.50000 -1 1 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + 0.50000 0.50000 0.50000 -1 2 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + 0.50000 0.50000 0.50000 -1 3 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + 0.50000 0.50000 0.50000 -1 4 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 +end projections +``` where the first line tells us that in total four projections are -specified, and the subsquent lines provide the projection centre, the -angular and radial parts of the orbital (see -Section [Orbital Definitions](projections.md/#orbital-definitions) for definitions), the $z$ and $x$ axes, +specified, and the subsequent lines provide the projection centre, the +angular and radial parts of the orbital (see Section +[Orbital Definitions](projections.md#orbital-definitions) for definitions), +the $z$ and $x$ axes, and the diffusivity and cut-off radius for the projection orbital. `pwscf`, or any other *ab initio* electronic structure code, @@ -387,7 +412,8 @@ the $k$-point in the list of $k$-points in `seedname.win`, and the real number is the eigenvalue. E.g., -``` + +```vi title="Input file" 1 1 -6.43858831271328 2 1 19.3977795287297 3 1 19.3977795287297 @@ -408,12 +434,12 @@ post-processing interface `pw2wannier90.x`. Please refer to the documentation that comes with the Quantum ESPRESSO distribution for instructions. -1. Run 'scf'/'nscf' calculation(s) with `pw` +1. Run 'scf'/'nscf' calculation(s) with `pw` -2. Run `wannier90` with `postproc_setup` = `.true.` to generate +2. Run `wannier90` with `postproc_setup` = `.true.` to generate `seedname.nnkp` -3. Run `pw2wannier90`. First it reads an input file, e.g., +3. Run `pw2wannier90`. First it reads an input file, e.g., `seedname.pw2wan`, which defines `prefix` and `outdir` for the underlying 'scf' calculation, as well as the name of the file `seedname.nnkp`, and does a consistency check between the direct and @@ -423,7 +449,7 @@ instructions. and `seedname.sym` files are additionally created when `write_dmn = .true.` (see below). -4. Run `wannier90` with `postproc_setup` = `.false.` to disentangle +4. Run `wannier90` with `postproc_setup` = `.false.` to disentangle bands (if required), localise MLWF, and use MLWF for plotting, bandstructures, Fermi surfaces etc. @@ -434,51 +460,50 @@ in the `wannier90` Tutorial. A number of keywords may be specified in the `pw2wannier90` input file: -- `outdir` -- Location to write output files. Default is `` `./' `` +- `outdir` -- Location to write output files. Default is `` `./' `` -- `prefix` -- Prefix for the `pwscf` calculation. Default +- `prefix` -- Prefix for the `pwscf` calculation. Default is `` ` ' `` -- `seedname` -- Seedname for the `wannier90` calculation. Default is +- `seedname` -- Seedname for the `wannier90` calculation. Default is `` `wannier' `` -- `spin_component` -- Spin component. Takes values `` `up' ``, +- `spin_component` -- Spin component. Takes values `` `up' ``, `` `down' `` or `` `none' `` (default). -- `wan_mode` -- Either `` `standalone' `` (default) or `` `library' `` +- `wan_mode` -- Either `` `standalone' `` (default) or `` `library' `` -- `write_unk` -- Set to `.true.` to write the periodic part of the +- `write_unk` -- Set to `.true.` to write the periodic part of the Bloch functions for plotting in `wannier90`. Default is `.false.` -- `reduce_unk` -- Set to `.true.` to reduce file-size (and resolution) +- `reduce_unk` -- Set to `.true.` to reduce file-size (and resolution) of Bloch functions by a factor of 8. Default is `.false.` (only relevant if `write_unk=.true.`) !!! note - Note that there is a small bug with this feature in v3.2 (and - subsequent patches) of ` quantum-espresso`. Please use a later + subsequent patches) of `quantum-espresso`. Please use a later version (if available) or the CVS version of `pw2wannier90.f90`, which has been fixed. -- `wvfn_formatted` -- Set to `.true.` to write formatted +- `wvfn_formatted` -- Set to `.true.` to write formatted wavefunctions. Default is `.false.` (only relevant if `write_unk=.true.`) -- `write_amn` -- Set to `.false.` if $A_{mn}^{(\mathbf{k})}$ not +- `write_amn` -- Set to `.false.` if $A_{mn}^{(\mathbf{k})}$ not required. Default is `.true.` -- `write_mmn` -- Set to `.false.` if $M_{mn}^{(\mathbf{k,b})}$ not +- `write_mmn` -- Set to `.false.` if $M_{mn}^{(\mathbf{k,b})}$ not required. Default is `.true.` -- `write_spn` -- Set to `.true.` to write out the matrix elements of +- `write_spn` -- Set to `.true.` to write out the matrix elements of $S$ between Bloch states (non-collinear spin calculation only). Default is `.false.` -- `spn_formatted` -- Set to `.true.` to write spn data as a formatted +- `spn_formatted` -- Set to `.true.` to write spn data as a formatted file. Default is `.false.` (only relevant if `write_spn=.true.`) -- `write_uHu` -- Set to `.true.` to write out the matrix elements +- `write_uHu` -- Set to `.true.` to write out the matrix elements $$ \langle u_{n{\bf k}+{\bf b}_1}\vert @@ -487,10 +512,10 @@ A number of keywords may be specified in the `pw2wannier90` input file: Default is `.false.` -- `uHu_formatted` -- Set to `.true.` to write uHu data as a formatted +- `uHu_formatted` -- Set to `.true.` to write uHu data as a formatted file. Default is `.false.` (only relevant if `write_uHu=.true.`) -- `write_uIu` -- Set to `.true.` to write out the matrix elements of +- `write_uIu` -- Set to `.true.` to write out the matrix elements of $$ \langle u_{n{\bf k}+{\bf b}_1}\vert @@ -499,36 +524,36 @@ A number of keywords may be specified in the `pw2wannier90` input file: Default is `.false.` -- `uIu_formatted` -- Set to `.true.` to write uIu data as a formatted +- `uIu_formatted` -- Set to `.true.` to write uIu data as a formatted file. Default is `.false.` (only relevant if `write_uIu=.true.`) -- `write_unkg` -- Set to `.true.` to write the first few Fourier +- `write_unkg` -- Set to `.true.` to write the first few Fourier components of the periodic parts of the Bloch functions. -- `write_dmn` -- Set to `.true.` to construct symmetry-adapted Wannier +- `write_dmn` -- Set to `.true.` to construct symmetry-adapted Wannier functions. Default is `.false.` -- `read_sym` -- Set to `.true.` to customize symmetry operations to be +- `read_sym` -- Set to `.true.` to customize symmetry operations to be used in symmetry-adapted mode. When `read_sym = .true.`, an additional input `seedname.sym` is required. Default is `.false.` (only relevant if `write_dmn=.true.`). -- `irr_bz` -- Set to `.true.` to use the irreducible BZ calculation +- `irr_bz` -- Set to `.true.` to use the irreducible BZ calculation (see [Section "Irreducible BZ calculation"](#irreducible-bz-calculation)). -- `atom_proj` -- Set to `.true.` to use pseudo-atomic orbitals for +- `atom_proj` -- Set to `.true.` to use pseudo-atomic orbitals for computing `amn`. Default is `.false.`. -- `atom_proj_exclude` -- A list of integers specifying the indices of +- `atom_proj_exclude` -- A list of integers specifying the indices of pseudo-atomic projectors to be excluded from computing `amn`. Used only when `atom_proj = .true.`. No default. -- `atom_proj_ext` -- Set to `.true.` to use external pseudo-atomic +- `atom_proj_ext` -- Set to `.true.` to use external pseudo-atomic orbitals for computing `amn`, will read data files from directory `atom_proj_dir`. Used only when `atom_proj = .true.`. Default is `.false.`. -- `atom_proj_dir` -- A string specifying the directory for external +- `atom_proj_dir` -- A string specifying the directory for external pseudo-atomic projectors. Used only when `atom_proj = .true.` and `atom_proj_ext = .true.`. No default. @@ -555,10 +580,12 @@ Then: `nsymmetry` blocks of data. Each block (separated by a blank line) consists of four lines. The order of the data in each block is as follows: +```vi title="Input file" R(1,1) R(2,1) R(3,1) R(1,2) R(2,2) R(3,2) R(1,3) R(2,3) R(3,3) t(1) t(2) t(3) +``` Here, $R$ is the rotational part of symmetry operations ($3\times3$ matrix), and $\bf t$ is the fractional translation in the unit of @@ -568,7 +595,7 @@ symmetry operations act on a point $\bf r$ as ${\bf r} R - {\bf t}$. ## Irreducible BZ calculation -This section explains how to construct Wannier functions using wavefunctions +This section explains how to construct Wannier functions using wavefunctions calculated only in the irreducible BZ (IBZ). Using this option, users only have to calculate wavefunctions, overlap matrices ($M_{mn}$) and projection matrices ($A_{mn}$) in the IBZ, which will reduce the computational cost. @@ -579,38 +606,41 @@ the [website of symWannier](https://github.com/wannier-utils-dev/symWannier) and Ref. [@Koretsune2023]. !!! note - The `symWannier` package also has the ability to construct - symmetry-adapted Wannier functions only from the `.mmn, `.amn` and `.eig` + symmetry-adapted Wannier functions only from the `.mmn,`.amn` and `.eig` files in the IBZ and some symmetry information. The procedure is as follows. -1. Run `scf`/`nscf` calculation(s) with Quantum ESPRESSO `pw.x`. In the `nscf` +1. Run `scf`/`nscf` calculation(s) with Quantum ESPRESSO `pw.x`. In the `nscf` calculation, users only have to calculate k-points in the IBZ. E.g.: + ```vi title="Input file" K_POINTS {automatic} 4 4 4 0 0 0 ``` + Users also have the option to skip the `nscf` calculation, if the grid of the `scf` step is already sufficient. -2. Run Wannier90 with `postproc_setup = .true.` (or equivalently with +2. Run Wannier90 with `postproc_setup = .true.` (or equivalently with the `-pp` command line flag) to generate the file `seedname.nnkp`. -3. Run `pw2wannier90` with `irr_bz = .true.` in the input file. +3. Run `pw2wannier90` with `irr_bz = .true.` in the input file. `pw2wannier90` then generates the files `seedname.immn`, `seedname.iamn`, `seedname.ieig` and `seedname.isym`. -4. Run the python code `write_full_data.py`, part of the `symWannier` package. +4. Run the python code `write_full_data.py`, part of the `symWannier` package. You can first install the package from [GitHub](https://github.com/wannier-utils-dev/symWannier) and then run the script as + ```bash title="Terminal" python write_full_data.py ``` + (replace `` with the seedname of your calculation). This python script generates the $M_{mn}$ and $A_{mn}$ matrices, and Kohn-Sham @@ -620,7 +650,7 @@ The procedure is as follows. information (`seedname.isym`). The relations between these quantites in the IBZ and full BZ are explained in Ref. [@Koretsune2023]. -5. Run `wannier90` (with `postproc_setup = .false.` or, equivalently, +5. Run `wannier90` (with `postproc_setup = .false.` or, equivalently, without the `-pp` command line option). ## `seedname.immn` file @@ -628,10 +658,10 @@ The procedure is as follows. INPUT The format is the same as `seedname.mmn`, except that the number of -kpoints is the number of k-points in the IBZ. See also [the section on the `seedname.mmn` file](#seednamemmn-file). +kpoints is the number of k-points in the IBZ. See also +[the section on the `seedname.mmn` file](#seednamemmn-file). -`seedname.iamn` file --------------------- +## `seedname.iamn` file INPUT @@ -639,8 +669,7 @@ The format is the same as `seedname.amn`, except that the number of kpoints is the number of k-points in the IBZ. See also See also [the section on the `seedname.amn` file](#seednameamn-file). -`seedname.ieig` file --------------------- +## `seedname.ieig` file INPUT @@ -648,8 +677,7 @@ The format is the same as `seedname.eig`, except that the number of kpoints is the number of k-points in the IBZ. See also See also [the section on the `seedname.eig` file](#seednameeig-file). -`seedname.isym` file --------------------- +## `seedname.isym` file INPUT @@ -668,29 +696,31 @@ operation, $\hat{g}$, and consists of 7 lines (11 lines for the spinor case). The order of the data in each block is as follows: Non-spinor case: -``` - a comment - R(1,1) R(2,1) R(3,1) - R(1,2) R(2,2) R(3,2) - R(1,3) R(2,3) R(3,3) - t(1) t(2) t(3) - T - invs + +```vi title="Input file" +a comment +R(1,1) R(2,1) R(3,1) +R(1,2) R(2,2) R(3,2) +R(1,3) R(2,3) R(3,3) + t(1) t(2) t(3) + T + invs ``` Spinor case: -``` - a comment - R(1,1) R(2,1) R(3,1) - R(1,2) R(2,2) R(3,2) - R(1,3) R(2,3) R(3,3) - t(1) t(2) t(3) - T - u(1,1).real u(1,1).imag - u(2,1).real u(2,1).imag - u(1,2).real u(1,2).imag - u(2,2).real u(2,2).imag - invs + +```vi title="Input file" +a comment +R(1,1) R(2,1) R(3,1) +R(1,2) R(2,2) R(3,2) +R(1,3) R(2,3) R(3,3) + t(1) t(2) t(3) + T +u(1,1).real u(1,1).imag +u(2,1).real u(2,1).imag +u(1,2).real u(1,2).imag +u(2,2).real u(2,2).imag + invs ``` Here, $R$ is the rotational part of symmetry operations, ($3 \times 3$ @@ -700,7 +730,7 @@ crystal coordinates as $\hat{g} {\bf r} = {\bf r} R - {\bf t}$. $T=1$ ($T=0$) indicates that this symmetry operation includes (does not include) time-reversal operation, respectively. $u$ is the SU(2) rotation matrix for -the spinor part. +the spinor part. `invs` represents the symmetry operation corresponding to $\hat{g}^{-1}$. @@ -742,4 +772,3 @@ matrix, $D_{mn}(\hat{g})$. Subsequent lines of each block: 2 integers and 2 real numbers per line. These specify indeces of Wannier functions, $m$ and $n$, and real and imaginary parts of $D_{mn}(\hat{g})$. - diff --git a/docs/docs/user_guide/wannier90/projections.md b/docs/docs/user_guide/wannier90/projections.md index 3c0e195d..7e71cb67 100644 --- a/docs/docs/user_guide/wannier90/projections.md +++ b/docs/docs/user_guide/wannier90/projections.md @@ -12,10 +12,10 @@ and the volume over which real-space overlaps $A_{mn}$ are calculated. The code is able to -1. project onto s,p,d and f angular momentum states, plus the hybrids +1. project onto s,p,d and f angular momentum states, plus the hybrids sp, sp$^2$, sp$^3$, sp$^3$d, sp$^3$d$^2$. -2. control the radial part of the projection functions to allow higher +2. control the radial part of the projection functions to allow higher angular momentum states, e.g., both 3s and 4s in silicon. The atomic orbitals of the hydrogen atom provide a good basis to use for @@ -31,13 +31,13 @@ equation but rather the *real* (in the sense of non-imaginary) states $\Theta_{lm_{\mathrm{r}}}$, obtained by a unitary transformation. For example, the canonical eigenstates associated with $l=1$, $m=\{-1,0,1\}$ are not the real p$_{x}$, p$_{y}$ and p$_{z}$ that we want. See -Section [Orbital Definitions](#orbital-definitions) +Section [Orbital Definitions](#orbital-definitions) for our mathematical conventions regarding projection orbitals for different $n$, $l$ and $m_{\mathrm{r}}$. We use the following format to specify projections in `.win`: -``` +```vi title="Input file" Begin Projections [units] site:ang_mtm:zaxis:xaxis:radial:zona @@ -45,7 +45,7 @@ site:ang_mtm:zaxis:xaxis:radial:zona End Projections ``` -Notes: +### Notes `units`: Optional. Either `Ang` or `Bohr` to specify whether the projection @@ -66,15 +66,15 @@ appropriate character string. See Tables [Angular functions](#angular-functions) and [Hybrids](#hybrids). Examples: -`l=2,mr=1 ` or ` dz2` -- a single projection with $l=2$, +`l=2,mr=1` or `dz2` -- a single projection with $l=2$, $m_{\textrm{r}}=1$ (i.e., d$_{z^{2}}$) -`l=2,mr=1,4 ` or ` dz2,dx2-y2` -- two functions: d$_{z^{2}}$ and +`l=2,mr=1,4` or `dz2,dx2-y2` -- two functions: d$_{z^{2}}$ and d$_{xz}$ -`l=-3 ` or ` sp3` -- four sp$^{3}$ hybrids +`l=-3` or `sp3` -- four sp$^{3}$ hybrids Specific hybrid orbitals may be specified as follows: -`l=-3,mr=1,3 ` or ` sp3-1,sp3-3` -- two specific sp$^{3}$ hybrids +`l=-3,mr=1,3` or `sp3-1,sp3-3` -- two specific sp$^{3}$ hybrids Multiple states may be specified by separating with '`;`', e.g., -`sp3;l=0 ` or ` l=-3;l=0` -- four sp$^{3}$ hybrids and one s orbital +`sp3;l=0` or `l=-3;l=0` -- four sp$^{3}$ hybrids and one s orbital `zaxis` (optional): `z=1,1,1` -- set the $z$-axis to be in the (1,1,1) direction. Default is @@ -97,21 +97,21 @@ always in reciprocal Angstrom. Default is `zona=1.0`. ### Examples -1. CuO, s,p and d on all Cu; sp$^3$ hybrids on O: +- CuO, s,p and d on all Cu; sp$^3$ hybrids on O: - `Cu:l=0;l=1;l=2 ` + `Cu:l=0;l=1;l=2` - `O:l=-3 ` or ` O:sp3` + `O:l=-3` or `O:sp3` -2. A single projection onto a p$_z$ orbital orientated in the (1,1,1) +- A single projection onto a p$_z$ orbital orientated in the (1,1,1) direction: - `c=0,0,0:l=1,mr=1:z=1,1,1 ` or ` c=0,0,0:pz:z=1,1,1` + `c=0,0,0:l=1,mr=1:z=1,1,1` or `c=0,0,0:pz:z=1,1,1` -3. Project onto s, p and d (with no radial nodes), and s and p (with +- Project onto s, p and d (with no radial nodes), and s and p (with one radial node) in silicon: - ``` + ```vi title="Input file" Si:l=0;l=1;l=2 Si:l=0;l=1:r=2 ``` @@ -128,7 +128,7 @@ interface between the ab-initio code and Wannier90 (i.e., written after the release of the 2.0 version, in October 2013) supporting spinor projections. -``` +```vi title="Input file" Begin Projections [units] site:ang_mtm:zaxis:xaxis:radial:zona(spin)[quant_dir] @@ -146,39 +146,39 @@ Default is `u,d` `1,0,0` -- set the spin quantisation axis to be in the (1,0,0) direction. Default is `0,0,1` -### Examples +### Spinor Examples -- 18 projections on an iron site +- 18 projections on an iron site `Fe:sp3d2;dxy;dxx;dyz` -- same as above +- same as above `Fe:sp3d2;dxy;dxx;dyz(u,d)` -- same as above +- same as above `Fe:sp3d2;dxy;dxz;dyz(u,d)[0,0,1]` -- same as above but quantisation axis is now x +- same as above but quantisation axis is now x `Fe:sp3d2;dxy;dxz;dyz(u,d)[1,0,0]` -- now only 9 projections onto up states +- now only 9 projections onto up states `Fe:sp3d2;dxy;dxz;dyz(u)` -- 9 projections onto up-states and 3 on down +- 9 projections onto up-states and 3 on down - ``` + ```vi title="Input file" Fe:sp3d2;dxy;dxz;dyz(u) Fe:dxy;dxz;dyz(d) ``` -- projections onto alternate spin states for two lattice sites (Cr1, +- projections onto alternate spin states for two lattice sites (Cr1, Cr2) - ``` + ```vi title="Input file" Cr1:d(u) Cr2:d(d) ``` @@ -189,7 +189,7 @@ direction. Default is `0,0,1` It is possible to specify the projections, for example, as follows: -``` +```vi title="Input file" Begin Projections random C:sp3 @@ -224,6 +224,7 @@ are given in Table [Radial functions](#radial-functions). ### Angular functions + | $l$ | $m_{\mathrm{r}}$ | Name | $\Theta_{lm_{\mathrm{r}}}(\theta,\varphi)$ | |:---:|:----------------:|:------------:|:-------------------------------------------------------------------------------------------:| | 0 | 1 | `s` | $\frac{1}{\sqrt{4\pi}}$ | @@ -242,34 +243,37 @@ are given in Table [Radial functions](#radial-functions). | 3 | 5 | `fxyz` | $\frac{\sqrt{105}}{4\sqrt{\pi}}\sin^{2}\theta\cos\theta\sin2\varphi$ | | 3 | 6 | `fx(x2-3y2)` | $\frac{\sqrt{35}}{4\sqrt{2\pi}}\sin^{3}\theta(\cos^{2}\varphi-3\sin^{2}\varphi)\cos\varphi$ | | 3 | 7 | `fy(3x2-y2)` | $\frac{\sqrt{35}}{4\sqrt{2\pi}}\sin^{3}\theta(3\cos^{2}\varphi-\sin^{2}\varphi)\sin\varphi$ | + Angular functions $\Theta_{lm_{\mathrm{r}}}(\theta,\varphi)$ associated with particular values of $l$ and $m_{\mathrm{r}}$ for $l\ge0$. ### Hybrids -| $l$ | $m_{\mathrm{r}}$ | Name | $\Theta_{lm_{\mathrm{r}}}(\theta,\varphi)$ | -|:------------:|:----------------:|:---------:|:---------------------------------------------------------------------------:| -| -1 | 1 | `sp-1` | $\frac{1}{\sqrt{2}}$`s` $+\frac{1}{\sqrt{2}}$`px` | -| -1 | 2 | `sp-2` | $\frac{1}{\sqrt{2}}$`s` $-\frac{1}{\sqrt{2}}$`px` | -| -2 | 1 | `sp2-1` | $\frac{1}{\sqrt{3}}$`s` $-\frac{1}{\sqrt{6}}$`px` $+\frac{1}{\sqrt{2}}$`py` | -| -2 | 2 | `sp2-2` | $\frac{1}{\sqrt{3}}$`s` $-\frac{1}{\sqrt{6}}$`px` $-\frac{1}{\sqrt{2}}$`py` | -| -2 | 3 | `sp2-3` | $\frac{1}{\sqrt{3}}$`s` $+\frac{2}{\sqrt{6}}$`px` | -| -3 | 1 | `sp3-1` | $\frac{1}{2}$(`s` $+$ `px` $+$ `py` | | | | -| -3 | 2 | `sp3-2` | $\frac{1}{2}$(`s` $+$ `px` $-$ `py` $-$ `pz`) | -| -3 | 3 | `sp3-3` | $\frac{1}{2}$(`s` $-$ `px` $+$ `py` $-$ `pz`) | -| -3 | 4 | `sp3-4` | $\frac{1}{2}$(`s` $-$ `px` $-$ `py` $+$ `pz`) | -| -4 | 1 | `sp3d-1` | $\frac{1}{\sqrt{3}}$`s` $-\frac{1}{\sqrt{6}}$`px` $+\frac{1}{\sqrt{2}}$`py` | -| -4 | 2 | `sp3d-2` | $\frac{1}{\sqrt{3}}$`s` $-\frac{1}{\sqrt{6}}$`px` $-\frac{1}{\sqrt{2}}$`py` | -| -4 | 3 | `sp3d-3` | $\frac{1}{\sqrt{3}}$`s` $+\frac{2}{\sqrt{6}}$`px` | -| -4 | 4 | `sp3d-4` | $\frac{1}{\sqrt{2}}$`pz` $+\frac{1}{\sqrt{2}}$`dz2` | -| -4 | 5 | `sp3d-5` | $-\frac{1}{\sqrt{2}}$`pz` $+\frac{1}{\sqrt{2}}$`dz2` | -| -5 | 1 | `sp3d2-1` | $\frac{1}{\sqrt{6}}$`s`-$\frac{1}{\sqrt{2}}$`px`-$\frac{1}{\sqrt{12}}$`dz2`+$\frac{1}{2}$`dx2-y2` | -| -5 | 2 | `sp3d2-2` | $\frac{1}{\sqrt{6}}$`s`+$\frac{1}{\sqrt{2}}$`px`-$\frac{1}{\sqrt{12}}$`dz2`+$\frac{1}{2}$`dx2-y2` | -| -5 | 3 | `sp3d2-3` | $\frac{1}{\sqrt{6}}$`s`-$\frac{1}{\sqrt{2}}$`py`-$\frac{1}{\sqrt{12}}$`dz2`-$\frac{1}{2}$`dx2-y2` | -| -5 | 4 | `sp3d2-4` | $\frac{1}{\sqrt{6}}$`s`+$\frac{1}{\sqrt{2}}$`py`-$\frac{1}{\sqrt{12}}$`dz2`-$\frac{1}{2}$`dx2-y2` | -| -5 | 5 | `sp3d2-5` | $\frac{1}{\sqrt{6}}$`s`-$\frac{1}{\sqrt{2}}$`pz`+$\frac{1}{\sqrt{3}}$`dz2` | -| -5 | 6 | `sp3d2-6` | $\frac{1}{\sqrt{6}}$`s`+$\frac{1}{\sqrt{2}}$`pz`+$\frac{1}{\sqrt{3}}$`dz2` | + +| $l$ | $m_{\mathrm{r}}$ | Name | $\Theta_{lm_{\mathrm{r}}}(\theta,\varphi)$ | +|:------------:|:----------------:|:---------:|:-------------------------------------------------------------------------------------------------:| +| -1 | 1 | `sp-1` | $\frac{1}{\sqrt{2}}$`s` $+\frac{1}{\sqrt{2}}$`px` | +| -1 | 2 | `sp-2` | $\frac{1}{\sqrt{2}}$`s` $-\frac{1}{\sqrt{2}}$`px` | +| -2 | 1 | `sp2-1` | $\frac{1}{\sqrt{3}}$`s` $-\frac{1}{\sqrt{6}}$`px` $+\frac{1}{\sqrt{2}}$`py` | +| -2 | 2 | `sp2-2` | $\frac{1}{\sqrt{3}}$`s` $-\frac{1}{\sqrt{6}}$`px` $-\frac{1}{\sqrt{2}}$`py` | +| -2 | 3 | `sp2-3` | $\frac{1}{\sqrt{3}}$`s` $+\frac{2}{\sqrt{6}}$`px` | +| -3 | 1 | `sp3-1` | $\frac{1}{2}$(`s` $+$ `px` $+$ `py` | +| -3 | 2 | `sp3-2` | $\frac{1}{2}$(`s` $+$ `px` $-$ `py` $-$ `pz`) | +| -3 | 3 | `sp3-3` | $\frac{1}{2}$(`s` $-$ `px` $+$ `py` $-$ `pz`) | +| -3 | 4 | `sp3-4` | $\frac{1}{2}$(`s` $-$ `px` $-$ `py` $+$ `pz`) | +| -4 | 1 | `sp3d-1` | $\frac{1}{\sqrt{3}}$`s` $-\frac{1}{\sqrt{6}}$`px` $+\frac{1}{\sqrt{2}}$`py` | +| -4 | 2 | `sp3d-2` | $\frac{1}{\sqrt{3}}$`s` $-\frac{1}{\sqrt{6}}$`px` $-\frac{1}{\sqrt{2}}$`py` | +| -4 | 3 | `sp3d-3` | $\frac{1}{\sqrt{3}}$`s` $+\frac{2}{\sqrt{6}}$`px` | +| -4 | 4 | `sp3d-4` | $\frac{1}{\sqrt{2}}$`pz` $+\frac{1}{\sqrt{2}}$`dz2` | +| -4 | 5 | `sp3d-5` | $-\frac{1}{\sqrt{2}}$`pz` $+\frac{1}{\sqrt{2}}$`dz2` | +| -5 | 1 | `sp3d2-1` | $\frac{1}{\sqrt{6}}$`s`-$\frac{1}{\sqrt{2}}$`px`-$\frac{1}{\sqrt{12}}$`dz2`+$\frac{1}{2}$`dx2-y2` | +| -5 | 2 | `sp3d2-2` | $\frac{1}{\sqrt{6}}$`s`+$\frac{1}{\sqrt{2}}$`px`-$\frac{1}{\sqrt{12}}$`dz2`+$\frac{1}{2}$`dx2-y2` | +| -5 | 3 | `sp3d2-3` | $\frac{1}{\sqrt{6}}$`s`-$\frac{1}{\sqrt{2}}$`py`-$\frac{1}{\sqrt{12}}$`dz2`-$\frac{1}{2}$`dx2-y2` | +| -5 | 4 | `sp3d2-4` | $\frac{1}{\sqrt{6}}$`s`+$\frac{1}{\sqrt{2}}$`py`-$\frac{1}{\sqrt{12}}$`dz2`-$\frac{1}{2}$`dx2-y2` | +| -5 | 5 | `sp3d2-5` | $\frac{1}{\sqrt{6}}$`s`-$\frac{1}{\sqrt{2}}$`pz`+$\frac{1}{\sqrt{3}}$`dz2` | +| -5 | 6 | `sp3d2-6` | $\frac{1}{\sqrt{6}}$`s`+$\frac{1}{\sqrt{2}}$`pz`+$\frac{1}{\sqrt{3}}$`dz2` | + Angular functions $\Theta_{lm_{\mathrm{r}}}(\theta,\varphi)$ associated with particular values of $l$ and $m_{\mathrm{r}}$ for $l<0$, in terms @@ -278,18 +282,19 @@ Table [Angular functions](#angular-functions). ### Radial functions -|   $r$    | $R_{\mathrm{r}}(r)$ | -|:--------:|:------------------------------------------:| -| 1 | $2 \alpha^{3/2}\exp(-\alpha r)$ | -| 2 | $\frac{1}{2\sqrt{2}}\alpha^{3/2}(2-\alpha r)\exp(-\alpha r/2)$ | + +|   $r$    | $R_{\mathrm{r}}(r)$ | +|:--------:|:--------------------------------------------------------------------------------------:| +| 1 | $2 \alpha^{3/2}\exp(-\alpha r)$ | +| 2 | $\frac{1}{2\sqrt{2}}\alpha^{3/2}(2-\alpha r)\exp(-\alpha r/2)$ | | 3 | $\sqrt{\frac{4}{27}}\alpha^{3/2}(1-2\alpha r/3+2\alpha^{2}r^{2}/27)\exp(-\alpha r/3)$ | + One possible choice for the radial functions $R_{\mathrm{r}}(r)$ associated with different values of $r$: the set of solutions to the radial part of the hydrogenic Schrödinger equation for $l=0$, i.e., the radial parts of the 1s, 2s, 3s… orbitals, where $\alpha=Z/a=$`zona`. - ## Projections via the SCDM-**k** method in pw2wannier90 For many systems, such as aperiodic systems, crystals with defects, or @@ -311,7 +316,7 @@ in the `pw2wannier90` interface program. Moreover, the `pw2wannier90` interface program supports also the SCDM-**k** method for spin-noncollinear systems. The SCDM-**k** can operate in two modes: -1. In isolation, i.e., without performing a subsequent Wannier90 +1. In isolation, i.e., without performing a subsequent Wannier90 optimisation (not recommended). This can be achieved by setting `num_iter=0` and `dis_num_iter=0` in the `.win` input file. The rationale behind this is that in general the projection @@ -319,7 +324,7 @@ spin-noncollinear systems. The SCDM-**k** can operate in two modes: with the correct spatial orientations. However, the spreads of the resulting functions are usually larger than the MLWFs ones. -2. In combination with the Marzari-Vanderbilt (recommended option). In +2. In combination with the Marzari-Vanderbilt (recommended option). In this case, the SCDM-**k** is only used to generate the initial $A_{mn}^{(\mathbf{k})}$ matrices as a replacement scheme for the projection block. @@ -327,7 +332,7 @@ spin-noncollinear systems. The SCDM-**k** can operate in two modes: The following keywords need to be specified in the `pw2wannier90.x` input file `.pw2wan`: -``` +```vi title="Input file" scdm_proj scdm_entanglement scdm_mu @@ -364,7 +369,7 @@ Wannierisation, for such cases, one can inspect the stdout of `pw2wannier90`, which will print the orbitals used for computing `amn`, e.g., -``` +```vi title="Output file" ------------------------------------- *** Compute A with atomic projectors ------------------------------------- @@ -386,46 +391,54 @@ three $p$ orbitals. If one wants to exclude specific orbital(s), there is an additional input `atom_proj_exclude`, which accept a list of integers, e.g., -`atom_proj_exclude = 1 5` +```vi title="Input file" +atom_proj_exclude = 1 5 +``` which will exclude the two $s$ orbitals from computing `amn`. -#### Advanced usage +### Advanced usage If the pseudopotential orbitals are not enough, one could also generate a custom set of orbitals, and ask `pw2wannier90` to use them for computing `amn`. This can be done by setting -`atom_proj_dir = ’./ext_proj’` +```vi title="Input file" +atom_proj_dir = './ext_proj'` +``` where the directory `ext_proj` contains the orbitals for all the atomic species used in the calculation. For example, for a silicon calculation, the directory `ext_proj` should contain a file named `Si.dat`. The format of the file is: -1. The first line contains two integers: the number of radial grid +1. The first line contains two integers: the number of radial grid points ($n_g$) and the number of projectors ($n_p$), e.g., - 1141 2 + ```vi title="Input file" + 1141 2 + ``` which means the radial grid has $n_g = 1141$ points, and there are $n_p = 3$ projectors. -2. The second line contains $n_p$ integers specifying the angular +2. The second line contains $n_p$ integers specifying the angular momentums of all the projectors, e.g., - 0 1 + ```vi title="Input file" + 0 1 + ``` standing for the two projectors having $s$ and $p$ characters, respectively. -3. The rest of the file contains $n_g$ rows of the radial wavefunctions +3. The rest of the file contains $n_g$ rows of the radial wavefunctions of the projectors. There are $2+n_p$ columns: the first column is the $x$-grid, the second column is the $r$-grid in Bohr unit, and they are related by $r = \exp(x)$. The rest are $n_p$ columns of the radial wavefunctions of the projectors, - ``` + ```vi title="Input file" -9.639057329615259 0.000065134426111 3.32211124436945e-05 1.86840239681223e-09 -9.626557329615258 0.000065953716334 3.363898259696903e-05 1.915701228607072e-09 -9.614057329615258 0.000066783311958 3.406210890972733e-05 1.964197436025957e-09 diff --git a/docs/docs/user_guide/wannier90/sample_inputs.md b/docs/docs/user_guide/wannier90/sample_inputs.md index 980d81d7..b9211ded 100644 --- a/docs/docs/user_guide/wannier90/sample_inputs.md +++ b/docs/docs/user_guide/wannier90/sample_inputs.md @@ -2,141 +2,145 @@ ## Master input file: `seedname.win` - num_wann : 4 - mp_grid : 4 4 4 - num_iter : 100 - postproc_setup : true - - begin unit_cell_cart - ang - -1.61 0.00 1.61 - 0.00 1.61 1.61 - -1.61 1.61 0.00 - end unit_cell_cart - - begin atoms_frac - C -0.125 -0.125 -0.125 - C 0.125 0.125 0.125 - end atoms_frac - - bands_plot : true - bands_num_points : 100 - bands_plot_format : gnuplot - - begin kpoint_path - L 0.50000 0.50000 0.50000 G 0.00000 0.00000 0.00000 - G 0.00000 0.00000 0.00000 X 0.50000 0.00000 0.50000 - X 0.50000 0.00000 0.50000 K 0.62500 0.25000 0.62500 - end kpoint_path - - begin projections - C:l=0,l=1 - end projections - - begin kpoints - 0.00 0.00 0.00 - 0.00 0.00 0.25 - 0.00 0.50 0.50 - . - . - . - 0.75 0.75 0.50 - 0.75 0.75 0.75 - end kpoints +```vi title="Input file" +num_wann : 4 +mp_grid : 4 4 4 +num_iter : 100 +postproc_setup : true + +begin unit_cell_cart +ang +-1.61 0.00 1.61 + 0.00 1.61 1.61 +-1.61 1.61 0.00 +end unit_cell_cart + +begin atoms_frac +C -0.125 -0.125 -0.125 +C 0.125 0.125 0.125 +end atoms_frac + +bands_plot : true +bands_num_points : 100 +bands_plot_format : gnuplot + +begin kpoint_path +L 0.50000 0.50000 0.50000 G 0.00000 0.00000 0.00000 +G 0.00000 0.00000 0.00000 X 0.50000 0.00000 0.50000 +X 0.50000 0.00000 0.50000 K 0.62500 0.25000 0.62500 +end kpoint_path + +begin projections +C:l=0,l=1 +end projections + +begin kpoints +0.00 0.00 0.00 +0.00 0.00 0.25 +0.00 0.50 0.50 + . + . + . +0.75 0.75 0.50 +0.75 0.75 0.75 +end kpoints +``` ## `seedname.nnkp` Running `wannier90` on the above input file would generate the following `nnkp` file: - File written on 9Feb2006 at 15:13: 9 - - calc_only_A : F - - begin real_lattice - -1.612340 0.000000 1.612340 - 0.000000 1.612340 1.612340 - -1.612340 1.612340 0.000000 - end real_lattice - - begin recip_lattice - -1.951300 -1.951300 1.951300 - 1.951300 1.951300 1.951300 - -1.951300 1.951300 -1.951300 - end recip_lattice - - begin kpoints - 64 - 0.00000 0.00000 0.00000 - 0.00000 0.25000 0.00000 - 0.00000 0.50000 0.00000 - 0.00000 0.75000 0.00000 - 0.25000 0.00000 0.00000 - . - . - . - 0.50000 0.75000 0.75000 - 0.75000 0.00000 0.75000 - 0.75000 0.25000 0.75000 - 0.75000 0.50000 0.75000 - 0.75000 0.75000 0.75000 - end kpoints - - begin projections - 8 - -0.12500 -0.12500 -0.12500 0 1 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - -0.12500 -0.12500 -0.12500 1 1 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - -0.12500 -0.12500 -0.12500 1 2 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - -0.12500 -0.12500 -0.12500 1 3 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - 0.12500 0.12500 0.12500 0 1 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - 0.12500 0.12500 0.12500 1 1 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - 0.12500 0.12500 0.12500 1 2 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - 0.12500 0.12500 0.12500 1 3 1 - 0.000 0.000 1.000 1.000 0.000 0.000 2.00 - end projections - - begin nnkpts - 8 - 1 2 0 0 0 - 1 4 0 -1 0 - 1 5 0 0 0 - 1 13 -1 0 0 - 1 17 0 0 0 - 1 22 0 0 0 - 1 49 0 0 -1 - 1 64 -1 -1 -1 - 2 1 0 0 0 - 2 3 0 0 0 - 2 6 0 0 0 - 2 14 -1 0 0 - 2 18 0 0 0 - 2 23 0 0 0 - 2 50 0 0 -1 - 2 61 -1 0 -1 - . - . - . - 64 1 1 1 1 - 64 16 0 0 1 - 64 43 0 0 0 - 64 48 0 0 0 - 64 52 1 0 0 - 64 60 0 0 0 - 64 61 0 1 0 - 64 63 0 0 0 - end nnkpts - - begin exclude_bands - 4 - 1 - 2 - 3 - 4 - end exclude_bands +```vi title="Output file" +File written on 9Feb2006 at 15:13: 9 + +calc_only_A : F + +begin real_lattice + -1.612340 0.000000 1.612340 + 0.000000 1.612340 1.612340 + -1.612340 1.612340 0.000000 +end real_lattice + +begin recip_lattice + -1.951300 -1.951300 1.951300 + 1.951300 1.951300 1.951300 + -1.951300 1.951300 -1.951300 +end recip_lattice + +begin kpoints + 64 + 0.00000 0.00000 0.00000 + 0.00000 0.25000 0.00000 + 0.00000 0.50000 0.00000 + 0.00000 0.75000 0.00000 + 0.25000 0.00000 0.00000 + . + . + . + 0.50000 0.75000 0.75000 + 0.75000 0.00000 0.75000 + 0.75000 0.25000 0.75000 + 0.75000 0.50000 0.75000 + 0.75000 0.75000 0.75000 +end kpoints + +begin projections + 8 + -0.12500 -0.12500 -0.12500 0 1 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + -0.12500 -0.12500 -0.12500 1 1 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + -0.12500 -0.12500 -0.12500 1 2 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + -0.12500 -0.12500 -0.12500 1 3 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + 0.12500 0.12500 0.12500 0 1 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + 0.12500 0.12500 0.12500 1 1 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + 0.12500 0.12500 0.12500 1 2 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 + 0.12500 0.12500 0.12500 1 3 1 + 0.000 0.000 1.000 1.000 0.000 0.000 2.00 +end projections + +begin nnkpts + 8 + 1 2 0 0 0 + 1 4 0 -1 0 + 1 5 0 0 0 + 1 13 -1 0 0 + 1 17 0 0 0 + 1 22 0 0 0 + 1 49 0 0 -1 + 1 64 -1 -1 -1 + 2 1 0 0 0 + 2 3 0 0 0 + 2 6 0 0 0 + 2 14 -1 0 0 + 2 18 0 0 0 + 2 23 0 0 0 + 2 50 0 0 -1 + 2 61 -1 0 -1 + . + . + . + 64 1 1 1 1 + 64 16 0 0 1 + 64 43 0 0 0 + 64 48 0 0 0 + 64 52 1 0 0 + 64 60 0 0 0 + 64 61 0 1 0 + 64 63 0 0 0 +end nnkpts + +begin exclude_bands + 4 + 1 + 2 + 3 + 4 +end exclude_bands +``` diff --git a/docs/docs/user_guide/wannier90/transport.md b/docs/docs/user_guide/wannier90/transport.md index b9feaf45..41d1d28f 100644 --- a/docs/docs/user_guide/wannier90/transport.md +++ b/docs/docs/user_guide/wannier90/transport.md @@ -8,7 +8,7 @@ system. The results will be written to files `seedname_qc.dat` and The system for which transport properties are calculated is determined by the keyword `transport_mode`. -### `transport_mode = bulk` +## `transport_mode = bulk` Quantum conductance and density of states are calculated for a perfectly periodic one-dimensional conductor. If @@ -20,7 +20,7 @@ allows the user to provide an external Hamiltonian matrix file Section [Post-Processing](parameters.md#post-processing) for more details of the keywords required for such calculations. -### `transport_mode = lcr` +## `transport_mode = lcr` Quantum conductance and density of states are calculated for a system where semi-infinite, left and right leads are connected through a @@ -29,16 +29,16 @@ the method is described in Ref. [@nardelli-prb99]. In `wannier90` two options exist for performing such calculations: -- If `tran_read_ht = TRUE` the external Hamiltonian files +- If `tran_read_ht = TRUE` the external Hamiltonian files `seedname_htL.dat, seedname_htLC.dat, seedname_htC.dat, seedname_htCR.dat, seedname_htR.dat` are read and used to compute the transport properties. -- If `tran_read_ht = FALSE`, then the transport +- If `tran_read_ht = FALSE`, then the transport calculation is performed automatically using the Wannier functions - as a basis and the 2c2 geometry described in - Section [Automated lcr Transport Calculations: The 2c2 Geometry](#sec:2c2). + as a basis and the 2c2 geometry described in Section + [Automated lcr Transport Calculations: The 2c2 Geometry](#automated-lcr-transport-calculations-the-2c2-geometry). -### Automated lcr Transport Calculations: The 2c2 Geometry {#sec:2c2} +## Automated lcr Transport Calculations: The 2c2 Geometry Calculations using the 2c2 geometry provide a method to calculate the transport properties of an lcr system from a single @@ -49,16 +49,16 @@ rules apply to the system geometry, which is shown in Figure [below](#fig:lcr_2c2). These rules are as follows: -- Left and right leads must be identical and periodic. +- Left and right leads must be identical and periodic. -- Supercell must contain two principal layers (PLs) of lead on the +- Supercell must contain two principal layers (PLs) of lead on the left, a central conductor region and two principal layers of lead on the right. -- The conductor region must contain enough lead such that the disorder +- The conductor region must contain enough lead such that the disorder does not affect the principal layers of lead either side. -- A single **k**-point (Gamma) must be used. +- A single **k**-point (Gamma) must be used.
![lcr_2c2](lcr_2c2.webp){ width="100%" } @@ -88,13 +88,13 @@ function and $g(\mathbf{r})$ are the set of functions: $$ \begin{aligned} g(\mathbf{r})=&\left\lbrace1,\sin\left(\frac{2\pi (x-x_c)}{L_x}\right), - \sin\left(\frac{2\pi (y-y_c)}{L_y}\right), - \sin\left(\frac{2\pi (z-z_c)}{L_z}\right), - \sin\left(\frac{2\pi (x-x_c)}{L_x}\right) - \sin\left(\frac{2\pi (y-y_c)}{L_y}\right),\right.\nonumber \\ - &\left.\sin\left(\frac{2\pi (x-x_c)}{L_x}\right) - \sin\left(\frac{2\pi (z-z_c)}{L_z}\right), - ... \right\rbrace + \sin\left(\frac{2\pi (y-y_c)}{L_y}\right), + \sin\left(\frac{2\pi (z-z_c)}{L_z}\right), + \sin\left(\frac{2\pi (x-x_c)}{L_x}\right) + \sin\left(\frac{2\pi (y-y_c)}{L_y}\right),\right.\nonumber \\ + &\left.\sin\left(\frac{2\pi (x-x_c)}{L_x}\right) + \sin\left(\frac{2\pi (z-z_c)}{L_z}\right), + ... \right\rbrace \label{eq:g(r)} \end{aligned} $$ @@ -126,14 +126,14 @@ Section [`seedname.unkg`](files.md#seednameunkg). Additionally, the following keywords are also required in the input file: -- `tran_num_ll` : The number of Wannier functions in a principal +- `tran_num_ll` : The number of Wannier functions in a principal layer. -- `tran_num_cell_ll` : The number of unit cells in one principal layer +- `tran_num_cell_ll` : The number of unit cells in one principal layer of lead A further parameter related to these calculations is `tran_group_threshold`. -Tutorial of [how 2c2 calculations are preformed](../../tutorials/tutorial_14.md) can be found in the -`wannier90` Tutorial. +Tutorial of [how 2c2 calculations are preformed](../../tutorials/tutorial_14.md) +can be found in the `wannier90` Tutorial. diff --git a/docs/logos/README.md b/docs/logos/README.md index 6d926386..43090578 100644 --- a/docs/logos/README.md +++ b/docs/logos/README.md @@ -1,3 +1,5 @@ -These are the Wannier90 official logos in plain svg and png formats. -The source Inkscape files used to generate the logos are also provided, -these contain both the outlined and the original lato font. +# Wannier90 Logos + +These are the Wannier90 official logos in plain svg and png formats. +The source Inkscape files used to generate the logos are also provided, +these contain both the outlined and the original lato font. diff --git a/tutorials/README.md b/tutorials/README.md index 098a2304..3ee416eb 100644 --- a/tutorials/README.md +++ b/tutorials/README.md @@ -1,27 +1,23 @@ - =================== - WANNIER90 Tutorials - =================== +# WANNIER90 Tutorials -This folder contains all the files needed to run +This folder contains all the files needed to run the Wannier90 Tutorials. The instructions for how to run these may be found at. The tutorials are as follows: -Tutorials with A and M matrices provided ---------------------------------------- +## Tutorials with A and M matrices provided tutorial01: Gallium Arsenide, valence bands tutorial02: Lead, 4 lowest states; Fermi surface tutorial03: Silicon, 4 valence bands + 4 conduction bands; - interpolated bandstructure + interpolated band structure tutorial04: Copper, states around the Fermi level; Fermi surface -Tutorials that use the pw2wannier90 interface with PWSCF -------------------------------------------------------- +## Tutorials that use the pw2wannier90 interface with PWSCF tutorial05: Diamond, valence states @@ -77,6 +73,6 @@ tutorial30: Gallium Arsenide - ac spin Hall conductivity tutorial31: Platinum - Selected columns of density matrix algorithm for spinor wavefunctions -tutorial32: Tungsten - SCDM parameters from projectability +tutorial32: Tungsten - SCDM parameters from projectability -tutorial33: BC2N - Expansion coefficients for kdotp bands +tutorial33: BC2N - Expansion coefficients for kdotp bands