]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_coef_sideforce.cpp
Fix for bug 1304 - crash loading XML route
[flightgear.git] / src / FDM / UIUCModel / uiuc_coef_sideforce.cpp
index e0e39637b415c2c0c7cc47243223a1e794bf6b8d..b0c76b4617a50ab36f025cdba311c520dfcdedcf 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
+                           (CYfxxf0)
+              11/12/2001   (RD) Added new variables needed for the non-
+                           linear Twin Otter model with flaps
+                           (CYfxxf).  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_sideforce()
   string linetoken1;
   string linetoken2;
   stack command_list;
-  
+
+  double p_nondim;
+  double r_nondim;
+
   command_list = aeroSideforceParts -> getCommands();
   
   for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
@@ -96,7 +112,8 @@ void uiuc_coef_sideforce()
               {
                 CYo = uiuc_ice_filter(CYo_clean,kCYo);
               }
-            CY += CYo;
+           CYo_save = CYo;
+            CY += CYo_save;
             break;
           }
         case CY_beta_flag:
@@ -105,7 +122,15 @@ void uiuc_coef_sideforce()
               {
                 CY_beta = uiuc_ice_filter(CY_beta_clean,kCY_beta);
               }
-            CY += CY_beta * Beta;
+           CY_beta_save = CY_beta * Std_Beta;
+           if (eta_q_CY_beta_fac)
+             {
+               CY += CY_beta_save * eta_q_CY_beta_fac;
+             }
+           else
+             {
+               CY += CY_beta_save;
+             }
             break;
           }
         case CY_p_flag:
@@ -116,7 +141,15 @@ void uiuc_coef_sideforce()
               }
             /* CY_p must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            CY += CY_p * P_body * b_2U;
+           CY_p_save = CY_p * P_body * b_2U;
+           if (eta_q_CY_p_fac)
+             {
+               CY += CY_p_save * eta_q_CY_p_fac;
+             }
+           else
+             {
+               CY += CY_p_save;
+             }
             break;
           }
         case CY_r_flag:
@@ -127,7 +160,15 @@ void uiuc_coef_sideforce()
               }
             /* CY_r must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            CY += CY_r * R_body * b_2U;
+           CY_r_save = CY_r * R_body * b_2U;
+           if (eta_q_CY_r_fac)
+             {
+               CY += CY_r_save * eta_q_CY_r_fac;
+             }
+           else
+             {
+               CY += CY_r_save;
+             }
             break;
           }
         case CY_da_flag:
@@ -136,7 +177,8 @@ void uiuc_coef_sideforce()
               {
                 CY_da = uiuc_ice_filter(CY_da_clean,kCY_da);
               }
-            CY += CY_da * aileron;
+           CY_da_save = CY_da * aileron;
+            CY += CY_da_save;
             break;
           }
         case CY_dr_flag:
@@ -145,7 +187,15 @@ void uiuc_coef_sideforce()
               {
                 CY_dr = uiuc_ice_filter(CY_dr_clean,kCY_dr);
               }
-            CY += CY_dr * rudder;
+           CY_dr_save = CY_dr * rudder;
+           if (eta_q_CY_dr_fac)
+             {
+               CY += CY_dr_save * eta_q_CY_dr_fac;
+             }
+           else
+             {
+               CY += CY_dr_save;
+             }
             break;
           }
         case CY_dra_flag:
@@ -154,7 +204,8 @@ void uiuc_coef_sideforce()
               {
                 CY_dra = uiuc_ice_filter(CY_dra_clean,kCY_dra);
               }
-            CY += CY_dra * rudder * Alpha;
+           CY_dra_save = CY_dra * rudder * Std_Alpha;
+            CY += CY_dra_save;
             break;
           }
         case CY_bdot_flag:
@@ -163,7 +214,8 @@ void uiuc_coef_sideforce()
               {
                 CY_bdot = uiuc_ice_filter(CY_bdot_clean,kCY_bdot);
               }
-            CY += CY_bdot * Beta_dot * b_2U;
+           CY_bdot_save = CY_bdot * Std_Beta_dot * b_2U;
+            CY += CY_bdot_save;
             break;
           }
         case CYfada_flag:
@@ -173,7 +225,7 @@ void uiuc_coef_sideforce()
                                            CYfada_CYArray,
                                            CYfada_nAlphaArray,
                                            CYfada_nda,
-                                           Alpha,
+                                           Std_Alpha,
                                            aileron);
             CY += CYfadaI;
             break;
@@ -185,12 +237,149 @@ void uiuc_coef_sideforce()
                                               CYfbetadr_CYArray,
                                               CYfbetadr_nBetaArray,
                                               CYfbetadr_ndr,
-                                              Beta,
+                                              Std_Beta,
                                               rudder);
             CY += CYfbetadrI;
             break;
           }
-        };
+        case CYfabetaf_flag:
+          {
+           if (CYfabetaf_nice == 1)
+             CYfabetafI = uiuc_3Dinterp_quick(CYfabetaf_fArray,
+                                              CYfabetaf_aArray_nice,
+                                              CYfabetaf_bArray_nice,
+                                              CYfabetaf_CYArray,
+                                              CYfabetaf_na_nice,
+                                              CYfabetaf_nb_nice,
+                                              CYfabetaf_nf,
+                                              flap_pos,
+                                              Std_Alpha,
+                                              Std_Beta);
+           else
+             CYfabetafI = uiuc_3Dinterpolation(CYfabetaf_fArray,
+                                               CYfabetaf_aArray,
+                                               CYfabetaf_betaArray,
+                                               CYfabetaf_CYArray,
+                                               CYfabetaf_nAlphaArray,
+                                               CYfabetaf_nbeta,
+                                               CYfabetaf_nf,
+                                               flap_pos,
+                                               Std_Alpha,
+                                               Std_Beta);
+            CY += CYfabetafI;
+            break;
+          }
+        case CYfadaf_flag:
+          {
+           if (CYfadaf_nice == 1)
+             CYfadafI = uiuc_3Dinterp_quick(CYfadaf_fArray,
+                                            CYfadaf_aArray_nice,
+                                            CYfadaf_daArray_nice,
+                                            CYfadaf_CYArray,
+                                            CYfadaf_na_nice,
+                                            CYfadaf_nda_nice,
+                                            CYfadaf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            aileron);
+           else
+             CYfadafI = uiuc_3Dinterpolation(CYfadaf_fArray,
+                                             CYfadaf_aArray,
+                                             CYfadaf_daArray,
+                                             CYfadaf_CYArray,
+                                             CYfadaf_nAlphaArray,
+                                             CYfadaf_nda,
+                                             CYfadaf_nf,
+                                             flap_pos,
+                                             Std_Alpha,
+                                             aileron);
+            CY += CYfadafI;
+            break;
+          }
+        case CYfadrf_flag:
+          {
+           if (CYfadrf_nice == 1)
+             CYfadrfI = uiuc_3Dinterp_quick(CYfadrf_fArray,
+                                            CYfadrf_aArray_nice,
+                                            CYfadrf_drArray_nice,
+                                            CYfadrf_CYArray,
+                                            CYfadrf_na_nice,
+                                            CYfadrf_ndr_nice,
+                                            CYfadrf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            rudder);
+           else
+             CYfadrfI = uiuc_3Dinterpolation(CYfadrf_fArray,
+                                             CYfadrf_aArray,
+                                             CYfadrf_drArray,
+                                             CYfadrf_CYArray,
+                                             CYfadrf_nAlphaArray,
+                                             CYfadrf_ndr,
+                                             CYfadrf_nf,
+                                             flap_pos,
+                                             Std_Alpha,
+                                             rudder);
+            CY += CYfadrfI;
+            break;
+         }
+        case CYfapf_flag:
+         {
+           p_nondim = P_body * b_2U;
+           if (CYfapf_nice == 1)
+             CYfapfI = uiuc_3Dinterp_quick(CYfapf_fArray,
+                                           CYfapf_aArray_nice,
+                                           CYfapf_pArray_nice,
+                                           CYfapf_CYArray,
+                                           CYfapf_na_nice,
+                                           CYfapf_np_nice,
+                                           CYfapf_nf,
+                                           flap_pos,
+                                           Std_Alpha,
+                                           p_nondim);
+           else
+             CYfapfI = uiuc_3Dinterpolation(CYfapf_fArray,
+                                            CYfapf_aArray,
+                                            CYfapf_pArray,
+                                            CYfapf_CYArray,
+                                            CYfapf_nAlphaArray,
+                                            CYfapf_np,
+                                            CYfapf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            p_nondim);
+            CY += CYfapfI;
+            break;
+          }
+       case CYfarf_flag:
+          {
+           r_nondim = R_body * b_2U;
+           if (CYfarf_nice == 1)
+             CYfarfI = uiuc_3Dinterp_quick(CYfarf_fArray,
+                                           CYfarf_aArray_nice,
+                                           CYfarf_rArray_nice,
+                                           CYfarf_CYArray,
+                                           CYfarf_na_nice,
+                                           CYfarf_nr_nice,
+                                           CYfarf_nf,
+                                           flap_pos,
+                                           Std_Alpha,
+                                           r_nondim);
+           else
+             CYfarfI = uiuc_3Dinterpolation(CYfarf_fArray,
+                                            CYfarf_aArray,
+                                            CYfarf_rArray,
+                                            CYfarf_CYArray,
+                                            CYfarf_nAlphaArray,
+                                            CYfarf_nr,
+                                            CYfarf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            r_nondim);
+            CY += CYfarfI;
+            break;
+          }
+       };
     } // end CY map
   
   return;