def test_wca(self): wca_eps = 2.12 wca_sig = 1.37 wca_cutoff = wca_sig * 2.**(1. / 6.) wca_shift = -((wca_sig / wca_cutoff)**12 - (wca_sig / wca_cutoff)**6) self.system.non_bonded_inter[0, 0].wca.set_params(epsilon=wca_eps, sigma=wca_sig) E_ref = tests_common.lj_generic_potential( r=np.arange(1, 232) * self.step_width, eps=wca_eps, sig=wca_sig, cutoff=wca_cutoff, shift=4. * wca_shift) for i in range(231): self.system.part[1].pos = self.system.part[1].pos + self.step self.system.integrator.run(recalc_forces=True, steps=0) # Calculate energies E_sim = self.system.analysis.energy()["non_bonded"] # Calculate forces f0_sim = self.system.part[0].f f1_sim = self.system.part[1].f f1_ref = self.axis * tests_common.lj_generic_force( espressomd, r=(i + 1) * self.step_width, eps=wca_eps, sig=wca_sig, cutoff=wca_cutoff) # Check that energies match, ... self.assertFractionAlmostEqual(E_sim, E_ref[i]) # force equals minus the counter-force ... self.assertTrue((f0_sim == -f1_sim).all()) # and has correct value. self.assertItemsFractionAlmostEqual(f1_sim, f1_ref) self.system.non_bonded_inter[0, 0].wca.set_params(epsilon=0., sigma=1.)
def test_wca(self): wca_eps = 2.12 wca_sig = 1.37 wca_cutoff = wca_sig * 2.**(1. / 6.) wca_shift = -((wca_sig / wca_cutoff)**12 - (wca_sig / wca_cutoff)**6) self.run_test("wca", {"epsilon": wca_eps, "sigma": wca_sig}, force_kernel=lambda espressomd, r, epsilon, sigma: tests_common.lj_generic_force( espressomd, r, epsilon=epsilon, sigma=sigma, cutoff=wca_cutoff), energy_kernel=lambda r, epsilon, sigma: tests_common.lj_generic_potential( r, epsilon=epsilon, sigma=sigma, cutoff=wca_cutoff, shift=4. * wca_shift), n_steps=231, force_kernel_needs_espressomd=True)
def test_lj_generic_softcore(self): lj_eps = 2.12 lj_sig = 1.37 lj_cut = 2.125 lj_off = 0.182 lj_b1 = 6.22 lj_b2 = 3.63 lj_e1 = 13.32 lj_e2 = 3.74 lj_shift = 0.13 lj_delta = 0.1 lj_lam = 0.34 self.system.non_bonded_inter[0, 0].generic_lennard_jones.set_params( epsilon=lj_eps, sigma=lj_sig, cutoff=lj_cut, offset=lj_off, b1=lj_b1, b2=lj_b2, e1=lj_e1, e2=lj_e2, shift=lj_shift, delta=lj_delta, lam=lj_lam) for i in range(231): self.system.part[1].pos = self.system.part[1].pos + self.step self.system.integrator.run(recalc_forces=True, steps=0) # Calculate energies E_sim = self.system.analysis.energy()["non_bonded"] E_ref = tests_common.lj_generic_potential( r=(i + 1) * self.step_width, eps=lj_eps, sig=lj_sig, cutoff=lj_cut, offset=lj_off, b1=lj_b1, b2=lj_b2, e1=lj_e1, e2=lj_e2, shift=lj_shift, delta=lj_delta, lam=lj_lam) # Calculate forces f0_sim = self.system.part[0].f f1_sim = self.system.part[1].f f1_ref = self.axis * tests_common.lj_generic_force( espressomd, r=(i + 1) * self.step_width, eps=lj_eps, sig=lj_sig, cutoff=lj_cut, offset=lj_off, b1=lj_b1, b2=lj_b2, e1=lj_e1, e2=lj_e2, delta=lj_delta, lam=lj_lam) # Check that energies match, ... self.assertFractionAlmostEqual(E_sim, E_ref) # force equals minus the counter-force ... self.assertTrue((f0_sim == -f1_sim).all()) # and has correct value. self.assertItemsFractionAlmostEqual(f1_sim, f1_ref) self.system.non_bonded_inter[0, 0].generic_lennard_jones.set_params( epsilon=0.)
def test_lj_generic(self): lj_eps = 2.12 lj_sig = 1.37 lj_cut = 2.122 lj_off = 0.185 lj_b1 = 4.22 lj_b2 = 3.63 lj_e1 = 10.32 lj_e2 = 5.81 lj_shift = -0.13 self.system.non_bonded_inter[0, 0].generic_lennard_jones.set_params( epsilon=lj_eps, sigma=lj_sig, cutoff=lj_cut, offset=lj_off, b1=lj_b1, b2=lj_b2, e1=lj_e1, e2=lj_e2, shift=lj_shift) E_ref = tests_common.lj_generic_potential( r=np.arange(1, 232) * self.step_width, eps=lj_eps, sig=lj_sig, cutoff=lj_cut, offset=lj_off, b1=lj_b1, b2=lj_b2, e1=lj_e1, e2=lj_e2, shift=lj_shift) for i in range(231): self.system.part[1].pos = self.system.part[1].pos + self.step self.system.integrator.run(recalc_forces=True, steps=0) # Calculate energies E_sim = self.system.analysis.energy()["non_bonded"] # Calculate forces f0_sim = np.copy(self.system.part[0].f) f1_sim = np.copy(self.system.part[1].f) f1_ref = self.axis * tests_common.lj_generic_force( espressomd, r=(i + 1) * self.step_width, eps=lj_eps, sig=lj_sig, cutoff=lj_cut, offset=lj_off, b1=lj_b1, b2=lj_b2, e1=lj_e1, e2=lj_e2) # Check that energies match, ... self.assertFractionAlmostEqual(E_sim, E_ref[i]) # force equals minus the counter-force ... np.testing.assert_array_equal(f0_sim, -f1_sim) # and has correct value. self.assertItemsFractionAlmostEqual(f1_sim, f1_ref) self.system.non_bonded_inter[0, 0].generic_lennard_jones.set_params( epsilon=0.)