I am running into an issue of non-deterministic output when using vtkHyperTreeGridEvaluateCourse
when I run my vtkhdf with a few hundred time steps, in about 1-5% of the times steps the resulting cell arrays have off by one array sizes after EvaluateCoarse, but which time steps have the off by 1 differ on repeat runs
I extracted 40 time steps more likely to trigger the issue into the vtkhdf file attached for testing.
from vtkmodules.vtkIOHDF import vtkHDFReader
from vtkmodules.vtkFiltersHyperTree import vtkHyperTreeGridEvaluateCoarse
from vtkmodules.vtkCommonExecutionModel import vtkStreamingDemandDrivenPipeline
from vtkmodules.vtkCommonCore import vtkSMPTools
vtkhdf = "evaluatecoarse_reproducer.vtkhdf"
num_runs = 5
print(f"File: {vtkhdf}")
print(f"SMP backend: {vtkSMPTools.GetBackend()}")
print(f"Runs: {num_runs}")
print()
for run in range(1, num_runs + 1):
reader = vtkHDFReader()
reader.SetFileName(vtkhdf)
reader.Update()
info = reader.GetOutputInformation(0)
sddp = vtkStreamingDemandDrivenPipeline
n_steps = info.Length(sddp.TIME_STEPS()) if info.Has(sddp.TIME_STEPS()) else 1
mismatches = []
for step in range(n_steps):
reader.SetStep(step)
reader.Update()
htg = reader.GetOutput()
ec = vtkHyperTreeGridEvaluateCoarse()
ec.SetInputData(htg)
ec.SetOperator(vtkHyperTreeGridEvaluateCoarse.OPERATOR_AVERAGE)
ec.Update()
out = ec.GetOutput()
expected = out.GetNumberOfCells()
cd = out.GetCellData()
for i in range(cd.GetNumberOfArrays()):
arr = cd.GetArray(i)
if arr.GetNumberOfTuples() != expected:
mismatches.append(
f" step {step}: {arr.GetName()} "
f"{arr.GetNumberOfTuples()} vs {expected} "
f"(diff={expected - arr.GetNumberOfTuples()})"
)
del ec
if mismatches:
print(f"Run {run}: {len(mismatches)} mismatches")
for m in mismatches:
print(m)
else:
print(f"Run {run}: OK")
del reader
Environment:
- VTK 9.6.0 (pip wheel), SMP backend: Sequential
- Python 3.13.9, Linux 4.18.0 (RHEL 8), x86_64
- Source file:
Filters/HyperTree/vtkHyperTreeGridEvaluateCoarse.cxx(v9.6.0)
evaluatecoarse_reproducer.vtkhdf (6.5 MB)