25#include "common/reaction.hlsli"
77 std::vector<RuleDefinition>
rules;
82 static_assert(
sizeof(reaction::RxSpecies) == 24);
83 static_assert(
sizeof(reaction::RxRule) == 80);
84 static_assert(
sizeof(reaction::RxCell) == 112);
88 std::span<const reaction::RxSpecies>
species;
89 std::span<const reaction::RxRule>
rules;
91 std::span<const uint64_t>
rates;
93 [[nodiscard]] reaction::RxSpecies
Species(uint32_t
id)
const {
return species[id]; }
94 [[nodiscard]] reaction::RxRule
Rule(uint32_t
id)
const {
return rules[id]; }
96 [[nodiscard]] uint64_t
Rate(uint32_t rule, uint32_t kelvin)
const {
97 return rates[(
size_t{rule} * reaction::RX_RATE_TABLE_KELVINS) + kelvin];
104 std::vector<reaction::RxRule>
rules;
121 [[nodiscard]] uint32_t
SpeciesId(std::string_view name)
const;
125 const ReactionTableDefinition& definition);
136 std::span<const SpeciesAmount> amounts,
137 int32_t temperatureMilliKelvin);
141 std::span<const SpeciesAmount> amounts,
142 int32_t temperatureMilliKelvin);
156 const reaction::RxCell& cell, uint64_t worldSeed,
157 uint64_t tick, uint64_t changedTick, uint64_t cellId);
162 uint64_t tick, uint64_t changedTick, uint64_t cellId);
166 const reaction::RxLoneCell& lone, uint64_t worldSeed,
167 uint64_t tickBegin, uint32_t tickCount, uint64_t cellId);
RxWaitStepOf< RxWideCell > RxWideWaitStep
uint64_t HashReactionCell(const RxCell &cell)
RxCell MakeReactionCell(const BakedReactionTable &table, std::span< const SpeciesAmount > amounts, int32_t temperatureMilliKelvin)
RxLoneCell AdvanceLoneReactionCell(const BakedReactionTable &table, const RxLoneCell &lone, uint64_t worldSeed, uint64_t tickBegin, uint32_t tickCount, uint64_t cellId)
std::expected< BakedReactionTable, std::string > BakeReactionTable(const ReactionTableDefinition &definition)
RxWaitStep StepReactionCellWait(const BakedReactionTable &table, const RxCell &cell, uint64_t worldSeed, uint64_t tick, uint64_t changedTick, uint64_t cellId)
std::vector< uint64_t > CountElements(const BakedReactionTable &table, const RxCell &cell)
RxWideCell MakeWideReactionCell(const BakedReactionTable &table, std::span< const SpeciesAmount > amounts, int32_t temperatureMilliKelvin)
int32_t preExponentialExponent10
uint64_t preExponentialMantissa
std::vector< std::string > speciesNames
std::vector< std::string > ruleNames
std::vector< uint64_t > rates
std::vector< uint32_t > ruleIndex
std::vector< std::string > warnings
uint32_t SpeciesId(std::string_view name) const
std::vector< uint32_t > speciesElements
std::vector< reaction::RxSpecies > species
std::vector< reaction::RxRule > rules
std::vector< uint32_t > molarMasses
std::vector< std::string > elementNames
ReactionTableView View() const
std::vector< ElementDefinition > elements
std::vector< SpeciesDefinition > species
std::vector< RuleDefinition > rules
uint32_t RuleIndex(uint32_t position) const
std::span< const uint64_t > rates
uint64_t Rate(uint32_t rule, uint32_t kelvin) const
std::span< const uint32_t > ruleIndex
std::span< const reaction::RxSpecies > species
std::span< const reaction::RxRule > rules
reaction::RxSpecies Species(uint32_t id) const
reaction::RxRule Rule(uint32_t id) const
std::vector< RuleTerm > reactants
std::vector< RuleTerm > products
std::optional< int64_t > declaredReactionEnthalpy
std::vector< ElementCount > composition
uint32_t thermalConductivity
int64_t formationEnthalpy