Cantera  3.1.0a2
Loading...
Searching...
No Matches
Domain1D.h
Go to the documentation of this file.
1 //! @file Domain1D.h
2
3// This file is part of Cantera. See License.txt in the top-level directory or
4// at https://cantera.org/license.txt for license and copyright information.
5
6#ifndef CT_DOMAIN1D_H
7#define CT_DOMAIN1D_H
8
10
11namespace Cantera
12{
13
14class MultiJac;
15class OneDim;
16class Refiner;
17class AnyMap;
18class Kinetics;
19class Transport;
20class Solution;
21class SolutionArray;
22
23/**
24 * Base class for one-dimensional domains.
25 * @ingroup flowGroup
26 */
28{
29public:
30 /**
31 * Constructor.
32 * @param nv Number of variables at each grid point.
33 * @param points Number of grid points.
34 * @param time (unused)
35 */
36 Domain1D(size_t nv=1, size_t points=1, double time=0.0);
37
38 virtual ~Domain1D();
39 Domain1D(const Domain1D&) = delete;
40 Domain1D& operator=(const Domain1D&) = delete;
41
42 //! Domain type flag.
43 //! @since Starting in %Cantera 3.1, the return type is a `string`.
44 virtual string domainType() const { return "domain"; }
45
46 //! String indicating the domain implemented.
47 //! @since New in %Cantera 3.0.
48 //! @deprecated Transitional method. Use domainType() instead.
49 string type() const { return domainType(); }
50
51 //! The left-to-right location of this domain.
52 size_t domainIndex() {
53 return m_index;
54 }
55
56 //! True if the domain is a connector domain.
57 virtual bool isConnector() {
58 return false;
59 }
60
61 //! Set the solution manager.
62 //! @since New in %Cantera 3.0.
63 void setSolution(shared_ptr<Solution> sol);
64
65 //! Set the kinetics manager.
66 //! @since New in %Cantera 3.0.
67 virtual void setKinetics(shared_ptr<Kinetics> kin) {
68 throw NotImplementedError("Domain1D::setKinetics");
69 }
70
71 //! Set transport model to existing instance
72 //! @since New in %Cantera 3.0.
73 virtual void setTransport(shared_ptr<Transport> trans) {
74 throw NotImplementedError("Domain1D::setTransport");
75 }
76
77 //! The container holding this domain.
78 const OneDim& container() const {
79 return *m_container;
80 }
81
82 //! Specify the container object for this domain, and the position of this
83 //! domain in the list.
84 void setContainer(OneDim* c, size_t index) {
85 m_container = c;
86 m_index = index;
87 }
88
89 //! Set the Jacobian bandwidth. See the discussion of method bandwidth().
90 void setBandwidth(int bw = -1) {
91 m_bw = bw;
92 }
93
94 //! Set the Jacobian bandwidth for this domain.
95 /**
96 * When class OneDim computes the bandwidth of the overall multi-domain
97 * problem (in OneDim::resize()), it calls this method for the bandwidth
98 * of each domain. If setBandwidth has not been called, then a negative
99 * bandwidth is returned, in which case OneDim assumes that this domain is
100 * dense -- that is, at each point, all components depend on the value of
101 * all other components at that point. In this case, the bandwidth is bw =
102 * 2*nComponents() - 1. However, if this domain contains some components
103 * that are uncoupled from other components at the same point, then this
104 * default bandwidth may greatly overestimate the true bandwidth, with a
105 * substantial penalty in performance. For such domains, use method
106 * setBandwidth to specify the bandwidth before passing this domain to the
107 * Sim1D or OneDim constructor.
108 */
109 size_t bandwidth() {
110 return m_bw;
111 }
112
113 /**
114 * Initialize. This method is called by OneDim::init() for each domain once
115 * at the beginning of a simulation. Base class method does nothing, but may
116 * be overloaded.
117 */
118 virtual void init() { }
119
120 virtual void setInitialState(double* xlocal = 0) {}
121 virtual void setState(size_t point, const double* state, double* x) {}
122
123 /**
124 * When called, this function should reset "bad" values in the state vector
125 * such as negative species concentrations. This function may be called
126 * after a failed solution attempt.
127 */
128 virtual void resetBadValues(double* xg) {}
129
130 /**
131 * Resize the domain to have nv components and np grid points. This method
132 * is virtual so that subclasses can perform other actions required to
133 * resize the domain.
134 */
135 virtual void resize(size_t nv, size_t np);
136
137 //! Return a reference to the grid refiner.
139 return *m_refiner;
140 }
141
142 //! Number of components at each grid point.
143 size_t nComponents() const {
144 return m_nv;
145 }
146
147 //! Check that the specified component index is in range.
148 //! Throws an exception if n is greater than nComponents()-1
149 void checkComponentIndex(size_t n) const {
150 if (n >= m_nv) {
151 throw IndexError("Domain1D::checkComponentIndex", "points", n, m_nv-1);
152 }
153 }
154
155 //! Check that an array size is at least nComponents().
156 //! Throws an exception if nn is less than nComponents(). Used before calls
157 //! which take an array pointer.
158 void checkComponentArraySize(size_t nn) const {
159 if (m_nv > nn) {
160 throw ArraySizeError("Domain1D::checkComponentArraySize", nn, m_nv);
161 }
162 }
163
164 //! Number of grid points in this domain.
165 size_t nPoints() const {
166 return m_points;
167 }
168
169 //! Check that the specified point index is in range.
170 //! Throws an exception if n is greater than nPoints()-1
171 void checkPointIndex(size_t n) const {
172 if (n >= m_points) {
173 throw IndexError("Domain1D::checkPointIndex", "points", n, m_points-1);
174 }
175 }
176
177 //! Check that an array size is at least nPoints().
178 //! Throws an exception if nn is less than nPoints(). Used before calls
179 //! which take an array pointer.
180 void checkPointArraySize(size_t nn) const {
181 if (m_points > nn) {
182 throw ArraySizeError("Domain1D::checkPointArraySize", nn, m_points);
183 }
184 }
185
186 //! Name of the nth component. May be overloaded.
187 virtual string componentName(size_t n) const;
188
189 void setComponentName(size_t n, const string& name) {
190 m_name[n] = name;
191 }
192
193 //! index of component with name @e name.
194 virtual size_t componentIndex(const string& name) const;
195
196 void setBounds(size_t n, double lower, double upper) {
197 m_min[n] = lower;
198 m_max[n] = upper;
199 }
200
201 //! Set tolerances for time-stepping mode
202 /*!
203 * @param rtol Relative tolerance
204 * @param atol Absolute tolerance
205 * @param n component index these tolerances apply to. If set to -1 (the
206 * default), these tolerances will be applied to all solution
207 * components.
208 */
209 void setTransientTolerances(double rtol, double atol, size_t n=npos);
210
211 //! Set tolerances for steady-state mode
212 /*!
213 * @param rtol Relative tolerance
214 * @param atol Absolute tolerance
215 * @param n component index these tolerances apply to. If set to -1 (the
216 * default), these tolerances will be applied to all solution
217 * components.
218 */
219 void setSteadyTolerances(double rtol, double atol, size_t n=npos);
220
221 //! Relative tolerance of the nth component.
222 double rtol(size_t n) {
223 return (m_rdt == 0.0 ? m_rtol_ss[n] : m_rtol_ts[n]);
224 }
225
226 //! Absolute tolerance of the nth component.
227 double atol(size_t n) {
228 return (m_rdt == 0.0 ? m_atol_ss[n] : m_atol_ts[n]);
229 }
230
231 //! Steady relative tolerance of the nth component
232 double steady_rtol(size_t n) {
233 return m_rtol_ss[n];
234 }
235
236 //! Steady absolute tolerance of the nth component
237 double steady_atol(size_t n) {
238 return m_atol_ss[n];
239 }
240
241 //! Transient relative tolerance of the nth component
242 double transient_rtol(size_t n) {
243 return m_rtol_ts[n];
244 }
245
246 //! Transient absolute tolerance of the nth component
247 double transient_atol(size_t n) {
248 return m_atol_ts[n];
249 }
250
251 //! Upper bound on the nth component.
252 double upperBound(size_t n) const {
253 return m_max[n];
254 }
255
256 //! Lower bound on the nth component
257 double lowerBound(size_t n) const {
258 return m_min[n];
259 }
260
261 //! Prepare to do time stepping with time step dt
262 /*!
263 * Copy the internally-stored solution at the last time step to array x0.
264 */
265 void initTimeInteg(double dt, const double* x0) {
266 std::copy(x0 + loc(), x0 + loc() + size(), m_slast.begin());
267 m_rdt = 1.0/dt;
268 }
269
270 //! Prepare to solve the steady-state problem
271 /*!
272 * Set the internally-stored reciprocal of the time step to 0.0
273 */
275 m_rdt = 0.0;
276 }
277
278 //! True if in steady-state mode
279 bool steady() {
280 return (m_rdt == 0.0);
281 }
282
283 //! True if not in steady-state mode
284 bool transient() {
285 return (m_rdt != 0.0);
286 }
287
288 /**
289 * Set this if something has changed in the governing
290 * equations (for example, the value of a constant has been changed,
291 * so that the last-computed Jacobian is no longer valid.
292 */
293 void needJacUpdate();
294
295 //! Evaluate the residual function at point j. If j == npos,
296 //! evaluate the residual function at all points.
297 /*!
298 * This function must be implemented in classes derived from Domain1D.
299 *
300 * @param j Grid point at which to update the residual
301 * @param[in] x State vector
302 * @param[out] r residual vector
303 * @param[out] mask Boolean mask indicating whether each solution
304 * component has a time derivative (1) or not (0).
305 * @param[in] rdt Reciprocal of the timestep (`rdt=0` implies steady-
306 * state.)
307 */
308 virtual void eval(size_t j, double* x, double* r, integer* mask, double rdt=0.0) {
309 throw NotImplementedError("Domain1D::eval");
310 }
311
312 size_t index(size_t n, size_t j) const {
313 return m_nv*j + n;
314 }
315 double value(const double* x, size_t n, size_t j) const {
316 return x[index(n,j)];
317 }
318
319 virtual void setJac(MultiJac* jac) {}
320
321 //! Save the state of this domain as a SolutionArray.
322 /*!
323 * @param soln local solution vector for this domain
324 * @todo Despite the method's name, data are copied; the intent is to access data
325 * directly in future revisions, where a non-const version will be implemented.
326 *
327 * @since New in %Cantera 3.0.
328 */
329 virtual shared_ptr<SolutionArray> asArray(const double* soln) const {
330 throw NotImplementedError("Domain1D::asArray", "Needs to be overloaded.");
331 }
332
333 //! Save the state of this domain to a SolutionArray.
334 /*!
335 * This method serves as an external interface for high-level API's; it does not
336 * provide direct access to memory.
337 * @param normalize If true, normalize concentrations (default=false)
338 *
339 * @since New in %Cantera 3.0.
340 */
341 shared_ptr<SolutionArray> toArray(bool normalize=false) const;
342
343 //! Restore the solution for this domain from a SolutionArray
344 /*!
345 * @param[in] arr SolutionArray defining the state of this domain
346 * @param[out] soln Value of the solution vector, local to this domain
347 *
348 * @since New in %Cantera 3.0.
349 */
350 virtual void fromArray(SolutionArray& arr, double* soln) {
351 throw NotImplementedError("Domain1D::fromArray", "Needs to be overloaded.");
352 }
353
354 //! Restore the solution for this domain from a SolutionArray.
355 /*!
356 * This method serves as an external interface for high-level API's.
357 * @param arr SolutionArray defining the state of this domain
358 * @since New in %Cantera 3.0.
359 */
360 void fromArray(const shared_ptr<SolutionArray>& arr);
361
362 //! Return thermo/kinetics/transport manager used in the domain
363 //! @since New in %Cantera 3.0.
364 shared_ptr<Solution> solution() const {
365 return m_solution;
366 }
367
368 size_t size() const {
369 return m_nv*m_points;
370 }
371
372 /**
373 * Find the index of the first grid point in this domain, and
374 * the start of its variables in the global solution vector.
375 */
376 void locate();
377
378 /**
379 * Location of the start of the local solution vector in the global
380 * solution vector,
381 */
382 virtual size_t loc(size_t j = 0) const {
383 return m_iloc;
384 }
385
386 /**
387 * The index of the first (that is, left-most) grid point belonging to this
388 * domain.
389 */
390 size_t firstPoint() const {
391 return m_jstart;
392 }
393
394 /**
395 * The index of the last (that is, right-most) grid point belonging to this
396 * domain.
397 */
398 size_t lastPoint() const {
399 return m_jstart + m_points - 1;
400 }
401
402 /**
403 * Set the left neighbor to domain 'left.' Method 'locate' is called to
404 * update the global positions of this domain and all those to its right.
405 */
407 m_left = left;
408 if (!m_solution && left && left->solution()) {
410 }
411 locate();
412 }
413
414 //! Set the right neighbor to domain 'right.'
416 m_right = right;
417 if (!m_solution && right && right->solution()) {
419 }
420 }
421
422 //! Append domain 'right' to this one, and update all links.
425 right->linkLeft(this);
426 }
427
428 //! Return a pointer to the left neighbor.
429 Domain1D* left() const {
430 return m_left;
431 }
432
433 //! Return a pointer to the right neighbor.
434 Domain1D* right() const {
435 return m_right;
436 }
437
438 //! Value of component n at point j in the previous solution.
439 double prevSoln(size_t n, size_t j) const {
440 return m_slast[m_nv*j + n];
441 }
442
443 //! Specify an identifying tag for this domain.
444 void setID(const string& s) {
445 m_id = s;
446 }
447
448 string id() const {
449 if (m_id != "") {
450 return m_id;
451 } else {
452 return fmt::format("domain {}", m_index);
453 }
454 }
455
456 //! Print the solution.
457 virtual void show(std::ostream& s, const double* x) {}
458
459 //! Print the solution.
460 virtual void show(const double* x);
461
462 double z(size_t jlocal) const {
463 return m_z[jlocal];
464 }
465 double zmin() const {
466 return m_z[0];
467 }
468 double zmax() const {
469 return m_z[m_points - 1];
470 }
471
472 void setProfile(const string& name, double* values, double* soln);
473
474 vector<double>& grid() {
475 return m_z;
476 }
477 const vector<double>& grid() const {
478 return m_z;
479 }
480 double grid(size_t point) const {
481 return m_z[point];
482 }
483
484 //! called to set up initial grid, and after grid refinement
485 virtual void setupGrid(size_t n, const double* z);
486
487 /**
488 * Writes some or all initial solution values into the global solution
489 * array, beginning at the location pointed to by x. This method is called
490 * by the Sim1D constructor, and allows default values or ones that have
491 * been set locally prior to installing this domain into the container to be
492 * written to the global solution vector.
493 */
494 virtual void _getInitialSoln(double* x);
495
496 //! Initial value of solution component @e n at grid point @e j.
497 virtual double initialValue(size_t n, size_t j);
498
499 /**
500 * In some cases, a domain may need to set parameters that depend on the
501 * initial solution estimate. In such cases, the parameters may be set in
502 * method _finalize. This method is called just before the Newton solver is
503 * called, and the x array is guaranteed to be the local solution vector for
504 * this domain that will be used as the initial guess. If no such parameters
505 * need to be set, then method _finalize does not need to be overloaded.
506 */
507 virtual void _finalize(const double* x) {}
508
509 /**
510 * In some cases, for computational efficiency some properties (such as
511 * transport coefficients) may not be updated during Jacobian evaluations.
512 * Set this to `true` to force these properties to be updated even while
513 * calculating Jacobian elements.
514 */
515 void forceFullUpdate(bool update) {
516 m_force_full_update = update;
517 }
518
519 //! Set shared data pointer
520 void setData(shared_ptr<vector<double>>& data) {
521 m_state = data;
522 }
523
524protected:
525 //! Retrieve meta data
526 virtual AnyMap getMeta() const;
527
528 //! Retrieve meta data
529 virtual void setMeta(const AnyMap& meta);
530
531 shared_ptr<vector<double>> m_state; //!< data pointer shared from OneDim
532
533 double m_rdt = 0.0;
534 size_t m_nv = 0;
535 size_t m_points; //!< Number of grid points
536 vector<double> m_slast;
537 vector<double> m_max;
538 vector<double> m_min;
539 vector<double> m_rtol_ss, m_rtol_ts;
540 vector<double> m_atol_ss, m_atol_ts;
541 vector<double> m_z;
542 OneDim* m_container = nullptr;
543 size_t m_index;
544
545 //! Starting location within the solution vector for unknowns that
546 //! correspond to this domain
547 /*!
548 * Remember there may be multiple domains associated with this problem
549 */
550 size_t m_iloc = 0;
551
552 size_t m_jstart = 0;
553
554 Domain1D* m_left = nullptr;
555 Domain1D* m_right = nullptr;
556
557 //! Identity tag for the domain
558 string m_id;
559 unique_ptr<Refiner> m_refiner;
560 vector<string> m_name;
561 int m_bw = -1;
562 bool m_force_full_update = false;
563
564 //! Composite thermo/kinetics/transport handler
565 shared_ptr<Solution> m_solution;
566};
567}
568
569#endif
A map of string keys to values whose type can vary at runtime.
Definition AnyMap.h:427
Array size error.
Base class for one-dimensional domains.
Definition Domain1D.h:28
void setTransientTolerances(double rtol, double atol, size_t n=npos)
Set tolerances for time-stepping mode.
Definition Domain1D.cpp:87
virtual void resetBadValues(double *xg)
When called, this function should reset "bad" values in the state vector such as negative species con...
Definition Domain1D.h:128
size_t lastPoint() const
The index of the last (that is, right-most) grid point belonging to this domain.
Definition Domain1D.h:398
size_t m_iloc
Starting location within the solution vector for unknowns that correspond to this domain.
Definition Domain1D.h:550
void checkPointArraySize(size_t nn) const
Check that an array size is at least nPoints().
Definition Domain1D.h:180
size_t domainIndex()
The left-to-right location of this domain.
Definition Domain1D.h:52
shared_ptr< Solution > m_solution
Composite thermo/kinetics/transport handler.
Definition Domain1D.h:565
bool transient()
True if not in steady-state mode.
Definition Domain1D.h:284
size_t nComponents() const
Number of components at each grid point.
Definition Domain1D.h:143
size_t bandwidth()
Set the Jacobian bandwidth for this domain.
Definition Domain1D.h:109
double rtol(size_t n)
Relative tolerance of the nth component.
Definition Domain1D.h:222
shared_ptr< Solution > solution() const
Return thermo/kinetics/transport manager used in the domain.
Definition Domain1D.h:364
virtual bool isConnector()
True if the domain is a connector domain.
Definition Domain1D.h:57
virtual void setTransport(shared_ptr< Transport > trans)
Set transport model to existing instance.
Definition Domain1D.h:73
virtual void setMeta(const AnyMap &meta)
Retrieve meta data.
Definition Domain1D.cpp:173
virtual void _finalize(const double *x)
In some cases, a domain may need to set parameters that depend on the initial solution estimate.
Definition Domain1D.h:507
Domain1D * left() const
Return a pointer to the left neighbor.
Definition Domain1D.h:429
void setContainer(OneDim *c, size_t index)
Specify the container object for this domain, and the position of this domain in the list.
Definition Domain1D.h:84
size_t nPoints() const
Number of grid points in this domain.
Definition Domain1D.h:165
virtual string domainType() const
Domain type flag.
Definition Domain1D.h:44
double lowerBound(size_t n) const
Lower bound on the nth component.
Definition Domain1D.h:257
void checkComponentIndex(size_t n) const
Check that the specified component index is in range.
Definition Domain1D.h:149
shared_ptr< vector< double > > m_state
data pointer shared from OneDim
Definition Domain1D.h:531
void linkLeft(Domain1D *left)
Set the left neighbor to domain 'left.
Definition Domain1D.h:406
virtual void resize(size_t nv, size_t np)
Resize the domain to have nv components and np grid points.
Definition Domain1D.cpp:44
double upperBound(size_t n) const
Upper bound on the nth component.
Definition Domain1D.h:252
Refiner & refiner()
Return a reference to the grid refiner.
Definition Domain1D.h:138
Domain1D * right() const
Return a pointer to the right neighbor.
Definition Domain1D.h:434
double steady_atol(size_t n)
Steady absolute tolerance of the nth component.
Definition Domain1D.h:237
void setSteadyTolerances(double rtol, double atol, size_t n=npos)
Set tolerances for steady-state mode.
Definition Domain1D.cpp:100
virtual shared_ptr< SolutionArray > asArray(const double *soln) const
Save the state of this domain as a SolutionArray.
Definition Domain1D.h:329
virtual string componentName(size_t n) const
Name of the nth component. May be overloaded.
Definition Domain1D.cpp:67
double transient_atol(size_t n)
Transient absolute tolerance of the nth component.
Definition Domain1D.h:247
void setSolution(shared_ptr< Solution > sol)
Set the solution manager.
Definition Domain1D.cpp:31
virtual void init()
Initialize.
Definition Domain1D.h:118
double atol(size_t n)
Absolute tolerance of the nth component.
Definition Domain1D.h:227
void setID(const string &s)
Specify an identifying tag for this domain.
Definition Domain1D.h:444
void forceFullUpdate(bool update)
In some cases, for computational efficiency some properties (such as transport coefficients) may not ...
Definition Domain1D.h:515
const OneDim & container() const
The container holding this domain.
Definition Domain1D.h:78
virtual void setKinetics(shared_ptr< Kinetics > kin)
Set the kinetics manager.
Definition Domain1D.h:67
shared_ptr< SolutionArray > toArray(bool normalize=false) const
Save the state of this domain to a SolutionArray.
Definition Domain1D.cpp:149
size_t m_points
Number of grid points.
Definition Domain1D.h:535
bool steady()
True if in steady-state mode.
Definition Domain1D.h:279
void setBandwidth(int bw=-1)
Set the Jacobian bandwidth. See the discussion of method bandwidth().
Definition Domain1D.h:90
double steady_rtol(size_t n)
Steady relative tolerance of the nth component.
Definition Domain1D.h:232
string m_id
Identity tag for the domain.
Definition Domain1D.h:558
string type() const
String indicating the domain implemented.
Definition Domain1D.h:49
void initTimeInteg(double dt, const double *x0)
Prepare to do time stepping with time step dt.
Definition Domain1D.h:265
void setData(shared_ptr< vector< double > > &data)
Set shared data pointer.
Definition Domain1D.h:520
virtual void eval(size_t j, double *x, double *r, integer *mask, double rdt=0.0)
Evaluate the residual function at point j.
Definition Domain1D.h:308
void append(Domain1D *right)
Append domain 'right' to this one, and update all links.
Definition Domain1D.h:423
void setSteadyMode()
Prepare to solve the steady-state problem.
Definition Domain1D.h:274
virtual double initialValue(size_t n, size_t j)
Initial value of solution component n at grid point j.
Definition Domain1D.cpp:293
void checkPointIndex(size_t n) const
Check that the specified point index is in range.
Definition Domain1D.h:171
virtual size_t componentIndex(const string &name) const
index of component with name name.
Definition Domain1D.cpp:76
double prevSoln(size_t n, size_t j) const
Value of component n at point j in the previous solution.
Definition Domain1D.h:439
virtual void fromArray(SolutionArray &arr, double *soln)
Restore the solution for this domain from a SolutionArray.
Definition Domain1D.h:350
size_t firstPoint() const
The index of the first (that is, left-most) grid point belonging to this domain.
Definition Domain1D.h:390
void needJacUpdate()
Set this if something has changed in the governing equations (for example, the value of a constant ha...
Definition Domain1D.cpp:113
void linkRight(Domain1D *right)
Set the right neighbor to domain 'right.'.
Definition Domain1D.h:415
virtual void _getInitialSoln(double *x)
Writes some or all initial solution values into the global solution array, beginning at the location ...
Definition Domain1D.cpp:284
void checkComponentArraySize(size_t nn) const
Check that an array size is at least nComponents().
Definition Domain1D.h:158
double transient_rtol(size_t n)
Transient relative tolerance of the nth component.
Definition Domain1D.h:242
virtual size_t loc(size_t j=0) const
Location of the start of the local solution vector in the global solution vector,.
Definition Domain1D.h:382
void locate()
Find the index of the first grid point in this domain, and the start of its variables in the global s...
Definition Domain1D.cpp:205
virtual AnyMap getMeta() const
Retrieve meta data.
Definition Domain1D.cpp:121
virtual void show(std::ostream &s, const double *x)
Print the solution.
Definition Domain1D.h:457
virtual void setupGrid(size_t n, const double *z)
called to set up initial grid, and after grid refinement
Definition Domain1D.cpp:225
An array index is out of range.
An error indicating that an unimplemented function has been called.
Container class for multiple-domain 1D problems.
Definition OneDim.h:27
Refine Domain1D grids so that profiles satisfy adaptation tolerances.
Definition refine.h:17
A container class holding arrays of state information.
Definitions for the classes that are thrown when Cantera experiences an error condition (also contain...
Namespace for the Cantera kernel.
Definition AnyMap.cpp:564
const size_t npos
index returned by functions to indicate "no position"
Definition ct_defs.h:180