This class provides a connection to the Sundials (https://computation.llnl.gov/casc/sundials/main.html) solver CVode.

CVode is a variable-order, variable-step multi-step algorithm for solving ordinary differential equations of the form,

\[\dot{y} = f(t,y), \quad y(t_0) = y_0.\]

CVode includes the Backward Differentiation Formulas (BDFs) which are suitable for stiff problems and also the Adams-Moulton formulas for non-stiff systems.

- State events (root funtions) : True
- Step events (completed step) : True
- Time events : True

Import the solver together with the correct problem:

```
from assimulo.solvers import CVode
from assimulo.problem import Explicit_Problem
```

Define the problem, such as:

```
def rhs(t, y): #Note that y are a 1-D numpy array.
yd = -1.0
return N.array([yd]) #Note that the return must be numpy array, NOT a scalar.
y0 = [1.0]
t0 = 1.0
```

Create a problem instance:

```
mod = Explicit_Problem(rhs, y0, t0)
```

Note

For complex problems, it is recommended to check the available examples and the documentation in the problem class, `Explicit_Problem`

. It is also recommended to define your problem as a subclass of `Explicit_Problem`

.

Warning

When subclassing from a problem class, the function for calculating the right-hand-side (for ODEs) must be named *rhs* and in the case with a residual function (for DAEs) it must be named *res*.

Create a solver instance:

```
sim = CVode(mod)
```

Modify (optionally) the solver parameters.

Parameters:

`atol`

Defines the absolute tolerance(s) that is to be used by the solver.`backward`

Specifies if the simulation is done in reverse time.`clock_step`

Specifies if the elapsed time of an integrator step should be timed or not.`discr`

This determines the discretization method.`display_progress`

This option actives output during the integration in terms of that the current integration is periodically printed to the stdout.`dqrhomax`

Specifies the selection parameters used in deciding switching between a simultaneous or separate approximation of the two terms in the sensitivity residual.`dqtype`

Specifies the difference quotient type in the sensitivity calculations.`external_event_detection`

A Boolean flag which indicates if Assimulos event finding algorithm or CVode’s is used to localize events.`inith`

This determines the initial step-size to be used in the integration.`iter`

This determines the iteration method that is be used by the solver.`linear_solver`

Specifies the linear solver to be used.`maxcor`

This detmines the maximum number of nonlinear iterations.`maxcorS`

This detmines the maximum number of nonlinear iterations for the sensitivity variables.`maxh`

Defines the maximal step-size that is to be used by the solver.`maxkrylov`

Specifies the maximum number of dimensions for the krylov subspace to be used.`maxncf`

This determines the maximum number of convergence failures allowed by the solver (in each step).`maxnef`

This determines the maximum number of error test failures allowed by the solver (in each step).`maxord`

This determines the maximal order that is be used by the solver.`maxsteps`

Determines the maximum number of steps the solver is allowed to take to finish the simulation.`minh`

Defines the minimal step-size that is to be used by the solver.`norm`

This determines the norm that is used by the solver when determining errors.`num_threads`

This options specifies the number of threads to be used for those solvers that supports it.`pbar`

Specifies the order of magnitude for the parameters.`precond`

Specifies the preconditioning type.`report_continuously`

This options specifies if the solver should report the solution continuously after steps.`rtol`

Defines the relative tolerance that is to be used by the solver.`sensmethod`

Specifies the sensitivity solution method.`stablimit`

Specifies if the internal stability limit detection for BDF should be used or not.`store_event_points`

This options specifies if the solver should save additional points at the events, \(t_e^-, t_e^+\).`suppress_sens`

A Boolean flag which indicates that the error-tests are suppressed on the sensitivity variables.`time_limit`

This option can be used to limit the time of an integration.`usejac`

This sets the option to use the user defined jacobian.`usesens`

This options activates or deactivates the sensitivity calculations.`verbosity`

This determines the level of the output.

Methods:

Simulate the problem:

Information:

`CVode.get_options()`

Returns the current solver options.`CVode.get_supports()`

Returns the functionality which the solver supports.`CVode.get_statistics()`

Returns the run-time statistics (if any).`CVode.get_event_data()`

Returns the event information (if any).`CVode.print_event_data()`

Prints the event information (if any).`CVode.print_statistics()`

Prints the run-time statistics for the problem.