24 "install in container before calling init.");
49 "Boundary domains can only be connected on the left to flow "
50 "domains, not '{}' domains.", r.
type());
64 m_flow_right =
dynamic_cast<Flow1D*
>(&r);
65 if (m_flow_right !=
nullptr) {
70 "Boundary domains can only be connected on the right to flow "
71 "domains, not '{}' domains.", r.
type());
93 auto thermo =
phase->thermo();
94 m_temp = thermo->temperature();
96 m_nsp = thermo->nSpecies();
98 thermo->getMassFractions(
m_yin.data());
124 if (
m_yin[k] != 0.0) {
137 thermo->setMoleFractionsByName(xin);
138 thermo->getMassFractions(
m_yin.data());
149 thermo->setMoleFractions(xin);
150 thermo->getMassFractions(
m_yin.data());
173 "Right inlets with right-to-left flow are only supported for "
174 "strained flow configurations.");
178 }
else if (m_flow_right) {
182 throw CanteraError(
"Inlet1D::init",
"Inlet1D is not properly connected.");
201 integer* diagg,
double rdt)
251 for (
size_t k = 0; k <
m_nsp; k++) {
280 for (
size_t k = 0; k <
m_nsp; k++) {
291 meta[
"mass-flux"] =
m_mdot;
297 thermo->setState_TPY(
m_temp, pressure,
m_yin.data());
298 vector<double> data(thermo->stateSize());
299 thermo->saveState(data);
301 arr->setState(0, data);
312 auto thermo = arr->thermo();
313 auto meta = arr->meta();
314 m_temp = thermo->temperature();
315 if (meta.hasKey(
"mass-flux")) {
316 m_mdot = meta.at(
"mass-flux").asDouble();
319 auto aux = arr->getAuxiliary(0);
320 m_mdot = thermo->density() * aux.at(
"velocity").as<
double>();
322 thermo->getMassFractions(
m_yin.data());
333 integer* diagg,
double rdt)
358 double* x = xg +
loc();
359 double* r = rg +
loc();
360 integer* diag = diagg +
loc();
415 "Left outlets with right-to-left flow are not supported.");
420 throw CanteraError(
"Outlet1D::init",
"Outlet1D is not connected.");
432 double* x = xg +
loc();
433 double* r = rg +
loc();
434 integer* diag = diagg +
loc();
451 rb[k] = xb[k] - xb[k - nc];
490 "Left outlets with right-to-left flow are not supported.");
508 integer* diagg,
double rdt)
515 double* x = xg +
loc();
516 double* r = rg +
loc();
517 integer* diag = diagg +
loc();
542 meta[
"temperature"] =
m_temp;
549 vector<double> data(thermo->stateSize());
550 thermo->saveState(data);
552 arr->setState(0, data);
563 auto thermo = arr->thermo();
564 m_temp = thermo->temperature();
565 auto Y = thermo->massFractions();
577 integer* diagg,
double rdt)
584 double* x = xg +
loc();
585 double* r = rg +
loc();
604 meta[
"temperature"] =
m_temp;
610 auto meta = arr->meta();
611 m_temp = meta[
"temperature"].asDouble();
612 meta.erase(
"temperature");
631 auto thermo = std::dynamic_pointer_cast<SurfPhase>(
phase->thermo());
634 "Detected incompatible ThermoPhase type '{}'",
phase->thermo()->type());
636 auto kin = std::dynamic_pointer_cast<InterfaceKinetics>(
phase->kinetics());
639 "Detected incompatible kinetics type '{}'",
640 phase->kinetics()->kineticsType());
654 "After Cantera 3.2, a change of domain contents after instantiation "
655 "will be disabled.");
657 sol->setThermo(kin->reactionPhase());
658 sol->setKinetics(kin);
659 sol->setTransportModel(
"none");
662 m_kin = dynamic_pointer_cast<InterfaceKinetics>(kin).get();
663 m_sphase = dynamic_pointer_cast<SurfPhase>(kin->reactionPhase()).get();
673 throw IndexError(
"ReactingSurf1D::componentName",
"component", n,
m_nsp);
690 for (
size_t n = 0; n <
m_nsp; n++) {
696 double* x = xg +
loc();
702 integer* diagg,
double rdt)
709 double* x = xg +
loc();
710 double* r = rg +
loc();
711 integer* diag = diagg +
loc();
715 for (
size_t k = 0; k <
m_nsp; k++) {
724 size_t leftloc = 0, rightloc = 0;
734 rightloc = m_flow_right->
loc();
735 m_flow_right->
setGas(xg + rightloc, 0);
742 for (
size_t k = 0; k <
m_nsp; k++) {
750 for (
size_t k = 0; k <
m_nsp; k++) {
757 double* rb = r +
m_nsp;
758 double* xb = x +
m_nsp;
788 "Domain needs to be installed in a container.");
792 return soln[
index(i, 0)];
799 "Domain needs to be installed in a container before calling toArray.");
803 meta[
"temperature"] =
m_temp;
806 meta[
"phase"][
"source"] = source.
empty() ?
"<unknown>" : source.
asString();
815 arr->setState(0, data);
826 "Domain needs to be installed in a container before calling fromArray.");
834 auto surf = std::dynamic_pointer_cast<SurfPhase>(arr->thermo());
837 "Restoring of coverages requires surface phase");
839 m_temp = surf->temperature();
840 surf->getCoverages(soln);
848 for (
size_t k = 0; k <
m_nsp; k++) {
Boundary objects for one-dimensional simulations.
const AnyValue & getMetadata(const string &key) const
Get a value from the metadata applicable to the AnyMap tree containing this node.
A map of string keys to values whose type can vary at runtime.
A wrapper for a variable whose type is determined at runtime.
const string & asString() const
Return the held value, if it is a string.
bool empty() const
Return boolean indicating whether AnyValue is empty.
ThermoPhase * m_phase_left
Thermo object used by left flow domain.
double m_mdot
Mass flow rate at the boundary.
double m_temp
Temperature of the boundary.
void _init(size_t n)
Initialize member variables based on the adjacent domains.
Flow1D * m_flow_left
Flow domain to the left of this boundary.
ThermoPhase * m_phase_right
Thermo object used by right flow domain.
void fromArray(const shared_ptr< SolutionArray > &arr) override
Restore the solution for this domain from a SolutionArray.
size_t m_right_nsp
Number of species in right flow domain.
virtual void setTemperature(double t)
Set the temperature.
size_t m_left_nsp
Number of species in left flow domain.
Boundary1D()
Default constructor.
size_t m_right_nv
Number of state vector components in right flow domain.
size_t m_left_nv
Flow domain to the right of this boundary.
Base class for exceptions thrown by Cantera classes.
Base class for one-dimensional domains.
size_t lastPoint() const
The index of the last (that is, right-most) grid point belonging to this domain.
size_t m_iloc
Starting location within the solution vector for unknowns that correspond to this domain.
shared_ptr< Solution > m_solution
Composite thermo/kinetics/transport handler.
OneDim * m_container
Parent OneDim simulation containing this and adjacent domains.
size_t nComponents() const
Number of components at each grid point.
virtual bool isConnector()
True if the domain is a connector domain.
virtual void setMeta(const AnyMap &meta)
Retrieve meta data.
size_t m_index
Left-to-right location of this domain.
string id() const
Returns the identifying tag for this domain.
shared_ptr< Solution > phase() const
Return thermo/kinetics/transport manager used in the domain.
size_t m_nv
Number of solution components.
size_t nPoints() const
Number of grid points in this domain.
double lowerBound(size_t n) const
Lower bound on the nth component.
shared_ptr< vector< double > > m_state
data pointer shared from OneDim
virtual void resize(size_t nv, size_t np)
Resize the domain to have nv components and np grid points.
double upperBound(size_t n) const
Upper bound on the nth component.
double m_press
pressure [Pa]
const OneDim & container() const
The container holding this domain.
string m_id
Identity tag for the domain.
string type() const
String indicating the domain implemented.
void setBounds(size_t n, double lower, double upper)
Set the upper and lower bounds for a solution component, n.
double prevSoln(size_t n, size_t j) const
Value of component n at point j in the previous solution.
size_t firstPoint() const
The index of the first (that is, left-most) grid point belonging to this domain.
void needJacUpdate()
Set this if something has changed in the governing equations (for example, the value of a constant ha...
size_t index(size_t n, size_t j) const
Returns the index of the solution vector, which corresponds to component n at grid point j.
virtual size_t loc(size_t j=0) const
Location of the start of the local solution vector in the global solution vector.
virtual AnyMap getMeta() const
Retrieve meta data.
shared_ptr< SolutionArray > toArray(bool normalize=false) override
Save the state of this domain to a SolutionArray.
void eval(size_t jg, double *xg, double *rg, integer *diagg, double rdt) override
Evaluate the residual function at point j.
void init() override
Initialize.
This class represents 1D flow domains that satisfy the one-dimensional similarity solution for chemic...
double density(size_t j) const
Get the density [kg/m³] at point j
bool doEnergy(size_t j)
true if the energy equation is solved at point j or false if a fixed temperature condition is imposed...
ThermoPhase & phase()
Access the phase object used to compute thermodynamic properties for points in this domain.
bool twoPointControlEnabled() const
Returns the status of the two-point control.
size_t rightExcessSpecies() const
Index of the species on the right boundary with the largest mass fraction.
double pressure() const
The current pressure [Pa].
void setGas(const double *x, size_t j)
Set the gas object state to be consistent with the solution at point j.
void setViscosityFlag(bool dovisc)
Specify if the viscosity term should be included in the momentum equation.
size_t leftExcessSpecies() const
Index of the species on the left boundary with the largest mass fraction.
bool isFree() const
Retrieve flag indicating whether flow is freely propagating.
bool isStrained() const
Retrieve flag indicating whether flow uses radial momentum.
double T_fixed(size_t j) const
The fixed temperature value at point j.
An array index is out of range.
void setMoleFractions(const string &xin) override
Set the mole fractions by specifying a string.
vector< double > m_yin
inlet mass fractions
int m_ilr
A marker that indicates whether this is a left inlet or a right inlet.
shared_ptr< SolutionArray > toArray(bool normalize=false) override
Save the state of this domain to a SolutionArray.
string m_xstr
inlet mass fractions.
size_t nSpecies() override
Get the number of species.
void fromArray(const shared_ptr< SolutionArray > &arr) override
Restore the solution for this domain from a SolutionArray.
void updateState(size_t loc) override
Update state at given location to state of associated Solution object.
void setTemperature(double T) override
Set the temperature.
void eval(size_t jg, double *xg, double *rg, integer *diagg, double rdt) override
Evaluate the residual function at point j.
size_t m_nsp
Number of species in the adjacent flow domain.
void init() override
Initialize.
Flow1D * m_flow
the adjacent flow domain
void setSpreadRate(double V0) override
set spreading rate
void show(const double *x) override
Print the solution.
double m_V0
The spread rate of the inlet [1/s].
Inlet1D()
Default constructor.
ThermoPhase & thermo(size_t n=0)
This method returns a reference to the nth ThermoPhase object defined in this kinetics mechanism.
size_t nPhases() const
The number of phases participating in the reaction mechanism.
size_t kineticsSpeciesIndex(size_t k, size_t n) const
The location of species k of phase n in species arrays.
size_t nTotalSpecies() const
The total number of species in all phases participating in the kinetics mechanism.
virtual void getNetProductionRates(double *wdot)
Species net production rates [kmol/m^3/s or kmol/m^2/s].
void resize() override
Call to set the size of internal data structures after first defining the system or if the problem si...
Domain1D & domain(size_t i) const
Return a reference to domain i.
shared_ptr< SolutionArray > toArray(bool normalize=false) override
Save the state of this domain to a SolutionArray.
void eval(size_t jg, double *xg, double *rg, integer *diagg, double rdt) override
Evaluate the residual function at point j.
void init() override
Initialize.
An outlet with specified composition.
void setMoleFractions(const string &xin) override
Set the mole fractions by specifying a string.
shared_ptr< SolutionArray > toArray(bool normalize=false) override
Save the state of this domain to a SolutionArray.
OutletRes1D()
Default constructor.
string m_xstr
Mole fractions in the reservoir.
vector< double > m_yres
Mass fractions in the reservoir.
void fromArray(const shared_ptr< SolutionArray > &arr) override
Restore the solution for this domain from a SolutionArray.
void eval(size_t jg, double *xg, double *rg, integer *diagg, double rdt) override
Evaluate the residual function at point j.
size_t m_nsp
Number of species in the adjacent flow domain.
void init() override
Initialize.
Flow1D * m_flow
The adjacent flow domain.
virtual void setMoleFractions(const double *const x)
Set the mole fractions to the specified values.
size_t nSpecies() const
Returns the number of species in the phase.
void saveState(vector< double > &state) const
Save the current internal state of the phase.
string speciesName(size_t k) const
Name of the species with index k.
virtual size_t stateSize() const
Return size of vector defining internal state of the phase.
void setMoleFractionsByName(const Composition &xMap)
Set the species mole fractions by name.
const vector< double > & molecularWeights() const
Return a const reference to the internal vector of molecular weights.
size_t speciesIndex(const string &name) const
Returns the index of a species named 'name' within the Phase object.
virtual void setTemperature(double temp)
Set the internally stored temperature of the phase (K).
void getMassFractions(double *const y) const
Get the species mass fractions.
virtual double pressure() const
Return the thermodynamic pressure (Pa).
string name() const
Return the name of the phase.
SurfPhase * m_sphase
phase representing the surface species
void setKinetics(shared_ptr< Kinetics > kin) override
Set the kinetics manager.
void resetBadValues(double *xg) override
When called, this function should reset "bad" values in the state vector such as negative species con...
size_t componentIndex(const string &name, bool checkAlias=true) const override
Index of component with name name.
InterfaceKinetics * m_kin
surface kinetics mechanism
bool m_enabled
True if coverage equations are being solved.
vector< double > m_fixed_cov
Fixed values of the coverages used when coverage equations are not being solved.
ReactingSurf1D()
Default constructor.
vector< double > m_work
temporary vector used to store coverages and production rates.
shared_ptr< SolutionArray > toArray(bool normalize=false) override
Save the state of this domain to a SolutionArray.
double value(const string &component) const override
Set a single component value at a boundary.
void fromArray(const shared_ptr< SolutionArray > &arr) override
Restore the solution for this domain from a SolutionArray.
void eval(size_t jg, double *xg, double *rg, integer *diagg, double rdt) override
Evaluate the residual function at point j.
void _finalize(const double *x) override
In some cases, a domain may need to set parameters that depend on the initial solution estimate.
size_t m_nsp
the number of surface phase species
string componentName(size_t n) const override
Name of component n. May be overloaded.
void init() override
Initialize.
void show(const double *x) override
Print the solution.
static shared_ptr< SolutionArray > create(const shared_ptr< Solution > &sol, int size=0, const AnyMap &meta={})
Instantiate a new SolutionArray reference.
static shared_ptr< Solution > create()
Create an empty Solution object.
shared_ptr< SolutionArray > toArray(bool normalize=false) override
Save the state of this domain to a SolutionArray.
void fromArray(const shared_ptr< SolutionArray > &arr) override
Restore the solution for this domain from a SolutionArray.
void eval(size_t jg, double *xg, double *rg, integer *diagg, double rdt) override
Evaluate the residual function at point j.
void init() override
Initialize.
void show(const double *x) override
Print the solution.
double pressure() const override
Return the thermodynamic pressure (Pa).
double size(size_t k) const
Returns the number of sites occupied by one molecule of species k.
void setCoverages(const double *theta)
Set the surface site fractions to a specified state.
double siteDensity() const
Returns the site density.
void setCoveragesNoNorm(const double *theta)
Set the surface site fractions to a specified state.
void getCoverages(double *theta) const
Return a vector of surface coverages.
shared_ptr< SolutionArray > toArray(bool normalize=false) override
Save the state of this domain to a SolutionArray.
void eval(size_t jg, double *xg, double *rg, integer *diagg, double rdt) override
Evaluate the residual function at point j.
void init() override
Initialize.
Base class for a phase with thermodynamic properties.
virtual void setState_TP(double t, double p)
Set the temperature (K) and pressure (Pa)
const AnyMap & input() const
Access input data associated with the phase description.
void writelog(const string &fmt, const Args &... args)
Write a formatted message to the screen.
Namespace for the Cantera kernel.
const size_t npos
index returned by functions to indicate "no position"
const int LeftInlet
Unique identifier for the left inlet.
const int RightInlet
Unique identifier for the right inlet.
@ c_offset_U
axial velocity [m/s]
@ c_offset_Y
mass fractions
@ c_offset_Uo
oxidizer axial velocity [m/s]
@ c_offset_T
temperature [kelvin]
void warn_deprecated(const string &source, const AnyBase &node, const string &message)
A deprecation warning for syntax in an input file.