Extend lib interface to set fix external callback
This allows creating a callback in Python and attaching it to a fix external instance.
This commit is contained in:
36
examples/COUPLE/python/example.py
Normal file
36
examples/COUPLE/python/example.py
Normal file
@ -0,0 +1,36 @@
|
||||
# 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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user