Introduction
FATODE is a FORTRAN library for the integration of ordinary differential equations with direct and adjoint sensitivity analysis capabilities. FATODE implements four families of methods -- explicit Runge-Kutta for nonstiff problems and fully implicit Runge-Kutta, singly diagonally implicit Runge-Kutta, and Rosenbrock for stiff problems. Each family contains several methods with different orders of accuracy; users can add new methods by simply providing their coefficients. For each family the forward, adjoint, and tangent linear models are implemented. General purpose solvers for dense and sparse linear algebra are used; users can easily incorporate problem-tailored linear algebra routines. To the best of our knowledge FATODE is the first publicly available general purpose package that offers forward and adjoint sensitivity analysis capabilities in the context of Runge Kutta methods. A wide range of applications are expected to benefit from its use; examples include parameter estimation, data assimilation, optimal control, and uncertainty quantification.
Sponsor:
Features
- Time stepping methods with good stability properties implemented in FATODE. (ERK, FIRK, SDIRK and ROS stand for Explicit Runge-Kutta, Fully Implicit Runge-Kutta, Singly Diagonally Implicit Runge-Kutta and Rosenbrock, respectively.)
- The capabilities to solve general ODEs (both stiff and nostiff problems) and to perform direct and adjoint discrete sensitivity analysis.
- Standalone extendable linear solvers for both full and sparse matrices.
- Provide fine controls over step size, order of accuracy, termination criteria for Newton iterations and so on.
Family | Method | Stages | Order | Stability properties |
---|---|---|---|---|
ERK | RK2(3) | 3 | 2 | conditionally stable |
RK3(2) | 4 | 3 | conditionally stable | |
RK4(3) | 5 | 4 | conditionally stable | |
DOPRI-5 | 7 | 5 | conditionally stable | |
Verner | 8 | 6 | conditionally stable | |
DOPRI-853 | 12 | 8 | conditionally stable | |
FIRK | Radau-1A | 3 | 5 | L-stable |
Radau-2A | 3 | 5 | L-stable, stiffly-accuate | |
Lobatto-3C | 3 | 4 | L-stable, stiffly-accuate | |
Gauss | 3 | 6 | weakly L-stable | |
SDIRK | Sdirk-2a | 2 | 2 | L-stable, stiffly-accuate |
Sdirk-2b | 2 | 2 | L-stable, stiffly-accuate | |
Sdirk-3a | 3 | 2 | L-stable, stiffly-accuate | |
Sdirk-4a | 5 | 4 | L-stable, stiffly-accuate | |
Sdirk-4b | 5 | 4 | L-stable, stiffly-accuate | |
ROS | Ros-2 | 2 | 2 | L-stable |
Ros-3 | 3 | 3 | L-stable, stiffly-accuate | |
Rodas-3 | 4 | 3 | L-stable, stiffly-accuate | |
Ros-4 | 4 | 4 | L-stable | |
Rodas-4 | 6 | 4 | L-stable, stiffly-accuate |