Skip to content

Commit cfdd844

Browse files
committed
WIP: Add Adaptive EEST and sim tests
1 parent 4bbe40d commit cfdd844

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

src/caches/low_order_rk_caches.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ function alg_cache(alg::RKO65,u,rate_prototype,uEltypeNoUnits,uBottomEltypeNoUni
618618
RKO65Cache(u,uprev,k, k1,k2,k3,k4,k5,k6, tmp, fsalfirst, tab)
619619
end
620620

621-
@cache struct FRK65Cache{uType,rateType,TabType} <: OrdinaryDiffEqMutableCache
621+
@cache struct FRK65Cache{uType,rateType,uNoUnitsType,TabType} <: OrdinaryDiffEqMutableCache
622622
u::uType
623623
uprev::uType
624624
utilde::uType
@@ -632,7 +632,7 @@ end
632632
k8::rateType
633633
k9::rateType
634634
tmp::uType
635-
fsalfirst::rateType
635+
atmp::uNoUnitsType
636636
tab::TabType
637637
end
638638

@@ -781,7 +781,7 @@ function alg_cache(alg::FRK65,u,rate_prototype,uEltypeNoUnits,uBottomEltypeNoUni
781781
k8 = zero(rate_prototype)
782782
k9 = zero(rate_prototype)
783783
utilde = similar(u)
784+
atmp = similar(u,uEltypeNoUnits)
784785
tmp = similar(u)
785-
fsalfirst = zero(rate_prototype)
786-
FRK65Cache(u, uprev, utilde, k1, k2, k3, k4, k5, k6, k7, k8, k9, tmp, fsalfirst, tab)
786+
FRK65Cache(u, uprev, utilde, k1, k2, k3, k4, k5, k6, k7, k8, k9, tmp, atmp, tab)
787787
end

src/perform_step/low_order_rk_perform_step.jl

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,7 +1062,11 @@ end
10621062
u = uprev+dt*(β1*k1+β4*k4+β5*k5+β6*k6+β7*k7+β8*k8)
10631063
integrator.fsallast = f(u, p, t+dt)
10641064
k9 = integrator.fsallast
1065-
1065+
if integrator.opts.adaptive
1066+
utilde = dt*(β1tilde*k1+β4tilde*k4+β5tilde*k5+β6tilde*k6+β7tilde*k7+β8tilde*k8+β9tilde*k9)
1067+
atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol,integrator.opts.internalnorm,t)
1068+
integrator.EEst = integrator.opts.internalnorm(atmp,t)
1069+
end
10661070
integrator.destats.nf += 8
10671071
integrator.k[1]=k1
10681072
integrator.k[2]=k2
@@ -1102,7 +1106,7 @@ end
11021106

11031107
@muladd function perform_step!(integrator, cache::FRK65Cache, repeat_step=false)
11041108
@unpack t, dt, uprev, u, f, p = integrator
1105-
@unpack tmp, k1, k2, k3, k4, k5, k6, k7, k8, k9, utilde = cache
1109+
@unpack tmp, k1, k2, k3, k4, k5, k6, k7, k8, k9, utilde, atmp = cache
11061110
@unpack α21, α31, α41, α51, α61, α71, α81, α91, α32, α43, α53, α63, α73, α83, α54, α64, α74, α84, α94, α65, α75, α85, α95, α76, α86, α96, α87, α97, α98, β1, β4, β5, β6, β7, β8, β1tilde, β4tilde, β5tilde, β6tilde, β7tilde, β8tilde, β9tilde, c2, c3, c4, c5, c6, c7, c8, c9 = cache.tab
11071111

11081112
@.. tmp = uprev+α21*dt*k1
@@ -1118,12 +1122,18 @@ end
11181122
@.. tmp = uprev+α71*dt*k1+α73*dt*k3+α74*dt*k4+α75*dt*k5+α76*dt*k6
11191123
f(k7, tmp, p, t+c7*dt)
11201124
@.. tmp = uprev+α81*dt*k1+α83*dt*k3+α84*dt*k4+α85*dt*k5+α86*dt*k6+α87*dt*k7
1121-
f(k8, tmp, p, t+c5*dt)
1125+
f(k8, tmp, p, t+c8*dt)
11221126
@.. u = uprev+dt*(β1*k1+β4*k4+β5*k5+β6*k6+β7*k7+β8*k8)
11231127
f(k9, u, p, t+dt)
11241128

11251129
integrator.destats.nf += 8
1126-
1127-
#return nothing
1130+
if integrator.opts.adaptive
1131+
@.. utilde = dt*(β1tilde*k1+β4tilde*k4+β5tilde*k5+β6tilde*k6+β7tilde*k7+β8tilde*k8+β9tilde*k9)
1132+
calculate_residuals(atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol,integrator.opts.internalnorm,t)
1133+
integrator.EEst = integrator.opts.internalnorm(atmp,t)
1134+
end
1135+
return nothing
11281136
end
11291137

1138+
1139+

test/algconvergence/ode_convergence_tests.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ testTol = 0.2
3636
sim3 = test_convergence(dts2,prob,RKO65())
3737
@test sim3.𝒪est[:l∞] 5 atol=testTol
3838

39+
sim3 = test_convergence(dts2,prob,FRK65(10))
40+
@test sim3.𝒪est[:l∞] 6 atol=testTol
41+
3942
sim4 = test_convergence(dts,prob,BS3())
4043
@test sim4.𝒪est[:l2] 3 atol=testTol
4144
sim5 = test_convergence(dts, prob, AB3())

0 commit comments

Comments
 (0)