Skip to content

Stiff SDE solvers compilation error with complex numbers #287

@PhilipVinc

Description

@PhilipVinc

Trying to use SDE Stiff solvers with complex arrays fails even if auto-differentiation is explicitly turned off.

SKenCarp fails with

ERROR: MethodError: no method matching eps(::Type{Complex{Float64}})

ImplicitEM, ImplicitEulerHeun, ImplicitRKMil, ISSEM and ISSEulerHeun fail with

MethodError: no method matching StochasticDiffEq.ImplicitEMCache(::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::Array{Complex{Float64},2}, ::DiffEqDiffTools.JacobianCache{Array{Complex{Float64},2},Array{Complex{Float64},2},Array{Complex{Float64},2},Val{:central},Complex{Float64},Val{true}}, ::DiffEqBase.LinSolveFactorize{Base.LinAlg.#lufact!}, ::DiffEqDiffTools.UJacobianWrapper{#ff,Float64,Void}, ::Complex{Float64}, ::Complex{Float64}, ::Float64, ::Int64, ::Void)

It's unrelated, but note that turning on auto differentiation for all those methods gives the error

ERROR: TypeError: Dual: in V, expected V<:Real, got Type{Complex{Float64}}

Here is the code that is leading to the error:

using DifferentialEquations
L = 4;
u₀    = fill(0.2+0.2im, L, 1);
Jmat = 0.45.*(diagm(linspace(1,1,L-1),1)+diagm(linspace(1,1,L-1),-1));

function ff(dα,α,p,t)
    dα[:] = (-im*(0.1 - 0.1*(α .* conj(α) - 1.0)) - 1.0/2.0).*α + im*1.57 -im.*(Jmat*α);
end
function gg(dα, α, p, t)
  dα[:] = sqrt(1/2)
end

prob_BH  = SDEProblem(ff, gg, u₀, (0.0, 50.0));

solSKC = solve(prob_BH, SKenCarp(autodiff=false), dt=0.001)
solEM = solve(prob_BH, ImplicitEM(autodiff=false), dt=0.001)
solEH = solve(prob_BH, ImplicitEulerHeun(autodiff=false), dt=0.001)
solRKM = solve(prob_BH, ImplicitRKMil(autodiff=false), dt=0.001)
solISSEM = solve(prob_BH, ISSEM(autodiff=false), dt=0.001)
solISSEH = solve(prob_BH, ISSEulerHeun(autodiff=false), dt=0.001)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions