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