From 525f0fe6fa79a3e3db7e0e6d853fdc637f4e275b Mon Sep 17 00:00:00 2001 From: oscarddssmith Date: Mon, 9 Sep 2024 16:11:35 -0400 Subject: [PATCH] fixup calc_W! --- .../src/derivative_utils.jl | 15 +++++++++++---- test/interface/linear_solver_split_ode_test.jl | 2 -- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/OrdinaryDiffEqDifferentiation/src/derivative_utils.jl b/lib/OrdinaryDiffEqDifferentiation/src/derivative_utils.jl index 8b09e65937..a5babda26f 100644 --- a/lib/OrdinaryDiffEqDifferentiation/src/derivative_utils.jl +++ b/lib/OrdinaryDiffEqDifferentiation/src/derivative_utils.jl @@ -704,12 +704,19 @@ function calc_W!(W, integrator, nlsolver::Union{Nothing, AbstractNLSolver}, cach else update_coefficients!(W, uprev, p, t; transform = W_transform, dtgamma) end - if W.J !== nothing && !(W.J isa AbstractSciMLOperator) + if W.J !== nothing && (W.J isa MatrixOperator || !(W.J isa AbstractSciMLOperator)) islin, isode = islinearfunction(integrator) - islin ? (J = isode ? f.f : f.f1.f) : - (new_jac && (calc_J!(W.J, integrator, lcache, next_step))) - new_W && !isdae && + if islin + J = isode ? f.f : f.f1.f + elseif new_jac + calc_J!(W.J, integrator, lcache, next_step) + end + if W.J isa MatrixOperator + J = J.A + end + if new_W && !isdae jacobian2W!(W._concrete_form, mass_matrix, dtgamma, J, W_transform) + end end elseif W isa AbstractSciMLOperator && !(W isa StaticWOperator) update_coefficients!(W, uprev, p, t; transform = W_transform, dtgamma) diff --git a/test/interface/linear_solver_split_ode_test.jl b/test/interface/linear_solver_split_ode_test.jl index a959976899..83af64ff64 100644 --- a/test/interface/linear_solver_split_ode_test.jl +++ b/test/interface/linear_solver_split_ode_test.jl @@ -2,8 +2,6 @@ using Test using OrdinaryDiffEq using LinearAlgebra, LinearSolve -import OrdinaryDiffEqCore.dolinsolve - n = 8 dt = 1 / 1000 u0 = ones(n)