Time Series Data

Loading Multiple Files

xamr can load time series data from multiple plotfiles:

import xamr

# Using glob pattern
ds = xamr.AMReXDataset("plt*")

# Using explicit file list
ds = xamr.AMReXDataset(["plt00000", "plt00001", "plt00002"])

Files are automatically sorted by simulation time, regardless of the input order.

Time Dimension

When multiple files are loaded, time becomes the leftmost dimension:

temp = ds['temperature']

# Check dimensions
print(temp.dims)      # ['time', 'z', 'y', 'x'] for 3D
print(temp.shape)     # (n_times, nz, ny, nx)

# Access time coordinates
print(ds.coords['time'])
print(f"Number of time steps: {ds.attrs['n_timesteps']}")

Time-based Indexing

With time series data, indexing follows the pattern [time, z, y, x]:

# Single time step
temp_t0 = temp[0, :, :, :]     # First time step, all spatial points
temp_t1 = temp[1, :, :, :]     # Second time step

# Specific point over time
temp_series = temp[:, 10, 20, 30]  # All times, specific spatial point

# Time slice
temp_range = temp[5:10, :, :, :]   # Time steps 5-9

Temporal Analysis

Analyze how fields evolve over time:

# Temperature at a specific point over time
point_temp = temp[:, 50, 50, 50]

# Maximum temperature at each time step
max_temps = [temp[t, :, :, :].max() for t in range(len(ds.coords['time']))]

# Average temperature evolution
mean_temps = [temp[t, :, :, :].mean() for t in range(len(ds.coords['time']))]

Mixing Single and Time Series

The same code works for both single files and time series:

# This works for both single files and time series
def analyze_temperature(dataset):
    temp = dataset['temperature']

    if len(dataset._times) > 1:
        # Time series: analyze evolution
        return temp[:, :, :, :].mean(axis=(1,2,3))  # Mean temp per time step
    else:
        # Single file: analyze spatial distribution
        return temp.values().mean()  # Overall mean temperature