Source code for sisl.mixing.linear

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
from functools import reduce

from sisl._internal import set_module
from .base import Mixer


__all__ = ['LinearMixer']


@set_module("sisl.mixing")
class LinearMixer(Mixer):
    r""" Linear mixing

    The linear mixing is solely defined using a weight, and the resulting functional
    may then be calculated via:

    .. math::

        f^{i+1} = f^i + w \delta f^i

    Parameters
    ----------
    weight : float, optional
       mixing weight
    """

[docs] def __init__(self, weight=0.1): # No parameters passed super().__init__() assert weight > 0 self._weight = weight
def __str__(self): r""" String representation """ return self.__class__.__name__ + f"{{weight: {self.weight:.4f}}}" @property def weight(self): r""" Weight used for the linear mixing """ return self._weight
[docs] def __call__(self, f, df): r""" Calculate a new variable :math:`f'` using input and output of the functional Parameters ---------- f : object input variable for the functional df : object derivative of the functional """ return f + self.weight * df