]> git.mxchange.org Git - flightgear.git/commitdiff
Updates from Rob Deters.
authorcurt <curt>
Wed, 11 Sep 2002 02:31:10 +0000 (02:31 +0000)
committercurt <curt>
Wed, 11 Sep 2002 02:31:10 +0000 (02:31 +0000)
src/FDM/UIUCModel/uiuc_aircraft.h
src/FDM/UIUCModel/uiuc_menu.cpp
src/FDM/UIUCModel/uiuc_recorder.cpp
src/FDM/UIUCModel/uiuc_wrapper.cpp

index 74f2f491b414c794ed0a45c4faf8c69568df1ae5..1e95f81aa082f0df09b8a876e3384289affa0790 100644 (file)
@@ -69,6 +69,7 @@
               04/21/2002   (MSS) Added new variables for apparent mass effects
                             and options for computing *_2U coefficient
                             scale factors.
+               08/29/2002   (MSS) Added simpleSingleModel
 
 ----------------------------------------------------------------------
 
@@ -164,7 +165,7 @@ enum {Dx_pilot_flag = 2000, Dy_pilot_flag, Dz_pilot_flag,
       use_V_rel_wind_2U_flag, nondim_rate_V_rel_wind_flag, 
       use_abs_U_body_2U_flag,
       dyn_on_speed_flag, dyn_on_speed_zero_flag, 
-      use_dyn_on_speed_curve1_flag, Alpha_flag, 
+      use_dyn_on_speed_curve1_flag, use_Alpha_dot_on_speed_flag, Alpha_flag, 
       Beta_flag, U_body_flag, V_body_flag, W_body_flag, ignore_unknown_flag};
 
 // geometry === Aircraft-specific geometric quantities
@@ -190,7 +191,25 @@ enum {Weight_flag = 6000,
       I_yy_appMass_flag,       I_zz_appMass_flag};
 
 // engine ===== Propulsion data
-enum {simpleSingle_flag = 7000, c172_flag, cherokee_flag, 
+enum {simpleSingle_flag = 7000, simpleSingleModel_flag,
+      c172_flag, cherokee_flag, gyroForce_Q_body_flag, gyroForce_R_body_flag, 
+      omega_flag, omegaRPM_flag, polarInertia_flag,
+      slipstream_effects_flag, propDia_flag,
+      eta_q_Cm_q_flag,
+      eta_q_Cm_adot_flag,
+      eta_q_Cmfade_flag,
+      eta_q_Cl_beta_flag,
+      eta_q_Cl_p_flag,
+      eta_q_Cl_r_flag,
+      eta_q_Cl_dr_flag,
+      eta_q_CY_beta_flag,
+      eta_q_CY_p_flag,
+      eta_q_CY_r_flag,
+      eta_q_CY_dr_flag,
+      eta_q_Cn_beta_flag,
+      eta_q_Cn_p_flag,
+      eta_q_Cn_r_flag,
+      eta_q_Cn_dr_flag,
       Throttle_pct_input_flag, forcemom_flag, Xp_input_flag, Zp_input_flag, Mp_input_flag};
 
 // CD ========= Aerodynamic x-force quantities (longitudinal)
@@ -390,11 +409,13 @@ enum {Simtime_record = 16000, dt_record,
 
       flapper_freq_record, flapper_phi_record,
       flapper_phi_deg_record, flapper_Lift_record, flapper_Thrust_record,
-      flapper_Inertia_record, flapper_Moment_record};
+      flapper_Inertia_record, flapper_Moment_record,
+
+      debug1_record, debug2_record, debug3_record};
 
 // misc ======= Miscellaneous inputs
-enum {simpleHingeMomentCoef_flag = 17000, dfTimefdf_flag/*, flapper_flag,
-                                                         flapper_phi_init_flag*/};
+enum {simpleHingeMomentCoef_flag = 17000, dfTimefdf_flag, flapper_flag,
+      flapper_phi_init_flag};
 
 //321654
 // fog ======== Fog field quantities
@@ -487,6 +508,13 @@ struct AIRCRAFT
   bool use_dyn_on_speed_curve1;
 #define use_dyn_on_speed_curve1 aircraft_->use_dyn_on_speed_curve1
   bool P_body_init_true;
+
+  bool use_Alpha_dot_on_speed;
+#define use_Alpha_dot_on_speed  aircraft_->use_Alpha_dot_on_speed
+  double Alpha_dot_on_speed;
+#define Alpha_dot_on_speed      aircraft_->Alpha_dot_on_speed
+
+
   double P_body_init;
 #define P_body_init_true       aircraft_->P_body_init_true
 #define P_body_init            aircraft_->P_body_init
@@ -700,6 +728,22 @@ struct AIRCRAFT
   
   double simpleSingleMaxThrust;
 #define simpleSingleMaxThrust  aircraft_->simpleSingleMaxThrust
+
+  bool simpleSingleModel;
+#define simpleSingleModel  aircraft_->simpleSingleModel
+  double t_v0;
+#define t_v0  aircraft_->t_v0
+  double dtdv_t0;
+#define dtdv_t0  aircraft_->dtdv_t0
+  double v_t0;
+#define v_t0  aircraft_->v_t0
+  double dtdvvt;
+#define dtdvvt  aircraft_->dtdvvt
+
+  double tc, induced, eta_q;
+#define tc      aircraft_->tc
+#define induced aircraft_->induced
+#define eta_q   aircraft_->eta_q
   
   bool Throttle_pct_input;
   string Throttle_pct_input_file;
@@ -713,6 +757,70 @@ struct AIRCRAFT
 #define Throttle_pct_input_dTArray    aircraft_->Throttle_pct_input_dTArray
 #define Throttle_pct_input_ntime      aircraft_->Throttle_pct_input_ntime
 #define Throttle_pct_input_startTime  aircraft_->Throttle_pct_input_startTime
+  bool gyroForce_Q_body, gyroForce_R_body;
+  double minOmega, maxOmega, minOmegaRPM, maxOmegaRPM, engineOmega, polarInertia;
+#define gyroForce_Q_body              aircraft_->gyroForce_Q_body
+#define gyroForce_R_body              aircraft_->gyroForce_R_body
+#define minOmega                      aircraft_->minOmega
+#define maxOmega                      aircraft_->maxOmega
+#define minOmegaRPM                   aircraft_->minOmegaRPM
+#define maxOmegaRPM                   aircraft_->maxOmegaRPM
+#define engineOmega                   aircraft_->engineOmega
+#define polarInertia                  aircraft_->polarInertia
+
+  // propeller slipstream effects
+  bool slipstream_effects;
+  double propDia;
+  double eta_q_Cm_q, eta_q_Cm_q_fac;
+  double eta_q_Cm_adot, eta_q_Cm_adot_fac;
+  double eta_q_Cmfade, eta_q_Cmfade_fac;
+  double eta_q_Cl_beta, eta_q_Cl_beta_fac;
+  double eta_q_Cl_p, eta_q_Cl_p_fac;
+  double eta_q_Cl_r, eta_q_Cl_r_fac;
+  double eta_q_Cl_dr, eta_q_Cl_dr_fac;
+  double eta_q_CY_beta, eta_q_CY_beta_fac;
+  double eta_q_CY_p, eta_q_CY_p_fac;
+  double eta_q_CY_r, eta_q_CY_r_fac;
+  double eta_q_CY_dr, eta_q_CY_dr_fac;
+  double eta_q_Cn_beta, eta_q_Cn_beta_fac;
+  double eta_q_Cn_p, eta_q_Cn_p_fac;
+  double eta_q_Cn_r, eta_q_Cn_r_fac;
+  double eta_q_Cn_dr, eta_q_Cn_dr_fac;
+
+#define slipstream_effects   aircraft_->slipstream_effects
+#define propDia              aircraft_->propDia
+#define eta_q_Cm_q           aircraft_->eta_q_Cm_q
+#define eta_q_Cm_q_fac       aircraft_->eta_q_Cm_q_fac
+#define eta_q_Cm_adot        aircraft_->eta_q_Cm_adot
+#define eta_q_Cm_adot_fac    aircraft_->eta_q_Cm_adot_fac
+#define eta_q_Cmfade         aircraft_->eta_q_Cmfade
+#define eta_q_Cmfade_fac     aircraft_->eta_q_Cmfade_fac
+#define eta_q_Cl_beta        aircraft_->eta_q_Cl_beta
+#define eta_q_Cl_beta_fac    aircraft_->eta_q_Cl_beta_fac
+#define eta_q_Cl_p           aircraft_->eta_q_Cl_p
+#define eta_q_Cl_p_fac       aircraft_->eta_q_Cl_p_fac
+#define eta_q_Cl_r           aircraft_->eta_q_Cl_r
+#define eta_q_Cl_r_fac       aircraft_->eta_q_Cl_r_fac
+#define eta_q_Cl_dr          aircraft_->eta_q_Cl_dr
+#define eta_q_Cl_dr_fac      aircraft_->eta_q_Cl_dr_fac
+#define eta_q_CY_beta        aircraft_->eta_q_CY_beta
+#define eta_q_CY_beta_fac    aircraft_->eta_q_CY_beta_fac
+#define eta_q_CY_p           aircraft_->eta_q_CY_p
+#define eta_q_CY_p_fac       aircraft_->eta_q_CY_p_fac
+#define eta_q_CY_r           aircraft_->eta_q_CY_r
+#define eta_q_CY_r_fac       aircraft_->eta_q_CY_r_fac
+#define eta_q_CY_dr          aircraft_->eta_q_CY_dr
+#define eta_q_CY_dr_fac      aircraft_->eta_q_CY_dr_fac
+#define eta_q_Cn_beta        aircraft_->eta_q_Cn_beta
+#define eta_q_Cn_beta_fac    aircraft_->eta_q_Cn_beta_fac
+#define eta_q_Cn_p           aircraft_->eta_q_Cn_p
+#define eta_q_Cn_p_fac       aircraft_->eta_q_Cn_p_fac
+#define eta_q_Cn_r           aircraft_->eta_q_Cn_r
+#define eta_q_Cn_r_fac       aircraft_->eta_q_Cn_r_fac
+#define eta_q_Cn_dr          aircraft_->eta_q_Cn_dr
+#define eta_q_Cn_dr_fac      aircraft_->eta_q_Cn_dr_fac
+
+
   bool Xp_input;
   string Xp_input_file;
   double Xp_input_timeArray[5400];
@@ -1153,6 +1261,14 @@ struct AIRCRAFT
 #define Cmfade_nAlphaArray aircraft_->Cmfade_nAlphaArray
 #define Cmfade_nde         aircraft_->Cmfade_nde
 #define CmfadeI            aircraft_->CmfadeI
+
+  double gamma_wing, w_induced, w_coef, downwash_angle, AlphaTail;
+#define gamma_wing         aircraft_->gamma_wing
+#define w_induced          aircraft_->w_induced
+#define w_coef             aircraft_->w_coef
+#define downwash_angle     aircraft_->downwash_angle
+#define AlphaTail          aircraft_->AlphaTail
+
   string Cmfdf;
   double Cmfdf_dfArray[100];
   double Cmfdf_CmArray[100];
@@ -2122,8 +2238,8 @@ struct AIRCRAFT
 #define dfTimefdf_dfArray      aircraft_->dfTimefdf_dfArray
 #define dfTimefdf_TimeArray    aircraft_->dfTimefdf_TimeArray
 #define dfTimefdf_ndf          aircraft_->dfTimefdf_ndf
-  /*
-  FlapData *flapper_data;
+
+  /*  FlapData *flapper_data;
 #define flapper_data           aircraft_->flapper_data
   bool flapper_model;
 #define flapper_model          aircraft_->flapper_model
index ce245c7c1280f2697df4b5ab494aeeefc1cbe589..d3580f08ee95558917cdceab62bb3624d74225c3 100644 (file)
                            will compile with certain compilers.
               08/29/2002   (RD) Separated each primary keyword into its
                            own function to speed up compile time
+               08/29/2002   (RD w/ help from CO) Made changes to shorten
+                            compile time.  [] RD to add more comments here.
+               08/29/3003   (MSS) Adding new keywords for new engine model
+                            and slipstream effects on tail.
 
 ----------------------------------------------------------------------
 
@@ -453,6 +457,16 @@ void parse_init( const string& linetoken2, const string& linetoken3,
          use_dyn_on_speed_curve1 = true;
          break;
        }
+      case use_Alpha_dot_on_speed_flag:
+       {
+         use_Alpha_dot_on_speed = true;
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         Alpha_dot_on_speed = token_value;
+         break;
+       }
       case Alpha_flag:
        {
          if (check_float(linetoken3))
@@ -1076,6 +1090,31 @@ void parse_engine( const string& linetoken2, const string& linetoken3,
          engineParts -> storeCommands (*command_line);
          break;
        }
+      case simpleSingleModel_flag:
+       {
+         simpleSingleModel = true;
+         /* input the thrust at zero speed */
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         t_v0 = token_value; 
+         /* input slope of thrust at speed for which thrust is zero */
+         if (check_float(linetoken4))
+           token4 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         dtdv_t0 = token_value; 
+         /* input speed at which thrust is zero */
+         if (check_float(linetoken5))
+           token5 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         v_t0 = token_value; 
+         dtdvvt = -dtdv_t0 * v_t0 / t_v0;
+         engineParts -> storeCommands (*command_line);
+         break;
+       }
       case c172_flag:
        {
          engineParts -> storeCommands (*command_line);
@@ -1102,6 +1141,241 @@ void parse_engine( const string& linetoken2, const string& linetoken3,
          Throttle_pct_input_startTime = token_value;
          break;
        }
+      case gyroForce_Q_body_flag:
+       {
+         /* include gyroscopic forces due to pitch */
+         gyroForce_Q_body = true;
+         break;
+       }
+      case gyroForce_R_body_flag:
+       {
+         /* include gyroscopic forces due to yaw */
+         gyroForce_R_body = true;
+         break;
+       }
+
+      case slipstream_effects_flag:
+       {
+       // include slipstream effects
+         slipstream_effects = true;
+         if (!simpleSingleModel)
+           uiuc_warnings_errors(3, *command_line);
+         break;
+       }
+      case propDia_flag:
+       {
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         propDia = token_value;
+         break;
+       }
+      case eta_q_Cm_q_flag:
+       {
+       // include slipstream effects due to Cm_q
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cm_q_fac = token_value;
+         if (eta_q_Cm_q_fac == 0.0) {eta_q_Cm_q_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cm_adot_flag:
+       {
+       // include slipstream effects due to Cm_adot
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cm_adot_fac = token_value;
+         if (eta_q_Cm_adot_fac == 0.0) {eta_q_Cm_adot_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cmfade_flag:
+       {
+       // include slipstream effects due to Cmfade
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cmfade_fac = token_value;
+         if (eta_q_Cmfade_fac == 0.0) {eta_q_Cmfade_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cl_beta_flag:
+       {
+       // include slipstream effects due to Cl_beta
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cl_beta_fac = token_value;
+         if (eta_q_Cl_beta_fac == 0.0) {eta_q_Cl_beta_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cl_p_flag:
+       {
+       // include slipstream effects due to Cl_p
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cl_p_fac = token_value;
+         if (eta_q_Cl_p_fac == 0.0) {eta_q_Cl_p_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cl_r_flag:
+       {
+       // include slipstream effects due to Cl_r
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cl_r_fac = token_value;
+         if (eta_q_Cl_r_fac == 0.0) {eta_q_Cl_r_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cl_dr_flag:
+       {
+       // include slipstream effects due to Cl_dr
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cl_dr_fac = token_value;
+         if (eta_q_Cl_dr_fac == 0.0) {eta_q_Cl_dr_fac = 1.0;}
+         break;
+       }
+      case eta_q_CY_beta_flag:
+       {
+       // include slipstream effects due to CY_beta
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_CY_beta_fac = token_value;
+         if (eta_q_CY_beta_fac == 0.0) {eta_q_CY_beta_fac = 1.0;}
+         break;
+       }
+      case eta_q_CY_p_flag:
+       {
+       // include slipstream effects due to CY_p
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_CY_p_fac = token_value;
+         if (eta_q_CY_p_fac == 0.0) {eta_q_CY_p_fac = 1.0;}
+         break;
+       }
+      case eta_q_CY_r_flag:
+       {
+       // include slipstream effects due to CY_r
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_CY_r_fac = token_value;
+         if (eta_q_CY_r_fac == 0.0) {eta_q_CY_r_fac = 1.0;}
+         break;
+       }
+      case eta_q_CY_dr_flag:
+       {
+       // include slipstream effects due to CY_dr
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_CY_dr_fac = token_value;
+         if (eta_q_CY_dr_fac == 0.0) {eta_q_CY_dr_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cn_beta_flag:
+       {
+       // include slipstream effects due to Cn_beta
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cn_beta_fac = token_value;
+         if (eta_q_Cn_beta_fac == 0.0) {eta_q_Cn_beta_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cn_p_flag:
+       {
+       // include slipstream effects due to Cn_p
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cn_p_fac = token_value;
+         if (eta_q_Cn_p_fac == 0.0) {eta_q_Cn_p_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cn_r_flag:
+       {
+       // include slipstream effects due to Cn_r
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cn_r_fac = token_value;
+         if (eta_q_Cn_r_fac == 0.0) {eta_q_Cn_r_fac = 1.0;}
+         break;
+       }
+      case eta_q_Cn_dr_flag:
+       {
+       // include slipstream effects due to Cn_dr
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         eta_q_Cn_dr_fac = token_value;
+         if (eta_q_Cn_dr_fac == 0.0) {eta_q_Cn_dr_fac = 1.0;}
+         break;
+       }
+
+      case omega_flag:
+       {
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         minOmega = token_value; 
+         if (check_float(linetoken4))
+           token4 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         maxOmega = token_value; 
+         break;
+       }
+      case omegaRPM_flag:
+       {
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         minOmegaRPM = token_value; 
+         minOmega    = minOmegaRPM * 2.0 * LS_PI / 60;
+         if (check_float(linetoken4))
+           token4 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         maxOmegaRPM = token_value; 
+         maxOmega    = maxOmegaRPM * 2.0 * LS_PI / 60;
+         break;
+       }
+      case polarInertia_flag:
+       {
+         if (check_float(linetoken3))
+           token3 >> token_value;
+         else
+           uiuc_warnings_errors(1, *command_line);
+         polarInertia = token_value; 
+         break;
+       }
       case forcemom_flag:
        {
          engineParts -> storeCommands (*command_line);
@@ -6490,6 +6764,22 @@ void parse_record( const string& linetoken2, LIST command_line ) {
        recordParts -> storeCommands (*command_line);
        break;
        }*/
+      /****************** Flapper Data ***********************/
+    case debug1_record:
+      {
+       recordParts -> storeCommands (*command_line);
+       break;
+      }
+    case debug2_record:
+      {
+       recordParts -> storeCommands (*command_line);
+       break;
+      }
+    case debug3_record:
+      {
+       recordParts -> storeCommands (*command_line);
+       break;
+      }
     default:
       {
        if (dont_ignore)
@@ -6530,7 +6820,7 @@ void parse_misc( const string& linetoken2, const string& linetoken3,
                              dfTimefdf_ndf);
        break;
       }
-      /*    case flapper_flag:
+      /*case flapper_flag:
       {
        string flap_file;
        
@@ -6613,8 +6903,8 @@ void uiuc_menu( string aircraft_name )
 
 /* set speed at which dynamic pressure terms will be accounted for,
    since if velocity is too small, coefficients will go to infinity */
-  dyn_on_speed      = 33;    /* 20 kts, default */
-  dyn_on_speed_zero = 0.5 * dyn_on_speed;    /* only used of use_dyn_on_speed_curve1 is used */
+  dyn_on_speed      = 33;    /* 20 kts (33 ft/sec), default */
+  dyn_on_speed_zero = 0.5 * dyn_on_speed;    /* only used if use_dyn_on_speed_curve1 is used */
   bootindex = 0;  // the index for the bootTime
 
   dont_ignore = true;
index bed9318aae845cee692217ef1bc42377d8228484..80ffc91fd369133b9f9957483ffbefc08f01b6bd 100644 (file)
@@ -1840,7 +1840,7 @@ void uiuc_recorder( double dt )
               }
 
               /*********************** Moments ***********************/
-/*         case flapper_freq_record:
+             /* case flapper_freq_record:
              {
                fout << flapper_freq << " ";
                break;
@@ -1874,7 +1874,48 @@ void uiuc_recorder( double dt )
              {
                fout << flapper_Moment << " ";
                break;
-               } */
+               }*/
+              /*********************** debug  ***********************/
+              /* debug variables for use in probing data            */
+              /* comment out old lines, and add new                 */
+              /* only remove code that you have written             */
+           case debug1_record:
+             {
+               // eta on tail
+               // fout << eta_q << " ";
+               // engine RPM
+               // fout << engineOmega * 60 / (2 * LS_PI)<< " ";
+               // climb rate in fpm
+               //fout << V_down * 60 << " ";
+               // w_induced downwash at tail due to wing
+               fout << w_induced   << " ";
+               break;
+             }
+           case debug2_record:
+             {
+               //Lift to drag ratio 
+               // fout << V_north/V_down << " ";
+               // g's through the c.g. of the aircraft
+               // fout << (-A_Z_cg/32.174) << " ";
+               // gyroscopic moment (see uiuc_wrapper.cpp)
+               // fout << (polarInertia * engineOmega * Q_body) << " ";
+               // downwash_angle at tail
+               fout << downwash_angle * 57.29 << " ";
+
+               break;
+             }
+           case debug3_record:
+             {
+               // die off function for eta_q
+               // fout << (Cos_alpha * Cos_alpha)       << " ";
+               // gyroscopic moment (see uiuc_wrapper.cpp)
+               // fout << (-polarInertia * engineOmega * R_body) << " ";
+               // AlphaTail 
+               fout << AlphaTail * 57.29  << " ";
+               fout << Alpha     * 57.29  << " ";
+               break;
+             }
+
             };
         } // end record map
     }
index 4df74dd175c112e0476acbd2e9bf5a666b1c581c..19884721be4061ceac31c6ee5020b573fb389fcf 100644 (file)
@@ -208,18 +208,17 @@ void uiuc_force_moment(double dt)
       F_Y_wind =  CY * qS  * Cos_beta * Cos_beta;
       F_Z_wind = -CL * qS  * Cos_beta * Cos_beta;
 
-      /* wind-axis to body-axis transformation */
+      // wind-axis to body-axis transformation 
       F_X_aero = F_X_wind * Cos_alpha * Cos_beta - F_Y_wind * Cos_alpha * Sin_beta - F_Z_wind * Sin_alpha;
       F_Y_aero = F_X_wind * Sin_beta + F_Y_wind * Cos_beta;
       F_Z_aero = F_X_wind * Sin_alpha * Cos_beta - F_Y_wind * Sin_alpha * Sin_beta + F_Z_wind * Cos_alpha;
     }
-  /* Moment calculations */
+  // Moment calculations
   M_l_aero = Cl * qSb    * Cos_beta * Cos_beta;
   M_m_aero = Cm * qScbar * Cos_beta * Cos_beta;
   M_n_aero = Cn * qSb    * Cos_beta * Cos_beta;
 
-  /* Adding in apparent mass effects */
-
+  // Adding in apparent mass effects
   if (Mass_appMass_ratio)
     F_Z_aero += -(Mass_appMass_ratio * Mass) * W_dot_body;
   if (I_xx_appMass_ratio)
@@ -227,7 +226,7 @@ void uiuc_force_moment(double dt)
   if (I_yy_appMass_ratio)
     M_m_aero += -(I_yy_appMass_ratio * I_yy) * Q_dot_body;
   if (I_zz_appMass_ratio)
-    M_m_aero += -(I_zz_appMass_ratio * I_yy) * R_dot_body;
+    M_n_aero += -(I_zz_appMass_ratio * I_zz) * R_dot_body;
 
   if (Mass_appMass)
     F_Z_aero += -Mass_appMass * W_dot_body;
@@ -236,14 +235,22 @@ void uiuc_force_moment(double dt)
   if (I_yy_appMass)
     M_m_aero += -I_yy_appMass * Q_dot_body;
   if (I_zz_appMass)
-    M_m_aero += -I_zz_appMass * R_dot_body;
+    M_n_aero += -I_zz_appMass * R_dot_body;
 
-  //if (flapper_model)
-  //  {
-  //    F_X_aero += F_X_aero_flapper;
-  //    F_Z_aero += F_Z_aero_flapper;
-  //    M_m_aero += flapper_Moment;
-  //  }
+  // gyroscopic moments
+  // engineOmega is positive when rotation is ccw when viewed from the front
+  if (gyroForce_Q_body)
+    M_n_aero +=  polarInertia * engineOmega * Q_body;
+  if (gyroForce_R_body)
+    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;
+    }
 
   // fog field update
    Fog = 0;