diff --git a/core/src/config.jl b/core/src/config.jl index 1aa849892..0ae043004 100644 --- a/core/src/config.jl +++ b/core/src/config.jl @@ -18,8 +18,8 @@ using OrdinaryDiffEqNonlinearSolve: NLNewton using OrdinaryDiffEqLowOrderRK: Euler, RK4 using OrdinaryDiffEqTsit5: Tsit5 using OrdinaryDiffEqSDIRK: ImplicitEuler, KenCarp4, TRBDF2 -using OrdinaryDiffEqBDF: QNDF -using OrdinaryDiffEqRosenbrock: Rodas5, Rosenbrock23 +using OrdinaryDiffEqBDF: FBDF, QNDF +using OrdinaryDiffEqRosenbrock: Rosenbrock23, Rodas4P, Rodas5P export Config, Solver, Results, Logging, Toml export algorithm, @@ -213,9 +213,11 @@ Map from config string to a supported algorithm type from [OrdinaryDiffEq](https Supported algorithms: - `QNDF` +- `FBDF` - `Rosenbrock23` - `TRBDF2` -- `Rodas5` +- `Rodas4P` +- `Rodas5P` - `KenCarp4` - `Tsit5` - `RK4` @@ -224,9 +226,11 @@ Supported algorithms: """ const algorithms = Dict{String, Type}( "QNDF" => QNDF, + "FBDF" => FBDF, "Rosenbrock23" => Rosenbrock23, "TRBDF2" => TRBDF2, - "Rodas5" => Rodas5, + "Rodas4P" => Rodas4P, + "Rodas5P" => Rodas5P, "KenCarp4" => KenCarp4, "Tsit5" => Tsit5, "RK4" => RK4, diff --git a/core/test/run_models_test.jl b/core/test/run_models_test.jl index 065df785b..20cc0b492 100644 --- a/core/test/run_models_test.jl +++ b/core/test/run_models_test.jl @@ -280,7 +280,7 @@ end @test sparse_fdm.integrator.u ≈ sparse_ad.integrator.u atol = 4 @test dense_fdm.integrator.u ≈ sparse_ad.integrator.u atol = 4 - config = Ribasim.Config(toml_path; solver_algorithm = "Rodas5", solver_autodiff = true) + config = Ribasim.Config(toml_path; solver_algorithm = "Rodas5P", solver_autodiff = true) time_ad = Ribasim.run(config) @test successful_retcode(time_ad) @test time_ad.integrator.u ≈ sparse_ad.integrator.u atol = 10 diff --git a/docs/reference/usage.qmd b/docs/reference/usage.qmd index 354a3afc0..50f1f63cd 100644 --- a/docs/reference/usage.qmd +++ b/docs/reference/usage.qmd @@ -21,7 +21,7 @@ If your model does not converge, or your performance is lower than expected, it The default solver `algorithm = "QNDF"`, which is a multistep method similar to Matlab's `ode15s` [@shampine1997matlab]. It is an implicit method that supports the default adaptive timestepping. -The full list of available solvers is: `QNDF`, `Rosenbrock23`, `TRBDF2`, `Rodas5`, `KenCarp4`, `Tsit5`, `RK4`, `ImplicitEuler`, `Euler`. +The full list of available solvers is: `QNDF`, `FBDF`, `Rosenbrock23`, `Rodas4P`, `Rodas5P`, `TRBDF2`, `KenCarp4`, `Tsit5`, `RK4`, `ImplicitEuler`, `Euler`. Information on the solver algorithms can be found on the [ODE solvers page](https://docs.sciml.ai/DiffEqDocs/stable/solvers/ode_solve/). By default Ribasim uses adaptive timestepping, though not all algorithms support adaptive timestepping.