Skip to content

Commit 4f1cf1c

Browse files
committed
Support block assembly with different block structures for test and trial
1 parent 5dc79f2 commit 4f1cf1c

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

src/MultiField.jl

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -446,32 +446,37 @@ end
446446

447447
# BlockSparseMatrixAssemblers
448448

449-
const DistributedBlockSparseMatrixAssembler{NB,NV,SB,P} =
450-
MultiField.BlockSparseMatrixAssembler{NB,NV,SB,P,<:DistributedSparseMatrixAssembler}
449+
const DistributedBlockSparseMatrixAssembler{R,C} =
450+
MultiField.BlockSparseMatrixAssembler{R,C,<:AbstractMatrix{<:DistributedSparseMatrixAssembler}}
451451

452452
function FESpaces.SparseMatrixAssembler(
453453
local_mat_type,
454454
local_vec_type,
455-
trial::DistributedMultiFieldFESpace{<:BlockMultiFieldStyle{NB,SB,P}},
456-
test::DistributedMultiFieldFESpace{<:BlockMultiFieldStyle{NB,SB,P}},
457-
par_strategy=SubAssembledRows()) where {NB,SB,P}
455+
trial::DistributedMultiFieldFESpace{<:BlockMultiFieldStyle},
456+
test::DistributedMultiFieldFESpace{<:BlockMultiFieldStyle},
457+
par_strategy=SubAssembledRows()
458+
)
459+
NBr, SBr, Pr = MultiField.get_block_parameters(MultiFieldStyle(test))
460+
NBc, SBc, Pc = MultiField.get_block_parameters(MultiFieldStyle(trial))
458461

459-
block_idx = CartesianIndices((NB,NB))
460462
block_rows = blocks(test.gids)
461463
block_cols = blocks(trial.gids)
462-
block_assemblers = map(block_idx) do idx
463-
rows = block_rows[idx[1]]; cols = block_cols[idx[2]]
464-
return SparseMatrixAssembler(local_mat_type,local_vec_type,rows,cols,par_strategy)
464+
block_assemblers = map(CartesianIndices((NBr,NBc))) do idx
465+
rows = block_rows[idx[1]]
466+
cols = block_cols[idx[2]]
467+
SparseMatrixAssembler(
468+
local_mat_type,local_vec_type,rows,cols,par_strategy
469+
)
465470
end
466471

467-
NV = length(P)
468-
return MultiField.BlockSparseMatrixAssembler{NB,NV,SB,P}(block_assemblers)
472+
R, C = (NBr,SBr,Pr), (NBc,SBc,Pc)
473+
return MultiField.BlockSparseMatrixAssembler{R,C}(block_assemblers)
469474
end
470475

471-
function local_views(a::MultiField.BlockSparseMatrixAssembler{NB,NV,SB,P}) where {NB,NV,SB,P}
476+
function local_views(a::MultiField.BlockSparseMatrixAssembler{R,C}) where {R,C}
472477
assems = a.block_assemblers
473478
array = to_parray_of_arrays(map(local_views,assems))
474-
return map(MultiField.BlockSparseMatrixAssembler{NB,NV,SB,P},array)
479+
return map(MultiField.BlockSparseMatrixAssembler{R,C},array)
475480
end
476481

477482
function local_views(a::MatrixBlock,rows,cols)

test/BlockSparseMatrixAssemblersTests.jl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,4 @@ function main(distribute,parts)
146146
_main(2,BlockMultiFieldStyle(),(biform4,liform4),D,D)
147147
end
148148

149-
main(DebugArray, (2,2))
150-
151149
end

0 commit comments

Comments
 (0)