Crash when loading large ADIOS2 .bp files on Windows

I’m encountering a crash when visualizing large, time-dependent datasets in ParaView 5.13.3 on Windows 11, using files written with dolfinx VTXWriter and ADIOS2 format. The issue only seems to appear for large files.

You can download the test file here:
results.bp file (Google Drive)
(Apologies for the large size — the issue does not seem to occur with smaller files.)

After loading the data with the ADIOS2VTXReader, I can navigate through the first 932 timesteps without any issue. However, when attempting to load step 933, ParaView crashes with the following error:

ERROR: In vtkADIOS2VTXReader.cxx, line 99
vtkADIOS2VTXReader (0000026C85C10C50): Error loading ADIOS2 schema: [1;34m [ADIOS2 EXCEPTION]e[0m <Toolkit> <transport::file::FilePOSIX> <Read> : couldn't move to start position 2147644880 in file C:\Users\LuisJavier\Desktop\results.bp\data.0 : errno = 22: Invalid argumente[0m
: iostream stream error

ERROR: In vtkExecutive.cxx, line 730
vtkPVCompositeDataPipeline (0000026C85C5EF40): Algorithm vtkADIOS2VTXReader (0000026C85C10C50) returned failure for request: vtkInformation (0000026C98024B30)
  Debug: Off
  Modified Time: 1431234
  Reference Count: 1
  Registered Events: (none)
  Request: REQUEST_DATA
  FORWARD_DIRECTION: 0
  ALGORITHM_AFTER_FORWARD: 1
  FROM_OUTPUT_PORT: 0

Using bpls, the contents of the .bp file appear to be consistent across all 951 steps:

bpls results.bp -la
  uint32_t  NumberOfEntities     951*{1} = 48000 / 48000
  uint32_t  NumberOfNodes        951*{1} = 9261 / 9261
  int64_t   connectivity         951*[1]*{48000, 5} = 0 / 9260
  double    f                    951*[1]*{9261, 1} = -3 / 3
  double    geometry             951*[1]*{9261, 3} = -3.07403e-18 / 1
  double    step                 951*scalar = 0 / 1
  uint32_t  types                951*scalar = 71 / 71
  string    vtk.xml              attr   = 
<VTKFile type="UnstructuredGrid" version="0.1">
  <UnstructuredGrid>
    <Piece NumberOfPoints="NumberOfNodes" NumberOfCells="NumberOfCells">
      <Points>
        <DataArray Name="geometry" />
      </Points>
      <Cells>
        <DataArray Name="connectivity" />
        <DataArray Name="types" />
      </Cells>
      <PointData>
        <DataArray Name="TIME">step</DataArray>
        <DataArray Name="vtkOriginalPointIds" />
        <DataArray Name="vtkGhostType" />
        <DataArray Name="f" />
      </PointData>
    </Piece>
  </UnstructuredGrid>
</VTKFile>

  uint8_t   vtkGhostType         951*[1]*{9261} = 0 / 0
  int64_t   vtkOriginalPointIds  951*[1]*{9261} = 0 / 9260

Encouraged by this post in the FEniCS Discourse group, I tried using ParaView installed within WSL2 (Ubuntu 22.04) with the WSL GUI. In that setup, the file loads and all timesteps (including 933–951) work flawlessly.

I wonder if I am missing something or if this a known limitation of the ADIOS2 VTX reader on Windows.

Thanks in advance for your help!


In case it’s helpful, the file above was produced using the following script with dolfinx 0.9.0:

import numpy as np 
from mpi4py import MPI
from dolfinx import fem, mesh, io

comm = MPI.COMM_WORLD

t, T = 0, 1
num_steps = 950
dt = T / num_steps

class data:
    def __init__(self, t):
        self.t = t

    def __call__(self, x):
        return np.cos(2 * np.pi * self.t) * (x[0]**2 + x[1]**2 + x[2]**2)

n = 20
domain = mesh.create_unit_cube(comm, n, n, n)

_data = data(0.0)
V = fem.functionspace(domain, ("Lagrange", 1))
uh = fem.Function(V)
uh.interpolate(_data)

file = io.VTXWriter(comm, "results.bp", [uh])
file.write(0.0)

for i in range(num_steps):
    t += dt
    _data.t = t
    uh.interpolate(_data)    
    file.write(t)

file.close()

I confirm that it works on Linux. More investigation needed for Windows.