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.