Cantera  2.3.0
OneDim Class Reference

Container class for multiple-domain 1D problems. More...

#include <OneDim.h>

Inheritance diagram for OneDim:
[legend]
Collaboration diagram for OneDim:
[legend]

## Public Member Functions

OneDim (std::vector< Domain1D *> domains)
Construct a OneDim container for the domains in the list domains. More...

MultiJacjacobian ()
Return a reference to the Jacobian evaluator. More...

MultiNewtonnewton ()
Return a reference to the Newton iterator. More...

int solve (doublereal *x0, doublereal *x1, int loglevel)
Solve F(x) = 0, where F(x) is the multi-domain residual function. More...

size_t nDomains () const
Number of domains. More...

Domain1Ddomain (size_t i) const
Return a reference to domain i. More...

size_t domainIndex (const std::string &name)

void checkDomainIndex (size_t n) const
Check that the specified domain index is in range. More...

void checkDomainArraySize (size_t nn) const
Check that an array size is at least nDomains(). More...

size_t start (size_t i) const
The index of the start of domain i in the solution vector. More...

size_t size () const
Total solution vector length;. More...

Domain1Dleft ()
Pointer to left-most domain (first added). More...

Domain1Dright ()
Pointer to right-most domain (last added). More...

size_t nVars (size_t jg)
Number of solution components at global point jg. More...

size_t loc (size_t jg)
Location in the solution vector of the first component of global point jg. More...

std::tuple< std::string, size_t, std::string > component (size_t i)
Return the domain, local point index, and component name for the i-th component of the global solution vector. More...

size_t bandwidth () const
Jacobian bandwidth. More...

void init ()

size_t points ()
Total number of points. More...

doublereal ssnorm (doublereal *x, doublereal *r)
Steady-state max norm (infinity norm) of the residual evaluated using solution x. More...

doublereal rdt () const
Reciprocal of the time step. More...

void initTimeInteg (doublereal dt, doublereal *x)
Prepare for time stepping beginning with solution x and timestep dt. More...

bool transient () const
True if transient mode. More...

void eval (size_t j, double *x, double *r, doublereal rdt=-1.0, int count=1)
Evaluate the multi-domain residual function. More...

Domain1DpointDomain (size_t i)
Return a pointer to the domain global point i belongs to. More...

virtual void resize ()
Call after one or more grids has changed size, e.g. after being refined. More...

double timeStep (int nsteps, double dt, double *x, double *r, int loglevel)

void writeStats (int printTime=1)
Write statistics about the number of iterations and Jacobians at each grid level. More...

void save (const std::string &fname, std::string id, const std::string &desc, doublereal *sol, int loglevel)

void setMinTimeStep (doublereal tmin)

void setMaxTimeStep (doublereal tmax)

void setTimeStepFactor (doublereal tfactor)

void setMaxTimeStepCount (int nmax)
Set the maximum number of timeteps allowed before successful steady-state solve. More...

int maxTimeStepCount () const
Return the maximum number of timeteps allowed before successful steady-state solve. More...

void setJacAge (int ss_age, int ts_age=-1)

void saveStats ()
Save statistics on function and Jacobian evaluation, and reset the counters. More...

void clearStats ()
Clear saved statistics. More...

const std::vector< size_t > & gridSizeStats ()

const vector_fpjacobianTimeStats ()
Return CPU time spent evaluating Jacobians in each call to solve() More...

const vector_fpevalTimeStats ()
Return CPU time spent on non-Jacobian function evaluations in each call to solve() More...

const vector_intjacobianCountStats ()
Return number of Jacobian evaluations made in each call to solve() More...

const vector_intevalCountStats ()
Return number of non-Jacobian function evaluations made in each call to solve() More...

const vector_inttimeStepStats ()
Return number of time steps taken in each call to solve() More...

void setInterrupt (Func1 *interrupt)
Set a function that will be called every time eval is called. More...

void setTimeStepCallback (Func1 *callback)
Set a function that will be called after each successful timestep. More...

## Protected Member Functions

void evalSSJacobian (doublereal *x, doublereal *xnew)

## Protected Attributes

doublereal m_tmin
minimum timestep size More...

doublereal m_tmax
maximum timestep size More...

doublereal m_tfactor
factor time step is multiplied by if time stepping fails ( < 1 ) More...

std::unique_ptr< MultiJacm_jac
Jacobian evaluator. More...

std::unique_ptr< MultiNewtonm_newt
Newton iterator. More...

doublereal m_rdt
reciprocal of time step More...

bool m_jac_ok
if true, Jacobian is current More...

size_t m_bw
Jacobian bandwidth. More...

size_t m_size
solution vector size More...

std::vector< Domain1D * > m_dom

std::vector< Domain1D * > m_connect

std::vector< Domain1D * > m_bulk

bool m_init

std::vector< size_t > m_nvars

std::vector< size_t > m_loc

size_t m_pts

doublereal m_solve_time

int m_ss_jac_age

int m_ts_jac_age

Func1m_interrupt
Function called at the start of every call to eval. More...

Func1m_time_step_callback
User-supplied function called after each successful timestep. More...

int m_nsteps
Number of time steps taken in the current call to solve() More...

int m_nsteps_max
Maximum number of timesteps allowed per call to solve() More...

## Private Attributes

int m_nevals

doublereal m_evaltime

std::vector< size_t > m_gridpts

vector_int m_jacEvals

vector_fp m_jacElapsed

vector_int m_funcEvals

vector_fp m_funcElapsed

vector_int m_timeSteps
Number of time steps taken in each call to solve() (e.g. More...

## Detailed Description

Container class for multiple-domain 1D problems.

Each domain is represented by an instance of Domain1D.

Definition at line 25 of file OneDim.h.

## ◆ OneDim()

 OneDim ( std::vector< Domain1D *> domains )

Construct a OneDim container for the domains in the list domains.

Definition at line 32 of file OneDim.cpp.

References OneDim::addDomain(), OneDim::init(), OneDim::m_newt, and OneDim::resize().

## Member Function Documentation

 void addDomain ( Domain1D * d )

Definition at line 79 of file OneDim.cpp.

Referenced by OneDim::OneDim().

## ◆ jacobian()

 MultiJac & jacobian ( )

Return a reference to the Jacobian evaluator.

Definition at line 101 of file OneDim.cpp.

References OneDim::m_jac.

Referenced by Domain1D::needJacUpdate().

## ◆ newton()

 MultiNewton & newton ( )

Return a reference to the Newton iterator.

Definition at line 105 of file OneDim.cpp.

References OneDim::m_newt.

Referenced by OneDim::timeStep().

## ◆ solve()

 int solve ( doublereal * x0, doublereal * x1, int loglevel )

Solve F(x) = 0, where F(x) is the multi-domain residual function.

Parameters
 x0 Starting estimate of solution. x1 Final solution satisfying F(x1) = 0. loglevel Controls amount of diagnostic output.

Definition at line 224 of file OneDim.cpp.

Referenced by Sim1D::newtonSolve(), and OneDim::timeStep().

## ◆ nDomains()

 size_t nDomains ( ) const
inline

Number of domains.

Definition at line 52 of file OneDim.h.

## ◆ domain()

 Domain1D& domain ( size_t i ) const
inline

Return a reference to domain i.

Definition at line 57 of file OneDim.h.

## ◆ checkDomainIndex()

 void checkDomainIndex ( size_t n ) const
inline

Check that the specified domain index is in range.

Throws an exception if n is greater than nDomains()-1

Definition at line 65 of file OneDim.h.

## ◆ checkDomainArraySize()

 void checkDomainArraySize ( size_t nn ) const
inline

Check that an array size is at least nDomains().

Throws an exception if nn is less than nDomains(). Used before calls which take an array pointer.

Definition at line 74 of file OneDim.h.

## ◆ start()

 size_t start ( size_t i ) const
inline

The index of the start of domain i in the solution vector.

Definition at line 81 of file OneDim.h.

## ◆ size()

 size_t size ( ) const
inline

Total solution vector length;.

Definition at line 86 of file OneDim.h.

References OneDim::m_size.

Referenced by MultiNewton::norm2(), Sim1D::resize(), and MultiNewton::step().

## ◆ left()

 Domain1D* left ( )
inline

Pointer to left-most domain (first added).

Definition at line 91 of file OneDim.h.

## ◆ right()

 Domain1D* right ( )
inline

Pointer to right-most domain (last added).

Definition at line 96 of file OneDim.h.

## ◆ nVars()

 size_t nVars ( size_t jg )
inline

Number of solution components at global point jg.

Definition at line 101 of file OneDim.h.

Referenced by MultiJac::eval().

## ◆ loc()

 size_t loc ( size_t jg )
inline

Location in the solution vector of the first component of global point jg.

Definition at line 107 of file OneDim.h.

Referenced by MultiJac::eval(), and Sim1D::restore().

## ◆ component()

 std::tuple< std::string, size_t, std::string > component ( size_t i )

Return the domain, local point index, and component name for the i-th component of the global solution vector.

Definition at line 65 of file OneDim.cpp.

## ◆ bandwidth()

 size_t bandwidth ( ) const
inline

Jacobian bandwidth.

Definition at line 116 of file OneDim.h.

References OneDim::m_bw.

## ◆ init()

 void init ( )

Initialize all domains. On the first call, this methods calls the init method of each domain, proceeding from left to right. Subsequent calls do nothing.

Definition at line 336 of file OneDim.cpp.

Referenced by OneDim::OneDim().

## ◆ points()

 size_t points ( )
inline

Total number of points.

Definition at line 128 of file OneDim.h.

## ◆ ssnorm()

 doublereal ssnorm ( doublereal * x, doublereal * r )

Steady-state max norm (infinity norm) of the residual evaluated using solution x.

On return, array r contains the steady-state residual values. Used only for diagnostic output.

Definition at line 290 of file OneDim.cpp.

References OneDim::eval(), OneDim::m_size, and Cantera::npos.

Referenced by MultiNewton::solve(), and OneDim::timeStep().

## ◆ rdt()

 doublereal rdt ( ) const
inline

Reciprocal of the time step.

Definition at line 140 of file OneDim.h.

References OneDim::m_rdt.

Referenced by OneDim::eval(), and MultiNewton::solve().

## ◆ initTimeInteg()

 void initTimeInteg ( doublereal dt, doublereal * x )

Prepare for time stepping beginning with solution x and timestep dt.

Definition at line 300 of file OneDim.cpp.

References OneDim::m_jac, OneDim::m_rdt, and Cantera::Tiny.

Referenced by OneDim::timeStep().

## ◆ transient()

 bool transient ( ) const
inline

True if transient mode.

Definition at line 148 of file OneDim.h.

References OneDim::m_rdt.

inline

Definition at line 153 of file OneDim.h.

References OneDim::m_rdt.

Prepare to solve the steady-state problem. After invoking this method, subsequent calls to solve() will solve the steady-state problem. Sets the reciprocal of the time step to zero, and, if it was previously non- zero, signals that a new Jacobian will be needed.

Definition at line 319 of file OneDim.cpp.

References OneDim::m_jac, and OneDim::m_rdt.

## ◆ eval()

 void eval ( size_t j, double * x, double * r, doublereal rdt = -1.0, int count = 1 )

Evaluate the multi-domain residual function.

Parameters
 j if j != npos, only evaluate residual for points j-1, j, and j + 1; otherwise, evaluate at all grid points. x solution vector r on return, contains the residual vector rdt Reciprocal of the time step. if omitted, then the default value is used. count Set to zero to omit this call from the statistics

Definition at line 258 of file OneDim.cpp.

Referenced by MultiJac::eval(), OneDim::solve(), MultiNewton::solve(), OneDim::ssnorm(), and MultiNewton::step().

## ◆ pointDomain()

 Domain1D * pointDomain ( size_t i )

Return a pointer to the domain global point i belongs to.

The domains are scanned right-to-left, and the first one with starting location less or equal to i is returned.

Definition at line 246 of file OneDim.cpp.

## ◆ resize()

 void resize ( )
virtual

Call after one or more grids has changed size, e.g. after being refined.

Reimplemented in Sim1D.

Definition at line 168 of file OneDim.cpp.

References OneDim::m_bw, OneDim::nDomains(), and OneDim::saveStats().

Referenced by OneDim::OneDim(), and Sim1D::resize().

## ◆ timeStep()

 doublereal timeStep ( int nsteps, double dt, double * x, double * r, int loglevel )

Take time steps using Backward Euler.

Parameters
 nsteps number of steps dt initial step size x current solution vector r solution vector after time stepping loglevel controls amount of printed diagnostics
Returns
size of last timestep taken

Definition at line 348 of file OneDim.cpp.

## ◆ writeStats()

 void writeStats ( int printTime = 1 )

Write statistics about the number of iterations and Jacobians at each grid level.

Parameters
 printTime Boolean that indicates whether time should be printed out The default is true. It's turned off for test problems where we don't want to print any times

Definition at line 120 of file OneDim.cpp.

References OneDim::m_timeSteps, OneDim::saveStats(), and Cantera::writelog().

## ◆ setMaxTimeStepCount()

 void setMaxTimeStepCount ( int nmax )
inline

Set the maximum number of timeteps allowed before successful steady-state solve.

Definition at line 233 of file OneDim.h.

References OneDim::m_nsteps_max.

## ◆ maxTimeStepCount()

 int maxTimeStepCount ( ) const
inline

Return the maximum number of timeteps allowed before successful steady-state solve.

Definition at line 239 of file OneDim.h.

References OneDim::m_nsteps_max.

## ◆ saveStats()

 void saveStats ( )

Save statistics on function and Jacobian evaluation, and reset the counters.

Statistics are saved only if the number of Jacobian evaluations is greater than zero. The statistics saved are:

• number of grid points
• number of Jacobian evaluations
• CPU time spent evaluating Jacobians
• number of non-Jacobian function evaluations
• CPU time spent evaluating functions
• number of time steps

Definition at line 137 of file OneDim.cpp.

References OneDim::m_jac, OneDim::m_nsteps, and OneDim::m_timeSteps.

## ◆ clearStats()

 void clearStats ( )

Clear saved statistics.

Definition at line 155 of file OneDim.cpp.

References OneDim::m_nsteps, and OneDim::m_timeSteps.

## ◆ gridSizeStats()

 const std::vector& gridSizeStats ( )
inline

Definition at line 263 of file OneDim.h.

References OneDim::saveStats().

## ◆ jacobianTimeStats()

 const vector_fp& jacobianTimeStats ( )
inline

Return CPU time spent evaluating Jacobians in each call to solve()

Definition at line 269 of file OneDim.h.

References OneDim::saveStats().

## ◆ evalTimeStats()

 const vector_fp& evalTimeStats ( )
inline

Return CPU time spent on non-Jacobian function evaluations in each call to solve()

Definition at line 276 of file OneDim.h.

References OneDim::saveStats().

## ◆ jacobianCountStats()

 const vector_int& jacobianCountStats ( )
inline

Return number of Jacobian evaluations made in each call to solve()

Definition at line 282 of file OneDim.h.

References OneDim::saveStats().

## ◆ evalCountStats()

 const vector_int& evalCountStats ( )
inline

Return number of non-Jacobian function evaluations made in each call to solve()

Definition at line 289 of file OneDim.h.

References OneDim::saveStats().

## ◆ timeStepStats()

 const vector_int& timeStepStats ( )
inline

Return number of time steps taken in each call to solve()

Definition at line 295 of file OneDim.h.

References OneDim::m_timeSteps, and OneDim::saveStats().

## ◆ setInterrupt()

 void setInterrupt ( Func1 * interrupt )
inline

Set a function that will be called every time eval is called.

Can be used to provide keyboard interrupt support in the high-level language interfaces.

Definition at line 303 of file OneDim.h.

References OneDim::m_interrupt.

## ◆ setTimeStepCallback()

 void setTimeStepCallback ( Func1 * callback )
inline

Set a function that will be called after each successful timestep.

The function will be called with the size of the timestep as the argument. Intended to be used for observing solver progress for debugging purposes.

Definition at line 311 of file OneDim.h.

References OneDim::m_time_step_callback.

## ◆ m_tmin

 doublereal m_tmin
protected

minimum timestep size

Definition at line 318 of file OneDim.h.

Referenced by OneDim::timeStep().

## ◆ m_tmax

 doublereal m_tmax
protected

maximum timestep size

Definition at line 319 of file OneDim.h.

Referenced by OneDim::timeStep().

## ◆ m_tfactor

 doublereal m_tfactor
protected

factor time step is multiplied by if time stepping fails ( < 1 )

Definition at line 322 of file OneDim.h.

Referenced by OneDim::timeStep().

## ◆ m_jac

 std::unique_ptr m_jac
protected

Jacobian evaluator.

Definition at line 324 of file OneDim.h.

## ◆ m_newt

 std::unique_ptr m_newt
protected

Newton iterator.

Definition at line 325 of file OneDim.h.

Referenced by OneDim::newton(), OneDim::OneDim(), and OneDim::solve().

## ◆ m_rdt

 doublereal m_rdt
protected

reciprocal of time step

Definition at line 326 of file OneDim.h.

## ◆ m_jac_ok

 bool m_jac_ok
protected

if true, Jacobian is current

Definition at line 327 of file OneDim.h.

Referenced by OneDim::solve().

## ◆ m_bw

 size_t m_bw
protected

Jacobian bandwidth.

Definition at line 329 of file OneDim.h.

Referenced by OneDim::bandwidth(), and OneDim::resize().

## ◆ m_size

 size_t m_size
protected

solution vector size

Definition at line 330 of file OneDim.h.

Referenced by OneDim::eval(), OneDim::size(), OneDim::ssnorm(), and OneDim::timeStep().

## ◆ m_interrupt

 Func1* m_interrupt
protected

Function called at the start of every call to eval.

Definition at line 345 of file OneDim.h.

Referenced by OneDim::eval(), and OneDim::setInterrupt().

## ◆ m_time_step_callback

 Func1* m_time_step_callback
protected

User-supplied function called after each successful timestep.

Definition at line 348 of file OneDim.h.

Referenced by OneDim::setTimeStepCallback(), and OneDim::timeStep().

## ◆ m_nsteps

 int m_nsteps
protected

Number of time steps taken in the current call to solve()

Definition at line 351 of file OneDim.h.

Referenced by OneDim::clearStats(), OneDim::saveStats(), and OneDim::timeStep().

## ◆ m_nsteps_max

 int m_nsteps_max
protected

Maximum number of timesteps allowed per call to solve()

Definition at line 354 of file OneDim.h.

Referenced by OneDim::maxTimeStepCount(), OneDim::setMaxTimeStepCount(), and OneDim::timeStep().

## ◆ m_timeSteps

 vector_int m_timeSteps
private

Number of time steps taken in each call to solve() (e.g.

for each successive grid refinement)

Definition at line 368 of file OneDim.h.

Referenced by OneDim::clearStats(), OneDim::saveStats(), OneDim::timeStepStats(), and OneDim::writeStats().

The documentation for this class was generated from the following files: