Overview
Integrating state via FIRE algorithm – Fast Internal Relaxation Engine
see (Erik Bitzek et al. PRL 97, 170201, (2006))
FIRE algorithm:
- MD: calculate \({\bf r}\), \({\bf f}=-\nabla E(\bf r)\), and \({\bf v}\) using any common MD integrator; check for convergence.
- F1: calculate \(P = F \cdot v\).
- F2: set \({\bf v} \rightarrow (1-\alpha) {\bf v}+ \alpha \hat{\bf f} \left| {\bf v}\right|\).
- F3: if \(P > 0\) and the number of steps since \(P\) was negative is larger than \(N_{\rm min}\), increase the time step \(\Delta t \rightarrow min\left(\Delta t \,f_{\rm inc}; \Delta t_{\rm max}\right)\) and decrease \(\alpha\rightarrow \alpha\, f_\alpha\).
- F4: if \(P \leq 0\), decrease time step \(\Delta t \rightarrow \Delta t\,f_{\rm dec}\), freeze the system \({\bf v} = 0\) and set \(\alpha\) back to \(\alpha_{\rm start}\) .
- F5: return to MD.
where \({\bf r}\) is vector of coordinates, \({\bf v}\) is vector of velocities, \({\bf f}_i\) is vector of forces, and \(\Delta t\) is timestep size.
Algorithm parameters are: \(\alpha_{\rm start}, f_\alpha, f_{\rm inc}, f_{\rm dec}, N_{\rm min}, \Delta t_{\rm max}\)
Python Member Functions
Constructor
IntegratorRelax(state=...)
Arguments
- state
- state object.
Setting parameters from within the Python environment is done with set_params.
set_params(alphaInit=..., alphaShrink=..., dtGrow=..., dtShrink=..., delay=..., dtMax_mult=...)
Arguments
- alphaInit
- initial value of \(\alpha\). Corresponds to \(\alpha_{\rm start}\) in algorithm description.
- alphaShrink
- corresponds to \(f_\alpha\) in algorithm description.
- dtGrow
- corresponds to \(f_{\rm inc}\) in algorithm description.
- dtShrink
- corresponds to \(f_{\rm dec}\) in algorithm description.
- delay
- corresponds to \(N_{\rm min}\) in algorithm description.
- dtMax_mult
- maximum value of \(\Delta t\) relative to state.dt. Corresponds to \(\Delta t_{\rm max}/\Delta t_{\rm initial}\) in algorithm description.
Integrating state is done with run.
Default values:
alphaInit = 0.1
alphaShrink = 0.99
dtGrow = 1.1
dtShrink = 0.5
delay = 5
dtMax_mult = 10
run(numTurns=...,fTol=...)
Arguments
- numTurns
- number of timestep to make.
- fTol
- required force tolerance. When \(\left|{\bf f}\right|<fTol\), run returns.