pressio-rom
This work was started with a focus on projection-based reduced-order models (ROMs), which is a strongly multidisciplinary topic. Working towards a production-level ROM capability inevitably means spanning multiple fields ranging from, e.g., linear algebra, nonlinear solvers and optimization, to time integration, distributed computing and HPC. This constitutes a substantial challenge to tackle, whose complexity increases if aiming to develop a generic library.
To start such a project from the ground up, grow it and then being able to maintain it, we believe modularity, abstractions and well-defined APIs to be fundamental design principles to rely on. This has been, and still is, at the core of our development effort, and has lead to a highly modular design of pressio (see table below): each component (level) of the stack covers a specific capability and depends, via well-defined public APIs, on the ones below it. This has required (and still does) a considerable development effort, since each component needs “attention” and can easily be scoped into an independent, full-time project.
So why doing all this rather than adopting a different, simpler approach, for example,
limiting and hiding as implementation some of the supporting functionalities?
Because we believe the current structure/design offers several major benefits
that would be hard—and in some cases impossible—to obtain otherwise: flexibility,
extensibility, maintainability, and usability of each component on its own.
One drawback is that at any point in time, the various components might
have different maturity levels, so reaching a comparable and solid maturity
across the stack might take some time—our current goal is to obtain
in version 1.0.0
a uniform maturity level across
the rom
, ode
, and solvers
components. Please keep this in mind while browsing
the documentation and the code.
The supported capabilities of pressio-rom
are included in the table below.
Each component (level) of the stack depends on the ones below it.
Description |
Header(s) |
|
---|---|---|
|
concepts |
|
|
concepts |
|
|
concepts |
|
|
linear dense (on-node) solvers |
|
These components depend on the Pressio/pressio-ops header-only library.
Get Started
Configure pressio-rom: (currently) it is a header-only library, so should be trivial
Explore our end-to-end ROM demos to see
pressio-rom
in action and to experiment directlyExplore the tutorials showing the individual capabilities
License and Citation
The full license (BSD-3) is available here.
Sooner or later we will publish this… in the meantime, you can find on arXiv an (outdated) preprint at: https://arxiv.org/abs/2003.07798
Questions?
Find us on Slack: https://pressioteam.slack.com or open an issue on github.