def test_LennardJones(): pe_theory = theory_lj(distances, epsilon=2, sigma=3.5, cutoff=11) simulation = pyMD.Simulation( positions=positions, masses=masses, box=box, velocities=velocities ) simulation.set_integrator(pyMD.VelocityVerletIntegrator(1.0)) simulation.add_pair_style(pyMD.LennardJones(epsilon=2, sigma=3.5, cutoff=11)) simulation._init_step() simulation.positions[0] = (0, 0, 0) for i, d in enumerate(distances): simulation.positions[1] = (d, 0, 0) # simulation.neigh.apply_pbc() # simulation.neigh.build_neighborlist() pe[i] = simulation.pair_styles[0].get_current_state(return_forces=False) np.testing.assert_almost_equal(pe, pe_theory)
def test_simulation_LJ_melt(verbose=False): path_reference = os.path.join('resources', 'LJ_melt') dump_file = os.path.join(path_reference, 'dump.lammpstrj.gz') xyz_lammps, pe_lammps, force_lammps = get_lammps_data(dump_file) box = [ [16.79596191382507, 0, 0], [0, 16.79596191382507, 0], [0, 0, 16.79596191382507], ] positions = np.zeros((4000, 3), dtype=np.float64) positions[:] = xyz_lammps[0] velocities = np.zeros(positions.shape, dtype=np.float64) masses = 1.0 * np.ones(len(positions)) simulation = pyMD.Simulation(positions=positions, masses=masses, box=box, velocities=velocities) simulation.nn_settings['skin'] = 0.3 simulation.set_integrator(pyMD.VelocityVerletIntegrator(0.005)) simulation.add_pair_style( pyMD.LennardJones(epsilon=1, sigma=1.0, cutoff=2.5, shift=False)) simulation._init_step() pe_pyMD = np.zeros(pe_lammps.shape) force_pyMD = np.zeros(force_lammps.shape) for i, xyz in enumerate(xyz_lammps): if verbose and not i % len(xyz_lammps) / 10: print('\r{}/{}'.format(i + 1, len(xyz_lammps)), end='', flush=True) simulation.positions[:] = xyz simulation.neigh.build_neighborlist() force, pe = simulation.pair_styles[0].get_current_state( return_forces=True) pe_pyMD[i] = pe force_pyMD[i] = force np.testing.assert_array_almost_equal(pe_lammps, pe_pyMD, err_msg='Potential Energy mismatch') np.testing.assert_array_almost_equal(force_lammps, force_pyMD, err_msg='Forces mismatch') if verbose: print('LAMMPS and pyMD results match')
def test_simulation_distance_2LJ_beads(): path_reference = os.path.join('resources', 'distance_2LJ_beads') dump_file = os.path.join(path_reference, 'dump.lammpstrj.gz') xyz_lammps, pe_lammps, force_lammps = get_lammps_data(dump_file) box = [ [6.0, 0, 0], [0, 6.0, 0], [0, 0, 6.0], ] positions = np.array([ [0, 0, 0], [0.4, 0, 0], ], dtype=np.float64) velocities = np.array([ [0, 0, 0], [0, 0, 0] ], dtype=np.float64) masses = 1.0 * np.ones(len(positions)) simulation = pyMD.Simulation( positions=positions, masses=masses, box=box, velocities=velocities ) simulation.nn_settings['skin'] = 0.3 simulation.set_integrator( pyMD.VelocityVerletIntegrator(0.005)) simulation.add_pair_style( pyMD.LennardJones(epsilon=1, sigma=1.0, cutoff=2.5, shift=False)) simulation._init_step() pe_pyMD = np.zeros(pe_lammps.shape) force_pyMD = np.zeros(force_lammps.shape) for i, xyz in enumerate(xyz_lammps): simulation.positions[:] = xyz simulation.neigh.build_neighborlist() force, pe = simulation.pair_styles[0].get_current_state(return_forces=True) pe_pyMD[i] = pe force_pyMD[i] = force np.testing.assert_array_almost_equal(pe_lammps, pe_pyMD, err_msg='Potential Energy mismatch') np.testing.assert_array_almost_equal(force_lammps, force_pyMD, err_msg='Forces mismatch')
system = pyMD.builder.RandomBeadsBox(n_atoms=n_atoms, sidelength=20, mode='mc', mc_r_min=3.0) box = system.box positions = system.positions masses = 1 * np.ones(n_atoms) temperature = 0.02 # just a scaling atm velocities = pyMD.builder.create_velocities(n_atoms, masses, temperature) simulation = pyMD.Simulation(positions=positions, masses=masses, box=box, velocities=velocities) simulation.set_integrator(pyMD.VelocityVerletIntegrator(0.005, units='LJ')) simulation.add_pair_style(pyMD.LennardJones(epsilon=0.25, sigma=1, cutoff=2.5)) #simulation.add_reporter( pyMD.InMemoryReporter(n_dump=1000) ) #simulation.add_reporter( pyMD.ThermodynamicsReporter(n_dump=1000) ) simulation.add_reporter( pyMD.LammpsTrajectoryReporter('test.lammpstrj', n_dump=100)) simulation.minimize(10000) #===================================================================# # run the simulation simulation.run(int(1e5))
velocities = np.array([ [ 5e-5, 0, 0], [-5e-5, 0, 0] ], dtype=np.float64) masses = 18.0*np.ones(len(positions)) #===================================================================# # Define the Simulation simulation = pyMD.Simulation( positions=positions, masses=masses, box=box, velocities=velocities ) simulation.set_integrator( pyMD.VelocityVerletIntegrator(1.0, units='real') ) simulation.add_pair_style( pyMD.LennardJones(epsilon=1e-3, sigma=3.5, cutoff=11) ) simulation.add_reporter( pyMD.InMemoryTrajectoryReporter(n_dump=1000) ) simulation.add_reporter( pyMD.InMemoryThermodynamicsReporter(n_dump=1000) ) # visualzie with : vmd -lammpstrj test.lammpstrj simulation.add_reporter( pyMD.LammpsTrajectoryReporter('test.lammpstrj', n_dump=1000)) #===================================================================# # run the simulation simulation.run(int(1e6))
pe[i] = simulation.pair_styles[0].get_current_state(return_forces=False) np.testing.assert_almost_equal(pe, pe_theory) if __name__ == '__main__': pe_theory = theory_lj(distances, epsilon=2, sigma=3.5, cutoff=11) simulation = pyMD.Simulation( positions=positions, masses=masses, box=box, velocities=velocities ) simulation.set_integrator(pyMD.VelocityVerletIntegrator(1.0)) simulation.add_pair_style(pyMD.LennardJones(epsilon=2, sigma=3.5, cutoff=11)) simulation._init_step() simulation.positions[0] = (0, 0, 0) for i, d in enumerate(distances): simulation.positions[1] = (d, 0, 0) # simulation.neigh.apply_pbc() # simulation.neigh.build_neighborlist() pe[i] = simulation.pair_styles[0].get_current_state(return_forces=False) import matplotlib.pyplot as plt plt.plot(distances, pe, label='pyMD')