Source code for pysisyphus.intcoords.Stretch

import numpy as np

from pysisyphus.intcoords.Primitive import Primitive
from pysisyphus.intcoords.derivatives import d2q_b
from pysisyphus.linalg import norm3


[docs] class Stretch(Primitive): @staticmethod def _weight(atoms, coords3d, indices, f_damping): return Stretch.rho(atoms, coords3d, indices) @staticmethod def _calculate(coords3d, indices, gradient=False): n, m = indices bond = coords3d[m] - coords3d[n] bond_length = norm3(bond) if gradient: bond_normed = bond / bond_length row = np.zeros_like(coords3d) # 1 / -1 correspond to the sign factor [1] Eq. 18 row[m,:] = bond_normed row[n,:] = -bond_normed row = row.flatten() return bond_length, row return bond_length @staticmethod def _jacobian(coords3d, indices): return d2q_b(*coords3d[indices].flatten())