diff options
-rw-r--r-- | Python/pywarpx/callbacks.py | 30 | ||||
-rw-r--r-- | Source/Evolve/WarpXEvolve.cpp | 2 | ||||
-rw-r--r-- | Source/Python/WarpX_py.H | 7 |
3 files changed, 36 insertions, 3 deletions
diff --git a/Python/pywarpx/callbacks.py b/Python/pywarpx/callbacks.py index 9ae36266e..8fa08e6ef 100644 --- a/Python/pywarpx/callbacks.py +++ b/Python/pywarpx/callbacks.py @@ -250,6 +250,8 @@ class CallbackFunctions(object): # --- Now create the actual instances. _afterinit = CallbackFunctions('afterinit') +_beforecollisions = CallbackFunctions('beforecollisions') +_aftercollisions = CallbackFunctions('aftercollisions') _beforeEsolve = CallbackFunctions('beforeEsolve') _poissonsolver = CallbackFunctions('poissonsolver') _afterEsolve = CallbackFunctions('afterEsolve') @@ -314,6 +316,34 @@ def isinstalledafterinit(f): return _afterinit.isinstalledfuncinlist(f) # ---------------------------------------------------------------------------- +def callfrombeforecollisions(f): + installbeforecollisions(f) + return f +def installbeforecollisions(f): + "Adds a function to the list of functions called before collisions" + _beforecollisions.installfuncinlist(f) +def uninstallbeforecollisions(f): + "Removes the function from the list of functions called before collisions" + _beforecollisions.uninstallfuncinlist(f) +def isinstalledbeforecollisions(f): + "Checks if the function is called before collisions" + return _beforecollisions.isinstalledfuncinlist(f) + +# ---------------------------------------------------------------------------- +def callfromaftercollisions(f): + installaftercollisions(f) + return f +def installaftercollisions(f): + "Adds a function to the list of functions called after collisions" + _aftercollisions.installfuncinlist(f) +def uninstallaftercollisions(f): + "Removes the function from the list of functions called after collisions" + _aftercollisions.uninstallfuncinlist(f) +def isinstalledaftercollisions(f): + "Checks if the function is called after collisions" + return _aftercollisions.isinstalledfuncinlist(f) + +# ---------------------------------------------------------------------------- def callfrombeforeEsolve(f): installbeforeEsolve(f) return f diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp index 86bcc7fb7..a5ae7984a 100644 --- a/Source/Evolve/WarpXEvolve.cpp +++ b/Source/Evolve/WarpXEvolve.cpp @@ -156,7 +156,9 @@ WarpX::Evolve (int numsteps) // Run multi-physics modules: // ionization, Coulomb collisions, QED doFieldIonization(); + ExecutePythonCallback("beforecollisions"); mypc->doCollisions( cur_time ); + ExecutePythonCallback("aftercollisions"); #ifdef WARPX_QED doQEDEvents(); mypc->doQEDSchwinger(); diff --git a/Source/Python/WarpX_py.H b/Source/Python/WarpX_py.H index efc248591..15076ea35 100644 --- a/Source/Python/WarpX_py.H +++ b/Source/Python/WarpX_py.H @@ -19,9 +19,10 @@ * * The keys of the map describe at what point in the simulation the python * functions will be called. Currently supported keys (callback points) are - * afterinit, beforeEsolve, poissonsolver, afterEsolve, beforedeposition, - * afterdeposition, particlescraper, particleloader, beforestep, afterstep, - * afterrestart, particleinjection and appliedfields. + * afterinit, beforecollisions, aftercollisions, beforeEsolve, poissonsolver, + * afterEsolve, beforedeposition, afterdeposition, particlescraper, + * particleloader, beforestep, afterstep, afterrestart, particleinjection and + * appliedfields. */ extern std::map< std::string, WARPX_CALLBACK_PY_FUNC_0 > warpx_callback_py_map; |