<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">Hello<div class=""><br class=""></div><div class="">I would like to move the discussion from the PR <a href="https://bitbucket.org/petsc/petsc/pull-requests/1076/fix-issetblocksize_general" class="">https://bitbucket.org/petsc/petsc/pull-requests/1076/fix-issetblocksize_general</a> because it's quite a general concern.</div><div class=""><br class=""></div><div class="">It's about the meaning of block size for IS.</div><div class=""><br class=""></div><div class="">Barry thinks that IS block size is something completely different than Vec block size:</div><div class="">Blocked IS "consists of continous runs of entries where the first entry of a run is divisible by the bs so for example: for a block size of 2 the IS 0 1 4 5 10 11 is a block IS. 0 1 3 5 10 11 does not have a block size. Another way of looking at it is that a ISGeneral with a given blocksize can be converted to a ISCreateBlock() while other ISs are not (except with the trivial block size of 1)."</div><div class=""><br class=""></div><div class="">Barry originally wanted to enforce this property for ISGENERAL. But I say it's only checked in ISSetBlockSize_General() under PETSC_DEBUG and only if indices are set before (see the PR description and diff), and from documentation it’s also not really obvious. There is otherwise nothing which would prevent one from breaking the "block-wise contiguity" requirement.</div><div class=""><br class=""></div><div class="">At least Matt and other contributors to HDF5 IO for IS and DMPlex (including me) grasped the same meaning of "blocksize" as Vec has without that additional requirement. In this context, it's used just as an "integer vector". For instance, in the dataset /viz/topology/cells in DMPlex HDF5 IO each block is an element and each entry is a vertex index.</div><div class=""><br class="">My opinion is that if anybody wants to have IS with Barry's original meaning of "blocked", they can just use ISCreateBlock() which really enforces "block-wise contiguity" by API and data structure. There could be also an additional standalone function ISCheckBlockwiseContiguous() with the same checking code as is currently in ISSetBlockSize_General().</div><div class=""><br class=""></div><div class="">On the other hand, if I’m thinking about any alternative, it could perhaps be PetscSection. But it would be quite some manpower to implement PetscSection IO and employ it in DMPlex IO. And I'm not sure about the worth of the outcome for users.</div></div><div class=""><br class=""></div><div class="">Opinions?</div><div class=""><br class=""></div><div class="">Vaclav</div></body></html>