# RESPONSE_SOLVER

References: VandeVondele2012

Specifies the parameters of the linear scaling solver routines [Edit on GitHub]

## Keywords

- EPS

- EPS_FILTER

- EPS_LANCZOS

- MATRIX_CLUSTER_TYPE

- MAX_ITER

- MAX_ITER_LANCZOS

- METHOD

- PRECONDITIONER

- RESTART

- RESTART_EVERY

- S_INVERSION

- S_PRECONDITIONER

- S_SQRT_METHOD

- S_SQRT_ORDER

## Keyword descriptions

EPS: real = 1.00000000E-012

  Usage: EPS 1.e-10

  Target accuracy for the convergence of the conjugate gradient. [Edit on GitHub]

EPS_FILTER: real = 1.00000000E-010

  Usage: EPS_FILTER 1.0E-10

  Threshold used for filtering matrix operations. [Edit on GitHub]

EPS_LANCZOS: real = 1.00000000E-003

  Usage: EPS_LANCZOS 1.0E-4

  Threshold used for lanczos estimates. [Edit on GitHub]

MATRIX_CLUSTER_TYPE: enum = ATOMIC

  Usage: MATRIX_CLUSTER_TYPE MOLECULAR

  Valid values:

  - `ATOMIC` Using atomic blocks

  - `MOLECULAR` Using molecular blocks.

  Specify how atomic blocks should be clustered in the used matrices, in order to improve flop rate, and possibly speedup the matrix multiply. Note that the atomic s_preconditioner can not be used. Furthermore, since screening is on matrix blocks, slightly more accurate results can be expected with molecular. [Edit on GitHub]

MAX_ITER: integer = 50

  Usage: MAX_ITER 200

  Maximum number of conjugate gradient iteration to be performed for one optimization. [Edit on GitHub]

MAX_ITER_LANCZOS: integer = 128

  Usage: MAX_ITER_LANCZOS 128

  Maximum number of lanczos iterations. [Edit on GitHub]

METHOD: enum = AO_ORTHO

  Usage: METHOD SOLVER

  Valid values:

  - `MO_SOLVER` Solver based on MO (vector) formalism

  - `AO_ORTHO` Solver based on density matrix formalism

  Algorithm used to solve response equation. Both solver are conjugate gradient based, but use either a vector (MO-coefficient) or density matrix formalism in the orthonormal AO-basis to obtain response density [Edit on GitHub]

PRECONDITIONER: enum = MULTI_LEVEL

  Usage: PRECONDITIONER FULL_ALL

  Valid values:

  - `FULL_ALL` Most effective state selective preconditioner based on diagonalization, requires the ENERGY_GAP parameter to be an underestimate of the HOMO-LUMO gap. This preconditioner is recommended for almost all systems, except very large systems where make_preconditioner would dominate the total computational cost.

  - `FULL_SINGLE_INVERSE` Based on H-eS cholesky inversion, similar to FULL_SINGLE in preconditioning efficiency but cheaper to construct, might be somewhat less robust. Recommended for large systems.

  - `FULL_SINGLE` Based on H-eS diagonalisation, not as good as FULL_ALL, but somewhat cheaper to apply.

  - `FULL_KINETIC` Cholesky inversion of S and T, fast construction, robust, and relatively good, use for very large systems.

  - `FULL_S_INVERSE` Cholesky inversion of S, not as good as FULL_KINETIC, yet equally expensive.

  - `MULTI_LEVEL` Based on same CG as AO-solver itself, but uses cheaper linear transformation

  - `NONE` skip preconditioning

  Type of preconditioner to be used with MO conjugate gradient solver. They differ in effectiveness, cost of construction, cost of application. Properly preconditioned minimization can be orders of magnitude faster than doing nothing. Only multi-level conjugate gradient preconditioner (MULTI_LEVEL) available for AO response solver (AO_ORTHO). [Edit on GitHub]

RESTART: logical = F

  Lone keyword: `T`

  Usage: RESTART

  Restart the response calculation if the restart file exists [Edit on GitHub]

RESTART_EVERY: integer = 50

  Usage: RESTART_EVERY 50

  Restart the conjugate gradient after the specified number of iterations. [Edit on GitHub]

S_INVERSION: enum = SIGN_SQRT

  Usage: S_INVERSION MOLECULAR

  Valid values:

  - `SIGN_SQRT` Using the inverse sqrt as obtained from sign function iterations.

  - `HOTELLING` Using the Hotellign iteration.

  Method used to compute the inverse of S. [Edit on GitHub]

S_PRECONDITIONER: enum = ATOMIC

  Usage: S_PRECONDITIONER MOLECULAR

  Valid values:

  - `NONE` No preconditioner

  - `ATOMIC` Using atomic blocks

  - `MOLECULAR` Using molecular sub-blocks. Recommended if molecules are defined and not too large.

  Preconditions S with some appropriate form. [Edit on GitHub]

S_SQRT_METHOD: enum = NEWTONSCHULZ

  Usage: S_SQRT_METHOD NEWTONSCHULZ

  Valid values:

  - `NEWTONSCHULZ` Using a Newton-Schulz-like iteration

  - `PROOT` Using the p-th root method.

  Method for the caclulation of the sqrt of S. [Edit on GitHub]

S_SQRT_ORDER: integer = 3

  Aliases: SIGN_SQRT_ORDER

  Usage: S_SQRT_ORDER 3

  Order of the iteration method for the calculation of the sqrt of S. [Edit on GitHub]