I have attached some revisions for the UIUCModel and some LaRCsim.
The only thing you should need to check is LaRCsim.cxx. The file
I attached is a revised version of 1.5 and the latest is 1.7. Also,
uiuc_getwind.c and uiuc_getwind.h are no longer in the LaRCsim
directory. They have been moved over to UIUCModel.
//
// $Id$
+#include <math.h>
#include <string.h> // strcmp()
#include <simgear/constants.h>
#include <FDM/LaRCsim/ls_cockpit.h>
#include <FDM/LaRCsim/ls_generic.h>
#include <FDM/LaRCsim/ls_interface.h>
+#include <FDM/LaRCsim/ls_constants.h>
#include <FDM/LaRCsimIC.hxx>
#include <FDM/UIUCModel/uiuc_aircraft.h>
#include <Main/fg_props.hxx>
speed_up = fgGetNode("/sim/speed-up", true);
aero = fgGetNode("/sim/aero", true);
+ uiuc_type = fgGetNode("/sim/uiuc-type", true);
ls_toplevel_init( 0.0, (char *)(aero->getStringValue()) );
}
ls_set_model_dt(dt);
-
- // Initialize our little engine that hopefully might
+
+ // Initialize our little engine that hopefully might
eng.init(dt);
// dcl - in passing dt to init rather than update I am assuming
// that the LaRCsim dt is fixed at one value (yes it is 120hz CLO)
int multiloop = _calc_multiloop(dt);
+ // if flying c172-larcsim, do the following
if ( !strcmp(aero->getStringValue(), "c172") ) {
- // set control inputs
- // cout << "V_calibrated_kts = " << V_calibrated_kts << '\n';
+ // set control inputs
+ // cout << "V_calibrated_kts = " << V_calibrated_kts << '\n';
eng.set_IAS( V_calibrated_kts );
eng.set_Throttle_Lever_Pos( globals->get_controls()->get_throttle( 0 )
* 100.0 );
* dt);
}
- F_X_engine = eng.get_prop_thrust_lbs();
+ F_X_engine = eng.get_prop_thrust_lbs();
// cout << "F_X_engine = " << F_X_engine << '\n';
+ // end c172 if block
+
+ Flap_handle = 30.0 * globals->get_controls()->get_flaps();
}
+ // done with c172-larcsim if-block
double save_alt = 0.0;
}
// copy control positions into the LaRCsim structure
- Lat_control = globals->get_controls()->get_aileron() /
- speed_up->getIntValue();
+ Lat_control = globals->get_controls()->get_aileron() / speed_up->getIntValue();
Long_control = globals->get_controls()->get_elevator();
Long_trim = globals->get_controls()->get_elevator_trim();
- Rudder_pedal = globals->get_controls()->get_rudder() /
- speed_up->getIntValue();
- Flap_handle = 30.0 * globals->get_controls()->get_flaps();
+ Rudder_pedal = globals->get_controls()->get_rudder() / speed_up->getIntValue();
if ( !strcmp(aero->getStringValue(), "c172") ) {
Use_External_Engine = 1;
} else {
- Use_External_Engine = 0;
+ Use_External_Engine = 0;
}
Throttle_pct = globals->get_controls()->get_throttle( 0 ) * 1.0;
fgSetDouble("/engines/engine/cranking", 1);
fgSetDouble("/engines/engine/running", 1);
+ // if flying uiuc, set some properties and over-ride some previous ones
+ if ( !strcmp(aero->getStringValue(), "uiuc")) {
+
+ // surface positions
+ fgSetDouble("/surface-positions/rudder-pos-norm", fgGetDouble("/controls/flight/rudder"));
+ fgSetDouble("/surface-positions/elevator-pos-norm", fgGetDouble("/controls/flight/elevator")); // FIXME: ignoring trim
+ fgSetDouble("/surface-positions/right-aileron-pos-norm", -1 * fgGetDouble("/controls/flight/aileron")); // FIXME: ignoring trim
+ fgSetDouble("/surface-positions/left-aileron-pos-norm", fgGetDouble("/controls/flight/aileron")); // FIXME: ignoring trim
+
+ Flap_handle = flap_max * globals->get_controls()->get_flaps();
+
+ // flaps with transition occuring in uiuc_aerodeflections.cpp
+ if (use_flaps) {
+ fgSetDouble("/surface-positions/flight/flap-pos-norm", flap_pos_pct);
+ }
+
+ // spoilers with transition occurring in uiuc_aerodeflections.cpp
+ if(use_spoilers) {
+ Spoiler_handle = spoiler_max * fgGetDouble("/controls/spoilers");
+ }
+ // gear with transition occurring here in LaRCsim.cxx
+ if (use_gear) {
+ if(fgGetBool("/controls/gear-down")) {
+ Gear_handle = 1.0;
+ }
+ else {
+ Gear_handle = 0.;
+ }
+ // commanded gear is 0 or 1
+ gear_cmd_norm = Gear_handle;
+ // amount gear moves per time step [relative to 1]
+ gear_increment_per_timestep = gear_rate * dt;
+ // determine gear position with respect to gear command
+ if (gear_pos_norm < gear_cmd_norm) {
+ gear_pos_norm += gear_increment_per_timestep;
+ if (gear_pos_norm > gear_cmd_norm)
+ gear_pos_norm = gear_cmd_norm;
+ } else if (gear_pos_norm > gear_cmd_norm) {
+ gear_pos_norm -= gear_increment_per_timestep;
+ if (gear_pos_norm < gear_cmd_norm)
+ gear_pos_norm = gear_cmd_norm;
+ }
+ // set the gear position
+ fgSetDouble("/gear/gear[0]/position-norm", gear_pos_norm);
+ fgSetDouble("/gear/gear[1]/position-norm", gear_pos_norm);
+ fgSetDouble("/gear/gear[2]/position-norm", gear_pos_norm);
+ }
+
+
+ // engine functions (sounds and instruments)
+ // drive the rpm gauge
+ fgSetDouble("/engines/engine/rpm", (globals->get_controls()->get_throttle( 0 ) * 100.0 * 25 ));
+ // manifold air pressure
+ fgSetDouble("/engines/engine/mp-osi", (globals->get_controls()->get_throttle( 0 ) * 100.0 ));
+ // make the engine cranking and running sounds when fgfs starts up
+ fgSetDouble("/engines/engine/cranking", 1);
+ fgSetDouble("/engines/engine/running", 1);
+ if ( !strcmp(uiuc_type->getStringValue(), "uiuc-prop")) {
+ // uiuc prop driven airplane, e.g. Wright Flyer
+ }
+ else if ( !strcmp(uiuc_type->getStringValue(), "uiuc-jet")) {
+ // uiuc jet aircraft, e.g. a4d
+ fgSetDouble("/engines/engine/n1", (75 + (globals->get_controls()->get_throttle( 0 ) * 100.0 )/400));
+ fgSetDouble("/engines/engine/prop-thrust", (4000 + F_X_engine/2));
+ }
+ else if ( !strcmp(uiuc_type->getStringValue(), "uiuc-sailplane")) {
+ // uiuc sailplane, e.g. asw20
+ fgSetDouble("/engines/engine/cranking", 0);
+ // set the wind speed for use in setting wind sound level
+ fgSetDouble("/velocities/V_rel_wind_kts", (V_rel_wind * 1.274));
+ }
+ else if ( !strcmp(uiuc_type->getStringValue(), "uiuc-hangglider")) {
+ // uiuc sailplane, e.g. asw20
+ fgSetDouble("/engines/engine/cranking", 0);
+ }
+ else if ( !strcmp(uiuc_type->getStringValue(), "uiuc-ornithopter")) {
+ // mechanical flapping wings
+ // flapping wings (using seahawk for now)
+ fgSetDouble("/canopy/position-norm", 0);
+ fgSetDouble("/wing-phase/position-norm", sin(flapper_phi - 3 * LS_PI / 2));
+ // fgSetDouble("/wing-phase/position-norm", fgGetDouble("/controls/rudder"));
+ fgSetDouble("/wing-phase/position-deg", flapper_phi*RAD_TO_DEG);
+ fgSetDouble("/wing-phase/position-one", 1);
+ fgSetDouble("/thorax/volume", 0);
+ fgSetDouble("/thorax/rpm", 0);
+ // fgSetDouble("/wing-phase/position-norm", ((1+cos(flapper_phi - LS_PI/2))/2 -.36 ));
+ // fgSetDouble("/thorax/volume", ((1+sin(2*(flapper_phi+LS_PI)))/2));
+ // fgSetDouble("/thorax/rpm", ((1+sin(2*(flapper_phi+LS_PI)))/2));
+ }
+ }
+
+
+ // add Gamma_horiz_deg to properties, mss 021213
+ if (use_gamma_horiz_on_speed) {
+ if (V_rel_wind > gamma_horiz_on_speed) {
+ fgSetDouble("/orientation/Gamma_horiz_deg", (Gamma_horiz_rad * RAD_TO_DEG));
+ }
+ else {
+ fgSetDouble("/orientation/Gamma_horiz_deg", fgGetDouble("/orientation/heading-deg"));
+ }
+ }
+ else {
+ fgSetDouble("/orientation/Gamma_horiz_deg", fgGetDouble("/orientation/heading-deg"));
+ }
ls_update(multiloop);
// printf("%d FG_Altitude = %.2f\n", i, FG_Altitude * 0.3048);
_set_Accels_Body( U_dot_body, V_dot_body, W_dot_body );
_set_Accels_CG_Body( A_X_cg, A_Y_cg, A_Z_cg );
_set_Accels_Pilot_Body( A_X_pilot, A_Y_pilot, A_Z_pilot );
- // set_Accels_CG_Body_N( N_X_cg, N_Y_cg, N_Z_cg );
+ _set_Accels_CG_Body_N( N_X_cg, N_Y_cg, -N_Z_cg );
// set_Accels_Pilot_Body_N( N_X_pilot, N_Y_pilot, N_Z_pilot );
// set_Accels_Omega( P_dot_body, Q_dot_body, R_dot_body );
double time_step;
SGPropertyNode *speed_up;
SGPropertyNode *aero;
+ SGPropertyNode *uiuc_type;
public:
ls_step.c ls_step.h \
ls_sym.h ls_types.h \
$(AIRCRAFT_MODEL) \
- ls_interface.c ls_interface.h \
- uiuc_getwind.c uiuc_getwind.h
+ ls_interface.c ls_interface.h
INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src
$Header$
$Log$
-Revision 1.2 2002/11/08 17:03:50 curt
+Revision 1.3 2003/05/13 18:45:06 curt
Robert Deters:
-Latest revisions of the UIUC code.
+ I have attached some revisions for the UIUCModel and some LaRCsim.
+ The only thing you should need to check is LaRCsim.cxx. The file
+ I attached is a revised version of 1.5 and the latest is 1.7. Also,
+ uiuc_getwind.c and uiuc_getwind.h are no longer in the LaRCsim
+ directory. They have been moved over to UIUCModel.
-Revision 1.1.1.1 2002/09/10 01:14:01 curt
-Initial revision of FlightGear-0.9.0
+Revision 1.2 2003/03/31 03:05:39 m-selig
+uiuc wind changes, MSS
+
+Revision 1.1.1.1 2003/02/28 01:33:39 rob
+uiuc version of FlightGear v0.9.0
+
+Revision 1.2 2002/10/22 21:06:49 rob
+*** empty log message ***
+
+Revision 1.1.1.1 2002/04/24 17:08:23 rob
+UIUC version of FlightGear-0.7.pre11
Revision 1.3 2001/03/24 05:03:12 curt
SG-ified logstream.
#include <math.h>
-#include "uiuc_getwind.h" //For wind gradient functions
-
void ls_aux( void ) {
- static double uiuc_wind[3] = {0, 0, 0}; //The UIUC wind vector (initialized to zero)
-
SCALAR dx_pilot_from_cg, dy_pilot_from_cg, dz_pilot_from_cg;
/* SCALAR inv_Mass; */
SCALAR v_XZ_plane_2, signU, v_tangential;
- OMEGA_EARTH*Sea_level_radius*cos( Lat_geocentric );
V_down_rel_ground = V_down;
- //BEGIN Modified UIUC arbitrary wind calculations:
- uiuc_getwind(uiuc_wind); //Update the UIUC wind vector
- V_north_rel_airmass = V_north_rel_ground - uiuc_wind[0] - V_north_airmass;
- V_east_rel_airmass = V_east_rel_ground - uiuc_wind[1] - V_east_airmass;
- V_down_rel_airmass = V_down_rel_ground - uiuc_wind[2] - V_down_airmass;
- //END UIUC wind code
-
-// V_north_rel_airmass = V_north_rel_ground - V_north_airmass;
-// V_east_rel_airmass = V_east_rel_ground - V_east_airmass;
-// V_down_rel_airmass = V_down_rel_ground - V_down_airmass;
+ V_north_rel_airmass = V_north_rel_ground - V_north_airmass;
+ V_east_rel_airmass = V_east_rel_ground - V_east_airmass;
+ V_down_rel_airmass = V_down_rel_ground - V_down_airmass;
U_body = T_local_to_body_11*V_north_rel_airmass
+ T_local_to_body_12*V_east_rel_airmass
CURRENT RCS HEADER INFO:
$Header$
$Log$
-Revision 1.2 2002/11/08 17:03:50 curt
+Revision 1.3 2003/05/13 18:45:06 curt
Robert Deters:
-Latest revisions of the UIUC code.
+ I have attached some revisions for the UIUCModel and some LaRCsim.
+ The only thing you should need to check is LaRCsim.cxx. The file
+ I attached is a revised version of 1.5 and the latest is 1.7. Also,
+ uiuc_getwind.c and uiuc_getwind.h are no longer in the LaRCsim
+ directory. They have been moved over to UIUCModel.
-Revision 1.1.1.1 2002/09/10 01:14:02 curt
-Initial revision of FlightGear-0.9.0
+Revision 1.2 2003/03/31 03:05:41 m-selig
+uiuc wind changes, MSS
+
+Revision 1.1.1.1 2003/02/28 01:33:39 rob
+uiuc version of FlightGear v0.9.0
+
+Revision 1.3 2002/12/12 00:01:04 rob
+*** empty log message ***
+
+Revision 1.2 2002/10/22 21:06:49 rob
+*** empty log message ***
+
+Revision 1.2 2002/08/29 18:56:37 rob
+*** empty log message ***
+
+Revision 1.1.1.1 2002/04/24 17:08:23 rob
+UIUC version of FlightGear-0.7.pre11
Revision 1.5 2002/04/01 19:37:34 curt
I have attached revisions to the UIUC code. The revisions include the
case UIUC:
inertias( dt, Initialize );
subsystems( dt, Initialize );
+ uiuc_init_2_wrapper();
+ uiuc_network_recv_2_wrapper();
uiuc_engine_2_wrapper( dt, Initialize );
+ uiuc_wind_2_wrapper( dt, Initialize );
uiuc_aero_2_wrapper( dt, Initialize );
uiuc_gear_2_wrapper( dt, Initialize );
- //uiuc_network_2_wrapper();
+ uiuc_network_send_2_wrapper();
uiuc_record_2_wrapper(dt);
break;
}
6/18/01 Added call out to UIUC record routine (RD)
11/12/01 Changed from uiuc_init_aeromodel() to uiuc_initial_init(). (RD)
2/24/02 Added uiuc_network_routine() (GD)
+ 12/11/02 Divided uiuc_network_routine into uiuc_network_recv_routine and
+ uiuc_network_send_routine (RD)
----------------------------------------------------------------------------
#include <FDM/UIUCModel/uiuc_wrapper.h>
-void uiuc_aero_2_wrapper( SCALAR dt, int Initialize )
-{
- uiuc_force_moment(dt);
-}
-
-
-void uiuc_engine_2_wrapper( SCALAR dt, int Initialize )
+void uiuc_init_2_wrapper()
{
static int init = 0;
uiuc_initial_init();
// uiuc_init_aeromodel();
}
+}
+
+void uiuc_aero_2_wrapper( SCALAR dt, int Initialize )
+{
+ uiuc_force_moment(dt);
+}
+
+
+void uiuc_wind_2_wrapper( SCALAR dt, int Initialize )
+{
+ uiuc_wind_routine(dt);
+}
+
+void uiuc_engine_2_wrapper( SCALAR dt, int Initialize )
+{
uiuc_engine_routine();
}
uiuc_record_routine(dt);
}
-//void uiuc_network_2_wrapper()
-//{
-// uiuc_network_routine();
-//}
+void uiuc_network_recv_2_wrapper()
+{
+ uiuc_network_recv_routine();
+}
+
+void uiuc_network_send_2_wrapper()
+{
+ uiuc_network_send_routine();
+}
+++ /dev/null
-/*
- UIUC wind gradient test code v0.1
-
- Returns wind vector as a function of altitude for a simple
- parabolic gradient profile
-
- Glen Dimock
- Last update: 020227
-*/
-
-#include "uiuc_getwind.h"
-
-void uiuc_getwind(double wind[3])
-{
- /* Wind parameters */
- double zref = 300.; //Reference height (ft)
- double uref = 0.; //Horizontal wind velocity at ref. height (ft/sec)
- double ordref = 0.; //Horizontal wind ordinal from north (degrees)
- double zoff = 15.; //Z offset (ft) - wind is zero at and below this point
- double zcomp = 0.; //Vertical component (down is positive)
-
-
- /* Get wind vector */
- double windmag = 0; //Wind magnitude
- double a = 0; //Parabola: Altitude = a*windmag^2 + zoff
-
- a = zref/pow(uref,2.);
- if (Altitude >= zoff)
- windmag = sqrt(Altitude/a);
- else
- windmag = 0.;
-
- wind[0] = windmag * cos(ordref*3.14159/180.); //North component
- wind[1] = windmag * sin(ordref*3.14159/180.); //East component
- wind[2] = zcomp;
-
- return;
-}
-
+++ /dev/null
-#include <math.h>
-#include "ls_generic.h" //For global state variables
-
-void uiuc_getwind(double wind[3]);
uiuc_3Dinterpolation.cpp uiuc_3Dinterpolation.h \
uiuc_aerodeflections.cpp uiuc_aerodeflections.h \
uiuc_aircraftdir.h uiuc_aircraft.h \
+ uiuc_alh_ap.cpp uiuc_alh_ap.h \
uiuc_betaprobe.cpp uiuc_betaprobe.h \
uiuc_coef_drag.cpp uiuc_coef_drag.h \
uiuc_coef_lift.cpp uiuc_coef_lift.h \
uiuc_controlInput.cpp uiuc_controlInput.h \
uiuc_convert.cpp uiuc_convert.h \
uiuc_engine.cpp uiuc_engine.h \
+ uiuc_flapdata.cpp uiuc_flapdata.h \
+ uiuc_find_position.cpp uiuc_find_position.h \
uiuc_fog.cpp uiuc_fog.h \
uiuc_gear.cpp uiuc_gear.h\
- uiuc_ice.cpp uiuc_ice.h \
+ uiuc_get_flapper.cpp uiuc_get_flapper.h \
+ uiuc_getwind.cpp uiuc_getwind.h \
+ uiuc_ice.cpp uiuc_ice.h \
uiuc_iceboot.cpp uiuc_iceboot.h \
uiuc_iced_nonlin.cpp uiuc_iced_nonlin.h \
+ uiuc_icing_demo.cpp uiuc_icing_demo.h \
uiuc_initializemaps.cpp uiuc_initializemaps.h \
uiuc_map_CD.cpp uiuc_map_CD.h \
uiuc_map_CL.cpp uiuc_map_CL.h \
uiuc_map_record5.cpp uiuc_map_record5.h \
uiuc_map_record6.cpp uiuc_map_record6.h \
uiuc_menu.cpp uiuc_menu.h \
- uiuc_pah_ap.cpp uiuc_pah_ap.h \
+ uiuc_menu_init.cpp uiuc_menu_init.h \
+ uiuc_menu_geometry.cpp uiuc_menu_geometry.h \
+ uiuc_menu_controlSurface.cpp uiuc_menu_controlSurface.h \
+ uiuc_menu_mass.cpp uiuc_menu_mass.h \
+ uiuc_menu_engine.cpp uiuc_menu_engine.h \
+ uiuc_menu_CD.cpp uiuc_menu_CD.h \
+ uiuc_menu_CL.cpp uiuc_menu_CL.h \
+ uiuc_menu_Cm.cpp uiuc_menu_Cm.h \
+ uiuc_menu_CY.cpp uiuc_menu_CY.h \
+ uiuc_menu_Croll.cpp uiuc_menu_Croll.h \
+ uiuc_menu_Cn.cpp uiuc_menu_Cn.h \
+ uiuc_menu_gear.cpp uiuc_menu_gear.h \
+ uiuc_menu_ice.cpp uiuc_menu_ice.h \
+ uiuc_menu_fog.cpp uiuc_menu_fog.h \
+ uiuc_menu_record.cpp uiuc_menu_record.h \
+ uiuc_menu_misc.cpp uiuc_menu_misc.h \
+ uiuc_menu_functions.cpp uiuc_menu_functions.h \
+ uiuc_pah_ap.cpp uiuc_pah_ap.h \
uiuc_parsefile.cpp uiuc_parsefile.h \
uiuc_recorder.cpp uiuc_recorder.h \
uiuc_warnings_errors.cpp uiuc_warnings_errors.h \
int
uiuc_1DdataFileReader( string file_name,
- double x[100], double y[100], int &xmax )
+ double x[], double y[], int &xmax )
{
ParseFile *matrix;
string linetoken1;
string linetoken2;
stack command_list;
+ static string uiuc_1DdataFileReader_error = " (from uiuc_1DdataFileReader.cpp) ";
/* Read the file and get the list of commands */
matrix = new ParseFile(file_name);
y[counter] = token_value2 * convert_y;
xmax = counter;
counter++;
+ //(RD) will create error check later, we can have more than 100
+ //if (counter > 100)
+ //{
+ // uiuc_warnings_errors(6, uiuc_1DdataFileReader_error);
+ //};
data = 1;
}
return data;
#include "uiuc_parsefile.h"
#include "uiuc_aircraft.h"
+#include "uiuc_warnings_errors.h"
SG_USING_STD(istrstream);
int uiuc_1DdataFileReader( string file_name,
- double x[100],
- double y[100],
+ double x[],
+ double y[],
int &xmax );
int uiuc_1DdataFileReader( string file_name,
double x[],
HISTORY: 01/30/2000 initial release
04/05/2000 (JS) added zero_Long_trim command
- 07/05/2001 (RD) removed elevator_tab addidtion to
+ 07/05/2001 (RD) removed elevator_tab addition to
elevator calculation
11/12/2001 (RD) added new flap routine. Needed for
Twin Otter non-linear model
+ 12/28/2002 (MSS) added simple SAS capability
+ 03/03/2003 (RD) changed flap code to call
+ uiuc_find_position to determine
+ flap position
----------------------------------------------------------------------
- AUTHOR(S): Jeff Scott <jscott@mail.com>
+ AUTHOR(S): Jeff Scott http://www.jeffscott.net/
Robert Deters <rdeters@uiuc.edu>
Michael Selig <m-selig@uiuc.edu>
**********************************************************************/
-//#include <math.h>
+#include <math.h>
#include "uiuc_aerodeflections.h"
void uiuc_aerodeflections( double dt )
{
- double prevFlapHandle = 0.0f;
- double flap_transit_rate;
- bool flaps_in_transit = false;
double demax_remain;
double demin_remain;
static double elev_trim;
- //if (use_uiuc_network)
- // {
- // receive data
- // uiuc_network(1);
- // if (pitch_trim_up)
- //elev_trim += 0.001;
- // if (pitch_trim_down)
- //elev_trim -= 0.001;
- // if (elev_trim > 1.0)
- //elev_trim = 1;
- // if (elev_trim < -1.0)
- //elev_trim = -1;
- // if (outside_control)
- //{
- // pilot_elev_no = true;
- // pilot_ail_no = true;
- // pilot_rud_no = true;
- // pilot_throttle_no = true;
- // Long_trim = elev_trim;
- //}
- // }
-
- if (zero_Long_trim)
- {
- Long_trim = 0;
- //elevator_tab = 0;
- }
-
+ if (use_uiuc_network) {
+ if (pitch_trim_up)
+ elev_trim += 0.001;
+ if (pitch_trim_down)
+ elev_trim -= 0.001;
+ if (elev_trim > 1.0)
+ elev_trim = 1;
+ if (elev_trim < -1.0)
+ elev_trim = -1;
+ Flap_handle = flap_percent * flap_max;
+ if (outside_control) {
+ pilot_elev_no = true;
+ pilot_ail_no = true;
+ pilot_rud_no = true;
+ pilot_throttle_no = true;
+ Long_trim = elev_trim;
+ }
+ }
+
+ if (zero_Long_trim) {
+ Long_trim = 0;
+ //elevator_tab = 0;
+ }
+
if (Lat_control <= 0)
aileron = - Lat_control * damin * DEG_TO_RAD;
else
aileron = - Lat_control * damax * DEG_TO_RAD;
-
- if (trim_case_2)
- {
- if (Long_trim <= 0)
- {
- elevator = Long_trim * demax * DEG_TO_RAD;
- demax_remain = demax + Long_trim * demax;
- demin_remain = -1*Long_trim * demax + demin;
- if (Long_control <= 0)
- elevator += Long_control * demax_remain * DEG_TO_RAD;
- else
- elevator += Long_control * demin_remain * DEG_TO_RAD;
- }
+
+ if (trim_case_2) {
+ if (Long_trim <= 0) {
+ elevator = Long_trim * demax * DEG_TO_RAD;
+ demax_remain = demax + Long_trim * demax;
+ demin_remain = -Long_trim * demax + demin;
+ if (Long_control <= 0)
+ elevator += Long_control * demax_remain * DEG_TO_RAD;
else
- {
- elevator = Long_trim * demin * DEG_TO_RAD;
- demin_remain = demin - Long_trim * demin;
- demax_remain = Long_trim * demin + demax;
- if (Long_control >=0)
- elevator += Long_control * demin_remain * DEG_TO_RAD;
- else
- elevator += Long_control * demax_remain * DEG_TO_RAD;
- }
- }
- else
- {
- if ((Long_control+Long_trim) <= 0)
- elevator = (Long_control + Long_trim) * demax * DEG_TO_RAD;
+ elevator += Long_control * demin_remain * DEG_TO_RAD;
+ } else {
+ elevator = Long_trim * demin * DEG_TO_RAD;
+ demin_remain = demin - Long_trim * demin;
+ demax_remain = Long_trim * demin + demax;
+ if (Long_control >=0)
+ elevator += Long_control * demin_remain * DEG_TO_RAD;
else
- elevator = (Long_control + Long_trim) * demin * DEG_TO_RAD;
+ elevator += Long_control * demax_remain * DEG_TO_RAD;
}
-
+ } else {
+ if ((Long_control+Long_trim) <= 0)
+ elevator = (Long_control + Long_trim) * demax * DEG_TO_RAD;
+ else
+ elevator = (Long_control + Long_trim) * demin * DEG_TO_RAD;
+ }
+
if (Rudder_pedal <= 0)
- rudder = - Rudder_pedal * drmin * DEG_TO_RAD;
+ rudder = -Rudder_pedal * drmin * DEG_TO_RAD;
else
- rudder = - Rudder_pedal * drmax * DEG_TO_RAD;
-
-
- if (old_flap_routine)
- {
- // old flap routine
- // check for lowest flap setting
- if (Flap_handle < dfArray[1])
- {
- Flap_handle = dfArray[1];
- prevFlapHandle = Flap_handle;
- flap = Flap_handle;
- }
+ rudder = -Rudder_pedal * drmax * DEG_TO_RAD;
+
+ /* at this point aileron, elevator, and rudder commands are known (in radians)
+ * add in SAS and any other mixing control laws
+ */
+
+ // SAS for pitch, positive elevator is TED
+ if (use_elevator_stick_gain)
+ elevator *= elevator_stick_gain;
+ if (use_elevator_sas_type1) {
+ elevator_sas = elevator_sas_KQ * Q_body;
+ if (use_elevator_sas_max && (elevator_sas > (elevator_sas_max * DEG_TO_RAD))) {
+ elevator += elevator_sas_max * DEG_TO_RAD;
+ //elevator_sas = elevator_sas_max;
+ } else if (use_elevator_sas_min && (elevator_sas < (elevator_sas_min * DEG_TO_RAD))) {
+ elevator += elevator_sas_min * DEG_TO_RAD;
+ //elevator_sas = elevator_sas_min;
+ }
+ else
+ elevator += elevator_sas;
+ // don't exceed the elevator deflection limits
+ if (elevator > demax * DEG_TO_RAD)
+ elevator = demax * DEG_TO_RAD;
+ else if (elevator < (-demin * DEG_TO_RAD))
+ elevator = -demin * DEG_TO_RAD;
+ }
+
+ // SAS for roll, positive aileron is right aileron TED
+ if (use_aileron_stick_gain)
+ aileron *= aileron_stick_gain;
+ if (use_aileron_sas_type1) {
+ aileron_sas = aileron_sas_KP * P_body;
+ if (use_aileron_sas_max && (fabs(aileron_sas) > (aileron_sas_max * DEG_TO_RAD)))
+ if (aileron_sas >= 0) {
+ aileron += aileron_sas_max * DEG_TO_RAD;
+ //aileron_sas = aileron_sas_max;
+ } else {
+ aileron += -aileron_sas_max * DEG_TO_RAD;
+ //aileron_sas = -aileron_sas;
+ }
+ else
+ aileron += aileron_sas;
+ // don't exceed aileron deflection limits
+ if (fabs(aileron) > (damax * DEG_TO_RAD))
+ if (aileron > 0)
+ aileron = damax * DEG_TO_RAD;
+ else
+ aileron = -damax * DEG_TO_RAD;
+ }
+
+ // SAS for yaw, positive rudder deflection is TEL
+ if (use_rudder_stick_gain)
+ rudder *= rudder_stick_gain;
+ if (use_rudder_sas_type1) {
+ rudder_sas = rudder_sas_KR * R_body;
+ if (use_rudder_sas_max && (fabs(rudder_sas) > (rudder_sas_max*DEG_TO_RAD)))
+ if (rudder_sas >= 0) {
+ rudder -= rudder_sas_max * DEG_TO_RAD;
+ //rudder_sas = rudder_sas_max;
+ } else {
+ rudder -= -rudder_sas_max * DEG_TO_RAD;
+ //rudder_sas = rudder_sas_max;
+ }
+ else
+ rudder -= rudder_sas;
+ // don't exceed rudder deflection limits, assumes drmax = drmin,
+ // i.e. equal rudder throws left and right
+ if (fabs(rudder) > drmax)
+ if (rudder > 0)
+ rudder = drmax * DEG_TO_RAD;
+ else
+ rudder = -drmax * DEG_TO_RAD;
+ }
+
+ /* This old code in the first part of the if-block needs to get removed from FGFS. 030222 MSS
+ The second part of the if-block is rewritten below.
+ double prevFlapHandle = 0.0f;
+ double flap_transit_rate;
+ bool flaps_in_transit = false;
+
+ if (old_flap_routine) {
+ // old flap routine
+ // check for lowest flap setting
+ if (Flap_handle < dfArray[1]) {
+ Flap_handle = dfArray[1];
+ prevFlapHandle = Flap_handle;
+ flap = Flap_handle;
+ } else if (Flap_handle > dfArray[ndf]) {
// check for highest flap setting
- else if (Flap_handle > dfArray[ndf])
- {
- Flap_handle = dfArray[ndf];
- prevFlapHandle = Flap_handle;
- flap = Flap_handle;
- }
+ Flap_handle = dfArray[ndf];
+ prevFlapHandle = Flap_handle;
+ flap = Flap_handle;
+ } else {
// otherwise in between
- else
- {
- if(Flap_handle != prevFlapHandle)
- {
- flaps_in_transit = true;
- }
- if(flaps_in_transit)
- {
- int iflap = 0;
- while (dfArray[iflap] < Flap_handle)
- {
- iflap++;
- }
- if (flap < Flap_handle)
- {
- if (TimeArray[iflap] > 0)
- flap_transit_rate = (dfArray[iflap] - dfArray[iflap-1]) / TimeArray[iflap+1];
- else
- flap_transit_rate = (dfArray[iflap] - dfArray[iflap-1]) / 5;
- }
- else
- {
- if (TimeArray[iflap+1] > 0)
- flap_transit_rate = (dfArray[iflap] - dfArray[iflap+1]) / TimeArray[iflap+1];
- else
- flap_transit_rate = (dfArray[iflap] - dfArray[iflap+1]) / 5;
- }
- if(fabs (flap - Flap_handle) > dt * flap_transit_rate)
- flap += flap_transit_rate * dt;
- else
- {
- flaps_in_transit = false;
- flap = Flap_handle;
- }
- }
- }
- prevFlapHandle = Flap_handle;
- }
- else
- {
- // new flap routine
- // designed for the twin otter non-linear model
- if (outside_control == false)
- {
- flap_percent = Flap_handle / 30.0; // percent of flaps desired
- if (flap_percent>=0.31 && flap_percent<=0.35)
- flap_percent = 1.0 / 3.0;
- if (flap_percent>=0.65 && flap_percent<=0.69)
- flap_percent = 2.0 / 3.0;
+ if(Flap_handle != prevFlapHandle)
+ flaps_in_transit = true;
+ if(flaps_in_transit) {
+ int iflap = 0;
+ while (dfArray[iflap] < Flap_handle)
+ iflap++;
+ if (flap < Flap_handle) {
+ if (TimeArray[iflap] > 0)
+ flap_transit_rate = (dfArray[iflap] - dfArray[iflap-1]) / TimeArray[iflap+1];
+ else
+ flap_transit_rate = (dfArray[iflap] - dfArray[iflap-1]) / 5;
+ } else {
+ if (TimeArray[iflap+1] > 0)
+ flap_transit_rate = (dfArray[iflap] - dfArray[iflap+1]) / TimeArray[iflap+1];
+ else
+ flap_transit_rate = (dfArray[iflap] - dfArray[iflap+1]) / 5;
}
- flap_goal = flap_percent * flap_max; // angle of flaps desired
- flap_moving_rate = flap_rate * dt; // amount flaps move per time step
-
- // determine flap position with respect to the flap goal
- if (flap_pos < flap_goal)
- {
- flap_pos += flap_moving_rate;
- if (flap_pos > flap_goal)
- flap_pos = flap_goal;
+ if(fabs (flap - Flap_handle) > dt * flap_transit_rate)
+ flap += flap_transit_rate * dt;
+ else {
+ flaps_in_transit = false;
+ flap = Flap_handle;
}
- else if (flap_pos > flap_goal)
- {
- flap_pos -= flap_moving_rate;
- if (flap_pos < flap_goal)
- flap_pos = flap_goal;
- }
+ }
+ }
+ prevFlapHandle = Flap_handle;
+ } else {
+ // new flap routine
+ // designed for the twin otter non-linear model
+ if (!outside_control) {
+ flap_percent = Flap_handle / 30.0; // percent of flaps desired
+ if (flap_percent>=0.31 && flap_percent<=0.35)
+ flap_percent = 1.0 / 3.0;
+ if (flap_percent>=0.65 && flap_percent<=0.69)
+ flap_percent = 2.0 / 3.0;
}
+ flap_cmd_deg = flap_percent * flap_max; // angle of flaps desired
+ flap_moving_rate = flap_rate * dt; // amount flaps move per time step
+
+ // determine flap position with respect to the flap goal
+ if (flap_pos < flap_cmd_deg) {
+ flap_pos += flap_moving_rate;
+ if (flap_pos > flap_cmd_deg)
+ flap_pos = flap_cmd_deg;
+ } else if (flap_pos > flap_cmd_deg) {
+ flap_pos -= flap_moving_rate;
+ if (flap_pos < flap_cmd_deg)
+ flap_pos = flap_cmd_deg;
+ }
+ }
+
+*/
+
+ if (!outside_control && use_flaps) {
+ // angle of flaps desired [rad]
+ flap_cmd = Flap_handle * DEG_TO_RAD;
+ // amount flaps move per time step [rad/sec]
+ flap_increment_per_timestep = flap_rate * dt * DEG_TO_RAD;
+ // determine flap position [rad] with respect to flap command
+ flap_pos = uiuc_find_position(flap_cmd,flap_increment_per_timestep,flap_pos);
+ // get the normalized position
+ flap_pos_pct = flap_pos/(flap_max * DEG_TO_RAD);
+ }
+
+
+ if(use_spoilers) {
+ // angle of spoilers desired [deg]
+ spoiler_cmd_deg = Spoiler_handle;
+ // amount spoilers move per time step [deg]
+ spoiler_increment_per_timestep = spoiler_rate * dt;
+ // determine spoiler position with respect to spoiler command
+ if (spoiler_pos_deg < spoiler_cmd_deg) {
+ spoiler_pos_deg += spoiler_increment_per_timestep;
+ if (spoiler_pos_deg > spoiler_cmd_deg)
+ spoiler_pos_deg = spoiler_cmd_deg;
+ } else if (spoiler_pos_deg > spoiler_cmd_deg) {
+ spoiler_pos_deg -= spoiler_increment_per_timestep;
+ if (spoiler_pos_deg < spoiler_cmd_deg)
+ spoiler_pos_deg = spoiler_cmd_deg;
+ }
+ spoiler_pos = spoiler_pos_deg * DEG_TO_RAD;
+ }
+
return;
}
#define _AERODEFLECTIONS_H_
#include "uiuc_aircraft.h" /* aileron, elevator, rudder */
-//#include "uiuc_network.h"
+#include "uiuc_find_position.h"
#include <FDM/LaRCsim/ls_cockpit.h> /* Long_control, Lat_control, Rudder_pedal */
#include <FDM/LaRCsim/ls_constants.h> /* RAD_TO_DEG, DEG_TO_RAD */
-
+#include <FDM/LaRCsim/ls_generic.h> //For global LaRCsim variables
void uiuc_aerodeflections( double dt );
scale factors.
08/29/2002 (MSS) Added simpleSingleModel
09/18/2002 (MSS) Added downwash options
+ 03/03/2003 (RD) Changed flap_cmd_deg to flap_cmd (rad)
+ 03/16/2003 (RD) Added trigger variables
----------------------------------------------------------------------
#include <map>
#include STL_IOSTREAM
-#include <math.h>
+#include <cmath>
#include "uiuc_parsefile.h"
-//#include "uiuc_flapdata.h"
+#include "uiuc_flapdata.h"
SG_USING_STD(map);
SG_USING_STD(iostream);
Cn_flag, gear_flag, ice_flag, record_flag, misc_flag, fog_flag};
// init ======= Initial values for equation of motion
+// added to uiuc_map_init.cpp
enum {Dx_pilot_flag = 2000,
Dy_pilot_flag,
Dz_pilot_flag,
dyn_on_speed_zero_flag,
use_dyn_on_speed_curve1_flag,
use_Alpha_dot_on_speed_flag,
+ use_gamma_horiz_on_speed_flag,
+ gamma_horiz_on_speed,
downwashMode_flag,
downwashCoef_flag,
Alpha_flag,
U_body_flag,
V_body_flag,
W_body_flag,
- ignore_unknown_flag,
+ ignore_unknown_keywords_flag,
trim_case_2_flag,
use_uiuc_network_flag,
old_flap_routine_flag,
outside_control_flag};
// geometry === Aircraft-specific geometric quantities
+// added to uiuc_map_geometry.cpp
enum {bw_flag = 3000, cbar_flag, Sw_flag, ih_flag, bh_flag, ch_flag, Sh_flag};
// controlSurface = Control surface deflections and properties
+// added to uiuc_map_controlSurface.cpp
enum {de_flag = 4000, da_flag, dr_flag,
set_Long_trim_flag, set_Long_trim_deg_flag, zero_Long_trim_flag,
elevator_step_flag, elevator_singlet_flag, elevator_doublet_flag,
- elevator_input_flag, aileron_input_flag, rudder_input_flag,
- flap_pos_input_flag, pilot_elev_no_flag, pilot_ail_no_flag,
- pilot_rud_no_flag, flap_max_flag, flap_rate_flag};
+ elevator_input_flag, aileron_input_flag, rudder_input_flag, flap_pos_input_flag,
+ pilot_elev_no_flag, pilot_ail_no_flag, pilot_rud_no_flag,
+ flap_max_flag, flap_rate_flag, use_flaps_flag,
+ spoiler_max_flag, spoiler_rate_flag, use_spoilers_flag,
+ aileron_sas_KP_flag,
+ aileron_sas_max_flag,
+ aileron_stick_gain_flag,
+ elevator_sas_KQ_flag,
+ elevator_sas_max_flag,
+ elevator_sas_min_flag,
+ elevator_stick_gain_flag,
+ rudder_sas_KR_flag,
+ rudder_sas_max_flag,
+ rudder_stick_gain_flag,
+ use_elevator_sas_type1_flag,
+ use_aileron_sas_type1_flag,
+ use_rudder_sas_type1_flag};
// controlsMixer == Controls mixer
enum {nomix_flag = 5000};
//mass ======== Aircraft-specific mass properties
+// added to uiuc_map_mass.cpp
enum {Weight_flag = 6000,
Mass_flag, I_xx_flag, I_yy_flag, I_zz_flag, I_xz_flag,
Mass_appMass_ratio_flag, I_xx_appMass_ratio_flag,
I_yy_appMass_flag, I_zz_appMass_flag};
// engine ===== Propulsion data
+// added to uiuc_map_engine.cpp
enum {simpleSingle_flag = 7000, simpleSingleModel_flag,
c172_flag, cherokee_flag, gyroForce_Q_body_flag, gyroForce_R_body_flag,
omega_flag, omegaRPM_flag, polarInertia_flag,
eta_q_Cm_q_flag,
eta_q_Cm_adot_flag,
eta_q_Cmfade_flag,
+ eta_q_Cm_de_flag,
eta_q_Cl_beta_flag,
eta_q_Cl_p_flag,
eta_q_Cl_r_flag,
Throttle_pct_input_flag, forcemom_flag, Xp_input_flag, Zp_input_flag, Mp_input_flag};
// CD ========= Aerodynamic x-force quantities (longitudinal)
-enum {CDo_flag = 8000, CDK_flag, CD_a_flag, CD_adot_flag, CD_q_flag, CD_ih_flag, CD_de_flag,
+// added to uiuc_map_CD.cpp
+enum {CDo_flag = 8000, CDK_flag, CLK_flag, CD_a_flag, CD_adot_flag, CD_q_flag, CD_ih_flag,
+ CD_de_flag, CD_dr_flag, CD_da_flag, CD_beta_flag,
+ CD_df_flag,
+ CD_ds_flag,
+ CD_dg_flag,
CDfa_flag, CDfCL_flag, CDfade_flag, CDfdf_flag, CDfadf_flag,
CXo_flag, CXK_flag, CX_a_flag, CX_a2_flag, CX_a3_flag, CX_adot_flag,
CX_q_flag, CX_de_flag, CX_dr_flag, CX_df_flag, CX_adf_flag,
CXfabetaf_flag, CXfadef_flag, CXfaqf_flag};
// CL ========= Aerodynamic z-force quantities (longitudinal)
+// added to uiuc_map_CL.cpp
enum {CLo_flag = 9000, CL_a_flag, CL_adot_flag, CL_q_flag, CL_ih_flag, CL_de_flag,
+ CL_df_flag,
+ CL_ds_flag,
+ CL_dg_flag,
CLfa_flag, CLfade_flag, CLfdf_flag, CLfadf_flag,
CZo_flag, CZ_a_flag, CZ_a2_flag, CZ_a3_flag, CZ_adot_flag,
CZ_q_flag, CZ_de_flag, CZ_deb2_flag, CZ_df_flag, CZ_adf_flag,
CZfa_flag, CZfabetaf_flag, CZfadef_flag, CZfaqf_flag};
// Cm ========= Aerodynamic m-moment quantities (longitudinal)
+// added to uiuc_map_Cm.cpp
enum {Cmo_flag = 10000, Cm_a_flag, Cm_a2_flag, Cm_adot_flag, Cm_q_flag,
- Cm_ih_flag, Cm_de_flag, Cm_b2_flag, Cm_r_flag, Cm_df_flag,
+ Cm_ih_flag, Cm_de_flag, Cm_b2_flag, Cm_r_flag,
+ Cm_df_flag,
+ Cm_ds_flag,
+ Cm_dg_flag,
Cmfa_flag, Cmfade_flag, Cmfdf_flag, Cmfadf_flag,
Cmfabetaf_flag, Cmfadef_flag, Cmfaqf_flag};
// CY ========= Aerodynamic y-force quantities (lateral)
+// added to uiuc_map_CY.cpp
enum {CYo_flag = 11000, CY_beta_flag, CY_p_flag, CY_r_flag, CY_da_flag,
CY_dr_flag, CY_dra_flag, CY_bdot_flag, CYfada_flag, CYfbetadr_flag,
CYfabetaf_flag, CYfadaf_flag, CYfadrf_flag, CYfapf_flag, CYfarf_flag};
// Cl ========= Aerodynamic l-moment quantities (lateral)
+// added to uiuc_map_Cl.cpp
enum {Clo_flag = 12000, Cl_beta_flag, Cl_p_flag, Cl_r_flag, Cl_da_flag,
Cl_dr_flag, Cl_daa_flag, Clfada_flag, Clfbetadr_flag, Clfabetaf_flag,
Clfadaf_flag, Clfadrf_flag, Clfapf_flag, Clfarf_flag};
// Cn ========= Aerodynamic n-moment quantities (lateral)
+// added to uiuc_map_Cn.cpp
enum {Cno_flag = 13000, Cn_beta_flag, Cn_p_flag, Cn_r_flag, Cn_da_flag,
Cn_dr_flag, Cn_q_flag, Cn_b3_flag, Cnfada_flag, Cnfbetadr_flag,
Cnfabetaf_flag, Cnfadaf_flag, Cnfadrf_flag, Cnfapf_flag, Cnfarf_flag};
// gear ======= Landing gear model quantities
+// added to uiuc_map_gear.cpp
enum {Dx_gear_flag = 14000, Dy_gear_flag, Dz_gear_flag, cgear_flag,
- kgear_flag, muGear_flag, strutLength_flag};
+ kgear_flag, muGear_flag, strutLength_flag,
+ gear_max_flag, gear_rate_flag, use_gear_flag};
// ice ======== Ice model quantities
+// added to uiuc_map_ice.cpp
enum {iceTime_flag = 15000, transientTime_flag, eta_ice_final_flag,
beta_probe_wing_flag, beta_probe_tail_flag,
kCDo_flag, kCDK_flag, kCD_a_flag, kCD_adot_flag, kCD_q_flag, kCD_de_flag,
cbar_2U_record, b_2U_record, ch_2U_record,
+ // added to uiuc_map_record1.cpp
Weight_record, Mass_record, I_xx_record, I_yy_record, I_zz_record, I_xz_record,
Mass_appMass_ratio_record, I_xx_appMass_ratio_record,
I_yy_appMass_ratio_record, I_zz_appMass_ratio_record,
Mass_appMass_record, I_xx_appMass_record,
I_yy_appMass_record, I_zz_appMass_record,
+ // added to uiuc_map_record1.cpp
Dx_pilot_record, Dy_pilot_record, Dz_pilot_record,
Dx_cg_record, Dy_cg_record, Dz_cg_record,
Lat_geocentric_record, Lon_geocentric_record, Radius_to_vehicle_record,
Latitude_record, Longitude_record, Altitude_record,
Phi_record, Theta_record, Psi_record,
+ // added to uiuc_map_record1.cpp
V_dot_north_record, V_dot_east_record, V_dot_down_record,
U_dot_body_record, V_dot_body_record, W_dot_body_record,
A_X_pilot_record, A_Y_pilot_record, A_Z_pilot_record,
N_X_cg_record, N_Y_cg_record, N_Z_cg_record,
P_dot_body_record, Q_dot_body_record, R_dot_body_record,
+ // added to uiuc_map_record2.cpp
V_north_record, V_east_record, V_down_record,
V_north_rel_ground_record, V_east_rel_ground_record, V_down_rel_ground_record,
V_north_airmass_record, V_east_airmass_record, V_down_airmass_record,
Phi_dot_record, Theta_dot_record, Psi_dot_record,
Latitude_dot_record, Longitude_dot_record, Radius_dot_record,
+ // added to uiuc_map_record2.cpp
Alpha_record, Alpha_deg_record, Alpha_dot_record, Alpha_dot_deg_record,
Beta_record, Beta_deg_record, Beta_dot_record, Beta_dot_deg_record,
Gamma_vert_record, Gamma_vert_deg_record, Gamma_horiz_record, Gamma_horiz_deg_record,
+ // added to uiuc_map_record3.cpp
Density_record, V_sound_record, Mach_number_record,
Static_pressure_record, Total_pressure_record, Impact_pressure_record,
Dynamic_pressure_record,
Static_temperature_record, Total_temperature_record,
+ // added to uiuc_map_record3.cpp
Gravity_record, Sea_level_radius_record, Earth_position_angle_record,
Runway_altitude_record, Runway_latitude_record, Runway_longitude_record,
Runway_heading_record, Radius_to_rwy_record,
D_cg_north_of_rwy_record, D_cg_east_of_rwy_record, D_cg_above_rwy_record,
X_cg_rwy_record, Y_cg_rwy_record, H_cg_rwy_record,
+ // added to uiuc_map_record3.cpp
Throttle_3_record, Throttle_pct_record,
+ // added to uiuc_map_record3.cpp
Long_control_record, Long_trim_record, Long_trim_deg_record,
elevator_record, elevator_deg_record,
Lat_control_record, aileron_record, aileron_deg_record,
Rudder_pedal_record, rudder_record, rudder_deg_record,
- Flap_handle_record, flap_record, flap_deg_record, flap_goal_record,
- flap_pos_record,
+ Flap_handle_record, flap_record, flap_cmd_record, flap_cmd_deg_record,
+ flap_pos_record, flap_pos_deg_record,
+ Spoiler_handle_record, spoiler_cmd_deg_record,
+ spoiler_pos_deg_record, spoiler_pos_norm_record, spoiler_pos_record,
+ // added to uiuc_map_record4.cpp
CD_record, CDfaI_record, CDfCLI_record, CDfadeI_record, CDfdfI_record,
CDfadfI_record, CX_record, CXfabetafI_record, CXfadefI_record,
CXfaqfI_record,
- CDo_save_record, CDK_save_record, CD_a_save_record, CD_adot_save_record,
- CD_q_save_record, CD_ih_save_record, CD_de_save_record, CXo_save_record,
+ CDo_save_record, CDK_save_record, CLK_save_record, CD_a_save_record, CD_adot_save_record,
+ CD_q_save_record, CD_ih_save_record,
+ CD_de_save_record, CD_dr_save_record, CD_da_save_record, CD_beta_save_record,
+ CD_df_save_record,
+ CD_ds_save_record,
+ CD_dg_save_record,
+ CXo_save_record,
CXK_save_record, CX_a_save_record, CX_a2_save_record, CX_a3_save_record,
CX_adot_save_record, CX_q_save_record, CX_de_save_record,
CX_dr_save_record, CX_df_save_record, CX_adf_save_record,
CZ_record, CZfaI_record, CZfabetafI_record, CZfadefI_record,
CZfaqfI_record,
CLo_save_record, CL_a_save_record, CL_adot_save_record, CL_q_save_record,
- CL_ih_save_record, CL_de_save_record, CZo_save_record, CZ_a_save_record,
+ CL_ih_save_record, CL_de_save_record,
+ CL_df_save_record,
+ CL_ds_save_record,
+ CL_dg_save_record,
+ CZo_save_record, CZ_a_save_record,
CZ_a2_save_record, CZ_a3_save_record, CZ_adot_save_record,
CZ_q_save_record, CZ_de_save_record, CZ_deb2_save_record,
CZ_df_save_record, CZ_adf_save_record,
Cm_adot_save_record, Cm_q_save_record, Cm_ih_save_record,
Cm_de_save_record, Cm_b2_save_record, Cm_r_save_record,
Cm_df_save_record,
+ Cm_ds_save_record,
+ Cm_dg_save_record,
CY_record, CYfadaI_record, CYfbetadrI_record, CYfabetafI_record,
CYfadafI_record, CYfadrfI_record, CYfapfI_record, CYfarfI_record,
CYo_save_record, CY_beta_save_record, CY_p_save_record,
Cn_da_save_record, Cn_dr_save_record, Cn_q_save_record,
Cn_b3_save_record,
+ // added to uiuc_map_record5.cpp
F_X_wind_record, F_Y_wind_record, F_Z_wind_record,
F_X_aero_record, F_Y_aero_record, F_Z_aero_record,
F_X_engine_record, F_Y_engine_record, F_Z_engine_record,
F_X_gear_record, F_Y_gear_record, F_Z_gear_record,
F_X_record, F_Y_record, F_Z_record,
F_north_record, F_east_record, F_down_record,
-
+
+ // added to uiuc_map_record5.cpp
M_l_aero_record, M_m_aero_record, M_n_aero_record,
M_l_engine_record, M_m_engine_record, M_n_engine_record,
M_l_gear_record, M_m_gear_record, M_n_gear_record,
M_l_rp_record, M_m_rp_record, M_n_rp_record,
+ // added to uiuc_map_record5.cpp
+ flapper_freq_record, flapper_phi_record,
+ flapper_phi_deg_record, flapper_Lift_record, flapper_Thrust_record,
+ flapper_Inertia_record, flapper_Moment_record,
+
+ // added to uiuc_map_record5.cpp
+ debug1_record,
+ debug2_record,
+ debug3_record,
+ V_down_fpm_record,
+ eta_q_record,
+ rpm_record,
+ elevator_sas_deg_record,
+ aileron_sas_deg_record,
+ rudder_sas_deg_record,
+ w_induced_record,
+ downwashAngle_deg_record,
+ alphaTail_deg_record,
+ gammaWing_record,
+ LD_record,
+ gload_record,
+ gyroMomentQ_record,
+ gyroMomentR_record,
+
+ // added to uiuc_map_record5.cpp
+ Gear_handle_record, gear_cmd_norm_record, gear_pos_norm_record,
+
+ // added to uiuc_map_record5.cpp
+ debug4_record,
+ debug5_record,
+ debug6_record,
+
+ // added to uiuc_map_record6.cpp
CL_clean_record, CL_iced_record,
CD_clean_record, CD_iced_record,
Cm_clean_record, Cm_iced_record,
delta_CL_record, delta_CD_record, delta_Cm_record, delta_Cl_record,
delta_Cn_record,
- flapper_freq_record, flapper_phi_record,
- flapper_phi_deg_record, flapper_Lift_record, flapper_Thrust_record,
- flapper_Inertia_record, flapper_Moment_record,
-
+ // added to uiuc_map_record6.cpp
boot_cycle_tail_record, boot_cycle_wing_left_record,
boot_cycle_wing_right_record, autoIPS_tail_record,
autoIPS_wing_left_record, autoIPS_wing_right_record,
eps_flap_max_record, eps_airspeed_max_record, eps_airspeed_min_record,
tactilefadefI_record,
- ap_Theta_ref_deg_record, ap_pah_on_record,
+ // added to uiuc_map_record6.cpp
+ ap_Theta_ref_deg_record, ap_pah_on_record, trigger_on_record,
+ trigger_num_record, trigger_toggle_record, trigger_counter_record};
- debug1_record, debug2_record, debug3_record};
// misc ======= Miscellaneous inputs
+// added to uiuc_map_misc.cpp
enum {simpleHingeMomentCoef_flag = 17000, dfTimefdf_flag, flapper_flag,
flapper_phi_init_flag};
double Alpha_dot_on_speed;
#define Alpha_dot_on_speed aircraft_->Alpha_dot_on_speed
+ bool use_gamma_horiz_on_speed;
+#define use_gamma_horiz_on_speed aircraft_->use_gamma_horiz_on_speed
+ double gamma_horiz_on_speed;
+#define gamma_horiz_on_speed aircraft_->gamma_horiz_on_speed
+
+
bool b_downwashMode;
#define b_downwashMode aircraft_->b_downwashMode
int downwashMode;
double flap_max, flap_rate;
#define flap_max aircraft_->flap_max
#define flap_rate aircraft_->flap_rate
+ bool use_flaps;
+#define use_flaps aircraft_->use_flaps
+
+ double spoiler_max, spoiler_rate;
+#define spoiler_max aircraft_->spoiler_max
+#define spoiler_rate aircraft_->spoiler_rate
+ bool use_spoilers;
+#define use_spoilers aircraft_->use_spoilers
+
bool flap_pos_input;
string flap_pos_input_file;
#define flap_pos_input_startTime aircraft_->flap_pos_input_startTime
+ // SAS system: pitch, roll and yaw damping MSS
+ double elevator_sas_KQ;
+ double elevator_sas_max;
+ double elevator_sas_min;
+ double elevator_stick_gain;
+ double aileron_sas_KP;
+ double aileron_sas_max;
+ double aileron_stick_gain;
+ double rudder_sas_KR;
+ double rudder_sas_max;
+ double rudder_stick_gain;
+
+
+
+#define elevator_sas_KQ aircraft_->elevator_sas_KQ
+#define elevator_sas_max aircraft_->elevator_sas_max
+#define elevator_sas_min aircraft_->elevator_sas_min
+#define elevator_stick_gain aircraft_->elevator_stick_gain
+#define aileron_sas_KP aircraft_->aileron_sas_KP
+#define aileron_sas_max aircraft_->aileron_sas_max
+#define aileron_stick_gain aircraft_->aileron_stick_gain
+#define rudder_sas_KR aircraft_->rudder_sas_KR
+#define rudder_sas_max aircraft_->rudder_sas_max
+#define rudder_stick_gain aircraft_->rudder_stick_gain
+
+ double elevator_sas;
+#define elevator_sas aircraft_->elevator_sas
+ double aileron_sas;
+#define aileron_sas aircraft_->aileron_sas
+ double rudder_sas;
+#define rudder_sas aircraft_->rudder_sas
+
+ bool use_elevator_sas_type1;
+#define use_elevator_sas_type1 aircraft_->use_elevator_sas_type1
+ bool use_elevator_sas_max;
+#define use_elevator_sas_max aircraft_->use_elevator_sas_max
+ bool use_elevator_sas_min;
+#define use_elevator_sas_min aircraft_->use_elevator_sas_min
+ bool use_elevator_stick_gain;
+#define use_elevator_stick_gain aircraft_->use_elevator_stick_gain
+ bool use_aileron_sas_type1;
+#define use_aileron_sas_type1 aircraft_->use_aileron_sas_type1
+ bool use_aileron_sas_max;
+#define use_aileron_sas_max aircraft_->use_aileron_sas_max
+ bool use_aileron_stick_gain;
+#define use_aileron_stick_gain aircraft_->use_aileron_stick_gain
+ bool use_rudder_sas_type1;
+#define use_rudder_sas_type1 aircraft_->use_rudder_sas_type1
+ bool use_rudder_sas_max;
+#define use_rudder_sas_max aircraft_->use_rudder_sas_max
+ bool use_rudder_stick_gain;
+#define use_rudder_stick_gain aircraft_->use_rudder_stick_gain
+
+
+
/* Variables (token2) ===========================================*/
/* controlsMixer = Control mixer ================================*/
double eta_q_Cm_q, eta_q_Cm_q_fac;
double eta_q_Cm_adot, eta_q_Cm_adot_fac;
double eta_q_Cmfade, eta_q_Cmfade_fac;
+ double eta_q_Cm_de, eta_q_Cm_de_fac;
double eta_q_Cl_beta, eta_q_Cl_beta_fac;
double eta_q_Cl_p, eta_q_Cl_p_fac;
double eta_q_Cl_r, eta_q_Cl_r_fac;
#define eta_q_Cm_adot_fac aircraft_->eta_q_Cm_adot_fac
#define eta_q_Cmfade aircraft_->eta_q_Cmfade
#define eta_q_Cmfade_fac aircraft_->eta_q_Cmfade_fac
+#define eta_q_Cm_de aircraft_->eta_q_Cm_de
+#define eta_q_Cm_de_fac aircraft_->eta_q_Cm_de_fac
#define eta_q_Cl_beta aircraft_->eta_q_Cl_beta
#define eta_q_Cl_beta_fac aircraft_->eta_q_Cl_beta_fac
#define eta_q_Cl_p aircraft_->eta_q_Cl_p
map <string,int> CD_map;
#define CD_map aircraft_->CD_map
- double CDo, CDK, CD_a, CD_adot, CD_q, CD_ih, CD_de;
+ double CDo, CDK, CLK, CD_a, CD_adot, CD_q, CD_ih, CD_de, CD_dr, CD_da, CD_beta;
+ double CD_df, CD_ds, CD_dg;
#define CDo aircraft_->CDo
#define CDK aircraft_->CDK
+#define CLK aircraft_->CLK
#define CD_a aircraft_->CD_a
#define CD_adot aircraft_->CD_adot
#define CD_q aircraft_->CD_q
#define CD_ih aircraft_->CD_ih
#define CD_de aircraft_->CD_de
+#define CD_dr aircraft_->CD_dr
+#define CD_da aircraft_->CD_da
+#define CD_beta aircraft_->CD_beta
+#define CD_df aircraft_->CD_df
+#define CD_ds aircraft_->CD_ds
+#define CD_dg aircraft_->CD_dg
+ bool b_CLK;
+#define b_CLK aircraft_->b_CLK
string CDfa;
double CDfa_aArray[100];
double CDfa_CDArray[100];
#define CXfaqf_nq_nice aircraft_->CXfaqf_nq_nice
#define CXfaqf_qArray_nice aircraft_->CXfaqf_qArray_nice
#define CXfaqf_aArray_nice aircraft_->CXfaqf_aArray_nice
- double CDo_save, CDK_save, CD_a_save, CD_adot_save, CD_q_save, CD_ih_save;
- double CD_de_save, CXo_save, CXK_save, CX_a_save, CX_a2_save, CX_a3_save;
+ double CDo_save, CDK_save, CLK_save, CD_a_save, CD_adot_save, CD_q_save, CD_ih_save;
+ double CD_de_save, CD_dr_save, CD_da_save, CD_beta_save;
+ double CD_df_save, CD_ds_save, CD_dg_save;
+ double CXo_save, CXK_save, CX_a_save, CX_a2_save, CX_a3_save;
double CX_adot_save, CX_q_save, CX_de_save;
double CX_dr_save, CX_df_save, CX_adf_save;
#define CDo_save aircraft_->CDo_save
#define CDK_save aircraft_->CDK_save
+#define CLK_save aircraft_->CLK_save
#define CD_a_save aircraft_->CD_a_save
#define CD_adot_save aircraft_->CD_adot_save
#define CD_q_save aircraft_->CD_q_save
#define CD_ih_save aircraft_->CD_ih_save
#define CD_de_save aircraft_->CD_de_save
+#define CD_dr_save aircraft_->CD_dr_save
+#define CD_da_save aircraft_->CD_da_save
+#define CD_beta_save aircraft_->CD_beta_save
+#define CD_df_save aircraft_->CD_df_save
+#define CD_ds_save aircraft_->CD_ds_save
+#define CD_dg_save aircraft_->CD_dg_save
#define CXo_save aircraft_->CXo_save
#define CXK_save aircraft_->CXK_save
#define CX_a_save aircraft_->CX_a_save
#define CL_map aircraft_->CL_map
double CLo, CL_a, CL_adot, CL_q, CL_ih, CL_de;
+ double CL_df, CL_ds, CL_dg;
#define CLo aircraft_->CLo
#define CL_a aircraft_->CL_a
#define CL_adot aircraft_->CL_adot
#define CL_q aircraft_->CL_q
#define CL_ih aircraft_->CL_ih
#define CL_de aircraft_->CL_de
+#define CL_df aircraft_->CL_df
+#define CL_ds aircraft_->CL_ds
+#define CL_dg aircraft_->CL_dg
string CLfa;
double CLfa_aArray[100];
double CLfa_CLArray[100];
#define CZfaqf_aArray_nice aircraft_->CZfaqf_aArray_nice
double CLo_save, CL_a_save, CL_adot_save;
double CL_q_save, CL_ih_save, CL_de_save;
+ double CL_df_save, CL_ds_save, CL_dg_save;
double CZo_save, CZ_a_save, CZ_a2_save;
double CZ_a3_save, CZ_adot_save, CZ_q_save;
double CZ_de_save, CZ_deb2_save, CZ_df_save;
#define CL_q_save aircraft_->CL_q_save
#define CL_ih_save aircraft_->CL_ih_save
#define CL_de_save aircraft_->CL_de_save
+#define CL_df_save aircraft_->CL_df_save
+#define CL_ds_save aircraft_->CL_ds_save
+#define CL_dg_save aircraft_->CL_dg_save
#define CZo_save aircraft_->CZo_save
#define CZ_a_save aircraft_->CZ_a_save
#define CZ_a2_save aircraft_->CZ_a2_save
#define Cm_map aircraft_->Cm_map
double Cmo, Cm_a, Cm_a2, Cm_adot, Cm_q;
- double Cm_ih, Cm_de, Cm_b2, Cm_r, Cm_df;
+ double Cm_ih, Cm_de, Cm_b2, Cm_r;
+ double Cm_df, Cm_ds, Cm_dg;
#define Cmo aircraft_->Cmo
#define Cm_a aircraft_->Cm_a
#define Cm_a2 aircraft_->Cm_a2
#define Cm_b2 aircraft_->Cm_b2
#define Cm_r aircraft_->Cm_r
#define Cm_df aircraft_->Cm_df
+#define Cm_ds aircraft_->Cm_ds
+#define Cm_dg aircraft_->Cm_dg
string Cmfa;
double Cmfa_aArray[100];
double Cmfa_CmArray[100];
#define Cmfaqf_qArray_nice aircraft_->Cmfaqf_qArray_nice
#define Cmfaqf_aArray_nice aircraft_->Cmfaqf_aArray_nice
double Cmo_save, Cm_a_save, Cm_a2_save, Cm_adot_save, Cm_q_save, Cm_ih_save;
- double Cm_de_save, Cm_b2_save, Cm_r_save, Cm_df_save;
+ double Cm_de_save, Cm_b2_save, Cm_r_save;
+ double Cm_df_save, Cm_ds_save, Cm_dg_save;
#define Cmo_save aircraft_->Cmo_save
#define Cm_a_save aircraft_->Cm_a_save
#define Cm_a2_save aircraft_->Cm_a2_save
#define Cm_b2_save aircraft_->Cm_b2_save
#define Cm_r_save aircraft_->Cm_r_save
#define Cm_df_save aircraft_->Cm_df_save
+#define Cm_ds_save aircraft_->Cm_ds_save
+#define Cm_dg_save aircraft_->Cm_dg_save
/* Variables (token2) ===========================================*/
#define kgear aircraft_->kgear
#define muGear aircraft_->muGear
#define strutLength aircraft_->strutLength
+ double gear_max, gear_rate;
+#define gear_max aircraft_->gear_max
+#define gear_rate aircraft_->gear_rate
+ bool use_gear;
+#define use_gear aircraft_->use_gear
/* Variables (token2) ===========================================*/
AIRCRAFT()
{
- fog_field = false;
+ fog_field;
fog_segments = 0;
fog_point_index = -1;
fog_time = NULL;
#define elevator_deg aircraft_->elevator_deg
#define aileron_deg aircraft_->aileron_deg
#define rudder_deg aircraft_->rudder_deg
- double flap_deg;
-#define flap_deg aircraft_->flap_deg
+ // double flap_pos_deg;
+ //#define flap_pos_deg aircraft_->flap_pos_deg
/***** Forces ******/
double F_X_wind, F_Y_wind, F_Z_wind;
#define dfTimefdf_TimeArray aircraft_->dfTimefdf_TimeArray
#define dfTimefdf_ndf aircraft_->dfTimefdf_ndf
-// FlapData *flapper_data;
-//#define flapper_data aircraft_->flapper_data
-// bool flapper_model;
-//#define flapper_model aircraft_->flapper_model
-// double flapper_phi_init;
-//#define flapper_phi_init aircraft_->flapper_phi_init
-// double flapper_freq, flapper_cycle_pct, flapper_phi;
-// double flapper_Lift, flapper_Thrust, flapper_Inertia;
-// double flapper_Moment;
-//#define flapper_freq aircraft_->flapper_freq
-//#define flapper_cycle_pct aircraft_->flapper_cycle_pct
-//#define flapper_phi aircraft_->flapper_phi
-//#define flapper_Lift aircraft_->flapper_Lift
-//#define flapper_Thrust aircraft_->flapper_Thrust
-//#define flapper_Inertia aircraft_->flapper_Inertia
-//#define flapper_Moment aircraft_->flapper_Moment
+ FlapData *flapper_data;
+#define flapper_data aircraft_->flapper_data
+ bool flapper_model;
+#define flapper_model aircraft_->flapper_model
+ double flapper_phi_init;
+#define flapper_phi_init aircraft_->flapper_phi_init
+ double flapper_freq, flapper_cycle_pct, flapper_phi;
+ double flapper_Lift, flapper_Thrust, flapper_Inertia;
+ double flapper_Moment;
+#define flapper_freq aircraft_->flapper_freq
+#define flapper_cycle_pct aircraft_->flapper_cycle_pct
+#define flapper_phi aircraft_->flapper_phi
+#define flapper_Lift aircraft_->flapper_Lift
+#define flapper_Thrust aircraft_->flapper_Thrust
+#define flapper_Inertia aircraft_->flapper_Inertia
+#define flapper_Moment aircraft_->flapper_Moment
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
#define dfArray aircraft_->dfArray
#define TimeArray aircraft_->TimeArray
- double flap_percent, flap_goal, flap_moving_rate, flap_pos;
-#define flap_percent aircraft_->flap_percent
-#define flap_goal aircraft_->flap_goal
-#define flap_moving_rate aircraft_->flap_moving_rate
-#define flap_pos aircraft_->flap_pos
+ double flap_percent, flap_increment_per_timestep, flap_cmd, flap_pos, flap_pos_pct;
+#define flap_percent aircraft_->flap_percent
+#define flap_increment_per_timestep aircraft_->flap_increment_per_timestep
+#define flap_cmd aircraft_->flap_cmd
+ //#define flap_cmd_deg aircraft_->flap_cmd_deg
+#define flap_pos aircraft_->flap_pos
+ //#define flap_pos_deg aircraft_->flap_pos_deg
+#define flap_pos_pct aircraft_->flap_pos_pct
+
+ double Spoiler_handle, spoiler_increment_per_timestep, spoiler_cmd_deg;
+ double spoiler_pos_norm, spoiler_pos_deg, spoiler_pos;
+#define Spoiler_handle aircraft_->Spoiler_handle
+#define spoiler_increment_per_timestep aircraft_->spoiler_increment_per_timestep
+#define spoiler_cmd_deg aircraft_->spoiler_cmd_deg
+#define spoiler_pos_deg aircraft_->spoiler_pos_deg
+#define spoiler_pos_norm aircraft_->spoiler_pos_norm
+#define spoiler_pos aircraft_->spoiler_pos
+
+ double Gear_handle, gear_increment_per_timestep, gear_cmd_norm, gear_pos_norm;
+#define Gear_handle aircraft_->Gear_handle
+#define gear_increment_per_timestep aircraft_->gear_increment_per_timestep
+#define gear_cmd_norm aircraft_->gear_cmd_norm
+#define gear_pos_norm aircraft_->gear_pos_norm
double delta_CL, delta_CD, delta_Cm, delta_Ch, delta_Cl, delta_Cn;
#define delta_CL aircraft_->delta_CL
#define fout aircraft_->fout
- bool dont_ignore;
-#define dont_ignore aircraft_->dont_ignore
+ bool ignore_unknown_keywords;
+#define ignore_unknown_keywords aircraft_->ignore_unknown_keywords
int ap_pah_on;
#define ap_pah_on aircraft_->ap_pah_on
#define ap_Theta_ref_deg aircraft_->ap_Theta_ref_deg
#define ap_Theta_ref_rad aircraft_->ap_Theta_ref_rad
+ int ap_alh_on;
+#define ap_alh_on aircraft_->ap_alh_on
+ double ap_alt_ref_ft, ap_alt_ref_m;
+#define ap_alt_ref_ft aircraft_->ap_alt_ref_ft
+#define ap_alt_ref_m aircraft_->ap_alt_ref_m
+
int pitch_trim_up, pitch_trim_down;
#define pitch_trim_up aircraft_->pitch_trim_up
#define pitch_trim_down aircraft_->pitch_trim_down
#define ice_left aircraft_->ice_left
#define ice_right aircraft_->ice_right
+ // Variables for the trigger command
+ int trigger_on, trigger_last_time_step, trigger_num;
+ int trigger_toggle, trigger_counter;
+#define trigger_on aircraft_->trigger_on
+#define trigger_last_time_step aircraft_->trigger_last_time_step
+#define trigger_num aircraft_->trigger_num
+#define trigger_toggle aircraft_->trigger_toggle
+#define trigger_counter aircraft_->trigger_counter
};
extern AIRCRAFT *aircraft_; // usually defined in the first program that includes uiuc_aircraft.h
--- /dev/null
+// * *
+// * alh_ap.C *
+// * *
+// * ALH autopilot function. takes in the state *
+// * variables and reference height as arguments *
+// * (there are other variable too as arguments *
+// * as listed below) *
+// * and returns the elevator deflection angle at *
+// * every time step. *
+// * *
+// * Written 7/8/02 by Vikrant Sharma *
+// * *
+// *****************************************************
+
+//#include <iostream.h>
+//#include <stddef.h>
+
+// define u2prev,ubarprev,x1prev,x2prev and x3prev in the main function
+// that uses this autopilot function. give them initial values at origin.
+// Pass these values to the A/P function as an argument and pass by
+// reference
+// Parameters passed as arguments to the function:
+// H - Current Height of the a/c at the current simulation time.
+// pitch - Current pitch angle ,,,,,,,,,,,,
+// pitchrate - current rate of change of pitch angle
+// H_ref - reference Height differential wanted
+// sample_t - sampling time
+// V - aircraft's current velocity
+// u2prev - u2 value at the previous time step.
+// ubar prev - ubar ,,,,,,,,,,,,,,,,,,,,,,,
+// x1prev - x1 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+// x2prev - x2 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+// x3prev - x3 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+// the autpilot function (alh_ap) changes these values at every time step.
+// so the simulator guys don't have to do it. Since these values are
+// passed by reference to the function.
+
+// RD changed float to double
+
+#include "uiuc_alh_ap.h"
+
+double alh_ap(double pitch, double pitchrate, double H_ref, double H,
+ double V, double sample_t, int init)
+{
+ // changes by RD so function keeps previous values
+ static double u2prev;
+ static double x1prev;
+ static double x2prev;
+ static double x3prev;
+ static double ubarprev;
+
+ double pi = 3.14159;
+
+ if (init == 0)
+ {
+ u2prev = 0;
+ x1prev = 0;
+ x2prev = 0;
+ x3prev = 0;
+ ubarprev = 0;
+ }
+
+ double Ki;
+ double Ktheta;
+ double Kq;
+ double deltae;
+ double Kh,Kd;
+ double x1, x2, x3;
+ Ktheta = -0.0004*V*V + 0.0479*V - 2.409;
+ Kq = -0.0005*V*V + 0.054*V - 1.5931;
+ Ki = 0.5;
+ Kh = -0.25*pi/180 + (((-0.15 + 0.25)*pi/180)/(20))*(V-60);
+ Kd = -0.0025*V + 0.2875;
+ double u1,u2,u3,ubar;
+ ubar = (1-Kd*sample_t)*ubarprev + Ktheta*pitchrate*sample_t;
+ u1 = Kh*(H_ref-H) - ubar;
+ u2 = u2prev + Ki*(Kh*(H_ref-H)-ubar)*sample_t;
+ u3 = Kq*pitchrate;
+ double totalU;
+ totalU = u1 + u2 - u3;
+ u2prev = u2;
+ ubarprev = ubar;
+// the following is using the actuator dynamics given in Beaver.
+// the actuator dynamics for Twin Otter are still unavailable.
+ x1 = x1prev +(-10.951*x1prev + 7.2721*x2prev + 20.7985*x3prev +
+25.1568*totalU)*sample_t;
+ x2 = x2prev + x3prev*sample_t;
+ x3 = x3prev + (7.3446*x1prev - 668.6713*x2prev - 16.8697*x3prev +
+5.8694*totalU)*sample_t;
+ deltae = 57.2958*x2;
+ x1prev = x1;
+ x2prev = x2;
+ x3prev = x3;
+return deltae;
+}
--- /dev/null
+
+#ifndef _ALH_AP_H_
+#define _ALH_AP_H_
+
+double alh_ap(double pitch, double pitchrate, double H_ref, double H,
+ double V, double sample_t, int init);
+
+#endif //_ALH_AP_H_
----------------------------------------------------------------------
AUTHOR(S): Bipin Sehgal <bsehgal@uiuc.edu>
- Jeff Scott <jscott@mail.com>
+ Jeff Scott http://www.jeffscott.net/
Robert Deters <rdeters@uiuc.edu>
----------------------------------------------------------------------
CDo = uiuc_ice_filter(CDo_clean,kCDo);
}
CDo_save = CDo;
- CD += CDo;
+ CD += CDo_save;
break;
}
case CDK_flag:
{
CDK = uiuc_ice_filter(CDK_clean,kCDK);
}
- CDK_save = CDK * CL * CL;
- CD += CDK * CL * CL;
+ if (b_CLK)
+ {
+ CDK_save = CDK * (CL - CLK) * (CL - CLK);
+ }
+ else
+ {
+ CDK_save = CDK * CL * CL;
+ }
+ CD += CDK_save;
break;
}
case CD_a_flag:
CD_a = uiuc_ice_filter(CD_a_clean,kCD_a);
}
CD_a_save = CD_a * Alpha;
- CD += CD_a * Alpha;
+ CD += CD_a_save;
break;
}
case CD_adot_flag:
/* CD_adot must be mulitplied by cbar/2U
(see Roskam Control book, Part 1, pg. 147) */
CD_adot_save = CD_adot * Alpha_dot * cbar_2U;
- CD += CD_adot * Alpha_dot * cbar_2U;
+ CD += CD_adot_save;
break;
}
case CD_q_flag:
/* why multiply by Theta_dot instead of Q_body?
see note in coef_lift.cpp */
CD_q_save = CD_q * Theta_dot * cbar_2U;
- CD += CD_q * Theta_dot * cbar_2U;
+ CD += CD_q_save;
break;
}
case CD_ih_flag:
{
CD_ih_save = fabs(CD_ih * ih);
- CD += fabs(CD_ih * ih);
+ CD += CD_ih_save;
break;
}
case CD_de_flag:
CD_de = uiuc_ice_filter(CD_de_clean,kCD_de);
}
CD_de_save = fabs(CD_de * elevator);
- CD += fabs(CD_de * elevator);
+ CD += CD_de_save;
+ break;
+ }
+ case CD_dr_flag:
+ {
+ CD_dr_save = fabs(CD_dr * rudder);
+ CD += CD_dr_save;
+ break;
+ }
+ case CD_da_flag:
+ {
+ CD_da_save = fabs(CD_da * aileron);
+ CD += CD_da_save;
+ break;
+ }
+ case CD_beta_flag:
+ {
+ CD_beta_save = fabs(CD_beta * Beta);
+ CD += CD_beta_save;
+ break;
+ }
+ case CD_df_flag:
+ {
+ CD_df_save = fabs(CD_df * flap_pos);
+ CD += CD_df_save;
+ break;
+ }
+ case CD_ds_flag:
+ {
+ CD_ds_save = fabs(CD_ds * spoiler_pos);
+ CD += CD_ds_save;
+ break;
+ }
+ case CD_dg_flag:
+ {
+ CD_dg_save = fabs(CD_dg * gear_pos_norm);
+ CD += CD_dg_save;
break;
}
case CDfa_flag:
CDfdfI = uiuc_1Dinterpolation(CDfdf_dfArray,
CDfdf_CDArray,
CDfdf_ndf,
- flap);
+ flap_pos);
CD += CDfdfI;
break;
}
CDfadf_nAlphaArray,
CDfadf_ndf,
Alpha,
- flap);
+ flap_pos);
CD += CDfadfI;
break;
}
}
}
CXo_save = CXo;
- CX += CXo;
+ CX += CXo_save;
break;
}
case CXK_flag:
}
}
CXK_save = CXK * CZ * CZ;
- CX += CXK * CZ * CZ;
+ CX += CXK_save;
break;
}
case CX_a_flag:
}
}
CX_a_save = CX_a * Alpha;
- CX += CX_a * Alpha;
+ CX += CX_a_save;
break;
}
case CX_a2_flag:
}
}
CX_a2_save = CX_a2 * Alpha * Alpha;
- CX += CX_a2 * Alpha * Alpha;
+ CX += CX_a2_save;
break;
}
case CX_a3_flag:
}
}
CX_a3_save = CX_a3 * Alpha * Alpha * Alpha;
- CX += CX_a3 * Alpha * Alpha * Alpha;
+ CX += CX_a3_save;
break;
}
case CX_adot_flag:
/* CX_adot must be mulitplied by cbar/2U
(see Roskam Control book, Part 1, pg. 147) */
CX_adot_save = CX_adot * Alpha_dot * cbar_2U;
- CX += CX_adot * Alpha_dot * cbar_2U;
+ CX += CX_adot_save;
break;
}
case CX_q_flag:
/* CX_q must be mulitplied by cbar/2U
(see Roskam Control book, Part 1, pg. 147) */
CX_q_save = CX_q * Q_body * cbar_2U;
- CX += CX_q * Q_body * cbar_2U;
+ CX += CX_q_save;
break;
}
case CX_de_flag:
}
}
CX_de_save = CX_de * elevator;
- CX += CX_de * elevator;
+ CX += CX_de_save;
break;
}
case CX_dr_flag:
}
}
CX_dr_save = CX_dr * rudder;
- CX += CX_dr * rudder;
+ CX += CX_dr_save;
break;
}
case CX_df_flag:
CX_df = uiuc_ice_filter(CX_df_clean,kCX_df);
if (beta_model)
{
- CXclean_wing += CX_df_clean * flap;
- CXclean_tail += CX_df_clean * flap;
- CXiced_wing += CX * flap;
- CXiced_tail += CX * flap;
+ CXclean_wing += CX_df_clean * flap_pos;
+ CXclean_tail += CX_df_clean * flap_pos;
+ CXiced_wing += CX * flap_pos;
+ CXiced_tail += CX * flap_pos;
}
}
- CX_df_save = CX_df * flap;
- CX += CX_df * flap;
+ CX_df_save = CX_df * flap_pos;
+ CX += CX_df_save;
break;
}
case CX_adf_flag:
CX_adf = uiuc_ice_filter(CX_adf_clean,kCX_adf);
if (beta_model)
{
- CXclean_wing += CX_adf_clean * Alpha * flap;
- CXclean_tail += CX_adf_clean * Alpha * flap;
- CXiced_wing += CX_adf * Alpha * flap;
- CXiced_tail += CX_adf * Alpha * flap;
+ CXclean_wing += CX_adf_clean * Alpha * flap_pos;
+ CXclean_tail += CX_adf_clean * Alpha * flap_pos;
+ CXiced_wing += CX_adf * Alpha * flap_pos;
+ CXiced_tail += CX_adf * Alpha * flap_pos;
}
}
- CX_adf_save = CX_adf * Alpha * flap;
- CX += CX_adf * Alpha * flap;
+ CX_adf_save = CX_adf * Alpha * flap_pos;
+ CX += CX_adf_save;
break;
}
case CXfabetaf_flag:
}
}
CLo_save = CLo;
- CL += CLo;
+ CL += CLo_save;
break;
}
case CL_a_flag:
}
}
CL_a_save = CL_a * Alpha;
- CL += CL_a * Alpha;
+ CL += CL_a_save;
break;
}
case CL_adot_flag:
/* CL_adot must be mulitplied by cbar/2U
(see Roskam Control book, Part 1, pg. 147) */
CL_adot_save = CL_adot * Alpha_dot * cbar_2U;
- CL += CL_adot * Alpha_dot * cbar_2U;
+ CL += CL_adot_save;
break;
}
case CL_q_flag:
that is what is done in c172_aero.c; assume it
has something to do with axes systems */
CL_q_save = CL_q * Theta_dot * cbar_2U;
- CL += CL_q * Theta_dot * cbar_2U;
+ CL += CL_q_save;
break;
}
case CL_ih_flag:
{
CL_ih_save = CL_ih * ih;
- CL += CL_ih * ih;
+ CL += CL_ih_save;
break;
}
case CL_de_flag:
}
}
CL_de_save = CL_de * elevator;
- CL += 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:
}
}
CZo_save = CZo;
- CZ += CZo;
+ CZ += CZo_save;
break;
}
case CZ_a_flag:
}
}
CZ_a_save = CZ_a * Alpha;
- CZ += CZ_a * Alpha;
+ CZ += CZ_a_save;
break;
}
case CZ_a2_flag:
}
}
CZ_a2_save = CZ_a2 * Alpha * Alpha;
- CZ += CZ_a2 * Alpha * Alpha;
+ CZ += CZ_a2_save;
break;
}
case CZ_a3_flag:
}
}
CZ_a3_save = CZ_a3 * Alpha * Alpha * Alpha;
- CZ += CZ_a3 * Alpha * Alpha * Alpha;
+ CZ += CZ_a3_save;
break;
}
case CZ_adot_flag:
/* CZ_adot must be mulitplied by cbar/2U
(see Roskam Control book, Part 1, pg. 147) */
CZ_adot_save = CZ_adot * Alpha_dot * cbar_2U;
- CZ += CZ_adot * Alpha_dot * cbar_2U;
+ CZ += CZ_adot_save;
break;
}
case CZ_q_flag:
/* CZ_q must be mulitplied by cbar/2U
(see Roskam Control book, Part 1, pg. 147) */
CZ_q_save = CZ_q * Q_body * cbar_2U;
- CZ += CZ_q * Q_body * cbar_2U;
+ CZ += CZ_q_save;
break;
}
case CZ_de_flag:
}
}
CZ_de_save = CZ_de * elevator;
- CZ += CZ_de * elevator;
+ CZ += CZ_de_save;
break;
}
case CZ_deb2_flag:
}
}
CZ_deb2_save = CZ_deb2 * elevator * Beta * Beta;
- CZ += CZ_deb2 * elevator * Beta * Beta;
+ CZ += CZ_deb2_save;
break;
}
case CZ_df_flag:
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_df_save = CZ_df * flap;
- CZ += CZ_df * flap;
+ CZ_df_save = CZ_df * flap_pos;
+ CZ += CZ_df_save;
break;
}
case CZ_adf_flag:
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 * Alpha * flap_pos;
+ CZclean_tail += CZ_adf_clean * Alpha * flap_pos;
+ CZiced_wing += CZ_adf * Alpha * flap_pos;
+ CZiced_tail += CZ_adf * Alpha * flap_pos;
}
}
- CZ_adf_save = CZ_adf * Alpha * flap;
- CZ += CZ_adf * Alpha * flap;
+ CZ_adf_save = CZ_adf * Alpha * flap_pos;
+ CZ += CZ_adf_save;
break;
}
case CZfa_flag:
Cmo = uiuc_ice_filter(Cmo_clean,kCmo);
}
Cmo_save = Cmo;
- Cm += Cmo;
+ Cm += Cmo_save;
break;
}
case Cm_a_flag:
Cm_a = uiuc_ice_filter(Cm_a_clean,kCm_a);
}
Cm_a_save = Cm_a * Alpha;
- Cm += Cm_a * Alpha;
+ Cm += Cm_a_save;
break;
}
case Cm_a2_flag:
Cm_a2 = uiuc_ice_filter(Cm_a2_clean,kCm_a2);
}
Cm_a2_save = Cm_a2 * Alpha * Alpha;
- Cm += Cm_a2 * Alpha * 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_adot_save = 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;
/* 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;
if (eta_q_Cm_q_fac)
{
Cm += Cm_q_save * eta_q_Cm_q_fac;
case Cm_ih_flag:
{
Cm_ih_save = Cm_ih * ih;
- Cm += Cm_ih * ih;
+ Cm += Cm_ih_save;
break;
}
case Cm_de_flag:
Cm_de = uiuc_ice_filter(Cm_de_clean,kCm_de);
}
Cm_de_save = Cm_de * elevator;
- Cm += 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_b2_save = Cm_b2 * Beta * Beta;
- Cm += Cm_b2 * Beta * Beta;
+ Cm += Cm_b2_save;
break;
}
case Cm_r_flag:
Cm_r = uiuc_ice_filter(Cm_r_clean,kCm_r);
}
Cm_r_save = Cm_r * R_body * b_2U;
- Cm += 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_df_save = Cm_df * flap;
- 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:
CmfdfI = uiuc_1Dinterpolation(Cmfdf_dfArray,
Cmfdf_CmArray,
Cmfdf_ndf,
- flap);
+ flap_pos);
Cm += CmfdfI;
break;
}
Cmfadf_nAlphaArray,
Cmfadf_ndf,
Alpha,
- flap);
+ flap_pos);
Cm += CmfadfI;
break;
}
Clo = uiuc_ice_filter(Clo_clean,kClo);
}
Clo_save = Clo;
- Cl += Clo;
+ Cl += Clo_save;
break;
}
case Cl_beta_flag:
Cl_beta = uiuc_ice_filter(Cl_beta_clean,kCl_beta);
}
Cl_beta_save = Cl_beta * Beta;
- // Cl += Cl_beta * Beta;
if (eta_q_Cl_beta_fac)
{
Cl += Cl_beta_save * eta_q_Cl_beta_fac;
/* 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;
if (eta_q_Cl_p_fac)
{
Cl += Cl_p_save * eta_q_Cl_p_fac;
/* 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;
if (eta_q_Cl_r_fac)
{
Cl += Cl_r_save * eta_q_Cl_r_fac;
Cl_da = uiuc_ice_filter(Cl_da_clean,kCl_da);
}
Cl_da_save = Cl_da * aileron;
- Cl += Cl_da * aileron;
+ Cl += Cl_da_save;
break;
}
case Cl_dr_flag:
Cl_dr = uiuc_ice_filter(Cl_dr_clean,kCl_dr);
}
Cl_dr_save = Cl_dr * rudder;
- // Cl += Cl_dr * rudder;
if (eta_q_Cl_dr_fac)
{
Cl += Cl_dr_save * eta_q_Cl_dr_fac;
Cl_daa = uiuc_ice_filter(Cl_daa_clean,kCl_daa);
}
Cl_daa_save = Cl_daa * aileron * Alpha;
- Cl += Cl_daa * aileron * Alpha;
+ Cl += Cl_daa_save;
break;
}
case Clfada_flag:
CYo = uiuc_ice_filter(CYo_clean,kCYo);
}
CYo_save = CYo;
- CY += CYo;
+ CY += CYo_save;
break;
}
case CY_beta_flag:
CY_beta = uiuc_ice_filter(CY_beta_clean,kCY_beta);
}
CY_beta_save = CY_beta * Beta;
- // CY += CY_beta * Beta;
if (eta_q_CY_beta_fac)
{
CY += CY_beta_save * eta_q_CY_beta_fac;
/* 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;
if (eta_q_CY_p_fac)
{
CY += CY_p_save * eta_q_CY_p_fac;
/* 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;
if (eta_q_CY_r_fac)
{
CY += CY_r_save * eta_q_CY_r_fac;
CY_da = uiuc_ice_filter(CY_da_clean,kCY_da);
}
CY_da_save = CY_da * aileron;
- CY += CY_da * aileron;
+ CY += CY_da_save;
break;
}
case CY_dr_flag:
CY_dr = uiuc_ice_filter(CY_dr_clean,kCY_dr);
}
CY_dr_save = CY_dr * rudder;
- // CY += CY_dr * rudder;
if (eta_q_CY_dr_fac)
{
CY += CY_dr_save * eta_q_CY_dr_fac;
CY_dra = uiuc_ice_filter(CY_dra_clean,kCY_dra);
}
CY_dra_save = CY_dra * rudder * Alpha;
- CY += CY_dra * rudder * Alpha;
+ CY += CY_dra_save;
break;
}
case CY_bdot_flag:
CY_bdot = uiuc_ice_filter(CY_bdot_clean,kCY_bdot);
}
CY_bdot_save = CY_bdot * Beta_dot * b_2U;
- CY += CY_bdot * Beta_dot * b_2U;
+ CY += CY_bdot_save;
break;
}
case CYfada_flag:
Cno = uiuc_ice_filter(Cno_clean,kCno);
}
Cno_save = Cno;
- Cn += Cno;
+ Cn += Cno_save;
break;
}
case Cn_beta_flag:
Cn_beta = uiuc_ice_filter(Cn_beta_clean,kCn_beta);
}
Cn_beta_save = Cn_beta * Beta;
- // Cn += Cn_beta * Beta;
if (eta_q_Cn_beta_fac)
{
Cn += Cn_beta_save * eta_q_Cn_beta_fac;
/* 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;
if (eta_q_Cn_p_fac)
{
Cn += Cn_p_save * eta_q_Cn_p_fac;
/* 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;
if (eta_q_Cn_r_fac)
{
Cn += Cn_r_save * eta_q_Cn_r_fac;
Cn_da = uiuc_ice_filter(Cn_da_clean,kCn_da);
}
Cn_da_save = Cn_da * aileron;
- Cn += Cn_da * aileron;
+ Cn += Cn_da_save;
break;
}
case Cn_dr_flag:
Cn_dr = uiuc_ice_filter(Cn_dr_clean,kCn_dr);
}
Cn_dr_save = Cn_dr * rudder;
- // Cn += Cn_dr * rudder;
if (eta_q_Cn_dr_fac)
{
Cn += Cn_dr_save * eta_q_Cn_dr_fac;
Cn_q = uiuc_ice_filter(Cn_q_clean,kCn_q);
}
Cn_q_save = Cn_q * Q_body * cbar_2U;
- Cn += Cn_q * Q_body * cbar_2U;
+ Cn += Cn_q_save;
break;
}
case Cn_b3_flag:
Cn_b3 = uiuc_ice_filter(Cn_b3_clean,kCn_b3);
}
Cn_b3_save = Cn_b3 * Beta * Beta * Beta;
- Cn += Cn_b3 * Beta * Beta * Beta;
+ Cn += Cn_b3_save;
break;
}
case Cnfada_flag:
pilot_rud_no.
07/05/2001 (RD) Added pilot_(elev,ail,rud)_no=false
01/11/2002 (AP) Added call to uiuc_bootTime()
+ 12/02/2002 (RD) Moved icing demo interpolations to its
+ own function
----------------------------------------------------------------------
**********************************************************************/
#include "uiuc_coefficients.h"
-#include "uiuc_warnings_errors.h"
-#include <string.h>
-
void uiuc_coefficients(double dt)
{
static string uiuc_coefficients_error = " (from uiuc_coefficients.cpp) ";
double l_trim, l_defl;
double V_rel_wind_dum, U_body_dum;
+ static bool ap_pah_on_prev = false;
+ int ap_pah_init = 1;
+ static bool ap_alh_on_prev = false;
+ int ap_alh_init = 1;
if (Alpha_init_true && Simtime==0)
Alpha = Alpha_init;
uiuc_controlInput();
}
- if (icing_demo)
+ if (ap_pah_on && icing_demo==false)
{
- if (demo_ap_pah_on){
- double time = Simtime - demo_ap_pah_on_startTime;
- ap_pah_on = uiuc_1Dinterpolation(demo_ap_pah_on_timeArray,
- demo_ap_pah_on_daArray,
- demo_ap_pah_on_ntime,
- time);
- }
- if (demo_ap_Theta_ref_deg){
- double time = Simtime - demo_ap_Theta_ref_deg_startTime;
- ap_Theta_ref_deg = uiuc_1Dinterpolation(demo_ap_Theta_ref_deg_timeArray,
- demo_ap_Theta_ref_deg_daArray,
- demo_ap_Theta_ref_deg_ntime,
- time);
- }
+ double V_rel_wind_ms;
+ V_rel_wind_ms = V_rel_wind * 0.3048;
+ ap_Theta_ref_rad = ap_Theta_ref_deg * DEG_TO_RAD;
+ if (ap_pah_on_prev == false)
+ ap_pah_init = 0;
+ elevator = pah_ap(Theta, Theta_dot, ap_Theta_ref_rad, V_rel_wind_ms, dt,
+ ap_pah_init);
+ if (elevator*RAD_TO_DEG <= -1*demax)
+ elevator = -1*demax * DEG_TO_RAD;
+ if (elevator*RAD_TO_DEG >= demin)
+ elevator = demin * DEG_TO_RAD;
+ pilot_elev_no=true;
}
- if (ap_pah_on)
+
+ if (ap_alh_on && icing_demo==false)
{
double V_rel_wind_ms;
+ double Altitude_m;
V_rel_wind_ms = V_rel_wind * 0.3048;
- ap_Theta_ref_rad = ap_Theta_ref_deg * DEG_TO_RAD;
- elevator = pah_ap(Theta, Theta_dot, ap_Theta_ref_rad, V_rel_wind_ms, dt);
+ ap_alt_ref_m = ap_alt_ref_ft * 0.3048;
+ Altitude_m = Altitude * 0.3048;
+ if (ap_alh_on_prev == false)
+ ap_alh_init = 0;
+ elevator = alh_ap(Theta, Theta_dot, ap_alt_ref_m, Altitude_m,
+ V_rel_wind_ms, dt, ap_alh_init);
if (elevator*RAD_TO_DEG <= -1*demax)
elevator = -1*demax * DEG_TO_RAD;
if (elevator*RAD_TO_DEG >= demin)
time);
}
if (icing_demo)
- {
- if (demo_eps_alpha_max) {
- double time = Simtime - demo_eps_alpha_max_startTime;
- eps_alpha_max = uiuc_1Dinterpolation(demo_eps_alpha_max_timeArray,
- demo_eps_alpha_max_daArray,
- demo_eps_alpha_max_ntime,
- time);
- }
- if (demo_eps_pitch_max) {
- double time = Simtime - demo_eps_pitch_max_startTime;
- eps_pitch_max = uiuc_1Dinterpolation(demo_eps_pitch_max_timeArray,
- demo_eps_pitch_max_daArray,
- demo_eps_pitch_max_ntime,
- time);
- }
- if (demo_eps_pitch_min) {
- double time = Simtime - demo_eps_pitch_min_startTime;
- eps_pitch_min = uiuc_1Dinterpolation(demo_eps_pitch_min_timeArray,
- demo_eps_pitch_min_daArray,
- demo_eps_pitch_min_ntime,
- time);
- }
- if (demo_eps_roll_max) {
- double time = Simtime - demo_eps_roll_max_startTime;
- eps_roll_max = uiuc_1Dinterpolation(demo_eps_roll_max_timeArray,
- demo_eps_roll_max_daArray,
- demo_eps_roll_max_ntime,
- time);
- }
- if (demo_eps_thrust_min) {
- double time = Simtime - demo_eps_thrust_min_startTime;
- eps_thrust_min = uiuc_1Dinterpolation(demo_eps_thrust_min_timeArray,
- demo_eps_thrust_min_daArray,
- demo_eps_thrust_min_ntime,
- time);
- }
- if (demo_eps_airspeed_max) {
- double time = Simtime - demo_eps_airspeed_max_startTime;
- eps_airspeed_max = uiuc_1Dinterpolation(demo_eps_airspeed_max_timeArray,
- demo_eps_airspeed_max_daArray,
- demo_eps_airspeed_max_ntime,
- time);
- }
- if (demo_eps_airspeed_min) {
- double time = Simtime - demo_eps_airspeed_min_startTime;
- eps_airspeed_min = uiuc_1Dinterpolation(demo_eps_airspeed_min_timeArray,
- demo_eps_airspeed_min_daArray,
- demo_eps_airspeed_min_ntime,
- time);
- }
- if (demo_eps_flap_max) {
- double time = Simtime - demo_eps_flap_max_startTime;
- eps_flap_max = uiuc_1Dinterpolation(demo_eps_flap_max_timeArray,
- demo_eps_flap_max_daArray,
- demo_eps_flap_max_ntime,
- time);
- }
- if (demo_boot_cycle_tail) {
- double time = Simtime - demo_boot_cycle_tail_startTime;
- boot_cycle_tail = uiuc_1Dinterpolation(demo_boot_cycle_tail_timeArray,
- demo_boot_cycle_tail_daArray,
- demo_boot_cycle_tail_ntime,
- time);
- }
- if (demo_boot_cycle_wing_left) {
- double time = Simtime - demo_boot_cycle_wing_left_startTime;
- boot_cycle_wing_left = uiuc_1Dinterpolation(demo_boot_cycle_wing_left_timeArray,
- demo_boot_cycle_wing_left_daArray,
- demo_boot_cycle_wing_left_ntime,
- time);
- }
- if (demo_boot_cycle_wing_right) {
- double time = Simtime - demo_boot_cycle_wing_right_startTime;
- boot_cycle_wing_right = uiuc_1Dinterpolation(demo_boot_cycle_wing_right_timeArray,
- demo_boot_cycle_wing_right_daArray,
- demo_boot_cycle_wing_right_ntime,
- time);
- }
- if (demo_eps_pitch_input) {
- double time = Simtime - demo_eps_pitch_input_startTime;
- eps_pitch_input = uiuc_1Dinterpolation(demo_eps_pitch_input_timeArray,
- demo_eps_pitch_input_daArray,
- demo_eps_pitch_input_ntime,
- time);
- }
- if (demo_ice_tail) {
- double time = Simtime - demo_ice_tail_startTime;
- ice_tail = uiuc_1Dinterpolation(demo_ice_tail_timeArray,
- demo_ice_tail_daArray,
- demo_ice_tail_ntime,
- time);
- }
- if (demo_ice_left) {
- double time = Simtime - demo_ice_left_startTime;
- ice_left = uiuc_1Dinterpolation(demo_ice_left_timeArray,
- demo_ice_left_daArray,
- demo_ice_left_ntime,
- time);
- }
- if (demo_ice_right) {
- double time = Simtime - demo_ice_right_startTime;
- ice_right = uiuc_1Dinterpolation(demo_ice_right_timeArray,
- demo_ice_right_daArray,
- demo_ice_right_ntime,
- time);
- }
- }
+ uiuc_icing_demo();
}
if (pilot_ail_no)
#include "uiuc_coef_yaw.h"
#include "uiuc_iceboot.h" //Anne's code
#include "uiuc_iced_nonlin.h"
+#include "uiuc_icing_demo.h"
#include "uiuc_pah_ap.h"
+#include "uiuc_alh_ap.h"
#include "uiuc_1Dinterpolation.h"
#include "uiuc_3Dinterpolation.h"
+#include "uiuc_warnings_errors.h"
#include <FDM/LaRCsim/ls_generic.h>
#include <FDM/LaRCsim/ls_cockpit.h> /*Long_control,Lat_control,Rudder_pedal */
#include <FDM/LaRCsim/ls_constants.h> /* RAD_TO_DEG, DEG_TO_RAD*/
+#include <string>
extern double Simtime;
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_Cm_de_fac) {eta_q_Cm_de *= eta_q * eta_q_Cm_de_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;}
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_find_positon.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: Determine the position of a surface/object given the
+ command, increment rate, and current position. Outputs
+ new position
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES:
+
+----------------------------------------------------------------------
+
+ HISTORY: 03/03/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: command, increment rate, position
+
+----------------------------------------------------------------------
+
+ OUTPUTS: position
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_aerodeflections()
+
+----------------------------------------------------------------------
+
+ CALLS TO: *
+
+----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+#include "uiuc_find_position.h"
+
+double uiuc_find_position(double command, double increment_per_timestep,
+ double position)
+{
+ if (position < command) {
+ position += increment_per_timestep;
+ if (position > command)
+ position = command;
+ }
+ else if (position > command) {
+ position -= increment_per_timestep;
+ if (position < command)
+ position = command;
+ }
+
+ return position;
+}
--- /dev/null
+#ifndef _FIND_POSITION_H_
+#define _FIND_POSITION_H_
+
+double uiuc_find_position(double command, double increment_per_timestep,
+ double position);
+
+
+#endif // _FIND_POSITION_H_
--- /dev/null
+/*flapdata.cpp
+Implements the flapping data class
+Written by Theresa Robinson
+robinst@ecf.toronto.edu
+*/
+
+//#ifndef flapdata_cpp
+//#define flapdata_cpp
+#include "uiuc_flapdata.h"
+//#include <fstream>
+#include <cassert>
+
+///////////////////////////////////////////////////////////
+//Implementation of FlapStruct public methods
+//////////////////////////////////////////////////////////
+
+flapStruct::flapStruct(){
+ Lift=0;
+ Thrust=0;
+ Inertia=0;
+ Moment=0;
+}
+
+flapStruct::flapStruct(const flapStruct &rhs){
+ Lift=rhs.getLift();
+ Thrust=rhs.getThrust();
+ Inertia=rhs.getInertia();
+ Moment=rhs.getMoment();
+}
+
+flapStruct::flapStruct(double newLift, double newThrust, double newMoment, double newInertia){
+ Lift=newLift;
+ Thrust=newThrust;
+ Inertia=newInertia;
+ Moment=newMoment;
+}
+
+double flapStruct::getLift() const{
+ return Lift;
+}
+
+double flapStruct::getThrust() const{
+ return Thrust;
+}
+
+double flapStruct::getInertia() const{
+ return Inertia;
+}
+
+double flapStruct::getMoment() const{
+ return Moment;
+}
+
+
+/////////////////////////////////////////////////////////////////
+//Implementation of FlapData public methods
+////////////////////////////////////////////////////////////////
+
+FlapData::FlapData(){
+ liftTable=NULL;
+ thrustTable=NULL;
+ momentTable=NULL;
+ inertiaTable=NULL;
+
+ alphaArray=NULL;
+ speedArray=NULL;
+ freqArray=NULL;
+ phiArray=NULL;
+
+ lastAlphaIndex=0;
+ lastSpeedIndex=0;
+ lastPhiIndex=0;
+ lastFreqIndex=0;
+}
+
+//A constructor that takes a file name:
+//Opens that file and fills all the arrays from it
+//sets the guesses to zero for the speed and halfway
+//along the array for the alpha and frequency
+//All it does is call init
+
+FlapData::FlapData(const char* filename){
+ // printf("init flapdata\n");
+ init(filename);
+ lastAlphaIndex=0;
+ lastSpeedIndex=0;
+ lastPhiIndex=0;
+ lastFreqIndex=0;
+}
+
+//The destructor:
+//Frees all memory associated with this object
+FlapData::~FlapData(){
+ // printf("deleting flapdata\n");
+ delete liftTable;
+ delete thrustTable;
+ delete momentTable;
+ delete inertiaTable;
+ delete alphaArray;
+ delete speedArray;
+ delete freqArray;
+ delete phiArray;
+}
+
+//An initialization function that does the same thing
+//as the second constructor
+//returns zero if it was successful
+int FlapData::init(const char* filename){
+
+ ifstream* f=new ifstream(filename); //open file for reading in text (ascii) mode
+ if (f==NULL) { //file open error
+ return(1);
+ }
+ if(readIn(f)){ //read the file, if there's a problem
+ return(2);
+ }
+ delete f;
+ return 0;
+ //close the file, return the success of the file close
+}
+
+//A function that returns the interpolated values
+//for all four associated numbers
+//given the angle of attack, speed, and flapping frequency
+flapStruct FlapData::flapper(double alpha, double speed, double freq, double phi){
+
+ flapStruct results;
+ int i,j,k,l;
+ double lift,thrust,moment,inertia;
+ if(speed<speedArray[0]){
+ speed=speedArray[0];
+ }
+ if(speed>speedArray[speedLength-1]){
+ speed=speedArray[speedLength-1];
+ }
+ if(alpha<alphaArray[0]){
+ alpha=alphaArray[0];
+ }
+ if(alpha>alphaArray[alphaLength-1]){
+ alpha=alphaArray[alphaLength-1];
+ }
+ i=findIndex(alphaArray,alphaLength,alpha,lastAlphaIndex);
+ j=findIndex(speedArray,speedLength,speed,lastSpeedIndex);
+ k=findIndex(freqArray,freqLength,freq,lastFreqIndex);
+ l=findIndex(phiArray,phiLength,phi,lastPhiIndex);
+
+ lift=interpolate(liftTable, i, j, k, l, alpha, speed, freq, phi);
+ thrust=interpolate(thrustTable, i, j, k, l, alpha, speed, freq, phi);
+ moment=interpolate(momentTable, i, j, k, l, alpha, speed, freq, phi);
+ inertia=interpolate(inertiaTable, i, j, k, l, alpha, speed, freq, phi);
+ results=flapStruct(lift,thrust,moment,inertia);
+ return results;
+}
+
+//////////////////////////////////////////////////////////////////
+//Implementation of private FlapData methods
+//////////////////////////////////////////////////////////////////
+
+//A function that returns an index i such that
+// array[i] < value < array[i+1]
+//The function returns -1 if
+// (value < array[0]) OR (value > array[n-1])
+//(i.e. the value is not within the bounds of the array)
+//It performs a linear search starting at guess
+int FlapData::findIndex(double array[], double n, double value, int i){
+
+ while(value<array[i]){ //less than the lower end of interval i
+ if(i==0){ //if we're at the start of the array
+ return(-1); //there's a problem
+ }
+ i--; //otherwise move to the next lower interval
+ }
+ while(value>array[i+1]){ //more than the higher end of interval i
+ if(i==n-1){ //if we're at the end of the array
+ return(-1); //there's a problem
+ }
+ i++; //otherwise move to the next higher interval
+ }
+// errmsg("In findIndex: array[" << i << "]= " << array[i] << "<=" << value << "<= array[" << (i+1) << "]=" << array[i+1]);
+ return(i);
+}
+
+//A function that performs a linear interpolation based on the
+//eight points surrounding the value required
+double FlapData::interpolate(double**** table, int i, int j, int k, int l, double alpha, double speed, double freq, double phi){
+// errmsg("\t\t\t\t\t\t\t\tGetting Values");
+ double f0000=table[i][j][k][l];
+ double f0001=table[i][j][k][l+1];
+ double f0010=table[i][j][k+1][l];
+ double f0011=table[i][j][k+1][l+1];
+ double f0100=table[i][j+1][k][l];
+ double f0101=table[i][j+1][k][l+1];
+ double f0110=table[i][j+1][k+1][l];
+ double f0111=table[i][j+1][k+1][l+1];
+ double f1000=table[i+1][j][k][l];
+ double f1001=table[i+1][j][k][l+1];
+ double f1010=table[i+1][j][k+1][l];
+ double f1011=table[i+1][j][k+1][l+1];
+ double f1100=table[i+1][j+1][k][l];
+ double f1101=table[i+1][j+1][k][l+1];
+ double f1110=table[i+1][j+1][k+1][l];
+ double f1111=table[i+1][j+1][k+1][l+1];
+
+ // errmsg("\t\t\t\t\t\t\t\t1st pass (3)");
+ // errmsg("phi[" << l << "]=" << phiArray[l] << "; phi[" << (l+1) <<"]=" << phiArray[l+1]);
+ // errmsg("Finding " << phi <<endl;
+ double f000=interpolate(phiArray[l],f0000,phiArray[l+1],f0001,phi);
+ double f001=interpolate(phiArray[l],f0010,phiArray[l+1],f0011,phi);
+ double f010=interpolate(phiArray[l],f0100,phiArray[l+1],f0101,phi);
+ double f011=interpolate(phiArray[l],f0110,phiArray[l+1],f0111,phi);
+ double f100=interpolate(phiArray[l],f1000,phiArray[l+1],f1001,phi);
+ double f101=interpolate(phiArray[l],f1010,phiArray[l+1],f1011,phi);
+ double f110=interpolate(phiArray[l],f1100,phiArray[l+1],f1101,phi);
+ double f111=interpolate(phiArray[l],f1110,phiArray[l+1],f1111,phi);
+
+// errmsg("\t\t\t\t\t\t\t\t2nd pass (2)");
+ double f00=interpolate(freqArray[k],f000,freqArray[k+1],f001,freq);
+ double f01=interpolate(freqArray[k],f010,freqArray[k+1],f011,freq);
+ double f10=interpolate(freqArray[k],f100,freqArray[k+1],f101,freq);
+ double f11=interpolate(freqArray[k],f110,freqArray[k+1],f111,freq);
+
+ // errmsg("\t\t\t\t\t\t\t\t3rd pass (1)");
+ double f0=interpolate(speedArray[j],f00,speedArray[j+1],f01,speed);
+ double f1=interpolate(speedArray[j],f10,speedArray[j+1],f11,speed);
+
+ // errmsg("\t\t\t\t\t\t\t\t4th pass (0)");
+ double f=interpolate(alphaArray[i],f0,alphaArray[i+1],f1,alpha);
+ return(f);
+}
+
+//A function that performs a linear interpolation based
+//on the two nearest points
+double FlapData::interpolate(double x0, double y0, double x1, double y1, double x){
+ double slope,y;
+ assert(x1!=x0);
+ slope=(y1-y0)/(x1-x0);
+ y=y0+slope*(x-x0);
+ return y;
+}
+
+//A function called by init that reads in the file
+//of the correct format and stores it in the arrays and tables
+int FlapData::readIn (ifstream* f){
+
+ int i,j,k,l;
+ int count=0;
+ char numstr[200];
+
+ f->getline(numstr,200);
+ sscanf(numstr,"%d,%d,%d,%d",&alphaLength,&speedLength,&freqLength,&phiLength);
+
+ //Check to see if the first line is 0 0 0 0
+ //If so, tell user to download data file
+ //Quits FlightGear
+ if (alphaLength==0 && speedLength==0 && freqLength==0 && phiLength==0)
+ uiuc_warnings_errors(7,"");
+
+ alphaArray=new double[alphaLength];
+ speedArray=new double[speedLength];
+ freqArray=new double[freqLength];
+ phiArray=new double[phiLength];
+
+ for(i=0;i<alphaLength;i++){
+ f->get(numstr,20,',');
+ sscanf(numstr,"%lf",&alphaArray[i]);
+ f->get();
+ }
+ f->get();
+ for(i=0;i<speedLength;i++){
+ f->get(numstr,20,',');
+ sscanf(numstr,"%lf",&speedArray[i]);
+ f->get();
+ }
+ f->get();
+ for(i=0;i<freqLength;i++){
+ f->get(numstr,20,',');
+ sscanf(numstr,"%lf",&freqArray[i]);
+ f->get();
+ }
+ f->get();
+ for(i=0;i<phiLength;i++){
+ f->get(numstr,20,',');
+ sscanf(numstr,"%lf",&phiArray[i]);
+ f->get();
+ }
+ f->get();
+ liftTable=new double***[alphaLength];
+ thrustTable=new double***[alphaLength];
+ momentTable=new double***[alphaLength];
+ inertiaTable=new double***[alphaLength];
+ for(i=0;i<alphaLength;i++){
+ liftTable[i]=new double**[speedLength];
+ thrustTable[i]=new double**[speedLength];
+ momentTable[i]=new double**[speedLength];
+ inertiaTable[i]=new double**[speedLength];
+ for(j=0;j<speedLength;j++){
+ liftTable[i][j]=new double*[freqLength];
+ thrustTable[i][j]=new double*[freqLength];
+ momentTable[i][j]=new double*[freqLength];
+ inertiaTable[i][j]=new double*[freqLength];
+ for(k=0;k<freqLength;k++){
+ assert((liftTable[i][j][k]=new double[phiLength])!=NULL);
+ assert((thrustTable[i][j][k]=new double[phiLength])!=NULL);
+ assert((momentTable[i][j][k]=new double[phiLength])!=NULL);
+ assert((inertiaTable[i][j][k]=new double[phiLength])!=NULL);
+ }
+ }
+ }
+
+ for(i=0;i<alphaLength;i++){
+ for(j=0;j<speedLength;j++){
+ for(k=0;k<freqLength;k++){
+ for(l=0;l<phiLength;l++){
+ f->getline(numstr,200);
+ sscanf(numstr,"%lf %lf %lf %lf",&liftTable[i][j][k][l],&thrustTable[i][j][k][l],&momentTable[i][j][k][l],&inertiaTable[i][j][k][l]);
+ }
+ }
+ }
+ }
+ return 0;
+};
+
+//#endif
--- /dev/null
+/*flapdata.h
+This is the interface definition file for the structure that
+holds the flapping data.
+Written by Theresa Robinson
+robinst@ecf.toronto.edu
+*/
+
+#ifndef _FLAPDATA_H
+#define _FLAPDATA_H
+#include <cstdio>
+#include <fstream>
+#include <simgear/compiler.h>
+#include "uiuc_warnings_errors.h"
+using namespace std;
+//#include "uiuc_aircraft.h"
+
+class flapStruct {
+private:
+ double Lift,Thrust,Inertia,Moment;
+public:
+ flapStruct();
+ flapStruct(const flapStruct &rhs);
+ flapStruct(double newLift, double newThrust, double newMoment, double newInertia);
+ double getLift() const;
+ double getThrust() const;
+ double getInertia() const;
+ double getMoment() const;
+};
+
+
+class FlapData {
+
+ //class variables
+ private:
+
+ //the following are the arrays of increasing
+ //data values that were used to generate the lift, thrust
+ //pitch and inertial values
+ double* alphaArray; //angle of attack
+ double* speedArray; //airspeed at the wing
+ double* freqArray; //flapping frequency
+ double* phiArray;
+ //the following four tables are generated (e.g. by FullWing)
+ //using the data in the previous three arrays
+ double**** liftTable; //4D array: holds the lift data
+ double**** thrustTable; //4D array: holds the thrust data
+ double**** momentTable; //4D array: holds the pitching moment data
+ double**** inertiaTable; //4D array: holds the inertia data
+
+ //The values in the tables and arrays are directly related through
+ //their indices, in the following way:
+ //For alpha=alphaArray[i], speed=speedArray[j] and freq=freqArray[k]
+ //phi=phiArray[l]
+ //the lift is equal to liftTable[i][j][k][l]
+ int alphaLength, speedLength, freqLength, phiLength;
+ int lastAlphaIndex, lastSpeedIndex, lastFreqIndex, lastPhiIndex;
+ //since we're assuming the angle of attack, velocity, and frequency
+ //don't change much between calls to flap, we keep the last indices
+ //as a good guess of where to start searching next time
+
+ //public methods
+ public:
+ //Constructors:
+ //The default constructor:
+ //Just sets the arrays to null and the guesses to zero
+ FlapData();
+ //A constructor that takes a file name:
+ //Opens that file and fills all the arrays from it
+ //sets the guesses to zero for the speed and halfway
+ //along the array for the alpha and frequency
+ FlapData(const char* filename);
+ //The destructor:
+ //Frees all memory associated with this object
+ ~FlapData();
+ //An initialization function that does the same thing
+ //as the second constructor
+ //returns zero if it was successful
+ int init(const char* filename);
+ //A function that returns the interpolated values
+ //for all four associated numbers
+ //given the angle of attack, speed, and flapping frequency
+ flapStruct flapper(double alpha, double speed, double frequency, double phi);
+ //private methods
+ private:
+ //A function that returns an index i such that
+ // array[i] < value < array[i+1]
+ //The function returns -1 if
+ // (value < array[0]) OR (value > array[n-1])
+ //(i.e. the value is not within the bounds of the array)
+ //It performs a linear search starting at LastIndex
+ int findIndex(double array[], double n, double value, int LastIndex);
+ //A function that performs a linear interpolation based on the
+ //eight points surrounding the value required
+ double interpolate(double**** table, int alphaIndex, int speedIndex, int freqIndex, int phiIndex, double alpha, double speed, double freq, double phi2);
+ //A function that performs a linear interpolation based on the two nearest points
+ double interpolate(double x1, double y1, double x2, double y2, double x);
+ //A function called by init that reads in the file
+ //of the correct format and stores it in the arrays and tables
+ int readIn(ifstream* f);
+};
+
+#endif
/**********************************************************************
-
+
FILENAME: uiuc_gear.cpp
----------------------------------------------------------------------
static void sub3( DATA v1[], DATA v2[], DATA result[] )
{
- result[0] = v1[0] - v2[0];
- result[1] = v1[1] - v2[1];
- result[2] = v1[2] - v2[2];
+ result[0] = v1[0] - v2[0];
+ result[1] = v1[1] - v2[1];
+ result[2] = v1[2] - v2[2];
}
static void add3( DATA v1[], DATA v2[], DATA result[] )
{
- result[0] = v1[0] + v2[0];
- result[1] = v1[1] + v2[1];
- result[2] = v1[2] + v2[2];
+ result[0] = v1[0] + v2[0];
+ result[1] = v1[1] + v2[1];
+ result[2] = v1[2] + v2[2];
}
static void cross3( DATA v1[], DATA v2[], DATA result[] )
{
- result[0] = v1[1]*v2[2] - v1[2]*v2[1];
- result[1] = v1[2]*v2[0] - v1[0]*v2[2];
- result[2] = v1[0]*v2[1] - v1[1]*v2[0];
+ result[0] = v1[1]*v2[2] - v1[2]*v2[1];
+ result[1] = v1[2]*v2[0] - v1[0]*v2[2];
+ result[2] = v1[0]*v2[1] - v1[1]*v2[0];
}
static void multtrans3x3by3( DATA m[][3], DATA v[], DATA result[] )
{
- result[0] = m[0][0]*v[0] + m[1][0]*v[1] + m[2][0]*v[2];
- result[1] = m[0][1]*v[0] + m[1][1]*v[1] + m[2][1]*v[2];
- result[2] = m[0][2]*v[0] + m[1][2]*v[1] + m[2][2]*v[2];
+ result[0] = m[0][0]*v[0] + m[1][0]*v[1] + m[2][0]*v[2];
+ result[1] = m[0][1]*v[0] + m[1][1]*v[1] + m[2][1]*v[2];
+ result[2] = m[0][2]*v[0] + m[1][2]*v[1] + m[2][2]*v[2];
}
static void mult3x3by3( DATA m[][3], DATA v[], DATA result[] )
{
- result[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2];
- result[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2];
- result[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2];
+ result[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2];
+ result[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2];
+ result[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2];
}
static void clear3( DATA v[] )
{
- v[0] = 0.; v[1] = 0.; v[2] = 0.;
+ v[0] = 0.; v[1] = 0.; v[2] = 0.;
}
void uiuc_gear()
{
-
+
/*
* Aircraft specific initializations and data goes here
*/
-
- static DATA percent_brake[MAX_GEAR] = /* percent applied braking */
- { 0., 0., 0., 0.,
- 0., 0., 0., 0.,
- 0., 0., 0., 0.,
- 0., 0., 0., 0. }; /* 0 = none, 1 = full */
- static DATA caster_angle_rad[MAX_GEAR] = /* steerable tires - in */
- { 0., 0., 0., 0.,
- 0., 0., 0., 0.,
- 0., 0., 0., 0.,
- 0., 0., 0., 0. }; /* radians, +CW */
+
+ static DATA percent_brake[MAX_GEAR] = /* percent applied braking */
+ { 0., 0., 0., 0.,
+ 0., 0., 0., 0.,
+ 0., 0., 0., 0.,
+ 0., 0., 0., 0. }; /* 0 = none, 1 = full */
+ static DATA caster_angle_rad[MAX_GEAR] = /* steerable tires - in */
+ { 0., 0., 0., 0.,
+ 0., 0., 0., 0.,
+ 0., 0., 0., 0.,
+ 0., 0., 0., 0. }; /* radians, +CW */
/*
* End of aircraft specific code
*/
-
+
/*
* Constants & coefficients for tyres on tarmac - ref [1]
*/
-
- /* skid function looks like:
- *
- * mu ^
- * |
- * max_mu | +
- * | /|
- * sliding_mu | / +------
- * | /
- * | /
- * +--+------------------------>
- * | | | sideward V
- * 0 bkout skid
- * V V
- */
+
+ /* skid function looks like:
+ *
+ * mu ^
+ * |
+ * max_mu | +
+ * | /|
+ * sliding_mu | / +------
+ * | /
+ * | /
+ * +--+------------------------>
+ * | | | sideward V
+ * 0 bkout skid
+ * V V
+ */
- static int it_rolls[MAX_GEAR] =
- { 1, 1, 1, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0 };
- static DATA sliding_mu[MAX_GEAR] =
- { 0.5, 0.5, 0.5, 0.3,
- 0.3, 0.3, 0.3, 0.3,
- 0.3, 0.3, 0.3, 0.3,
- 0.3, 0.3, 0.3, 0.3 };
- static DATA max_brake_mu[MAX_GEAR] =
- { 0.0, 0.6, 0.6, 0.0,
- 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0 };
- static DATA max_mu = 0.8;
- static DATA bkout_v = 0.1;
- static DATA skid_v = 1.0;
+ static int it_rolls[MAX_GEAR] =
+ { 1, 1, 1, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0 };
+ static DATA sliding_mu[MAX_GEAR] =
+ { 0.5, 0.5, 0.5, 0.3,
+ 0.3, 0.3, 0.3, 0.3,
+ 0.3, 0.3, 0.3, 0.3,
+ 0.3, 0.3, 0.3, 0.3 };
+ static DATA max_brake_mu[MAX_GEAR] =
+ { 0.0, 0.6, 0.6, 0.0,
+ 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0, 0.0 };
+ static DATA max_mu = 0.8;
+ static DATA bkout_v = 0.1;
+ static DATA skid_v = 1.0;
/*
* Local data variables
*/
-
- DATA d_wheel_cg_body_v[3]; /* wheel offset from cg, X-Y-Z */
- DATA d_wheel_cg_local_v[3]; /* wheel offset from cg, N-E-D */
- DATA d_wheel_rwy_local_v[3]; /* wheel offset from rwy, N-E-U */
- DATA v_wheel_cg_local_v[3]; /*wheel velocity rel to cg N-E-D*/
- // DATA v_wheel_body_v[3]; /* wheel velocity, X-Y-Z */
- DATA v_wheel_local_v[3]; /* wheel velocity, N-E-D */
- DATA f_wheel_local_v[3]; /* wheel reaction force, N-E-D */
- // DATA altitude_local_v[3]; /*altitude vector in local (N-E-D) i.e. (0,0,h)*/
- // DATA altitude_body_v[3]; /*altitude vector in body (X,Y,Z)*/
- DATA temp3a[3];
- // DATA temp3b[3];
- DATA tempF[3];
- DATA tempM[3];
- DATA reaction_normal_force; /* wheel normal (to rwy) force */
- DATA cos_wheel_hdg_angle, sin_wheel_hdg_angle; /* temp storage */
- DATA v_wheel_forward, v_wheel_sideward, abs_v_wheel_sideward;
- DATA forward_mu, sideward_mu; /* friction coefficients */
- DATA beta_mu; /* breakout friction slope */
- DATA forward_wheel_force, sideward_wheel_force;
-
- int i; /* per wheel loop counter */
-
+
+ DATA d_wheel_cg_body_v[3]; /* wheel offset from cg, X-Y-Z */
+ DATA d_wheel_cg_local_v[3]; /* wheel offset from cg, N-E-D */
+ DATA d_wheel_rwy_local_v[3]; /* wheel offset from rwy, N-E-U */
+ DATA v_wheel_cg_local_v[3]; /*wheel velocity rel to cg N-E-D*/
+ // DATA v_wheel_body_v[3]; /* wheel velocity, X-Y-Z */
+ DATA v_wheel_local_v[3]; /* wheel velocity, N-E-D */
+ DATA f_wheel_local_v[3]; /* wheel reaction force, N-E-D */
+ // DATA altitude_local_v[3]; /*altitude vector in local (N-E-D) i.e. (0,0,h)*/
+ // DATA altitude_body_v[3]; /*altitude vector in body (X,Y,Z)*/
+ DATA temp3a[3];
+ // DATA temp3b[3];
+ DATA tempF[3];
+ DATA tempM[3];
+ DATA reaction_normal_force; /* wheel normal (to rwy) force */
+ DATA cos_wheel_hdg_angle, sin_wheel_hdg_angle; /* temp storage */
+ DATA v_wheel_forward, v_wheel_sideward, abs_v_wheel_sideward;
+ DATA forward_mu, sideward_mu; /* friction coefficients */
+ DATA beta_mu; /* breakout friction slope */
+ DATA forward_wheel_force, sideward_wheel_force;
+
+ int i; /* per wheel loop counter */
+
/*
* Execution starts here
*/
-
- beta_mu = max_mu/(skid_v-bkout_v);
- clear3( F_gear_v ); /* Initialize sum of forces... */
- clear3( M_gear_v ); /* ...and moments */
-
+
+ beta_mu = max_mu/(skid_v-bkout_v);
+ clear3( F_gear_v ); /* Initialize sum of forces... */
+ clear3( M_gear_v ); /* ...and moments */
+
/*
* Put aircraft specific executable code here
*/
-
- percent_brake[1] = Brake_pct[0];
- percent_brake[2] = Brake_pct[1];
-
- caster_angle_rad[0] =
- (0.01 + 0.04 * (1 - V_calibrated_kts / 130)) * Rudder_pedal;
-
-
- for (i=0;i<MAX_GEAR;i++) /* Loop for each wheel */
+
+ percent_brake[1] = Brake_pct[0];
+ percent_brake[2] = Brake_pct[1];
+
+ caster_angle_rad[0] =
+ (0.01 + 0.04 * (1 - V_calibrated_kts / 130)) * Rudder_pedal;
+
+
+ for (i=0;i<MAX_GEAR;i++) /* Loop for each wheel */
{
// Execute only if the gear has been defined
if (!gear_model[i])
continue;
-
- /* printf("%s:\n",gear_strings[i]); */
-
-
-
- /*========================================*/
- /* Calculate wheel position w.r.t. runway */
- /*========================================*/
-
-
- /* printf("\thgcg: %g, theta: %g,phi: %g\n",D_cg_above_rwy,Theta*RAD_TO_DEG,Phi*RAD_TO_DEG); */
-
-
- /* First calculate wheel location w.r.t. cg in body (X-Y-Z) axes... */
-
- sub3( D_gear_v[i], D_cg_rp_body_v, d_wheel_cg_body_v );
-
- /* then converting to local (North-East-Down) axes... */
-
- multtrans3x3by3( T_local_to_body_m, d_wheel_cg_body_v, d_wheel_cg_local_v );
-
-
- /* Runway axes correction - third element is Altitude, not (-)Z... */
-
- d_wheel_cg_local_v[2] = -d_wheel_cg_local_v[2]; /* since altitude = -Z */
-
- /* Add wheel offset to cg location in local axes */
-
- add3( d_wheel_cg_local_v, D_cg_rwy_local_v, d_wheel_rwy_local_v );
-
- /* remove Runway axes correction so right hand rule applies */
-
- d_wheel_cg_local_v[2] = -d_wheel_cg_local_v[2]; /* now Z positive down */
-
- /*============================*/
- /* Calculate wheel velocities */
- /*============================*/
-
- /* contribution due to angular rates */
-
- cross3( Omega_body_v, d_wheel_cg_body_v, temp3a );
-
- /* transform into local axes */
-
- multtrans3x3by3( T_local_to_body_m, temp3a,v_wheel_cg_local_v );
-
- /* plus contribution due to cg velocities */
-
- add3( v_wheel_cg_local_v, V_local_rel_ground_v, v_wheel_local_v );
-
- clear3(f_wheel_local_v);
- reaction_normal_force=0;
- if( HEIGHT_AGL_WHEEL < 0. )
- /*the wheel is underground -- which implies ground contact
- so calculate reaction forces */
- {
- /*===========================================*/
- /* Calculate forces & moments for this wheel */
- /*===========================================*/
-
- /* Add any anticipation, or frame lead/prediction, here... */
-
+
+ /* printf("%s:\n",gear_strings[i]); */
+
+
+
+ /*========================================*/
+ /* Calculate wheel position w.r.t. runway */
+ /*========================================*/
+
+
+ /* printf("\thgcg: %g, theta: %g,phi: %g\n",D_cg_above_rwy,Theta*RAD_TO_DEG,Phi*RAD_TO_DEG); */
+
+
+ /* First calculate wheel location w.r.t. cg in body (X-Y-Z) axes... */
+
+ sub3( D_gear_v[i], D_cg_rp_body_v, d_wheel_cg_body_v );
+
+ /* then converting to local (North-East-Down) axes... */
+
+ multtrans3x3by3( T_local_to_body_m, d_wheel_cg_body_v, d_wheel_cg_local_v );
+
+
+ /* Runway axes correction - third element is Altitude, not (-)Z... */
+
+ d_wheel_cg_local_v[2] = -d_wheel_cg_local_v[2]; /* since altitude = -Z */
+
+ /* Add wheel offset to cg location in local axes */
+
+ add3( d_wheel_cg_local_v, D_cg_rwy_local_v, d_wheel_rwy_local_v );
+
+ /* remove Runway axes correction so right hand rule applies */
+
+ d_wheel_cg_local_v[2] = -d_wheel_cg_local_v[2]; /* now Z positive down */
+
+ /*============================*/
+ /* Calculate wheel velocities */
+ /*============================*/
+
+ /* contribution due to angular rates */
+
+ cross3( Omega_body_v, d_wheel_cg_body_v, temp3a );
+
+ /* transform into local axes */
+
+ multtrans3x3by3( T_local_to_body_m, temp3a,v_wheel_cg_local_v );
+
+ /* plus contribution due to cg velocities */
+
+ add3( v_wheel_cg_local_v, V_local_rel_ground_v, v_wheel_local_v );
+
+ clear3(f_wheel_local_v);
+ reaction_normal_force=0;
+ if( HEIGHT_AGL_WHEEL < 0. )
+ /*the wheel is underground -- which implies ground contact
+ so calculate reaction forces */
+ {
+ /*===========================================*/
+ /* Calculate forces & moments for this wheel */
+ /*===========================================*/
+
+ /* Add any anticipation, or frame lead/prediction, here... */
+
/* no lead used at present */
-
- /* Calculate sideward and forward velocities of the wheel
- in the runway plane */
-
- cos_wheel_hdg_angle = cos(caster_angle_rad[i] + Psi);
- sin_wheel_hdg_angle = sin(caster_angle_rad[i] + Psi);
-
- v_wheel_forward = v_wheel_local_v[0]*cos_wheel_hdg_angle
- + v_wheel_local_v[1]*sin_wheel_hdg_angle;
- v_wheel_sideward = v_wheel_local_v[1]*cos_wheel_hdg_angle
- - v_wheel_local_v[0]*sin_wheel_hdg_angle;
-
-
- /* Calculate normal load force (simple spring constant) */
-
- reaction_normal_force = 0.;
-
- reaction_normal_force = kgear[i]*d_wheel_rwy_local_v[2]
- - v_wheel_local_v[2]*cgear[i];
- /* printf("\treaction_normal_force: %g\n",reaction_normal_force); */
-
- if (reaction_normal_force > 0.) reaction_normal_force = 0.;
- /* to prevent damping component from swamping spring component */
-
-
- /* Calculate friction coefficients */
-
- if(it_rolls[i])
- {
- forward_mu = (max_brake_mu[i] - muGear[i])*percent_brake[i] + muGear[i];
- abs_v_wheel_sideward = sqrt(v_wheel_sideward*v_wheel_sideward);
- sideward_mu = sliding_mu[i];
- if (abs_v_wheel_sideward < skid_v)
- sideward_mu = (abs_v_wheel_sideward - bkout_v)*beta_mu;
- if (abs_v_wheel_sideward < bkout_v) sideward_mu = 0.;
- }
- else
- {
- forward_mu=sliding_mu[i];
- sideward_mu=sliding_mu[i];
- }
-
- /* Calculate foreward and sideward reaction forces */
-
- forward_wheel_force = forward_mu*reaction_normal_force;
- sideward_wheel_force = sideward_mu*reaction_normal_force;
- if(v_wheel_forward < 0.) forward_wheel_force = -forward_wheel_force;
- if(v_wheel_sideward < 0.) sideward_wheel_force = -sideward_wheel_force;
-/* printf("\tFfwdgear: %g Fsidegear: %g\n",forward_wheel_force,sideward_wheel_force);
- */
- /* Rotate into local (N-E-D) axes */
-
- f_wheel_local_v[0] = forward_wheel_force*cos_wheel_hdg_angle
- - sideward_wheel_force*sin_wheel_hdg_angle;
- f_wheel_local_v[1] = forward_wheel_force*sin_wheel_hdg_angle
- + sideward_wheel_force*cos_wheel_hdg_angle;
- f_wheel_local_v[2] = reaction_normal_force;
-
- /* Convert reaction force from local (N-E-D) axes to body (X-Y-Z) */
- mult3x3by3( T_local_to_body_m, f_wheel_local_v, tempF );
-
- /* Calculate moments from force and offsets in body axes */
-
- cross3( d_wheel_cg_body_v, tempF, tempM );
-
- /* Sum forces and moments across all wheels */
-
- add3( tempF, F_gear_v, F_gear_v );
- add3( tempM, M_gear_v, M_gear_v );
-
-
- }
-
-
-
- /* printf("\tN: %g,dZrwy: %g dZdotrwy: %g\n",reaction_normal_force,HEIGHT_AGL_WHEEL,v_wheel_cg_local_v[2]); */
-
- /*printf("\tFxgear: %g Fygear: %g, Fzgear: %g\n",F_X_gear,F_Y_gear,F_Z_gear);
- printf("\tMgear: %g, Lgear: %g, Ngear: %g\n\n",M_m_gear,M_l_gear,M_n_gear); */
-
-
+
+ /* Calculate sideward and forward velocities of the wheel
+ in the runway plane */
+
+ cos_wheel_hdg_angle = cos(caster_angle_rad[i] + Psi);
+ sin_wheel_hdg_angle = sin(caster_angle_rad[i] + Psi);
+
+ v_wheel_forward = v_wheel_local_v[0]*cos_wheel_hdg_angle
+ + v_wheel_local_v[1]*sin_wheel_hdg_angle;
+ v_wheel_sideward = v_wheel_local_v[1]*cos_wheel_hdg_angle
+ - v_wheel_local_v[0]*sin_wheel_hdg_angle;
+
+
+ /* Calculate normal load force (simple spring constant) */
+
+ reaction_normal_force = 0.;
+
+ reaction_normal_force = kgear[i]*d_wheel_rwy_local_v[2]
+ - v_wheel_local_v[2]*cgear[i];
+ /* printf("\treaction_normal_force: %g\n",reaction_normal_force); */
+
+ if (reaction_normal_force > 0.) reaction_normal_force = 0.;
+ /* to prevent damping component from swamping spring component */
+
+
+ /* Calculate friction coefficients */
+
+ if(it_rolls[i])
+ {
+ forward_mu = (max_brake_mu[i] - muGear[i])*percent_brake[i] + muGear[i];
+ abs_v_wheel_sideward = sqrt(v_wheel_sideward*v_wheel_sideward);
+ sideward_mu = sliding_mu[i];
+ if (abs_v_wheel_sideward < skid_v)
+ sideward_mu = (abs_v_wheel_sideward - bkout_v)*beta_mu;
+ if (abs_v_wheel_sideward < bkout_v) sideward_mu = 0.;
+ }
+ else
+ {
+ forward_mu=sliding_mu[i];
+ sideward_mu=sliding_mu[i];
+ }
+
+ /* Calculate foreward and sideward reaction forces */
+
+ forward_wheel_force = forward_mu*reaction_normal_force;
+ sideward_wheel_force = sideward_mu*reaction_normal_force;
+ if(v_wheel_forward < 0.) forward_wheel_force = -forward_wheel_force;
+ if(v_wheel_sideward < 0.) sideward_wheel_force = -sideward_wheel_force;
+ /* printf("\tFfwdgear: %g Fsidegear: %g\n",forward_wheel_force,sideward_wheel_force);
+ */
+ /* Rotate into local (N-E-D) axes */
+
+ f_wheel_local_v[0] = forward_wheel_force*cos_wheel_hdg_angle
+ - sideward_wheel_force*sin_wheel_hdg_angle;
+ f_wheel_local_v[1] = forward_wheel_force*sin_wheel_hdg_angle
+ + sideward_wheel_force*cos_wheel_hdg_angle;
+ f_wheel_local_v[2] = reaction_normal_force;
+
+ /* Convert reaction force from local (N-E-D) axes to body (X-Y-Z) */
+ mult3x3by3( T_local_to_body_m, f_wheel_local_v, tempF );
+
+ /* Calculate moments from force and offsets in body axes */
+
+ cross3( d_wheel_cg_body_v, tempF, tempM );
+
+ /* Sum forces and moments across all wheels */
+
+ add3( tempF, F_gear_v, F_gear_v );
+ add3( tempM, M_gear_v, M_gear_v );
+
+
+ }
+
+
+
+ /* printf("\tN: %g,dZrwy: %g dZdotrwy: %g\n",reaction_normal_force,HEIGHT_AGL_WHEEL,v_wheel_cg_local_v[2]); */
+
+ /*printf("\tFxgear: %g Fygear: %g, Fzgear: %g\n",F_X_gear,F_Y_gear,F_Z_gear);
+ printf("\tMgear: %g, Lgear: %g, Ngear: %g\n\n",M_m_gear,M_l_gear,M_n_gear); */
+
+
}
}
--- /dev/null
+#include "uiuc_get_flapper.h"
+
+void uiuc_get_flapper(double dt)
+{
+ double flapper_alpha;
+ double flapper_V;
+ //double cycle_incr;
+ flapStruct flapper_struct;
+ //FlapStruct flapper_struct;
+
+ flapper_alpha = Alpha*180/LS_PI;
+ flapper_V = V_rel_wind;
+
+ flapper_freq = 0.8 + 0.45*Throttle_pct;
+
+ //if (Simtime == 0)
+ // flapper_cycle_pct = flapper_cycle_pct_init;
+ //else
+ // {
+ // cycle_incr = flapper_freq*dt - static_cast<int>(flapper_freq*dt);
+ // if (cycle_incr < 1)
+ // flapper_cycle_pct += cycle_incr;
+ // else //need because problem when flapper_freq*dt is same as int
+ // flapper_cycle_pct += cycle_incr - 1;
+ // }
+ //if (flapper_cycle_pct >= 1)
+ // flapper_cycle_pct -= 1;
+
+ //if (flapper_cycle_pct >= 0 && flapper_cycle_pct < 0.25)
+ // flapper_phi = LS_PI/2 * (sin(2*LS_PI*flapper_cycle_pct+3*LS_PI/2)+1);
+ //if (flapper_cycle_pct >= 0.25 && flapper_cycle_pct < 0.5)
+ // flapper_phi = LS_PI/2 * sin(2*LS_PI*(flapper_cycle_pct-0.25))+LS_PI/2;
+ //if (flapper_cycle_pct >= 0.5 && flapper_cycle_pct < 0.75)
+ // flapper_phi = LS_PI/2 * (sin(2*LS_PI*(flapper_cycle_pct-0.5)+3*LS_PI/2)+1)+LS_PI;
+ //if (flapper_cycle_pct >= 0.75 && flapper_cycle_pct < 1)
+ // flapper_phi = LS_PI/2 * sin(2*LS_PI*(flapper_cycle_pct-0.75))+3*LS_PI/2;
+
+ if (Simtime == 0)
+ flapper_phi = flapper_phi_init;
+ else
+ flapper_phi += 2* LS_PI * flapper_freq * dt;
+
+ if (flapper_phi >= 2*LS_PI)
+ flapper_phi -= 2*LS_PI;
+
+ flapper_struct=flapper_data->flapper(flapper_alpha,flapper_V,flapper_freq,flapper_phi);
+ flapper_Lift=flapper_struct.getLift();
+ flapper_Thrust=flapper_struct.getThrust();
+ flapper_Inertia=flapper_struct.getInertia();
+ flapper_Moment=flapper_struct.getMoment();
+
+ F_Z_aero_flapper = -1*flapper_Lift*cos(Alpha) - flapper_Thrust*sin(Alpha);
+ F_Z_aero_flapper -= flapper_Inertia;
+ F_X_aero_flapper = -1*flapper_Lift*sin(Alpha) + flapper_Thrust*cos(Alpha);
+
+}
--- /dev/null
+#ifndef _GET_FLAPPER_H_
+#define _GET_FLAPPER_H_
+
+#include "uiuc_flapdata.h"
+#include "uiuc_aircraft.h"
+#include <FDM/LaRCsim/ls_constants.h>
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h>
+#include <math.h>
+extern double Simtime;
+
+void uiuc_get_flapper(double dt);
+
+#endif //_GET_FLAPPER_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_getwind.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: sets V_airmass_north, _east, _down for use in LaRCsim
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES:
+
+----------------------------------------------------------------------
+
+ HISTORY: 03/26/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Glen Dimock <dimock@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS:
+
+----------------------------------------------------------------------
+
+ OUTPUTS:
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_wrapper
+
+----------------------------------------------------------------------
+
+ CALLS TO: none
+
+----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+
+/*
+ UIUC wind gradient test code v0.1
+
+ Returns wind vector as a function of altitude for a simple
+ parabolic gradient profile
+
+ Glen Dimock
+ Last update: 020227
+*/
+
+#include "uiuc_getwind.h"
+#include "uiuc_aircraft.h"
+
+void uiuc_getwind()
+{
+ /* Wind parameters */
+ double zref = 300.; //Reference height (ft)
+ double uref = 0; //Horizontal wind velocity at ref. height (ft/sec)
+ // double uref = 11; //Horizontal wind velocity at ref. height (ft/sec)
+ // double uref = 13; //Horizontal wind velocity at ref. height (ft/sec)
+ // double uref = 20; //Horizontal wind velocity at ref. height (ft/sec), 13.63 mph
+ // double uref = 22.5; //Horizontal wind velocity at ref. height (ft/sec), 15 mph
+ // double uref = 60.; //Horizontal wind velocity at ref. height (ft/sec), 40 mph
+ double ordref =-64.; //Horizontal wind ordinal from north (degrees)
+ double zoff = 300.; //Z offset (ft) - wind is zero at and below this point
+ double zcomp = 0.; //Vertical component (down is positive)
+
+/* double zref = 300.; //Reference height (ft) */
+/* double uref = 0.; //Horizontal wind velocity at ref. height (ft/sec) */
+/* double ordref = 0.; //Horizontal wind ordinal from north (degrees) */
+/* double zoff = 15.; //Z offset (ft) - wind is zero at and below this point */
+/* double zcomp = 0.; //Vertical component (down is positive) */
+
+
+ /* Get wind vector */
+ double windmag = 0; //Wind magnitude
+ double a = 0; //Parabola: Altitude = a*windmag^2 + zoff
+
+ a = zref/pow(uref,2.);
+ if (Altitude >= zoff)
+ windmag = sqrt(Altitude/a);
+ else
+ windmag = 0.;
+
+ V_north_airmass = windmag * cos(ordref*3.14159/180.); //North component
+ V_east_airmass = windmag * sin(ordref*3.14159/180.); //East component
+ V_down_airmass = zcomp;
+
+ return;
+}
+
--- /dev/null
+#ifndef _GETWIND_H_
+#define _GETWIND_H_
+
+#include <math.h>
+#include "uiuc_aircraft.h"
+#include <FDM/LaRCsim/ls_generic.h> //For global state variables
+#include <FDM/LaRCsim/ls_constants.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern double Simtime;
+
+#ifdef __cplusplus
+}
+#endif
+
+void uiuc_getwind();
+#endif // _GETWIND_H_
// Version 020409\r
// read readme_020212.doc for information\r
+// 11-21-2002 (RD) Added e code from Kishwar to fix negative lift problem at
+// high etas
+
#include "uiuc_iced_nonlin.h"
void Calc_Iced_Forces()
double eta_ref_wing = 0.08; // eta of iced data used for curve fit
double eta_ref_tail = 0.20; //changed from 0.12 10-23-2002
double eta_wing;
+ double e;
//double delta_CL; // CL_clean - CL_iced;
//double delta_CD; // CD_clean - CD_iced;
//double delta_Cm; // CM_clean - CM_iced;
}
KCL = -delta_CL/eta_ref_wing;
eta_wing = 0.5*(eta_wing_left + eta_wing_right);
- delta_CL = eta_wing*KCL;
+ if (eta_wing <= 0.1)
+ {
+ e = eta_wing;
+ }
+ else
+ {
+ e = -0.3297*exp(-5*eta_wing)+0.3;
+ }
+ delta_CL = e*KCL;
// drag fit
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_icing_demo.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION:
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES:
+
+----------------------------------------------------------------------
+
+ HISTORY: 12/02/2002 initial release - originally in
+ uiuc_coefficients()
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS:
+
+----------------------------------------------------------------------
+
+ OUTPUTS:
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_coefficients
+
+----------------------------------------------------------------------
+
+ CALLS TO:
+
+----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2002 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include "uiuc_icing_demo.h"
+
+void uiuc_icing_demo()
+{
+ // Envelope protection values
+ if (demo_eps_alpha_max) {
+ double time = Simtime - demo_eps_alpha_max_startTime;
+ eps_alpha_max = uiuc_1Dinterpolation(demo_eps_alpha_max_timeArray,
+ demo_eps_alpha_max_daArray,
+ demo_eps_alpha_max_ntime,
+ time);
+ }
+ if (demo_eps_pitch_max) {
+ double time = Simtime - demo_eps_pitch_max_startTime;
+ eps_pitch_max = uiuc_1Dinterpolation(demo_eps_pitch_max_timeArray,
+ demo_eps_pitch_max_daArray,
+ demo_eps_pitch_max_ntime,
+ time);
+ }
+ if (demo_eps_pitch_min) {
+ double time = Simtime - demo_eps_pitch_min_startTime;
+ eps_pitch_min = uiuc_1Dinterpolation(demo_eps_pitch_min_timeArray,
+ demo_eps_pitch_min_daArray,
+ demo_eps_pitch_min_ntime,
+ time);
+ }
+ if (demo_eps_roll_max) {
+ double time = Simtime - demo_eps_roll_max_startTime;
+ eps_roll_max = uiuc_1Dinterpolation(demo_eps_roll_max_timeArray,
+ demo_eps_roll_max_daArray,
+ demo_eps_roll_max_ntime,
+ time);
+ }
+ if (demo_eps_thrust_min) {
+ double time = Simtime - demo_eps_thrust_min_startTime;
+ eps_thrust_min = uiuc_1Dinterpolation(demo_eps_thrust_min_timeArray,
+ demo_eps_thrust_min_daArray,
+ demo_eps_thrust_min_ntime,
+ time);
+ }
+ if (demo_eps_airspeed_max) {
+ double time = Simtime - demo_eps_airspeed_max_startTime;
+ eps_airspeed_max = uiuc_1Dinterpolation(demo_eps_airspeed_max_timeArray,
+ demo_eps_airspeed_max_daArray,
+ demo_eps_airspeed_max_ntime,
+ time);
+ }
+ if (demo_eps_airspeed_min) {
+ double time = Simtime - demo_eps_airspeed_min_startTime;
+ eps_airspeed_min = uiuc_1Dinterpolation(demo_eps_airspeed_min_timeArray,
+ demo_eps_airspeed_min_daArray,
+ demo_eps_airspeed_min_ntime,
+ time);
+ }
+ if (demo_eps_flap_max) {
+ double time = Simtime - demo_eps_flap_max_startTime;
+ eps_flap_max = uiuc_1Dinterpolation(demo_eps_flap_max_timeArray,
+ demo_eps_flap_max_daArray,
+ demo_eps_flap_max_ntime,
+ time);
+ }
+ if (demo_eps_pitch_input) {
+ double time = Simtime - demo_eps_pitch_input_startTime;
+ eps_pitch_input = uiuc_1Dinterpolation(demo_eps_pitch_input_timeArray,
+ demo_eps_pitch_input_daArray,
+ demo_eps_pitch_input_ntime,
+ time);
+ }
+
+ // Boot cycle values
+ if (demo_boot_cycle_tail) {
+ double time = Simtime - demo_boot_cycle_tail_startTime;
+ boot_cycle_tail = uiuc_1Dinterpolation(demo_boot_cycle_tail_timeArray,
+ demo_boot_cycle_tail_daArray,
+ demo_boot_cycle_tail_ntime,
+ time);
+ }
+ if (demo_boot_cycle_wing_left) {
+ double time = Simtime - demo_boot_cycle_wing_left_startTime;
+ boot_cycle_wing_left = uiuc_1Dinterpolation(demo_boot_cycle_wing_left_timeArray,
+ demo_boot_cycle_wing_left_daArray,
+ demo_boot_cycle_wing_left_ntime,
+ time);
+ }
+ if (demo_boot_cycle_wing_right) {
+ double time = Simtime - demo_boot_cycle_wing_right_startTime;
+ boot_cycle_wing_right = uiuc_1Dinterpolation(demo_boot_cycle_wing_right_timeArray,
+ demo_boot_cycle_wing_right_daArray,
+ demo_boot_cycle_wing_right_ntime,
+ time);
+ }
+
+ // Ice values
+ if (demo_ice_tail) {
+ double time = Simtime - demo_ice_tail_startTime;
+ ice_tail = uiuc_1Dinterpolation(demo_ice_tail_timeArray,
+ demo_ice_tail_daArray,
+ demo_ice_tail_ntime,
+ time);
+ }
+ if (demo_ice_left) {
+ double time = Simtime - demo_ice_left_startTime;
+ ice_left = uiuc_1Dinterpolation(demo_ice_left_timeArray,
+ demo_ice_left_daArray,
+ demo_ice_left_ntime,
+ time);
+ }
+ if (demo_ice_right) {
+ double time = Simtime - demo_ice_right_startTime;
+ ice_right = uiuc_1Dinterpolation(demo_ice_right_timeArray,
+ demo_ice_right_daArray,
+ demo_ice_right_ntime,
+ time);
+ }
+
+ // Autopilot
+ if (demo_ap_pah_on){
+ double time = Simtime - demo_ap_pah_on_startTime;
+ ap_pah_on = uiuc_1Dinterpolation(demo_ap_pah_on_timeArray,
+ demo_ap_pah_on_daArray,
+ demo_ap_pah_on_ntime,
+ time);
+ }
+ if (demo_ap_Theta_ref_deg){
+ double time = Simtime - demo_ap_Theta_ref_deg_startTime;
+ ap_Theta_ref_deg = uiuc_1Dinterpolation(demo_ap_Theta_ref_deg_timeArray,
+ demo_ap_Theta_ref_deg_daArray,
+ demo_ap_Theta_ref_deg_ntime,
+ time);
+ }
+
+ return;
+}
--- /dev/null
+#ifndef _ICING_DEMO_H_
+#define _ICING_DEMO_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_1Dinterpolation.h"
+
+extern double Simtime;
+
+void uiuc_icing_demo();
+
+#endif // _ICING_DEMO_H_
{
CD_map["CDo"] = CDo_flag ;
CD_map["CDK"] = CDK_flag ;
+ CD_map["CLK"] = CLK_flag ;
CD_map["CD_a"] = CD_a_flag ;
CD_map["CD_adot"] = CD_adot_flag ;
CD_map["CD_q"] = CD_q_flag ;
CD_map["CD_ih"] = CD_ih_flag ;
CD_map["CD_de"] = CD_de_flag ;
+ CD_map["CD_dr"] = CD_dr_flag ;
+ CD_map["CD_da"] = CD_da_flag ;
+ CD_map["CD_beta"] = CD_beta_flag ;
+ CD_map["CD_df"] = CD_df_flag ;
+ CD_map["CD_ds"] = CD_ds_flag ;
+ CD_map["CD_dg"] = CD_dg_flag ;
CD_map["CDfa"] = CDfa_flag ;
CD_map["CDfCL"] = CDfCL_flag ;
CD_map["CDfade"] = CDfade_flag ;
CL_map["CL_q"] = CL_q_flag ;
CL_map["CL_ih"] = CL_ih_flag ;
CL_map["CL_de"] = CL_de_flag ;
+ CL_map["CL_df"] = CL_df_flag ;
+ CL_map["CL_ds"] = CL_ds_flag ;
+ CL_map["CL_dg"] = CL_dg_flag ;
CL_map["CLfa"] = CLfa_flag ;
CL_map["CLfade"] = CLfade_flag ;
CL_map["CLfdf"] = CLfdf_flag ;
Cm_map["Cm_b2"] = Cm_b2_flag ;
Cm_map["Cm_r"] = Cm_r_flag ;
Cm_map["Cm_df"] = Cm_df_flag ;
+ Cm_map["Cm_ds"] = Cm_ds_flag ;
+ Cm_map["Cm_dg"] = Cm_dg_flag ;
Cm_map["Cmfa"] = Cmfa_flag ;
Cm_map["Cmfade"] = Cmfade_flag ;
Cm_map["Cmfdf"] = Cmfdf_flag ;
----------------------------------------------------------------------
AUTHOR(S): Bipin Sehgal <bsehgal@uiuc.edu>
- Jeff Scott <jscott@mail.com>
+ Jeff Scott http://www.jeffscott.net/
Robert Deters <rdeters@uiuc.edu>
----------------------------------------------------------------------
controlSurface_map["pilot_elev_no"] = pilot_elev_no_flag ;
controlSurface_map["pilot_ail_no"] = pilot_ail_no_flag ;
controlSurface_map["pilot_rud_no"] = pilot_rud_no_flag ;
+
controlSurface_map["flap_max"] = flap_max_flag ;
controlSurface_map["flap_rate"] = flap_rate_flag ;
+ controlSurface_map["use_flaps"] = use_flaps_flag ;
+
+ controlSurface_map["spoiler_max"] = spoiler_max_flag ;
+ controlSurface_map["spoiler_rate"] = spoiler_rate_flag ;
+ controlSurface_map["use_spoilers"] = use_spoilers_flag ;
+
+ controlSurface_map["gear_max"] = gear_max_flag ;
+ controlSurface_map["gear_rate"] = gear_rate_flag ;
+ controlSurface_map["use_gears"] = use_gear_flag ;
+
+ controlSurface_map["aileron_sas_KP"] = aileron_sas_KP_flag ;
+ controlSurface_map["aileron_sas_max"] = aileron_sas_max_flag ;
+ controlSurface_map["aileron_stick_gain"] = aileron_stick_gain_flag ;
+ controlSurface_map["elevator_sas_KQ"] = elevator_sas_KQ_flag ;
+ controlSurface_map["elevator_sas_max"] = elevator_sas_max_flag ;
+ controlSurface_map["elevator_sas_min"] = elevator_sas_min_flag ;
+ controlSurface_map["elevator_stick_gain"] = elevator_stick_gain_flag ;
+ controlSurface_map["rudder_sas_KR"] = rudder_sas_KR_flag ;
+ controlSurface_map["rudder_sas_max"] = rudder_sas_max_flag ;
+ controlSurface_map["rudder_stick_gain"] = rudder_stick_gain_flag ;
+ controlSurface_map["use_aileron_sas_type1"] = use_aileron_sas_type1_flag ;
+ controlSurface_map["use_elevator_sas_type1"] = use_elevator_sas_type1_flag ;
+ controlSurface_map["use_rudder_sas_type1"] = use_rudder_sas_type1_flag ;
}
// end uiuc_map_controlSurface.cpp
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_Cm_de"] = eta_q_Cm_de_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 ;
gear_map["kgear"] = kgear_flag ;
gear_map["muGear"] = muGear_flag ;
gear_map["strutLength"] = strutLength_flag ;
+ gear_map["gear_max"] = gear_max_flag ;
+ gear_map["gear_rate"] = gear_rate_flag ;
+ gear_map["use_gear"] = use_gear_flag ;
}
// end uiuc_map_gear.cpp
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["use_gamma_horiz_on_speed"] = use_gamma_horiz_on_speed_flag;
init_map["downwashMode"] = downwashMode_flag ;
init_map["downwashCoef"] = downwashCoef_flag ;
init_map["Alpha"] = Alpha_flag ;
init_map["U_body"] = U_body_flag ;
init_map["V_body"] = V_body_flag ;
init_map["W_body"] = W_body_flag ;
- init_map["ignore_unknown"] = ignore_unknown_flag ;
+ init_map["ignore_unknown_keywords"] = ignore_unknown_keywords_flag;
init_map["trim_case_2"] = trim_case_2_flag ;
init_map["use_uiuc_network"] = use_uiuc_network_flag ;
init_map["old_flap_routine"] = old_flap_routine_flag ;
----------------------------------------------------------------------
HISTORY: 06/03/2000 file creation
- 11/12/2001 (RD) Added flap_goal and flap_pos
+ 11/12/2001 (RD) Added flap_cmd_deg and flap_pos
+ 03/03/2003 (RD) Added flap_cmd
----------------------------------------------------------------------
record_map["rudder_deg"] = rudder_deg_record ;
record_map["Flap_handle"] = Flap_handle_record ;
record_map["flap"] = flap_record ;
- record_map["flap_deg" ] = flap_deg_record ;
- record_map["flap_goal"] = flap_goal_record ;
+ record_map["flap_cmd"] = flap_cmd_record ;
+ record_map["flap_cmd_deg"] = flap_cmd_deg_record ;
record_map["flap_pos"] = flap_pos_record ;
+ record_map["flap_pos_deg"] = flap_pos_deg_record ;
+ record_map["Spoiler_handle"] = Spoiler_handle_record ;
+ record_map["spoiler_cmd_deg"] = spoiler_cmd_deg_record ;
+ record_map["spoiler_pos_deg"] = spoiler_pos_deg_record ;
+ record_map["spoiler_pos_norm"] = spoiler_pos_norm_record ;
+ record_map["spoiler_pos"] = spoiler_pos_record ;
+
}
// end uiuc_map_record3.cpp
record_map["CXfaqfI"] = CXfaqfI_record ;
record_map["CDo_save"] = CDo_save_record ;
record_map["CDK_save"] = CDK_save_record ;
+ record_map["CLK_save"] = CLK_save_record ;
record_map["CD_a_save"] = CD_a_save_record ;
record_map["CD_adot_save"] = CD_adot_save_record ;
record_map["CD_q_save"] = CD_q_save_record ;
record_map["CD_ih_save"] = CD_ih_save_record ;
record_map["CD_de_save"] = CD_de_save_record ;
+ record_map["CD_dr_save"] = CD_dr_save_record ;
+ record_map["CD_da_save"] = CD_da_save_record ;
+ record_map["CD_beta_save"] = CD_beta_save_record ;
+ record_map["CD_df_save"] = CD_df_save_record ;
+ record_map["CD_ds_save"] = CD_ds_save_record ;
+ record_map["CD_dg_save"] = CD_dg_save_record ;
record_map["CXo_save"] = CXo_save_record ;
record_map["CXK_save"] = CXK_save_record ;
record_map["CX_a_save"] = CX_a_save_record ;
record_map["CL_q_save"] = CL_q_save_record ;
record_map["CL_ih_save"] = CL_ih_save_record ;
record_map["CL_de_save"] = CL_de_save_record ;
+ record_map["CL_df_save"] = CL_df_save_record ;
+ record_map["CL_ds_save"] = CL_ds_save_record ;
+ record_map["CL_dg_save"] = CL_dg_save_record ;
record_map["CZo_save"] = CZo_save_record ;
record_map["CZ_a_save"] = CZ_a_save_record ;
record_map["CZ_a2_save"] = CZ_a2_save_record ;
record_map["Cm_b2_save"] = Cm_b2_save_record ;
record_map["Cm_r_save"] = Cm_r_save_record ;
record_map["Cm_df_save"] = Cm_df_save_record ;
+ record_map["Cm_ds_save"] = Cm_ds_save_record ;
+ record_map["Cm_dg_save"] = Cm_dg_save_record ;
record_map["CY"] = CY_record ;
record_map["CYfadaI"] = CYfadaI_record ;
record_map["CYfbetadrI"] = CYfbetadrI_record ;
record_map["F_X_wind"] = F_X_wind_record ;
record_map["F_Y_wind"] = F_Y_wind_record ;
record_map["F_Z_wind"] = F_Z_wind_record ;
-
+
// aero forces in body axis
record_map["F_X_aero"] = F_X_aero_record ;
record_map["F_Y_aero"] = F_Y_aero_record ;
record_map["M_l_rp"] = M_l_rp_record ;
record_map["M_m_rp"] = M_m_rp_record ;
record_map["M_n_rp"] = M_n_rp_record ;
-
+
/***********************Flapper Data********************/
- 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 ;
-
- /**************************Debug************************/
- record_map["debug1"] = debug1_record ;
- record_map["debug2"] = debug2_record ;
- record_map["debug3"] = debug3_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 ;
+
+
+ /******************** MSS debug **********************************/
+ record_map["debug1"] = debug1_record ;
+ record_map["debug2"] = debug2_record ;
+ record_map["debug3"] = debug3_record ;
+ /******************** RD debug ***********************************/
+ record_map["debug4"] = debug4_record ;
+ record_map["debug5"] = debug5_record ;
+ record_map["debug6"] = debug6_record ;
+
+ /******************** Misc data **********************************/
+ record_map["V_down_fpm"] = V_down_fpm_record ;
+ record_map["eta_q"] = eta_q_record ;
+ record_map["rpm"] = rpm_record ;
+ record_map["elevator_sas_deg"] = elevator_sas_deg_record ;
+ record_map["aileron_sas_deg"] = aileron_sas_deg_record ;
+ record_map["rudder_sas_deg"] = rudder_sas_deg_record ;
+ record_map["w_induced"] = w_induced_record ;
+ record_map["downwashAngle_deg"] = downwashAngle_deg_record ;
+ record_map["alphaTail_deg"] = alphaTail_deg_record ;
+ record_map["gammaWing"] = gammaWing_record ;
+ record_map["LD"] = LD_record ;
+ record_map["gload"] = gload_record ;
+ record_map["gyroMomentQ"] = gyroMomentQ_record ;
+ record_map["gyroMomentR"] = gyroMomentR_record ;
+
+ /******************** Gear ************************************/
+ record_map["Gear_handle"] = Gear_handle_record ;
+ record_map["gear_cmd_norm"] = gear_cmd_norm_record ;
+ record_map["gear_pos_norm"] = gear_pos_norm_record ;
+
}
// end uiuc_map_record5.cpp
/******************************autopilot****************************/
record_map["ap_Theta_ref_deg"] = ap_Theta_ref_deg_record ;
record_map["ap_pah_on"] = ap_pah_on_record ;
+ /***********************trigger variables**************************/
+ record_map["trigger_on"] = trigger_on_record ;
+ record_map["trigger_num"] = trigger_num_record ;
+ record_map["trigger_toggle"] = trigger_toggle_record ;
+ record_map["trigger_counter"] = trigger_counter_record ;
}
// end uiuc_map_record6.cpp
compile time. [] RD to add more comments here.
08/29/2003 (MSS) Adding new keywords for new engine model
and slipstream effects on tail.
+ 03/02/2003 (RD) Changed Cxfxxf areas so that there is a
+ conversion factor for flap angle
+ 03/03/2003 (RD) Added flap_cmd_record
+ 03/16/2003 (RD) Added trigger record flags
+ 04/02/2003 (RD) Tokens are now equal to 0 when no value
+ is given in the input file
+ 04/04/2003 (RD) To speed up compile time on this file,
+ each first level token now goes to its
+ own file uiuc_menu_*.cpp
----------------------------------------------------------------------
AUTHOR(S): Bipin Sehgal <bsehgal@uiuc.edu>
- Jeff Scott <jscott@mail.com>
+ Jeff Scott http://www.jeffscott.net/
Robert Deters <rdeters@uiuc.edu>
Michael Selig <m-selig@uiuc.edu>
David Megginson <david@megginson.com>
CALLS TO: aircraft.dat
tabulated data files (if needed)
+ uiuc_menu_init()
+ uiuc_menu_geometry()
+ uiuc_menu_mass()
+ uiuc_menu_controlSurface()
+ uiuc_menu_CD()
+ uiuc_menu_CL()
+ uiuc_menu_Cm()
+ uiuc_menu_CY()
+ uiuc_menu_Cl()
+ uiuc_menu_Cn()
+ uiuc_menu_ice()
+ uiuc_menu_engine()
+ uiuc_menu_fog()
+ uiuc_menu_gear()
+ uiuc_menu_record()
+ uiuc_menu_misc()
----------------------------------------------------------------------
#pragma optimization_level 0
#endif
-#include <stdlib.h>
-#include <string.h>
+#include <cstdlib>
+#include <string>
#include STL_IOSTREAM
-#include <cstdlib> // exit
#include "uiuc_menu.h"
SG_USING_STD(exit);
#endif
-bool check_float( const string &token)
-{
- float value;
- istrstream stream(token.c_str());
- return (stream >> value);
-}
-
-void d_2_to_3( double array2D[100][100], double array3D[][100][100], int index3D)
-{
- for (register int i=0; i<=99; i++)
- {
- for (register int j=1; j<=99; j++)
- {
- array3D[index3D][i][j]=array2D[i][j];
- }
- }
-}
-
-void d_1_to_2( double array1D[100], double array2D[][100], int index2D)
-{
- for (register int i=0; i<=99; i++)
- {
- array2D[index2D][i]=array1D[i];
- }
-}
-
-void d_1_to_1( double array1[100], double array2[100] )
-{
- for (register int i=0; i<=99; i++)
- {
- array2[i]=array1[i];
- }
-}
-
-void i_1_to_2( int array1D[100], int array2D[][100], int index2D)
-{
- for (register int i=0; i<=99; i++)
- {
- array2D[index2D][i]=array1D[i];
- }
-}
-
-void parse_init( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, LIST command_line ) {
- double token_value;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- int token_value_recordRate;
-
- switch(init_map[linetoken2])
- {
- case Dx_pilot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Dx_pilot = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Dy_pilot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Dy_pilot = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Dz_pilot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Dz_pilot = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Dx_cg_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Dx_cg = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Dy_cg_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Dy_cg = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Dz_cg_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Dz_cg = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Altitude_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Altitude = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case V_north_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- V_north = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case V_east_flag:
- {
- initParts -> storeCommands (*command_line);
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- V_east = token_value;
- break;
- }
- case V_down_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- V_down = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case P_body_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- P_body_init_true = true;
- P_body_init = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Q_body_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Q_body_init_true = true;
- Q_body_init = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case R_body_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- R_body_init_true = true;
- R_body_init = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Phi_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Phi_init_true = true;
- Phi_init = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Theta_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Theta_init_true = true;
- Theta_init = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Psi_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Psi_init_true = true;
- Psi_init = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case Long_trim_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Long_trim = token_value;
- initParts -> storeCommands (*command_line);
- break;
- }
- case recordRate_flag:
- {
- //can't use check_float since variable is integer
- token3 >> token_value_recordRate;
- recordRate = 120 / token_value_recordRate;
- break;
- }
- case recordStartTime_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- recordStartTime = token_value;
- break;
- }
- case use_V_rel_wind_2U_flag:
- {
- use_V_rel_wind_2U = true;
- break;
- }
- case nondim_rate_V_rel_wind_flag:
- {
- nondim_rate_V_rel_wind = true;
- break;
- }
- case use_abs_U_body_2U_flag:
- {
- use_abs_U_body_2U = true;
- break;
- }
- case dyn_on_speed_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- dyn_on_speed = token_value;
- break;
- }
- case dyn_on_speed_zero_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- dyn_on_speed_zero = token_value;
- break;
- }
- case use_dyn_on_speed_curve1_flag:
- {
- use_dyn_on_speed_curve1 = true;
- break;
- }
- case use_Alpha_dot_on_speed_flag:
- {
- use_Alpha_dot_on_speed = true;
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- Alpha_dot_on_speed = token_value;
- break;
- }
- case downwashMode_flag:
- {
- b_downwashMode = true;
- token3 >> downwashMode;
- if (downwashMode==100)
- ;
- // compute downwash using downwashCoef, do nothing here
- else
- uiuc_warnings_errors(4, *command_line);
- break;
- }
- case downwashCoef_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- downwashCoef = token_value;
- break;
- }
- case Alpha_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Alpha_init_true = true;
- Alpha_init = token_value * DEG_TO_RAD;
- break;
- }
- case Beta_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Beta_init_true = true;
- Beta_init = token_value * DEG_TO_RAD;
- break;
- }
- case U_body_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- U_body_init_true = true;
- U_body_init = token_value;
- break;
- }
- case V_body_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- V_body_init_true = true;
- V_body_init = token_value;
- break;
- }
- case W_body_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- W_body_init_true = true;
- W_body_init = token_value;
- break;
- }
- case ignore_unknown_flag:
- {
- dont_ignore=false;
- break;
- }
- case trim_case_2_flag:
- {
- trim_case_2 = true;
- break;
- }
- case use_uiuc_network_flag:
- {
- use_uiuc_network = true;
- server_IP = linetoken3;
- token4 >> port_num;
- break;
- }
- case old_flap_routine_flag:
- {
- old_flap_routine = true;
- break;
- }
- case icing_demo_flag:
- {
- icing_demo = true;
- break;
- }
- case outside_control_flag:
- {
- outside_control = true;
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-void parse_geometry( const string& linetoken2, const string& linetoken3,
- LIST command_line ) {
- double token_value;
- istrstream token3(linetoken3.c_str());
-
- switch(geometry_map[linetoken2])
- {
- case bw_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- bw = token_value;
- geometryParts -> storeCommands (*command_line);
- break;
- }
- case cbar_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- cbar = token_value;
- geometryParts -> storeCommands (*command_line);
- break;
- }
- case Sw_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Sw = token_value;
- geometryParts -> storeCommands (*command_line);
- break;
- }
- case ih_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- ih = token_value;
- geometryParts -> storeCommands (*command_line);
- break;
- }
- case bh_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- bh = token_value;
- geometryParts -> storeCommands (*command_line);
- break;
- }
- case ch_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- ch = token_value;
- geometryParts -> storeCommands (*command_line);
- break;
- }
- case Sh_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Sh = token_value;
- geometryParts -> storeCommands (*command_line);
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-void parse_controlSurface( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6,
- const string& aircraft_directory,
- LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
-
- switch(controlSurface_map[linetoken2])
- {
- case de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- demax = token_value;
-
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- demin = token_value;
- break;
- }
- case da_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- damax = token_value;
-
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- damin = token_value;
- break;
- }
- case dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- drmax = token_value;
-
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- drmin = token_value;
- break;
- }
- case set_Long_trim_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- set_Long_trim = true;
- elevator_tab = token_value;
- break;
- }
- case set_Long_trim_deg_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- set_Long_trim = true;
- elevator_tab = token_value * DEG_TO_RAD;
- break;
- }
- case zero_Long_trim_flag:
- {
- zero_Long_trim = true;
- break;
- }
- case elevator_step_flag:
- {
- // set step input flag
- elevator_step = true;
-
- // read in step angle in degrees and convert
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- elevator_step_angle = token_value * DEG_TO_RAD;
-
- // read in step start time
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- elevator_step_startTime = token_value;
- break;
- }
- case elevator_singlet_flag:
- {
- // set singlet input flag
- elevator_singlet = true;
-
- // read in singlet angle in degrees and convert
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- elevator_singlet_angle = token_value * DEG_TO_RAD;
-
- // read in singlet start time
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- elevator_singlet_startTime = token_value;
-
- // read in singlet duration
- if (check_float(linetoken5))
- token5 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- elevator_singlet_duration = token_value;
- break;
- }
- case elevator_doublet_flag:
- {
- // set doublet input flag
- elevator_doublet = true;
-
- // read in doublet angle in degrees and convert
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- elevator_doublet_angle = token_value * DEG_TO_RAD;
-
- // read in doublet start time
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- elevator_doublet_startTime = token_value;
-
- // read in doublet duration
- if (check_float(linetoken5))
- token5 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- elevator_doublet_duration = token_value;
- break;
- }
- case elevator_input_flag:
- {
- elevator_input = true;
- elevator_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(elevator_input_file,
- elevator_input_timeArray,
- elevator_input_deArray,
- elevator_input_ntime);
- token6 >> token_value;
- elevator_input_startTime = token_value;
- break;
- }
- case aileron_input_flag:
- {
- aileron_input = true;
- aileron_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(aileron_input_file,
- aileron_input_timeArray,
- aileron_input_daArray,
- aileron_input_ntime);
- token6 >> token_value;
- aileron_input_startTime = token_value;
- break;
- }
- case rudder_input_flag:
- {
- rudder_input = true;
- rudder_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(rudder_input_file,
- rudder_input_timeArray,
- rudder_input_drArray,
- rudder_input_ntime);
- token6 >> token_value;
- rudder_input_startTime = token_value;
- break;
- }
- case flap_pos_input_flag:
- {
- flap_pos_input = true;
- flap_pos_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(flap_pos_input_file,
- flap_pos_input_timeArray,
- flap_pos_input_dfArray,
- flap_pos_input_ntime);
- token6 >> token_value;
- flap_pos_input_startTime = token_value;
- break;
- }
- case pilot_elev_no_flag:
- {
- pilot_elev_no_check = true;
- break;
- }
- case pilot_ail_no_flag:
- {
- pilot_ail_no_check = true;
- break;
- }
- case pilot_rud_no_flag:
- {
- pilot_rud_no_check = true;
- break;
- }
- case flap_max_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- flap_max = token_value;
- break;
- }
- case flap_rate_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- flap_rate = token_value;
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-void parse_mass( const string& linetoken2, const string& linetoken3,
- LIST command_line ) {
- double token_value;
- istrstream token3(linetoken3.c_str());
-
- switch(mass_map[linetoken2])
- {
- case Weight_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Weight = token_value;
- Mass = Weight * INVG;
- massParts -> storeCommands (*command_line);
- break;
- }
- case Mass_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Mass = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_xx_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_xx = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_yy_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_yy = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_zz_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_zz = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_xz_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_xz = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case Mass_appMass_ratio_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Mass_appMass_ratio = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_xx_appMass_ratio_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_xx_appMass_ratio = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_yy_appMass_ratio_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_yy_appMass_ratio = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_zz_appMass_ratio_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_zz_appMass_ratio = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case Mass_appMass_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Mass_appMass = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_xx_appMass_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_xx_appMass = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_yy_appMass_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_yy_appMass = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- case I_zz_appMass_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- I_zz_appMass = token_value;
- massParts -> storeCommands (*command_line);
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-void parse_engine( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6, const string& aircraft_directory,
- LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
-
- switch(engine_map[linetoken2])
- {
- case simpleSingle_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- simpleSingleMaxThrust = token_value;
- engineParts -> storeCommands (*command_line);
- break;
- }
- case simpleSingleModel_flag:
- {
- simpleSingleModel = true;
- /* input the thrust at zero speed */
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- t_v0 = token_value;
- /* input slope of thrust at speed for which thrust is zero */
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- dtdv_t0 = token_value;
- /* input speed at which thrust is zero */
- if (check_float(linetoken5))
- token5 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- v_t0 = token_value;
- dtdvvt = -dtdv_t0 * v_t0 / t_v0;
- engineParts -> storeCommands (*command_line);
- break;
- }
- case c172_flag:
- {
- engineParts -> storeCommands (*command_line);
- break;
- }
- case cherokee_flag:
- {
- engineParts -> storeCommands (*command_line);
- break;
- }
- case Throttle_pct_input_flag:
- {
- Throttle_pct_input = true;
- Throttle_pct_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(Throttle_pct_input_file,
- Throttle_pct_input_timeArray,
- Throttle_pct_input_dTArray,
- Throttle_pct_input_ntime);
- token6 >> token_value;
- Throttle_pct_input_startTime = token_value;
- break;
- }
- case gyroForce_Q_body_flag:
- {
- /* include gyroscopic forces due to pitch */
- gyroForce_Q_body = true;
- break;
- }
- case gyroForce_R_body_flag:
- {
- /* include gyroscopic forces due to yaw */
- gyroForce_R_body = true;
- break;
- }
-
- case slipstream_effects_flag:
- {
- // include slipstream effects
- b_slipstreamEffects = true;
- if (!simpleSingleModel)
- uiuc_warnings_errors(3, *command_line);
- break;
- }
- case propDia_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- propDia = token_value;
- break;
- }
- case eta_q_Cm_q_flag:
- {
- // include slipstream effects due to Cm_q
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cm_q_fac = token_value;
- if (eta_q_Cm_q_fac == 0.0) {eta_q_Cm_q_fac = 1.0;}
- break;
- }
- case eta_q_Cm_adot_flag:
- {
- // include slipstream effects due to Cm_adot
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cm_adot_fac = token_value;
- if (eta_q_Cm_adot_fac == 0.0) {eta_q_Cm_adot_fac = 1.0;}
- break;
- }
- case eta_q_Cmfade_flag:
- {
- // include slipstream effects due to Cmfade
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cmfade_fac = token_value;
- if (eta_q_Cmfade_fac == 0.0) {eta_q_Cmfade_fac = 1.0;}
- break;
- }
- case eta_q_Cl_beta_flag:
- {
- // include slipstream effects due to Cl_beta
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cl_beta_fac = token_value;
- if (eta_q_Cl_beta_fac == 0.0) {eta_q_Cl_beta_fac = 1.0;}
- break;
- }
- case eta_q_Cl_p_flag:
- {
- // include slipstream effects due to Cl_p
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cl_p_fac = token_value;
- if (eta_q_Cl_p_fac == 0.0) {eta_q_Cl_p_fac = 1.0;}
- break;
- }
- case eta_q_Cl_r_flag:
- {
- // include slipstream effects due to Cl_r
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cl_r_fac = token_value;
- if (eta_q_Cl_r_fac == 0.0) {eta_q_Cl_r_fac = 1.0;}
- break;
- }
- case eta_q_Cl_dr_flag:
- {
- // include slipstream effects due to Cl_dr
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cl_dr_fac = token_value;
- if (eta_q_Cl_dr_fac == 0.0) {eta_q_Cl_dr_fac = 1.0;}
- break;
- }
- case eta_q_CY_beta_flag:
- {
- // include slipstream effects due to CY_beta
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_CY_beta_fac = token_value;
- if (eta_q_CY_beta_fac == 0.0) {eta_q_CY_beta_fac = 1.0;}
- break;
- }
- case eta_q_CY_p_flag:
- {
- // include slipstream effects due to CY_p
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_CY_p_fac = token_value;
- if (eta_q_CY_p_fac == 0.0) {eta_q_CY_p_fac = 1.0;}
- break;
- }
- case eta_q_CY_r_flag:
- {
- // include slipstream effects due to CY_r
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_CY_r_fac = token_value;
- if (eta_q_CY_r_fac == 0.0) {eta_q_CY_r_fac = 1.0;}
- break;
- }
- case eta_q_CY_dr_flag:
- {
- // include slipstream effects due to CY_dr
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_CY_dr_fac = token_value;
- if (eta_q_CY_dr_fac == 0.0) {eta_q_CY_dr_fac = 1.0;}
- break;
- }
- case eta_q_Cn_beta_flag:
- {
- // include slipstream effects due to Cn_beta
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cn_beta_fac = token_value;
- if (eta_q_Cn_beta_fac == 0.0) {eta_q_Cn_beta_fac = 1.0;}
- break;
- }
- case eta_q_Cn_p_flag:
- {
- // include slipstream effects due to Cn_p
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cn_p_fac = token_value;
- if (eta_q_Cn_p_fac == 0.0) {eta_q_Cn_p_fac = 1.0;}
- break;
- }
- case eta_q_Cn_r_flag:
- {
- // include slipstream effects due to Cn_r
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cn_r_fac = token_value;
- if (eta_q_Cn_r_fac == 0.0) {eta_q_Cn_r_fac = 1.0;}
- break;
- }
- case eta_q_Cn_dr_flag:
- {
- // include slipstream effects due to Cn_dr
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- eta_q_Cn_dr_fac = token_value;
- if (eta_q_Cn_dr_fac == 0.0) {eta_q_Cn_dr_fac = 1.0;}
- break;
- }
-
- case omega_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- minOmega = token_value;
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- maxOmega = token_value;
- break;
- }
- case omegaRPM_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- minOmegaRPM = token_value;
- minOmega = minOmegaRPM * 2.0 * LS_PI / 60;
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- maxOmegaRPM = token_value;
- maxOmega = maxOmegaRPM * 2.0 * LS_PI / 60;
- break;
- }
- case polarInertia_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- polarInertia = token_value;
- break;
- }
- case forcemom_flag:
- {
- engineParts -> storeCommands (*command_line);
- break;
- }
- case Xp_input_flag:
- {
- Xp_input = true;
- Xp_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(Xp_input_file,
- Xp_input_timeArray,
- Xp_input_XpArray,
- Xp_input_ntime);
- token6 >> token_value;
- Xp_input_startTime = token_value;
- break;
- }
- case Zp_input_flag:
- {
- Zp_input = true;
- Zp_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(Zp_input_file,
- Zp_input_timeArray,
- Zp_input_ZpArray,
- Zp_input_ntime);
- token6 >> token_value;
- Zp_input_startTime = token_value;
- break;
- }
- case Mp_input_flag:
- {
- Mp_input = true;
- Mp_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(Mp_input_file,
- Mp_input_timeArray,
- Mp_input_MpArray,
- Mp_input_ntime);
- token6 >> token_value;
- Mp_input_startTime = token_value;
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-void parse_CD( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6, const string& linetoken7,
- const string& linetoken8, const string& linetoken9,
- const string& aircraft_directory,
- bool &CXfabetaf_first, bool &CXfadef_first,
- bool &CXfaqf_first, LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2, token_value_convert3;
- double datafile_xArray[100][100], datafile_yArray[100];
- double datafile_zArray[100][100];
- int datafile_nxArray[100], datafile_ny;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
- istrstream token7(linetoken7.c_str());
- istrstream token8(linetoken8.c_str());
- istrstream token9(linetoken9.c_str());
-
- switch(CD_map[linetoken2])
- {
- case CDo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CDo = token_value;
- CDo_clean = CDo;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CDK_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CDK = token_value;
- CDK_clean = CDK;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CD_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CD_a = token_value;
- CD_a_clean = CD_a;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CD_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CD_adot = token_value;
- CD_adot_clean = CD_adot;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CD_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CD_q = token_value;
- CD_q_clean = CD_q;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CD_ih_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CD_ih = token_value;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CD_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CD_de = token_value;
- CD_de_clean = CD_de;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CDfa_flag:
- {
- CDfa = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- /* call 1D File Reader with file name (CDfa) and conversion
- factors; function returns array of alphas (aArray) and
- corresponding CD values (CDArray) and max number of
- terms in arrays (nAlpha) */
- uiuc_1DdataFileReader(CDfa,
- CDfa_aArray,
- CDfa_CDArray,
- CDfa_nAlpha);
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CDfCL_flag:
- {
- CDfCL = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- /* call 1D File Reader with file name (CDfCL) and conversion
- factors; function returns array of CLs (CLArray) and
- corresponding CD values (CDArray) and max number of
- terms in arrays (nCL) */
- uiuc_1DdataFileReader(CDfCL,
- CDfCL_CLArray,
- CDfCL_CDArray,
- CDfCL_nCL);
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CDfade_flag:
- {
- CDfade = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CDfade) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CD (CDArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (nde) */
- uiuc_2DdataFileReader(CDfade,
- CDfade_aArray,
- CDfade_deArray,
- CDfade_CDArray,
- CDfade_nAlphaArray,
- CDfade_nde);
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CDfdf_flag:
- {
- CDfdf = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- /* call 1D File Reader with file name (CDfdf) and conversion
- factors; function returns array of dfs (dfArray) and
- corresponding CD values (CDArray) and max number of
- terms in arrays (ndf) */
- uiuc_1DdataFileReader(CDfdf,
- CDfdf_dfArray,
- CDfdf_CDArray,
- CDfdf_ndf);
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CDfadf_flag:
- {
- CDfadf = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CDfadf) and
- conversion factors; function returns array of
- flap deflections (dfArray) and corresponding
- alpha (aArray) and delta CD (CDArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (ndf) */
- uiuc_2DdataFileReader(CDfadf,
- CDfadf_aArray,
- CDfadf_dfArray,
- CDfadf_CDArray,
- CDfadf_nAlphaArray,
- CDfadf_ndf);
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CXo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CXo = token_value;
- CXo_clean = CXo;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CXK_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CXK = token_value;
- CXK_clean = CXK;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_a = token_value;
- CX_a_clean = CX_a;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_a2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_a2 = token_value;
- CX_a2_clean = CX_a2;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_a3_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_a3 = token_value;
- CX_a3_clean = CX_a3;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_adot = token_value;
- CX_adot_clean = CX_adot;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_q = token_value;
- CX_q_clean = CX_q;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_de = token_value;
- CX_de_clean = CX_de;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_dr = token_value;
- CX_dr_clean = CX_dr;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_df_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_df = token_value;
- CX_df_clean = CX_df;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CX_adf_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CX_adf = token_value;
- CX_adf_clean = CX_adf;
- aeroDragParts -> storeCommands (*command_line);
- break;
- }
- case CXfabetaf_flag:
- {
- int CXfabetaf_index, i;
- string CXfabetaf_file;
- double flap_value;
- CXfabetaf_file = aircraft_directory + linetoken3;
- token4 >> CXfabetaf_index;
- if (CXfabetaf_index < 1 || CXfabetaf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CXfabetaf_index > CXfabetaf_nf)
- CXfabetaf_nf = CXfabetaf_index;
- token5 >> flap_value;
- CXfabetaf_fArray[CXfabetaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CXfabetaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CXfabetaf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CXfabetaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CXfabetaf_aArray, CXfabetaf_index);
- d_1_to_2(datafile_yArray, CXfabetaf_betaArray, CXfabetaf_index);
- d_2_to_3(datafile_zArray, CXfabetaf_CXArray, CXfabetaf_index);
- i_1_to_2(datafile_nxArray, CXfabetaf_nAlphaArray, CXfabetaf_index);
- CXfabetaf_nbeta[CXfabetaf_index] = datafile_ny;
- if (CXfabetaf_first==true)
- {
- if (CXfabetaf_nice == 1)
- {
- CXfabetaf_na_nice = datafile_nxArray[1];
- CXfabetaf_nb_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CXfabetaf_bArray_nice);
- for (i=1; i<=CXfabetaf_na_nice; i++)
- CXfabetaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroDragParts -> storeCommands (*command_line);
- CXfabetaf_first=false;
- }
- break;
- }
- case CXfadef_flag:
- {
- int CXfadef_index, i;
- string CXfadef_file;
- double flap_value;
- CXfadef_file = aircraft_directory + linetoken3;
- token4 >> CXfadef_index;
- if (CXfadef_index < 0 || CXfadef_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CXfadef_index > CXfadef_nf)
- CXfadef_nf = CXfadef_index;
- token5 >> flap_value;
- CXfadef_fArray[CXfadef_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CXfadef_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CXfadef_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CXfadef_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CXfadef_aArray, CXfadef_index);
- d_1_to_2(datafile_yArray, CXfadef_deArray, CXfadef_index);
- d_2_to_3(datafile_zArray, CXfadef_CXArray, CXfadef_index);
- i_1_to_2(datafile_nxArray, CXfadef_nAlphaArray, CXfadef_index);
- CXfadef_nde[CXfadef_index] = datafile_ny;
- if (CXfadef_first==true)
- {
- if (CXfadef_nice == 1)
- {
- CXfadef_na_nice = datafile_nxArray[1];
- CXfadef_nde_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CXfadef_deArray_nice);
- for (i=1; i<=CXfadef_na_nice; i++)
- CXfadef_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroDragParts -> storeCommands (*command_line);
- CXfadef_first=false;
- }
- break;
- }
- case CXfaqf_flag:
- {
- int CXfaqf_index, i;
- string CXfaqf_file;
- double flap_value;
- CXfaqf_file = aircraft_directory + linetoken3;
- token4 >> CXfaqf_index;
- if (CXfaqf_index < 0 || CXfaqf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CXfaqf_index > CXfaqf_nf)
- CXfaqf_nf = CXfaqf_index;
- token5 >> flap_value;
- CXfaqf_fArray[CXfaqf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CXfaqf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CXfaqf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CXfaqf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CXfaqf_aArray, CXfaqf_index);
- d_1_to_2(datafile_yArray, CXfaqf_qArray, CXfaqf_index);
- d_2_to_3(datafile_zArray, CXfaqf_CXArray, CXfaqf_index);
- i_1_to_2(datafile_nxArray, CXfaqf_nAlphaArray, CXfaqf_index);
- CXfaqf_nq[CXfaqf_index] = datafile_ny;
- if (CXfaqf_first==true)
- {
- if (CXfaqf_nice == 1)
- {
- CXfaqf_na_nice = datafile_nxArray[1];
- CXfaqf_nq_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CXfaqf_qArray_nice);
- for (i=1; i<=CXfaqf_na_nice; i++)
- CXfaqf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroDragParts -> storeCommands (*command_line);
- CXfaqf_first=false;
- }
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
-void parse_CL( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6, const string& linetoken7,
- const string& linetoken8, const string& linetoken9,
- const string& aircraft_directory,
- bool &CZfabetaf_first, bool &CZfadef_first,
- bool &CZfaqf_first, LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2, token_value_convert3;
- double datafile_xArray[100][100], datafile_yArray[100];
- double datafile_zArray[100][100];
- int datafile_nxArray[100], datafile_ny;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
- istrstream token7(linetoken7.c_str());
- istrstream token8(linetoken8.c_str());
- istrstream token9(linetoken9.c_str());
-
- switch(CL_map[linetoken2])
- {
- case CLo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CLo = token_value;
- CLo_clean = CLo;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CL_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CL_a = token_value;
- CL_a_clean = CL_a;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CL_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CL_adot = token_value;
- CL_adot_clean = CL_adot;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CL_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CL_q = token_value;
- CL_q_clean = CL_q;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CL_ih_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CL_ih = token_value;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CL_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CL_de = token_value;
- CL_de_clean = CL_de;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CLfa_flag:
- {
- CLfa = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- /* call 1D File Reader with file name (CLfa) and conversion
- factors; function returns array of alphas (aArray) and
- corresponding CL values (CLArray) and max number of
- terms in arrays (nAlpha) */
- uiuc_1DdataFileReader(CLfa,
- CLfa_aArray,
- CLfa_CLArray,
- CLfa_nAlpha);
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CLfade_flag:
- {
- CLfade = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CLfade) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CL (CLArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (nde) */
- uiuc_2DdataFileReader(CLfade,
- CLfade_aArray,
- CLfade_deArray,
- CLfade_CLArray,
- CLfade_nAlphaArray,
- CLfade_nde);
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CLfdf_flag:
- {
- CLfdf = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- /* call 1D File Reader with file name (CLfdf) and conversion
- factors; function returns array of dfs (dfArray) and
- corresponding CL values (CLArray) and max number of
- terms in arrays (ndf) */
- uiuc_1DdataFileReader(CLfdf,
- CLfdf_dfArray,
- CLfdf_CLArray,
- CLfdf_ndf);
- aeroLiftParts -> storeCommands (*command_line);
-
- // additional variables to streamline flap routine in aerodeflections
- ndf = CLfdf_ndf;
- int temp_counter = 1;
- while (temp_counter <= ndf)
- {
- dfArray[temp_counter] = CLfdf_dfArray[temp_counter];
- TimeArray[temp_counter] = dfTimefdf_TimeArray[temp_counter];
- temp_counter++;
- }
- break;
- }
- case CLfadf_flag:
- {
- CLfadf = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CLfadf) and
- conversion factors; function returns array of
- flap deflections (dfArray) and corresponding
- alpha (aArray) and delta CL (CLArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (ndf) */
- uiuc_2DdataFileReader(CLfadf,
- CLfadf_aArray,
- CLfadf_dfArray,
- CLfadf_CLArray,
- CLfadf_nAlphaArray,
- CLfadf_ndf);
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZo = token_value;
- CZo_clean = CZo;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_a = token_value;
- CZ_a_clean = CZ_a;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_a2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_a2 = token_value;
- CZ_a2_clean = CZ_a2;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_a3_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_a3 = token_value;
- CZ_a3_clean = CZ_a3;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_adot = token_value;
- CZ_adot_clean = CZ_adot;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_q = token_value;
- CZ_q_clean = CZ_q;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_de = token_value;
- CZ_de_clean = CZ_de;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_deb2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_deb2 = token_value;
- CZ_deb2_clean = CZ_deb2;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_df_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_df = token_value;
- CZ_df_clean = CZ_df;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZ_adf_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CZ_adf = token_value;
- CZ_adf_clean = CZ_adf;
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZfa_flag:
- {
- CZfa = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- /* call 1D File Reader with file name (CZfa) and conversion
- factors; function returns array of alphas (aArray) and
- corresponding CZ values (CZArray) and max number of
- terms in arrays (nAlpha) */
- uiuc_1DdataFileReader(CZfa,
- CZfa_aArray,
- CZfa_CZArray,
- CZfa_nAlpha);
- aeroLiftParts -> storeCommands (*command_line);
- break;
- }
- case CZfabetaf_flag:
- {
- int CZfabetaf_index, i;
- string CZfabetaf_file;
- double flap_value;
- CZfabetaf_file = aircraft_directory + linetoken3;
- token4 >> CZfabetaf_index;
- if (CZfabetaf_index < 0 || CZfabetaf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CZfabetaf_index > CZfabetaf_nf)
- CZfabetaf_nf = CZfabetaf_index;
- token5 >> flap_value;
- CZfabetaf_fArray[CZfabetaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CZfabetaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CZfabetaf_file) and
- conversion factors; function returns array of
- beta (betaArray) and corresponding
- alpha (aArray) and CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and beta array (nbeta) */
- uiuc_2DdataFileReader(CZfabetaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CZfabetaf_aArray, CZfabetaf_index);
- d_1_to_2(datafile_yArray, CZfabetaf_betaArray, CZfabetaf_index);
- d_2_to_3(datafile_zArray, CZfabetaf_CZArray, CZfabetaf_index);
- i_1_to_2(datafile_nxArray, CZfabetaf_nAlphaArray, CZfabetaf_index);
- CZfabetaf_nbeta[CZfabetaf_index] = datafile_ny;
- if (CZfabetaf_first==true)
- {
- if (CZfabetaf_nice == 1)
- {
- CZfabetaf_na_nice = datafile_nxArray[1];
- CZfabetaf_nb_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CZfabetaf_bArray_nice);
- for (i=1; i<=CZfabetaf_na_nice; i++)
- CZfabetaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroLiftParts -> storeCommands (*command_line);
- CZfabetaf_first=false;
- }
- break;
- }
- case CZfadef_flag:
- {
- int CZfadef_index, i;
- string CZfadef_file;
- double flap_value;
- CZfadef_file = aircraft_directory + linetoken3;
- token4 >> CZfadef_index;
- if (CZfadef_index < 0 || CZfadef_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CZfadef_index > CZfadef_nf)
- CZfadef_nf = CZfadef_index;
- token5 >> flap_value;
- CZfadef_fArray[CZfadef_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CZfadef_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CZfadef_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CZfadef_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CZfadef_aArray, CZfadef_index);
- d_1_to_2(datafile_yArray, CZfadef_deArray, CZfadef_index);
- d_2_to_3(datafile_zArray, CZfadef_CZArray, CZfadef_index);
- i_1_to_2(datafile_nxArray, CZfadef_nAlphaArray, CZfadef_index);
- CZfadef_nde[CZfadef_index] = datafile_ny;
- if (CZfadef_first==true)
- {
- if (CZfadef_nice == 1)
- {
- CZfadef_na_nice = datafile_nxArray[1];
- CZfadef_nde_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CZfadef_deArray_nice);
- for (i=1; i<=CZfadef_na_nice; i++)
- CZfadef_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroLiftParts -> storeCommands (*command_line);
- CZfadef_first=false;
- }
- break;
- }
- case CZfaqf_flag:
- {
- int CZfaqf_index, i;
- string CZfaqf_file;
- double flap_value;
- CZfaqf_file = aircraft_directory + linetoken3;
- token4 >> CZfaqf_index;
- if (CZfaqf_index < 0 || CZfaqf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CZfaqf_index > CZfaqf_nf)
- CZfaqf_nf = CZfaqf_index;
- token5 >> flap_value;
- CZfaqf_fArray[CZfaqf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CZfaqf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CZfaqf_file) and
- conversion factors; function returns array of
- pitch rate (qArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and pitch rate array (nq) */
- uiuc_2DdataFileReader(CZfaqf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CZfaqf_aArray, CZfaqf_index);
- d_1_to_2(datafile_yArray, CZfaqf_qArray, CZfaqf_index);
- d_2_to_3(datafile_zArray, CZfaqf_CZArray, CZfaqf_index);
- i_1_to_2(datafile_nxArray, CZfaqf_nAlphaArray, CZfaqf_index);
- CZfaqf_nq[CZfaqf_index] = datafile_ny;
- if (CZfaqf_first==true)
- {
- if (CZfaqf_nice == 1)
- {
- CZfaqf_na_nice = datafile_nxArray[1];
- CZfaqf_nq_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CZfaqf_qArray_nice);
- for (i=1; i<=CZfaqf_na_nice; i++)
- CZfaqf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroLiftParts -> storeCommands (*command_line);
- CZfaqf_first=false;
- }
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
-void parse_Cm( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6, const string& linetoken7,
- const string& linetoken8, const string& linetoken9,
- const string& aircraft_directory,
- bool &Cmfabetaf_first, bool &Cmfadef_first,
- bool &Cmfaqf_first, LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2, token_value_convert3;
- double datafile_xArray[100][100], datafile_yArray[100];
- double datafile_zArray[100][100];
- int datafile_nxArray[100], datafile_ny;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
- istrstream token7(linetoken7.c_str());
- istrstream token8(linetoken8.c_str());
- istrstream token9(linetoken9.c_str());
-
- switch(Cm_map[linetoken2])
- {
- case Cmo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cmo = token_value;
- Cmo_clean = Cmo;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_a = token_value;
- Cm_a_clean = Cm_a;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_a2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_a2 = token_value;
- Cm_a2_clean = Cm_a2;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_adot = token_value;
- Cm_adot_clean = Cm_adot;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_q = token_value;
- Cm_q_clean = Cm_q;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_ih_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_ih = token_value;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_de = token_value;
- Cm_de_clean = Cm_de;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_b2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_b2 = token_value;
- Cm_b2_clean = Cm_b2;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_r_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_r = token_value;
- Cm_r_clean = Cm_r;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cm_df_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cm_df = token_value;
- Cm_df_clean = Cm_df;
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cmfa_flag:
- {
- Cmfa = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- /* call 1D File Reader with file name (Cmfa) and conversion
- factors; function returns array of alphas (aArray) and
- corresponding Cm values (CmArray) and max number of
- terms in arrays (nAlpha) */
- uiuc_1DdataFileReader(Cmfa,
- Cmfa_aArray,
- Cmfa_CmArray,
- Cmfa_nAlpha);
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cmfade_flag:
- {
- Cmfade = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cmfade) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta Cm (CmArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (nde) */
- uiuc_2DdataFileReader(Cmfade,
- Cmfade_aArray,
- Cmfade_deArray,
- Cmfade_CmArray,
- Cmfade_nAlphaArray,
- Cmfade_nde);
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cmfdf_flag:
- {
- Cmfdf = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- /* call 1D File Reader with file name (Cmfdf) and conversion
- factors; function returns array of dfs (dfArray) and
- corresponding Cm values (CmArray) and max number of
- terms in arrays (ndf) */
- uiuc_1DdataFileReader(Cmfdf,
- Cmfdf_dfArray,
- Cmfdf_CmArray,
- Cmfdf_ndf);
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cmfadf_flag:
- {
- Cmfadf = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cmfadf) and
- conversion factors; function returns array of
- flap deflections (dfArray) and corresponding
- alpha (aArray) and delta Cm (CmArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (ndf) */
- uiuc_2DdataFileReader(Cmfadf,
- Cmfadf_aArray,
- Cmfadf_dfArray,
- Cmfadf_CmArray,
- Cmfadf_nAlphaArray,
- Cmfadf_ndf);
- aeroPitchParts -> storeCommands (*command_line);
- break;
- }
- case Cmfabetaf_flag:
- {
- int Cmfabetaf_index, i;
- string Cmfabetaf_file;
- double flap_value;
- Cmfabetaf_file = aircraft_directory + linetoken3;
- token4 >> Cmfabetaf_index;
- if (Cmfabetaf_index < 0 || Cmfabetaf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (Cmfabetaf_index > Cmfabetaf_nf)
- Cmfabetaf_nf = Cmfabetaf_index;
- token5 >> flap_value;
- Cmfabetaf_fArray[Cmfabetaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Cmfabetaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cmfabetaf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Cmfabetaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Cmfabetaf_aArray, Cmfabetaf_index);
- d_1_to_2(datafile_yArray, Cmfabetaf_betaArray, Cmfabetaf_index);
- d_2_to_3(datafile_zArray, Cmfabetaf_CmArray, Cmfabetaf_index);
- i_1_to_2(datafile_nxArray, Cmfabetaf_nAlphaArray, Cmfabetaf_index);
- Cmfabetaf_nbeta[Cmfabetaf_index] = datafile_ny;
- if (Cmfabetaf_first==true)
- {
- if (Cmfabetaf_nice == 1)
- {
- Cmfabetaf_na_nice = datafile_nxArray[1];
- Cmfabetaf_nb_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Cmfabetaf_bArray_nice);
- for (i=1; i<=Cmfabetaf_na_nice; i++)
- Cmfabetaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroPitchParts -> storeCommands (*command_line);
- Cmfabetaf_first=false;
- }
- break;
- }
- case Cmfadef_flag:
- {
- int Cmfadef_index, i;
- string Cmfadef_file;
- double flap_value;
- Cmfadef_file = aircraft_directory + linetoken3;
- token4 >> Cmfadef_index;
- if (Cmfadef_index < 0 || Cmfadef_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (Cmfadef_index > Cmfadef_nf)
- Cmfadef_nf = Cmfadef_index;
- token5 >> flap_value;
- Cmfadef_fArray[Cmfadef_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Cmfadef_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cmfadef_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Cmfadef_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Cmfadef_aArray, Cmfadef_index);
- d_1_to_2(datafile_yArray, Cmfadef_deArray, Cmfadef_index);
- d_2_to_3(datafile_zArray, Cmfadef_CmArray, Cmfadef_index);
- i_1_to_2(datafile_nxArray, Cmfadef_nAlphaArray, Cmfadef_index);
- Cmfadef_nde[Cmfadef_index] = datafile_ny;
- if (Cmfadef_first==true)
- {
- if (Cmfadef_nice == 1)
- {
- Cmfadef_na_nice = datafile_nxArray[1];
- Cmfadef_nde_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Cmfadef_deArray_nice);
- for (i=1; i<=Cmfadef_na_nice; i++)
- Cmfadef_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroPitchParts -> storeCommands (*command_line);
- Cmfadef_first=false;
- }
- break;
- }
- case Cmfaqf_flag:
- {
- int Cmfaqf_index, i;
- string Cmfaqf_file;
- double flap_value;
- Cmfaqf_file = aircraft_directory + linetoken3;
- token4 >> Cmfaqf_index;
- if (Cmfaqf_index < 0 || Cmfaqf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (Cmfaqf_index > Cmfaqf_nf)
- Cmfaqf_nf = Cmfaqf_index;
- token5 >> flap_value;
- Cmfaqf_fArray[Cmfaqf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Cmfaqf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cmfaqf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Cmfaqf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Cmfaqf_aArray, Cmfaqf_index);
- d_1_to_2(datafile_yArray, Cmfaqf_qArray, Cmfaqf_index);
- d_2_to_3(datafile_zArray, Cmfaqf_CmArray, Cmfaqf_index);
- i_1_to_2(datafile_nxArray, Cmfaqf_nAlphaArray, Cmfaqf_index);
- Cmfaqf_nq[Cmfaqf_index] = datafile_ny;
- if (Cmfaqf_first==true)
- {
- if (Cmfaqf_nice == 1)
- {
- Cmfaqf_na_nice = datafile_nxArray[1];
- Cmfaqf_nq_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Cmfaqf_qArray_nice);
- for (i=1; i<=Cmfaqf_na_nice; i++)
- Cmfaqf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroPitchParts -> storeCommands (*command_line);
- Cmfaqf_first=false;
- }
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
-void parse_CY( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6, const string& linetoken7,
- const string& linetoken8, const string& linetoken9,
- const string& aircraft_directory,
- bool &CYfabetaf_first, bool &CYfadaf_first,
- bool &CYfadrf_first, bool &CYfapf_first,
- bool &CYfarf_first, LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2, token_value_convert3;
- double datafile_xArray[100][100], datafile_yArray[100];
- double datafile_zArray[100][100];
- int datafile_nxArray[100], datafile_ny;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
- istrstream token7(linetoken7.c_str());
- istrstream token8(linetoken8.c_str());
- istrstream token9(linetoken9.c_str());
-
- switch(CY_map[linetoken2])
- {
- case CYo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CYo = token_value;
- CYo_clean = CYo;
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CY_beta_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CY_beta = token_value;
- CY_beta_clean = CY_beta;
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CY_p_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CY_p = token_value;
- CY_p_clean = CY_p;
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CY_r_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CY_r = token_value;
- CY_r_clean = CY_r;
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CY_da_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- CY_da = token_value;
- CY_da_clean = CY_da;
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CY_dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(2, *command_line);
-
- CY_dr = token_value;
- CY_dr_clean = CY_dr;
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CY_dra_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(2, *command_line);
-
- CY_dra = token_value;
- CY_dra_clean = CY_dra;
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CY_bdot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(2, *command_line);
-
- CY_bdot = token_value;
- CY_bdot_clean = CY_bdot;
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CYfada_flag:
- {
- CYfada = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CYfada) and
- conversion factors; function returns array of
- aileron deflections (daArray) and corresponding
- alpha (aArray) and delta CY (CYArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (nda) */
- uiuc_2DdataFileReader(CYfada,
- CYfada_aArray,
- CYfada_daArray,
- CYfada_CYArray,
- CYfada_nAlphaArray,
- CYfada_nda);
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CYfbetadr_flag:
- {
- CYfbetadr = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CYfbetadr) and
- conversion factors; function returns array of
- rudder deflections (drArray) and corresponding
- beta (betaArray) and delta CY (CYArray) values and
- max number of terms in beta arrays (nBetaArray)
- and deflection array (ndr) */
- uiuc_2DdataFileReader(CYfbetadr,
- CYfbetadr_betaArray,
- CYfbetadr_drArray,
- CYfbetadr_CYArray,
- CYfbetadr_nBetaArray,
- CYfbetadr_ndr);
- aeroSideforceParts -> storeCommands (*command_line);
- break;
- }
- case CYfabetaf_flag:
- {
- int CYfabetaf_index, i;
- string CYfabetaf_file;
- double flap_value;
- CYfabetaf_file = aircraft_directory + linetoken3;
- token4 >> CYfabetaf_index;
- if (CYfabetaf_index < 0 || CYfabetaf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CYfabetaf_index > CYfabetaf_nf)
- CYfabetaf_nf = CYfabetaf_index;
- token5 >> flap_value;
- CYfabetaf_fArray[CYfabetaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CYfabetaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CYfabetaf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CYfabetaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CYfabetaf_aArray, CYfabetaf_index);
- d_1_to_2(datafile_yArray, CYfabetaf_betaArray, CYfabetaf_index);
- d_2_to_3(datafile_zArray, CYfabetaf_CYArray, CYfabetaf_index);
- i_1_to_2(datafile_nxArray, CYfabetaf_nAlphaArray, CYfabetaf_index);
- CYfabetaf_nbeta[CYfabetaf_index] = datafile_ny;
- if (CYfabetaf_first==true)
- {
- if (CYfabetaf_nice == 1)
- {
- CYfabetaf_na_nice = datafile_nxArray[1];
- CYfabetaf_nb_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CYfabetaf_bArray_nice);
- for (i=1; i<=CYfabetaf_na_nice; i++)
- CYfabetaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroSideforceParts -> storeCommands (*command_line);
- CYfabetaf_first=false;
- }
- break;
- }
- case CYfadaf_flag:
- {
- int CYfadaf_index, i;
- string CYfadaf_file;
- double flap_value;
- CYfadaf_file = aircraft_directory + linetoken3;
- token4 >> CYfadaf_index;
- if (CYfadaf_index < 0 || CYfadaf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CYfadaf_index > CYfadaf_nf)
- CYfadaf_nf = CYfadaf_index;
- token5 >> flap_value;
- CYfadaf_fArray[CYfadaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CYfadaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CYfadaf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CYfadaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CYfadaf_aArray, CYfadaf_index);
- d_1_to_2(datafile_yArray, CYfadaf_daArray, CYfadaf_index);
- d_2_to_3(datafile_zArray, CYfadaf_CYArray, CYfadaf_index);
- i_1_to_2(datafile_nxArray, CYfadaf_nAlphaArray, CYfadaf_index);
- CYfadaf_nda[CYfadaf_index] = datafile_ny;
- if (CYfadaf_first==true)
- {
- if (CYfadaf_nice == 1)
- {
- CYfadaf_na_nice = datafile_nxArray[1];
- CYfadaf_nda_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CYfadaf_daArray_nice);
- for (i=1; i<=CYfadaf_na_nice; i++)
- CYfadaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroSideforceParts -> storeCommands (*command_line);
- CYfadaf_first=false;
- }
- break;
- }
- case CYfadrf_flag:
- {
- int CYfadrf_index, i;
- string CYfadrf_file;
- double flap_value;
- CYfadrf_file = aircraft_directory + linetoken3;
- token4 >> CYfadrf_index;
- if (CYfadrf_index < 0 || CYfadrf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CYfadrf_index > CYfadrf_nf)
- CYfadrf_nf = CYfadrf_index;
- token5 >> flap_value;
- CYfadrf_fArray[CYfadrf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CYfadrf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CYfadrf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CYfadrf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CYfadrf_aArray, CYfadrf_index);
- d_1_to_2(datafile_yArray, CYfadrf_drArray, CYfadrf_index);
- d_2_to_3(datafile_zArray, CYfadrf_CYArray, CYfadrf_index);
- i_1_to_2(datafile_nxArray, CYfadrf_nAlphaArray, CYfadrf_index);
- CYfadrf_ndr[CYfadrf_index] = datafile_ny;
- if (CYfadrf_first==true)
- {
- if (CYfadrf_nice == 1)
- {
- CYfadrf_na_nice = datafile_nxArray[1];
- CYfadrf_ndr_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CYfadrf_drArray_nice);
- for (i=1; i<=CYfadrf_na_nice; i++)
- CYfadrf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroSideforceParts -> storeCommands (*command_line);
- CYfadrf_first=false;
- }
- break;
- }
- case CYfapf_flag:
- {
- int CYfapf_index, i;
- string CYfapf_file;
- double flap_value;
- CYfapf_file = aircraft_directory + linetoken3;
- token4 >> CYfapf_index;
- if (CYfapf_index < 0 || CYfapf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CYfapf_index > CYfapf_nf)
- CYfapf_nf = CYfapf_index;
- token5 >> flap_value;
- CYfapf_fArray[CYfapf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CYfapf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CYfapf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CYfapf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CYfapf_aArray, CYfapf_index);
- d_1_to_2(datafile_yArray, CYfapf_pArray, CYfapf_index);
- d_2_to_3(datafile_zArray, CYfapf_CYArray, CYfapf_index);
- i_1_to_2(datafile_nxArray, CYfapf_nAlphaArray, CYfapf_index);
- CYfapf_np[CYfapf_index] = datafile_ny;
- if (CYfapf_first==true)
- {
- if (CYfapf_nice == 1)
- {
- CYfapf_na_nice = datafile_nxArray[1];
- CYfapf_np_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CYfapf_pArray_nice);
- for (i=1; i<=CYfapf_na_nice; i++)
- CYfapf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroSideforceParts -> storeCommands (*command_line);
- CYfapf_first=false;
- }
- break;
- }
- case CYfarf_flag:
- {
- int CYfarf_index, i;
- string CYfarf_file;
- double flap_value;
- CYfarf_file = aircraft_directory + linetoken3;
- token4 >> CYfarf_index;
- if (CYfarf_index < 0 || CYfarf_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (CYfarf_index > CYfarf_nf)
- CYfarf_nf = CYfarf_index;
- token5 >> flap_value;
- CYfarf_fArray[CYfarf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> CYfarf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (CYfarf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(CYfarf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, CYfarf_aArray, CYfarf_index);
- d_1_to_2(datafile_yArray, CYfarf_rArray, CYfarf_index);
- d_2_to_3(datafile_zArray, CYfarf_CYArray, CYfarf_index);
- i_1_to_2(datafile_nxArray, CYfarf_nAlphaArray, CYfarf_index);
- CYfarf_nr[CYfarf_index] = datafile_ny;
- if (CYfarf_first==true)
- {
- if (CYfarf_nice == 1)
- {
- CYfarf_na_nice = datafile_nxArray[1];
- CYfarf_nr_nice = datafile_ny;
- d_1_to_1(datafile_yArray, CYfarf_rArray_nice);
- for (i=1; i<=CYfarf_na_nice; i++)
- CYfarf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroSideforceParts -> storeCommands (*command_line);
- CYfarf_first=false;
- }
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-void parse_Cl( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6, const string& linetoken7,
- const string& linetoken8, const string& linetoken9,
- const string& aircraft_directory,
- bool &Clfabetaf_first, bool &Clfadaf_first,
- bool &Clfadrf_first, bool &Clfapf_first,
- bool &Clfarf_first, LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2, token_value_convert3;
- double datafile_xArray[100][100], datafile_yArray[100];
- double datafile_zArray[100][100];
- int datafile_nxArray[100], datafile_ny;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
- istrstream token7(linetoken7.c_str());
- istrstream token8(linetoken8.c_str());
- istrstream token9(linetoken9.c_str());
-
- switch(Cl_map[linetoken2])
- {
- case Clo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Clo = token_value;
- Clo_clean = Clo;
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Cl_beta_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cl_beta = token_value;
- Cl_beta_clean = Cl_beta;
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Cl_p_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cl_p = token_value;
- Cl_p_clean = Cl_p;
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Cl_r_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cl_r = token_value;
- Cl_r_clean = Cl_r;
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Cl_da_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cl_da = token_value;
- Cl_da_clean = Cl_da;
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Cl_dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cl_dr = token_value;
- Cl_dr_clean = Cl_dr;
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Cl_daa_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cl_daa = token_value;
- Cl_daa_clean = Cl_daa;
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Clfada_flag:
- {
- Clfada = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Clfada) and
- conversion factors; function returns array of
- aileron deflections (daArray) and corresponding
- alpha (aArray) and delta Cl (ClArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (nda) */
- uiuc_2DdataFileReader(Clfada,
- Clfada_aArray,
- Clfada_daArray,
- Clfada_ClArray,
- Clfada_nAlphaArray,
- Clfada_nda);
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Clfbetadr_flag:
- {
- Clfbetadr = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Clfbetadr) and
- conversion factors; function returns array of
- rudder deflections (drArray) and corresponding
- beta (betaArray) and delta Cl (ClArray) values and
- max number of terms in beta arrays (nBetaArray)
- and deflection array (ndr) */
- uiuc_2DdataFileReader(Clfbetadr,
- Clfbetadr_betaArray,
- Clfbetadr_drArray,
- Clfbetadr_ClArray,
- Clfbetadr_nBetaArray,
- Clfbetadr_ndr);
- aeroRollParts -> storeCommands (*command_line);
- break;
- }
- case Clfabetaf_flag:
- {
- int Clfabetaf_index, i;
- string Clfabetaf_file;
- double flap_value;
- Clfabetaf_file = aircraft_directory + linetoken3;
- token4 >> Clfabetaf_index;
- if (Clfabetaf_index < 0 || Clfabetaf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Clfabetaf_index > Clfabetaf_nf)
- Clfabetaf_nf = Clfabetaf_index;
- token5 >> flap_value;
- Clfabetaf_fArray[Clfabetaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Clfabetaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Clfabetaf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Clfabetaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Clfabetaf_aArray, Clfabetaf_index);
- d_1_to_2(datafile_yArray, Clfabetaf_betaArray, Clfabetaf_index);
- d_2_to_3(datafile_zArray, Clfabetaf_ClArray, Clfabetaf_index);
- i_1_to_2(datafile_nxArray, Clfabetaf_nAlphaArray, Clfabetaf_index);
- Clfabetaf_nbeta[Clfabetaf_index] = datafile_ny;
- if (Clfabetaf_first==true)
- {
- if (Clfabetaf_nice == 1)
- {
- Clfabetaf_na_nice = datafile_nxArray[1];
- Clfabetaf_nb_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Clfabetaf_bArray_nice);
- for (i=1; i<=Clfabetaf_na_nice; i++)
- Clfabetaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroRollParts -> storeCommands (*command_line);
- Clfabetaf_first=false;
- }
- break;
- }
- case Clfadaf_flag:
- {
- int Clfadaf_index, i;
- string Clfadaf_file;
- double flap_value;
- Clfadaf_file = aircraft_directory + linetoken3;
- token4 >> Clfadaf_index;
- if (Clfadaf_index < 0 || Clfadaf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Clfadaf_index > Clfadaf_nf)
- Clfadaf_nf = Clfadaf_index;
- token5 >> flap_value;
- Clfadaf_fArray[Clfadaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Clfadaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Clfadaf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Clfadaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Clfadaf_aArray, Clfadaf_index);
- d_1_to_2(datafile_yArray, Clfadaf_daArray, Clfadaf_index);
- d_2_to_3(datafile_zArray, Clfadaf_ClArray, Clfadaf_index);
- i_1_to_2(datafile_nxArray, Clfadaf_nAlphaArray, Clfadaf_index);
- Clfadaf_nda[Clfadaf_index] = datafile_ny;
- if (Clfadaf_first==true)
- {
- if (Clfadaf_nice == 1)
- {
- Clfadaf_na_nice = datafile_nxArray[1];
- Clfadaf_nda_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Clfadaf_daArray_nice);
- for (i=1; i<=Clfadaf_na_nice; i++)
- Clfadaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroRollParts -> storeCommands (*command_line);
- Clfadaf_first=false;
- }
- break;
- }
- case Clfadrf_flag:
- {
- int Clfadrf_index, i;
- string Clfadrf_file;
- double flap_value;
- Clfadrf_file = aircraft_directory + linetoken3;
- token4 >> Clfadrf_index;
- if (Clfadrf_index < 0 || Clfadrf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Clfadrf_index > Clfadrf_nf)
- Clfadrf_nf = Clfadrf_index;
- token5 >> flap_value;
- Clfadrf_fArray[Clfadrf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Clfadrf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Clfadrf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Clfadrf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Clfadrf_aArray, Clfadrf_index);
- d_1_to_2(datafile_yArray, Clfadrf_drArray, Clfadrf_index);
- d_2_to_3(datafile_zArray, Clfadrf_ClArray, Clfadrf_index);
- i_1_to_2(datafile_nxArray, Clfadrf_nAlphaArray, Clfadrf_index);
- Clfadrf_ndr[Clfadrf_index] = datafile_ny;
- if (Clfadrf_first==true)
- {
- if (Clfadrf_nice == 1)
- {
- Clfadrf_na_nice = datafile_nxArray[1];
- Clfadrf_ndr_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Clfadrf_drArray_nice);
- for (i=1; i<=Clfadrf_na_nice; i++)
- Clfadrf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroRollParts -> storeCommands (*command_line);
- Clfadrf_first=false;
- }
- break;
- }
- case Clfapf_flag:
- {
- int Clfapf_index, i;
- string Clfapf_file;
- double flap_value;
- Clfapf_file = aircraft_directory + linetoken3;
- token4 >> Clfapf_index;
- if (Clfapf_index < 0 || Clfapf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Clfapf_index > Clfapf_nf)
- Clfapf_nf = Clfapf_index;
- token5 >> flap_value;
- Clfapf_fArray[Clfapf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Clfapf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Clfapf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Clfapf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Clfapf_aArray, Clfapf_index);
- d_1_to_2(datafile_yArray, Clfapf_pArray, Clfapf_index);
- d_2_to_3(datafile_zArray, Clfapf_ClArray, Clfapf_index);
- i_1_to_2(datafile_nxArray, Clfapf_nAlphaArray, Clfapf_index);
- Clfapf_np[Clfapf_index] = datafile_ny;
- if (Clfapf_first==true)
- {
- if (Clfapf_nice == 1)
- {
- Clfapf_na_nice = datafile_nxArray[1];
- Clfapf_np_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Clfapf_pArray_nice);
- for (i=1; i<=Clfapf_na_nice; i++)
- Clfapf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroRollParts -> storeCommands (*command_line);
- Clfapf_first=false;
- }
- break;
- }
- case Clfarf_flag:
- {
- int Clfarf_index, i;
- string Clfarf_file;
- double flap_value;
- Clfarf_file = aircraft_directory + linetoken3;
- token4 >> Clfarf_index;
- if (Clfarf_index < 0 || Clfarf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Clfarf_index > Clfarf_nf)
- Clfarf_nf = Clfarf_index;
- token5 >> flap_value;
- Clfarf_fArray[Clfarf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Clfarf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Clfarf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Clfarf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Clfarf_aArray, Clfarf_index);
- d_1_to_2(datafile_yArray, Clfarf_rArray, Clfarf_index);
- d_2_to_3(datafile_zArray, Clfarf_ClArray, Clfarf_index);
- i_1_to_2(datafile_nxArray, Clfarf_nAlphaArray, Clfarf_index);
- Clfarf_nr[Clfarf_index] = datafile_ny;
- if (Clfarf_first==true)
- {
- if (Clfarf_nice == 1)
- {
- Clfarf_na_nice = datafile_nxArray[1];
- Clfarf_nr_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Clfarf_rArray_nice);
- for (i=1; i<=Clfarf_na_nice; i++)
- Clfarf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroRollParts -> storeCommands (*command_line);
- Clfarf_first=false;
- }
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
-void parse_Cn( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6, const string& linetoken7,
- const string& linetoken8, const string& linetoken9,
- const string& aircraft_directory,
- bool &Cnfabetaf_first, bool &Cnfadaf_first,
- bool &Cnfadrf_first, bool &Cnfapf_first,
- bool &Cnfarf_first, LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2, token_value_convert3;
- double datafile_xArray[100][100], datafile_yArray[100];
- double datafile_zArray[100][100];
- int datafile_nxArray[100], datafile_ny;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
- istrstream token7(linetoken7.c_str());
- istrstream token8(linetoken8.c_str());
- istrstream token9(linetoken9.c_str());
-
- switch(Cn_map[linetoken2])
- {
- case Cno_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cno = token_value;
- Cno_clean = Cno;
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cn_beta_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cn_beta = token_value;
- Cn_beta_clean = Cn_beta;
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cn_p_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cn_p = token_value;
- Cn_p_clean = Cn_p;
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cn_r_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cn_r = token_value;
- Cn_r_clean = Cn_r;
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cn_da_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cn_da = token_value;
- Cn_da_clean = Cn_da;
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cn_dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cn_dr = token_value;
- Cn_dr_clean = Cn_dr;
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cn_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cn_q = token_value;
- Cn_q_clean = Cn_q;
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cn_b3_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- Cn_b3 = token_value;
- Cn_b3_clean = Cn_b3;
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cnfada_flag:
- {
- Cnfada = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cnfada) and
- conversion factors; function returns array of
- aileron deflections (daArray) and corresponding
- alpha (aArray) and delta Cn (CnArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and deflection array (nda) */
- uiuc_2DdataFileReader(Cnfada,
- Cnfada_aArray,
- Cnfada_daArray,
- Cnfada_CnArray,
- Cnfada_nAlphaArray,
- Cnfada_nda);
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cnfbetadr_flag:
- {
- Cnfbetadr = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- token6 >> token_value_convert3;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cnfbetadr) and
- conversion factors; function returns array of
- rudder deflections (drArray) and corresponding
- beta (betaArray) and delta Cn (CnArray) values and
- max number of terms in beta arrays (nBetaArray)
- and deflection array (ndr) */
- uiuc_2DdataFileReader(Cnfbetadr,
- Cnfbetadr_betaArray,
- Cnfbetadr_drArray,
- Cnfbetadr_CnArray,
- Cnfbetadr_nBetaArray,
- Cnfbetadr_ndr);
- aeroYawParts -> storeCommands (*command_line);
- break;
- }
- case Cnfabetaf_flag:
- {
- int Cnfabetaf_index, i;
- string Cnfabetaf_file;
- double flap_value;
- Cnfabetaf_file = aircraft_directory + linetoken3;
- token4 >> Cnfabetaf_index;
- if (Cnfabetaf_index < 0 || Cnfabetaf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Cnfabetaf_index > Cnfabetaf_nf)
- Cnfabetaf_nf = Cnfabetaf_index;
- token5 >> flap_value;
- Cnfabetaf_fArray[Cnfabetaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Cnfabetaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cnfabetaf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Cnfabetaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Cnfabetaf_aArray, Cnfabetaf_index);
- d_1_to_2(datafile_yArray, Cnfabetaf_betaArray, Cnfabetaf_index);
- d_2_to_3(datafile_zArray, Cnfabetaf_CnArray, Cnfabetaf_index);
- i_1_to_2(datafile_nxArray, Cnfabetaf_nAlphaArray, Cnfabetaf_index);
- Cnfabetaf_nbeta[Cnfabetaf_index] = datafile_ny;
- if (Cnfabetaf_first==true)
- {
- if (Cnfabetaf_nice == 1)
- {
- Cnfabetaf_na_nice = datafile_nxArray[1];
- Cnfabetaf_nb_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Cnfabetaf_bArray_nice);
- for (i=1; i<=Cnfabetaf_na_nice; i++)
- Cnfabetaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroYawParts -> storeCommands (*command_line);
- Cnfabetaf_first=false;
- }
- break;
- }
- case Cnfadaf_flag:
- {
- int Cnfadaf_index, i;
- string Cnfadaf_file;
- double flap_value;
- Cnfadaf_file = aircraft_directory + linetoken3;
- token4 >> Cnfadaf_index;
- if (Cnfadaf_index < 0 || Cnfadaf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Cnfadaf_index > Cnfadaf_nf)
- Cnfadaf_nf = Cnfadaf_index;
- token5 >> flap_value;
- Cnfadaf_fArray[Cnfadaf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Cnfadaf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cnfadaf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Cnfadaf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Cnfadaf_aArray, Cnfadaf_index);
- d_1_to_2(datafile_yArray, Cnfadaf_daArray, Cnfadaf_index);
- d_2_to_3(datafile_zArray, Cnfadaf_CnArray, Cnfadaf_index);
- i_1_to_2(datafile_nxArray, Cnfadaf_nAlphaArray, Cnfadaf_index);
- Cnfadaf_nda[Cnfadaf_index] = datafile_ny;
- if (Cnfadaf_first==true)
- {
- if (Cnfadaf_nice == 1)
- {
- Cnfadaf_na_nice = datafile_nxArray[1];
- Cnfadaf_nda_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Cnfadaf_daArray_nice);
- for (i=1; i<=Cnfadaf_na_nice; i++)
- Cnfadaf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroYawParts -> storeCommands (*command_line);
- Cnfadaf_first=false;
- }
- break;
- }
- case Cnfadrf_flag:
- {
- int Cnfadrf_index, i;
- string Cnfadrf_file;
- double flap_value;
- Cnfadrf_file = aircraft_directory + linetoken3;
- token4 >> Cnfadrf_index;
- if (Cnfadrf_index < 0 || Cnfadrf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Cnfadrf_index > Cnfadrf_nf)
- Cnfadrf_nf = Cnfadrf_index;
- token5 >> flap_value;
- Cnfadrf_fArray[Cnfadrf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Cnfadrf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cnfadrf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Cnfadrf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Cnfadrf_aArray, Cnfadrf_index);
- d_1_to_2(datafile_yArray, Cnfadrf_drArray, Cnfadrf_index);
- d_2_to_3(datafile_zArray, Cnfadrf_CnArray, Cnfadrf_index);
- i_1_to_2(datafile_nxArray, Cnfadrf_nAlphaArray, Cnfadrf_index);
- Cnfadrf_ndr[Cnfadrf_index] = datafile_ny;
- if (Cnfadrf_first==true)
- {
- if (Cnfadrf_nice == 1)
- {
- Cnfadrf_na_nice = datafile_nxArray[1];
- Cnfadrf_ndr_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Cnfadrf_drArray_nice);
- for (i=1; i<=Cnfadrf_na_nice; i++)
- Cnfadrf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroYawParts -> storeCommands (*command_line);
- Cnfadrf_first=false;
- }
- break;
- }
- case Cnfapf_flag:
- {
- int Cnfapf_index, i;
- string Cnfapf_file;
- double flap_value;
- Cnfapf_file = aircraft_directory + linetoken3;
- token4 >> Cnfapf_index;
- if (Cnfapf_index < 0 || Cnfapf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Cnfapf_index > Cnfapf_nf)
- Cnfapf_nf = Cnfapf_index;
- token5 >> flap_value;
- Cnfapf_fArray[Cnfapf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Cnfapf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cnfapf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Cnfapf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Cnfapf_aArray, Cnfapf_index);
- d_1_to_2(datafile_yArray, Cnfapf_pArray, Cnfapf_index);
- d_2_to_3(datafile_zArray, Cnfapf_CnArray, Cnfapf_index);
- i_1_to_2(datafile_nxArray, Cnfapf_nAlphaArray, Cnfapf_index);
- Cnfapf_np[Cnfapf_index] = datafile_ny;
- if (Cnfapf_first==true)
- {
- if (Cnfapf_nice == 1)
- {
- Cnfapf_na_nice = datafile_nxArray[1];
- Cnfapf_np_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Cnfapf_pArray_nice);
- for (i=1; i<=Cnfapf_na_nice; i++)
- Cnfapf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroYawParts -> storeCommands (*command_line);
- Cnfapf_first=false;
- }
- break;
- }
- case Cnfarf_flag:
- {
- int Cnfarf_index, i;
- string Cnfarf_file;
- double flap_value;
- Cnfarf_file = aircraft_directory + linetoken3;
- token4 >> Cnfarf_index;
- if (Cnfarf_index < 0 || Cnfarf_index >= 100)
- uiuc_warnings_errors(1, *command_line);
- if (Cnfarf_index > Cnfarf_nf)
- Cnfarf_nf = Cnfarf_index;
- token5 >> flap_value;
- Cnfarf_fArray[Cnfarf_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> Cnfarf_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (Cnfarf_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(Cnfarf_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, Cnfarf_aArray, Cnfarf_index);
- d_1_to_2(datafile_yArray, Cnfarf_rArray, Cnfarf_index);
- d_2_to_3(datafile_zArray, Cnfarf_CnArray, Cnfarf_index);
- i_1_to_2(datafile_nxArray, Cnfarf_nAlphaArray, Cnfarf_index);
- Cnfarf_nr[Cnfarf_index] = datafile_ny;
- if (Cnfarf_first==true)
- {
- if (Cnfarf_nice == 1)
- {
- Cnfarf_na_nice = datafile_nxArray[1];
- Cnfarf_nr_nice = datafile_ny;
- d_1_to_1(datafile_yArray, Cnfarf_rArray_nice);
- for (i=1; i<=Cnfarf_na_nice; i++)
- Cnfarf_aArray_nice[i] = datafile_xArray[1][i];
- }
- aeroYawParts -> storeCommands (*command_line);
- Cnfarf_first=false;
- }
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-void parse_gear( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const int& index,
- LIST command_line ) {
- double token_value;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
-
- switch(gear_map[linetoken2])
- {
- case Dx_gear_flag:
- {
- if (check_float(linetoken3))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- D_gear_v[index][0] = token_value;
- gear_model[index] = true;
- break;
- }
- case Dy_gear_flag:
- {
- if (check_float(linetoken3))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- D_gear_v[index][1] = token_value;
- gear_model[index] = true;
- break;
- }
- case Dz_gear_flag:
- {
- if (check_float(linetoken3))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- D_gear_v[index][2] = token_value;
- gear_model[index] = true;
- break;
- }
- case cgear_flag:
- {
- if (check_float(linetoken3))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- cgear[index] = token_value;
- gear_model[index] = true;
- break;
- }
- case kgear_flag:
- {
- if (check_float(linetoken3))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- kgear[index] = token_value;
- gear_model[index] = true;
- break;
- }
- case muGear_flag:
- {
- if (check_float(linetoken3))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- muGear[index] = token_value;
- gear_model[index] = true;
- break;
- }
- case strutLength_flag:
- {
- if (check_float(linetoken3))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- strutLength[index] = token_value;
- gear_model[index] = true;
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
-void parse_ice( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, const string& linetoken5,
- const string& linetoken6, const string& linetoken7,
- const string& linetoken8, const string& linetoken9,
- const string& aircraft_directory,
- bool &tactilefadef_first, LIST command_line ) {
- double token_value;
- int token_value_convert1, token_value_convert2, token_value_convert3;
- double datafile_xArray[100][100], datafile_yArray[100];
- double datafile_zArray[100][100];
- int datafile_nxArray[100], datafile_ny;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
- istrstream token7(linetoken7.c_str());
- istrstream token8(linetoken8.c_str());
- istrstream token9(linetoken9.c_str());
-
- switch(ice_map[linetoken2])
- {
- case iceTime_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
-
- else
- uiuc_warnings_errors(1, *command_line);
-
- ice_model = true;
- iceTime = token_value;
- break;
- }
- case transientTime_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- transientTime = token_value;
- break;
- }
- case eta_ice_final_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- eta_ice_final = token_value;
- break;
- }
- case beta_probe_wing_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- beta_model = true;
- x_probe_wing = token_value;
- break;
- }
- case beta_probe_tail_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- beta_model = true;
- x_probe_tail = token_value;
- break;
- }
- case kCDo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCDo = token_value;
- break;
- }
- case kCDK_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCDK = token_value;
- break;
- }
- case kCD_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCD_a = token_value;
- break;
- }
- case kCD_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCD_adot = token_value;
- break;
- }
- case kCD_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCD_q = token_value;
- break;
- }
- case kCD_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCD_de = token_value;
- break;
- }
- case kCXo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCXo = token_value;
- break;
- }
- case kCXK_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCXK = token_value;
- break;
- }
- case kCX_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_a = token_value;
- break;
- }
- case kCX_a2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_a2 = token_value;
- break;
- }
- case kCX_a3_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_a3 = token_value;
- break;
- }
- case kCX_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_adot = token_value;
- break;
- }
- case kCX_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_q = token_value;
- break;
- }
- case kCX_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_de = token_value;
- break;
- }
- case kCX_dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_dr = token_value;
- break;
- }
- case kCX_df_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_df = token_value;
- break;
- }
- case kCX_adf_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCX_adf = token_value;
- break;
- }
- case kCLo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCLo = token_value;
- break;
- }
- case kCL_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCL_a = token_value;
- break;
- }
- case kCL_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCL_adot = token_value;
- break;
- }
- case kCL_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCL_q = token_value;
- break;
- }
- case kCL_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCL_de = token_value;
- break;
- }
- case kCZo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZo = token_value;
- break;
- }
- case kCZ_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_a = token_value;
- break;
- }
- case kCZ_a2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_a2 = token_value;
- break;
- }
- case kCZ_a3_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_a3 = token_value;
- break;
- }
- case kCZ_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_adot = token_value;
- break;
- }
- case kCZ_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_q = token_value;
- break;
- }
- case kCZ_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_de = token_value;
- break;
- }
- case kCZ_deb2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_deb2 = token_value;
- break;
- }
- case kCZ_df_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_df = token_value;
- break;
- }
- case kCZ_adf_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCZ_adf = token_value;
- break;
- }
- case kCmo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCmo = token_value;
- break;
- }
- case kCm_a_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCm_a = token_value;
- break;
- }
- case kCm_a2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCm_a2 = token_value;
- break;
- }
- case kCm_adot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCm_adot = token_value;
- break;
- }
- case kCm_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCm_q = token_value;
- break;
- }
- case kCm_de_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCm_de = token_value;
- break;
- }
- case kCm_b2_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCm_b2 = token_value;
- break;
- }
- case kCm_r_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCm_r = token_value;
- break;
- }
- case kCm_df_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCm_df = token_value;
- break;
- }
- case kCYo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCYo = token_value;
- break;
- }
- case kCY_beta_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCY_beta = token_value;
- break;
- }
- case kCY_p_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCY_p = token_value;
- break;
- }
- case kCY_r_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCY_r = token_value;
- break;
- }
- case kCY_da_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCY_da = token_value;
- break;
- }
- case kCY_dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCY_dr = token_value;
- break;
- }
- case kCY_dra_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCY_dra = token_value;
- break;
- }
- case kCY_bdot_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCY_bdot = token_value;
- break;
- }
- case kClo_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kClo = token_value;
- break;
- }
- case kCl_beta_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCl_beta = token_value;
- break;
- }
- case kCl_p_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCl_p = token_value;
- break;
- }
- case kCl_r_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCl_r = token_value;
- break;
- }
- case kCl_da_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCl_da = token_value;
- break;
- }
- case kCl_dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCl_dr = token_value;
- break;
- }
- case kCl_daa_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCl_daa = token_value;
- break;
- }
- case kCno_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCno = token_value;
- break;
- }
- case kCn_beta_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCn_beta = token_value;
- break;
- }
- case kCn_p_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCn_p = token_value;
- break;
- }
- case kCn_r_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCn_r = token_value;
- break;
- }
- case kCn_da_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCn_da = token_value;
- break;
- }
- case kCn_dr_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCn_dr = token_value;
- break;
- }
- case kCn_q_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCn_q = token_value;
- break;
- }
- case kCn_b3_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- kCn_b3 = token_value;
- break;
- }
- case bootTime_flag:
- {
- int index;
- if (check_float(linetoken4))
- token4 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
- token3 >> index;
- if (index < 0 || index >= 20)
- uiuc_warnings_errors(1, *command_line);
- bootTime[index] = token_value;
- bootTrue[index] = true;
- break;
- }
- case eta_wing_left_input_flag:
- {
- eta_from_file = true;
- eta_wing_left_input = true;
- eta_wing_left_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(eta_wing_left_input_file,
- eta_wing_left_input_timeArray,
- eta_wing_left_input_daArray,
- eta_wing_left_input_ntime);
- token6 >> token_value;
- eta_wing_left_input_startTime = token_value;
- break;
- }
- case eta_wing_right_input_flag:
- {
- eta_from_file = true;
- eta_wing_right_input = true;
- eta_wing_right_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(eta_wing_right_input_file,
- eta_wing_right_input_timeArray,
- eta_wing_right_input_daArray,
- eta_wing_right_input_ntime);
- token6 >> token_value;
- eta_wing_right_input_startTime = token_value;
- break;
- }
- case eta_tail_input_flag:
- {
- eta_from_file = true;
- eta_tail_input = true;
- eta_tail_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(eta_tail_input_file,
- eta_tail_input_timeArray,
- eta_tail_input_daArray,
- eta_tail_input_ntime);
- token6 >> token_value;
- eta_tail_input_startTime = token_value;
- break;
- }
- case nonlin_ice_case_flag:
- {
- token3 >> nonlin_ice_case;
- break;
- }
- case eta_tail_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- eta_tail = token_value;
- break;
- }
- case eta_wing_left_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- eta_wing_left = token_value;
- break;
- }
- case eta_wing_right_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- eta_wing_right = token_value;
- break;
- }
- case demo_eps_alpha_max_flag:
- {
- demo_eps_alpha_max = true;
- demo_eps_alpha_max_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_alpha_max_file,
- demo_eps_alpha_max_timeArray,
- demo_eps_alpha_max_daArray,
- demo_eps_alpha_max_ntime);
- token6 >> token_value;
- demo_eps_alpha_max_startTime = token_value;
- break;
- }
- case demo_eps_pitch_max_flag:
- {
- demo_eps_pitch_max = true;
- demo_eps_pitch_max_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_pitch_max_file,
- demo_eps_pitch_max_timeArray,
- demo_eps_pitch_max_daArray,
- demo_eps_pitch_max_ntime);
- token6 >> token_value;
- demo_eps_pitch_max_startTime = token_value;
- break;
- }
- case demo_eps_pitch_min_flag:
- {
- demo_eps_pitch_min = true;
- demo_eps_pitch_min_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_pitch_min_file,
- demo_eps_pitch_min_timeArray,
- demo_eps_pitch_min_daArray,
- demo_eps_pitch_min_ntime);
- token6 >> token_value;
- demo_eps_pitch_min_startTime = token_value;
- break;
- }
- case demo_eps_roll_max_flag:
- {
- demo_eps_roll_max = true;
- demo_eps_roll_max_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_roll_max_file,
- demo_eps_roll_max_timeArray,
- demo_eps_roll_max_daArray,
- demo_eps_roll_max_ntime);
- token6 >> token_value;
- demo_eps_roll_max_startTime = token_value;
- break;
- }
- case demo_eps_thrust_min_flag:
- {
- demo_eps_thrust_min = true;
- demo_eps_thrust_min_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_thrust_min_file,
- demo_eps_thrust_min_timeArray,
- demo_eps_thrust_min_daArray,
- demo_eps_thrust_min_ntime);
- token6 >> token_value;
- demo_eps_thrust_min_startTime = token_value;
- break;
- }
- case demo_eps_airspeed_max_flag:
- {
- demo_eps_airspeed_max = true;
- demo_eps_airspeed_max_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_airspeed_max_file,
- demo_eps_airspeed_max_timeArray,
- demo_eps_airspeed_max_daArray,
- demo_eps_airspeed_max_ntime);
- token6 >> token_value;
- demo_eps_airspeed_max_startTime = token_value;
- break;
- }
- case demo_eps_airspeed_min_flag:
- {
- demo_eps_airspeed_min = true;
- demo_eps_airspeed_min_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_airspeed_min_file,
- demo_eps_airspeed_min_timeArray,
- demo_eps_airspeed_min_daArray,
- demo_eps_airspeed_min_ntime);
- token6 >> token_value;
- demo_eps_airspeed_min_startTime = token_value;
- break;
- }
- case demo_eps_flap_max_flag:
- {
- demo_eps_flap_max = true;
- demo_eps_flap_max_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_flap_max_file,
- demo_eps_flap_max_timeArray,
- demo_eps_flap_max_daArray,
- demo_eps_flap_max_ntime);
- token6 >> token_value;
- demo_eps_flap_max_startTime = token_value;
- break;
- }
- case demo_boot_cycle_tail_flag:
- {
- demo_boot_cycle_tail = true;
- demo_boot_cycle_tail_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_boot_cycle_tail_file,
- demo_boot_cycle_tail_timeArray,
- demo_boot_cycle_tail_daArray,
- demo_boot_cycle_tail_ntime);
- token6 >> token_value;
- demo_boot_cycle_tail_startTime = token_value;
- break;
- }
- case demo_boot_cycle_wing_left_flag:
- {
- demo_boot_cycle_wing_left = true;
- demo_boot_cycle_wing_left_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_boot_cycle_wing_left_file,
- demo_boot_cycle_wing_left_timeArray,
- demo_boot_cycle_wing_left_daArray,
- demo_boot_cycle_wing_left_ntime);
- token6 >> token_value;
- demo_boot_cycle_wing_left_startTime = token_value;
- break;
- }
- case demo_boot_cycle_wing_right_flag:
- {
- demo_boot_cycle_wing_right = true;
- demo_boot_cycle_wing_right_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_boot_cycle_wing_right_file,
- demo_boot_cycle_wing_right_timeArray,
- demo_boot_cycle_wing_right_daArray,
- demo_boot_cycle_wing_right_ntime);
- token6 >> token_value;
- demo_boot_cycle_wing_right_startTime = token_value;
- break;
- }
- case demo_eps_pitch_input_flag:
- {
- demo_eps_pitch_input = true;
- demo_eps_pitch_input_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_eps_pitch_input_file,
- demo_eps_pitch_input_timeArray,
- demo_eps_pitch_input_daArray,
- demo_eps_pitch_input_ntime);
- token6 >> token_value;
- demo_eps_pitch_input_startTime = token_value;
- break;
- }
- case demo_ap_Theta_ref_deg_flag:
- {
- demo_ap_Theta_ref_deg = true;
- demo_ap_Theta_ref_deg_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_ap_Theta_ref_deg_file,
- demo_ap_Theta_ref_deg_timeArray,
- demo_ap_Theta_ref_deg_daArray,
- demo_ap_Theta_ref_deg_ntime);
- token6 >> token_value;
- demo_ap_Theta_ref_deg_startTime = token_value;
- break;
- }
- case demo_ap_pah_on_flag:
- {
- demo_ap_pah_on = true;
- demo_ap_pah_on_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_ap_pah_on_file,
- demo_ap_pah_on_timeArray,
- demo_ap_pah_on_daArray,
- demo_ap_pah_on_ntime);
- token6 >> token_value;
- demo_ap_pah_on_startTime = token_value;
- break;
- }
- case tactilefadef_flag:
- {
- int tactilefadef_index, i;
- string tactilefadef_file;
- double flap_value;
- tactilefadef = true;
- tactilefadef_file = aircraft_directory + linetoken3;
- token4 >> tactilefadef_index;
- if (tactilefadef_index < 0 || tactilefadef_index >= 30)
- uiuc_warnings_errors(1, *command_line);
- if (tactilefadef_index > tactilefadef_nf)
- tactilefadef_nf = tactilefadef_index;
- token5 >> flap_value;
- tactilefadef_fArray[tactilefadef_index] = flap_value;
- token6 >> token_value_convert1;
- token7 >> token_value_convert2;
- token8 >> token_value_convert3;
- token9 >> tactilefadef_nice;
- convert_z = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- convert_y = uiuc_convert(token_value_convert3);
- /* call 2D File Reader with file name (tactilefadef_file) and
- conversion factors; function returns array of
- elevator deflections (deArray) and corresponding
- alpha (aArray) and delta CZ (CZArray) values and
- max number of terms in alpha arrays (nAlphaArray)
- and delfection array (nde) */
- uiuc_2DdataFileReader(tactilefadef_file,
- datafile_xArray,
- datafile_yArray,
- datafile_zArray,
- datafile_nxArray,
- datafile_ny);
- d_2_to_3(datafile_xArray, tactilefadef_aArray, tactilefadef_index);
- d_1_to_2(datafile_yArray, tactilefadef_deArray, tactilefadef_index);
- d_2_to_3(datafile_zArray, tactilefadef_tactileArray, tactilefadef_index);
- i_1_to_2(datafile_nxArray, tactilefadef_nAlphaArray, tactilefadef_index);
- tactilefadef_nde[tactilefadef_index] = datafile_ny;
- if (tactilefadef_first==true)
- {
- if (tactilefadef_nice == 1)
- {
- tactilefadef_na_nice = datafile_nxArray[1];
- tactilefadef_nde_nice = datafile_ny;
- d_1_to_1(datafile_yArray, tactilefadef_deArray_nice);
- for (i=1; i<=tactilefadef_na_nice; i++)
- tactilefadef_aArray_nice[i] = datafile_xArray[1][i];
- }
- tactilefadef_first=false;
- }
- break;
- }
- case tactile_pitch_flag:
- {
- tactile_pitch = 1;
- break;
- }
- case demo_tactile_flag:
- {
- demo_tactile = true;
- demo_tactile_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_tactile_file,
- demo_tactile_timeArray,
- demo_tactile_daArray,
- demo_tactile_ntime);
- token6 >> token_value;
- demo_tactile_startTime = token_value;
- break;
- }
- case demo_ice_tail_flag:
- {
- demo_ice_tail = true;
- demo_ice_tail_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_ice_tail_file,
- demo_ice_tail_timeArray,
- demo_ice_tail_daArray,
- demo_ice_tail_ntime);
- token6 >> token_value;
- demo_ice_tail_startTime = token_value;
- break;
- }
- case demo_ice_left_flag:
- {
- demo_ice_left = true;
- demo_ice_left_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_ice_left_file,
- demo_ice_left_timeArray,
- demo_ice_left_daArray,
- demo_ice_left_ntime);
- token6 >> token_value;
- demo_ice_left_startTime = token_value;
- break;
- }
- case demo_ice_right_flag:
- {
- demo_ice_right = true;
- demo_ice_right_file = aircraft_directory + linetoken3;
- token4 >> token_value_convert1;
- token5 >> token_value_convert2;
- convert_y = uiuc_convert(token_value_convert1);
- convert_x = uiuc_convert(token_value_convert2);
- uiuc_1DdataFileReader(demo_ice_right_file,
- demo_ice_right_timeArray,
- demo_ice_right_daArray,
- demo_ice_right_ntime);
- token6 >> token_value;
- demo_ice_right_startTime = token_value;
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
-void parse_fog( const string& linetoken2, const string& linetoken3,
- const string& linetoken4, LIST command_line ) {
- double token_value;
- int token_value_convert1;
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
-
- switch(fog_map[linetoken2])
- {
- case fog_segments_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value_convert1;
- else
- uiuc_warnings_errors(1, *command_line);
-
- if (token_value_convert1 < 1 || token_value_convert1 > 100)
- uiuc_warnings_errors(1, *command_line);
-
- fog_field = true;
- fog_point_index = 0;
- delete[] fog_time;
- delete[] fog_value;
- fog_segments = token_value_convert1;
- fog_time = new double[fog_segments+1];
- fog_time[0] = 0.0;
- fog_value = new int[fog_segments+1];
- fog_value[0] = 0;
-
- break;
- }
- case fog_point_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- if (token_value < 0.1)
- uiuc_warnings_errors(1, *command_line);
-
- if (check_float(linetoken4))
- token4 >> token_value_convert1;
- else
- uiuc_warnings_errors(1, *command_line);
-
- if (token_value_convert1 < -1000 || token_value_convert1 > 1000)
- uiuc_warnings_errors(1, *command_line);
-
- if (fog_point_index == fog_segments || fog_point_index == -1)
- uiuc_warnings_errors(1, *command_line);
-
- fog_point_index++;
- fog_time[fog_point_index] = token_value;
- fog_value[fog_point_index] = token_value_convert1;
-
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
-void parse_record( const string& linetoken2, LIST command_line ) {
-
- switch(record_map[linetoken2])
- {
- /************************* Time ************************/
- case Simtime_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case dt_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /************************* Mass ************************/
- case Weight_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Mass_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case I_xx_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case I_yy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case I_zz_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case I_xz_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /*********************** Geometry **********************/
- case Dx_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dy_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dz_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dx_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dy_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dz_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /********************** Positions **********************/
- case Lat_geocentric_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Lon_geocentric_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Radius_to_vehicle_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Latitude_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Longitude_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Altitude_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Phi_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Theta_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Psi_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /******************** Accelerations ********************/
- case V_dot_north_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_dot_east_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_dot_down_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case U_dot_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_dot_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case W_dot_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case A_X_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case A_Y_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case A_Z_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case A_X_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case A_Y_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case A_Z_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case N_X_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case N_Y_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case N_Z_pilot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case N_X_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case N_Y_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case N_Z_cg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case P_dot_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Q_dot_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case R_dot_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /********************** Velocities *********************/
- case V_north_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_east_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_down_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_north_rel_ground_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_east_rel_ground_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_down_rel_ground_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_north_airmass_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_east_airmass_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_down_airmass_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_north_rel_airmass_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_east_rel_airmass_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_down_rel_airmass_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case U_gust_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_gust_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case W_gust_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case U_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case W_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_rel_wind_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_true_kts_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_rel_ground_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_inertial_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_ground_speed_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_equiv_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_equiv_kts_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_calibrated_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_calibrated_kts_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case P_local_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Q_local_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case R_local_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case P_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Q_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case R_body_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case P_total_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Q_total_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case R_total_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Phi_dot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Theta_dot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Psi_dot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Latitude_dot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Longitude_dot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Radius_dot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /************************ Angles ***********************/
- case Alpha_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Alpha_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Alpha_dot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Alpha_dot_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Beta_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Beta_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Beta_dot_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Beta_dot_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Gamma_vert_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Gamma_vert_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Gamma_horiz_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Gamma_horiz_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /**************** Atmospheric Properties ***************/
- case Density_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_sound_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Mach_number_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Static_pressure_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Total_pressure_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Impact_pressure_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dynamic_pressure_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Static_temperature_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Total_temperature_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /******************** Earth Properties *****************/
- case Gravity_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Sea_level_radius_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Earth_position_angle_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Runway_altitude_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Runway_latitude_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Runway_longitude_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Runway_heading_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Radius_to_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case D_pilot_north_of_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case D_pilot_east_of_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case D_pilot_above_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case X_pilot_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Y_pilot_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case H_pilot_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case D_cg_north_of_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case D_cg_east_of_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case D_cg_above_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case X_cg_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Y_cg_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case H_cg_rwy_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /********************* Engine Inputs *******************/
- case Throttle_pct_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Throttle_3_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /******************** Control Inputs *******************/
- case Long_control_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Long_trim_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Long_trim_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case elevator_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case elevator_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Lat_control_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case aileron_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case aileron_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Rudder_pedal_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case rudder_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case rudder_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Flap_handle_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flap_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flap_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flap_goal_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flap_pos_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /****************** Aero Coefficients ******************/
- case CD_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CDfaI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CDfadeI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CDfdfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CDfadfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CXfabetafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CXfadefI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CXfaqfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CDo_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CDK_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CD_a_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CD_adot_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CD_q_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CD_ih_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CD_de_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CXo_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CXK_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_a_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_a2_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_a3_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_adot_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_q_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_de_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_dr_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_df_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CX_adf_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CL_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLfaI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLfadeI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLfdfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLfadfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZfaI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZfabetafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZfadefI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZfaqfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLo_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CL_a_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CL_adot_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CL_q_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CL_ih_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CL_de_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZo_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_a_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_a2_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_a3_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_adot_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_q_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_de_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_deb2_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_df_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CZ_adf_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CmfaI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CmfadeI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CmfdfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CmfadfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CmfabetafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CmfadefI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CmfaqfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cmo_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_a_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_a2_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_adot_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_q_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_ih_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_de_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_b2_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_r_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_df_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CY_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CYfadaI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CYfbetadrI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CYfabetafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CYfadafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CYfadrfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CYfapfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CYfarfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CYo_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CY_beta_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CY_p_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CY_r_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CY_da_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CY_dr_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CY_dra_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CY_bdot_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case ClfadaI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case ClfbetadrI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case ClfabetafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case ClfadafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case ClfadrfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case ClfapfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case ClfarfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Clo_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_beta_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_p_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_r_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_da_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_dr_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_daa_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cn_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CnfadaI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CnfbetadrI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CnfabetafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CnfadafI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CnfadrfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CnfapfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CnfarfI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cno_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cn_beta_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cn_p_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cn_r_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cn_da_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cn_dr_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cn_q_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cn_b3_save_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /******************** Ice Detection ********************/
- case CL_clean_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CL_iced_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CD_clean_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CD_iced_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_clean_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cm_iced_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Ch_clean_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Ch_iced_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_clean_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Cl_iced_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLclean_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLiced_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLclean_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case CLiced_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Lift_clean_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Lift_iced_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Lift_clean_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Lift_iced_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Gamma_clean_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Gamma_iced_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Gamma_clean_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Gamma_iced_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case w_clean_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case w_iced_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case w_clean_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case w_iced_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_total_clean_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_total_iced_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_total_clean_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case V_total_iced_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case beta_flow_clean_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case beta_flow_clean_wing_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case beta_flow_iced_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case beta_flow_iced_wing_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case beta_flow_clean_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case beta_flow_clean_tail_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case beta_flow_iced_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case beta_flow_iced_tail_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dbeta_flow_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dbeta_flow_wing_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dbeta_flow_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case Dbeta_flow_tail_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case pct_beta_flow_wing_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case pct_beta_flow_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eta_ice_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eta_wing_left_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eta_wing_right_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eta_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case delta_CL_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case delta_CD_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case delta_Cm_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case delta_Cl_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case boot_cycle_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case boot_cycle_wing_left_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case boot_cycle_wing_right_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case autoIPS_tail_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case autoIPS_wing_left_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case autoIPS_wing_right_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_pitch_input_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_alpha_max_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_pitch_max_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_pitch_min_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_roll_max_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_thrust_min_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_flap_max_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_airspeed_max_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case eps_airspeed_min_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /*********************Auto Pilot************************/
- case ap_Theta_ref_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case ap_pah_on_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /************************ Forces ***********************/
- case F_X_wind_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Y_wind_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Z_wind_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_X_aero_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Y_aero_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Z_aero_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_X_engine_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Y_engine_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Z_engine_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_X_gear_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Y_gear_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Z_gear_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_X_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Y_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_Z_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_north_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_east_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case F_down_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
-
- /*********************** Moments ***********************/
- case M_l_aero_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_m_aero_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_n_aero_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_l_engine_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_m_engine_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_n_engine_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_l_gear_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_m_gear_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_n_gear_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_l_rp_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_m_rp_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case M_n_rp_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- /****************** Flapper Data ***********************/
- case flapper_freq_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flapper_phi_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flapper_phi_deg_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flapper_Lift_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flapper_Thrust_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flapper_Inertia_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case flapper_Moment_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- /****************** Flapper Data ***********************/
- case debug1_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case debug2_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case debug3_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- case tactilefadefI_record:
- {
- recordParts -> storeCommands (*command_line);
- break;
- }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
-void parse_misc( const string& linetoken2, const string& linetoken3,
- const string& aircraft_directory, LIST command_line ) {
- double token_value;
- istrstream token3(linetoken3.c_str());
-
- switch(misc_map[linetoken2])
- {
- case simpleHingeMomentCoef_flag:
- {
- if (check_float(linetoken3))
- token3 >> token_value;
- else
- uiuc_warnings_errors(1, *command_line);
-
- simpleHingeMomentCoef = token_value;
- break;
- }
- case dfTimefdf_flag:
- {
- dfTimefdf = linetoken3;
- /* call 1D File Reader with file name (dfTimefdf);
- function returns array of dfs (dfArray) and
- corresponding time values (TimeArray) and max
- number of terms in arrays (ndf) */
- uiuc_1DdataFileReader(dfTimefdf,
- dfTimefdf_dfArray,
- dfTimefdf_TimeArray,
- dfTimefdf_ndf);
- break;
- }
- //case flapper_flag:
- // {
- //string flap_file;
- //
- //flap_file = aircraft_directory + "flap.dat";
- //flapper_model = true;
- //flapper_data = new FlapData(flap_file.c_str());
- //break;
- // }
- //case flapper_phi_init_flag:
- // {
- //if (check_float(linetoken3))
- // token3 >> token_value;
- //else
- // uiuc_warnings_errors(1, *command_line);
- //
- //flapper_phi_init = token_value*DEG_TO_RAD;
- //break;
- // }
- default:
- {
- if (dont_ignore)
- uiuc_warnings_errors(2, *command_line);
- break;
- }
- };
-}
-
-
void uiuc_menu( string aircraft_name )
{
string aircraft_directory;
string linetoken7;
string linetoken8;
string linetoken9;
+ string linetoken10;
- double datafile_xArray[100][100], datafile_yArray[100];
- double datafile_zArray[100][100];
- int datafile_nxArray[100], datafile_ny;
-
- bool CXfabetaf_first = true;
- bool CXfadef_first = true;
- bool CXfaqf_first = true;
- bool CZfabetaf_first = true;
- bool CZfadef_first = true;
- bool CZfaqf_first = true;
- bool Cmfabetaf_first = true;
- bool Cmfadef_first = true;
- bool Cmfaqf_first = true;
- bool CYfabetaf_first = true;
- bool CYfadaf_first = true;
- bool CYfadrf_first = true;
- bool CYfapf_first = true;
- bool CYfarf_first = true;
- bool Clfabetaf_first = true;
- bool Clfadaf_first = true;
- bool Clfadrf_first = true;
- bool Clfapf_first = true;
- bool Clfarf_first = true;
- bool Cnfabetaf_first = true;
- bool Cnfadaf_first = true;
- bool Cnfadrf_first = true;
- bool Cnfapf_first = true;
- bool Cnfarf_first = true;
-
- bool tactilefadef_first = true;
-
/* the following default setting should eventually be moved to a default or uiuc_init routine */
recordRate = 1; /* record every time step, default */
dyn_on_speed_zero = 0.5 * dyn_on_speed; /* only used if use_dyn_on_speed_curve1 is used */
bootindex = 0; // the index for the bootTime
- dont_ignore = true;
-
/* Read the file and get the list of commands */
airplane = new ParseFile(aircraft_name); /* struct that includes all lines of the input file */
command_list = airplane -> getCommands();
linetoken1 = airplane -> getToken (*command_line, 1);
linetoken2 = airplane -> getToken (*command_line, 2);
+ if (linetoken2=="")
+ linetoken2="0";
linetoken3 = airplane -> getToken (*command_line, 3);
+ if (linetoken3=="")
+ linetoken3="0";
linetoken4 = airplane -> getToken (*command_line, 4);
+ if (linetoken4=="")
+ linetoken4="0";
linetoken5 = airplane -> getToken (*command_line, 5);
+ if (linetoken5=="")
+ linetoken5="0";
linetoken6 = airplane -> getToken (*command_line, 6);
+ if (linetoken6=="")
+ linetoken6="0";
linetoken7 = airplane -> getToken (*command_line, 7);
+ if (linetoken7=="")
+ linetoken7="0";
linetoken8 = airplane -> getToken (*command_line, 8);
+ if (linetoken8=="")
+ linetoken8="0";
linetoken9 = airplane -> getToken (*command_line, 9);
-
- istrstream token3(linetoken3.c_str());
- istrstream token4(linetoken4.c_str());
- istrstream token5(linetoken5.c_str());
- istrstream token6(linetoken6.c_str());
- istrstream token7(linetoken7.c_str());
- istrstream token8(linetoken8.c_str());
- istrstream token9(linetoken9.c_str());
+ if (linetoken9=="")
+ linetoken9="0";
+ linetoken10 = airplane -> getToken (*command_line, 10);
+ if (linetoken10=="")
+ linetoken10="0";
+
+ //cout << linetoken1 << endl;
+ //cout << linetoken2 << endl;
+ //cout << linetoken3 << endl;
+ //cout << linetoken4 << endl;
+ //cout << linetoken5 << endl;
+ //cout << linetoken6 << endl;
+ //cout << linetoken7 << endl;
+ //cout << linetoken8 << endl;
+ //cout << linetoken9 << endl;
+ //cout << linetoken10 << endl;
+
+ //istrstream token3(linetoken3.c_str());
+ //istrstream token4(linetoken4.c_str());
+ //istrstream token5(linetoken5.c_str());
+ //istrstream token6(linetoken6.c_str());
+ //istrstream token7(linetoken7.c_str());
+ //istrstream token8(linetoken8.c_str());
+ //istrstream token9(linetoken9.c_str());
+ //istrstream token10(linetoken10.c_str());
switch (Keyword_map[linetoken1])
{
case init_flag:
{
- parse_init( linetoken2, linetoken3, linetoken4, command_line );
+ parse_init( linetoken2, linetoken3, linetoken4,
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end init map
case geometry_flag:
{
- parse_geometry( linetoken2, linetoken3, command_line );
+ parse_geometry( linetoken2, linetoken3, linetoken4,
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end geometry map
case controlSurface_flag:
{
parse_controlSurface( linetoken2, linetoken3, linetoken4,
- linetoken5, linetoken6, aircraft_directory,
- command_line );
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end controlSurface map
case mass_flag:
{
- parse_mass( linetoken2, linetoken3, command_line );
+ parse_mass( linetoken2, linetoken3, linetoken4,
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end mass map
case engine_flag:
{
parse_engine( linetoken2, linetoken3, linetoken4,
- linetoken5, linetoken6, aircraft_directory,
- command_line );
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end engine map
{
parse_CD( linetoken2, linetoken3, linetoken4,
linetoken5, linetoken6, linetoken7,
- linetoken8, linetoken9, aircraft_directory,
- CXfabetaf_first, CXfadef_first,
- CXfaqf_first, command_line );
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end CD map
{
parse_CL( linetoken2, linetoken3, linetoken4,
linetoken5, linetoken6, linetoken7,
- linetoken8, linetoken9, aircraft_directory,
- CZfabetaf_first, CZfadef_first,
- CZfaqf_first, command_line );
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end CL map
{
parse_Cm( linetoken2, linetoken3, linetoken4,
linetoken5, linetoken6, linetoken7,
- linetoken8, linetoken9, aircraft_directory,
- Cmfabetaf_first, Cmfadef_first,
- Cmfaqf_first, command_line );
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end Cm map
{
parse_CY( linetoken2, linetoken3, linetoken4,
linetoken5, linetoken6, linetoken7,
- linetoken8, linetoken9, aircraft_directory,
- CYfabetaf_first, CYfadaf_first,
- CYfadrf_first, CYfapf_first, CYfarf_first,
- command_line );
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end CY map
{
parse_Cl( linetoken2, linetoken3, linetoken4,
linetoken5, linetoken6, linetoken7,
- linetoken8, linetoken9, aircraft_directory,
- Clfabetaf_first, Clfadaf_first,
- Clfadrf_first, Clfapf_first, Clfarf_first,
- command_line );
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end Cl map
{
parse_Cn( linetoken2, linetoken3, linetoken4,
linetoken5, linetoken6, linetoken7,
- linetoken8, linetoken9, aircraft_directory,
- Cnfabetaf_first, Cnfadaf_first,
- Cnfadrf_first, Cnfapf_first, Cnfarf_first,
- command_line );
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end Cn map
case gear_flag:
{
- int index;
- token3 >> index;
- if (index < 0 || index >= 16)
- uiuc_warnings_errors(1, *command_line);
parse_gear( linetoken2, linetoken3, linetoken4,
- index, command_line );
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end gear map
{
parse_ice( linetoken2, linetoken3, linetoken4,
linetoken5, linetoken6, linetoken7,
- linetoken8, linetoken9, aircraft_directory,
- tactilefadef_first, command_line );
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end ice map
case fog_flag:
{
parse_fog( linetoken2, linetoken3, linetoken4,
- command_line );
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end fog map
fout_flag=-1;
fout.open("uiuc_record.dat");
}
- parse_record( linetoken2, command_line );
+ parse_record( linetoken2, linetoken3, linetoken4,
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end record map
case misc_flag:
{
- parse_misc( linetoken2, linetoken3, aircraft_directory,
- command_line );
+ parse_misc( linetoken2, linetoken3, linetoken4,
+ linetoken5, linetoken6, linetoken7,
+ linetoken8, linetoken9, linetoken10,
+ aircraft_directory, command_line );
break;
} // end misc map
{
if (linetoken1=="*")
return;
- if (dont_ignore)
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
uiuc_warnings_errors(2, *command_line);
+ }
break;
}
};
#include <FDM/LaRCsim/ls_generic.h>
#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
-//#include "uiuc_flapdata.h"
+#include "uiuc_flapdata.h"
+#include "uiuc_menu_init.h"
+#include "uiuc_menu_geometry.h"
+#include "uiuc_menu_controlSurface.h"
+#include "uiuc_menu_mass.h"
+#include "uiuc_menu_engine.h"
+#include "uiuc_menu_CD.h"
+#include "uiuc_menu_CL.h"
+#include "uiuc_menu_Cm.h"
+#include "uiuc_menu_CY.h"
+#include "uiuc_menu_Croll.h"
+#include "uiuc_menu_Cn.h"
+#include "uiuc_menu_gear.h"
+#include "uiuc_menu_ice.h"
+#include "uiuc_menu_fog.h"
+#include "uiuc_menu_record.h"
+#include "uiuc_menu_misc.h"
-bool check_float(const string &token); // To check whether the token is a float or not
+//bool check_float(const string &token); // To check whether the token is a float or not
void uiuc_menu (string aircraft);
#endif //_MENU_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_CD.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_CD.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_CD( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2, token_value_convert3;
+ int token_value_convert4;
+ double datafile_xArray[100][100], datafile_yArray[100];
+ double datafile_zArray[100][100];
+ double convert_f;
+ int datafile_nxArray[100], datafile_ny;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ static bool CXfabetaf_first = true;
+ static bool CXfadef_first = true;
+ static bool CXfaqf_first = true;
+
+ switch(CD_map[linetoken2])
+ {
+ case CDo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CDo = token_value;
+ CDo_clean = CDo;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDK_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CDK = token_value;
+ CDK_clean = CDK;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLK_flag:
+ {
+ b_CLK = true;
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ CLK = token_value;
+ break;
+ }
+ case CD_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_a = token_value;
+ CD_a_clean = CD_a;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_adot = token_value;
+ CD_adot_clean = CD_adot;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_q = token_value;
+ CD_q_clean = CD_q;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_ih_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_ih = token_value;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_de = token_value;
+ CD_de_clean = CD_de;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_dr = token_value;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_da_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_da = token_value;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_beta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_beta = token_value;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_df_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_df = token_value;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_ds_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_ds = token_value;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_dg_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CD_dg = token_value;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfa_flag:
+ {
+ CDfa = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ /* call 1D File Reader with file name (CDfa) and conversion
+ factors; function returns array of alphas (aArray) and
+ corresponding CD values (CDArray) and max number of
+ terms in arrays (nAlpha) */
+ uiuc_1DdataFileReader(CDfa,
+ CDfa_aArray,
+ CDfa_CDArray,
+ CDfa_nAlpha);
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfCL_flag:
+ {
+ CDfCL = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ /* call 1D File Reader with file name (CDfCL) and conversion
+ factors; function returns array of CLs (CLArray) and
+ corresponding CD values (CDArray) and max number of
+ terms in arrays (nCL) */
+ uiuc_1DdataFileReader(CDfCL,
+ CDfCL_CLArray,
+ CDfCL_CDArray,
+ CDfCL_nCL);
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfade_flag:
+ {
+ CDfade = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (CDfade) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CD (CDArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (nde) */
+ uiuc_2DdataFileReader(CDfade,
+ CDfade_aArray,
+ CDfade_deArray,
+ CDfade_CDArray,
+ CDfade_nAlphaArray,
+ CDfade_nde);
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfdf_flag:
+ {
+ CDfdf = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ /* call 1D File Reader with file name (CDfdf) and conversion
+ factors; function returns array of dfs (dfArray) and
+ corresponding CD values (CDArray) and max number of
+ terms in arrays (ndf) */
+ uiuc_1DdataFileReader(CDfdf,
+ CDfdf_dfArray,
+ CDfdf_CDArray,
+ CDfdf_ndf);
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfadf_flag:
+ {
+ CDfadf = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (CDfadf) and
+ conversion factors; function returns array of
+ flap deflections (dfArray) and corresponding
+ alpha (aArray) and delta CD (CDArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (ndf) */
+ uiuc_2DdataFileReader(CDfadf,
+ CDfadf_aArray,
+ CDfadf_dfArray,
+ CDfadf_CDArray,
+ CDfadf_nAlphaArray,
+ CDfadf_ndf);
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CXo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CXo = token_value;
+ CXo_clean = CXo;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CXK_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CXK = token_value;
+ CXK_clean = CXK;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_a = token_value;
+ CX_a_clean = CX_a;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_a2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_a2 = token_value;
+ CX_a2_clean = CX_a2;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_a3_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_a3 = token_value;
+ CX_a3_clean = CX_a3;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_adot = token_value;
+ CX_adot_clean = CX_adot;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_q = token_value;
+ CX_q_clean = CX_q;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_de = token_value;
+ CX_de_clean = CX_de;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_dr = token_value;
+ CX_dr_clean = CX_dr;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_df_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_df = token_value;
+ CX_df_clean = CX_df;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_adf_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CX_adf = token_value;
+ CX_adf_clean = CX_adf;
+ aeroDragParts -> storeCommands (*command_line);
+ break;
+ }
+ case CXfabetaf_flag:
+ {
+ int CXfabetaf_index, i;
+ string CXfabetaf_file;
+ double flap_value;
+ CXfabetaf_file = aircraft_directory + linetoken3;
+ token4 >> CXfabetaf_index;
+ if (CXfabetaf_index < 1 || CXfabetaf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CXfabetaf_index > CXfabetaf_nf)
+ CXfabetaf_nf = CXfabetaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CXfabetaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CXfabetaf_fArray[CXfabetaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CXfabetaf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CXfabetaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CXfabetaf_aArray, CXfabetaf_index);
+ d_1_to_2(datafile_yArray, CXfabetaf_betaArray, CXfabetaf_index);
+ d_2_to_3(datafile_zArray, CXfabetaf_CXArray, CXfabetaf_index);
+ i_1_to_2(datafile_nxArray, CXfabetaf_nAlphaArray, CXfabetaf_index);
+ CXfabetaf_nbeta[CXfabetaf_index] = datafile_ny;
+ if (CXfabetaf_first==true)
+ {
+ if (CXfabetaf_nice == 1)
+ {
+ CXfabetaf_na_nice = datafile_nxArray[1];
+ CXfabetaf_nb_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CXfabetaf_bArray_nice);
+ for (i=1; i<=CXfabetaf_na_nice; i++)
+ CXfabetaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroDragParts -> storeCommands (*command_line);
+ CXfabetaf_first=false;
+ }
+ break;
+ }
+ case CXfadef_flag:
+ {
+ int CXfadef_index, i;
+ string CXfadef_file;
+ double flap_value;
+ CXfadef_file = aircraft_directory + linetoken3;
+ token4 >> CXfadef_index;
+ if (CXfadef_index < 0 || CXfadef_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CXfadef_index > CXfadef_nf)
+ CXfadef_nf = CXfadef_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CXfadef_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CXfadef_fArray[CXfadef_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CXfadef_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CXfadef_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CXfadef_aArray, CXfadef_index);
+ d_1_to_2(datafile_yArray, CXfadef_deArray, CXfadef_index);
+ d_2_to_3(datafile_zArray, CXfadef_CXArray, CXfadef_index);
+ i_1_to_2(datafile_nxArray, CXfadef_nAlphaArray, CXfadef_index);
+ CXfadef_nde[CXfadef_index] = datafile_ny;
+ if (CXfadef_first==true)
+ {
+ if (CXfadef_nice == 1)
+ {
+ CXfadef_na_nice = datafile_nxArray[1];
+ CXfadef_nde_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CXfadef_deArray_nice);
+ for (i=1; i<=CXfadef_na_nice; i++)
+ CXfadef_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroDragParts -> storeCommands (*command_line);
+ CXfadef_first=false;
+ }
+ break;
+ }
+ case CXfaqf_flag:
+ {
+ int CXfaqf_index, i;
+ string CXfaqf_file;
+ double flap_value;
+ CXfaqf_file = aircraft_directory + linetoken3;
+ token4 >> CXfaqf_index;
+ if (CXfaqf_index < 0 || CXfaqf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CXfaqf_index > CXfaqf_nf)
+ CXfaqf_nf = CXfaqf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CXfaqf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CXfaqf_fArray[CXfaqf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CXfaqf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CXfaqf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CXfaqf_aArray, CXfaqf_index);
+ d_1_to_2(datafile_yArray, CXfaqf_qArray, CXfaqf_index);
+ d_2_to_3(datafile_zArray, CXfaqf_CXArray, CXfaqf_index);
+ i_1_to_2(datafile_nxArray, CXfaqf_nAlphaArray, CXfaqf_index);
+ CXfaqf_nq[CXfaqf_index] = datafile_ny;
+ if (CXfaqf_first==true)
+ {
+ if (CXfaqf_nice == 1)
+ {
+ CXfaqf_na_nice = datafile_nxArray[1];
+ CXfaqf_nq_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CXfaqf_qArray_nice);
+ for (i=1; i<=CXfaqf_na_nice; i++)
+ CXfaqf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroDragParts -> storeCommands (*command_line);
+ CXfaqf_first=false;
+ }
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_CD_H_
+#define _MENU_CD_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_CD( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_CD_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_CL.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_CL.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_CL( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2, token_value_convert3;
+ int token_value_convert4;
+ double datafile_xArray[100][100], datafile_yArray[100];
+ double datafile_zArray[100][100];
+ double convert_f;
+ int datafile_nxArray[100], datafile_ny;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ static bool CZfabetaf_first = true;
+ static bool CZfadef_first = true;
+ static bool CZfaqf_first = true;
+
+ switch(CL_map[linetoken2])
+ {
+ case CLo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CLo = token_value;
+ CLo_clean = CLo;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CL_a = token_value;
+ CL_a_clean = CL_a;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CL_adot = token_value;
+ CL_adot_clean = CL_adot;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CL_q = token_value;
+ CL_q_clean = CL_q;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_ih_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CL_ih = token_value;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CL_de = token_value;
+ CL_de_clean = CL_de;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_df_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CL_df = token_value;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_ds_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CL_ds = token_value;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_dg_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CL_dg = token_value;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLfa_flag:
+ {
+ CLfa = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ /* call 1D File Reader with file name (CLfa) and conversion
+ factors; function returns array of alphas (aArray) and
+ corresponding CL values (CLArray) and max number of
+ terms in arrays (nAlpha) */
+ uiuc_1DdataFileReader(CLfa,
+ CLfa_aArray,
+ CLfa_CLArray,
+ CLfa_nAlpha);
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLfade_flag:
+ {
+ CLfade = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (CLfade) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CL (CLArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (nde) */
+ uiuc_2DdataFileReader(CLfade,
+ CLfade_aArray,
+ CLfade_deArray,
+ CLfade_CLArray,
+ CLfade_nAlphaArray,
+ CLfade_nde);
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLfdf_flag:
+ {
+ CLfdf = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ /* call 1D File Reader with file name (CLfdf) and conversion
+ factors; function returns array of dfs (dfArray) and
+ corresponding CL values (CLArray) and max number of
+ terms in arrays (ndf) */
+ uiuc_1DdataFileReader(CLfdf,
+ CLfdf_dfArray,
+ CLfdf_CLArray,
+ CLfdf_ndf);
+ aeroLiftParts -> storeCommands (*command_line);
+
+ // additional variables to streamline flap routine in aerodeflections
+ ndf = CLfdf_ndf;
+ int temp_counter = 1;
+ while (temp_counter <= ndf)
+ {
+ dfArray[temp_counter] = CLfdf_dfArray[temp_counter];
+ TimeArray[temp_counter] = dfTimefdf_TimeArray[temp_counter];
+ temp_counter++;
+ }
+ break;
+ }
+ case CLfadf_flag:
+ {
+ CLfadf = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (CLfadf) and
+ conversion factors; function returns array of
+ flap deflections (dfArray) and corresponding
+ alpha (aArray) and delta CL (CLArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (ndf) */
+ uiuc_2DdataFileReader(CLfadf,
+ CLfadf_aArray,
+ CLfadf_dfArray,
+ CLfadf_CLArray,
+ CLfadf_nAlphaArray,
+ CLfadf_ndf);
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZo = token_value;
+ CZo_clean = CZo;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_a = token_value;
+ CZ_a_clean = CZ_a;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_a2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_a2 = token_value;
+ CZ_a2_clean = CZ_a2;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_a3_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_a3 = token_value;
+ CZ_a3_clean = CZ_a3;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_adot = token_value;
+ CZ_adot_clean = CZ_adot;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_q = token_value;
+ CZ_q_clean = CZ_q;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_de = token_value;
+ CZ_de_clean = CZ_de;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_deb2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_deb2 = token_value;
+ CZ_deb2_clean = CZ_deb2;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_df_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_df = token_value;
+ CZ_df_clean = CZ_df;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_adf_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CZ_adf = token_value;
+ CZ_adf_clean = CZ_adf;
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZfa_flag:
+ {
+ CZfa = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ /* call 1D File Reader with file name (CZfa) and conversion
+ factors; function returns array of alphas (aArray) and
+ corresponding CZ values (CZArray) and max number of
+ terms in arrays (nAlpha) */
+ uiuc_1DdataFileReader(CZfa,
+ CZfa_aArray,
+ CZfa_CZArray,
+ CZfa_nAlpha);
+ aeroLiftParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZfabetaf_flag:
+ {
+ int CZfabetaf_index, i;
+ string CZfabetaf_file;
+ double flap_value;
+ CZfabetaf_file = aircraft_directory + linetoken3;
+ token4 >> CZfabetaf_index;
+ if (CZfabetaf_index < 0 || CZfabetaf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CZfabetaf_index > CZfabetaf_nf)
+ CZfabetaf_nf = CZfabetaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CZfabetaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CZfabetaf_fArray[CZfabetaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CZfabetaf_file) and
+ conversion factors; function returns array of
+ beta (betaArray) and corresponding
+ alpha (aArray) and CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and beta array (nbeta) */
+ uiuc_2DdataFileReader(CZfabetaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CZfabetaf_aArray, CZfabetaf_index);
+ d_1_to_2(datafile_yArray, CZfabetaf_betaArray, CZfabetaf_index);
+ d_2_to_3(datafile_zArray, CZfabetaf_CZArray, CZfabetaf_index);
+ i_1_to_2(datafile_nxArray, CZfabetaf_nAlphaArray, CZfabetaf_index);
+ CZfabetaf_nbeta[CZfabetaf_index] = datafile_ny;
+ if (CZfabetaf_first==true)
+ {
+ if (CZfabetaf_nice == 1)
+ {
+ CZfabetaf_na_nice = datafile_nxArray[1];
+ CZfabetaf_nb_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CZfabetaf_bArray_nice);
+ for (i=1; i<=CZfabetaf_na_nice; i++)
+ CZfabetaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroLiftParts -> storeCommands (*command_line);
+ CZfabetaf_first=false;
+ }
+ break;
+ }
+ case CZfadef_flag:
+ {
+ int CZfadef_index, i;
+ string CZfadef_file;
+ double flap_value;
+ CZfadef_file = aircraft_directory + linetoken3;
+ token4 >> CZfadef_index;
+ if (CZfadef_index < 0 || CZfadef_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CZfadef_index > CZfadef_nf)
+ CZfadef_nf = CZfadef_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CZfadef_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CZfadef_fArray[CZfadef_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CZfadef_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CZfadef_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CZfadef_aArray, CZfadef_index);
+ d_1_to_2(datafile_yArray, CZfadef_deArray, CZfadef_index);
+ d_2_to_3(datafile_zArray, CZfadef_CZArray, CZfadef_index);
+ i_1_to_2(datafile_nxArray, CZfadef_nAlphaArray, CZfadef_index);
+ CZfadef_nde[CZfadef_index] = datafile_ny;
+ if (CZfadef_first==true)
+ {
+ if (CZfadef_nice == 1)
+ {
+ CZfadef_na_nice = datafile_nxArray[1];
+ CZfadef_nde_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CZfadef_deArray_nice);
+ for (i=1; i<=CZfadef_na_nice; i++)
+ CZfadef_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroLiftParts -> storeCommands (*command_line);
+ CZfadef_first=false;
+ }
+ break;
+ }
+ case CZfaqf_flag:
+ {
+ int CZfaqf_index, i;
+ string CZfaqf_file;
+ double flap_value;
+ CZfaqf_file = aircraft_directory + linetoken3;
+ token4 >> CZfaqf_index;
+ if (CZfaqf_index < 0 || CZfaqf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CZfaqf_index > CZfaqf_nf)
+ CZfaqf_nf = CZfaqf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CZfaqf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CZfaqf_fArray[CZfaqf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CZfaqf_file) and
+ conversion factors; function returns array of
+ pitch rate (qArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and pitch rate array (nq) */
+ uiuc_2DdataFileReader(CZfaqf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CZfaqf_aArray, CZfaqf_index);
+ d_1_to_2(datafile_yArray, CZfaqf_qArray, CZfaqf_index);
+ d_2_to_3(datafile_zArray, CZfaqf_CZArray, CZfaqf_index);
+ i_1_to_2(datafile_nxArray, CZfaqf_nAlphaArray, CZfaqf_index);
+ CZfaqf_nq[CZfaqf_index] = datafile_ny;
+ if (CZfaqf_first==true)
+ {
+ if (CZfaqf_nice == 1)
+ {
+ CZfaqf_na_nice = datafile_nxArray[1];
+ CZfaqf_nq_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CZfaqf_qArray_nice);
+ for (i=1; i<=CZfaqf_na_nice; i++)
+ CZfaqf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroLiftParts -> storeCommands (*command_line);
+ CZfaqf_first=false;
+ }
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_CL_H_
+#define _MENU_CL_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_CL( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_CL_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_CY.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_CY.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_CY( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2, token_value_convert3;
+ int token_value_convert4;
+ double datafile_xArray[100][100], datafile_yArray[100];
+ double datafile_zArray[100][100];
+ double convert_f;
+ int datafile_nxArray[100], datafile_ny;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ static bool CYfabetaf_first = true;
+ static bool CYfadaf_first = true;
+ static bool CYfadrf_first = true;
+ static bool CYfapf_first = true;
+ static bool CYfarf_first = true;
+
+ switch(CY_map[linetoken2])
+ {
+ case CYo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CYo = token_value;
+ CYo_clean = CYo;
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_beta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CY_beta = token_value;
+ CY_beta_clean = CY_beta;
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_p_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CY_p = token_value;
+ CY_p_clean = CY_p;
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_r_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CY_r = token_value;
+ CY_r_clean = CY_r;
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_da_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ CY_da = token_value;
+ CY_da_clean = CY_da;
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(2, *command_line);
+
+ CY_dr = token_value;
+ CY_dr_clean = CY_dr;
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_dra_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(2, *command_line);
+
+ CY_dra = token_value;
+ CY_dra_clean = CY_dra;
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_bdot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(2, *command_line);
+
+ CY_bdot = token_value;
+ CY_bdot_clean = CY_bdot;
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfada_flag:
+ {
+ CYfada = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (CYfada) and
+ conversion factors; function returns array of
+ aileron deflections (daArray) and corresponding
+ alpha (aArray) and delta CY (CYArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (nda) */
+ uiuc_2DdataFileReader(CYfada,
+ CYfada_aArray,
+ CYfada_daArray,
+ CYfada_CYArray,
+ CYfada_nAlphaArray,
+ CYfada_nda);
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfbetadr_flag:
+ {
+ CYfbetadr = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (CYfbetadr) and
+ conversion factors; function returns array of
+ rudder deflections (drArray) and corresponding
+ beta (betaArray) and delta CY (CYArray) values and
+ max number of terms in beta arrays (nBetaArray)
+ and deflection array (ndr) */
+ uiuc_2DdataFileReader(CYfbetadr,
+ CYfbetadr_betaArray,
+ CYfbetadr_drArray,
+ CYfbetadr_CYArray,
+ CYfbetadr_nBetaArray,
+ CYfbetadr_ndr);
+ aeroSideforceParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfabetaf_flag:
+ {
+ int CYfabetaf_index, i;
+ string CYfabetaf_file;
+ double flap_value;
+ CYfabetaf_file = aircraft_directory + linetoken3;
+ token4 >> CYfabetaf_index;
+ if (CYfabetaf_index < 0 || CYfabetaf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CYfabetaf_index > CYfabetaf_nf)
+ CYfabetaf_nf = CYfabetaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CYfabetaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CYfabetaf_fArray[CYfabetaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CYfabetaf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CYfabetaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CYfabetaf_aArray, CYfabetaf_index);
+ d_1_to_2(datafile_yArray, CYfabetaf_betaArray, CYfabetaf_index);
+ d_2_to_3(datafile_zArray, CYfabetaf_CYArray, CYfabetaf_index);
+ i_1_to_2(datafile_nxArray, CYfabetaf_nAlphaArray, CYfabetaf_index);
+ CYfabetaf_nbeta[CYfabetaf_index] = datafile_ny;
+ if (CYfabetaf_first==true)
+ {
+ if (CYfabetaf_nice == 1)
+ {
+ CYfabetaf_na_nice = datafile_nxArray[1];
+ CYfabetaf_nb_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CYfabetaf_bArray_nice);
+ for (i=1; i<=CYfabetaf_na_nice; i++)
+ CYfabetaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroSideforceParts -> storeCommands (*command_line);
+ CYfabetaf_first=false;
+ }
+ break;
+ }
+ case CYfadaf_flag:
+ {
+ int CYfadaf_index, i;
+ string CYfadaf_file;
+ double flap_value;
+ CYfadaf_file = aircraft_directory + linetoken3;
+ token4 >> CYfadaf_index;
+ if (CYfadaf_index < 0 || CYfadaf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CYfadaf_index > CYfadaf_nf)
+ CYfadaf_nf = CYfadaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CYfadaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CYfadaf_fArray[CYfadaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CYfadaf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CYfadaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CYfadaf_aArray, CYfadaf_index);
+ d_1_to_2(datafile_yArray, CYfadaf_daArray, CYfadaf_index);
+ d_2_to_3(datafile_zArray, CYfadaf_CYArray, CYfadaf_index);
+ i_1_to_2(datafile_nxArray, CYfadaf_nAlphaArray, CYfadaf_index);
+ CYfadaf_nda[CYfadaf_index] = datafile_ny;
+ if (CYfadaf_first==true)
+ {
+ if (CYfadaf_nice == 1)
+ {
+ CYfadaf_na_nice = datafile_nxArray[1];
+ CYfadaf_nda_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CYfadaf_daArray_nice);
+ for (i=1; i<=CYfadaf_na_nice; i++)
+ CYfadaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroSideforceParts -> storeCommands (*command_line);
+ CYfadaf_first=false;
+ }
+ break;
+ }
+ case CYfadrf_flag:
+ {
+ int CYfadrf_index, i;
+ string CYfadrf_file;
+ double flap_value;
+ CYfadrf_file = aircraft_directory + linetoken3;
+ token4 >> CYfadrf_index;
+ if (CYfadrf_index < 0 || CYfadrf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CYfadrf_index > CYfadrf_nf)
+ CYfadrf_nf = CYfadrf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CYfadrf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CYfadrf_fArray[CYfadrf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CYfadrf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CYfadrf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CYfadrf_aArray, CYfadrf_index);
+ d_1_to_2(datafile_yArray, CYfadrf_drArray, CYfadrf_index);
+ d_2_to_3(datafile_zArray, CYfadrf_CYArray, CYfadrf_index);
+ i_1_to_2(datafile_nxArray, CYfadrf_nAlphaArray, CYfadrf_index);
+ CYfadrf_ndr[CYfadrf_index] = datafile_ny;
+ if (CYfadrf_first==true)
+ {
+ if (CYfadrf_nice == 1)
+ {
+ CYfadrf_na_nice = datafile_nxArray[1];
+ CYfadrf_ndr_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CYfadrf_drArray_nice);
+ for (i=1; i<=CYfadrf_na_nice; i++)
+ CYfadrf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroSideforceParts -> storeCommands (*command_line);
+ CYfadrf_first=false;
+ }
+ break;
+ }
+ case CYfapf_flag:
+ {
+ int CYfapf_index, i;
+ string CYfapf_file;
+ double flap_value;
+ CYfapf_file = aircraft_directory + linetoken3;
+ token4 >> CYfapf_index;
+ if (CYfapf_index < 0 || CYfapf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CYfapf_index > CYfapf_nf)
+ CYfapf_nf = CYfapf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CYfapf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CYfapf_fArray[CYfapf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CYfapf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CYfapf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CYfapf_aArray, CYfapf_index);
+ d_1_to_2(datafile_yArray, CYfapf_pArray, CYfapf_index);
+ d_2_to_3(datafile_zArray, CYfapf_CYArray, CYfapf_index);
+ i_1_to_2(datafile_nxArray, CYfapf_nAlphaArray, CYfapf_index);
+ CYfapf_np[CYfapf_index] = datafile_ny;
+ if (CYfapf_first==true)
+ {
+ if (CYfapf_nice == 1)
+ {
+ CYfapf_na_nice = datafile_nxArray[1];
+ CYfapf_np_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CYfapf_pArray_nice);
+ for (i=1; i<=CYfapf_na_nice; i++)
+ CYfapf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroSideforceParts -> storeCommands (*command_line);
+ CYfapf_first=false;
+ }
+ break;
+ }
+ case CYfarf_flag:
+ {
+ int CYfarf_index, i;
+ string CYfarf_file;
+ double flap_value;
+ CYfarf_file = aircraft_directory + linetoken3;
+ token4 >> CYfarf_index;
+ if (CYfarf_index < 0 || CYfarf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (CYfarf_index > CYfarf_nf)
+ CYfarf_nf = CYfarf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> CYfarf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ CYfarf_fArray[CYfarf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (CYfarf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(CYfarf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, CYfarf_aArray, CYfarf_index);
+ d_1_to_2(datafile_yArray, CYfarf_rArray, CYfarf_index);
+ d_2_to_3(datafile_zArray, CYfarf_CYArray, CYfarf_index);
+ i_1_to_2(datafile_nxArray, CYfarf_nAlphaArray, CYfarf_index);
+ CYfarf_nr[CYfarf_index] = datafile_ny;
+ if (CYfarf_first==true)
+ {
+ if (CYfarf_nice == 1)
+ {
+ CYfarf_na_nice = datafile_nxArray[1];
+ CYfarf_nr_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, CYfarf_rArray_nice);
+ for (i=1; i<=CYfarf_na_nice; i++)
+ CYfarf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroSideforceParts -> storeCommands (*command_line);
+ CYfarf_first=false;
+ }
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_CY_H_
+#define _MENU_CY_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_CY( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_CY_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_Cm.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_Cm.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_Cm( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2, token_value_convert3;
+ int token_value_convert4;
+ double datafile_xArray[100][100], datafile_yArray[100];
+ double datafile_zArray[100][100];
+ double convert_f;
+ int datafile_nxArray[100], datafile_ny;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ static bool Cmfabetaf_first = true;
+ static bool Cmfadef_first = true;
+ static bool Cmfaqf_first = true;
+
+ switch(Cm_map[linetoken2])
+ {
+ case Cmo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cmo = token_value;
+ Cmo_clean = Cmo;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_a = token_value;
+ Cm_a_clean = Cm_a;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_a2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_a2 = token_value;
+ Cm_a2_clean = Cm_a2;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_adot = token_value;
+ Cm_adot_clean = Cm_adot;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_q = token_value;
+ Cm_q_clean = Cm_q;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_ih_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_ih = token_value;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_de = token_value;
+ Cm_de_clean = Cm_de;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_b2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_b2 = token_value;
+ Cm_b2_clean = Cm_b2;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_r_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_r = token_value;
+ Cm_r_clean = Cm_r;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_df_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_df = token_value;
+ Cm_df_clean = Cm_df;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_ds_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_ds = token_value;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_dg_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cm_dg = token_value;
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cmfa_flag:
+ {
+ Cmfa = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ /* call 1D File Reader with file name (Cmfa) and conversion
+ factors; function returns array of alphas (aArray) and
+ corresponding Cm values (CmArray) and max number of
+ terms in arrays (nAlpha) */
+ uiuc_1DdataFileReader(Cmfa,
+ Cmfa_aArray,
+ Cmfa_CmArray,
+ Cmfa_nAlpha);
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cmfade_flag:
+ {
+ Cmfade = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (Cmfade) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta Cm (CmArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (nde) */
+ uiuc_2DdataFileReader(Cmfade,
+ Cmfade_aArray,
+ Cmfade_deArray,
+ Cmfade_CmArray,
+ Cmfade_nAlphaArray,
+ Cmfade_nde);
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cmfdf_flag:
+ {
+ Cmfdf = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ /* call 1D File Reader with file name (Cmfdf) and conversion
+ factors; function returns array of dfs (dfArray) and
+ corresponding Cm values (CmArray) and max number of
+ terms in arrays (ndf) */
+ uiuc_1DdataFileReader(Cmfdf,
+ Cmfdf_dfArray,
+ Cmfdf_CmArray,
+ Cmfdf_ndf);
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cmfadf_flag:
+ {
+ Cmfadf = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (Cmfadf) and
+ conversion factors; function returns array of
+ flap deflections (dfArray) and corresponding
+ alpha (aArray) and delta Cm (CmArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (ndf) */
+ uiuc_2DdataFileReader(Cmfadf,
+ Cmfadf_aArray,
+ Cmfadf_dfArray,
+ Cmfadf_CmArray,
+ Cmfadf_nAlphaArray,
+ Cmfadf_ndf);
+ aeroPitchParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cmfabetaf_flag:
+ {
+ int Cmfabetaf_index, i;
+ string Cmfabetaf_file;
+ double flap_value;
+ Cmfabetaf_file = aircraft_directory + linetoken3;
+ token4 >> Cmfabetaf_index;
+ if (Cmfabetaf_index < 0 || Cmfabetaf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (Cmfabetaf_index > Cmfabetaf_nf)
+ Cmfabetaf_nf = Cmfabetaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Cmfabetaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Cmfabetaf_fArray[Cmfabetaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Cmfabetaf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Cmfabetaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Cmfabetaf_aArray, Cmfabetaf_index);
+ d_1_to_2(datafile_yArray, Cmfabetaf_betaArray, Cmfabetaf_index);
+ d_2_to_3(datafile_zArray, Cmfabetaf_CmArray, Cmfabetaf_index);
+ i_1_to_2(datafile_nxArray, Cmfabetaf_nAlphaArray, Cmfabetaf_index);
+ Cmfabetaf_nbeta[Cmfabetaf_index] = datafile_ny;
+ if (Cmfabetaf_first==true)
+ {
+ if (Cmfabetaf_nice == 1)
+ {
+ Cmfabetaf_na_nice = datafile_nxArray[1];
+ Cmfabetaf_nb_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Cmfabetaf_bArray_nice);
+ for (i=1; i<=Cmfabetaf_na_nice; i++)
+ Cmfabetaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroPitchParts -> storeCommands (*command_line);
+ Cmfabetaf_first=false;
+ }
+ break;
+ }
+ case Cmfadef_flag:
+ {
+ int Cmfadef_index, i;
+ string Cmfadef_file;
+ double flap_value;
+ Cmfadef_file = aircraft_directory + linetoken3;
+ token4 >> Cmfadef_index;
+ if (Cmfadef_index < 0 || Cmfadef_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (Cmfadef_index > Cmfadef_nf)
+ Cmfadef_nf = Cmfadef_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Cmfadef_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Cmfadef_fArray[Cmfadef_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Cmfadef_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Cmfadef_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Cmfadef_aArray, Cmfadef_index);
+ d_1_to_2(datafile_yArray, Cmfadef_deArray, Cmfadef_index);
+ d_2_to_3(datafile_zArray, Cmfadef_CmArray, Cmfadef_index);
+ i_1_to_2(datafile_nxArray, Cmfadef_nAlphaArray, Cmfadef_index);
+ Cmfadef_nde[Cmfadef_index] = datafile_ny;
+ if (Cmfadef_first==true)
+ {
+ if (Cmfadef_nice == 1)
+ {
+ Cmfadef_na_nice = datafile_nxArray[1];
+ Cmfadef_nde_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Cmfadef_deArray_nice);
+ for (i=1; i<=Cmfadef_na_nice; i++)
+ Cmfadef_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroPitchParts -> storeCommands (*command_line);
+ Cmfadef_first=false;
+ }
+ break;
+ }
+ case Cmfaqf_flag:
+ {
+ int Cmfaqf_index, i;
+ string Cmfaqf_file;
+ double flap_value;
+ Cmfaqf_file = aircraft_directory + linetoken3;
+ token4 >> Cmfaqf_index;
+ if (Cmfaqf_index < 0 || Cmfaqf_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (Cmfaqf_index > Cmfaqf_nf)
+ Cmfaqf_nf = Cmfaqf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Cmfaqf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Cmfaqf_fArray[Cmfaqf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Cmfaqf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Cmfaqf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Cmfaqf_aArray, Cmfaqf_index);
+ d_1_to_2(datafile_yArray, Cmfaqf_qArray, Cmfaqf_index);
+ d_2_to_3(datafile_zArray, Cmfaqf_CmArray, Cmfaqf_index);
+ i_1_to_2(datafile_nxArray, Cmfaqf_nAlphaArray, Cmfaqf_index);
+ Cmfaqf_nq[Cmfaqf_index] = datafile_ny;
+ if (Cmfaqf_first==true)
+ {
+ if (Cmfaqf_nice == 1)
+ {
+ Cmfaqf_na_nice = datafile_nxArray[1];
+ Cmfaqf_nq_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Cmfaqf_qArray_nice);
+ for (i=1; i<=Cmfaqf_na_nice; i++)
+ Cmfaqf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroPitchParts -> storeCommands (*command_line);
+ Cmfaqf_first=false;
+ }
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_CM_H_
+#define _MENU_CM_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_Cm( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_CM_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_Cn.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_Cn.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_Cn( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2, token_value_convert3;
+ int token_value_convert4;
+ double datafile_xArray[100][100], datafile_yArray[100];
+ double datafile_zArray[100][100];
+ double convert_f;
+ int datafile_nxArray[100], datafile_ny;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ static bool Cnfabetaf_first = true;
+ static bool Cnfadaf_first = true;
+ static bool Cnfadrf_first = true;
+ static bool Cnfapf_first = true;
+ static bool Cnfarf_first = true;
+
+ switch(Cn_map[linetoken2])
+ {
+ case Cno_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cno = token_value;
+ Cno_clean = Cno;
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_beta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cn_beta = token_value;
+ Cn_beta_clean = Cn_beta;
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_p_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cn_p = token_value;
+ Cn_p_clean = Cn_p;
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_r_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cn_r = token_value;
+ Cn_r_clean = Cn_r;
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_da_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cn_da = token_value;
+ Cn_da_clean = Cn_da;
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cn_dr = token_value;
+ Cn_dr_clean = Cn_dr;
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cn_q = token_value;
+ Cn_q_clean = Cn_q;
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_b3_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cn_b3 = token_value;
+ Cn_b3_clean = Cn_b3;
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cnfada_flag:
+ {
+ Cnfada = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (Cnfada) and
+ conversion factors; function returns array of
+ aileron deflections (daArray) and corresponding
+ alpha (aArray) and delta Cn (CnArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (nda) */
+ uiuc_2DdataFileReader(Cnfada,
+ Cnfada_aArray,
+ Cnfada_daArray,
+ Cnfada_CnArray,
+ Cnfada_nAlphaArray,
+ Cnfada_nda);
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cnfbetadr_flag:
+ {
+ Cnfbetadr = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (Cnfbetadr) and
+ conversion factors; function returns array of
+ rudder deflections (drArray) and corresponding
+ beta (betaArray) and delta Cn (CnArray) values and
+ max number of terms in beta arrays (nBetaArray)
+ and deflection array (ndr) */
+ uiuc_2DdataFileReader(Cnfbetadr,
+ Cnfbetadr_betaArray,
+ Cnfbetadr_drArray,
+ Cnfbetadr_CnArray,
+ Cnfbetadr_nBetaArray,
+ Cnfbetadr_ndr);
+ aeroYawParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cnfabetaf_flag:
+ {
+ int Cnfabetaf_index, i;
+ string Cnfabetaf_file;
+ double flap_value;
+ Cnfabetaf_file = aircraft_directory + linetoken3;
+ token4 >> Cnfabetaf_index;
+ if (Cnfabetaf_index < 0 || Cnfabetaf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Cnfabetaf_index > Cnfabetaf_nf)
+ Cnfabetaf_nf = Cnfabetaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Cnfabetaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Cnfabetaf_fArray[Cnfabetaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Cnfabetaf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Cnfabetaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Cnfabetaf_aArray, Cnfabetaf_index);
+ d_1_to_2(datafile_yArray, Cnfabetaf_betaArray, Cnfabetaf_index);
+ d_2_to_3(datafile_zArray, Cnfabetaf_CnArray, Cnfabetaf_index);
+ i_1_to_2(datafile_nxArray, Cnfabetaf_nAlphaArray, Cnfabetaf_index);
+ Cnfabetaf_nbeta[Cnfabetaf_index] = datafile_ny;
+ if (Cnfabetaf_first==true)
+ {
+ if (Cnfabetaf_nice == 1)
+ {
+ Cnfabetaf_na_nice = datafile_nxArray[1];
+ Cnfabetaf_nb_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Cnfabetaf_bArray_nice);
+ for (i=1; i<=Cnfabetaf_na_nice; i++)
+ Cnfabetaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroYawParts -> storeCommands (*command_line);
+ Cnfabetaf_first=false;
+ }
+ break;
+ }
+ case Cnfadaf_flag:
+ {
+ int Cnfadaf_index, i;
+ string Cnfadaf_file;
+ double flap_value;
+ Cnfadaf_file = aircraft_directory + linetoken3;
+ token4 >> Cnfadaf_index;
+ if (Cnfadaf_index < 0 || Cnfadaf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Cnfadaf_index > Cnfadaf_nf)
+ Cnfadaf_nf = Cnfadaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Cnfadaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Cnfadaf_fArray[Cnfadaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Cnfadaf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Cnfadaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Cnfadaf_aArray, Cnfadaf_index);
+ d_1_to_2(datafile_yArray, Cnfadaf_daArray, Cnfadaf_index);
+ d_2_to_3(datafile_zArray, Cnfadaf_CnArray, Cnfadaf_index);
+ i_1_to_2(datafile_nxArray, Cnfadaf_nAlphaArray, Cnfadaf_index);
+ Cnfadaf_nda[Cnfadaf_index] = datafile_ny;
+ if (Cnfadaf_first==true)
+ {
+ if (Cnfadaf_nice == 1)
+ {
+ Cnfadaf_na_nice = datafile_nxArray[1];
+ Cnfadaf_nda_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Cnfadaf_daArray_nice);
+ for (i=1; i<=Cnfadaf_na_nice; i++)
+ Cnfadaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroYawParts -> storeCommands (*command_line);
+ Cnfadaf_first=false;
+ }
+ break;
+ }
+ case Cnfadrf_flag:
+ {
+ int Cnfadrf_index, i;
+ string Cnfadrf_file;
+ double flap_value;
+ Cnfadrf_file = aircraft_directory + linetoken3;
+ token4 >> Cnfadrf_index;
+ if (Cnfadrf_index < 0 || Cnfadrf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Cnfadrf_index > Cnfadrf_nf)
+ Cnfadrf_nf = Cnfadrf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Cnfadrf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Cnfadrf_fArray[Cnfadrf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Cnfadrf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Cnfadrf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Cnfadrf_aArray, Cnfadrf_index);
+ d_1_to_2(datafile_yArray, Cnfadrf_drArray, Cnfadrf_index);
+ d_2_to_3(datafile_zArray, Cnfadrf_CnArray, Cnfadrf_index);
+ i_1_to_2(datafile_nxArray, Cnfadrf_nAlphaArray, Cnfadrf_index);
+ Cnfadrf_ndr[Cnfadrf_index] = datafile_ny;
+ if (Cnfadrf_first==true)
+ {
+ if (Cnfadrf_nice == 1)
+ {
+ Cnfadrf_na_nice = datafile_nxArray[1];
+ Cnfadrf_ndr_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Cnfadrf_drArray_nice);
+ for (i=1; i<=Cnfadrf_na_nice; i++)
+ Cnfadrf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroYawParts -> storeCommands (*command_line);
+ Cnfadrf_first=false;
+ }
+ break;
+ }
+ case Cnfapf_flag:
+ {
+ int Cnfapf_index, i;
+ string Cnfapf_file;
+ double flap_value;
+ Cnfapf_file = aircraft_directory + linetoken3;
+ token4 >> Cnfapf_index;
+ if (Cnfapf_index < 0 || Cnfapf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Cnfapf_index > Cnfapf_nf)
+ Cnfapf_nf = Cnfapf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Cnfapf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Cnfapf_fArray[Cnfapf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Cnfapf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Cnfapf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Cnfapf_aArray, Cnfapf_index);
+ d_1_to_2(datafile_yArray, Cnfapf_pArray, Cnfapf_index);
+ d_2_to_3(datafile_zArray, Cnfapf_CnArray, Cnfapf_index);
+ i_1_to_2(datafile_nxArray, Cnfapf_nAlphaArray, Cnfapf_index);
+ Cnfapf_np[Cnfapf_index] = datafile_ny;
+ if (Cnfapf_first==true)
+ {
+ if (Cnfapf_nice == 1)
+ {
+ Cnfapf_na_nice = datafile_nxArray[1];
+ Cnfapf_np_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Cnfapf_pArray_nice);
+ for (i=1; i<=Cnfapf_na_nice; i++)
+ Cnfapf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroYawParts -> storeCommands (*command_line);
+ Cnfapf_first=false;
+ }
+ break;
+ }
+ case Cnfarf_flag:
+ {
+ int Cnfarf_index, i;
+ string Cnfarf_file;
+ double flap_value;
+ Cnfarf_file = aircraft_directory + linetoken3;
+ token4 >> Cnfarf_index;
+ if (Cnfarf_index < 0 || Cnfarf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Cnfarf_index > Cnfarf_nf)
+ Cnfarf_nf = Cnfarf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Cnfarf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Cnfarf_fArray[Cnfarf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Cnfarf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Cnfarf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Cnfarf_aArray, Cnfarf_index);
+ d_1_to_2(datafile_yArray, Cnfarf_rArray, Cnfarf_index);
+ d_2_to_3(datafile_zArray, Cnfarf_CnArray, Cnfarf_index);
+ i_1_to_2(datafile_nxArray, Cnfarf_nAlphaArray, Cnfarf_index);
+ Cnfarf_nr[Cnfarf_index] = datafile_ny;
+ if (Cnfarf_first==true)
+ {
+ if (Cnfarf_nice == 1)
+ {
+ Cnfarf_na_nice = datafile_nxArray[1];
+ Cnfarf_nr_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Cnfarf_rArray_nice);
+ for (i=1; i<=Cnfarf_na_nice; i++)
+ Cnfarf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroYawParts -> storeCommands (*command_line);
+ Cnfarf_first=false;
+ }
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_CN_H_
+#define _MENU_CN_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_Cn( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_CN_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_Croll.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_Croll.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_Cl( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2, token_value_convert3;
+ int token_value_convert4;
+ double datafile_xArray[100][100], datafile_yArray[100];
+ double datafile_zArray[100][100];
+ double convert_f;
+ int datafile_nxArray[100], datafile_ny;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ static bool Clfabetaf_first = true;
+ static bool Clfadaf_first = true;
+ static bool Clfadrf_first = true;
+ static bool Clfapf_first = true;
+ static bool Clfarf_first = true;
+
+ switch(Cl_map[linetoken2])
+ {
+ case Clo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Clo = token_value;
+ Clo_clean = Clo;
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_beta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cl_beta = token_value;
+ Cl_beta_clean = Cl_beta;
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_p_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cl_p = token_value;
+ Cl_p_clean = Cl_p;
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_r_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cl_r = token_value;
+ Cl_r_clean = Cl_r;
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_da_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cl_da = token_value;
+ Cl_da_clean = Cl_da;
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cl_dr = token_value;
+ Cl_dr_clean = Cl_dr;
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_daa_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Cl_daa = token_value;
+ Cl_daa_clean = Cl_daa;
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Clfada_flag:
+ {
+ Clfada = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (Clfada) and
+ conversion factors; function returns array of
+ aileron deflections (daArray) and corresponding
+ alpha (aArray) and delta Cl (ClArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and deflection array (nda) */
+ uiuc_2DdataFileReader(Clfada,
+ Clfada_aArray,
+ Clfada_daArray,
+ Clfada_ClArray,
+ Clfada_nAlphaArray,
+ Clfada_nda);
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Clfbetadr_flag:
+ {
+ Clfbetadr = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ token6 >> token_value_convert3;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (Clfbetadr) and
+ conversion factors; function returns array of
+ rudder deflections (drArray) and corresponding
+ beta (betaArray) and delta Cl (ClArray) values and
+ max number of terms in beta arrays (nBetaArray)
+ and deflection array (ndr) */
+ uiuc_2DdataFileReader(Clfbetadr,
+ Clfbetadr_betaArray,
+ Clfbetadr_drArray,
+ Clfbetadr_ClArray,
+ Clfbetadr_nBetaArray,
+ Clfbetadr_ndr);
+ aeroRollParts -> storeCommands (*command_line);
+ break;
+ }
+ case Clfabetaf_flag:
+ {
+ int Clfabetaf_index, i;
+ string Clfabetaf_file;
+ double flap_value;
+ Clfabetaf_file = aircraft_directory + linetoken3;
+ token4 >> Clfabetaf_index;
+ if (Clfabetaf_index < 0 || Clfabetaf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Clfabetaf_index > Clfabetaf_nf)
+ Clfabetaf_nf = Clfabetaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Clfabetaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Clfabetaf_fArray[Clfabetaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Clfabetaf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Clfabetaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Clfabetaf_aArray, Clfabetaf_index);
+ d_1_to_2(datafile_yArray, Clfabetaf_betaArray, Clfabetaf_index);
+ d_2_to_3(datafile_zArray, Clfabetaf_ClArray, Clfabetaf_index);
+ i_1_to_2(datafile_nxArray, Clfabetaf_nAlphaArray, Clfabetaf_index);
+ Clfabetaf_nbeta[Clfabetaf_index] = datafile_ny;
+ if (Clfabetaf_first==true)
+ {
+ if (Clfabetaf_nice == 1)
+ {
+ Clfabetaf_na_nice = datafile_nxArray[1];
+ Clfabetaf_nb_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Clfabetaf_bArray_nice);
+ for (i=1; i<=Clfabetaf_na_nice; i++)
+ Clfabetaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroRollParts -> storeCommands (*command_line);
+ Clfabetaf_first=false;
+ }
+ break;
+ }
+ case Clfadaf_flag:
+ {
+ int Clfadaf_index, i;
+ string Clfadaf_file;
+ double flap_value;
+ Clfadaf_file = aircraft_directory + linetoken3;
+ token4 >> Clfadaf_index;
+ if (Clfadaf_index < 0 || Clfadaf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Clfadaf_index > Clfadaf_nf)
+ Clfadaf_nf = Clfadaf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Clfadaf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Clfadaf_fArray[Clfadaf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Clfadaf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Clfadaf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Clfadaf_aArray, Clfadaf_index);
+ d_1_to_2(datafile_yArray, Clfadaf_daArray, Clfadaf_index);
+ d_2_to_3(datafile_zArray, Clfadaf_ClArray, Clfadaf_index);
+ i_1_to_2(datafile_nxArray, Clfadaf_nAlphaArray, Clfadaf_index);
+ Clfadaf_nda[Clfadaf_index] = datafile_ny;
+ if (Clfadaf_first==true)
+ {
+ if (Clfadaf_nice == 1)
+ {
+ Clfadaf_na_nice = datafile_nxArray[1];
+ Clfadaf_nda_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Clfadaf_daArray_nice);
+ for (i=1; i<=Clfadaf_na_nice; i++)
+ Clfadaf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroRollParts -> storeCommands (*command_line);
+ Clfadaf_first=false;
+ }
+ break;
+ }
+ case Clfadrf_flag:
+ {
+ int Clfadrf_index, i;
+ string Clfadrf_file;
+ double flap_value;
+ Clfadrf_file = aircraft_directory + linetoken3;
+ token4 >> Clfadrf_index;
+ if (Clfadrf_index < 0 || Clfadrf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Clfadrf_index > Clfadrf_nf)
+ Clfadrf_nf = Clfadrf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Clfadrf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Clfadrf_fArray[Clfadrf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Clfadrf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Clfadrf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Clfadrf_aArray, Clfadrf_index);
+ d_1_to_2(datafile_yArray, Clfadrf_drArray, Clfadrf_index);
+ d_2_to_3(datafile_zArray, Clfadrf_ClArray, Clfadrf_index);
+ i_1_to_2(datafile_nxArray, Clfadrf_nAlphaArray, Clfadrf_index);
+ Clfadrf_ndr[Clfadrf_index] = datafile_ny;
+ if (Clfadrf_first==true)
+ {
+ if (Clfadrf_nice == 1)
+ {
+ Clfadrf_na_nice = datafile_nxArray[1];
+ Clfadrf_ndr_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Clfadrf_drArray_nice);
+ for (i=1; i<=Clfadrf_na_nice; i++)
+ Clfadrf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroRollParts -> storeCommands (*command_line);
+ Clfadrf_first=false;
+ }
+ break;
+ }
+ case Clfapf_flag:
+ {
+ int Clfapf_index, i;
+ string Clfapf_file;
+ double flap_value;
+ Clfapf_file = aircraft_directory + linetoken3;
+ token4 >> Clfapf_index;
+ if (Clfapf_index < 0 || Clfapf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Clfapf_index > Clfapf_nf)
+ Clfapf_nf = Clfapf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Clfapf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Clfapf_fArray[Clfapf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Clfapf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Clfapf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Clfapf_aArray, Clfapf_index);
+ d_1_to_2(datafile_yArray, Clfapf_pArray, Clfapf_index);
+ d_2_to_3(datafile_zArray, Clfapf_ClArray, Clfapf_index);
+ i_1_to_2(datafile_nxArray, Clfapf_nAlphaArray, Clfapf_index);
+ Clfapf_np[Clfapf_index] = datafile_ny;
+ if (Clfapf_first==true)
+ {
+ if (Clfapf_nice == 1)
+ {
+ Clfapf_na_nice = datafile_nxArray[1];
+ Clfapf_np_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Clfapf_pArray_nice);
+ for (i=1; i<=Clfapf_na_nice; i++)
+ Clfapf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroRollParts -> storeCommands (*command_line);
+ Clfapf_first=false;
+ }
+ break;
+ }
+ case Clfarf_flag:
+ {
+ int Clfarf_index, i;
+ string Clfarf_file;
+ double flap_value;
+ Clfarf_file = aircraft_directory + linetoken3;
+ token4 >> Clfarf_index;
+ if (Clfarf_index < 0 || Clfarf_index >= 100)
+ uiuc_warnings_errors(1, *command_line);
+ if (Clfarf_index > Clfarf_nf)
+ Clfarf_nf = Clfarf_index;
+ token5 >> flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> token_value_convert4;
+ token10 >> Clfarf_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ convert_f = uiuc_convert(token_value_convert4);
+ Clfarf_fArray[Clfarf_index] = flap_value * convert_f;
+ /* call 2D File Reader with file name (Clfarf_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(Clfarf_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, Clfarf_aArray, Clfarf_index);
+ d_1_to_2(datafile_yArray, Clfarf_rArray, Clfarf_index);
+ d_2_to_3(datafile_zArray, Clfarf_ClArray, Clfarf_index);
+ i_1_to_2(datafile_nxArray, Clfarf_nAlphaArray, Clfarf_index);
+ Clfarf_nr[Clfarf_index] = datafile_ny;
+ if (Clfarf_first==true)
+ {
+ if (Clfarf_nice == 1)
+ {
+ Clfarf_na_nice = datafile_nxArray[1];
+ Clfarf_nr_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, Clfarf_rArray_nice);
+ for (i=1; i<=Clfarf_na_nice; i++)
+ Clfarf_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ aeroRollParts -> storeCommands (*command_line);
+ Clfarf_first=false;
+ }
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_CROLL_H_
+#define _MENU_CROLL_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_Cl( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_CROLL_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_controlSurface.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_controlSurface.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_controlSurface( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10,
+ const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ switch(controlSurface_map[linetoken2])
+ {
+ case de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ demax = token_value;
+
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ demin = token_value;
+ break;
+ }
+ case da_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ damax = token_value;
+
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ damin = token_value;
+ break;
+ }
+ case dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ drmax = token_value;
+
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ drmin = token_value;
+ break;
+ }
+ case set_Long_trim_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ set_Long_trim = true;
+ elevator_tab = token_value;
+ break;
+ }
+ case set_Long_trim_deg_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ set_Long_trim = true;
+ elevator_tab = token_value * DEG_TO_RAD;
+ break;
+ }
+ case zero_Long_trim_flag:
+ {
+ zero_Long_trim = true;
+ break;
+ }
+ case elevator_step_flag:
+ {
+ // set step input flag
+ elevator_step = true;
+
+ // read in step angle in degrees and convert
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ elevator_step_angle = token_value * DEG_TO_RAD;
+
+ // read in step start time
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ elevator_step_startTime = token_value;
+ break;
+ }
+ case elevator_singlet_flag:
+ {
+ // set singlet input flag
+ elevator_singlet = true;
+
+ // read in singlet angle in degrees and convert
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ elevator_singlet_angle = token_value * DEG_TO_RAD;
+
+ // read in singlet start time
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ elevator_singlet_startTime = token_value;
+
+ // read in singlet duration
+ if (check_float(linetoken5))
+ token5 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ elevator_singlet_duration = token_value;
+ break;
+ }
+ case elevator_doublet_flag:
+ {
+ // set doublet input flag
+ elevator_doublet = true;
+
+ // read in doublet angle in degrees and convert
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ elevator_doublet_angle = token_value * DEG_TO_RAD;
+
+ // read in doublet start time
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ elevator_doublet_startTime = token_value;
+
+ // read in doublet duration
+ if (check_float(linetoken5))
+ token5 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ elevator_doublet_duration = token_value;
+ break;
+ }
+ case elevator_input_flag:
+ {
+ elevator_input = true;
+ elevator_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(elevator_input_file,
+ elevator_input_timeArray,
+ elevator_input_deArray,
+ elevator_input_ntime);
+ token6 >> token_value;
+ elevator_input_startTime = token_value;
+ break;
+ }
+ case aileron_input_flag:
+ {
+ aileron_input = true;
+ aileron_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(aileron_input_file,
+ aileron_input_timeArray,
+ aileron_input_daArray,
+ aileron_input_ntime);
+ token6 >> token_value;
+ aileron_input_startTime = token_value;
+ break;
+ }
+ case rudder_input_flag:
+ {
+ rudder_input = true;
+ rudder_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(rudder_input_file,
+ rudder_input_timeArray,
+ rudder_input_drArray,
+ rudder_input_ntime);
+ token6 >> token_value;
+ rudder_input_startTime = token_value;
+ break;
+ }
+ case flap_pos_input_flag:
+ {
+ flap_pos_input = true;
+ flap_pos_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(flap_pos_input_file,
+ flap_pos_input_timeArray,
+ flap_pos_input_dfArray,
+ flap_pos_input_ntime);
+ token6 >> token_value;
+ flap_pos_input_startTime = token_value;
+ break;
+ }
+ case pilot_elev_no_flag:
+ {
+ pilot_elev_no_check = true;
+ break;
+ }
+ case pilot_ail_no_flag:
+ {
+ pilot_ail_no_check = true;
+ break;
+ }
+ case pilot_rud_no_flag:
+ {
+ pilot_rud_no_check = true;
+ break;
+ }
+ case flap_max_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ use_flaps = true;
+ flap_max = token_value;
+ break;
+ }
+ case flap_rate_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ use_flaps = true;
+ flap_rate = token_value;
+ break;
+ }
+ case spoiler_max_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ use_spoilers = true;
+ spoiler_max = token_value;
+ break;
+ }
+ case spoiler_rate_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ use_spoilers = true;
+ spoiler_rate = token_value;
+ break;
+ }
+ case aileron_sas_KP_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ aileron_sas_KP = token_value;
+ break;
+ }
+ case aileron_sas_max_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ aileron_sas_max = token_value;
+ use_aileron_sas_max = true;
+ break;
+ }
+ case aileron_stick_gain_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ aileron_stick_gain = token_value;
+ use_aileron_stick_gain = true;
+ break;
+ }
+ case elevator_sas_KQ_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ elevator_sas_KQ = token_value;
+ break;
+ }
+ case elevator_sas_max_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ elevator_sas_max = token_value;
+ use_elevator_sas_max = true;
+ break;
+ }
+ case elevator_sas_min_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ elevator_sas_min = token_value;
+ use_elevator_sas_min = true;
+ break;
+ }
+ case elevator_stick_gain_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ elevator_stick_gain = token_value;
+ use_elevator_stick_gain = true;
+ break;
+ }
+ case rudder_sas_KR_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ rudder_sas_KR = token_value;
+ break;
+ }
+ case rudder_sas_max_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ rudder_sas_max = token_value;
+ use_rudder_sas_max = true;
+ break;
+ }
+ case rudder_stick_gain_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ rudder_stick_gain = token_value;
+ use_rudder_stick_gain = true;
+ break;
+ }
+ case use_aileron_sas_type1_flag:
+ {
+ use_aileron_sas_type1 = true;
+ break;
+ }
+ case use_elevator_sas_type1_flag:
+ {
+ use_elevator_sas_type1 = true;
+ break;
+ }
+ case use_rudder_sas_type1_flag:
+ {
+ use_rudder_sas_type1 = true;
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_CONTROLSURFACE_H_
+#define _MENU_CONTROLSURFACE_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_controlSurface( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10,
+ const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_CONTROLSURFACE_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_engine.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_engine.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_engine( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10,const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ switch(engine_map[linetoken2])
+ {
+ case simpleSingle_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ simpleSingleMaxThrust = token_value;
+ engineParts -> storeCommands (*command_line);
+ break;
+ }
+ case simpleSingleModel_flag:
+ {
+ simpleSingleModel = true;
+ /* input the thrust at zero speed */
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ t_v0 = token_value;
+ /* input slope of thrust at speed for which thrust is zero */
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ dtdv_t0 = token_value;
+ /* input speed at which thrust is zero */
+ if (check_float(linetoken5))
+ token5 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ v_t0 = token_value;
+ dtdvvt = -dtdv_t0 * v_t0 / t_v0;
+ engineParts -> storeCommands (*command_line);
+ break;
+ }
+ case c172_flag:
+ {
+ engineParts -> storeCommands (*command_line);
+ break;
+ }
+ case cherokee_flag:
+ {
+ engineParts -> storeCommands (*command_line);
+ break;
+ }
+ case Throttle_pct_input_flag:
+ {
+ Throttle_pct_input = true;
+ Throttle_pct_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(Throttle_pct_input_file,
+ Throttle_pct_input_timeArray,
+ Throttle_pct_input_dTArray,
+ Throttle_pct_input_ntime);
+ token6 >> token_value;
+ Throttle_pct_input_startTime = token_value;
+ break;
+ }
+ case gyroForce_Q_body_flag:
+ {
+ /* include gyroscopic forces due to pitch */
+ gyroForce_Q_body = true;
+ break;
+ }
+ case gyroForce_R_body_flag:
+ {
+ /* include gyroscopic forces due to yaw */
+ gyroForce_R_body = true;
+ break;
+ }
+
+ case slipstream_effects_flag:
+ {
+ // include slipstream effects
+ b_slipstreamEffects = true;
+ if (!simpleSingleModel)
+ uiuc_warnings_errors(3, *command_line);
+ break;
+ }
+ case propDia_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ propDia = token_value;
+ break;
+ }
+ case eta_q_Cm_q_flag:
+ {
+ // include slipstream effects due to Cm_q
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cm_q_fac = token_value;
+ if (eta_q_Cm_q_fac == 0.0) {eta_q_Cm_q_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cm_adot_flag:
+ {
+ // include slipstream effects due to Cm_adot
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cm_adot_fac = token_value;
+ if (eta_q_Cm_adot_fac == 0.0) {eta_q_Cm_adot_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cmfade_flag:
+ {
+ // include slipstream effects due to Cmfade
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cmfade_fac = token_value;
+ if (eta_q_Cmfade_fac == 0.0) {eta_q_Cmfade_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cm_de_flag:
+ {
+ // include slipstream effects due to Cmfade
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cm_de_fac = token_value;
+ if (eta_q_Cm_de_fac == 0.0) {eta_q_Cm_de_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cl_beta_flag:
+ {
+ // include slipstream effects due to Cl_beta
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cl_beta_fac = token_value;
+ if (eta_q_Cl_beta_fac == 0.0) {eta_q_Cl_beta_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cl_p_flag:
+ {
+ // include slipstream effects due to Cl_p
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cl_p_fac = token_value;
+ if (eta_q_Cl_p_fac == 0.0) {eta_q_Cl_p_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cl_r_flag:
+ {
+ // include slipstream effects due to Cl_r
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cl_r_fac = token_value;
+ if (eta_q_Cl_r_fac == 0.0) {eta_q_Cl_r_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cl_dr_flag:
+ {
+ // include slipstream effects due to Cl_dr
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cl_dr_fac = token_value;
+ if (eta_q_Cl_dr_fac == 0.0) {eta_q_Cl_dr_fac = 1.0;}
+ break;
+ }
+ case eta_q_CY_beta_flag:
+ {
+ // include slipstream effects due to CY_beta
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_CY_beta_fac = token_value;
+ if (eta_q_CY_beta_fac == 0.0) {eta_q_CY_beta_fac = 1.0;}
+ break;
+ }
+ case eta_q_CY_p_flag:
+ {
+ // include slipstream effects due to CY_p
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_CY_p_fac = token_value;
+ if (eta_q_CY_p_fac == 0.0) {eta_q_CY_p_fac = 1.0;}
+ break;
+ }
+ case eta_q_CY_r_flag:
+ {
+ // include slipstream effects due to CY_r
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_CY_r_fac = token_value;
+ if (eta_q_CY_r_fac == 0.0) {eta_q_CY_r_fac = 1.0;}
+ break;
+ }
+ case eta_q_CY_dr_flag:
+ {
+ // include slipstream effects due to CY_dr
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_CY_dr_fac = token_value;
+ if (eta_q_CY_dr_fac == 0.0) {eta_q_CY_dr_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cn_beta_flag:
+ {
+ // include slipstream effects due to Cn_beta
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cn_beta_fac = token_value;
+ if (eta_q_Cn_beta_fac == 0.0) {eta_q_Cn_beta_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cn_p_flag:
+ {
+ // include slipstream effects due to Cn_p
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cn_p_fac = token_value;
+ if (eta_q_Cn_p_fac == 0.0) {eta_q_Cn_p_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cn_r_flag:
+ {
+ // include slipstream effects due to Cn_r
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cn_r_fac = token_value;
+ if (eta_q_Cn_r_fac == 0.0) {eta_q_Cn_r_fac = 1.0;}
+ break;
+ }
+ case eta_q_Cn_dr_flag:
+ {
+ // include slipstream effects due to Cn_dr
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ eta_q_Cn_dr_fac = token_value;
+ if (eta_q_Cn_dr_fac == 0.0) {eta_q_Cn_dr_fac = 1.0;}
+ break;
+ }
+
+ case omega_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ minOmega = token_value;
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ maxOmega = token_value;
+ break;
+ }
+ case omegaRPM_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ minOmegaRPM = token_value;
+ minOmega = minOmegaRPM * 2.0 * LS_PI / 60;
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ maxOmegaRPM = token_value;
+ maxOmega = maxOmegaRPM * 2.0 * LS_PI / 60;
+ break;
+ }
+ case polarInertia_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ polarInertia = token_value;
+ break;
+ }
+ case forcemom_flag:
+ {
+ engineParts -> storeCommands (*command_line);
+ break;
+ }
+ case Xp_input_flag:
+ {
+ Xp_input = true;
+ Xp_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(Xp_input_file,
+ Xp_input_timeArray,
+ Xp_input_XpArray,
+ Xp_input_ntime);
+ token6 >> token_value;
+ Xp_input_startTime = token_value;
+ break;
+ }
+ case Zp_input_flag:
+ {
+ Zp_input = true;
+ Zp_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(Zp_input_file,
+ Zp_input_timeArray,
+ Zp_input_ZpArray,
+ Zp_input_ntime);
+ token6 >> token_value;
+ Zp_input_startTime = token_value;
+ break;
+ }
+ case Mp_input_flag:
+ {
+ Mp_input = true;
+ Mp_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(Mp_input_file,
+ Mp_input_timeArray,
+ Mp_input_MpArray,
+ Mp_input_ntime);
+ token6 >> token_value;
+ Mp_input_startTime = token_value;
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_ENGINE_H_
+#define _MENU_ENGINE_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_engine( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10,const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_ENGINE_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_fog.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_fog.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_fog( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ switch(fog_map[linetoken2])
+ {
+ case fog_segments_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value_convert1;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ if (token_value_convert1 < 1 || token_value_convert1 > 100)
+ uiuc_warnings_errors(1, *command_line);
+
+ fog_field = true;
+ fog_point_index = 0;
+ delete[] fog_time;
+ delete[] fog_value;
+ fog_segments = token_value_convert1;
+ fog_time = new double[fog_segments+1];
+ fog_time[0] = 0.0;
+ fog_value = new int[fog_segments+1];
+ fog_value[0] = 0;
+
+ break;
+ }
+ case fog_point_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ if (token_value < 0.1)
+ uiuc_warnings_errors(1, *command_line);
+
+ if (check_float(linetoken4))
+ token4 >> token_value_convert1;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ if (token_value_convert1 < -1000 || token_value_convert1 > 1000)
+ uiuc_warnings_errors(1, *command_line);
+
+ if (fog_point_index == fog_segments || fog_point_index == -1)
+ uiuc_warnings_errors(1, *command_line);
+
+ fog_point_index++;
+ fog_time[fog_point_index] = token_value;
+ fog_value[fog_point_index] = token_value_convert1;
+
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_FOG_H_
+#define _MENU_FOG_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_fog( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_FOG_H_
--- /dev/null
+
+#include "uiuc_menu_functions.h"
+
+bool check_float( const string &token)
+{
+ float value;
+ istrstream stream(token.c_str());
+ return (stream >> value);
+}
+
+void d_2_to_3( double array2D[100][100], double array3D[][100][100], int index3D)
+{
+ for (register int i=0; i<=99; i++)
+ {
+ for (register int j=1; j<=99; j++)
+ {
+ array3D[index3D][i][j]=array2D[i][j];
+ }
+ }
+}
+
+void d_1_to_2( double array1D[100], double array2D[][100], int index2D)
+{
+ for (register int i=0; i<=99; i++)
+ {
+ array2D[index2D][i]=array1D[i];
+ }
+}
+
+void d_1_to_1( double array1[100], double array2[100] )
+{
+ for (register int i=0; i<=99; i++)
+ {
+ array2[i]=array1[i];
+ }
+}
+
+void i_1_to_2( int array1D[100], int array2D[][100], int index2D)
+{
+ for (register int i=0; i<=99; i++)
+ {
+ array2D[index2D][i]=array1D[i];
+ }
+}
--- /dev/null
+
+#ifndef _MENU_FUNCTIONS_H_
+#define _MENU_FUNCTIONS_H_
+
+#include "uiuc_aircraft.h"
+#include <simgear/compiler.h>
+
+#include <string>
+#include STL_IOSTREAM
+#include STL_STRSTREAM
+
+SG_USING_STD(istrstream);
+
+void d_2_to_3( double array2D[100][100], double array3D[][100][100], int index3D);
+void d_1_to_2( double array1D[100], double array2D[][100], int index2D);
+void d_1_to_1( double array1[100], double array2[100] );
+void i_1_to_2( int array1D[100], int array2D[][100], int index2D);
+bool check_float( const string &token);
+//bool check_float( const string &token);
+
+#endif //_MENU_FUNCTIONS_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_gear.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_gear.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_gear( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ switch(gear_map[linetoken2])
+ {
+ case Dx_gear_flag:
+ {
+ int index;
+ token3 >> index;
+ if (index < 0 || index >= 16)
+ uiuc_warnings_errors(1, *command_line);
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ D_gear_v[index][0] = token_value;
+ gear_model[index] = true;
+ break;
+ }
+ case Dy_gear_flag:
+ {
+ int index;
+ token3 >> index;
+ if (index < 0 || index >= 16)
+ uiuc_warnings_errors(1, *command_line);
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ D_gear_v[index][1] = token_value;
+ gear_model[index] = true;
+ break;
+ }
+ case Dz_gear_flag:
+ {
+ int index;
+ token3 >> index;
+ if (index < 0 || index >= 16)
+ uiuc_warnings_errors(1, *command_line);
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ D_gear_v[index][2] = token_value;
+ gear_model[index] = true;
+ break;
+ }
+ case cgear_flag:
+ {
+ int index;
+ token3 >> index;
+ if (index < 0 || index >= 16)
+ uiuc_warnings_errors(1, *command_line);
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ cgear[index] = token_value;
+ gear_model[index] = true;
+ break;
+ }
+ case kgear_flag:
+ {
+ int index;
+ token3 >> index;
+ if (index < 0 || index >= 16)
+ uiuc_warnings_errors(1, *command_line);
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ kgear[index] = token_value;
+ gear_model[index] = true;
+ break;
+ }
+ case muGear_flag:
+ {
+ int index;
+ token3 >> index;
+ if (index < 0 || index >= 16)
+ uiuc_warnings_errors(1, *command_line);
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ muGear[index] = token_value;
+ gear_model[index] = true;
+ break;
+ }
+ case strutLength_flag:
+ {
+ int index;
+ token3 >> index;
+ if (index < 0 || index >= 16)
+ uiuc_warnings_errors(1, *command_line);
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ strutLength[index] = token_value;
+ gear_model[index] = true;
+ break;
+ }
+ case gear_max_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ use_gear = true;
+ gear_max = token_value;
+ break;
+ }
+ case gear_rate_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ use_gear = true;
+ gear_rate = token_value/3;
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_GEAR_H_
+#define _MENU_GEAR_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_gear( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_GEAR_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_geometry.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_geometry.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_geometry( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10,
+ const string& aircraft_directory, LIST command_line ) {
+ double token_value;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ switch(geometry_map[linetoken2])
+ {
+ case bw_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ bw = token_value;
+ geometryParts -> storeCommands (*command_line);
+ break;
+ }
+ case cbar_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ cbar = token_value;
+ geometryParts -> storeCommands (*command_line);
+ break;
+ }
+ case Sw_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Sw = token_value;
+ geometryParts -> storeCommands (*command_line);
+ break;
+ }
+ case ih_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ ih = token_value;
+ geometryParts -> storeCommands (*command_line);
+ break;
+ }
+ case bh_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ bh = token_value;
+ geometryParts -> storeCommands (*command_line);
+ break;
+ }
+ case ch_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ ch = token_value;
+ geometryParts -> storeCommands (*command_line);
+ break;
+ }
+ case Sh_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Sh = token_value;
+ geometryParts -> storeCommands (*command_line);
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_GEOMETRY_H_
+#define _MENU_GEOMETRY_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_geometry( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10,
+ const string& aircraft_directory, LIST command_line );
+
+#endif //_MENU_GEOMETRY_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_ice.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_ice.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_ice( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ int token_value_convert1, token_value_convert2, token_value_convert3;
+ double datafile_xArray[100][100], datafile_yArray[100];
+ double datafile_zArray[100][100];
+ int datafile_nxArray[100], datafile_ny;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ static bool tactilefadef_first = true;
+
+ switch(ice_map[linetoken2])
+ {
+ case iceTime_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ ice_model = true;
+ iceTime = token_value;
+ break;
+ }
+ case transientTime_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ transientTime = token_value;
+ break;
+ }
+ case eta_ice_final_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ eta_ice_final = token_value;
+ break;
+ }
+ case beta_probe_wing_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ beta_model = true;
+ x_probe_wing = token_value;
+ break;
+ }
+ case beta_probe_tail_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ beta_model = true;
+ x_probe_tail = token_value;
+ break;
+ }
+ case kCDo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCDo = token_value;
+ break;
+ }
+ case kCDK_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCDK = token_value;
+ break;
+ }
+ case kCD_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCD_a = token_value;
+ break;
+ }
+ case kCD_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCD_adot = token_value;
+ break;
+ }
+ case kCD_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCD_q = token_value;
+ break;
+ }
+ case kCD_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCD_de = token_value;
+ break;
+ }
+ case kCXo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCXo = token_value;
+ break;
+ }
+ case kCXK_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCXK = token_value;
+ break;
+ }
+ case kCX_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_a = token_value;
+ break;
+ }
+ case kCX_a2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_a2 = token_value;
+ break;
+ }
+ case kCX_a3_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_a3 = token_value;
+ break;
+ }
+ case kCX_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_adot = token_value;
+ break;
+ }
+ case kCX_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_q = token_value;
+ break;
+ }
+ case kCX_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_de = token_value;
+ break;
+ }
+ case kCX_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_dr = token_value;
+ break;
+ }
+ case kCX_df_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_df = token_value;
+ break;
+ }
+ case kCX_adf_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCX_adf = token_value;
+ break;
+ }
+ case kCLo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCLo = token_value;
+ break;
+ }
+ case kCL_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCL_a = token_value;
+ break;
+ }
+ case kCL_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCL_adot = token_value;
+ break;
+ }
+ case kCL_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCL_q = token_value;
+ break;
+ }
+ case kCL_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCL_de = token_value;
+ break;
+ }
+ case kCZo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZo = token_value;
+ break;
+ }
+ case kCZ_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_a = token_value;
+ break;
+ }
+ case kCZ_a2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_a2 = token_value;
+ break;
+ }
+ case kCZ_a3_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_a3 = token_value;
+ break;
+ }
+ case kCZ_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_adot = token_value;
+ break;
+ }
+ case kCZ_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_q = token_value;
+ break;
+ }
+ case kCZ_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_de = token_value;
+ break;
+ }
+ case kCZ_deb2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_deb2 = token_value;
+ break;
+ }
+ case kCZ_df_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_df = token_value;
+ break;
+ }
+ case kCZ_adf_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCZ_adf = token_value;
+ break;
+ }
+ case kCmo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCmo = token_value;
+ break;
+ }
+ case kCm_a_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCm_a = token_value;
+ break;
+ }
+ case kCm_a2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCm_a2 = token_value;
+ break;
+ }
+ case kCm_adot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCm_adot = token_value;
+ break;
+ }
+ case kCm_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCm_q = token_value;
+ break;
+ }
+ case kCm_de_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCm_de = token_value;
+ break;
+ }
+ case kCm_b2_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCm_b2 = token_value;
+ break;
+ }
+ case kCm_r_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCm_r = token_value;
+ break;
+ }
+ case kCm_df_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCm_df = token_value;
+ break;
+ }
+ case kCYo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCYo = token_value;
+ break;
+ }
+ case kCY_beta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCY_beta = token_value;
+ break;
+ }
+ case kCY_p_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCY_p = token_value;
+ break;
+ }
+ case kCY_r_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCY_r = token_value;
+ break;
+ }
+ case kCY_da_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCY_da = token_value;
+ break;
+ }
+ case kCY_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCY_dr = token_value;
+ break;
+ }
+ case kCY_dra_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCY_dra = token_value;
+ break;
+ }
+ case kCY_bdot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCY_bdot = token_value;
+ break;
+ }
+ case kClo_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kClo = token_value;
+ break;
+ }
+ case kCl_beta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCl_beta = token_value;
+ break;
+ }
+ case kCl_p_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCl_p = token_value;
+ break;
+ }
+ case kCl_r_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCl_r = token_value;
+ break;
+ }
+ case kCl_da_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCl_da = token_value;
+ break;
+ }
+ case kCl_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCl_dr = token_value;
+ break;
+ }
+ case kCl_daa_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCl_daa = token_value;
+ break;
+ }
+ case kCno_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCno = token_value;
+ break;
+ }
+ case kCn_beta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCn_beta = token_value;
+ break;
+ }
+ case kCn_p_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCn_p = token_value;
+ break;
+ }
+ case kCn_r_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCn_r = token_value;
+ break;
+ }
+ case kCn_da_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCn_da = token_value;
+ break;
+ }
+ case kCn_dr_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCn_dr = token_value;
+ break;
+ }
+ case kCn_q_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCn_q = token_value;
+ break;
+ }
+ case kCn_b3_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ kCn_b3 = token_value;
+ break;
+ }
+ case bootTime_flag:
+ {
+ int index;
+ if (check_float(linetoken4))
+ token4 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ token3 >> index;
+ if (index < 0 || index >= 20)
+ uiuc_warnings_errors(1, *command_line);
+ bootTime[index] = token_value;
+ bootTrue[index] = true;
+ break;
+ }
+ case eta_wing_left_input_flag:
+ {
+ eta_from_file = true;
+ eta_wing_left_input = true;
+ eta_wing_left_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(eta_wing_left_input_file,
+ eta_wing_left_input_timeArray,
+ eta_wing_left_input_daArray,
+ eta_wing_left_input_ntime);
+ token6 >> token_value;
+ eta_wing_left_input_startTime = token_value;
+ break;
+ }
+ case eta_wing_right_input_flag:
+ {
+ eta_from_file = true;
+ eta_wing_right_input = true;
+ eta_wing_right_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(eta_wing_right_input_file,
+ eta_wing_right_input_timeArray,
+ eta_wing_right_input_daArray,
+ eta_wing_right_input_ntime);
+ token6 >> token_value;
+ eta_wing_right_input_startTime = token_value;
+ break;
+ }
+ case eta_tail_input_flag:
+ {
+ eta_from_file = true;
+ eta_tail_input = true;
+ eta_tail_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(eta_tail_input_file,
+ eta_tail_input_timeArray,
+ eta_tail_input_daArray,
+ eta_tail_input_ntime);
+ token6 >> token_value;
+ eta_tail_input_startTime = token_value;
+ break;
+ }
+ case nonlin_ice_case_flag:
+ {
+ token3 >> nonlin_ice_case;
+ break;
+ }
+ case eta_tail_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ eta_tail = token_value;
+ break;
+ }
+ case eta_wing_left_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ eta_wing_left = token_value;
+ break;
+ }
+ case eta_wing_right_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ eta_wing_right = token_value;
+ break;
+ }
+ case demo_eps_alpha_max_flag:
+ {
+ demo_eps_alpha_max = true;
+ demo_eps_alpha_max_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_alpha_max_file,
+ demo_eps_alpha_max_timeArray,
+ demo_eps_alpha_max_daArray,
+ demo_eps_alpha_max_ntime);
+ token6 >> token_value;
+ demo_eps_alpha_max_startTime = token_value;
+ break;
+ }
+ case demo_eps_pitch_max_flag:
+ {
+ demo_eps_pitch_max = true;
+ demo_eps_pitch_max_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_pitch_max_file,
+ demo_eps_pitch_max_timeArray,
+ demo_eps_pitch_max_daArray,
+ demo_eps_pitch_max_ntime);
+ token6 >> token_value;
+ demo_eps_pitch_max_startTime = token_value;
+ break;
+ }
+ case demo_eps_pitch_min_flag:
+ {
+ demo_eps_pitch_min = true;
+ demo_eps_pitch_min_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_pitch_min_file,
+ demo_eps_pitch_min_timeArray,
+ demo_eps_pitch_min_daArray,
+ demo_eps_pitch_min_ntime);
+ token6 >> token_value;
+ demo_eps_pitch_min_startTime = token_value;
+ break;
+ }
+ case demo_eps_roll_max_flag:
+ {
+ demo_eps_roll_max = true;
+ demo_eps_roll_max_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_roll_max_file,
+ demo_eps_roll_max_timeArray,
+ demo_eps_roll_max_daArray,
+ demo_eps_roll_max_ntime);
+ token6 >> token_value;
+ demo_eps_roll_max_startTime = token_value;
+ break;
+ }
+ case demo_eps_thrust_min_flag:
+ {
+ demo_eps_thrust_min = true;
+ demo_eps_thrust_min_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_thrust_min_file,
+ demo_eps_thrust_min_timeArray,
+ demo_eps_thrust_min_daArray,
+ demo_eps_thrust_min_ntime);
+ token6 >> token_value;
+ demo_eps_thrust_min_startTime = token_value;
+ break;
+ }
+ case demo_eps_airspeed_max_flag:
+ {
+ demo_eps_airspeed_max = true;
+ demo_eps_airspeed_max_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_airspeed_max_file,
+ demo_eps_airspeed_max_timeArray,
+ demo_eps_airspeed_max_daArray,
+ demo_eps_airspeed_max_ntime);
+ token6 >> token_value;
+ demo_eps_airspeed_max_startTime = token_value;
+ break;
+ }
+ case demo_eps_airspeed_min_flag:
+ {
+ demo_eps_airspeed_min = true;
+ demo_eps_airspeed_min_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_airspeed_min_file,
+ demo_eps_airspeed_min_timeArray,
+ demo_eps_airspeed_min_daArray,
+ demo_eps_airspeed_min_ntime);
+ token6 >> token_value;
+ demo_eps_airspeed_min_startTime = token_value;
+ break;
+ }
+ case demo_eps_flap_max_flag:
+ {
+ demo_eps_flap_max = true;
+ demo_eps_flap_max_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_flap_max_file,
+ demo_eps_flap_max_timeArray,
+ demo_eps_flap_max_daArray,
+ demo_eps_flap_max_ntime);
+ token6 >> token_value;
+ demo_eps_flap_max_startTime = token_value;
+ break;
+ }
+ case demo_boot_cycle_tail_flag:
+ {
+ demo_boot_cycle_tail = true;
+ demo_boot_cycle_tail_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_boot_cycle_tail_file,
+ demo_boot_cycle_tail_timeArray,
+ demo_boot_cycle_tail_daArray,
+ demo_boot_cycle_tail_ntime);
+ token6 >> token_value;
+ demo_boot_cycle_tail_startTime = token_value;
+ break;
+ }
+ case demo_boot_cycle_wing_left_flag:
+ {
+ demo_boot_cycle_wing_left = true;
+ demo_boot_cycle_wing_left_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_boot_cycle_wing_left_file,
+ demo_boot_cycle_wing_left_timeArray,
+ demo_boot_cycle_wing_left_daArray,
+ demo_boot_cycle_wing_left_ntime);
+ token6 >> token_value;
+ demo_boot_cycle_wing_left_startTime = token_value;
+ break;
+ }
+ case demo_boot_cycle_wing_right_flag:
+ {
+ demo_boot_cycle_wing_right = true;
+ demo_boot_cycle_wing_right_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_boot_cycle_wing_right_file,
+ demo_boot_cycle_wing_right_timeArray,
+ demo_boot_cycle_wing_right_daArray,
+ demo_boot_cycle_wing_right_ntime);
+ token6 >> token_value;
+ demo_boot_cycle_wing_right_startTime = token_value;
+ break;
+ }
+ case demo_eps_pitch_input_flag:
+ {
+ demo_eps_pitch_input = true;
+ demo_eps_pitch_input_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_eps_pitch_input_file,
+ demo_eps_pitch_input_timeArray,
+ demo_eps_pitch_input_daArray,
+ demo_eps_pitch_input_ntime);
+ token6 >> token_value;
+ demo_eps_pitch_input_startTime = token_value;
+ break;
+ }
+ case demo_ap_Theta_ref_deg_flag:
+ {
+ demo_ap_Theta_ref_deg = true;
+ demo_ap_Theta_ref_deg_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_ap_Theta_ref_deg_file,
+ demo_ap_Theta_ref_deg_timeArray,
+ demo_ap_Theta_ref_deg_daArray,
+ demo_ap_Theta_ref_deg_ntime);
+ token6 >> token_value;
+ demo_ap_Theta_ref_deg_startTime = token_value;
+ break;
+ }
+ case demo_ap_pah_on_flag:
+ {
+ demo_ap_pah_on = true;
+ demo_ap_pah_on_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_ap_pah_on_file,
+ demo_ap_pah_on_timeArray,
+ demo_ap_pah_on_daArray,
+ demo_ap_pah_on_ntime);
+ token6 >> token_value;
+ demo_ap_pah_on_startTime = token_value;
+ break;
+ }
+ case tactilefadef_flag:
+ {
+ int tactilefadef_index, i;
+ string tactilefadef_file;
+ double flap_value;
+ tactilefadef = true;
+ tactilefadef_file = aircraft_directory + linetoken3;
+ token4 >> tactilefadef_index;
+ if (tactilefadef_index < 0 || tactilefadef_index >= 30)
+ uiuc_warnings_errors(1, *command_line);
+ if (tactilefadef_index > tactilefadef_nf)
+ tactilefadef_nf = tactilefadef_index;
+ token5 >> flap_value;
+ tactilefadef_fArray[tactilefadef_index] = flap_value;
+ token6 >> token_value_convert1;
+ token7 >> token_value_convert2;
+ token8 >> token_value_convert3;
+ token9 >> tactilefadef_nice;
+ convert_z = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ convert_y = uiuc_convert(token_value_convert3);
+ /* call 2D File Reader with file name (tactilefadef_file) and
+ conversion factors; function returns array of
+ elevator deflections (deArray) and corresponding
+ alpha (aArray) and delta CZ (CZArray) values and
+ max number of terms in alpha arrays (nAlphaArray)
+ and delfection array (nde) */
+ uiuc_2DdataFileReader(tactilefadef_file,
+ datafile_xArray,
+ datafile_yArray,
+ datafile_zArray,
+ datafile_nxArray,
+ datafile_ny);
+ d_2_to_3(datafile_xArray, tactilefadef_aArray, tactilefadef_index);
+ d_1_to_2(datafile_yArray, tactilefadef_deArray, tactilefadef_index);
+ d_2_to_3(datafile_zArray, tactilefadef_tactileArray, tactilefadef_index);
+ i_1_to_2(datafile_nxArray, tactilefadef_nAlphaArray, tactilefadef_index);
+ tactilefadef_nde[tactilefadef_index] = datafile_ny;
+ if (tactilefadef_first==true)
+ {
+ if (tactilefadef_nice == 1)
+ {
+ tactilefadef_na_nice = datafile_nxArray[1];
+ tactilefadef_nde_nice = datafile_ny;
+ d_1_to_1(datafile_yArray, tactilefadef_deArray_nice);
+ for (i=1; i<=tactilefadef_na_nice; i++)
+ tactilefadef_aArray_nice[i] = datafile_xArray[1][i];
+ }
+ tactilefadef_first=false;
+ }
+ break;
+ }
+ case tactile_pitch_flag:
+ {
+ tactile_pitch = 1;
+ break;
+ }
+ case demo_tactile_flag:
+ {
+ demo_tactile = true;
+ demo_tactile_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_tactile_file,
+ demo_tactile_timeArray,
+ demo_tactile_daArray,
+ demo_tactile_ntime);
+ token6 >> token_value;
+ demo_tactile_startTime = token_value;
+ break;
+ }
+ case demo_ice_tail_flag:
+ {
+ demo_ice_tail = true;
+ demo_ice_tail_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_ice_tail_file,
+ demo_ice_tail_timeArray,
+ demo_ice_tail_daArray,
+ demo_ice_tail_ntime);
+ token6 >> token_value;
+ demo_ice_tail_startTime = token_value;
+ break;
+ }
+ case demo_ice_left_flag:
+ {
+ demo_ice_left = true;
+ demo_ice_left_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_ice_left_file,
+ demo_ice_left_timeArray,
+ demo_ice_left_daArray,
+ demo_ice_left_ntime);
+ token6 >> token_value;
+ demo_ice_left_startTime = token_value;
+ break;
+ }
+ case demo_ice_right_flag:
+ {
+ demo_ice_right = true;
+ demo_ice_right_file = aircraft_directory + linetoken3;
+ token4 >> token_value_convert1;
+ token5 >> token_value_convert2;
+ convert_y = uiuc_convert(token_value_convert1);
+ convert_x = uiuc_convert(token_value_convert2);
+ uiuc_1DdataFileReader(demo_ice_right_file,
+ demo_ice_right_timeArray,
+ demo_ice_right_daArray,
+ demo_ice_right_ntime);
+ token6 >> token_value;
+ demo_ice_right_startTime = token_value;
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_ICE_H_
+#define _MENU_ICE_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_ice( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_ICE_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_init.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_init.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_init( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+ int token_value_recordRate;
+
+ switch(init_map[linetoken2])
+ {
+ case Dx_pilot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Dx_pilot = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dy_pilot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Dy_pilot = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dz_pilot_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Dz_pilot = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dx_cg_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Dx_cg = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dy_cg_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Dy_cg = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dz_cg_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Dz_cg = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Altitude_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Altitude = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_north_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ V_north = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_east_flag:
+ {
+ initParts -> storeCommands (*command_line);
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ V_east = token_value;
+ break;
+ }
+ case V_down_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ V_down = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case P_body_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ P_body_init_true = true;
+ P_body_init = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Q_body_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Q_body_init_true = true;
+ Q_body_init = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case R_body_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ R_body_init_true = true;
+ R_body_init = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Phi_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Phi_init_true = true;
+ Phi_init = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Theta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Theta_init_true = true;
+ Theta_init = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Psi_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Psi_init_true = true;
+ Psi_init = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case Long_trim_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Long_trim = token_value;
+ initParts -> storeCommands (*command_line);
+ break;
+ }
+ case recordRate_flag:
+ {
+ //can't use check_float since variable is integer
+ token3 >> token_value_recordRate;
+ recordRate = 120 / token_value_recordRate;
+ break;
+ }
+ case recordStartTime_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ recordStartTime = token_value;
+ break;
+ }
+ case use_V_rel_wind_2U_flag:
+ {
+ use_V_rel_wind_2U = true;
+ break;
+ }
+ case nondim_rate_V_rel_wind_flag:
+ {
+ nondim_rate_V_rel_wind = true;
+ break;
+ }
+ case use_abs_U_body_2U_flag:
+ {
+ use_abs_U_body_2U = true;
+ break;
+ }
+ case dyn_on_speed_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ dyn_on_speed = token_value;
+ break;
+ }
+ case dyn_on_speed_zero_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ dyn_on_speed_zero = token_value;
+ break;
+ }
+ case use_dyn_on_speed_curve1_flag:
+ {
+ use_dyn_on_speed_curve1 = true;
+ break;
+ }
+ case use_Alpha_dot_on_speed_flag:
+ {
+ use_Alpha_dot_on_speed = true;
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ Alpha_dot_on_speed = token_value;
+ break;
+ }
+ case use_gamma_horiz_on_speed_flag:
+ {
+ use_gamma_horiz_on_speed = true;
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ gamma_horiz_on_speed = token_value;
+ break;
+ }
+ case downwashMode_flag:
+ {
+ b_downwashMode = true;
+ token3 >> downwashMode;
+ if (downwashMode==100)
+ ;
+ // compute downwash using downwashCoef, do nothing here
+ else
+ uiuc_warnings_errors(4, *command_line);
+ break;
+ }
+ case downwashCoef_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+ downwashCoef = token_value;
+ break;
+ }
+ case Alpha_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Alpha_init_true = true;
+ Alpha_init = token_value;
+ break;
+ }
+ case Beta_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Beta_init_true = true;
+ Beta_init = token_value;
+ break;
+ }
+ case U_body_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ U_body_init_true = true;
+ U_body_init = token_value;
+ break;
+ }
+ case V_body_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ V_body_init_true = true;
+ V_body_init = token_value;
+ break;
+ }
+ case W_body_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ W_body_init_true = true;
+ W_body_init = token_value;
+ break;
+ }
+ case ignore_unknown_keywords_flag:
+ {
+ ignore_unknown_keywords=true;
+ break;
+ }
+ case trim_case_2_flag:
+ {
+ trim_case_2 = true;
+ break;
+ }
+ case use_uiuc_network_flag:
+ {
+ use_uiuc_network = true;
+ server_IP = linetoken3;
+ token4 >> port_num;
+ break;
+ }
+ case old_flap_routine_flag:
+ {
+ old_flap_routine = true;
+ break;
+ }
+ case icing_demo_flag:
+ {
+ icing_demo = true;
+ break;
+ }
+ case outside_control_flag:
+ {
+ outside_control = true;
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords){
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_INIT_H_
+#define _MENU_INIT_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_init( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_INIT_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_mass.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_mass.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_mass( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ switch(mass_map[linetoken2])
+ {
+ case Weight_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Weight = token_value;
+ Mass = Weight * INVG;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case Mass_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Mass = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_xx_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_xx = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_yy_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_yy = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_zz_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_zz = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_xz_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_xz = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case Mass_appMass_ratio_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Mass_appMass_ratio = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_xx_appMass_ratio_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_xx_appMass_ratio = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_yy_appMass_ratio_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_yy_appMass_ratio = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_zz_appMass_ratio_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_zz_appMass_ratio = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case Mass_appMass_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ Mass_appMass = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_xx_appMass_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_xx_appMass = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_yy_appMass_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_yy_appMass = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_zz_appMass_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ I_zz_appMass = token_value;
+ massParts -> storeCommands (*command_line);
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_MASS_H_
+#define _MENU_MASS_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_mass( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10,const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_MASS_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_misc.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_misc.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_misc( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+ double token_value;
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ switch(misc_map[linetoken2])
+ {
+ case simpleHingeMomentCoef_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ simpleHingeMomentCoef = token_value;
+ break;
+ }
+ case dfTimefdf_flag:
+ {
+ dfTimefdf = linetoken3;
+ /* call 1D File Reader with file name (dfTimefdf);
+ function returns array of dfs (dfArray) and
+ corresponding time values (TimeArray) and max
+ number of terms in arrays (ndf) */
+ uiuc_1DdataFileReader(dfTimefdf,
+ dfTimefdf_dfArray,
+ dfTimefdf_TimeArray,
+ dfTimefdf_ndf);
+ break;
+ }
+ case flapper_flag:
+ {
+ string flap_file;
+
+ flap_file = aircraft_directory + "flap.dat";
+ flapper_model = true;
+ flapper_data = new FlapData(flap_file.c_str());
+ break;
+ }
+ case flapper_phi_init_flag:
+ {
+ if (check_float(linetoken3))
+ token3 >> token_value;
+ else
+ uiuc_warnings_errors(1, *command_line);
+
+ flapper_phi_init = token_value*DEG_TO_RAD;
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_MISC_H_
+#define _MENU_MISC_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+#include "uiuc_flapdata.h"
+
+void parse_misc( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_MISC_H_
--- /dev/null
+/**********************************************************************
+
+ FILENAME: uiuc_menu_record.cpp
+
+----------------------------------------------------------------------
+
+ DESCRIPTION: reads input data for specified aircraft and creates
+ approporiate data storage space
+
+----------------------------------------------------------------------
+
+ STATUS: alpha version
+
+----------------------------------------------------------------------
+
+ REFERENCES: based on "menu reader" format of Michael Selig
+
+----------------------------------------------------------------------
+
+ HISTORY: 04/04/2003 initial release
+
+----------------------------------------------------------------------
+
+ AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
+ Michael Selig <m-selig@uiuc.edu>
+
+----------------------------------------------------------------------
+
+ VARIABLES:
+
+----------------------------------------------------------------------
+
+ INPUTS: n/a
+
+----------------------------------------------------------------------
+
+ OUTPUTS: n/a
+
+----------------------------------------------------------------------
+
+ CALLED BY: uiuc_menu()
+
+----------------------------------------------------------------------
+
+ CALLS TO: check_float() if needed
+ d_2_to_3() if needed
+ d_1_to_2() if needed
+ i_1_to_2() if needed
+ d_1_to_1() if needed
+
+ ----------------------------------------------------------------------
+
+ COPYRIGHT: (C) 2003 by Michael Selig
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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.
+
+**********************************************************************/
+
+#include <simgear/compiler.h>
+
+#if defined( __MWERKS__ )
+// -dw- optimizer chokes (big-time) trying to optimize humongous
+// loop/switch statements
+#pragma optimization_level 0
+#endif
+
+#include <cstdlib>
+#include <string>
+#include STL_IOSTREAM
+
+#include "uiuc_menu_record.h"
+
+SG_USING_STD(cerr);
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+
+#ifndef _MSC_VER
+SG_USING_STD(exit);
+#endif
+
+void parse_record( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line ) {
+
+ istrstream token3(linetoken3.c_str());
+ istrstream token4(linetoken4.c_str());
+ istrstream token5(linetoken5.c_str());
+ istrstream token6(linetoken6.c_str());
+ istrstream token7(linetoken7.c_str());
+ istrstream token8(linetoken8.c_str());
+ istrstream token9(linetoken9.c_str());
+ istrstream token10(linetoken10.c_str());
+
+ switch(record_map[linetoken2])
+ {
+ /************************* Time ************************/
+ case Simtime_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case dt_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /************************* Mass ************************/
+ case Weight_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Mass_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_xx_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_yy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_zz_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case I_xz_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /*********************** Geometry **********************/
+ case Dx_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dy_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dz_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dx_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dy_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dz_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /********************** Positions **********************/
+ case Lat_geocentric_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Lon_geocentric_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Radius_to_vehicle_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Latitude_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Longitude_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Altitude_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Phi_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Theta_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Psi_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /******************** Accelerations ********************/
+ case V_dot_north_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_dot_east_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_dot_down_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case U_dot_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_dot_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case W_dot_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case A_X_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case A_Y_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case A_Z_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case A_X_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case A_Y_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case A_Z_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case N_X_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case N_Y_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case N_Z_pilot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case N_X_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case N_Y_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case N_Z_cg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case P_dot_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Q_dot_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case R_dot_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /********************** Velocities *********************/
+ case V_north_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_east_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_down_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_north_rel_ground_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_east_rel_ground_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_down_rel_ground_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_north_airmass_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_east_airmass_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_down_airmass_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_north_rel_airmass_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_east_rel_airmass_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_down_rel_airmass_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case U_gust_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_gust_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case W_gust_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case U_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case W_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_rel_wind_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_true_kts_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_rel_ground_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_inertial_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_ground_speed_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_equiv_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_equiv_kts_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_calibrated_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_calibrated_kts_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case P_local_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Q_local_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case R_local_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case P_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Q_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case R_body_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case P_total_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Q_total_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case R_total_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Phi_dot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Theta_dot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Psi_dot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Latitude_dot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Longitude_dot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Radius_dot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /************************ Angles ***********************/
+ case Alpha_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Alpha_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Alpha_dot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Alpha_dot_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Beta_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Beta_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Beta_dot_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Beta_dot_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gamma_vert_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gamma_vert_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gamma_horiz_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gamma_horiz_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /**************** Atmospheric Properties ***************/
+ case Density_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_sound_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Mach_number_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Static_pressure_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Total_pressure_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Impact_pressure_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dynamic_pressure_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Static_temperature_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Total_temperature_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /******************** Earth Properties *****************/
+ case Gravity_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Sea_level_radius_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Earth_position_angle_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Runway_altitude_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Runway_latitude_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Runway_longitude_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Runway_heading_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Radius_to_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case D_pilot_north_of_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case D_pilot_east_of_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case D_pilot_above_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case X_pilot_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Y_pilot_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case H_pilot_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case D_cg_north_of_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case D_cg_east_of_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case D_cg_above_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case X_cg_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Y_cg_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case H_cg_rwy_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /********************* Engine Inputs *******************/
+ case Throttle_pct_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Throttle_3_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /******************** Control Inputs *******************/
+ case Long_control_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Long_trim_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Long_trim_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case elevator_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case elevator_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Lat_control_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case aileron_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case aileron_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Rudder_pedal_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case rudder_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case rudder_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Flap_handle_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flap_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flap_cmd_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flap_cmd_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flap_pos_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flap_pos_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Spoiler_handle_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case spoiler_cmd_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case spoiler_pos_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case spoiler_pos_norm_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case spoiler_pos_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gear_handle_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case gear_cmd_norm_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case gear_pos_norm_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /****************** Aero Coefficients ******************/
+ case CD_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfaI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfadeI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfdfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDfadfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CXfabetafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CXfadefI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CXfaqfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDo_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CDK_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLK_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_a_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_adot_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_q_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_ih_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_de_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_dr_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_da_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_beta_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_df_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_ds_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_dg_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CXo_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CXK_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_a_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_a2_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_a3_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_adot_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_q_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_de_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_dr_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_df_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CX_adf_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLfaI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLfadeI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLfdfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLfadfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZfaI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZfabetafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZfadefI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZfaqfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLo_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_a_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_adot_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_q_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_ih_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_de_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_df_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_ds_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_dg_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZo_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_a_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_a2_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_a3_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_adot_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_q_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_de_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_deb2_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_df_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CZ_adf_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CmfaI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CmfadeI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CmfdfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CmfadfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CmfabetafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CmfadefI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CmfaqfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cmo_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_a_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_a2_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_adot_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_q_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_ih_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_de_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_b2_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_r_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_df_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_ds_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_dg_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfadaI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfbetadrI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfabetafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfadafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfadrfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfapfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYfarfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CYo_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_beta_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_p_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_r_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_da_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_dr_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_dra_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CY_bdot_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case ClfadaI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case ClfbetadrI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case ClfabetafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case ClfadafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case ClfadrfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case ClfapfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case ClfarfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Clo_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_beta_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_p_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_r_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_da_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_dr_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_daa_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CnfadaI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CnfbetadrI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CnfabetafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CnfadafI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CnfadrfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CnfapfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CnfarfI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cno_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_beta_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_p_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_r_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_da_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_dr_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_q_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cn_b3_save_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /******************** Ice Detection ********************/
+ case CL_clean_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CL_iced_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_clean_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CD_iced_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_clean_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cm_iced_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Ch_clean_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Ch_iced_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_clean_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Cl_iced_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLclean_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLiced_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLclean_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case CLiced_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Lift_clean_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Lift_iced_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Lift_clean_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Lift_iced_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gamma_clean_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gamma_iced_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gamma_clean_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Gamma_iced_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case w_clean_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case w_iced_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case w_clean_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case w_iced_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_total_clean_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_total_iced_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_total_clean_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_total_iced_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case beta_flow_clean_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case beta_flow_clean_wing_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case beta_flow_iced_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case beta_flow_iced_wing_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case beta_flow_clean_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case beta_flow_clean_tail_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case beta_flow_iced_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case beta_flow_iced_tail_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dbeta_flow_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dbeta_flow_wing_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dbeta_flow_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case Dbeta_flow_tail_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case pct_beta_flow_wing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case pct_beta_flow_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eta_ice_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eta_wing_left_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eta_wing_right_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eta_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case delta_CL_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case delta_CD_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case delta_Cm_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case delta_Cl_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case boot_cycle_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case boot_cycle_wing_left_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case boot_cycle_wing_right_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case autoIPS_tail_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case autoIPS_wing_left_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case autoIPS_wing_right_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_pitch_input_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_alpha_max_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_pitch_max_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_pitch_min_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_roll_max_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_thrust_min_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_flap_max_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_airspeed_max_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eps_airspeed_min_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /*********************Auto Pilot************************/
+ case ap_Theta_ref_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case ap_pah_on_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /************************ Forces ***********************/
+ case F_X_wind_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Y_wind_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Z_wind_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_X_aero_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Y_aero_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Z_aero_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_X_engine_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Y_engine_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Z_engine_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_X_gear_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Y_gear_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Z_gear_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_X_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Y_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_Z_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_north_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_east_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case F_down_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+
+ /*********************** Moments ***********************/
+ case M_l_aero_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_m_aero_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_n_aero_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_l_engine_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_m_engine_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_n_engine_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_l_gear_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_m_gear_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_n_gear_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_l_rp_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_m_rp_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case M_n_rp_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ /****************** Flapper Data ***********************/
+ case flapper_freq_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flapper_phi_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flapper_phi_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flapper_Lift_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flapper_Thrust_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flapper_Inertia_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case flapper_Moment_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ /****************** debug keywords ***********************/
+ case debug1_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case debug2_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case debug3_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case debug4_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case debug5_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case debug6_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case tactilefadefI_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case V_down_fpm_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case eta_q_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case rpm_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case elevator_sas_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case aileron_sas_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case rudder_sas_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case w_induced_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case downwashAngle_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case alphaTail_deg_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case gammaWing_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case LD_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case gload_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case gyroMomentQ_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case gyroMomentR_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case trigger_on_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case trigger_num_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case trigger_toggle_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ case trigger_counter_record:
+ {
+ recordParts -> storeCommands (*command_line);
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
+}
--- /dev/null
+
+#ifndef _MENU_RECORD_H_
+#define _MENU_RECORD_H_
+
+#include "uiuc_aircraft.h"
+#include "uiuc_convert.h"
+#include "uiuc_1DdataFileReader.h"
+#include "uiuc_2DdataFileReader.h"
+#include "uiuc_menu_functions.h"
+#include <FDM/LaRCsim/ls_generic.h>
+#include <FDM/LaRCsim/ls_cockpit.h> /* Long_trim defined */
+#include <FDM/LaRCsim/ls_constants.h> /* INVG defined */
+
+void parse_record( const string& linetoken2, const string& linetoken3,
+ const string& linetoken4, const string& linetoken5,
+ const string& linetoken6, const string& linetoken7,
+ const string& linetoken8, const string& linetoken9,
+ const string& linetoken10, const string& aircraft_directory,
+ LIST command_line );
+
+#endif //_MENU_RECORD_H_
#include "uiuc_pah_ap.h"
double pah_ap(double pitch, double pitchrate, double pitch_ref, double V,
- double sample_t)
+ double sample_t, int init)
{
// changes by RD so function keeps previous values
static double u2prev;
static double x1prev;
static double x2prev;
static double x3prev;
- static int init = 0;
- if (init==0)
+ if (init == 0)
{
- init = -1;
u2prev = 0;
x1prev = 0;
x2prev = 0;
#define _PAH_AP_H_
double pah_ap(double pitch, double pitchrate, double pitch_ref, double V,
- double sample_t);
+ double sample_t, int init);
#endif //_PAH_AP_H_
----------------------------------------------------------------------
HISTORY: 01/30/2000 (BS) initial release
- 09/19/2002 (MSS) appended zeros to lines w/ comments
+ 09/19/2002 (MSS) appended zeros to lines w/ comments
----------------------------------------------------------------------
while (tokencounter < tokenNo)
{
- if ((pos1 == inputLine.npos) || (pos1 == -1) || (pos == -1) )
+ if ((pos1 == inputLine.npos) || (pos1 == -1) || (pos == -1) )
return ""; //return an empty string if tokenNo exceeds the No of tokens in the line
inputLine = inputLine.substr(pos1 , MAXLINE);
}
if (pos1== -1 || pos == -1)
- return "";
+ return "";
else
return inputLine.substr(pos , pos1-pos); // return the desired token
}
11/12/2001 (RD) Added new variables needed for the non-
linear Twin Otter model at zero flaps
(CxfxxfI). Removed zero flap variables.
- Added flap_pos and flap_goal.
+ Added flap_pos and flap_cmd_deg.
02/13/2002 (RD) Added variables so linear aero model
values can be recorded
+ 03/03/2003 (RD) Added flap_cmd_record
+ 03/16/2003 (RD) Added trigger record variables
----------------------------------------------------------------------
- AUTHOR(S): Jeff Scott <jscott@mail.com>
+ AUTHOR(S): Jeff Scott http://www.jeffscott.net/
Robert Deters <rdeters@uiuc.edu>
-
+ Michael Selig <m-selig@uiuc.edu>
----------------------------------------------------------------------
VARIABLES:
**********************************************************************/
+#include <simgear/compiler.h>
+#include <simgear/misc/sg_path.hxx>
+#include <Aircraft/aircraft.hxx>
+#include <Main/fg_props.hxx>
+
#include "uiuc_recorder.h"
SG_USING_STD(endl); // -dw
break;
}
- /******************** Control Inputs *******************/
+ /************************ Controls ***********************/
case Long_control_record:
{
fout << Long_control << " ";
fout << flap << " ";
break;
}
- case flap_deg_record:
+ case flap_cmd_record:
{
- fout << flap * RAD_TO_DEG << " ";
+ fout << flap_cmd << " ";
break;
}
- case flap_goal_record:
+ case flap_cmd_deg_record:
{
- fout << flap_goal << " ";
+ fout << flap_cmd * RAD_TO_DEG << " ";
break;
}
case flap_pos_record:
fout << flap_pos << " ";
break;
}
+ case flap_pos_deg_record:
+ {
+ fout << flap_pos * RAD_TO_DEG << " ";
+ break;
+ }
+ case Spoiler_handle_record:
+ {
+ fout << Spoiler_handle << " ";
+ break;
+ }
+ case spoiler_cmd_deg_record:
+ {
+ fout << spoiler_cmd_deg << " ";
+ break;
+ }
+ case spoiler_pos_deg_record:
+ {
+ fout << spoiler_pos_deg << " ";
+ break;
+ }
+ case spoiler_pos_norm_record:
+ {
+ fout << spoiler_pos_norm << " ";
+ break;
+ }
+ case spoiler_pos_record:
+ {
+ fout << spoiler_pos << " ";
+ break;
+ }
/****************** Aero Coefficients ******************/
case CD_record:
fout << CDK_save << " ";
break;
}
+ case CLK_save_record:
+ {
+ fout << CLK_save << " ";
+ break;
+ }
case CD_a_save_record:
{
fout << CD_a_save << " ";
fout << CD_de_save << " ";
break;
}
+ case CD_dr_save_record:
+ {
+ fout << CD_dr_save << " ";
+ break;
+ }
+ case CD_da_save_record:
+ {
+ fout << CD_da_save << " ";
+ break;
+ }
+ case CD_beta_save_record:
+ {
+ fout << CD_beta_save << " ";
+ break;
+ }
+ case CD_df_save_record:
+ {
+ fout << CD_df_save << " ";
+ break;
+ }
+ case CD_ds_save_record:
+ {
+ fout << CD_ds_save << " ";
+ break;
+ }
+ case CD_dg_save_record:
+ {
+ fout << CD_dg_save << " ";
+ break;
+ }
case CXo_save_record:
{
fout << CXo_save << " ";
fout << CL_de_save << " ";
break;
}
+ case CL_df_save_record:
+ {
+ fout << CL_df_save << " ";
+ break;
+ }
+ case CL_ds_save_record:
+ {
+ fout << CL_ds_save << " ";
+ break;
+ }
+ case CL_dg_save_record:
+ {
+ fout << CL_dg_save << " ";
+ break;
+ }
case CZo_save_record:
{
fout << CZo_save << " ";
fout << Cm_df_save << " ";
break;
}
+ case Cm_ds_save_record:
+ {
+ fout << Cm_ds_save << " ";
+ break;
+ }
+ case Cm_dg_save_record:
+ {
+ fout << Cm_dg_save << " ";
+ break;
+ }
case CY_record:
{
fout << CY << " ";
break;
}
- /*********************** Moments ***********************/
- //case flapper_freq_record:
- // {
- //fout << flapper_freq << " ";
- //break;
- // }
- //case flapper_phi_record:
- // {
- //fout << flapper_phi << " ";
- //break;
- // }
- //case flapper_phi_deg_record:
- // {
- //fout << flapper_phi*RAD_TO_DEG << " ";
- //break;
- // }
- //case flapper_Lift_record:
- // {
- //fout << flapper_Lift << " ";
- //break;
- // }
- //case flapper_Thrust_record:
- // {
- //fout << flapper_Thrust << " ";
- //break;
- // }
- //case flapper_Inertia_record:
- // {
- //fout << flapper_Inertia << " ";
- //break;
- // }
- //case flapper_Moment_record:
- // {
- //fout << flapper_Moment << " ";
- //break;
- // }
- /*********************** debug ***********************/
+ /********************* flapper variables *********************/
+ case flapper_freq_record:
+ {
+ fout << flapper_freq << " ";
+ break;
+ }
+ case flapper_phi_record:
+ {
+ fout << flapper_phi << " ";
+ break;
+ }
+ case flapper_phi_deg_record:
+ {
+ fout << flapper_phi*RAD_TO_DEG << " ";
+ break;
+ }
+ case flapper_Lift_record:
+ {
+ fout << flapper_Lift << " ";
+ break;
+ }
+ case flapper_Thrust_record:
+ {
+ fout << flapper_Thrust << " ";
+ break;
+ }
+ case flapper_Inertia_record:
+ {
+ fout << flapper_Inertia << " ";
+ break;
+ }
+ case flapper_Moment_record:
+ {
+ fout << flapper_Moment << " ";
+ break;
+ }
+ /********* MSS debug and other data *******************/
/* debug variables for use in probing data */
/* comment out old lines, and add new */
/* only remove code that you have written */
// fout << eta_q_Cm_adot_fac << " ";
// fout << eta_q_Cmfade_fac << " ";
// fout << eta_q_Cl_dr_fac << " ";
+ // fout << eta_q_Cm_de_fac << " ";
// eta on tail
- // fout << tc << " ";
+ // fout << eta_q << " ";
// engine RPM
// fout << engineOmega * 60 / (2 * LS_PI)<< " ";
// vertical climb rate in fpm
- // fout << V_down * 60 << " ";
+ fout << V_down * 60 << " ";
+ // vertical climb rate in fps
+ // fout << V_down << " ";
// w_induced downwash at tail due to wing
- //fout << w_induced << " ";
- // w_induced downwash at tail due to wing
- fout << gammaWing << " ";
+ // fout << gammaWing << " ";
+ //fout << outside_control << " ";
break;
}
case debug2_record:
{
- //Lift to drag ratio
- // fout << V_north/V_down << " ";
+ // Lift to drag ratio
+ // fout << V_ground_speed/V_down_rel_ground << " ";
// g's through the c.g. of the aircraft
- // fout << (-A_Z_cg/32.174) << " ";
+ fout << (-A_Z_cg/32.174) << " ";
+ // L/D via forces (used in 201 class for L/D)
+ // fout << (F_Z_wind/F_X_wind) << " ";
// gyroscopic moment (see uiuc_wrapper.cpp)
// fout << (polarInertia * engineOmega * Q_body) << " ";
// downwashAngle at tail
- fout << downwashAngle * 57.29 << " ";
+ // fout << downwashAngle * 57.29 << " ";
// w_induced from engine
- // fout << w_i << " ";
+ // fout << w_induced << " ";
break;
}
case debug3_record:
// fout << (Cos_alpha * Cos_alpha) << " ";
// gyroscopic moment (see uiuc_wrapper.cpp)
// fout << (-polarInertia * engineOmega * R_body) << " ";
- // AlphaTail
- // fout << AlphaTail * 57.29 << " ";
- // fout << Alpha * 57.29 << " ";
// eta on tail
+ // fout << eta_q << " ";
+ // flapper cycle percentage
+ fout << (sin(flapper_phi - 3 * LS_PI / 2)) << " ";
+ break;
+ }
+ /********* RD debug and other data *******************/
+ /* debug variables for use in probing data */
+ /* comment out old lines, and add new */
+ /* only remove code that you have written */
+ case debug4_record:
+ {
+ // flapper F_X_aero_flapper
+ fout << F_X_aero_flapper << " ";
+ break;
+ }
+ case debug5_record:
+ {
+ // flapper F_Z_aero_flapper
+ //fout << F_Z_aero_flapper << " ";
+ // gear_rate
+ fout << gear_rate << " ";
+ break;
+ }
+ case debug6_record:
+ {
+ //gear_max
+ fout << gear_max << " ";
+ break;
+ }
+ case V_down_fpm_record:
+ {
+ fout << V_down * 60 << " ";
+ break;
+ }
+ case eta_q_record:
+ {
fout << eta_q << " ";
break;
}
-
- };
+ case rpm_record:
+ {
+ fout << (engineOmega * 60 / (2 * LS_PI)) << " ";
+ break;
+ }
+ case elevator_sas_deg_record:
+ {
+ fout << elevator_sas * RAD_TO_DEG << " ";
+ break;
+ }
+ case aileron_sas_deg_record:
+ {
+ fout << aileron_sas * RAD_TO_DEG << " ";
+ break;
+ }
+ case rudder_sas_deg_record:
+ {
+ fout << rudder_sas * RAD_TO_DEG << " ";
+ break;
+ }
+ case w_induced_record:
+ {
+ fout << w_induced << " ";
+ break;
+ }
+ case downwashAngle_deg_record:
+ {
+ fout << downwashAngle * RAD_TO_DEG << " ";
+ break;
+ }
+ case alphaTail_deg_record:
+ {
+ fout << alphaTail * RAD_TO_DEG << " ";
+ break;
+ }
+ case gammaWing_record:
+ {
+ fout << gammaWing << " ";
+ break;
+ }
+ case LD_record:
+ {
+ fout << V_ground_speed/V_down_rel_ground << " ";
+ break;
+ }
+ case gload_record:
+ {
+ fout << -A_Z_cg/32.174 << " ";
+ break;
+ }
+ case gyroMomentQ_record:
+ {
+ fout << polarInertia * engineOmega * Q_body << " ";
+ break;
+ }
+ case gyroMomentR_record:
+ {
+ fout << -polarInertia * engineOmega * R_body << " ";
+ break;
+ }
+ case Gear_handle_record:
+ {
+ fout << Gear_handle << " ";
+ break;
+ }
+ case gear_cmd_norm_record:
+ {
+ fout << gear_cmd_norm << " ";
+ break;
+ }
+ case gear_pos_norm_record:
+ {
+ fout << gear_pos_norm << " ";
+ break;
+ }
+ /****************Trigger Variables*******************/
+ case trigger_on_record:
+ {
+ fout << trigger_on << " ";
+ break;
+ }
+ case trigger_num_record:
+ {
+ fout << trigger_num << " ";
+ break;
+ }
+ case trigger_toggle_record:
+ {
+ fout << trigger_toggle << " ";
+ break;
+ }
+ case trigger_counter_record:
+ {
+ fout << trigger_counter << " ";
+ break;
+ }
+ };
} // end record map
}
recordStep++;
- Error Code (errorCode)
- Message indicating the problem. This message should be preceded by
-"Warning", "Error" or "Note". Warnings are non-fatal and the code
-will pause. Errors are fatal and will stop the code. Notes are only
-for information.
+ "Warning", "Error" or "Note". Warnings are non-fatal and the code
+ will pause. Errors are fatal and will stop the code. Notes are
+ only for information.
----------------------------------------------------------------------
USA or view http://www.gnu.org/copyleft/gpl.html.
**********************************************************************/
-#include <stdlib.h>
-#include <string.h>
-#include <cstdlib> // exit
#include "uiuc_warnings_errors.h"
exit(-1);
break;
case 2:
- cerr << "UIUC ERROR 2: Unknown identifier in \"" << line << "\" (check uiuc_maps_*.cpp)" << endl;
+ cerr << "UIUC ERROR 2: Unknown identifier in \"" << line << "\" (check uiuc_map_*.cpp)" << endl;
exit(-1);
break;
case 3:
cerr << "UIUC ERROR 5: Must use dyn_on_speed not equal to zero: \"" << line << endl;
exit(-1);
break;
+ case 6:
+ cerr << "UIUC ERROR 6: Table lookup data exceeds 99 point limit: \"" << endl;
+ exit(-1);
+ break;
+ case 7:
+ cerr << "UIUC ERROR 7: Need to download data file for the ornithopter. Go to http://www.aae.uiuc.edu/m-selig/apasim/Aircraft-uiuc.html " << endl;
+ exit(-1);
+ break;
}
}
#include <simgear/compiler.h>
#include <string>
+#include <cstdlib>
#include STL_IOSTREAM
SG_USING_STD(string);
02/24/2002 (GD) Added uiuc_network_routine()
03/27/2002 (RD) Changed how forces are calculated when
body-axis is used
-
+ 12/11/2002 (RD) Divided uiuc_network_routine into
+ uiuc_network_recv_routine and
+ uiuc_network_send_routine
+ 03/16/2003 (RD) Added trigger lines in recorder area
+
----------------------------------------------------------------------
AUTHOR(S): Bipin Sehgal <bsehgal@uiuc.edu>
#include "uiuc_aircraft.h"
#include "uiuc_aircraftdir.h"
#include "uiuc_coefficients.h"
+#include "uiuc_getwind.h"
#include "uiuc_engine.h"
#include "uiuc_gear.h"
#include "uiuc_aerodeflections.h"
//#include "Main/simple_udp.h"
#include "uiuc_fog.h" //321654
//#include "uiuc_network.h"
-//#include "uiuc_get_flapper.h"
+#include "uiuc_get_flapper.h"
SG_USING_STD(cout);
SG_USING_STD(endl);
+extern "C" void uiuc_initial_init ();
+extern "C" void uiuc_vel_init ();
extern "C" void uiuc_init_aeromodel ();
extern "C" void uiuc_force_moment(double dt);
extern "C" void uiuc_engine_routine();
+extern "C" void uiuc_wind_routine();
extern "C" void uiuc_gear_routine();
extern "C" void uiuc_record_routine(double dt);
-//extern "C" void uiuc_network_routine();
-extern "C" void uiuc_vel_init ();
-extern "C" void uiuc_initial_init ();
+extern "C" void uiuc_network_recv_routine();
+extern "C" void uiuc_network_send_routine();
AIRCRAFT *aircraft_ = new AIRCRAFT;
AIRCRAFTDIR *aircraftdir_ = new AIRCRAFTDIR;
uiuc_aerodeflections(dt);
uiuc_coefficients(dt);
- //if (flapper_model)
- // {
- // uiuc_get_flapper(dt);
- // }
/* Calculate the forces */
if (CX && CZ)
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)
+ {
+ uiuc_get_flapper(dt);
+ F_X_aero += F_X_aero_flapper;
+ F_Z_aero += F_Z_aero_flapper;
+ M_m_aero += flapper_Moment;
+ }
// fog field update
Fog = 0;
}
+void uiuc_wind_routine()
+{
+ uiuc_getwind();
+}
+
void uiuc_engine_routine()
{
uiuc_engine();
void uiuc_record_routine(double dt)
{
+ if (trigger_last_time_step == 0 && trigger_on == 1) {
+ if (trigger_toggle == 0)
+ trigger_toggle = 1;
+ else
+ trigger_toggle = 0;
+ trigger_num++;
+ if (trigger_num % 2 != 0)
+ trigger_counter++;
+ }
+
if (Simtime >= recordStartTime)
uiuc_recorder(dt);
+
+ trigger_last_time_step = trigger_on;
}
-//void uiuc_network_routine()
-//{
-// if (use_uiuc_network)
-// uiuc_network(2); //send data
-//}
+void uiuc_network_recv_routine()
+{
+ //if (use_uiuc_network)
+ //uiuc_network(1);
+}
+
+void uiuc_network_send_routine()
+{
+ //if (use_uiuc_network)
+ //uiuc_network(2);
+}
//end uiuc_wrapper.cpp
void uiuc_init_aeromodel ();
void uiuc_force_moment(double dt);
+void uiuc_wind_routine();
void uiuc_engine_routine();
void uiuc_gear_routine();
void uiuc_record_routine(double dt);
-//void uiuc_network_routine();
+void uiuc_network_recv_routine();
+void uiuc_network_send_routine();
void uiuc_vel_init ();
void uiuc_initial_init ();