JSBSim Flight Dynamics Model  1.0 (02 March 2017)
An Open Source Flight Dynamics and Control Software Library in C++
FGTank Class Reference

Models a fuel tank. More...

#include <FGTank.h>

+ Inheritance diagram for FGTank:
+ Collaboration diagram for FGTank:

Public Types

enum  GrainType { gtUNKNOWN, gtCYLINDRICAL, gtENDBURNING, gtFUNCTION }
 
enum  TankType { ttUNKNOWN, ttFUEL, ttOXIDIZER }
 
- Public Types inherited from FGJSBBase
enum  { eL = 1, eM, eN }
 Moments L, M, N.
 
enum  { eP = 1, eQ, eR }
 Rates P, Q, R.
 
enum  { eU = 1, eV, eW }
 Velocities U, V, W.
 
enum  { eX = 1, eY, eZ }
 Positions X, Y, Z.
 
enum  { ePhi = 1, eTht, ePsi }
 Euler angles Phi, Theta, Psi.
 
enum  { eDrag = 1, eSide, eLift }
 Stability axis forces, Drag, Side force, Lift.
 
enum  { eRoll = 1, ePitch, eYaw }
 Local frame orientation Roll, Pitch, Yaw.
 
enum  { eNorth = 1, eEast, eDown }
 Local frame position North, East, Down.
 
enum  { eLat = 1, eLong, eRad }
 Locations Radius, Latitude, Longitude.
 
enum  {
  inNone = 0, inDegrees, inRadians, inMeters,
  inFeet
}
 Conversion specifiers.
 

Public Member Functions

 FGTank (FGFDMExec *exec, Element *el, int tank_number)
 Constructor. More...
 
 ~FGTank ()
 Destructor.
 
double Calculate (double dt, double TempC)
 Performs local, tanks-specific calculations, such as fuel temperature. More...
 
double Drain (double used)
 Removes fuel from the tank. More...
 
double Fill (double amount)
 
double GetCapacity (void) const
 Gets the capacity of the tank. More...
 
double GetCapacityGallons (void) const
 Gets the capacity of the tank. More...
 
double GetContents (void) const
 Gets the contents of the tank. More...
 
double GetContentsGallons (void) const
 Gets the contents of the tank. More...
 
double GetDensity (void) const
 
double GetExternalFlow (void) const
 
const GrainType GetGrainType (void) const
 
double GetIxx (void) const
 
double GetIyy (void) const
 
double GetIzz (void) const
 
double GetLocationX (void) const
 
double GetLocationY (void) const
 
double GetLocationZ (void) const
 
double GetPctFull (void) const
 Gets the tank fill level. More...
 
int GetPriority (void) const
 
bool GetSelected (void) const
 If the tank is set to supply fuel, this function returns true. More...
 
double GetStandpipe (void) const
 
double GetTemperature (void) const
 Gets the temperature of the fuel. More...
 
double GetTemperature_degC (void) const
 Gets the temperature of the fuel. More...
 
int GetType (void) const
 Retrieves the type of tank: Fuel or Oxidizer. More...
 
FGColumnVector3 GetXYZ (void) const
 
double GetXYZ (int idx) const
 
double ProcessFuelName (const std::string &name)
 Returns the density of a named fuel type. More...
 
void ResetToIC (void)
 Resets the tank parameters to the initial conditions.
 
void SetContents (double amount)
 
void SetContentsGallons (double gallons)
 
void SetDensity (double d)
 
void SetExternalFlow (double f)
 
void SetLocationX (double x)
 
void SetLocationY (double y)
 
void SetLocationZ (double z)
 
void SetPriority (int p)
 
void SetSelected (bool sel)
 
void SetStandpipe (double amount)
 
void SetTemperature (double temp)
 
- Public Member Functions inherited from FGJSBBase
 FGJSBBase ()
 Constructor for FGJSBBase.
 
virtual ~FGJSBBase ()
 Destructor for FGJSBBase.
 
void disableHighLighting (void)
 Disables highlighting in the console output.
 
std::string GetVersion (void)
 Returns the version number of JSBSim. More...
 
void PutMessage (const Message &msg)
 Places a Message structure on the Message queue. More...
 
void PutMessage (const std::string &text)
 Creates a message with the given text and places it on the queue. More...
 
void PutMessage (const std::string &text, bool bVal)
 Creates a message with the given text and boolean value and places it on the queue. More...
 
void PutMessage (const std::string &text, int iVal)
 Creates a message with the given text and integer value and places it on the queue. More...
 
void PutMessage (const std::string &text, double dVal)
 Creates a message with the given text and double value and places it on the queue. More...
 
int SomeMessages (void)
 Reads the message on the queue (but does not delete it). More...
 
void ProcessMessage (void)
 Reads the message on the queue and removes it from the queue. More...
 
MessageProcessNextMessage (void)
 Reads the next message on the queue and removes it from the queue. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from FGJSBBase
static double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit. More...
 
static double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin. More...
 
static double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine. More...
 
static double Constrain (double min, double value, double max)
 Constrain a value between a minimum and a maximum value.
 
static bool EqualToRoundoff (double a, double b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (float a, float b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (float a, double b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (double a, float b)
 Finite precision comparison. More...
 
static double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius. More...
 
static double FeetToMeters (double measure)
 Converts from feet to meters. More...
 
static double GaussianRandomNumber (void)
 
static double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius. More...
 
static double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit. More...
 
static double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine. More...
 
static double MachFromVcalibrated (double vcas, double p, double psl, double rhosl)
 Calculate the Mach number from the calibrated airspeed. More...
 
static double PitotTotalPressure (double mach, double p)
 Compute the total pressure in front of the Pitot tube. More...
 
static double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius. More...
 
static double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin. More...
 
static double sign (double num)
 
static double VcalibratedFromMach (double mach, double p, double psl, double rhosl)
 Calculate the calibrated airspeed from the Mach number. More...
 
- Static Public Attributes inherited from FGJSBBase
static short debug_lvl = 1
 
static char highint [5] = {27, '[', '1', 'm', '\0' }
 highlights text
 
static char halfint [5] = {27, '[', '2', 'm', '\0' }
 low intensity text
 
static char normint [6] = {27, '[', '2', '2', 'm', '\0' }
 normal intensity text
 
static char reset [5] = {27, '[', '0', 'm', '\0' }
 resets text properties
 
static char underon [5] = {27, '[', '4', 'm', '\0' }
 underlines text
 
static char underoff [6] = {27, '[', '2', '4', 'm', '\0' }
 underline off
 
static char fgblue [6] = {27, '[', '3', '4', 'm', '\0' }
 blue text
 
static char fgcyan [6] = {27, '[', '3', '6', 'm', '\0' }
 cyan text
 
static char fgred [6] = {27, '[', '3', '1', 'm', '\0' }
 red text
 
static char fggreen [6] = {27, '[', '3', '2', 'm', '\0' }
 green text
 
static char fgdef [6] = {27, '[', '3', '9', 'm', '\0' }
 default text
 
- Protected Member Functions inherited from FGJSBBase
void Debug (int)
 
- Static Protected Member Functions inherited from FGJSBBase
static std::string CreateIndexedPropertyName (const std::string &Property, int index)
 
- Static Protected Attributes inherited from FGJSBBase
static const double degtorad = 0.017453292519943295769236907684886
 
static const double fpstokts = 1.0/ktstofps
 
static const double fttom = 0.3048
 
static int gaussian_random_number_phase = 0
 
static const double hptoftlbssec = 550.0
 
static const double in3tom3 = 1.638706E-5
 
static const double inchtoft = 0.08333333
 
static const double inhgtopa = 3386.38
 
static const std::string JSBSim_version = "1.0 " __DATE__ " " __TIME__
 
static const double kgtolb = 2.20462
 
static const double kgtoslug = 0.06852168
 
static const double ktstofps = 1.68781
 
static const double lbtoslug = 1.0/slugtolb
 
static Message localMsg
 
static const double m3toft3 = 1.0/(fttom*fttom*fttom)
 
static double Mair = 28.9645
 
static unsigned int messageId = 0
 
static std::queue< MessageMessages
 
static const std::string needed_cfg_version = "2.0"
 
static const double psftoinhg = 0.014138
 
static const double psftopa = 47.88
 
static const double radtodeg = 57.295779513082320876798154814105
 
static double Reng = 1716.56
 
static double Rstar = 1545.348
 
static const double SHRatio = 1.40
 
static const double slugtolb = 32.174049
 

Detailed Description

Models a fuel tank.

Fuel Temperature:

Fuel temperature is calculated using the following assumptions:

Fuel temperature will only be calculated for tanks which have an initial fuel
temperature specified in the configuration file.

The surface area of the tank is estimated from the capacity in pounds.  It
is assumed that the tank is a wing tank with dimensions h by 4h by 10h. The
volume of the tank is then 40(h)(h)(h). The area of the upper or lower 
surface is then 40(h)(h).  The volume is also equal to the capacity divided
by 49.368 lbs/cu-ft, for jet fuel.  The surface area of one side can then be
derived from the tank's capacity.  

The heat capacity of jet fuel is assumed to be 900 Joules/lbm/K, and the 
heat transfer factor of the tank is 1.115 Watts/sq-ft/K.

Fuel Dump:

Fuel dumping is handled by the FGPropulsion class.  A standpipe can be defined
here for each tank which sets the level of contents (in pounds) which is not dumpable.
Default standpipe level is zero, making all contents dumpable.

Fuel Transfer:

Fuel transfer is handled by the FGPropulsion class, however the contents of tanks
may be manipulated directly using the SetContents() function here, or via the property
tree at <tt>propulsion/tank[i]/contents-lbs</tt>, where i is the tank number (Tanks
are automatically numbered, starting at zero, in the order in which they are read in
the aircraft configuration file).  The latter method allows one to use a system of FCS
components to control tank contents.

There is also a property <tt>propulsion/tank[i]/external-flow-rate-pps</tt>. Setting
this property to a positive value causes the tank to fill at the rate specified.
Setting a negative number causes the tank to drain. The value is the rate in pounds
of fuel per second. The tank will not fill past 100% full and will not drain below 0%.
Fuel may be transfered between two tanks by setting the source tank's external flow rate
to a negative value and the destination's external flow rate to the same positive value.
Care must be taken to stop fuel flow before the source tank becomes empty to prevent
phantom fuel being created.

Configuration File Format:

<tank type="{FUEL | OXIDIZER}">
<grain_config type="{CYLINDRICAL | ENDBURNING | FUNCTION}">
<length unit="{IN | FT | M}"> {number} </length>
<bore_diameter unit="{IN | FT | M}"> {number} </bore_diameter>
[<ixx unit="{IN | FT | M}"> {function} </ixx>
<iyy unit="{IN | FT | M}"> {function} </iyy>
<izz unit="{IN | FT | M}"> {function} </izz>]
</grain_config>
<location unit="{FT | M | IN}">
<x> {number} </x>
<y> {number} </y>
<z> {number} </z>
</location>
<drain_location unit="{FT | M | IN}">
<x> {number} </x>
<y> {number} </y>
<z> {number} </z>
</drain_location>
<radius unit="{IN | FT | M}"> {number} </radius>
<capacity unit="{LBS | KG}"> {number} </capacity>
<inertia_factor> {number:0-1} </inertia_factor>
<contents unit="{LBS | KG}"> {number} </contents>
<temperature> {number} </temperature> <!-- must be degrees fahrenheit -->
<standpipe unit="{LBS | KG"}> {number} </standpipe>
<priority> {integer} </priority>
<density unit="{KG/L | LBS/GAL}"> {number} </density>
<type> {string} </type> <!-- will override previous density setting -->
</tank>

Definition of the tank configuration file parameters:

  • type - One of FUEL or OXIDIZER. This is required.
  • radius - Equivalent radius of tank for modeling slosh, defaults to inches.
  • grain_config type - One of CYLINDRICAL or ENDBURNING.
  • length - length of tank for modeling solid fuel propellant grain, defaults to inches.
  • capacity - Capacity, defaults to pounds.
  • contents - Initial contents, defaults to pounds.
  • temperature - Initial temperature, defaults to degrees Fahrenheit.
  • standpipe - Minimum contents to which tank can dump, defaults to pounds.
  • priority - Establishes feed sequence of tank. "1" is the highest priority.
  • density - Density of liquid tank contents.
  • type - Named fuel type. One of AVGAS, JET-A, JET-A1, JET-B, JP-1, JP-2, JP-3,
  • JP-4, JP-5, JP-6, JP-7, JP-8, JP-8+100, RP-1, T-1, ETHANOL, HYDRAZINE,
  • F-34, F-35, F-40, F-44, AVTAG, AVCAT

location:

  • x - Location of tank on aircraft's x-axis, defaults to inches.
  • y - Location of tank on aircraft's y-axis, defaults to inches.
  • z - Location of tank on aircraft's z-axis, defaults to inches.

drain_location:

  • x - Location of tank drain on aircraft's x-axis, defaults to inches.
  • y - Location of tank drain on aircraft's y-axis, defaults to inches.
  • z - Location of tank drain on aircraft's z-axis, defaults to inches.

Default values of the tank configuration file parameters:

  • type - ttUNKNOWN (causes a load error in the propulsion configuration)
  • location, drain_location - both optional, but a warning message will be printed to the console if the location is not given
  • x - 0.0 (both full and drained CG locations)
  • y - 0.0 (both full and drained CG locations)
  • z - 0.0 (both full and drained CG locations)
  • radius - 0.0
  • capacity - 0.00001 (tank capacity must not be zero)
  • contents - 0.0
  • temperature - -9999.0 (flag which indicates no temperature is set)
  • standpipe - 0.0 (all contents may be dumped)
  • priority - 1 (highest feed sequence priority)
  • density - 6.6

    Author
    Jon Berndt, Dave Culp
    See also
    Akbar, Raza et al. "A Simple Analysis of Fuel Addition to the CWT of 747", California Institute of Technology, 1998, http://www.galcit.caltech.edu/EDL/projects/JetA/reports/lumped.pdf

Definition at line 200 of file FGTank.h.

Constructor & Destructor Documentation

◆ FGTank()

FGTank ( FGFDMExec exec,
Element el,
int  tank_number 
)

Constructor.

The constructor reads in the defining parameters from a configuration file.

Parameters
execa pointer to the base FGFDMExec instance.
ela pointer to the Tank element.
tank_numberthe tank number (zero based).

Definition at line 58 of file FGTank.cpp.

59  : TankNumber(tank_number)
60 {
61  string token, strFuelName;
62  Element* element;
63  Element* element_Grain;
64  FGPropertyManager *PropertyManager = exec->GetPropertyManager();
65  Area = 1.0;
66  Density = 6.6;
67  InitialTemperature = Temperature = -9999.0;
68  Ixx = Iyy = Izz = 0.0;
69  InertiaFactor = 1.0;
70  Radius = Contents = Standpipe = Length = InnerRadius = 0.0;
71  ExternalFlow = 0.0;
72  InitialStandpipe = 0.0;
73  Capacity = 0.00001;
74  Priority = InitialPriority = 1;
75  vXYZ.InitMatrix();
76  vXYZ_drain.InitMatrix();
77  ixx_unit = iyy_unit = izz_unit = 1.0;
78  grainType = gtUNKNOWN; // This is the default
79 
80  type = el->GetAttributeValue("type");
81  if (type == "FUEL") Type = ttFUEL;
82  else if (type == "OXIDIZER") Type = ttOXIDIZER;
83  else Type = ttUNKNOWN;
84 
85  element = el->FindElement("location");
86  if (element) vXYZ = element->FindElementTripletConvertTo("IN");
87  else cerr << el->ReadFrom() << "No location found for this tank."
88  << endl;
89 
90  vXYZ_drain = vXYZ; // Set initial drain location to initial tank CG
91 
92  element = el->FindElement("drain_location");
93  if (element) {
94  vXYZ_drain = element->FindElementTripletConvertTo("IN");
95  }
96 
97  if (el->FindElement("radius"))
98  Radius = el->FindElementValueAsNumberConvertTo("radius", "IN");
99  if (el->FindElement("inertia_factor"))
100  InertiaFactor = el->FindElementValueAsNumber("inertia_factor");
101  if (el->FindElement("capacity"))
102  Capacity = el->FindElementValueAsNumberConvertTo("capacity", "LBS");
103  if (el->FindElement("contents"))
104  InitialContents = Contents = el->FindElementValueAsNumberConvertTo("contents", "LBS");
105  if (el->FindElement("temperature"))
106  InitialTemperature = Temperature = el->FindElementValueAsNumber("temperature");
107  if (el->FindElement("standpipe"))
108  InitialStandpipe = Standpipe = el->FindElementValueAsNumberConvertTo("standpipe", "LBS");
109  if (el->FindElement("priority"))
110  InitialPriority = Priority = (int)el->FindElementValueAsNumber("priority");
111  if (el->FindElement("density"))
112  Density = el->FindElementValueAsNumberConvertTo("density", "LBS/GAL");
113  if (el->FindElement("type"))
114  strFuelName = el->FindElementValue("type");
115 
116 
117  SetPriority( InitialPriority ); // this will also set the Selected flag
118 
119  if (Capacity == 0) {
120  cerr << el->ReadFrom()
121  << "Tank capacity must not be zero. Reset to 0.00001 lbs!" << endl;
122  Capacity = 0.00001;
123  Contents = 0.0;
124  }
125  if (Contents > Capacity) {
126  cerr << el->ReadFrom() << "Tank content (" << Contents
127  << " lbs) is greater than tank capacity (" << Capacity
128  << " lbs) for tank " << tank_number
129  << "! Did you accidentally swap contents and capacity?" << endl;
130  throw("tank definition error");
131  }
132 
133  PctFull = 100.0*Contents/Capacity; // percent full; 0 to 100.0
134 
135  // Check whether this is a solid propellant "tank". Initialize it if true.
136 
137  element_Grain = el->FindElement("grain_config");
138  if (element_Grain) {
139 
140  strGType = element_Grain->GetAttributeValue("type");
141  if (strGType == "CYLINDRICAL") grainType = gtCYLINDRICAL;
142  else if (strGType == "ENDBURNING") grainType = gtENDBURNING;
143  else if (strGType == "FUNCTION") {
144  grainType = gtFUNCTION;
145  if (element_Grain->FindElement("ixx") != 0) {
146  Element* element_ixx = element_Grain->FindElement("ixx");
147  if (element_ixx->GetAttributeValue("unit") == "KG*M2") ixx_unit = 1.0/1.35594;
148  if (element_ixx->FindElement("function") != 0) {
149  function_ixx = new FGFunction(PropertyManager, element_ixx->FindElement("function"));
150  }
151  } else {
152  throw("For tank "+to_string(TankNumber)+" and when grain_config is specified an ixx must be specified when the FUNCTION grain type is specified.");
153  }
154 
155  if (element_Grain->FindElement("iyy")) {
156  Element* element_iyy = element_Grain->FindElement("iyy");
157  if (element_iyy->GetAttributeValue("unit") == "KG*M2") iyy_unit = 1.0/1.35594;
158  if (element_iyy->FindElement("function") != 0) {
159  function_iyy = new FGFunction(PropertyManager, element_iyy->FindElement("function"));
160  }
161  } else {
162  throw("For tank "+to_string(TankNumber)+" and when grain_config is specified an iyy must be specified when the FUNCTION grain type is specified.");
163  }
164 
165  if (element_Grain->FindElement("izz")) {
166  Element* element_izz = element_Grain->FindElement("izz");
167  if (element_izz->GetAttributeValue("unit") == "KG*M2") izz_unit = 1.0/1.35594;
168  if (element_izz->FindElement("function") != 0) {
169  function_izz = new FGFunction(PropertyManager, element_izz->FindElement("function"));
170  }
171  } else {
172  throw("For tank "+to_string(TankNumber)+" and when grain_config is specified an izz must be specified when the FUNCTION grain type is specified.");
173  }
174  }
175  else
176  cerr << el->ReadFrom() << "Unknown propellant grain type specified"
177  << endl;
178 
179  if (element_Grain->FindElement("length"))
180  Length = element_Grain->FindElementValueAsNumberConvertTo("length", "IN");
181  if (element_Grain->FindElement("bore_diameter"))
182  InnerRadius = element_Grain->FindElementValueAsNumberConvertTo("bore_diameter", "IN")/2.0;
183 
184  // Initialize solid propellant values for debug and runtime use.
185 
186  switch (grainType) {
187  case gtCYLINDRICAL:
188  if (Radius <= InnerRadius) {
189  cerr << element_Grain->ReadFrom()
190  << "The bore diameter should be smaller than the total grain diameter!"
191  << endl;
192  exit(-1);
193  }
194  Volume = M_PI * Length * (Radius*Radius - InnerRadius*InnerRadius); // cubic inches
195  break;
196  case gtENDBURNING:
197  Volume = M_PI * Length * Radius * Radius; // cubic inches
198  break;
199  case gtFUNCTION:
200  Volume = 1; // Volume is irrelevant for the FUNCTION type, but it can't be zero!
201  break;
202  case gtUNKNOWN:
203  cerr << el->ReadFrom()
204  << "Unknown grain type found in this rocket engine definition."
205  << endl;
206  exit(-1);
207  }
208  Density = (Capacity*lbtoslug)/Volume; // slugs/in^3
209  }
210 
211  CalculateInertias();
212 
213  if (Temperature != -9999.0) InitialTemperature = Temperature = FahrenheitToCelsius(Temperature);
214  Area = 40.0 * pow(Capacity/1975, 0.666666667);
215 
216  // A named fuel type will override a previous density value
217  if (!strFuelName.empty()) Density = ProcessFuelName(strFuelName);
218 
219  bind(PropertyManager);
220 
221  Debug(0);
222 }
double ProcessFuelName(const std::string &name)
Returns the density of a named fuel type.
Definition: FGTank.cpp:410
static double FahrenheitToCelsius(double fahrenheit)
Converts from degrees Fahrenheit to degrees Celsius.
Definition: FGJSBBase.h:232
+ Here is the call graph for this function:

Member Function Documentation

◆ Calculate()

double Calculate ( double  dt,
double  TempC 
)

Performs local, tanks-specific calculations, such as fuel temperature.

This function calculates the temperature of the fuel in the tank.

Parameters
dtthe time step for this model.
TempCthe Total Air Temperature in degrees Celsius.
Returns
the current temperature in degrees Celsius.

Definition at line 325 of file FGTank.cpp.

326 {
327  if(ExternalFlow < 0.) Drain( -ExternalFlow *dt);
328  else Fill(ExternalFlow * dt);
329 
330  if (Temperature == -9999.0) return 0.0;
331  double HeatCapacity = 900.0; // Joules/lbm/C
332  double TempFlowFactor = 1.115; // Watts/sqft/C
333  double Tdiff = TAT_C - Temperature;
334  double dTemp = 0.0; // Temp change due to one surface
335  if (fabs(Tdiff) > 0.1 && Contents > 0.01) {
336  dTemp = (TempFlowFactor * Area * Tdiff * dt) / (Contents * HeatCapacity);
337  }
338 
339  return Temperature += (dTemp + dTemp); // For now, assume upper/lower the same
340 }
double Drain(double used)
Removes fuel from the tank.
Definition: FGTank.cpp:259
+ Here is the call graph for this function:

◆ Drain()

double Drain ( double  used)

Removes fuel from the tank.

This function removes fuel from a tank. If the tank empties, it is deselected.

Parameters
usedthe amount of fuel used in lbs.
Returns
the remaining contents of the tank in lbs.

Definition at line 259 of file FGTank.cpp.

260 {
261  double remaining = Contents - used;
262 
263  if (remaining >= 0) { // Reduce contents by amount used.
264 
265  Contents -= used;
266  PctFull = 100.0*Contents/Capacity;
267 
268  } else { // This tank must be empty.
269 
270  Contents = 0.0;
271  PctFull = 0.0;
272  }
273 
274  CalculateInertias();
275 
276  return remaining;
277 }
+ Here is the caller graph for this function:

◆ GetCapacity()

double GetCapacity ( void  ) const
inline

Gets the capacity of the tank.

Returns
the capacity of the tank in pounds.

Definition at line 250 of file FGTank.h.

250 {return Capacity;}

◆ GetCapacityGallons()

double GetCapacityGallons ( void  ) const
inline

Gets the capacity of the tank.

Returns
the capacity of the tank in gallons.

Definition at line 254 of file FGTank.h.

254 {return Capacity/Density;}

◆ GetContents()

double GetContents ( void  ) const
inline

Gets the contents of the tank.

Returns
the contents of the tank in pounds.

Definition at line 258 of file FGTank.h.

258 {return Contents;}
+ Here is the caller graph for this function:

◆ GetContentsGallons()

double GetContentsGallons ( void  ) const
inline

Gets the contents of the tank.

Returns
the contents of the tank in gallons.

Definition at line 262 of file FGTank.h.

262 {return Contents/Density;}

◆ GetPctFull()

double GetPctFull ( void  ) const
inline

Gets the tank fill level.

Returns
the fill level in percent, from 0 to 100.

Definition at line 246 of file FGTank.h.

246 {return PctFull;}
+ Here is the caller graph for this function:

◆ GetSelected()

bool GetSelected ( void  ) const
inline

If the tank is set to supply fuel, this function returns true.

Returns
true if this tank is set to a non-zero priority.

Definition at line 242 of file FGTank.h.

242 {return Selected;}
+ Here is the caller graph for this function:

◆ GetTemperature()

double GetTemperature ( void  ) const
inline

Gets the temperature of the fuel.

The temperature of the fuel is calculated if an initial tempearture is given in the configuration file.

Returns
the temperature of the fuel in degrees F IF an initial temperature is given, otherwise 32 degrees F is returned.

Definition at line 276 of file FGTank.h.

276 {return CelsiusToFahrenheit(Temperature);}
static double CelsiusToFahrenheit(double celsius)
Converts from degrees Celsius to degrees Fahrenheit.
Definition: FGJSBBase.h:239
+ Here is the call graph for this function:

◆ GetTemperature_degC()

double GetTemperature_degC ( void  ) const
inline

Gets the temperature of the fuel.

The temperature of the fuel is calculated if an initial tempearture is given in the configuration file.

Returns
the temperature of the fuel in degrees C IF an initial temperature is given, otherwise 0.0 C is returned.

Definition at line 269 of file FGTank.h.

269 {return Temperature;}

◆ GetType()

int GetType ( void  ) const
inline

Retrieves the type of tank: Fuel or Oxidizer.

Returns
the tank type, 0 for undefined, 1 for fuel, and 2 for oxidizer.

Definition at line 235 of file FGTank.h.

235 {return Type;}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ProcessFuelName()

double ProcessFuelName ( const std::string &  name)

Returns the density of a named fuel type.

Returns
the density, in lbs/gal, or 6.6 if name cannot be resolved.

Definition at line 410 of file FGTank.cpp.

411 {
412  if (name == "AVGAS") return 6.02;
413  else if (name == "JET-A") return 6.74;
414  else if (name == "JET-A1") return 6.74;
415  else if (name == "JET-B") return 6.48;
416  else if (name == "JP-1") return 6.76;
417  else if (name == "JP-2") return 6.38;
418  else if (name == "JP-3") return 6.34;
419  else if (name == "JP-4") return 6.48;
420  else if (name == "JP-5") return 6.81;
421  else if (name == "JP-6") return 6.55;
422  else if (name == "JP-7") return 6.61;
423  else if (name == "JP-8") return 6.66;
424  else if (name == "JP-8+100") return 6.66;
425  //else if (name == "JP-9") return 6.74;
426  //else if (name == "JPTS") return 6.74;
427  else if (name == "RP-1") return 6.73;
428  else if (name == "T-1") return 6.88;
429  else if (name == "ETHANOL") return 6.58;
430  else if (name == "HYDRAZINE")return 8.61;
431  else if (name == "F-34") return 6.66;
432  else if (name == "F-35") return 6.74;
433  else if (name == "F-40") return 6.48;
434  else if (name == "F-44") return 6.81;
435  else if (name == "AVTAG") return 6.48;
436  else if (name == "AVCAT") return 6.81;
437  else {
438  cerr << "Unknown fuel type specified: "<< name << endl;
439  }
440 
441  return 6.6;
442 }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

The documentation for this class was generated from the following files: