PERFORM: A Python package for developing reduced-order models for reacting fluid flows

low-dimensional

The Prototyping Environment for Reacting Flow Order Reduction Methods (PERFORM) is a Python packaged designed to allow rapid implementation, testing, and evaluation of ROMs for one-dimensional reacting flows. It combines a robust compressible reacting flow solver with a modular framework for deploying new ROM methods. This eliminates much of the software development difficulty for ROM researchers who may have little experience with combustion modeling or low-level programming languages, allowing them to perform research with a challenging, practical class of problems.

Statement of need
The ROM community spans many scientific disciplines, and efforts to build and release tools for ROM research and applications have been commensurately broad. Some open-source projects provide implementations of standard ROM methods within a specific flow solver (Grunloh et al., 2021;Hess & Rozza, 2020;Hesthaven et al., 2016;Stabile et al., 2017;Stabile & Rozza, 2018). Other libraries have been developed to provide generic interfaces with dynamical system solvers and supply ROM capabilities, most notably Pressio (Rizzi et al., 2020) and pyMOR (Milk et al., 2016). These libraries allow CFD practitioners to test a suite of standard ROM methods with an existing CFD solver. However, these libraries may not be useful to ROM method developers, who may find it difficult and prohibitively time-consuming to implement new ROM methods in a very complex software environment or in a low-level programming language. Further, those who wish to test ROM methods on combustion problems may not have access to a robust and efficient combustion CFD solver (many are closed-source) or the know-how to use general open-source solvers such as OpenFOAM.
PERFORM aims to ease some of these difficulties by packaging a one-dimensional compressible reacting flow solver with a flexible object-oriented ROM framework. It trades flexibility of application for flexibility of ROM development, focusing on a single class of problems while making the code extremely accessible to ROM researchers of all backgrounds. For one, PERFORM is written purely in Python, a widely-used, easily-learned, and flexible highlevel programming language. Additionally, ROMs in PERFORM are structured within a class hierarchy which maximizes code re-use and minimizes developer effort in implementing variations of ROM methods.
In most cases, only a basic understanding of Python classes and NumPy/SciPy operations is required to implement new ROM methods. Further, all elements of the underlying reacting flow solver are separated from the ROM classes, ensuring that ROM method developers do not need to interact with the solver routines. As such, the learning curve for understanding PERFORM's ROM mechanics and implementing new ROM methods is relatively gentle. Note that although pyMOR (Milk et al., 2016) similarly provides a pure Python ROM framework, it aims to be far more generalizable to any class of problems, be compatible with a host of low-level computational and data handling libraries, and enable parallel computing. While this makes pyMOR much more flexible and efficient, it can also make ROM prototyping and code maintenance much more cumbersome.
PERFORM's public repository comes with several benchmark cases which are ready to run out-of-the-box. As will be discussed below, these benchmark cases address several of the critical issues facing the broader ROM community, particularly the difficulty of propagating transient flow features beyond the training data set and making accurate predictions in a complex parameter space. We hope that by providing these benchmark cases, the community can measure and compare ROM methods for a more challenging, yet manageable, class of problems.

Features
PERFORM is designed with modularity and expansion in mind. Generic class interfaces are provided to allow for the simple implementation of new gas models, reaction models, flux schemes, time integration schemes, and boundary conditions. Generic class interfaces are also provided for projection-based ROMs, linear trial spaces, and non-linear trial manifolds via autoencoders. Beyond this, the solver comes with many standard accessories, such as restart files, live visualizations of field and probe monitor data, and several useful pre-/post-processing scripts.
At the time of submitting this paper, PERFORM is specifically equipped with the following features: • Solver calorically-perfect gas model irreversible finite-rate reaction model -Roe flux difference scheme (Roe, 1981) several explicit Runge-Kutta time integration schemes implicit BDF time integration schemes, with or without dual time-stepping (Venkateswaran & Merkle, 1995) • ROMs linear Galerkin (explicit and implicit) (Rowley et al., 2004), LSPG (Carlberg et al., 2017), and MP-LSVT (Huang et al., 2021) projection ROMs with gappy POD hyper-reduction (Everson & Sirovich, 1995) -non-linear Galerkin (explicit and implicit), LSPG (Lee & Carlberg, 2020), and MP-LSVT projection ROMs via autoencoders generic interface to Keras (Chollet & others, 2015) neural network models We are working to provide generic class interfaces for non-intrusive ROM methods and ROM stabilization methods (e.g. closure, filtering, artificial viscosity). We are also implementing a thermally-perfect gas model, reversible finite rate reaction model, and a generic interface for PyTorch neural network models.

Applications
PERFORM was created within an ongoing US Air Force Office of Scientific Research Center of Excellence collaboration between researchers from the University of Michigan, the University of Texas at Austin, New York University, and Purdue University investigating ROMs for rocket combustors. Many team members do not have intimate experience with combustion modeling, and PERFORM was originally developed for internal use by those members to test novel ROM methods on simplified combusting flows. Research using PERFORM has already been published, in developing accurate and robust linearized ROMs (Rezaian et al., 2022) and investigating true ROM predictivity via basis and hyper-reduction sampling adaptation (Uy et al., 2022).
Recent community-wide discussions have begun encouraging ROM researchers to pursue more practical fluid flow applications. This was synthesized in the "Data-driven Modeling for Complex Fluid Physics" panel at the 2021 AIAA SciTech Forum, where leaders in the ROM community discussed a general need to evaluate ROMs beyond the traditional "toy" problems (e.g. 1D Burgers', 2D lid-driven cavity). PERFORM was presented as a companion code to this workshop, and provides several benchmark cases for use in future meetings of the workshop. These benchmark cases include a Sod shock tube, a transient multi-species contact surface (with and without artificial acoustic forcing), a stationary premixed flame (with artificial acoustic forcing), and a transient premixed flame (with and without artificial acoustic forcing). These benchmarks are intended to provide some cohesion for the ROM community to address more complex, practical systems.