Source code for pysisyphus.intcoords.DistanceFunction

from pysisyphus.intcoords.Primitive import Primitive
from pysisyphus.intcoords.Stretch import Stretch


[docs] class DistanceFunction(Primitive): def __init__(self, indices, coeff=-1, **kwargs): self.coeff = float(coeff) kwargs["calc_kwargs"] = ("coeff",) super().__init__(indices, **kwargs) @staticmethod def _weight(atoms, coords3d, indices, f_damping): return 1 @staticmethod def _calculate(coords3d, indices, gradient=False, coeff=-1): """ m--n o--p """ m, n, o, p = indices val1, grad1 = Stretch._calculate(coords3d, (m, n), gradient=True) val2, grad2 = Stretch._calculate(coords3d, (o, p), gradient=True) val = val1 + coeff * val2 grad = grad1 + coeff * grad2 if gradient: return val, grad return val @staticmethod def _jacobian(coords3d, indices, coeff): m, n, o, p = indices jac1 = Stretch._jacobian(coords3d, [m, n]) jac2 = Stretch._jacobian(coords3d, [o, p]) return jac1 + coeff * jac2