(git:1155b05)
Loading...
Searching...
No Matches
smearing_utils.F File Reference
#include "base/base_uses.f90"

Go to the source code of this file.

Modules

module  smearing_utils
 Unified smearing module supporting four methods: smear_fermi_dirac — Fermi-Dirac distribution smear_gaussian — Gaussian broadening smear_mp — Methfessel-Paxton first order smear_mv — Marzari-Vanderbilt (cold smearing)
 

Functions/Subroutines

subroutine, public smearing_utils::smearocc (f, n, kts, e, mu, sigma, maxocc, method, estate, festate)
 Returns occupations and smearing correction for a given set of energies and chemical potential, using one of four smearing methods.
 
subroutine, public smearing_utils::smearfixed (f, mu, kts, e, n, sigma, maxocc, method, estate, festate)
 Bisection search for the chemical potential mu such that the total electron count equals N, for a given smearing method (Gamma point). Brackets mu by expanding outward from [min(e), max(e)] in steps of sigma, then bisects to machine precision. Could fail if mu lies far outside the eigenvalue range (to be fixed).
 
subroutine, public smearing_utils::smearkp (f, mu, kts, e, nel, wk, sigma, maxocc, method)
 Bisection search for mu given a target electron count (k-point case, single spin channel or spin-degenerate). Initial bracket width is max(10*sigma, 0.5) for Gaussian/MP/MV, or sigma*ln[(1-eps)/eps] for Fermi-Dirac, reflecting the different tail decay rates.
 
subroutine, public smearing_utils::smearkp2 (f, mu, kts, e, nel, wk, sigma, method)
 Bisection search for mu (k-point, spin-polarised with a shared chemical potential across both spin channels). Asserts that the third dimension of f and e is exactly 2.
 
subroutine, public smearing_utils::smearfixedderiv (dfde, f, mu, kts, e, n, sigma, maxocc, method, estate, festate)
 Analytical Jacobian df_i/de_j for any smearing method under the electron-number constraint sum(f) = N.
 
subroutine, public smearing_utils::smearfixedderivmv (result, f, mu, kts, e, n_el, sigma, maxocc, method, v, estate, festate)
 Apply TRANSPOSE(df/de) to a vector WITHOUT forming the full N x N Jacobian. O(N) time and O(N) memory for all four methods.