|
# Big Bang
**Large-scale structure — filaments, voids, bound clumps — from a uniform particle field, with no gravity law anywhere.**
A single radial point source fires quanta with zero initial velocity. Every outward movement is emergent: `frameGenMode: 'topDown'` means the engine uses top-down frame generation (Phase B `buildFramesFromSprites`) and Brownian motion, not directed launch vectors. Filaments and voids are a consequence of single-occupancy + the recursive compress nudge, nothing else.
*New to FRQTL? Start with **Hello, FRQTL** (`getting-started-hello-frqtl`) for the `caps.frqtl` setup-module + declarative-canvas basics this notebook assumes.*
|
The experiment assembly — a single radial `PointSource` at canvas center — as editable user code:
|
/* setupBigBang — THIN ADAPTER over the canonical setup factory
* (WS gym-controls-as-sugar Bite 0: this cell used to hand-copy the physics —
* a divergent fork of lib/frqtl/objects/setup/setupBigBang.js that had already
* drifted onto a stale `universe.init(...)` positional-argument call the engine
* now FAIL-LOUDs on. The canonical factory is imported by BARE SPECIFIER (a
* relative path here would 404 — see lib/shim/notebook/frqtl-setups-importmap.js);
* this cell only bridges the notebook builder's `(frqtl, universe, options)` call
* shape to the factory's `(universe, options)` shape — ZERO physics here.)
*/
import { setupBigBang as _setupBigBang } from '@frqtl/setups/big-bang';
export function setupBigBang(frqtl, universe, options) {
return _setupBigBang(universe, options);
}
|
Declare a canvas that runs it. `setup="#"` + `stage`/`seed`; the shim synthesizes and runs the builder boilerplate in the realm. Click **Run** (or **Run All**):
|
|
## What you are seeing
An initially smooth particle field develops texture: dense filaments thread between emptier voids, and bound clumps condense — the cosmic-web morphology — with no force equation driving the collapse. No Newtonian gravity, no `G`, no cosmological constant.
**`lightSourceDiameter` is the primary knob.** It sets the outer radius of the emission ring. Because `minRadius: 2` fills inward, the total emitter count scales as `(radius / 2) × 72` (at the default 5° increment). Larger diameter → more initial quanta → larger emergent explosion:
| `lightSourceDiameter` | Active quanta (~50 frames) | Field |
|---|---|---|
| 16 | ~21,000 | Tight compact cluster, few emergent Frame circles |
| **64** (default) | ~79,000 | Well-developed explosion, prominent Frame hierarchy |
| 128 | ~157,000 | Very large expansion; stack overflow observed at init (2k+ emitters) |
The full sweep with screenshots is in [`docs/internal/physics-lab/big-bang-lightSourceDiameter.md`](../../docs/internal/physics-lab/big-bang-lightSourceDiameter.md).
**`dispersionAngleIncrement`** (default 5°) sets the angular resolution of the ring: 5° = 72 rays, 10° = 36 rays. Larger values produce discrete spokes in the initial field.
**`frameGenMode: 'topDown'` is the mode switch.** Setting it `'groundUp'` disables top-down frame generation — the expansion collapses because there are no directed launch vectors to carry particles outward.
**Edit the physics:** open the `./setups/big-bang.js` tab and pass an option override to the canonical factory — e.g. change the adapter's `_setupBigBang(universe, options)` call to `_setupBigBang(universe, Object.assign({ lightSourceDiameter: 32 }, options))` (also try `dispersionAngleIncrement` or `maxTicks`) — then re-Run. The emergent structure changes because you edited the construction. (The physics body itself lives in the canonical `lib/frqtl/objects/setup/setupBigBang.js` — this cell is a thin, engine-agnostic adapter over it.) The simulation runs live in your browser on the compiled FRQTL (WASM) engine.
|