Closed JordiManyer closed 1 year ago
To temporarily resolve the PRange situation for ghosts, I am now dispatching assembly towards a worst algorithm that does not filter out ghost cols that are not touched. This ensures all ghost columns are present in the final PRange for all blocks.
However, this is a temporary fix to a problem that needs to be solved more elegantly. The solution, we believe, requires splitting the assembly methods _fa_create_from_nz_with_callback
into functional blocks, so that we can consolidate ghosts between all blocks before assembling. This will be left until after the release of GridapDistributed v0.3, since some of the low-level functionality will change after that. Until this is fixed, block-assembled matrices will potentially be less efficient (since unnecessary ghosts values will be communicated at each matrix-vector product).
The fix is in function _fa_create_from_nz_temporary_fix
, and only works for FullyAssembledRows
.
I am closing this, we will be merging after the new release, from the new PR #124
This PR implements block assemblers, which allow to assemble a MultiFieldFESpace block-wise. It is the distributed counterpart of this other PR.
Instead of a sparse monolithic matrix and vectors, this assembler leverages BlockArrays.jl to produce equivalent block-partitioned sparse matrices and vectors. This is meant to ease the development of block preconditioners and solvers.
TODO:
PRanges
. This complicates the allocation of a single column vector for the whole matrix, since ghosts do not match when multiplying with different blocks in the same block column. We will have to homogenize the row/col ghost values for all blocks in the same row/column by comparing them and keeping the biggest set.Other pains/doubts about the implementation can be found in this issue.