# PEXSI

References: Lin2009, Lin2013

Specifies the parameters of the PEXSI library. The density matrix is calculated with PEXSI if PURIFICATION_METHOD (in LS_SCF section) is set to PEXSI. The computational cost of PEXSI is at most quadratically scaling w.r.t. the system size and PEXSI is applicable to insulating and metallic systems. The value of EPS_PGF_ORB (in QS input section) defines the sparsity of the matrices sent to PEXSI and EPS_FILTER is overwritten with 0. [Edit on GitHub]

## Keywords

- CSR_SCREENING

- GAP

- IS_INERTIA_COUNT

- MAX_PEXSI_ITER

- MIN_RANKS_PER_POLE

- MU_INERTIA_EXPANSION

- MU_INERTIA_TOLERANCE

- MU_MAX_0

- MU_MIN_0

- MU_PEXSI_SAFE_GUARD

- NP_SYMB_FACT

- NUM_ELECTRON_INITIAL_TOLERANCE

- NUM_ELECTRON_PEXSI_TOLERANCE

- NUM_POLE

- ORDERING

- ROW_ORDERING

- TEMPERATURE

- VERBOSITY

## Keyword descriptions

CSR_SCREENING: logical = T

  Lone keyword: `T`

  Whether distance screening should be applied to improve sparsity of CSR matrices. [Edit on GitHub]

GAP: real = 0.00000000E+000 [hartree]

  Spectral gap. Note: This can be set to be 0 in most cases. [Edit on GitHub]

IS_INERTIA_COUNT: logical = F

  Lone keyword: `T`

  Whether inertia counting is used each time the DFT driver of PEXSI is invoked. If FALSE, inertia counting is still used in the first SCF iteration. [Edit on GitHub]

MAX_PEXSI_ITER: integer = 5

  Maximum number of PEXSI iterations after each inertia counting procedure. [Edit on GitHub]

MIN_RANKS_PER_POLE: integer = 64

  The minimum number of processors used for each pole. The real number of processors per pole is the smallest number greater or equal to MIN_RANKS_PER_POLE that divides MPI size without remainder. For efficiency, MIN_RANKS_PER_POLE should be a small numbers (limited by the available memory). [Edit on GitHub]

MU_INERTIA_EXPANSION: real = 1.50000000E-001 [hartree]

  If the chemical potential is not in the initial interval, the interval is expanded by MU_INERTIA_EXPANSION. [Edit on GitHub]

MU_INERTIA_TOLERANCE: real = 1.00000000E-002 [hartree]

  Stopping criterion in terms of the chemical potential for the inertia counting procedure. [Edit on GitHub]

MU_MAX_0: real = 5.00000000E+000 [hartree]

  Initial guess of upper bound for mu. [Edit on GitHub]

MU_MIN_0: real = -5.00000000E+000 [hartree]

  Initial guess of lower bound for mu. [Edit on GitHub]

MU_PEXSI_SAFE_GUARD: real = 1.00000000E-002 [hartree]

  Safe guard criterion in terms of the chemical potential to reinvoke the inertia counting procedure. [Edit on GitHub]

NP_SYMB_FACT: integer = 1

  Number of processors for PARMETIS/PT-SCOTCH. Only used if ORDERING is set to PARALLEL. If 0, the number of processors for PARMETIS/PT-SCOTCH will be set equal to the number of MPI ranks per pole. Note: if more than one processor is used, a segmentation fault may occur in the symbolic factorization phase. [Edit on GitHub]

NUM_ELECTRON_INITIAL_TOLERANCE: real = 0.00000000E+000

  The same as NUM_ELECTRON_PEXSI_TOLERANCE but applied in the first SCF steps. If set to a value smaller than NUM_ELECTRON_PEXSI_TOLERANCE, it is overwritten with NUM_ELECTRON_PEXSI_TOLERANCE (default). If set to a value larger than NUM_ELECTRON_PEXSI_TOLERANCE, the PEXSI tolerance in number of electrons is set adaptively according to the SCF convergence error of the previous SCF step. This reduces the number of PEXSI iterations in the first SCF steps but leads to at least one more SCF step. [Edit on GitHub]

NUM_ELECTRON_PEXSI_TOLERANCE: real = 1.00000000E-001

  Stopping criterion of the PEXSI iteration in terms of The number of electrons compared to the exact number of electrons. This threshold is the target tolerance applied at convergence of SCF. [Edit on GitHub]

NUM_POLE: integer = 64

  Number of terms in the pole expansion (should be even). [Edit on GitHub]

ORDERING: enum = PARALLEL

  Valid values:

  - `PARALLEL` Parallel ordering using ParMETIS/PT-SCOTCH (PARMETIS option in SuperLU_DIST)

  - `SEQUENTIAL` Sequential ordering using METIS (METIS_AT_PLUS_A option in SuperLU_DIST)

  - `MULTIPLE_MINIMUM_DEGREE` Multiple minimum degree ordering (MMD_AT_PLUS_A option in SuperLU_DIST)

  Ordering strategy for factorization and selected inversion. [Edit on GitHub]

ROW_ORDERING: enum = NOROWPERM

  Valid values:

  - `NOROWPERM` No row permutation (NOROWPERM option in SuperLU_DIST)

  - `LARGEDIAG` Make diagonal entry larger than off diagonal (LargeDiag option in SuperLU_DIST)

  row permutation strategy for factorization and selected inversion. [Edit on GitHub]

TEMPERATURE: real = 3.00000000E+002 [K]

  Electronic temperature [Edit on GitHub]

VERBOSITY: enum = BASIC

  Valid values:

  - `SILENT`

  - `BASIC`

  - `DETAILED`

  The level of output information. [Edit on GitHub]