From: curt Date: Wed, 11 Sep 2002 16:45:47 +0000 (+0000) Subject: Updates from Rob Deters. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=1784ad74b6de724606910d5605e4257a853d759d;p=flightgear.git Updates from Rob Deters. --- diff --git a/src/FDM/UIUCModel/uiuc_aircraft.h b/src/FDM/UIUCModel/uiuc_aircraft.h index 1e95f81aa..ccee2d052 100644 --- a/src/FDM/UIUCModel/uiuc_aircraft.h +++ b/src/FDM/UIUCModel/uiuc_aircraft.h @@ -139,7 +139,7 @@ #include #include "uiuc_parsefile.h" -//#include "uiuc_flapdata.h" +// #include "uiuc_flapdata.h" SG_USING_STD(map); #if !defined (SG_HAVE_NATIVE_SGI_COMPILERS) @@ -2258,7 +2258,7 @@ struct AIRCRAFT double F_X_aero_flapper, F_Z_aero_flapper; #define F_X_aero_flapper aircraft_->F_X_aero_flapper #define F_Z_aero_flapper aircraft_->F_Z_aero_flapper - */ + /* Other variables (not tokens) =================================*/ double convert_x, convert_y, convert_z; diff --git a/src/FDM/UIUCModel/uiuc_coef_pitch.cpp b/src/FDM/UIUCModel/uiuc_coef_pitch.cpp index 8368e1771..5a77a84ff 100644 --- a/src/FDM/UIUCModel/uiuc_coef_pitch.cpp +++ b/src/FDM/UIUCModel/uiuc_coef_pitch.cpp @@ -144,7 +144,15 @@ void uiuc_coef_pitch() /* Cm_adot must be mulitplied by cbar/2U (see Roskam Control book, Part 1, pg. 147) */ Cm_adot_save = Cm_adot * Alpha_dot * cbar_2U; - Cm += Cm_adot * Alpha_dot * cbar_2U; + //Cm += Cm_adot * 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: @@ -156,7 +164,15 @@ void uiuc_coef_pitch() /* Cm_q must be mulitplied by cbar/2U (see Roskam Control book, Part 1, pg. 147) */ Cm_q_save = Cm_q * Q_body * cbar_2U; - Cm += Cm_q * Q_body * cbar_2U; + // Cm += 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: @@ -216,14 +232,28 @@ void uiuc_coef_pitch() } case Cmfade_flag: { - CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray, + // compute the induced velocity on the tail to account for tail downwash + gamma_wing = V_rel_wind * Sw * CL / (2.0 * bw); + w_coef = 0.036; + w_induced = w_coef * gamma_wing; + downwash_angle = atan(w_induced/V_rel_wind); + AlphaTail = Alpha - downwash_angle; + CmfadeI = uiuc_2Dinterpolation(Cmfade_aArray, Cmfade_deArray, Cmfade_CmArray, Cmfade_nAlphaArray, Cmfade_nde, - Alpha, + AlphaTail, elevator); - Cm += CmfadeI; + // Cm += CmfadeI; + if (eta_q_Cmfade_fac) + { + Cm += CmfadeI * eta_q_Cmfade_fac; + } + else + { + Cm += CmfadeI; + } break; } case Cmfdf_flag: diff --git a/src/FDM/UIUCModel/uiuc_coef_roll.cpp b/src/FDM/UIUCModel/uiuc_coef_roll.cpp index 57026aaaa..61ccf18e4 100644 --- a/src/FDM/UIUCModel/uiuc_coef_roll.cpp +++ b/src/FDM/UIUCModel/uiuc_coef_roll.cpp @@ -124,7 +124,15 @@ void uiuc_coef_roll() Cl_beta = uiuc_ice_filter(Cl_beta_clean,kCl_beta); } Cl_beta_save = Cl_beta * Beta; - Cl += Cl_beta * Beta; + // Cl += Cl_beta * Beta; + if (eta_q_Cl_beta_fac) + { + Cl += Cl_beta_save * eta_q_Cl_beta_fac; + } + else + { + Cl += Cl_beta_save; + } break; } case Cl_p_flag: @@ -136,7 +144,15 @@ void uiuc_coef_roll() /* Cl_p must be mulitplied by b/2U (see Roskam Control book, Part 1, pg. 147) */ Cl_p_save = Cl_p * P_body * b_2U; - Cl += Cl_p * P_body * b_2U; + // Cl += Cl_p * P_body * b_2U; + if (eta_q_Cl_p_fac) + { + Cl += Cl_p_save * eta_q_Cl_p_fac; + } + else + { + Cl += Cl_p_save; + } break; } case Cl_r_flag: @@ -148,7 +164,15 @@ void uiuc_coef_roll() /* Cl_r must be mulitplied by b/2U (see Roskam Control book, Part 1, pg. 147) */ Cl_r_save = Cl_r * R_body * b_2U; - Cl += Cl_r * R_body * b_2U; + // Cl += Cl_r * R_body * b_2U; + if (eta_q_Cl_r_fac) + { + Cl += Cl_r_save * eta_q_Cl_r_fac; + } + else + { + Cl += Cl_r_save; + } break; } case Cl_da_flag: @@ -168,7 +192,15 @@ void uiuc_coef_roll() Cl_dr = uiuc_ice_filter(Cl_dr_clean,kCl_dr); } Cl_dr_save = Cl_dr * rudder; - Cl += Cl_dr * rudder; + // Cl += Cl_dr * rudder; + if (eta_q_Cl_dr_fac) + { + Cl += Cl_dr_save * eta_q_Cl_dr_fac; + } + else + { + Cl += Cl_dr_save; + } break; } case Cl_daa_flag: diff --git a/src/FDM/UIUCModel/uiuc_coef_sideforce.cpp b/src/FDM/UIUCModel/uiuc_coef_sideforce.cpp index dc30657f5..46c44f5dd 100644 --- a/src/FDM/UIUCModel/uiuc_coef_sideforce.cpp +++ b/src/FDM/UIUCModel/uiuc_coef_sideforce.cpp @@ -124,7 +124,15 @@ void uiuc_coef_sideforce() CY_beta = uiuc_ice_filter(CY_beta_clean,kCY_beta); } CY_beta_save = CY_beta * Beta; - CY += CY_beta * Beta; + // CY += CY_beta * Beta; + if (eta_q_CY_beta_fac) + { + CY += CY_beta_save * eta_q_CY_beta_fac; + } + else + { + CY += CY_beta_save; + } break; } case CY_p_flag: @@ -136,7 +144,15 @@ void uiuc_coef_sideforce() /* CY_p must be mulitplied by b/2U (see Roskam Control book, Part 1, pg. 147) */ CY_p_save = CY_p * P_body * b_2U; - CY += CY_p * P_body * b_2U; + // CY += CY_p * P_body * b_2U; + if (eta_q_CY_p_fac) + { + CY += CY_p_save * eta_q_CY_p_fac; + } + else + { + CY += CY_p_save; + } break; } case CY_r_flag: @@ -148,7 +164,15 @@ void uiuc_coef_sideforce() /* CY_r must be mulitplied by b/2U (see Roskam Control book, Part 1, pg. 147) */ CY_r_save = CY_r * R_body * b_2U; - CY += CY_r * R_body * b_2U; + // CY += CY_r * R_body * b_2U; + if (eta_q_CY_r_fac) + { + CY += CY_r_save * eta_q_CY_r_fac; + } + else + { + CY += CY_r_save; + } break; } case CY_da_flag: @@ -168,7 +192,15 @@ void uiuc_coef_sideforce() CY_dr = uiuc_ice_filter(CY_dr_clean,kCY_dr); } CY_dr_save = CY_dr * rudder; - CY += CY_dr * rudder; + // CY += CY_dr * rudder; + if (eta_q_CY_dr_fac) + { + CY += CY_dr_save * eta_q_CY_dr_fac; + } + else + { + CY += CY_dr_save; + } break; } case CY_dra_flag: diff --git a/src/FDM/UIUCModel/uiuc_coef_yaw.cpp b/src/FDM/UIUCModel/uiuc_coef_yaw.cpp index 5753584e6..3e325b12c 100644 --- a/src/FDM/UIUCModel/uiuc_coef_yaw.cpp +++ b/src/FDM/UIUCModel/uiuc_coef_yaw.cpp @@ -124,7 +124,15 @@ void uiuc_coef_yaw() Cn_beta = uiuc_ice_filter(Cn_beta_clean,kCn_beta); } Cn_beta_save = Cn_beta * Beta; - Cn += Cn_beta * Beta; + // Cn += Cn_beta * Beta; + if (eta_q_Cn_beta_fac) + { + Cn += Cn_beta_save * eta_q_Cn_beta_fac; + } + else + { + Cn += Cn_beta_save; + } break; } case Cn_p_flag: @@ -136,7 +144,15 @@ void uiuc_coef_yaw() /* Cn_p must be mulitplied by b/2U (see Roskam Control book, Part 1, pg. 147) */ Cn_p_save = Cn_p * P_body * b_2U; - Cn += Cn_p * P_body * b_2U; + // Cn += Cn_p * P_body * b_2U; + if (eta_q_Cn_p_fac) + { + Cn += Cn_p_save * eta_q_Cn_p_fac; + } + else + { + Cn += Cn_p_save; + } break; } case Cn_r_flag: @@ -148,7 +164,15 @@ void uiuc_coef_yaw() /* Cn_r must be mulitplied by b/2U (see Roskam Control book, Part 1, pg. 147) */ Cn_r_save = Cn_r * R_body * b_2U; - Cn += Cn_r * R_body * b_2U; + // Cn += Cn_r * R_body * b_2U; + if (eta_q_Cn_r_fac) + { + Cn += Cn_r_save * eta_q_Cn_r_fac; + } + else + { + Cn += Cn_r_save; + } break; } case Cn_da_flag: @@ -168,7 +192,15 @@ void uiuc_coef_yaw() Cn_dr = uiuc_ice_filter(Cn_dr_clean,kCn_dr); } Cn_dr_save = Cn_dr * rudder; - Cn += Cn_dr * rudder; + // Cn += Cn_dr * rudder; + if (eta_q_Cn_dr_fac) + { + Cn += Cn_dr_save * eta_q_Cn_dr_fac; + } + else + { + Cn += Cn_dr_save; + } break; } case Cn_q_flag: diff --git a/src/FDM/UIUCModel/uiuc_coefficients.cpp b/src/FDM/UIUCModel/uiuc_coefficients.cpp index 9560a4e61..dcc800c2b 100644 --- a/src/FDM/UIUCModel/uiuc_coefficients.cpp +++ b/src/FDM/UIUCModel/uiuc_coefficients.cpp @@ -117,6 +117,7 @@ void uiuc_coefficients(double dt) { cbar_2U = cbar / (2.0 * V_rel_wind); b_2U = bw / (2.0 * V_rel_wind); + // ch is the horizontal tail chord ch_2U = ch / (2.0 * V_rel_wind); } else if (use_dyn_on_speed_curve1) @@ -125,12 +126,14 @@ void uiuc_coefficients(double dt) cbar_2U = cbar / (2.0 * V_rel_wind_dum); b_2U = bw / (2.0 * V_rel_wind_dum); ch_2U = ch / (2.0 * V_rel_wind_dum); + Alpha_dot = 0.0; } else { - cbar_2U = 0.0; - b_2U = 0.0; - ch_2U = 0.0; + cbar_2U = 0.0; + b_2U = 0.0; + ch_2U = 0.0; + Alpha_dot = 0.0; } } else if(use_abs_U_body_2U) // use absolute(U_body) @@ -147,12 +150,14 @@ void uiuc_coefficients(double dt) cbar_2U = cbar / (2.0 * U_body_dum); b_2U = bw / (2.0 * U_body_dum); ch_2U = ch / (2.0 * U_body_dum); + Alpha_dot = 0.0; } else { - cbar_2U = 0.0; - b_2U = 0.0; - ch_2U = 0.0; + cbar_2U = 0.0; + b_2U = 0.0; + ch_2U = 0.0; + Alpha_dot = 0.0; } } else // use U_body @@ -169,16 +174,26 @@ void uiuc_coefficients(double dt) cbar_2U = cbar / (2.0 * U_body_dum); b_2U = bw / (2.0 * U_body_dum); ch_2U = ch / (2.0 * U_body_dum); + Alpha_dot = 0.0; beta_flow_clean_tail = cbar_2U; } else { - cbar_2U = 0.0; - b_2U = 0.0; - ch_2U = 0.0; + cbar_2U = 0.0; + b_2U = 0.0; + ch_2U = 0.0; + Alpha_dot = 0.0; } } + // check if speed is sufficient to "trust" Alpha_dot value + if (use_Alpha_dot_on_speed) + { + if (V_rel_wind < Alpha_dot_on_speed) + Alpha_dot = 0.0; + } + + // check to see if icing model engaged if (ice_model) { diff --git a/src/FDM/UIUCModel/uiuc_engine.cpp b/src/FDM/UIUCModel/uiuc_engine.cpp index 612bee1e4..7375cdf3c 100644 --- a/src/FDM/UIUCModel/uiuc_engine.cpp +++ b/src/FDM/UIUCModel/uiuc_engine.cpp @@ -123,6 +123,38 @@ void uiuc_engine() F_X_engine = Throttle[3] * simpleSingleMaxThrust; break; } + case simpleSingleModel_flag: + { + /* simple model based on Hepperle's equation + * exponent dtdvvt was computed in uiuc_menu.cpp */ + F_X_engine = Throttle[3] * t_v0 * (1 - pow((V_rel_wind/v_t0),dtdvvt)); + if (slipstream_effects) { + tc = F_X_engine/(Dynamic_pressure * LS_PI * propDia * propDia / 4); + w_induced = 0.5 * V_rel_wind * (-1 + pow((1+tc),.5)); + eta_q = (2* w_induced + V_rel_wind)*(2* w_induced + V_rel_wind)/(V_rel_wind * V_rel_wind); + /* add in a die-off function so that eta falls off w/ alfa and beta */ + eta_q = Cos_alpha * Cos_alpha * Cos_beta * Cos_beta * eta_q; + /* determine the eta_q values for the respective coefficients */ + if (eta_q_Cm_q_fac) {eta_q_Cm_q *= eta_q * eta_q_Cm_q_fac;} + if (eta_q_Cm_adot_fac) {eta_q_Cm_adot *= eta_q * eta_q_Cm_adot_fac;} + if (eta_q_Cmfade_fac) {eta_q_Cmfade *= eta_q * eta_q_Cmfade_fac;} + if (eta_q_Cl_beta_fac) {eta_q_Cl_beta *= eta_q * eta_q_Cl_beta_fac;} + if (eta_q_Cl_p_fac) {eta_q_Cl_p *= eta_q * eta_q_Cl_p_fac;} + if (eta_q_Cl_r_fac) {eta_q_Cl_r *= eta_q * eta_q_Cl_r_fac;} + if (eta_q_Cl_dr_fac) {eta_q_Cl_dr *= eta_q * eta_q_Cl_dr_fac;} + if (eta_q_CY_beta_fac) {eta_q_CY_beta *= eta_q * eta_q_CY_beta_fac;} + if (eta_q_CY_p_fac) {eta_q_CY_p *= eta_q * eta_q_CY_p_fac;} + if (eta_q_CY_r_fac) {eta_q_CY_r *= eta_q * eta_q_CY_r_fac;} + if (eta_q_CY_dr_fac) {eta_q_CY_dr *= eta_q * eta_q_CY_dr_fac;} + if (eta_q_Cn_beta_fac) {eta_q_Cn_beta *= eta_q * eta_q_Cn_beta_fac;} + if (eta_q_Cn_p_fac) {eta_q_Cn_p *= eta_q * eta_q_Cn_p_fac;} + if (eta_q_Cn_r_fac) {eta_q_Cn_r *= eta_q * eta_q_Cn_r_fac;} + if (eta_q_Cn_dr_fac) {eta_q_Cn_dr *= eta_q * eta_q_Cn_dr_fac;} + } + /* Need engineOmega for gyroscopic moments */ + engineOmega = minOmega + Throttle[3] * (maxOmega - minOmega); + break; + } case c172_flag: { //c172 engine lines ... looks like 0.83 is just a thrust increase diff --git a/src/FDM/UIUCModel/uiuc_engine.h b/src/FDM/UIUCModel/uiuc_engine.h index f24dd3c19..c7f398ca3 100644 --- a/src/FDM/UIUCModel/uiuc_engine.h +++ b/src/FDM/UIUCModel/uiuc_engine.h @@ -5,6 +5,7 @@ #include "uiuc_1Dinterpolation.h" #include #include +#include #ifdef __cplusplus extern "C" { diff --git a/src/FDM/UIUCModel/uiuc_map_engine.cpp b/src/FDM/UIUCModel/uiuc_map_engine.cpp index 29dd376bc..3d4927dee 100644 --- a/src/FDM/UIUCModel/uiuc_map_engine.cpp +++ b/src/FDM/UIUCModel/uiuc_map_engine.cpp @@ -18,6 +18,7 @@ HISTORY: 04/08/2000 initial release 06/18/2001 (RD) Added Throttle_pct_input + 08/29/2002 (MS) Added simpleSingleModel ---------------------------------------------------------------------- @@ -71,13 +72,36 @@ void uiuc_map_engine() { engine_map["simpleSingle"] = simpleSingle_flag ; + engine_map["simpleSingleModel"] = simpleSingleModel_flag ; engine_map["c172"] = c172_flag ; engine_map["cherokee"] = cherokee_flag ; engine_map["Throttle_pct_input"]= Throttle_pct_input_flag ; - engine_map["forcemom"] = forcemom_flag ; - engine_map["Xp_input"] = Xp_input_flag ; - engine_map["Zp_input"] = Zp_input_flag ; - engine_map["Mp_input"] = Mp_input_flag ; + engine_map["gyroForce_Q_body"] = gyroForce_Q_body_flag ; + engine_map["gyroForce_R_body"] = gyroForce_R_body_flag ; + engine_map["omega"] = omega_flag ; + engine_map["omegaRPM"] = omegaRPM_flag ; + engine_map["polarInertia"] = polarInertia_flag ; + engine_map["slipstream_effects"] = slipstream_effects_flag ; + engine_map["propDia"] = propDia_flag ; + engine_map["eta_q_Cm_q"] = eta_q_Cm_q_flag ; + engine_map["eta_q_Cm_adot"] = eta_q_Cm_adot_flag ; + engine_map["eta_q_Cmfade"] = eta_q_Cmfade_flag ; + engine_map["eta_q_Cl_beta"] = eta_q_Cl_beta_flag ; + engine_map["eta_q_Cl_p"] = eta_q_Cl_p_flag ; + engine_map["eta_q_Cl_r"] = eta_q_Cl_r_flag ; + engine_map["eta_q_Cl_dr"] = eta_q_Cl_dr_flag ; + engine_map["eta_q_CY_beta"] = eta_q_CY_beta_flag ; + engine_map["eta_q_CY_p"] = eta_q_CY_p_flag ; + engine_map["eta_q_CY_r"] = eta_q_CY_r_flag ; + engine_map["eta_q_CY_dr"] = eta_q_CY_dr_flag ; + engine_map["eta_q_Cn_beta"] = eta_q_Cn_beta_flag ; + engine_map["eta_q_Cn_p"] = eta_q_Cn_p_flag ; + engine_map["eta_q_Cn_r"] = eta_q_Cn_r_flag ; + engine_map["eta_q_Cn_dr"] = eta_q_Cn_dr_flag ; + engine_map["forcemom"] = forcemom_flag ; + engine_map["Xp_input"] = Xp_input_flag ; + engine_map["Zp_input"] = Zp_input_flag ; + engine_map["Mp_input"] = Mp_input_flag ; } // end uiuc_map_engine.cpp diff --git a/src/FDM/UIUCModel/uiuc_map_init.cpp b/src/FDM/UIUCModel/uiuc_map_init.cpp index abfd0084f..2f99c1375 100644 --- a/src/FDM/UIUCModel/uiuc_map_init.cpp +++ b/src/FDM/UIUCModel/uiuc_map_init.cpp @@ -96,6 +96,7 @@ void uiuc_map_init() init_map["dyn_on_speed"] = dyn_on_speed_flag ; init_map["dyn_on_speed_zero"] = dyn_on_speed_zero_flag ; init_map["use_dyn_on_speed_curve1"] = use_dyn_on_speed_curve1_flag; + init_map["use_Alpha_dot_on_speed"] = use_Alpha_dot_on_speed_flag; init_map["Alpha"] = Alpha_flag ; init_map["Beta"] = Beta_flag ; init_map["U_body"] = U_body_flag ; diff --git a/src/FDM/UIUCModel/uiuc_map_record5.cpp b/src/FDM/UIUCModel/uiuc_map_record5.cpp index c41d74965..881ab9b57 100644 --- a/src/FDM/UIUCModel/uiuc_map_record5.cpp +++ b/src/FDM/UIUCModel/uiuc_map_record5.cpp @@ -122,13 +122,19 @@ void uiuc_map_record5() record_map["M_n_rp"] = M_n_rp_record ; /***********************Flapper Data********************/ - /* record_map["flapper_freq"] = flapper_freq_record ; + record_map["flapper_freq"] = flapper_freq_record ; record_map["flapper_phi"] = flapper_phi_record ; record_map["flapper_phi_deg"] = flapper_phi_deg_record ; record_map["flapper_Lift"] = flapper_Lift_record ; record_map["flapper_Thrust"] = flapper_Thrust_record ; record_map["flapper_Inertia"] = flapper_Inertia_record ; - record_map["flapper_Moment"] = flapper_Moment_record ;*/ + record_map["flapper_Moment"] = flapper_Moment_record ; + + /**************************Debug************************/ + record_map["debug1"] = debug1_record ; + record_map["debug2"] = debug2_record ; + record_map["debug3"] = debug3_record ; + } // end uiuc_map_record5.cpp diff --git a/src/FDM/UIUCModel/uiuc_wrapper.cpp b/src/FDM/UIUCModel/uiuc_wrapper.cpp index 19884721b..ceaa2dad6 100644 --- a/src/FDM/UIUCModel/uiuc_wrapper.cpp +++ b/src/FDM/UIUCModel/uiuc_wrapper.cpp @@ -245,12 +245,12 @@ void uiuc_force_moment(double dt) M_m_aero += -polarInertia * engineOmega * R_body; // ornithopter support - if (flapper_model) - { - F_X_aero += F_X_aero_flapper; - F_Z_aero += F_Z_aero_flapper; - M_m_aero += flapper_Moment; - } + //if (flapper_model) + // { + // F_X_aero += F_X_aero_flapper; + // F_Z_aero += F_Z_aero_flapper; + // M_m_aero += flapper_Moment; + // } // fog field update Fog = 0;