cantera/interfaces/matlab/toolbox/@ThermoPhase/soundspeed.m

43 lines
1.3 KiB
Matlab

function c = soundspeed(tp)
% SOUNDSPEED Get the speed of sound.
% c = soundspeed(tp)
% If the phase is an ideal gas, the speed of sound
% is calculated by:
%
% .. math:: c = \sqrt{\gamma * R * T}
%
% where :math:`\gamma` is the ratio of specific heats, :math:`R` is
% the specific gas constant, and :math:`T` is the temperature. If the
% phase is not an ideal gas, the speed of sound is calculated by
%
% .. math:: c = \sqrt{\left(\frac{\partial p}{\partial \rho}\right)_s}
%
% where :math:`p` is the pressure and :math:`\rho` is the density,
% and the subscript :math:`s` indicates constant entropy. This is
% approximated by slightly increasing the density at constant entropy
% and computing the change in pressure.
%
% .. math:: c = \sqrt{\frac{p_1 - p_0}{\rho_1-\rho_0}}
%
% :param tp:
% Instance of class :mat:func:`ThermoPhase` (or another
% class derived from ThermoPhase)
% :return:
% The speed of sound. Units: m/s
%
if isIdealGas(tp)
gamma = cp_mass(tp)/cv_mass(tp);
wtm = meanMolecularWeight(tp);
r = gasconstant/wtm;
c = sqrt(gamma*r*temperature(tp));
else
rho0 = density(tp);
p0 = pressure(tp);
s0 = entropy_mass(tp);
rho1 = 1.001*rho0;
set(tp, 'Density', rho1, 'Entropy', s0);
p1 = pressure(tp);
dpdrho_s = (p1 - p0)/(rho1 - rho0);
c = sqrt(dpdrho_s);
end