Cantera
2.0
|
Container class for multiple-domain 1D problems. More...
#include <OneDim.h>
Public Member Functions | |
OneDim () | |
Default constructor. | |
OneDim (std::vector< Domain1D * > domains) | |
Construct a OneDim container for the domains pointed at by the input vector of pointers. | |
virtual | ~OneDim () |
Destructor. | |
void | addDomain (Domain1D *d) |
Add a domain. | |
MultiJac & | jacobian () |
Return a reference to the Jacobian evaluator. | |
MultiNewton & | newton () |
Return a reference to the Newton iterator. | |
int | solve (doublereal *x0, doublereal *x1, int loglevel) |
Solve F(x) = 0, where F(x) is the multi-domain residual function. | |
size_t | nDomains () const |
Number of domains. | |
Domain1D & | domain (size_t i) const |
Return a reference to domain i. | |
size_t | domainIndex (std::string name) |
void | checkDomainIndex (size_t n) const |
Check that the specified domain index is in range Throws an exception if n is greater than nDomains()-1. | |
void | checkDomainArraySize (size_t nn) const |
Check that an array size is at least nDomains() Throws an exception if nn is less than nDomains(). | |
size_t | start (size_t i) const |
The index of the start of domain i in the solution vector. | |
size_t | size () const |
Total solution vector length;. | |
Domain1D * | left () |
Pointer to left-most domain (first added). | |
Domain1D * | right () |
Pointer to right-most domain (last added). | |
size_t | nVars (size_t jg) |
Number of solution components at global point jg. | |
size_t | loc (size_t jg) |
Location in the solution vector of the first component of global point jg. | |
size_t | bandwidth () const |
Jacobian bandwidth. | |
void | init () |
Initialize. | |
size_t | points () |
Total number of points. | |
doublereal | ssnorm (doublereal *x, doublereal *r) |
Steady-state max norm of the residual evaluated using solution x. | |
doublereal | rdt () const |
Reciprocal of the time step. | |
void | initTimeInteg (doublereal dt, doublereal *x) |
Prepare for time stepping beginning with solution x. | |
bool | transient () const |
True if transient mode. | |
bool | steady () const |
True if steady mode. | |
void | setSteadyMode () |
Set steady mode. | |
void | eval (size_t j, double *x, double *r, doublereal rdt=-1.0, int count=1) |
Evaluate the multi-domain residual function. | |
Domain1D * | pointDomain (size_t i) |
Pointer to the domain global point i belongs to. | |
void | resize () |
Call after one or more grids has been refined. | |
vector_int & | transientMask () |
double | timeStep (int nsteps, double dt, double *x, double *r, int loglevel) |
Take time steps using Backward Euler. | |
void | writeStats (int printTime=1) |
Write statistics about the number of iterations and Jacobians at each grid level. | |
void | save (std::string fname, std::string id, std::string desc, doublereal *sol) |
void | setMinTimeStep (doublereal tmin) |
void | setMaxTimeStep (doublereal tmax) |
void | setTimeStepFactor (doublereal tfactor) |
void | setJacAge (int ss_age, int ts_age=-1) |
void | saveStats () |
Save statistics on function and Jacobiab evaulation, and reset the counters. | |
Protected Member Functions | |
void | evalSSJacobian (doublereal *x, doublereal *xnew) |
Protected Attributes | |
doublereal | m_tmin |
doublereal | m_tmax |
doublereal | m_tfactor |
MultiJac * | m_jac |
MultiNewton * | m_newt |
doublereal | m_rdt |
bool | m_jac_ok |
size_t | m_nd |
number of domains | |
size_t | m_bw |
size_t | m_size |
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 |
vector_int | m_mask |
size_t | m_pts |
doublereal | m_solve_time |
int | m_ss_jac_age |
int | m_ts_jac_age |
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 |
Container class for multiple-domain 1D problems.
Each domain is represented by an instance of Domain1D.
OneDim | ( | ) |
Construct a OneDim container for the domains pointed at by the input vector of pointers.
Definition at line 37 of file OneDim.cpp.
References OneDim::addDomain(), OneDim::init(), and OneDim::resize().
|
virtual |
Destructor.
Definition at line 101 of file OneDim.cpp.
void addDomain | ( | Domain1D * | d | ) |
Add a domain.
Domains are added left-to-right.
Definition at line 75 of file OneDim.cpp.
References OneDim::resize(), and Domain1D::setContainer().
Referenced by OneDim::OneDim().
MultiJac & jacobian | ( | ) |
Return a reference to the Jacobian evaluator.
Definition at line 107 of file OneDim.cpp.
Referenced by Domain1D::needJacUpdate().
MultiNewton & newton | ( | ) |
Return a reference to the Newton iterator.
Definition at line 111 of file OneDim.cpp.
Referenced by OneDim::timeStep().
int solve | ( | doublereal * | x0, |
doublereal * | x1, | ||
int | loglevel | ||
) |
Solve F(x) = 0, where F(x) is the multi-domain residual function.
x0 | Starting estimate of solution. |
x1 | Final solution satisfying F(x1) = 0. |
loglevel | Controls amount of diagnostic output. |
Definition at line 235 of file OneDim.cpp.
References DATA_PTR, MultiJac::eval(), OneDim::eval(), Cantera::npos, and MultiNewton::solve().
Referenced by Sim1D::newtonSolve(), and OneDim::timeStep().
|
inline |
Number of domains.
Definition at line 52 of file OneDim.h.
References OneDim::m_nd.
Referenced by MultiNewton::boundStep(), MultiNewton::norm2(), and MultiNewton::step().
|
inline |
Return a reference to domain i.
Definition at line 57 of file OneDim.h.
Referenced by MultiNewton::boundStep(), Sim1D::finalize(), MultiNewton::norm2(), Sim1D::refine(), Sim1D::restore(), Sim1D::setFixedTemperature(), Sim1D::setFlatProfile(), Sim1D::setGridMin(), Sim1D::setInitialGuess(), Sim1D::setProfile(), Sim1D::setRefineCriteria(), Sim1D::setValue(), Sim1D::showSolution(), Sim1D::Sim1D(), MultiNewton::step(), and Sim1D::value().
|
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.
References OneDim::m_nd.
|
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.
References OneDim::m_nd.
|
inline |
The index of the start of domain i in the solution vector.
Definition at line 81 of file OneDim.h.
Referenced by MultiNewton::boundStep(), Sim1D::finalize(), MultiNewton::norm2(), Sim1D::refine(), Sim1D::showSolution(), Sim1D::Sim1D(), and MultiNewton::step().
|
inline |
Total solution vector length;.
Definition at line 86 of file OneDim.h.
Referenced by MultiJac::MultiJac(), MultiNewton::norm2(), OneDim::resize(), Sim1D::Sim1D(), and MultiNewton::step().
|
inline |
Pointer to left-most domain (first added).
Definition at line 91 of file OneDim.h.
Referenced by OneDim::init(), OneDim::initTimeInteg(), and OneDim::setSteadyMode().
|
inline |
Pointer to right-most domain (last added).
Definition at line 96 of file OneDim.h.
Referenced by OneDim::pointDomain().
|
inline |
Number of solution components at global point jg.
Definition at line 101 of file OneDim.h.
Referenced by MultiJac::eval().
|
inline |
Location in the solution vector of the first component of global point jg.
Definition at line 109 of file OneDim.h.
Referenced by MultiJac::eval(), OneDim::resize(), and Sim1D::restore().
void init | ( | ) |
Initialize.
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 375 of file OneDim.cpp.
References Domain1D::init(), OneDim::left(), and Domain1D::right().
Referenced by OneDim::OneDim().
|
inline |
Total number of points.
Definition at line 122 of file OneDim.h.
Referenced by MultiJac::MultiJac().
doublereal ssnorm | ( | doublereal * | x, |
doublereal * | r | ||
) |
Steady-state max norm of the residual evaluated using solution x.
The 'infinity' (maximum magnitude) norm of the steady-state residual.
On return, array r contains the steady-state residual values.
Used only for diagnostic output.
Definition at line 317 of file OneDim.cpp.
References OneDim::eval(), ckr::max(), and Cantera::npos.
Referenced by MultiNewton::dampStep(), MultiNewton::solve(), and OneDim::timeStep().
|
inline |
Reciprocal of the time step.
Definition at line 133 of file OneDim.h.
Referenced by MultiNewton::solve().
void initTimeInteg | ( | doublereal | dt, |
doublereal * | x | ||
) |
Prepare for time stepping beginning with solution x.
Prepare for time stepping with timestep dt.
Definition at line 331 of file OneDim.cpp.
References DATA_PTR, Domain1D::initTimeInteg(), OneDim::left(), Domain1D::right(), and Cantera::Tiny.
Referenced by OneDim::timeStep().
void setSteadyMode | ( | ) |
Set steady mode.
Prepare to solve the steady-state problem.
After invoking this method, subsequent calls to solve() will solve the steady-state problem.
Set the reciprocal of the time step to zero, and, if it was previously non-zero, signal that a new Jacobian will be needed.
Definition at line 357 of file OneDim.cpp.
References DATA_PTR, OneDim::left(), Domain1D::right(), and Domain1D::setSteadyMode().
Referenced by OneDim::timeStep().
void eval | ( | size_t | j, |
double * | x, | ||
double * | r, | ||
doublereal | rdt = -1.0 , |
||
int | count = 1 |
||
) |
Evaluate the multi-domain residual function.
Evaluate the multi-domain residual function, and return the result in array r.
j | if j > 0, 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 283 of file OneDim.cpp.
References DATA_PTR.
Referenced by MultiJac::eval(), OneDim::solve(), MultiNewton::solve(), OneDim::ssnorm(), and MultiNewton::step().
Domain1D * pointDomain | ( | size_t | i | ) |
Pointer to the domain global point i belongs to.
Return a pointer to the domain that contains component i of the global solution vector.
The domains are scanned right-to-left, and the first one with starting location less or equal to i is returned.
8/26/02 changed '<' to '<=' DGG
Definition at line 266 of file OneDim.cpp.
References Domain1D::left(), Domain1D::loc(), and OneDim::right().
Referenced by MultiNewton::step().
void resize | ( | ) |
Call after one or more grids has been refined.
Definition at line 170 of file OneDim.cpp.
References Domain1D::bandwidth(), OneDim::loc(), Domain1D::loc(), OneDim::m_nd, Domain1D::nComponents(), Domain1D::nPoints(), Cantera::npos, MultiNewton::resize(), OneDim::saveStats(), and OneDim::size().
Referenced by OneDim::addDomain(), OneDim::OneDim(), Sim1D::refine(), Sim1D::restore(), and Sim1D::setFixedTemperature().
doublereal timeStep | ( | int | nsteps, |
double | dt, | ||
double * | x, | ||
double * | r, | ||
int | loglevel | ||
) |
Take time steps using Backward Euler.
nsteps – number of steps dt – initial step size loglevel – controls amount of printed diagnostics
Definition at line 407 of file OneDim.cpp.
References OneDim::initTimeInteg(), OneDim::newton(), MultiNewton::setOptions(), OneDim::setSteadyMode(), OneDim::solve(), OneDim::ssnorm(), and Cantera::writelog().
void writeStats | ( | int | printTime = 1 | ) |
Write statistics about the number of iterations and Jacobians at each grid level.
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 117 of file OneDim.cpp.
References Cantera::int2str(), OneDim::saveStats(), and Cantera::writelog().
void saveStats | ( | ) |
Save statistics on function and Jacobiab evaulation, and reset the counters.
Statistics are saved only if the number of Jacobian evaluations is greater than zero. The statistics saved are
Definition at line 150 of file OneDim.cpp.
References MultiJac::elapsedTime(), and MultiJac::nEvals().
Referenced by Domain1D::needJacUpdate(), OneDim::resize(), and OneDim::writeStats().
|
protected |
number of domains
Definition at line 232 of file OneDim.h.
Referenced by OneDim::checkDomainArraySize(), OneDim::checkDomainIndex(), Sim1D::finalize(), OneDim::nDomains(), Sim1D::refine(), OneDim::resize(), Sim1D::restore(), Sim1D::setFixedTemperature(), Sim1D::setGridMin(), Sim1D::setInitialGuess(), Sim1D::setRefineCriteria(), Sim1D::showSolution(), and Sim1D::Sim1D().