All scripts to run the EOS26 simulation with 21cmFASTv4.2. EOS26 is run phase by phase i.e. ICs first, then PFs, then PHFs, and finally coevals.
All scripts accept an optional --test flag to run a small test box (HII_DIM=200).
- Generate the reference once with
--testand no--compare. It is written toEOS26_test_HIIDIM200/. - Run the production workflow with
--compareto check each output against that reference. - For a local workflow check, use both flags:
--test --compare. Candidate files then go toEOS26_test_HIIDIM200_compare/, so the reference is never overwritten. Both test modes use the same input parameters and random seed (42).
sbatch sbatch_scripts/full_test_job.sh— runs all three pipeline steps sequentially in test mode.qsub pbs_scripts/full_test_job.sh— PBS equivalent of the end-to-end test.
-
Run
bash scaling/scaling_job.shto measure the defaultHII_DIM=200andHII_DIM=300cases. Each run disables garbage collection, records peak process RSS withpsutil, and amortizes the full node-redshift coeval evolution over its outputs, then writes a phase-by-phase JSON record underscaling/results/. To benchmark other dimensions, pass them as arguments, for examplebash scaling/scaling_job.sh 200 300 400. -
After at least two measurements,
scaling/run_scalingrelation.pyfits power laws for time, peak memory, phase storage, and every stored HDF5 structure. It writes plots,README_scaling_values.md, andscaling_fits.jsontoscaling/reports/. The generated Markdown file is the source for updating the scaling table below. To apply direct measurements from the smallest and largest completedHII_DIMruns plus fitted extrapolation intervals from every available scaling result, runuv run --no-sync scaling/run_scalingrelation.py --update-readme; it relabels the two measured columns and updates both EOS extrapolation sections.
- Initial conditions (ICs):
sbatch sbatch_scripts/ICs_job.sh [--test]
qsub pbs_scripts/ICs_job.sh [--test]on PBS.- Writes
EOS26.toml(full template with embedded node redshifts and random seed) andEOS26_minimal.toml, then runsrun_scripts/run_ICs.py.
- Perturbed fields (PFs):
bash sbatch_scripts/submit_PF_jobs.sh [--test]— submits one job per PF (indices 0–91) (not used for production).sbatch sbatch_scripts/N_PF_job.sh <z_idx> [N] [--test]— runs a batch of N PFs (default N=10) starting from redshift indexz_idx.
bash pbs_scripts/submit_PF_jobs.sh [--test]andqsub pbs_scripts/N_PF_job.sh <z_idx> [N] [--test]are the PBS equivalents.
- Perturbed halo fields (PHFs):
sbatch sbatch_scripts/PHFs_job.sh [--test]— runsrun_scripts/run_PHFs.py.
qsub pbs_scripts/PHFs_job.sh [--test]on PBS.
- Coevals:
sbatch sbatch_scripts/N_coeval_job.sh [N] [--test]— runs a batch of N coevals (default N=10) withrun_scripts/run_N_coevals.py.
qsub pbs_scripts/N_coeval_job.sh [N] [--test]on PBS.
| EOS26 simulation step |
Computation time [hrs] | Memory [TB] | Storage [TB] | SUs | ||||
|---|---|---|---|---|---|---|---|---|
| Estimated | Actual | Estimated | Actual | Estimated | Actual | Estimated | Actual | |
| Initial conditions | 17+~3 write | 30 | 2.63 | 2.41 | 1.42 | 1.57 | ||
| One perturbed field |
1.42 |
0.2 | 0.545 |
0.505 | --Gb x 92 = 2.3Tb | 2.4Tb | ||
| Perturbed halo fields | 22 hrs | 0.71 | 0.77 | ~330 G | 33 G | 720 EM | 617 EM | |
| Evolving astrophysics for one coeval | 7 | 3.65 | 2.6Tb x 92 = 240 Tb 0.215 x 92 = 20Tb without XRS |
672 EM x 92 = 62k | ||||
When updated with --update-readme, each extrapolated value is the mean ± 1σ from all available scaling points. Each extrapolated quantity shows both its current model (affine overhead + coefficient * HII_DIM^3 for peak RSS; free-exponent power law for time and storage) and a fixed-cubic a=3 fit. The regression uncertainty is combined in quadrature with a fixed 10% relative measurement-uncertainty floor. EOS-1: HII_DIM = 1500 (1.5 cMpc/cell, 2250 Mpc). EOS-2: HII_DIM = 1200 (1.667 cMpc/cell, 2000 Mpc). Storage for PFs and coevals is the total across all 92 node redshifts; coeval storage includes retained IonizedBox and excludes transient XraySourceBox. The scaling-test fits are trained only on HII_DIM<=500 and, for initial conditions, that range's fixed per-job overhead makes the fitted compute-time noticeably underestimate the production values now measured at both EOS target sizes (elapsed_seconds fit for HII_DIM=1500: 17h vs. 29.8h measured).
| EOS26 simulation step | Computation time [hrs] | Memory | Storage | |||
|---|---|---|---|---|---|---|
| N=100 | N=500 | N=100 | N=500 | N=100 | N=500 | |
| Scaling tests (measured) | ||||||
| Initial conditions | 0.0374 | 0.624 | 0.939 GB | 97.2 GB | 0.464 GB | 58 GB |
| One perturbed field | 0.0345 | 0.0447 | 0.334 GB | 20.2 GB | 0.016 GB | 2 GB |
| Perturbed halo fields | 0.0498 | 0.659 | 0.564 GB | 51 GB | 0.207 GB | 25.4 GB |
| Evolving astrophysics for one coeval | 0.00199 | 0.423 | 1.16 GB | 97.2 GB | 0.0601 GB x 92 = 5.53 GB | n/a (partial run: 5/92 coevals) |
| Extrapolated to EOS (HII_DIM = 1500, 1.5 cMpc/cell, 2250 Mpc) | ||||||
| Initial conditions | a=1.72: 3.04 ± 2.21 | a=3: 17 ± 1.83 | affine (overhead + a=3): 2.62 ± 0.262 TB | a=3: 2.63 ± 0.263 TB | a=3: 1.57 ± 0.149 TB | a=3: 1.57 ± 0.157 TB |
| One perturbed field | a=0.152: 0.05 ± 0.0074 | a=3: 1.42 ± 0.832 | affine (overhead + a=3): 0.54 ± 0.054 TB | a=3: 0.546 ± 0.0547 TB | a=3: 0.0539 ± 0.00515 TB | a=3: 0.054 ± 0.0054 TB |
| Perturbed halo fields | a=1.6: 2.84 ± 2.21 | a=3: 18.1 ± 2.07 | affine (overhead + a=3): 1.37 ± 0.137 TB | a=3: 1.38 ± 0.138 TB | a=2.99: 0.675 ± 0.0648 TB | a=3: 0.686 ± 0.0686 TB |
| Evolving astrophysics for one coeval | a=3.26: 11 ± 7.78 | a=3: 11.1 ± 1.36 | affine (overhead + a=3): 2.59 ± 0.267 TB | a=3: 2.65 ± 0.272 TB | a=3: 0.202 ± 0.0193 TB x 92 = 18.6 ± 1.77 TB | a=3: 0.203 ± 0.0203 TB x 92 = 18.6 ± 1.86 TB |
Planning values use fixed a=3 central estimates at HII_DIM=1500, a 1.5 h IC-read allowance per dependent job, and a 13 h IC-write time (measured production elapsed time minus the small-scale a=3 cubic fit's compute-only prediction at the same HII_DIM; see estimate_ic_write_hours) to infer output-write throughput. Coeval output includes retained IonizedBox and excludes transient XraySourceBox. The table uses the 48 h maximum job walltime; coeval jobs are deliberately limited to 3 outputs for margin. Peak RSS is the per-phase process estimate; full-phase output totals all 92 PFs or coevals as applicable.
| Phase | Work unit | Units/job | Compute/unit [h] | IC read/job [h] | Write/unit [h] | Estimated job walltime [h] | Jobs for full phase | Serial phase walltime [h] | Peak RSS [TB] | Output, full phase [TB] |
|---|---|---|---|---|---|---|---|---|---|---|
| Initial conditions | all ICs | 1 | 16.98 | 0.00 | 12.85 | 29.83 | 1 | 29.8 | 2.63 | 1.42 |
| Perturbed fields | one PF | 24 | 1.42 | 1.50 | 0.44 | 46.19 | 4 | 184.8 | 0.55 | 4.52 |
| Perturbed halo fields | all halo fields | 1 | 18.08 | 1.50 | 5.63 | 25.21 | 1 | 25.2 | 1.38 | 0.62 |
| Coevals | one coeval | 3 | 11.10 | 1.50 | 1.66 | 39.80 | 31 | 1233.7 | 2.65 | 16.95 |