AREALS: large geometry models

AREALS models are large geometry models: they learn surface geometry from meshes alone, with zero simulations, and serve as priors for physics. Fine-tuned on simulations, AREALS matches the accuracy of the same architecture trained from scratch with 74.5% fewer simulations on WindsorML and 50% fewer on DrivAerML and DrivAerNet++ (Large Geometry Models Are Priors for Cheap Physics Pretraining, Chlon & Chlon, Hassana Labs). The 6.4M model in this repository, areals-6.4m, reaches the WindsorML target with 86.9% fewer.

This repository contains two large geometry models and one fine-tuning example. Use them with AREALS 0.3.0.

hf download leochl/areal-base --local-dir areals-release-models

Large geometry models

Directory Model Parameters
areals-3.2m Large geometry model, 4 encoder blocks 3,215,503
areals-6.4m Large geometry model, 11 encoder blocks 6,332,239

Each encodes a surface into 256 areal tokens, which carry position, normal and area, and decodes the unsigned distance and the sign-free normal line (the projector nnáµ€) at arbitrary query points. Both are pretrained self-supervised: the targets come from the meshes themselves, never from a simulation.

import areals

model, config, metadata = areals.load_model("areals-release-models/areals-6.4m", device="cpu")

Pretraining

Both models have width 192, two decoder blocks and 256 tokens, and differ only in encoder depth. Each was pretrained on 14,304 meshes with complete surface inputs for 10,626 updates at global batch 64, using AdamW at peak learning rate 3e-4 with 200 warm-up updates, cosine decay to 5% and weight decay 0.05, in FP32. areals-3.2m used seed 29 and areals-6.4m seed 17. The exports contain the complete encoder and spatial query decoder; training-only auxiliary heads and optimizer states are excluded. The pretraining cohort (ids, families and splits) ships with AREALS 0.3.0 as src/areals/configs/pretraining_objects.json.

Fewer simulations to learn a pressure field

Fine-tuning a large geometry model on WindsorML simulations reaches test nRMSE 0.25 with far fewer simulations than training the same architecture from scratch:

Initialization Training simulations Fewer than from scratch
From scratch 137 —
areals-3.2m 35 74.5%
areals-6.4m 18 86.9%

Test nRMSE on the 35 held-out WindsorML test cars by number of training simulations (lower is better):

Training simulations 18 35 69 137 274
From scratch 0.4454 0.3755 0.2610 0.2448 0.1976
areals-3.2m 0.2567 0.2196 0.1789 0.1652 0.1492
areals-6.4m 0.2444 0.2114 0.1866 0.1711 0.1570

Each fit trains the whole network for 8,000 updates on the same nested WindsorML training subsets, with global batch 8 and 2,048 pressure queries per car. Fine-tuned models transfer the encoder and spatial query decoder, add a new scalar pressure head and train at learning rate 2e-4. From scratch, each budget uses the best of three learning rates (2e-5, 2e-4, 1e-3), chosen on validation. The checkpoint with the lowest validation nRMSE on 35 cars is scored once on the 35 test cars. nRMSE is the area-weighted RMSE of surface pressure divided by the area-weighted standard deviation of the true pressure, averaged over cars.

Fine-tuning example: WindsorML surface pressure

Directory Model Parameters
areals-3.2m-windsor-274 areals-3.2m fine-tuned on 274 WindsorML simulations 3,216,080

This is a large geometry model fine-tuned on simulations. Starting from areals-3.2m, it fine-tunes the encoder and spatial query decoder and adds a new scalar head that predicts surface pressure at any query point. It trained on the 274 WindsorML training cars with seed 0, learning rate 2e-4, global batch 8 and 8,000 updates. Validation on 35 cars selected update 7,750, with mean per-car nRMSE 0.13803711943302105; reference_validation.json records the individual results, and selection.json seals the selection. The sealed selection scores test nRMSE 0.1492 on the 35 test cars.

import areals

model, config, metadata = areals.load_model("areals-release-models/areals-3.2m-windsor-274")

Predict pressure on a prepared WindsorML geometry at any world-coordinate query points:

python -m areals.windsor predict --checkpoint areals-release-models/areals-3.2m-windsor-274 \
  --geometry data/windsor/geometry/WindsorML__run_0.npz --queries queries.npy --out predictions.npz

To fine-tune either large geometry model on your own budget, see the WindsorML guide in the code repository:

torchrun --standalone --nproc_per_node=4 -m areals.windsor train \
  --checkpoint areals-release-models/areals-6.4m \
  --windsor-index data/windsor/index.json \
  --field-dir data/windsor/fields --geometry-dir data/windsor/geometry \
  --budget 18 --seed 0 --out runs/windsor-6.4m-18

Files

Each directory contains tensor-only model.pt weights and a config.json with the architecture, training recipe, source checkpoint hash and weight checksum. The loader verifies the checksum and requires an exact state-dictionary match. catalogue.json indexes the models, the top-level config.json lists them, and SHA256SUMS lists every file digest.

These are research checkpoints for the supplied preparation and axis conventions. Different input sampling, coordinate frames or geometry distributions can change performance. Normal predictions are unoriented.

The code repository documents pretraining, Windsor preparation, fine-tuning and inference. Data are obtained separately from their original publishers; the model weights are released under the accompanying MIT licence.

Citation

@misc{chlon2026areals,
  title  = {Large Geometry Models Are Priors for Cheap Physics Pretraining},
  author = {Chlon, Maggie and Chlon, Leon},
  year   = {2026},
  note   = {Hassana Labs}
}
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train leochl/areal-base