From cd65ed0065adb40520aed23370f3ade1728497a9 Mon Sep 17 00:00:00 2001 From: AirbornePanda Date: Tue, 28 Apr 2026 00:28:54 +0100 Subject: [PATCH 1/5] Update README.md --- examples/structural_mechanics/crash/README.md | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/examples/structural_mechanics/crash/README.md b/examples/structural_mechanics/crash/README.md index 514c1c792e..d6a7220bc3 100644 --- a/examples/structural_mechanics/crash/README.md +++ b/examples/structural_mechanics/crash/README.md @@ -637,6 +637,128 @@ Muon: Car-crash test MSE at probe location (Driver, Passenger):

+## Community Dataset: OpenRadioss Bumper Beam + +This section describes an open-source dataset generated with +[OpenRadioss](https://github.com/OpenRadioss/OpenRadioss) and contributed by the community +to provide a freely accessible alternative for experimenting with this example. + +### Dataset Overview + +

+ +

+ +The dataset is based on the +[OpenRadioss Bumper Beam example](http://openradioss.atlassian.net/wiki/spaces/OPENRADIOSS/pages/11075585/Bumper+Beam), +a standard crash benchmark consisting of a bumper beam impacting a rigid cylindrical pole. +Raw simulation data was generated by iteratively varying two design parameters across 131 runs: + +| Parameter | Range | Description | +|---|---|---| +| Shell thickness | 1.2 mm – 2.0 mm | Applied uniformly to `PROP/SHELL` IDs 2 and 7 | +| Pole Y-axis offset | −500 mm – +500 mm | Shifts the rigid pole impact position along the beam | + + +OpenRadioss ANIM output files are first converted to **d3plot** format using +[Vortex-Radioss](https://github.com/Vortex-CAE/Vortex-Radioss), then curated to **VTP** format +using [PhysicsNeMo-Curator](https://github.com/NVIDIA/physicsnemo-curator) for training. + +The dataset (131 runs, including both raw d3plot and curated VTP files) is publicly available +on Hugging Face: + +> 🤗 **[AIRBORNEPANDA/BumperBeamCrashExample](https://huggingface.co/datasets/AIRBORNEPANDA/BumperBeamCrashExample)** + +### Generating the Dataset Yourself + +A full data generation pipeline is provided at +**[HoussemMouradi/OpenRadioss2PhysicsNeMo](https://github.com/HoussemMouradi/OpenRadioss2PhysicsNeMo)**. +It automates the complete workflow: modifying OpenRadioss input decks, running the solver, +converting ANIM → d3plot, and generating `GLOBAL_FEATURES.json`. + +Interactive Jupyter notebooks walk through every step and handle all dependency installation +automatically: + +| Platform | Notebook | +|---|---| +| Windows (local Jupyter) | [OpenRadioss2PhysicsNEMO_windows.ipynb](https://github.com/HoussemMouradi/OpenRadioss2PhysicsNeMo/tree/main/OpenRadioss2PhysicsNeMo_NotebooksOpenRadioss2PhysicsNeMo_windows.ipynb) | +| Linux (local Jupyter) | [OpenRadioss_PhysicsNEMO_linux.ipynb](https://github.com/HoussemMouradi/OpenRadioss2PhysicsNeMo/tree/main/OpenRadioss2PhysicsNeMo_Notebooks/OpenRadioss2PhysicsNeMo_linux.ipynb) | +| Google Colab ☁️ | Open In Colab | + +After running a notebook, follow the +[PhysicsNeMo-Curator crash ETL instructions](https://github.com/NVIDIA/physicsnemo-curator/blob/main/examples/structural_mechanics/crash/README.md) +to curate the d3plot outputs to VTP format for training. + +### Training Configuration + +The following configuration was used to train on the Bumper Beam dataset. It is based on the +[`bumper_geotransolver_oneshot.yaml`](https://github.com/NVIDIA/physicsnemo/blob/main/examples/structural_mechanics/crash/conf/bumper_geotransolver_oneshot.yaml) +experiment preset, using the **VTP reader**, **GeoTransolver (one-shot)** model, and +**point cloud** datapipe. + +Run with: + +```bash +python train.py --config-name=bumper_geotransolver_oneshot +``` + +The key configuration values are: + +```yaml +# Bumper beam crash experiment using GeoTransolver (one-shot). +# Usage: python train.py --config-name=bumper_geotransolver_oneshot + +experiment_name: "Bumper-GeoTransolver" + +defaults: + - reader: vtp + - datapipe: point_cloud + - model: geotransolver_one_shot + - training: default + - inference: default + - _self_ +# -- Data ---------------------------------------------------------------------- +training: + raw_data_dir: ./CURATED_DATA_VTP/TRAINING_DATA # path to curated VTP train split + raw_data_dir_validation: ./CURATED_DATA_VTP/VALIDATION_DATA # path to curated VTP validation split + global_features_filepath: ./CURATED_DATA_VTP/GLOBAL_FEATURES.json # path to GLOBAL_FEATURES.json + optimizer: muon + +# -- Dataset ------------------------------------------------------------------- +num_time_steps: 11 +num_training_samples: 124 # ~92% of 131 runs +num_validation_samples: 7 + +inference: + raw_data_dir_test: ??? # path to curated VTP test split + +# -- Datapipe features --------------------------------------------------------- +datapipe: + static_features: [thickness] # per-node static features for this dataset + dynamic_targets: + - effective_plastic_strain + - stress_vm + global_features: + - thickness_scale # shell thickness (mm) + - velocity_x # initial impact velocity in X (mm/ms) + - rwall_origin_y # rigid pole Y-coordinate (mm) + sample_type: all_time_steps + +# -- Model --------------------------------------------------------------------- +model: + functional_dim: 4 # input coords (x, y, z) + static_features (1) + out_dim: 50 # (num_time_steps - 1) * 5 = 50 * 5 + global_dim: 3 # must match len(datapipe.global_features) +``` + +### Results +1769108712488 +1769108706907 + + + +*Results to be updated* + ## TODO - [ ] **Normalize global features**: Global features (e.g., velocity_x, thickness_scale, rwall_origin_y) are currently passed to the model without normalization. Add support for computing and applying per-feature mean/std (or similar) so global inputs are normalized consistently with node features and positions. From 2d963dbc5818650e28bfe676ba198a00c98ea250 Mon Sep 17 00:00:00 2001 From: AirbornePanda Date: Tue, 28 Apr 2026 00:50:46 +0100 Subject: [PATCH 2/5] Update README.md --- examples/structural_mechanics/crash/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/structural_mechanics/crash/README.md b/examples/structural_mechanics/crash/README.md index d6a7220bc3..67d79f76b8 100644 --- a/examples/structural_mechanics/crash/README.md +++ b/examples/structural_mechanics/crash/README.md @@ -756,9 +756,6 @@ model: 1769108706907 - -*Results to be updated* - ## TODO - [ ] **Normalize global features**: Global features (e.g., velocity_x, thickness_scale, rwall_origin_y) are currently passed to the model without normalization. Add support for computing and applying per-feature mean/std (or similar) so global inputs are normalized consistently with node features and positions. From 8ebe092259d8a3e60671815f55a5bdae952da9a2 Mon Sep 17 00:00:00 2001 From: AirbornePanda Date: Tue, 28 Apr 2026 00:53:27 +0100 Subject: [PATCH 3/5] Update README.md --- examples/structural_mechanics/crash/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/structural_mechanics/crash/README.md b/examples/structural_mechanics/crash/README.md index 67d79f76b8..c042346658 100644 --- a/examples/structural_mechanics/crash/README.md +++ b/examples/structural_mechanics/crash/README.md @@ -726,11 +726,11 @@ training: # -- Dataset ------------------------------------------------------------------- num_time_steps: 11 -num_training_samples: 124 # ~92% of 131 runs +num_training_samples: 124 num_validation_samples: 7 inference: - raw_data_dir_test: ??? # path to curated VTP test split + raw_data_dir_test: ??? # -- Datapipe features --------------------------------------------------------- datapipe: From 05bbf06caf89d1c08f31c3d5030b7a1a31eaf3f9 Mon Sep 17 00:00:00 2001 From: AirbornePanda Date: Tue, 28 Apr 2026 02:34:57 +0100 Subject: [PATCH 4/5] Update examples/structural_mechanics/crash/README.md Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- examples/structural_mechanics/crash/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/structural_mechanics/crash/README.md b/examples/structural_mechanics/crash/README.md index c042346658..34c51551d2 100644 --- a/examples/structural_mechanics/crash/README.md +++ b/examples/structural_mechanics/crash/README.md @@ -681,7 +681,7 @@ automatically: | Platform | Notebook | |---|---| -| Windows (local Jupyter) | [OpenRadioss2PhysicsNEMO_windows.ipynb](https://github.com/HoussemMouradi/OpenRadioss2PhysicsNeMo/tree/main/OpenRadioss2PhysicsNeMo_NotebooksOpenRadioss2PhysicsNeMo_windows.ipynb) | +| Windows (local Jupyter) | [OpenRadioss2PhysicsNEMO_windows.ipynb](https://github.com/HoussemMouradi/OpenRadioss2PhysicsNeMo/tree/main/OpenRadioss2PhysicsNeMo_Notebooks/OpenRadioss2PhysicsNeMo_windows.ipynb) | | Linux (local Jupyter) | [OpenRadioss_PhysicsNEMO_linux.ipynb](https://github.com/HoussemMouradi/OpenRadioss2PhysicsNeMo/tree/main/OpenRadioss2PhysicsNeMo_Notebooks/OpenRadioss2PhysicsNeMo_linux.ipynb) | | Google Colab ☁️ | Open In Colab | From db88764960b46b2f9f9cb26a573d39b89bd360e6 Mon Sep 17 00:00:00 2001 From: AirbornePanda Date: Tue, 28 Apr 2026 02:35:27 +0100 Subject: [PATCH 5/5] Update examples/structural_mechanics/crash/README.md Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- examples/structural_mechanics/crash/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/structural_mechanics/crash/README.md b/examples/structural_mechanics/crash/README.md index 34c51551d2..167aae4d90 100644 --- a/examples/structural_mechanics/crash/README.md +++ b/examples/structural_mechanics/crash/README.md @@ -747,7 +747,7 @@ datapipe: # -- Model --------------------------------------------------------------------- model: functional_dim: 4 # input coords (x, y, z) + static_features (1) - out_dim: 50 # (num_time_steps - 1) * 5 = 50 * 5 + out_dim: 50 # (num_time_steps - 1) * 5 = 10 * 5 = 50 global_dim: 3 # must match len(datapipe.global_features) ```