Skip to content

Commit b8bdd3f

Browse files
Harsh SinghHarsh Singh
authored andcommitted
refactor(IMEX): migrate remaining ESDIRK methods to tableau-based implementation and remove per-method caches/perform_step
1 parent 2f49b48 commit b8bdd3f

4 files changed

Lines changed: 313 additions & 1435 deletions

File tree

lib/OrdinaryDiffEqSDIRK/src/algorithms.jl

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,31 +1367,34 @@ but are still being fully evaluated in context.",
13671367
controller = :PI,
13681368
"""
13691369
)
1370-
struct ESDIRK54I8L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <:
1371-
OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
1370+
struct ESDIRK54I8L2SA{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <:
1371+
OrdinaryDiffEqNewtonAdaptiveESDIRKAlgorithm{CS, AD, FDT, ST, CJ}
13721372
linsolve::F
13731373
nlsolve::F2
13741374
precs::P
1375+
smooth_est::Bool
13751376
extrapolant::Symbol
13761377
controller::Symbol
1378+
step_limiter!::StepLimiter
13771379
autodiff::AD
13781380
end
13791381
function ESDIRK54I8L2SA(;
13801382
chunk_size = Val{0}(), autodiff = AutoForwardDiff(),
13811383
standardtag = Val{true}(), concrete_jac = nothing,
13821384
diff_type = Val{:forward}(),
13831385
linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(),
1384-
extrapolant = :linear, controller = :PI
1386+
smooth_est = true, extrapolant = :linear,
1387+
controller = :PI, step_limiter! = trivial_limiter!
13851388
)
13861389
AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type)
13871390

13881391
return ESDIRK54I8L2SA{
13891392
_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve),
13901393
typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag),
1391-
_unwrap_val(concrete_jac),
1394+
_unwrap_val(concrete_jac), typeof(step_limiter!),
13921395
}(
1393-
linsolve, nlsolve, precs, extrapolant,
1394-
controller, AD_choice
1396+
linsolve, nlsolve, precs, smooth_est, extrapolant,
1397+
controller, step_limiter!, AD_choice
13951398
)
13961399
end
13971400

@@ -1417,31 +1420,34 @@ but are still being fully evaluated in context.",
14171420
controller = :PI,
14181421
"""
14191422
)
1420-
struct ESDIRK436L2SA2{CS, AD, F, F2, P, FDT, ST, CJ} <:
1421-
OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
1423+
struct ESDIRK436L2SA2{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <:
1424+
OrdinaryDiffEqNewtonAdaptiveESDIRKAlgorithm{CS, AD, FDT, ST, CJ}
14221425
linsolve::F
14231426
nlsolve::F2
14241427
precs::P
1428+
smooth_est::Bool
14251429
extrapolant::Symbol
14261430
controller::Symbol
1431+
step_limiter!::StepLimiter
14271432
autodiff::AD
14281433
end
14291434
function ESDIRK436L2SA2(;
14301435
chunk_size = Val{0}(), autodiff = AutoForwardDiff(),
14311436
standardtag = Val{true}(), concrete_jac = nothing,
14321437
diff_type = Val{:forward}(),
14331438
linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(),
1434-
extrapolant = :linear, controller = :PI
1439+
smooth_est = true, extrapolant = :linear,
1440+
controller = :PI, step_limiter! = trivial_limiter!
14351441
)
14361442
AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type)
14371443

14381444
return ESDIRK436L2SA2{
14391445
_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve),
14401446
typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag),
1441-
_unwrap_val(concrete_jac),
1447+
_unwrap_val(concrete_jac), typeof(step_limiter!),
14421448
}(
1443-
linsolve, nlsolve, precs, extrapolant,
1444-
controller, AD_choice
1449+
linsolve, nlsolve, precs, smooth_est, extrapolant,
1450+
controller, step_limiter!, AD_choice
14451451
)
14461452
end
14471453

@@ -1467,31 +1473,34 @@ but are still being fully evaluated in context.",
14671473
controller = :PI,
14681474
"""
14691475
)
1470-
struct ESDIRK437L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <:
1471-
OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
1476+
struct ESDIRK437L2SA{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <:
1477+
OrdinaryDiffEqNewtonAdaptiveESDIRKAlgorithm{CS, AD, FDT, ST, CJ}
14721478
linsolve::F
14731479
nlsolve::F2
14741480
precs::P
1481+
smooth_est::Bool
14751482
extrapolant::Symbol
14761483
controller::Symbol
1484+
step_limiter!::StepLimiter
14771485
autodiff::AD
14781486
end
14791487
function ESDIRK437L2SA(;
14801488
chunk_size = Val{0}(), autodiff = AutoForwardDiff(),
14811489
standardtag = Val{true}(), concrete_jac = nothing,
14821490
diff_type = Val{:forward}(),
14831491
linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(),
1484-
extrapolant = :linear, controller = :PI
1492+
smooth_est = true, extrapolant = :linear,
1493+
controller = :PI, step_limiter! = trivial_limiter!
14851494
)
14861495
AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type)
14871496

14881497
return ESDIRK437L2SA{
14891498
_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve),
14901499
typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag),
1491-
_unwrap_val(concrete_jac),
1500+
_unwrap_val(concrete_jac), typeof(step_limiter!),
14921501
}(
1493-
linsolve, nlsolve, precs, extrapolant,
1494-
controller, AD_choice
1502+
linsolve, nlsolve, precs, smooth_est, extrapolant,
1503+
controller, step_limiter!, AD_choice
14951504
)
14961505
end
14971506

@@ -1517,31 +1526,34 @@ but are still being fully evaluated in context.",
15171526
controller = :PI,
15181527
"""
15191528
)
1520-
struct ESDIRK547L2SA2{CS, AD, F, F2, P, FDT, ST, CJ} <:
1521-
OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
1529+
struct ESDIRK547L2SA2{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <:
1530+
OrdinaryDiffEqNewtonAdaptiveESDIRKAlgorithm{CS, AD, FDT, ST, CJ}
15221531
linsolve::F
15231532
nlsolve::F2
15241533
precs::P
1534+
smooth_est::Bool
15251535
extrapolant::Symbol
15261536
controller::Symbol
1537+
step_limiter!::StepLimiter
15271538
autodiff::AD
15281539
end
15291540
function ESDIRK547L2SA2(;
15301541
chunk_size = Val{0}(), autodiff = AutoForwardDiff(),
15311542
standardtag = Val{true}(), concrete_jac = nothing,
15321543
diff_type = Val{:forward}(),
15331544
linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(),
1534-
extrapolant = :linear, controller = :PI
1545+
smooth_est = true, extrapolant = :linear,
1546+
controller = :PI, step_limiter! = trivial_limiter!
15351547
)
15361548
AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type)
15371549

15381550
return ESDIRK547L2SA2{
15391551
_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve),
15401552
typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag),
1541-
_unwrap_val(concrete_jac),
1553+
_unwrap_val(concrete_jac), typeof(step_limiter!),
15421554
}(
1543-
linsolve, nlsolve, precs, extrapolant,
1544-
controller, AD_choice
1555+
linsolve, nlsolve, precs, smooth_est, extrapolant,
1556+
controller, step_limiter!, AD_choice
15451557
)
15461558
end
15471559

@@ -1569,31 +1581,34 @@ Check issue https://github.com/SciML/OrdinaryDiffEq.jl/issues/1933 for more deta
15691581
controller = :PI,
15701582
"""
15711583
)
1572-
struct ESDIRK659L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <:
1573-
OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
1584+
struct ESDIRK659L2SA{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <:
1585+
OrdinaryDiffEqNewtonAdaptiveESDIRKAlgorithm{CS, AD, FDT, ST, CJ}
15741586
linsolve::F
15751587
nlsolve::F2
15761588
precs::P
1589+
smooth_est::Bool
15771590
extrapolant::Symbol
15781591
controller::Symbol
1592+
step_limiter!::StepLimiter
15791593
autodiff::AD
15801594
end
15811595
function ESDIRK659L2SA(;
15821596
chunk_size = Val{0}(), autodiff = AutoForwardDiff(),
15831597
standardtag = Val{true}(), concrete_jac = nothing,
15841598
diff_type = Val{:forward}(),
15851599
linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(),
1586-
extrapolant = :linear, controller = :PI
1600+
smooth_est = true, extrapolant = :linear,
1601+
controller = :PI, step_limiter! = trivial_limiter!
15871602
)
15881603
AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type)
15891604

15901605
return ESDIRK659L2SA{
15911606
_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve),
15921607
typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag),
1593-
_unwrap_val(concrete_jac),
1608+
_unwrap_val(concrete_jac), typeof(step_limiter!),
15941609
}(
1595-
linsolve, nlsolve, precs, extrapolant,
1596-
controller, AD_choice
1610+
linsolve, nlsolve, precs, smooth_est, extrapolant,
1611+
controller, step_limiter!, AD_choice
15971612
)
15981613
end
15991614

0 commit comments

Comments
 (0)