Skip to content

Tunables

A tunable is a claim about how real aquariums behave, held apart from the code that reads it. All of them live in src/simulation/config/, addressed as section.key.

Every tunable declares its own metadata alongside its default — a label, a unit, a spinner step and, for everything but the derived nitrification rates, a min/max. Two writers consult that range: the CLI refuses a config set outside it, and the debug panel makes it the slider’s ends. The save path does not — its bounds are hand-written per leaf and mostly assert shape rather than range, so a stored satiationDecayRate of −1 loads without complaint against a declared minimum of 0.1.

Section Path prefix Governs
Decay decay. Food to waste, waste to ammonia, and the bed’s leach
Nitrogen cycle nitrogenCycle. The three-stage chain and the two nitrifier guilds
Gas exchange gasExchange. O₂ and CO₂ across the surface, and what aeration does to both
Temperature temperature. Drift toward the room, scaled by tank size
Evaporation evaporation. Water lost per day, and how warmth accelerates it
Algae algae. The bloom’s stressors, benefits and mass dynamics
Optics optics. What the water column takes out of the light on the way down
pH ph. Hardscape targets, the CO₂ coupling, the drift rate
Plants plants. Photosynthesis, respiration, vitality, growth, lifecycle
Nutrients nutrients. Fertilizer formula, optimal concentrations, demand tiers
Livestock livestock. Metabolism, satiation, vitality, death

The values themselves are not repeated here. They move when the model is recalibrated, and the file that holds each one carries the reference it was read off — which is the part that makes a number checkable.

Tunable Meaning Unit
q10 Factor every decay rate multiplies by per 10 °C
referenceTemp Temperature the base rate is quoted at °C
baseDecayRate Share of standing food that decomposes per hour — a Monod maximum /hr
wasteConversionRatio Share of decaying food that becomes solid waste
gasExchangePerGramDecay Oxygen the decomposers demand per gram oxidised; their CO₂ derives from it mg O₂/g
oxygenHalfSaturation Dissolved O₂ at which decomposition runs at half rate mg/L
substrateLeachRate Share of the bed’s remaining organic reserve released per hour /hr
Tunable Meaning Unit
wasteConversionRate Share of standing waste mineralized to ammonia per tick /tick
wasteToAmmoniaRatio Ammonia yielded per gram of waste mg/g
bacteriaProcessingRate Ammonia one bacteria unit oxidises per tick, at saturating oxygen mg/unit/tick
aobSpawnThreshold Ammonia concentration at which the AOB guild appears ppm
nobSpawnThreshold Nitrite concentration at which the NOB guild appears ppm
inoculumPerLiter Nitrifiers a tank is born with, per litre of fill water units/L
aobGrowthRate AOB per-capita growth at full utilization /tick
nobGrowthRate NOB per-capita growth at full utilization /tick
bacteriaPerCm2 Biofilm carrying capacity — the colony’s ceiling per cm² of surface units/cm²
bacteriaDeathRate Maintenance loss, charged whether or not the colony is working /tick
q10 Factor every nitrifier rate multiplies by per 10 °C
referenceTemp Temperature the nitrifier rates are quoted at °C
aobOxygenHalfSaturation Dissolved O₂ at which AOB oxidise and grow at half rate mg/L
nobOxygenHalfSaturation Dissolved O₂ at which NOB oxidise and grow at half rate mg/L

The two half-saturation constants are measured concentrations and carry a range. The twelve leaves above them were never given bounds, so a writer that asks gets nothing back. A test asserts exactly that split, so the gap is stated rather than discovered.

A bacteria unit is 10⁶ cells, which is what makes bacteriaPerCm2 a biofilm density you can look up rather than a score.

Tunable Meaning Unit
atmosphericCo2 CO₂ concentration the water equilibrates toward mg/L
o2SaturationBase O₂ saturation at the reference temperature mg/L
o2SaturationSlope Change in O₂ saturation per °C — warmer water holds less mg/L/°C
o2ReferenceTemp Temperature the saturation base is quoted at °C
baseExchangeRate Share of the gap to equilibrium crossed per tick at optimal flow /tick
optimalFlowTurnover Tank turnovers per hour at which exchange is maximal ×/hr
minFlowFactor Floor on the flow factor — still-surface diffusion, so a filterless tank still breathes ×
aerationExchangeMultiplier Multiplier on the exchange rate while aeration runs ×
aerationDirectO2 O₂ injected directly by bubble dissolution mg/L/hr
aerationCo2OffgasMultiplier Extra CO₂ off-gassing while aerating ×
Tunable Meaning Unit
coolingCoefficient Drift toward the room per °C of difference, at the reference volume °C/hr/°C
referenceVolume Volume the cooling coefficient is quoted at L
volumeExponent How drift scales with volume — the surface-to-volume ratio
Tunable Meaning Unit
baseRatePerDay Share of standing water lost per day at thermal equilibrium %
tempDoublingInterval Warmth above the room that doubles the rate °C
Tunable Meaning Unit
hardiness Tolerance factor multiplied through every stressor centrally
suppressionThreshold Plant power above which established plants push the bloom back power
plantSuppressionSeverity Damage per unit of plant power above that threshold %/power/hr
weaknessThreshold Plant power below which a weak planting becomes a benefit to algae power
lightExcessThreshold Substrate PAR above which light stops being what plants use and starts feeding algae PAR
excessLightPeak · excessLightSeverity The excess-light benefit: its ceiling, and its rate per PAR over the threshold %/hr · %/PAR/hr
excessNutrientPeak · excessNutrientSeverity The excess-nutrient benefit, against the larger of the NO₃ and PO₄ ratios over optimum %/hr · %/ratio/hr
nutrientDeficiencyPeak · nutrientDeficiencySeverity The starved-plants benefit — deliberately small, a canary rather than a lever %/hr · %/(1−ratio)/hr
lowPlantPowerPeak · lowPlantPowerSeverity The weak-planting benefit, per unit of power below weaknessThreshold %/hr · %/power/hr
algaeGrowthPerTickCap Ceiling on surplus spent turning into mass in one tick surplus
massPerSurplus Mass gained per surplus unit drained %
surplusCap Saturation cap on the bloom’s reserve bank %
Tunable Meaning Unit
waterAttenuationPerCm Beer–Lambert attenuation of the water column, per cm of depth /cm
Tunable Meaning Unit
calciteTargetPh The pH calcite rock pulls toward
driftwoodTargetPh The pH driftwood pulls toward
neutralPh The pH a tank with no hardscape sits at
basePgDriftRate Share of the gap to the hardscape target crossed per tick /tick
co2PhCoefficient pH change per decade of CO₂ change away from neutral pH/decade
co2NeutralLevel CO₂ concentration at which the coupling contributes nothing mg/L
hardscapeDiminishingFactor Falloff applied to each additional item of the same hardscape
Tunable Meaning Unit
basePhotosynthesisRate Rate one unit of plant size fixes carbon at, under ideal conditions /hr
optimalCo2 CO₂ at which the carbon term saturates mg/L
optimalNitrate Nitrate the growth term is quoted against ppm
saturationIrradianceFactor Multiple of a species’ band low at which its light response saturates × band low
nutrientsPerPhotosynthesis Total nutrients drawn per unit of potential photosynthesis, split by the fertilizer ratio mg
co2PerRateUnit CO₂ carried by one rate unit; oxygen derives from it at the molar ratio mg
baseRespirationRate Dark respiration per unit of plant size, running around the clock /hr
respirationQ10 Factor respiration multiplies by per 10 °C
respirationReferenceTemp Temperature respiration and upkeep are quoted at °C
respirationOxygenHalfSaturation Dissolved O₂ at which respiration runs at half rate mg/L
growthDrawRate Share of the reserve bank mobilised toward new tissue each lit hour /hr
sizePerSurplus Size gained per surplus unit converted, before the species growth multiplier %
surplusCap Saturation cap on the reserve bank %
upkeepCost Cost per hour of simply being alive, quoted at the respiration reference temperature %/hr
upkeepReserveHours Hours of upkeep the bank keeps back from damage — the survival rations hr upkeep
lightInsufficientSeverity · lightExcessiveSeverity Damage per PAR unit below and above the species’ tolerable band %/PAR/hr
co2InsufficientSeverity · temperatureStressSeverity · phStressSeverity Damage per unit outside the species’ tolerable band, one per factor %/unit/hr
nutrientDeficiencySeverity Damage per unit of missing sufficiency, Liebig-gated %/(1−suff)/hr
nutrientToxicitySeverity · nutrientToxicityThresholdNitrate The gross-overdose channel: what it costs per ppm past the threshold, and where that threshold starts %/ppm/hr · ppm
algaeShadingSeverity · algaeShadingThreshold Damage per point of bloom past the threshold, and the mass above which algae shades plants %/algae/hr · —
co2BenefitPeak · temperatureBenefitPeak · phBenefitPeak · nutrientBenefitPeak Recovery earned per factor in its tolerable band; all four are scaled by the light term %/hr
maxSheddingRate Share of itself a plant sheds per hour when it can pay none of its upkeep /hr
wastePerShedSize · wastePerPlantDeath Waste produced per unit of size shed, and per unit of size on death g/%
deathConditionThreshold · deathSizeThreshold Condition and size below which a plant dies %

Every severity above is pre-hardiness. The species’ own hardiness multiplies the sum once, centrally, rather than each channel scaling itself.

Tunable Meaning Unit
fertilizerFormula.nitrate · .phosphate · .potassium · .iron The all-in-one fertilizer’s composition per ml. Plants consume in the same ratio mg/ml
optimalNitratePpm · optimalPhosphatePpm · optimalPotassiumPpm · optimalIronPpm The concentration each nutrient reaches full sufficiency at ppm
lowDemandMultiplier · mediumDemandMultiplier · highDemandMultiplier Share of optimal each species demand tier actually needs
phosphatePerDecay Phosphate mineralized per gram of organic matter decayed mg/g
Tunable Meaning Unit
baseFoodRate Food a fish ingests per gram of body mass per hour g/g/hr
baseRespirationRate Oxygen a fish draws per gram per hour — a Monod maximum mg O₂/g/hr
respirationOxygenHalfSaturation Dissolved O₂ at which uptake falls to half; it scales the ammonia streams too mg/L
foodNitrogenFraction Share of ingested food mass that is nitrogen g N/g food
gillNFraction Share of ingested nitrogen excreted straight through the gills; the rest leaves as feces
basalAmmoniaRate Gill ammonia from body protein turnover, produced whether or not the fish ate mg NH₃/g/hr
respiratoryQuotient Moles of CO₂ exhaled per mole of O₂ consumed
satiationDecayRate Satiation lost per hour, feeding or not %/hr
temperatureStressSeverity · phStressSeverity Damage per unit outside the species’ tolerable band %/unit/hr
ammoniaStressSeverity Damage per ppm of unionized ammonia, not total TAN %/ppm free NH₃/hr
nitriteStressSeverity · nitrateStressSeverity · oxygenStressSeverity · waterLevelStressSeverity · flowStressSeverity Damage per unit of deviation, one per water-quality channel %/unit/hr
ageStressSeverity Damage per hour lived past the species’ maxAge, climbing with the excess %/(h past maxAge)/h
nitrateStressThreshold · oxygenStressThreshold · waterLevelStressThreshold The reading each of those stressors switches on at ppm · mg/L · %
satiationOverfedFloor · satiationWellFedFloor · satiationHungryCeiling · satiationStarvingCeiling The four edges dividing the satiation axis into overfed, well-fed, peckish, hungry and starving %
satiationOverfedSeverity · satiationHungrySeverity · satiationStarvingSeverity Peak cost of each stressed band; the curve interpolates between the anchors %/hr
satiationWellFedPeak · phBenefitPeak · oxygenBenefitPeak · plantBenefitPeak Recovery earned per factor in its good band %/hr
plantBenefitSaturationPoint Plant power at which the planted-tank benefit stops growing plants
surplusCap Saturation cap on the fish’s reserve bank %
deathDecayFactor Share of a dead fish’s mass that becomes waste

Not everything numeric is tunable. These are catalogs rather than calibration: they describe what a thing is, so they ship as plain constants and no writer can move them at runtime.

Table Holds
Fish species Per species: adult mass, lifespan, hardiness, temperature / pH / flow tolerance bands, and a full breeding block — mode, clutch size, spawn cost, hatch time, maturity age
Plant species Per species: growth rate, max size, hardiness, CO₂ requirement, substrate requirement, nutrient demand tier, and the PAR band it tolerates
Filters Per type: biological surface, target turnover, flow ceiling, tank-size ceiling, and whether it is air-driven
Substrates Per type: colony surface per litre, and the organic reserve a fresh bed holds per litre
Hardscape Per type: colony surface, and the pH it pulls toward
Lids Per type: the multiplier applied to evaporation
Fixtures and pumps The catalog of ratings a device can be built with — heater wattages, light PAR ratings, powerhead flow rates, CO₂ bubble rates, doser amounts
Chemistry Molecular weights and the mass ratios derived from them. Derived, never quoted twice