diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl index 68403364d6..cc1fb804fc 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl @@ -617,7 +617,7 @@ end if integrator.opts.adaptive reltol = integrator.opts.reltol else - reltol = eps(eltype(dz)) + reltol = eps(real(one(eltype(dz)))) end if is_always_new(nlsolver) || (iter == 1 && new_W) diff --git a/lib/StochasticDiffEq/test/complex_tests.jl b/lib/StochasticDiffEq/test/complex_tests.jl index 2e4832041c..81c4dca380 100644 --- a/lib/StochasticDiffEq/test/complex_tests.jl +++ b/lib/StochasticDiffEq/test/complex_tests.jl @@ -38,6 +38,12 @@ end @test eltype(sol.u[end]) == ComplexF64 end + for alg in (ImplicitEM(autodiff = AutoFiniteDiff()), ISSEM(autodiff = AutoFiniteDiff())) + sol = solve(prob, alg; adaptive = false, dt = 0.01) + @test eltype(sol.t) == Float64 + @test eltype(sol.u[end]) == ComplexF64 + end + # currently broken for alg in implicit_autodiff @test_throws OrdinaryDiffEqDifferentiation.FirstAutodiffJacError solve(prob, alg)