54#ifndef OPENSWMM_ENGINE_TRANSPORT_REACTION_INTEGRATOR_HPP
55#define OPENSWMM_ENGINE_TRANSPORT_REACTION_INTEGRATOR_HPP
80 const std::vector<ReactionExprForm>*
forms =
nullptr;
97 bool initialized() const noexcept {
return n_ > 0 || terms_.capacity() > 0; }
102 std::vector<unsigned char> term_needed_;
103 std::vector<double> terms_;
104 std::vector<double> y_, y0_, ytmp_, rates_, err_;
105 std::vector<double> k1_, k2_, k3_, k4_, k5_, k6_;
106 std::vector<double> jac_, lu_;
107 std::vector<int> piv_;
108 std::vector<int> rate_idx_, equil_idx_, formula_idx_;
109 std::vector<double> res_, res2_, dy_;
110 std::vector<double> grp_out_;
118 bool jac_valid_ =
false;
120 bool lu_valid_ =
false;
121 double lu_scale_ = 0.0;
171 const std::vector<RxExprSpan>& expressions,
double dt,
double* species,
172 double* hydvar,
RxWorkspace& ws,
const double* pollutants =
nullptr,
173 const double* kinetic_scale =
nullptr,
174 const double* coefficients =
nullptr,
175 std::span<const RxRateContext> contexts = {});
222 const std::vector<RxExprSpan>& expressions,
double dt,
double* species,
223 double* hydvar,
RxWorkspace& ws,
const double* pollutants =
nullptr,
224 const double* kinetic_scale =
nullptr,
const double* coefficients =
nullptr,
225 std::span<const RxRateContext> contexts = {});
261 double* hydvar,
RxWorkspace& ws,
const double* pollutants =
nullptr,
262 const double* coefficients =
nullptr);
Multispecies reaction system data (EPANET-MSX conventions) — SoA, hot/cold split per LARD plan §16 D-...
Definition ReactionIntegrator.hpp:124
static RxStepReport step(const ReactionData &rx, const std::vector< ReactionExprForm > &forms, const std::vector< RxExprSpan > &expressions, double dt, double *species, double *hydvar, RxWorkspace &ws, const double *pollutants=nullptr, const double *kinetic_scale=nullptr, const double *coefficients=nullptr, std::span< const RxRateContext > contexts={})
Integrate one explicit reactor law set over a local species block.
Definition ReactionIntegrator.cpp:370
static RxStepReport stepSubcycled(const ReactionData &rx, const std::vector< ReactionExprForm > &forms, const std::vector< RxExprSpan > &expressions, double dt, double *species, double *hydvar, RxWorkspace &ws, const double *pollutants=nullptr, const double *kinetic_scale=nullptr, const double *coefficients=nullptr, std::span< const RxRateContext > contexts={})
Retry an owned reaction interval by bounded bisection while restoring species on returned failure.
Definition ReactionIntegrator.cpp:329
Definition ReactionIntegrator.hpp:89
friend class ReactionIntegrator
Definition ReactionIntegrator.hpp:100
void init(const ReactionData &rx)
Allocate/reset private integration scratch for a compiled reaction system.
Definition ReactionIntegrator.cpp:285
bool initialized() const noexcept
Read whether this workspace has retained species/term allocation.
Definition ReactionIntegrator.hpp:97
Definition ExplicitFvSolver.hpp:53
Definition ReactionData.hpp:58
Definition ReactionIntegrator.hpp:79
const std::vector< ReactionExprForm > * forms
Definition ReactionIntegrator.hpp:80
const double * kinetic_scale
Definition ReactionIntegrator.hpp:84
double * hydvar
Definition ReactionIntegrator.hpp:82
const double * pollutants
Definition ReactionIntegrator.hpp:83
const std::vector< RxExprSpan > * expressions
Definition ReactionIntegrator.hpp:81
Definition ReactionIntegrator.hpp:68
int substeps
RATE substeps actually taken.
Definition ReactionIntegrator.hpp:71
bool ok
Definition ReactionIntegrator.hpp:69
std::string error
set when !ok
Definition ReactionIntegrator.hpp:73
int newton_iters
EQUIL + implicit-solver Newton iterations.
Definition ReactionIntegrator.hpp:72
bool interval_limit
work/floor limit: caller may retry a smaller interval
Definition ReactionIntegrator.hpp:70