Cantera

Previous topic

critical_properties.py

Next topic

rankine.py

This Page

Warning

This documentation is for an old version of Cantera. You can find docs for newer versions here.

isentropic.py

import cantera as ct
import math
import numpy as np


def soundspeed(gas):
    """The speed of sound. Assumes an ideal gas."""

    gamma = gas.cp / gas.cv
    return math.sqrt(gamma * ct.gas_constant
                     * gas.T / gas.mean_molecular_weight)


def isentropic(gas=None):
    """
    ISENTROPIC  isentropic, adiabatic flow example

    In this example, the area ratio vs. Mach number curve is computed. If a
    gas object is supplied, it will be used for the calculations, with the
    stagnation state given by the input gas state. Otherwise, the calculations
    will be done for a 10:1 hydrogen/nitrogen mixture with stagnation T0 =
    1200 K, P0 = 10 atm.

    """

    if gas is None:
        gas = ct.Solution('gri30.xml')
        gas.TPX = 1200.0, 10.0*ct.one_atm, 'H2:1,N2:0.1'

    # get the stagnation state parameters
    s0 = gas.s
    h0 = gas.h
    p0 = gas.P

    mdot = 1  # arbitrary
    amin = 1.e14

    data = np.zeros((200,4))

    # compute values for a range of pressure ratios
    for r in range(200):

        p = p0*(r+1)/201.0
        # set the state using (p,s0)
        gas.SP = s0, p

        v2 = 2.0*(h0 - gas.h)      # h + V^2/2 = h0
        v = math.sqrt(v2)
        area = mdot/(gas.density*v)    # rho*v*A = constant
        amin = min(amin, area)
        data[r,:] = [area, v/soundspeed(gas), gas.T, p/p0]

    data[:,0] /= amin

    return data


if __name__ == "__main__":
    print(isentropic.__doc__)
    data = isentropic()
    try:
        import matplotlib.pyplot as plt
        plt.plot(data[:,1], data[:,0])
        plt.ylabel('Area Ratio')
        plt.xlabel('Mach Number')
        plt.title('Isentropic Flow: Area Ratio vs. Mach Number')
        plt.show()

    except ImportError:
        print('area ratio,   Mach number,   temperature,   pressure ratio')
        print(data)