Spaces:
Running
Running
| # chat_cad vs DrivAerNet / DrivAerNet++: capability parity | |
| Author: Samarjith Biswas, PhD (https://samarjithbiswas.com) | |
| This note maps the public DrivAerNet project | |
| (https://github.com/Mohamedelrefaie/DrivAerNet, Elrefaie, Dai, Ahmed) | |
| against what chat_cad does, so the software demonstrably performs the same | |
| class of work: data-driven aerodynamic design and prediction on car | |
| geometry, driven by the paper's own model (RegDGCNN) on real DrivAer data. | |
| ## What DrivAerNet provides | |
| DrivAerNet++ is a dataset of 8,150 car designs with high-fidelity CFD, | |
| covering fastback / notchback / estateback bodies, plus a model zoo. Its | |
| capabilities fall into these groups: | |
| 1. Parametric models (26 design parameters per car). | |
| 2. CFD aerodynamic coefficients (drag Cd, lift Cl, moments). | |
| 3. Surface fields (pressure coefficient Cp, wall shear stress). | |
| 4. Volumetric fields (3D pressure / velocity / turbulence). | |
| 5. Point clouds and high-resolution meshes. | |
| 6. Renderings and hand-drawn sketches. | |
| 7. ML models: RegDGCNN (drag and surface-field regression), PointNet | |
| variants, GNNs, plus framework examples (FIGConvUNet / AeroGraphNet | |
| in NVIDIA Modulus, PaddleScience). | |
| 8. An "AI Agents in Engineering Design" extension: VLM/LLM agents that go | |
| from a design brief to a simulated result. | |
| ## Capability matrix | |
| | DrivAerNet capability | chat_cad status | How chat_cad does it | | |
| |---|---|---| | |
| | Drag (Cd) prediction with RegDGCNN | DONE | `vehicle_regdgcnn.py` implements the paper's Dynamic Graph CNN (EdgeConv blocks 64/64/128/256, k=20, emb=1024). Trained on real DrivAer CFD point clouds. | | |
| | Trained on REAL DrivAer geometry | DONE | `fetch_drivaernet_pointclouds.py` pulls real CFD surface point clouds from Hugging Face (`Jrhoss/Drivaerml_point_clouds`); `drivaernet_pointclouds.py` pairs them with the authors' train/val/test split. | | |
| | Surface field prediction (Cp) | DONE (added) | `vehicle_surface_field.py` is a DGCNN segmentation-head RegDGCNN that predicts per-point `CpMeanTrim` from geometry, then paints a pressure heat-map on the 3D mesh (`car_pressure` command). | | |
| | Lift / moment coefficients | PARTIAL | Cl reported; analytic estimate by body class, with real Cl available in the CFD label CSVs for future training. | | |
| | 26 parametric design descriptors | DONE | 26-param vehicle design space (`vehicle_lib.py`, `vehicle_sim.py`). | | |
| | Generative design | DONE | Conditional VAE body generator (`vehicle_generative.py`) conditioned on target CdA / stiffness / mass. | | |
| | Sketch to design | DONE | `car_sketch` / `/car/sketch` reads a side-profile silhouette and builds a 3D car (analogue of the DrivAerNet++ Styling Agent). | | |
| | Real-CFD retrieval / calibration | DONE | `drivaernet_calibration.py` + `car_retrieve` match a design to the closest real DrivAerNet++ CFD cases and calibrate Cd. | | |
| | LLM/agent design-to-simulation loop | DONE | The whole app is a chat agent that goes from a brief to geometry, surrogate aero, FEA, NVH (`car_design` full pipeline). | | |
| | Volumetric 3D flow field prediction | NOT DONE | Out of scope (would need volumetric CFD fields, 39 TB Globus-only). | | |
| | Semantic component segmentation (29 labels) | NOT DONE | Not implemented; the segmentation backbone is now present (surface-field head) and could be retargeted to labels. | | |
| ## The two RegDGCNN engines in chat_cad | |
| 1. Scalar drag: `vehicle_regdgcnn.py` -> `weights/regdgcnn_cd.pt`. | |
| Global max-pool over EdgeConv features -> single Cd. Wired into | |
| `predict_aero_auto` (preferred over the older PointNet, with an | |
| analytical fallback). Reported by `car_aero` and `car_design` stage 3. | |
| 2. Per-point surface field: `vehicle_surface_field.py` -> | |
| `weights/regdgcnn_cp.pt`. Same EdgeConv backbone, but the global | |
| feature is broadcast back and concatenated with per-point features so | |
| the head emits one Cp per point. Exposed by `car_pressure <part>`, | |
| which writes a vertex-coloured OBJ and overlays it as a pressure | |
| heat-map in the 3D viewer (`pressure off` restores the part). | |
| ## Training data and provenance | |
| The real point clouds carry true CFD surface fields per point: | |
| `CpMeanTrim` (pressure coefficient) and `wallShearStressMeanTrim_*` | |
| (wall shear stress magnitude and components). Drag labels come from each | |
| run's `force_mom_*.csv` (Cd, Cl, Clf, Clr, Cs). The authors' `splits.json` | |
| is honoured for train/val/test so results are reported on a held-out set, | |
| exactly as the paper does. | |
| ## How to reproduce | |
| ```bash | |
| # 1. download real DrivAer CFD point clouds (5k-node surface samples) | |
| python fetch_drivaernet_pointclouds.py # or --limit N for a subset | |
| # 2a. train the drag RegDGCNN | |
| python -m vehicle_regdgcnn train --data ./DrivAerNet --epochs 80 \ | |
| --batch 8 --num-points 2048 | |
| # 2b. train the surface-pressure (Cp) RegDGCNN | |
| python -m vehicle_surface_field train --data ./DrivAerNet --epochs 60 \ | |
| --batch 4 --num-points 2048 | |
| # 3. in the app: build or sketch a car, then | |
| # car_aero <body> -> Cd / Cl / Cm (engine: regdgcnn) | |
| # car_pressure <body> -> per-point Cp heat-map on the 3D mesh | |
| ``` | |
| Validation note: on CPU with the small downloaded subset (140 train runs, | |
| N=2048), the drag model reaches a positive held-out R2 and the surface-Cp | |
| model learns the pressure distribution. The published paper reaches | |
| R2 ~ 0.9 with the full dataset at N=5000 on GPU; the chat_cad pipeline is | |
| the same architecture and data and scales to that with more runs. | |