# arekebyu/fluidsim architecture

> Architecture diagram of the GitHub repository arekebyu/fluidsim, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/arekebyu/fluidsim
- Repository: https://github.com/arekebyu/fluidsim

## Overview

Fluid simulation compares a pseudo-spectral Navier–Stokes solver with a Fourier Neural Operator (FNO), through a WebAssembly demo and a CPU training workflow. In the demo, a user selects resolution and checkpoint or perturbs the field; the browser drives the WebSimulator, which advances both methods and exposes render and error views. Training generates solver trajectories, fits the FNO, and saves weights and metadata. The graph preserves documented dataset generation and training stages; some module wiring is inferred only where the README describes it, since those implementations were not sampled.

Main entry points: [`src/lib.rs`](https://github.com/arekebyu/fluidsim/blob/master/src/lib.rs) (WebSimulator API), [`src/fno/training.rs`](https://github.com/arekebyu/fluidsim/blob/master/src/fno/training.rs) (Training loop), [`src/fno/data.rs`](https://github.com/arekebyu/fluidsim/blob/master/src/fno/data.rs) (Trajectory dataset), [`frontend/index.js`](https://github.com/arekebyu/fluidsim/blob/master/frontend/index.js) (Demo controls)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_demo["Interactive demo"]
  node_browser["Demo controls<br/>[index.js]"]
  node_wasm["WebSimulator API<br/>[lib.rs]"]
  node_renderer["Comparison renderer<br/>[lib.rs]"]
end

subgraph group_physics["Fluid physics"]
  node_solver["Navier–Stokes solver<br/>[solver.rs]"]
  node_initialization["Initial conditions<br/>[initialization.rs]"]
end

subgraph group_learning["FNO learning"]
  node_checkpoints[("Model checkpoints")]
  node_fno["Fourier Neural Operator<br/>[mod.rs]"]
  node_layers["FNO layers<br/>[layers.rs]"]
  node_training_cli["Training command<br/>[train.rs]"]
  node_dataset["Trajectory dataset<br/>[data.rs]"]
  node_training["Training loop<br/>[training.rs]"]
end

subgraph group_numerics["Numerical foundations"]
  node_autodiff["Autodiff engine<br/>[graph.rs]"]
  node_traced_fft["Differentiable FFT<br/>[fft_traced.rs]"]
  node_fft["FFT routines<br/>[fft.rs]"]
end

node_user(("Demo user"))

node_user -->|"configures"| node_browser
node_browser -->|"controls"| node_wasm
node_wasm -->|"loads preset"| node_checkpoints
node_wasm -->|"generates fields"| node_initialization
node_wasm -->|"advances physics"| node_solver
node_wasm -->|"predicts field"| node_fno
node_wasm -->|"renders fields"| node_renderer
node_renderer -->|"provides RGBA buffer"| node_browser
node_training_cli -->|"generates data"| node_dataset
node_dataset -->|"samples conditions"| node_initialization
node_dataset -->|"advances trajectories"| node_solver
node_training_cli -->|"trains model"| node_training
node_training -->|"optimizes"| node_fno
node_training -->|"fits trajectories"| node_dataset
node_training -->|"writes weights"| node_checkpoints
node_fno -->|"applies"| node_layers
node_layers -->|"transforms spectra"| node_traced_fft
node_traced_fft -->|"records operations"| node_autodiff
node_solver -->|"computes spectra"| node_fft

click node_browser "https://github.com/arekebyu/fluidsim/blob/master/frontend/index.js"
click node_wasm "https://github.com/arekebyu/fluidsim/blob/master/src/lib.rs"
click node_renderer "https://github.com/arekebyu/fluidsim/blob/master/src/lib.rs"
click node_checkpoints "https://github.com/arekebyu/fluidsim/tree/master/models"
click node_solver "https://github.com/arekebyu/fluidsim/blob/master/src/solver.rs"
click node_initialization "https://github.com/arekebyu/fluidsim/blob/master/src/fno/initialization.rs"
click node_fno "https://github.com/arekebyu/fluidsim/blob/master/src/fno/mod.rs"
click node_layers "https://github.com/arekebyu/fluidsim/blob/master/src/fno/layers.rs"
click node_training_cli "https://github.com/arekebyu/fluidsim/blob/master/src/bin/train.rs"
click node_dataset "https://github.com/arekebyu/fluidsim/blob/master/src/fno/data.rs"
click node_training "https://github.com/arekebyu/fluidsim/blob/master/src/fno/training.rs"
click node_autodiff "https://github.com/arekebyu/fluidsim/blob/master/src/fno/backprop/graph.rs"
click node_traced_fft "https://github.com/arekebyu/fluidsim/blob/master/src/fno/backprop/fft_traced.rs"
click node_fft "https://github.com/arekebyu/fluidsim/blob/master/src/calculations/fft.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_browser,node_wasm,node_renderer,node_user toneBlue
class node_solver,node_initialization toneAmber
class node_checkpoints,node_fno,node_layers,node_training_cli,node_dataset,node_training toneMint
class node_autodiff,node_traced_fft,node_fft toneRose
```

## Components

### Interactive demo

- [Demo controls](https://github.com/arekebyu/fluidsim/blob/master/frontend/index.js): `frontend/index.js`
- [WebSimulator API](https://github.com/arekebyu/fluidsim/blob/master/src/lib.rs): `src/lib.rs`
- [Comparison renderer](https://github.com/arekebyu/fluidsim/blob/master/src/lib.rs): `src/lib.rs`

### Fluid physics

- [Navier–Stokes solver](https://github.com/arekebyu/fluidsim/blob/master/src/solver.rs): `src/solver.rs`
- [Initial conditions](https://github.com/arekebyu/fluidsim/blob/master/src/fno/initialization.rs): `src/fno/initialization.rs`

### FNO learning

- [Model checkpoints](https://github.com/arekebyu/fluidsim/tree/master/models): `models`
- [Fourier Neural Operator](https://github.com/arekebyu/fluidsim/blob/master/src/fno/mod.rs): `src/fno/mod.rs`
- [FNO layers](https://github.com/arekebyu/fluidsim/blob/master/src/fno/layers.rs): `src/fno/layers.rs`
- [Training command](https://github.com/arekebyu/fluidsim/blob/master/src/bin/train.rs): `src/bin/train.rs`
- [Trajectory dataset](https://github.com/arekebyu/fluidsim/blob/master/src/fno/data.rs): `src/fno/data.rs`
- [Training loop](https://github.com/arekebyu/fluidsim/blob/master/src/fno/training.rs): `src/fno/training.rs`

### Numerical foundations

- [Autodiff engine](https://github.com/arekebyu/fluidsim/blob/master/src/fno/backprop/graph.rs): `src/fno/backprop/graph.rs`
- [Differentiable FFT](https://github.com/arekebyu/fluidsim/blob/master/src/fno/backprop/fft_traced.rs): `src/fno/backprop/fft_traced.rs`
- [FFT routines](https://github.com/arekebyu/fluidsim/blob/master/src/calculations/fft.rs): `src/calculations/fft.rs`

### Other components

- **Demo user**

## Connections

- Demo user → Demo controls: configures
- Demo controls → WebSimulator API: controls
- WebSimulator API → Model checkpoints: loads preset
- WebSimulator API → Initial conditions: generates fields
- WebSimulator API → Navier–Stokes solver: advances physics
- WebSimulator API → Fourier Neural Operator: predicts field
- WebSimulator API → Comparison renderer: renders fields
- Comparison renderer → Demo controls: provides RGBA buffer
- Training command → Trajectory dataset: generates data
- Trajectory dataset → Initial conditions: samples conditions
- Trajectory dataset → Navier–Stokes solver: advances trajectories
- Training command → Training loop: trains model
- Training loop → Fourier Neural Operator: optimizes
- Training loop → Trajectory dataset: fits trajectories
- Training loop → Model checkpoints: writes weights
- Fourier Neural Operator → FNO layers: applies
- FNO layers → Differentiable FFT: transforms spectra
- Differentiable FFT → Autodiff engine: records operations
- Navier–Stokes solver → FFT routines: computes spectra
