X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FEnvironment%2Fenvironment.cxx;h=9a5755e3db3d7f8cabeaa89a739547c8b28fb71f;hb=386aefe69358ce41a11c9afeb8f56e26758fe56b;hp=02a9d6416be75c00bd9be1ec0fe223709124a2c7;hpb=59895306a57eb44d1777e08b96c867fb3b8a046d;p=flightgear.git diff --git a/src/Environment/environment.cxx b/src/Environment/environment.cxx index 02a9d6416..9a5755e3d 100644 --- a/src/Environment/environment.cxx +++ b/src/Environment/environment.cxx @@ -140,6 +140,7 @@ void FGEnvironment::_init() wind_from_down_fps = 0; thermal_lift_fps = 0; ridge_lift_fps= 0; + local_weather_lift_fps=0; altitude_half_to_sun_m = 1000; altitude_tropo_top_m = 10000; #ifdef USING_TABLES @@ -182,6 +183,7 @@ FGEnvironment::copy (const FGEnvironment &env) wind_from_down_fps = env.wind_from_down_fps; thermal_lift_fps = env.thermal_lift_fps; ridge_lift_fps= env.ridge_lift_fps; + local_weather_lift_fps = env.local_weather_lift_fps; turbulence_magnitude_norm = env.turbulence_magnitude_norm; turbulence_rate_hz = env.turbulence_rate_hz; } @@ -238,6 +240,7 @@ FGEnvironment::read (const SGPropertyNode * node) 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_pt(); @@ -369,6 +372,12 @@ FGEnvironment::get_ridge_lift_fps () const return ridge_lift_fps; } +double +FGEnvironment::get_local_weather_lift_fps () const +{ + return local_weather_lift_fps; +} + double FGEnvironment::get_turbulence_magnitude_norm () const { @@ -524,7 +533,16 @@ FGEnvironment::set_ridge_lift_fps (double ri) ridge_lift_fps = ri; if( live_update ) { _recalc_updraft(); + } } + +void +FGEnvironment::set_local_weather_lift_fps (double lwl) +{ + local_weather_lift_fps = lwl; + if( live_update ) { + _recalc_updraft(); + } } void @@ -544,8 +562,8 @@ FGEnvironment::set_elevation_ft (double e) { elevation_ft = e; if( live_update ) { - _recalc_alt_dewpoint(); _recalc_alt_pt(); + _recalc_alt_dewpoint(); _recalc_density(); _recalc_relative_humidity(); } @@ -618,7 +636,7 @@ FGEnvironment::_recalc_ne () void FGEnvironment::_recalc_updraft () { - wind_from_down_fps = thermal_lift_fps + ridge_lift_fps ; + wind_from_down_fps = thermal_lift_fps + ridge_lift_fps + local_weather_lift_fps ; } // Intended to help with the interpretation of METAR data, @@ -644,7 +662,7 @@ FGEnvironment::_recalc_sl_temperature () double t_strato = ISA_def[1].temp - atmodel::freezing; if (temperature_degc < t_strato) temperature_sea_level_degc = t_strato; else temperature_sea_level_degc = - temperature_degc - elevation_ft * ISA_def[0].lapse; + temperature_degc + elevation_ft * atmodel::foot * ISA_def[0].lapse; // Alternative implemenation: // else temperature_sea_level_inhg = T_layer(0., elevation_ft * foot, @@ -706,7 +724,6 @@ FGEnvironment::_recalc_alt_pt () << " and " << temperature_sea_level_degc << " :: " << this << " # " << count); - ///////////////////////////////////raise(SIGUSR1); } } #endif @@ -822,7 +839,7 @@ interpolate (const FGEnvironment * env1, const FGEnvironment * env2, env2->get_temperature_sea_level_degc(), fraction)); - result->set_dewpoint_degc + result->set_dewpoint_sea_level_degc (do_interp(env1->get_dewpoint_sea_level_degc(), env2->get_dewpoint_sea_level_degc(), fraction));