Skip to content

johnpwakefield/mevlib

Repository files navigation

MEVlib Logo

Multistep Effectiveness Factor Lookup Library

This package is certainly in its early stages. We hope that others will find it useful, but it unlikely this package will do everything you want it to out of the box (though this is of course the goal). Moreover, at this stage, any results obtained using it should be corroborated with some other source.

If you intend to use it, feel free to send an email to the package maintainers (jwake@umich.edu) with any questions or concerns.

Installation

Because the intended audience of this package is small, it is unlikely we will add it to a repository like PyPi. This package may either be used in a virtual environment (recommended) or installed. For the former, a script has been included to do this for you (assuming standard packages like venv and pip3 are already installed); simply run source activate_venv.sh. The latter can be done for a user-specific (PEP370) install pip3 install path/to/mevlib or a system-wide install sudo -H pip3 install path/to/mevlib.

Usage Example

To generate a Matlab lookup tables:

~ $ source activate_venv.sh

~ $ cd examples/

~ $ mevtable --rate example_file.sbl mat

After doing so one will find mevtable_rates.mat in the current working directory containing lookup table data.

Integration into CFD Packages

This package can produce four different lookuptables:

rate

A table mapping temperature to Ng × N rate matrices (assumes infinite Biot number)

biotrate

A table mapping temperature to Ng × N rate matrices (assumes infinite Biot number) TODO not yet implemented

ints

A table mapping Thiele moduli to single stage effectiveness factors (λ ↦ η)

biotints

A table mapping a Thiele modulus and a Biot number to a single stage effectiveness factor TODO not yet implemented

diag

A table mapping temperatures to diagonalizations without left eigenvectors (temperature to N + (N + 1)Ng scalars)

fulldiag

A table mapping temperatures to diagonalizations with left eigenvectors (temperature to N + (N + 1)Ng scalars)

An implementation in a CFD code would consist of either: a rate table (where we must have ψ = 1) or

  • One of
    • fulldiag
    • diag and a means of computing R − 1 online
    • a means of computing the entire diagonalization online
  • and one of
    • ints or biotints
    • a means of computing single stage effectiveness factors online

For some irreversible, cascading reactions R − 1 may be very easy to compute, making its inclusion in a lookup table suboptimal. For simple shapes (e.g.~spheres) maintaining a table of single stage effectiveness factors is entirely unnecessary. For small numbers of species (e.g.~2 gaseous and 1 solid) in complex geometries it is likely optimal to do diagonalization online but use a table for single stage effectiveness factors.

We hope that including the easiest to use option (a single rate table) in addition to the ability to mix and match for a particular application will increase the usefulness of this package.

Input File Formats

At present only one input file format is supported. An example is provided in examples/example_file.sbl.

Output File Formats

.mat and Pickle Files

Binary Files

All numbers are little-endian. The format descriptions below impose the limit of 8 ascii characters for a species name, 128 gaseous and solid species, and a maximum lookup table size of 32768. (The single-stage effectiveness factor has a 4 byte table length so we mostly stay aligned to 32 bit words.)

For rate files:

Element Size (bytes) Data Type

+

Magic Number

-----------------------------------+

Array Ordering

-----------------------------------+

Version

-----------------------------------+

Number of Gases Ng

-----------------------------------+

Number of Solids Ns

-----------------------------------+

Size of Lookup Table M

6

-------------------+

1

-------------------+

1

-------------------+

1

-------------------+

1

-------------------+

2

literal

--------------------+

'F' or 'C' (ascii)

--------------------+

integer

--------------------+

integer

--------------------+

integer

--------------------+

integer

0x3ccf89cc873e

----------------------+

only 'F' implemented

----------------------+

only 0x01 so far

----------------------+

----------------------+

----------------------+

Repeat N = Ng + Ns times Species Identifier 8 ascii
Repeat N = Ng + Ns times Molecular Weight 8 double
Repeat M times Temperature 8 double
Repeat M times Rate Matrix 8NNg doubles

For ints files:

Element Size (bytes) Data Type

+

Magic Number

-----------------------------------+

Array Ordering

-----------------------------------+

Version

-----------------------------------+

Number of Theile Moduli M

6

--------------+

1

--------------+

1

--------------+

4

literal

--------------------+

'F' or 'C' (ascii)

--------------------+

integer

--------------------+

integer

0xe288ab756456

----------------------+

only 'F' implemented

----------------------+

only 0x01 so far

----------------------+
Repeat M times Theile Modulus 8 double
Repeat M times Single-Step Effectiveness Factor 8 double

For diag files:

Element Size (bytes) Data Type

+

Magic Number

-----------------------------------+

Array Ordering

-----------------------------------+

Version

-----------------------------------+

Number of Gases Ng

-----------------------------------+

Number of Solids Ns

-----------------------------------+

Size of Lookup Table M

6

-------------------+

1

-------------------+

1

-------------------+

1

-------------------+

1

-------------------+

2

literal

--------------------+

'F' or 'C' (ascii)

--------------------+

integer

--------------------+

integer

--------------------+

integer

--------------------+

integer

0x42523d52ce9b

----------------------+

only 'F' implemented

----------------------+

only 0x01 so far

----------------------+

----------------------+

----------------------+

Repeat N = Ng + Ns times Species Identifier 8 ascii
Repeat N = Ng + Ns times Molecular Weight 8 double
Repeat M times Temperature 8 double
Repeat M times

$\bar{\mathbf{D}} / L^2$

-----------------------------------+

Eigenvalues

-----------------------------------+

R

-----------------------------------+

BsR

8N

-------------------+

8Ng

-------------------+

8Ng2

-------------------+

8NsNg

doubles

--------------------+

doubles

--------------------+

doubles

--------------------+

doubles

----------------------+

----------------------+

fortran order

----------------------+

fortran order

For fulldiag files:

Element Size (bytes) Data Type

+

Magic Number

-----------------------------------+

Array Ordering

-----------------------------------+

Version

-----------------------------------+

Number of Gases Ng

-----------------------------------+

Number of Solids Ns

-----------------------------------+

Size of Lookup Table M

6

-------------------+

1

-------------------+

1

-------------------+

1

-------------------+

1

-------------------+

2

literal

--------------------+

'F' or 'C' (ascii)

--------------------+

integer

--------------------+

integer

--------------------+

integer

--------------------+

integer

0x525e7b2d317d

----------------------+

only 'F' implemented

----------------------+

only 0x01 so far

----------------------+

----------------------+

----------------------+

Repeat N = Ng + Ns times Species Identifier 8 ascii
Repeat N = Ng + Ns times Molecular Weight 8 double
Repeat M times Temperature 8 double
Repeat M times

$\bar{\mathbf{D}} / L^2$

-----------------------------------+

Eigenvalues

-----------------------------------+

R

-----------------------------------+

BsR

-----------------------------------+

R − 1

8N

-------------------+

8Ng

-------------------+

8Ng2

-------------------+

8NsNg

-------------------+

8Ng2

doubles

--------------------+

doubles

--------------------+

doubles

--------------------+

doubles

--------------------+

doubles

----------------------+

----------------------+

fortran order

----------------------+

fortran order

----------------------+

fortran order

Fortran Modules

To make this package easier to use, some output formats generate code that can be called from a containing simulation without any complex dependencies or data files. These are generated by using f03 and f90 as output formats. f90 generates a data type MEVData containing the lookup table and a collection of related functions whereas f03 generates an class. These modules contain mevdata_getmev, mevdata_init, and mevdata_destroy. The initialization and destruction functions have no imput arguments (other than the data structure). mevdata_getmev requires a vector of free stream concentrations and a temperature.

Note on Naming of the MEVlib Package

When referred to as a Python package mevlib is written in all lowercase to be consistent with Python conventions. As a project it is referred to as MEVlib. For example, 'Effectiveness factors were computed with MEVlib.' and 'The mevlib package is not available on PyPi.' are both correct.

Notes on Programming Style

Docstrings are a work in progress; reshuffling some code among modules may be required to make module groupings make more sense.

All files in this project should adhere to PEP8 except:

  • W391 (avoids confusion with W292 on different text editors)
  • E306 (avoids awkward spacing and is better than violating E731)
  • E302 and E305 (two lines are used to denote different logical groupings of functions and classes)

TODO

  • migrate verification cases to new format
  • write better documentation / tutorial
  • add tests (pytest/tox, use pytest-cov)
  • add and sign versions
  • ensure docstring coverage
  • several of the scripts in "scripts" are actually tests, make these into tests and move them into the tests directory
  • many scripts should maybe be "examples"
  • the options.py file referenced by scripts is kinda wonky
  • make sure this file obeys rst syntax

Attribution

This library/tool was written by John Wakefield (jwake@umich.edu) in collaboration with Aaron Lattanzi, Brennan Pecha, Peter Ciesielski, and Jesse Capacelatro.

For imformation on citing this paper contact jwake@umich.edu.

This software package was developed based upon funding from the Alliance for Sustainable Energy, LLC, Managing and Operating Contractor for the National Renewable Energy Laboratory for the U.S. Department of Energy.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published