FlightGear next
JSBSim::FGTank Class Reference

Models a fuel tank. More...

#include <FGTank.h>

Inherits JSBSim::FGJSBBase.

Public Types

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

Public Member Functions

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

Additional Inherited Members

static const std::string & GetVersion (void)
 Returns the version number of JSBSim.
 
static constexpr double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit.
 
static constexpr double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine.
 
static constexpr double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius.
 
static constexpr double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine.
 
static constexpr double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin.
 
static constexpr double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius.
 
static constexpr double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit.
 
static constexpr double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin.
 
static constexpr double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius.
 
static constexpr double FeetToMeters (double measure)
 Converts from feet to meters.
 
static double PitotTotalPressure (double mach, double p)
 Compute the total pressure in front of the Pitot tube.
 
static double MachFromImpactPressure (double qc, double p)
 Compute the Mach number from the differential pressure (qc) and the static pressure.
 
static double VcalibratedFromMach (double mach, double p)
 Calculate the calibrated airspeed from the Mach number.
 
static double MachFromVcalibrated (double vcas, double p)
 Calculate the Mach number from the calibrated airspeed.Based on the formulas in the US Air Force Aircraft Performance Flight Testing Manual (AFFTC-TIH-99-01).
 
static bool EqualToRoundoff (double a, double b)
 Finite precision comparison.
 
static bool EqualToRoundoff (float a, float b)
 Finite precision comparison.
 
static bool EqualToRoundoff (float a, double b)
 Finite precision comparison.
 
static bool EqualToRoundoff (double a, float b)
 Finite precision comparison.
 
static constexpr double Constrain (double min, double value, double max)
 Constrain a value between a minimum and a maximum value.
 
static constexpr double sign (double num)
 
static double GaussianRandomNumber (void)
 
- Static Public Attributes inherited from JSBSim::FGJSBBase
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
 
static short debug_lvl = 1
 
static std::string CreateIndexedPropertyName (const std::string &Property, int index)
 
static Message localMsg
 
static std::queue< MessageMessages
 
static unsigned int messageId = 0
 
static constexpr double radtodeg = 180. / 3.14159265358979323846
 
static constexpr double degtorad = 3.14159265358979323846 / 180.
 
static constexpr double hptoftlbssec = 550.0
 
static constexpr double psftoinhg = 0.014138
 
static constexpr double psftopa = 47.88
 
static constexpr double ktstofps = 1.68781
 
static constexpr double fpstokts = 1.0 / ktstofps
 
static constexpr double inchtoft = 1.0/12.0
 
static constexpr double fttom = 0.3048
 
static constexpr double m3toft3 = 1.0/(fttom*fttom*fttom)
 
static constexpr double in3tom3 = inchtoft*inchtoft*inchtoft/m3toft3
 
static constexpr double inhgtopa = 3386.38
 
static constexpr double slugtolb = 32.174049
 Note that definition of lbtoslug by the inverse of slugtolb and not to a different constant you can also get from some tables will make lbtoslug*slugtolb == 1 up to the magnitude of roundoff.
 
static constexpr double lbtoslug = 1.0/slugtolb
 
static constexpr double kgtolb = 2.20462
 
static constexpr double kgtoslug = 0.06852168
 
static const std::string needed_cfg_version = "2.0"
 
static const std::string JSBSim_version = JSBSIM_VERSION " " __DATE__ " " __TIME__
 
static int gaussian_random_number_phase = 0
 

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>
<unusable unit="{GAL | LTR | M3 | IN3 | FT3 | CC}"> {number} </unusable>
<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.
  • unusable - Contents that cannot be used for combustion in the engine, defaults to gallons.
  • 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)
  • unusable - 0.0 (all contents may be burnt)
  • 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 201 of file FGTank.h.

Member Enumeration Documentation

◆ GrainType

Enumerator
gtUNKNOWN 
gtCYLINDRICAL 
gtENDBURNING 
gtFUNCTION 

Definition at line 216 of file FGTank.h.

◆ TankType

Enumerator
ttUNKNOWN 
ttFUEL 
ttOXIDIZER 

Definition at line 215 of file FGTank.h.

Constructor & Destructor Documentation

◆ FGTank()

JSBSim::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 51 of file FGTank.cpp.

◆ ~FGTank()

JSBSim::FGTank::~FGTank ( )

Destructor.

Definition at line 233 of file FGTank.cpp.

Member Function Documentation

◆ Calculate()

double JSBSim::FGTank::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 331 of file FGTank.cpp.

◆ Drain()

double JSBSim::FGTank::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 266 of file FGTank.cpp.

◆ Fill()

double JSBSim::FGTank::Fill ( double amount)

Definition at line 287 of file FGTank.cpp.

◆ GetCapacity()

double JSBSim::FGTank::GetCapacity ( void ) const
inline

Gets the capacity of the tank.

Returns
the capacity of the tank in pounds.

Definition at line 252 of file FGTank.h.

◆ GetCapacityGallons()

double JSBSim::FGTank::GetCapacityGallons ( void ) const
inline

Gets the capacity of the tank.

Returns
the capacity of the tank in gallons.

Definition at line 256 of file FGTank.h.

◆ GetContents()

double JSBSim::FGTank::GetContents ( void ) const
inline

Gets the contents of the tank.

Returns
the contents of the tank in pounds.

Definition at line 260 of file FGTank.h.

◆ GetContentsGallons()

double JSBSim::FGTank::GetContentsGallons ( void ) const
inline

Gets the contents of the tank.

Returns
the contents of the tank in gallons.

Definition at line 264 of file FGTank.h.

◆ GetDensity()

double JSBSim::FGTank::GetDensity ( void ) const
inline

Returns the fuel density.

Returns
the density in lbs/gal.

Definition at line 314 of file FGTank.h.

◆ GetExternalFlow()

double JSBSim::FGTank::GetExternalFlow ( void ) const
inline

Definition at line 319 of file FGTank.h.

◆ GetGrainType()

GrainType JSBSim::FGTank::GetGrainType ( void ) const
inline

Definition at line 325 of file FGTank.h.

◆ GetIxx()

double JSBSim::FGTank::GetIxx ( void ) const
inline

Definition at line 296 of file FGTank.h.

◆ GetIyy()

double JSBSim::FGTank::GetIyy ( void ) const
inline

Definition at line 297 of file FGTank.h.

◆ GetIzz()

double JSBSim::FGTank::GetIzz ( void ) const
inline

Definition at line 298 of file FGTank.h.

◆ GetLocationX()

double JSBSim::FGTank::GetLocationX ( void ) const
inline

Definition at line 300 of file FGTank.h.

◆ GetLocationY()

double JSBSim::FGTank::GetLocationY ( void ) const
inline

Definition at line 301 of file FGTank.h.

◆ GetLocationZ()

double JSBSim::FGTank::GetLocationZ ( void ) const
inline

Definition at line 302 of file FGTank.h.

◆ GetPctFull()

double JSBSim::FGTank::GetPctFull ( void ) const
inline

Gets the tank fill level.

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

Definition at line 248 of file FGTank.h.

◆ GetPriority()

int JSBSim::FGTank::GetPriority ( void ) const
inline

Definition at line 309 of file FGTank.h.

◆ GetSelected()

bool JSBSim::FGTank::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 244 of file FGTank.h.

◆ GetStandpipe()

double JSBSim::FGTank::GetStandpipe ( void ) const
inline

Definition at line 307 of file FGTank.h.

◆ GetTemperature()

double JSBSim::FGTank::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 278 of file FGTank.h.

◆ GetTemperature_degC()

double JSBSim::FGTank::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 271 of file FGTank.h.

◆ GetType()

int JSBSim::FGTank::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 237 of file FGTank.h.

◆ GetUnusable()

double JSBSim::FGTank::GetUnusable ( void ) const
inline

Returns the amount of unusable fuel in the tank.

Returns
the amount in lbs.

Definition at line 286 of file FGTank.h.

◆ GetUnusableVolume()

double JSBSim::FGTank::GetUnusableVolume ( void ) const
inline

Returns the unusable volume of fuel in the tank.

Returns
the volume in gal.

Definition at line 290 of file FGTank.h.

◆ GetXYZ() [1/2]

double JSBSim::FGTank::GetXYZ ( int idx) const

Definition at line 259 of file FGTank.cpp.

◆ GetXYZ() [2/2]

FGColumnVector3 JSBSim::FGTank::GetXYZ ( void ) const

Definition at line 252 of file FGTank.cpp.

◆ ProcessFuelName()

double JSBSim::FGTank::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 419 of file FGTank.cpp.

◆ ResetToIC()

void JSBSim::FGTank::ResetToIC ( void )

Resets the tank parameters to the initial conditions.

Definition at line 240 of file FGTank.cpp.

◆ SetContents()

void JSBSim::FGTank::SetContents ( double amount)

Definition at line 308 of file FGTank.cpp.

◆ SetContentsGallons()

void JSBSim::FGTank::SetContentsGallons ( double gallons)

Definition at line 323 of file FGTank.cpp.

◆ SetDensity()

void JSBSim::FGTank::SetDensity ( double d)
inline

Sets the fuel density.

Parameters
dthe density in lbs/gal.

Definition at line 317 of file FGTank.h.

◆ SetExternalFlow()

void JSBSim::FGTank::SetExternalFlow ( double f)
inline

Definition at line 320 of file FGTank.h.

◆ SetLocationX()

void JSBSim::FGTank::SetLocationX ( double x)
inline

Definition at line 303 of file FGTank.h.

◆ SetLocationY()

void JSBSim::FGTank::SetLocationY ( double y)
inline

Definition at line 304 of file FGTank.h.

◆ SetLocationZ()

void JSBSim::FGTank::SetLocationZ ( double z)
inline

Definition at line 305 of file FGTank.h.

◆ SetPriority()

void JSBSim::FGTank::SetPriority ( int p)
inline

Definition at line 310 of file FGTank.h.

◆ SetSelected()

void JSBSim::FGTank::SetSelected ( bool sel)
inline

Definition at line 332 of file FGTank.h.

◆ SetStandpipe()

void JSBSim::FGTank::SetStandpipe ( double amount)
inline

Definition at line 331 of file FGTank.h.

◆ SetTemperature()

void JSBSim::FGTank::SetTemperature ( double temp)
inline

Definition at line 330 of file FGTank.h.

◆ SetUnusableVolume()

void JSBSim::FGTank::SetUnusableVolume ( double volume)
inline

Sets the volume of unusable fuel in the tank.

Parameters
amountthe amount of unusable fuel in gal.

Definition at line 294 of file FGTank.h.


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