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()
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)
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")
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
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)
# 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")
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()