aboutsummaryrefslogtreecommitdiff
path: root/Docs/source/developers/qed.rst
blob: 9a01886ca9da33276d9145149cf6cae0c6454207 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
.. _developers-qed:

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``:

.. doxygenfunction:: MultiParticleContainer::doQEDSchwinger

``MultiParticleContainer::doQEDSchwinger`` in turn calls the function ``filterCreateTransformFromFAB``:

.. doxygenfunction:: filterCreateTransformFromFAB(DstTile&, DstTile&, const amrex::Box, const FABs&, const Index, const Index, FilterFunc&&, CreateFunc1&&, CreateFunc2&&, TransFunc&&)

``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.do_nodal=1`` 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.