+ SG_LOG( SG_FLIGHT, SG_INFO, "Start common FDM init" );
+
+ set_inited( true );
+
+ stamp();
+ set_remainder( 0 );
+
+ // Set initial position
+ SG_LOG( SG_FLIGHT, SG_INFO, "...initializing position..." );
+ set_Longitude( fgGetDouble("/position/longitude-deg")
+ * SGD_DEGREES_TO_RADIANS );
+ set_Latitude( fgGetDouble("/position/latitude-deg")
+ * SGD_DEGREES_TO_RADIANS );
+ double ground_elev_m = scenery.get_cur_elev();
+ double ground_elev_ft = ground_elev_m * SG_METER_TO_FEET;
+ if ( fgGetBool("/sim/startup/onground")
+ || fgGetDouble("/position/altitude-ft") < ground_elev_ft ) {
+ fgSetDouble("/position/altitude-ft", ground_elev_ft);
+ }
+ set_Altitude( fgGetDouble("/position/altitude-ft") );
+
+ // Set ground elevation
+ SG_LOG( SG_FLIGHT, SG_INFO,
+ "...initializing ground elevation to " << ground_elev_ft
+ << "ft..." );
+ SG_LOG( SG_FLIGHT, SG_INFO, "common_init(): set ground elevation "
+ << ground_elev_ft );
+ base_fdm_state.set_Runway_altitude( ground_elev_ft );
+ set_Runway_altitude( ground_elev_ft );
+
+ // Set sea-level radius
+ SG_LOG( SG_FLIGHT, SG_INFO, "...initializing sea-level radius..." );
+ SG_LOG( SG_FLIGHT, SG_INFO, " lat = "
+ << fgGetDouble("/position/latitude-deg")
+ << " alt = " << fgGetDouble("/position/altitude-ft") );
+ double sea_level_radius_meters;
+ double lat_geoc;
+ sgGeodToGeoc( fgGetDouble("/position/latitude-deg")
+ * SGD_DEGREES_TO_RADIANS,
+ fgGetDouble("/position/altitude-ft") * SG_FEET_TO_METER,
+ &sea_level_radius_meters, &lat_geoc );
+ set_Sea_level_radius( sea_level_radius_meters * SG_METER_TO_FEET );
+
+ // Set initial velocities
+ SG_LOG( SG_FLIGHT, SG_INFO, "...initializing velocities..." );
+ if ( !fgHasNode("/sim/startup/speed-set") ) {
+ set_V_calibrated_kts(0.0);
+ } else {
+ const string speedset = fgGetString("/sim/startup/speed-set");
+ if ( speedset == "knots" || speedset == "KNOTS" ) {
+ set_V_calibrated_kts( fgGetDouble("/velocities/airspeed-kt") );
+ } else if ( speedset == "mach" || speedset == "MACH" ) {
+ set_Mach_number( fgGetDouble("/velocities/mach") );
+ } else if ( speedset == "UVW" || speedset == "uvw" ) {
+ set_Velocities_Wind_Body(
+ fgGetDouble("/velocities/uBody-fps"),
+ fgGetDouble("/velocities/vBody-fps"),
+ fgGetDouble("/velocities/wBody-fps") );
+ } else if ( speedset == "NED" || speedset == "ned" ) {
+ set_Velocities_Local(
+ fgGetDouble("/velocities/speed-north-fps"),
+ fgGetDouble("/velocities/speed-east-fps"),
+ fgGetDouble("/velocities/speed-down-fps") );
+ } else {
+ SG_LOG( SG_FLIGHT, SG_ALERT,
+ "Unrecognized value for /sim/startup/speed-set: "
+ << speedset);
+ set_V_calibrated_kts( 0.0 );
+ }
+ }
+
+ // Set initial Euler angles
+ SG_LOG( SG_FLIGHT, SG_INFO, "...initializing Euler angles..." );
+ set_Euler_Angles( fgGetDouble("/orientation/roll-deg")
+ * SGD_DEGREES_TO_RADIANS,
+ fgGetDouble("/orientation/pitch-deg")
+ * SGD_DEGREES_TO_RADIANS,
+ fgGetDouble("/orientation/heading-deg")
+ * SGD_DEGREES_TO_RADIANS );
+
+ SG_LOG( SG_FLIGHT, SG_INFO, "End common FDM init" );