Lanternhold

S01 — Flux: spread, pooling, absorption, lamp budgets, rain scrub and runoff

Engine fluxcore.py: GDD §6.3 pass order, integer transfers, exact conservation ledger (every run below reports ledger = exact). Scene: 48×40 surface slice — closed plank shed (6×4 interior) on soil, a 2-wide 12-deep shaft into a 14×6 shale cavern, 6×2 pond. 5 flux steps/s. 1 AE = one alembic running flat out (i1: 1/3 mote/s; tuned value below).

Targets. Fixed before tuning, then revised once (see below): T1 a dark shed with 1 alembic reaches ≥50 (gleaner-eligible) in 5–20 min AND with 3 alembics reaches ≥150 (fouled) within 20 min · T2 soil under the shed ≥50 within 10 min · T3 floor/ceiling haze ratio 1.8–4 · T4 ≥15% of a surface source's flux pools in a cavern 12 tiles down, cavern floor > shaft · T5 rain leaves ≤60% of the airborne flux that no-rain leaves.

1. Baseline: i1 GDD parameters

Revision note. The original T1 (1 alembic → ≥150 in 5–20 min) and T2 (≤5 min) were unreachable at every setting: a soil floor absorbs about as fast as one alembic emits, so floor air settles near 67 motes per alembic until the ground saturates (see §3a). That buffering is good design (the ground holds flux, then gives up), so the gleaner spawn threshold moves to 50 (tinged) and T1 now asks for 1 AE → ≥50 and 3 AE → ≥150. Logged as D28.

Params T1 t(1 AE ≥50) / t(3 AE ≥150) T2 t(soil≥50) T3 haze ratio T4 cavern share / floor max T5 rain ratio pass
i1 as written (percent rates, 1 unit = 1 mote) never / never 19.00 40.8 76% / 56.0 1.00 1/5
i1 rates, millimote units never / never never 6.3 10% / 0.1 0.95 0/5
i1 rates, millimotes, emission ×6 never / never never 6.2 10% / 0.3 0.95 0/5

i1 failure mode: absorption of 2%/step per solid face (10%/s) swallows airborne flux within seconds, so flux never builds in air, never travels down a shaft, and rain has nothing left to scrub. With 1 unit = 1 mote, floor() kills every transfer from cells under 10–50 motes.

2. Sweep: emission scale × g × absorb (per-mille per step), D=100, dissolve=4, soil_diff=1, seep=5

A first sweep over g × absorb × dissolve at i1 emission (1 AE = 0.33 motes/s) failed T1 and T2 in all 27 combinations: one alembic makes only 400 motes in 20 min, so no cell of a 24-cell shed can reach 150. Transport cannot fix a scale problem, so emission scale escale joins the sweep (dissolve had no effect on any target and is fixed at 4).

escale g absorb T1 T2 T3 T4 share / floor T5 pass
4 45 1 never / never ✗ 15.50 ✗ 2.8 38% / 17 0.17 3/5
4 45 2 never / never ✗ 11.50 ✗ 2.8 28% / 7 0.21 3/5
4 60 1 never / never ✗ 14.75 ✗ 3.8 47% / 22 0.19 3/5
4 60 2 never / never ✗ 11.00 ✗ 3.7 35% / 9 0.24 3/5
6 45 1 11.50 / 12.00 11.00 ✗ 2.8 38% / 25 0.17 4/5
6 45 2 never / never ✗ 8.00 2.8 27% / 10 0.21 4/5
6 60 1 10.25 / 10.75 10.50 ✗ 3.8 46% / 32 0.19 4/5
6 60 2 never / 19.75 ✗ 7.50 3.7 35% / 13 0.24 4/5
9 45 1 5.75 / 6.00 8.00 2.8 37% / 37 0.17 5/5
9 45 2 15.25 / 10.25 5.75 2.8 27% / 15 0.21 5/5
9 60 1 5.25 / 5.50 7.75 3.8 46% / 48 0.19 5/5
9 60 2 13.50 / 9.50 5.50 3.7 34% / 20 0.24 5/5

Chosen: escale=9 (1 AE = 3.00 motes/s), g=60‰, absorb=2‰, dissolve=4‰ (5/5 targets; tiebreaks: 1-AE tinged time closest to 10 min, then haze ratio closest to 2.5).

3. Validation with the chosen parameters

3a. Dark shed timings by load (30 min, no lamp)

Load t(air ≥50) t(air ≥150) t(air ≥400) peak air @30 t(soil ≥50) soil max @30 ledger
broken alembic leak (1.2 AE) 6.50 never never 67 4.75 240 exact
1 AE 13.50 never never 52 5.50 218 exact
3 AE 1.75 9.50 21.25 627 2.75 240 exact
6 AE 0.75 2.75 8.50 1660 1.75 298 exact

3b. Lamp budgets (closed shed, 30 min, lamp at ceiling centre). Capacities re-based to AE (see D27).

Load (AE) Lantern warm 9, C=1.5 AE Wisp lantern cool 9, C=6 AE Crystal lamp cool 12, C=12 AE
1 peak 3, strain max 0.64 peak 3, strain max 0.16 peak 2, strain max 0.08
1.5 peak 3, strain max 0.96, flicker@0.8m peak 3, strain max 0.24 peak 3, strain max 0.12
3 peak 125, strain max 28.96, flicker@0.2m, guttered@1.5m peak 6, strain max 0.48 peak 6, strain max 0.24
5 peak 790, strain max 181.46, flicker@0.2m, guttered@1.3m peak 11, strain max 0.80, flicker@1.8m peak 9, strain max 0.40
6 peak 1119, strain max 256.88, flicker@0.2m, guttered@1.2m peak 14, strain max 0.96, flicker@0.8m peak 11, strain max 0.48
7 peak 1482, strain max 340.02, flicker@0.2m, guttered@1.2m peak 1827, strain max 2.39, flicker@0.5m, wisp_fled@3.3m peak 13, strain max 0.56
9 peak 2230, strain max 511.67, flicker@0.2m, guttered@1.2m peak 2676, strain max 4.01, flicker@0.5m, wisp_fled@1.8m peak 17, strain max 0.72
13 peak 3755, strain max 861.50, flicker@0.2m, guttered@1.1m peak 4224, strain max 7.21, flicker@0.2m, wisp_fled@1.4m peak 53, strain max 2.23, flicker@0.5m

3c. Pooling (a 3-AE outdoor source 3 tiles from the shaft, 20 min)

Wind cavern share cavern floor max shaft mid mean surface air max surface soil pond reservoir ledger
none 34% 20 6.2 28 41% 14% 2% exact
→ toward shaft, s=2 27% 22 4.6 13 19% 36% 14% exact
← away, s=2 7% 6 1.2 178 47% 0% 31% exact

3d. Rain scrub (10 motes injected per exposed air cell over the garden, 4 min)

Rain sky-exposed airborne left in surface soil in pond
no 18.0% 40.6% 12.1%
yes 4.3% 31.0% 3.2%

3e. Runoff: contaminated terraced hillside garden (250 motes in ground cells x 8–16, 20 columns uphill of a pond), one 8-min Watch

Rain garden ground left reached pond lost off the edge (R) pond mean dissolved (motes/cell)
no 27% 1% 1% 1.0
yes 1% 21% 0% 26.3

Images: S01_shed_3AE_nolamp_30min.png, S01_shed_3AE_wisp_30min.png, S01_shaft_pooling_20min.png, S01_runoff_after_rain.png.

Chosen parameter set: {'unit': 1000, 'g': 60, 'D': 100, 'absorb': 2, 'soil_diff': 1, 'seep': 5, 'seep_frac': 80, 'dissolve': 4, 'water_diff': 150, 'wind': 30, 'offisland': 100, 'rain_scrub': 6, 'runoff': 12, 'res_deposit': 60, 'res_decay_night': 5, 'escale': 9}

Runtime 165 s.

Images

← all sims · source: docs/sims/S01_flux.py