@@ -6,17 +6,15 @@ Base.@kwdef struct PardisoJL <: SciMLLinearSolveAlgorithm
66 dparm:: Union{Vector{Tuple{Int,Int}}, Nothing} = nothing
77end
88
9- MKLPardisoFactorize (;kwargs... ) = PardisoJL (;kwargs... )
10- MKLPardisoIterate (;kwargs... ) = PardisoJL (;kwargs... )
9+ MKLPardisoFactorize (;kwargs... ) = PardisoJL (;solver_type = 0 ,kwargs... )
10+ MKLPardisoIterate (;kwargs... ) = PardisoJL (;solver_type = 1 ,kwargs... )
11+ needs_concrete_A (alg:: PardisoJL ) = true
1112
1213# TODO schur complement functionality
1314
1415function init_cacheval (alg:: PardisoJL , A, b, u, Pl, Pr, maxiters, abstol, reltol, verbose)
1516 @unpack nprocs, solver_type, matrix_type, iparm, dparm = alg
16-
17- if A isa DiffEqArrayOperator
18- A = A. A
19- end
17+ A = convert (AbstractMatrix,A)
2018
2119 solver =
2220 if Pardiso. PARDISO_LOADED[]
@@ -59,6 +57,9 @@ function init_cacheval(alg::PardisoJL, A, b, u, Pl, Pr, maxiters, abstol, reltol
5957 end
6058 end
6159
60+ # Make sure to say it's transposed because its CSC not CSR
61+ Pardiso. set_iparm! (solver,12 , 1 )
62+
6263 Pardiso. set_phase! (solver, Pardiso. ANALYSIS)
6364 Pardiso. pardiso (solver, u, A, b)
6465
6768
6869function SciMLBase. solve (cache:: LinearCache , alg:: PardisoJL ; kwargs... )
6970 @unpack A, b, u = cache
70- if A isa DiffEqArrayOperator
71- A = A. A
72- end
71+ A = convert (AbstractMatrix,A)
7372
7473 if cache. isfresh
7574 Pardiso. set_phase! (cache. cacheval, Pardiso. NUM_FACT)
76- Pardiso. pardiso (cache. cacheval, cache . u, cache . A, cache . b)
75+ Pardiso. pardiso (cache. cacheval, u, A, b)
7776 end
78-
7977 Pardiso. set_phase! (cache. cacheval, Pardiso. SOLVE_ITERATIVE_REFINE)
8078 Pardiso. pardiso (cache. cacheval, u, A, b)
8179
8280 return SciMLBase. build_linear_solution (alg,cache. u,nothing ,cache)
8381end
8482
85- needsconcreteA (alg:: PardisoJL ) = true
86-
8783# Add finalizer to release memory
8884# Pardiso.set_phase!(cache.cacheval, Pardiso.RELEASE_ALL)
8985
0 commit comments