QED

Quantum synchrotron

Note

Section empty!

Breit-Wheeler

Note

Section empty!

Schwinger process

If the code is compiled with QED and the user activates the Schwinger process in the input file, electron-positron pairs can be created in vacuum in the function MultiParticleContainer::doQEDSchwinger:

void MultiParticleContainer::doQEDSchwinger()

If Schwinger process is activated, this function is called at every timestep in Evolve and is used to create Schwinger electron-positron pairs. Within this function we loop over all cells to calculate the number of created physical pairs. If this number is higher than 0, we create a single particle per species in this cell, with a weight corresponding to the number of physical particles.

MultiParticleContainer::doQEDSchwinger in turn calls the function filterCreateTransformFromFAB:

Warning

doxygenfunction: Unable to resolve function “filterCreateTransformFromFAB” with arguments (DstTile&, DstTile&, const amrex::Box, const FABs&, const Index, const Index, FilterFunc&&, CreateFunc1&&, CreateFunc2&&, TransFunc&&) in doxygen xml output for project “WarpX” from directory: ../doxyxml/. Potential matches:

- template<int N, typename DstPC, typename DstTile, typename FAB, typename Index, typename CreateFunc1, typename CreateFunc2, typename TransFunc, amrex::EnableIf_t<std::is_integral<Index>::value, int> foo = 0> Index filterCreateTransformFromFAB(DstPC &pc1, DstPC &pc2, DstTile &dst1, DstTile &dst2, const amrex::Box box, const FAB *src_FAB, const Index *mask, const Index dst1_index, const Index dst2_index, CreateFunc1 &&create1, CreateFunc2 &&create2, TransFunc &&transform) noexcept
- template<int N, typename DstPC, typename DstTile, typename FABs, typename Index, typename FilterFunc, typename CreateFunc1, typename CreateFunc2, typename TransFunc> Index filterCreateTransformFromFAB(DstPC &pc1, DstPC &pc2, DstTile &dst1, DstTile &dst2, const amrex::Box box, const FABs &src_FABs, const Index dst1_index, const Index dst2_index, FilterFunc &&filter, CreateFunc1 &&create1, CreateFunc2 &&create2, TransFunc &&transform) noexcept

filterCreateTransformFromFAB proceeds in three steps. In the filter phase, we loop on every cell and calculate the number of physical pairs created within the time step dt as a function of the electromagnetic field at the given cell position. This probabilistic calculation is done via a wrapper that calls the PICSAR library. In the create phase, the particles are created at the desired positions, currently at the cell nodes. In the transform phase, we assign a weight to the particles depending on the number of physical pairs created. At most one macroparticle is created per cell per timestep per species, with a weight corresponding to the total number of physical pairs created.

So far the Schwinger module requires using warpx.grid_type = collocated or algo.field_gathering = momentum-conserving (so that the auxiliary fields are calculated on the nodes) and is not compatible with either mesh refinement, RZ coordinates or single precision.