physicsnemo
physicsnemo copied to clipboard
domino crash model arch and example
PhysicsNeMo Pull Request
Description
Checklist
- [ ] I am familiar with the Contributing Guidelines.
- [ ] New or existing tests cover these changes.
- [ ] The documentation is up to date with these changes.
- [ ] The CHANGELOG.md is up to date with these changes.
- [ ] An issue is linked to this pull request.
Dependencies
This PR has a lot of repetition from the DoMINO aerodynamics example, especially in the model. Can it be consolidated? If the original model code is not able to do so, can it be updated to accommodate both examples?
Greptile Overview
Greptile Summary
This PR introduces the DoMINO transient model architecture and crash simulation example for structural mechanics, enabling time-series displacement prediction on deformable surfaces.
Key Changes
- New
domino_transientmodel module with implicit/explicit integration schemes for time-series prediction - Crash simulation datapipe (
CrashDataset) for loading VTP displacement files and computing time-series features - Example training/testing scripts for structural mechanics use case
- Support for transient modeling with configurable integration schemes
Critical Issues Found
Multiple bugs will cause runtime failures:
encodings.py:148-calculate_total_neighbors_in_radiusreturns uninitialized variable for invalid geo_encoding_typeutils.py:405-418- Tensor shape mismatch in metrics computation causes IndexError (sum removes feature dimension but code indexes it)crash_datapipe.py:72- Creates scalar instead of array for indicesdomino_datapipe_transient.py:658- Missingtimestepsparameter causes NameError in transient modecrash_datapipe.py:132-141- Implicit scheme creates mismatched tensor shapes between inputs (N-1) and expected targetstest.py:168-177- Implicit rollout broadcasts same displacement to all neighbors incorrectly
Documentation Issue
README describes aerodynamics/DrivAerML dataset instead of crash simulation use case - needs complete rewrite
Recommendations
- Fix all critical bugs before merge (especially tensor shape issues and missing parameters)
- Verify implicit integration scheme logic with unit tests
- Update README for crash simulation domain
- Add validation that geo_encoding_type is valid
Confidence Score: 1/5
- This PR has multiple critical bugs that will cause runtime failures in both training and inference
- Score of 1 reflects 6+ critical bugs that will cause exceptions: uninitialized variables, tensor shape mismatches causing IndexError, missing function parameters causing NameError, and incorrect array initialization. These are not edge cases - they will fail immediately when running transient models or computing metrics
- Critical attention needed:
examples/structural_mechanics/crash_domino/src/utils.py(metrics will crash),physicsnemo/datapipes/cae/domino_datapipe_transient.py(missing parameter),examples/structural_mechanics/crash_domino/src/crash_datapipe.py(array initialization + implicit scheme logic),physicsnemo/models/domino_transient/encodings.py(uninitialized return)
Important Files Changed
File Analysis
| Filename | Score | Overview |
|---|---|---|
| physicsnemo/models/domino_transient/encodings.py | 2/5 | implements geometry encoding for transient DoMINO model. contains critical bug at line 148: calculate_total_neighbors_in_radius returns uninitialized variable if geo_encoding_type is invalid |
| examples/structural_mechanics/crash_domino/src/utils.py | 1/5 | utility functions for crash simulation. critical bug at lines 405-418: tensor shape mismatch in metrics_fn_surface will cause IndexError - sum operation removes feature dimension but code tries to index it |
| examples/structural_mechanics/crash_domino/src/crash_datapipe.py | 2/5 | crash dataset loader. critical bug at line 72: creates scalar instead of array. implicit scheme logic issue at lines 132-141: mismatched tensor dimensions between inputs and targets |
| physicsnemo/datapipes/cae/domino_datapipe_transient.py | 2/5 | transient datapipe for DoMINO. critical bug: process_volume method missing timesteps parameter in signature but uses it on lines 716-755, will cause NameError for transient models |
| examples/structural_mechanics/crash_domino/src/test.py | 2/5 | inference script for crash model. implicit scheme autoregressive rollout has bug at lines 168-177: broadcasts same displacement to all neighbors, causing incorrect position updates |
| examples/structural_mechanics/crash_domino/README.md | 1/5 | documentation file. content describes external aerodynamics and DrivAerML dataset but file is in crash_domino directory. entire README needs rewrite for crash simulation use case |
Sequence Diagram
sequenceDiagram
participant User
participant TrainScript as train.py
participant DataPipe as DoMINODataPipe
participant CrashDS as CrashDataset
participant Model as DoMINO
participant Loss as compute_loss_dict
User->>TrainScript: Start training
TrainScript->>TrainScript: Load scaling factors
TrainScript->>DataPipe: create_domino_dataset()
DataPipe->>CrashDS: Initialize dataset
CrashDS->>CrashDS: Load VTP files with time-series displacements
loop Each Epoch
loop Each Batch
TrainScript->>DataPipe: Get batch
DataPipe->>CrashDS: __getitem__(idx)
CrashDS->>CrashDS: Read displacement VTP file
CrashDS->>CrashDS: Extract surface coordinates + displacements
alt Implicit Scheme
CrashDS->>CrashDS: Compute delta displacements (N-1)
else Explicit Scheme
CrashDS->>CrashDS: Use absolute displacements (N)
end
CrashDS-->>DataPipe: Return raw data dict
DataPipe->>DataPipe: process_surface()
DataPipe->>DataPipe: Downsample points & compute kNN neighbors
DataPipe->>DataPipe: Normalize coordinates
DataPipe->>DataPipe: Scale surface fields
DataPipe-->>TrainScript: Preprocessed batch
TrainScript->>Model: forward(batch)
Model->>Model: Compute geometry encodings
Model->>Model: Compute positional encodings
alt Implicit Integration
loop integration_steps
Model->>Model: Update positions with predictions
Model->>Model: Predict displacement delta
end
else Explicit Integration
loop timesteps
Model->>Model: Predict displacement for timestep
end
end
Model-->>TrainScript: predictions (vol, surf)
TrainScript->>Loss: compute_loss_dict()
Loss->>Loss: Compute MSE or relative MSE
Loss-->>TrainScript: loss value
TrainScript->>TrainScript: Backprop & update weights
end
TrainScript->>TrainScript: Validation step
TrainScript->>TrainScript: Save checkpoint if improved
end