Skip to content

Commit 3e38305

Browse files
committed
Set default matrix type during construction. This allows the user to overwrite it.
1 parent 9b5c0ce commit 3e38305

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

src/pardiso_lu.jl

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
abstract type AbstractPardisoLU{Tv,Ti} <: AbstractLUFactorization{Tv,Ti} end
22

3-
43
mutable struct PardisoLU{Tv, Ti} <: AbstractPardisoLU{Tv,Ti}
54
A::Union{ExtendableSparseMatrix{Tv,Ti},Nothing}
65
ps::Pardiso.PardisoSolver
76
phash::UInt64
87
end
9-
PardisoLU{Tv,Ti}() where {Tv,Ti} =PardisoLU{Tv,Ti}(nothing,Pardiso.PardisoSolver(),0)
108

9+
function PardisoLU{Tv,Ti}() where {Tv,Ti}
10+
fact=PardisoLU{Tv,Ti}(nothing,Pardiso.PardisoSolver(),0)
11+
set_default_matrixtype!(fact)
12+
end
1113

1214
"""
1315
```
@@ -27,15 +29,22 @@ plu=PardisoLU()
2729
Pardiso.set_iparm!(plu.ps,5,13.0)
2830
```
2931
"""
30-
PardisoLU(;valuetype::Type=Float64, indextype::Type=Int64)=PardisoLU{valuetype,indextype}(nothing,Pardiso.PardisoSolver(),0)
32+
PardisoLU(;valuetype::Type=Float64, indextype::Type=Int64)=PardisoLU{valuetype,indextype}()
33+
3134

3235

36+
#############################################################################################
3337
mutable struct MKLPardisoLU{Tv, Ti} <: AbstractPardisoLU{Tv,Ti}
3438
A::Union{ExtendableSparseMatrix{Tv,Ti},Nothing}
3539
ps::Pardiso.MKLPardisoSolver
3640
phash::UInt64
3741
end
3842

43+
function MKLPardisoLU{Tv,Ti}() where {Tv,Ti}
44+
fact=MKLPardisoLU{Tv,Ti}(nothing,Pardiso.MKLPardisoSolver(),0)
45+
set_default_matrixtype!(fact)
46+
end
47+
3948

4049
"""
4150
```
@@ -55,9 +64,19 @@ plu=MKLPardisoLU()
5564
Pardiso.set_iparm!(plu.ps,5,13.0)
5665
```
5766
"""
58-
MKLPardisoLU(;valuetype::Type=Float64, indextype::Type=Int64)=MKLPardisoLU{valuetype,indextype}(nothing,Pardiso.MKLPardisoSolver(),0)
67+
MKLPardisoLU(;valuetype::Type=Float64, indextype::Type=Int64)=MKLPardisoLU{valuetype,indextype}()
5968

6069

70+
##########################################################################################
71+
function set_default_matrixtype!(fact::AbstractPardisoLU{Tv,Ti}) where {Tv, Ti}
72+
if Tv<:Complex
73+
Pardiso.set_matrixtype!(fact.ps,Pardiso.COMPLEX_NONSYM)
74+
else
75+
Pardiso.set_matrixtype!(fact.ps,Pardiso.REAL_NONSYM)
76+
end
77+
fact
78+
end
79+
6180
function update!(lufact::AbstractPardisoLU{Tv,Ti}) where {Tv, Ti}
6281
ps=lufact.ps
6382
flush!(lufact.A)
@@ -66,12 +85,6 @@ function update!(lufact::AbstractPardisoLU{Tv,Ti}) where {Tv, Ti}
6685
Pardiso.pardisoinit(ps)
6786
Pardiso.set_phase!(ps, Pardiso.RELEASE_ALL)
6887
Pardiso.pardiso(ps, Tv[], Acsc, Tv[])
69-
70-
if Tv<:Complex
71-
Pardiso.set_matrixtype!(ps,Pardiso.COMPLEX_NONSYM)
72-
else
73-
Pardiso.set_matrixtype!(ps,Pardiso.REAL_NONSYM)
74-
end
7588
Pardiso.set_phase!(ps, Pardiso.ANALYSIS_NUM_FACT)
7689
lufact.phash=lufact.A.phash
7790
else

0 commit comments

Comments
 (0)