# sr keywords

Structure relaxation parameters

## sr.eggbuf

This parameter controls the eggbox effect buffer for the Goldstein
condition.

**type**: `scalar`

**default**: `1e-05`

**example**: `sr.eggbuf = 1e-8`

## sr.initStep

This parameter controls the displacement/force relationship during the
relaxation. Simply put, a small value make the relaxation slower but
stable and a large value makes the relaxation faster but less stable. If
the relaxation method includes line searches (conjugate gradient or
quasi-Newtom methods), RESCU first goes into a bracketing phase. If the
line search starts at X and the search direction is S, then RESCU will
begin the line search at X + sr.initStep\*S. Note that the bracketing
phase ends when X + sr.maxStep\*S is reached, and hence sr.initStep \<
sr.maxStep. It is 1 by default. If a molecular dynamics relaxation is
employed, then sr.initStep takes the role of a time step. The FIRE
algorithm will use sr.initStep as an initial time step and it will
shorten or lengthen the time step automatically during the relaxation
process. It is by default 10 femtoseconds. Note that it is assumed that
all ions have the proton mass.

**type**: `scalar`

**default**: `1`

**example**: `sr.initStep = 2`

## sr.maxStep

This parameter controls the displacement/force relationship during the
relaxation. Simply put, a small value make the relaxation slower but
stable and a large value makes the relaxation faster but less stable. If
the relaxation method includes line searches (conjugate gradient or
quasi-Newtom methods), RESCU first goes into a bracketing phase. If the
line search starts at X and the search direction is S, then RESCU ends
the line search when X + sr.maxStep\*S is reached. Note that the
bracketing begins at X + sr.initStep\*S, and hence sr.initStep \<
sr.maxStep. It is 50 by default. If a molecular dynamics relaxation is
employed, then sr.maxStep takes the role of a time step. The FIRE
algorithm will bound the time step by sr.maxStep as it will shorten or
lengthen the time step automatically during the relaxation process. It
is by default 100 femtoseconds. Note that it is assumed that all ions
have the proton mass.

**type**: `scalar`

**default**: `50`

**example**: `sr.maxStep = 75`

## sr.maxit

Maximal number of search direction. RESCU will stop after executing
sr.maxit line searches.

**type**: `scalar`

**default**: `100`

**example**: `sr.maxit = 200`

## sr.maxhistory

Maximal number of positional configurations and forces used in
approximating the Hessian operator. This keyword is only relevant if
sr.method = \'l-bfgs\'.

**type**: `scalar`

**default**: `10`

**example**: `sr.maxhistory = 20`

## sr.maxLineIt

Maximal number of ionic configurations calculated during a line search.
This is only relevant for conjugate gradient or quasi-Newtom methods.

**type**: `scalar`

**default**: `5`

**example**: `sr.maxLineIt = 2`

## sr.method

Ionic relaxation algorithm. qn stands for Quasi-Newton. Many methods are
implemented and qn-bfgs is recommended. cg stands for conjugate
gradient. Many methods are implemented and cg-pr is recommended. fmin
uses the non-linear solver available with the MATLAB optimization
toolbox. fire is the FIRE algorithm which is a variation of damped
molecular dynamics.

**type**: `string`

**default**: `'qn-bfgs'`

**allowed**: `'qn-bfgs','cg-fr','cg-pr','fmin','fire','l-bfgs'`

**example**: `sr.method = 'cf-fr'`

## sr.lineMethod

Line search algorithm. The normal method minimizes the force in the
search direction whereas the Fletcher method minimizes the total energy
along the search direction. The methods are equivalent in principle, but
the normal method is more robust in practice when the total energy is
not converged to machine precision with respect to many parameters such
as resolution, k-sampling, self-consistency, etc.

**type**: `string`

**default**: `'normal'`

**allowed**: `'normal','fletcher'`

**example**: `sr.lineMethod = 'fletcher'`

## sr.moveableAtomList

Array containing the indices of the relaxed atoms. The default is to
relax all atoms except the first atom.

**type**: `array`

**example**: `sr.moveableAtomList = [2 5 9 10]`

## sr.relaxedstructure

File in which RESCU writes the relaxed atomic coordinates.

**type**: `string`

**default**: `./relaxedstructure.xyz`

**example**: `sr.relaxedstructure = './co2_relaxed.out'`

## sr.relaxationprocess

File in which RESCU writes the relaxation process.

**type**: `string`

**default**: `./relaxationprocess.txt`

**example**: `sr.relaxationprocess = './relax.out'`

## sr.save

If sr.save is a non-empty char array, then the atom positions are
printed to an XYZ file at each ionic step. The file is named after the
char array.

**type**: `string`

**example**: `sr.save = './H2O'`

## sr.sigma

This parameter controls the strong Wolfe condition.

**type**: `scalar`

**default**: `0.75`

**example**: `sr.sigma = 0.1`

## sr.tol

Force tolerance. The relaxation process stops once the residual forces
on the movable atoms are less than the specified tolerance. The default
unit is Hartree/Bohr.

**type**: `scalar`

**default**: `0.0001`

**example**: `sr.tol = 1e-6`
