@@ -108,7 +108,7 @@ All values default to `nothing` and the solver internally determines the values
108108given the input types, and these keyword arguments are only for overriding the
109109default handling process. This should not be required by most users.
110110"""
111- MKLPardisoFactorize (; kwargs... ) = PardisoJL (; solver_type = 0 , kwargs... )
111+ MKLPardisoFactorize (; kwargs... ) = PardisoJL (; vendor = :MKL , solver_type = 0 , kwargs... )
112112
113113"""
114114```julia
@@ -136,19 +136,18 @@ All values default to `nothing` and the solver internally determines the values
136136given the input types, and these keyword arguments are only for overriding the
137137default handling process. This should not be required by most users.
138138"""
139- MKLPardisoIterate (; kwargs... ) = PardisoJL (; solver_type = 1 , kwargs... )
139+ MKLPardisoIterate (; kwargs... ) = PardisoJL (; vendor = :MKL , solver_type = 1 , kwargs... )
140140
141141"""
142142```julia
143- PardisoJL(; nprocs::Union{Int, Nothing} = nothing,
144- solver_type = nothing,
143+ PanuaPardisoFactorize(; nprocs::Union{Int, Nothing} = nothing,
145144 matrix_type = nothing,
146145 cache_analysis = false,
147146 iparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
148147 dparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing)
149148```
150149
151- A generic method using MKL Pardiso. Specifying `solver_type` is required .
150+ A sparse factorization method using Panua Pardiso.
152151
153152!!! note
154153
@@ -165,20 +164,75 @@ All values default to `nothing` and the solver internally determines the values
165164given the input types, and these keyword arguments are only for overriding the
166165default handling process. This should not be required by most users.
167166"""
167+ PanuaPardisoFactorize (; kwargs... ) = PardisoJL (;
168+ vendor = :Panua , solver_type = 0 , kwargs... )
169+
170+ """
171+ ```julia
172+ PanuaPardisoIterate(; nprocs::Union{Int, Nothing} = nothing,
173+ matrix_type = nothing,
174+ iparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
175+ dparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing)
176+ ```
177+
178+ A mixed factorization+iterative method using Panua Pardiso.
179+
180+ !!! note
181+
182+ Using this solver requires adding the package Pardiso.jl, i.e. `using Pardiso`
183+
184+ ## Keyword Arguments
185+
186+ For the definition of the keyword arguments, see the Pardiso.jl documentation.
187+ All values default to `nothing` and the solver internally determines the values
188+ given the input types, and these keyword arguments are only for overriding the
189+ default handling process. This should not be required by most users.
190+ """
191+ PanuaPardisoIterate (; kwargs... ) = PardisoJL (; vendor = :Panua , solver_type = 1 , kwargs... )
192+
193+ """
194+ ```julia
195+ PardisoJL(; nprocs::Union{Int, Nothing} = nothing,
196+ solver_type = nothing,
197+ matrix_type = nothing,
198+ iparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
199+ dparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
200+ vendor::Union{Symbol, Nothing} = nothing
201+ )
202+ ```
203+
204+ A generic method using Pardiso. Specifying `solver_type` is required.
205+
206+ !!! note
207+
208+ Using this solver requires adding the package Pardiso.jl, i.e. `using Pardiso`
209+
210+ ## Keyword Arguments
211+
212+ The `vendor` keyword allows to choose between Panua pardiso (former pardiso-project.org; `vendor=:Panua`)
213+ and MKL Pardiso (`vendor=:MKL`). If `vendor==nothing`, Panua pardiso is preferred over MKL Pardiso.
214+
215+ For the definition of the other keyword arguments, see the Pardiso.jl documentation.
216+ All values default to `nothing` and the solver internally determines the values
217+ given the input types, and these keyword arguments are only for overriding the
218+ default handling process. This should not be required by most users.
219+ """
168220struct PardisoJL{T1, T2} <: LinearSolve.SciMLLinearSolveAlgorithm
169221 nprocs:: Union{Int, Nothing}
170222 solver_type:: T1
171223 matrix_type:: T2
172224 cache_analysis:: Bool
173225 iparm:: Union{Vector{Tuple{Int, Int}}, Nothing}
174226 dparm:: Union{Vector{Tuple{Int, Int}}, Nothing}
227+ vendor:: Union{Symbol, Nothing}
175228
176229 function PardisoJL (; nprocs:: Union{Int, Nothing} = nothing ,
177230 solver_type = nothing ,
178231 matrix_type = nothing ,
179232 cache_analysis = false ,
180233 iparm:: Union{Vector{Tuple{Int, Int}}, Nothing} = nothing ,
181- dparm:: Union{Vector{Tuple{Int, Float64}}, Nothing} = nothing )
234+ dparm:: Union{Vector{Tuple{Int, Int}}, Nothing} = nothing ,
235+ vendor:: Union{Symbol, Nothing} = nothing )
182236 ext = Base. get_extension (@__MODULE__ , :LinearSolvePardisoExt )
183237 if ext === nothing
184238 error (" PardisoJL requires that Pardiso is loaded, i.e. `using Pardiso`" )
@@ -188,7 +242,7 @@ struct PardisoJL{T1, T2} <: LinearSolve.SciMLLinearSolveAlgorithm
188242 @assert T1 <: Union{Int, Nothing, ext.Pardiso.Solver}
189243 @assert T2 <: Union{Int, Nothing, ext.Pardiso.MatrixType}
190244 return new {T1, T2} (
191- nprocs, solver_type, matrix_type, cache_analysis, iparm, dparm)
245+ nprocs, solver_type, matrix_type, cache_analysis, iparm, dparm, vendor )
192246 end
193247 end
194248end
0 commit comments