add support for setting global energy for fix external to python module

This commit is contained in:
Axel Kohlmeyer
2021-07-16 17:43:44 -04:00
parent f3dc13c9dd
commit 5912d0a1c2
3 changed files with 30 additions and 5 deletions

View File

@ -1791,6 +1791,23 @@ class lammps(object):
# -------------------------------------------------------------------------
def fix_external_set_energy_global(self, fix_id, eng):
"""Get access to that array with per-atom forces of a fix external instance with a given fix ID.
This is a wrapper around the :cpp:func:`lammps_fix_external_get_force` function
of the C-library interface.
:param fix_id: Fix-ID of a fix external instance
:type: string
:param eng: potential energy to be added by fix external
:type: float
"""
with ExceptionCheck(self):
return self.lib.lammps_fix_external_set_energy_global(self.lmp, fix_id.encode(), eng)
# -------------------------------------------------------------------------
def get_neighlist(self, idx):
"""Returns an instance of :class:`NeighList` which wraps access to the neighbor list with the given index

View File

@ -28,6 +28,9 @@ static void callback_one(void *handle, step_t timestep, int nlocal, tag_t *, dou
{
for (int i = 0; i < nlocal; ++i)
f[i][0] = f[i][1] = f[i][2] = (double)timestep;
if (timestep < 10)
lammps_fix_external_set_energy_global(handle, "ext", 0.0);
else
lammps_fix_external_set_energy_global(handle, "ext", 1.0);
double v[6] = {1.0, 1.0, 1.0, 0.0, 0.0, 0.0};
lammps_fix_external_set_virial_global(handle, "ext", v);

View File

@ -8,6 +8,10 @@ def callback_one(lmp, ntimestep, nlocal, tag, x, f):
f[i][0] = float(ntimestep)
f[i][1] = float(ntimestep)
f[i][2] = float(ntimestep)
if ntimestep < 10:
lmp.fix_external_set_energy_global("ext",0.5)
else:
lmp.fix_external_set_energy_global("ext",1.0)
class PythonExternal(unittest.TestCase):
def testExternalCallback(self):
@ -35,6 +39,7 @@ class PythonExternal(unittest.TestCase):
lmp.set_fix_external_callback("ext",callback_one,lmp)
lmp.command("run 10 post no")
self.assertAlmostEqual(lmp.get_thermo("temp"),1.0/30.0,14)
self.assertAlmostEqual(lmp.get_thermo("pe"),1.0/8.0,14)
def testExternalArray(self):
"""Test fix external from Python with pf/array"""