Cantera 2.6.0

Classes | Namespaces | Typedefs | Functions
IDA_Solver.cpp File Reference
`#include "cantera/numerics/IDA_Solver.h"`
`#include "cantera/base/stringUtils.h"`
`#include "sundials/sundials_types.h"`
`#include "sundials/sundials_math.h"`
`#include "ida/ida.h"`
`#include "ida/ida_dense.h"`
`#include "ida/ida_spgmr.h"`
`#include "ida/ida_band.h"`
`#include "nvector/nvector_serial.h"`
Include dependency graph for IDA_Solver.cpp:

Go to the source code of this file.

## Classes
class | ResidData
| A simple class to hold an array of parameter values and a pointer to an instance of a subclass of ResidEval. More...

## Namespaces
namespace | Cantera
| Namespace for the Cantera kernel.

## Typedefs
typedef int | sd_size_t

## Functions
static int | ida_resid (realtype t, N_Vector y, N_Vector ydot, N_Vector r, void *f_data)
| Function called by IDA to evaluate the residual, given y and ydot. More...
static int | ida_jacobian (sd_size_t nrows, realtype t, realtype c_j, N_Vector y, N_Vector ydot, N_Vector r, DlsMat Jac, void *f_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)
| Function called by by IDA to evaluate the Jacobian, given y and ydot. More...

## Typedef Documentation

## ◆ sd_size_t

typedef int sd_size_t

Definition at line 33 of file IDA_Solver.cpp.

## Function Documentation

## ◆ ida_resid()

static int ida_resid | ( | realtype | t,
|  | N_Vector | y,
|  | N_Vector | ydot,
|  | N_Vector | r,
|  | void * | f_data
| ) |  |
| static

Function called by IDA to evaluate the residual, given y and ydot.

IDA allows passing in a void* pointer to access external data. Instead of requiring the user to provide a residual function directly to IDA (which would require using the sundials data types N_Vector, etc.), we define this function as the single function that IDA always calls. The real evaluation of the residual is done by an instance of a subclass of ResidEval, passed in to this function as a pointer in the parameters.

FROM IDA WRITEUP -> What the IDA solver expects as a return flag from its residual routines:

A IDAResFn res should return a value of 0 if successful, a positive value if a recoverable error occurred (for example, yy has an illegal value), or a negative value if a nonrecoverable error occurred. In the latter case, the program halts. If a recoverable error occurred, the integrator will attempt to correct and retry.

Definition at line 78 of file IDA_Solver.cpp.

References ResidJacEval::evalResidNJ(), and IDA_Solver::getCurrentStepFromIDA().

## ◆ ida_jacobian()

static int ida_jacobian | ( | sd_size_t | nrows,
|  | realtype | t,
|  | realtype | c_j,
|  | N_Vector | y,
|  | N_Vector | ydot,
|  | N_Vector | r,
|  | DlsMat | Jac,
|  | void * | f_data,
|  | N_Vector | tmp1,
|  | N_Vector | tmp2,
|  | N_Vector | tmp3
| ) |  |
| static

Function called by by IDA to evaluate the Jacobian, given y and ydot.

typedef int (*IDADlsDenseJacFn)(sd_size_t N, realtype t, realtype c_j, N_Vector y, N_Vector yp, N_Vector r, DlsMat Jac, void *user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3);

A IDADlsDenseJacFn should return

- 0 if successful,
- a positive int if a recoverable error occurred, or
- a negative int if a nonrecoverable error occurred.

In the case of a recoverable error return, the integrator will attempt to recover by reducing the stepsize (which changes cj).

Definition at line 132 of file IDA_Solver.cpp.

References ResidJacEval::evalJacobianDP(), and IDA_Solver::getCurrentStepFromIDA().

Referenced by IDA_Solver::setJacobianType().