Source code for mchem.terms.nonbonded

"""Non-bonded terms: particles, VdW, multipoles, polarization, MBUCB."""

from dataclasses import dataclass, field
from enum import Enum


[docs] class MultipoleAxisType(Enum): """Axis convention for multipole frame (ZThenX, Bisector, ZOnly, etc.).""" ZThenX = 0 Bisector = 1 ZBisect = 2 ThreeFold = 3 ZOnly = 4 NoAxisType = 5 LastAxisTypeIndex = 6
MultipoleAxisTypeInt2Str = { at.value: at.name for at in MultipoleAxisType }
[docs] @dataclass class Particle: """Single particle: index, name, element, mass, residue info, position, optional velocity.""" idx: int name: str element: str mass: float resnum: int resname: str xx: float xy: float xz: float vx: float = 0.0 vy: float = 0.0 vz: float = 0.0
[docs] @dataclass class AmoebaVdw147: """AMOEBA buffered 14-7 VdW parameters (epsilon, sigma, reduction, optional parent).""" idx: int epsilon: float sigma: float parentIdx: int = -1 reduction: float = 1.0 paramIdx: int = -1
[docs] @dataclass class Multipole: """Atomic multipole (charge, dipole, quadrupole) and axis type / frame indices.""" idx: int c0: float dx: float dy: float dz: float qxx: float qxy: float qxz: float qyy: float qyz: float qzz: float axistype: int kz: int = -1 kx: int = -1 ky: int = -1 paramIdx: int = -1
[docs] @dataclass class IsotropicPolarization: """Isotropic polarizability (alpha, thole) and polarization group indices.""" idx: int alpha: float thole: float grp: list paramIdx: int = -1 def __post_init__(self): if isinstance(self.grp, str): self.grp = [int(x) for x in self.grp.split()]
[docs] @dataclass class AnisotropicPolarization: """Anisotropic polarizability tensor (alpha_xx, alpha_xy, ...) and thole/group.""" idx: int alphaxx: float alphaxy: float alphaxz: float alphayy: float alphayz: float alphazz: float thole: float grp: list = field(default_factory=list) paramIdx: int = -1 def __post_init__(self): if isinstance(self.grp, str): self.grp = [int(x) for x in self.grp.split()]
[docs] @dataclass class MBUCBChargePenetration: """MBUCB charge-penetration correction parameters (z, alpha, beta).""" idx: int z: float alpha: float beta: float paramIdx: int = -1
[docs] @dataclass class MBUCBChargeTransfer: """MBUCB charge-transfer parameters (d, b, alpha).""" idx: int d: float b: float alpha: float paramIdx: int = -1
[docs] @dataclass class PairList: """Class for atom pairs that has to specially treated in non-bonded calculations""" p0: int p1: int
[docs] def energy(self) -> float: return 0.0