@@ -83,7 +83,7 @@ function jacobian_caches(alg::AbstractNonlinearSolveAlgorithm, f::F, u, p, ::Val
83
83
84
84
J = if ! (linsolve_needs_jac || alg_wants_jac)
85
85
# We don't need to construct the Jacobian
86
- JacVec (uf, u; autodiff = __get_nonsparse_ad (alg. ad))
86
+ JacVec (uf, u; fu, autodiff = __get_nonsparse_ad (alg. ad))
87
87
else
88
88
if has_analytic_jac
89
89
f. jac_prototype === nothing ? undefmatrix (u) : f. jac_prototype
@@ -179,7 +179,7 @@ __maybe_symmetric(x::Number) = x
179
179
__maybe_symmetric (x:: StaticArray ) = x
180
180
__maybe_symmetric (x:: SparseArrays.AbstractSparseMatrix ) = x
181
181
__maybe_symmetric (x:: SciMLOperators.AbstractSciMLOperator ) = x
182
- __maybe_symmetric (x:: KrylovJ ᵀJ) = x
182
+ __maybe_symmetric (x:: KrylovJ ᵀJ) = x. JᵀJ
183
183
184
184
# # Special Handling for Scalars
185
185
function jacobian_caches (alg:: AbstractNonlinearSolveAlgorithm , f:: F , u:: Number , p,
@@ -203,16 +203,16 @@ function __update_Jᵀf!(iip::Val, cache, sym1::Symbol, sym2::Symbol, J, fu)
203
203
return __update_Jᵀf! (iip, cache, sym1, sym2, getproperty (cache, sym2), J, fu)
204
204
end
205
205
function __update_Jᵀf! (:: Val{false} , cache, sym1:: Symbol , sym2:: Symbol , _, J, fu)
206
- return setproperty! (cache, sym1, J' * fu)
206
+ return setproperty! (cache, sym1, _restructure ( getproperty (cache, sym1), J' * fu) )
207
207
end
208
208
function __update_Jᵀf! (:: Val{true} , cache, sym1:: Symbol , sym2:: Symbol , _, J, fu)
209
- return mul! (getproperty (cache, sym1), J' , fu)
209
+ return mul! (vec ( getproperty (cache, sym1) ), J' , fu)
210
210
end
211
211
function __update_Jᵀf! (:: Val{false} , cache, sym1:: Symbol , sym2:: Symbol , H:: KrylovJ ᵀJ, J, fu)
212
- return setproperty! (cache, sym1, H. Jᵀ * fu)
212
+ return setproperty! (cache, sym1, _restructure ( getproperty (cache, sym1), H. Jᵀ * fu) )
213
213
end
214
214
function __update_Jᵀf! (:: Val{true} , cache, sym1:: Symbol , sym2:: Symbol , H:: KrylovJ ᵀJ, J, fu)
215
- return mul! (getproperty (cache, sym1), H. Jᵀ, fu)
215
+ return mul! (vec ( getproperty (cache, sym1) ), H. Jᵀ, fu)
216
216
end
217
217
218
218
# Left-Right Multiplication
0 commit comments