ComputationalRadiationPhysics / picongpu

Performance-Portable Particle-in-Cell Simulations for the Exascale Era :sparkles:
https://picongpu.readthedocs.io
Other
689 stars 216 forks source link

Pusher selection at run time / chains of pushers. #3277

Open Anton-Le opened 4 years ago

Anton-Le commented 4 years ago

Similar to #3185 but more general:

It would be nice to have the ability to switch pushers using command-line arguments.

Simple use case: Accelerate a particle bunch using the acceleration pusher, propagate it for a while in vacuum using e.g. Vay and then simulate a bunch-target interaction using yet another pusher (e.g. Landau-Lifschitz Radiation Reaction).

After an offline discussion with @psychocoderHPC and @sbastrakov the follwoing seems to be the ideal end result: The user would provide a list/vector of pushers in the .param files that could be used in the simulation. At run time one would then provide a start/stop times for the pusher --<species>_<pusher>.start <simulationStep> --<species>_<pusher>.stop <simulationStep> (with one pusher being the default fallback).

Issue #3185 would be a first step towards this.

sbastrakov commented 4 years ago

So now #3185 is implemented. With the new composite pusher, it is possible to combine two pushers and switch between those with a user-provided functor. Now, one or both of the combined pushers can be composite as well, which theoretically allows chaining any fixed amount. However, that would be really awkward to do in practice. One can implement a generalization which takes a (type-)list of pushers and has a functor to select one of those. I could do it at some point, but do not have time for it right now.