]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/models/FGPropulsion.h
Sync. with JSBSim CVS
[flightgear.git] / src / FDM / JSBSim / models / FGPropulsion.h
index 19329865a4917abcb87e3d7d2a05e9285e7a0aa9..b812f19680c6274bcb3dedc178f7306e20f430b9 100644 (file)
@@ -38,22 +38,8 @@ SENTRY
 INCLUDES
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#ifdef FGFS
-#  include <simgear/compiler.h>
-#  ifdef SG_HAVE_STD_INCLUDES
-#    include <vector>
-#    include <iterator>
-#    include <fstream>
-#  else
-#    include <vector.h>
-#    include <iterator.h>
-#    include <fstream.h>
-#  endif
-#else
-#  include <vector>
-#  include <iterator>
-#  include <fstream>
-#endif
+#include <vector>
+#include <fstream>
 
 #include "FGModel.h"
 #include <models/propulsion/FGEngine.h>
@@ -80,12 +66,29 @@ CLASS DOCUMENTATION
 /** Propulsion management class.
     The Propulsion class is the container for the entire propulsion system, which is
     comprised of engines, and tanks. Once the Propulsion class gets the config file,
-    it reads in information which is specific to a type of engine. Then:
+    it reads in the \<propulsion> section. Then:
 
     -# The appropriate engine type instance is created
     -# At least one tank object is created, and is linked to an engine.
 
-    At Run time each engines Calculate() method is called.
+    At Run time each engine's Calculate() method is called.
+
+    <h3>Configuration File Format:</h3>
+
+  @code
+    <propulsion>
+        <engine file="{string}">
+          ... see FGEngine, FGThruster, and class for engine type ...
+        </engine>
+        ... more engines ...
+        <tank type="{FUEL | OXIDIZER}"> 
+          ... see FGTank ...
+        </tank>
+        ... more tanks ...
+        <dump-rate unit="{LBS/MIN | KG/MIN}"> {number} </dump-rate>
+    </propulsion>
+  @endcode
+
     @author Jon S. Berndt
     @version $Id$
     @see
@@ -112,6 +115,8 @@ public:
       [Note: Should we be checking the Starved flag here?] */
   bool Run(void);
 
+  bool InitModel(void);
+
   /** Loads the propulsion system (engine[s] and tank[s]).
       Characteristics of the propulsion system are read in from the config file.
       @param el pointer to an XML element that contains the engine information.
@@ -149,28 +154,30 @@ public:
   /** Loops the engines until thrust output steady (used for trimming) */
   bool GetSteadyState(void);
 
-  /** starts the engines in IC mode (dt=0).  All engine-specific setup must
-      be done before calling this (i.e. magnetos, starter engage, etc.) */
-  bool ICEngineStart(void);
+  /** Sets up the engines as running */
+  void InitRunning(int n);
 
-  std::string GetPropulsionStrings(std::string delimeter);
-  std::string GetPropulsionValues(std::string delimeter);
+  string GetPropulsionStrings(string delimeter);
+  string GetPropulsionValues(string delimeter);
 
   inline FGColumnVector3& GetForces(void)  {return vForces; }
   inline double GetForces(int n) const { return vForces(n);}
   inline FGColumnVector3& GetMoments(void) {return vMoments;}
   inline double GetMoments(int n) const {return vMoments(n);}
 
-  inline bool GetRefuel(void) {return refuel;}
+  inline bool GetRefuel(void) const {return refuel;}
   inline void SetRefuel(bool setting) {refuel = setting;}
+  inline bool GetFuelDump(void) const {return dump;}
+  inline void SetFuelDump(bool setting) {dump = setting;}
   double Transfer(int source, int target, double amount);
   void DoRefuel(double time_slice);
+  void DumpFuel(double time_slice);
 
   FGColumnVector3& GetTanksMoment(void);
   double GetTanksWeight(void);
 
-  std::ifstream* FindEngineFile(std::string filename);
-  std::string FindEngineFullPathname(std::string engine_filename);
+  ifstream* FindEngineFile(string filename);
+  string FindEngineFullPathname(string engine_filename);
   inline int GetActiveEngine(void) const {return ActiveEngine;}
   inline bool GetFuelFreeze(void) {return fuel_freeze;}
   double GetTotalFuelQuantity(void) const {return TotalFuelQuantity;}
@@ -182,13 +189,9 @@ public:
   void SetFuelFreeze(bool f);
   FGMatrix33& CalculateTankInertias(void);
 
-  void bind();
-  void unbind();
-
 private:
-  std::vector <FGEngine*>   Engines;
-  std::vector <FGTank*>     Tanks;
-  std::vector <FGTank*>::iterator iTank;
+  vector <FGEngine*>   Engines;
+  vector <FGTank*>     Tanks;
   unsigned int numSelectedFuelTanks;
   unsigned int numSelectedOxiTanks;
   unsigned int numFuelTanks;
@@ -202,8 +205,10 @@ private:
   FGColumnVector3 vXYZtank_arm;
   FGMatrix33 tankJ;
   bool refuel;
+  bool dump;
   bool fuel_freeze;
   double TotalFuelQuantity;
+  double DumpRate;
   bool IsBound;
   bool HavePistonEngine;
   bool HaveTurbineEngine;
@@ -211,6 +216,10 @@ private:
   bool HaveRocketEngine;
   bool HaveElectricEngine;
 
+  int InitializedEngines;
+  bool HasInitializedEngines;
+
+  void bind();
   void Debug(int from);
 };
 }