1 /**********************************************************************
3 FILENAME: uiuc_recorder.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: outputs variables specified in input file to recorder
10 ----------------------------------------------------------------------
14 ----------------------------------------------------------------------
16 REFERENCES: Liberty, Jesse. "Sam's Teach Yourself C++ in 21 Days,"
19 ----------------------------------------------------------------------
21 HISTORY: 01/31/2000 initial release
22 03/02/2000 (JS) added record options for 1D and 2D
23 interpolated variables
24 04/01/2000 (JS) added throttle, longitudinal, lateral,
25 and rudder inputs to record map
26 04/24/2000 (JS) added rest of variables in
29 ----------------------------------------------------------------------
31 AUTHOR(S): Jeff Scott <jscott@mail.com>
33 ----------------------------------------------------------------------
37 ----------------------------------------------------------------------
41 ----------------------------------------------------------------------
43 OUTPUTS: -variables recorded in uiuc_recorder.dat
45 ----------------------------------------------------------------------
47 CALLED BY: uiuc_wrapper.cpp
49 ----------------------------------------------------------------------
53 ----------------------------------------------------------------------
55 COPYRIGHT: (C) 2000 by Michael Selig
57 This program is free software; you can redistribute it and/or
58 modify it under the terms of the GNU General Public License
59 as published by the Free Software Foundation.
61 This program is distributed in the hope that it will be useful,
62 but WITHOUT ANY WARRANTY; without even the implied warranty of
63 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
64 GNU General Public License for more details.
66 You should have received a copy of the GNU General Public License
67 along with this program; if not, write to the Free Software
68 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
69 USA or view http://www.gnu.org/copyleft/gpl.html.
71 **********************************************************************/
73 #include "uiuc_recorder.h"
75 #if !defined (SG_HAVE_NATIVE_SGI_COMPILERS)
76 SG_USING_STD(endl); // -dw
79 void uiuc_recorder( double dt )
84 static int recordStep = 0;
85 string record_variables = "# ";
87 int modulus = recordStep % recordRate;
89 if ((recordStep % recordRate) == 0)
91 command_list = recordParts->getCommands();
95 for (command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
96 record_variables += recordParts->getToken(*command_line,2) + " ";
98 fout << record_variables << endl;
99 for (command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
101 linetoken = recordParts->getToken(*command_line, 2);
103 switch(record_map[linetoken])
105 /************************* Time ************************/
108 fout << Simtime << " ";
117 /************************* Mass ************************/
120 fout << Weight << " ";
149 /*********************** Geometry **********************/
150 case Dx_pilot_record:
152 fout << Dx_pilot << " ";
155 case Dy_pilot_record:
157 fout << Dy_pilot << " ";
160 case Dz_pilot_record:
162 fout << Dz_pilot << " ";
167 fout << Dx_cg << " ";
172 fout << Dy_cg << " ";
177 fout << Dz_cg << " ";
181 /********************** Positions **********************/
182 case Lat_geocentric_record:
184 fout << Lat_geocentric << " ";
187 case Lon_geocentric_record:
189 fout << Lon_geocentric << " ";
192 case Radius_to_vehicle_record:
194 fout << Radius_to_vehicle << " ";
197 case Latitude_record:
199 fout << Latitude << " ";
202 case Longitude_record:
204 fout << Longitude << " ";
207 case Altitude_record:
209 fout << Altitude << " ";
219 fout << Theta << " ";
228 /******************** Accelerations ********************/
229 case V_dot_north_record:
231 fout << V_dot_north << " ";
234 case V_dot_east_record:
236 fout << V_dot_east << " ";
239 case V_dot_down_record:
241 fout << V_dot_down << " ";
244 case U_dot_body_record:
246 fout << U_dot_body << " ";
249 case V_dot_body_record:
251 fout << V_dot_body << " ";
254 case W_dot_body_record:
256 fout << W_dot_body << " ";
259 case A_X_pilot_record:
261 fout << A_X_pilot << " ";
264 case A_Y_pilot_record:
266 fout << A_Y_pilot << " ";
269 case A_Z_pilot_record:
271 fout << A_Z_pilot << " ";
276 fout << A_X_cg << " ";
281 fout << A_Y_cg << " ";
286 fout << A_Z_cg << " ";
289 case N_X_pilot_record:
291 fout << N_X_pilot << " ";
294 case N_Y_pilot_record:
296 fout << N_Y_pilot << " ";
299 case N_Z_pilot_record:
301 fout << N_Z_pilot << " ";
306 fout << N_X_cg << " ";
311 fout << N_Y_cg << " ";
316 fout << N_Z_cg << " ";
319 case P_dot_body_record:
321 fout << P_dot_body << " ";
324 case Q_dot_body_record:
326 fout << Q_dot_body << " ";
329 case R_dot_body_record:
331 fout << R_dot_body << " ";
335 /********************** Velocities *********************/
338 fout << V_north << " ";
343 fout << V_east << " ";
348 fout << V_down << " ";
351 case V_north_rel_ground_record:
353 fout << V_north_rel_ground << " ";
356 case V_east_rel_ground_record:
358 fout << V_east_rel_ground << " ";
361 case V_down_rel_ground_record:
363 fout << V_down_rel_ground << " ";
366 case V_north_airmass_record:
368 fout << V_north_airmass << " ";
371 case V_east_airmass_record:
373 fout << V_east_airmass << " ";
376 case V_down_airmass_record:
378 fout << V_down_airmass << " ";
381 case V_north_rel_airmass_record:
383 fout << V_north_rel_airmass << " ";
386 case V_east_rel_airmass_record:
388 fout << V_east_rel_airmass << " ";
391 case V_down_rel_airmass_record:
393 fout << V_down_rel_airmass << " ";
398 fout << U_gust << " ";
403 fout << V_gust << " ";
408 fout << W_gust << " ";
413 fout << U_body << " ";
418 fout << V_body << " ";
423 fout << W_body << " ";
426 case V_rel_wind_record:
428 fout << V_rel_wind << " ";
431 case V_true_kts_record:
433 fout << V_true_kts << " ";
436 case V_rel_ground_record:
438 fout << V_rel_ground << " ";
441 case V_inertial_record:
443 fout << V_inertial << " ";
446 case V_ground_speed_record:
448 fout << V_ground_speed << " ";
453 fout << V_equiv << " ";
456 case V_equiv_kts_record:
458 fout << V_equiv_kts << " ";
461 case V_calibrated_record:
463 fout << V_calibrated << " ";
466 case V_calibrated_kts_record:
468 fout << V_calibrated_kts << " ";
473 fout << P_local << " ";
478 fout << Q_local << " ";
483 fout << R_local << " ";
488 fout << P_body << " ";
493 fout << Q_body << " ";
498 fout << R_body << " ";
503 fout << P_total << " ";
508 fout << Q_total << " ";
513 fout << R_total << " ";
518 fout << Phi_dot << " ";
521 case Theta_dot_record:
523 fout << Theta_dot << " ";
528 fout << Psi_dot << " ";
531 case Latitude_dot_record:
533 fout << Latitude_dot << " ";
536 case Longitude_dot_record:
538 fout << Longitude_dot << " ";
541 case Radius_dot_record:
543 fout << Radius_dot << " ";
547 /************************ Angles ***********************/
550 fout << Alpha << " ";
553 case Alpha_deg_record:
555 fout << Alpha * RAD_TO_DEG << " ";
558 case Alpha_dot_record:
560 fout << Alpha_dot << " ";
563 case Alpha_dot_deg_record:
565 fout << Alpha_dot * RAD_TO_DEG << " ";
573 case Beta_deg_record:
575 fout << Beta * RAD_TO_DEG << " ";
578 case Beta_dot_record:
580 fout << Beta_dot << " ";
583 case Beta_dot_deg_record:
585 fout << Beta_dot * RAD_TO_DEG << " ";
588 case Gamma_vert_record:
590 fout << Gamma_vert_rad << " ";
593 case Gamma_vert_deg_record:
595 fout << Gamma_vert_rad * RAD_TO_DEG << " ";
598 case Gamma_horiz_record:
600 fout << Gamma_horiz_rad << " ";
603 case Gamma_horiz_deg_record:
605 fout << Gamma_horiz_rad * RAD_TO_DEG << " ";
609 /**************** Atmospheric Properties ***************/
612 fout << Density << " ";
617 fout << V_sound << " ";
620 case Mach_number_record:
622 fout << Mach_number << " ";
625 case Static_pressure_record:
627 fout << Static_pressure << " ";
630 case Total_pressure_record:
632 fout << Total_pressure << " ";
635 case Impact_pressure_record:
637 fout << Impact_pressure << " ";
640 case Dynamic_pressure_record:
642 fout << Dynamic_pressure << " ";
645 case Static_temperature_record:
647 fout << Static_temperature << " ";
650 case Total_temperature_record:
652 fout << Total_temperature << " ";
656 /******************** Earth Properties *****************/
659 fout << Gravity << " ";
662 case Sea_level_radius_record:
664 fout << Sea_level_radius << " ";
667 case Earth_position_angle_record:
669 fout << Earth_position_angle << " ";
672 case Runway_altitude_record:
674 fout << Runway_altitude << " ";
677 case Runway_latitude_record:
679 fout << Runway_latitude << " ";
682 case Runway_longitude_record:
684 fout << Runway_longitude << " ";
687 case Runway_heading_record:
689 fout << Runway_heading << " ";
692 case Radius_to_rwy_record:
694 fout << Radius_to_rwy << " ";
697 case D_pilot_north_of_rwy_record:
699 fout << D_pilot_north_of_rwy << " ";
702 case D_pilot_east_of_rwy_record:
704 fout << D_pilot_east_of_rwy << " ";
707 case D_pilot_above_rwy_record:
709 fout << D_pilot_above_rwy << " ";
712 case X_pilot_rwy_record:
714 fout << X_pilot_rwy << " ";
717 case Y_pilot_rwy_record:
719 fout << Y_pilot_rwy << " ";
722 case H_pilot_rwy_record:
724 fout << H_pilot_rwy << " ";
727 case D_cg_north_of_rwy_record:
729 fout << D_cg_north_of_rwy << " ";
732 case D_cg_east_of_rwy_record:
734 fout << D_cg_east_of_rwy << " ";
737 case D_cg_above_rwy_record:
739 fout << D_cg_above_rwy << " ";
742 case X_cg_rwy_record:
744 fout << X_cg_rwy << " ";
747 case Y_cg_rwy_record:
749 fout << Y_cg_rwy << " ";
752 case H_cg_rwy_record:
754 fout << H_cg_rwy << " ";
758 /********************* Engine Inputs *******************/
759 case Throttle_3_record:
761 fout << Throttle[3] << " ";
764 case Throttle_pct_record:
766 fout << Throttle_pct << " ";
770 /******************** Control Inputs *******************/
771 case Long_control_record:
773 fout << Long_control << " ";
776 case Long_trim_record:
778 fout << Long_trim << " ";
781 case Long_trim_deg_record:
783 fout << Long_trim * RAD_TO_DEG << " ";
786 case elevator_record:
788 fout << elevator << " ";
791 case elevator_deg_record:
793 fout << elevator * RAD_TO_DEG << " ";
796 case Lat_control_record:
798 fout << Long_control << " ";
803 fout << aileron << " ";
806 case aileron_deg_record:
808 fout << aileron * RAD_TO_DEG << " ";
811 case Rudder_pedal_record:
813 fout << Long_control << " ";
818 fout << rudder << " ";
821 case rudder_deg_record:
823 fout << rudder * RAD_TO_DEG << " ";
826 case Flap_handle_record:
836 case flap_deg_record:
838 fout << flap * RAD_TO_DEG << " ";
842 /****************** Aero Coefficients ******************/
850 fout << CDfaI << " ";
855 fout << CDfCLI << " ";
860 fout << CDfadeI << " ";
865 fout << CDfdfI << " ";
870 fout << CDfadfI << " ";
885 fout << CLfaI << " ";
890 fout << CLfadeI << " ";
895 fout << CLfdfI << " ";
900 fout << CLfadfI << " ";
915 fout << CmfaI << " ";
920 fout << CmfadeI << " ";
925 fout << CmfdfI << " ";
930 fout << CmfadfI << " ";
940 fout << CYfadaI << " ";
943 case CYfbetadrI_record:
945 fout << CYfbetadrI << " ";
955 fout << ClfadaI << " ";
958 case ClfbetadrI_record:
960 fout << ClfbetadrI << " ";
970 fout << CnfadaI << " ";
973 case CnfbetadrI_record:
975 fout << CnfbetadrI << " ";
979 /******************** Ice Detection ********************/
980 case CLclean_wing_record:
982 fout << CLclean_wing << " ";
985 case CLiced_wing_record:
987 fout << CLiced_wing << " ";
990 case CLclean_tail_record:
992 fout << CLclean_tail << " ";
995 case CLiced_tail_record:
997 fout << CLiced_tail << " ";
1000 case Lift_clean_wing_record:
1002 fout << Lift_clean_wing << " ";
1005 case Lift_iced_wing_record:
1007 fout << Lift_iced_wing << " ";
1010 case Lift_clean_tail_record:
1012 fout << Lift_clean_tail << " ";
1015 case Lift_iced_tail_record:
1017 fout << Lift_iced_tail << " ";
1020 case Gamma_clean_wing_record:
1022 fout << Gamma_clean_wing << " ";
1025 case Gamma_iced_wing_record:
1027 fout << Gamma_iced_wing << " ";
1030 case Gamma_clean_tail_record:
1032 fout << Gamma_clean_tail << " ";
1035 case Gamma_iced_tail_record:
1037 fout << Gamma_iced_tail << " ";
1040 case w_clean_wing_record:
1042 fout << w_clean_wing << " ";
1045 case w_iced_wing_record:
1047 fout << w_iced_wing << " ";
1050 case w_clean_tail_record:
1052 fout << w_clean_tail << " ";
1055 case w_iced_tail_record:
1057 fout << w_iced_tail << " ";
1060 case V_total_clean_wing_record:
1062 fout << V_total_clean_wing << " ";
1065 case V_total_iced_wing_record:
1067 fout << V_total_iced_wing << " ";
1070 case V_total_clean_tail_record:
1072 fout << V_total_clean_tail << " ";
1075 case V_total_iced_tail_record:
1077 fout << V_total_iced_tail << " ";
1080 case beta_flow_clean_wing_record:
1082 fout << beta_flow_clean_wing << " ";
1085 case beta_flow_clean_wing_deg_record:
1087 fout << beta_flow_clean_wing * RAD_TO_DEG << " ";
1090 case beta_flow_iced_wing_record:
1092 fout << beta_flow_iced_wing << " ";
1095 case beta_flow_iced_wing_deg_record:
1097 fout << beta_flow_iced_wing * RAD_TO_DEG << " ";
1100 case beta_flow_clean_tail_record:
1102 fout << beta_flow_clean_tail << " ";
1105 case beta_flow_clean_tail_deg_record:
1107 fout << beta_flow_clean_tail * RAD_TO_DEG << " ";
1110 case beta_flow_iced_tail_record:
1112 fout << beta_flow_iced_tail << " ";
1115 case beta_flow_iced_tail_deg_record:
1117 fout << beta_flow_iced_tail * RAD_TO_DEG << " ";
1120 case Dbeta_flow_wing_record:
1122 fout << Dbeta_flow_wing << " ";
1125 case Dbeta_flow_wing_deg_record:
1127 fout << Dbeta_flow_wing * RAD_TO_DEG << " ";
1130 case Dbeta_flow_tail_record:
1132 fout << Dbeta_flow_tail << " ";
1135 case Dbeta_flow_tail_deg_record:
1137 fout << Dbeta_flow_tail * RAD_TO_DEG << " ";
1140 case pct_beta_flow_wing_record:
1142 fout << pct_beta_flow_wing << " ";
1145 case pct_beta_flow_tail_record:
1147 fout << pct_beta_flow_tail << " ";
1151 /************************ Forces ***********************/
1152 case F_X_wind_record:
1154 fout << F_X_wind << " ";
1157 case F_Y_wind_record:
1159 fout << F_Y_wind << " ";
1162 case F_Z_wind_record:
1164 fout << F_Z_wind << " ";
1167 case F_X_aero_record:
1169 fout << F_X_aero << " ";
1172 case F_Y_aero_record:
1174 fout << F_Y_aero << " ";
1177 case F_Z_aero_record:
1179 fout << F_Z_aero << " ";
1182 case F_X_engine_record:
1184 fout << F_X_engine << " ";
1187 case F_Y_engine_record:
1189 fout << F_Y_engine << " ";
1192 case F_Z_engine_record:
1194 fout << F_Z_engine << " ";
1197 case F_X_gear_record:
1199 fout << F_X_gear << " ";
1202 case F_Y_gear_record:
1204 fout << F_Y_gear << " ";
1207 case F_Z_gear_record:
1209 fout << F_Z_gear << " ";
1227 case F_north_record:
1229 fout << F_north << " ";
1234 fout << F_east << " ";
1239 fout << F_down << " ";
1243 /*********************** Moments ***********************/
1244 case M_l_aero_record:
1246 fout << M_l_aero << " ";
1249 case M_m_aero_record:
1251 fout << M_m_aero << " ";
1254 case M_n_aero_record:
1256 fout << M_n_aero << " ";
1259 case M_l_engine_record:
1261 fout << M_l_engine << " ";
1264 case M_m_engine_record:
1266 fout << M_m_engine << " ";
1269 case M_n_engine_record:
1271 fout << M_n_engine << " ";
1274 case M_l_gear_record:
1276 fout << M_l_gear << " ";
1279 case M_m_gear_record:
1281 fout << M_m_gear << " ";
1284 case M_n_gear_record:
1286 fout << M_n_gear << " ";
1291 fout << M_l_rp << " ";
1296 fout << M_m_rp << " ";
1301 fout << M_n_rp << " ";
1310 // end uiuc_recorder.cpp