The changelog of Sundials 4.0.0 states:
"With the introduction of SUNNonlinSol modules, the input parameter iter
to CVodeCreate has been removed along with the function CVodeSetIterType
and the constants CV_NEWTON and CV_FUNCTIONAL.
Similarly, the ITMETH parameter has been removed from the Fortran interface
function FCVMALLOC. Instead of specifying the nonlinear iteration type
when creating the CVODE(S) memory structure, CVODE(S) uses
the SUNNONLINSOL_NEWTON module implementation of a Newton iteration by default."
so the appropreate conditional changes are added to control
the code execution via CT_SUNDIALS_VERSION preprocessor variable
to omit the parameters of Sundials solver that are no longer required.
* differentiated Valve::setValveCoeff from PressureController::setPressureCoeff
and introduced MassFlowController::setMassFlowCoeff for consistency.
* introduced FlowDevice::setTimeFunction and FlowDevice::setPressureFunction to
differentiate time-dependent and pressure-dependent functions.
* introduced arbitrary pressure dependence for PressureController
* deprecated FlowDevice::setFunction which is replaced by time and pressure
specific functions.
* introduced properties Valve.valve_coeff / PressureController.pressure_coeff /
MassFlowController.mass_flow_coeff in Cython interface and deprecated
Valve.set_pressure_coeff / PressureController.set_pressure_coeff
* deprecated corresponding function calls in clib interface
* deprecate FlowDevice.setParameters (which was only used by MATLAB interface)
* add deprecation warning for int ReactorBase::type() (to be changed after Cantera 2.5)
* introduce temporary std::string ReactorBase::typeStr() (to be renamed after Cantera 2.5)
* deprecate all functions using the old call and introduce associated temporary functions
A user-defined mass flow rate function can modify the ThermoPhase object used by
a reactor, for example if it depends on calculating some property of a different
reactor. To make sure that the reactor governing equations are evaluated
correctly, the ThermoPhase state needs to be set after all user-defined
functions have been called.
This algorithm is more robust than the simple Newton's method that it
replaces. Among its advantages is that it works with PureFluidPhase models.
Resolves#257
This separates the handling of interactions between reactors (mediated by
Wall objects) and surfaces on which surface reactions occur (handled by
ReactorSurface). This simplifies the implementation within reactor, and
reduces the complexity of user code involving surface reactions by
eliminating the need to set up a Reservoir object for the opposite side
of a Wall object that is only being used for surface reactions.
Passing the full parameter vector to evalEqs for each reactor and wall
eliminates the need to re-order the parameter vector. Instead, each reactor and
wall just needs to know the indices of its sensitivity parameters, which are now
returned by ReactorNet::registerSensitivityReaction.
This causes problems to be caught early, where they can at least sometimes be
handled as recoverable intergrator errors, rather than letting NaN values
propagate through the solution.