Skip to main content

A Python-Based wrapper for the NASA CEA Thermochemical Code

Project description

PyPI NOTE: This package is installed with 'pip install CEA_Wrap' with an underscore. PyPI doesn't support underscores

CEA_Wrap

A Python-Based wrapper for the NASA CEA Thermochemical Code

Installation Instructions

We are now on PyPi!

In a command prompt type pip install --upgrade CEA_Wrap to upgrade/install CEA_Wrap

Or you can click on "releases" on the right side of the main page and download the .zip file, then do pip install --upgrade [your zip file name].zip

You can now import it as any other python module with import CEA_Wrap. Whenever you import the file, it will put the required thermo.lib and trans.lib files into your current directory.

Examples

Examples on basic use can be found in the "examples" directory.

Or you can run a short demo by doing "python -m CEA_Wrap" on the command line!

Documentation

Utilities

open_thermo_lib() Opens the default thermo library input file using the user's default .inp file viewer (should prompt if none)

open_pdfs() Opens the attached NASA pdfs using the user's default pdf viewer

print_assets_directory() Prints to console the current location of the directory where CEA_Wrap assets are located. Also returns this value

Specifying Materials

In order to run problems, you must create materials. Materials must be either Fuel or Oxidizer (F or O) objects

Constructor Parameters:

__init__(name, temp=298, wt_percent=None, mols=None, chemical_composition = None, hf = None):

  • name: required parameter, the CEA material name with correct spelling. E.G. aluminum is "Al(cr)" and methane is "CH4".
    • If you specify chemical_composition, name can be whatever single word you want
  • temp: default 298, specified reactant temperature, kelvin
  • wt_percent: A weight-based percentage for the element. Weight percentages do not need to add up to 100, and are calculated on the ratio with other Fuels/Oxidizers
  • mols: A mol-based percentage for the element. Can be used as in Oxidizer("O2", mols=1) and Oxidizer("N2", mols=3.76) for air (except CEA has "air" as a reactant...)
  • NOTE: wt_percent and mols cannot be specified together, if neither is defined, the Material gets a wt_percent of 1
  • chemical_composition: chemical composition such as "LI 1 B 1 H 4" for LiBH4. If defined, will not use CEA default values
    • NOTE: UNTESTED
  • hf: Enthalpy of formation, kJ/kg, must be specified if chemical_composition is specified
    • NOTE: UNTESTED

Generic Problem Methods (apply to all problems such as DetonationProblem, RocketProblem, etc.):

Constructor Parameters (making new Problem Objects):

__init__(*, **kwargs):

  • NOTE: all parameters must be specified by keyword, e.g. problem = RocketProblem(pressure=500, massf=True)
  • pressure: default 1000, Initial problem pressure
    • pressure can be specified later with .set_pressure
  • materials: default None, List of Material objects, order doesn't matter, of Oxidizer and Fuel objects e.g. materials=[material1, material2, ...]
    • materials can be specified later with .set_materials([material1, material2, ...])
    • materials can also be specified when you run a problem like problem.run_cea(material1, material2, ...)
    • materials MUST all have wt_percent specified or all have mols specified, can't have mixtures.
  • massf: default False, CEA usually outputs product ratios in mole ratios, if massf is True, mass ratios are specified
    • massf can be specified later with .set_massf
  • filename: default "my_output", the filename we save our .inp files to and CEA saves our .out and .plt to.
    • DO NOT INCLUDE ".inp" IN YOUR FILENAMES. Do not include any slashes.
    • filename can be specified later with .set_filename
  • pressure_units: default "psi", the units that your input pressure is in. Possible values are "bar", "atm", "psi", or "mmh"
    • pressure_units can be specified later with .set_pressure_units
  • inserts: default None, a list of CEA names for species which should be forced into the product considerations
    • Tip: If you are doing calculations with Aluminum, I recommend using inserts=["AL2O3(L)", "AL2O3(a)"]
  • omits: default None, a list of CEA names for species which should be specifically ignored in the product considerations
  • NOTE: You must specify one of the following reactant ratio schemes. Either during initialization with x=1.0 or later with problem.set_x(1.0) where x is p_f, o_f, etc.

Specifying reactant ratios:

Key CEA Key Description
p_f %f Percent fuel by weight
f_o f/o Fuel-to-oxidant weight ratio
o_f o/f Oxidant-to-fuel weight ratio
phi phi Equivalence ratios in terms of fuel-to-oxidant weight ratios (eq. (9.19) in Gordon and McBride, 1994)
r_eq r Chemical equivalence ratios in terms of valences (eq. (9.18) in Gordon and McBride, 1994)

Available Methods

data = run_cea(*materials)

Run the CEA problem, returning an "Output" dictionary (keys and values specified later in this documentation)

  • Inputs are an optional material list. If materials are not specified as an initial parameter or with .set_materials, you can list them here.

set_absolute_o_f()

Have you ever specified all your components in absolute percentages, and then have to manually calculate the o_f ratio based on what is fuel and what is oxidizer?

Well no more! Just call this function and we calculate the correct o_f ratio for you so that your absolute percentages are correctly reflected in the problem. Functions off of the existing material list, so call this after setting materials

Rocket Problem Constructor Additional Parameters:

  • sup: default 1, supersonic exit/throat area ratio
    • sup can be specified later with .set_sup
  • sub: default None, subsonic exit/throat area ratio
    • sub can be specified later with .set_sub
  • NOTE: sup and sub cannot be specified at the same time
  • ae_at: default None, exit/throat area ratio (alias for sup)
    • ae_at can be specified later with .set_ae_at
  • analysis_type: default "equilibrium", whether to use equilibrium reactions or frozen. For using frozen specify "frozen" or "frozen nfz=1" for frozen at the chamber or "frozen nfz=2" for frozen at the throat

Available Output Dictionary Keys:

All output objects are "Output" objects, which are similar to dictionaries, but can also be accessed with dot notation.

For example if you had "data = problem.run_cea()", and wanted pressure, you could do either data.p or data["p"]

In addition, all product dictionaries are also "Output" objects so to get H2O composition, you could use data.prod_c.H2O or data["prod_c"]["H2O"] or data["prod_c"].H2O, etc.

Detonation:

  • prod_c - dictionary of chamber products, in mole or mass fractions (as specified in problem)
  • p - pressure, bar
  • t - temperature, Kelvin
  • h - enthalpy, kJ/kg
  • rho - density, kg/m^3
  • son - sonic velocity, m/s
  • visc - burned gas viscosity, Pascal-Seconds
  • mw - molecular weight of products, kg/kmol
  • cp - constant-pressure specific heat capacity, kJ/(kg*K)
  • gammas - isentropic ratio of specific heats
  • gamma - "real" ratio of specific heats (multiplied by -(dLV/dLP)t)
  • vel - detonation velocity, m/s
  • mach - detonation mach number
  • p_p1 - P/P1, ratio of detonation pressure to initial pressure
  • t_t1 - T/T1, ratio of detonation temperature to initial pressure
  • m_m1 - M/M1, ratio of detonation molecular weight to initial molecular weight
  • rho_rho1 - RHO/RHO1, ratio of detonation density to initial density
  • dLV_dLP_t - (dLV/dLP)t, used to convert isentropic gamma to real gamma
  • dLV_dLT_p - (dLV/dLT)p
  • phi - weight-based equivalence ratio of oxidizer/fuel

HP (Specified Enthalpy and Pressure):

  • prod_c - dictionary of chamber products, in mole or mass fractions (as specified in problem)
  • p - pressure, bar
  • t - temperature, Kelvin
  • h - enthalpy, kJ/kg
  • rho - density, kg/m^3
  • son - sonic velocity, m/s
  • visc - burned gas viscosity, Pascal-Seconds
  • mw - molecular weight of products, kg/kmol
  • cp - constant-pressure specific heat capacity, kJ/(kg*K)
  • gammas - isentropic ratio of specific heats
  • gamma - "real" ratio of specific heats (multiplied by -(dLV/dLP)t)
  • dLV_dLP_t - (dLV/dLP)t, used to convert isentropic gamma to real gamma
  • dLV_dLT_p - (dLV/dLT)p
  • phi - weight-based equivalence ratio of oxidizer/fuel

Rocket:

  • NOTE : Properties are by default at exit. Chamber parameters are prefixed "c_" and throat properties "t_"
  • NOTE : Properties not defined for frozen flow are marked with an asterisk (*)
  • prod_c - dictionary of chamber products, in mole or mass fractions (as specified in problem)
  • *prod_t - dictionary of throat products, in mole or mass fractions (as specified in problem)
  • *prod_e - dictionary of exit products, in mole or mass fractions (as specified in problem)
  • p - pressure, bar
    • t_p - throat
    • c_p - chamber
  • t - temperature, Kelvin
    • t_t - throat
    • c_t - chamber
  • h - enthalpy, kJ/kg
    • t_h - throat
    • c_h - chamber
  • rho - density, kg/m^3
    • t_rho - throat
    • c_rho - chamber
  • son - sonic velocity, m/s
    • t_son - throat
    • c_son - chamber
  • visc - burned gas viscosity, Pascal-Seconds
    • t_visc - throat
    • c_visc - chamber
  • mw - molecular weight of all products, kg/kmol
    • t_mw - throat
    • c_mw - chamber
  • m - molecular weight calculated as the weight of all products divided by the number of gaseous moles (same as mw if no condensed phases as mw=m), kg/kmol
    • t_m - throat
    • c_m - chamber
  • condensed - True if there are condensed phase products (measured by m originally = 0), False otherwise
    • t_condensed - throat
    • c_condensed - chamber
  • cp - constant-pressure specific heat capacity, kJ/(kg*K)
    • t_cp - throat
    • c_cp - chamber
  • gammas - isentropic ratio of specific heats
    • t_gammas - throat
    • c_gammas - chamber
  • gamma - "real" ratio of specific heats (multiplied by -(dLV/dLP)t) (same as gammas for frozen flow)
    • t_gamma - throat
    • c_gamma - chamber
  • isp - ideal isp (ambient pressure = exit pressure), s
    • t_isp - throat
  • ivac - vacuum isp, s
    • t_ivac - throat
  • cf - ideally expanded thrust coefficient
    • t_cf - throat
  • *dLV_dLP_t - (dLV/dLP)t, multiply gammas by negative this to convert isentropic gamma to real gamma
    • *t_dLV_dLP_t - throat
    • *c_dLV_dLP_t - chamber
  • *dLV_dLT_p - (dLV/dLT)p, see the Mathematical Analysis in CEA_Wrap/assets for explanation
    • *t_dLV_dLT_p - throat
    • *c_dLV_dLT_p - chamber
  • cstar - characteristic velocity in chamber, m/s
  • *mach - mach number at exhaust
  • o_f - oxidizer/fuel weight ratio
  • phi - weight-based equivalence ratio of oxidizer/fuel

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

CEA_Wrap-1.4.1.tar.gz (10.3 MB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page