]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_coef_roll.cpp
Fix for bug 1304 - crash loading XML route
[flightgear.git] / src / FDM / UIUCModel / uiuc_coef_roll.cpp
index 840ad907925a4347a8bf6a309712e2e33237ea69..2545c79574f654a8439102d83c51c8469d8063a2 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
+                           (Clfxxf0)
+              11/12/2001   (RD) Added new variables needed for the non-
+                           linear Twin Otter model with flaps
+                           (Clfxxf).  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_roll()
   string linetoken1;
   string linetoken2;
   stack command_list;
-  
+
+  double p_nondim;
+  double r_nondim;
+
   command_list = aeroRollParts -> getCommands();
   
   for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
@@ -96,7 +112,8 @@ void uiuc_coef_roll()
               {
                 Clo = uiuc_ice_filter(Clo_clean,kClo);
               }
-            Cl += Clo;
+           Clo_save = Clo;
+            Cl += Clo_save;
             break;
           }
         case Cl_beta_flag:
@@ -105,7 +122,15 @@ void uiuc_coef_roll()
               {
                 Cl_beta = uiuc_ice_filter(Cl_beta_clean,kCl_beta);
               }
-            Cl += Cl_beta * Beta;
+           Cl_beta_save = Cl_beta * Std_Beta;
+           if (eta_q_Cl_beta_fac)
+             {
+               Cl += Cl_beta_save * eta_q_Cl_beta_fac;
+             }
+           else
+             {
+               Cl += Cl_beta_save;
+             }
             break;
           }
         case Cl_p_flag:
@@ -116,7 +141,21 @@ void uiuc_coef_roll()
               }
             /* Cl_p must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            Cl += Cl_p * P_body * b_2U;
+           Cl_p_save = Cl_p * P_body * b_2U;
+//         if (Cl_p_save > 0.1) {
+//           Cl_p_save = 0.1;
+//         }
+//         if (Cl_p_save < -0.1) {
+//           Cl_p_save = -0.1;
+//         }
+           if (eta_q_Cl_p_fac)
+             {
+               Cl += Cl_p_save * eta_q_Cl_p_fac;
+             }
+           else
+             {
+               Cl += Cl_p_save;
+             }
             break;
           }
         case Cl_r_flag:
@@ -127,7 +166,15 @@ void uiuc_coef_roll()
               }
             /* Cl_r must be mulitplied by b/2U 
                (see Roskam Control book, Part 1, pg. 147) */
-            Cl += Cl_r * R_body * b_2U;
+           Cl_r_save = Cl_r * R_body * b_2U;
+           if (eta_q_Cl_r_fac)
+             {
+               Cl += Cl_r_save * eta_q_Cl_r_fac;
+             }
+           else
+             {
+               Cl += Cl_r_save;
+             }
             break;
           }
         case Cl_da_flag:
@@ -136,7 +183,8 @@ void uiuc_coef_roll()
               {
                 Cl_da = uiuc_ice_filter(Cl_da_clean,kCl_da);
               }
-            Cl += Cl_da * aileron;
+           Cl_da_save = Cl_da * aileron;
+            Cl += Cl_da_save;
             break;
           }
         case Cl_dr_flag:
@@ -145,7 +193,15 @@ void uiuc_coef_roll()
               {
                 Cl_dr = uiuc_ice_filter(Cl_dr_clean,kCl_dr);
               }
-            Cl += Cl_dr * rudder;
+           Cl_dr_save = Cl_dr * rudder;
+           if (eta_q_Cl_dr_fac)
+             {
+               Cl += Cl_dr_save * eta_q_Cl_dr_fac;
+             }
+           else
+             {
+               Cl += Cl_dr_save;
+             }
             break;
           }
         case Cl_daa_flag:
@@ -154,7 +210,8 @@ void uiuc_coef_roll()
               {
                 Cl_daa = uiuc_ice_filter(Cl_daa_clean,kCl_daa);
               }
-            Cl += Cl_daa * aileron * Alpha;
+           Cl_daa_save = Cl_daa * aileron * Std_Alpha;
+            Cl += Cl_daa_save;
             break;
           }
         case Clfada_flag:
@@ -164,7 +221,7 @@ void uiuc_coef_roll()
                                            Clfada_ClArray,
                                            Clfada_nAlphaArray,
                                            Clfada_nda,
-                                           Alpha,
+                                           Std_Alpha,
                                            aileron);
             Cl += ClfadaI;
             break;
@@ -176,11 +233,148 @@ void uiuc_coef_roll()
                                               Clfbetadr_ClArray,
                                               Clfbetadr_nBetaArray,
                                               Clfbetadr_ndr,
-                                              Beta,
+                                              Std_Beta,
                                               rudder);
             Cl += ClfbetadrI;
             break;
           }
+        case Clfabetaf_flag:
+          {
+           if (Clfabetaf_nice == 1)
+             ClfabetafI = uiuc_3Dinterp_quick(Clfabetaf_fArray,
+                                              Clfabetaf_aArray_nice,
+                                              Clfabetaf_bArray_nice,
+                                              Clfabetaf_ClArray,
+                                              Clfabetaf_na_nice,
+                                              Clfabetaf_nb_nice,
+                                              Clfabetaf_nf,
+                                              flap_pos,
+                                              Std_Alpha,
+                                              Std_Beta);
+           else
+             ClfabetafI = uiuc_3Dinterpolation(Clfabetaf_fArray,
+                                               Clfabetaf_aArray,
+                                               Clfabetaf_betaArray,
+                                               Clfabetaf_ClArray,
+                                               Clfabetaf_nAlphaArray,
+                                               Clfabetaf_nbeta,
+                                               Clfabetaf_nf,
+                                               flap_pos,
+                                               Std_Alpha,
+                                               Std_Beta);
+            Cl += ClfabetafI;
+            break;
+          }
+        case Clfadaf_flag:
+          {
+           if (Clfadaf_nice == 1)
+             ClfadafI = uiuc_3Dinterp_quick(Clfadaf_fArray,
+                                            Clfadaf_aArray_nice,
+                                            Clfadaf_daArray_nice,
+                                            Clfadaf_ClArray,
+                                            Clfadaf_na_nice,
+                                            Clfadaf_nda_nice,
+                                            Clfadaf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            aileron);
+           else
+             ClfadafI = uiuc_3Dinterpolation(Clfadaf_fArray,
+                                             Clfadaf_aArray,
+                                             Clfadaf_daArray,
+                                             Clfadaf_ClArray,
+                                             Clfadaf_nAlphaArray,
+                                             Clfadaf_nda,
+                                             Clfadaf_nf,
+                                             flap_pos,
+                                             Std_Alpha,
+                                             aileron);
+            Cl += ClfadafI;
+            break;
+          }
+        case Clfadrf_flag:
+          {
+           if (Clfadrf_nice == 1)
+             ClfadrfI = uiuc_3Dinterp_quick(Clfadrf_fArray,
+                                            Clfadrf_aArray_nice,
+                                            Clfadrf_drArray_nice,
+                                            Clfadrf_ClArray,
+                                            Clfadrf_na_nice,
+                                            Clfadrf_ndr_nice,
+                                            Clfadrf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            rudder);
+           else
+             ClfadrfI = uiuc_3Dinterpolation(Clfadrf_fArray,
+                                             Clfadrf_aArray,
+                                             Clfadrf_drArray,
+                                             Clfadrf_ClArray,
+                                             Clfadrf_nAlphaArray,
+                                             Clfadrf_ndr,
+                                             Clfadrf_nf,
+                                             flap_pos,
+                                             Std_Alpha,
+                                             rudder);
+            Cl += ClfadrfI;
+            break;
+          }
+       case Clfapf_flag:
+          {
+           p_nondim = P_body * b_2U;
+           if (Clfapf_nice == 1)
+             ClfapfI = uiuc_3Dinterp_quick(Clfapf_fArray,
+                                           Clfapf_aArray_nice,
+                                           Clfapf_pArray_nice,
+                                           Clfapf_ClArray,
+                                           Clfapf_na_nice,
+                                           Clfapf_np_nice,
+                                           Clfapf_nf,
+                                           flap_pos,
+                                           Std_Alpha,
+                                           p_nondim);
+           else
+             ClfapfI = uiuc_3Dinterpolation(Clfapf_fArray,
+                                            Clfapf_aArray,
+                                            Clfapf_pArray,
+                                            Clfapf_ClArray,
+                                            Clfapf_nAlphaArray,
+                                            Clfapf_np,
+                                            Clfapf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            p_nondim);
+            Cl += ClfapfI;
+            break;
+          }
+       case Clfarf_flag:
+          {
+           r_nondim = R_body * b_2U;
+           if (Clfarf_nice == 1)
+             ClfarfI = uiuc_3Dinterp_quick(Clfarf_fArray,
+                                           Clfarf_aArray_nice,
+                                           Clfarf_rArray_nice,
+                                           Clfarf_ClArray,
+                                           Clfarf_na_nice,
+                                           Clfarf_nr_nice,
+                                           Clfarf_nf,
+                                           flap_pos,
+                                           Std_Alpha,
+                                           r_nondim);
+           else
+             ClfarfI = uiuc_3Dinterpolation(Clfarf_fArray,
+                                            Clfarf_aArray,
+                                            Clfarf_rArray,
+                                            Clfarf_ClArray,
+                                            Clfarf_nAlphaArray,
+                                            Clfarf_nr,
+                                            Clfarf_nf,
+                                            flap_pos,
+                                            Std_Alpha,
+                                            r_nondim);
+            Cl += ClfarfI;
+            break;
+          }
         };
     } // end Cl map