LCOV - code coverage report
Current view: top level - models/propulsion - FGTank.h (source / functions) Hit Total Coverage
Test: JSBSim-Coverage-Statistics Lines: 10 15 66.7 %
Date: 2010-08-24 Functions: 2 3 66.7 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       2                 :            : 
       3                 :            :  Header:       FGTank.h
       4                 :            :  Author:       Jon S. Berndt
       5                 :            :  Date started: 01/21/99
       6                 :            : 
       7                 :            :  ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.org) -------------
       8                 :            : 
       9                 :            :  This program is free software; you can redistribute it and/or modify it under
      10                 :            :  the terms of the GNU Lesser General Public License as published by the Free Software
      11                 :            :  Foundation; either version 2 of the License, or (at your option) any later
      12                 :            :  version.
      13                 :            : 
      14                 :            :  This program is distributed in the hope that it will be useful, but WITHOUT
      15                 :            :  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      16                 :            :  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
      17                 :            :  details.
      18                 :            : 
      19                 :            :  You should have received a copy of the GNU Lesser General Public License along with
      20                 :            :  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
      21                 :            :  Place - Suite 330, Boston, MA  02111-1307, USA.
      22                 :            : 
      23                 :            :  Further information about the GNU Lesser General Public License can also be found on
      24                 :            :  the world wide web at http://www.gnu.org.
      25                 :            : 
      26                 :            : FUNCTIONAL DESCRIPTION
      27                 :            : --------------------------------------------------------------------------------
      28                 :            : 
      29                 :            : Based on Flightgear code, which is based on LaRCSim. This class simulates
      30                 :            : a generic Tank.
      31                 :            : 
      32                 :            : HISTORY
      33                 :            : --------------------------------------------------------------------------------
      34                 :            : 01/21/99   JSB   Created
      35                 :            : 
      36                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      37                 :            : SENTRY
      38                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      39                 :            : 
      40                 :            : #ifndef FGTank_H
      41                 :            : #define FGTank_H
      42                 :            : 
      43                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      44                 :            : INCLUDES
      45                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      46                 :            : 
      47                 :            : #include "FGJSBBase.h"
      48                 :            : #include "math/FGColumnVector3.h"
      49                 :            : #include <string>
      50                 :            : 
      51                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      52                 :            : DEFINITIONS
      53                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      54                 :            : 
      55                 :            : #define ID_TANK "$Id: FGTank.h,v 1.21 2010/02/05 05:53:00 jberndt Exp $"
      56                 :            : 
      57                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      58                 :            : FORWARD DECLARATIONS
      59                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      60                 :            : 
      61                 :            : namespace JSBSim {
      62                 :            : 
      63                 :            : class Element;
      64                 :            : class FGPropertyManager;
      65                 :            : class FGFDMExec;
      66                 :            : 
      67                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      68                 :            : CLASS DOCUMENTATION
      69                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      70                 :            : 
      71                 :            : /** Models a fuel tank.
      72                 :            : 
      73                 :            : <h3>Fuel Temperature:</h3>
      74                 :            :  
      75                 :            :     Fuel temperature is calculated using the following assumptions:
      76                 :            : 
      77                 :            :     Fuel temperature will only be calculated for tanks which have an initial fuel
      78                 :            :     temperature specified in the configuration file.
      79                 :            : 
      80                 :            :     The surface area of the tank is estimated from the capacity in pounds.  It
      81                 :            :     is assumed that the tank is a wing tank with dimensions h by 4h by 10h. The
      82                 :            :     volume of the tank is then 40(h)(h)(h). The area of the upper or lower 
      83                 :            :     surface is then 40(h)(h).  The volume is also equal to the capacity divided
      84                 :            :     by 49.368 lbs/cu-ft, for jet fuel.  The surface area of one side can then be
      85                 :            :     derived from the tank's capacity.  
      86                 :            : 
      87                 :            :     The heat capacity of jet fuel is assumed to be 900 Joules/lbm/K, and the 
      88                 :            :     heat transfer factor of the tank is 1.115 Watts/sq-ft/K.
      89                 :            : 
      90                 :            : <h3>Fuel Dump:</h3>
      91                 :            : 
      92                 :            :     Fuel dumping is handled by the FGPropulsion class.  A standpipe can be defined
      93                 :            :     here for each tank which sets the level of contents (in pounds) which is not dumpable.
      94                 :            :     Default standpipe level is zero, making all contents dumpable.
      95                 :            : 
      96                 :            : <h3>Fuel Transfer:</h3>
      97                 :            : 
      98                 :            :     Fuel transfer is handled by the FGPropulsion class, however the contents of tanks
      99                 :            :     may be manipulated directly using the SetContents() function here, or via the property
     100                 :            :     tree at <tt>propulsion/tank[i]/contents-lbs</tt>, where i is the tank number (Tanks
     101                 :            :     are automatically numbered, starting at zero, in the order in which they are read in
     102                 :            :     the aircraft configuration file).  The latter method allows one to use a system of FCS
     103                 :            :     components to control tank contents. 
     104                 :            : 
     105                 :            : <h3>Configuration File Format:</h3>
     106                 :            : 
     107                 :            : @code
     108                 :            : <tank type="{FUEL | OXIDIZER}">
     109                 :            :   <grain_config type="{CYLINDRICAL | ENDBURNING}">
     110                 :            :     <length unit="{IN | FT | M}"> {number} </radius>
     111                 :            :   </grain_config>
     112                 :            :   <location unit="{FT | M | IN}">
     113                 :            :     <x> {number} </x>
     114                 :            :     <y> {number} </y>
     115                 :            :     <z> {number} </z>
     116                 :            :   </location>
     117                 :            :   <drain_location unit="{FT | M | IN}">
     118                 :            :     <x> {number} </x>
     119                 :            :     <y> {number} </y>
     120                 :            :     <z> {number} </z>
     121                 :            :   </drain_location>
     122                 :            :   <radius unit="{IN | FT | M}"> {number} </radius>
     123                 :            :   <capacity unit="{LBS | KG}"> {number} </capacity>
     124                 :            :   <contents unit="{LBS | KG}"> {number} </contents>
     125                 :            :   <temperature> {number} </temperature> <!-- must be degrees fahrenheit -->
     126                 :            :   <standpipe unit="{LBS | KG"}> {number} </standpipe>
     127                 :            :   <priority> {integer} </priority>
     128                 :            :   <density unit="{KG/L | LBS/GAL}"> {number} </density>
     129                 :            :   <type> {string} </type> <!-- will override previous density setting -->
     130                 :            : </tank>
     131                 :            : @endcode
     132                 :            : 
     133                 :            : <h3>Definition of the tank configuration file parameters:</h3>
     134                 :            : 
     135                 :            : - \b type - One of FUEL or OXIDIZER.  This is required.
     136                 :            : - \b radius - Equivalent radius of tank for modeling slosh, defaults to inches.
     137                 :            : - \b grain_config type - One of CYLINDRICAL or ENDBURNING.
     138                 :            : - \b length - length of tank for modeling solid fuel propellant grain, defaults to inches.
     139                 :            : - \b capacity - Capacity, defaults to pounds.
     140                 :            : - \b contents - Initial contents, defaults to pounds.
     141                 :            : - \b temperature - Initial temperature, defaults to degrees Fahrenheit.
     142                 :            : - \b standpipe - Minimum contents to which tank can dump, defaults to pounds.
     143                 :            : - \b priority - Establishes feed sequence of tank. "1" is the highest priority.
     144                 :            : - \b density - Density of liquid tank contents.
     145                 :            : - \b type - Named fuel type. One of AVGAS, JET-A, JET-A1, JET-B, JP-1, JP-2, JP-3,
     146                 :            : - \b        JP-4, JP-5, JP-6, JP-7, JP-8, JP-8+100, RP-1, T-1, ETHANOL, HYDRAZINE,
     147                 :            : - \b        F-34, F-35, F-40, F-44, AVTAG, AVCAT
     148                 :            : 
     149                 :            : location:
     150                 :            : - \b x - Location of tank on aircraft's x-axis, defaults to inches.
     151                 :            : - \b y - Location of tank on aircraft's y-axis, defaults to inches.
     152                 :            : - \b z - Location of tank on aircraft's z-axis, defaults to inches.
     153                 :            : 
     154                 :            : drain_location:
     155                 :            : - \b x - Location of tank drain on aircraft's x-axis, defaults to inches.
     156                 :            : - \b y - Location of tank drain on aircraft's y-axis, defaults to inches.
     157                 :            : - \b z - Location of tank drain on aircraft's z-axis, defaults to inches.
     158                 :            : 
     159                 :            : <h3>Default values of the tank configuration file parameters:</h3>
     160                 :            : 
     161                 :            : - \b type - ttUNKNOWN  (causes a load error in the propulsion configuration)
     162                 :            : - \b location, \b drain_location - both optional, but a warning message will
     163                 :            : be printed to the console if the location is not given
     164                 :            : - \b x - 0.0  (both full and drained CG locations)
     165                 :            : - \b y - 0.0  (both full and drained CG locations)
     166                 :            : - \b z - 0.0  (both full and drained CG locations)
     167                 :            : - \b radius - 0.0
     168                 :            : - \b capacity - 0.00001 (tank capacity must not be zero)
     169                 :            : - \b contents - 0.0
     170                 :            : - \b temperature - -9999.0 (flag which indicates no temperature is set)
     171                 :            : - \b standpipe - 0.0 (all contents may be dumped)
     172                 :            : - \b priority - 1 (highest feed sequence priority)
     173                 :            : - \b density - 6.6
     174                 :            : 
     175                 :            :     @author Jon Berndt, Dave Culp
     176                 :            :     @see Akbar, Raza et al. "A Simple Analysis of Fuel Addition to the CWT of
     177                 :            :     747", California Institute of Technology, 1998,
     178                 :            :     http://www.galcit.caltech.edu/EDL/projects/JetA/reports/lumped.pdf
     179                 :            : */
     180                 :            : 
     181                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     182                 :            : CLASS DECLARATION
     183                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
     184                 :            : 
     185                 :            : class FGTank : public FGJSBBase
     186                 :            : {
     187                 :            : public:
     188                 :            :   /** Constructor.
     189                 :            :       The constructor reads in the defining parameters from a configuration file.
     190                 :            :       @param exec a pointer to the base FGFDMExec instance.
     191                 :            :       @param el a pointer to the Tank element.
     192                 :            :       @param tank_number the tank number (zero based).
     193                 :            :   */
     194                 :            :   FGTank(FGFDMExec* exec, Element* el, int tank_number);
     195                 :            :   /// Destructor
     196                 :            :   ~FGTank();
     197                 :            : 
     198                 :            :   enum TankType {ttUNKNOWN, ttFUEL, ttOXIDIZER};
     199                 :            :   enum GrainType {gtUNKNOWN, gtCYLINDRICAL, gtENDBURNING};
     200                 :            : 
     201                 :            :   /** Removes fuel from the tank.
     202                 :            :       This function removes fuel from a tank. If the tank empties, it is
     203                 :            :       deselected.
     204                 :            :       @param used the amount of fuel used in lbs.
     205                 :            :       @return the remaining contents of the tank in lbs.
     206                 :            :   */
     207                 :            :   double Drain(double used);
     208                 :            : 
     209                 :            :   /** Performs local, tanks-specific calculations, such as fuel temperature.
     210                 :            :       This function calculates the temperature of the fuel in the tank.
     211                 :            :       @param dt the time step for this model.
     212                 :            :       @return the current temperature in degrees Celsius.
     213                 :            :   */
     214                 :            :   double Calculate(double dt);
     215                 :            : 
     216                 :            :   /** Retrieves the type of tank: Fuel or Oxidizer.
     217                 :            :       @return the tank type, 0 for undefined, 1 for fuel, and 2 for oxidizer.
     218                 :            :   */
     219                 :    4669422 :   int GetType(void) {return Type;}
     220                 :            : 
     221                 :            :   /** Resets the tank parameters to the initial conditions */
     222                 :            :   void ResetToIC(void);
     223                 :            : 
     224                 :            :   /** If the tank is set to supply fuel, this function returns true.
     225                 :            :       @return true if this tank is set to a non-zero priority.*/
     226                 :    5798519 :   bool GetSelected(void) {return Selected;}
     227                 :            : 
     228                 :            :   /** Gets the tank fill level.
     229                 :            :       @return the fill level in percent, from 0 to 100.*/
     230                 :          0 :   double GetPctFull(void) {return PctFull;}
     231                 :            : 
     232                 :            :   /** Gets the capacity of the tank.
     233                 :            :       @return the capacity of the tank in pounds. */
     234                 :      29942 :   double GetCapacity(void) {return Capacity;}
     235                 :            : 
     236                 :            :   /** Gets the capacity of the tank.
     237                 :            :       @return the capacity of the tank in gallons. */
     238                 :            :   double GetCapacityGallons(void) {return Capacity/Density;}
     239                 :            : 
     240                 :            :   /** Gets the contents of the tank.
     241                 :            :       @return the contents of the tank in pounds. */
     242                 :    5179438 :   double GetContents(void) const {return Contents;}
     243                 :            : 
     244                 :            :   /** Gets the contents of the tank.
     245                 :            :       @return the contents of the tank in gallons. */
     246                 :            :   double GetContentsGallons(void) const {return Contents/Density;}
     247                 :            : 
     248                 :            :   /** Gets the temperature of the fuel.
     249                 :            :       The temperature of the fuel is calculated if an initial tempearture is
     250                 :            :       given in the configuration file. 
     251                 :            :       @return the temperature of the fuel in degrees C IF an initial temperature
     252                 :            :       is given, otherwise 0.0 C is returned. */
     253                 :            :   double GetTemperature_degC(void) {return Temperature;}
     254                 :            : 
     255                 :            :   /** Gets the temperature of the fuel.
     256                 :            :       The temperature of the fuel is calculated if an initial tempearture is
     257                 :            :       given in the configuration file. 
     258                 :            :       @return the temperature of the fuel in degrees F IF an initial temperature
     259                 :            :       is given, otherwise 32 degrees F is returned. */
     260                 :            :   double GetTemperature(void) {return CelsiusToFahrenheit(Temperature);}
     261                 :            : 
     262                 :            :   /** Returns the density of a named fuel type.
     263                 :            :       @return the density, in lbs/gal, or 6.6 if name cannot be resolved. */
     264                 :            :   double ProcessFuelName(std::string const& name); 
     265                 :            : 
     266                 :     324042 :   double GetIxx(void) {return Ixx;}
     267                 :     324042 :   double GetIyy(void) {return Iyy;}
     268                 :     324042 :   double GetIzz(void) {return Izz;}
     269                 :            : 
     270                 :          0 :   double GetStandpipe(void) {return Standpipe;}
     271                 :            : 
     272                 :         28 :   int  GetPriority(void) const {return Priority;}
     273                 :          0 :   void SetPriority(int p) { Priority = p; Selected = p>0 ? true:false; } 
     274                 :            : 
     275                 :         22 :   double GetDensity(void) const {return Density;}
     276                 :            :   void   SetDensity(double d) { Density = d; }
     277                 :            : 
     278                 :            :   const FGColumnVector3 GetXYZ(void);
     279                 :            :   const double GetXYZ(int idx);
     280                 :            : 
     281                 :          4 :   const GrainType GetGrainType(void) {return grainType;}
     282                 :            : 
     283                 :            :   double Fill(double amount);
     284                 :            :   void SetContents(double amount);
     285                 :            :   void SetContentsGallons(double gallons);
     286                 :          0 :   void SetTemperature(double temp) { Temperature = temp; }
     287                 :          0 :   void SetStandpipe(double amount) { Standpipe = amount; }
     288                 :            :   void SetSelected(bool sel) { sel==true ? SetPriority(1):SetPriority(0); }
     289                 :            : 
     290                 :            : private:
     291                 :            :   TankType Type;
     292                 :            :   GrainType grainType;
     293                 :            :   int TankNumber;
     294                 :            :   std::string type;
     295                 :            :   std::string strGType;
     296                 :            :   FGColumnVector3 vXYZ;
     297                 :            :   FGColumnVector3 vXYZ_drain;
     298                 :            :   double Capacity;
     299                 :            :   double Radius;
     300                 :            :   double InnerRadius;
     301                 :            :   double Length;
     302                 :            :   double Volume;
     303                 :            :   double Density;
     304                 :            :   double Ixx;
     305                 :            :   double Iyy;
     306                 :            :   double Izz;
     307                 :            :   double PctFull;
     308                 :            :   double Contents, InitialContents;
     309                 :            :   double Area;
     310                 :            :   double Temperature, InitialTemperature;
     311                 :            :   double Standpipe, InitialStandpipe;
     312                 :            :   bool  Selected;
     313                 :            :   int Priority, InitialPriority;
     314                 :            :   FGFDMExec* Exec;
     315                 :            :   FGPropertyManager* PropertyManager;
     316                 :            :   void CalculateInertias(void);
     317                 :            :   void Debug(int from);
     318                 :            : };
     319                 :            : }
     320                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     321                 :            : #endif
     322                 :            : 

Generated by: LCOV version 1.9