Skip to content

Commit

Permalink
fix error norm to use max(abs(u),abs(utmp))
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisRackauckas committed Dec 31, 2016
1 parent e984b2b commit 3c3df90
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 17 deletions.
17 changes: 8 additions & 9 deletions src/integrators/sra.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ function sde_solve{uType<:Number,uEltype,Nm1,N,tType,tableauType,uEltypeNoUnits,
E₂ = chi2.*(g(t,u)-gpdt) #Only for additive!

if adaptive
EEst = abs((δ*E₁+E₂)./(abstol + u*reltol))
utmp = u + k₁/3 + 2k₂/3 + E₂ + ΔW*gpdt
EEst = abs((δ*E₁+E₂)./(abstol + max(abs(u),abs(utmp))*reltol))
else
u = u + k₁/3 + 2k₂/3 + E₂ + ΔW*gpdt
end
Expand Down Expand Up @@ -52,12 +52,12 @@ function sde_solve{uType<:AbstractArray,uEltype,Nm1,N,tType,tableauType,uEltypeN

if adaptive
for i in eachindex(u)
EEsttmp[i] = *E₁[i]+E₂[i])/(abstol + u[i]*reltol)
utmp[i] = u[i] + k₁[i]/3 + 2k₂[i]/3 + E₂[i] + ΔW[i]*gpdt[i]
end
EEst = internalnorm(EEsttmp)
for i in eachindex(u)
utmp[i] = u[i] + k₁[i]/3 + 2k₂[i]/3 + E₂[i] + ΔW[i]*gpdt[i]
EEsttmp[i] = *E₁[i]+E₂[i])/(abstol + max(abs(u[i]),abs(utmp[i]))*reltol)
end
EEst = internalnorm(EEsttmp)
else
for i in eachindex(u)
u[i] = u[i] + k₁[i]/3 + 2k₂[i]/3 + E₂[i] + ΔW[i]*gpdt[i]
Expand Down Expand Up @@ -125,14 +125,13 @@ function sde_solve{uType<:AbstractArray,uEltype,Nm1,N,tType,tableauType,uEltypeN
end

if adaptive

for i in eachindex(u)
EEsttmp[i] = *E₁[i]+E₂[i])/(abstol + u[i]*reltol)
utmp[i] = u[i] + dt*atemp[i] + btemp[i] + E₂[i]
end
EEst = internalnorm(EEsttmp)
for i in eachindex(u)
utmp[i] = u[i] + dt*atemp[i] + btemp[i] + E₂[i]
EEsttmp[i] = *E₁[i]+E₂[i])/(abstol + max(abs(u[i]),abs(utmp[i]))*reltol)
end
EEst = internalnorm(EEsttmp)
else
for i in eachindex(u)
u[i] = u[i] + dt*atemp[i] + btemp[i] + E₂[i]
Expand Down Expand Up @@ -183,8 +182,8 @@ function sde_solve{uType<:Number,uEltype,Nm1,N,tType,tableauType,uEltypeNoUnits,

if adaptive
E₁ = dt*E₁temp
EEst = abs((δ*E₁+E₂)./(abstol + u*reltol))
utmp = u + dt*atemp + btemp + E₂
EEst = abs((δ*E₁+E₂)./(abstol + max(abs(u),abs(utmp))*reltol))
else
u = u + dt*atemp + btemp + E₂
end
Expand Down
16 changes: 8 additions & 8 deletions src/integrators/sri.jl
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@ function sde_solve{uType<:AbstractArray,uEltype,Nm1,N,tType,tableauType,uEltypeN

if adaptive
for i in eachindex(u)
EEsttmp[i] = *E₁[i]+E₂[i])/(abstol + u[i]*reltol)
utmp[i] = u[i] + dt*atemp[i] + btemp[i] + E₂[i]
end
EEst = internalnorm(EEsttmp)
for i in eachindex(u)
utmp[i] = u[i] + dt*atemp[i] + btemp[i] + E₂[i]
EEsttmp[i] = *E₁[i]+E₂[i])/(abstol + max(abs(u[i]),abs(utmp[i]))*reltol)
end
EEst = internalnorm(EEsttmp)
else
for i in eachindex(u)
u[i] = u[i] + dt*atemp[i] + btemp[i] + E₂[i]
Expand Down Expand Up @@ -154,12 +154,12 @@ function sde_solve{uType<:AbstractArray,uEltype,Nm1,N,tType,tableauType,uEltypeN

if adaptive
for i in eachindex(u)
EEsttmp[i] = *E₁[i]+E₂[i])/(abstol + u[i]*reltol)
utmp[i] = u[i] + (fH01[i] + 2fH02[i])/3 + ΔW[i]*(mg₁[i] + Fg₂o3[i] + Tg₃o3[i]) + chi1[i]*(mg₁[i] + Fg₂o3[i] - g₃o3[i]) + E₂[i]
end
EEst = internalnorm(EEsttmp)
for i in eachindex(u)
utmp[i] = u[i] + (fH01[i] + 2fH02[i])/3 + ΔW[i]*(mg₁[i] + Fg₂o3[i] + Tg₃o3[i]) + chi1[i]*(mg₁[i] + Fg₂o3[i] - g₃o3[i]) + E₂[i]
EEsttmp[i] = *E₁[i]+E₂[i])/(abstol + max(abs(u[i]),abs(utmp[i]))*reltol)
end
EEst = internalnorm(EEsttmp)
else
for i in eachindex(u)
u[i] = u[i] + (fH01[i] + 2fH02[i])/3 + ΔW[i]*(mg₁[i] + Fg₂o3[i] + Tg₃o3[i]) + chi1[i]*(mg₁[i] + Fg₂o3[i] - g₃o3[i]) + E₂[i]
Expand Down Expand Up @@ -214,8 +214,8 @@ function sde_solve{uType<:Number,uEltype,Nm1,N,tType,tableauType,uEltypeNoUnits,
E₂ = chi2.*(2g₁ - Fg₂o3 - Tg₃o3) + chi3.*(2mg₁ + 5g₂o3 - Tg₃o3 + g₄)

if adaptive
EEst = abs((δ*E₁+E₂)/(abstol + u*reltol))
utmp = u + (fH01 + 2fH02)/3 + ΔW.*(mg₁ + Fg₂o3 + Tg₃o3) + chi1.*(mg₁ + Fg₂o3 - g₃o3) + E₂
EEst = abs((δ*E₁+E₂)/(abstol + max(abs(u),abs(utmp))*reltol))
else
u = u + (fH01 + 2fH02)/3 + ΔW.*(mg₁ + Fg₂o3 + Tg₃o3) + chi1.*(mg₁ + Fg₂o3 - g₃o3) + E₂
end
Expand Down Expand Up @@ -278,8 +278,8 @@ function sde_solve{uType<:Number,uEltype,Nm1,N,tType,tableauType,uEltypeNoUnits,


if adaptive
EEst = abs((δ*E₁+E₂)./(abstol + u*reltol))
utmp = u + dt*atemp + btemp + E₂
EEst = abs((δ*E₁+E₂)./(abstol + max(abs(u),abs(utmp))*reltol))
else
u = u + dt*atemp + btemp + E₂
end
Expand Down

0 comments on commit 3c3df90

Please sign in to comment.