Skip to content

One-dimensional unsteady compressible reacting flow simulation framework, designed for simple prototyping and testing of novel reduced-order model methods.

License

Notifications You must be signed in to change notification settings

cwentland0/perform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Documentation Status Coverage Status DOI

Prototyping Environment for Reacting Flow Order Reduction Methods (PERFORM)

PERFORM is a combination 1D compressible reacting flow solver and modular reduced-order model (ROM) framework, designed to provide a simple, easy-to-use testbed for members of the ROM community to quickly prototype and test new methods on challenging (yet computationally-manageable) reacting flow problems. We hope that this tool lowers the barrier to entry for researchers from a variety of fields to develop novel ROM methods and benchmark them against an interesting set of reacting flow configurations.

Documentation

Please see the documentation website for a detailed user guide on installing, running, and designing new simulations for PERFORM. Brief descriptions of available solver routines and ROM methods are also included; please see the solver theory documentation PDF in doc/ for more details. A very brief introduction to installing and running the code is included below.

Installation

Python 3.6+, numpy, scipy, and matplotlib are required for executing PERFORM. To install the package and any missing dependencies, clone this repository, enter the code's root directory perform/, and run the following command:

pip install -e .

This will add the script perform to your Python scripts directory, which is used to execute the solver.

Running PERFORM

PERFORM is executed using the perform command that was added to your Python scripts directory at installation. The options for running the code from the command line are as follows:

perform [-h] [-w WORK] [-p PARAM] [-r ROM]
   -w, --work WORK    runtime working directory
   -p, --param PARAM  solver parameters input file path
   -r, --rom ROM      ROM parameter input file path

Note that all command-line options are optional: WORK defaults to the terminal's current working directory, PARAM defaults to ./solver_params.inp, and ROM defaults to ./rom_params.inp. The format and input key values of PARAM and ROM are described in great detail in the documentation. You can run the examples by navigating to the relevant directory and executing perform.

Benchmark Cases

Four sample benchmark cases are included in examples/:

  1. shock_tube: A non-reacting flow designed following the Sod shock tube problem, which models a diaphragm breaking between a high-pressure, high-density chamber of gas and a low-pressure, low-density chamber of gas. The resulting shock, contact surface, and rarefaction waves are a good test for the strong gradient reconstruction and future-state prediction capabilities of ROM methods.
  2. contact_surface: A case that introduces strong contact surface gradients in the temperature and species mass fraction fields. There is no viscosity or reaction in this case, but it serves as a good baseline for testing the ability of models to predict system acoustics in a multi-species system. By applying acoustic forcing of varying amplitudes and frequencies at the outlet, the parametric prediction capabilities of models may also be evaluated.
  3. standing_flame: This case finally introduces viscosity and a single-step irreversible reaction, albeit with a fairly simple flow regime in which the flame is stationary. The highly non-linear interaction between the flame and the system acoustics makes for challenging parametric prediction studies, especially in a ROM's ability to predict the flame's unsteady heat release rate.
  4. transient_flame: The transient flame introduces a bulk velocity to the standing flame flow, causing the flame to propagate downstream. This case is a good challenge for both parametric prediction (by introducing artificial acoustic forcing) but also a ROM's future-state prediction capabilities.

Please see the README.md file in each sample case directory for additional details

Testing

You can test your installation of PERFORM by running the included unit, integration, and regression tests. This can be done from the code's root directory by executing.

chmod +x tests/run_tests.sh
tests/run_tests.sh

You will be prompted to choose whether to run the regression tests after the unit and integration tests have completed, as the regression tests can take a while to complete. NOTE: The ROM regression tests will fail if you have not installed TensorFlow 2.X; you can install TensorFlow and its dependencies with pip install tensorflow.

Utilities

Some very simple pre/post-processing scripts are provided in perform/utils/. These include scripts for generating POD basis modes, calculating input parameters for non-reflective boundary conditions etc. Brief descriptions of the scripts and their input parameters are given within the scripts.

Issues and Contributing

If you experience errors or unexpected solver behavior when running PERFORM, please first double-check your input parameters and use the documentation as a reference for proper input file formatting. If problems persist, please create a new issue on this repository, and I’ll do my best to resolve it. If you would like to contribute new features or bug fixes yourself, please fork this repository and submit a pull request against this repository when you're finished.

About

One-dimensional unsteady compressible reacting flow simulation framework, designed for simple prototyping and testing of novel reduced-order model methods.

Topics

Resources

License

Stars

Watchers

Forks