X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FEnvironment%2Fenvironment.cxx;h=9a5755e3db3d7f8cabeaa89a739547c8b28fb71f;hb=386aefe69358ce41a11c9afeb8f56e26758fe56b;hp=f6238c415e91cac1245d3cdfa5fea29231004078;hpb=a9c47780a8b1fd1c3951f74fd37aa6d9d0797755;p=flightgear.git diff --git a/src/Environment/environment.cxx b/src/Environment/environment.cxx index f6238c415..9a5755e3d 100644 --- a/src/Environment/environment.cxx +++ b/src/Environment/environment.cxx @@ -29,8 +29,6 @@ #include -#include - #include #include #include @@ -142,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 @@ -184,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; } @@ -240,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(); @@ -371,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 { @@ -526,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 @@ -546,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(); } @@ -620,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, @@ -646,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, @@ -823,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));