Skip to content

Commit 5b2bf57

Browse files
committed
placeholders
1 parent e99d699 commit 5b2bf57

File tree

3 files changed

+70
-4
lines changed

3 files changed

+70
-4
lines changed

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153"
99
Krylov = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7"
1010
KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77"
1111
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
12+
Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2"
1213
RecursiveFactorization = "f2c3362d-daeb-58d1-803e-2bc74f2840b4"
1314
Reexport = "189a3867-3050-52da-a836-e630ba90ab69"
15+
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
1416
SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462"
1517
Setfield = "efcf1570-3423-57d1-acb7-fd33fddbac46"
1618
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

src/LinearSolve.jl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ using SparseArrays
1010
using SciMLBase: AbstractDiffEqOperator, AbstractLinearAlgorithm
1111
using Setfield
1212
using UnPack
13+
using Requires
1314

1415
# wrap
1516
import Krylov
16-
import KrylovKit
17+
import KrylovKit # TODO
1718
import IterativeSolvers
19+
import Pardiso
1820

1921
using Reexport
2022
@reexport using SciMLBase
@@ -38,14 +40,16 @@ function __init__()
3840
else
3941
IS_OPENBLAS[] = occursin("openblas", BLAS.get_config().loaded_libs[1].libname)
4042
end
43+
44+
@require Pardiso="46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" PardisoJL, PardisoJL_Default
4145
end
4246

4347
export LUFactorization, SVDFactorization, QRFactorization, GenericFactorization,
4448
RFLUFactorizaation
45-
export KrylovJL, KrylovJL_CG, KrylovJL_GMRES, KrylovJL_BICGSTAB,
46-
KrylovJL_MINRES,
49+
export KrylovJL, KrylovJL_CG, KrylovJL_GMRES, KrylovJL_BICGSTAB, KrylovJL_MINRES,
4750
IterativeSolversJL, IterativeSolversJL_CG, IterativeSolversJL_GMRES,
48-
IterativeSolversJL_BICGSTAB, IterativeSolversJL_MINRES
51+
IterativeSolversJL_BICGSTAB, IterativeSolversJL_MINRES,
52+
PardisoJL, PardisoJL_Default
4953
export DefaultLinSolve
5054

5155
end

src/wrappers.jl

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,3 +297,63 @@ function SciMLBase.solve(cache::LinearCache, alg::IterativeSolversJL; kwargs...)
297297

298298
return cache.u
299299
end
300+
301+
## Paradiso
302+
303+
struct PardisoJL{F,S,P,A,K} <: SciMLLinearSolveAlgorithm
304+
alg_selector::F
305+
schur::S
306+
parallel::P
307+
args::A
308+
kwargs::K
309+
end
310+
311+
function PardisoJL(args...; alg_selector=:default_alg,
312+
schur=:smart,
313+
parallel=:fancy,
314+
kwargs...)
315+
316+
return PardisoJL(alg_selector, schur, parallel,
317+
args, kwargs)
318+
end
319+
320+
PardisoJL_Default(args...; kwargs...) = PardisoJL(args...;
321+
alg_selector=:this_one,
322+
kwargs...)
323+
324+
function init_cacheval(alg::PardisoJL, cache::LinearCache)
325+
326+
solver =
327+
if alg.alg_selector == :default_alg
328+
MKLPardisoSolver()
329+
elseif alg_selector == :this_one
330+
PardisoSolver()
331+
else
332+
PardisoSolver()
333+
end
334+
335+
alg.verbose && set_msglvl!(solver, Pardiso.MESSAGE_LEVEL_ON)
336+
337+
return solver
338+
end
339+
340+
function SciMLBase.solve(cache::LinearCache, alg::PardisoJL; kwargs...)
341+
@unpack cacheval, A, b, u = cache
342+
343+
if cache.isfresh
344+
solver = init_cacheval(alg, cache)
345+
cache = set_cacheval(cache, solver)
346+
end
347+
348+
abstol = cache.abstol
349+
reltol = cache.reltol
350+
verbose = cache.verbose
351+
352+
kwargs = (abstol=abstol, reltol=reltol,
353+
alg.kwargs...)
354+
355+
Pardiso.solve!(cacheval, u, A, b)
356+
357+
return cache.u
358+
end
359+

0 commit comments

Comments
 (0)