aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Python/pywarpx/callbacks.py30
-rw-r--r--Source/Evolve/WarpXEvolve.cpp2
-rw-r--r--Source/Python/WarpX_py.H7
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;