Skip to content

Commit 8bc68d3

Browse files
authored
Merge pull request #6 from janbruedigam/adapt_to_dojo
Comply with Dojo
2 parents 4fbf8db + 2e94608 commit 8bc68d3

File tree

18 files changed

+146
-97
lines changed

18 files changed

+146
-97
lines changed

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ version = "0.2.0"
55

66
[deps]
77
Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
8+
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
89
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
910
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
1011

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ dimensions = [2; 3; 0; 1] # The dimension of row/column
2020

2121
system = System{Float64}(graph_matrix, dimensions; symmetric=false) # The resulting linear system. Set symmetric=true for symmetric systems
2222

23-
randomize!(system) # Randomize all system entries
23+
initialize!(system) # initialize! all system entries
2424
system.matrix_entries[1,2].value = rand(2,3) # Directly set the value of a matrix entry
2525
system.vector_entries[4].value = rand(1) # Directly set the value of a vector entry
2626

benchmark/example_benchmark.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ A[13,21] = A[21,13] = 1
7777
A[16,30] = A[30,16] = 1
7878
A[20,36] = A[36,20] = 1
7979

80-
function randomize_posdef!(system)
81-
randomize!(system,rand)
80+
function initialize!_posdef!(system)
81+
initialize!(system,rand)
8282
for i=1:size(A)[1]
8383
system.matrix_entries[i,i].value += 1000*I
8484
end
@@ -89,10 +89,10 @@ system = System{Float64}(A, ones(Int,size(A)[1])*3)
8989
systemldlt = System{Float64}(A, ones(Int,size(A)[1])*3, symmetric=true)
9090
systemllt = System{Float64}(A, ones(Int,size(A)[1])*3, symmetric=true)
9191

92-
SUITE["ldu"] = @benchmarkable ldu_solve!($system) samples=2 setup=(randomize!($system))
93-
SUITE["lu"] = @benchmarkable lu_solve!($system) samples=2 setup=(randomize!($system))
94-
SUITE["ldlt"] = @benchmarkable ldlt_solve!($systemldlt) samples=2 setup=(randomize!($systemldlt))
95-
SUITE["llt"] = @benchmarkable llt_solve!($systemllt) samples=2 setup=(randomize_posdef!($systemllt))
92+
SUITE["ldu"] = @benchmarkable ldu_solve!($system) samples=2 setup=(initialize!($system))
93+
SUITE["lu"] = @benchmarkable lu_solve!($system) samples=2 setup=(initialize!($system))
94+
SUITE["ldlt"] = @benchmarkable ldlt_solve!($systemldlt) samples=2 setup=(initialize!($systemldlt))
95+
SUITE["llt"] = @benchmarkable llt_solve!($systemllt) samples=2 setup=(initialize!_posdef!($systemllt))
9696

9797
# A = [
9898
# 0 1 1 1 1

src/GraphBasedSystems.jl

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
11
module GraphBasedSystems
22

3+
using LinearAlgebra
34
using SparseArrays
45
using StaticArrays
56
using Graphs
67

78

89
export System,
10+
Entry,
11+
912
full_matrix,
1013
full_vector,
11-
randomize!,
14+
initialize!,
15+
reset_inverse_diagonals!,
1216

1317
children,
1418
connections,
1519
parents,
1620

1721
ldu_solve!,
22+
ldu_factorization!,
23+
ldu_backsubstitution!,
1824
lu_solve!,
25+
lu_factorization!,
26+
lu_backsubstitution!,
1927
ldlt_solve!,
20-
llt_solve!
28+
ldlt_factorization!,
29+
ldlt_backsubstitution!,
30+
llt_solve!,
31+
llt_factorization!,
32+
llt_backsubstitution!
2133

2234

2335
include(joinpath("util", "custom_static.jl"))
@@ -26,6 +38,9 @@ include(joinpath("system", "entry.jl"))
2638
include(joinpath("system", "system.jl"))
2739
include(joinpath("system", "setup_functions.jl"))
2840

41+
include(joinpath("system", "interface.jl"))
42+
include(joinpath("system", "dense.jl"))
43+
2944
include(joinpath("solvers", "lu.jl"))
3045
include(joinpath("solvers", "llt.jl"))
3146
include(joinpath("solvers", "ldlt.jl"))

src/solvers/ldlt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ function ldlt_factorization!(system::System)
2424
acyclic_children = system.acyclic_children
2525
cyclic_children = system.cyclic_children
2626

27+
reset_inverse_diagonals!(system)
28+
2729
for v in system.dfs_list
2830
for c in acyclic_children[v]
2931
ldlt_factorization_acyclic!(matrix_entries[v,v], matrix_entries[v,c], matrix_entries[c,c], diagonal_inverses[c])
@@ -83,7 +85,6 @@ function ldlt_backsubstitution!(system::System)
8385
end
8486

8587
function ldlt_solve!(system::System)
86-
reset_inverse_diagonals!(system)
8788
ldlt_factorization!(system)
8889
ldlt_backsubstitution!(system)
8990
return

src/solvers/ldu.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ function ldu_factorization!(system::System)
2424
acyclic_children = system.acyclic_children
2525
cyclic_children = system.cyclic_children
2626

27+
reset_inverse_diagonals!(system)
28+
2729
for v in system.dfs_list
2830
for c in acyclic_children[v]
2931
ldu_factorization_acyclic!(matrix_entries[v,v], matrix_entries[v,c], matrix_entries[c,c], matrix_entries[c,v], diagonal_inverses[c])
@@ -84,7 +86,6 @@ function ldu_backsubstitution!(system::System)
8486
end
8587

8688
function ldu_solve!(system::System)
87-
reset_inverse_diagonals!(system)
8889
ldu_factorization!(system)
8990
ldu_backsubstitution!(system)
9091
return

src/solvers/llt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ function llt_factorization!(system::System)
2828
acyclic_children = system.acyclic_children
2929
cyclic_children = system.cyclic_children
3030

31+
reset_inverse_diagonals!(system)
32+
3133
for v in system.dfs_list
3234
for c in acyclic_children[v]
3335
llt_factorization_acyclic!(matrix_entries[v,v], matrix_entries[v,c], matrix_entries[c,c], diagonal_inverses[c])
@@ -92,7 +94,6 @@ function llt_backsubstitution!(system::System)
9294
end
9395

9496
function llt_solve!(system::System)
95-
reset_inverse_diagonals!(system)
9697
llt_factorization!(system)
9798
llt_backsubstitution!(system)
9899
return

src/solvers/lu.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ function lu_factorization!(system::System)
2323
acyclic_children = system.acyclic_children
2424
cyclic_children = system.cyclic_children
2525

26+
reset_inverse_diagonals!(system)
27+
2628
for v in system.dfs_list
2729
for c in acyclic_children[v]
2830
lu_factorization_acyclic!(matrix_entries[v,v], matrix_entries[v,c], matrix_entries[c,c], matrix_entries[c,v], diagonal_inverses[c])
@@ -83,7 +85,6 @@ function lu_backsubstitution!(system::System)
8385
end
8486

8587
function lu_solve!(system::System)
86-
reset_inverse_diagonals!(system)
8788
lu_factorization!(system)
8889
lu_backsubstitution!(system)
8990
return

src/system/dense.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
full_matrix(system::System) = full_matrix(system.matrix_entries, issymmetric(system), system.dims, system.dims)
2+
# There probably exists a smarter way of getting the dense matrix from the spares one
3+
function full_matrix(matrix_entries::SparseMatrixCSC, symmetric::Bool, dimensions_rows, dimensions_cols)
4+
range_dict_rows = ranges(dimensions_rows)
5+
range_dict_cols = ranges(dimensions_cols)
6+
A = zeros(sum(dimensions_rows), sum(dimensions_cols))
7+
8+
for (i,row) in enumerate(matrix_entries.rowval)
9+
col = findfirst(x -> i<x, matrix_entries.colptr)-1
10+
A[range_dict_rows[row],range_dict_cols[col]] = matrix_entries[row,col].value
11+
if symmetric && col != row
12+
A[range_dict_cols[col],range_dict_rows[row]] = matrix_entries[row,col].value'
13+
end
14+
end
15+
return A
16+
end
17+
18+
full_vector(system::System) = full_vector(system.vector_entries, system.dims)
19+
full_vector(vector_entries::AbstractVector, dimensions_rows) = vcat([getfield(vector_entries[i],:value) for i=1:size(dimensions_rows)[1]]...)

src/system/entry.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ function Base.zero(::Type{Entry{ET}}) where ET
2525
return Entry{ET.parameters[2]}(dims...)
2626
end
2727
function Base.zero(::Type{Entry})
28-
return 0
28+
return nothing
2929
end
3030

31-
function randomize!(entry::Entry, rand_function = randn)
31+
function initialize!(entry::Entry, init_function = randn)
3232
value = entry.value
33-
entry.value = rand_function(eltype(value), size(value))
33+
entry.value = init_function(eltype(value), size(value))
3434
end

0 commit comments

Comments
 (0)