# ALMO_OPTIMIZER_PCG

Controls the PCG optimization of block-diagonal ALMOs. [Edit on GitHub]

## Keywords

- CONJUGATOR

- EPS_ERROR

- EPS_ERROR_EARLY

- LIN_SEARCH_EPS_ERROR

- LIN_SEARCH_STEP_SIZE_GUESS

- MAX_ITER

- MAX_ITER_EARLY

- MAX_ITER_OUTER_LOOP

- PRECONDITIONER

- PRECOND_FILTER_THRESHOLD

## Keyword descriptions

CONJUGATOR: enum = HAGER_ZHANG

  Usage: CONJUGATOR POLAK_RIBIERE

  Valid values:

  - `ZERO` Steepest descent

  - `POLAK_RIBIERE` Polak and Ribiere

  - `FLETCHER_REEVES` Fletcher and Reeves

  - `HESTENES_STIEFEL` Hestenes and Stiefel

  - `FLETCHER` Fletcher (Conjugate descent)

  - `LIU_STOREY` Liu and Storey

  - `DAI_YUAN` Dai and Yuan

  - `HAGER_ZHANG` Hager and Zhang

  Various methods to compute step directions in the PCG optimization [Edit on GitHub]

EPS_ERROR: real = 1.00000000E-005

  Usage: EPS_ERROR 1.E-6

  Target value of the MAX norm of the error [Edit on GitHub]

EPS_ERROR_EARLY: real = -1.00000000E+000

  Usage: EPS_ERROR_EARLY 1.E-2

  Target value of the MAX norm of the error for truncated SCF (e.g. Langevin-corrected MD). Negative values mean that this keyword is not used. [Edit on GitHub]

LIN_SEARCH_EPS_ERROR: real = 1.00000000E-003

  Usage: LIN_SEARCH_EPS_ERROR 1.E-2

  Target value of the gradient norm during the linear search [Edit on GitHub]

LIN_SEARCH_STEP_SIZE_GUESS: real = 1.00000000E+000

  Usage: LIN_SEARCH_STEP_SIZE_GUESS 0.1

  The size of the first step in the linear search [Edit on GitHub]

MAX_ITER: integer = 20

  Usage: MAX_ITER 100

  Maximum number of iterations [Edit on GitHub]

MAX_ITER_EARLY: integer = -1

  Usage: MAX_ITER_EARLY 5

  Maximum number of iterations for truncated SCF (e.g. Langevin-corrected MD). Negative values mean that this keyword is not used. [Edit on GitHub]

MAX_ITER_OUTER_LOOP: integer = 0

  Usage: MAX_ITER_OUTER_LOOP 10

  Maximum number of iterations in the outer loop. Use the outer loop to update the preconditioner and reset the conjugator. This can speed up convergence significantly. [Edit on GitHub]

PRECONDITIONER: enum = DEFAULT

  Usage: PRECONDITIONER DOMAIN

  Valid values:

  - `NONE` Do not use preconditioner

  - `DEFAULT` Same as DOMAIN preconditioner

  - `DOMAIN` Invert preconditioner domain-by-domain. The main component of the linear scaling algorithm

  - `FULL` Solve linear equations step=-H.grad on the entire space

  Select a preconditioner for the conjugate gradient optimization [Edit on GitHub]

PRECOND_FILTER_THRESHOLD: real = -1.00000000E+000

  Usage: PRECOND_FILTER_THRESHOLD 0.1

  Select eigenvalues of the preconditioner that are smaller than the threshold and project out the corresponding eigenvectors from the gradient. No matter how large the threshold is the maximum number of projected eienvectors for a fragment equals to the number of occupied orbitals of fragment’s neighbors. [Edit on GitHub]