@@ -108,7 +108,7 @@ All values default to `nothing` and the solver internally determines the values
108
108
given the input types, and these keyword arguments are only for overriding the
109
109
default handling process. This should not be required by most users.
110
110
"""
111
- MKLPardisoFactorize (; kwargs... ) = PardisoJL (; solver_type = 0 , kwargs... )
111
+ MKLPardisoFactorize (; kwargs... ) = PardisoJL (; vendor = :MKL , solver_type = 0 , kwargs... )
112
112
113
113
"""
114
114
```julia
@@ -136,19 +136,18 @@ All values default to `nothing` and the solver internally determines the values
136
136
given the input types, and these keyword arguments are only for overriding the
137
137
default handling process. This should not be required by most users.
138
138
"""
139
- MKLPardisoIterate (; kwargs... ) = PardisoJL (; solver_type = 1 , kwargs... )
139
+ MKLPardisoIterate (; kwargs... ) = PardisoJL (; vendor = :MKL , solver_type = 1 , kwargs... )
140
140
141
141
"""
142
142
```julia
143
- PardisoJL(; nprocs::Union{Int, Nothing} = nothing,
144
- solver_type = nothing,
143
+ PanuaPardisoFactorize(; nprocs::Union{Int, Nothing} = nothing,
145
144
matrix_type = nothing,
146
145
cache_analysis = false,
147
146
iparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
148
147
dparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing)
149
148
```
150
149
151
- A generic method using MKL Pardiso. Specifying `solver_type` is required .
150
+ A sparse factorization method using Panua Pardiso.
152
151
153
152
!!! note
154
153
@@ -165,20 +164,75 @@ All values default to `nothing` and the solver internally determines the values
165
164
given the input types, and these keyword arguments are only for overriding the
166
165
default handling process. This should not be required by most users.
167
166
"""
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
+ """
168
220
struct PardisoJL{T1, T2} <: LinearSolve.SciMLLinearSolveAlgorithm
169
221
nprocs:: Union{Int, Nothing}
170
222
solver_type:: T1
171
223
matrix_type:: T2
172
224
cache_analysis:: Bool
173
225
iparm:: Union{Vector{Tuple{Int, Int}}, Nothing}
174
226
dparm:: Union{Vector{Tuple{Int, Int}}, Nothing}
227
+ vendor:: Union{Symbol, Nothing}
175
228
176
229
function PardisoJL (; nprocs:: Union{Int, Nothing} = nothing ,
177
230
solver_type = nothing ,
178
231
matrix_type = nothing ,
179
232
cache_analysis = false ,
180
233
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 )
182
236
ext = Base. get_extension (@__MODULE__ , :LinearSolvePardisoExt )
183
237
if ext === nothing
184
238
error (" PardisoJL requires that Pardiso is loaded, i.e. `using Pardiso`" )
@@ -188,7 +242,7 @@ struct PardisoJL{T1, T2} <: LinearSolve.SciMLLinearSolveAlgorithm
188
242
@assert T1 <: Union{Int, Nothing, ext.Pardiso.Solver}
189
243
@assert T2 <: Union{Int, Nothing, ext.Pardiso.MatrixType}
190
244
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 )
192
246
end
193
247
end
194
248
end
0 commit comments