X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FUIUCModel%2Fuiuc_coef_pitch.cpp;h=613261d4b3379f2dc83aa2aa42e642f15c0e13ae;hb=a6db6d89ff41a619569e6433409e8bf62ff98499;hp=7c35bd978b0b95f4961642cfbf3aa3b85a50a1cf;hpb=517d111c5cb8da39af6a183ae90ce06cca9cc832;p=flightgear.git diff --git a/src/FDM/UIUCModel/uiuc_coef_pitch.cpp b/src/FDM/UIUCModel/uiuc_coef_pitch.cpp index 7c35bd978..613261d4b 100644 --- a/src/FDM/UIUCModel/uiuc_coef_pitch.cpp +++ b/src/FDM/UIUCModel/uiuc_coef_pitch.cpp @@ -19,11 +19,23 @@ ---------------------------------------------------------------------- HISTORY: 04/15/2000 initial release + 10/25/2001 (RD) Added new variables needed for the non- + linear Twin Otter model at zero flaps + (Cmfxxf0) + 11/12/2001 (RD) Added new variables needed for the non- + linear Twin Otter model with flaps + (Cmfxxf). 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 +62,8 @@ CALLS TO: uiuc_1Dinterpolation uiuc_2Dinterpolation uiuc_ice_filter + uiuc_3Dinterpolation + uiuc_3Dinterp_quick ---------------------------------------------------------------------- @@ -66,8 +80,7 @@ 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. **********************************************************************/ @@ -79,6 +92,8 @@ void uiuc_coef_pitch() string linetoken1; string linetoken2; stack command_list; + + double q_nondim; command_list = aeroPitchParts -> getCommands(); @@ -95,7 +110,8 @@ void uiuc_coef_pitch() { Cmo = uiuc_ice_filter(Cmo_clean,kCmo); } - Cm += Cmo; + Cmo_save = Cmo; + Cm += Cmo_save; break; } case Cm_a_flag: @@ -104,7 +120,8 @@ void uiuc_coef_pitch() { Cm_a = uiuc_ice_filter(Cm_a_clean,kCm_a); } - Cm += Cm_a * Alpha; + Cm_a_save = Cm_a * Std_Alpha; + Cm += Cm_a_save; break; } case Cm_a2_flag: @@ -113,7 +130,8 @@ void uiuc_coef_pitch() { Cm_a2 = uiuc_ice_filter(Cm_a2_clean,kCm_a2); } - Cm += Cm_a2 * Alpha * Alpha; + Cm_a2_save = Cm_a2 * Std_Alpha * Std_Alpha; + Cm += Cm_a2_save; break; } case Cm_adot_flag: @@ -124,7 +142,15 @@ void uiuc_coef_pitch() } /* Cm_adot must be mulitplied by cbar/2U (see Roskam Control book, Part 1, pg. 147) */ - Cm += Cm_adot * Alpha_dot * cbar_2U; + Cm_adot_save = Cm_adot * Std_Alpha_dot * cbar_2U; + if (eta_q_Cm_adot_fac) + { + Cm += Cm_adot_save * eta_q_Cm_adot_fac; + } + else + { + Cm += Cm_adot_save; + } break; } case Cm_q_flag: @@ -135,12 +161,21 @@ void uiuc_coef_pitch() } /* Cm_q must be mulitplied by cbar/2U (see Roskam Control book, Part 1, pg. 147) */ - Cm += Cm_q * Q_body * cbar_2U; + Cm_q_save = Cm_q * Q_body * cbar_2U; + if (eta_q_Cm_q_fac) + { + Cm += Cm_q_save * eta_q_Cm_q_fac; + } + else + { + Cm += Cm_q_save; + } break; } case Cm_ih_flag: { - Cm += Cm_ih * ih; + Cm_ih_save = Cm_ih * ih; + Cm += Cm_ih_save; break; } case Cm_de_flag: @@ -149,7 +184,15 @@ void uiuc_coef_pitch() { Cm_de = uiuc_ice_filter(Cm_de_clean,kCm_de); } - Cm += Cm_de * elevator; + Cm_de_save = Cm_de * elevator; + if (eta_q_Cm_de_fac) + { + Cm += Cm_de_save * eta_q_Cm_de_fac; + } + else + { + Cm += Cm_de_save; + } break; } case Cm_b2_flag: @@ -158,7 +201,8 @@ void uiuc_coef_pitch() { Cm_b2 = uiuc_ice_filter(Cm_b2_clean,kCm_b2); } - Cm += Cm_b2 * Beta * Beta; + Cm_b2_save = Cm_b2 * Std_Beta * Std_Beta; + Cm += Cm_b2_save; break; } case Cm_r_flag: @@ -167,7 +211,8 @@ void uiuc_coef_pitch() { Cm_r = uiuc_ice_filter(Cm_r_clean,kCm_r); } - Cm += Cm_r * R_body * b_2U; + Cm_r_save = Cm_r * R_body * b_2U; + Cm += Cm_r_save; break; } case Cm_df_flag: @@ -176,7 +221,20 @@ void uiuc_coef_pitch() { Cm_df = uiuc_ice_filter(Cm_df_clean,kCm_df); } - Cm += Cm_df * flap; + Cm_df_save = Cm_df * flap_pos; + Cm += Cm_df_save; + break; + } + case Cm_ds_flag: + { + Cm_ds_save = Cm_ds * spoiler_pos; + Cm += Cm_ds_save; + break; + } + case Cm_dg_flag: + { + Cm_dg_save = Cm_dg * gear_pos_norm; + Cm += Cm_dg_save; break; } case Cmfa_flag: @@ -184,20 +242,58 @@ void uiuc_coef_pitch() CmfaI = uiuc_1Dinterpolation(Cmfa_aArray, Cmfa_CmArray, Cmfa_nAlpha, - Alpha); + Std_Alpha); Cm += CmfaI; break; } case Cmfade_flag: { - CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray, - Cmfade_deArray, - Cmfade_CmArray, - Cmfade_nAlphaArray, - Cmfade_nde, - Alpha, - elevator); - Cm += CmfadeI; + if(b_downwashMode) + { + // compute the induced velocity on the tail to account for tail downwash + switch(downwashMode) + { + case 100: + if (V_rel_wind < dyn_on_speed) + { + alphaTail = Std_Alpha; + } + else + { + gammaWing = V_rel_wind * Sw * CL / (2.0 * bw); + // printf("gammaWing = %.4f\n", (gammaWing)); + downwash = downwashCoef * gammaWing; + downwashAngle = atan(downwash/V_rel_wind); + alphaTail = Std_Alpha - downwashAngle; + } + CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray, + Cmfade_deArray, + Cmfade_CmArray, + Cmfade_nAlphaArray, + Cmfade_nde, + alphaTail, + elevator); + break; + } + } + else + { + CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray, + Cmfade_deArray, + Cmfade_CmArray, + Cmfade_nAlphaArray, + Cmfade_nde, + Std_Alpha, + elevator); + } + if (eta_q_Cmfade_fac) + { + Cm += CmfadeI * eta_q_Cmfade_fac; + } + else + { + Cm += CmfadeI; + } break; } case Cmfdf_flag: @@ -205,7 +301,7 @@ void uiuc_coef_pitch() CmfdfI = uiuc_1Dinterpolation(Cmfdf_dfArray, Cmfdf_CmArray, Cmfdf_ndf, - flap); + flap_pos); Cm += CmfdfI; break; } @@ -216,11 +312,93 @@ void uiuc_coef_pitch() Cmfadf_CmArray, Cmfadf_nAlphaArray, Cmfadf_ndf, - Alpha, - flap); + Std_Alpha, + flap_pos); Cm += CmfadfI; break; } + case Cmfabetaf_flag: + { + if (Cmfabetaf_nice == 1) + CmfabetafI = uiuc_3Dinterp_quick(Cmfabetaf_fArray, + Cmfabetaf_aArray_nice, + Cmfabetaf_bArray_nice, + Cmfabetaf_CmArray, + Cmfabetaf_na_nice, + Cmfabetaf_nb_nice, + Cmfabetaf_nf, + flap_pos, + Std_Alpha, + Std_Beta); + else + CmfabetafI = uiuc_3Dinterpolation(Cmfabetaf_fArray, + Cmfabetaf_aArray, + Cmfabetaf_betaArray, + Cmfabetaf_CmArray, + Cmfabetaf_nAlphaArray, + Cmfabetaf_nbeta, + Cmfabetaf_nf, + flap_pos, + Std_Alpha, + Std_Beta); + Cm += CmfabetafI; + break; + } + case Cmfadef_flag: + { + if (Cmfadef_nice == 1) + CmfadefI = uiuc_3Dinterp_quick(Cmfadef_fArray, + Cmfadef_aArray_nice, + Cmfadef_deArray_nice, + Cmfadef_CmArray, + Cmfadef_na_nice, + Cmfadef_nde_nice, + Cmfadef_nf, + flap_pos, + Std_Alpha, + elevator); + else + CmfadefI = uiuc_3Dinterpolation(Cmfadef_fArray, + Cmfadef_aArray, + Cmfadef_deArray, + Cmfadef_CmArray, + Cmfadef_nAlphaArray, + Cmfadef_nde, + Cmfadef_nf, + flap_pos, + Std_Alpha, + elevator); + Cm += CmfadefI; + break; + } + case Cmfaqf_flag: + { + q_nondim = Q_body * cbar_2U; + if (Cmfaqf_nice == 1) + CmfaqfI = uiuc_3Dinterp_quick(Cmfaqf_fArray, + Cmfaqf_aArray_nice, + Cmfaqf_qArray_nice, + Cmfaqf_CmArray, + Cmfaqf_na_nice, + Cmfaqf_nq_nice, + Cmfaqf_nf, + flap_pos, + Std_Alpha, + q_nondim); + else + CmfaqfI = uiuc_3Dinterpolation(Cmfaqf_fArray, + Cmfaqf_aArray, + Cmfaqf_qArray, + Cmfaqf_CmArray, + Cmfaqf_nAlphaArray, + Cmfaqf_nq, + Cmfaqf_nf, + flap_pos, + Std_Alpha, + q_nondim); + Cm += CmfaqfI; + break; + } }; } // end Cm map