# ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis. architecture

> Architecture diagram of the GitHub repository ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis., generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis.
- Repository: https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis.

## Overview

This is a two-dimensional lattice-Boltzmann CFD application for simulating flow around a NACA 0012 airfoil. The main workflow validates run settings, sweeps angles of attack, builds airfoil geometry, advances each flow simulation, samples momentum-exchange forces, summarizes aerodynamic performance, and writes CSV and optional VTK results. The graph separates geometry and force analysis from the solver’s grid, collision, and LES layers. The README is empty, and sampled source excerpts omit some wiring, so uncertain links are excluded.

Main entry points: [`src/main.cpp`](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/main.cpp) (Run driver), [`src/solver.cpp`](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/solver.cpp) (LBM solver), [`src/vtk_exporter.cpp`](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/vtk_exporter.cpp) (VTK exporter), [`src/momentum_exchange.cpp`](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/momentum_exchange.cpp) (Momentum exchange)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_run["Run orchestration"]
  node_main["Run driver<br/>[main.cpp]"]
  node_config["Run configuration<br/>[run_config.hpp]"]
  node_units["Physical units<br/>[physical_units.hpp]"]
end

subgraph group_geometry["Airfoil geometry"]
  node_geometry_builder["NACA geometry<br/>[geometry_naca.cpp]"]
end

subgraph group_solver["Flow solver"]
  node_grid["Distribution grid<br/>[Grid.hpp]"]
  node_solver_core["LBM solver<br/>[solver.cpp]"]
  node_collision["MRT collision<br/>[collision.hpp]"]
  node_les["Smagorinsky LES"]
end

subgraph group_analysis["Analysis and output"]
  node_momentum["Momentum exchange"]
  node_aero["Aerodynamic forces<br/>[aerodynamics.hpp]"]
  node_statistics["Force statistics"]
  node_vtk["VTK exporter<br/>[vtk_exporter.cpp]"]
  node_csv_results["CSV results"]
  node_vtk_results["VTK fields"]
end

node_user(("Simulation user"))

node_user -->|"runs"| node_main
node_main -->|"validates"| node_config
node_main -->|"constructs"| node_units
node_main -->|"builds geometry"| node_geometry_builder
node_main -->|"configures and steps"| node_solver_core
node_main -->|"samples forces"| node_momentum
node_geometry_builder -->|"sets geometry"| node_solver_core
node_solver_core -->|"updates"| node_grid
node_solver_core -->|"computes relaxation"| node_les
node_solver_core -->|"collides distributions"| node_collision
node_solver_core -->|"requests force"| node_momentum
node_momentum -->|"reads distributions"| node_grid
node_momentum -->|"normalizes force"| node_aero
node_main -->|"summarizes samples"| node_statistics
node_statistics -->|"uses force values"| node_aero
node_main -->|"writes summaries"| node_csv_results
node_main -->|"exports fields"| node_vtk
node_vtk -->|"converts units"| node_units
node_vtk -->|"reads fields"| node_grid
node_vtk -->|"writes fields"| node_vtk_results
node_main -->|"writes failure snapshots"| node_vtk_results

click node_main "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/main.cpp"
click node_config "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/run_config.hpp"
click node_units "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/physical_units.hpp"
click node_geometry_builder "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/geometry_naca.cpp"
click node_grid "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/Grid.hpp"
click node_solver_core "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/solver.cpp"
click node_collision "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/collision.hpp"
click node_les "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/les_smagorinsky.cpp"
click node_momentum "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/momentum_exchange.cpp"
click node_aero "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/aerodynamics.hpp"
click node_statistics "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/force_statistics.hpp"
click node_vtk "https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/vtk_exporter.cpp"

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_main,node_config,node_units,node_user toneBlue
class node_geometry_builder toneAmber
class node_grid,node_solver_core,node_collision,node_les toneMint
class node_momentum,node_aero,node_statistics,node_vtk,node_csv_results,node_vtk_results toneRose
```

## Components

### Run orchestration

- [Run driver](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/main.cpp): `src/main.cpp`
- [Run configuration](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/run_config.hpp): `include/run_config.hpp`
- [Physical units](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/physical_units.hpp): `include/physical_units.hpp`

### Airfoil geometry

- [NACA geometry](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/geometry_naca.cpp): `src/geometry_naca.cpp`

### Flow solver

- [Distribution grid](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/Grid.hpp): `include/Grid.hpp`
- [LBM solver](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/solver.cpp): `src/solver.cpp`
- [MRT collision](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/collision.hpp): `include/collision.hpp`
- [Smagorinsky LES](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/les_smagorinsky.cpp): `src/les_smagorinsky.cpp`

### Analysis and output

- [Momentum exchange](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/momentum_exchange.cpp): `src/momentum_exchange.cpp`
- [Aerodynamic forces](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/aerodynamics.hpp): `include/aerodynamics.hpp`
- [Force statistics](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/include/force_statistics.hpp): `include/force_statistics.hpp`
- [VTK exporter](https://github.com/ttuan-atz1/2d-lattice-boltzmann-d2q9-solvermodern-c-with-les-smagorinsky-naca-0012-aerodynamic-analysis./blob/main/src/vtk_exporter.cpp): `src/vtk_exporter.cpp`
- **CSV results**
- **VTK fields**

### Other components

- **Simulation user**

## Connections

- Simulation user → Run driver: runs
- Run driver → Run configuration: validates
- Run driver → Physical units: constructs
- Run driver → NACA geometry: builds geometry
- Run driver → LBM solver: configures and steps
- Run driver → Momentum exchange: samples forces
- NACA geometry → LBM solver: sets geometry
- LBM solver → Distribution grid: updates
- LBM solver → Smagorinsky LES: computes relaxation
- LBM solver → MRT collision: collides distributions
- LBM solver → Momentum exchange: requests force
- Momentum exchange → Distribution grid: reads distributions
- Momentum exchange → Aerodynamic forces: normalizes force
- Run driver → Force statistics: summarizes samples
- Force statistics → Aerodynamic forces: uses force values
- Run driver → CSV results: writes summaries
- Run driver → VTK exporter: exports fields
- VTK exporter → Physical units: converts units
- VTK exporter → Distribution grid: reads fields
- VTK exporter → VTK fields: writes fields
- Run driver → VTK fields: writes failure snapshots
