diff options
author | 2022-01-19 09:01:47 -0800 | |
---|---|---|
committer | 2022-01-19 09:01:47 -0800 | |
commit | 4e9d98c528dfebf05aa9d07edf451eff29f37f65 (patch) | |
tree | 2a3ed3586aa7895455f40ec4f40d7b1bb2156ef6 /Source/Python/WarpXWrappers.cpp | |
parent | 73858579e90701b5f1fc1ef9009a8067294aa975 (diff) | |
download | WarpX-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.cpp | 66 |
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) |