X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FEnvironment%2Fatmosphere.cxx;h=b7e7be9517193a30c033abb53c07ebb67c8c94cd;hb=474789269b7656509f62339c17e62a55b6157d43;hp=a15c943ed47aba514bddb6212459f38f9a85c3fc;hpb=d11ad100cc519bfcf5630d93e4f61f760212ded4;p=flightgear.git diff --git a/src/Environment/atmosphere.cxx b/src/Environment/atmosphere.cxx index a15c943ed..b7e7be951 100644 --- a/src/Environment/atmosphere.cxx +++ b/src/Environment/atmosphere.cxx @@ -108,7 +108,7 @@ pair PT_vs_hpt( } // Should never get here. - SG_LOG(SG_GENERAL, SG_ALERT, "PT_vs_hpt: ran out of layers"); + SG_LOG(SG_GENERAL, SG_ALERT, "PT_vs_hpt: ran out of layers for h=" << hh ); return make_pair(d0, d0); } @@ -260,6 +260,21 @@ double FGAtmo::QNH(const double field_elev, const double field_press) { return rslt; } +// Invert the QNH calculation to get the field pressure from a metar +// report. +// field pressure _in pascals_ +// ... caller gets to convert to inHg or millibars +// Field elevation in m +// Altimeter setting (QNH) in pascals +// Valid for fields within the troposphere only. +double FGAtmo::fieldPressure(const double field_elev, const double qnh) +{ + using namespace atmodel; + static const double nn = ISA::lam0 * Rgas / g / mm; + const double pratio = pow(qnh / ISA::P0, nn); + return ISA::P0 * pow(pratio - field_elev * ISA::lam0 / ISA::T0, 1.0 / nn); +} + void FGAltimeter::dump_stack1(const double Tref) { using namespace atmodel; const int bs(200);