Pressio

Simulating parameterized systems of equations is ubiquitous in science and engineering. It is often the case that solving such systems with high level of accuracy is a computationally intensive process. For many-query analyses such as uncertainty quantification and optimization, reduced models are required to make the analysis tractable. Model reduction is a broad and active field. Several techniques exist, but there is no such thing as “one method to rule them all”.
Pressio aims to advance model reduction for science and engineering, and our current focus is on mitigating the intrusive nature of projection-based reduced-order models (pROMs) for large-scale codes, and making this available to the community to foster research of new ideas and as well as more broad testing. The design of Pressio pivots on a minimally intrusive interface with external applications. The core of the project is a header-only C++ library that leverages generic programming to support shared or distributed memory applications using arbitrary data-types and diverse programming models.
Our philosophy
We believe in model reduction techniques that use data but are grounded in physical laws. Projection-based model reduction falls in this category due its basis in mathematically derived projection processes and adherence of physical laws This technique has shown large potential, but its main drawback is an intrusive nature. This has been, historically, one of the key barriers (if not the main one) precluding this technique to impact more broadly science and engineering. As a consequence, this has also limited the range of applications and the capabilities tested. We believe this barrier can be broken, thus opening up large opportunities to explore and mature this field. This is especially true if this advancement is done by leveraging ideas from other fields. This is our “why” and motivates this project.
Features of the Pressio C++ library include:
  • A minimally-intrusive interface that can be useful for a variety of purposes
  • Numerous model reduction routines, including Galerkin, least-squares, and windowed least-squares projections
  • Support for arbitrary datatypes via generic programming and custom operations
  • Built-in support to use Eigen, Kokkos, and Trilinos (with more in progress)
  • Several time integration schemes and nonlinear solvers
The Pressio ecosystem also offers:
  • pressio4py: Python bindings enabling Pressio’s C++ library to be used in pure-Python applications.
  • pressio-tools: A library to compute large-scale SVD, QR, and sample meshes.
  • pressio-demoapps: A suite of 1d, 2d, and 3d demo applications for testing ROMs and hyper-reduction.