Experimental GeoTransolver with local geometry encodings at mesh nodes, and a jet engine bracket example

Open
#2,216 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 2 days

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
8/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
python, pytorch
Domain
ai

Research direction

This is a proposal for a series of pull requests, not a bounded task. Read the existing signed_distance_field and radius_search functionals that the two proposed layers would build on, and the GeoTransolver and GALE modules they would extend. The issue names no tests or entry points to start from. Done would mean the three proposed pull requests land under physicsnemo.experimental with the equivalence check against the trained checkpoint reproduced.

Written by the indexing model from the issue text.

Description

Summary

Structural surrogates on unstructured tetrahedral meshes need to know the local member thickness at every node: thin ribs and webs carry the stress peaks. We trained GeoTransolver surrogates of the displacement and von Mises stress at every mesh node of jet engine brackets (DeepJEB, 2,138 generated designs; SimJEB, 381 human designs). Two local geometry encodings at the mesh nodes gave the most accurate models:

  • a signed-distance stencil: the signed distance to the surface at a small stencil of probes around every node, encoded by an MLP;
  • radius-pooled node features: up to K neighbouring nodes within each radius, drawn on the GPU and max-pooled after a shared MLP.

On the DeepJEB test designs the stress relative L2 error is 0.066 with these encodings against 0.083 for the stock GeoTransolver recipe (same data and training budget). After LoRA adaptation to SimJEB (physicsnemo.experimental.peft) the SimJEB test stress error is 0.255 against 0.326.

Proposal

A short series of pull requests, all under experimental:

  1. Layers — physicsnemo.experimental.nn.SignedDistanceStencil and physicsnemo.experimental.nn.RadiusPooledFeatures, built on the existing signed_distance_field and radius_search functionals.
  2. Model — physicsnemo.experimental.models.geotransolver_sdf.GeoTransolverSDF: the GeoTransolver core with the two layers at every node, and ScaledSliceGALE, a GALE subclass whose slice-normalization epsilon scales with the number of tokens and whose temperature has a configurable floor (the defaults of the stock GALE are unchanged).
  3. Example — examples/structural_mechanics/jet_engine_bracket: data download and conversion, training on DeepJEB, evaluation on DeepJEB and SimJEB, and LoRA transfer to SimJEB. Out-of-distribution screening will follow separately, after the guardrails refactor.

The library model reproduces our trained model: with the converted checkpoint, the DeepJEB test stress error is 0.0659 against 0.0658 (820 cases) and the SimJEB split means agree to four decimals (1,508 cases).

The code was written with Devin (an AI coding agent) under my direction; I reviewed the design and the results (unit tests, equivalence with a trained checkpoint, and a full training rerun of the example).

Dominant language
Python
Stars
3.4k
Forks
828
Avg merge
4d 3h
Merged PRs (30d)
81

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from NVIDIA/physicsnemo

All issues in NVIDIA/physicsnemo

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.