AggregateNumbering
Implementation of a read-only numbering type with minimal memory footprint to allow for novel block-structures in the matrices resulting from finite element assembly using these numbering. Mostly for use in the fusion projects, but they can be used as regular a Numbering as well if the user simply wants to reduce memory usage. Aggregation scopes are determined by MPI_Comms passed to the creation functions but the creation is still a globally parallel process across the typical PCU comm.
They inherit from the Numbering type and require only a singe integer or long per node, they are treated by the Mesh as normal Numbering or GlobalNumberings, and are written out to VTK as expected.
They cannot be written to so they cannot be synchronized (though they are synchronized during creation so are globally valid following creation).
Minimal changes have been made outside of the new files to introduce the new concept. Possibly the most impactful is changing several member functions of the NumberingOf class to be virtual member functions.
@tobinw Would you please resolve the conflicts in apf/apfUserData.h? I merged #163 into develop and I think Jacob's clone changes would stay in apfUserData.h, but I'm not 100% sure.
Sure thing I'll resolve that momentarily.
Resolved the conflicts, still need to add a test case for the PCU version of Allgather I added before this can be merged.
I hit a few unused-parameter and unused-but-set-variable compilation warnings with gcc7.3 on rhel7. A patch to silence them is attached.
silenceWarnings.patch.gz
Once PR #234 is merge I am going to start looking at getting this functionality in as well, at least supporting/exposing implicit fields/numberings so we can supply closed-form representations of the fields/numberings under the hood and still use the 'read-only' version that results for various purposes.