Skip to content

Commit

Permalink
Add Python callbacks before and after collisions (#2791)
Browse files Browse the repository at this point in the history
* add python callbacks before and after collisions

* re-order callback declarations
  • Loading branch information
roelof-groenewald committed Jan 26, 2022
1 parent 2a1510f commit 16eb75c
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 3 deletions.
30 changes: 30 additions & 0 deletions Python/pywarpx/callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,8 @@ def callfuncsinlist(self,*args,**kw):

# --- Now create the actual instances.
_afterinit = CallbackFunctions('afterinit')
_beforecollisions = CallbackFunctions('beforecollisions')
_aftercollisions = CallbackFunctions('aftercollisions')
_beforeEsolve = CallbackFunctions('beforeEsolve')
_poissonsolver = CallbackFunctions('poissonsolver')
_afterEsolve = CallbackFunctions('afterEsolve')
Expand Down Expand Up @@ -313,6 +315,34 @@ def isinstalledafterinit(f):
"Checks if the function is called after a init"
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)
Expand Down
2 changes: 2 additions & 0 deletions Source/Evolve/WarpXEvolve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
7 changes: 4 additions & 3 deletions Source/Python/WarpX_py.H
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit 16eb75c

Please sign in to comment.