37 lines
1.3 KiB
Python
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.fix_external")
|
|
|
|
# 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")
|
|
|
|
|