With a linear list of mesh items, the selection is becoming absolutely crazy and if we also wish to have proper support for selecting cell-zones, we are going to need a hierarchical selection or risk have something completely unusable (partial example below). Adding zones and set names into to the selection list, will add even more.
In itself, this is not a roadblock for further development of the reader, but it would be nice to get out of the way. The next stage will probably need to entail replacing the current multiblock with a data assembly, partitioned data set etc.
Currently, the frontend to the OpenFOAM reader is vtkPOpenFOAMReader. For the parallel decomposed cases, each processor entry is treated as a separate multiblock dataset and then these are all composed together. If I use the older terminology, I think that each of these individual readers should be populating part of a multipiece dataset. This becomes even more important if we want to read the OpenFOAM collated file format, in which we lose the one-to-one correspondence of reader to data block. As the current worst case example, we would have a collated format that is partially segregated by ranks:
To be efficient, this would spin off two readers, each populating 12 pieces of the output.
After this type of reworking, I think that it would also make sense to have a closer correspondence between user selection and the output topology. It should certainly make the internals easier to follow.
For an example CHT case:
|-- bottomAir | |-- internalMesh | \-- boundary | |-- minX | |-- maxX | |-- minY | |-- minZ | |-- maxZ | |-- bottomAir_to_rightSolid | |-- bottomAir_to_leftSolid | \-- bottomAir_to_heater |-- heater | |-- internalMesh | \-- boundary | |-- minY | |-- minZ | |-- maxZ | |-- heater_to_topAir | |-- heater_to_rightSolid | |-- heater_to_leftSolid | \-- heater_to_bottomAir |-- leftSolid | |-- internalMesh | \-- boundary | |-- minX | |-- minX | |-- minZ | |-- maxZ | |-- leftSolid_to_bottomAir | |-- leftSolid_to_heater | \-- leftSolid_to_topAir |-- rightSolid | |-- internalMesh | \-- boundary | |-- maxX | |-- maxX | |-- minZ | |-- maxZ | |-- rightSolid_to_bottomAir | |-- rightSolid_to_topAir | \-- rightSolid_to_heater \-- topAir |-- internalMesh \-- boundary |-- maxY |-- minX |-- maxX |-- minZ |-- maxZ |-- topAir_to_rightSolid |-- topAir_to_heater \-- topAir_to_leftSolid