Files
lammps/examples/COUPLE/python/example.py
Richard Berger 2b42428d28 Extend lib interface to set fix external callback
This allows creating a callback in Python and attaching it to
a fix external instance.
2019-08-20 14:04:49 -06:00

37 lines
1.3 KiB
Python

# this example requires the LAMMPS Python package (lammps.py) to be installed
# and LAMMPS to be loadable as shared library in LD_LIBRARY_PATH
import lammps
def callback(caller, ntimestep, nlocal, tag, x, fext):
"""
This callback receives a caller object that was setup when registering the callback
In addition to timestep and number of local atoms, the tag and x arrays are passed as
NumPy arrays. The fext array is a force array allocated for fix external, which
can be used to apply forces to all atoms. Simply update the value in the array,
it will be directly written into the LAMMPS C arrays
"""
print("Data passed by caller (optional)", caller)
print("Timestep:", ntimestep)
print("Number of Atoms:", nlocal)
print("Atom Tags:", tag)
print("Atom Positions:", x)
print("Force Additions:", fext)
fext.fill(1.0)
print("Force additions after update:", fext)
print("="*40)
L = lammps.lammps()
L.file("in.lammps")
# you can pass an arbitrary Python object to the callback every time it is called
# this can be useful if you need more state information such as the LAMMPS ptr to
# make additional library calls
custom_object = ["Some data", L]
L.set_fix_external_callback("2", callback, custom_object)
L.command("run 100")