@@ -11,7 +11,7 @@ PardisoLU{Tv,Ti}() where {Tv,Ti} =PardisoLU{Tv,Ti}(nothing,Pardiso.PardisoSolver
1111
1212"""
1313```
14- PardisoLU()
14+ PardisoLU(;valuetype=Float64, indextype=Int64 )
1515PardisoLU(matrix)
1616```
1717
@@ -27,20 +27,19 @@ plu=PardisoLU()
2727Pardiso.set_iparm!(plu.ps,5,13.0)
2828```
2929"""
30- PardisoLU ()= PardisoLU {Float64,Int64 } (nothing ,Pardiso. PardisoSolver (),0 )
30+ PardisoLU (;valuetype :: Type = Float64, indextype :: Type = Int64 )= PardisoLU {valuetype,indextype } (nothing ,Pardiso. PardisoSolver (),0 )
3131
3232
3333mutable struct MKLPardisoLU{Tv, Ti} <: AbstractPardisoLU{Tv,Ti}
3434 A:: Union{ExtendableSparseMatrix{Tv,Ti},Nothing}
3535 ps:: Pardiso.MKLPardisoSolver
3636 phash:: UInt64
3737end
38- MKLPardisoLU {Tv,Ti} () where {Tv,Ti} = MKLPardisoLU {Tv,Ti} (nothing ,Pardiso. MKLPardisoSolver (),0 )
3938
4039
4140"""
4241```
43- MKLPardisoLU()
42+ MKLPardisoLU(;valuetype=Float64, indextype=Int64 )
4443MKLPardisoLU(matrix)
4544```
4645
@@ -56,40 +55,29 @@ plu=MKLPardisoLU()
5655Pardiso.set_iparm!(plu.ps,5,13.0)
5756```
5857"""
59- MKLPardisoLU ()= MKLPardisoLU {Float64,Int64} (nothing ,Pardiso. MKLPardisoSolver (),0 )
60-
61-
62- function Pardiso. set_matrixtype! (ps, A:: ExtendableSparseMatrix )
63- Acsc= A. cscmatrix
64-
65- if eltype (Acsc)== Float64 && issymmetric (Acsc)
66- Pardiso. set_matrixtype! (ps, Pardiso. REAL_SYM)
67- elseif eltype (Acsc)== Float64
68- Pardiso. set_matrixtype! (ps, Pardiso. REAL_NONSYM)
69- elseif eltype (Acsc)== Complex64 && ishermitian (Acsc)
70- Pardiso. set_matrixtype! (ps, Pardiso. COMPLEX_HERM_INDEF)
71- elseif eltype (Acsc)== Complex64
72- Pardiso. set_matrixtype! (ps, Pardiso. COMPLEX_NONYSYM)
73- else
74- error (" unable to detect matrix type" )
75- end
76- end
58+ MKLPardisoLU (;valuetype:: Type = Float64, indextype:: Type = Int64)= MKLPardisoLU {valuetype,indextype} (nothing ,Pardiso. MKLPardisoSolver (),0 )
7759
7860
7961function update! (lufact:: AbstractPardisoLU{Tv,Ti} ) where {Tv, Ti}
8062 ps= lufact. ps
8163 flush! (lufact. A)
8264 Acsc= lufact. A. cscmatrix
83- if lufact. phash!= lufact. A. phash
65+ if lufact. phash!= lufact. A. phash
8466 Pardiso. pardisoinit (ps)
8567 Pardiso. set_phase! (ps, Pardiso. RELEASE_ALL)
8668 Pardiso. pardiso (ps, Tv[], Acsc, Tv[])
87- Pardiso. set_matrixtype! (ps,lufact. A)
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
8875 Pardiso. set_phase! (ps, Pardiso. ANALYSIS_NUM_FACT)
8976 lufact. phash= lufact. A. phash
9077 else
9178 Pardiso. set_phase! (ps, Pardiso. NUM_FACT)
9279 end
80+ Pardiso. fix_iparm! (ps, :N )
9381 Pardiso. pardiso (ps, Tv[], Acsc, Tv[])
9482 lufact
9583end
0 commit comments