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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
85 USA or view http://www.gnu.org/copyleft/gpl.html.
87 **********************************************************************/
89 #include "uiuc_coef_lift.h"
99 command_list = aeroLiftParts -> getCommands();
101 for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
103 linetoken1 = aeroLiftParts -> getToken(*command_line, 1);
104 linetoken2 = aeroLiftParts -> getToken(*command_line, 2);
106 switch (CL_map[linetoken2])
112 CLo = uiuc_ice_filter(CLo_clean,kCLo);
115 CLclean_wing += CLo_clean;
116 CLclean_tail += CLo_clean;
129 CL_a = uiuc_ice_filter(CL_a_clean,kCL_a);
132 CLclean_wing += CL_a_clean * Std_Alpha;
133 CLclean_tail += CL_a_clean * Std_Alpha;
134 CLiced_wing += CL_a * Std_Alpha;
135 CLiced_tail += CL_a * Std_Alpha;
138 CL_a_save = CL_a * Std_Alpha;
146 CL_adot = uiuc_ice_filter(CL_adot_clean,kCL_adot);
149 CLclean_wing += CL_adot_clean * Std_Alpha_dot * cbar_2U;
150 CLclean_tail += CL_adot_clean * Std_Alpha_dot * ch_2U;
151 CLiced_wing += CL_adot * Std_Alpha_dot * cbar_2U;
152 CLiced_tail += CL_adot * Std_Alpha_dot * ch_2U;
155 /* CL_adot must be mulitplied by cbar/2U
156 (see Roskam Control book, Part 1, pg. 147) */
157 CL_adot_save = CL_adot * Std_Alpha_dot * cbar_2U;
165 CL_q = uiuc_ice_filter(CL_q_clean,kCL_q);
168 CLclean_wing += CL_q_clean * Theta_dot * cbar_2U;
169 CLclean_tail += CL_q_clean * Theta_dot * ch_2U;
170 CLiced_wing += CL_q * Theta_dot * cbar_2U;
171 CLiced_tail += CL_q * Theta_dot * ch_2U;
174 /* CL_q must be mulitplied by cbar/2U
175 (see Roskam Control book, Part 1, pg. 147) */
176 /* why multiply by Theta_dot instead of Q_body?
177 that is what is done in c172_aero.c; assume it
178 has something to do with axes systems */
179 CL_q_save = CL_q * Theta_dot * cbar_2U;
185 CL_ih_save = CL_ih * ih;
193 CL_de = uiuc_ice_filter(CL_de_clean,kCL_de);
196 CLclean_wing += CL_de_clean * elevator;
197 CLclean_tail += CL_de_clean * elevator;
198 CLiced_wing += CL_de * elevator;
199 CLiced_tail += CL_de * elevator;
202 CL_de_save = CL_de * elevator;
208 CL_df_save = CL_df * flap_pos;
214 CL_ds_save = CL_ds * spoiler_pos;
220 CL_dg_save = CL_dg * gear_pos_norm;
226 CLfaI = uiuc_1Dinterpolation(CLfa_aArray,
235 CLfadeI = uiuc_2Dinterpolation(CLfade_aArray,
247 CLfdfI = uiuc_1Dinterpolation(CLfdf_dfArray,
256 CLfadfI = uiuc_2Dinterpolation(CLfadf_aArray,
270 CZo = uiuc_ice_filter(CZo_clean,kCZo);
273 CZclean_wing += CZo_clean;
274 CZclean_tail += CZo_clean;
287 CZ_a = uiuc_ice_filter(CZ_a_clean,kCZ_a);
290 CZclean_wing += CZ_a_clean * Std_Alpha;
291 CZclean_tail += CZ_a_clean * Std_Alpha;
292 CZiced_wing += CZ_a * Std_Alpha;
293 CZiced_tail += CZ_a * Std_Alpha;
296 CZ_a_save = CZ_a * Std_Alpha;
304 CZ_a2 = uiuc_ice_filter(CZ_a2_clean,kCZ_a2);
307 CZclean_wing += CZ_a2_clean * Std_Alpha * Std_Alpha;
308 CZclean_tail += CZ_a2_clean * Std_Alpha * Std_Alpha;
309 CZiced_wing += CZ_a2 * Std_Alpha * Std_Alpha;
310 CZiced_tail += CZ_a2 * Std_Alpha * Std_Alpha;
313 CZ_a2_save = CZ_a2 * Std_Alpha * Std_Alpha;
321 CZ_a3 = uiuc_ice_filter(CZ_a3_clean,kCZ_a3);
324 CZclean_wing += CZ_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha;
325 CZclean_tail += CZ_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha;
326 CZiced_wing += CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
327 CZiced_tail += CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
330 CZ_a3_save = CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha;
338 CZ_adot = uiuc_ice_filter(CZ_adot_clean,kCZ_adot);
341 CZclean_wing += CZ_adot_clean * Std_Alpha_dot * cbar_2U;
342 CZclean_tail += CZ_adot_clean * Std_Alpha_dot * ch_2U;
343 CZiced_wing += CZ_adot * Std_Alpha_dot * cbar_2U;
344 CZiced_tail += CZ_adot * Std_Alpha_dot * ch_2U;
347 /* CZ_adot must be mulitplied by cbar/2U
348 (see Roskam Control book, Part 1, pg. 147) */
349 CZ_adot_save = CZ_adot * Std_Alpha_dot * cbar_2U;
357 CZ_q = uiuc_ice_filter(CZ_q_clean,kCZ_q);
360 CZclean_wing += CZ_q_clean * Q_body * cbar_2U;
361 CZclean_tail += CZ_q_clean * Q_body * ch_2U;
362 CZiced_wing += CZ_q * Q_body * cbar_2U;
363 CZiced_tail += CZ_q * Q_body * ch_2U;
366 /* CZ_q must be mulitplied by cbar/2U
367 (see Roskam Control book, Part 1, pg. 147) */
368 CZ_q_save = CZ_q * Q_body * cbar_2U;
376 CZ_de = uiuc_ice_filter(CZ_de_clean,kCZ_de);
379 CZclean_wing += CZ_de_clean * elevator;
380 CZclean_tail += CZ_de_clean * elevator;
381 CZiced_wing += CZ_de * elevator;
382 CZiced_tail += CZ_de * elevator;
385 CZ_de_save = CZ_de * elevator;
393 CZ_deb2 = uiuc_ice_filter(CZ_deb2_clean,kCZ_deb2);
396 CZclean_wing += CZ_deb2_clean * elevator * Std_Beta * Std_Beta;
397 CZclean_tail += CZ_deb2_clean * elevator * Std_Beta * Std_Beta;
398 CZiced_wing += CZ_deb2 * elevator * Std_Beta * Std_Beta;
399 CZiced_tail += CZ_deb2 * elevator * Std_Beta * Std_Beta;
402 CZ_deb2_save = CZ_deb2 * elevator * Std_Beta * Std_Beta;
410 CZ_df = uiuc_ice_filter(CZ_df_clean,kCZ_df);
413 CZclean_wing += CZ_df_clean * flap_pos;
414 CZclean_tail += CZ_df_clean * flap_pos;
415 CZiced_wing += CZ_df * flap_pos;
416 CZiced_tail += CZ_df * flap_pos;
419 CZ_df_save = CZ_df * flap_pos;
427 CZ_adf = uiuc_ice_filter(CZ_adf_clean,kCZ_adf);
430 CZclean_wing += CZ_adf_clean * Std_Alpha * flap_pos;
431 CZclean_tail += CZ_adf_clean * Std_Alpha * flap_pos;
432 CZiced_wing += CZ_adf * Std_Alpha * flap_pos;
433 CZiced_tail += CZ_adf * Std_Alpha * flap_pos;
436 CZ_adf_save = CZ_adf * Std_Alpha * flap_pos;
442 CZfaI = uiuc_1Dinterpolation(CZfa_aArray,
451 if (CZfabetaf_nice == 1)
452 CZfabetafI = uiuc_3Dinterp_quick(CZfabetaf_fArray,
453 CZfabetaf_aArray_nice,
454 CZfabetaf_bArray_nice,
463 CZfabetafI = uiuc_3Dinterpolation(CZfabetaf_fArray,
467 CZfabetaf_nAlphaArray,
478 if (CZfadef_nice == 1)
479 CZfadefI = uiuc_3Dinterp_quick(CZfadef_fArray,
481 CZfadef_deArray_nice,
490 CZfadefI = uiuc_3Dinterpolation(CZfadef_fArray,
505 q_nondim = Q_body * cbar_2U;
506 if (CZfaqf_nice == 1)
507 CZfaqfI = uiuc_3Dinterp_quick(CZfaqf_fArray,
518 CZfaqfI = uiuc_3Dinterpolation(CZfaqf_fArray,
537 // end uiuc_coef_lift.cpp