]> git.mxchange.org Git - flightgear.git/commitdiff
Updates from Rob Deters.
authorcurt <curt>
Wed, 11 Sep 2002 16:45:47 +0000 (16:45 +0000)
committercurt <curt>
Wed, 11 Sep 2002 16:45:47 +0000 (16:45 +0000)
12 files changed:
src/FDM/UIUCModel/uiuc_aircraft.h
src/FDM/UIUCModel/uiuc_coef_pitch.cpp
src/FDM/UIUCModel/uiuc_coef_roll.cpp
src/FDM/UIUCModel/uiuc_coef_sideforce.cpp
src/FDM/UIUCModel/uiuc_coef_yaw.cpp
src/FDM/UIUCModel/uiuc_coefficients.cpp
src/FDM/UIUCModel/uiuc_engine.cpp
src/FDM/UIUCModel/uiuc_engine.h
src/FDM/UIUCModel/uiuc_map_engine.cpp
src/FDM/UIUCModel/uiuc_map_init.cpp
src/FDM/UIUCModel/uiuc_map_record5.cpp
src/FDM/UIUCModel/uiuc_wrapper.cpp

index 1e95f81aa082f0df09b8a876e3384289affa0790..ccee2d05284581dc20bd39f18b8d2f8a2de7353c 100644 (file)
 #include <math.h>
 
 #include "uiuc_parsefile.h"
-//#include "uiuc_flapdata.h"
+// #include "uiuc_flapdata.h"
 
 SG_USING_STD(map);
 #if !defined (SG_HAVE_NATIVE_SGI_COMPILERS)
@@ -2258,7 +2258,7 @@ struct AIRCRAFT
   double F_X_aero_flapper, F_Z_aero_flapper;
 #define F_X_aero_flapper       aircraft_->F_X_aero_flapper
 #define F_Z_aero_flapper       aircraft_->F_Z_aero_flapper
-  */
+
   /* Other variables (not tokens) =================================*/
 
   double convert_x, convert_y, convert_z;
index 8368e1771223808790b5a5cd8a164f222cae20fd..5a77a84ffd3a1a770f21823e660329076494cfe8 100644 (file)
@@ -144,7 +144,15 @@ void uiuc_coef_pitch()
             /* Cm_adot must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            Cm_adot_save = Cm_adot * Alpha_dot * cbar_2U;
-            Cm += Cm_adot * Alpha_dot * cbar_2U;
+            //Cm        += Cm_adot * Alpha_dot * cbar_2U;
+           if (eta_q_Cm_adot_fac)
+             {
+               Cm += Cm_adot_save * eta_q_Cm_adot_fac;
+             }
+           else
+             {
+               Cm += Cm_adot_save;
+             }
             break;
           }
         case Cm_q_flag:
@@ -156,7 +164,15 @@ void uiuc_coef_pitch()
             /* Cm_q must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            Cm_q_save = Cm_q * Q_body * cbar_2U;
-            Cm += Cm_q * Q_body * cbar_2U;
+            // Cm    += Cm_q * Q_body * cbar_2U;
+           if (eta_q_Cm_q_fac)
+             {
+               Cm += Cm_q_save * eta_q_Cm_q_fac;
+             }
+           else
+             {
+               Cm += Cm_q_save;
+             }
             break;
           }
         case Cm_ih_flag:
@@ -216,14 +232,28 @@ void uiuc_coef_pitch()
           }
         case Cmfade_flag:
           {
-            CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
+           // compute the induced velocity on the tail to account for tail downwash
+           gamma_wing = V_rel_wind * Sw * CL / (2.0 * bw);
+           w_coef = 0.036;
+           w_induced  = w_coef * gamma_wing;
+           downwash_angle = atan(w_induced/V_rel_wind);
+           AlphaTail = Alpha - downwash_angle;
+           CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
                                            Cmfade_deArray,
                                            Cmfade_CmArray,
                                            Cmfade_nAlphaArray,
                                            Cmfade_nde,
-                                           Alpha,
+                                           AlphaTail,
                                            elevator);
-            Cm += CmfadeI;
+           // Cm += CmfadeI;
+           if (eta_q_Cmfade_fac)
+             {
+               Cm += CmfadeI * eta_q_Cmfade_fac;
+             }
+           else
+             {
+               Cm += CmfadeI;
+             }
             break;
           }
         case Cmfdf_flag:
index 57026aaaacd4091841efdfb77e1cd3ca6a9b6c38..61ccf18e4db3428b04b77cf50e7fe10288940c6a 100644 (file)
@@ -124,7 +124,15 @@ void uiuc_coef_roll()
                 Cl_beta = uiuc_ice_filter(Cl_beta_clean,kCl_beta);
               }
            Cl_beta_save = Cl_beta * Beta;
-            Cl += Cl_beta * Beta;
+           //       Cl += Cl_beta * Beta;
+           if (eta_q_Cl_beta_fac)
+             {
+               Cl += Cl_beta_save * eta_q_Cl_beta_fac;
+             }
+           else
+             {
+               Cl += Cl_beta_save;
+             }
             break;
           }
         case Cl_p_flag:
@@ -136,7 +144,15 @@ void uiuc_coef_roll()
             /* Cl_p must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            Cl_p_save = Cl_p * P_body * b_2U;
-            Cl += Cl_p * P_body * b_2U;
+           //    Cl += Cl_p * P_body * b_2U;
+           if (eta_q_Cl_p_fac)
+             {
+               Cl += Cl_p_save * eta_q_Cl_p_fac;
+             }
+           else
+             {
+               Cl += Cl_p_save;
+             }
             break;
           }
         case Cl_r_flag:
@@ -148,7 +164,15 @@ void uiuc_coef_roll()
             /* Cl_r must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            Cl_r_save = Cl_r * R_body * b_2U;
-            Cl += Cl_r * R_body * b_2U;
+           //    Cl += Cl_r * R_body * b_2U;
+           if (eta_q_Cl_r_fac)
+             {
+               Cl += Cl_r_save * eta_q_Cl_r_fac;
+             }
+           else
+             {
+               Cl += Cl_r_save;
+             }
             break;
           }
         case Cl_da_flag:
@@ -168,7 +192,15 @@ void uiuc_coef_roll()
                 Cl_dr = uiuc_ice_filter(Cl_dr_clean,kCl_dr);
               }
            Cl_dr_save = Cl_dr * rudder;
-            Cl += Cl_dr * rudder;
+           //     Cl += Cl_dr * rudder;
+           if (eta_q_Cl_dr_fac)
+             {
+               Cl += Cl_dr_save * eta_q_Cl_dr_fac;
+             }
+           else
+             {
+               Cl += Cl_dr_save;
+             }
             break;
           }
         case Cl_daa_flag:
index dc30657f55c0f227c8fe783a52e2eb05d78573be..46c44f5dd9cd9171ef8d3087323160130b545747 100644 (file)
@@ -124,7 +124,15 @@ void uiuc_coef_sideforce()
                 CY_beta = uiuc_ice_filter(CY_beta_clean,kCY_beta);
               }
            CY_beta_save = CY_beta * Beta;
-            CY += CY_beta * Beta;
+           //       CY += CY_beta * Beta;
+           if (eta_q_CY_beta_fac)
+             {
+               CY += CY_beta_save * eta_q_CY_beta_fac;
+             }
+           else
+             {
+               CY += CY_beta_save;
+             }
             break;
           }
         case CY_p_flag:
@@ -136,7 +144,15 @@ void uiuc_coef_sideforce()
             /* CY_p must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            CY_p_save = CY_p * P_body * b_2U;
-            CY += CY_p * P_body * b_2U;
+           //    CY += CY_p * P_body * b_2U;
+           if (eta_q_CY_p_fac)
+             {
+               CY += CY_p_save * eta_q_CY_p_fac;
+             }
+           else
+             {
+               CY += CY_p_save;
+             }
             break;
           }
         case CY_r_flag:
@@ -148,7 +164,15 @@ void uiuc_coef_sideforce()
             /* CY_r must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            CY_r_save = CY_r * R_body * b_2U;
-            CY += CY_r * R_body * b_2U;
+           //    CY += CY_r * R_body * b_2U;
+           if (eta_q_CY_r_fac)
+             {
+               CY += CY_r_save * eta_q_CY_r_fac;
+             }
+           else
+             {
+               CY += CY_r_save;
+             }
             break;
           }
         case CY_da_flag:
@@ -168,7 +192,15 @@ void uiuc_coef_sideforce()
                 CY_dr = uiuc_ice_filter(CY_dr_clean,kCY_dr);
               }
            CY_dr_save = CY_dr * rudder;
-            CY += CY_dr * rudder;
+           //     CY += CY_dr * rudder;
+           if (eta_q_CY_dr_fac)
+             {
+               CY += CY_dr_save * eta_q_CY_dr_fac;
+             }
+           else
+             {
+               CY += CY_dr_save;
+             }
             break;
           }
         case CY_dra_flag:
index 5753584e6d90d6df3af560cf19bab9da4391ff61..3e325b12c0655eda6e122352be8e24565cca2a12 100644 (file)
@@ -124,7 +124,15 @@ void uiuc_coef_yaw()
                 Cn_beta = uiuc_ice_filter(Cn_beta_clean,kCn_beta);
               }
            Cn_beta_save = Cn_beta * Beta;
-            Cn += Cn_beta * Beta;
+           //       Cn += Cn_beta * Beta;
+           if (eta_q_Cn_beta_fac)
+             {
+               Cn += Cn_beta_save * eta_q_Cn_beta_fac;
+             }
+           else
+             {
+               Cn += Cn_beta_save;
+             }
             break;
           }
         case Cn_p_flag:
@@ -136,7 +144,15 @@ void uiuc_coef_yaw()
             /* Cn_p must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            Cn_p_save = Cn_p * P_body * b_2U;
-            Cn += Cn_p * P_body * b_2U;
+           //    Cn += Cn_p * P_body * b_2U;
+           if (eta_q_Cn_p_fac)
+             {
+               Cn += Cn_p_save * eta_q_Cn_p_fac;
+             }
+           else
+             {
+               Cn += Cn_p_save;
+             }
             break;
           }
         case Cn_r_flag:
@@ -148,7 +164,15 @@ void uiuc_coef_yaw()
             /* Cn_r must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            Cn_r_save = Cn_r * R_body * b_2U;
-            Cn += Cn_r * R_body * b_2U;
+           //    Cn += Cn_r * R_body * b_2U;
+           if (eta_q_Cn_r_fac)
+             {
+               Cn += Cn_r_save * eta_q_Cn_r_fac;
+             }
+           else
+             {
+               Cn += Cn_r_save;
+             }
             break;
           }
         case Cn_da_flag:
@@ -168,7 +192,15 @@ void uiuc_coef_yaw()
                 Cn_dr = uiuc_ice_filter(Cn_dr_clean,kCn_dr);
               }
            Cn_dr_save = Cn_dr * rudder;
-            Cn += Cn_dr * rudder;
+           //     Cn += Cn_dr * rudder;
+           if (eta_q_Cn_dr_fac)
+             {
+               Cn += Cn_dr_save * eta_q_Cn_dr_fac;
+             }
+           else
+             {
+               Cn += Cn_dr_save;
+             }
             break;
           }
         case Cn_q_flag:
index 9560a4e61ca4a9ee2c1010c06b0f4d7133431767..dcc800c2b7339dd48fdc46a42ab6f4874419f19f 100644 (file)
@@ -117,6 +117,7 @@ void uiuc_coefficients(double dt)
        {
          cbar_2U = cbar / (2.0 * V_rel_wind);
          b_2U    = bw /   (2.0 * V_rel_wind);
+         // ch is the horizontal tail chord
          ch_2U   = ch /   (2.0 * V_rel_wind);
        }
       else if (use_dyn_on_speed_curve1)
@@ -125,12 +126,14 @@ void uiuc_coefficients(double dt)
          cbar_2U        = cbar / (2.0 * V_rel_wind_dum);
          b_2U           = bw /   (2.0 * V_rel_wind_dum);
          ch_2U          = ch /   (2.0 * V_rel_wind_dum);
+         Alpha_dot      = 0.0;
        }
       else
        {
-         cbar_2U = 0.0;
-         b_2U    = 0.0;
-         ch_2U   = 0.0;
+         cbar_2U   = 0.0;
+         b_2U      = 0.0;
+         ch_2U     = 0.0;
+         Alpha_dot = 0.0;
        }
     }
   else if(use_abs_U_body_2U)      // use absolute(U_body)
@@ -147,12 +150,14 @@ void uiuc_coefficients(double dt)
          cbar_2U    = cbar / (2.0 * U_body_dum);
          b_2U       = bw /   (2.0 * U_body_dum);
          ch_2U      = ch /   (2.0 * U_body_dum);
+         Alpha_dot  = 0.0;
        }
       else
        {
-         cbar_2U = 0.0;
-         b_2U    = 0.0;
-         ch_2U   = 0.0;
+         cbar_2U   = 0.0;
+         b_2U      = 0.0;
+         ch_2U     = 0.0;
+         Alpha_dot = 0.0;
        }
     }
   else      // use U_body
@@ -169,16 +174,26 @@ void uiuc_coefficients(double dt)
          cbar_2U    = cbar / (2.0 * U_body_dum);
          b_2U       = bw /   (2.0 * U_body_dum);
          ch_2U      = ch /   (2.0 * U_body_dum);
+         Alpha_dot  = 0.0;
          beta_flow_clean_tail = cbar_2U;
        }
       else
        {
-         cbar_2U = 0.0;
-         b_2U    = 0.0;
-         ch_2U   = 0.0;
+         cbar_2U   = 0.0;
+         b_2U      = 0.0;
+         ch_2U     = 0.0;
+         Alpha_dot = 0.0;
        }
     }
 
+  // check if speed is sufficient to "trust" Alpha_dot value
+  if (use_Alpha_dot_on_speed)
+    {
+      if (V_rel_wind     < Alpha_dot_on_speed)
+         Alpha_dot = 0.0;
+    }
+
+
   // check to see if icing model engaged
   if (ice_model)
     {
index 612bee1e4754710e4418e6e7660730c13967a864..7375cdf3cc7dd9cc59aeea10796690bf58a1aca2 100644 (file)
@@ -123,6 +123,38 @@ void uiuc_engine()
             F_X_engine = Throttle[3] * simpleSingleMaxThrust;
             break;
           }
+        case simpleSingleModel_flag:
+          {
+           /* simple model based on Hepperle's equation
+            * exponent dtdvvt was computed in uiuc_menu.cpp */
+           F_X_engine = Throttle[3] * t_v0 * (1 - pow((V_rel_wind/v_t0),dtdvvt));
+           if (slipstream_effects) {
+             tc = F_X_engine/(Dynamic_pressure * LS_PI * propDia * propDia / 4);
+             w_induced = 0.5 *  V_rel_wind * (-1 + pow((1+tc),.5));
+             eta_q = (2* w_induced + V_rel_wind)*(2* w_induced + V_rel_wind)/(V_rel_wind * V_rel_wind);
+             /* add in a die-off function so that eta falls off w/ alfa and beta */
+             eta_q = Cos_alpha * Cos_alpha * Cos_beta * Cos_beta * eta_q;
+             /* determine the eta_q values for the respective coefficients */
+             if (eta_q_Cm_q_fac)    {eta_q_Cm_q    *= eta_q * eta_q_Cm_q_fac;}
+             if (eta_q_Cm_adot_fac) {eta_q_Cm_adot *= eta_q * eta_q_Cm_adot_fac;}
+             if (eta_q_Cmfade_fac)  {eta_q_Cmfade  *= eta_q * eta_q_Cmfade_fac;}
+             if (eta_q_Cl_beta_fac) {eta_q_Cl_beta *= eta_q * eta_q_Cl_beta_fac;}
+             if (eta_q_Cl_p_fac)    {eta_q_Cl_p    *= eta_q * eta_q_Cl_p_fac;}
+             if (eta_q_Cl_r_fac)    {eta_q_Cl_r    *= eta_q * eta_q_Cl_r_fac;}
+             if (eta_q_Cl_dr_fac)   {eta_q_Cl_dr   *= eta_q * eta_q_Cl_dr_fac;}
+             if (eta_q_CY_beta_fac) {eta_q_CY_beta *= eta_q * eta_q_CY_beta_fac;}
+             if (eta_q_CY_p_fac)    {eta_q_CY_p    *= eta_q * eta_q_CY_p_fac;}
+             if (eta_q_CY_r_fac)    {eta_q_CY_r    *= eta_q * eta_q_CY_r_fac;}
+             if (eta_q_CY_dr_fac)   {eta_q_CY_dr   *= eta_q * eta_q_CY_dr_fac;}
+             if (eta_q_Cn_beta_fac) {eta_q_Cn_beta *= eta_q * eta_q_Cn_beta_fac;}
+             if (eta_q_Cn_p_fac)    {eta_q_Cn_p    *= eta_q * eta_q_Cn_p_fac;}
+             if (eta_q_Cn_r_fac)    {eta_q_Cn_r    *= eta_q * eta_q_Cn_r_fac;}
+             if (eta_q_Cn_dr_fac)   {eta_q_Cn_dr   *= eta_q * eta_q_Cn_dr_fac;}
+           }
+           /* Need engineOmega for gyroscopic moments */
+           engineOmega = minOmega + Throttle[3] * (maxOmega - minOmega);
+           break;
+          }
         case c172_flag:
           {
             //c172 engine lines ... looks like 0.83 is just a thrust increase
index f24dd3c19705990c49860e8c00c5f3c61cc517ae..c7f398ca3530e416f18bd42407ad905b28e56b14 100644 (file)
@@ -5,6 +5,7 @@
 #include "uiuc_1Dinterpolation.h"
 #include <FDM/LaRCsim/ls_generic.h>
 #include <FDM/LaRCsim/ls_cockpit.h>
+#include <FDM/LaRCsim/ls_constants.h>
 
 #ifdef __cplusplus
 extern "C" {
index 29dd376bca69030b0ccdc90e138440e50dc6b25a..3d4927deea31b32622b57cb8f03378fceebf8984 100644 (file)
@@ -18,6 +18,7 @@
  
  HISTORY:      04/08/2000   initial release
                06/18/2001   (RD) Added Throttle_pct_input
+               08/29/2002   (MS) Added simpleSingleModel
 
 ----------------------------------------------------------------------
  
 void uiuc_map_engine()
 {
   engine_map["simpleSingle"]      =      simpleSingle_flag         ;
+  engine_map["simpleSingleModel"] =      simpleSingleModel_flag    ;
   engine_map["c172"]              =      c172_flag                 ;
   engine_map["cherokee"]          =      cherokee_flag             ;
   engine_map["Throttle_pct_input"]=      Throttle_pct_input_flag   ;
-  engine_map["forcemom"]          =      forcemom_flag             ;
-  engine_map["Xp_input"]          =      Xp_input_flag             ;
-  engine_map["Zp_input"]          =      Zp_input_flag             ;
-  engine_map["Mp_input"]          =      Mp_input_flag             ;
+  engine_map["gyroForce_Q_body"]  =      gyroForce_Q_body_flag     ;
+  engine_map["gyroForce_R_body"]  =      gyroForce_R_body_flag     ;
+  engine_map["omega"]             =      omega_flag                ;
+  engine_map["omegaRPM"]          =      omegaRPM_flag             ;
+  engine_map["polarInertia"]      =      polarInertia_flag         ;
+  engine_map["slipstream_effects"] = slipstream_effects_flag       ;
+  engine_map["propDia"]            = propDia_flag                  ;
+  engine_map["eta_q_Cm_q"]         = eta_q_Cm_q_flag               ;
+  engine_map["eta_q_Cm_adot"]      = eta_q_Cm_adot_flag            ;
+  engine_map["eta_q_Cmfade"]       = eta_q_Cmfade_flag             ;
+  engine_map["eta_q_Cl_beta"]      = eta_q_Cl_beta_flag            ;
+  engine_map["eta_q_Cl_p"]         = eta_q_Cl_p_flag               ;
+  engine_map["eta_q_Cl_r"]         = eta_q_Cl_r_flag               ;
+  engine_map["eta_q_Cl_dr"]        = eta_q_Cl_dr_flag              ;
+  engine_map["eta_q_CY_beta"]      = eta_q_CY_beta_flag            ;
+  engine_map["eta_q_CY_p"]         = eta_q_CY_p_flag               ;
+  engine_map["eta_q_CY_r"]         = eta_q_CY_r_flag               ;
+  engine_map["eta_q_CY_dr"]        = eta_q_CY_dr_flag              ;
+  engine_map["eta_q_Cn_beta"]      = eta_q_Cn_beta_flag            ;
+  engine_map["eta_q_Cn_p"]         = eta_q_Cn_p_flag               ;
+  engine_map["eta_q_Cn_r"]         = eta_q_Cn_r_flag               ;
+  engine_map["eta_q_Cn_dr"]        = eta_q_Cn_dr_flag              ;
+  engine_map["forcemom"]           =      forcemom_flag            ;
+  engine_map["Xp_input"]           =      Xp_input_flag            ;
+  engine_map["Zp_input"]           =      Zp_input_flag            ;
+  engine_map["Mp_input"]           =      Mp_input_flag            ;
 }
 
 // end uiuc_map_engine.cpp
index abfd0084f0b3663dc980a2bbfd127bc4f8b76e27..2f99c1375d12738e5f6f0ec828eb9a21f0ad9c24 100644 (file)
@@ -96,6 +96,7 @@ void uiuc_map_init()
   init_map["dyn_on_speed"]        =      dyn_on_speed_flag          ;
   init_map["dyn_on_speed_zero"]   =      dyn_on_speed_zero_flag     ;
   init_map["use_dyn_on_speed_curve1"] =  use_dyn_on_speed_curve1_flag;
+  init_map["use_Alpha_dot_on_speed"]  =  use_Alpha_dot_on_speed_flag;
   init_map["Alpha"]               =      Alpha_flag                 ;
   init_map["Beta"]                =      Beta_flag                  ;
   init_map["U_body"]              =      U_body_flag                ;
index c41d749654c5b6bf8d52ee533a7a3d931c56210b..881ab9b57dd259a0e2309b6f31b904fe1bc78df6 100644 (file)
@@ -122,13 +122,19 @@ void uiuc_map_record5()
   record_map["M_n_rp"]            =      M_n_rp_record              ;
 
   /***********************Flapper Data********************/
 /* record_map["flapper_freq"]       =      flapper_freq_record        ;
+ record_map["flapper_freq"]       =      flapper_freq_record        ;
  record_map["flapper_phi"]        =      flapper_phi_record         ;
  record_map["flapper_phi_deg"]    =      flapper_phi_deg_record     ;
  record_map["flapper_Lift"]       =      flapper_Lift_record        ;
  record_map["flapper_Thrust"]     =      flapper_Thrust_record      ;
  record_map["flapper_Inertia"]    =      flapper_Inertia_record     ;
- record_map["flapper_Moment"]     =      flapper_Moment_record      ;*/
+ record_map["flapper_Moment"]     =      flapper_Moment_record      ;
+
+  /**************************Debug************************/
+ record_map["debug1"]             =      debug1_record              ;
+ record_map["debug2"]             =      debug2_record              ;
+ record_map["debug3"]             =      debug3_record              ;
+
 }
 
 // end uiuc_map_record5.cpp
index 19884721be4061ceac31c6ee5020b573fb389fcf..ceaa2dad673dadb96d635ce011f5b342ccc30078 100644 (file)
@@ -245,12 +245,12 @@ void uiuc_force_moment(double dt)
     M_m_aero += -polarInertia * engineOmega * R_body;
 
   // ornithopter support
-  if (flapper_model)
-    {
-      F_X_aero += F_X_aero_flapper;
-      F_Z_aero += F_Z_aero_flapper;
-      M_m_aero += flapper_Moment;
-    }
+  //if (flapper_model)
+  //  {
+  //    F_X_aero += F_X_aero_flapper;
+  //    F_Z_aero += F_Z_aero_flapper;
+  //    M_m_aero += flapper_Moment;
+  //  }
 
   // fog field update
    Fog = 0;