예제 #1
0
    def __init__(self,
                 topology,
                 pathtoplumed="",
                 timestep=1.,
                 kbt=1.,
                 molinfo="",
                 logfile="plumed.log"):
        """
        Parameters
        ----------
        topology : :obj:`openpathsampling.engines.openmm.MDTopology`
        pathtoplumed : string
            path to the PLUMED installation
        timestep : double
            Time step size of the simulation in PLUMED default units (ps).
        kbt : double
            :math:`$k_BT$` in PLUMED default units (kJ/mol).
        molinfo : string
            A PDB file containing information about the molecule. (see
            https://plumed.github.io/doc-v2.4/user-doc/html/_m_o_l_i_n_f_o.html).
        logfile : string
            Name of the PLUMED log file.
        """

        self.interface = plumed.Plumed()  # 8 is default size of real
        self.pathtoplumed = pathtoplumed
        self.topology = topology
        self.timestep = timestep
        self.kbt = kbt
        self.molinfo = molinfo
        self.logfile = logfile
        self._commandlist = []
        self._init_plumed()
예제 #2
0
    def __init__(
        self,
        latency=1.0e-3,
        name="",
        pars=None,
        dopbc=False,
        threaded=False,
        init_file="",
        plumeddat="",
        plumedstep=0,
    ):
        """Initialises FFPlumed.

        Args:
           pars: Optional dictionary, giving the parameters needed by the driver.
        """

        # a socket to the communication library is created or linked
        if plumed is None:
            raise ImportError(
                "Cannot find plumed libraries to link to a FFPlumed object/")
        super(FFPlumed, self).__init__(latency,
                                       name,
                                       pars,
                                       dopbc=False,
                                       threaded=threaded)
        self.plumed = plumed.Plumed()
        self.plumeddat = plumeddat
        self.plumedstep = plumedstep
        self.init_file = init_file

        if self.init_file.mode == "xyz":
            infile = open(self.init_file.value, "r")
            myframe = read_file(self.init_file.mode, infile)
            myatoms = myframe["atoms"]
            mycell = myframe["cell"]
            myatoms.q *= unit_to_internal("length", self.init_file.units, 1.0)
            mycell.h *= unit_to_internal("length", self.init_file.units, 1.0)

        self.natoms = myatoms.natoms
        self.plumed.cmd("setNatoms", self.natoms)
        self.plumed.cmd("setPlumedDat", self.plumeddat)
        self.plumed.cmd("setTimestep", 1.0)
        self.plumed.cmd(
            "setMDEnergyUnits", 2625.4996
        )  # Pass a pointer to the conversion factor between the energy unit used in your code and kJ mol-1
        self.plumed.cmd(
            "setMDLengthUnits", 0.052917721
        )  # Pass a pointer to the conversion factor between the length unit used in your code and nm
        self.plumed.cmd("setMDTimeUnits", 2.4188843e-05)
        self.plumedrestart = False
        if self.plumedstep > 0:
            # we are restarting, signal that PLUMED should continue
            self.plumedrestart = True
            self.plumed.cmd("setRestart", 1)
        self.plumed.cmd("init")
        self.charges = dstrip(myatoms.q) * 0.0
        self.masses = dstrip(myatoms.m)
        self.lastq = np.zeros(3 * self.natoms)
예제 #3
0
파일: test_mpi.py 프로젝트: awvwgk/plumed2
        def test(self):

            comm = MPI.COMM_WORLD
            p = plumed.Plumed()
            p.cmd("setNatoms", 2)
            p.cmd("setLogFile", "test.log")
            p.cmd("setMPIComm", comm)
            p.cmd("init")
예제 #4
0
def test():

    p = plumed.Plumed()
    p.cmd("setNatoms", 2)
    p.cmd("setLogFile", "test.log")
    p.cmd("init")
    p.cmd("readInputLine", "d: DISTANCE ATOMS=1,2")
    p.cmd("readInputLine", "RESTRAINT ARG=d AT=0 KAPPA=1")

    box = array.array('d', [10, 0, 0, 0, 10, 0, 0, 0, 10])
    virial = array.array('d', [0, 0, 0, 0, 0, 0, 0, 0, 0])
    masses = array.array('d', [1, 1])
    charges = array.array('d', [0, 0])
    forces = array.array('d', [0, 0, 0, 0, 0, 0])
    positions = array.array('d', [0, 0, 0, 1, 2, 3])

    p.cmd("setStep", 0)
    p.cmd("setBox", box)
    p.cmd("setMasses", masses)
    p.cmd("setCharges", charges)
    p.cmd("setPositions", positions)
    p.cmd("setForces", forces)
    p.cmd("setVirial", virial)
    p.cmd("calc")

    bias = array.array('d', [0])

    p.cmd("getBias", bias)

    assert (bias[0] - 7.0)**2 < 1e-8
    assert (forces[0] - 1.0)**2 < 1e-8
    assert (forces[1] - 2.0)**2 < 1e-8
    assert (forces[2] - 3.0)**2 < 1e-8
    assert (forces[3] + 1.0)**2 < 1e-8
    assert (forces[4] + 2.0)**2 < 1e-8
    assert (forces[5] + 3.0)**2 < 1e-8
예제 #5
0
    def test(self):

        p = plumed.Plumed()
        p.cmd("setNatoms", 2)
        p.cmd("setLogFile", "test.log")
        p.cmd("init")
        p.cmd("readInputLine", "d: DISTANCE ATOMS=1,2")
        p.cmd("readInputLine", "RESTRAINT ARG=d AT=0 KAPPA=1")

        box = array.array('d', [10, 0, 0, 0, 10, 0, 0, 0, 10])
        virial = array.array('d', [0, 0, 0, 0, 0, 0, 0, 0, 0])
        masses = array.array('d', [1, 1])
        charges = array.array('d', [0, 0])
        forces = array.array('d', [0, 0, 0, 0, 0, 0])
        positions = array.array('d', [0, 0, 0, 1, 2, 3])

        p.cmd("setStep", 0)
        p.cmd("setBox", box)
        p.cmd("setMasses", masses)
        p.cmd("setCharges", charges)
        p.cmd("setPositions", positions)
        p.cmd("setForces", forces)
        p.cmd("setVirial", virial)
        p.cmd("calc")

        bias = array.array('d', [0])

        p.cmd("getBias", bias)

        self.assertAlmostEqual(bias[0], 7.0)
        self.assertAlmostEqual(forces[0], 1.0)
        self.assertAlmostEqual(forces[1], 2.0)
        self.assertAlmostEqual(forces[2], 3.0)
        self.assertAlmostEqual(forces[3], -1.0)
        self.assertAlmostEqual(forces[4], -2.0)
        self.assertAlmostEqual(forces[5], -3.0)
예제 #6
0
# Output to four decimal places only
np.set_printoptions(precision=4)
# Read trajectory
traj = read_xyz("traj.xyz")
num_frames = len(traj)
num_atoms = traj[0].shape[0]

# Create arrays for stuff
box = np.diag(12.41642 * np.ones(3, dtype=np.float64))
virial = np.zeros((3, 3), dtype=np.float64)
masses = np.ones(num_atoms, dtype=np.float64)
forces = np.random.rand(num_atoms, 3)
charges = np.zeros(num_atoms, dtype=np.float64)

# Create PLUMED object and read input
p = plumed.Plumed()
p.cmd("setMDEngine", "python")
p.cmd("setTimestep", 1.)
p.cmd("setKbT", 1.)
p.cmd("setNatoms", num_atoms)
p.cmd("setLogFile", "test.log")
p.cmd("init")
p.cmd("readInputLine", "MOLINFO STRUCTURE=template.pdb")
t1 = create_plumed_var(p, "t1", "TORSION ATOMS=@phi-2")
t2 = create_plumed_var(p, "t2", "TORSION ATOMS=@psi-2")
t3 = create_plumed_var(p, "t3", "TORSION ATOMS=@phi-3")
t4 = create_plumed_var(p, "t4", "TORSION ATOMS=@psi-3")
t5 = create_plumed_var(p, "t5", "TORSION ATOMS=@phi-4")
t6 = create_plumed_var(p, "t6", "TORSION ATOMS=@psi-4")
t7 = create_plumed_var(p, "t7", "TORSION ATOMS=@phi-5")
t8 = create_plumed_var(p, "t8", "TORSION ATOMS=@psi-5")
예제 #7
0
def test():
    os.chdir('test/')
    os.system('rm -f bck.*')
    # Output to four decimal places only
    np.set_printoptions(precision=4)
    # Read trajectory
    traj = read_xyz("traj.xyz")
    num_frames = len(traj)
    num_atoms = traj[0].shape[0]
    
    # Create arrays for stuff
    box=np.diag(12.41642*np.ones(3,dtype=np.float64))
    virial=np.zeros((3,3),dtype=np.float64)
    masses=np.ones(num_atoms,dtype=np.float64)
    forces=np.random.rand(num_atoms,3)
    charges=np.zeros(num_atoms,dtype=np.float64)
    
    # Create PLUMED object and read input
    p = plumed.Plumed()
    p.cmd("setMDEngine","python")
    p.cmd("setTimestep", 1.)
    p.cmd("setKbT", 1.)
    p.cmd("setNatoms",num_atoms)
    p.cmd("setLogFile","test.log")
    p.cmd("init")
    p.cmd("readInputLine","MOLINFO STRUCTURE=template.pdb")
    t1 = create_plumed_var( p, "t1", "TORSION ATOMS=@phi-2" ) 
    t2 = create_plumed_var( p, "t2", "TORSION ATOMS=@psi-2" )
    t3 = create_plumed_var( p, "t3", "TORSION ATOMS=@phi-3" )
    t4 = create_plumed_var( p, "t4", "TORSION ATOMS=@psi-3" )
    t5 = create_plumed_var( p, "t5", "TORSION ATOMS=@phi-4" )
    t6 = create_plumed_var( p, "t6", "TORSION ATOMS=@psi-4" )
    t7 = create_plumed_var( p, "t7", "TORSION ATOMS=@phi-5" )
    t8 = create_plumed_var( p, "t8", "TORSION ATOMS=@psi-5" )
    t9 = create_plumed_var( p, "t9", "TORSION ATOMS=@phi-6" )
    t10 = create_plumed_var( p, "t10", "TORSION ATOMS=@psi-6" )
    t11 = create_plumed_var( p, "t11", "TORSION ATOMS=@phi-7" )
    t12 = create_plumed_var( p, "t12", "TORSION ATOMS=@psi-7" )
    t13 = create_plumed_var( p, "t13", "TORSION ATOMS=@phi-8" )
    t14 = create_plumed_var( p, "t14", "TORSION ATOMS=@psi-8" )
    t15 = create_plumed_var( p, "t15", "TORSION ATOMS=@phi-9" )
    t16 = create_plumed_var( p, "t16", "TORSION ATOMS=@psi-9" )
    t17 = create_plumed_var( p, "t17", "TORSION ATOMS=@phi-10" )
    t18 = create_plumed_var( p, "t18", "TORSION ATOMS=@psi-10" )
    t19 = create_plumed_var( p, "t19", "TORSION ATOMS=@phi-11" )
    t20 = create_plumed_var( p, "t20", "TORSION ATOMS=@psi-11" )
    t21 = create_plumed_var( p, "t21", "TORSION ATOMS=@phi-12" )
    t22 = create_plumed_var( p, "t22", "TORSION ATOMS=@psi-12" )
    t23 = create_plumed_var( p, "t23", "TORSION ATOMS=@phi-13" )
    t24 = create_plumed_var( p, "t24", "TORSION ATOMS=@psi-13" )
    t25 = create_plumed_var( p, "t25", "TORSION ATOMS=@phi-14" )
    t26 = create_plumed_var( p, "t26", "TORSION ATOMS=@psi-14" )
    t27 = create_plumed_var( p, "t27", "TORSION ATOMS=@phi-15" )
    t28 = create_plumed_var( p, "t28", "TORSION ATOMS=@psi-15" )
    t29 = create_plumed_var( p, "t29", "TORSION ATOMS=@phi-16" )
    t30 = create_plumed_var( p, "t30", "TORSION ATOMS=@psi-16" )
    t31 = create_plumed_var( p, "t31", "TORSION ATOMS=@phi-17" )
    t32 = create_plumed_var( p, "t32", "TORSION ATOMS=@psi-17" )
     
    # Read in the correct answers that were calculated directly using PLUMED
    correct_torsions = np.loadtxt("colvar.ref")
    # Open an output file
    of = open("logfile", "w+")
    
    # Now analyze the trajectory
    for step in range(0,num_frames) :
        of.write("RUNNING ANALYSIS FOR STEP " + str(step) + "\n" )
        p.cmd("setStep",step )
        p.cmd("setBox",box )
        p.cmd("setMasses", masses )
        p.cmd("setCharges", charges )
        p.cmd("setPositions", traj[step])
        p.cmd("setForces", forces )
        p.cmd("setVirial", virial )
        p.cmd("calc")
        bias = np.zeros((1),dtype=np.float64)
        p.cmd("getBias", bias )
        variables = np.array([t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32]).ravel()
        zeros = variables - correct_torsions[step,1:]
        for data in zeros :
            if abs(data)>1E-4 : of.write("MISMATCH BETWEEN VALUE FROM PLUMED AND VALUE FROM PYTHON")
    
    of.close()