Skip to content

Commit b23ee4d

Browse files
committed
Improved documentation
1 parent 73e5cd8 commit b23ee4d

File tree

3 files changed

+248
-304
lines changed

3 files changed

+248
-304
lines changed

docs/source/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ In case you are already fluent in compiling C++ projects and HPC, running PIC si
8686
models/collisional_ionization
8787
models/photons
8888
models/binary_collisions
89+
models/fusion
8990
models/atomic_physics
9091

9192
.. toctree::

docs/source/models/fusion.rst

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
.. _model-fusion:
2+
3+
Fusion
4+
======
5+
6+
Overview
7+
--------
8+
9+
The PIConGPU Fusion Extension enables Monte Carlo simulation of nuclear fusion reactions between macro-particles based on [Wu2021]_ and [Higginson2019]_. The extension implements fully relativistic binary collision algorithms with local charge and (if possible) mass conservation, producing physically accurate fusion products with proper energy-momentum distributions.
10+
11+
See also: the workflow guide in :doc:`../usage/workflows/fusionReactions` for setup and parameter examples.
12+
13+
Use Cases
14+
---------
15+
- Inertial confinement fusion (ICF) plasma simulations
16+
- High-energy density physics with fusion heating
17+
- Thermonuclear burn studies in laser-plasma interactions
18+
19+
Key Features
20+
------------
21+
- Relativistic collision algorithm and cross-section evaluation
22+
- Stoichiometric multiplicity with compile-time weight validation
23+
- Local charge conservation always; local mass conservation when non-degenerate
24+
- Support for multiple simultaneous fusion channels
25+
26+
Species Definition Requirements
27+
-------------------------------
28+
For species setup details and examples, see the workflow page:
29+
:doc:`../usage/workflows/fusionReactions`.
30+
31+
Fusion Reaction Configuration (Summary)
32+
--------------------------------------
33+
For a minimal configuration pattern and parameter examples, see the workflow page:
34+
:doc:`../usage/workflows/fusionReactions`.
35+
36+
Pipeline configuration and parameters are detailed in the workflow page.
37+
38+
Fusion Particle Creation Algorithm
39+
----------------------------------
40+
41+
Purpose
42+
-------
43+
The fusion particle creation algorithm enforces local charge conservation by calculating compile-time weights for product particles. Local charge conservation within each computational cell is essential for numerical stability in PIC simulations, preventing spurious electric fields from charge imbalances.
44+
45+
Problem Definition
46+
------------------
47+
Input: Two reactant particles of some weight undergoing fusion. The Fusion algorithm determines the amount of fuel (reactants) to consume in the fusion process. This fuel has an associated weight W_p that represents the total weight of products (of each species) to be created. The fractional weights W₁, W₂, W₃, W₄ are then multiplied by W_p to determine the actual weights of the outgoing particles.
48+
49+
Stoichiometric Multiplicity Limits and Invariants
50+
-------------------------------------------------
51+
We derive compile-time multiplicity limits (c₃, c₄) from species charges (Z) and mass numbers (A). These limits define how much of each product species must be created in total (across both reactant sites).
52+
53+
- Non-degenerate (det ≠ 0), where det := q₃m₄ − q₄m₃:
54+
55+
.. math::
56+
57+
\begin{bmatrix} q_3 & q_4 \\ m_3 & m_4 \end{bmatrix}
58+
\begin{bmatrix} c_3 \\ c_4 \end{bmatrix}
59+
=
60+
\begin{bmatrix} q_1{+}q_2 \\ m_1{+}m_2 \end{bmatrix}
61+
62+
- Degenerate (q₃/m₃ = q₄/m₄): symmetric limits
63+
64+
.. math::
65+
66+
c_3 = c_4 = \frac{q_1{+}q_2}{q_3{+}q_4}\quad (q_3{+}q_4 \ne 0),\qquad
67+
c_3 = c_4 = \frac{m_1{+}m_2}{m_3{+}m_4}\quad (\text{if } q_3{+}q_4 \approx 0)
68+
69+
With multiplicity limits, the invariants are:
70+
- Weight bounds: 0 ≤ Wᵢ ≤ cᵢ
71+
- Weight conservation: W₁ + W₃ = c₃, W₂ + W₄ = c₄
72+
- Local charge: q₁ = W₁q₃ + W₂q₄ and q₂ = W₃q₃ + W₄q₄
73+
- Local mass (when Algorithm 1 is valid): m₁ = W₁m₃ + W₂m₄ and m₂ = W₃m₃ + W₄m₄
74+
75+
Algorithm 1: Mass-Charge Conservation under Multiplicity Limits
76+
----------------------------------------------------------------
77+
Solve for site-1 weights (W₁, W₂) using:
78+
79+
.. math::
80+
81+
\begin{bmatrix} q_3 & q_4 \\ m_3 & m_4 \end{bmatrix}
82+
\begin{bmatrix} W_1 \\ W_2 \end{bmatrix} = \begin{bmatrix} q_1 \\ m_1 \end{bmatrix}
83+
84+
Then set W₃ = c₃ − W₁ and W₄ = c₄ − W₂. Accept only if det ≠ 0, all 0 ≤ Wᵢ ≤ cᵢ, and site-2 mass/charge match.
85+
86+
Algorithm 2: Charge-Only Conservation under Multiplicity Limits
87+
---------------------------------------------------------------
88+
If Algorithm 1 is invalid (det ≈ 0 or out-of-limit weights), enforce only local charge with multiplicity limits. Case handling is neutral-friendly and macroparticle-minimizing.
89+
90+
Implementation Details
91+
---------------------
92+
In ``include/picongpu/particles/fusion/detail/Creation.hpp`` both algorithms are evaluated at compile time using constexpr functions:
93+
94+
- ``computeStoichiometryCaps()``: derives (c₃, c₄) from species
95+
- ``calculateMassChargeConservingWeightsWithCaps()``: local mass+charge under multiplicity limits
96+
- ``calculateChargeOnlyWithCaps()``: charge-only robust fallback under multiplicity limits
97+
98+
Relativistic Kinematics and Fusion Sampling (Cannoni, 2016)
99+
-----------------------------------------------------------
100+
For each candidate pair we compute kinematics using Lorentz-invariant quantities to avoid loss of precision at high γ, following Cannoni’s formulation of invariant relative velocity [Cannoni2016]_. We adopt the metric signature (+, −, −, −) and four-momentum convention :math:`p_i^\mu = (E_i/c, \vec{p}_i)`.
101+
102+
Key kinematic invariants (computed from lab-frame inputs)
103+
104+
- Total four-momentum: :math:`P^\mu = p_1^\mu + p_2^\mu = (E_{\mathrm{tot}}/c, \vec{p}_{\mathrm{tot}})`.
105+
- Mandelstam s (energy-squared invariant):
106+
107+
.. math::
108+
109+
s \;:=\; c^2 P^\mu P_\mu
110+
\,=\, E_{\mathrm{tot}}^2 - |\vec{p}_{\mathrm{tot}}|^2 c^2 \,=\, (p_1^\mu + p_2^\mu)^2 c^2.
111+
112+
- Center-of-mass (CM) energy and velocity:
113+
114+
.. math::
115+
116+
E_{\mathrm{cm}} = \sqrt{s},\quad
117+
\vec{V}_{\mathrm{cm}} = \frac{c^2\,\vec{p}_{\mathrm{tot}}}{E_{\mathrm{tot}}},\quad
118+
\gamma_{\mathrm{cm}} = \left(1- \frac{|\vec{V}_{\mathrm{cm}}|^2}{c^2}\right)^{-1/2}.
119+
120+
- Relative Lorentz factor (Cannoni):
121+
122+
.. math::
123+
124+
\gamma_r \,=\, \frac{s - m_1^2 c^4 - m_2^2 c^4}{2 m_1 m_2 c^4}, \qquad
125+
|v_{\mathrm{rel}}| \,=\, c\,\sqrt{1 - \gamma_r^{-2}}.
126+
127+
Associated Møller (invariant) relative speed (used for rates):
128+
129+
.. math::
130+
131+
v_{M} \,=\, |v_{\mathrm{rel}}|\,\gamma_{\mathrm{cm}}.
132+
133+
Fusion probability and sampling
134+
-------------------------------
135+
- The microscopic cross section functor :math:`\sigma(E_{\mathrm{cm}})` (e.g., Bosch–Hale) is evaluated at the pair’s CM energy :math:`\sqrt{s}`.
136+
- Over a timestep :math:`\Delta t`, the acceptance probability scales as
137+
138+
.. math::
139+
140+
P \;\propto\; \sigma(E_{\mathrm{cm}})\, v_M\, \Delta t
141+
142+
- On acceptance, sample an isotropic direction in the CM frame; compute product total energies
143+
144+
.. math::
145+
146+
E_{3,\mathrm{cm}} = \frac{s + (m_3^2 - m_4^2)c^4}{2\,\sqrt{s}}, \qquad
147+
E_{4,\mathrm{cm}} = E_{\mathrm{cm}} - E_{3,\mathrm{cm}},
148+
149+
and the common CM momentum magnitude from :math:`E^2 = p^2 c^2 + m^2 c^4`. Notation (CM frame). Let :math:`\vec{P}_1` denote the three-momentum of product 1 and :math:`\vec{P}_2` that of product 2, then
150+
151+
.. math::
152+
153+
\vec{P}_1 = -\vec{P}_2,\qquad |\vec{P}_1| = |\vec{P}_2| = \frac{\sqrt{E_{3,\mathrm{cm}}^2 - m_3^2 c^4}}{c} = \frac{\sqrt{E_{4,\mathrm{cm}}^2 - m_4^2 c^4}}{c}.
154+
155+
Finally, boost both product four-momenta back to the lab frame with :math:`\vec{V}_{\mathrm{cm}}`.
156+
157+
Code Flow and Implementation
158+
----------------------------
159+
160+
Fusion Extension Architecture
161+
-----------------------------
162+
163+
The fusion extension follows this execution flow::
164+
165+
simulation.hpp → Fusion.x.cpp → Collider.hpp → WithPeer.hpp
166+
└─ IntraCollision.hpp
167+
168+
Core Components
169+
---------------
170+
- ``Inter/Intra-Collision.hpp``: Combines collision algorithm from the Collision Extension with the Creation Kernel
171+
- ``FusionFunctor.hpp``: Interfaces between collision framework and physics algorithms
172+
- ``FusionAlgorithm.hpp``: Implements relativistic fusion physics and product momentum calculation
173+
174+
Algorithm Chain
175+
---------------
176+
177+
.. code-block:: text
178+
179+
uses: (particles/fusion/detail)
180+
InterCollision.hpp ──────────────────────────────→ FusionFunctor.hpp → FusionAlgorithm.hpp
181+
└─ Creation.hpp
182+
183+
References
184+
----------
185+
186+
.. [Wu2021]
187+
D. Wu, Z. M. Sheng, W. Yu, S. Fritzsche, and X. T. He.
188+
*A pairwise nuclear fusion algorithm for particle-in-cell simulations: Weighted particles at relativistic energies.*
189+
AIP Advances 11, 075003 (2021).
190+
https://doi.org/10.1063/5.0051178
191+
192+
.. [Higginson2019]
193+
D. P. Higginson, A. Link, and A. Schmidt.
194+
*A pairwise nuclear fusion algorithm for weighted particle-in-cell plasma simulations.*
195+
Journal of Computational Physics 388, 439–453 (2019).
196+
https://doi.org/10.1016/j.jcp.2019.03.020
197+
198+
.. [Cannoni2016]
199+
M. Cannoni.
200+
*Lorentz invariant relative velocity and relativistic binary collisions.*
201+
arXiv:1605.00569 [hep-ph] (2016).
202+
https://arxiv.org/abs/1605.00569v2
203+
204+
.. [Takizuka1977]
205+
T. Takizuka and H. Abe.
206+
*A binary collision model for plasma simulation with a particle code.*
207+
Journal of Computational Physics 25(3), 205–219 (1977).
208+
https://doi.org/10.1016/0021-9991(77)90099-7

0 commit comments

Comments
 (0)