Skip to content

Commit 70981a3

Browse files
authored
Merge pull request #10 from jkrch/master
Added parallel jacobi
2 parents 0c48302 + 1bd53b2 commit 70981a3

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

src/ExtendableSparse.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ include("preconditioners.jl")
1010
include("sprand.jl")
1111

1212
export SparseMatrixLNK,ExtendableSparseMatrix,flush!,nnz, sprand!,sprand_sdd!, fdrand,fdrand!
13-
export JacobiPreconditioner, ILU0Preconditioner, updateindex!
13+
export JacobiPreconditioner, ILU0Preconditioner, ParallelJacobiPreconditioner, updateindex!
1414

1515
export colptrs
1616
end # module

src/parallel_jacobi.jl

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
struct ParallelJacobiPreconditioner{Tv, Ti} <: AbstractExtendablePreconditioner{Tv,Ti}
2+
extmatrix::ExtendableSparseMatrix{Tv,Ti}
3+
invdiag::Array{Tv,1}
4+
end
5+
6+
function update!(precon::ParallelJacobiPreconditioner)
7+
cscmatrix=precon.extmatrix.cscmatrix
8+
invdiag=precon.invdiag
9+
n=cscmatrix.n
10+
Threads.@threads for i=1:n
11+
@inbounds invdiag[i]=1.0/cscmatrix[i,i]
12+
end
13+
precon
14+
end
15+
16+
function ParallelJacobiPreconditioner(extmatrix::ExtendableSparseMatrix{Tv,Ti}) where {Tv,Ti}
17+
@assert size(extmatrix,1)==size(extmatrix,2)
18+
flush!(extmatrix)
19+
invdiag=Array{Tv,1}(undef,extmatrix.cscmatrix.n)
20+
precon=JacobiPreconditioner{Tv, Ti}(extmatrix,invdiag)
21+
update!(precon)
22+
end
23+
24+
ParallelJacobiPreconditioner(cscmatrix::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti}=ParallelJacobiPreconditioner(ExtendableSparseMatrix(cscmatrix))
25+
26+
27+
function LinearAlgebra.ldiv!(u::AbstractArray{T,1} where T, precon::ParallelJacobiPreconditioner, v::AbstractArray{T,1} where T)
28+
invdiag=precon.invdiag
29+
n=length(invdiag)
30+
Threads.@threads for i=1:n
31+
@inbounds u[i]=invdiag[i]*v[i]
32+
end
33+
end
34+
35+
function LinearAlgebra.ldiv!(precon::ParallelJacobiPreconditioner, v::AbstractArray{T,1} where T)
36+
ldiv!(v, precon, v)
37+
end

src/preconditioners.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ timestamp!(precon::AbstractExtendablePreconditioner)= precon.pattern_timestamp=t
2525

2626
include("jacobi.jl")
2727
include("ilu0.jl")
28+
29+
include("parallel_jacobi.jl")
2830

0 commit comments

Comments
 (0)