X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2FFGEngine.cpp;h=bc73911a8630af43e1d3871c2a41b003d6adbb72;hb=fbee3d10f0aafd4178fc1313edb8593c156b2874;hp=fe0aca43b4f50aad149af8fa625d96868fec80ec;hpb=ba10c133fc1ecf5a5879b0a126fe64d091d42aca;p=flightgear.git diff --git a/src/FDM/JSBSim/FGEngine.cpp b/src/FDM/JSBSim/FGEngine.cpp index fe0aca43b..bc73911a8 100644 --- a/src/FDM/JSBSim/FGEngine.cpp +++ b/src/FDM/JSBSim/FGEngine.cpp @@ -46,7 +46,7 @@ INCLUDES # include # endif #else -# if defined(sgi) && !defined(__GNUC__) +# if defined(sgi) && !defined(__GNUC__) && (_COMPILER_VERSION < 740) # include # else # include @@ -56,6 +56,8 @@ INCLUDES #include "FGEngine.h" #include "FGTank.h" +namespace JSBSim { + static const char *IdSrc = "$Id$"; static const char *IdHdr = ID_ENGINE; @@ -64,33 +66,49 @@ CLASS IMPLEMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -FGEngine::FGEngine(FGFDMExec* exec) { - FDMExec = exec; - State = FDMExec->GetState(); - Atmosphere = FDMExec->GetAtmosphere(); - FCS = FDMExec->GetFCS(); - Propulsion = FDMExec->GetPropulsion(); - Aircraft = FDMExec->GetAircraft(); - Translation = FDMExec->GetTranslation(); - Rotation = FDMExec->GetRotation(); - Position = FDMExec->GetPosition(); - Auxiliary = FDMExec->GetAuxiliary(); - Output = FDMExec->GetOutput(); - - Mixture = 1.0; // FIXME: get actual value - Thrust = PctPower = 0.0; - Starved = Flameout = false; - Running = true; - - if (debug_lvl & 2) cout << "Instantiated: FGEngine" << endl; +FGEngine::FGEngine(FGFDMExec* exec) +{ + Name = ""; + Type = etUnknown; + X = Y = Z = 0.0; + EnginePitch = EngineYaw = 0.0; + SLFuelFlowMax = SLOxiFlowMax = 0.0; + MaxThrottle = 1.0; + MinThrottle = 0.0; + Thrust = 0.0; + Throttle = 0.0; + Mixture = 1.0; + Starter = false; + FuelNeed = OxidizerNeed = 0.0; + Starved = Running = Cranking = false; + PctPower = 0.0; + EngineNumber = -1; TrimMode = false; + FuelFlow_gph = 0.0; + FuelFlow_pph = 0.0; + + FDMExec = exec; + State = FDMExec->GetState(); + Atmosphere = FDMExec->GetAtmosphere(); + FCS = FDMExec->GetFCS(); + Propulsion = FDMExec->GetPropulsion(); + Aircraft = FDMExec->GetAircraft(); + Translation = FDMExec->GetTranslation(); + Rotation = FDMExec->GetRotation(); + Position = FDMExec->GetPosition(); + Auxiliary = FDMExec->GetAuxiliary(); + Output = FDMExec->GetOutput(); + + PropertyManager = FDMExec->GetPropertyManager(); + + Debug(0); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FGEngine::~FGEngine() { - if (debug_lvl & 2) cout << "Destroyed: FGEngine" << endl; + Debug(1); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -99,15 +117,15 @@ FGEngine::~FGEngine() // This base class method removes fuel from the fuel tanks as appropriate, // and sets the starved flag if necessary. -void FGEngine::ConsumeFuel(void) { - float Fshortage, Oshortage; +void FGEngine::ConsumeFuel(void) +{ + double Fshortage, Oshortage; FGTank* Tank; if (TrimMode) return; - Fshortage = Oshortage = 0.0; for (unsigned int i=0; iGetTank(i); + Tank = Propulsion->GetTank(SourceTanks[i]); if (Tank->GetType() == FGTank::ttFUEL) { Fshortage += Tank->Reduce(CalcFuelNeed()/Propulsion->GetnumSelectedFuelTanks()); } else { @@ -121,21 +139,24 @@ void FGEngine::ConsumeFuel(void) { //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -float FGEngine::CalcFuelNeed(void) { +double FGEngine::CalcFuelNeed(void) +{ FuelNeed = SLFuelFlowMax*PctPower*State->Getdt()*Propulsion->GetRate(); return FuelNeed; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -float FGEngine::CalcOxidizerNeed(void) { +double FGEngine::CalcOxidizerNeed(void) +{ OxidizerNeed = SLOxiFlowMax*PctPower*State->Getdt()*Propulsion->GetRate(); return OxidizerNeed; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void FGEngine::SetPlacement(float x, float y, float z, float pitch, float yaw) { +void FGEngine::SetPlacement(double x, double y, double z, double pitch, double yaw) +{ X = x; Y = y; Z = z; @@ -151,9 +172,48 @@ void FGEngine::AddFeedTank(int tkID) } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void FGEngine::Debug(void) +// The bitmasked value choices are as follows: +// unset: In this case (the default) JSBSim would only print +// out the normally expected messages, essentially echoing +// the config files as they are read. If the environment +// variable is not set, debug_lvl is set to 1 internally +// 0: This requests JSBSim not to output any messages +// whatsoever. +// 1: This value explicity requests the normal JSBSim +// startup messages +// 2: This value asks for a message to be printed out when +// a class is instantiated +// 4: When this value is set, a message is displayed when a +// FGModel object executes its Run() method +// 8: When this value is set, various runtime state variables +// are printed out periodically +// 16: When set various parameters are sanity checked and +// a message is printed out when they go out of bounds + +void FGEngine::Debug(int from) { - //TODO: Add your source code here -} + if (debug_lvl <= 0) return; + + if (debug_lvl & 1) { // Standard console startup message output + if (from == 0) { // Constructor + } + } + if (debug_lvl & 2 ) { // Instantiation/Destruction notification + if (from == 0) cout << "Instantiated: FGEngine" << endl; + if (from == 1) cout << "Destroyed: FGEngine" << endl; + } + if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects + } + if (debug_lvl & 8 ) { // Runtime state variables + } + if (debug_lvl & 16) { // Sanity checking + } + if (debug_lvl & 64) { + if (from == 0) { // Constructor + cout << IdSrc << endl; + cout << IdHdr << endl; + } + } +} +}