Skip to content

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

Open

Description

@sgtkeum

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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions