function GetMoistAirDensity(TDryBulb, HumRatio, Pressure) result(MoistAirDensity)
!+ Return moist air density given humidity ratio, dry bulb temperature, and pressure.
!+ Reference:
!+ ASHRAE Handbook - Fundamentals (2017) ch. 1 eqn 11
real, intent(in) :: TDryBulb
!+ Dry-bulb temperature in °F [IP] or °C [SI]
real, intent(in) :: HumRatio
!+ Humidity ratio in lb_H₂O lb_Air⁻¹ [IP] or kg_H₂O kg_Air⁻¹ [SI]
real, intent(in) :: Pressure
!+ Atmospheric pressure in Psi [IP] or Pa [SI]
real :: MoistAirDensity
!+ Moist air density in lb ft⁻³ [IP] or kg m⁻³ [SI]
real :: BoundedHumRatio
!+ Humidity ratio bounded to MIN_HUM_RATIO
if (HumRatio < 0.0) then
error stop "Error: humidity ratio is negative"
end if
BoundedHumRatio = max(HumRatio, MIN_HUM_RATIO)
MoistAirDensity = (1.0 + BoundedHumRatio) / GetMoistAirVolume(TDryBulb, BoundedHumRatio, Pressure)
end function GetMoistAirDensity