Thermonuclear Burn
The tnburn package models thermonuclear (fusion) reactions. It evaluates temperature-dependent reaction rates for a user-specified network of two-body reactions, evolves the isotopic composition, and couples the released energy back into the fluid. Reactivities and reaction energetics are supplied through tabulated nuclear data.
Governing Equations
Burn in RIOT is per-material: reactions take place among the isotopes of a single material \(m\), driven by that material’s own isotope densities and phase/volume fractions. The isotope inventory is carried per material (the sparse field ccmat::iso), and the reactions modify per-material cell-volume-averaged densities that then aggregate to the bulk density as in Section Per-Material and Bulk Quantities. The released energy, by contrast, is deposited directly into the bulk energy equation.
Reaction Rate
Within material \(m\), for a two-body reaction \(r\) consuming reactant isotopes \(1\) and \(2\), the volumetric reaction rate is
where \(\bar\rho_1,\bar\rho_2\) are the reactant cell-volume-averaged densities within that material, \(m_1,m_2\) their atomic masses, \(\langle\sigma v\rangle_r(T)\) the temperature-dependent reactivity, \(f_m\) the phase fraction, and \(f_{\text{vol},m}\) the material volume fraction (the \(1/f_{\text{vol},m}\) factor converts cell-volume-averaged densities to physical, material-intrinsic number densities). The reactivity \(\langle\sigma v\rangle_r(T)\) is tabulated against \(\log T\) and interpolated at run time; reactions are gated on the volume fraction exceeding vol_frac_thresh.
Isotopic Composition
Each participating per-material isotope density is sourced by every reaction it takes part in. In flux-conservation form, with \(\nu_{ir}\) the (signed) stoichiometric coefficient of isotope \(i\) in reaction \(r\) (negative for reactants, positive for products),
Summing the isotope sources within a material gives the source on that material’s cell-volume-averaged density \(\bar\rho_m\), and the bulk density follows by the cell-averaged sum \(\rho=\sum_m\bar\rho_m\); the per-reaction net \(\sum_i \nu_{ir}m_i\) reflects the small mass defect converted to energy.
Energy Release
The reaction energetics enter the total-energy equation as a source that removes the reactant input energy and deposits the product kinetic energies (both tabulated against temperature),
where \(\varepsilon^{\text{in}}_r\) is the reactant input energy, \(\varepsilon^{\text{out}}_{r,p}\) the energy carried by product \(p\), and \(\mu_{r,p}\) its multiplicity. A product may be flagged to escape the problem rather than deposit locally (see deposit_locally_), in which case its mass and energy are removed. The mass sources above additionally induce momentum and kinetic-energy sources \(\vec{v}\,(\partial_t\rho)_{\text{TN}}\) and \(\tfrac{1}{2}|\vec{v}|^2(\partial_t\rho)_{\text{TN}}\) so that the burned mass carries the local velocity.
Reaction Count
A per-reaction count density \(Q_r\) is advected as a conserved quantity sourced by the reaction rate,
providing an integrated diagnostic of the total number of reactions.
Input Parameters
Thermonuclear burn is enabled with the tn toggle in the <physics> block (Section Enabling Physics: the <physics> Block). Sparse physics (Chapter Sparse Physics) is not supported with burn, so sparse_physics must be set false.
Parameter |
Type |
Default |
Description |
|---|---|---|---|
tn |
bool |
|
Enable thermonuclear burn. |
sparse_physics |
bool |
|
Not supported with burn; set |
The reaction network is specified in the <tnburn> block by contiguous, zero-based reaction\(K\) entries in NDI reaction notation. Products may be individually flagged to deposit locally or escape.
Parameter |
Type |
Default |
Description |
|---|---|---|---|
reaction\(K\) |
string |
— |
The \(K\)th reaction, e.g. |
deposit_locally_\(Z\) |
bool |
|
Deposit product with ZAID \(Z\) locally; if |
The nuclear data table (isotope masses, charges, reactivities, and energetics) is selected in the <isotope_data> block:
Parameter |
Type |
Default |
Description |
|---|---|---|---|
filename |
string |
|
HDF5 nuclear-data file (produced by the |
Each burning material lists its isotopes by ZAID in its <material> block via isotope\(K\) and initial mass fractions isotope\(K\)_mfrac (see Chapter Materials and Equations of State).
Registered Fields
The burn package registers the per-reaction count fields in the table below; the isotope densities it evolves (ccmat::iso) are registered by the materials package when isotopes are present. All are sparse and carry the burn flag.
Field |
Symbol |
Components |
Metadata / description |
|---|---|---|---|
ccmat::tn_reaction_density |
\(Q_r\) |
\(N_{\text{rxn}}\) |
Cell, Independent, Intensive, Conserved, Sparse, FillGhost, Advected, WithFluxes, BurnFlag; per-reaction count density. |
cm::tn_specific_reactions |
— |
\(N_{\text{rxn}}\) |
Cell, Derived, OneCopy, Sparse, BurnFlag; specific reaction rate. |
ccmat::iso |
\(\bar\rho_i\) |
\(N_{\text{iso}}\) |
Cell, Independent, Intensive, Conserved, Sparse, FillGhost, WithFluxes, Advected, BurnFlag; isotope partial densities (via materials). |
Example
A deuterium–tritium material burning via the DT reaction, with neutrons removed from the problem:
riot.input("physics", tn=True, sparse_physics=False)
riot.input("material0", label="DT",
eos_type="IdealGas", Gamma=1.4, Cv=3.0e12,
isotope0=1002, # deuterium
isotope1=1003, # tritium
isotope2=2004, # helium-4 (alpha)
isotope3=1) # neutron
riot.input("tnburn", reaction0="d+t->n+a",
deposit_locally_1=False) # neutrons escape
riot.input("isotope_data", filename="isotope_data.hdf5")