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

           Branch data     Line data    Source code
       1                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       2                 :            : 
       3                 :            :  Header:       FGRocket.h
       4                 :            :  Author:       Jon S. Berndt
       5                 :            :  Date started: 09/12/2000
       6                 :            : 
       7                 :            :  ------------- Copyright (C) 2000  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                 :            : HISTORY
      27                 :            : --------------------------------------------------------------------------------
      28                 :            : 09/12/2000  JSB  Created
      29                 :            : 
      30                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      31                 :            : SENTRY
      32                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      33                 :            : 
      34                 :            : #ifndef FGROCKET_H
      35                 :            : #define FGROCKET_H
      36                 :            : 
      37                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      38                 :            : INCLUDES
      39                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      40                 :            : 
      41                 :            : #include "FGEngine.h"
      42                 :            : #include "math/FGTable.h"
      43                 :            : #include "input_output/FGXMLElement.h"
      44                 :            : 
      45                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      46                 :            : DEFINITIONS
      47                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      48                 :            : 
      49                 :            : #define ID_ROCKET "$Id: FGRocket.h,v 1.14 2010/08/21 18:08:25 jberndt Exp $"
      50                 :            : 
      51                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      52                 :            : FORWARD DECLARATIONS
      53                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      54                 :            : 
      55                 :            : namespace JSBSim {
      56                 :            : 
      57                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      58                 :            : CLASS DOCUMENTATION
      59                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      60                 :            : 
      61                 :            : /** Models a generic rocket engine.
      62                 :            :     The rocket engine is modeled given the following parameters:
      63                 :            :     <ul>
      64                 :            :         <li>Specific Impulse (in sec)</li>
      65                 :            :     </ul>
      66                 :            :     Additionally, the following control inputs, operating characteristics, and
      67                 :            :     location are required, as with all other engine types:
      68                 :            :     <ul>
      69                 :            :         <li>Throttle setting (in percent, from 0 to 1.0)</li>
      70                 :            :         <li>Maximum allowable throttle setting</li>
      71                 :            :         <li>Minimum working throttle setting</li>
      72                 :            :         <li>Sea level fuel flow at maximum thrust</li>
      73                 :            :         <li>Sea level oxidizer flow at maximum thrust</li>
      74                 :            :         <li>X, Y, Z location in structural coordinate frame</li>
      75                 :            :         <li>Pitch and Yaw</li>
      76                 :            :     </ul>
      77                 :            :     The nozzle exit pressure (p2) is returned via a
      78                 :            :     call to FGNozzle::GetPowerRequired(). This exit pressure is used
      79                 :            :     to get the at-altitude thrust level.
      80                 :            :     
      81                 :            :     One can model the thrust of a solid rocket by providing a normalized thrust table
      82                 :            :     as a function of time. For instance, the space shuttle solid rocket booster
      83                 :            :     normalized thrust value looks roughly like this:
      84                 :            : 
      85                 :            : <pre>    
      86                 :            :  \<thrust_table name="propulsion/thrust_time" type="internal">
      87                 :            :    \<tableData>
      88                 :            :       0.0   0.00
      89                 :            :       0.2   0.91
      90                 :            :       8.0   0.97
      91                 :            :      16.0   0.99
      92                 :            :      20.0   1.00
      93                 :            :      21.0   1.00
      94                 :            :      24.0   0.95
      95                 :            :      32.0   0.85
      96                 :            :      40.0   0.78
      97                 :            :      48.0   0.72
      98                 :            :      50.0   0.71
      99                 :            :      52.0   0.71
     100                 :            :      56.0   0.73
     101                 :            :      64.0   0.78
     102                 :            :      72.0   0.82
     103                 :            :      80.0   0.81
     104                 :            :      88.0   0.73
     105                 :            :      96.0   0.69
     106                 :            :     104.0   0.59
     107                 :            :     112.0   0.46
     108                 :            :     120.0   0.09
     109                 :            :     132.0   0.00
     110                 :            :    \</tableData>
     111                 :            :  \</thrust_table>
     112                 :            : </pre>
     113                 :            : 
     114                 :            : The left column is time, the right column is normalized thrust. Inside the
     115                 :            : FGRocket class code, the maximum thrust is calculated, and multiplied by this
     116                 :            : table. The Rocket class also tracks burn time. All that needs to be done is
     117                 :            : for the rocket engine to be throttle up to 1. At that time, the solid rocket
     118                 :            : fuel begins burning and thrust is provided.
     119                 :            : 
     120                 :            :     @author Jon S. Berndt
     121                 :            :     $Id: FGRocket.h,v 1.14 2010/08/21 18:08:25 jberndt Exp $
     122                 :            :     @see FGNozzle,
     123                 :            :     FGThruster,
     124                 :            :     FGForce,
     125                 :            :     FGEngine,
     126                 :            :     FGPropulsion,
     127                 :            :     FGTank
     128                 :            : */
     129                 :            : 
     130                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     131                 :            : CLASS DECLARATION
     132                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
     133                 :            : 
     134                 :            : class FGRocket : public FGEngine
     135                 :            : {
     136                 :            : public:
     137                 :            :   /** Constructor.
     138                 :            :       @param exec pointer to JSBSim parent object, the FDM Executive.
     139                 :            :       @param el a pointer to the XML Element instance representing the engine.
     140                 :            :       @param engine_number engine number */
     141                 :            :   FGRocket(FGFDMExec* exec, Element *el, int engine_number);
     142                 :            : 
     143                 :            :   /** Destructor */
     144                 :            :   ~FGRocket(void);
     145                 :            : 
     146                 :            :   /** Determines the thrust.*/
     147                 :            :   void Calculate(void);
     148                 :            : 
     149                 :            :   /** Gets the total impulse of the rocket.
     150                 :            :       @return The cumulative total impulse of the rocket up to this time.*/
     151                 :         12 :   double GetTotalImpulse(void) const {return It;}
     152                 :            : 
     153                 :            :   /** Gets the flame-out status.
     154                 :            :       The engine will "flame out" if the throttle is set below the minimum
     155                 :            :       sustainable-thrust setting.
     156                 :            :       @return true if engine has flamed out. */
     157                 :            :   bool GetFlameout(void) {return Flameout;}
     158                 :            : 
     159                 :         10 :   double GetOxiFlowRate(void) const {return OxidizerFlowRate;}
     160                 :            : 
     161                 :            :   std::string GetEngineLabels(const std::string& delimiter);
     162                 :            :   std::string GetEngineValues(const std::string& delimiter);
     163                 :            : 
     164                 :            :   /** Sets the thrust variation for a solid rocket engine. 
     165                 :            :       Solid propellant rocket motor thrust characteristics are typically
     166                 :            :       defined at 70 degrees F temperature. At any other temperature,
     167                 :            :       performance will be different. Warmer propellant grain will
     168                 :            :       burn quicker and at higher thrust.  Total motor impulse is
     169                 :            :       not changed for change in thrust.
     170                 :            :       @param var the variation in percent. That is, a 2 percent
     171                 :            :       variation would be specified as 0.02. A positive 2% variation
     172                 :            :       in thrust would increase the thrust by 2%, and shorten the burn time. */
     173                 :          0 :   void SetThrustVariation(double var) {ThrustVariation = var;}
     174                 :            : 
     175                 :            :   /** Sets the variation in total motor energy.
     176                 :            :       The total energy present in a solid rocket motor can be modified
     177                 :            :       (such as might happen with manufacturing variations) by setting
     178                 :            :       the total Isp variation. 
     179                 :            :       @param var the variation in percent. That is, a 2 percent
     180                 :            :       variation would be specified as 0.02. This variation will 
     181                 :            :       affect the total thrust, but not the burn time.*/
     182                 :          0 :   void SetTotalIspVariation(double var) {TotalIspVariation = var;}
     183                 :            : 
     184                 :            :   /** Returns the thrust variation, if any. */
     185                 :          2 :   double GetThrustVariation(void) const {return ThrustVariation;}
     186                 :            : 
     187                 :            :   /** Returns the Total Isp variation, if any. */
     188                 :          2 :   double GetTotalIspVariation(void) const {return TotalIspVariation;}
     189                 :            : 
     190                 :            : private:
     191                 :            :   /** Reduces the fuel in the active tanks by the amount required.
     192                 :            :       This function should be called from within the
     193                 :            :       derived class' Calculate() function before any other calculations are
     194                 :            :       done. This base class method removes fuel from the fuel tanks as
     195                 :            :       appropriate, and sets the starved flag if necessary. */
     196                 :            :   void ConsumeFuel(void);
     197                 :            : 
     198                 :            :   /** The fuel need is calculated based on power levels and flow rate for that
     199                 :            :       power level. It is also turned from a rate into an actual amount (pounds)
     200                 :            :       by multiplying it by the delta T and the rate.
     201                 :            :       @return Total fuel requirement for this engine in pounds. */
     202                 :            :   double CalcFuelNeed(void);
     203                 :            : 
     204                 :            :   /** The oxidizer need is calculated based on power levels and flow rate for that
     205                 :            :       power level. It is also turned from a rate into an actual amount (pounds)
     206                 :            :       by multiplying it by the delta T and the rate.
     207                 :            :       @return Total oxidizer requirement for this engine in pounds. */
     208                 :            :   double CalcOxidizerNeed(void);
     209                 :            : 
     210                 :            :   /** Returns the vacuum thrust.
     211                 :            :       @return The vacuum thrust in lbs. */
     212                 :         12 :   double GetVacThrust(void) const {return VacThrust;}
     213                 :            : 
     214                 :            :   void bindmodel(void);
     215                 :            : 
     216                 :            :   double Isp; // Vacuum Isp
     217                 :            :   double It;
     218                 :            :   double MxR; // Mixture Ratio
     219                 :            :   double BurnTime;
     220                 :            :   double ThrustVariation;
     221                 :            :   double TotalIspVariation;
     222                 :            :   double VacThrust;
     223                 :            :   double previousFuelNeedPerTank;
     224                 :            :   double previousOxiNeedPerTank;
     225                 :            :   double OxidizerExpended;
     226                 :            :   double SLOxiFlowMax;
     227                 :            :   double OxidizerFlowRate;
     228                 :            :   double PropellantFlowRate;
     229                 :            :   bool Flameout;
     230                 :            :   double BuildupTime;
     231                 :            :   FGTable* ThrustTable;
     232                 :            : 
     233                 :            :   void Debug(int from);
     234                 :            : };
     235                 :            : }
     236                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     237                 :            : #endif
     238                 :            : 

Generated by: LCOV version 1.9