16ReactorSurface::ReactorSurface(shared_ptr<Solution> sol,
const string& name)
17 : ReactorBase(sol, name)
19 if (!std::dynamic_pointer_cast<SurfPhase>(sol->thermo())) {
20 throw CanteraError(
"ReactorSurface::ReactorSurface",
21 "Solution object must have a SurfPhase object as the thermo manager.");
24 if (!sol->kinetics() ) {
25 throw CanteraError(
"ReactorSurface::ReactorSurface",
26 "Solution object must have kinetics manager.");
27 }
else if (!std::dynamic_pointer_cast<InterfaceKinetics>(sol->kinetics())) {
28 throw CanteraError(
"ReactorSurface::ReactorSurface",
29 "Kinetics manager must be an InterfaceKinetics object.");
32 m_kinetics = m_solution->kinetics().get();
33 m_thermo = m_solution->thermo().get();
34 m_surf =
dynamic_cast<SurfPhase*
>(m_thermo);
35 m_cov.resize(m_surf->nSpecies());
36 m_surf->getCoverages(m_cov.data());
39double ReactorSurface::area()
const
44void ReactorSurface::setArea(
double a)
52 "To be removed after Cantera 3.2.");
60 if (m_surf ==
nullptr) {
62 "Specified kinetics manager does not represent a surface "
63 "kinetics mechanism.");
65 m_cov.resize(m_surf->nSpecies());
66 m_surf->getCoverages(m_cov.data());
79void ReactorSurface::setCoverages(
const double* cov)
81 copy(cov, cov + m_cov.size(), m_cov.begin());
86 m_surf->setCoveragesByName(cov);
87 m_surf->getCoverages(m_cov.data());
90void ReactorSurface::setCoverages(
const string& cov)
92 m_surf->setCoveragesByName(cov);
93 m_surf->getCoverages(m_cov.data());
96void ReactorSurface::getCoverages(
double* cov)
const
98 copy(m_cov.begin(), m_cov.end(), cov);
101void ReactorSurface::syncState()
103 m_surf->setTemperature(m_reactor->temperature());
104 m_surf->setCoveragesNoNorm(m_cov.data());
107void ReactorSurface::addSensitivityReaction(
size_t rxn)
109 if (rxn >= m_kinetics->nReactions()) {
110 throw CanteraError(
"ReactorSurface::addSensitivityReaction",
111 "Reaction number out of range ({})", rxn);
113 size_t p = m_reactor->network().registerSensitivityParameter(
114 m_kinetics->reaction(rxn)->equation(), 1.0, 1.0);
115 m_sensParams.emplace_back(
119void ReactorSurface::setSensitivityParameters(
const double* params)
121 for (
auto& p : m_sensParams) {
122 p.value = m_kinetics->multiplier(p.local);
123 m_kinetics->setMultiplier(p.local, p.value*params[p.global]);
127void ReactorSurface::resetSensitivityParameters()
129 for (
auto& p : m_sensParams) {
130 m_kinetics->setMultiplier(p.local, p.value);
Base class for kinetics managers and also contains the kineticsmgr module documentation (see Kinetics...
Header file for class ReactorSurface.
Header for a simple thermodynamics model of a surface phase derived from ThermoPhase,...
Base class for exceptions thrown by Cantera classes.
Public interface for kinetics managers.
ThermoPhase & thermo(size_t n=0)
This method returns a reference to the nth ThermoPhase object defined in this kinetics mechanism.
Base class for reactor objects.
A simple thermodynamic model for a surface phase, assuming an ideal solution model.
Namespace for the Cantera kernel.
void warn_deprecated(const string &source, const AnyBase &node, const string &message)
A deprecation warning for syntax in an input file.
map< string, double > Composition
Map from string names to doubles.