MCPcopy Create free account
hub / github.com/JSBSim-Team/jsbsim / Load_v2

Method Load_v2

src/initialization/FGInitialCondition.cpp:1205–1449  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1203//******************************************************************************
1204
1205bool FGInitialCondition::Load_v2(Element* document)
1206{
1207 FGColumnVector3 vOrient;
1208 bool result = true;
1209
1210 // support both earth_position_angle and planet_position_angle, for now.
1211 if (document->FindElement("earth_position_angle"))
1212 epa = document->FindElementValueAsNumberConvertTo("earth_position_angle", "RAD");
1213 if (document->FindElement("planet_position_angle"))
1214 epa = document->FindElementValueAsNumberConvertTo("planet_position_angle", "RAD");
1215
1216 // Calculate the inertial to ECEF matrices
1217 FGMatrix33 Ti2ec(cos(epa), sin(epa), 0.0,
1218 -sin(epa), cos(epa), 0.0,
1219 0.0, 0.0, 1.0);
1220 FGMatrix33 Tec2i = Ti2ec.Transposed();
1221
1222 if (document->FindElement("planet_rotation_rate")) {
1223 fdmex->GetInertial()->SetOmegaPlanet(document->FindElementValueAsNumberConvertTo("planet_rotation_rate", "RAD"));
1224 fdmex->GetPropagate()->in.vOmegaPlanet = fdmex->GetInertial()->GetOmegaPlanet();
1225 fdmex->GetAccelerations()->in.vOmegaPlanet = fdmex->GetInertial()->GetOmegaPlanet();
1226 }
1227 FGColumnVector3 vOmegaEarth = fdmex->GetInertial()->GetOmegaPlanet();
1228
1229 if (document->FindElement("elevation")) {
1230 fdmex->GetInertial()->SetTerrainElevation(document->FindElementValueAsNumberConvertTo("elevation", "FT"));
1231 }
1232
1233 // Initialize vehicle position
1234 //
1235 // Allowable frames:
1236 // - ECI (Earth Centered Inertial)
1237 // - ECEF (Earth Centered, Earth Fixed)
1238
1239 Element* position_el = document->FindElement("position");
1240 if (position_el) {
1241 string frame = position_el->GetAttributeValue("frame");
1242 frame = to_lower(frame);
1243 if (frame == "eci") { // Need to transform vLoc to ECEF for storage and use in FGLocation.
1244 position = Ti2ec * position_el->FindElementTripletConvertTo("FT");
1245 } else if (frame == "ecef") {
1246 if (!position_el->FindElement("x") && !position_el->FindElement("y") && !position_el->FindElement("z")) {
1247 if (position_el->FindElement("longitude")) {
1248 SetLongitudeRadIC(position_el->FindElementValueAsNumberConvertTo("longitude", "RAD"));
1249 }
1250 if (position_el->FindElement("radius")) {
1251 position.SetRadius(position_el->FindElementValueAsNumberConvertTo("radius", "FT"));
1252 } else if (position_el->FindElement("altitudeAGL")) {
1253 SetAltitudeAGLFtIC(position_el->FindElementValueAsNumberConvertTo("altitudeAGL", "FT"));
1254 } else if (position_el->FindElement("altitudeMSL")) {
1255 SetAltitudeASLFtIC(position_el->FindElementValueAsNumberConvertTo("altitudeMSL", "FT"));
1256 } else {
1257 FGXMLLogging log(position_el, LogLevel::ERROR);
1258 log << " No altitude or radius initial condition is given.\n";
1259 result = false;
1260 }
1261
1262 if (result)

Callers

nothing calls this directly

Calls 15

FindElementMethod · 0.80
GetInertialMethod · 0.80
GetPropagateMethod · 0.80
GetAccelerationsMethod · 0.80
SetTerrainElevationMethod · 0.80
GetAttributeValueMethod · 0.80
NormalizeMethod · 0.80
GetTl2ecMethod · 0.80
InitMatrixMethod · 0.80
MagnitudeMethod · 0.80

Tested by

no test coverage detected