WindsorML dataset
Dataset overview and leaderboard submission format for WindsorML.
Open for submissions · Check submission availability
Automotive external aerodynamics
Overview
High-fidelity wall-modelled LES data for 355 designed Windsor-body variants, with approximately 300 million cells per simulation and time-averaged boundary, volume, geometry, force, slice, and image products.
FluidsBench evaluation schematic
- Model inputs Windsor geometry + WMLES conditions
- Scoring support Native boundary points and native volume cells
- Reported evaluation Area-weighted surface errors; equal-cell volume errors; forces and profiles
Schematic only; the benchmark specification fixes the exact files, entities, arrays, and equations.
Source release
Use this immutable revision when following the download example below.
Availability and licence
355 aggregate cases; 350 complete per-run field folders; approximately 8 TB
CC BY-SA 4.0. Check the source release for its complete terms.
Benchmark definition
Contract pinned
Technical details
Scoring source pin: Hugging Face revision 8a6ca32. Open contract.
What the source contains
STL and STEP geometry, native boundary and volume VTUs, force and geometry tables, flow images, eight split families, and native point dual-area sidecars for all 350 available boundary meshes. Runs 350–354 remain in aggregate split metadata but lack complete per-run geometry and image assets.
What FluidsBench currently evaluates
All eight prescribed splits are open for surface-and-volume submissions and bound to available native field files. Ground-truth profiles cover all 233 distinct test cases, with fixed and body-height-relative families. Use the published scoring support and resumable evaluator for evaluation, validation and package generation.
Dataset summary
- Geometry
- Geometric variants of the Windsor body, a simplified automotive bluff-body configuration.
- Cases
- 355 designed cases; 350 public per-run field datasets.
- Solver
- Volcano Platforms GPU-native Cartesian immersed-boundary CFD solver.
- Fidelity
- Wall-Modelled Large-Eddy Simulation (WMLES), run transiently for approximately 80 convective time units.
- Mesh scale
- Approximately 300 million cells per case, with the paper describing meshes above 280 million cells.
- Included data
- Aggregate metadata for 355 cases and complete per-run geometry, fields, images, forces, and boundary weights for runs 0–349.
- License
- CC-BY-SA, as stated by the dataset paper and dataset source.
Getting started
Pressure definition Surface confirmed; volume reference unresolved
Surface cpavg is a pressure coefficient. The volume pressureavg reference and units need clarification before any pressure subtraction is prescribed.
Surface
- Native field
-
cpavg· PointData - Units
- Dimensionless
- Reference
- Published nominal reference: p_ref = 37330.4 Pa, ρ_ref = 1.31 kg/m³, U_ref = 40 m/s.
- Evaluation
- Score released cpavg directly. The reference has already been applied.
- Conversion
- Cp = (P − 37330.4) / 1048 for dimensional P in Pa under the published nominal convention.
Volume
- Native field
-
pressureavg· CellData - Units
- Unresolved: paper labels m²/s²; sampled export needs reconciliation
- Reference
- No additional reference subtraction is implemented by the current evaluator. The tunnel exit is not a fixed-pressure boundary.
- Evaluation
- The current evaluator compares raw pressureavg values. Preserve that fact without treating it as a confirmed physical convention.
- Conversion
- Do not apply the surface Cp conversion to pressureavg until the export units and offset are confirmed.
For the dataset, the paper uses nominal inlet conditions; the numerical probe at (−2, 1.3, 0) m is used for the separate experimental validation.
Table 6 calls pressureavg relative kinematic pressure. The pinned run_1 volume XML reports a range of 33105.16015625 to 38447.64453125. Those magnitudes suggest an absolute dimensional export, but a range alone cannot establish units or gauge. The solver/export implementation is not published with this release.
Dataset owner/Volcano: confirm the exact pressureavg export expression (P, P/ρ, (P−p_ref)/ρ, or another quantity), density convention, units and reference. Reconcile it with surface cpavg on a small paired sample. If scoring should use a different offset, replay affected metrics and issue a new evaluator/result release.
Start with the source documentation and split metadata, then download one representative case before planning a full transfer. The commands below pin the source snapshot audited for this page. For leaderboard work, always use the separate scoring source pin and case lists in the FluidsBench benchmark specification.
1. Inspect the source coverage
python3 -m pip install -U huggingface_hub hf_xet
hf download neashton/windsorml \
--repo-type dataset \
--revision 8a6ca32ae22c94f54df2186d1b0ccf9662a294c2 \
--include "README.md" \
--include "splits/**" \
--include "surface_dual_areas/**" \
--local-dir ./windsorml \
--dry-run 2. Download one complete field case
hf download neashton/windsorml \
--repo-type dataset \
--revision 8a6ca32ae22c94f54df2186d1b0ccf9662a294c2 \
--include "run_1/windsor_1.stl" \
--include "run_1/boundary_1.vtu" \
--include "run_1/boundary_dual_area_1.npy" \
--include "run_1/force_mom_1.csv" \
--local-dir ./windsorml import numpy as np
import pyvista as pv
surface = pv.read("windsorml/run_1/boundary_1.vtu")
area = np.load("windsorml/run_1/boundary_dual_area_1.npy", mmap_mode="r")
assert area.shape == (surface.n_points,)
print(surface.point_data.keys()) Remove --dry-run only after checking the transfer size. The dual areas apply to the exact raw VTU point order. The split metadata covers 355 aggregate cases, but only runs 0–349 have complete per-run field folders and area sidecars. The scoring contract already intersects each source split with these published runs: Full has 35 test cases and excludes run_354. Use its exact case lists without replacements.
Design-space coverage
What changes across the dataset
Parent shape or archetype means the source geometry family, not an ML baseline model. The cards distinguish shape breadth from operating-condition breadth.
Parent shapes / archetypes
1 parent configuration
- Wheel-less squareback Windsor body The AutoCFD4 squareback reference is the common parent for all parameterized variants.
Geometry parameterization
7 continuous geometry parameters
The parametric CAD model changes front/rear proportions, fastback transition, taper, ground clearance, and underbody angle.
View 7 documented variables and ranges
- Front/rear length ratio
- 0–0.8
- Back/fast length ratio
- 0.08–0.5
- Nose/windscreen height ratio
- 0.3–0.7
- Fastback height ratio
- 0–0.9
- Side taper
- 50–100 mm
- Ground clearance
- 10–200 mm
- Bottom taper angle
- 1°–50°
Conditions and sampling
Operating conditions
All cases use the AutoCFD wind-tunnel-style setup at nominal 40 m/s, Reynolds number 2.9 × 10⁶, and 2.5° yaw; flow conditions are fixed.
Sampling
A deterministic, extendable Halton sequence samples 355 points in the seven-dimensional geometry space; complete per-run fields are available for 350.
Benchmark coverage
What the current splits test
Eight source split families are bound to the publicly available fields: four nested data-efficiency splits and four held-out regimes, covering 233 distinct test cases across five case sets.
Benchmark splits
All eight splits in the pinned Hugging Face manifest are available in the leaderboard profile viewer. FluidsBench retains the official assignments and uses the intersection with published field files. Runs 350–354 have no public per-run payload and are excluded, without replacement or reassignment. Counts below show available / official cases.
| Split ID | Purpose | Train | Validation | Test |
|---|---|---|---|---|
full | Random source baseline. | 280 / 284 | 35 / 35 | 35 / 36 |
medium | Nested data-efficiency subset. | 93 / 95 | 35 / 35 | 35 / 36 |
scarce | Smaller nested subset. | 47 / 47 | 35 / 35 | 35 / 36 |
super_scarce | Minimum-data nested subset. | 8 / 8 | 35 / 35 | 35 / 36 |
geometry | Geometry out of distribution. | 243 / 248 | 36 / 36 | 71 / 71 |
high_drag | High-drag out of distribution. | 244 / 248 | 36 / 36 | 70 / 71 |
low_drag | Low-drag out of distribution. | 244 / 248 | 36 / 36 | 70 / 71 |
image_wake | Image-derived wake out of distribution. | 244 / 248 | 35 / 36 | 71 / 71 |
The four data-efficiency splits share validation and test cases; only training size changes. The five distinct test sets contain 233 unique available cases. The full split is the published seed-42 benchmark, not a reconstruction of the paper's 60/20/20 split. Use validation for model selection and reserve test cases for final evaluation.
Evaluate and submit
Follow the WindsorML resumable participant quickstart. The commands verify the pinned data, package all 16 fixed and relative profiles per case, and validate the complete result. Follow the submission instructions to propose the generated directory for review.
Open-reproducibility submission Files, validation and optional artifacts
Check this dataset's submission availability before preparing a result. Contributions are accepted only while its exact scoring-support release is marked official and open. For an open dataset, contributors propose one result directory at submissions/windsorml/<submission-id>/ in the FluidsBench submission repository. The planned result package contains:
-
submission.jsonfor model metadata and the required scalar metrics; -
evaluation-evidence.jsonlinking those submitter-provided metrics to the declared evaluation revision and profile-index checksum; -
discretization.jsondescribing the training input and supervision supports, inference input, direct model outputs, and mapping to the official scoring support; -
discretization/cases.jsonlrecording case-level counts, domains, mapping, and declared scoring coverage; -
metrics/cases.jsonrecording the official-support errors, the unweighted and physical-measure-weighted sufficient statistics required by that dataset's contract, and exact coverage for every declared evaluation case; -
profiles/index.jsonlisting the lightweight profile chunks; and -
profiles/chunk-*.jsoncontaining profile coordinates and predictions for the declared test cases.
FluidsBench uses an open reproducibility track. The declared evaluation partition, scored case lists, and ground truth are public. Evaluation cases must not be used for fitting, hyperparameter selection, or preprocessing statistics. Contributors will calculate the metrics and extract the profiles from their own predictions. Each dataset specification fixes the locations, IDs, weights, targets, and coverage used for final scoring. A model may infer on a different point set, mesh, or grid, but its final predictions must be mapped onto every required entity in the release-bound public field files before the reference evaluator calculates the errors. Large cases may be processed in chunks, but contributors must sum the sufficient statistics across all chunks before calculating a case metric; chunk-level L2 values are never averaged. Leaderboard field errors are calculated on the declared evaluation/test cases, not on the training cases. Full meshes and volume fields are not committed to the submission repository. Contributors may optionally publish example cases or the complete scored predictions in a public, immutable external repository and link that artifact from the submission. Use the WindsorML benchmark specification for the exact split, metric, case, panel, station, and quantity IDs. The reference equations and code define how the scalar values must be calculated, and the worked examples show the JSON structure.
Before opening a pull request, run python scripts/validate_submission.py --contributor-stage submissions/windsorml/<submission-id>. The validator checks the schema, split identity, scoring-support binding, derived-score arithmetic, profile coverage, reported discretization, array lengths, ordering, finite values, and file hashes. It checks the submitted package's internal consistency; it does not run the contributor's model or recalculate base metrics from full fields.
A passing validator or pull request will not make a result official. Official results require maintainer approval of the validated submission package. Public code, model, and environment artifacts and their documentation are optional. If supplied, they must use stable links and include the revisions, digests, and licences required by the submission schema; the leaderboard reports those details. Their absence does not change accuracy rank, citation eligibility, or promotion eligibility. Prediction sharing is also optional. When prediction artifacts are shared, the leaderboard separately reports their coverage, artifact-check status, and whether any metrics were recomputed; it does not collapse those distinct checks into a generic “verified” badge. The public validation record states exactly what FluidsBench checked.
Prototype notice: any case IDs, ground truth, profile values, or leaderboard rows labelled prototype are illustrative dummy data. Those materials must be replaced and finalized before the dataset opens; a prototype row is never an official result.
Scoring support and complete coverage Exact files, weighting and complete-case rules
Submissions are open.
Final predictions must cover the complete reference support. For every scored case, this means every required entity, exactly once, in the actual field-bearing mesh or curve file from the named public dataset release. FluidsBench binds those files, their ordering, any masks, and their hashes to the scoring-support release. A method may infer on another representation and may process a large file in chunks, but it must map its predictions back to every required reference entity before calculating the final metrics. Downsampled or partially covered predictions are not complete results.
| Scored support | Public field file and association | Required coverage | Relative-L2 pair |
|---|---|---|---|
| Three-dimensional body boundary | run_<case-id>/boundary_<case-id>.vtu; cpavg and cfxavg/cfyavg/cfzavg in VTK PointData; matching point dual areas are in boundary_dual_area_<case-id>.npy for the 350 complete public field cases | Every point carrying the scored pressure and skin-friction coefficients | Area-weighted primary; unweighted point (each point counts equally) secondary |
| Three-dimensional flow volume | run_<case-id>/volume_<case-id>.vtu; velocityxavg, velocityyavg, velocityzavg, and pressureavg in VTK CellData | Every cell carrying those velocity components and pressure | Equal native cell only; the scoring contract does not use cell-volume weights |
How to calculate large cases
- WindsorML uses published point dual areas for primary surface relative L2 and equal-point surface relative L2 as a secondary diagnostic. Its volume fields use equal native cell weights only; no cell-volume sidecar or volume-weighted secondary metric is required.
- Preserve the raw native point order for surface fields and cell order for volume fields. Predict the raw published
pressureavgvalues without a new offset or density scaling; its physical units and reference remain under audit. - In one pass over each case, accumulate the squared-error numerator and ground-truth denominator for every relative-L2 variant required in the table above, together with the corresponding entity count and total physical measure wherever one is used. Chunks may be any convenient size, but their numerators and denominators must be summed before taking the square root; never average chunk-level L2 values.
- Calculate each complete-case percentage first, then macro-average the case percentages so every case counts equally.
Sharing complete prediction fields is optional. A contributor may link versioned predictions in an external public repository, but the submission package records exact coverage plus the per-case sufficient statistics used to reproduce each required relative-L2 value.
Native CFD ground-truth profiles
Every available test case has three surface Cp cuts and five wake velocity profiles, each with 128 samples. The viewer shows both fixed locations and body-height-relative locations: 16 series per case. Values come directly from the evaluator's pinned native CFD support, with no fabricated model curves or scores. The fixed families contribute to the benchmark score; relative families are report-only with zero weight.
| Fixed station ID | Trace |
|---|---|
cp_centreline_upper | Upper centreline, nose to base. |
cp_base_vertical | Vertical centreline on the base. |
cp_side_horizontal_y_0p194 | Side surface at y = 194 mm. |
wake_vertical_x_0p05l | Vertical wake line 0.05L behind the base. |
wake_vertical_x_0p10l | Vertical wake line 0.10L behind the base. |
wake_vertical_x_0p25l | Vertical wake line 0.25L behind the base. |
wake_vertical_x_0p50l | Vertical wake line 0.50L behind the base. |
wake_lateral_x_0p10l_y_0p194 | Lateral wake line 0.10L behind the base, at y = 194 mm. |
Metric definitions
- Relative L2 error
- For each evaluation/test geometry, map predictions to every entity in the release-bound public field support and undo any training normalization. Calculate both paired relative-L2 values from the accumulated sufficient statistics: area-weighted L2 is primary on the boundary, while unweighted cell L2 (each cell counts equally) is primary in the flow volume. Report the complete-case percentages first, then take the arithmetic mean of the geometry-level values.
- Relative L1 error
- When reported as a supplementary metric, relative L1 uses the same complete dimensional support and the primary weighting for that domain. Calculate a percentage for each geometry, then take the arithmetic mean of the geometry-level percentages.
- Dataset-native evaluation
- The boundary arrays are the dimensionless coefficients
cpavg,cfxavg,cfyavg, andcfzavg, not pressure or wall shear in pascals. Volume fields are scored in their release-bound dataset-native representation. Any normalization used for training must be undone first. - Surface pressure-coefficient relative L1/L2
- Relative L1 and paired relative L2 error for
cpavgat every point in the public boundary VTU. - Surface skin-friction-coefficient relative L1/L2
- Relative L1 and paired relative L2 error for the coefficient vector
(cfxavg, cfyavg, cfzavg)at every public boundary point. - Volume velocity relative L1/L2
- Relative L1 and L2 error for the velocity vector \(u = (u_x, u_y, u_z)\) on every field-bearing cell in the release-bound public volume VTU.
- Volume pressure relative L1/L2
- Relative L1 and L2 error for pressure on every field-bearing cell in the same public volume VTU.
- AB-UPT convention
- The secondary unweighted point relative L2 (each point counts equally) follows the AB-UPT-compatible convention used for AhmedML and DrivAerML: targets may be normalized for training, but evaluation uses unnormalized predictions and targets. FluidsBench uses the area-weighted boundary value as its primary surface metric. AB-UPT v2 does not report WindsorML numbers.
- Coefficient of determination
- For scalar values \(y_i\), \(R^2 = 1 - \sum_i(\hat{y}_i - y_i)^2 / \sum_i(y_i - \bar{y})^2\). Higher is better; 1.0 is perfect.
- Cd and Cl R2
- R2 over all evaluated cases. The evaluator integrates predicted and reference Cp and skin-friction fields using the same boundary support, reference area of 0.112 m², and +y lift convention.
- Force R2
- Mean of Cd R2 and Cl R2.
- Cp cut R2
- One global R2 over all selected surface pressure coefficient samples from the held-out test cases. The evaluator flattens
cp_predand ground-truthcpacrosscase_id,cut_id,station_id, and cut sample locations before computing R2. The plotted trace is chosen with the leaderboard station selector. - Cp cut comparisons
- Per-case and per-cut R2 values can be reported as profile comparisons, but the leaderboard ranking should use the global held-out score so that cases with low Cp variance do not dominate through unstable per-case averages.
- Velocity profile R2
- One global R2 for streamwise velocity
u_x / U_inf, withU_inf = 42.1 m/s, across all five fixed stations, test cases, and 128 samples per station. The body-height-relative result is reported separately at zero weight.
Default overall score
The leaderboard can be ranked by any individual metric. Its default ranking is a bounded 0-100 weighted score:
Relative L1 fields are reported as sortable supplementary metrics, but they are not included in this default score unless a future benchmark rule assigns them weights.
S_error(q) = 100 * max(0, 1 - E_q / cap_q)
S_R2(q) = 100 * min(1, max(0, R2_q))
S_overall = sum(weight_q * S_q) | Component | Weight | Cap or transform |
|---|---|---|
| Surface pressure coefficient, area-weighted relative L2 | 15% | 15% cap |
| Surface skin-friction coefficient vector, area-weighted relative L2 | 10% | 20% cap |
| Dimensional volume velocity, unweighted cell relative L2 | 15% | 12% cap |
| Dimensional volume pressure, unweighted cell relative L2 | 10% | 15% cap |
| Cd R2 | 15% | Clamped to [0, 1] |
| Cl R2 | 10% | Clamped to [0, 1] |
| Velocity profile R2 | 15% | Clamped to [0, 1] |
| Cp cut R2 | 10% | Clamped to [0, 1] |