static bool test_isa_pressure(const fixed alt, const fixed prat) { AtmosphericPressure pres; fixed p0 = pres.QNHAltitudeToStaticPressure(alt); if (verbose) { printf("%g\n",FIXED_DOUBLE(p0)); } return fabs(p0/fixed(101325)-prat)<fixed(0.001); }
static bool test_qnh_to_static() { AtmosphericPressure pres; fixed p0 = pres.QNHAltitudeToStaticPressure(fixed_zero); if (verbose) { printf("%g\n",FIXED_DOUBLE(p0)); } return fabs(p0-fixed(101325))<fixed(0.1); }
static bool test_isa_pressure(const fixed alt, const fixed prat) { const AtmosphericPressure pres = AtmosphericPressure::Standard(); fixed p0 = pres.QNHAltitudeToStaticPressure(alt).GetPascal(); if (verbose) { printf("%g\n", double(p0)); } return fabs(p0/fixed(101325)-prat)<fixed(0.001); }
static bool test_qnh_to_static() { AtmosphericPressure pres = AtmosphericPressure::Standard(); fixed p0 = pres.QNHAltitudeToStaticPressure(fixed(0)).GetPascal(); if (verbose) { printf("%g\n", double(p0)); } return fabs(p0-fixed(101325))<fixed(0.1); }
static void ComputePressure(NMEAInfo &basic, const AtmosphericPressure qnh) { const bool qnh_available = qnh.IsPlausible(); const bool static_pressure_available = basic.static_pressure_available; const bool pressure_altitude_available = basic.pressure_altitude_available; if (!static_pressure_available) { if (pressure_altitude_available) { basic.static_pressure = AtmosphericPressure::PressureAltitudeToStaticPressure(basic.pressure_altitude); basic.static_pressure_available = basic.pressure_altitude_available; } else if (basic.baro_altitude_available && qnh_available) { basic.static_pressure = qnh.QNHAltitudeToStaticPressure(basic.baro_altitude); basic.static_pressure_available = basic.baro_altitude_available; } } if (!pressure_altitude_available) { if (static_pressure_available) { basic.pressure_altitude = AtmosphericPressure::StaticPressureToPressureAltitude(basic.static_pressure); basic.pressure_altitude_available = basic.static_pressure_available; } else if (basic.baro_altitude_available && qnh_available) { basic.pressure_altitude = qnh.QNHAltitudeToPressureAltitude(basic.baro_altitude); basic.pressure_altitude_available = basic.baro_altitude_available; } } if (qnh_available) { /* if the current pressure and the QNH is known, then true baro altitude should be discarded, because the external device which provided it may have a different QNH setting */ if (static_pressure_available) { basic.baro_altitude = qnh.StaticPressureToQNHAltitude(basic.static_pressure); basic.baro_altitude_available = basic.static_pressure_available; } else if (pressure_altitude_available) { basic.baro_altitude = qnh.PressureAltitudeToQNHAltitude(basic.pressure_altitude); basic.baro_altitude_available = basic.pressure_altitude_available; } } else if (!basic.baro_altitude_available && pressure_altitude_available) /* no QNH, but let's fill in the best fallback value we can get, without setting BaroAltitudeAvailable */ basic.baro_altitude = basic.pressure_altitude; }
AtmosphericPressure AtmosphericPressure::FindQNHFromPressure(const AtmosphericPressure pressure, const fixed alt_known) { return pressure.QNHAltitudeToStaticPressure(-alt_known); }