Output files reference¶
All files land in runs/{run_id}/.
| File | Written by | Columns / content |
|---|---|---|
params.json |
Python scripts | Input parameters (copied in) |
logstats.dat |
BioReactor | i t dt #Cells wall_time cpu_time — one row per 0.1 non-dim time |
normf.dat |
BioReactor | i t Omega_liq_avg Omega_liq_rms ... ux ... uy ... — vorticity and velocity norms in liquid phase |
vol_frac_interf.dat |
BioReactor | i t f_liq_sum f_liq_interf posY_max posY_min — liquid volume, interface length, interface y-extent |
tr_oxy.dat |
BioReactor | i t oxy_liq_sum oxy_liq_sum2 [c_liq...] c2_liq_sum c2_liq_sum2 ... — dissolved O₂ and tracer integrals; written from t_mix onward |
results.json |
postprocess.py | 19 KPIs — see the table below |
checkpoint.dump |
BioReactor | Binary Basilisk dump at the end of each run (for chain restart) |
frames/ |
BioReactor-video | Raw binary frame dumps (grid + VOF field per timestep) — temporary; render_videos.py consumes and deletes this directory |
volume_fraction.mp4 |
render_videos.py | VOF interface animation, body frame (rotates with the bag) |
volume_fraction_lab.mp4 |
render_videos.py | Same field, lab frame (fixed camera) |
All .dat files have a one-line header beginning with i.
Time t is non-dimensional; t_physical = t × T_bio.
kLa is NaN if tr_oxy.dat contains no data — this happens when t_end < t_mix
(run finished before oxygen injection started).
results.json KPIs¶
All 19 keys postprocess.py writes, verified against a real run
(see Your first simulation):
| Key | Description | Unit |
|---|---|---|
kLa_10/25/50 |
O₂ transfer rate at 10/25/50 % saturation (5-point log-linear fit) | h⁻¹ |
kLa_inst_10/25/50 |
Same, estimated instantaneously via dC*/dt | h⁻¹ |
dtmix_0.50/0.75/0.95 |
Time for tracer to reach 50/75/95 % homogeneity | seconds |
vor_mean |
Period-averaged mean absolute vorticity (steady streaming strength) | 1/s |
vel_rms_qss |
RMS velocity over the quasi-steady-state window | non-dim |
kla_fit_rmse_25 |
Fit quality (RMSE) of the kLa_25 log-linear regression | non-dim |
tau_95/98/100_qss |
Median shear-stress percentile over the QSS window | Pa |
tau_95/98/100_max |
Max shear-stress percentile over the QSS window (NOT the whole run — see Checkpoint restart for why that boundary matters) | Pa |
tau_mean_max |
Max over time of the spatially-averaged shear stress over the QSS window | Pa |
Any key can be NaN if its underlying data file is absent or too short —
e.g. every tau_* key is NaN if oxygen transport was disabled for the run
(and vice versa: kLa_* needs tr_oxy.dat, unrelated to whether shear
stress was tracked). See Non-dimensionalization
for exactly how the kLa and tau physical-unit conversions work.