1 /**********************************************************************
3 FILENAME: uiuc_coef_lift.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: computes aggregated aerodynamic lift 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 06/18/2001 (RD) Added CZfa
23 10/25/2001 (RD) Added new variables needed for the non-
24 linear Twin Otter model at zero flaps
26 11/12/2001 (RD) Added new variables needed for the non-
27 linear Twin Otter model with flaps
28 (CZfxxf). Zero flap vairables removed.
29 02/13/2002 (RD) Added variables so linear aero model
30 values can be recorded
31 02/18/2002 (RD) Added uiuc_3Dinterp_quick() function
32 for a quicker 3D interpolation. Takes
33 advantage of "nice" data.
35 ----------------------------------------------------------------------
37 AUTHOR(S): Bipin Sehgal <bsehgal@uiuc.edu>
38 Jeff Scott <jscott@mail.com>
39 Robert Deters <rdeters@uiuc.edu>
41 ----------------------------------------------------------------------
45 ----------------------------------------------------------------------
49 -lift coefficient components
53 ----------------------------------------------------------------------
57 ----------------------------------------------------------------------
59 CALLED BY: uiuc_coefficients.cpp
61 ----------------------------------------------------------------------
63 CALLS TO: uiuc_1Dinterpolation
69 ----------------------------------------------------------------------
71 COPYRIGHT: (C) 2000 by Michael Selig
73 This program is free software; you can redistribute it and/or
74 modify it under the terms of the GNU General Public License
75 as published by the Free Software Foundation.
77 This program is distributed in the hope that it will be useful,
78 but WITHOUT ANY WARRANTY; without even the implied warranty of
79 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
80 GNU General Public License for more details.
82 You should have received a copy of the GNU General Public License
83 along with this program; if not, write to the Free Software
84 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
86 **********************************************************************/
88 #include "uiuc_coef_lift.h"
98 command_list = aeroLiftParts -> getCommands();
100 for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
102 linetoken1 = aeroLiftParts -> getToken(*command_line, 1);
103 linetoken2 = aeroLiftParts -> getToken(*command_line, 2);
105 switch (CL_map[linetoken2])
111 CLo = uiuc_ice_filter(CLo_clean,kCLo);
114 CLclean_wing += CLo_clean;
115 CLclean_tail += CLo_clean;
128 CL_a = uiuc_ice_filter(CL_a_clean,kCL_a);
131 CLclean_wing += CL_a_clean * Std_Alpha;
132 CLclean_tail += CL_a_clean * Std_Alpha;
133 CLiced_wing += CL_a * Std_Alpha;
134 CLiced_tail += CL_a * Std_Alpha;
137 CL_a_save = CL_a * Std_Alpha;
145 CL_adot = uiuc_ice_filter(CL_adot_clean,kCL_adot);
148 CLclean_wing += CL_adot_clean * Std_Alpha_dot * cbar_2U;
149 CLclean_tail += CL_adot_clean * Std_Alpha_dot * ch_2U;
150 CLiced_wing += CL_adot * Std_Alpha_dot * cbar_2U;
151 CLiced_tail += CL_adot * Std_Alpha_dot * ch_2U;
154 /* CL_adot must be mulitplied by cbar/2U
155 (see Roskam Control book, Part 1, pg. 147) */
156 CL_adot_save = CL_adot * Std_Alpha_dot * cbar_2U;
164 CL_q = uiuc_ice_filter(CL_q_clean,kCL_q);
167 CLclean_wing += CL_q_clean * Theta_dot * cbar_2U;
168 CLclean_tail += CL_q_clean * Theta_dot * ch_2U;
169 CLiced_wing += CL_q * Theta_dot * cbar_2U;
170 CLiced_tail += CL_q * Theta_dot * ch_2U;
173 /* CL_q must be mulitplied by cbar/2U
174 (see Roskam Control book, Part 1, pg. 147) */
175 /* why multiply by Theta_dot instead of Q_body?
176 that is what is done in c172_aero.c; assume it
177 has something to do with axes systems */
178 CL_q_save = CL_q * Theta_dot * cbar_2U;
184 CL_ih_save = CL_ih * ih;
192 CL_de = uiuc_ice_filter(CL_de_clean,kCL_de);
195 CLclean_wing += CL_de_clean * elevator;
196 CLclean_tail += CL_de_clean * elevator;
197 CLiced_wing += CL_de * elevator;
198 CLiced_tail += CL_de * elevator;
201 CL_de_save = CL_de * elevator;
207 CL_df_save = CL_df * flap_pos;
213 CL_ds_save = CL_ds * spoiler_pos;
219 CL_dg_save = CL_dg * gear_pos_norm;
225 CLfaI = uiuc_1Dinterpolation(CLfa_aArray,
234 CLfadeI = uiuc_2Dinterpolation(CLfade_aArray,
246 CLfdfI = uiuc_1Dinterpolation(CLfdf_dfArray,
255 CLfadfI = uiuc_2Dinterpolation(CLfadf_aArray,
269 CZo = uiuc_ice_filter(CZo_clean,kCZo);
272 CZclean_wing += CZo_clean;
273 CZclean_tail += CZo_clean;
286 CZ_a = uiuc_ice_filter(CZ_a_clean,kCZ_a);
289 CZclean_wing += CZ_a_clean * Std_Alpha;
290 CZclean_tail += CZ_a_clean * Std_Alpha;
291 CZiced_wing += CZ_a * Std_Alpha;
292 CZiced_tail += CZ_a * Std_Alpha;
295 CZ_a_save = CZ_a * Std_Alpha;
303 CZ_a2 = uiuc_ice_filter(CZ_a2_clean,kCZ_a2);
306 CZclean_wing += CZ_a2_clean * Std_Alpha * Std_Alpha;
307 CZclean_tail += CZ_a2_clean * Std_Alpha * Std_Alpha;
308 CZiced_wing += CZ_a2 * Std_Alpha * Std_Alpha;
309 CZiced_tail += CZ_a2 * Std_Alpha * Std_Alpha;
312 CZ_a2_save = CZ_a2 * Std_Alpha * Std_Alpha;
320 CZ_a3 = uiuc_ice_filter(CZ_a3_clean,kCZ_a3);
323 CZclean_wing += CZ_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha;
324 CZclean_tail += CZ_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha;
325 CZiced_wing += CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
326 CZiced_tail += CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
329 CZ_a3_save = CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
337 CZ_adot = uiuc_ice_filter(CZ_adot_clean,kCZ_adot);
340 CZclean_wing += CZ_adot_clean * Std_Alpha_dot * cbar_2U;
341 CZclean_tail += CZ_adot_clean * Std_Alpha_dot * ch_2U;
342 CZiced_wing += CZ_adot * Std_Alpha_dot * cbar_2U;
343 CZiced_tail += CZ_adot * Std_Alpha_dot * ch_2U;
346 /* CZ_adot must be mulitplied by cbar/2U
347 (see Roskam Control book, Part 1, pg. 147) */
348 CZ_adot_save = CZ_adot * Std_Alpha_dot * cbar_2U;
356 CZ_q = uiuc_ice_filter(CZ_q_clean,kCZ_q);
359 CZclean_wing += CZ_q_clean * Q_body * cbar_2U;
360 CZclean_tail += CZ_q_clean * Q_body * ch_2U;
361 CZiced_wing += CZ_q * Q_body * cbar_2U;
362 CZiced_tail += CZ_q * Q_body * ch_2U;
365 /* CZ_q must be mulitplied by cbar/2U
366 (see Roskam Control book, Part 1, pg. 147) */
367 CZ_q_save = CZ_q * Q_body * cbar_2U;
375 CZ_de = uiuc_ice_filter(CZ_de_clean,kCZ_de);
378 CZclean_wing += CZ_de_clean * elevator;
379 CZclean_tail += CZ_de_clean * elevator;
380 CZiced_wing += CZ_de * elevator;
381 CZiced_tail += CZ_de * elevator;
384 CZ_de_save = CZ_de * elevator;
392 CZ_deb2 = uiuc_ice_filter(CZ_deb2_clean,kCZ_deb2);
395 CZclean_wing += CZ_deb2_clean * elevator * Std_Beta * Std_Beta;
396 CZclean_tail += CZ_deb2_clean * elevator * Std_Beta * Std_Beta;
397 CZiced_wing += CZ_deb2 * elevator * Std_Beta * Std_Beta;
398 CZiced_tail += CZ_deb2 * elevator * Std_Beta * Std_Beta;
401 CZ_deb2_save = CZ_deb2 * elevator * Std_Beta * Std_Beta;
409 CZ_df = uiuc_ice_filter(CZ_df_clean,kCZ_df);
412 CZclean_wing += CZ_df_clean * flap_pos;
413 CZclean_tail += CZ_df_clean * flap_pos;
414 CZiced_wing += CZ_df * flap_pos;
415 CZiced_tail += CZ_df * flap_pos;
418 CZ_df_save = CZ_df * flap_pos;
426 CZ_adf = uiuc_ice_filter(CZ_adf_clean,kCZ_adf);
429 CZclean_wing += CZ_adf_clean * Std_Alpha * flap_pos;
430 CZclean_tail += CZ_adf_clean * Std_Alpha * flap_pos;
431 CZiced_wing += CZ_adf * Std_Alpha * flap_pos;
432 CZiced_tail += CZ_adf * Std_Alpha * flap_pos;
435 CZ_adf_save = CZ_adf * Std_Alpha * flap_pos;
441 CZfaI = uiuc_1Dinterpolation(CZfa_aArray,
450 if (CZfabetaf_nice == 1)
451 CZfabetafI = uiuc_3Dinterp_quick(CZfabetaf_fArray,
452 CZfabetaf_aArray_nice,
453 CZfabetaf_bArray_nice,
462 CZfabetafI = uiuc_3Dinterpolation(CZfabetaf_fArray,
466 CZfabetaf_nAlphaArray,
477 if (CZfadef_nice == 1)
478 CZfadefI = uiuc_3Dinterp_quick(CZfadef_fArray,
480 CZfadef_deArray_nice,
489 CZfadefI = uiuc_3Dinterpolation(CZfadef_fArray,
504 q_nondim = Q_body * cbar_2U;
505 if (CZfaqf_nice == 1)
506 CZfaqfI = uiuc_3Dinterp_quick(CZfaqf_fArray,
517 CZfaqfI = uiuc_3Dinterpolation(CZfaqf_fArray,
536 // end uiuc_coef_lift.cpp