diff --git a/docs/src/semilinear/Linear.md b/docs/src/semilinear/Linear.md index fe14d1ffda..b9fbd87954 100644 --- a/docs/src/semilinear/Linear.md +++ b/docs/src/semilinear/Linear.md @@ -9,23 +9,40 @@ first_steps("OrdinaryDiffEqLinear", "LieRK4") ## Full list of solvers +### Time and State-Independent Solvers + +```@docs +LinearExponential +``` + +### Time-Dependent and State-Independent Solvers + ```@docs MagnusMidpoint MagnusLeapfrog -LieEuler MagnusGauss4 MagnusNC6 MagnusGL6 MagnusGL8 MagnusNC8 MagnusGL4 +``` + +### State-Dependent Solvers + +```@docs +LieEuler RKMK2 RKMK4 LieRK4 CG2 -CG3 CG4a MagnusAdapt4 CayleyEuler -LinearExponential ``` + +### Time and State-Dependent Operators + +```@docs +CG3 +``` \ No newline at end of file diff --git a/lib/OrdinaryDiffEqLinear/src/algorithms.jl b/lib/OrdinaryDiffEqLinear/src/algorithms.jl index 3cdbc22fea..1f213c97ee 100644 --- a/lib/OrdinaryDiffEqLinear/src/algorithms.jl +++ b/lib/OrdinaryDiffEqLinear/src/algorithms.jl @@ -1,27 +1,26 @@ # Linear Methods -for Alg in [ - :MagnusMidpoint, - :MagnusLeapfrog, - :LieEuler, - :MagnusGauss4, - :MagnusNC6, - :MagnusGL6, - :MagnusGL8, - :MagnusNC8, - :MagnusGL4, - :RKMK2, - :RKMK4, - :LieRK4, - :CG2, - :CG3, - :CG4a -] +for (Alg, Description, Ref) in [ + (:MagnusMidpoint, "Second order Magnus Midpoint method.", "ref TBD"), + (:MagnusLeapfrog, "Second order Magnus Leapfrog method.", "ref TBD"), + (:LieEuler, "description", "ref TBD"), + (:MagnusGauss4, "Fourth order Magnus method approximated using a two stage Gauss quadrature.", "ref TBD"), + (:MagnusNC6, "Sixth order Magnus method approximated using Newton-Cotes quadrature.", "ref TBD"), + (:MagnusGL6, "Sixth order Magnus method approximated using Gauss-Legendre quadrature.", "ref TBD"), + (:MagnusGL8, "Eighth order Magnus method approximated using Newton-Cotes quadrature.", "ref TBD"), + (:MagnusNC8, "Eighth order Magnus method approximated using Gauss-Legendre quadrature.", "ref TBD"), + (:MagnusGL4, "Fourth order Magnus method approximated using Gauss-Legendre quadrature.", "ref TBD"), + (:RKMK2, "Second order Runge–Kutta–Munthe-Kaas method.", "ref TBD"), + (:RKMK4, "Fourth order Runge–Kutta–Munthe-Kaas method.", "ref TBD"), + (:LieRK4, "Fourth order Lie Runge-Kutta method.", "ref TBD"), + (:CG2, "Second order Crouch–Grossman method.", "ref TBD"), + (:CG3, "Third order Crouch-Grossman method.", "ref TBD"), + (:CG4a, " Fourth order Crouch-Grossman method.", "ref TBD")] @eval begin - @doc generic_solver_docstring("description TBD", + @doc generic_solver_docstring($Description, $(string(Alg)), "Semilinear ODE solver", - "ref TBD", + $Ref, """ - `krylov`: TBD - `m`: TBD @@ -31,7 +30,7 @@ for Alg in [ krylov = false, m = 30, iop = 0, - """) + """) struct $Alg <: OrdinaryDiffEqLinearExponentialAlgorithm krylov::Bool m::Int @@ -41,26 +40,31 @@ for Alg in [ @eval $Alg(; krylov = false, m = 30, iop = 0) = $Alg(krylov, m, iop) end -@doc generic_solver_docstring("description TBD", +@doc generic_solver_docstring("Fourth Order Adaptive Magnus method.", "MagnusAdapt4", "Semilinear ODE solver", "ref TBD", "", "") struct MagnusAdapt4 <: OrdinaryDiffEqAdaptiveAlgorithm end -@doc generic_solver_docstring("description TBD", +@doc generic_solver_docstring("First order method using Cayley transformations.", "CayleyEuler", "Semilinear ODE solver", "ref TBD", "", "") struct CayleyEuler <: OrdinaryDiffEqAlgorithm end -@doc generic_solver_docstring("description TBD", +@doc generic_solver_docstring("Exact solution formula for linear, time-independent problems.", "LinearExponential", "Semilinear ODE solver", "ref TBD", """ - - `krylov`: TBD - - `m`: TBD - - `iop`: TBD + - `krylov`: + - `:off`: cache the operator beforehand. Requires Matrix(A) method defined for the operator A. + - `:simple`: uses simple Krylov approximations with fixed subspace size m. + - `:adaptive`: uses adaptive Krylov approximations with internal timestepping. + - `m`: Controls the size of Krylov subspace if `krylov=:simple`, and the initial subspace size if `krylov=:adaptive`. + - `iop`: If not zero, determines the length of the incomplete orthogonalization procedure + Note that if the linear operator/Jacobian is hermitian, + then the Lanczos algorithm will always be used and the IOP setting is ignored. """, """ krylov = :off,