Rework Compressed*SparsityPattern
- rename CompressedSimpleSparsityPattern to DynamicSparsityPattern
- deprecate all Compressed*SparsityPattern classes
- same for BlockCompressed*SparsityPattern
- update examples
- replace non-dynamic sparsity creation in step-7, 8, 9, 13, 14, 16, 23,
24, 25, 28, 29, 35
Motivation for removing the other compressed objects:
Number of degrees of freedom: 274625
FE_Q<3>(4)
CompressedSimple vmpeak: 749024 rss: 530804 make: 5.99s copy: 3.58s
Compressed vmpeak: 744880 rss: 526852 make: 8.59s copy: 3.64s
CompressedSet vmpeak:
3184880 rss:
2966776 make: 92s copy: 18s
Or in Martin's words:
I remember having looked into compute times for the
DoFTools::make_sparsity_pattern in detail some five years ago and all
benchmarks showed CompressedSimpleSparsityPattern as the fastest of the
three. The internal data structure in CSimpleSP is std::vector, thus
simpler than plain CSP where there is an additional array of length 8
with 'fresh' entries about to be submitted but otherwise very similar.
std::set as used in CSetSP does way too many memory allocations and is
most likely slower than inserting into a sorted vector for almost all
imaginable loads with up to a few hundred entries. In particular for how
we mostly use sparsity patterns where each row gets touched as many
times as we have adjacent elements to that DoF.
Last but not least, CSimpleSP is the only one with the appropriate
infrastructure for parallel distributed computations where rows use an
additional IndexSet argument.
In the beginning the Universe was created. This has made a lot of
people very angry and has been widely regarded as a bad move.
Douglas Adams