1 /**********************************************************************
3 FILENAME: uiuc_coef_pitch.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: computes aggregated aerodynamic pitch coefficient
9 ----------------------------------------------------------------------
13 ----------------------------------------------------------------------
15 REFERENCES: Roskam, Jan. Airplane Flight Dynamics and Automatic
16 Flight Controls, Part I. Lawrence, KS: DARcorporation,
19 ----------------------------------------------------------------------
21 HISTORY: 04/15/2000 initial release
22 10/25/2001 (RD) Added new variables needed for the non-
23 linear Twin Otter model at zero flaps
25 11/12/2001 (RD) Added new variables needed for the non-
26 linear Twin Otter model with flaps
27 (Cmfxxf). Zero flap vairables removed.
28 02/13/2002 (RD) Added variables so linear aero model
29 values can be recorded
30 02/18/2002 (RD) Added uiuc_3Dinterp_quick() function
31 for a quicker 3D interpolation. Takes
32 advantage of "nice" data.
34 ----------------------------------------------------------------------
36 AUTHOR(S): Bipin Sehgal <bsehgal@uiuc.edu>
37 Jeff Scott <jscott@mail.com>
38 Robert Deters <rdeters@uiuc.edu>
40 ----------------------------------------------------------------------
44 ----------------------------------------------------------------------
48 -pitch coefficient components
52 ----------------------------------------------------------------------
56 ----------------------------------------------------------------------
58 CALLED BY: uiuc_coefficients.cpp
60 ----------------------------------------------------------------------
62 CALLS TO: uiuc_1Dinterpolation
68 ----------------------------------------------------------------------
70 COPYRIGHT: (C) 2000 by Michael Selig
72 This program is free software; you can redistribute it and/or
73 modify it under the terms of the GNU General Public License
74 as published by the Free Software Foundation.
76 This program is distributed in the hope that it will be useful,
77 but WITHOUT ANY WARRANTY; without even the implied warranty of
78 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
79 GNU General Public License for more details.
81 You should have received a copy of the GNU General Public License
82 along with this program; if not, write to the Free Software
83 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
84 USA or view http://www.gnu.org/copyleft/gpl.html.
86 **********************************************************************/
88 #include "uiuc_coef_pitch.h"
91 void uiuc_coef_pitch()
99 command_list = aeroPitchParts -> getCommands();
101 for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
103 linetoken1 = aeroPitchParts -> getToken(*command_line, 1);
104 linetoken2 = aeroPitchParts -> getToken(*command_line, 2);
106 switch(Cm_map[linetoken2])
112 Cmo = uiuc_ice_filter(Cmo_clean,kCmo);
122 Cm_a = uiuc_ice_filter(Cm_a_clean,kCm_a);
124 Cm_a_save = Cm_a * Std_Alpha;
132 Cm_a2 = uiuc_ice_filter(Cm_a2_clean,kCm_a2);
134 Cm_a2_save = Cm_a2 * Std_Alpha * Std_Alpha;
142 Cm_adot = uiuc_ice_filter(Cm_adot_clean,kCm_adot);
144 /* Cm_adot must be mulitplied by cbar/2U
145 (see Roskam Control book, Part 1, pg. 147) */
146 Cm_adot_save = Cm_adot * Std_Alpha_dot * cbar_2U;
147 if (eta_q_Cm_adot_fac)
149 Cm += Cm_adot_save * eta_q_Cm_adot_fac;
161 Cm_q = uiuc_ice_filter(Cm_q_clean,kCm_q);
163 /* Cm_q must be mulitplied by cbar/2U
164 (see Roskam Control book, Part 1, pg. 147) */
165 Cm_q_save = Cm_q * Q_body * cbar_2U;
168 Cm += Cm_q_save * eta_q_Cm_q_fac;
178 Cm_ih_save = Cm_ih * ih;
186 Cm_de = uiuc_ice_filter(Cm_de_clean,kCm_de);
188 Cm_de_save = Cm_de * elevator;
191 Cm += Cm_de_save * eta_q_Cm_de_fac;
203 Cm_b2 = uiuc_ice_filter(Cm_b2_clean,kCm_b2);
205 Cm_b2_save = Cm_b2 * Std_Beta * Std_Beta;
213 Cm_r = uiuc_ice_filter(Cm_r_clean,kCm_r);
215 Cm_r_save = Cm_r * R_body * b_2U;
223 Cm_df = uiuc_ice_filter(Cm_df_clean,kCm_df);
225 Cm_df_save = Cm_df * flap_pos;
231 Cm_ds_save = Cm_ds * spoiler_pos;
237 Cm_dg_save = Cm_dg * gear_pos_norm;
243 CmfaI = uiuc_1Dinterpolation(Cmfa_aArray,
254 // compute the induced velocity on the tail to account for tail downwash
258 if (V_rel_wind < dyn_on_speed)
260 alphaTail = Std_Alpha;
264 gammaWing = V_rel_wind * Sw * CL / (2.0 * bw);
265 // printf("gammaWing = %.4f\n", (gammaWing));
266 downwash = downwashCoef * gammaWing;
267 downwashAngle = atan(downwash/V_rel_wind);
268 alphaTail = Std_Alpha - downwashAngle;
270 CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
282 CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
290 if (eta_q_Cmfade_fac)
292 Cm += CmfadeI * eta_q_Cmfade_fac;
302 CmfdfI = uiuc_1Dinterpolation(Cmfdf_dfArray,
311 CmfadfI = uiuc_2Dinterpolation(Cmfadf_aArray,
323 if (Cmfabetaf_nice == 1)
324 CmfabetafI = uiuc_3Dinterp_quick(Cmfabetaf_fArray,
325 Cmfabetaf_aArray_nice,
326 Cmfabetaf_bArray_nice,
335 CmfabetafI = uiuc_3Dinterpolation(Cmfabetaf_fArray,
339 Cmfabetaf_nAlphaArray,
350 if (Cmfadef_nice == 1)
351 CmfadefI = uiuc_3Dinterp_quick(Cmfadef_fArray,
353 Cmfadef_deArray_nice,
362 CmfadefI = uiuc_3Dinterpolation(Cmfadef_fArray,
377 q_nondim = Q_body * cbar_2U;
378 if (Cmfaqf_nice == 1)
379 CmfaqfI = uiuc_3Dinterp_quick(Cmfaqf_fArray,
390 CmfaqfI = uiuc_3Dinterpolation(Cmfaqf_fArray,
409 // end uiuc_coef_pitch.cpp