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

Method Load

src/models/FGPropulsion.cpp:352–464  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

350//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
351
352bool FGPropulsion::Load(Element* el)
353{
354 FGModelLoader ModelLoader(this);
355
356 Debug(2);
357 ReadingEngine = false;
358 double FuelDensity = 6.0;
359
360 Name = "Propulsion Model: " + el->GetAttributeValue("name");
361
362 // Perform base class Pre-Load
363 if (!FGModel::Upload(el, true))
364 return false;
365
366 // Process tank definitions first to establish the number of fuel tanks
367
368 Element* tank_element = el->FindElement("tank");
369 unsigned int numTanks = 0;
370
371 while (tank_element) {
372 Tanks.push_back(make_shared<FGTank>(FDMExec, tank_element, numTanks));
373 const auto& tank = Tanks.back();
374 if (tank->GetType() == FGTank::ttFUEL)
375 FuelDensity = tank->GetDensity();
376 else if (tank->GetType() != FGTank::ttOXIDIZER) {
377 FGXMLLogging log(tank_element, LogLevel::ERROR);
378 log << "Unknown tank type specified.\n";
379 return false;
380 }
381 numTanks++;
382 tank_element = el->FindNextElement("tank");
383 }
384
385 ReadingEngine = true;
386 Element* engine_element = el->FindElement("engine");
387 unsigned int numEngines = 0;
388
389 while (engine_element) {
390 if (!ModelLoader.Open(engine_element)) return false;
391
392 try {
393 // Locate the thruster definition
394 Element* thruster_element = engine_element->FindElement("thruster");
395 if (!thruster_element) {
396 XMLLogException err(engine_element);
397 err << "No thruster definition supplied with engine definition.";
398 throw err;
399 }
400 if (!ModelLoader.Open(thruster_element)) {
401 XMLLogException err(thruster_element);
402 err << "Cannot open the thruster element.";
403 throw err;
404 }
405
406 if (engine_element->FindElement("piston_engine")) {
407 Element *element = engine_element->FindElement("piston_engine");
408 Engines.push_back(make_shared<FGPiston>(FDMExec, element, numEngines, in));
409 } else if (engine_element->FindElement("turbine_engine")) {

Callers

nothing calls this directly

Calls 9

GetAttributeValueMethod · 0.80
FindElementMethod · 0.80
GetDensityMethod · 0.80
FindNextElementMethod · 0.80
OpenMethod · 0.80
SetFuelDensityMethod · 0.80
GetTypeMethod · 0.45
whatMethod · 0.45

Tested by

no test coverage detected