This is the repo with code for the Predicting Eigenmode Decompositions in Vibroacoustic Systems paper available on openreview. The ModeONet uses the mode superposition to predict the velocity field of vibrating plate with a indentation pattern. It learns both the structure-dependent mode shapes and the frequency-dependent coefficients required to reconstruct the system’s velocity field.
This repository includes the implementation of ModeONet and an example notebook.
You can download the train dataset D50k_complex_field.h5 from Hugging Face. Alternately, the data (split into multiple files) is available from this data repository.
The test dataset D500_edit.h5 is the same as used in Guided Flow Matching Design Optimization for Minimal Structural Vibrations and can be downloaded from Hugging Face or from this data respository.
Create your own indentation pattern and observe the live frequency response function. Try it yourself in this notebook or open it directly in Google Colab:
pip install -r ./requirements.txt
pip install .Fill in all missing paths in ./configs/paths.yaml.
By default, the entire dataset will be loaded into memory, requiring around 40 GB of RAM.
You can disable this option in the same configuration file.
This repository uses Weights & Biases for logging. To use it, create an account and log in with:
wandb loginTrain the ModeONet model with:
python ./vibromodes/run.py ./configs/modeonet.yaml ./configs/paths.yaml \
-w -t modeonet -n <run_name>Although the code is not fully covered by tests, basic unit tests are included. Run them with:
python -m pytest ./testsThe ModeONet Model is implemented in this file.
.
├── LICENSE
├── README.md
├── pyproject.toml
├── requirements.txt
├── configs
│ ├── fqo_unet.yaml #config for the FQO Model
│ ├── modeonet.yaml #config for the ModeONet Model
│ └── paths.yaml #config for train and test paths
├── docs
│ ├── PlatePaint.gif
│ └── overview_figure.jpg
├── notebooks
│ ├── model.pth #final model weights
│ ├── plate_paint.ipynb #interactive drawing application
│ ├── plate_paint_google_colab.ipynb #works on google colab
│ └── test_results.ipynb #evaluates the model on the testset
├── tests
│ ├── __init__.py
│ ├── modeonet_test.py #tests the components of the ModeONet
│ ├── modes_test.py #tests the analytic mode response formular
│ └── velocity_field_test.py #tests the transformation between different velocity field formats
└── vibromodes
├── __init__.py
├── config.py #global config
├── globals.py #global constants
├── hdf5_dataset.py #dataset
├── kirchhoff.py #analytic solution to a plate without a beading pattern
├── log.py #logger
├── loss.py #calculates the phase and magnitude loss
├── metrics.py #calculates the evaluation metrics
├── models
│ ├── __init__.py
│ ├── FQOUNet.py #implementation of the FQO
│ ├── ModeONet.py #implementation of the ModeONet
│ └── nn.py #general neural network building blocks
├── modes.py #analytic mode response
├── plotting.py #some plotting functions
├── run.py #trainings script / main entry point
├── train.py #trainings loop
├── utils.py #some utility functions
└── velocity_field.py #conversion between different formats of velocity fields
@inproceedings{libner2025predicting,
title = {Predicting Eigenmode Decompositions in Vibroacoustic Systems},
author = {Libner, Christian and van Delden, Jan and Schultz, Julius and
Ecker, Alexander S. and L{\"u}ddecke, Timo},
booktitle = {EurIPS 2025 Workshop on Differentiable Systems and Scientific Machine Learning},
year = {2025},
url = {https://openreview.net/forum?id=8KwIJIrHBt},
note = {OpenReview}
}The training and test datasets build upon our previous project on optimizing structural vibration:
@article{delden2025minimizing,
author={van Delden, Jan and Schultz, Julius and Rothe, Sebastian and Libner, Christian and Langer, Sabine C. and L{\"u}ddecke, Timo},
title={Minimizing Structural Vibrations via Guided Flow Matching Design Optimization},
journal={arXiv preprint arXiv:2506.15263},
year={2025},
}
