Updating to PartitionedArrays v0.5 #157
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We have been detached from the development of PartitionedArrays for a while, currently stuck at v0.3. This is also related to #137 .
This PR is an update to PartitionedArrays v0.5, with a substantial rework of the re-assembly process... This comes with several upsides, such as
Change Log
LocalIndicesWithVariableBlockSize
. We were already doing this (so our numbering strategy does not change), but it's now explicit. This has two advantages:LocalIndicesWithVariableBlockSize
.scan
operation). This is quite handy for assembly, since expanding the ghost ids in the index partition can be done using PArrays'sfind_owner
andunion_ghost
methods.Notes:
Assembly cache reuse strategy
The most involved part of this PR is the assembly cache re-use. The issue is that so far we had been using the output
PSparseMatrix
as the cache, by allocating extra ghost rows that were only used in the sub-assembly process. This has quite a lot of downsides (see #137), so we are pivoting towards an external assembly cache model.However, having external caches does not go well with the current Gridap API. Here is a possible solution:
assemble_matrix!
will not be supported, except if anAssembler
is provided (see next point).Assembler
will hold the caches. To be able to reuse an assembler for multiple matrices, we will use aDict
and the matrix object-id to hold multiple caches (tied to a single matrix each). Cache re-use will be activated by boolean variablereuse
that is held by theAssembler
.FEOperators
will keep an instance of their assembler, allowing re-use by default for nonlinear and transientFEOperators
.Tasks from #137
Assembly strategies
With PA 0.5, new assembly strategies are available. Also, we've been wanting to fix the confusing names we currently have. I foresee the following assembly strategies:
Assembled
: We integrate on owned cells and collect contributions for owned and ghost row ids, then exchange ghost contributions and assemble. CurrentSubAssembledRows
.SubAssembled
: We integrate on owned cells and collect contributions for owned and ghost row ids, but no exchange. The resulting matrix is sub-assembled, i.e each local matrix contains the contribution for it's owned and ghost rows/cols resulting from integrating over the owned part of the domain.LocallyAssembled
: This assumes all contributions can be found by integrating on the local portion of the domain. We integrate on local cells (owned and ghost), and keep contributions for owned row ids. No exchange is needed. CurrentFullyAssembledRows
. Comes at your own risk.@amartinhuertas