def test_cvlincombic_quartz(): system = get_system_quartz() ic0 = Bond(1, 3) ic1 = Bond(2, 5) weights = [0.13, 0.29] cv = CVLinCombIC(system, [ic0, ic1], weights) value = cv.compute() assert value == cv.get_last_computed_value() delta0 = system.pos[3] - system.pos[1] system.cell.mic(delta0) ref0 = bond_length([np.zeros(3, float), delta0])[0] delta1 = system.pos[5] - system.pos[2] system.cell.mic(delta1) ref1 = bond_length([np.zeros(3, float), delta1])[0] reference = weights[0] * ref0 + weights[1] * ref1 assert np.abs(value - reference) < 1e-8 check_gpos_cv_fd(cv) check_vtens_cv_fd(cv)
def test_iclist_quartz_bonds(): system = get_system_quartz() dlist = DeltaList(system) iclist = InternalCoordinateList(dlist) for i, j in system.bonds: iclist.add_ic(Bond(i, j)) dlist.forward() iclist.forward() for row, (i, j) in enumerate(system.bonds): delta = system.pos[j] - system.pos[i] system.cell.mic(delta) assert abs(iclist.ictab[row]['value'] - bond_length([np.zeros(3, float), delta])[0]) < 1e-5
def test_cvinternalcoordinate_quartz(): system = get_system_quartz() ic = Bond(1, 3) cv = CVInternalCoordinate(system, ic) value = cv.compute() assert value == cv.get_last_computed_value() delta = system.pos[3] - system.pos[1] system.cell.mic(delta) reference = bond_length([np.zeros(3, float), delta])[0] assert np.abs(value - reference) < 1e-8 check_gpos_cv_fd(cv) check_vtens_cv_fd(cv)
def test_iclist_ub_water(): system = get_system_water32() dlist = DeltaList(system) iclist = InternalCoordinateList(dlist) ub = [] for i1 in xrange(system.natom): for i0 in system.neighs1[i1]: for i2 in system.neighs1[i1]: if i0 > i2: iclist.add_ic(UreyBradley(i0, i1, i2)) ub.append((i0, i1, i2)) dlist.forward() iclist.forward() for row, (i0, i1, i2) in enumerate(ub): delta = system.pos[i2] - system.pos[i0] system.cell.mic(delta) assert abs(iclist.ictab[row]['value'] - bond_length([np.zeros(3, float), delta])[0]) < 1e-5
def test_iclist_lastcomputed_quartz_bonds(): system = get_system_quartz() dlist = DeltaList(system) iclist = InternalCoordinateList(dlist) ics = [] for i, j in system.bonds: ic = Bond(i, j) ics.append(ic) iclist.add_ic(ic) dlist.forward() iclist.forward() for row, (i, j) in enumerate(system.bonds): delta = system.pos[j] - system.pos[i] system.cell.mic(delta) ref = bond_length([np.zeros(3, float), delta])[0] value = ics[row].get_last_computed_value() assert np.abs(value - ref) < 1e-5
def test_iclist_ub_water(): system = get_system_water32() dlist = DeltaList(system) iclist = InternalCoordinateList(dlist) ub = [] for i1 in range(system.natom): for i0 in system.neighs1[i1]: for i2 in system.neighs1[i1]: if i0 > i2: iclist.add_ic(UreyBradley(i0, i1, i2)) ub.append((i0, i1, i2)) dlist.forward() iclist.forward() for row, (i0, i1, i2) in enumerate(ub): delta = system.pos[i2] - system.pos[i0] system.cell.mic(delta) assert abs(iclist.ictab[row]['value'] - bond_length([np.zeros(3, float), delta])[0]) < 1e-5
#!/usr/bin/env python import argparse import molmod as mm import numpy as np import mdtraj as md def eval_pplane(atoms_xyz): return mm.opbend_dist(atoms_xyz)[0] / mm.angstrom CV_KIND_DICT = { 'BOND': lambda atoms_xyz: mm.bond_length(atoms_xyz)[0] / mm.angstrom, 'ANGLE': lambda atoms_xyz: mm.bend_angle(atoms_xyz)[0] / mm.deg, 'DIHEDRAL': lambda atoms_xyz: mm.dihed_angle(atoms_xyz)[0] / mm.deg, 'PPLANE': lambda atoms_xyz: eval_pplane(np.roll(atoms_xyz, -3)) } MULTICV_KIND_DICT = {'MBOND': (2, 'BOND'), 'MANGLE': (3, 'ANGLE'), 'MDIHEDRAL': (4, 'DIHEDRAL'), 'MPPLANE': (4, 'PPLANE')} def get_center(xyz, indices): return np.mean(np.take(xyz, indices, axis=0), axis=0) def get_centers(xyz, centers):