ASTRO-USA Mini-Hab · Food Production Module
The ASTRO-USA Food Production Module is a converted shipping container that grows food for a simulated crew. This model rebuilds it from its published description and generates engineering CAD, airflow simulations and an interactive 3-D / VR walk-through from one sourced ledger, so a corrected input reaches every output.
What the Food Production Module holds, as described by the ASTRO-USA team.
ASTRO-USA (Analog Simulation Training and Research Outpost Utilizing Self-sustaining Architecture) is an analog habitat being developed at Purdue University. Its first physical module, the Food Production Module (FPM), converts a shipping container (modelled as a 40 ft high-cube) into a growing space with a vertical nutrient-film (NFT) hydroponic wall, a propagation rack, Kratky and Dutch-bucket systems, a bay for bioreactor payloads, a battery bank and a work space, with the HVAC unit in an attic at the far end. It is designed to support a crew of 6 for a two-week mission (Peters et al., ICES-2026-251).
27 towers of 11 sites on the hydroponic wall; a propagation rack of 10 levels.
450 W maximum steady draw and about 8 kWh a day, from 10 roof panels (4.4 kW) and 16 batteries.
The living space modelled in the airflow simulations, attic excluded.
6.5 m² of the 25.2 m² floor stays walkable once equipment clearance is kept.
The same scene the VR review uses, in the browser. Nothing loads until you ask.
Open full screen · works in desktop browsers; a WebXR headset can enter VR from the full-screen view.
Airflow, heat and CO₂ from OpenFOAM, plus well-mixed models where they suffice.
Every simulation is a time-averaged transient run that must close its mass, heat, CO₂, water-vapour and age-of-air balances within 1 % and be statistically stationary before any value is used.
| Case | Turbulence | Cells | Q (L s⁻¹) | τn (s) | Averaged (τn) | Max. balance error (%) | Stationary | Gates |
|---|---|---|---|---|---|---|---|---|
| Baseline, mesh study (coarsest) | SST k–ω | 103,502 | 142 | 443 | 1.0–3.0 | 0.80 | yes | pass |
| Baseline, mesh study (middle) | SST k–ω | 255,123 | 142 | 446 | 1.0–3.0 | 0.57 | yes | pass |
| Baseline, mesh study (finest) | SST k–ω | 547,747 | 142 | 446 | 1.0–3.0 | 0.78 | yes | pass |
| Baseline | k–ε | 255,123 | 142 | 446 | 1.0–3.0 | 0.92 | yes | pass |
| S2: six crew | k–ε | 255,123 | 142 | 446 | 1.0–3.0 | 0.93 | yes | pass |
| S5a: half airflow | k–ε | 255,123 | 71 | 892 | 3.0–6.0 | 0.55 | yes | pass |
| S5b: double airflow | k–ε | 255,123 | 283 | 223 | 1.0–3.0 | 1.44 | no | fail |
| S6: bioreactor off-gas siting | k–ε | 252,774 | 142 | 462 | 2.5–5.5 | 0.53 | yes | pass |
Against laser-Doppler measurements of the IEA Annex 20 ventilated-room benchmark, the standard k-ε model erred by 0.04–0.12 of the inlet velocity and SST k-ω by 0.07–0.18, so the habitat runs use k-ε.
| Model | Mesh (mm) | Cells | x=H | x=2H | ceiling | floor | Converged |
|---|---|---|---|---|---|---|---|
| k–ε | 80 | 4,144 | 0.061 | 0.038 | 0.124 | 0.074 | yes |
| k–ε | 40 | 16,875 | 0.065 | 0.037 | 0.068 | 0.072 | yes |
| k–ε | 20 | 67,500 | 0.068 | 0.036 | 0.063 | 0.062 | no |
| SST k–ω | 80 | 4,144 | 0.105 | 0.095 | 0.168 | 0.181 | yes |
| SST k–ω | 40 | 16,875 | 0.145 | 0.067 | 0.179 | 0.162 | yes |
| SST k–ω | 20 | 67,500 | 0.136 | 0.083 | 0.180 | 0.161 | no |
The cold supply jet leaves the attic partition at ceiling height and falls to the floor part-way along the room; the two crew plumes are the warmest, highest-CO₂ air. The run closes its heat balance to +0.14 % and its CO₂ balance to -0.57 %.
Room-wide averages are robust: they change by at most 2.6 % across three meshes and 1.9 % between turbulence models. Single-point values are not (up to 13 and 25 %).
Celik et al. (2008) procedure on 48.7, 62.8 and 84.6 mm meshes. A GCI is quoted only where the mesh-to-mesh differences exceed the time-averaging noise and the observed order p lies between 0.5 and 3.
| Quantity | 48.7 mm | 62.8 mm | 84.6 mm | p | GCI (%) | Not quoted because |
|---|---|---|---|---|---|---|
| Room mean temperature rise (K) | 3.12 | 3.09 | 3.05 | 0.51 | – | within sampling noise |
| Room mean age of air (s) | 452 | 455 | 448 | 3.04 | – | p outside expected range; oscillatory |
| Room mean CO2 rise (ppm) | 90.3 | 90.0 | 88.0 | 5.73 | – | p outside expected range |
| Occupied-zone mean speed (m s⁻¹) | 0.108 | 0.113 | 0.112 | 6.39 | – | p outside expected range; oscillatory |
| Crew 1 CO2 rise (ppm) | 141.9 | 131.4 | 126.0 | 3.64 | – | p outside expected range |
| Crew 1 temperature rise (K) | 3.46 | 3.31 | 3.23 | 2.99 | 4.6 | – |
| Crew 2 CO2 rise (ppm) | 144.0 | 131.3 | 136.6 | 3.95 | – | p outside expected range; oscillatory |
| Crew 2 temperature rise (K) | 3.75 | 3.63 | 3.68 | 3.96 | – | p outside expected range; oscillatory |
| NFT canopy temperature rise (K) | 3.27 | 3.25 | 3.22 | 0.03 | – | within sampling noise; p outside expected range |
| NFT canopy H2O rise (mmol mol⁻¹) | 0.414 | 0.414 | 0.406 | 12.13 | – | p outside expected range |
| Aisle, x=2 m, temperature rise (K) | 2.92 | 2.88 | 2.88 | 33.28 | – | within sampling noise; p outside expected range |
| Aisle, x=2 m, CO2 rise (ppm) | 97.2 | 96.9 | 97.8 | 3.49 | – | within sampling noise; p outside expected range; oscillatory |
| Aisle, x=2 m, speed (m s⁻¹) | 0.083 | 0.078 | 0.084 | 0.51 | – | oscillatory |
| Aisle, x=5 m, temperature rise (K) | 2.96 | 2.92 | 2.86 | 1.08 | 5.6 | – |
| Aisle, x=5 m, CO2 rise (ppm) | 91.4 | 89.8 | 85.6 | 2.82 | 2.1 | – |
| Aisle, x=5 m, speed (m s⁻¹) | 0.038 | 0.030 | 0.016 | 1.17 | 78.8 | – |
| Aisle, x=8 m, temperature rise (K) | 3.48 | 3.30 | 3.30 | 19.61 | – | p outside expected range |
| Aisle, x=8 m, CO2 rise (ppm) | 114.5 | 101.3 | 99.3 | 9.17 | – | p outside expected range |
| Aisle, x=8 m, speed (m s⁻¹) | 0.060 | 0.068 | 0.063 | 2.04 | – | oscillatory |
With six crew the room's CO₂ rise grows ×2.97. Halving the airflow raises the temperature rise ×2.35, CO₂ ×2.44 and the age of air ×2.26, more than the ×2 of a perfectly mixed room: the air-change efficiency falls from 0.50 to 0.44. The room mixes less well at low flow, not only less often, so the attic unit's airflow matters.
| Quantity | Baseline | S2: six crew | S5a: half airflow |
|---|---|---|---|
| Supply airflow (L s⁻¹) | 142 | 142 | 71 |
| Heat load (W) | 520 | 860 | 520 |
| Room mean temperature rise (K) | 3.11 | 5.00 (×1.61) | 7.31 (×2.35) |
| Room mean CO2 rise (ppm) | 92 | 272 (×2.97) | 224 (×2.44) |
| Room mean age of air (s) | 446 | 440 (×0.99) | 1009 (×2.26) |
| Occupied-zone mean speed (m s⁻¹) | 0.11 | 0.12 (×1.11) | 0.07 (×0.67) |
| Crew 1 CO2 rise (ppm) | 135 | 304 (×2.25) | 278 (×2.06) |
| Crew 2 CO2 rise (ppm) | 140 | 294 (×2.10) | 258 (×1.84) |
| NFT canopy temperature rise (K) | 3.27 | 5.22 (×1.59) | 7.66 (×2.34) |
| Air-change efficiency τn/(2⟨τ⟩) | 0.50 | 0.51 | 0.44 |
Double airflow did not reach a statistically stationary state within its run and is not reported.
At the placeholder rate the bioreactor rack's CO₂ adds about 0.8 ppm mixed through the room, against about 88 ppm from two working crew; even ducted to the hydroponic wall it raises the canopy by only 1.1 ppm. At these rates it is neither a hazard nor a useful CO₂ supply for the plants.
on the 9.33 m² NFT wall if all 450 W went to light at the best LED efficacy reported (3 µmol/J).
the range of NASA's lettuce crop model (BVAD).
to reach the bottom of that range. Either the lights sit outside the stated budget or the crop will be strongly light-limited.
With the door shut and no air exchange, CO₂ reaches OSHA's limit (an eight-hour average) in about 2.1 h with six crew and 6.3 h with two. Leakage slows this a lot, so a door-shut CO₂ decay test is the measurement that settles it.
A wall sensor on the attic partition at 1.2 m stayed within 0.27 K and 4.9 % of the occupied-zone mean in all 4 runs, 1.6 m from the nearest growing system. Toggle "suggested sensor positions" in the 3-D model to see them.
| Rank | Wall | Along wall (m) | Height (m) | Worst |ΔT| (K) | Worst |ΔCO2| (%) | Clearance (m) |
|---|---|---|---|---|---|---|
| 1 | attic partition | y=0.75 | 1.2 | 0.27 | 4.9 | 1.56 |
| 2 | battery / work wall | x=10.25 | 1.2 | 0.31 | 6.9 | 1.77 |
| 3 | battery / work wall | x=2.00 | 1.2 | 0.28 | 10.1 | 0.90 |
| 4 | battery / work wall | x=10.50 | 1.2 | 0.35 | 6.7 | 1.90 |
| 5 | attic partition | y=0.50 | 1.2 | 0.36 | 5.8 | 1.71 |
The ASTRO-USA plan, and how this model is built.
In the ASTRO-USA plan the Food Production Module is one of several modules of a secondary habitat, the Mini-Hab, alongside a Biosafety Level 2 Laboratory Module, Crew Quarters and NASA Kennedy Space Center's BioWaTERR wastewater-treatment trailer, which together aim to close the waste and nutrient loops; SIMOC Live and an Opto 22 system will monitor and control them. A primary habitat is envisaged as modular cylindrical and spherical sections in aluminium or titanium. Only the FPM is dimensioned in the paper; the other modules here are concept-level placeholders.
The generated concept encloses 488 m³ of pressurised volume (airlock excluded) for a crew of 6; it meets NASA's minimum net habitable volume of 25 m³ per person (Whitmire et al. 2014) once at least 0.31 of that volume is habitable.
Every dimension and load is a ledger record with its value, unit and either a source with a verbatim quote or a declared assumption with its reason; the build refuses anything else. A parts registry turns the ledger into three models, each with its own checks, so that replacing an assumption with a measured fact updates all of them.
| Ledger file | Records | Quoted | Derived | User-supplied | Assumed | Ask team |
|---|---|---|---|---|---|---|
cfd | 1 | 0 | 0 | 0 | 1 | 0 |
container | 8 | 3 | 0 | 1 | 4 | 3 |
crew | 6 | 5 | 0 | 0 | 1 | 0 |
crops | 4 | 4 | 0 | 0 | 0 | 0 |
fpm | 43 | 18 | 13 | 0 | 12 | 12 |
payloads | 36 | 0 | 0 | 0 | 36 | 33 |
primary | 12 | 4 | 0 | 0 | 8 | 8 |
scenario_m0 | 11 | 0 | 0 | 0 | 11 | 8 |
scenario_s2 | 2 | 0 | 0 | 0 | 2 | 2 |
scenario_s3 | 4 | 2 | 0 | 0 | 2 | 1 |
scenario_s5a | 1 | 0 | 0 | 0 | 1 | 0 |
scenario_s5b | 1 | 0 | 0 | 0 | 1 | 0 |
scenario_s6 | 4 | 0 | 0 | 0 | 4 | 2 |
sensors | 6 | 0 | 0 | 0 | 6 | 1 |
site | 11 | 2 | 3 | 0 | 6 | 6 |
validation | 6 | 6 | 0 | 0 | 0 | 0 |
vr_detail | 16 | 0 | 3 | 0 | 13 | 6 |
| Total | 172 | 44 | 19 | 1 | 108 | 82 |
82 assumptions can only be replaced by the ASTRO-USA team. The answers that unblock the most:
| Ledger record | Value | Unit | Ask team | Why this value |
|---|---|---|---|---|
cfd.turbulence_model | kEpsilon | - | Chosen from the IEA Annex 20 2-D isothermal validation (results/cfd/annex20.md): with the habitat cases' wall functions and schemes, standard k-epsilon reproduced the measured floor return flow and ceiling-jet separation that kOmegaSST missed, at every mesh tested. Isothermal evidence only (the buoyant Annex 20 case has no data). Runs built before 2026-10-13 15:00 used kOmegaSST (their case files and ledger digest record it). User decision 2026-10-13. | |
container.length_discrepancy_placement | door end | - | yes | Fig 2 length (464 in = 11785.6 mm) is 246.4 mm shorter than the steel interior (12032 mm). Unexplained (end framing? door-end wall?); the gap is placed at the door end for the exterior shell only. |
container.lining.ceiling | 0.0 | mm | yes | As lining.floor; clear height therefore taken as the steel interior height. |
container.lining.floor | 0.0 | mm | yes | No floor build-up is stated. The Fig 2 width (92 in = 2336.8 mm) is within 15 mm of the bare steel width (2352 mm), suggesting little or no lining. |
container.roof_thickness | 40.0 | mm | The spec gives only external (2896) and internal (2698) heights; the 198 mm difference is split as roof panel + roof rails (this value) and floor structure (the remainder). Affects only the exterior shell, not the CFD domain. | |
crew.body_box | [0.4, 0.25] | m | Standing crewmember represented as a 1.75 m tall box of this plan size (width x depth) carrying the BVAD sources; body shape not modelled in M0. | |
fpm.attic.is_full_height_compartment | True | - | yes | Figs 4-5 renders draw the 40 in attic as a full-height end compartment behind a partition (not a loft); the CFD domain therefore stops at the partition. |
fpm.battery_cabinet.height | 48.0 | in | yes | Fig 2 gives only the 49 x 29 in footprint; Fig 5 shows a 4 x 4 wall-mounted battery array. Modelled as a floor cabinet of assumed height. |
fpm.bay.enclosure_height_fraction | 0.58 | - | yes | Bioreactor bay (the zone labelled Mycoponics in ICES-2026-251 Fig 2). Fig 4 render: floor-standing transparent enclosure roughly 55-60 % of wall height; not dimensioned. |
fpm.dutch_buckets.height | 24.0 | in | yes | Fig 5 render draws the buckets as cubes on the 24 x 24 in Fig 2 footprint. |
fpm.electrical.heat_split | {'hydroponics': 0.5, 'propagation': 0.2, 'bat | fraction of load_average | yes | The paper gives total load only. M0 smoke-test split across the powered zones (pumps/lights at the NFT wall and propagation rack, inverter/charger losses at the battery cabinet, sensor computer at the bench) until the team supplies the equipment list. |
fpm.hydroponics.canopy_z_bottom | 0.75 | m | yes | Fig 4 render shows the 11 planting rows occupying roughly the upper two-thirds of the wall above a floor trough; lowest row height not stated. |
fpm.hydroponics.canopy_z_top | 2.45 | m | yes | Fig 4 render: top planting row just below the ceiling (interior height 2.698 m); exact height not stated. |
fpm.hydroponics.trough_depth | 10.0 | in | yes | As trough_height; placed against the front edge of the 24 in hydroponics band. |
fpm.hydroponics.trough_height | 8.0 | in | yes | Fig 4 render shows a low floor-level collection trough along the hydroponic wall; its size is not dimensioned. |
fpm.kratky.floor_tub_height | 12.0 | in | yes | Fig 5 render shows a low rectangular floor tub; height not dimensioned. |
fpm.propagation.height_fraction | 0.8 | - | yes | Fig 5 render: the ten-level rack reaches roughly four-fifths of wall height; not dimensioned. |
fpm.workbench.top_height | 36.0 | in | yes | Fig 5 render shows a bench in the work space; height not stated. Common standing-bench height assumed. |
payloads.bioreactor_rack.co2_per_tube | 1.82 | g/day | yes | Planning value for the CO2 released by one small fungal or microbial culture vessel; not a measured rate. |
payloads.bioreactor_rack.envelope | [951.0, 507.6, 869.0] | mm | yes | Representative outer envelope of a benchtop rack of ten tubular bioreactor vessels (5 x 2), placeholder until the team chooses the hardware. |
payloads.bioreactor_rack.heat | 0.0 | W | yes | No heat budget for the placeholder rack; any pumps, lighting or sterilisation hardware would add to it. |
payloads.bioreactor_rack.vent_flow | 0.35 | L/min | yes | Planning value for the headspace sweep that carries each vessel's off-gas out through its vent. |
payloads.incubator.envelope | [440.0, 275.0, 300.0] | mm | yes | Representative outer envelope of a benchtop germination / microgreen incubator, placeholder until the team chooses the hardware. |
payloads.incubator.heat | 0.0 | W | yes | No heat budget for the placeholder incubator. |
payloads.layout.frame_clearance | 25.0 | mm | Inside clearance to the enclosure frame posts (matches the VR frame section). | |
payloads.layout.offgas_route | bay | - | yes | Where the bioreactor vents' off-gas goes is a design choice (into the bay -> room air, into the photobioreactor's sparger, or ducted to the NFT wall). Default: vented into the bay; scenario S6 compares the routes. |
payloads.layout.order | ['bioreactor_rack', 'photobioreactor', 'incub | - | yes | Illustrative arrangement along the bay from the door end: the photobioreactor beside the bioreactor rack (so it can take the rack's off-gas), then the incubator and the sensor module; spaced evenly. Not a team decision. |
payloads.layout.rotation_deg | {'bioreactor_rack': 0, 'photobioreactor': 180, | deg | yes | Rotation of each payload about its own vertical axis. The photobioreactor is turned 180 deg so its gas inlet (its +x face) faces the bioreactor rack beside it. |
payloads.photobioreactor.co2_uptake | 0.0 | g/day | CO2 fixation by the algal culture is not modelled yet (no rate for the placeholder). | |
payloads.photobioreactor.envelope | [446.0, 400.0, 408.3] | mm | yes | Representative outer envelope of a benchtop algae photobioreactor, placeholder until the team chooses the hardware. |
payloads.photobioreactor.led_power | 16.4 | W | yes | Placeholder electrical power of the culture's LED panel at full output, all of it treated as heat to the room. |
payloads.photobioreactor.sparge_flow_max | 1.8 | L/min | yes | Placeholder maximum gas flow of the sparging pump; sets how many bioreactor vents it can take in the S6 route that pipes off-gas into it. |
payloads.ports.bioreactor_rack.envelope_check | [951.0, 507.6, 869.0] | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r0c0 | {'name': 'vent_r0c0', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r0c1 | {'name': 'vent_r0c1', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r0c2 | {'name': 'vent_r0c2', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r0c3 | {'name': 'vent_r0c3', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r0c4 | {'name': 'vent_r0c4', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r1c0 | {'name': 'vent_r1c0', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r1c1 | {'name': 'vent_r1c1', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r1c2 | {'name': 'vent_r1c2', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r1c3 | {'name': 'vent_r1c3', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.bioreactor_rack.vent_r1c4 | {'name': 'vent_r1c4', 'kind': 'gas_ | mm | yes | Illustrative port layout: one headspace vent per vessel on the rack's front face, at mid-height of the vessels; each carries the ledger's per-vessel vent flow and CO2. |
payloads.ports.incubator.envelope_check | [440.0, 275.0, 300.0] | mm | yes | Illustrative port layout: an intake and an exhaust fan in the incubator's hood, blowing upward; fan flow not set. |
payloads.ports.incubator.exhaust_fan | {'name': 'exhaust_fan', 'kind': 'fa | mm | yes | Illustrative port layout: an intake and an exhaust fan in the incubator's hood, blowing upward; fan flow not set. |
payloads.ports.incubator.intake_fan | {'name': 'intake_fan', 'kind': 'fan | mm | yes | Illustrative port layout: an intake and an exhaust fan in the incubator's hood, blowing upward; fan flow not set. |
payloads.ports.photobioreactor.envelope_check | [446.0, 400.0, 408.3152] | mm | yes | Illustrative port layout: a gas inlet on the +x face (for off-gas piped from the bioreactor rack) and a vent on the top of the culture vessel. |
payloads.ports.photobioreactor.gas_in | {'name': 'gas_in', 'kind': 'gas_in& | mm | yes | Illustrative port layout: a gas inlet on the +x face (for off-gas piped from the bioreactor rack) and a vent on the top of the culture vessel. |
payloads.ports.photobioreactor.vent | {'name': 'vent', 'kind': 'gas_out | mm | yes | Illustrative port layout: a gas inlet on the +x face (for off-gas piped from the bioreactor rack) and a vent on the top of the culture vessel. |
payloads.ports.sensor_module.envelope_check | [104.0, 96.0, 96.0] | mm | yes | Illustrative port layout: a sample inlet and outlet on the -x face of the sensor module; a small pump draws room air through and returns it. |
payloads.ports.sensor_module.sample_in | {'name': 'sample_in', 'kind': 'samp | mm | yes | Illustrative port layout: a sample inlet and outlet on the -x face of the sensor module; a small pump draws room air through and returns it. |
payloads.ports.sensor_module.sample_out | {'name': 'sample_out', 'kind': 'sam | mm | yes | Illustrative port layout: a sample inlet and outlet on the -x face of the sensor module; a small pump draws room air through and returns it. |
payloads.sensor_module.envelope | [104.0, 96.0, 96.0] | mm | yes | Representative outer envelope of a small pumped gas-sampling sensor module, placeholder until the team chooses the hardware. |
payloads.sensor_module.heat | 0.0 | W | A small battery sensor module is taken as a negligible heat source. | |
primary.airlock | {'diameter': 2.4, 'length': 3.0} | m | yes | Concept airlock cylinder on the node (Fig 1: vacuum pump, air pump, pressure sensors). Excluded from NHV, as in the NHV guideline. |
primary.crew | 6 | - | yes | The paper sizes the Mini-Hab for a crew of six; the primary habitat's crew size is not stated. Six also matches the NHV guideline's assumption. |
primary.deck_below_axis | 0.6 | m | yes | Floor deck height in the horizontal cylinders, below the module axis (gives ~2.6 m headroom on the centre line of a 4.0 m inner diameter). |
primary.habitable_fraction | [0.4, 0.5, 0.6] | - | yes | NHV is pressurised volume minus equipment, stowage and systems; it can only be measured from a real internal layout. A low / central / high fraction of the internal pressurised volume (airlock excluded) brackets it. |
primary.hatch_tunnel | {'diameter': 1.3, 'length': 0.6} | m | yes | Short hatch tunnel (berthing length) between the node and each module. Modules start beyond the node surface, so perpendicular modules clash only if a module is wider than the node; the generator checks for clashes. |
primary.modules | [{'name': 'crew', 'diameter': 4.2, ' | m | yes | Concept: four radial cylinders on the node, with the systems of the paper's Fig 1 grouped by function. Diameters and lengths are study variables (a ~4 m class is ISS-like and road-transportable as an oversize load; not checked against any transport rule). |
primary.node | {'diameter': 5.0} | m | yes | Concept: one spherical hub node joining the modules (ISS-like topology). Diameter is a study variable. |
primary.wall_thickness | 0.1 | m | yes | Shell + insulation + liner allowance between outer and inner diameter. Material not selected. |
scenario_m0.crew_on_duty | 2 | - | yes | Smoke test: two crewmembers working (one at the NFT wall, one at the bench). |
scenario_m0.crew_x | [110.0, 330.0] | in | Crew positions along the length (Fig 2 frame): in front of the hydroponics and at the work space. | |
scenario_m0.hvac.return_grille | [24.0, 12.0] | in | yes | Return grille (width x height) low on the attic partition; size and position unknown. |
scenario_m0.hvac.return_grille_center_z | 0.45 | m | yes | Return low on the partition. |
scenario_m0.hvac.setpoint_T | 24.0 | C | yes | Initial room temperature; BVAD Table 3-23 inputs use a 297.2 K (24.05 C) cabin. |
scenario_m0.hvac.supply_T | 18.0 | C | yes | Placeholder coil-leaving temperature for the smoke test. |
scenario_m0.hvac.supply_flow | 300.0 | cfm | yes | Unknown attic unit; a small ductless split delivers a few hundred cfm. Placeholder until the unit is known; S5 screens the sensitivity. |
scenario_m0.hvac.supply_grille | [30.0, 6.0] | in | yes | Supply grille (width x height) high on the attic partition; size and position unknown. |
scenario_m0.hvac.supply_grille_center_z | 2.35 | m | yes | Supply high on the partition (split-type head). |
scenario_m0.payloads_powered | False | - | M0 smoke test keeps the payloads unpowered so its heat total (520 W) is unchanged; the payload-siting scenario (S6) switches them on. | |
scenario_m0.walls_adiabatic | True | - | M0 smoke test only: all heat leaves through the HVAC. U-value walls with sol-air temperatures arrive in M2. | |
scenario_s2.crew_on_duty | 6 | - | yes | Peak occupancy: the paper sizes the Mini-Hab food supply for a crew of six; S2 puts all six in the FPM at once as an upper bound on crew heat, CO2 and water vapour. |
scenario_s2.crew_x | [40.0, 110.0, 180.0, 250.0, 330.0, 390.0] | in | yes | Six standing crewmembers spread along the aisle (Fig 2 frame), one every ~60-80 in, clear of the attic partition. |
scenario_s3.crew_cases | [2, 6] | - | The M0 working crew and the S2 peak occupancy. | |
scenario_s3.infiltration_ach | [0.0, 0.1, 0.5] | 1/h | yes | Air changes per hour through the closed container's seals and penetrations: unknown, so swept from sealed (worst case) to leaky. Measure with a CO2 decay test. |
scenario_s5a.hvac.supply_flow | 150.0 | cfm | S5 sensitivity screen: half the M0 placeholder flow (300 cfm), supply temperature unchanged. | |
scenario_s5b.hvac.supply_flow | 600.0 | cfm | S5 sensitivity screen: twice the M0 placeholder flow (300 cfm), supply temperature unchanged. | |
scenario_s6.bioreactor_rack_open | True | - | The rack is an open frame: 10 tubes (~0.105 m3) fill ~27 % of its 0.391 m3 envelope, below the 0.6 fill fraction above which a part is modelled as a solid (review item 10). The model carries envelopes only, so the tubes are not drawn. | |
scenario_s6.enclosure_open | True | - | yes | The bioreactor bay enclosure's walls, doors and ventilation are not described (Fig 4 shows a transparent box). With a solid block nothing inside it could exchange air, so S6 treats the bay as open to the room: an upper bound on mixing out of the bay. |
scenario_s6.payloads_powered | True | - | S6 runs the payloads: the photobioreactor's LED heat and the bioreactor rack's off-gas CO2 are switched on. | |
scenario_s6.routes | ['bay', 'photobioreactor', 'nft_wall'] | - | yes | Candidate off-gas routes: (1) each vessel vent releases into the bay; (2) piped to the photobioreactor's sparger up to its maximum flow, the remaining vessels venting into the bay, culture uptake taken as zero (no rate for the placeholder), so the CO2 leaves at its vent; (3) ducted to the NFT canopy and released evenly through it. |
sensors.exclusion_layers | ['plants', 'water', 'payloads'] | - | Registry layers whose parts exchange gas or humidity with the air in reality but not (or not fully) in the current CFD. | |
sensors.exclusion_margin | 0.3 | m | Candidates within this distance of a plant, water-culture, bioreactor-bay or payload part are dropped: plant and fungal gas exchange is not modelled yet (the canopy carries LED heat only), so the CFD would wrongly rate a sensor in or beside a canopy as representative of the room, whereas in reality it would read the plants. | |
sensors.mount_heights | [1.2, 1.5] | m | yes | Candidate wall-mount heights: seated and standing breathing height, both reachable for maintenance. |
sensors.occupied_zone_z | [0.1, 1.8] | m | Height band the crew occupy and breathe in (standing crew, 1.75 m tall in the crew ledger); the reference each candidate sensor is scored against is the volume mean over this band. | |
sensors.spacing | 0.25 | m | Spacing of candidate positions along each wall; positions that fall inside equipment are dropped. | |
sensors.wall_offset | 0.05 | m | Sensor sampling point this far off the wall lining (housing depth). | |
site.crew_layout | [{'item': 'bunk stack (2 berths)', 'wall' | m | yes | Concept berthing for the paper's crew of six (two-week mission): three two-berth stacks, lockers and a table. Illustrative only; galley, hygiene and medical spaces of Fig 1 are not yet placed. |
site.lab_layout | [{'item': 'sink + eyewash', 'wall': | m | yes | Concept arrangement of the equipment listed for the Lab and Work Area and the waste-management bioreactor train in Fig 1 (Year-2 Laboratory Module, BSL-2 intent). Positions and sizes are illustrative proportions for discussion only. |
site.module_container | 20 ft standard dry | - | yes | Fig 10 draws the Laboratory and Crew Quarters modules at roughly half to two-thirds of the FPM's length; a 20 ft container is the nearest standard unit. Not stated in the paper. |
site.row_gap | 0.0 | m | yes | Fig 10 draws the rows touching. A real site would leave access space between modules; replace with the planned spacing. |
site.trailer.height | 3.5 | m | yes | Placeholder enclosed-trailer height; replace from ICES-2026-290 or the trailer itself. |
site.trailer.width | 2.59 | m | yes | Trailer dimensions are in ICES-2026-290 (not available); 102 in (2.59 m) is the usual US road-legal trailer width, used as a placeholder. |
vr.battery_block | [12.0, 6.8, 9.0] | in | yes | Visual only: 16 x 12 V batteries (Fig 6) drawn as generic 12 V blocks (L x W x H); chemistry and model unknown. |
vr.conduit_height | 2.35 | m | Visual only: Fig 8 shows circuits running along both long walls to the rear panel; run height not stated. | |
vr.kratky_shelf_heights | [1.0, 1.4] | m | yes | Fig 5 render shows two wall shelves above the floor tub; heights not stated. |
vr.kratky_small_bucket | 8.0 | in | yes | Fig 5 render: small cube-shaped buckets, five per shelf; size not stated. |
vr.nav_agent_radius | 0.25 | m | Walkable-area (navmesh) margin around equipment: half a typical shoulder width, so a VR avatar or an engine character stays clear of what it would brush against. | |
vr.nav_head_clearance | 1.9 | m | An element blocks walking if its underside is lower than this (crew height 1.75 m in the crew ledger plus margin); higher items such as conduits are overhead. | |
vr.nft_channel | {'width': 4.0, 'depth': 4.0, 'cup_diameter | in | yes | Visual only: Fig 4 shows 27 vertical columns of 11 planting holes; channel and net-cup sizes not stated. |
vr.panel_center_height | 1.5 | m | Visual only: breaker panel and disconnect mounting heights not stated. | |
vr.plant_radius | {'nft': 0.11, 'seedling': 0.03, 'kratky' | m | yes | Visual only: plant canopy radii for leafy greens (NFT, Kratky), seedlings (propagation) and a vining crop (Dutch buckets); crops are not specified in the paper. |
vr.receptacle_height | 18.0 | in | Visual only: mounting height not stated; a common receptacle height is used. | |
vr.side_corrugation | {'pitch': 0.278, 'depth': 0.036, 'flat_fracti | m | Visual only: trapezoidal side-panel corrugation proportions typical of dry containers; not measured on the FPM's unit. | |
vr.solar_panel | [1.76, 1.13, 0.035] | m | yes | Visual only: 10 panels totalling 4.4 kW nominal implies ~440 W each; drawn at a size typical of that class. Model, racking and tilt unknown. |
vr.workbench_top_thickness | 1.5 | in | Visual only. |