@@ -79,6 +79,9 @@ function SDIRK_docstring(
7979 )
8080end
8181
82+ abstract type OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm{CS, AD, FDT, ST, CJ} < :
83+ OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} end
84+
8285@doc SDIRK_docstring (
8386 " A 1st order implicit solver. A-B-L-stable. Adaptive timestepping through a divided differences estimate. Strong-stability preserving (SSP). Good for highly stiff equations." ,
8487 " ImplicitEuler" ;
486489 """
487490)
488491struct Kvaerno3{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} < :
489- OrdinaryDiffEqNewtonAdaptiveAlgorithm {CS, AD, FDT, ST, CJ}
492+ OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm {CS, AD, FDT, ST, CJ}
490493 linsolve:: F
491494 nlsolve:: F2
492495 precs:: P
538541 """
539542)
540543struct KenCarp3{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} < :
541- OrdinaryDiffEqNewtonAdaptiveAlgorithm {CS, AD, FDT, ST, CJ}
544+ OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm {CS, AD, FDT, ST, CJ}
542545 linsolve:: F
543546 nlsolve:: F2
544547 precs:: P
@@ -1045,7 +1048,7 @@ end
10451048 """
10461049)
10471050struct Kvaerno4{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} < :
1048- OrdinaryDiffEqNewtonAdaptiveAlgorithm {CS, AD, FDT, ST, CJ}
1051+ OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm {CS, AD, FDT, ST, CJ}
10491052 linsolve:: F
10501053 nlsolve:: F2
10511054 precs:: P
@@ -1101,7 +1104,7 @@ end
11011104 """
11021105)
11031106struct Kvaerno5{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} < :
1104- OrdinaryDiffEqNewtonAdaptiveAlgorithm {CS, AD, FDT, ST, CJ}
1107+ OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm {CS, AD, FDT, ST, CJ}
11051108 linsolve:: F
11061109 nlsolve:: F2
11071110 precs:: P
@@ -1153,7 +1156,7 @@ end
11531156 """
11541157)
11551158struct KenCarp4{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} < :
1156- OrdinaryDiffEqNewtonAdaptiveAlgorithm {CS, AD, FDT, ST, CJ}
1159+ OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm {CS, AD, FDT, ST, CJ}
11571160 linsolve:: F
11581161 nlsolve:: F2
11591162 precs:: P
@@ -1207,14 +1210,15 @@ end
12071210 controller = :PI,
12081211 """
12091212)
1210- struct KenCarp47{CS, AD, F, F2, P, FDT, ST, CJ} < :
1211- OrdinaryDiffEqNewtonAdaptiveAlgorithm {CS, AD, FDT, ST, CJ}
1213+ struct KenCarp47{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter } < :
1214+ OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm {CS, AD, FDT, ST, CJ}
12121215 linsolve:: F
12131216 nlsolve:: F2
12141217 precs:: P
12151218 smooth_est:: Bool
12161219 extrapolant:: Symbol
12171220 controller:: Symbol
1221+ step_limiter!:: StepLimiter
12181222 autodiff:: AD
12191223end
12201224function KenCarp47 (;
@@ -1223,17 +1227,17 @@ function KenCarp47(;
12231227 diff_type = Val {:forward} (),
12241228 linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (),
12251229 smooth_est = true , extrapolant = :linear ,
1226- controller = :PI
1230+ controller = :PI , step_limiter! = trivial_limiter!
12271231 )
12281232 AD_choice, chunk_size, diff_type = _process_AD_choice (autodiff, chunk_size, diff_type)
12291233
12301234 return KenCarp47{
12311235 _unwrap_val (chunk_size), typeof (AD_choice), typeof (linsolve),
12321236 typeof (nlsolve), typeof (precs), diff_type, _unwrap_val (standardtag),
1233- _unwrap_val (concrete_jac),
1237+ _unwrap_val (concrete_jac), typeof (step_limiter!),
12341238 }(
12351239 linsolve, nlsolve, precs, smooth_est, extrapolant,
1236- controller, AD_choice
1240+ controller, step_limiter!, AD_choice
12371241 )
12381242end
12391243
@@ -1259,7 +1263,7 @@ end
12591263 """
12601264)
12611265struct KenCarp5{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} < :
1262- OrdinaryDiffEqNewtonAdaptiveAlgorithm {CS, AD, FDT, ST, CJ}
1266+ OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm {CS, AD, FDT, ST, CJ}
12631267 linsolve:: F
12641268 nlsolve:: F2
12651269 precs:: P
@@ -1311,14 +1315,15 @@ end
13111315 controller = :PI,
13121316 """
13131317)
1314- struct KenCarp58{CS, AD, F, F2, P, FDT, ST, CJ} < :
1315- OrdinaryDiffEqNewtonAdaptiveAlgorithm {CS, AD, FDT, ST, CJ}
1318+ struct KenCarp58{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter } < :
1319+ OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm {CS, AD, FDT, ST, CJ}
13161320 linsolve:: F
13171321 nlsolve:: F2
13181322 precs:: P
13191323 smooth_est:: Bool
13201324 extrapolant:: Symbol
13211325 controller:: Symbol
1326+ step_limiter!:: StepLimiter
13221327 autodiff:: AD
13231328end
13241329function KenCarp58 (;
@@ -1327,17 +1332,17 @@ function KenCarp58(;
13271332 diff_type = Val {:forward} (),
13281333 linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (),
13291334 smooth_est = true , extrapolant = :linear ,
1330- controller = :PI
1335+ controller = :PI , step_limiter! = trivial_limiter!
13311336 )
13321337 AD_choice, chunk_size, diff_type = _process_AD_choice (autodiff, chunk_size, diff_type)
13331338
13341339 return KenCarp58{
13351340 _unwrap_val (chunk_size), typeof (AD_choice), typeof (linsolve),
13361341 typeof (nlsolve), typeof (precs), diff_type, _unwrap_val (standardtag),
1337- _unwrap_val (concrete_jac),
1342+ _unwrap_val (concrete_jac), typeof (step_limiter!),
13381343 }(
13391344 linsolve, nlsolve, precs, smooth_est, extrapolant,
1340- controller, AD_choice
1345+ controller, step_limiter!, AD_choice
13411346 )
13421347end
13431348
@@ -1594,9 +1599,6 @@ function ESDIRK659L2SA(;
15941599 )
15951600end
15961601
1597- abstract type OrdinaryDiffEqNewtonAdaptiveIMEXAlgorithm{CS, AD, FDT, ST, CJ} < :
1598- OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} end
1599-
16001602@doc SDIRK_docstring (
16011603 " 3rd order L-stable IMEX ARK method. Uses a generic tableau-driven implementation that supports both split and non-split forms." ,
16021604 " ARS343" ;
0 commit comments