Skip to content

Commit

Permalink
Merge pull request #752 from ErikQQY/qqy/firk_docs
Browse files Browse the repository at this point in the history
Add FIRK docs
  • Loading branch information
ChrisRackauckas authored Sep 6, 2024
2 parents ab8e9d7 + 486c013 commit f82cf04
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion docs/src/solvers/bvp_solve.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# BVP Solvers

`solve(prob::BVProblem,alg,dt=0.0;kwargs)`

Solves the BVP defined by `prob` using the algorithm `alg`. All algorithms except `Shooting` methods should specify a `dt` which is the step size for the discretized mesh.

## Recommended Methods

The `MIRK` methods are recommended in most scenarios given their improved stability properties over the other methods. They have adaptivty and sparsity handling which allows for them to handle large-scale and difficult problems. However, they are not compatible with callbacks / event handling (i.e. discontinuities), and in such cases [Shooting methods](https://en.wikipedia.org/wiki/Shooting_method) are required. There are single shooting methods and multiple shooting methods available in BoundaryValueDiffEq.jl. Shooting methods should be used with an appropriate ODE solver such as `Shooting(Tsit5())` or `MultipleShooting(5, FBDF())`. Additionally,
Expand All @@ -14,7 +18,7 @@ in many cases, single shooting method `Shooting` may be faster than collocation
- `Shooting(odealg())` - A wrapper over initial value problem solvers, it reduces BVP to an initial value problem and solves the IVP.
- `MultipleShooting(N, odealg())` - A wrapper over initial value problem solvers, it reduces BVP to `N` initial value problems and solves these IVPs. Multiple Shooting usually maintains more numerical stability than Single Shooting.

#### MIRK Collocation Methods
#### MIRK(Monotonic Implicit Runge-Kutta) Methods

All `MIRK` methods have defect control adaptivity by default which adapts the mesh (`dt`) automatically. This can be turned
off via the keyword argument `adaptive = false`.
Expand All @@ -25,9 +29,33 @@ off via the keyword argument `adaptive = false`.
- `MIRK5` - A 5th order collocation method using an implicit Runge-Kutta tableau with a sparse Jacobian.
- `MIRK6` - A 6th order collocation method using an implicit Runge-Kutta tableau with a sparse Jacobian.

#### FIRK(Fully Implicit Runge-Kutta) methods

Similar to `MIRK` methods, fully implicit Runge-Kutta methods construct nonlinear problems from the collocation equations of a BVP and solve such nonlinear systems to obtain numerical solutions of BVP. When solving large boundary value problems, choose a nested NonlinearSolve.jl solver by setting `nested_nlsolve=true` in FIRK solvers can achieve better performance.

- `LobattoIIIa2` - A 2nd stage LobattoIIIa collocation method.

- `LobattoIIIa3` - A 3rd stage LobattoIIIa collocation method.
- `LobattoIIIa4` - A 4th stage LobattoIIIa collocation method.
- `LobattoIIIa5` - A 5th stage LobattoIIIa collocation method.
- `LobattoIIIb2` - A 2nd stage LobattoIIIa collocation method, doesn't support defect control adaptivity.
- `LobattoIIIb3` - A 3rd stage LobattoIIIa collocation method.
- `LobattoIIIb4` - A 4th stage LobattoIIIa collocation method.
- `LobattoIIIb5` - A 5th stage LobattoIIIa collocation method.
- `LobattoIIIc2` - A 2nd stage LobattoIIIa collocation method, doesn't support defect control adaptivity.
- `LobattoIIIc3` - A 3rd stage LobattoIIIa collocation method.
- `LobattoIIIc4` - A 4th stage LobattoIIIa collocation method.
- `LobattoIIIc5` - A 5th stage LobattoIIIa collocation method.
- `RadauIIa1` - A 1st stage Radau collocation method, doesn't support defect control adaptivity.
- `RadauIIa2` - A 2nd stage Radau collocation method.
- `RadauIIa3` - A 3rd stage Radau collocation method.
- `RadauIIa5` - A 5th stage Radau collocation method.
- `RadauIIa7` - A 7th stage Radau collocation method.

### ODEInterface.jl

ODEInterface.jl can be used seamlessly with BoundaryValueDiffEq.jl, after we define our model using `BVProblem` or `TwoPointBVProblem`, we can directly call the solvers from ODEInterface.jl.

- `BVPM2` - FORTRAN code for solving two-point boundary value problems. `BVPM2` is only compatible with `TwoPointBVProblem`.
- `BVPSOL` - FORTRAN77 code which solves highly nonlinear two point boundary value problems using a local linear solver (condensing algorithm) or a global sparse linear solver for the solution of the arising linear subproblems, by Peter Deuflhard, Georg Bader, Lutz Weimann. `BVPSOL` should be used with `TwoPointBVProblem` and initial guess.
- `COLNEW` - A Fortran77 code solves a multi-points boundary value problems for a mixed order system of ODEs by Uri Ascher and Georg Bader. It incorporates a new basis representation replacing b-splines, and improvements for the linear and nonlinear algebraic equation solvers. `COLNEW` support `TwoPointBVProblem` by default. To solve multi-points BVP using `COLNEW`, special form of multi-points boundary conditions should be provided by `COLNEW(bc_func, dbc_func, zeta)` where `bc_func(i, z, res)` is the multi-points boundary conditions, `dbc_func(i, z, dbc)` is the i-th row of jacobian of boundary conditions.

0 comments on commit f82cf04

Please sign in to comment.