sisl.mixing.AdaptivePulayMixer
- class sisl.mixing.AdaptivePulayMixer(weight: tuple[TypeWeight, TypeWeight] = (0.03, 0.5), history: TypeArgHistory = 2, metric: TypeMetric | None = None)
Bases:
AdaptiveDIISMixer
Methods
adjust_weight
(lagrange[, offset, spread])Adjust the weight according to the Lagrange multiplier.
Calculate coefficients and adjust weights according to a Lagrange multiplier
mix
(coefficients)Calculate a new variable \(\mathbf f'\) using history and input coefficients
set_history
(history)Replace the current history in the mixer with a new one
set_weight
(weight)Set a new weight for this mixer
Calculate the coefficients according to Pulay's method, return everything + Lagrange multiplier
Attributes
History object tracked by this mixer
This mixers mixing weight, the weight is the fractional contribution of the derivative
- __call__(f: T, df: T, delta: Any | None = None, append: bool = True) T
Append data to the history (omitting None values)!
- adjust_weight(lagrange: Any, offset: float | int = 13, spread: float | int = 7) None
Adjust the weight according to the Lagrange multiplier.
Once close to convergence the Lagrange multiplier will be close to 0, otherwise it will go towards infinity. We here adjust using the Fermi-function to hit the minimum/maximum weight with a suitable spread
- coefficients() npt.NDArray[np.float64]
Calculate coefficients and adjust weights according to a Lagrange multiplier
- mix(coefficients: numpy.typing.ArrayLike) Any
Calculate a new variable \(\mathbf f'\) using history and input coefficients
- Parameters:
coefficients (
numpy.ndarray
) – coefficients used for extrapolation
- set_history(history: int | History) None
Replace the current history in the mixer with a new one
- Parameters:
history – if an int a new History object will be created with that number of history elements Otherwise the object will be directly attached to the mixer.
- set_weight(weight: float | int)
Set a new weight for this mixer
- Parameters:
weight (
float
) – the new weight for this mixer, it must be bigger than 0