From 19e7e93787069a8ee639261e9c1f2199e0347ba9 Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 14 Sep 2001 20:36:34 +0000 Subject: [PATCH] /FDM/UIUCModel/uiuc_aircraft.h Added variables necessary for new abilities. /FDM/UIUCModel/uiuc_coefficients.cpp /FDM/UIUCModel/uiuc_coefficients.h /FDM/UIUCModel/uiuc_coef_lift.cpp Added CZfa. /FDM/UIUCModel/uiuc_controlInput.cpp Added aileron and rudder inputs. /FDM/UIUCModel/uiuc_engine.cpp Added throttle input. /FDM/UIUCModel/uiuc_engine.h /FDM/UIUCModel/uiuc_map_CL.cpp /FDM/UIUCModel/uiuc_map_engine.cpp /FDM/UIUCModel/uiuc_map_init.cpp /FDM/UIUCModel/uiuc_menu.cpp /FDM/UIUCModel/uiuc_wrapper.cpp Added a few new functions. /FDM/UIUCModel/uiuc_wrapper.h /FDM/UIUCModel/uiuc_map_controlSurface.cpp /FDM/UIUCModel/uiuc_initializemaps.cpp /FDM/UIUCModel/uiuc_initializemaps.h /FDM/UIUCModel/uiuc_map_keyword.cpp /FDM/UIUCModel/Makefile.am /Main/Makefile.am added files /FDM/UIUCModel/uiuc_map_fog.cpp For the visibility ability. /FDM/UIUCModel/uiuc_map_fog.h /FDM/UIUCModel/uiuc_fog.cpp /FDM/UIUCModel/uiuc_fog.h --- src/FDM/UIUCModel/Makefile.am | 4 +- src/FDM/UIUCModel/uiuc_aircraft.h | 186 +++++++++++++- src/FDM/UIUCModel/uiuc_coef_lift.cpp | 11 + src/FDM/UIUCModel/uiuc_coefficients.cpp | 51 +++- src/FDM/UIUCModel/uiuc_coefficients.h | 2 + src/FDM/UIUCModel/uiuc_controlInput.cpp | 55 ++++ src/FDM/UIUCModel/uiuc_engine.cpp | 16 ++ src/FDM/UIUCModel/uiuc_engine.h | 11 + src/FDM/UIUCModel/uiuc_fog.cpp | 114 +++++++++ src/FDM/UIUCModel/uiuc_fog.h | 18 ++ src/FDM/UIUCModel/uiuc_initializemaps.cpp | 1 + src/FDM/UIUCModel/uiuc_initializemaps.h | 1 + src/FDM/UIUCModel/uiuc_map_CL.cpp | 3 + src/FDM/UIUCModel/uiuc_map_controlSurface.cpp | 9 + src/FDM/UIUCModel/uiuc_map_engine.cpp | 3 + src/FDM/UIUCModel/uiuc_map_fog.cpp | 76 ++++++ src/FDM/UIUCModel/uiuc_map_fog.h | 10 + src/FDM/UIUCModel/uiuc_map_init.cpp | 8 + src/FDM/UIUCModel/uiuc_map_keyword.cpp | 1 + src/FDM/UIUCModel/uiuc_menu.cpp | 240 +++++++++++++++++- src/FDM/UIUCModel/uiuc_wrapper.cpp | 137 +++++++++- src/FDM/UIUCModel/uiuc_wrapper.h | 3 + 22 files changed, 938 insertions(+), 22 deletions(-) create mode 100644 src/FDM/UIUCModel/uiuc_fog.cpp create mode 100644 src/FDM/UIUCModel/uiuc_fog.h create mode 100644 src/FDM/UIUCModel/uiuc_map_fog.cpp create mode 100644 src/FDM/UIUCModel/uiuc_map_fog.h diff --git a/src/FDM/UIUCModel/Makefile.am b/src/FDM/UIUCModel/Makefile.am index 8d5b1709b..9b1646350 100644 --- a/src/FDM/UIUCModel/Makefile.am +++ b/src/FDM/UIUCModel/Makefile.am @@ -20,7 +20,8 @@ libUIUCModel_a_SOURCES = \ uiuc_controlInput.cpp uiuc_controlInput.h \ uiuc_convert.cpp uiuc_convert.h \ uiuc_engine.cpp uiuc_engine.h \ - uiuc_gear.cpp uiuc_gear.h \ + uiuc_fog.cpp uiuc_fog.h \ + uiuc_gear.cpp uiuc_gear.h\ uiuc_ice.cpp uiuc_ice.h \ uiuc_initializemaps.cpp uiuc_initializemaps.h \ uiuc_map_CD.cpp uiuc_map_CD.h \ @@ -31,6 +32,7 @@ libUIUCModel_a_SOURCES = \ uiuc_map_Croll.cpp uiuc_map_Croll.h \ uiuc_map_controlSurface.cpp uiuc_map_controlSurface.h \ uiuc_map_engine.cpp uiuc_map_engine.h \ + uiuc_map_fog.cpp uiuc_map_fog.h \ uiuc_map_geometry.cpp uiuc_map_geometry.h \ uiuc_map_ice.cpp uiuc_map_ice.h \ uiuc_map_gear.cpp uiuc_map_gear.h \ diff --git a/src/FDM/UIUCModel/uiuc_aircraft.h b/src/FDM/UIUCModel/uiuc_aircraft.h index 996a8adea..6d407f8a3 100644 --- a/src/FDM/UIUCModel/uiuc_aircraft.h +++ b/src/FDM/UIUCModel/uiuc_aircraft.h @@ -37,11 +37,27 @@ 04/01/2000 (JS) added throttle, longitudinal, lateral, and rudder inputs to record map 03/09/2001 (DPM) added support for gear - + 06/18/2001 (RD) added variables needed for aileron, + rudder, and throttle_pct input files. + Added Alpha, Beta, U_body, V_body, and + W_body to init map. Added variables + needed to ignore elevator, aileron, and + rudder pilot inputs. Added CZ as a function + of alpha, CZfa. Added twinotter to engine + group. + 07/05/2001 (RD) added pilot_elev_no_check, pilot_ail_no + _check, and pilot_rud_no_check variables. + This allows pilot to fly aircraft after the + input files have been used. + 08/27/2001 (RD) Added xxx_init_true and xxx_init for + P_body, Q_body, R_body, Phi, Theta, Psi, + U_body, V_body, and W_body to help in + starting the A/C at an initial condition. ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters David Megginson ---------------------------------------------------------------------- @@ -119,7 +135,7 @@ typedef stack :: iterator LIST; /* Add more keywords here if required*/ enum {init_flag = 1000, geometry_flag, controlSurface_flag, controlsMixer_flag, mass_flag, engine_flag, CD_flag, CL_flag, Cm_flag, CY_flag, Cl_flag, - Cn_flag, gear_flag, ice_flag, record_flag, misc_flag}; + Cn_flag, gear_flag, ice_flag, record_flag, misc_flag, fog_flag}; // init ======= Initial values for equation of motion enum {Dx_pilot_flag = 2000, Dy_pilot_flag, Dz_pilot_flag, @@ -128,7 +144,8 @@ enum {Dx_pilot_flag = 2000, Dy_pilot_flag, Dz_pilot_flag, P_body_flag, Q_body_flag, R_body_flag, Phi_flag, Theta_flag, Psi_flag, Long_trim_flag, recordRate_flag, recordStartTime_flag, - nondim_rate_V_rel_wind_flag, dyn_on_speed_flag}; + nondim_rate_V_rel_wind_flag, dyn_on_speed_flag, Alpha_flag, + Beta_flag, U_body_flag, V_body_flag, W_body_flag}; // geometry === Aircraft-specific geometric quantities enum {bw_flag = 3000, cbar_flag, Sw_flag, ih_flag, bh_flag, ch_flag, Sh_flag}; @@ -136,7 +153,7 @@ enum {bw_flag = 3000, cbar_flag, Sw_flag, ih_flag, bh_flag, ch_flag, Sh_flag}; // controlSurface = Control surface deflections and properties 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}; + elevator_step_flag, elevator_singlet_flag, elevator_doublet_flag, elevator_input_flag, aileron_input_flag, rudder_input_flag, pilot_elev_no_flag, pilot_ail_no_flag, pilot_rud_no_flag}; // controlsMixer == Controls mixer enum {nomix_flag = 5000}; @@ -145,7 +162,7 @@ enum {nomix_flag = 5000}; enum {Weight_flag = 6000, Mass_flag, I_xx_flag, I_yy_flag, I_zz_flag, I_xz_flag}; // engine ===== Propulsion data -enum {simpleSingle_flag = 7000, c172_flag, cherokee_flag}; +enum {simpleSingle_flag = 7000, c172_flag, cherokee_flag, Throttle_pct_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, @@ -157,7 +174,7 @@ enum {CDo_flag = 8000, CDK_flag, CD_a_flag, CD_adot_flag, CD_q_flag, CD_ih_flag, enum {CLo_flag = 9000, CL_a_flag, CL_adot_flag, CL_q_flag, CL_ih_flag, CL_de_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}; + CZ_q_flag, CZ_de_flag, CZ_deb2_flag, CZ_df_flag, CZ_adf_flag, CZfa_flag}; // Cm ========= Aerodynamic m-moment quantities (longitudinal) enum {Cmo_flag = 10000, Cm_a_flag, Cm_a2_flag, Cm_adot_flag, Cm_q_flag, @@ -297,8 +314,12 @@ enum {Simtime_record = 16000, dt_record, // misc ======= Miscellaneous inputs enum {simpleHingeMomentCoef_flag = 17000, dfTimefdf_flag}; +//321654 +// fog ======== Fog field quantities +enum {fog_segments_flag = 18000, fog_point_flag}; -typedef struct +//321654 +struct AIRCRAFT { // ParseFile stuff [] Bipin to add more comments ParseFile *airplane; @@ -375,6 +396,50 @@ typedef struct #define nondim_rate_V_rel_wind aircraft_->nondim_rate_V_rel_wind double dyn_on_speed; #define dyn_on_speed aircraft_->dyn_on_speed + bool P_body_init_true; + double P_body_init; +#define P_body_init_true aircraft_->P_body_init_true +#define P_body_init aircraft_->P_body_init + bool Q_body_init_true; + double Q_body_init; +#define Q_body_init_true aircraft_->Q_body_init_true +#define Q_body_init aircraft_->Q_body_init + bool R_body_init_true; + double R_body_init; +#define R_body_init_true aircraft_->R_body_init_true +#define R_body_init aircraft_->R_body_init + bool Phi_init_true; + double Phi_init; +#define Phi_init_true aircraft_->Phi_init_true +#define Phi_init aircraft_->Phi_init + bool Theta_init_true; + double Theta_init; +#define Theta_init_true aircraft_->Theta_init_true +#define Theta_init aircraft_->Theta_init + bool Psi_init_true; + double Psi_init; +#define Psi_init_true aircraft_->Psi_init_true +#define Psi_init aircraft_->Psi_init + bool Alpha_init_true; + double Alpha_init; +#define Alpha_init_true aircraft_->Alpha_init_true +#define Alpha_init aircraft_->Alpha_init + bool Beta_init_true; + double Beta_init; +#define Beta_init_true aircraft_->Beta_init_true +#define Beta_init aircraft_->Beta_init + bool U_body_init_true; + double U_body_init; +#define U_body_init_true aircraft_->U_body_init_true +#define U_body_init aircraft_->U_body_init + bool V_body_init_true; + double V_body_init; +#define V_body_init_true aircraft_->V_body_init_true +#define V_body_init aircraft_->V_body_init + bool W_body_init_true; + double W_body_init; +#define W_body_init_true aircraft_->W_body_init_true +#define W_body_init aircraft_->W_body_init /* Variables (token2) ===========================================*/ @@ -457,6 +522,47 @@ typedef struct #define elevator_input_ntime aircraft_->elevator_input_ntime #define elevator_input_startTime aircraft_->elevator_input_startTime + bool aileron_input; + string aileron_input_file; + double aileron_input_timeArray[1000]; + double aileron_input_daArray[1000]; + int aileron_input_ntime; + double aileron_input_startTime; +#define aileron_input aircraft_->aileron_input +#define aileron_input_file aircraft_->aileron_input_file +#define aileron_input_timeArray aircraft_->aileron_input_timeArray +#define aileron_input_daArray aircraft_->aileron_input_daArray +#define aileron_input_ntime aircraft_->aileron_input_ntime +#define aileron_input_startTime aircraft_->aileron_input_startTime + + bool rudder_input; + string rudder_input_file; + double rudder_input_timeArray[1000]; + double rudder_input_drArray[1000]; + int rudder_input_ntime; + double rudder_input_startTime; +#define rudder_input aircraft_->rudder_input +#define rudder_input_file aircraft_->rudder_input_file +#define rudder_input_timeArray aircraft_->rudder_input_timeArray +#define rudder_input_drArray aircraft_->rudder_input_drArray +#define rudder_input_ntime aircraft_->rudder_input_ntime +#define rudder_input_startTime aircraft_->rudder_input_startTime + + bool pilot_elev_no; +#define pilot_elev_no aircraft_->pilot_elev_no + bool pilot_elev_no_check; +#define pilot_elev_no_check aircraft_->pilot_elev_no_check + + bool pilot_ail_no; +#define pilot_ail_no aircraft_->pilot_ail_no + bool pilot_ail_no_check; +#define pilot_ail_no_check aircraft_->pilot_ail_no_check + + bool pilot_rud_no; +#define pilot_rud_no aircraft_->pilot_rud_no + bool pilot_rud_no_check; +#define pilot_rud_no_check aircraft_->pilot_rud_no_check + /* Variables (token2) ===========================================*/ /* controlsMixer = Control mixer ================================*/ @@ -487,6 +593,19 @@ typedef struct double simpleSingleMaxThrust; #define simpleSingleMaxThrust aircraft_->simpleSingleMaxThrust + bool Throttle_pct_input; + string Throttle_pct_input_file; + double Throttle_pct_input_timeArray[1000]; + double Throttle_pct_input_dTArray[1000]; + int Throttle_pct_input_ntime; + double Throttle_pct_input_startTime; +#define Throttle_pct_input aircraft_->Throttle_pct_input +#define Throttle_pct_input_file aircraft_->Throttle_pct_input_file +#define Throttle_pct_input_timeArray aircraft_->Throttle_pct_input_timeArray +#define Throttle_pct_input_dTArray aircraft_->Throttle_pct_input_dTArray +#define Throttle_pct_input_ntime aircraft_->Throttle_pct_input_ntime +#define Throttle_pct_input_startTime aircraft_->Throttle_pct_input_startTime + /* Variables (token2) ===========================================*/ /* CD ============ Aerodynamic x-force quantities (longitudinal) */ @@ -648,6 +767,16 @@ typedef struct #define CZ_deb2 aircraft_->CZ_deb2 #define CZ_df aircraft_->CZ_df #define CZ_adf aircraft_->CZ_adf + string CZfa; + double CZfa_aArray[100]; + double CZfa_CZArray[100]; + int CZfa_nAlpha; + double CZfaI; +#define CZfa aircraft_->CZfa +#define CZfa_aArray aircraft_->CZfa_aArray +#define CZfa_CZArray aircraft_->CZfa_CZArray +#define CZfa_nAlpha aircraft_->CZfa_nAlpha +#define CZfaI aircraft_->CZfaI /* Variables (token2) ===========================================*/ @@ -1048,6 +1177,47 @@ typedef struct #define Cn_b3_clean aircraft_->Cn_b3_clean + //321654 + /* Variables (token2) ===========================================*/ + /* fog =========== Fog field quantities ======================== */ + + map fog_map; +#define fog_map aircraft_->fog_map + + bool fog_field; + int fog_segments; + int fog_point_index; + double *fog_time; + int *fog_value; + double fog_next_time; + int fog_current_segment; + + int Fog; + + AIRCRAFT() + { + fog_field = false; + fog_segments = 0; + fog_point_index = -1; + fog_time = NULL; + fog_value = NULL; + fog_next_time = 0.0; + fog_current_segment = 0; + Fog = 0; + }; + +#define fog_field aircraft_->fog_field +#define fog_segments aircraft_->fog_segments +#define fog_point_index aircraft_->fog_point_index +#define fog_time aircraft_->fog_time +#define fog_value aircraft_->fog_value +#define fog_next_time aircraft_->fog_next_time +#define fog_current_segment aircraft_->fog_current_segment + +#define Fog aircraft_->Fog + + + /* Variables (token2) ===========================================*/ /* record ======== Record desired quantites to file =============*/ @@ -1169,7 +1339,7 @@ typedef struct #define fout aircraft_->fout -} AIRCRAFT; +}; extern AIRCRAFT *aircraft_; // usually defined in the first program that includes uiuc_aircraft.h diff --git a/src/FDM/UIUCModel/uiuc_coef_lift.cpp b/src/FDM/UIUCModel/uiuc_coef_lift.cpp index 036e54f30..9eb54c264 100644 --- a/src/FDM/UIUCModel/uiuc_coef_lift.cpp +++ b/src/FDM/UIUCModel/uiuc_coef_lift.cpp @@ -19,11 +19,13 @@ ---------------------------------------------------------------------- HISTORY: 04/15/2000 initial release + 06/18/2001 (RD) Added CZfa ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters ---------------------------------------------------------------------- @@ -387,6 +389,15 @@ void uiuc_coef_lift() CZ += CZ_adf * Alpha * flap; break; } + case CZfa_flag: + { + CZfaI = uiuc_1Dinterpolation(CZfa_aArray, + CZfa_CZArray, + CZfa_nAlpha, + Alpha); + CZ += CZfaI; + break; + } }; } // end CL map diff --git a/src/FDM/UIUCModel/uiuc_coefficients.cpp b/src/FDM/UIUCModel/uiuc_coefficients.cpp index 260f7c471..7aa06ab3b 100644 --- a/src/FDM/UIUCModel/uiuc_coefficients.cpp +++ b/src/FDM/UIUCModel/uiuc_coefficients.cpp @@ -28,11 +28,17 @@ Cnfada, and Cnfbetadr switches 04/15/2000 (JS) broke up into multiple uiuc_coef_xxx functions + 06/18/2001 (RD) Added initialization of Alpha and + Beta. Added aileron_input and rudder_input. + Added pilot_elev_no, pilot_ail_no, and + pilot_rud_no. + 07/05/2001 (RD) Added pilot_(elev,ail,rud)_no=false ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters ---------------------------------------------------------------------- @@ -93,6 +99,14 @@ void uiuc_coefficients() { + double l_trim, l_defl; + + if (Alpha_init_true && Simtime==0) + Alpha = Alpha_init; + + if (Beta_init_true && Simtime==0) + Beta = Beta_init; + // calculate rate derivative nondimensionalization factors // check if speed is sufficient to compute dynamic pressure terms if (nondim_rate_V_rel_wind) // c172_aero uses V_rel_wind @@ -132,8 +146,11 @@ void uiuc_coefficients() uiuc_ice_eta(); } - // check to see if phugoid mode engaged - if (elevator_step || elevator_singlet || elevator_doublet || elevator_input) + // check to see if data files are used for control deflections + pilot_elev_no = false; + pilot_ail_no = false; + pilot_rud_no = false; + if (elevator_step || elevator_singlet || elevator_doublet || elevator_input || aileron_input || rudder_input) { uiuc_controlInput(); } @@ -150,6 +167,36 @@ void uiuc_coefficients() uiuc_coef_roll(); uiuc_coef_yaw(); + if (pilot_ail_no) + { + if (aileron <=0) + Lat_control = - aileron / damax * RAD_TO_DEG; + else + Lat_control = - aileron / damin * RAD_TO_DEG; + } + + if (pilot_elev_no) + { + l_trim = elevator_tab; + l_defl = elevator - elevator_tab; + if (l_trim <=0 ) + Long_trim = l_trim / demax * RAD_TO_DEG; + else + Long_trim = l_trim / demin * RAD_TO_DEG; + if (l_defl <= 0) + Long_control = l_defl / demax * RAD_TO_DEG; + else + Long_control = l_defl / demin * RAD_TO_DEG; + } + + if (pilot_rud_no) + { + if (rudder <=0) + Rudder_pedal = - rudder / drmax * RAD_TO_DEG; + else + Rudder_pedal = - rudder / drmin * RAD_TO_DEG; + } + return; } diff --git a/src/FDM/UIUCModel/uiuc_coefficients.h b/src/FDM/UIUCModel/uiuc_coefficients.h index 1036aedca..96bcb5444 100644 --- a/src/FDM/UIUCModel/uiuc_coefficients.h +++ b/src/FDM/UIUCModel/uiuc_coefficients.h @@ -10,6 +10,8 @@ #include "uiuc_coef_roll.h" #include "uiuc_coef_yaw.h" #include +#include /*Long_control,Lat_control,Rudder_pedal */ +#include /* RAD_TO_DEG, DEG_TO_RAD*/ void uiuc_coefficients(); diff --git a/src/FDM/UIUCModel/uiuc_controlInput.cpp b/src/FDM/UIUCModel/uiuc_controlInput.cpp index 073e75783..40a89f27e 100644 --- a/src/FDM/UIUCModel/uiuc_controlInput.cpp +++ b/src/FDM/UIUCModel/uiuc_controlInput.cpp @@ -18,10 +18,15 @@ ---------------------------------------------------------------------- HISTORY: 04/08/2000 initial release + 06/18/2001 (RD) Added aileron_input and rudder_input + 07/05/2001 (RD) Code added to allow the pilot to fly + aircraft after the control surface input + files have been used. ---------------------------------------------------------------------- AUTHOR(S): Jeff Scott + Robert Deters ---------------------------------------------------------------------- @@ -115,6 +120,11 @@ void uiuc_controlInput() Simtime <= (elevator_input_startTime + elevator_input_endTime)) { double time = Simtime - elevator_input_startTime; + if (pilot_elev_no_check) + { + elevator = 0 + elevator_tab; + pilot_elev_no = true; + } elevator = elevator + uiuc_1Dinterpolation(elevator_input_timeArray, elevator_input_deArray, @@ -122,6 +132,51 @@ void uiuc_controlInput() time); } } + + // aileron input + if (aileron_input) + { + double aileron_input_endTime = aileron_input_timeArray[aileron_input_ntime]; + if (Simtime >= aileron_input_startTime && + Simtime <= (aileron_input_startTime + aileron_input_endTime)) + { + double time = Simtime - aileron_input_startTime; + if (pilot_ail_no_check) + { + aileron = 0; + if (Simtime==0) //7-25-01 (RD) Added because + pilot_ail_no = false; //segmentation fault is given + else //with FG 0.7.8 + pilot_ail_no = true; + } + aileron = aileron + + uiuc_1Dinterpolation(aileron_input_timeArray, + aileron_input_daArray, + aileron_input_ntime, + time); + } + } + + // rudder input + if (rudder_input) + { + double rudder_input_endTime = rudder_input_timeArray[rudder_input_ntime]; + if (Simtime >= rudder_input_startTime && + Simtime <= (rudder_input_startTime + rudder_input_endTime)) + { + double time = Simtime - rudder_input_startTime; + if (pilot_rud_no_check) + { + rudder = 0; + pilot_rud_no = true; + } + rudder = rudder + + uiuc_1Dinterpolation(rudder_input_timeArray, + rudder_input_drArray, + rudder_input_ntime, + time); + } + } return; } diff --git a/src/FDM/UIUCModel/uiuc_engine.cpp b/src/FDM/UIUCModel/uiuc_engine.cpp index 8f2e3e96a..b8a8e855d 100644 --- a/src/FDM/UIUCModel/uiuc_engine.cpp +++ b/src/FDM/UIUCModel/uiuc_engine.cpp @@ -19,11 +19,13 @@ ---------------------------------------------------------------------- HISTORY: 01/30/2000 initial release + 06/18/2001 (RD) Added Throttle_pct_input. ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters Michael Selig ---------------------------------------------------------------------- @@ -80,6 +82,20 @@ void uiuc_engine() stack command_list; string linetoken1; string linetoken2; + + if (Throttle_pct_input) + { + double Throttle_pct_input_endTime = Throttle_pct_input_timeArray[Throttle_pct_input_ntime]; + if (Simtime >= Throttle_pct_input_startTime && + Simtime <= (Throttle_pct_input_startTime + Throttle_pct_input_endTime)) + { + double time = Simtime - Throttle_pct_input_startTime; + Throttle_pct = uiuc_1Dinterpolation(Throttle_pct_input_timeArray, + Throttle_pct_input_dTArray, + Throttle_pct_input_ntime, + time); + } + } Throttle[3] = Throttle_pct; diff --git a/src/FDM/UIUCModel/uiuc_engine.h b/src/FDM/UIUCModel/uiuc_engine.h index 3485349be..f24dd3c19 100644 --- a/src/FDM/UIUCModel/uiuc_engine.h +++ b/src/FDM/UIUCModel/uiuc_engine.h @@ -2,8 +2,19 @@ #define _ENGINE_H_ #include "uiuc_aircraft.h" +#include "uiuc_1Dinterpolation.h" #include #include +#ifdef __cplusplus +extern "C" { +#endif + +extern double Simtime; + +#ifdef __cplusplus +} +#endif + void uiuc_engine(); #endif // _ENGINE_H_ diff --git a/src/FDM/UIUCModel/uiuc_fog.cpp b/src/FDM/UIUCModel/uiuc_fog.cpp new file mode 100644 index 000000000..0f471f59f --- /dev/null +++ b/src/FDM/UIUCModel/uiuc_fog.cpp @@ -0,0 +1,114 @@ +/********************************************************************** + + FILENAME: uiuc_fog.cpp + +---------------------------------------------------------------------- + + DESCRIPTION: changes Fog variable to +/-1 or 0 using fog + parameters and Simtime + +---------------------------------------------------------------------- + + STATUS: alpha version + +---------------------------------------------------------------------- + + REFERENCES: + +---------------------------------------------------------------------- + + HISTORY: 05/20/2001 initial release + +---------------------------------------------------------------------- + + AUTHOR(S): Michael Savchenko + +---------------------------------------------------------------------- + + VARIABLES: + +---------------------------------------------------------------------- + + INPUTS: -Simtime + -Fog + -fog_field + -fog_next_time + -fog_current_segment + -fog_value + -fog_time + +---------------------------------------------------------------------- + + OUTPUTS: -Fog + -fog_field + -fog_next_time + -fog_current_segment + +---------------------------------------------------------------------- + + CALLED BY: uiuc_wrapper + +---------------------------------------------------------------------- + + CALLS TO: none + +---------------------------------------------------------------------- + + COPYRIGHT: (C) 2000 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_fog.h" + +void uiuc_fog() +{ + if (Simtime >= fog_next_time) + { + if (fog_current_segment != 0) + { + if (fog_value[fog_current_segment] > fog_value[fog_current_segment-1]) + Fog = 1; + else if (fog_value[fog_current_segment] < fog_value[fog_current_segment-1]) + Fog = -1; + else + Fog = 0; + } + else + Fog = 0; + + if (Simtime > fog_time[fog_current_segment]) { + if (fog_current_segment == fog_segments) + { + fog_field = false; + Fog = 0; + return; + } + else + fog_current_segment++; } + + if (fog_value[fog_current_segment] == fog_value[fog_current_segment-1]) + fog_next_time = fog_time[fog_current_segment]; + else + fog_next_time += (fog_time[fog_current_segment]-fog_time[fog_current_segment-1]) / abs(fog_value[fog_current_segment]-fog_value[fog_current_segment-1]); + } + else + Fog = 0; + + return; +} + diff --git a/src/FDM/UIUCModel/uiuc_fog.h b/src/FDM/UIUCModel/uiuc_fog.h new file mode 100644 index 000000000..84836723c --- /dev/null +++ b/src/FDM/UIUCModel/uiuc_fog.h @@ -0,0 +1,18 @@ +#ifndef _FOG_H_ +#define _FOG_H_ + +#include "uiuc_aircraft.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern double Simtime; + +#ifdef __cplusplus +} +#endif + +void uiuc_fog(); + +#endif // _FOG_H_ diff --git a/src/FDM/UIUCModel/uiuc_initializemaps.cpp b/src/FDM/UIUCModel/uiuc_initializemaps.cpp index 8e58d78d2..93a89f65a 100644 --- a/src/FDM/UIUCModel/uiuc_initializemaps.cpp +++ b/src/FDM/UIUCModel/uiuc_initializemaps.cpp @@ -84,6 +84,7 @@ void uiuc_initializemaps() uiuc_map_Croll(); uiuc_map_Cn(); uiuc_map_gear(); + uiuc_map_fog(); uiuc_map_ice(); uiuc_map_record1(); uiuc_map_record2(); diff --git a/src/FDM/UIUCModel/uiuc_initializemaps.h b/src/FDM/UIUCModel/uiuc_initializemaps.h index 86dfec159..69741b250 100644 --- a/src/FDM/UIUCModel/uiuc_initializemaps.h +++ b/src/FDM/UIUCModel/uiuc_initializemaps.h @@ -16,6 +16,7 @@ #include "uiuc_map_Cn.h" #include "uiuc_map_ice.h" #include "uiuc_map_gear.h" +#include "uiuc_map_fog.h" #include "uiuc_map_record1.h" #include "uiuc_map_record2.h" #include "uiuc_map_record3.h" diff --git a/src/FDM/UIUCModel/uiuc_map_CL.cpp b/src/FDM/UIUCModel/uiuc_map_CL.cpp index 18057b4ae..78dcc0590 100644 --- a/src/FDM/UIUCModel/uiuc_map_CL.cpp +++ b/src/FDM/UIUCModel/uiuc_map_CL.cpp @@ -17,11 +17,13 @@ ---------------------------------------------------------------------- HISTORY: 04/08/2000 initial release + 06/18/2001 Added CZfa ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters ---------------------------------------------------------------------- @@ -88,6 +90,7 @@ void uiuc_map_CL() CL_map["CZ_deb2"] = CZ_deb2_flag ; CL_map["CZ_df"] = CZ_df_flag ; CL_map["CZ_adf"] = CZ_adf_flag ; + CL_map["CZfa"] = CZfa_flag ; } // end uiuc_map_CL.cpp diff --git a/src/FDM/UIUCModel/uiuc_map_controlSurface.cpp b/src/FDM/UIUCModel/uiuc_map_controlSurface.cpp index ff5b4ea14..9935d734a 100644 --- a/src/FDM/UIUCModel/uiuc_map_controlSurface.cpp +++ b/src/FDM/UIUCModel/uiuc_map_controlSurface.cpp @@ -17,11 +17,15 @@ ---------------------------------------------------------------------- HISTORY: 04/08/2000 initial release + 06/18/2001 Added aileron_input, rudder_input, + pilot_elev_no, pilot_ail_no, and + pilot_rud_no ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters ---------------------------------------------------------------------- @@ -78,6 +82,11 @@ void uiuc_map_controlSurface() controlSurface_map["elevator_singlet"] = elevator_singlet_flag ; controlSurface_map["elevator_doublet"] = elevator_doublet_flag ; controlSurface_map["elevator_input"] = elevator_input_flag ; + controlSurface_map["aileron_input"] = aileron_input_flag ; + controlSurface_map["rudder_input"] = rudder_input_flag ; + 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 ; } // end uiuc_map_controlSurface.cpp diff --git a/src/FDM/UIUCModel/uiuc_map_engine.cpp b/src/FDM/UIUCModel/uiuc_map_engine.cpp index 79465d1df..c18a2fe67 100644 --- a/src/FDM/UIUCModel/uiuc_map_engine.cpp +++ b/src/FDM/UIUCModel/uiuc_map_engine.cpp @@ -17,11 +17,13 @@ ---------------------------------------------------------------------- HISTORY: 04/08/2000 initial release + 06/18/2001 (RD) Added Throttle_pct_input ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters ---------------------------------------------------------------------- @@ -71,6 +73,7 @@ void uiuc_map_engine() engine_map["simpleSingle"] = simpleSingle_flag ; engine_map["c172"] = c172_flag ; engine_map["cherokee"] = cherokee_flag ; + engine_map["Throttle_pct_input"]= Throttle_pct_input_flag ; } // end uiuc_map_engine.cpp diff --git a/src/FDM/UIUCModel/uiuc_map_fog.cpp b/src/FDM/UIUCModel/uiuc_map_fog.cpp new file mode 100644 index 000000000..ed76fa8c8 --- /dev/null +++ b/src/FDM/UIUCModel/uiuc_map_fog.cpp @@ -0,0 +1,76 @@ +/********************************************************************** + + FILENAME: uiuc_map_fog.cpp + +---------------------------------------------------------------------- + + DESCRIPTION: initializes the fog map + +---------------------------------------------------------------------- + + STATUS: alpha version + +---------------------------------------------------------------------- + + REFERENCES: + +---------------------------------------------------------------------- + + HISTORY: 05/20/2001 initial release + +---------------------------------------------------------------------- + + AUTHOR(S): Michael Savchenko + +---------------------------------------------------------------------- + + VARIABLES: + +---------------------------------------------------------------------- + + INPUTS: none + +---------------------------------------------------------------------- + + OUTPUTS: none + +---------------------------------------------------------------------- + + CALLED BY: uiuc_initializemaps.cpp + +---------------------------------------------------------------------- + + CALLS TO: none + +---------------------------------------------------------------------- + + COPYRIGHT: (C) 2000 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_map_fog.h" + + +void uiuc_map_fog() +{ + fog_map["fog_segments"] = fog_segments_flag ; + fog_map["fog_point"] = fog_point_flag ; + +} + +// end uiuc_map_fog.cpp diff --git a/src/FDM/UIUCModel/uiuc_map_fog.h b/src/FDM/UIUCModel/uiuc_map_fog.h new file mode 100644 index 000000000..8ed7fb488 --- /dev/null +++ b/src/FDM/UIUCModel/uiuc_map_fog.h @@ -0,0 +1,10 @@ +//321654 + +#ifndef _MAP_FOG_H_ +#define _MAP_FOG_H_ + +#include "uiuc_aircraft.h" + +void uiuc_map_fog(); + +#endif // _MAP_FOG_H_ diff --git a/src/FDM/UIUCModel/uiuc_map_init.cpp b/src/FDM/UIUCModel/uiuc_map_init.cpp index df32532e0..8f2a8f9d0 100644 --- a/src/FDM/UIUCModel/uiuc_map_init.cpp +++ b/src/FDM/UIUCModel/uiuc_map_init.cpp @@ -17,11 +17,14 @@ ---------------------------------------------------------------------- HISTORY: 04/08/2000 initial release + 06/18/2001 (RD) Added Alpha, Beta, U_body + V_body, and W_body. ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters ---------------------------------------------------------------------- @@ -89,6 +92,11 @@ void uiuc_map_init() init_map["recordStartTime"] = recordStartTime_flag ; init_map["nondim_rate_V_rel_wind"]= nondim_rate_V_rel_wind_flag; init_map["dyn_on_speed"] = dyn_on_speed_flag ; + init_map["Alpha"] = Alpha_flag ; + init_map["Beta"] = Beta_flag ; + init_map["U_body"] = U_body_flag ; + init_map["V_body"] = V_body_flag ; + init_map["W_body"] = W_body_flag ; } // end uiuc_map_init.cpp diff --git a/src/FDM/UIUCModel/uiuc_map_keyword.cpp b/src/FDM/UIUCModel/uiuc_map_keyword.cpp index aaf98b02f..77dcad76b 100644 --- a/src/FDM/UIUCModel/uiuc_map_keyword.cpp +++ b/src/FDM/UIUCModel/uiuc_map_keyword.cpp @@ -83,6 +83,7 @@ void uiuc_map_keyword() Keyword_map["ice"] = ice_flag ; Keyword_map["record"] = record_flag ; Keyword_map["misc"] = misc_flag ; + Keyword_map["fog"] = fog_flag ; } // end uiuc_map_keyword.cpp diff --git a/src/FDM/UIUCModel/uiuc_menu.cpp b/src/FDM/UIUCModel/uiuc_menu.cpp index 34ee6626e..4d8529fd9 100644 --- a/src/FDM/UIUCModel/uiuc_menu.cpp +++ b/src/FDM/UIUCModel/uiuc_menu.cpp @@ -42,11 +42,26 @@ maps; added zero_Long_trim to controlSurface map 03/09/2001 (DPM) added support for gear. + 06/18/2001 (RD) Added Alpha, Beta, U_body, + V_body, and W_body to init map. Added + aileron_input, rudder_input, pilot_elev_no, + pilot_ail_no, and pilot_rud_no to + controlSurface map. Added Throttle_pct_input + to engine map. Added CZfa to CL map. + 07/05/2001 (RD) Changed pilot_elev_no = true to pilot_ + elev_no_check=false. This is to allow pilot + to fly aircraft after input files have been + used. + 08/27/2001 (RD) Added xxx_init_true and xxx_init for + P_body, Q_body, R_body, Phi, Theta, Psi, + U_body, V_body, and W_body to help in + starting the A/C at an initial condition. ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal Jeff Scott + Robert Deters Michael Selig David Megginson @@ -309,8 +324,9 @@ void uiuc_menu( string aircraft_name ) token3 >> token_value; else uiuc_warnings_errors(1, *command_line); - - P_body = token_value; + + P_body_init_true = true; + P_body_init = token_value; initParts -> storeCommands (*command_line); break; } @@ -321,7 +337,8 @@ void uiuc_menu( string aircraft_name ) else uiuc_warnings_errors(1, *command_line); - Q_body = token_value; + Q_body_init_true = true; + Q_body_init = token_value; initParts -> storeCommands (*command_line); break; } @@ -332,7 +349,8 @@ void uiuc_menu( string aircraft_name ) else uiuc_warnings_errors(1, *command_line); - R_body = token_value; + R_body_init_true = true; + R_body_init = token_value; initParts -> storeCommands (*command_line); break; } @@ -343,7 +361,8 @@ void uiuc_menu( string aircraft_name ) else uiuc_warnings_errors(1, *command_line); - Phi = token_value; + Phi_init_true = true; + Phi_init = token_value; initParts -> storeCommands (*command_line); break; } @@ -354,7 +373,8 @@ void uiuc_menu( string aircraft_name ) else uiuc_warnings_errors(1, *command_line); - Theta = token_value; + Theta_init_true = true; + Theta_init = token_value; initParts -> storeCommands (*command_line); break; } @@ -365,7 +385,8 @@ void uiuc_menu( string aircraft_name ) else uiuc_warnings_errors(1, *command_line); - Psi = token_value; + Psi_init_true = true; + Psi_init = token_value; initParts -> storeCommands (*command_line); break; } @@ -412,6 +433,61 @@ void uiuc_menu( string aircraft_name ) dyn_on_speed = 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; + } default: { uiuc_warnings_errors(2, *command_line); @@ -693,6 +769,53 @@ void uiuc_menu( string aircraft_name ) elevator_input_startTime = token_value; break; } + case aileron_input_flag: + { + aileron_input = true; + aileron_input_file = 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 = 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 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; + } default: { uiuc_warnings_errors(2, *command_line); @@ -809,6 +932,22 @@ void uiuc_menu( string aircraft_name ) engineParts -> storeCommands (*command_line); break; } + case Throttle_pct_input_flag: + { + Throttle_pct_input = true; + Throttle_pct_input_file = 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; + } default: { uiuc_warnings_errors(2, *command_line); @@ -1439,6 +1578,24 @@ void uiuc_menu( string aircraft_name ) aeroLiftParts -> storeCommands (*command_line); break; } + case CZfa_flag: + { + CZfa = 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; + } default: { uiuc_warnings_errors(2, *command_line); @@ -2922,7 +3079,74 @@ void uiuc_menu( string aircraft_name ) }; break; } // end ice map - + + + case fog_flag: + { + 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: + { + uiuc_warnings_errors(2, *command_line); + break; + } + }; + break; + } // end fog map + + + + + case record_flag: { diff --git a/src/FDM/UIUCModel/uiuc_wrapper.cpp b/src/FDM/UIUCModel/uiuc_wrapper.cpp index bd9049ccd..9984ef7d5 100644 --- a/src/FDM/UIUCModel/uiuc_wrapper.cpp +++ b/src/FDM/UIUCModel/uiuc_wrapper.cpp @@ -19,10 +19,16 @@ HISTORY: 01/26/2000 initial release 03/09/2001 (DPM) added support for gear + 06/18/2001 (RD) Made uiuc_recorder its own routine. + 07/19/2001 (RD) Added uiuc_vel_init() to initialize + the velocities. + 08/27/2001 (RD) Added uiuc_initial_init() to help + in starting an A/C at an initial condition ---------------------------------------------------------------------- AUTHOR(S): Bipin Sehgal + Robert Deters David Megginson ---------------------------------------------------------------------- @@ -66,6 +72,13 @@ **********************************************************************/ #include +#include + +#ifndef FG_OLD_WEATHER +#include +#else +#include +#endif #include "uiuc_aircraft.h" #include "uiuc_aircraftdir.h" @@ -77,6 +90,8 @@ #include "uiuc_menu.h" #include "uiuc_betaprobe.h" #include +#include "Main/simple_udp.h" +#include "uiuc_fog.h" //321654 #if !defined (SG_HAVE_NATIVE_SGI_COMPILERS) SG_USING_STD(cout); @@ -87,10 +102,73 @@ extern "C" void uiuc_init_aeromodel (); extern "C" void uiuc_force_moment(double dt); extern "C" void uiuc_engine_routine(); extern "C" void uiuc_gear_routine(); +extern "C" void uiuc_record_routine(double dt); +extern "C" void uiuc_vel_init (); +extern "C" void uiuc_initial_init (); AIRCRAFT *aircraft_ = new AIRCRAFT; AIRCRAFTDIR *aircraftdir_ = new AIRCRAFTDIR; +SendArray testarray(4950); + +/* Convert float to string */ +string ftoa(double in) +{ + static char temp[20]; + sprintf(temp,"%g",in); + return (string)temp; +} + +void uiuc_initial_init () +{ + if (P_body_init_true) + P_body = P_body_init; + if (Q_body_init_true) + Q_body = Q_body_init; + if (R_body_init_true) + R_body = R_body_init; + + if (Phi_init_true) + Phi = Phi_init; + if (Theta_init_true) + Theta = Theta_init; + if (Psi_init_true) + Psi = Psi_init; + + if (U_body_init_true) + U_body = U_body_init; + if (V_body_init_true) + V_body = V_body_init; + if (W_body_init_true) + W_body = W_body_init; + +} + +void uiuc_vel_init () +{ + if (U_body_init_true && V_body_init_true && W_body_init_true) + { + double det_T_l_to_b, cof11, cof12, cof13, cof21, cof22, cof23, cof31, cof32, cof33; + + det_T_l_to_b = T_local_to_body_11*(T_local_to_body_22*T_local_to_body_33-T_local_to_body_23*T_local_to_body_32) - T_local_to_body_12*(T_local_to_body_21*T_local_to_body_33-T_local_to_body_23*T_local_to_body_31) + T_local_to_body_13*(T_local_to_body_21*T_local_to_body_32-T_local_to_body_22*T_local_to_body_31); + cof11 = T_local_to_body_22 * T_local_to_body_33 - T_local_to_body_23 * T_local_to_body_32; + cof12 = T_local_to_body_23 * T_local_to_body_31 - T_local_to_body_21 * T_local_to_body_33; + cof13 = T_local_to_body_21 * T_local_to_body_32 - T_local_to_body_22 * T_local_to_body_31; + cof21 = T_local_to_body_13 * T_local_to_body_32 - T_local_to_body_12 * T_local_to_body_33; + cof22 = T_local_to_body_11 * T_local_to_body_33 - T_local_to_body_13 * T_local_to_body_31; + cof23 = T_local_to_body_12 * T_local_to_body_31 - T_local_to_body_11 * T_local_to_body_32; + cof31 = T_local_to_body_12 * T_local_to_body_23 - T_local_to_body_13 * T_local_to_body_22; + cof32 = T_local_to_body_13 * T_local_to_body_21 - T_local_to_body_11 * T_local_to_body_23; + cof33 = T_local_to_body_11 * T_local_to_body_22 - T_local_to_body_12 * T_local_to_body_21; + + V_north = (cof11*U_body+cof21*V_body+cof31*W_body)/det_T_l_to_b; + V_east_rel_ground = (cof12*U_body+cof22*V_body+cof32*W_body)/det_T_l_to_b; + V_down = (cof13*U_body+cof23*V_body+cof33*W_body)/det_T_l_to_b; + + V_east = V_east_rel_ground + OMEGA_EARTH*Sea_level_radius*cos(Lat_geocentric); + } +} + void uiuc_init_aeromodel () { string aircraft; @@ -133,9 +211,57 @@ void uiuc_force_moment(double dt) M_m_aero = Cm * qScbar; M_n_aero = Cn * qSb; - /* Call fligt data recorder */ - if (Simtime >= recordStartTime) - uiuc_recorder(dt); + /* Call flight data recorder */ + // if (Simtime >= recordStartTime) + // uiuc_recorder(dt); + + + // fog field update + Fog = 0; + if (fog_field) + uiuc_fog(); + + double vis; + if (Fog != 0) + { + #ifndef FG_OLD_WEATHER + vis = WeatherDatabase->getWeatherVisibility(); + if (Fog > 0) + vis /= 1.01; + else + vis *= 1.01; + WeatherDatabase->setWeatherVisibility( vis ); + #else + vis = current_weather->get_visibility(); + if (Fog > 0) + vis /= 1.01; + else + vis *= 1.01; + current_weather->set_visibility( vis ); + #endif + } + + + /* Send data on the network to the Glass Cockpit */ + + string input=""; + + input += " stick_right " + ftoa(Lat_control); + input += " rudder_left " + ftoa(-Rudder_pedal); + input += " stick_forward " + ftoa(Long_control); + input += " stick_trim_forward " + ftoa(Long_trim); + input += " vehicle_pitch " + ftoa(Theta * 180.0 / 3.14); + input += " vehicle_roll " + ftoa(Phi * 180.0 / 3.14); + input += " vehicle_speed " + ftoa(V_rel_wind); + input += " throttle_forward " + ftoa(Throttle_pct); + input += " altitude " + ftoa(Altitude); + input += " climb_rate " + ftoa(-1.0*V_down_rel_ground); + + testarray.getHello(); + testarray.sendData(input); + + /* End of Networking */ + } void uiuc_engine_routine() @@ -148,4 +274,9 @@ void uiuc_gear_routine () uiuc_gear(); } +void uiuc_record_routine(double dt) +{ + if (Simtime >= recordStartTime) + uiuc_recorder(dt); +} //end uiuc_wrapper.cpp diff --git a/src/FDM/UIUCModel/uiuc_wrapper.h b/src/FDM/UIUCModel/uiuc_wrapper.h index 1a4896829..c19d9356c 100644 --- a/src/FDM/UIUCModel/uiuc_wrapper.h +++ b/src/FDM/UIUCModel/uiuc_wrapper.h @@ -3,3 +3,6 @@ void uiuc_init_aeromodel (); void uiuc_force_moment(double dt); void uiuc_engine_routine(); void uiuc_gear_routine(); +void uiuc_record_routine(double dt); +void uiuc_vel_init (); +void uiuc_initial_init (); -- 2.39.5