63 lines
1.5 KiB
Fortran
63 lines
1.5 KiB
Fortran
c
|
|
c Mach number vs. area for an isentropic flow. See also the Python
|
|
c version of this problem in the Python demos.
|
|
c
|
|
program isentropic
|
|
implicit double precision (a-h,o-z)
|
|
parameter (oneatm = 1.01325d5, NPTS = 200)
|
|
double precision a(NPTS), dmach(NPTS), t(NPTS),
|
|
$ ratio(NPTS)
|
|
|
|
call newIdealGasMix('gri30.cti','gri30','')
|
|
temp = 1200.d0
|
|
pres = 10.d0*oneatm
|
|
call setState_TPX_String(temp, pres,'H2:1, N2:0.1')
|
|
|
|
c stagnation state properties
|
|
s0 = entropy_mass()
|
|
h0 = enthalpy_mass()
|
|
p0 = pressure()
|
|
|
|
dmdot = 1.0d0
|
|
amin = 1.0d14
|
|
|
|
do n = 1, NPTS
|
|
p = p0*n/(NPTS+1)
|
|
call setState_SP(s0,p)
|
|
h = enthalpy_mass()
|
|
rho = density()
|
|
|
|
v2 = 2.0*(h0 - h)
|
|
v = sqrt(v2)
|
|
area = dmdot/(rho*v)
|
|
if (area .lt. amin) then
|
|
amin = area
|
|
end if
|
|
|
|
a(n) = area
|
|
dmach(n) = v/soundspeed()
|
|
t(n) = temperature()
|
|
ratio(n) = p/p0
|
|
end do
|
|
|
|
do n = 1, NPTS
|
|
a(n) = a(n)/amin
|
|
write(*,30) a(n), dmach(n), t(n), ratio(n)
|
|
30 format(4e16.5)
|
|
end do
|
|
stop
|
|
end
|
|
|
|
|
|
double precision function soundspeed()
|
|
implicit double precision (a-h,o-z)
|
|
double precision meanMolarMass
|
|
parameter (R = 8314.4621d0)
|
|
gamma = cp_mass()/cv_mass()
|
|
soundspeed = sqrt(gamma * R * temperature()
|
|
$ / meanMolarMass())
|
|
return
|
|
end
|
|
|
|
|
|
|