pyforce: Python Framework data-driven model Order Reduction for multi-physiCs problEms
pyforce is a Python package implementing Data-Driven Reduced Order Modelling (DDROM) techniques for applications to multi-physics problems, mainly set in the Nuclear Engineering world. These techniques have been implemented upon the dolfinx package (currently v0.6.0), part of the FEniCSx project, to handle mesh generation, integral calculation and functions storage. The package is part of the ROSE (Reduced Order modelling with data-driven techniques for multi-phySics problEms): mathematical algorithms aimed at reducing the complexity of multi-physics models (for nuclear reactors applications), at searching for optimal sensor positions and at integrating real measures to improve the knowledge on the physical systems.
The techniques implemented here follow the same underlying idea expressed in the following figure: in the offline (training) phase, a dimensionality reduction process retrieves a reduced coordinate system onto which encodes the information of the mathematical model; the sensor positioning algorithm then uses this set to select the optimal location of sensors according to some optimality criterion, which depends on the adopted algorithm. In the online phase, the DA process begins, retrieving a novel set of reduced variables and then computing the reconstructed state through a decoding step.
At the moment, the following techniques have been implemented:
This package is aimed to be a valuable tool for other researchers, engineers, and data scientists working in various fields, not only restricted in the Nuclear Engineering world.
If you are going to use pyforce in your research work, please cite the following articles. The authors would be pleased if you could cite the relevant papers:
For LaTeX users:
@article{RIVA2024_AMM,
title = {Multi-physics model bias correction with data-driven reduced order techniques: Application to nuclear case studies},
journal = {Applied Mathematical Modelling},
volume = {135},
pages = {243-268},
year = {2024},
issn = {0307-904X},
doi = {https://doi.org/10.1016/j.apm.2024.06.040},
url = {https://www.sciencedirect.com/science/article/pii/S0307904X24003196},
author = {Stefano Riva and Carolina Introini and Antonio Cammi},
keywords = {Reduced order modelling, Data driven, Nuclear reactors, Multi-physics, Model correction},
}
@article{CAMMI2024_NED,
title = {Data-driven model order reduction for sensor positioning and indirect reconstruction with noisy data: Application to a Circulating Fuel Reactor},
journal = {Nuclear Engineering and Design},
volume = {421},
pages = {113105},
year = {2024},
issn = {0029-5493},
doi = {https://doi.org/10.1016/j.nucengdes.2024.113105},
url = {https://www.sciencedirect.com/science/article/pii/S002954932400205X},
author = {Antonio Cammi and Stefano Riva and Carolina Introini and Lorenzo Loi and Enrico Padovani},
keywords = {Hybrid Data-Assimilation, Generalized Empirical Interpolation Method, Indirect Reconstruction, Sensors positioning, Molten Salt Fast Reactor, Noisy data},
}
The package can be installed using pip
, make sure all the dependencies are installed (following these steps). The requirements are listed here.
It is suggested to create a conda environment: at first, clone the repository
git clone https://github.com/ERMETE-Lab/ROSE-pyforce.git
create a conda environment using environment.yml
cd ROSE-pyforce
conda env create -f pyforce/environment.yml
activate the environment and then install the package using pip
conda activate pyforce-env
python -m pip install pyforce/
The pyforce package is tested on some tutorials available in the docs, including fluid dynamics and neutronics problems.
Coming Soon: multiphysics (neutronics+thermal-hydraulics) with dolfinx and OpenFOAM.
The snapshots can be either generated by the user or be downloaded at the following link
pyforce is currently developed and mantained at Nuclear Reactors Group - ERMETE Lab by
under the supervision of Prof. Antonio Cammi.
If interested, please contact stefano.riva@polimi.it, carolina.introini@polimi.it, antonio.cammi@polimi.it
We welcome contributions and feedback from the community! Below are the guidelines on how to get involved:
If you would like to contribute, please follow these steps:
If you encounter any issues or bugs with pyforce, please report them through the GitHub Issues page. Be sure to include detailed information to help us resolve the problem efficiently.
For support, you can either:
Thank you for helping improve pyforce!