1
0
Fork 0

Avoid NaNs in environment code at extreme altitude

Avoid the ‘red sky zone’ when going to higher orbital altitudes
(thousands of km).

https://sourceforge.net/p/flightgear/codetickets/2087/
This commit is contained in:
James Turner 2018-12-02 12:57:35 +01:00
parent 015742b28d
commit 1f1060431f

View file

@ -765,15 +765,21 @@ FGEnvironment::_recalc_alt_pt ()
void
FGEnvironment::_recalc_density ()
{
double pressure_psf = pressure_inhg * 70.7487;
const double pressure_psf = pressure_inhg * 70.7487;
// adjust for humidity
// calculations taken from USA Today (oops!) at
// http://www.usatoday.com/weather/basics/density-calculations.htm
double temperature_degk = temperature_degc + 273.15;
double pressure_mb = pressure_inhg * 33.86;
double vapor_pressure_mb =
const double temperature_degk = temperature_degc + 273.15;
const double pressure_mb = pressure_inhg * 33.86;
const double vapor_pressure_mb =
6.11 * pow(10.0, 7.5 * dewpoint_degc / (237.7 + dewpoint_degc));
if ((pressure_mb <= 0.0) || (vapor_pressure_mb <= 0.0)) {
density_slugft3 = 0.0;
return;
}
double virtual_temperature_degk = temperature_degk / (1 - (vapor_pressure_mb / pressure_mb) * (1.0 - 0.622));
double virtual_temperature_degr = virtual_temperature_degk * 1.8;
@ -786,11 +792,15 @@ FGEnvironment::_recalc_density ()
void
FGEnvironment::_recalc_density_tropo_avg_kgm3 ()
{
double pressure_mb = pressure_inhg * 33.86;
double vaporpressure = 6.11 * pow(10.0, ((7.5 * dewpoint_degc) / (237.7 + dewpoint_degc)));
double virtual_temp = (temperature_degc + 273.15) / (1 - 0.379 * (vaporpressure/pressure_mb));
const double pressure_mb = pressure_inhg * 33.86;
const double vaporpressure = 6.11 * pow(10.0, ((7.5 * dewpoint_degc) / (237.7 + dewpoint_degc)));
const double virtual_temp = (temperature_degc + 273.15) / (1 - 0.379 * (vaporpressure/pressure_mb));
if ((pressure_mb <= 0.0) || (virtual_temp < 0.0)) {
density_tropo_avg_kgm3 = 0.0;
return;
}
double density_half = (100 * pressure_mb * exp(-altitude_half_to_sun_m / 8000))
/ (287.05 * virtual_temp);
double density_tropo = (100 * pressure_mb * exp((-1 * altitude_tropo_top_m) / 8000))