Cantera 2.6.0

Public Member Functions | Protected Attributes | List of all members
ResidJacEval Class Reference

Wrappers for the function evaluators for Nonlinear solvers and Time steppers. More...

`#include <ResidJacEval.h>`

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

## Public Member Functions
| ResidJacEval (doublereal atol=1.0e-13)
| Default constructor. More...
virtual int | nEquations () const
| Return the number of equations in the equation system. More...
virtual int | evalResidNJ (const doublereal t, const doublereal delta_t, const doublereal *const y, const doublereal *const ydot, doublereal *const resid, const ResidEval_Type_Enum evalType=Base_ResidEval, const int id_x=-1, const doublereal delta_x=0.0)
| Evaluate the residual function. More...
virtual int | eval (const doublereal t, const doublereal *const y, const doublereal *const ydot, doublereal *const r)
| Evaluate the residual function. More...
virtual int | getInitialConditions (const doublereal t0, doublereal *const y, doublereal *const ydot)
| Fill in the initial conditions. More...
virtual doublereal | filterNewStep (const doublereal t, const doublereal *const ybase, doublereal *const step)
| Filter the solution predictions. More...
virtual doublereal | filterSolnPrediction (const doublereal t, doublereal *const y)
| Filter the solution predictions. More...
void | setAtol (doublereal atol)
| Set a global value of the absolute tolerance. More...
virtual int | evalTimeTrackingEqns (const doublereal t, const doublereal delta_t, const doublereal *const y, const doublereal *const ydot)
| Evaluate the time tracking equations, if any. More...
virtual bool | evalStoppingCritera (const doublereal t, const doublereal delta_t, const doublereal *const y, const doublereal *const ydot)
| Evaluate any stopping criteria other than a final time limit. More...
virtual int | calcDeltaSolnVariables (const doublereal t, const doublereal *const y, const doublereal *const ydot, doublereal *const delta_y, const doublereal *const solnWeights=0)
| Return a vector of delta y's for calculation of the numerical Jacobian. More...
virtual void | calcSolnScales (const doublereal t, const doublereal *const y, const doublereal *const y_old, doublereal *const yScales)
| Returns a vector of column scale factors that can be used to column scale Jacobians. More...
virtual void | user_out2 (const int ifunc, const doublereal t, const doublereal delta_t, const doublereal *const y, const doublereal *const ydot)
| This function may be used to create output at various points in the execution of an application. More...
virtual void | user_out (const int ifunc, const doublereal t, const doublereal *y, const doublereal *ydot)
| This function may be used to create output at various points in the execution of an application. More...
virtual int | matrixConditioning (doublereal *const matrix, const int nrows, doublereal *const rhs)
| Multiply the matrix by another matrix that leads to better conditioning. More...
virtual int | evalJacobian (const doublereal t, const doublereal delta_t, doublereal cj, const doublereal *const y, const doublereal *const ydot, DenseMatrix &J, doublereal *const resid)
| Calculate an analytical Jacobian and the residual at the current time and values. More...
virtual int | evalJacobianDP (const doublereal t, const doublereal delta_t, doublereal cj, const doublereal *const y, const doublereal *const ydot, doublereal *const *jacobianColPts, doublereal *const resid)
| Calculate an analytical Jacobian and the residual at the current time and values. More...
Public Member Functions inherited from ResidEval
virtual void | constrain (const int k, const int flag)
| Constrain solution component k. More...
int | constraint (const int k) const
virtual void | initSizes ()
| Initialization function. More...
virtual void | setAlgebraic (const int k)
| Specify that solution component k is purely algebraic - that is, the derivative of this component does not appear in the residual function. More...
virtual bool | isAlgebraic (const int k)
virtual int | eval (const doublereal t, const doublereal *const y, const doublereal *const ydot, doublereal *const r)
| Evaluate the residual function. More...
virtual int | evalSS (const doublereal t, const doublereal *const y, doublereal *const r)
virtual int | evalSimpleTD (const doublereal t, const doublereal *const y, const doublereal *const yold, doublereal deltaT, doublereal *const r)
virtual int | getInitialConditions (const doublereal t0, doublereal *const y, doublereal *const ydot)
| Fill in the initial conditions. More...
virtual int | nEquations () const =0
| Return the number of equations in the equation system. More...
virtual void | writeSolution (int ievent, const double time, const double deltaT, const int time_step_num, const double *y, const double *ydot)
| Write out to a file or to standard output the current solution. More...
int | nparams () const
| Return the number of parameters in the calculation. More...

## Protected Attributes
doublereal | m_atol
| constant value of atol More...
int | neq_
| Number of equations. More...
Protected Attributes inherited from ResidEval
vector_int | m_alg
| Mapping vector that stores whether a degree of freedom is a DAE or not. More...
std::map< int, int > | m_constrain

## Detailed Description

Wrappers for the function evaluators for Nonlinear solvers and Time steppers.

Attention
  This class currently does not have any test cases or examples. Its implementation may be incomplete, and future changes to Cantera may unexpectedly cause this class to stop working. If you use this class, please consider contributing examples or test cases. In the absence of new tests or examples, this class may be deprecated and removed in a future version of Cantera. See https://github.com/Cantera/cantera/issues/267 for additional information.

A class for full (non-sparse dense matrices with Fortran-compatible data storage. The class adds support for identifying what types of calls are made to the residual evaluator by adding the ResidEval_Type_Enum class.

Definition at line 55 of file ResidJacEval.h.

## Constructor & Destructor Documentation

## ◆ ResidJacEval()

ResidJacEval | ( | doublereal | atol = `1.0e-13` | ) |

Default constructor.

Parameters

  atol | Initial value of the global tolerance (defaults to 1.0E-13)

Definition at line 13 of file ResidJacEval.cpp.

## Member Function Documentation

## ◆ nEquations()

int nEquations | ( |  | ) | const
| virtual

Return the number of equations in the equation system.

Implements ResidEval.

Definition at line 18 of file ResidJacEval.cpp.

References ResidJacEval::neq_.

Referenced by DAE_Solver::nEquations().

## ◆ evalResidNJ()

int evalResidNJ | ( | const doublereal | t,
|  | const doublereal | delta_t,
|  | const doublereal *const | y,
|  | const doublereal *const | ydot,
|  | doublereal *const | resid,
|  | const ResidEval_Type_Enum | evalType = `Base_ResidEval`,
|  | const int | id_x = `-1`,
|  | const doublereal | delta_x = `0.0`
| ) |  |
| virtual

Evaluate the residual function.

Parameters

  t | Time (input)
  delta_t | The current value of the time step (input)
  y | Solution vector (input, do not modify)
  ydot | Rate of change of solution vector. (input, do not modify)
  resid | Value of the residual that is computed (output)
  evalType | Type of the residual being computed (defaults to Base_ResidEval)
  id_x | Index of the variable that is being numerically differenced to find the Jacobian (defaults to -1, which indicates that no variable is being differenced or that the residual doesn't take this issue into account)
  delta_x | Value of the delta used in the numerical differencing

Returns
  a flag to indicate that operation is successful. 1 Means a successful operation -0 or neg value Means an unsuccessful operation

Definition at line 120 of file ResidJacEval.cpp.

Referenced by ResidJacEval::eval(), and ida_resid().

## ◆ eval()

int eval | ( | const doublereal | t,
|  | const doublereal *const | y,
|  | const doublereal *const | ydot,
|  | doublereal *const | r
| ) |  |
| virtual

Evaluate the residual function.

Called by the integrator.

Parameters

  t | time. (input)
  y | solution vector. (input)
  ydot | rate of change of solution vector. (input)
  r | residual vector (output)

Reimplemented from ResidEval.

Definition at line 129 of file ResidJacEval.cpp.

References ResidJacEval::evalResidNJ().

## ◆ getInitialConditions()

int getInitialConditions | ( | const doublereal | t0,
|  | doublereal *const | y,
|  | doublereal *const | ydot
| ) |  |
| virtual

Fill in the initial conditions.

Values for both the solution and the value of ydot may be provided.

Parameters

  [in] | t0 | Time
  [out] | y | Solution vector
  [out] | ydot | Rate of change of solution vector.

Returns
  a flag to indicate that operation is successful. 1 Means a successful operation -0 or neg value Means an unsuccessful operation

Reimplemented from ResidEval.

Definition at line 32 of file ResidJacEval.cpp.

References ResidJacEval::neq_.

Referenced by IDA_Solver::init().

## ◆ filterNewStep()

doublereal filterNewStep | ( | const doublereal | t,
|  | const doublereal *const | ybase,
|  | doublereal *const | step
| ) |  |
| virtual

Filter the solution predictions.

Codes might provide a predicted step change. This routine filters the predicted solution vector eliminating illegal directions.

Parameters

  t | Time (input)
  ybase | Solution vector (input, output)
  step | Proposed step in the solution that will be cropped

Returns
  the norm of the amount of filtering

Definition at line 96 of file ResidJacEval.cpp.

## ◆ filterSolnPrediction()

doublereal filterSolnPrediction | ( | const doublereal | t,
|  | doublereal *const | y
| ) |  |
| virtual

Filter the solution predictions.

Codes might provide a predicted solution vector. This routine filters the predicted solution vector.

Parameters

  t | Time (input)
  y | Solution vector (input, output)

Returns
  the norm of the amount of filtering

Definition at line 101 of file ResidJacEval.cpp.

## ◆ setAtol()

void setAtol | ( | doublereal | atol | ) |

Set a global value of the absolute tolerance.

Parameters

  atol | Value of atol

Definition at line 23 of file ResidJacEval.cpp.

References ResidJacEval::m_atol.

## ◆ evalTimeTrackingEqns()

int evalTimeTrackingEqns | ( | const doublereal | t,
|  | const doublereal | delta_t,
|  | const doublereal *const | y,
|  | const doublereal *const | ydot
| ) |  |
| virtual

Evaluate the time tracking equations, if any.

Evaluate time integrated quantities that are calculated at the end of every successful time step. This call is made once at the end of every successful time step that advances the time. It's also made once at the start of the time stepping.

Parameters

  t | Time (input)
  delta_t | The current value of the time step (input)
  y | Solution vector (input, do not modify)
  ydot | Rate of change of solution vector. (input, do not modify)

Returns
  a flag to indicate that operation is successful. 1 Means a successful operation -0 or neg value Means an unsuccessful operation

Definition at line 58 of file ResidJacEval.cpp.

## ◆ evalStoppingCritera()

bool evalStoppingCritera | ( | const doublereal | t,
|  | const doublereal | delta_t,
|  | const doublereal *const | y,
|  | const doublereal *const | ydot
| ) |  |
| virtual

Evaluate any stopping criteria other than a final time limit.

If we are to stop the time integration for any reason other than reaching a final time limit, tout, provide a test here. This call is made at the end of every successful time step iteration

Returns
  If true, the the time stepping is stopped. If false, then time stepping is stopped if t >= tout Defaults to false.

Parameters

  t | Time (input)
  delta_t | The current value of the time step (input)
  y | Solution vector (input, do not modify)
  ydot | Rate of change of solution vector. (input, do not modify)

Definition at line 106 of file ResidJacEval.cpp.

## ◆ calcDeltaSolnVariables()

int calcDeltaSolnVariables | ( | const doublereal | t,
|  | const doublereal *const | y,
|  | const doublereal *const | ydot,
|  | doublereal *const | delta_y,
|  | const doublereal *const | solnWeights = `0`
| ) |  |
| virtual

Return a vector of delta y's for calculation of the numerical Jacobian.

There is a default algorithm provided.

    delta_y[i] = atol[i] + 1.0E-6 ysoln[i]
    delta_y[i] = atol[i] + MAX(1.0E-6 ysoln[i] * 0.01 * solnWeights[i])

Parameters

  t | Time (input)
  y | Solution vector (input, do not modify)
  ydot | Rate of change of solution vector. (input, do not modify)
  delta_y | Value of the delta to be used in calculating the numerical Jacobian
  solnWeights | Value of the solution weights that are used in determining convergence (default = 0)

Returns
  a flag to indicate that operation is successful. 1 Means a successful operation -0 or neg value Means an unsuccessful operation

Definition at line 66 of file ResidJacEval.cpp.

References ResidJacEval::m_atol, and ResidJacEval::neq_.

## ◆ calcSolnScales()

void calcSolnScales | ( | const doublereal | t,
|  | const doublereal *const | y,
|  | const doublereal *const | y_old,
|  | doublereal *const | yScales
| ) |  |
| virtual

Returns a vector of column scale factors that can be used to column scale Jacobians.

Default to yScales[] = 1.0

Parameters

  t | Time (input)
  y | Solution vector (input, do not modify)
  y_old | Old Solution vector (input, do not modify)
  yScales | Value of the column scales

Definition at line 84 of file ResidJacEval.cpp.

References ResidJacEval::neq_.

## ◆ user_out2()

void user_out2 | ( | const int | ifunc,
|  | const doublereal | t,
|  | const doublereal | delta_t,
|  | const doublereal *const | y,
|  | const doublereal *const | ydot
| ) |  |
| virtual

This function may be used to create output at various points in the execution of an application.

Parameters

  ifunc | identity of the call 0 Initial call 1 Called at the end of every successful time step -1 Called at the end of every unsuccessful time step 2 Called at the end of every call to integrateRJE()
  t | Time (input)
  delta_t | The current value of the time step (input)
  y | Solution vector (input, do not modify)
  ydot | Rate of change of solution vector. (input)

Definition at line 46 of file ResidJacEval.cpp.

Referenced by ResidJacEval::user_out().

## ◆ user_out()

void user_out | ( | const int | ifunc,
|  | const doublereal | t,
|  | const doublereal * | y,
|  | const doublereal * | ydot
| ) |  |
| virtual

This function may be used to create output at various points in the execution of an application.

This routine calls user_out2().

Parameters

  ifunc | identity of the call
  t | Time (input)
  y | Solution vector (input, do not modify)
  ydot | Rate of change of solution vector. (input)

Definition at line 52 of file ResidJacEval.cpp.

References ResidJacEval::user_out2().

## ◆ matrixConditioning()

int matrixConditioning | ( | doublereal *const | matrix,
|  | const int | nrows,
|  | doublereal *const | rhs
| ) |  |
| virtual

Multiply the matrix by another matrix that leads to better conditioning.

Provide a left sided matrix that will multiply the current Jacobian, after scaling and lead to a better conditioned system. This routine is called just before the matrix is factored.

Original Problem: J delta_x = - Resid

New problem: M (J delta_x) = - M Resid

Parameters

  matrix | Pointer to the current Jacobian (if zero, it's already been factored)
  nrows | offsets for the matrix
  rhs | residual vector. This also needs to be LHS multiplied by M

Returns
  a flag to indicate that operation is successful. 1 Means a successful operation -0 or neg value Means an unsuccessful operation

Definition at line 114 of file ResidJacEval.cpp.

## ◆ evalJacobian()

int evalJacobian | ( | const doublereal | t,
|  | const doublereal | delta_t,
|  | doublereal | cj,
|  | const doublereal *const | y,
|  | const doublereal *const | ydot,
|  | DenseMatrix & | J,
|  | doublereal *const | resid
| ) |  |
| virtual

Calculate an analytical Jacobian and the residual at the current time and values.

Only called if the jacFormation method is set to analytical

Parameters

  t | Time (input)
  delta_t | The current value of the time step (input)
  cj | Coefficient of yprime used in the evaluation of the Jacobian
  y | Solution vector (input, do not modify)
  ydot | Rate of change of solution vector. (input, do not modify)
  J | Reference to the DenseMatrix object to be calculated (output)
  resid | Value of the residual that is computed (output)

Returns
  a flag to indicate that operation is successful. 1 Means a successful operation -0 or neg value Means an unsuccessful operation

Definition at line 136 of file ResidJacEval.cpp.

References ResidJacEval::evalJacobianDP().

## ◆ evalJacobianDP()

int evalJacobianDP | ( | const doublereal | t,
|  | const doublereal | delta_t,
|  | doublereal | cj,
|  | const doublereal *const | y,
|  | const doublereal *const | ydot,
|  | doublereal *const * | jacobianColPts,
|  | doublereal *const | resid
| ) |  |
| virtual

Calculate an analytical Jacobian and the residual at the current time and values.

Only called if the jacFormation method is set to analytical

Parameters

  t | Time (input)
  delta_t | The current value of the time step (input)
  cj | Coefficient of yprime used in the evaluation of the Jacobian
  y | Solution vector (input, do not modify)
  ydot | Rate of change of solution vector. (input, do not modify)
  jacobianColPts | Pointer to the vector of pts to columns of the DenseMatrix object to be calculated (output)
  resid | Value of the residual that is computed (output)

Returns
  a flag to indicate that operation is successful. 1 Means a successful operation -0 or neg value Means an unsuccessful operation

Definition at line 145 of file ResidJacEval.cpp.

Referenced by ResidJacEval::evalJacobian(), and ida_jacobian().

## Member Data Documentation

## ◆ m_atol

doublereal m_atol
| protected

constant value of atol

Definition at line 298 of file ResidJacEval.h.

Referenced by ResidJacEval::calcDeltaSolnVariables(), and ResidJacEval::setAtol().

## ◆ neq_

int neq_
| protected

Number of equations.

Definition at line 301 of file ResidJacEval.h.

Referenced by ResidJacEval::calcDeltaSolnVariables(), ResidJacEval::calcSolnScales(), ResidJacEval::getInitialConditions(), and ResidJacEval::nEquations().

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

- ResidJacEval.h
- ResidJacEval.cpp