]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_coef_yaw.cpp
Port over remaining Point3D usage to the more type and unit safe SG* classes.
[flightgear.git] / src / FDM / UIUCModel / uiuc_coef_yaw.cpp
index 5bef09adbc7c18f2e71217b95812cbf4c632b114..e8430b2eddf9acf82c643e8271a9850ab16e8706 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
+                           (Cnfxxf0)
+              11/12/2001   (RD) Added new variables needed for the non-
+                           linear Twin Otter model with flaps
+                           (Cnfxxf).  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>
 
 ----------------------------------------------------------------------
 
@@ -51,6 +63,8 @@
  CALLS TO:     uiuc_1Dinterpolation
                uiuc_2Dinterpolation
                uiuc_ice_filter
+              uiuc_3Dinterpolation
+              uiuc_3Dinterp_quick
 
 ----------------------------------------------------------------------
 
@@ -67,8 +81,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.
 
 **********************************************************************/
 
@@ -80,7 +93,10 @@ void uiuc_coef_yaw()
   string linetoken1;
   string linetoken2;
   stack command_list;
-  
+
+  double p_nondim;
+  double r_nondim;
+
   command_list = aeroYawParts -> getCommands();
   
   for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
@@ -96,7 +112,8 @@ void uiuc_coef_yaw()
               {
                 Cno = uiuc_ice_filter(Cno_clean,kCno);
               }
-            Cn += Cno;
+           Cno_save = Cno;
+            Cn += Cno_save;
             break;
           }
         case Cn_beta_flag:
@@ -105,7 +122,15 @@ void uiuc_coef_yaw()
               {
                 Cn_beta = uiuc_ice_filter(Cn_beta_clean,kCn_beta);
               }
-            Cn += Cn_beta * Beta;
+           Cn_beta_save = Cn_beta * Std_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:
@@ -116,7 +141,15 @@ void uiuc_coef_yaw()
               }
             /* Cn_p must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            Cn += Cn_p * P_body * b_2U;
+           Cn_p_save = 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:
@@ -127,7 +160,15 @@ void uiuc_coef_yaw()
               }
             /* Cn_r must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            Cn += Cn_r * R_body * b_2U;
+           Cn_r_save = 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:
@@ -136,7 +177,8 @@ void uiuc_coef_yaw()
               {
                 Cn_da = uiuc_ice_filter(Cn_da_clean,kCn_da);
               }
-            Cn += Cn_da * aileron;
+           Cn_da_save = Cn_da * aileron;
+            Cn += Cn_da_save;
             break;
           }
         case Cn_dr_flag:
@@ -145,7 +187,15 @@ void uiuc_coef_yaw()
               {
                 Cn_dr = uiuc_ice_filter(Cn_dr_clean,kCn_dr);
               }
-            Cn += Cn_dr * rudder;
+           Cn_dr_save = 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:
@@ -154,7 +204,8 @@ void uiuc_coef_yaw()
               {
                 Cn_q = uiuc_ice_filter(Cn_q_clean,kCn_q);
               }
-            Cn += Cn_q * Q_body * cbar_2U;
+           Cn_q_save = Cn_q * Q_body * cbar_2U;
+            Cn += Cn_q_save;
             break;
           }
         case Cn_b3_flag:
@@ -163,7 +214,8 @@ void uiuc_coef_yaw()
               {
                 Cn_b3 = uiuc_ice_filter(Cn_b3_clean,kCn_b3);
               }
-            Cn += Cn_b3 * Beta * Beta * Beta;
+           Cn_b3_save = Cn_b3 * Std_Beta * Std_Beta * Std_Beta;
+            Cn += Cn_b3_save;
             break;
           }
         case Cnfada_flag:
@@ -173,7 +225,7 @@ void uiuc_coef_yaw()
                                            Cnfada_CnArray,
                                            Cnfada_nAlphaArray,
                                            Cnfada_nda,
-                                           Alpha,
+                                           Std_Alpha,
                                            aileron);
             Cn += CnfadaI;
             break;
@@ -185,11 +237,148 @@ void uiuc_coef_yaw()
                                               Cnfbetadr_CnArray,
                                               Cnfbetadr_nBetaArray,
                                               Cnfbetadr_ndr,
-                                              Beta,
+                                              Std_Beta,
                                               rudder);
             Cn += CnfbetadrI;
             break;
           }
+        case Cnfabetaf_flag:
+          {
+           if (Cnfabetaf_nice == 1)
+             CnfabetafI = uiuc_3Dinterp_quick(Cnfabetaf_fArray,
+                                              Cnfabetaf_aArray_nice,
+                                              Cnfabetaf_bArray_nice,
+                                              Cnfabetaf_CnArray,
+                                              Cnfabetaf_na_nice,
+                                              Cnfabetaf_nb_nice,
+                                              Cnfabetaf_nf,
+                                              flap_pos,
+                                              Std_Alpha,
+                                              Std_Beta);
+           else
+             CnfabetafI = uiuc_3Dinterpolation(Cnfabetaf_fArray,
+                                               Cnfabetaf_aArray,
+                                               Cnfabetaf_betaArray,
+                                               Cnfabetaf_CnArray,
+                                               Cnfabetaf_nAlphaArray,
+                                               Cnfabetaf_nbeta,
+                                               Cnfabetaf_nf,
+                                               flap_pos,
+                                               Std_Alpha,
+                                               Std_Beta);
+            Cn += CnfabetafI;
+            break;
+          }
+        case Cnfadaf_flag:
+          {
+           if (Cnfadaf_nice == 1)
+             CnfadafI = uiuc_3Dinterp_quick(Cnfadaf_fArray,
+                                            Cnfadaf_aArray_nice,
+                                            Cnfadaf_daArray_nice,
+                                            Cnfadaf_CnArray,
+                                            Cnfadaf_na_nice,
+                                            Cnfadaf_nda_nice,
+                                            Cnfadaf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            aileron);
+           else
+             CnfadafI = uiuc_3Dinterpolation(Cnfadaf_fArray,
+                                             Cnfadaf_aArray,
+                                             Cnfadaf_daArray,
+                                             Cnfadaf_CnArray,
+                                             Cnfadaf_nAlphaArray,
+                                             Cnfadaf_nda,
+                                             Cnfadaf_nf,
+                                             flap_pos,
+                                             Std_Alpha,
+                                             aileron);
+            Cn += CnfadafI;
+            break;
+          }
+        case Cnfadrf_flag:
+          {
+           if (Cnfadrf_nice == 1)
+             CnfadrfI = uiuc_3Dinterp_quick(Cnfadrf_fArray,
+                                            Cnfadrf_aArray_nice,
+                                            Cnfadrf_drArray_nice,
+                                            Cnfadrf_CnArray,
+                                            Cnfadrf_na_nice,
+                                            Cnfadrf_ndr_nice,
+                                            Cnfadrf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            rudder);
+           else
+             CnfadrfI = uiuc_3Dinterpolation(Cnfadrf_fArray,
+                                             Cnfadrf_aArray,
+                                             Cnfadrf_drArray,
+                                             Cnfadrf_CnArray,
+                                             Cnfadrf_nAlphaArray,
+                                             Cnfadrf_ndr,
+                                             Cnfadrf_nf,
+                                             flap_pos,
+                                             Std_Alpha,
+                                             rudder);
+            Cn += CnfadrfI;
+            break;
+          }
+        case Cnfapf_flag:
+          {
+           p_nondim = P_body * b_2U;
+           if (Cnfapf_nice == 1)
+             CnfapfI = uiuc_3Dinterp_quick(Cnfapf_fArray,
+                                           Cnfapf_aArray_nice,
+                                           Cnfapf_pArray_nice,
+                                           Cnfapf_CnArray,
+                                           Cnfapf_na_nice,
+                                           Cnfapf_np_nice,
+                                           Cnfapf_nf,
+                                           flap_pos,
+                                           Std_Alpha,
+                                           p_nondim);
+           else
+             CnfapfI = uiuc_3Dinterpolation(Cnfapf_fArray,
+                                            Cnfapf_aArray,
+                                            Cnfapf_pArray,
+                                            Cnfapf_CnArray,
+                                            Cnfapf_nAlphaArray,
+                                            Cnfapf_np,
+                                            Cnfapf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            p_nondim);
+            Cn += CnfapfI;
+            break;
+          }
+        case Cnfarf_flag:
+          {
+           r_nondim = R_body * b_2U;
+           if (Cnfarf_nice == 1)
+             CnfarfI = uiuc_3Dinterp_quick(Cnfarf_fArray,
+                                           Cnfarf_aArray_nice,
+                                           Cnfarf_rArray_nice,
+                                           Cnfarf_CnArray,
+                                           Cnfarf_na_nice,
+                                           Cnfarf_nr_nice,
+                                           Cnfarf_nf,
+                                           flap_pos,
+                                           Std_Alpha,
+                                           r_nondim);
+           else
+             CnfarfI = uiuc_3Dinterpolation(Cnfarf_fArray,
+                                            Cnfarf_aArray,
+                                            Cnfarf_rArray,
+                                            Cnfarf_CnArray,
+                                            Cnfarf_nAlphaArray,
+                                            Cnfarf_nr,
+                                            Cnfarf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            r_nondim);
+            Cn += CnfarfI;
+            break;
+          }
         };
     } // end Cn map