]> git.mxchange.org Git - flightgear.git/blobdiff - src/Environment/environment.cxx
Merge branch 'next' of gitorious.org:fg/flightgear into next
[flightgear.git] / src / Environment / environment.cxx
index 02a9d6416be75c00bd9be1ec0fe223709124a2c7..9a5755e3db3d7f8cabeaa89a739547c8b28fb71f 100644 (file)
@@ -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));