Refined cell in vtkUniformGrid

I create a vtkMultiBlockDataSet consisting of a number of vtkUniformGrid’s.

This is the result of an AMR code and I have grids at several levels. I compute the blanking explicitly and use the vtkDataSetAttribute::REFINEDCELL bit to mark the cells that are refined at finer levels.

Additionally, i use an immersed boundary method, so I have certain parts of the domain being invalid/no data/blocked out. These cells are marked with the vtkDataSetAttribute::HIDDENCELL bit. Ghost cell regions are marked with vtkDataSetAttribute::DUPLICATECELL.

This is all assembled in Python with VTK 9.0.1.

However, when the resulting dataset is opened in Paraview, it seems like the cells where REFINEDCELL is set (an no other bits) - i.e. cells where vtkGhostType == REFINEDCELL is not “hidden from view” as it should. They are still rendered and visible.

HIDDENCELL’s and DUPLICATECELL’s are rendered correctly (not rendered at all). See this screenshot:

in the left panel I visualize the content of the vtkGhostType array, and in the right I apply the vtkGhostType array, thus making the duplicate and hidden cells invisible, but not the refined cells - they are still there.

Additionally, it seems like this works if I create an vtkStructuredGrid instead of an vtkUniformGrid… Is this intended or a bug?

When it comes to visualizing ghost cells, only DUPLICATECELL and HIDDENCELL ghosts are not rendered. Everything comes from the method vtkPolyData::RemoveGhostCells, which effectively removes those 2 types of ghosts.

If you need to differentiate refined cells from hidden cells, you can set a cell to be both hidden and refined by setting its ghost value to HIDDENCELL | REFINEDCELL. This way, you can keep track of the refinement in your code, and the cell will not be displayed in ParaView.