@@ -103,7 +103,7 @@ All values default to `nothing` and the solver internally determines the values
103
103
given the input types, and these keyword arguments are only for overriding the
104
104
default handling process. This should not be required by most users.
105
105
"""
106
- MKLPardisoFactorize (; kwargs... ) = PardisoJL (; solver_type = 0 , kwargs... )
106
+ MKLPardisoFactorize (; kwargs... ) = PardisoJL (; vendor = :MKL , solver_type = 0 , kwargs... )
107
107
108
108
"""
109
109
```julia
@@ -126,18 +126,41 @@ All values default to `nothing` and the solver internally determines the values
126
126
given the input types, and these keyword arguments are only for overriding the
127
127
default handling process. This should not be required by most users.
128
128
"""
129
- MKLPardisoIterate (; kwargs... ) = PardisoJL (; solver_type = 1 , kwargs... )
129
+ MKLPardisoIterate (; kwargs... ) = PardisoJL (; vendor= :MKL , solver_type = 1 , kwargs... )
130
+
130
131
131
132
"""
132
133
```julia
133
- PardisoJL(; nprocs::Union{Int, Nothing} = nothing,
134
- solver_type = nothing,
134
+ PanuaPardisoFactorize(; nprocs::Union{Int, Nothing} = nothing,
135
+ matrix_type = nothing,
136
+ iparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
137
+ dparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing)
138
+ ```
139
+
140
+ A sparse factorization method using Panua Pardiso.
141
+
142
+ !!! note
143
+
144
+ Using this solver requires adding the package Pardiso.jl, i.e. `using Pardiso`
145
+
146
+ ## Keyword Arguments
147
+
148
+ For the definition of the keyword arguments, see the Pardiso.jl documentation.
149
+ All values default to `nothing` and the solver internally determines the values
150
+ given the input types, and these keyword arguments are only for overriding the
151
+ default handling process. This should not be required by most users.
152
+ """
153
+ PanuaPardisoFactorize (; kwargs... ) = PardisoJL (; vendor= :Panua , solver_type = 0 , kwargs... )
154
+
155
+ """
156
+ ```julia
157
+ PanuaPardisoIterate(; nprocs::Union{Int, Nothing} = nothing,
135
158
matrix_type = nothing,
136
159
iparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
137
160
dparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing)
138
161
```
139
162
140
- A generic method using MKL Pardiso. Specifying `solver_type` is required .
163
+ A mixed factorization+iterative method using Panua Pardiso.
141
164
142
165
!!! note
143
166
@@ -150,18 +173,50 @@ All values default to `nothing` and the solver internally determines the values
150
173
given the input types, and these keyword arguments are only for overriding the
151
174
default handling process. This should not be required by most users.
152
175
"""
176
+ PanuaPardisoIterate (; kwargs... ) = PardisoJL (; vendor= :Panua , solver_type = 1 , kwargs... )
177
+
178
+
179
+ """
180
+ ```julia
181
+ PardisoJL(; nprocs::Union{Int, Nothing} = nothing,
182
+ solver_type = nothing,
183
+ matrix_type = nothing,
184
+ iparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
185
+ dparm::Union{Vector{Tuple{Int, Int}}, Nothing} = nothing,
186
+ vendor::Union{Symbol,Nothing} = nothing
187
+ )
188
+ ```
189
+
190
+ A generic method using Pardiso. Specifying `solver_type` is required.
191
+
192
+ !!! note
193
+
194
+ Using this solver requires adding the package Pardiso.jl, i.e. `using Pardiso`
195
+
196
+ ## Keyword Arguments
197
+
198
+ The `vendor` keyword allows to choose between Panua pardiso (former pardiso-project.org; `vendor=:Panua`)
199
+ and MKL Pardiso (`vendor=:MKL`). If `vendor==nothing`, Panua pardiso is preferred over MKL Pardiso.
200
+
201
+ For the definition of the other keyword arguments, see the Pardiso.jl documentation.
202
+ All values default to `nothing` and the solver internally determines the values
203
+ given the input types, and these keyword arguments are only for overriding the
204
+ default handling process. This should not be required by most users.
205
+ """
153
206
struct PardisoJL{T1, T2} <: LinearSolve.SciMLLinearSolveAlgorithm
154
207
nprocs:: Union{Int, Nothing}
155
208
solver_type:: T1
156
209
matrix_type:: T2
157
210
iparm:: Union{Vector{Tuple{Int, Int}}, Nothing}
158
211
dparm:: Union{Vector{Tuple{Int, Int}}, Nothing}
212
+ vendor:: Union{Symbol,Nothing}
159
213
160
214
function PardisoJL (; nprocs:: Union{Int, Nothing} = nothing ,
161
215
solver_type = nothing ,
162
216
matrix_type = nothing ,
163
217
iparm:: Union{Vector{Tuple{Int, Int}}, Nothing} = nothing ,
164
- dparm:: Union{Vector{Tuple{Int, Int}}, Nothing} = nothing )
218
+ dparm:: Union{Vector{Tuple{Int, Int}}, Nothing} = nothing ,
219
+ vendor:: Union{Symbol,Nothing} = nothing )
165
220
ext = Base. get_extension (@__MODULE__ , :LinearSolvePardisoExt )
166
221
if ext === nothing
167
222
error (" PardisoJL requires that Pardiso is loaded, i.e. `using Pardiso`" )
@@ -170,7 +225,7 @@ struct PardisoJL{T1, T2} <: LinearSolve.SciMLLinearSolveAlgorithm
170
225
T2 = typeof (matrix_type)
171
226
@assert T1 <: Union{Int, Nothing, ext.Pardiso.Solver}
172
227
@assert T2 <: Union{Int, Nothing, ext.Pardiso.MatrixType}
173
- return new {T1, T2} (nprocs, solver_type, matrix_type, iparm, dparm)
228
+ return new {T1, T2} (nprocs, solver_type, matrix_type, iparm, dparm, vendor )
174
229
end
175
230
end
176
231
end
0 commit comments