---
title: DrivAerML Aero Surrogates Demo
emoji: "🏎"
colorFrom: green
colorTo: blue
sdk: gradio
sdk_version: 6.14.0
python_version: "3.12"
app_file: app.py
pinned: false
hardware: zero-a10g
suggested_storage: small
---
# GeoTransolver — DrivAerML Surface Aerodynamics
Interactive demo of NVIDIA's **GeoTransolver** transformer surrogate for
external automotive aerodynamics. Pick one of the 48 held-out
[DrivAerML](https://huggingface.co/datasets/neashton/drivaerml) validation
geometries and predict surface **pressure**, **wall-shear-stress**, and
integrated **drag / lift forces** in seconds on ZeroGPU.
**Checkpoint:** [`nvidia/geotransolver_drivaerml`](https://huggingface.co/nvidia/geotransolver_drivaerml)
**Architecture / training code:** [`NVIDIA/physicsnemo`](https://github.com/NVIDIA/physicsnemo)
**Benchmarking on your data:** [`NVIDIA/physicsnemo-cfd`](https://github.com/NVIDIA/physicsnemo-cfd)
## How it works
- **Selection.** A dropdown lists the 48 DrivAerML validation cases. On
change, the full multi-solid STL is pulled from the public dataset and
cached locally; a decimated GLB (500k faces, vertex-merged, Z-up→Y-up) is
served to `gr.Model3D` for the preview viewer.
- **Inference.** Click *Run inference*. The GeoTransolver checkpoint is
loaded lazily on the first GPU call, then predicts per-cell pressure and
wall-shear-stress on the full STL (~750k cells). Cell values are averaged
to vertices for smooth shading.
- **Forces.** Drag (Fx) and lift (Fz) are integrated
on the surface with the same formula as
`physicsnemo-cfd`'s `compute_drag_and_lift`, in Newtons at the DrivAerML
reference condition (30 m/s, ρ = 1.205 kg/m³).
- **Caching.** Switching fields (pressure / WSS magnitude / WSS x|y|z)
re-renders the cached prediction client-side — no GPU quota burned.
Re-selecting a previously-run geometry uses the cached download.
## Why only DrivAerML validation cases?
The checkpoint is trained exclusively on DrivAerML. Out-of-distribution
geometries — pickup trucks, aircraft, anything but a DrivAer-style sedan —
return non-physical predictions. To keep the demo trustworthy we restrict
inputs to held-out validation cases.
If you have your own DrivAerML-style STLs and want benchmark-grade
inference, see
[`NVIDIA/physicsnemo-cfd`](https://github.com/NVIDIA/physicsnemo-cfd)'s
`GeoTransolverWrapper` and `workflows/benchmarking/`.
## Files
- `app.py` — Gradio UI, STL download/decimate, inference glue, Plotly viewer.
- `requirements.txt` — `nvidia-physicsnemo`, `nvidia-physicsnemo-cfd` from
git, plus Gradio, PyVista, Plotly, trimesh.
## License
Apache-2.0. The DrivAerML dataset is CC BY-SA 4.0 — see the
[dataset card](https://huggingface.co/datasets/neashton/drivaerml) for
attribution requirements when using results derived from those geometries.