Skip to content

Commit fffb066

Browse files
fix appxtrue
1 parent af0b69c commit fffb066

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/test_solution.jl

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,39 @@ end
1717
function TestSolution(t,u,interp)
1818
T = eltype(eltype(u))
1919
N = length((size(u[1])..., length(u)))
20-
TestSolution{T,N,length(true),typeof(t),typeof(u),typeof(interp)}(t,u,interp,true)
20+
TestSolution{T,N,true,typeof(t),typeof(u),typeof(interp)}(t,u,interp,true)
2121
end
2222
TestSolution(interp::DESolution) = TestSolution{Void,0,true,Void,Void,typeof(interp)}(nothing,nothing,interp,true)
23-
23+
hasinterp{T,N,hi,tType,uType,iType}(::TestSolution{T,N,hi,tType,uType,iType}) = hi
2424
"""
2525
`appxtrue(sol::AbstractODESolution,sol2::TestSolution)`
2626
2727
Uses the interpolant from the higher order solution sol2 to approximate
2828
errors for sol. If sol2 has no interpolant, only the final error is
2929
calculated.
3030
"""
31-
function appxtrue{hasinterp}(sol::AbstractODESolution,sol2::TestSolution{hasinterp})
32-
if sol2.u == nothing && hasinterp
33-
sol2.u = sol2(sol.t)
34-
sol2.t = sol.t
31+
function appxtrue(sol::AbstractODESolution,sol2::TestSolution)
32+
if sol2.u == nothing && hasinterp(sol2)
33+
_sol = TestSolution(sol.t,sol2(sol.t),sol2)
34+
else
35+
_sol = sol2
3536
end
36-
errors = Dict(:final=>recursive_mean(abs.(sol[end]-sol2[end])))
37-
if sol2.dense
38-
timeseries_analytic = sol2(sol.t)
37+
38+
errors = Dict(:final=>recursive_mean(abs.(sol[end]-_sol[end])))
39+
if _sol.dense
40+
timeseries_analytic = _sol(sol.t)
3941
errors[:l∞] = maximum(vecvecapply((x)->abs.(x),sol[:]-timeseries_analytic))
4042
errors[:l2] = sqrt(recursive_mean(vecvecapply((x)->float(x).^2,sol[:]-timeseries_analytic)))
4143
if !(typeof(sol) <: AbstractRODESolution) && sol.dense
4244
densetimes = collect(linspace(sol.t[1],sol.t[end],100))
4345
interp_u = sol(densetimes)
44-
interp_analytic = sol2(densetimes)
46+
interp_analytic = _sol(densetimes)
4547
interp_errors = Dict(:L∞=>maximum(vecvecapply((x)->abs.(x),interp_u-interp_analytic)),
4648
:L2=>sqrt(recursive_mean(vecvecapply((x)->float(x).^2,interp_u-interp_analytic))))
4749
errors = merge(errors,interp_errors)
4850
end
4951
end
50-
build_solution(sol,sol2.u,errors)
52+
build_solution(sol,_sol.u,errors)
5153
end
5254

5355
function appxtrue(sol::AbstractFEMSolution,sol2::AbstractFEMSolution)

0 commit comments

Comments
 (0)