示例#1
0
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)
示例#2
0
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
示例#3
0
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)
示例#4
0
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
示例#5
0
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
示例#6
0
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
示例#7
0
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
示例#8
0
#!/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):