# Where angle of attack (AoA) is set

**Important:** the reference mesh (`simulation/mesh/case_data.stl`) is **identical for every case**
in the DOE. AoA is **not** encoded in the STL or VTU filename — it is a **run parameter**.

## Per-case value

Each solved case stores its AoA in `case_data.yml`:

```yaml
AoA: 5.0
U_freestream: 29.2
Reynolds: 2000000
Solver: simpleFoam
```

The full sweep is listed in `doe/cases.csv` (21 values from 0° to 10° in 0.5° steps).

## How Rescale / OpenFOAM applies AoA

For this benchmark, geometry is fixed and **AoA is applied via the freestream velocity vector**
(inlet boundary condition), not by rotating the mesh:

```
Ux = U_freestream × cos(AoA × π/180)
Uy = U_freestream × sin(AoA × π/180)
Uz = 0
```

With `U_freestream = 29.2` m/s (see `simulation/parameters.yaml`).

Example (AoA = 5°):

- Ux ≈ 29.09 m/s
- Uy ≈ 2.55 m/s

Use `simulation/openfoam/compute_freestream.py` to generate components for any AoA.

## Official holdouts

Holdout AoA values (0.25°, 2.75°, …) are **not** all in the 0.5° training grid — see
`doe/holdout_scalars.csv`. You must run (or predict at) those exact angles for leaderboard scoring.
