aboutsummaryrefslogtreecommitdiff
path: root/Source/Python/WarpXWrappers.cpp
diff options
context:
space:
mode:
authorGravatar Roelof Groenewald <40245517+roelof-groenewald@users.noreply.github.com> 2022-01-19 09:01:47 -0800
committerGravatar GitHub <noreply@github.com> 2022-01-19 09:01:47 -0800
commit4e9d98c528dfebf05aa9d07edf451eff29f37f65 (patch)
tree2a3ed3586aa7895455f40ec4f40d7b1bb2156ef6 /Source/Python/WarpXWrappers.cpp
parent73858579e90701b5f1fc1ef9009a8067294aa975 (diff)
downloadWarpX-4e9d98c528dfebf05aa9d07edf451eff29f37f65.tar.gz
WarpX-4e9d98c528dfebf05aa9d07edf451eff29f37f65.tar.zst
WarpX-4e9d98c528dfebf05aa9d07edf451eff29f37f65.zip
Refactor python callback handling (#2703)
* added support to uninstall an external Poisson solver and return to using the default MLMG solver; also updated some callbacks.py calls to Python3 * refactor callback handling - use a map to handle all the different callbacks * warpx_callback_py_map does not need to link to C * Apply suggestions from code review Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * further suggested changes from code review * added function ExecutePythonCallback to reduce code duplication * moved ExecutePythonCallback to WarpX_py * added function IsPythonCallbackInstalled Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
Diffstat (limited to '')
-rw-r--r--Source/Python/WarpXWrappers.cpp66
1 files changed, 10 insertions, 56 deletions
diff --git a/Source/Python/WarpXWrappers.cpp b/Source/Python/WarpXWrappers.cpp
index d4589ec8a..7350bbbb6 100644
--- a/Source/Python/WarpXWrappers.cpp
+++ b/Source/Python/WarpXWrappers.cpp
@@ -164,14 +164,8 @@ namespace
{
WarpX& warpx = WarpX::GetInstance();
warpx.InitData();
- if (warpx_py_afterinit) {
- WARPX_PROFILE("warpx_py_afterinit");
- warpx_py_afterinit();
- }
- if (warpx_py_particleloader) {
- WARPX_PROFILE("warpx_py_particleloader");
- warpx_py_particleloader();
- }
+ ExecutePythonCallback("afterinit");
+ ExecutePythonCallback("particleloader");
}
void warpx_finalize ()
@@ -179,57 +173,17 @@ namespace
WarpX::ResetInstance();
}
- void warpx_set_callback_py_afterinit (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_afterinit = callback;
- }
- void warpx_set_callback_py_beforeEsolve (WARPX_CALLBACK_PY_FUNC_0 callback)
+ void warpx_set_callback_py (
+ const char* char_callback_name, WARPX_CALLBACK_PY_FUNC_0 callback)
{
- warpx_py_beforeEsolve = callback;
+ const std::string callback_name(char_callback_name);
+ warpx_callback_py_map[callback_name] = callback;
}
- void warpx_set_callback_py_poissonsolver (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_poissonsolver = callback;
- }
- void warpx_set_callback_py_afterEsolve (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_afterEsolve = callback;
- }
- void warpx_set_callback_py_beforedeposition (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_beforedeposition = callback;
- }
- void warpx_set_callback_py_afterdeposition (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_afterdeposition = callback;
- }
- void warpx_set_callback_py_particlescraper (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_particlescraper = callback;
- }
- void warpx_set_callback_py_particleloader (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_particleloader = callback;
- }
- void warpx_set_callback_py_beforestep (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_beforestep = callback;
- }
- void warpx_set_callback_py_afterstep (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_afterstep = callback;
- }
- void warpx_set_callback_py_afterrestart (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_afterrestart = callback;
- }
- void warpx_set_callback_py_particleinjection (WARPX_CALLBACK_PY_FUNC_0 callback)
- {
- warpx_py_particleinjection = callback;
- }
- void warpx_set_callback_py_appliedfields (WARPX_CALLBACK_PY_FUNC_0 callback)
+
+ void warpx_clear_callback_py (const char* char_callback_name)
{
- warpx_py_appliedfields = callback;
+ const std::string callback_name(char_callback_name);
+ warpx_callback_py_map.erase(callback_name);
}
void warpx_evolve (int numsteps)