Mallard 0.8.0
Unstructured, GPU accelerated, high-order finite volume CFD solver
Mallard website
Loading...
Searching...
No Matches
reactor.h File Reference

Adiabatic constant-volume reactor: the chemistry of one cell over a splitting step, integrated with RODAS. More...

#include <Kokkos_Core.hpp>
#include <cstdint>
#include "kinetics.h"
#include "rosenbrock.h"
#include "sparse_lu.h"
#include "thermo.h"

Go to the source code of this file.

Classes

struct  chemistry::ReactorOptions
 
struct  chemistry::ConstantVolumeReactor< MemorySpace >
 Adiabatic, constant-volume reactor at density rho with state y = (Y_1 .. Y_Ns, T): dY_k/dt = W_k omega_k / rho, dT/dt = -sum_k u_k omega_k / (rho cv), with u_k the molar internal energies. The ODE system of integrate(). More...
 
struct  chemistry::IgnitionObserver
 Ignition delay as the time of the maximum of dT/dt: the vertex of the parabola through the largest sample and its two neighbors. The reactor has ignited once dT/dt has since fallen below half that maximum: the thermal runaway is over, however small the temperature rise (very lean mixtures). More...
 

Namespaces

namespace  chemistry
 

Functions

bool chemistry::use_sparse_lu (const ReactorOptions &options, const Mechanism &mechanism)
 Whether a mechanism's reactors use the sparse LU: as options.sparse says, or automatically from 30 species when the factors of the static pattern fill at most 60% of the dense matrix (GRI-3.0 53%: sparse; on an A100 the sparse LU is about 3x faster at 100 species).
 
template<typename MemorySpace >
KOKKOS_INLINE_FUNCTION uint32_t chemistry::reactor_fast_size (const KineticsTable< MemorySpace > &kinetics, const SparseLUPattern< MemorySpace > *sparse=nullptr)
 Doubles of the part of advance_reactor()'s work memory that can be in fast (team scratch) memory: the state, the factors and the integrator's vectors, the most used in the factorization and solves.
 
template<typename MemorySpace >
KOKKOS_INLINE_FUNCTION uint32_t chemistry::reactor_work_size (const KineticsTable< MemorySpace > &kinetics, const SparseLUPattern< MemorySpace > *sparse=nullptr)
 Doubles of work memory advance_reactor() needs, the linear solver's included: dense, or sparse with a SparseLUPattern.
 
template<bool Sparse = false, typename Lanes , typename MemorySpace , typename Observer = NoObserver>
KOKKOS_INLINE_FUNCTION RosenbrockResult chemistry::advance_reactor (const Lanes &lanes, const ThermoTable< MemorySpace > &thermo, const KineticsTable< MemorySpace > &kinetics, const double rho, const double dt, double *Y, double &T, double &h, const ReactorOptions &options, double *work, uint32_t *pivot, Observer &&observer=Observer(), const SparseLUPattern< MemorySpace > *sparse=nullptr, double *fast=nullptr, const double *forcing=nullptr)
 Advance one adiabatic constant-volume reactor over dt: integrate (Y, T), then clip negative mass fractions, renormalize, and take T from the initial internal energy (so energy is exact). Negative initial mass fractions are clipped the same way before integrating.
 
template<typename MemorySpace , typename Observer = NoObserver>
KOKKOS_INLINE_FUNCTION RosenbrockResult chemistry::advance_reactor (const ThermoTable< MemorySpace > &thermo, const KineticsTable< MemorySpace > &kinetics, const double rho, const double dt, double *Y, double &T, double &h, const ReactorOptions &options, double *work, uint32_t *pivot, Observer &&observer=Observer(), const SparseLUPattern< MemorySpace > *sparse=nullptr)
 advance_reactor() by one thread.
 

Detailed Description

Adiabatic constant-volume reactor: the chemistry of one cell over a splitting step, integrated with RODAS.

Author
Matthew Bonanni (mbona.nosp@m.nni0.nosp@m.01@gm.nosp@m.ail..nosp@m.com)
Version
0.3
Date
2026-10-03