IOSS Writer: Exodus
This issue documents requirements for the new IOSS writer to generate Exodus datasets. Our objective is to ensure that if someone opened an Exodus file and saved it out again as Exodus via this new writer, the input and output files should largely be identical. The difficulty arises from the fact that any data operations in ParaView may make that difficult. Here we document some challenges and then potential solutions.
- File-per-rank: initially, we follow the file-per-rank approach. IOSS is not MPI-aware in VTK/ParaView yet and hence using this approach is the easiest.
- Consolidated node-block: with Exodus, there's only 1 node block. If global node ids are present, then it's easy. We can generate a global node-block with ease. However, if they are not present, we can't simply generate them since that may cause point-fields to be clobbered. In that case, we will create a single nodeblock with duplicated points.
- set-blocks: sets rely on global element/node ids together with special array called "element_side". If required arrays are present, they will be saved appropriately as sets. Otherwise, we simply treat them as element blocks.
- blocks with mixed element types: exodus blocks only have 1 element type. However, vtkUnstructuredGrid supports mixed elements. To handle that case, the writer will have to globally determine if its necessary to split an element-block into multiple. Note, since blocknames need to be unique, we'll need to come up with some strategy when splitting a block.