----------------------------------------------------------------------
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 <bsehgal@uiuc.edu>
Jeff Scott <jscott@mail.com>
+ Robert Deters <rdeters@uiuc.edu>
----------------------------------------------------------------------
CALLS TO: uiuc_1Dinterpolation
uiuc_2Dinterpolation
uiuc_ice_filter
+ uiuc_3Dinterpolation
+ uiuc_3Dinterp_quick
----------------------------------------------------------------------
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.
**********************************************************************/
string linetoken1;
string linetoken2;
stack command_list;
+
+ double q_nondim;
command_list = aeroPitchParts -> getCommands();
{
Cmo = uiuc_ice_filter(Cmo_clean,kCmo);
}
- Cm += Cmo;
+ Cmo_save = Cmo;
+ Cm += Cmo_save;
break;
}
case Cm_a_flag:
{
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:
{
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:
}
/* 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:
}
/* 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:
{
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:
{
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:
{
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:
{
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:
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:
CmfdfI = uiuc_1Dinterpolation(Cmfdf_dfArray,
Cmfdf_CmArray,
Cmfdf_ndf,
- flap);
+ flap_pos);
Cm += CmfdfI;
break;
}
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