|
| subroutine, public | smear_init (this, namespace, ispin, fixed_occ, integral_occs, kpoints) |
| |
| subroutine, public | smear_copy (to, from) |
| |
| subroutine, public | smear_find_fermi_energy (this, namespace, eigenvalues, occupations, qtot, nik, nst, kweights) |
| |
| subroutine | bisection_find_fermi_energy (this, namespace, dsmear_in, tol, eigenvalues, kweights, nik, q_in, start_band, end_band, e_fermi, ef_occ) |
| |
| subroutine | bisection_find_fermi_energy_tetra (this, namespace, tol, eigenvalues, nik, nst, q_in, e_fermi) |
| | Finds the Fermi energy using the tetrahedron method via bisection. More...
|
| |
| subroutine, public | smear_fill_occupations (this, eigenvalues, occupations, kweights, nik, nst) |
| |
| real(real64) function, public | smear_calc_entropy (this, eigenvalues, nik, nst, kweights, occ) |
| |
| real(real64) function, public | smear_delta_function (this, xx) |
| |
| real(real64) function, public | smear_step_function (this, xx) |
| |
| real(real64) function, public | smear_entropy_function (this, xx) |
| | This function is defined as \( \int_{-infty}^x y delta(y) dy \). More...
|
| |
| logical pure function, public | smear_is_semiconducting (this) |
| |
| subroutine, public | smear_write_info (this, namespace, iunit) |
| |
|
| integer, parameter, public | smear_semiconductor = 1 |
| |
| integer, parameter, public | smear_fermi_dirac = 2 |
| |
| integer, parameter, public | smear_cold = 3 |
| |
| integer, parameter, public | smear_methfessel_paxton = 4 |
| |
| integer, parameter, public | smear_spline = 5 |
| |
| integer, parameter, public | smear_fixed_occ = 6 |
| |
| integer, parameter, public | smear_gaussian = 7 |
| |
| integer, parameter, public | smear_lorentzian = 8 |
| |
| integer, parameter, public | smear_tetrahedra = 21 |
| |
| integer, parameter, public | smear_tetrahedra_opt = 22 |
| |
| real(real64), parameter | tol_smear = 1e-6_real64 |
| |
| subroutine smear_oct_m::bisection_find_fermi_energy_tetra |
( |
type(smear_t), intent(inout) |
this, |
|
|
type(namespace_t), intent(in) |
namespace, |
|
|
real(real64), intent(in) |
tol, |
|
|
real(real64), dimension(:,:), intent(in) |
eigenvalues, |
|
|
integer, intent(in) |
nik, |
|
|
integer, intent(in) |
nst, |
|
|
real(real64), intent(in) |
q_in, |
|
|
real(real64), intent(out) |
e_fermi |
|
) |
| |
|
private |
Finds the Fermi energy using the tetrahedron method via bisection.
This subroutine determines the Fermi energy by iteratively adjusting the energy range using the bisection method. At each iteration, it calculates the total charge corresponding to the current trial Fermi energy using the tetrahedron method and compares it with the desired charge q_in.
- Parameters
-
| [in,out] | this | Smearing object containing tetrahedron mesh information |
| [in] | namespace | Namespace for error messages |
| [in] | tol | Convergence tolerance for charge comparison |
| [in] | eigenvalues | Array of eigenvalues (nst, nik) |
| [in] | nik | Number of k-points |
| [in] | nst | Number of states |
| [in] | q_in | Desired total charge |
| [out] | e_fermi | Calculated Fermi energy output |
- Note
- This subroutine uses OpenMP parallelization for performance
-
Requires an associated tetrahedron simplex mesh (
this%tetra_simplex)
-
Maximum iterations: 200 (
nitmax parameter)
Definition at line 584 of file smear.F90.