.. index:: fix python/invoke

fix python/invoke command
=========================

Syntax
""""""

.. code-block:: LAMMPS

   fix ID group-ID python/invoke N callback function_name

* ID, group-ID are ignored by this fix
* python/invoke = style name of this fix command
* N = execute every N steps
* callback = *post_force* or *end_of_step*

  .. parsed-literal::

       *post_force* = callback after force computations on atoms every N time steps
       *end_of_step* = callback after every N time steps

Examples
""""""""

.. code-block:: LAMMPS

   python post_force_callback here """
   from lammps import lammps

   def post_force_callback(lammps_ptr, vflag):
       lmp = lammps(ptr=lammps_ptr)
       # access LAMMPS state using Python interface
   """

   python end_of_step_callback here """
   def end_of_step_callback(lammps_ptr):
       lmp = lammps(ptr=lammps_ptr)
       # access LAMMPS state using Python interface
   """

   fix pf  all python/invoke 50 post_force post_force_callback
   fix eos all python/invoke 50 end_of_step end_of_step_callback

Description
"""""""""""

This fix allows you to call a Python function during a simulation run.
The callback is either executed after forces have been applied to atoms
or at the end of every N time steps.

Callback functions must be declared in the global scope of the
active Python interpreter. This can either be done by defining it
inline using the python command or by importing functions from other
Python modules. If LAMMPS is driven using the library interface from
Python, functions defined in the driving Python interpreter can also
be executed.

Each callback is given a pointer object as first argument. This can be
used to initialize an instance of the lammps Python interface, which
gives access to the LAMMPS state from Python.

.. warning::

   While you can access the state of LAMMPS via library functions
   from these callbacks, trying to execute input script commands will in the best
   case not work or in the worst case result in undefined behavior.

Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

No information about this fix is written to :doc:`binary restart files <restart>`.  None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix.  No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command.  This fix is not invoked during :doc:`energy minimization <minimize>`.

Restrictions
""""""""""""

This fix is part of the PYTHON package.  It is only enabled if LAMMPS
was built with that package.  See the :doc:`Build package <Build_package>` page for more info.

Building LAMMPS with the PYTHON package will link LAMMPS with the
Python library on your system.  Settings to enable this are in the
lib/python/Makefile.lammps file.  See the lib/python/README file for
information on those settings.

Related commands
""""""""""""""""

:doc:`python command <python>`
