X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FUIUCModel%2Fuiuc_coef_lift.cpp;h=c7de49eecf030b8bf93c45396c18d1860e24d1f5;hb=13db36f67912be03c2e970e84cdcdbd41dddb61c;hp=036e54f304d6e51af20dee2e1d6933c8e0808645;hpb=517d111c5cb8da39af6a183ae90ce06cca9cc832;p=flightgear.git diff --git a/src/FDM/UIUCModel/uiuc_coef_lift.cpp b/src/FDM/UIUCModel/uiuc_coef_lift.cpp index 036e54f30..c7de49eec 100644 --- a/src/FDM/UIUCModel/uiuc_coef_lift.cpp +++ b/src/FDM/UIUCModel/uiuc_coef_lift.cpp @@ -19,11 +19,24 @@ ---------------------------------------------------------------------- HISTORY: 04/15/2000 initial release + 06/18/2001 (RD) Added CZfa + 10/25/2001 (RD) Added new variables needed for the non- + linear Twin Otter model at zero flaps + (CZfxxf0) + 11/12/2001 (RD) Added new variables needed for the non- + linear Twin Otter model with flaps + (CZfxxf). 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 Jeff Scott + Robert Deters ---------------------------------------------------------------------- @@ -50,6 +63,8 @@ CALLS TO: uiuc_1Dinterpolation uiuc_2Dinterpolation uiuc_ice_filter + uiuc_3Dinterpolation + uiuc_3Dinterp_quick ---------------------------------------------------------------------- @@ -66,20 +81,20 @@ 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. **********************************************************************/ #include "uiuc_coef_lift.h" - void uiuc_coef_lift() { string linetoken1; string linetoken2; stack command_list; - + + double q_nondim; + command_list = aeroLiftParts -> getCommands(); for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line) @@ -102,7 +117,8 @@ void uiuc_coef_lift() CLiced_tail += CLo; } } - CL += CLo; + CLo_save = CLo; + CL += CLo_save; break; } case CL_a_flag: @@ -112,13 +128,14 @@ void uiuc_coef_lift() CL_a = uiuc_ice_filter(CL_a_clean,kCL_a); if (beta_model) { - CLclean_wing += CL_a_clean * Alpha; - CLclean_tail += CL_a_clean * Alpha; - CLiced_wing += CL_a * Alpha; - CLiced_tail += CL_a * Alpha; + CLclean_wing += CL_a_clean * Std_Alpha; + CLclean_tail += CL_a_clean * Std_Alpha; + CLiced_wing += CL_a * Std_Alpha; + CLiced_tail += CL_a * Std_Alpha; } } - CL += CL_a * Alpha; + CL_a_save = CL_a * Std_Alpha; + CL += CL_a_save; break; } case CL_adot_flag: @@ -128,15 +145,16 @@ void uiuc_coef_lift() CL_adot = uiuc_ice_filter(CL_adot_clean,kCL_adot); if (beta_model) { - CLclean_wing += CL_adot_clean * Alpha_dot * cbar_2U; - CLclean_tail += CL_adot_clean * Alpha_dot * ch_2U; - CLiced_wing += CL_adot * Alpha_dot * cbar_2U; - CLiced_tail += CL_adot * Alpha_dot * ch_2U; + CLclean_wing += CL_adot_clean * Std_Alpha_dot * cbar_2U; + CLclean_tail += CL_adot_clean * Std_Alpha_dot * ch_2U; + CLiced_wing += CL_adot * Std_Alpha_dot * cbar_2U; + CLiced_tail += CL_adot * Std_Alpha_dot * ch_2U; } } /* CL_adot must be mulitplied by cbar/2U (see Roskam Control book, Part 1, pg. 147) */ - CL += CL_adot * Alpha_dot * cbar_2U; + CL_adot_save = CL_adot * Std_Alpha_dot * cbar_2U; + CL += CL_adot_save; break; } case CL_q_flag: @@ -157,12 +175,14 @@ void uiuc_coef_lift() /* why multiply by Theta_dot instead of Q_body? that is what is done in c172_aero.c; assume it has something to do with axes systems */ - CL += CL_q * Theta_dot * cbar_2U; + CL_q_save = CL_q * Theta_dot * cbar_2U; + CL += CL_q_save; break; } case CL_ih_flag: { - CL += CL_ih * ih; + CL_ih_save = CL_ih * ih; + CL += CL_ih_save; break; } case CL_de_flag: @@ -178,7 +198,26 @@ void uiuc_coef_lift() CLiced_tail += CL_de * elevator; } } - CL += CL_de * elevator; + CL_de_save = CL_de * elevator; + CL += CL_de_save; + break; + } + case CL_df_flag: + { + CL_df_save = CL_df * flap_pos; + CL += CL_df_save; + break; + } + case CL_ds_flag: + { + CL_ds_save = CL_ds * spoiler_pos; + CL += CL_ds_save; + break; + } + case CL_dg_flag: + { + CL_dg_save = CL_dg * gear_pos_norm; + CL += CL_dg_save; break; } case CLfa_flag: @@ -186,7 +225,7 @@ void uiuc_coef_lift() CLfaI = uiuc_1Dinterpolation(CLfa_aArray, CLfa_CLArray, CLfa_nAlpha, - Alpha); + Std_Alpha); CL += CLfaI; break; } @@ -197,7 +236,7 @@ void uiuc_coef_lift() CLfade_CLArray, CLfade_nAlphaArray, CLfade_nde, - Alpha, + Std_Alpha, elevator); CL += CLfadeI; break; @@ -207,7 +246,7 @@ void uiuc_coef_lift() CLfdfI = uiuc_1Dinterpolation(CLfdf_dfArray, CLfdf_CLArray, CLfdf_ndf, - flap); + flap_pos); CL += CLfdfI; break; } @@ -218,8 +257,8 @@ void uiuc_coef_lift() CLfadf_CLArray, CLfadf_nAlphaArray, CLfadf_ndf, - Alpha, - flap); + Std_Alpha, + flap_pos); CL += CLfadfI; break; } @@ -236,7 +275,8 @@ void uiuc_coef_lift() CZiced_tail += CZo; } } - CZ += CZo; + CZo_save = CZo; + CZ += CZo_save; break; } case CZ_a_flag: @@ -246,13 +286,14 @@ void uiuc_coef_lift() CZ_a = uiuc_ice_filter(CZ_a_clean,kCZ_a); if (beta_model) { - CZclean_wing += CZ_a_clean * Alpha; - CZclean_tail += CZ_a_clean * Alpha; - CZiced_wing += CZ_a * Alpha; - CZiced_tail += CZ_a * Alpha; + CZclean_wing += CZ_a_clean * Std_Alpha; + CZclean_tail += CZ_a_clean * Std_Alpha; + CZiced_wing += CZ_a * Std_Alpha; + CZiced_tail += CZ_a * Std_Alpha; } } - CZ += CZ_a * Alpha; + CZ_a_save = CZ_a * Std_Alpha; + CZ += CZ_a_save; break; } case CZ_a2_flag: @@ -262,13 +303,14 @@ void uiuc_coef_lift() CZ_a2 = uiuc_ice_filter(CZ_a2_clean,kCZ_a2); if (beta_model) { - CZclean_wing += CZ_a2_clean * Alpha * Alpha; - CZclean_tail += CZ_a2_clean * Alpha * Alpha; - CZiced_wing += CZ_a2 * Alpha * Alpha; - CZiced_tail += CZ_a2 * Alpha * Alpha; + CZclean_wing += CZ_a2_clean * Std_Alpha * Std_Alpha; + CZclean_tail += CZ_a2_clean * Std_Alpha * Std_Alpha; + CZiced_wing += CZ_a2 * Std_Alpha * Std_Alpha; + CZiced_tail += CZ_a2 * Std_Alpha * Std_Alpha; } } - CZ += CZ_a2 * Alpha * Alpha; + CZ_a2_save = CZ_a2 * Std_Alpha * Std_Alpha; + CZ += CZ_a2_save; break; } case CZ_a3_flag: @@ -278,13 +320,14 @@ void uiuc_coef_lift() CZ_a3 = uiuc_ice_filter(CZ_a3_clean,kCZ_a3); if (beta_model) { - CZclean_wing += CZ_a3_clean * Alpha * Alpha * Alpha; - CZclean_tail += CZ_a3_clean * Alpha * Alpha * Alpha; - CZiced_wing += CZ_a3 * Alpha * Alpha * Alpha; - CZiced_tail += CZ_a3 * Alpha * Alpha * Alpha; + CZclean_wing += CZ_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha; + CZclean_tail += CZ_a3_clean * Std_Alpha * Std_Alpha * Std_Alpha; + CZiced_wing += CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha; + CZiced_tail += CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha; } } - CZ += CZ_a3 * Alpha * Alpha * Alpha; + CZ_a3_save = CZ_a3 * Std_Alpha * Std_Alpha * Std_Alpha; + CZ += CZ_a3_save; break; } case CZ_adot_flag: @@ -294,15 +337,16 @@ void uiuc_coef_lift() CZ_adot = uiuc_ice_filter(CZ_adot_clean,kCZ_adot); if (beta_model) { - CZclean_wing += CZ_adot_clean * Alpha_dot * cbar_2U; - CZclean_tail += CZ_adot_clean * Alpha_dot * ch_2U; - CZiced_wing += CZ_adot * Alpha_dot * cbar_2U; - CZiced_tail += CZ_adot * Alpha_dot * ch_2U; + CZclean_wing += CZ_adot_clean * Std_Alpha_dot * cbar_2U; + CZclean_tail += CZ_adot_clean * Std_Alpha_dot * ch_2U; + CZiced_wing += CZ_adot * Std_Alpha_dot * cbar_2U; + CZiced_tail += CZ_adot * Std_Alpha_dot * ch_2U; } } /* CZ_adot must be mulitplied by cbar/2U (see Roskam Control book, Part 1, pg. 147) */ - CZ += CZ_adot * Alpha_dot * cbar_2U; + CZ_adot_save = CZ_adot * Std_Alpha_dot * cbar_2U; + CZ += CZ_adot_save; break; } case CZ_q_flag: @@ -320,7 +364,8 @@ void uiuc_coef_lift() } /* CZ_q must be mulitplied by cbar/2U (see Roskam Control book, Part 1, pg. 147) */ - CZ += CZ_q * Q_body * cbar_2U; + CZ_q_save = CZ_q * Q_body * cbar_2U; + CZ += CZ_q_save; break; } case CZ_de_flag: @@ -336,7 +381,8 @@ void uiuc_coef_lift() CZiced_tail += CZ_de * elevator; } } - CZ += CZ_de * elevator; + CZ_de_save = CZ_de * elevator; + CZ += CZ_de_save; break; } case CZ_deb2_flag: @@ -346,13 +392,14 @@ void uiuc_coef_lift() CZ_deb2 = uiuc_ice_filter(CZ_deb2_clean,kCZ_deb2); if (beta_model) { - CZclean_wing += CZ_deb2_clean * elevator * Beta * Beta; - CZclean_tail += CZ_deb2_clean * elevator * Beta * Beta; - CZiced_wing += CZ_deb2 * elevator * Beta * Beta; - CZiced_tail += CZ_deb2 * elevator * Beta * Beta; + CZclean_wing += CZ_deb2_clean * elevator * Std_Beta * Std_Beta; + CZclean_tail += CZ_deb2_clean * elevator * Std_Beta * Std_Beta; + CZiced_wing += CZ_deb2 * elevator * Std_Beta * Std_Beta; + CZiced_tail += CZ_deb2 * elevator * Std_Beta * Std_Beta; } } - CZ += CZ_deb2 * elevator * Beta * Beta; + CZ_deb2_save = CZ_deb2 * elevator * Std_Beta * Std_Beta; + CZ += CZ_deb2_save; break; } case CZ_df_flag: @@ -362,13 +409,14 @@ void uiuc_coef_lift() CZ_df = uiuc_ice_filter(CZ_df_clean,kCZ_df); if (beta_model) { - CZclean_wing += CZ_df_clean * flap; - CZclean_tail += CZ_df_clean * flap; - CZiced_wing += CZ_df * flap; - CZiced_tail += CZ_df * flap; + CZclean_wing += CZ_df_clean * flap_pos; + CZclean_tail += CZ_df_clean * flap_pos; + CZiced_wing += CZ_df * flap_pos; + CZiced_tail += CZ_df * flap_pos; } } - CZ += CZ_df * flap; + CZ_df_save = CZ_df * flap_pos; + CZ += CZ_df_save; break; } case CZ_adf_flag: @@ -378,13 +426,105 @@ void uiuc_coef_lift() CZ_adf = uiuc_ice_filter(CZ_adf_clean,kCZ_adf); if (beta_model) { - CZclean_wing += CZ_adf_clean * Alpha * flap; - CZclean_tail += CZ_adf_clean * Alpha * flap; - CZiced_wing += CZ_adf * Alpha * flap; - CZiced_tail += CZ_adf * Alpha * flap; + CZclean_wing += CZ_adf_clean * Std_Alpha * flap_pos; + CZclean_tail += CZ_adf_clean * Std_Alpha * flap_pos; + CZiced_wing += CZ_adf * Std_Alpha * flap_pos; + CZiced_tail += CZ_adf * Std_Alpha * flap_pos; } } - CZ += CZ_adf * Alpha * flap; + CZ_adf_save = CZ_adf * Std_Alpha * flap_pos; + CZ += CZ_adf_save; + break; + } + case CZfa_flag: + { + CZfaI = uiuc_1Dinterpolation(CZfa_aArray, + CZfa_CZArray, + CZfa_nAlpha, + Std_Alpha); + CZ += CZfaI; + break; + } + case CZfabetaf_flag: + { + if (CZfabetaf_nice == 1) + CZfabetafI = uiuc_3Dinterp_quick(CZfabetaf_fArray, + CZfabetaf_aArray_nice, + CZfabetaf_bArray_nice, + CZfabetaf_CZArray, + CZfabetaf_na_nice, + CZfabetaf_nb_nice, + CZfabetaf_nf, + flap_pos, + Std_Alpha, + Std_Beta); + else + CZfabetafI = uiuc_3Dinterpolation(CZfabetaf_fArray, + CZfabetaf_aArray, + CZfabetaf_betaArray, + CZfabetaf_CZArray, + CZfabetaf_nAlphaArray, + CZfabetaf_nbeta, + CZfabetaf_nf, + flap_pos, + Std_Alpha, + Std_Beta); + CZ += CZfabetafI; + break; + } + case CZfadef_flag: + { + if (CZfadef_nice == 1) + CZfadefI = uiuc_3Dinterp_quick(CZfadef_fArray, + CZfadef_aArray_nice, + CZfadef_deArray_nice, + CZfadef_CZArray, + CZfadef_na_nice, + CZfadef_nde_nice, + CZfadef_nf, + flap_pos, + Std_Alpha, + elevator); + else + CZfadefI = uiuc_3Dinterpolation(CZfadef_fArray, + CZfadef_aArray, + CZfadef_deArray, + CZfadef_CZArray, + CZfadef_nAlphaArray, + CZfadef_nde, + CZfadef_nf, + flap_pos, + Std_Alpha, + elevator); + CZ += CZfadefI; + break; + } + case CZfaqf_flag: + { + q_nondim = Q_body * cbar_2U; + if (CZfaqf_nice == 1) + CZfaqfI = uiuc_3Dinterp_quick(CZfaqf_fArray, + CZfaqf_aArray_nice, + CZfaqf_qArray_nice, + CZfaqf_CZArray, + CZfaqf_na_nice, + CZfaqf_nq_nice, + CZfaqf_nf, + flap_pos, + Std_Alpha, + q_nondim); + else + CZfaqfI = uiuc_3Dinterpolation(CZfaqf_fArray, + CZfaqf_aArray, + CZfaqf_qArray, + CZfaqf_CZArray, + CZfaqf_nAlphaArray, + CZfaqf_nq, + CZfaqf_nf, + flap_pos, + Std_Alpha, + q_nondim); + CZ += CZfaqfI; break; } };