From b54fd7be6e7ea00001a0959b32a6c40a389897d5 Mon Sep 17 00:00:00 2001 From: Keita Nakamura Date: Mon, 5 Aug 2024 22:22:39 +0900 Subject: [PATCH] Modify arguments for create_sparse_matrix --- docs/literate/examples/dam_break.jl | 4 ++-- docs/literate/examples/implicit_jacobian_based.jl | 2 +- src/implicit.jl | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/literate/examples/dam_break.jl b/docs/literate/examples/dam_break.jl index 47743509..2abe762a 100644 --- a/docs/literate/examples/dam_break.jl +++ b/docs/literate/examples/dam_break.jl @@ -99,11 +99,11 @@ function main(transfer::Transfer = FLIP(1.0)) update!(mp, xc, grid.X) end - ## BlockSpace for threaded computation + ## BlockSpace for multithreading blockspace = BlockSpace(grid.X) ## Sparse matrix - A = create_sparse_matrix(Vec{3}, it, grid.X) + A = create_sparse_matrix(it, grid.X; ndofs=3) ## Output outdir = mkpath(joinpath("output", "dam_break")) diff --git a/docs/literate/examples/implicit_jacobian_based.jl b/docs/literate/examples/implicit_jacobian_based.jl index 4d13a70c..7f21b7cc 100644 --- a/docs/literate/examples/implicit_jacobian_based.jl +++ b/docs/literate/examples/implicit_jacobian_based.jl @@ -77,7 +77,7 @@ function main() end ## Sparse matrix - A = create_sparse_matrix(Vec{3}, it, grid.X) + A = create_sparse_matrix(it, grid.X) ## Outputs outdir = mkpath(joinpath("output", "implicit_jacobian_based")) diff --git a/src/implicit.jl b/src/implicit.jl index eff0d96e..76fdb9cf 100644 --- a/src/implicit.jl +++ b/src/implicit.jl @@ -24,22 +24,22 @@ function (dofmap::DofMap{dim, N})(A::AbstractArray{T, dim}) where {dim, N, T <: @inbounds view(A′, indices′) end -function create_sparse_matrix(::Type{Vec{dim}}, it::Interpolation, mesh::AbstractMesh) where {dim} - create_sparse_matrix(Vec{dim, Float64}, it, mesh) +function create_sparse_matrix(it::Interpolation, mesh::AbstractMesh{dim}; ndofs::Int = dim) where {dim} + create_sparse_matrix(Float64, it, mesh; ndofs) end -function create_sparse_matrix(::Type{Vec{dim, T}}, it::Interpolation, mesh::CartesianMesh) where {dim, T} +function create_sparse_matrix(::Type{T}, it::Interpolation, mesh::CartesianMesh{dim}; ndofs::Int = dim) where {T, dim} dims = size(mesh) - spy = falses(dim, prod(dims), dim, prod(dims)) + spy = falses(ndofs, prod(dims), ndofs, prod(dims)) LI = LinearIndices(dims) mesh = CartesianMesh(float(T), 1, map(d->(0,d-1), dims)...) for i in eachindex(mesh) unit = gridspan(it) * oneunit(i) indices = intersect((i-unit):(i+unit), eachindex(mesh)) for j in indices - spy[1:dim, LI[i], 1:dim, LI[j]] .= true + spy[1:ndofs, LI[i], 1:ndofs, LI[j]] .= true end end - create_sparse_matrix(T, reshape(spy, dim*prod(dims), dim*prod(dims))) + create_sparse_matrix(T, reshape(spy, ndofs*prod(dims), ndofs*prod(dims))) end function create_sparse_matrix(::Type{T}, spy::AbstractMatrix{Bool}) where {T}