From e9de9f52d358942d38a07346bd4184ed4d8ff5a0 Mon Sep 17 00:00:00 2001 From: Peteracn96 Date: Mon, 29 Sep 2025 16:50:04 +0200 Subject: [PATCH 01/15] Adds initial info about the screening through the dielectric function. --- docs/source/methods/screening.rst | 32 ++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/source/methods/screening.rst b/docs/source/methods/screening.rst index a5db98e..04fc27b 100644 --- a/docs/source/methods/screening.rst +++ b/docs/source/methods/screening.rst @@ -13,6 +13,14 @@ These govern the electron–hole interaction and are used to build the interacti :local: :depth: 2 +Xatu also supports three interaction potentials in reciprocal space to compute the interaction matrix elements: + +1. **Bare Coulomb potential** +2. **Rytova–Keldysh potential** +3. **Numerical RPA screened potential** + +These potentials model the electron–hole interaction in momentum space through the 2D Fourier transform of the real-space potentials: Coulomb, Rytova–Keldysh and the screened potential with discrete translation symmetry. + Coulomb Potential =================== @@ -56,4 +64,26 @@ Anisotropic Screening Xatu supports anisotropic screening in the Rytova–Keldysh model by allowing directional dependence in the screening length. This is implemented by constructing an effective vector :math:`\mathbf{r}_0 = (r_{0}^{x}, r_{0}^{y}, r_{0}^{z})` , and rescaling the coordinates accordingly. -This allows the screening environment to be tuned independently along in-plane and out-of-plane directions -- a generalization that extends beyond conventional isotropic models. \ No newline at end of file +This allows the screening environment to be tuned independently along in-plane and out-of-plane directions -- a generalization that extends beyond conventional isotropic models. + +Numerical RPA Screened Potential +================================= + +Xatu can compute the microscopic RPA dielectric function + +.. math:: + \varepsilon_{\bm{G}\bm{G}'}(\bm{q}) = \delta_{\bm{G}\bm{G}'} - v_c(\bm{q}+\bm{G}) \chi^0_{\bm{G}\bm{G}'}(\bm{q}) , + +with a symmetrization operation :math:`\varepsilon_{\bm{G}\bm{G}'}(\bm{q}) \to \varepsilon_{\bm{G}\bm{G}'}(\bm{q}) \times \sqrt{v_c(\bm{q}+\bm{G})/v_c(\bm{q}+\bm{G}')}`, :math:`v_c(\bm{q})` is the 2D Fourier transform of the Coulomb potential given by + +.. math:: + v_c(\bm{q}) = \frac{e^2}{2 \pi \varepsilon_0 |\bm{q}|}\,, + + +and :math:`\chi^0` is the independent-particle polarizability (or the irreducible polarizability within RPA), which for time-reversal symmetric systems is given by + +.. math:: + \chi^0_{\bm{G}\bm{G}'}(\bm{q}) = \frac{2}{A} \sum_{vc,\bm{k} \sigma} \frac{\langle c,\bm{k}| e^{-i(\bm{q}+\bm{G})\cdot\bm{r}}|v,\bm{k}+\bm{q}\rangle \langle v,\bm{k}+\bm{q}| e^{i(\bm{q}+\bm{G}')\cdot\bm{r}}|c,\bm{k}\rangle^*}{\epsilon_{v,\bm{k} + \bm{q}} - \epsilon_{c,\bm{k}} }\,. + + +The matrix elements in the sum are computed for Bloch states written within the linear combination of atomic orbitals (LCAO) approximation, and in the point-like orbital approximation. \ No newline at end of file From 02de99c1fa2b60aaae211dda7a176625f1946df1 Mon Sep 17 00:00:00 2001 From: Peteracn96 Date: Sun, 24 May 2026 17:36:24 +0200 Subject: [PATCH 02/15] Small changes. --- docs/source/methods/screening.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/methods/screening.rst b/docs/source/methods/screening.rst index 04fc27b..4b34f98 100644 --- a/docs/source/methods/screening.rst +++ b/docs/source/methods/screening.rst @@ -72,15 +72,15 @@ Numerical RPA Screened Potential Xatu can compute the microscopic RPA dielectric function .. math:: - \varepsilon_{\bm{G}\bm{G}'}(\bm{q}) = \delta_{\bm{G}\bm{G}'} - v_c(\bm{q}+\bm{G}) \chi^0_{\bm{G}\bm{G}'}(\bm{q}) , + \varepsilon_{\bm{G}\bm{G}'}(\bm{q}) = \delta_{\bm{G}\bm{G}'} - \sqrt{v_c(\bm{q}+\bm{G})} \chi^0_{\bm{G}\bm{G}'}(\bm{q}) \sqrt{v_c(\bm{q}+\bm{G}'')}, -with a symmetrization operation :math:`\varepsilon_{\bm{G}\bm{G}'}(\bm{q}) \to \varepsilon_{\bm{G}\bm{G}'}(\bm{q}) \times \sqrt{v_c(\bm{q}+\bm{G})/v_c(\bm{q}+\bm{G}')}`, :math:`v_c(\bm{q})` is the 2D Fourier transform of the Coulomb potential given by +in its symmetric form, where :math:`v_c(\bm{q})` is the 2D Fourier transform of the Coulomb potential given by .. math:: - v_c(\bm{q}) = \frac{e^2}{2 \pi \varepsilon_0 |\bm{q}|}\,, + v_c(\bm{q}) = \frac{e}{2 \varepsilon_0 |\bm{q}|}\,, -and :math:`\chi^0` is the independent-particle polarizability (or the irreducible polarizability within RPA), which for time-reversal symmetric systems is given by +and :math:`\chi^0` is the independent-particle polarizability (or the irreducible polarizability within RPA), which for gapped time-reversal symmetric systems is given by .. math:: \chi^0_{\bm{G}\bm{G}'}(\bm{q}) = \frac{2}{A} \sum_{vc,\bm{k} \sigma} \frac{\langle c,\bm{k}| e^{-i(\bm{q}+\bm{G})\cdot\bm{r}}|v,\bm{k}+\bm{q}\rangle \langle v,\bm{k}+\bm{q}| e^{i(\bm{q}+\bm{G}')\cdot\bm{r}}|c,\bm{k}\rangle^*}{\epsilon_{v,\bm{k} + \bm{q}} - \epsilon_{c,\bm{k}} }\,. From 4f40a2dd6b6847afc9dac1d71f74abac27e5ca71 Mon Sep 17 00:00:00 2001 From: Peteracn96 Date: Sat, 6 Jun 2026 14:10:57 +0200 Subject: [PATCH 03/15] Adds info about screening file format. --- docs/source/input_files.rst | 49 +++++++++++++++++++++++++++---- docs/source/methods/screening.rst | 4 +-- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/docs/source/input_files.rst b/docs/source/input_files.rst index 8d51321..e054bad 100644 --- a/docs/source/input_files.rst +++ b/docs/source/input_files.rst @@ -25,21 +25,21 @@ to determine the dimensionality of the system. The expected format is one vector **# Filling:** Total number of electrons in the unit cell. Required to identify the Fermi level, which is the reference point in the construction of the excitons. Must be an integer number. -**# BravaisVectors:** List of Bravais vectors :math:`\mathbf{R}` that participate in the construction of the Bloch Hamiltonian. Expected one per line, in format ``x y z``. +**# BravaisVectors:** List of Bravais vectors :math:`\bm{R}` that participate in the construction of the Bloch Hamiltonian. Expected one per line, in format ``x y z``. -**# FockMatrices:** Matrices :math:`H(\mathbf{R})` that construct the Bloch Hamiltonian :math:`H(\mathbf{k})` . The matrices must +**# FockMatrices:** Matrices :math:`H(\bm{R})` that construct the Bloch Hamiltonian :math:`H(\bm{k})` . The matrices must be fully defined, i.e., they cannot be triangular, since the code does not use hermiticity to generate the Bloch Hamiltonian. The Fock matrices given must follow the ordering given in the block `BravaisVectors`. The matrices can be real or complex, and each one must be separated from the next using the delimiter `&`. In case the matrices are complex, the real and imaginary parts must be separated by a space, and the complex part must carry the imaginary umber symbol (e.g. $1.5 −2.1j$ ). Both $i$ and $j$ can be used. Optional Blocks --------------- -**# [OverlapMatrices]:** In case that the orbitals used are not orthonormal, one can optionally provide the overlap matrices :math:`S(\mathbf{R})`. The overlap in $k$ space is given by: +**# [OverlapMatrices]:** In case that the orbitals used are not orthonormal, one can optionally provide the overlap matrices :math:`S(\bm{R})`. The overlap in $k$ space is given by: .. math:: S(\bm{k}) = \sum_{\bm{R}}S(\bm{R})e^{i\bm{k}\cdot\bm{R}} -This is necessary to be able to reproduce the bands, which come from solving the generalized eigenvalue problem :math:`H(\mathbf{k})S(\mathbf{k})\Psi = ES(\mathbf{k})\Psi`. This will be specially necessary if the system was determined using DFT, since in tight-binding we usually assume orthonormality. This block follows the same rules as FockMatrices: each matrix :math:`S(\mathbf{R})` must be separated with the delimiter `&`, and they must follow the order given in `BravaisVectors`. +This is necessary to be able to reproduce the bands, which come from solving the generalized eigenvalue problem :math:`H(\bm{k})S(\bm{k})\Psi = ES(\bm{k})\Psi`. This will be specially necessary if the system was determined using DFT, since in tight-binding we usually assume orthonormality. This block follows the same rules as FockMatrices: each matrix :math:`S(\bm{R})` must be separated with the delimiter `&`, and they must follow the order given in `BravaisVectors`. DFT Hamiltonians (CRYSTAL and Wannier90) ======================================== @@ -99,7 +99,7 @@ Optional Blocks **# [ShiftMesh]:** Center submesh at ``kx ky kz`` provided. -**# [TotalMomentum]:** Exciton total center-of-mass momentum :math:`\mathbf{Q}`, expects a vector ``qx qy qz``. Defaults to zero. +**# [TotalMomentum]:** Exciton total center-of-mass momentum :math:`\bm{Q}`, expects a vector ``qx qy qz``. Defaults to zero. **# [Reciprocal]:** calculates interaction matrix elements in reciprocal space; It takes an integer argument to specify the number of reciprocal cells to sum over, ``nG``. @@ -113,6 +113,45 @@ Optional Blocks **# [Regularization]:** Set the regularization distance used in the real-space method to avoid the electrostatic divergence at $r = 0$ by setting $V (0) = V (a)$, where a is the regularization distance. By default this parameter is set to the unit cell lattice parameter. It is advised to be changed only for supercell calculations. +Screening File Format +===================== + +This file defines how the microscopic dielectric screening is computed and which parameters to use. It uses the same block-based syntax as the exciton file. Currently, if a screening file is provided, then an exciton file must be provided as well. + +Key Blocks +---------- + +**# ncells_aux**: Number of unit cells/kpoints, in each direction, of the auxiliary BZ mesh to compute the polarizability matrix element(s). + +**# valence.bands:** Number of valence bands included in the calculations. + +**# conduction.bands:** Number of conduction bands included in the calculations. + +**# spin:** Indicates whether if the spin degree of freedom has been considered in the system model or not (`true` or `false`). + +**# gcutoff:** Defines the cutoff ``Gcutoff`` for the reciprocal lattice vectors to be included in the calculation of the dielectric matrix. Defaults to `2.5`. + +**# function:** Specifies which functionality of the screening the user intends. It can be `dielectric`, `polarizability`, `inversedielectric` or `exciton`. + +.. hlist:: + :columns: 1 + + * **dielectric** Computes the dielectric function at a specified momentum and for a chosen matrix element. The values of the polarizability as a function of included valence and conduction bands are computed and printed in a file named `polarizability_convergence.dat`. Each line of the file has the form ``[# valence bands] [# conduction bands] [Re{χ}] [Im{χ}]``. + * **polarizability** Computes the polarizability matrix element :math:`\chi_{\bm{G}\bm{G}'}` for the specified pair :math:`\bm{G}`, :math:`\bm{G}'` in the BZ mesh. The values are printed to the `polarizability_mesh.dat` file, and each line of the file has the structure ``[kx] [ky] [kz] [Re{χ}] [Im{χ}]``. Currently works only for 2D materials, whence `kz = 0` at all times. + * **inversedielectric** Computes the inverse of the dielectric matrix :math:`\varepsilon^{-1}(\bm{q})` at the specified momentum. The matrix elements are printed to the file `epsilon.dat`. The order of the `G` vectors is the same as the one they appear by when printed to `stdout` when this option is used. Each row in the file has the real and imaginary parts of each matrix element printed separately separated by a space (and conserving the order of the `G` vectors). + * **exciton** Computes the inverse of the dielectric matrix in the BZ mesh, and proceeds with the calculation of the exciton. A file containing all the points in the BZ mesh is generated. The file has a name of the form `kgrid_.dat`, where `ncells` is the number of cells in each direction, specified in the exciton file. The object :math:`\epsilon^{-1}(\bm{q})` is printed to the file `