diff options
Diffstat (limited to 'Source/WarpXWrappers.cpp')
-rw-r--r-- | Source/WarpXWrappers.cpp | 72 |
1 files changed, 64 insertions, 8 deletions
diff --git a/Source/WarpXWrappers.cpp b/Source/WarpXWrappers.cpp index bc6300bb3..d106cfca7 100644 --- a/Source/WarpXWrappers.cpp +++ b/Source/WarpXWrappers.cpp @@ -85,6 +85,8 @@ extern "C" { WarpX& warpx = WarpX::GetInstance(); warpx.InitData(); + if (warpx_py_afterinit) warpx_py_afterinit(); + if (warpx_py_particleloader) warpx_py_particleloader(); } void warpx_finalize () @@ -92,9 +94,53 @@ extern "C" WarpX::ResetInstance(); } - void warpx_set_callback_py_funcs (WARPX_CALLBACK_PY_FUNC_1 print_step) + void warpx_set_callback_py_afterinit (WARPX_CALLBACK_PY_FUNC_0 callback) { - warpx_py_print_step = print_step; + warpx_py_afterinit = callback; + } + void warpx_set_callback_py_beforeEsolve (WARPX_CALLBACK_PY_FUNC_0 callback) + { + warpx_py_beforeEsolve = 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) + { + warpx_py_appliedfields = callback; } void warpx_evolve (int numsteps) @@ -248,11 +294,16 @@ extern "C" auto & myspc = mypc.GetParticleContainer(speciesnumber); const int level = 0; - *num_tiles = myspc.numLocalTilesAtLevel(level); + + int i = 0; + for (WarpXParIter pti(myspc, level); pti.isValid(); ++pti, ++i) {} + + // *num_tiles = myspc.numLocalTilesAtLevel(level); + *num_tiles = i; *particles_per_tile = (int*) malloc(*num_tiles*sizeof(int)); - + double** data = (double**) malloc(*num_tiles*sizeof(typename WarpXParticleContainer::ParticleType*)); - int i = 0; + i = 0; for (WarpXParIter pti(myspc, level); pti.isValid(); ++pti, ++i) { auto& aos = pti.GetArrayOfStructs(); data[i] = (double*) aos.data(); @@ -267,11 +318,16 @@ extern "C" auto & myspc = mypc.GetParticleContainer(speciesnumber); const int level = 0; - *num_tiles = myspc.numLocalTilesAtLevel(level); + + int i = 0; + for (WarpXParIter pti(myspc, level); pti.isValid(); ++pti, ++i) {} + + // *num_tiles = myspc.numLocalTilesAtLevel(level); + *num_tiles = i; *particles_per_tile = (int*) malloc(*num_tiles*sizeof(int)); - + double** data = (double**) malloc(*num_tiles*sizeof(double*)); - int i = 0; + i = 0; for (WarpXParIter pti(myspc, level); pti.isValid(); ++pti, ++i) { auto& soa = pti.GetStructOfArrays(); data[i] = (double*) soa.GetRealData(comp).dataPtr(); |