]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_coef_drag.cpp
Port over remaining Point3D usage to the more type and unit safe SG* classes.
[flightgear.git] / src / FDM / UIUCModel / uiuc_coef_drag.cpp
index 6b49c44a0d6b1264a3d6479c881d198f7fcc92f2..38cfb3192b8b0740a9a99176ba105e1a7699e741 100644 (file)
@@ -34,7 +34,7 @@
 ----------------------------------------------------------------------
 
  AUTHOR(S):    Bipin Sehgal       <bsehgal@uiuc.edu>
-               Jeff Scott         <jscott@mail.com>
+               Jeff Scott         http://www.jeffscott.net/
               Robert Deters      <rdeters@uiuc.edu>
 
 ----------------------------------------------------------------------
@@ -79,8 +79,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.
 
 **********************************************************************/
 
@@ -111,7 +110,7 @@ void uiuc_coef_drag()
                 CDo = uiuc_ice_filter(CDo_clean,kCDo);
               }
            CDo_save = CDo;
-            CD += CDo;
+            CD += CDo_save;
             break;
           }
         case CDK_flag:
@@ -120,8 +119,15 @@ void uiuc_coef_drag()
               {
                 CDK = uiuc_ice_filter(CDK_clean,kCDK);
               }
-           CDK_save = CDK * CL * CL;
-            CD += CDK * CL * CL;
+           if (b_CLK)
+             {
+               CDK_save = CDK * (CL - CLK) * (CL - CLK);
+             }
+           else
+             {
+               CDK_save = CDK * CL * CL;
+             }
+            CD += CDK_save;
             break;
           }
         case CD_a_flag:
@@ -130,8 +136,8 @@ void uiuc_coef_drag()
               {
                 CD_a = uiuc_ice_filter(CD_a_clean,kCD_a);
               }
-           CD_a_save = CD_a * Alpha;
-            CD += CD_a * Alpha;
+           CD_a_save = CD_a * Std_Alpha;
+            CD += CD_a_save;
             break;
           }
         case CD_adot_flag:
@@ -142,8 +148,8 @@ void uiuc_coef_drag()
               }
             /* CD_adot must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-           CD_adot_save = CD_adot * Alpha_dot * cbar_2U;
-            CD += CD_adot * Alpha_dot * cbar_2U;
+           CD_adot_save = CD_adot * Std_Alpha_dot * cbar_2U;
+            CD += CD_adot_save;
             break;
           }
         case CD_q_flag:
@@ -157,13 +163,13 @@ void uiuc_coef_drag()
             /* why multiply by Theta_dot instead of Q_body? 
                see note in coef_lift.cpp */
            CD_q_save = CD_q * Theta_dot * cbar_2U;
-            CD += CD_q * Theta_dot * cbar_2U;
+            CD += CD_q_save;
             break;
           }
         case CD_ih_flag:
           {
            CD_ih_save = fabs(CD_ih * ih);
-            CD += fabs(CD_ih * ih);
+            CD += CD_ih_save;
             break;
           }
         case CD_de_flag:
@@ -173,7 +179,43 @@ void uiuc_coef_drag()
                 CD_de = uiuc_ice_filter(CD_de_clean,kCD_de);
               }
            CD_de_save = fabs(CD_de * elevator);
-            CD += fabs(CD_de * elevator);
+            CD += CD_de_save;
+            break;
+          }
+        case CD_dr_flag:
+          {
+           CD_dr_save = fabs(CD_dr * rudder);
+           CD += CD_dr_save;
+            break;
+          }
+        case CD_da_flag:
+          {
+           CD_da_save = fabs(CD_da * aileron);
+            CD += CD_da_save;
+            break;
+          }
+        case CD_beta_flag:
+          {
+           CD_beta_save = fabs(CD_beta * Std_Beta);
+            CD += CD_beta_save;
+            break;
+          }
+        case CD_df_flag:
+          {
+           CD_df_save = fabs(CD_df * flap_pos);
+            CD += CD_df_save;
+            break;
+          }
+        case CD_ds_flag:
+          {
+           CD_ds_save = fabs(CD_ds * spoiler_pos);
+            CD += CD_ds_save;
+            break;
+          }
+        case CD_dg_flag:
+          {
+           CD_dg_save = fabs(CD_dg * gear_pos_norm);
+            CD += CD_dg_save;
             break;
           }
         case CDfa_flag:
@@ -181,7 +223,7 @@ void uiuc_coef_drag()
             CDfaI = uiuc_1Dinterpolation(CDfa_aArray,
                                          CDfa_CDArray,
                                          CDfa_nAlpha,
-                                         Alpha);
+                                         Std_Alpha);
             CD += CDfaI;
             break;
           }
@@ -199,7 +241,7 @@ void uiuc_coef_drag()
             CDfdfI = uiuc_1Dinterpolation(CDfdf_dfArray,
                                           CDfdf_CDArray,
                                           CDfdf_ndf,
-                                          flap);
+                                          flap_pos);
             CD += CDfdfI;
             break;
           }
@@ -210,7 +252,7 @@ void uiuc_coef_drag()
                                            CDfade_CDArray,
                                            CDfade_nAlphaArray,
                                            CDfade_nde,
-                                           Alpha,
+                                           Std_Alpha,
                                            elevator);
                   CD += CDfadeI;
                   break;
@@ -222,8 +264,8 @@ void uiuc_coef_drag()
                                            CDfadf_CDArray,
                                            CDfadf_nAlphaArray,
                                            CDfadf_ndf,
-                                           Alpha,
-                                           flap);
+                                           Std_Alpha,
+                                           flap_pos);
             CD += CDfadfI;
             break;
           }
@@ -241,7 +283,7 @@ void uiuc_coef_drag()
                   }
               }
            CXo_save = CXo;
-            CX += CXo;
+            CX += CXo_save;
             break;
           }
         case CXK_flag:
@@ -258,7 +300,7 @@ void uiuc_coef_drag()
                   }
               }
            CXK_save = CXK * CZ * CZ;
-            CX += CXK * CZ * CZ;
+            CX += CXK_save;
             break;
           }
         case CX_a_flag:
@@ -268,14 +310,14 @@ void uiuc_coef_drag()
                 CX_a = uiuc_ice_filter(CX_a_clean,kCX_a);
                 if (beta_model)
                   {
-                    CXclean_wing += CX_a_clean * Alpha;
-                    CXclean_tail += CX_a_clean * Alpha;
-                    CXiced_wing += CX_a * Alpha;
-                    CXiced_tail += CX_a * Alpha;
+                    CXclean_wing += CX_a_clean * Std_Alpha;
+                    CXclean_tail += CX_a_clean * Std_Alpha;
+                    CXiced_wing += CX_a * Std_Alpha;
+                    CXiced_tail += CX_a * Std_Alpha;
                   }
               }
-           CX_a_save = CX_a * Alpha;
-            CX += CX_a * Alpha;
+           CX_a_save = CX_a * Std_Alpha;
+            CX += CX_a_save;
             break;
           }
         case CX_a2_flag:
@@ -285,14 +327,14 @@ void uiuc_coef_drag()
                 CX_a2 = uiuc_ice_filter(CX_a2_clean,kCX_a2);
                 if (beta_model)
                   {
-                    CXclean_wing += CX_a2_clean * Alpha * Alpha;
-                    CXclean_tail += CX_a2_clean * Alpha * Alpha;
-                    CXiced_wing += CX_a2 * Alpha * Alpha;
-                    CXiced_tail += CX_a2 * Alpha * Alpha;
+                    CXclean_wing += CX_a2_clean * Std_Alpha * Std_Alpha;
+                    CXclean_tail += CX_a2_clean * Std_Alpha * Std_Alpha;
+                    CXiced_wing += CX_a2 * Std_Alpha * Std_Alpha;
+                    CXiced_tail += CX_a2 * Std_Alpha * Std_Alpha;
                   }
               }
-           CX_a2_save = CX_a2 * Alpha * Alpha;
-            CX += CX_a2 * Alpha * Alpha;
+           CX_a2_save = CX_a2 * Std_Alpha * Std_Alpha;
+            CX += CX_a2_save;
             break;
           }
         case CX_a3_flag:
@@ -302,14 +344,14 @@ void uiuc_coef_drag()
                 CX_a3 = uiuc_ice_filter(CX_a3_clean,kCX_a3);
                 if (beta_model)
                   {
-                    CXclean_wing += CX_a3_clean * Alpha * Alpha * Alpha;
-                    CXclean_tail += CX_a3_clean * Alpha * Alpha * Alpha;
-                    CXiced_wing += CX_a3 * Alpha * Alpha * Alpha;
-                    CXiced_tail += CX_a3 * Alpha * Alpha * Alpha;
+                    CXclean_wing += CX_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha;
+                    CXclean_tail += CX_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha;
+                    CXiced_wing += CX_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
+                    CXiced_tail += CX_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
                   }
               }
-           CX_a3_save = CX_a3 * Alpha * Alpha * Alpha;
-            CX += CX_a3 * Alpha * Alpha * Alpha;
+           CX_a3_save = CX_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
+            CX += CX_a3_save;
             break;
           }
         case CX_adot_flag:
@@ -319,16 +361,16 @@ void uiuc_coef_drag()
                 CX_adot = uiuc_ice_filter(CX_adot_clean,kCX_adot);
                 if (beta_model)
                   {
-                    CXclean_wing += CX_adot_clean * Alpha_dot * cbar_2U;
-                    CXclean_tail += CX_adot_clean * Alpha_dot * ch_2U;
-                    CXiced_wing += CX * Alpha_dot * cbar_2U;
-                    CXiced_tail += CX * Alpha_dot * ch_2U;
+                    CXclean_wing += CX_adot_clean * Std_Alpha_dot * cbar_2U;
+                    CXclean_tail += CX_adot_clean * Std_Alpha_dot * ch_2U;
+                    CXiced_wing += CX * Std_Alpha_dot * cbar_2U;
+                    CXiced_tail += CX * Std_Alpha_dot * ch_2U;
                   }
               }
             /* CX_adot must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-           CX_adot_save = CX_adot * Alpha_dot * cbar_2U;
-            CX += CX_adot * Alpha_dot * cbar_2U;
+           CX_adot_save = CX_adot * Std_Alpha_dot * cbar_2U;
+            CX += CX_adot_save;
             break;
           }
         case CX_q_flag:
@@ -347,7 +389,7 @@ void uiuc_coef_drag()
             /* CX_q must be mulitplied by cbar/2U 
                (see Roskam Control book, Part 1, pg. 147) */
            CX_q_save = CX_q * Q_body * cbar_2U;
-            CX += CX_q * Q_body * cbar_2U;
+            CX += CX_q_save;
             break;
           }
         case CX_de_flag:
@@ -364,7 +406,7 @@ void uiuc_coef_drag()
                   }
               }
            CX_de_save = CX_de * elevator;
-            CX += CX_de * elevator;
+            CX += CX_de_save;
             break;
           }
         case CX_dr_flag:
@@ -381,7 +423,7 @@ void uiuc_coef_drag()
                   }
               }
            CX_dr_save = CX_dr * rudder;
-            CX += CX_dr * rudder;
+            CX += CX_dr_save;
             break;
           }
         case CX_df_flag:
@@ -391,14 +433,14 @@ void uiuc_coef_drag()
                 CX_df = uiuc_ice_filter(CX_df_clean,kCX_df);
                 if (beta_model)
                   {
-                    CXclean_wing += CX_df_clean * flap;
-                    CXclean_tail += CX_df_clean * flap;
-                    CXiced_wing += CX * flap;
-                    CXiced_tail += CX * flap;
+                    CXclean_wing += CX_df_clean * flap_pos;
+                    CXclean_tail += CX_df_clean * flap_pos;
+                    CXiced_wing += CX * flap_pos;
+                    CXiced_tail += CX * flap_pos;
                   }
               }
-           CX_df_save = CX_df * flap;
-            CX += CX_df * flap;
+           CX_df_save = CX_df * flap_pos;
+            CX += CX_df_save;
             break;
           }
         case CX_adf_flag:
@@ -408,19 +450,19 @@ void uiuc_coef_drag()
                 CX_adf = uiuc_ice_filter(CX_adf_clean,kCX_adf);
                 if (beta_model)
                   {
-                    CXclean_wing += CX_adf_clean * Alpha * flap;
-                    CXclean_tail += CX_adf_clean * Alpha * flap;
-                    CXiced_wing += CX_adf * Alpha * flap;
-                    CXiced_tail += CX_adf * Alpha * flap;
+                    CXclean_wing += CX_adf_clean * Std_Alpha * flap_pos;
+                    CXclean_tail += CX_adf_clean * Std_Alpha * flap_pos;
+                    CXiced_wing += CX_adf * Std_Alpha * flap_pos;
+                    CXiced_tail += CX_adf * Std_Alpha * flap_pos;
                   }
               }
-           CX_adf_save = CX_adf * Alpha * flap;
-            CX += CX_adf * Alpha * flap;
+           CX_adf_save = CX_adf * Std_Alpha * flap_pos;
+            CX += CX_adf_save;
             break;
           }
         case CXfabetaf_flag:
           {
-           if (CXfabetaf_nice == 1)
+           if (CXfabetaf_nice == 1) {
              CXfabetafI = uiuc_3Dinterp_quick(CXfabetaf_fArray,
                                               CXfabetaf_aArray_nice,
                                               CXfabetaf_bArray_nice,
@@ -429,9 +471,21 @@ void uiuc_coef_drag()
                                               CXfabetaf_nb_nice,
                                               CXfabetaf_nf,
                                               flap_pos,
-                                              Alpha,
-                                              Beta);
-           else
+                                              Std_Alpha,
+                                              Std_Beta);
+             // temp until Jim's code works
+             //CXo = uiuc_3Dinterp_quick(CXfabetaf_fArray,
+             //                         CXfabetaf_aArray_nice,
+             //                         CXfabetaf_bArray_nice,
+             //                         CXfabetaf_CXArray,
+             //                         CXfabetaf_na_nice,
+             //                         CXfabetaf_nb_nice,
+             //                         CXfabetaf_nf,
+             //                         flap_pos,
+             //                         0.0,
+             //                         Std_Beta); 
+           }
+           else {
              CXfabetafI = uiuc_3Dinterpolation(CXfabetaf_fArray,
                                                CXfabetaf_aArray,
                                                CXfabetaf_betaArray,
@@ -440,8 +494,20 @@ void uiuc_coef_drag()
                                                CXfabetaf_nbeta,
                                                CXfabetaf_nf,
                                                flap_pos,
-                                               Alpha,
-                                               Beta);
+                                               Std_Alpha,
+                                               Std_Beta);
+             // temp until Jim's code works
+             //CXo = uiuc_3Dinterpolation(CXfabetaf_fArray,
+             //                          CXfabetaf_aArray,
+             //                          CXfabetaf_betaArray,
+             //                          CXfabetaf_CXArray,
+             //                          CXfabetaf_nAlphaArray,
+             //                          CXfabetaf_nbeta,
+             //                          CXfabetaf_nf,
+             //                          flap_pos,
+             //                          0.0,
+             //                          Std_Beta); 
+           }
            CX += CXfabetafI;
             break;
           }
@@ -456,7 +522,7 @@ void uiuc_coef_drag()
                                             CXfadef_nde_nice,
                                             CXfadef_nf,
                                             flap_pos,
-                                            Alpha,
+                                            Std_Alpha,
                                             elevator);
            else
              CXfadefI = uiuc_3Dinterpolation(CXfadef_fArray,
@@ -467,7 +533,7 @@ void uiuc_coef_drag()
                                              CXfadef_nde,
                                              CXfadef_nf,
                                              flap_pos,
-                                             Alpha,
+                                             Std_Alpha,
                                              elevator);
             CX += CXfadefI;
             break;
@@ -484,7 +550,7 @@ void uiuc_coef_drag()
                                            CXfaqf_nq_nice,
                                            CXfaqf_nf,
                                            flap_pos,
-                                           Alpha,
+                                           Std_Alpha,
                                            q_nondim);
            else
              CXfaqfI = uiuc_3Dinterpolation(CXfaqf_fArray,
@@ -495,7 +561,7 @@ void uiuc_coef_drag()
                                             CXfaqf_nq,
                                             CXfaqf_nf,
                                             flap_pos,
-                                            Alpha,
+                                            Std_Alpha,
                                             q_nondim);
             CX += CXfaqfI;
             break;