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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
85 **********************************************************************/
87 #include "uiuc_coef_pitch.h"
90 void uiuc_coef_pitch()
98 command_list = aeroPitchParts -> getCommands();
100 for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
102 linetoken1 = aeroPitchParts -> getToken(*command_line, 1);
103 linetoken2 = aeroPitchParts -> getToken(*command_line, 2);
105 switch(Cm_map[linetoken2])
111 Cmo = uiuc_ice_filter(Cmo_clean,kCmo);
121 Cm_a = uiuc_ice_filter(Cm_a_clean,kCm_a);
123 Cm_a_save = Cm_a * Std_Alpha;
131 Cm_a2 = uiuc_ice_filter(Cm_a2_clean,kCm_a2);
133 Cm_a2_save = Cm_a2 * Std_Alpha * Std_Alpha;
141 Cm_adot = uiuc_ice_filter(Cm_adot_clean,kCm_adot);
143 /* Cm_adot must be mulitplied by cbar/2U
144 (see Roskam Control book, Part 1, pg. 147) */
145 Cm_adot_save = Cm_adot * Std_Alpha_dot * cbar_2U;
146 if (eta_q_Cm_adot_fac)
148 Cm += Cm_adot_save * eta_q_Cm_adot_fac;
160 Cm_q = uiuc_ice_filter(Cm_q_clean,kCm_q);
162 /* Cm_q must be mulitplied by cbar/2U
163 (see Roskam Control book, Part 1, pg. 147) */
164 Cm_q_save = Cm_q * Q_body * cbar_2U;
167 Cm += Cm_q_save * eta_q_Cm_q_fac;
177 Cm_ih_save = Cm_ih * ih;
185 Cm_de = uiuc_ice_filter(Cm_de_clean,kCm_de);
187 Cm_de_save = Cm_de * elevator;
190 Cm += Cm_de_save * eta_q_Cm_de_fac;
202 Cm_b2 = uiuc_ice_filter(Cm_b2_clean,kCm_b2);
204 Cm_b2_save = Cm_b2 * Std_Beta * Std_Beta;
212 Cm_r = uiuc_ice_filter(Cm_r_clean,kCm_r);
214 Cm_r_save = Cm_r * R_body * b_2U;
222 Cm_df = uiuc_ice_filter(Cm_df_clean,kCm_df);
224 Cm_df_save = Cm_df * flap_pos;
230 Cm_ds_save = Cm_ds * spoiler_pos;
236 Cm_dg_save = Cm_dg * gear_pos_norm;
242 CmfaI = uiuc_1Dinterpolation(Cmfa_aArray,
253 // compute the induced velocity on the tail to account for tail downwash
257 if (V_rel_wind < dyn_on_speed)
259 alphaTail = Std_Alpha;
263 gammaWing = V_rel_wind * Sw * CL / (2.0 * bw);
264 // printf("gammaWing = %.4f\n", (gammaWing));
265 downwash = downwashCoef * gammaWing;
266 downwashAngle = atan(downwash/V_rel_wind);
267 alphaTail = Std_Alpha - downwashAngle;
269 CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
281 CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray,
289 if (eta_q_Cmfade_fac)
291 Cm += CmfadeI * eta_q_Cmfade_fac;
301 CmfdfI = uiuc_1Dinterpolation(Cmfdf_dfArray,
310 CmfadfI = uiuc_2Dinterpolation(Cmfadf_aArray,
322 if (Cmfabetaf_nice == 1)
323 CmfabetafI = uiuc_3Dinterp_quick(Cmfabetaf_fArray,
324 Cmfabetaf_aArray_nice,
325 Cmfabetaf_bArray_nice,
334 CmfabetafI = uiuc_3Dinterpolation(Cmfabetaf_fArray,
338 Cmfabetaf_nAlphaArray,
349 if (Cmfadef_nice == 1)
350 CmfadefI = uiuc_3Dinterp_quick(Cmfadef_fArray,
352 Cmfadef_deArray_nice,
361 CmfadefI = uiuc_3Dinterpolation(Cmfadef_fArray,
376 q_nondim = Q_body * cbar_2U;
377 if (Cmfaqf_nice == 1)
378 CmfaqfI = uiuc_3Dinterp_quick(Cmfaqf_fArray,
389 CmfaqfI = uiuc_3Dinterpolation(Cmfaqf_fArray,
408 // end uiuc_coef_pitch.cpp