JuliaDynamics/DynamicalSystemsBase.jl

tangent_integrator not compatible with stiff solvers

Aberta

#87 aberto em 18 de jul. de 2019

 (2 comentários) (1 reação) (0 responsável)Julia (34 forks)auto 404
enhancementhelp wanted

Métricas do repositório

Stars
 (56 estrelas)
Métricas de merge de PR
 (Métricas PR pendentes)

Description

Hi, as shown here https://discourse.julialang.org/t/chaostools-tangent-integrator-stiff-solvers/26464, the tangent_integrator errors, if one provides an algorithm, which uses ForwardDiff.jl to calculate the Jacobian, etc. This is the case for all stiff solvers. One can avoid using auto-differentiation by passing autodiff=false to the algorithm, e.g. Rodas5(autodiff=false) but we often want this feature!

The error is due to caching the Jacobi-matrix in the create_tangent function (https://github.com/JuliaDynamics/DynamicalSystemsBase.jl/blob/master/src/dynamicalsystem.jl#L343-L355)

# IIP Tangent Space dynamics
function create_tangent(@nospecialize(f::F), @nospecialize(jacobian::JAC), J::JM,
    ::Val{true}, ::Val{k}) where {F, JAC, JM, k}
    J = deepcopy(J)
    tangentf = (du, u, p, t) -> begin
        uv = @view u[:, 1]
        f(view(du, :, 1), uv, p, t)
        jacobian(J, uv, p, t)
        mul!((@view du[:, 2:(k+1)]), J, (@view u[:, 2:(k+1)]))
        nothing
    end
    return tangentf
end

Especially line 346: J = deepcopy(J).

A workaround is described here http://docs.juliadiffeq.org/latest/basics/faq.html#I-get-Dual-number-errors-when-I-solve-my-ODE-with-Rosenbrock-or-SDIRK-methods.


Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

Guia do colaborador