parameters: (caller, ntimestep, nlocal, tag, x, fext)
docstring: 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
docstring_summary: This callback receives a caller object that was setup when registering the callback
docstring_tokens: This callback receives a caller object that was setup when registering the callback
function: 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)
function_tokens: def callback ( caller , ntimestep , nlocal , tag , x , fext ) : 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 )