]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_coef_lift.cpp
Replace round by simgear::SGMiscd::roundToInt()
[flightgear.git] / src / FDM / UIUCModel / uiuc_coef_lift.cpp
index 036e54f304d6e51af20dee2e1d6933c8e0808645..c7de49eecf030b8bf93c45396c18d1860e24d1f5 100644 (file)
 ----------------------------------------------------------------------
 
  HISTORY:      04/15/2000   initial release
+               06/18/2001   (RD) Added CZfa
+               10/25/2001   (RD) Added new variables needed for the non-
+                           linear Twin Otter model at zero flaps
+                           (CZfxxf0)
+              11/12/2001   (RD) Added new variables needed for the non-
+                           linear Twin Otter model with flaps
+                           (CZfxxf).  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 +63,8 @@
  CALLS TO:     uiuc_1Dinterpolation
                uiuc_2Dinterpolation
                uiuc_ice_filter
+              uiuc_3Dinterpolation
+              uiuc_3Dinterp_quick
 
 ----------------------------------------------------------------------
 
 
  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.
 
 **********************************************************************/
 
 #include "uiuc_coef_lift.h"
 
-
 void uiuc_coef_lift()
 {
   string linetoken1;
   string linetoken2;
   stack command_list;
-  
+
+  double q_nondim;
+
   command_list = aeroLiftParts -> getCommands();
   
   for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
@@ -102,7 +117,8 @@ void uiuc_coef_lift()
                     CLiced_tail += CLo;
                   }
               }
-            CL += CLo;
+           CLo_save = CLo;
+            CL += CLo_save;
             break;
           }
         case CL_a_flag:
@@ -112,13 +128,14 @@ void uiuc_coef_lift()
                 CL_a = uiuc_ice_filter(CL_a_clean,kCL_a);
                 if (beta_model)
                   {
-                    CLclean_wing += CL_a_clean * Alpha;
-                    CLclean_tail += CL_a_clean * Alpha;
-                    CLiced_wing += CL_a * Alpha;
-                    CLiced_tail += CL_a * Alpha;
+                    CLclean_wing += CL_a_clean * Std_Alpha;
+                    CLclean_tail += CL_a_clean * Std_Alpha;
+                    CLiced_wing += CL_a * Std_Alpha;
+                    CLiced_tail += CL_a * Std_Alpha;
                   }
               }
-            CL += CL_a * Alpha;
+           CL_a_save = CL_a * Std_Alpha;
+            CL += CL_a_save;
             break;
           }
         case CL_adot_flag:
@@ -128,15 +145,16 @@ void uiuc_coef_lift()
                 CL_adot = uiuc_ice_filter(CL_adot_clean,kCL_adot);
                 if (beta_model)
                   {
-                    CLclean_wing += CL_adot_clean * Alpha_dot * cbar_2U;
-                    CLclean_tail += CL_adot_clean * Alpha_dot * ch_2U;
-                    CLiced_wing += CL_adot * Alpha_dot * cbar_2U;
-                    CLiced_tail += CL_adot * Alpha_dot * ch_2U;
+                    CLclean_wing += CL_adot_clean * Std_Alpha_dot * cbar_2U;
+                    CLclean_tail += CL_adot_clean * Std_Alpha_dot * ch_2U;
+                    CLiced_wing += CL_adot * Std_Alpha_dot * cbar_2U;
+                    CLiced_tail += CL_adot * Std_Alpha_dot * ch_2U;
                   }
               }
             /* CL_adot must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            CL += CL_adot * Alpha_dot * cbar_2U;
+           CL_adot_save = CL_adot * Std_Alpha_dot * cbar_2U;
+            CL += CL_adot_save;
             break;
           }
         case CL_q_flag:
@@ -157,12 +175,14 @@ void uiuc_coef_lift()
             /* why multiply by Theta_dot instead of Q_body?
                that is what is done in c172_aero.c; assume it 
                has something to do with axes systems */
-            CL += CL_q * Theta_dot * cbar_2U;
+           CL_q_save = CL_q * Theta_dot * cbar_2U;
+            CL += CL_q_save;
             break;
           }
         case CL_ih_flag:
           {
-            CL += CL_ih * ih;
+           CL_ih_save = CL_ih * ih;
+            CL += CL_ih_save;
             break;
           }
         case CL_de_flag:
@@ -178,7 +198,26 @@ void uiuc_coef_lift()
                     CLiced_tail += CL_de * elevator;
                   }
               }
-            CL += CL_de * elevator;
+           CL_de_save = CL_de * elevator;
+            CL += CL_de_save;
+            break;
+          }
+        case CL_df_flag:
+          {
+           CL_df_save = CL_df * flap_pos;
+            CL += CL_df_save;
+            break;
+          }
+        case CL_ds_flag:
+          {
+           CL_ds_save = CL_ds * spoiler_pos;
+            CL += CL_ds_save;
+            break;
+          }
+        case CL_dg_flag:
+          {
+           CL_dg_save = CL_dg * gear_pos_norm;
+            CL += CL_dg_save;
             break;
           }
         case CLfa_flag:
@@ -186,7 +225,7 @@ void uiuc_coef_lift()
             CLfaI = uiuc_1Dinterpolation(CLfa_aArray,
                                          CLfa_CLArray,
                                          CLfa_nAlpha,
-                                         Alpha);
+                                         Std_Alpha);
             CL += CLfaI;
             break;
           }
@@ -197,7 +236,7 @@ void uiuc_coef_lift()
                                            CLfade_CLArray,
                                            CLfade_nAlphaArray,
                                            CLfade_nde,
-                                           Alpha,
+                                           Std_Alpha,
                                            elevator);
             CL += CLfadeI;
             break;
@@ -207,7 +246,7 @@ void uiuc_coef_lift()
             CLfdfI = uiuc_1Dinterpolation(CLfdf_dfArray,
                                           CLfdf_CLArray,
                                           CLfdf_ndf,
-                                          flap);
+                                          flap_pos);
             CL += CLfdfI;
             break;
           }
@@ -218,8 +257,8 @@ void uiuc_coef_lift()
                                            CLfadf_CLArray,
                                            CLfadf_nAlphaArray,
                                            CLfadf_ndf,
-                                           Alpha,
-                                           flap);
+                                           Std_Alpha,
+                                           flap_pos);
             CL += CLfadfI;
             break;
           }
@@ -236,7 +275,8 @@ void uiuc_coef_lift()
                     CZiced_tail += CZo;
                   }
               }
-            CZ += CZo;
+           CZo_save = CZo;
+            CZ += CZo_save;
             break;
           }
         case CZ_a_flag:
@@ -246,13 +286,14 @@ void uiuc_coef_lift()
                 CZ_a = uiuc_ice_filter(CZ_a_clean,kCZ_a);
                 if (beta_model)
                   {
-                    CZclean_wing += CZ_a_clean * Alpha;
-                    CZclean_tail += CZ_a_clean * Alpha;
-                    CZiced_wing += CZ_a * Alpha;
-                    CZiced_tail += CZ_a * Alpha;
+                    CZclean_wing += CZ_a_clean * Std_Alpha;
+                    CZclean_tail += CZ_a_clean * Std_Alpha;
+                    CZiced_wing += CZ_a * Std_Alpha;
+                    CZiced_tail += CZ_a * Std_Alpha;
                   }
               }
-            CZ += CZ_a * Alpha;
+           CZ_a_save = CZ_a * Std_Alpha;
+            CZ += CZ_a_save;
             break;
           }
         case CZ_a2_flag:
@@ -262,13 +303,14 @@ void uiuc_coef_lift()
                 CZ_a2 = uiuc_ice_filter(CZ_a2_clean,kCZ_a2);
                 if (beta_model)
                   {
-                    CZclean_wing += CZ_a2_clean * Alpha * Alpha;
-                    CZclean_tail += CZ_a2_clean * Alpha * Alpha;
-                    CZiced_wing += CZ_a2 * Alpha * Alpha;
-                    CZiced_tail += CZ_a2 * Alpha * Alpha;
+                    CZclean_wing += CZ_a2_clean * Std_Alpha * Std_Alpha;
+                    CZclean_tail += CZ_a2_clean * Std_Alpha * Std_Alpha;
+                    CZiced_wing += CZ_a2 * Std_Alpha * Std_Alpha;
+                    CZiced_tail += CZ_a2 * Std_Alpha * Std_Alpha;
                   }
               }
-            CZ += CZ_a2 * Alpha * Alpha;
+           CZ_a2_save = CZ_a2 * Std_Alpha * Std_Alpha;
+            CZ += CZ_a2_save;
             break;
           }
         case CZ_a3_flag:
@@ -278,13 +320,14 @@ void uiuc_coef_lift()
                 CZ_a3 = uiuc_ice_filter(CZ_a3_clean,kCZ_a3);
                 if (beta_model)
                   {
-                    CZclean_wing += CZ_a3_clean * Alpha * Alpha * Alpha;
-                    CZclean_tail += CZ_a3_clean * Alpha * Alpha * Alpha;
-                    CZiced_wing += CZ_a3 * Alpha * Alpha * Alpha;
-                    CZiced_tail += CZ_a3 * Alpha * Alpha * Alpha;
+                    CZclean_wing += CZ_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha;
+                    CZclean_tail += CZ_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha;
+                    CZiced_wing += CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
+                    CZiced_tail += CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
                   }
               }
-            CZ += CZ_a3 * Alpha * Alpha * Alpha;
+           CZ_a3_save = CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
+            CZ += CZ_a3_save;
             break;
           }
         case CZ_adot_flag:
@@ -294,15 +337,16 @@ void uiuc_coef_lift()
                 CZ_adot = uiuc_ice_filter(CZ_adot_clean,kCZ_adot);
                 if (beta_model)
                   {
-                    CZclean_wing += CZ_adot_clean * Alpha_dot * cbar_2U;
-                    CZclean_tail += CZ_adot_clean * Alpha_dot * ch_2U;
-                    CZiced_wing += CZ_adot * Alpha_dot * cbar_2U;
-                    CZiced_tail += CZ_adot * Alpha_dot * ch_2U;
+                    CZclean_wing += CZ_adot_clean * Std_Alpha_dot * cbar_2U;
+                    CZclean_tail += CZ_adot_clean * Std_Alpha_dot * ch_2U;
+                    CZiced_wing += CZ_adot * Std_Alpha_dot * cbar_2U;
+                    CZiced_tail += CZ_adot * Std_Alpha_dot * ch_2U;
                   }
               }
             /* CZ_adot must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            CZ += CZ_adot * Alpha_dot * cbar_2U;
+           CZ_adot_save = CZ_adot * Std_Alpha_dot * cbar_2U;
+            CZ += CZ_adot_save;
             break;
           }
         case CZ_q_flag:
@@ -320,7 +364,8 @@ void uiuc_coef_lift()
               }
             /* CZ_q must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            CZ += CZ_q * Q_body * cbar_2U;
+           CZ_q_save = CZ_q * Q_body * cbar_2U;
+            CZ += CZ_q_save;
             break;
           }
         case CZ_de_flag:
@@ -336,7 +381,8 @@ void uiuc_coef_lift()
                     CZiced_tail += CZ_de * elevator;
                   }
               }
-            CZ += CZ_de * elevator;
+           CZ_de_save = CZ_de * elevator;
+            CZ += CZ_de_save;
             break;
           }
         case CZ_deb2_flag:
@@ -346,13 +392,14 @@ void uiuc_coef_lift()
                 CZ_deb2 = uiuc_ice_filter(CZ_deb2_clean,kCZ_deb2);
                 if (beta_model)
                   {
-                    CZclean_wing += CZ_deb2_clean * elevator * Beta * Beta;
-                    CZclean_tail += CZ_deb2_clean * elevator * Beta * Beta;
-                    CZiced_wing += CZ_deb2 * elevator * Beta * Beta;
-                    CZiced_tail += CZ_deb2 * elevator * Beta * Beta;
+                    CZclean_wing += CZ_deb2_clean * elevator * Std_Beta * Std_Beta;
+                    CZclean_tail += CZ_deb2_clean * elevator * Std_Beta * Std_Beta;
+                    CZiced_wing += CZ_deb2 * elevator * Std_Beta * Std_Beta;
+                    CZiced_tail += CZ_deb2 * elevator * Std_Beta * Std_Beta;
                   }
               }
-            CZ += CZ_deb2 * elevator * Beta * Beta;
+           CZ_deb2_save = CZ_deb2 * elevator * Std_Beta * Std_Beta;
+            CZ += CZ_deb2_save;
             break;
           }
         case CZ_df_flag:
@@ -362,13 +409,14 @@ void uiuc_coef_lift()
                 CZ_df = uiuc_ice_filter(CZ_df_clean,kCZ_df);
                 if (beta_model)
                   {
-                    CZclean_wing += CZ_df_clean * flap;
-                    CZclean_tail += CZ_df_clean * flap;
-                    CZiced_wing += CZ_df * flap;
-                    CZiced_tail += CZ_df * flap;
+                    CZclean_wing += CZ_df_clean * flap_pos;
+                    CZclean_tail += CZ_df_clean * flap_pos;
+                    CZiced_wing += CZ_df * flap_pos;
+                    CZiced_tail += CZ_df * flap_pos;
                   }
               }
-            CZ += CZ_df * flap;
+           CZ_df_save = CZ_df * flap_pos;
+            CZ += CZ_df_save;
             break;
           }
         case CZ_adf_flag:
@@ -378,13 +426,105 @@ void uiuc_coef_lift()
                 CZ_adf = uiuc_ice_filter(CZ_adf_clean,kCZ_adf);
                 if (beta_model)
                   {
-                    CZclean_wing += CZ_adf_clean * Alpha * flap;
-                    CZclean_tail += CZ_adf_clean * Alpha * flap;
-                    CZiced_wing += CZ_adf * Alpha * flap;
-                    CZiced_tail += CZ_adf * Alpha * flap;
+                    CZclean_wing += CZ_adf_clean * Std_Alpha * flap_pos;
+                    CZclean_tail += CZ_adf_clean * Std_Alpha * flap_pos;
+                    CZiced_wing += CZ_adf * Std_Alpha * flap_pos;
+                    CZiced_tail += CZ_adf * Std_Alpha * flap_pos;
                   }
               }
-            CZ += CZ_adf * Alpha * flap;
+           CZ_adf_save = CZ_adf * Std_Alpha * flap_pos;
+            CZ += CZ_adf_save;
+            break;
+          }
+        case CZfa_flag:
+          {
+            CZfaI = uiuc_1Dinterpolation(CZfa_aArray,
+                                         CZfa_CZArray,
+                                         CZfa_nAlpha,
+                                         Std_Alpha);
+            CZ += CZfaI;
+            break;
+          }
+        case CZfabetaf_flag:
+          {
+           if (CZfabetaf_nice == 1)
+             CZfabetafI = uiuc_3Dinterp_quick(CZfabetaf_fArray,
+                                              CZfabetaf_aArray_nice,
+                                              CZfabetaf_bArray_nice,
+                                              CZfabetaf_CZArray,
+                                              CZfabetaf_na_nice,
+                                              CZfabetaf_nb_nice,
+                                              CZfabetaf_nf,
+                                              flap_pos,
+                                              Std_Alpha,
+                                              Std_Beta);
+           else
+             CZfabetafI = uiuc_3Dinterpolation(CZfabetaf_fArray,
+                                               CZfabetaf_aArray,
+                                               CZfabetaf_betaArray,
+                                               CZfabetaf_CZArray,
+                                               CZfabetaf_nAlphaArray,
+                                               CZfabetaf_nbeta,
+                                               CZfabetaf_nf,
+                                               flap_pos,
+                                               Std_Alpha,
+                                               Std_Beta);
+            CZ += CZfabetafI;
+            break;
+          }
+        case CZfadef_flag:
+          {
+           if (CZfadef_nice == 1)
+             CZfadefI = uiuc_3Dinterp_quick(CZfadef_fArray,
+                                            CZfadef_aArray_nice,
+                                            CZfadef_deArray_nice,
+                                            CZfadef_CZArray,
+                                            CZfadef_na_nice,
+                                            CZfadef_nde_nice,
+                                            CZfadef_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            elevator);
+           else
+             CZfadefI = uiuc_3Dinterpolation(CZfadef_fArray,
+                                             CZfadef_aArray,
+                                             CZfadef_deArray,
+                                             CZfadef_CZArray,
+                                             CZfadef_nAlphaArray,
+                                             CZfadef_nde,
+                                             CZfadef_nf,
+                                             flap_pos,
+                                             Std_Alpha,
+                                             elevator);
+            CZ += CZfadefI;
+            break;
+          }
+        case CZfaqf_flag:
+          {
+           q_nondim = Q_body * cbar_2U;
+           if (CZfaqf_nice == 1)
+             CZfaqfI = uiuc_3Dinterp_quick(CZfaqf_fArray,
+                                           CZfaqf_aArray_nice,
+                                           CZfaqf_qArray_nice,
+                                           CZfaqf_CZArray,
+                                           CZfaqf_na_nice,
+                                           CZfaqf_nq_nice,
+                                           CZfaqf_nf,
+                                           flap_pos,
+                                           Std_Alpha,
+                                           q_nondim);
+           else
+             CZfaqfI = uiuc_3Dinterpolation(CZfaqf_fArray,
+                                            CZfaqf_aArray,
+                                            CZfaqf_qArray,
+                                            CZfaqf_CZArray,
+                                            CZfaqf_nAlphaArray,
+                                            CZfaqf_nq,
+                                            CZfaqf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            q_nondim);
+            CZ += CZfaqfI;
             break;
           }
         };