Skip to content

Commit f6519f4

Browse files
authored
Merge pull request #74 from WIAS-PDELib/feature/coupling
Use sparse vector in periodic coupling
2 parents 38e1a73 + 37c590e commit f6519f4

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ExtendableFEM"
22
uuid = "a722555e-65e0-4074-a036-ca7ce79a4aed"
3-
version = "1.3.0"
3+
version = "1.3.1"
44
authors = ["Christian Merdon <merdon@wias-berlin.de>", "Patrick Jaap <patrick.jaap@wias-berlin.de>"]
55

66
[deps]
@@ -29,7 +29,7 @@ DiffResults = "1"
2929
DocStringExtensions = "0.8,0.9"
3030
ExampleJuggler = "2.2.1"
3131
ExplicitImports = "1"
32-
ExtendableFEMBase = "1"
32+
ExtendableFEMBase = "1.3.0"
3333
ExtendableGrids = "1.10.3"
3434
ExtendableSparse = "1.5.3"
3535
ForwardDiff = "0.10.35,1"

src/ExtendableFEM.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ using LinearSolve: LinearSolve, LinearProblem, UMFPACKFactorization, deleteat!,
6767
init, solve
6868
using Printf: Printf, @printf, @sprintf
6969
using SparseArrays: SparseArrays, AbstractSparseArray, SparseMatrixCSC, findnz, nnz,
70-
nzrange, rowvals, sparse
70+
nzrange, rowvals, sparse, SparseVector
7171
using SparseDiffTools: SparseDiffTools, ForwardColorJacCache,
7272
forwarddiff_color_jacobian!, matrix_colors
7373
using Symbolics: Symbolics

src/helper_functions.jl

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,9 @@ function _get_periodic_coupling_matrix(
244244
# to be sure
245245
fill!(fe_vector.entries, 0.0)
246246

247-
# FE vector for interpolation
248-
fe_vector_target = FEVector(FES)
247+
# FE target vector for interpolation with sparse entries
248+
fe_vector_target = FEVector(FES; entries = SparseVector{Float64, Int64}(FES.ndofs, Int64[], Float64[]))
249+
249250

250251
# resulting sparse matrix
251252
n = length(fe_vector.entries)
@@ -358,6 +359,13 @@ function _get_periodic_coupling_matrix(
358359
append!(searchareas, view(faces_to, 1:nfaces_to))
359360
end
360361

362+
# throw error if no search area had been found for a bface
363+
for source in 1:num_sources(searchareas)
364+
if num_targets(searchareas, source) == 0
365+
throw("bface $source has no valid search area on the opposite side of the grid. Are from/to regions and give_opposite! function correct?")
366+
end
367+
end
368+
361369
# loop over boundary face indices: we need this index for dofs_on_boundary
362370
for i_boundary_face in 1:n_boundary_faces
363371

@@ -372,7 +380,8 @@ function _get_periodic_coupling_matrix(
372380
end
373381

374382
# reset
375-
fill!(fe_vector_target.entries, 0.0)
383+
empty!(fe_vector_target.entries.nzind)
384+
empty!(fe_vector_target.entries.nzval)
376385

377386
# activate one entry
378387
fe_vector.entries[local_dof] = 1.0
@@ -394,7 +403,7 @@ function _get_periodic_coupling_matrix(
394403
fe_vector.entries[local_dof] = 0.0
395404

396405
# set entries
397-
for (i, target_entry) in enumerate(fe_vector_target.entries)
406+
for (i, target_entry) in zip(findnz(fe_vector_target.entries)...)
398407
if abs(target_entry) > sparsity_tol
399408
result[local_dof, i] = target_entry
400409
end

0 commit comments

Comments
 (0)