%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#include "FGPropulsion.h"
-#include "FGState.h"
#include "models/FGFCS.h"
#include "models/FGMassBalance.h"
#include "models/propulsion/FGThruster.h"
namespace JSBSim {
-static const char *IdSrc = "$Id$";
+static const char *IdSrc = "$Id: FGPropulsion.cpp,v 1.43 2010/11/18 12:38:06 jberndt Exp $";
static const char *IdHdr = ID_PROPULSION;
extern short debug_lvl;
bool FGPropulsion::InitModel(void)
{
+ bool result = true;
+
if (!FGModel::InitModel()) return false;
for (unsigned int i=0; i<numTanks; i++) Tanks[i]->ResetToIC();
switch (Engines[i]->GetType()) {
case FGEngine::etPiston:
((FGPiston*)Engines[i])->ResetToIC();
- if (HasInitializedEngines && (InitializedEngines & i)) InitRunning(i);
+ try {
+ if (HasInitializedEngines && (InitializedEngines & i)) InitRunning(i);
+ } catch (string str) {
+ cerr << str << endl;
+ result = false;
+ }
break;
case FGEngine::etTurbine:
((FGTurbine*)Engines[i])->ResetToIC();
- if (HasInitializedEngines && (InitializedEngines & i)) InitRunning(i);
+ try {
+ if (HasInitializedEngines && (InitializedEngines & i)) InitRunning(i);
+ } catch (string str) {
+ cerr << str << endl;
+ result = false;
+ }
break;
default:
break;
}
}
- return true;
+ return result;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
RunPreFunctions();
- double dt = State->Getdt();
+ double dt = FDMExec->GetDeltaT();
vForces.InitMatrix();
vMoments.InitMatrix();
void FGPropulsion::InitRunning(int n)
{
- if (n > 0) { // A specific engine is supposed to be initialized
+ if (n >= 0) { // A specific engine is supposed to be initialized
if (n >= (int)GetNumEngines() ) {
- cerr << "Tried to initialize a non-existent engine!" << endl;
- throw;
+ throw(string("Tried to initialize a non-existent engine!"));
}
- FCS->SetThrottleCmd(n,1);
- FCS->SetMixtureCmd(n,1);
+ FDMExec->GetFCS()->SetThrottleCmd(n,1);
+ FDMExec->GetFCS()->SetMixtureCmd(n,1);
GetEngine(n)->InitRunning();
GetSteadyState();
} else if (n < 0) { // -1 refers to "All Engines"
for (unsigned int i=0; i<GetNumEngines(); i++) {
- FCS->SetThrottleCmd(i,1);
- FCS->SetMixtureCmd(i,1);
+ FDMExec->GetFCS()->SetThrottleCmd(i,1);
+ FDMExec->GetFCS()->SetMixtureCmd(i,1);
GetEngine(i)->InitRunning();
}
GetSteadyState();
InitializedEngines = -1;
HasInitializedEngines = true;
- } else if (n == 0) { // No engines are to be initialized
- // Do nothing
}
}
document->SetParent(engine_element);
type = document->GetName();
- if (type == "piston_engine") {
- HavePistonEngine = true;
- if (!IsBound) bind();
- Engines.push_back(new FGPiston(FDMExec, document, numEngines));
- } else if (type == "turbine_engine") {
- HaveTurbineEngine = true;
- if (!IsBound) bind();
- Engines.push_back(new FGTurbine(FDMExec, document, numEngines));
- } else if (type == "turboprop_engine") {
- HaveTurboPropEngine = true;
- if (!IsBound) bind();
- Engines.push_back(new FGTurboProp(FDMExec, document, numEngines));
- } else if (type == "rocket_engine") {
- HaveRocketEngine = true;
- if (!IsBound) bind();
- Engines.push_back(new FGRocket(FDMExec, document, numEngines));
- } else if (type == "electric_engine") {
- HaveElectricEngine = true;
- if (!IsBound) bind();
- Engines.push_back(new FGElectric(FDMExec, document, numEngines));
- } else {
- cerr << "Unknown engine type: " << type << endl;
- exit(-5);
+ try {
+ if (type == "piston_engine") {
+ HavePistonEngine = true;
+ if (!IsBound) bind();
+ Engines.push_back(new FGPiston(FDMExec, document, numEngines));
+ } else if (type == "turbine_engine") {
+ HaveTurbineEngine = true;
+ if (!IsBound) bind();
+ Engines.push_back(new FGTurbine(FDMExec, document, numEngines));
+ } else if (type == "turboprop_engine") {
+ HaveTurboPropEngine = true;
+ if (!IsBound) bind();
+ Engines.push_back(new FGTurboProp(FDMExec, document, numEngines));
+ } else if (type == "rocket_engine") {
+ HaveRocketEngine = true;
+ if (!IsBound) bind();
+ Engines.push_back(new FGRocket(FDMExec, document, numEngines));
+ } else if (type == "electric_engine") {
+ HaveElectricEngine = true;
+ if (!IsBound) bind();
+ Engines.push_back(new FGElectric(FDMExec, document, numEngines));
+ } else {
+ cerr << "Unknown engine type: " << type << endl;
+ exit(-5);
+ }
+ } catch (std::string str) {
+ cerr << endl << fgred << str << reset << endl;
+ return false;
}
- FCS->AddThrottle();
+ FDMExec->GetFCS()->AddThrottle();
ThrottleAdded = true;
numEngines++;
}
CalculateTankInertias();
- if (!ThrottleAdded) FCS->AddThrottle(); // need to have at least one throttle
+ if (!ThrottleAdded) FDMExec->GetFCS()->AddThrottle(); // need to have at least one throttle
// Process fuel dump rate
if (el->FindElement("dump-rate"))
DumpRate = el->FindElementValueAsNumberConvertTo("dump-rate", "LBS/MIN");
- FGModel::PostLoad(el);
+ PostLoad(el, PropertyManager);
return true;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-string FGPropulsion::GetPropulsionStrings(const string& delimiter)
+string FGPropulsion::GetPropulsionStrings(const string& delimiter) const
{
unsigned int i;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-string FGPropulsion::GetPropulsionValues(const string& delimiter)
+string FGPropulsion::GetPropulsionValues(const string& delimiter) const
{
unsigned int i;
tankJ = FGMatrix33();
for (unsigned int i=0; i<size; i++) {
- tankJ += MassBalance->GetPointmassInertia( lbtoslug * Tanks[i]->GetContents(),
+ tankJ += FDMExec->GetMassBalance()->GetPointmassInertia( lbtoslug * Tanks[i]->GetContents(),
Tanks[i]->GetXYZ() );
tankJ(1,1) += Tanks[i]->GetIxx();
tankJ(2,2) += Tanks[i]->GetIyy();