# OT

References: VandeVondele2003, Weber2008

Sets the various options for the orbital transformation (OT) method. Default settings already provide an efficient, yet robust method. Most systems benefit from using the FULL_ALL preconditioner combined with a small value (0.001) of ENERGY_GAP. Well-behaved systems might benefit from using a DIIS minimizer.

Advantages: It’s fast, because no expensive diagonalisation is performed. If preconditioned correctly, method guaranteed to find minimum.

Disadvantages: Sensitive to preconditioning. A good preconditioner can be expensive. No smearing, or advanced SCF mixing possible: POOR convergence for metallic systems. [Edit on GitHub]

## Keywords

- SECTION_PARAMETERS

- ALGORITHM

- BROYDEN_ADAPTIVE_SIGMA

- BROYDEN_BETA

- BROYDEN_ENABLE_FLIP

- BROYDEN_ETA

- BROYDEN_FORGET_HISTORY

- BROYDEN_GAMMA

- BROYDEN_OMEGA

- BROYDEN_SIGMA

- BROYDEN_SIGMA_DECREASE

- BROYDEN_SIGMA_MIN

- CHOLESKY

- ENERGIES

- ENERGY_GAP

- EPS_IRAC

- EPS_IRAC_FILTER_MATRIX

- EPS_IRAC_QUICK_EXIT

- EPS_IRAC_SWITCH

- EPS_TAYLOR

- GOLD_TARGET

- IRAC_DEGREE

- LINESEARCH

- MAX_IRAC

- MAX_SCF_DIIS

- MAX_TAYLOR

- MINIMIZER

- NONDIAG_ENERGY

- NONDIAG_ENERGY_STRENGTH

- N_HISTORY_VEC

- OCCUPATION_PRECONDITIONER

- ON_THE_FLY_LOC

- ORTHO_IRAC

- PRECONDITIONER

- PRECOND_SOLVER

- ROTATION

- SAFE_DIIS

- STEPSIZE

## Keyword descriptions

SECTION_PARAMETERS: logical = F

  Lone keyword: `T`

  Usage: &OT T

  controls the activation of the ot method [Edit on GitHub]

ALGORITHM: enum = STRICT

  Usage: ALGORITHM STRICT

  Valid values:

  - `STRICT` Strict orthogonality: Taylor or diagonalization based algorithm.

  - `IRAC` Orbital Transformation based Iterative Refinement of the Approximative Congruence transformation (OT/IR).

  References: VandeVondele2003, VandeVondele2005, Weber2008

  Algorithm to be used for OT [Edit on GitHub]

BROYDEN_ADAPTIVE_SIGMA: logical = T

  Lone keyword: `T`

  Usage: BROYDEN_ADAPTIVE_SIGMA ON

  Enable adaptive curvature estimation [Edit on GitHub]

BROYDEN_BETA: real = 9.00000000E-001

  Usage: BROYDEN_BETA 0.9

  Underrelaxation for the broyden mixer [Edit on GitHub]

BROYDEN_ENABLE_FLIP: logical = T

  Lone keyword: `T`

  Usage: BROYDEN_ENABLE_FLIP ON

  Ensure positive definite update [Edit on GitHub]

BROYDEN_ETA: real = 7.00000000E-001

  Usage: BROYDEN_ETA 0.7

  Dampening of estimated energy curvature. [Edit on GitHub]

BROYDEN_FORGET_HISTORY: logical = F

  Lone keyword: `T`

  Usage: BROYDEN_FORGET_HISTORY OFF

  Forget history on bad approximation [Edit on GitHub]

BROYDEN_GAMMA: real = 5.00000000E-001

  Usage: BROYDEN_GAMMA 0.5

  Backtracking parameter [Edit on GitHub]

BROYDEN_OMEGA: real = 1.10000000E+000

  Usage: BROYDEN_OMEGA 1.1

  Growth limit of curvature. [Edit on GitHub]

BROYDEN_SIGMA: real = 2.50000000E-001

  Usage: BROYDEN_SIGMA 0.25

  Curvature of energy functional. [Edit on GitHub]

BROYDEN_SIGMA_DECREASE: real = 7.00000000E-001

  Usage: BROYDEN_SIGMA_DECREASE 0.7

  Reduction of curvature on bad approximation. [Edit on GitHub]

BROYDEN_SIGMA_MIN: real = 5.00000000E-002

  Usage: BROYDEN_SIGMA_MIN 0.05

  Minimum adaptive curvature. [Edit on GitHub]

CHOLESKY: enum = REDUCE

  Usage: CHOLESKY REDUCE

  Valid values:

  - `OFF` The cholesky algorithm is not used

  - `REDUCE` Reduce is called

  - `RESTORE` Reduce is replaced by two restore

  - `INVERSE` Restore uses operator multiply by inverse of the triangular matrix

  - `INVERSE_DBCSR` Like inverse, but matrix stored as dbcsr, sparce matrix algebra used when possible

  If FULL_ALL the cholesky decomposition of the S matrix is used. Options on the algorithm to be used. [Edit on GitHub]

ENERGIES: logical = F

  Lone keyword: `T`

  Usage: ENERGIES

  Optimize orbital energies for use in Fermi-Dirac smearing (requires ROTATION and FD smearing to be active). [Edit on GitHub]

ENERGY_GAP: real = -1.00000000E+000

  Usage: ENERGY_GAP 0.001

  Should be an estimate for the energy gap [a.u.] (HOMO-LUMO) and is used in preconditioning, especially effective with the FULL_ALL preconditioner, in which case it should be an underestimate of the gap (can be a small number, e.g. 0.002). FULL_SINGLE_INVERSE takes it as lower bound (values below 0.05 can cause stability issues). In general, higher values will tame the preconditioner in case of poor initial guesses. A negative value will leave the choice to CP2K depending on type of preconditioner. [Edit on GitHub]

EPS_IRAC: real = 1.00000000E-010

  Usage: EPS_IRAC 1.0E-5

  Targeted accuracy during the refinement iteration. [Edit on GitHub]

EPS_IRAC_FILTER_MATRIX: real = 0.00000000E+000

  Usage: EPS_IRAC_FILTER_MATRIX 1.0E-5

  Sets the threshold for filtering the matrices. [Edit on GitHub]

EPS_IRAC_QUICK_EXIT: real = 1.00000000E-005

  Usage: EPS_IRAC_QUICK_EXIT 1.0E-2

  Only one extra refinement iteration is done when the norm is below this value. [Edit on GitHub]

EPS_IRAC_SWITCH: real = 1.00000000E-002

  Usage: EPS_IRAC_SWITCH 1.0E-3

  The algorithm switches to the polynomial refinement when the norm is below this value. [Edit on GitHub]

EPS_TAYLOR: real = 1.00000000E-016

  Aliases: EPSTAYLOR

  Usage: EPS_TAYLOR 1.0E-15

  Target accuracy of the taylor expansion for the matrix functions, should normally be kept as is. [Edit on GitHub]

GOLD_TARGET: real = 1.00000000E-002

  Usage: GOLD_TARGET 0.1

  Target relative uncertainty in the location of the minimum for LINESEARCH GOLD [Edit on GitHub]

IRAC_DEGREE: integer = 4

  Usage: IRAC_DEGREE 4

  The refinement polynomial degree (2, 3 or 4). [Edit on GitHub]

LINESEARCH: enum = 2PNT

  Aliases: LINE_SEARCH

  Usage: LINESEARCH GOLD

  Valid values:

  - `ADAPT` extrapolates usually based on 3 points, uses additional points on demand, very robust.

  - `NONE` always take steps of fixed length

  - `2PNT` extrapolate based on 3 points

  - `3PNT` extrapolate based on 2 points

  - `GOLD` perform 1D golden section search of the minimum (very expensive)

  1D line search algorithm to be used with the OT minimizer, in increasing order of robustness and cost. MINIMIZER CG combined with LINESEARCH GOLD should always find an electronic minimum. Whereas the 2PNT minimizer is almost always OK, 3PNT might be needed for systems in which successive OT CG steps do not decrease the total energy. [Edit on GitHub]

MAX_IRAC: integer = 50

  Usage: MAX_IRAC 5

  Maximum allowed refinement iteration. [Edit on GitHub]

MAX_SCF_DIIS: integer = 0

  Usage: MAX_SCF_DIIS 20

  Maximum DIIS SCF inner loop cycles. This can be used to extend SCF cycles after a switch to DIIS (see eps_diis). [Edit on GitHub]

MAX_TAYLOR: integer = 4

  Usage: MAX_TAYLOR 5

  Maximum order of the Taylor expansion before diagonalisation is preferred, for large parallel runs a slightly higher order could sometimes result in a small speedup. [Edit on GitHub]

MINIMIZER: enum = CG

  Usage: MINIMIZER DIIS

  Valid values:

  - `SD` Steepest descent: not recommended

  - `CG` Conjugate Gradients: most reliable, use for difficult systems. The total energy should decrease at every OT CG step if the line search is appropriate.

  - `DIIS` Direct inversion in the iterative subspace: less reliable than CG, but sometimes about 50% faster

  - `BROYDEN` Broyden mixing approximating the inverse Hessian

  Minimizer to be used with the OT method [Edit on GitHub]

NONDIAG_ENERGY: logical = F

  Lone keyword: `T`

  Usage: NONDIAG_ENERGY

  Add a non-diagonal energy penalty (FD smearing) [Edit on GitHub]

NONDIAG_ENERGY_STRENGTH: real = 1.00000000E+000

  Usage: NONDIAG_ENERGY_STRENGTH

  The prefactor for the non-diagonal energy penalty (FD smearing) [Edit on GitHub]

N_HISTORY_VEC: integer = 7

  Aliases: NDIIS ,N_DIIS ,N_BROYDEN

  Usage: N_DIIS 4

  Number of history vectors to be used with DIIS or BROYDEN [Edit on GitHub]

OCCUPATION_PRECONDITIONER: logical = F

  Lone keyword: `T`

  Usage: OCCUPATION_PRECONDITIONER

  Preconditioner with the occupation numbers (FD smearing) [Edit on GitHub]

ON_THE_FLY_LOC: logical = F

  Usage: ON_THE_FLY_LOC T

  On the fly localization of the molecular orbitals. Can only be used with OT/IRAC. [Edit on GitHub]

ORTHO_IRAC: enum = CHOL

  Usage: ORTHO_IRAC POLY

  Valid values:

  - `CHOL` Cholesky.

  - `POLY` Polynomial.

  - `LWDN` Loewdin.

  The orthogonality method. [Edit on GitHub]

PRECONDITIONER: enum = FULL_KINETIC

  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.

  - `NONE` skip preconditioning

  References: VandeVondele2003, Weber2008, Schiffmann2015

  Type of preconditioner to be used with all minimization schemes. They differ in effectiveness, cost of construction, cost of application. Properly preconditioned minimization can be orders of magnitude faster than doing nothing. [Edit on GitHub]

PRECOND_SOLVER: enum = DEFAULT

  Usage: PRECOND_SOLVER DIRECT

  Valid values:

  - `DEFAULT` the default

  - `DIRECT` Cholesky decomposition followed by triangular solve (works for FULL_KINETIC/SINGLE_INVERSE/S_INVERSE)

  - `INVERSE_CHOLESKY` Cholesky decomposition followed by explicit inversion (works for FULL_KINETIC/SINGLE_INVERSE/S_INVERSE)

  - `INVERSE_UPDATE` Performs a Hotelling update of the inverse if a previous preconditioner is present. Mainly useful for GPU accelerated systems (works for FULL_KINETIC/SINGLE_INVERSE/S_INVERSE)

  How the preconditioner is applied to the residual. [Edit on GitHub]

ROTATION: logical = F

  Lone keyword: `T`

  Usage: ROTATION

  Introduce additional variables so that rotations of the occupied subspace are allowed as well, only needed for cases where the energy is not invariant under a rotation of the occupied subspace such as non-singlet restricted calculations or fractional occupations. [Edit on GitHub]

SAFE_DIIS: logical = T

  Aliases: SAFER_DIIS

  Usage: SAFE_DIIS ON

  Reject DIIS steps if they point away from the minimum, do SD in that case. [Edit on GitHub]

STEPSIZE: real = -1.00000000E+000

  Usage: STEPSIZE 0.4

  Initial stepsize used for the line search, sometimes this parameter can be reduced to stabilize DIIS or to improve the CG behavior in the first few steps. The optimal value depends on the quality of the preconditioner. A negative values leaves the choice to CP2K depending on the preconditioner. [Edit on GitHub]