DOI: 10.5281/zenodo.15639394
title: Data used in 'Surface curvature and secondary vortices in steady dense shallow granular flows'

description: This repository contains the data used in the paper:



Gadal C., Johnson C. G. and Gray, J. M. N. T. Surface curvature and secondary vortices in steady dense shallow granular flows. Submitted to Journal of Fluid Mechanics. 


The structure of the repository is:



experiments: contains experimental data



raw_data: contains the raw experimental data measured using the laser scanner and the scale. Each netCDf file corresponds to a run.

process_experimental_data.py: script tha processes the data in `raw_data` and output the result in `processed_data`

processed_data: contains the processed experimental data. Each folder corresponds to a run.



dem_simulations: contains the DEM data. Each folder corresponds to a run, and contains:



in.inclined.channel: input LAMMPS script used to run the simulation

generate_bottom.py: python script to generate the file 'channel.txt' containing the rough base data used to create a rough base in the LAMMPS simulations

theta**.nc: netCDF file containing the coarse-grained DEM continuous fields

example_scripts: contains example python scripts showing how to open, read and plot the data




NOTE: The raw DEM data are not included in this repository due to their size. If interested, one can email one of the authors, or reproduce the data by running the corresponding input script 'in.inclined.channel' using LAMMPS (https://www.lammps.org or https://github.com/lammps/lammps). We used the stable release of 29 August 2024, with update 1.

Description of the structure of netcdf files

experiments/raw_data 



attributes:



run_number

date

author 



dimensions(sizes): time laser(14605), time scale(398), y laser(1280)

variables(dimensions):



mass('time scale',): time series of the mass of particles coming out of the channel measured by the scale, m(t)

theta(): channel inclination, theta

time [laser]('time laser',): time vector of the laser measurements, t

time [scale]('time scale',): time vector of the scale measurements, t

y [laser]('time laser', 'y laser'): distance along laser line, y

z [laser]('time laser', 'y laser'): height measured by laser line, z(y,t)




experiments/processed_data 



attributes:



run_number

date 

author



dimensions(sizes): y dimension(1103)

variables(dimensions):



I(): computer Inertial number, I

N2(): inferred second normal stress difference, N2

Q(): average mass flux, Q

b('y dimension',): channel elevation, b

b_mid(): bottom elevation center height, b(0)

b_y('y dimension',): channel elevation first derivative, b_y

b_yy(): channel elevation second derivative, b_yy

d(): glass sphere mean diameter, d

mu(): inferred basal friction, mu

s('y dimension',): flow surface elevation, s

s_mid(): surface elevation center height, s(0)

s_y('y dimension',): surface elevation first derivative, s_y

s_yy(): surface elevation second derivative, s_yy

sigma_b('y dimension',): uncertainty in channel elevation

sigma_b_y('y dimension',): uncertainty in the bottom first derivative

sigma_s('y dimension',):  uncertainty for the flow surface elevation

sigma_s_y('y dimension',): error for the surface elevation first derivative

theta(): channel inclination, theta

y('y dimension',): cross-stream coordinate, y

y0(): surface and bottom elevation parabola center

y1(): flow start boundary in the y direction

y2(): flow end boundary in the y direction




dem_simulations 



attributes:



author

label



dimensions(sizes): tensor dimension(6), y dimension(524), z dimension(72)

variables(dimensions):



I('z dimension', 'y dimension'): Inertial number field, I(y,z)

N1('z dimension', 'y dimension'): Scaled first normal stress difference field, N1(y,z)

N2('z dimension', 'y dimension'): Scaled second normal stress difference field, N2(y,z)

Q(): mass flux, Q

av. I(): Average Inertial number, I

av. N1(): Average Scaled first normal stress difference, N1

av. N2(): Average Scaled second normal stress difference, N2

av. mu1(): Average First rheological coefficient, mu1

av. mu2(): Average Second rheological coefficient, mu2

av. mu3(): Average Third rheological coefficient, mu3

av. phi(): Average Volume fraction, phi

b('y dimension',): channel base, b(y)

d(): grain diameter, d

mu1('z dimension', 'y dimension'): First rheological coefficient field, mu1(y,z)

mu2('z dimension', 'y dimension'): Second rheological coefficient field, mu2(y,z)

mu3('z dimension', 'y dimension'): Third rheological coefficient field, mu3(y,z)

p('z dimension', 'y dimension'): Pressure field, p(y,z)

phi('z dimension', 'y dimension'): Volume fraction field, phi(y,z)

s('y dimension',): flow surface, s(y)

sigma_c('tensor dimension', 'z dimension', 'y dimension'): Contact stress tensor field, sigma_c(y,z). Along the tensor dimension, components are xx, xy, xz, yy, yz, zz

sigma_kin('tensor dimension', 'z dimension', 'y dimension'): Kinetic stress tensor field, sigma_kin(y,z). Along the tensor dimension, components are xx, xy, xz, yy, yz, zz

theta(): channel inclination, theta

u('z dimension', 'y dimension'): Streamwise velocity field, u(y,z)

v('z dimension', 'y dimension'): Cross-stream velocity field, v(y,z)

w('z dimension', 'y dimension'): Normal velocity field, w(y,z)

y('y dimension',): Cross-stream coordinate, y

z('z dimension',): Normal coordinate, z




 

    Most variables will possess the following attributes:



unit: corresponding unit

std: error(s) on the given quantity, calculated by error propagation from measurement uncertainties using the `uncertainties` module (https://pythonhosted.org/uncertainties/) in Python.

comments: comments on the given quantity (definition, formulas, etc ..)