For UCD meshes, VisIt supports communication of ghost elements (nodes and/or zones) using global ids. However, that logic appears to assume those are int type using vtkIntArray types. There is no type checking either.
For large meshes, 32 bits are not sufficient to store global node ids. So, a number of file formats, Silo and Exodus for sure, use 64-bit types.
We have an example from Exodus which fails. I dunno why we haven't seen this before with Silo except that perhaps all examples of UCD meshes in Silo are also storing pre-computed ghosts.
VisIt calls GetAuxiliaryData on the plugin with the GLOBAL_NODE_IDS tag. The plugin responds with a vtkDataArray of type of its choosing and VisIt adds the name "avtGlobalNodeIds" to the array. Later in the ghost zone comm. logic, it queries for the array named "avtGlobalNodeIds" and assumes it is getting a vtkIntArray back.
I rated impact high and likelihood low because it isn't very common.
There is a broader memory question here. Should global element id based ghost zone comm be converted to 64 bit types exclusively? That would represent a 2x memory hit in the global id data for smaller cases where it isn't necessary?
However, if we take into account that connectivity data, coordinates and a single scalar field are typically needed to produce any useful visualization and assume hexahedral connectivities, that all represents 12 problem-sized arrays of 32 bit quantities. In that context, the additional cost for always assuming 64-bit values for global element ids represents less than a 10% memory hit (1 additional problem-sized, 32 bit array among 13).
So, I conclude we should just convert all the global element id logic there to use 64-bit unsigned quantities and all plugins should be required to serve up 64 bit unsigned quantities for these values. Transform manager can take care of converting plugin data.
To Reproduce
See #3409
When we fix, we should add the data attached to #3409 to our test suite and test with Exodus.
Describe the bug
For UCD meshes, VisIt supports communication of ghost elements (nodes and/or zones) using global ids. However, that logic appears to assume those are
int
type usingvtkIntArray
types. There is no type checking either.For large meshes, 32 bits are not sufficient to store global node ids. So, a number of file formats, Silo and Exodus for sure, use 64-bit types.
We have an example from Exodus which fails. I dunno why we haven't seen this before with Silo except that perhaps all examples of UCD meshes in Silo are also storing pre-computed ghosts.
VisIt calls GetAuxiliaryData on the plugin with the GLOBAL_NODE_IDS tag. The plugin responds with a vtkDataArray of type of its choosing and VisIt adds the name "avtGlobalNodeIds" to the array. Later in the ghost zone comm. logic, it queries for the array named "avtGlobalNodeIds" and assumes it is getting a vtkIntArray back.
I rated impact high and likelihood low because it isn't very common.
There is a broader memory question here. Should global element id based ghost zone comm be converted to 64 bit types exclusively? That would represent a 2x memory hit in the global id data for smaller cases where it isn't necessary?
However, if we take into account that connectivity data, coordinates and a single scalar field are typically needed to produce any useful visualization and assume hexahedral connectivities, that all represents 12 problem-sized arrays of 32 bit quantities. In that context, the additional cost for always assuming 64-bit values for global element ids represents less than a 10% memory hit (1 additional problem-sized, 32 bit array among 13).
So, I conclude we should just convert all the global element id logic there to use 64-bit unsigned quantities and all plugins should be required to serve up 64 bit unsigned quantities for these values. Transform manager can take care of converting plugin data.
To Reproduce
See #3409
When we fix, we should add the data attached to #3409 to our test suite and test with Exodus.