]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_coef_pitch.cpp
Merge branch 'jsd/atmos' into topic/atmos-merge
[flightgear.git] / src / FDM / UIUCModel / uiuc_coef_pitch.cpp
index 7c35bd978b0b95f4961642cfbf3aa3b85a50a1cf..613261d4b3379f2dc83aa2aa42e642f15c0e13ae 100644 (file)
 ----------------------------------------------------------------------
 
  HISTORY:      04/15/2000   initial release
+               10/25/2001   (RD) Added new variables needed for the non-
+                           linear Twin Otter model at zero flaps
+                           (Cmfxxf0)
+              11/12/2001   (RD) Added new variables needed for the non-
+                           linear Twin Otter model with flaps
+                           (Cmfxxf).  Zero flap vairables removed.
+              02/13/2002   (RD) Added variables so linear aero model
+                           values can be recorded
+              02/18/2002   (RD) Added uiuc_3Dinterp_quick() function
+                           for a quicker 3D interpolation.  Takes
+                           advantage of "nice" data.
 
 ----------------------------------------------------------------------
 
  AUTHOR(S):    Bipin Sehgal       <bsehgal@uiuc.edu>
                Jeff Scott         <jscott@mail.com>
+              Robert Deters      <rdeters@uiuc.edu>
 
 ----------------------------------------------------------------------
 
@@ -50,6 +62,8 @@
  CALLS TO:     uiuc_1Dinterpolation
                uiuc_2Dinterpolation
                uiuc_ice_filter
+              uiuc_3Dinterpolation
+              uiuc_3Dinterp_quick
 
 ----------------------------------------------------------------------
 
@@ -66,8 +80,7 @@
 
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA or view http://www.gnu.org/copyleft/gpl.html.
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 **********************************************************************/
 
@@ -79,6 +92,8 @@ void uiuc_coef_pitch()
   string linetoken1;
   string linetoken2;
   stack command_list;
+
+  double q_nondim;
   
   command_list = aeroPitchParts -> getCommands();
   
@@ -95,7 +110,8 @@ void uiuc_coef_pitch()
               {
                 Cmo = uiuc_ice_filter(Cmo_clean,kCmo);
               }
-            Cm += Cmo;
+           Cmo_save = Cmo;
+            Cm += Cmo_save;
             break;
           }
         case Cm_a_flag:
@@ -104,7 +120,8 @@ void uiuc_coef_pitch()
               {
                 Cm_a = uiuc_ice_filter(Cm_a_clean,kCm_a);
               }
-            Cm += Cm_a * Alpha;
+           Cm_a_save = Cm_a * Std_Alpha;
+            Cm += Cm_a_save;
             break;
           }
         case Cm_a2_flag:
@@ -113,7 +130,8 @@ void uiuc_coef_pitch()
               {
                 Cm_a2 = uiuc_ice_filter(Cm_a2_clean,kCm_a2);
               }
-            Cm += Cm_a2 * Alpha * Alpha;
+           Cm_a2_save = Cm_a2 * Std_Alpha * Std_Alpha;
+            Cm += Cm_a2_save;
             break;
           }
         case Cm_adot_flag:
@@ -124,7 +142,15 @@ void uiuc_coef_pitch()
               }
             /* Cm_adot must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            Cm += Cm_adot * Alpha_dot * cbar_2U;
+           Cm_adot_save = Cm_adot * Std_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:
@@ -135,12 +161,21 @@ void uiuc_coef_pitch()
               }
             /* Cm_q must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            Cm += Cm_q * Q_body * cbar_2U;
+           Cm_q_save = 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:
           {
-            Cm += Cm_ih * ih;
+           Cm_ih_save = Cm_ih * ih;
+            Cm += Cm_ih_save;
             break;
           }
         case Cm_de_flag:
@@ -149,7 +184,15 @@ void uiuc_coef_pitch()
               {
                 Cm_de = uiuc_ice_filter(Cm_de_clean,kCm_de);
               }
-            Cm += Cm_de * elevator;
+           Cm_de_save = Cm_de * elevator;
+           if (eta_q_Cm_de_fac)
+             {
+               Cm += Cm_de_save * eta_q_Cm_de_fac;
+             }
+           else
+             {
+               Cm += Cm_de_save;
+             }
             break;
           }
         case Cm_b2_flag:
@@ -158,7 +201,8 @@ void uiuc_coef_pitch()
               {
                 Cm_b2 = uiuc_ice_filter(Cm_b2_clean,kCm_b2);
               }
-            Cm += Cm_b2 * Beta * Beta;
+           Cm_b2_save = Cm_b2 * Std_Beta * Std_Beta;
+            Cm += Cm_b2_save;
             break;
           }
         case Cm_r_flag:
@@ -167,7 +211,8 @@ void uiuc_coef_pitch()
               {
                 Cm_r = uiuc_ice_filter(Cm_r_clean,kCm_r);
               }
-            Cm += Cm_r * R_body * b_2U;
+           Cm_r_save = Cm_r * R_body * b_2U;
+            Cm += Cm_r_save;
             break;
           }
         case Cm_df_flag:
@@ -176,7 +221,20 @@ void uiuc_coef_pitch()
               {
                 Cm_df = uiuc_ice_filter(Cm_df_clean,kCm_df);
               }
-            Cm += Cm_df * flap;
+           Cm_df_save = Cm_df * flap_pos;
+            Cm += Cm_df_save;
+            break;
+          }
+        case Cm_ds_flag:
+          {
+           Cm_ds_save = Cm_ds * spoiler_pos;
+            Cm += Cm_ds_save;
+            break;
+          }
+        case Cm_dg_flag:
+          {
+           Cm_dg_save = Cm_dg * gear_pos_norm;
+            Cm += Cm_dg_save;
             break;
           }
         case Cmfa_flag:
@@ -184,20 +242,58 @@ void uiuc_coef_pitch()
             CmfaI = uiuc_1Dinterpolation(Cmfa_aArray,
                                          Cmfa_CmArray,
                                          Cmfa_nAlpha,
-                                         Alpha);
+                                         Std_Alpha);
             Cm += CmfaI;
             break;
           }
         case Cmfade_flag:
           {
-            CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
-                                           Cmfade_deArray,
-                                           Cmfade_CmArray,
-                                           Cmfade_nAlphaArray,
-                                           Cmfade_nde,
-                                           Alpha,
-                                           elevator);
-            Cm += CmfadeI;
+           if(b_downwashMode)
+             {
+               // compute the induced velocity on the tail to account for tail downwash
+               switch(downwashMode)
+                 {
+                 case 100:            
+                   if (V_rel_wind < dyn_on_speed)
+                     {
+                       alphaTail = Std_Alpha;
+                     }
+                   else
+                     {
+                       gammaWing = V_rel_wind * Sw * CL / (2.0 * bw);
+                       // printf("gammaWing = %.4f\n", (gammaWing));
+                       downwash  = downwashCoef * gammaWing;
+                       downwashAngle = atan(downwash/V_rel_wind);
+                       alphaTail = Std_Alpha - downwashAngle;
+                     }
+                   CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
+                                                  Cmfade_deArray,
+                                                  Cmfade_CmArray,
+                                                  Cmfade_nAlphaArray,
+                                                  Cmfade_nde,
+                                                  alphaTail,
+                                                  elevator);
+                   break;
+                 }
+             }
+           else
+             {
+               CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
+                                              Cmfade_deArray,
+                                              Cmfade_CmArray,
+                                              Cmfade_nAlphaArray,
+                                              Cmfade_nde,
+                                              Std_Alpha,
+                                              elevator); 
+             }
+           if (eta_q_Cmfade_fac)
+             {
+               Cm += CmfadeI * eta_q_Cmfade_fac;
+             }
+           else
+             {
+               Cm += CmfadeI;
+             }
             break;
           }
         case Cmfdf_flag:
@@ -205,7 +301,7 @@ void uiuc_coef_pitch()
             CmfdfI = uiuc_1Dinterpolation(Cmfdf_dfArray,
                                           Cmfdf_CmArray,
                                           Cmfdf_ndf,
-                                          flap);
+                                          flap_pos);
             Cm += CmfdfI;
             break;
           }
@@ -216,11 +312,93 @@ void uiuc_coef_pitch()
                                            Cmfadf_CmArray,
                                            Cmfadf_nAlphaArray,
                                            Cmfadf_ndf,
-                                           Alpha,
-                                           flap);
+                                           Std_Alpha,
+                                           flap_pos);
             Cm += CmfadfI;
             break;
           }
+        case Cmfabetaf_flag:
+          {
+           if (Cmfabetaf_nice == 1)
+             CmfabetafI = uiuc_3Dinterp_quick(Cmfabetaf_fArray,
+                                              Cmfabetaf_aArray_nice,
+                                              Cmfabetaf_bArray_nice,
+                                              Cmfabetaf_CmArray,
+                                              Cmfabetaf_na_nice,
+                                              Cmfabetaf_nb_nice,
+                                              Cmfabetaf_nf,
+                                              flap_pos,
+                                              Std_Alpha,
+                                              Std_Beta);
+           else
+             CmfabetafI = uiuc_3Dinterpolation(Cmfabetaf_fArray,
+                                               Cmfabetaf_aArray,
+                                               Cmfabetaf_betaArray,
+                                               Cmfabetaf_CmArray,
+                                               Cmfabetaf_nAlphaArray,
+                                               Cmfabetaf_nbeta,
+                                               Cmfabetaf_nf,
+                                               flap_pos,
+                                               Std_Alpha,
+                                               Std_Beta);
+            Cm += CmfabetafI;
+            break;
+          }
+        case Cmfadef_flag:
+          {
+           if (Cmfadef_nice == 1)
+             CmfadefI = uiuc_3Dinterp_quick(Cmfadef_fArray,
+                                            Cmfadef_aArray_nice,
+                                            Cmfadef_deArray_nice,
+                                            Cmfadef_CmArray,
+                                            Cmfadef_na_nice,
+                                            Cmfadef_nde_nice,
+                                            Cmfadef_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            elevator);
+           else
+             CmfadefI = uiuc_3Dinterpolation(Cmfadef_fArray,
+                                             Cmfadef_aArray,
+                                             Cmfadef_deArray,
+                                             Cmfadef_CmArray,
+                                             Cmfadef_nAlphaArray,
+                                             Cmfadef_nde,
+                                             Cmfadef_nf,
+                                             flap_pos,
+                                             Std_Alpha,
+                                             elevator);
+           Cm += CmfadefI;
+            break;
+          }
+        case Cmfaqf_flag:
+          {
+           q_nondim = Q_body * cbar_2U;
+           if (Cmfaqf_nice == 1)
+             CmfaqfI = uiuc_3Dinterp_quick(Cmfaqf_fArray,
+                                           Cmfaqf_aArray_nice,
+                                           Cmfaqf_qArray_nice,
+                                           Cmfaqf_CmArray,
+                                           Cmfaqf_na_nice,
+                                           Cmfaqf_nq_nice,
+                                           Cmfaqf_nf,
+                                           flap_pos,
+                                           Std_Alpha,
+                                           q_nondim);
+           else
+             CmfaqfI = uiuc_3Dinterpolation(Cmfaqf_fArray,
+                                            Cmfaqf_aArray,
+                                            Cmfaqf_qArray,
+                                            Cmfaqf_CmArray,
+                                            Cmfaqf_nAlphaArray,
+                                            Cmfaqf_nq,
+                                            Cmfaqf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            q_nondim);
+            Cm += CmfaqfI;
+            break;
+          }
         };
     } // end Cm map