Published July 30, 2026 | Version 1
Dataset Open

Experimental dataset of Kolmogorov-scale fiber kinematics in turbulent channel flow

  • 1. ROR icon TU Wien
  • 2. Università degli Studi di Udine
  • 1. ROR icon TU Wien
  • 2. Università degli Studi di Udine

Description

KOLMOGOROV-SCALE FIBER TRAJECTORIES IN TURBULENT CHANNEL FLOW
=============================================================

Per-fiber Lagrangian trajectories (position, velocity, acceleration,
orientation, angular velocity) of rigid Kolmogorov-scale fibers in a turbulent
channel flow, at three friction Reynolds numbers. Each fiber is stored both raw
(measured) and filtered (translation and rotation filtered separately). The
files contain trajectories only; example loaders that rebuild the y+ profiles
are included.

Dataset version 1.0.

CONTENTS
--------
  Re_tau=180 : near_wall, intermediate, center
  Re_tau=360 : near_wall, intermediate, center
  Re_tau=720 : near_wall, center           (no intermediate region)

  Per region:  <Re_tau_###>/<region>/fiber_trajectories_Re###_<region>.h5
  Per case:    fiber_trajectories_Re###_datadictionary.json   (field/units description)
               LoadHDF5_Re_tau_###.py , LoadHDF5_Re_tau_###.m  (example loaders)

Each region is an independent volumetric acquisition, with its own friction
velocity and viscous scales; always use the wall scales stored in the file you
are reading. 

FILE LAYOUT (HDF5)
------------------
Ragged/columnar: within each group all fibers' samples are concatenated. Every
group also carries two bookkeeping datasets to slice a single fiber:
  index     int64 (nFiber x 3) = [fiber_id, start0, count], start0 is 0-based
  fiber_id  int64, the fiber id of each sample
There is also a root dataset /fiber_id listing all fiber ids. Missing values are
NaN. Time is redundant with the frame index: time = (frame-1)*dt.

  /raw                  frame, time, pos[mm], e1, e2, e3,
                        curvature_kk0, length_mm      (measured, unfiltered)
  /filtered_translation frame, time, pos[mm], vel[mm/s], acc[mm/s^2],
                        tau_f_sec[s]                  (Mordant filter)
  /filtered_rotation    frame, time, e1_filt, e2_filt, e3_filt,
                        omega_body[rad/s], wall_distance[mm],
                        tau_f_sec[s]                  (SO(3) SG filter)
  /wall_scales          u_tau[m/s], viscous_length[m], viscous_time[s],
                        Re_tau, Temperature[degC]

The wall distance is column 2 of pos (see CONVENTIONS), so it is not stored
separately in /raw or /filtered_translation. /filtered_rotation has no position,
so it keeps wall_distance: the measured wall distance at that frame.

COMPLETENESS
------------
/raw holds every sample of every selected fiber. The two filtered groups
are subsets: filtering consumes samples at both ends of a trajectory, so a fiber
whose valid runs were shorter than the filter support has count = 0 in that
group's index and appears in /raw only. Root attributes n_fibers,
n_fibers_with_translation, n_fibers_with_rotation, n_fibers_raw_only and the
n_samples_* counts summarise this per region.

CONVENTIONS
-----------
  Axes: x = streamwise, y = wall-normal, z = spanwise. The frame is
        right-handed. +x points along the mean flow, so the streamwise position
        increases with time. y is the distance from the nearest wall in mm,
        always >= 0 and increasing away from the wall; it is therefore column 2
        of pos, in both /raw (measured value) and /filtered_translation
        (filtered value). The x and z origins are arbitrary.
  pos/vel/acc columns = [streamwise, wall_normal, spanwise].
  omega_body = [spin(e1), tumble(e2), tumble(e3)], in the fiber body frame, and
        therefore independent of the lab-frame axis convention above.
  Orientation: e1, e2, e3 are the body axes expressed in the lab frame and are
        the COLUMNS of the rotation matrix, det(R) = +1. In /raw they are the
        measured axes; in /filtered_rotation they are the filtered ones, stored
        as e1_filt, e2_filt, e3_filt. Rebuild the matrix as
            R(:,:,k) = [e1_filt(k,:)' e2_filt(k,:)' e3_filt(k,:)']   (MATLAB)
            R = np.column_stack([e1[k], e2[k], e3[k]])               (Python)
        and the lab-frame angular velocity, if needed, as omega_lab = R*omega_body.


ARRAY ORDER
-----------
The files are written from MATLAB. MATLAB reverses dimension order on disk, so
h5py reports the transposed shape: an (N,3) array such as pos, vel, acc,
omega_body or a body axis is read back with shape (3,N), and the (nFiber,3)
index as (3,nFiber). The included Python loader handles this.

HOW TO RUN
----------
Python (needs numpy, h5py, matplotlib). The loaders were written and tested with
Python 3.12.0 and the package versions pinned in requirements.txt
(h5py 3.16.0, numpy 2.5.1, matplotlib 3.11.0). To reproduce that environment:
      python -m pip install -r requirements.txt
  set DATA_DIR at the top of the script, then run interactively so the loaded
  variables stay available:
      python -i LoadHDF5_Re_tau_180.py       (or LoadHDF5_Re_tau_360.py / LoadHDF5_Re_tau_720.py)
  (plain "python LoadHDF5_Re_tau_180.py" runs to the end but then exits and the
  variables are not saved in memory -- use -i.)
 
MATLAB:
  set DATA_DIR at the top of LoadHDF5_Re_tau_###.m and press Run. The MATLAB
  loaders and the processing scripts were written and tested with MATLAB R2024b.
 
Both leave in memory: DATA (case, Re_tau, regions), PROFILES (y+ statistics
computed from the trajectories), and one variable per region (near_wall,
intermediate, center) holding per-fiber arrays, one column per fiber, NaN-padded
to the longest fiber:
 
  .raw_data              pos, e1, e2, e3 (nSamp x nFib x 3); curvature,
                         length_mm, frame, time, wall_mm (nSamp x nFib)
  .translation_filtered  pos, vel, acc (nSamp x nFib x 3); tau_f, frame, time,
                         wall_mm (nSamp x nFib)
  .rotation_filtered     e1, e2, e3, omega_body (nSamp x nFib x 3); tau_f,
                         frame, time, wall_mm (nSamp x nFib)
 
wall_mm is provided by the loaders for convenience and is column 2 of pos in the
two groups that have a position. Each group also carries fiber_ids (nFib), the
fiber id of each column, so a fiber can be followed across groups.
 
The y+ profiles in PROFILES are computed by the loaders from the trajectories,
as an example of use; they are not stored in the files. Edit compute_profiles()
to change the binning or add quantities.

LICENSE
-------
The dataset is released  under the Creative Commons Attribution 4.0 International
license (CC-BY-4.0). https://creativecommons.org/licenses/by/4.0/
 
The accompanying codes (the MATLAB processing scripts and the MATLAB and Python
loading scripts) are released under the MIT License, provided in LICENSE-CODE.txt.
https://opensource.org/licenses/MIT
 

HOW TO CITE
-----------
Please cite both the paper accompanying this dataset and the related paper below.

  1) Accompanying paper (dataset descriptor):
     @article{ColibanFiberDataset,
       title   = {Experimental dataset of Kolmogorov-scale fiber kinematics in turbulent channel flow},
       author  = {Coliban, Eliza and Zaza, Domenico and Soldati, Alfredo},
       journal = {Scientific Data},
       year    = {2026},
       note    = {submitted}
     }

  2) Related paper:
     @article{kcmw-5dph,
       title   = {Angular Velocity of Kolmogorov-Scale Fibers as Proxy for Turbulent Dissipation},
       author  = {Zaza, Domenico and Giurgiu, Vlad and Iovieno, Michele and Soldati, Alfredo},
       journal = {Phys. Rev. Lett.},
       volume  = {136},
       issue   = {5},
       pages   = {054001},
       year    = {2026},
       month   = {Feb},
       publisher = {American Physical Society},
       doi     = {10.1103/kcmw-5dph},
       url     = {https://link.aps.org/doi/10.1103/kcmw-5dph}
     }

Files

dataset.zip

Files (535.9 MiB)

NameSize
md5:b488d2ebdd1236caa5708d09049167cc
535.9 MiBPreview Download

Additional details

Related works

Continues
Dataset: 10.5281/zenodo.17873151 (DOI)
References
Journal Article: 10.1103/kcmw-5dph (DOI)

Funding

FWF Austrian Science Fund
Micro Fibers in Turbulent Open Channel Flow 10.55776/P35505