From: Tim Moore Date: Thu, 10 Sep 2009 10:14:30 +0000 (+0200) Subject: Merge branch 'jsd/atmos' into topic/atmos-merge X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=a6db6d89ff41a619569e6433409e8bf62ff98499;p=flightgear.git Merge branch 'jsd/atmos' into topic/atmos-merge Conflicts: src/Environment/environment.cxx src/Environment/environment.hxx John Denker's atmosphere changes. Original commit message: Two-parameter physics-based model of atmosphere up to 262,467 ft i.e. the top of the mesosphere. Correctly exhibits the HALT phenomenon. --- a6db6d89ff41a619569e6433409e8bf62ff98499 diff --cc src/Environment/environment.cxx index 74e1509dc,eed66fa17..f915e5261 --- a/src/Environment/environment.cxx +++ b/src/Environment/environment.cxx @@@ -133,14 -140,14 +140,16 @@@ void FGEnvironment::_init( wind_from_north_fps = 0; wind_from_east_fps = 0; wind_from_down_fps = 0; + thermal_lift_fps = 0; + ridge_lift_fps= 0; altitude_half_to_sun_m = 1000; altitude_tropo_top_m = 10000; + #ifdef USING_TABLES _setup_tables(); + #endif _recalc_density(); _recalc_relative_humidity(); - + live_update = true; } FGEnvironment::FGEnvironment() @@@ -231,15 -235,6 +240,14 @@@ FGEnvironment::read (const SGPropertyNo maybe_copy_value(this, node, "turbulence/rate-hz", &FGEnvironment::set_turbulence_rate_hz); + // calculate derived properties here to avoid duplicate expensive computations + _recalc_ne(); - _recalc_alt_temperature(); ++ _recalc_alt_pt(); + _recalc_alt_dewpoint(); - _recalc_alt_pressure(); + _recalc_density(); + _recalc_relative_humidity(); + + set_live_update(live_update); } @@@ -396,21 -379,19 +404,23 @@@ FGEnvironment::set_temperature_sea_leve temperature_sea_level_degc = t; if (dewpoint_sea_level_degc > t) dewpoint_sea_level_degc = t; - _recalc_alt_pt(); - _recalc_density(); + if( live_update ) { - _recalc_alt_temperature(); ++ _recalc_alt_pt(); + _recalc_density(); + } } void FGEnvironment::set_temperature_degc (double t) { temperature_degc = t; - _recalc_sl_temperature(); - _recalc_sl_pressure(); - _recalc_alt_pt(); - _recalc_density(); - _recalc_relative_humidity(); + if( live_update ) { + _recalc_sl_temperature(); ++ _recalc_sl_pressure(); ++ _recalc_alt_pt(); + _recalc_density(); + _recalc_relative_humidity(); + } } void @@@ -440,10 -417,8 +450,10 @@@ voi FGEnvironment::set_pressure_sea_level_inhg (double p) { pressure_sea_level_inhg = p; - _recalc_alt_pt(); - _recalc_density(); + if( live_update ) { - _recalc_alt_pressure(); ++ _recalc_alt_pt(); + _recalc_density(); + } } void @@@ -535,13 -480,10 +545,12 @@@ voi FGEnvironment::set_elevation_ft (double e) { elevation_ft = e; - _recalc_alt_dewpoint(); - _recalc_alt_pt(); - _recalc_density(); - _recalc_relative_humidity(); + if( live_update ) { - _recalc_alt_temperature(); + _recalc_alt_dewpoint(); - _recalc_alt_pressure(); ++ _recalc_alt_pt(); + _recalc_density(); + _recalc_relative_humidity(); + } } void @@@ -608,12 -546,8 +617,14 @@@ FGEnvironment::_recalc_ne ( sin(wind_from_heading_deg * SGD_DEGREES_TO_RADIANS); } +void +FGEnvironment::_recalc_updraft () +{ + wind_from_down_fps = thermal_lift_fps + ridge_lift_fps ; +} + + // Intended to help with the interpretation of METAR data, + // not for random in-flight outside-air temperatures. void FGEnvironment::_recalc_sl_temperature () { @@@ -811,16 -763,6 +858,15 @@@ interpolate (const FGEnvironment * env1 (do_interp(env1->get_turbulence_rate_hz(), env2->get_turbulence_rate_hz(), fraction)); + + // calculate derived properties here to avoid duplicate expensive computations + result->_recalc_ne(); - result->_recalc_alt_temperature(); ++ result->_recalc_alt_pt(); + result->_recalc_alt_dewpoint(); - result->_recalc_alt_pressure(); + result->_recalc_density(); + result->_recalc_relative_humidity(); + + result->set_live_update(live_update); } // end of environment.cxx diff --cc src/Environment/environment.hxx index 7e3e5b4b2,38123e843..d9543d5ab --- a/src/Environment/environment.hxx +++ b/src/Environment/environment.hxx @@@ -101,14 -97,6 +101,13 @@@ public virtual void set_altitude_half_to_sun_m (double alt); virtual void set_altitude_tropo_top_m (double alt); + virtual bool set_live_update(bool live_update); + + void _recalc_ne (); - void _recalc_alt_temperature (); + void _recalc_alt_dewpoint (); - void _recalc_alt_pressure (); + void _recalc_density (); + void _recalc_relative_humidity (); ++ void _recalc_alt_pt (); private: void _init(); void _recalc_hdgspd ();