cantera/samples/python/gasdynamics/soundSpeed/soundSpeed.py
Ray Speth 6cb4bd93ce Cleaned up whitespace in all Python files using reindent.py
4 spaces per indentation level, no tabs, no trailing whitespace,
and a single newline at end of each file.
2012-02-27 18:13:05 +00:00

61 lines
1.7 KiB
Python

from Cantera import *
import math
def equilSoundSpeeds(gas, rtol = 1.0e-6, maxiter = 5000):
"""Returns a tuple containing the equilibrium and frozen sound
speeds for a gas with an equilibrium composition. The gas is
first set to an equilibrium state at the temperature and pressure
of the gas, since otherwise the equilibrium sound speed is not
defined.
"""
# set the gas to equilibrium at its current T and P
gas.equilibrate('TP', rtol = rtol, maxiter = maxiter)
# save properties
s0 = gas.entropy_mass()
p0 = gas.pressure()
r0 = gas.density()
# perturb the pressure
p1 = p0*1.0001
# set the gas to a state with the same entropy and composition but
# the perturbed pressure
gas.set(S = s0, P = p1)
# save the density for this case for the frozen sound speed
rho_frozen = gas.density()
# now equilibrate the gas holding S and P constant
gas.equilibrate("SP", loglevel=0, rtol = rtol, maxiter = maxiter) # , rtol = 1.0e-3, maxsteps=10000)
r1 = gas.density()
# equilibrium sound speed
aequil = math.sqrt((p1 - p0)/(r1 - r0));
# frozen sound speed
afrozen = math.sqrt((p1 - p0)/(rho_frozen - r0));
# compute the frozen sound speed using the ideal gas
# expression as a check
cp = gas.cp_mass()
cv = gas.cv_mass()
gamma = cp/cv
afrozen2 = math.sqrt(gamma*GasConstant*gas.temperature()
/gas.meanMolecularWeight())
return (aequil, afrozen, afrozen2)
# test program
if __name__ == "__main__":
gas = GRI30()
gas.set(X = 'CH4:1.00, O2:2.0, N2:7.52')
for n in range(27):
temp = 300.0 + n*100.0
gas.set(T = temp, P = OneAtm)
print temp, equilSoundSpeeds(gas)