ASTRO-USA Mini-Hab · Food Production Module

A digital model of an analog-habitat 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.

172 ledger records (44 quoted from sources, 19 derived, 108 declared assumptions) · ledger bf8f08efaf8171a1 · build 3ae9855

The habitat

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).

297

NFT plant sites

27 towers of 11 sites on the hydroponic wall; a propagation rack of 10 levels.

350W

Average electrical load

450 W maximum steady draw and about 8 kWh a day, from 10 roof panels (4.4 kW) and 16 batteries.

63.1m³

Air volume

The living space modelled in the airflow simulations, attic excluded.

0.89m

Narrowest clear aisle

6.5 m² of the 25.2 m² floor stays walkable once equipment clearance is kept.

Cut-away render of the Food Production Module seen from above
Cut-away generated from the ledger, door end on the left: NFT wall at the back, Kratky tubs and battery cabinet in front, Dutch buckets, propagation rack, the bioreactor bay (back right) and the workbench. Plants, crew figures and fittings are illustrative.
Plan and long-wall elevations of the Food Production Module
General arrangement from the parts registry: plan and both long walls. Plan dimensions are taken from the vector geometry of the paper's floor plan (22 printed dimensions reproduced within 0.092 in); most heights are assumptions. CAD exchange (DXF, mm): plan, elevation A, elevation B, section A-A, section B-B; full sheet as SVG or PDF; cross-sections (SVG).
View along the aisle from the door
Along the aisle from the door.
Generic payload envelopes in the bioreactor bay
The bioreactor bay with generic, unbranded payload envelopes (a ten-vessel bioreactor rack, a photobioreactor, an incubator and a sensor module); coloured markers are gas ports.

Interactive model

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.

Look around: drag to orbit, scroll to zoom, click any part to see what it is and where its values come from.
Layers: switch systems on and off, and untick the roof and near wall to see inside.
CFD overlays: temperature, CO₂ and age of air at breathing height, and the suggested sensor positions.
Tour and measure: step through the zones, or click two points for a distance.

Analysis results

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.

CaseTurbulenceCellsQ (L s⁻¹)τn (s)Averaged (τn)Max. balance error (%)StationaryGates
Baseline, mesh study (coarsest)SST k–ω103,5021424431.0–3.00.80yespass
Baseline, mesh study (middle)SST k–ω255,1231424461.0–3.00.57yespass
Baseline, mesh study (finest)SST k–ω547,7471424461.0–3.00.78yespass
Baselinek–ε255,1231424461.0–3.00.92yespass
S2: six crewk–ε255,1231424461.0–3.00.93yespass
S5a: half airflowk–ε255,123718923.0–6.00.55yespass
S5b: double airflowk–ε255,1232832231.0–3.01.44nofail
S6: bioreactor off-gas sitingk–ε252,7741424622.5–5.50.53yespass

Validation: choosing the turbulence model

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-ε.

Simulated and measured velocity profiles for the Annex 20 test case
Mean horizontal velocity along the four measurement lines, both models on three meshes, against the measurements (circles). The buoyant variant of the benchmark has no measurements.
ModelMesh (mm)Cellsx=Hx=2HceilingfloorConverged
k–ε804,1440.0610.0380.1240.074yes
k–ε4016,8750.0650.0370.0680.072yes
k–ε2067,5000.0680.0360.0630.062no
SST k–ω804,1440.1050.0950.1680.181yes
SST k–ω4016,8750.1450.0670.1790.162yes
SST k–ω2067,5000.1360.0830.1800.161no

The baseline airflow

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 %.

Baseline temperature, CO2 and age of air in plan and section
Time-averaged temperature, CO₂ above the supply air and age of air, in plan at breathing height and in a section along the aisle.

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 %).

Mesh study (4 of 19 quantities can be given a GCI)

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.

Quantity48.7 mm62.8 mm84.6 mmpGCI (%)Not quoted because
Room mean temperature rise (K)3.123.093.050.51–within sampling noise
Room mean age of air (s)4524554483.04–p outside expected range; oscillatory
Room mean CO2 rise (ppm)90.390.088.05.73–p outside expected range
Occupied-zone mean speed (m s⁻¹)0.1080.1130.1126.39–p outside expected range; oscillatory
Crew 1 CO2 rise (ppm)141.9131.4126.03.64–p outside expected range
Crew 1 temperature rise (K)3.463.313.232.994.6–
Crew 2 CO2 rise (ppm)144.0131.3136.63.95–p outside expected range; oscillatory
Crew 2 temperature rise (K)3.753.633.683.96–p outside expected range; oscillatory
NFT canopy temperature rise (K)3.273.253.220.03–within sampling noise; p outside expected range
NFT canopy H2O rise (mmol mol⁻¹)0.4140.4140.40612.13–p outside expected range
Aisle, x=2 m, temperature rise (K)2.922.882.8833.28–within sampling noise; p outside expected range
Aisle, x=2 m, CO2 rise (ppm)97.296.997.83.49–within sampling noise; p outside expected range; oscillatory
Aisle, x=2 m, speed (m s⁻¹)0.0830.0780.0840.51–oscillatory
Aisle, x=5 m, temperature rise (K)2.962.922.861.085.6–
Aisle, x=5 m, CO2 rise (ppm)91.489.885.62.822.1–
Aisle, x=5 m, speed (m s⁻¹)0.0380.0300.0161.1778.8–
Aisle, x=8 m, temperature rise (K)3.483.303.3019.61–p outside expected range
Aisle, x=8 m, CO2 rise (ppm)114.5101.399.39.17–p outside expected range
Aisle, x=8 m, speed (m s⁻¹)0.0600.0680.0632.04–oscillatory

Occupancy and airflow

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.

Age of air along the aisle for baseline, six crew and half airflow
Age of air along the aisle divided by each run's nominal time constant: 1 everywhere in a perfectly mixed room. At half airflow the jet falls close to the partition and leaves older air beyond it.
QuantityBaselineS2: six crewS5a: half airflow
Supply airflow (L s⁻¹)14214271
Heat load (W)520860520
Room mean temperature rise (K)3.115.00 (×1.61)7.31 (×2.35)
Room mean CO2 rise (ppm)92272 (×2.97)224 (×2.44)
Room mean age of air (s)446440 (×0.99)1009 (×2.26)
Occupied-zone mean speed (m s⁻¹)0.110.12 (×1.11)0.07 (×0.67)
Crew 1 CO2 rise (ppm)135304 (×2.25)278 (×2.06)
Crew 2 CO2 rise (ppm)140294 (×2.10)258 (×1.84)
NFT canopy temperature rise (K)3.275.22 (×1.59)7.66 (×2.34)
Air-change efficiency τn/(2⟨τ⟩)0.500.510.44

Double airflow did not reach a statistically stationary state within its run and is not reported.

Where bioreactor off-gas should go

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.

Bioreactor CO2 in plan for three release routes
The same release carried as three tracers in one flow field: vented into the bay, piped into the photobioreactor, or ducted to the NFT canopy; plan at canopy height.

Lighting against the power budget

145

µmol m⁻² s⁻¹ at most

on the 9.33 m² NFT wall if all 450 W went to light at the best LED efficacy reported (3 µmol/J).

200–500

µmol m⁻² s⁻¹ needed

the range of NASA's lettuce crop model (BVAD).

622W

for lights alone

to reach the bottom of that range. Either the lights sit outside the stated budget or the crop will be strongly light-limited.

If the HVAC fails

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.

CO2 against time after the HVAC stops
Well-mixed model of the module's air with two or six crew and three leakage rates; plants not included.

Where to put a room sensor

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.

RankWallAlong wall (m)Height (m)Worst |ΔT| (K)Worst |ΔCO2| (%)Clearance (m)
1attic partitiony=0.751.20.274.91.56
2battery / work wallx=10.251.20.316.91.77
3battery / work wallx=2.001.20.2810.10.90
4battery / work wallx=10.501.20.356.71.90
5attic partitiony=0.501.20.365.81.71

Concepts

The ASTRO-USA plan, and how this model is built.

The Mini-Hab and the primary habitat

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.

Mini-Hab site concept
Mini-Hab site after the paper's block plan (topology only; module sizes assumed).
Primary habitat concept
Output of the primary-habitat concept generator: a design-study tool, not the team's design.

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.

One ledger, three models

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.

  1. SourcesICES-2026-251 floor plan and text, container specification, NASA BVAD
  2. Ledger172 records: quoted, derived or declared assumption
  3. Parts registryevery part with its role in CAD, CFD and VR
  4. Engineering CADSTEP, STL, GLB, DXF drawings; floor-plan overlay gate
  5. Airflow CFDOpenFOAM cases; balance, stationarity and mesh checks
  6. VR scenethree levels of detail, navigation mesh, this browser viewer
Ledger records by file and kind
Ledger fileRecordsQuotedDerivedUser-suppliedAssumedAsk team
cfd100010
container830143
crew650010
crops440000
fpm43181301212
payloads360003633
primary1240088
scenario_m011000118
scenario_s2200022
scenario_s3420021
scenario_s5a100010
scenario_s5b100010
scenario_s6400042
sensors600061
site1123066
validation660000
vr_detail16030136
Total1724419110882

What the team can supply next

82 assumptions can only be replaced by the ASTRO-USA team. The answers that unblock the most:

  1. Grow lights: fixture, count, wattage, photoperiod, and whether they are inside the power budget.
  2. Attic HVAC: make and model, airflow, grille positions, and whether it brings in outdoor air.
  3. Container leakage: a door-shut CO₂ decay measurement.
  4. The CAD model behind the paper's renders, to check this geometry against it.
  5. Bioreactor payloads: which hardware, with envelopes, gas ports and loads.
All 108 assumptions
Ledger recordValueUnitAsk teamWhy this value
cfd.turbulence_modelkEpsilon-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_placementdoor end-yesFig 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.ceiling0.0mmyesAs lining.floor; clear height therefore taken as the steel interior height.
container.lining.floor0.0mmyesNo 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_thickness40.0mmThe 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]mStanding 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_compartmentTrue-yesFigs 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.height48.0inyesFig 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_fraction0.58-yesBioreactor 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.height24.0inyesFig 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, 'batfraction of load_averageyesThe 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_bottom0.75myesFig 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_top2.45myesFig 4 render: top planting row just below the ceiling (interior height 2.698 m); exact height not stated.
fpm.hydroponics.trough_depth10.0inyesAs trough_height; placed against the front edge of the 24 in hydroponics band.
fpm.hydroponics.trough_height8.0inyesFig 4 render shows a low floor-level collection trough along the hydroponic wall; its size is not dimensioned.
fpm.kratky.floor_tub_height12.0inyesFig 5 render shows a low rectangular floor tub; height not dimensioned.
fpm.propagation.height_fraction0.8-yesFig 5 render: the ten-level rack reaches roughly four-fifths of wall height; not dimensioned.
fpm.workbench.top_height36.0inyesFig 5 render shows a bench in the work space; height not stated. Common standing-bench height assumed.
payloads.bioreactor_rack.co2_per_tube1.82g/dayyesPlanning 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]mmyesRepresentative outer envelope of a benchtop rack of ten tubular bioreactor vessels (5 x 2), placeholder until the team chooses the hardware.
payloads.bioreactor_rack.heat0.0WyesNo heat budget for the placeholder rack; any pumps, lighting or sterilisation hardware would add to it.
payloads.bioreactor_rack.vent_flow0.35L/minyesPlanning 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]mmyesRepresentative outer envelope of a benchtop germination / microgreen incubator, placeholder until the team chooses the hardware.
payloads.incubator.heat0.0WyesNo heat budget for the placeholder incubator.
payloads.layout.frame_clearance25.0mmInside clearance to the enclosure frame posts (matches the VR frame section).
payloads.layout.offgas_routebay-yesWhere 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-yesIllustrative 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, &#xdegyesRotation 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_uptake0.0g/dayCO2 fixation by the algal culture is not modelled yet (no rate for the placeholder).
payloads.photobioreactor.envelope[446.0, 400.0, 408.3]mmyesRepresentative outer envelope of a benchtop algae photobioreactor, placeholder until the team chooses the hardware.
payloads.photobioreactor.led_power16.4WyesPlaceholder electrical power of the culture's LED panel at full output, all of it treated as heat to the room.
payloads.photobioreactor.sparge_flow_max1.8L/minyesPlaceholder 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]mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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_mmyesIllustrative 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]mmyesIllustrative 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': 'fammyesIllustrative 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': 'fanmmyesIllustrative 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]mmyesIllustrative 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&mmyesIllustrative 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&#mmyesIllustrative 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]mmyesIllustrative 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': 'sampmmyesIllustrative 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': 'sammmyesIllustrative 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]mmyesRepresentative outer envelope of a small pumped gas-sampling sensor module, placeholder until the team chooses the hardware.
payloads.sensor_module.heat0.0WA small battery sensor module is taken as a negligible heat source.
primary.airlock{'diameter': 2.4, 'length': 3.0}myesConcept airlock cylinder on the node (Fig 1: vacuum pump, air pump, pressure sensors). Excluded from NHV, as in the NHV guideline.
primary.crew6-yesThe 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_axis0.6myesFloor 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]-yesNHV 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}myesShort 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, 'myesConcept: 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}myesConcept: one spherical hub node joining the modules (ISS-like topology). Diameter is a study variable.
primary.wall_thickness0.1myesShell + insulation + liner allowance between outer and inner diameter. Material not selected.
scenario_m0.crew_on_duty2-yesSmoke test: two crewmembers working (one at the NFT wall, one at the bench).
scenario_m0.crew_x[110.0, 330.0]inCrew 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]inyesReturn grille (width x height) low on the attic partition; size and position unknown.
scenario_m0.hvac.return_grille_center_z0.45myesReturn low on the partition.
scenario_m0.hvac.setpoint_T24.0CyesInitial room temperature; BVAD Table 3-23 inputs use a 297.2 K (24.05 C) cabin.
scenario_m0.hvac.supply_T18.0CyesPlaceholder coil-leaving temperature for the smoke test.
scenario_m0.hvac.supply_flow300.0cfmyesUnknown 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]inyesSupply grille (width x height) high on the attic partition; size and position unknown.
scenario_m0.hvac.supply_grille_center_z2.35myesSupply high on the partition (split-type head).
scenario_m0.payloads_poweredFalse-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_adiabaticTrue-M0 smoke test only: all heat leaves through the HVAC. U-value walls with sol-air temperatures arrive in M2.
scenario_s2.crew_on_duty6-yesPeak 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]inyesSix 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/hyesAir 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_flow150.0cfmS5 sensitivity screen: half the M0 placeholder flow (300 cfm), supply temperature unchanged.
scenario_s5b.hvac.supply_flow600.0cfmS5 sensitivity screen: twice the M0 placeholder flow (300 cfm), supply temperature unchanged.
scenario_s6.bioreactor_rack_openTrue-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_openTrue-yesThe 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_poweredTrue-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']-yesCandidate 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_margin0.3mCandidates 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]myesCandidate wall-mount heights: seated and standing breathing height, both reachable for maintenance.
sensors.occupied_zone_z[0.1, 1.8]mHeight 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.spacing0.25mSpacing of candidate positions along each wall; positions that fall inside equipment are dropped.
sensors.wall_offset0.05mSensor sampling point this far off the wall lining (housing depth).
site.crew_layout[{'item': 'bunk stack (2 berths)', 'wall'myesConcept 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': myesConcept 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_container20 ft standard dry-yesFig 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_gap0.0myesFig 10 draws the rows touching. A real site would leave access space between modules; replace with the planned spacing.
site.trailer.height3.5myesPlaceholder enclosed-trailer height; replace from ICES-2026-290 or the trailer itself.
site.trailer.width2.59myesTrailer 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]inyesVisual 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_height2.35mVisual 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]myesFig 5 render shows two wall shelves above the floor tub; heights not stated.
vr.kratky_small_bucket8.0inyesFig 5 render: small cube-shaped buckets, five per shelf; size not stated.
vr.nav_agent_radius0.25mWalkable-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_clearance1.9mAn 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&#xinyesVisual only: Fig 4 shows 27 vertical columns of 11 planting holes; channel and net-cup sizes not stated.
vr.panel_center_height1.5mVisual only: breaker panel and disconnect mounting heights not stated.
vr.plant_radius{'nft': 0.11, 'seedling': 0.03, 'kratky'myesVisual 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_height18.0inVisual only: mounting height not stated; a common receptacle height is used.
vr.side_corrugation{'pitch': 0.278, 'depth': 0.036, 'flat_fractimVisual 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]myesVisual 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_thickness1.5inVisual only.