Skip to content

Commit

Permalink
more references
Browse files Browse the repository at this point in the history
  • Loading branch information
ArnoStrouwen committed Aug 21, 2024
1 parent 6a6d7a0 commit db42e85
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 26 deletions.
36 changes: 27 additions & 9 deletions lib/OrdinaryDiffEqExponentialRK/src/algorithms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,15 @@ end

const ETD1 = NorsettEuler # alias


REF2 = """
Hochbruck, M., & Ostermann, A. (2010). Exponential integrators. Acta Numerica, 19, 209-286. (https://doi.org/10.1017/S0962492910000048)
"""


for (Alg, Description, Ref) in [
(:Exprb32, "3rd order adaptive Exponential-Rosenbrock scheme.", "ref TBD"),
(:Exprb43, "4th order adaptive Exponential-Rosenbrock scheme.", "ref TBD")]
(:Exprb32, "3rd order adaptive Exponential-Rosenbrock scheme.", REF2),
(:Exprb43, "4th order adaptive Exponential-Rosenbrock scheme.", REF2)]
@eval begin @doc generic_solver_docstring($Description,
$(string(Alg)),
"Semilinear ODE solver",
Expand Down Expand Up @@ -79,14 +85,26 @@ for (Alg, Description, Ref) in [
iop)
end
end

REF3 = """
Hochbruck, M., Lubich, C., & Selhofer, H. (1998). Exponential integrators for large systems of differential equations. SIAM Journal on Scientific Computing, 19(5), 1552-1574. (https://doi.org/10.1137/S1064827595295337)
"""

REF4 = """
Rainwater, G., & Tokman, M. (2016). A new approach to constructing efficient stiffly accurate EPIRK methods. Journal of Computational Physics, 323, 283-309. (https://doi.org/10.1016/j.jcp.2016.07.026)
"""
REF5 = """
Tokman, M., Loffeld, J., & Tranquilli, P. (2012). New Adaptive Exponential Propagation Iterative Methods of Runge--Kutta Type. SIAM Journal on Scientific Computing, 34(5), A2650-A2669. (https://doi.org/10.1137/110849961)
"""

for (Alg, Description, Ref) in [
(:Exp4, "4th order EPIRK scheme.", "REF TBD")
(:EPIRK4s3A, "4th order EPIRK scheme with stiff order 4.", "REF TBD")
(:EPIRK4s3B, "4th order EPIRK scheme with stiff order 4.", "REF TBD")
(:EPIRK5s3, "5th order “horizontal” EPIRK scheme with stiff order 5. Broken.", "REF TBD")
(:EXPRB53s3, "5th order EPIRK scheme with stiff order 5.", "REF TBD")
(:EPIRK5P1, "5th order EPIRK scheme", "REF TBD")
(:EPIRK5P2, "5th order EPIRK scheme", "REF TBD")
(:Exp4, "4th order EPIRK scheme.", REF3)
(:EPIRK4s3A, "4th order EPIRK scheme with stiff order 4.", REF4)
(:EPIRK4s3B, "4th order EPIRK scheme with stiff order 4.", REF4)
(:EPIRK5s3, "5th order “horizontal” EPIRK scheme with stiff order 5. Broken.", REF4)
(:EXPRB53s3, "5th order EPIRK scheme with stiff order 5.", REF4)
(:EPIRK5P1, "5th order EPIRK scheme", REF5)
(:EPIRK5P2, "5th order EPIRK scheme", REF5)
]
@eval begin
@doc generic_solver_docstring($Description,
Expand Down
8 changes: 8 additions & 0 deletions lib/OrdinaryDiffEqIMEXMultistep/src/algorithms.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# IMEX Multistep methods

@doc generic_solver_docstring("Description TBD",
"CNAB2",
"IMEX Multistep method.",
"REF TBD", "", "")
struct CNAB2{CS, AD, F, F2, P, FDT, ST, CJ} <:
OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ}
linsolve::F
Expand All @@ -21,6 +25,10 @@ function CNAB2(; chunk_size = Val{0}(), autodiff = Val{true}(), standardtag = Va
extrapolant)
end

@doc generic_solver_docstring("TBD",
"CNLF2",
"IMEX Multistep method.",
"REF TBD", "", "")
struct CNLF2{CS, AD, F, F2, P, FDT, ST, CJ} <:
OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ}
linsolve::F
Expand Down
105 changes: 88 additions & 17 deletions lib/OrdinaryDiffEqLinear/src/algorithms.jl
Original file line number Diff line number Diff line change
@@ -1,30 +1,97 @@
# Linear Methods
REF1 = """
@article{celledoni2014introduction,
title={An introduction to Lie group integrators--basics, new developments and applications},
author={Celledoni, Elena and Marthinsen, H{\aa}kon and Owren, Brynjulf},
journal={Journal of Computational Physics},
volume={257},
pages={1040--1061},
year={2014},
publisher={Elsevier}
}
"""
REF2 = """
@article{crouch1993numerical,
title={Numerical integration of ordinary differential equations on manifolds},
author={Crouch, Peter E and Grossman, R},
journal={Journal of Nonlinear Science},
volume={3},
pages={1--33},
year={1993},
publisher={Springer}
}
"""
REF3 = """
@article{blanes2000improved,
title={Improved high order integrators based on the Magnus expansion},
author={Blanes, Sergio and Casas, Fernando and Ros, Javier},
journal={BIT Numerical Mathematics},
volume={40},
number={3},
pages={434--450},
year={2000},
publisher={Springer}
}
"""
REF4 = """
@article{blanes2009magnus,
title={The Magnus expansion and some of its applications},
author={Blanes, Sergio and Casas, Fernando and Oteo, Jose-Angel and Ros, Jos{\'e}},
journal={Physics reports},
volume={470},
number={5-6},
pages={151--238},
year={2009},
publisher={Elsevier}
}
"""
REF5 = """
@article{hairer2011solving,
title={Solving differential equations on manifolds},
author={Hairer, Ernst},
journal={Lecture notes},
year={2011}
}
"""
REF6 = """
@article{jackiewicz2000construction,
title={Construction of Runge--Kutta methods of Crouch--Grossman type of high order},
author={Jackiewicz, Zdzislaw and Marthinsen, Arne and Owren, Brynjulf},
journal={Advances in Computational Mathematics},
volume={13},
pages={405--415},
year={2000},
publisher={Springer}
}
"""

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")]
(:LieEuler, "description", REF1),
(:MagnusGauss4, "Fourth order Magnus method approximated using a two stage Gauss quadrature.", REF5),
(:MagnusNC6, "Sixth order Magnus method approximated using Newton-Cotes quadrature.", REF3),
(:MagnusGL6, "Sixth order Magnus method approximated using Gauss-Legendre quadrature.", REF3),
(:MagnusGL8, "Eighth order Magnus method approximated using Newton-Cotes quadrature.", REF3),
(:MagnusNC8, "Eighth order Magnus method approximated using Gauss-Legendre quadrature.", REF3),
(:MagnusGL4, "Fourth order Magnus method approximated using Gauss-Legendre quadrature.", REF4),
(:RKMK2, "Second order Runge–Kutta–Munthe-Kaas method.", REF1),
(:RKMK4, "Fourth order Runge–Kutta–Munthe-Kaas method.", REF1),
(:LieRK4, "Fourth order Lie Runge-Kutta method.", REF1),
(:CG2, "Second order Crouch–Grossman method.", REF1),
(:CG3, "Third order Crouch-Grossman method.", REF2),
(:CG4a, " Fourth order Crouch-Grossman method.", REF6)]
@eval begin
@doc generic_solver_docstring($Description,
$(string(Alg)),
"Semilinear ODE solver",
$Ref,
"""
- `krylov`: TBD
- `m`: TBD
- `iop`: TBD
- `krylov`: Determines whether Krylov approximation or operator caching is used, the latter only available for semilinear problems.
`krylov=true` is much faster for larger systems and is thus recommended whenever there are >100 ODEs.
- `m`: Controls the size of Krylov subspace.
- `iop`: If not zero, determines the length of the incomplete orthogonalization procedure (IOP).
Note that if the linear operator/Jacobian is hermitian, then the Lanczos algorithm will always be used and the IOP setting is ignored.
""",
"""
krylov = false,
Expand Down Expand Up @@ -55,7 +122,11 @@ struct CayleyEuler <: OrdinaryDiffEqAlgorithm end
@doc generic_solver_docstring("Exact solution formula for linear, time-independent problems.",
"LinearExponential",
"Semilinear ODE solver",
"ref TBD",
"@book{strogatz2018nonlinear,
title={Nonlinear dynamics and chaos: with applications to physics, biology, chemistry, and engineering},
author={Strogatz, Steven H},
year={2018},
publisher={CRC press}}",
"""
- `krylov`:
- `:off`: cache the operator beforehand. Requires Matrix(A) method defined for the operator A.
Expand Down

0 comments on commit db42e85

Please sign in to comment.