sisl.mixing.AndersonMixer
- class sisl.mixing.AndersonMixer(weight=0.2, history=0)[source]
Bases:
BaseHistoryWeightMixer
Anderson mixing
The Anderson mixing assumes that the mixed input/output are linearly related. Hence
\[|\bar{n}^{m}_{\mathrm{in}/\mathrm{out}\rangle = (1 - \beta)|n^{m}_{\mathrm{in}/\mathrm{out}\rangle + \beta|n^{m-1}_{\mathrm{in}/\mathrm{out}\rangle\]Here the optimal choice \(\beta\) is calculated as:
\[\begin{split}\delta_i &= F_i^{\mathrm{out}} - F_i^{\mathrm{in}} \\ \beta &= \frac{\langle \delta_i | \delta_i - \delta_{i-1}\rangle} {\langle \delta_i - \delta_{i-1}| \delta_i - \delta_{i-1} \rangle}\end{split}\]Finally the resulting output becomes:
\[|n^{m+1}\rangle = (1 - \alpha)|\bar n^m_{\mathrm{in}}\rangle + \alpha|\bar n^m_{\mathrm{out}}\rangle\]See [3] for more details.
Methods
set_history
(history)Replace the current history in the mixer with a new one
set_weight
(weight)Set a new weight for this mixer
History object tracked by this mixer
This mixers mixing weight, the weight is the fractional contribution of the derivative
- __call__(f, df, delta=None, append=True)[source]
Calculate a new variable \(f'\) using input and output of the functional
- __init__(weight=0.2, history=0)
- set_history(history)
Replace the current history in the mixer with a new one