~ubuntu-branches/ubuntu/quantal/flightgear/quantal

« back to all changes in this revision

Viewing changes to src/FDM/JSBSim/FGPropulsion.h

  • Committer: Bazaar Package Importer
  • Author(s): Ove Kaaven
  • Date: 2002-03-27 21:50:15 UTC
  • Revision ID: james.westby@ubuntu.com-20020327215015-0rvi3o8iml0a8s93
Tags: upstream-0.7.9
ImportĀ upstreamĀ versionĀ 0.7.9

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
2
 
 
3
 Header:       FGPropulsion.h
 
4
 Author:       Jon S. Berndt
 
5
 Date started: 08/20/00
 
6
 
 
7
 ------------- Copyright (C) 1999  Jon S. Berndt (jsb@hal-pc.org) -------------
 
8
 
 
9
 This program is free software; you can redistribute it and/or modify it under
 
10
 the terms of the GNU 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 General Public License for more
 
17
 details.
 
18
 
 
19
 You should have received a copy of the GNU 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 General Public License can also be found on
 
24
 the world wide web at http://www.gnu.org.
 
25
 
 
26
HISTORY
 
27
--------------------------------------------------------------------------------
 
28
08/20/00   JSB   Created
 
29
 
 
30
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
31
SENTRY
 
32
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
33
 
 
34
#ifndef FGPROPULSION_H
 
35
#define FGPROPULSION_H
 
36
 
 
37
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
38
INCLUDES
 
39
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
40
 
 
41
#ifdef FGFS
 
42
#  include <simgear/compiler.h>
 
43
#  ifdef SG_HAVE_STD_INCLUDES
 
44
#    include <vector>
 
45
#    include <iterator>
 
46
#  else
 
47
#    include <vector.h>
 
48
#    include <iterator.h>
 
49
#  endif
 
50
#else
 
51
#  include <vector>
 
52
#  include <iterator>
 
53
#endif
 
54
 
 
55
#include "FGModel.h"
 
56
 
 
57
#include "FGRocket.h"
 
58
#include "FGPiston.h"
 
59
#include "FGTurboShaft.h"
 
60
#include "FGTurboJet.h"
 
61
#include "FGTurboProp.h"
 
62
#include "FGTank.h"
 
63
#include "FGPropeller.h"
 
64
#include "FGNozzle.h"
 
65
 
 
66
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
67
DEFINITIONS
 
68
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
69
 
 
70
#define ID_PROPULSION "$Id: FGPropulsion.h,v 1.24 2002/01/19 04:32:28 david Exp $"
 
71
 
 
72
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
73
FORWARD DECLARATIONS
 
74
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
75
 
 
76
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
77
COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
 
78
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
79
 
 
80
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
81
CLASS DOCUMENTATION
 
82
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
83
 
 
84
/** Propulsion management class.
 
85
    FGPropulsion manages all aspects of propulsive force generation, including
 
86
    containment of engines, tanks, and thruster class instances in STL vectors,
 
87
    and the interaction and communication between them.
 
88
    @author Jon S. Berndt
 
89
    @version $Id: FGPropulsion.h,v 1.24 2002/01/19 04:32:28 david Exp $
 
90
    @see FGEngine
 
91
    @see FGTank
 
92
    @see FGThruster
 
93
*/
 
94
 
 
95
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
96
CLASS DECLARATION
 
97
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
98
 
 
99
class FGPropulsion : public FGModel {
 
100
public:
 
101
  FGPropulsion(FGFDMExec*);
 
102
  ~FGPropulsion();
 
103
 
 
104
  /** Executes the propulsion model.
 
105
      The initial plan for the FGPropulsion class calls for Run() to be executed,
 
106
      performing the following tasks:
 
107
      <ol>
 
108
  <li>Determine the drag - or power required - for the attached thrust effector
 
109
      for this engine so that any feedback to the engine can be performed. This
 
110
      is done by calling FGThruster::CalculatePReq()</li>
 
111
  <li>Given 1, above, calculate the power available from the engine. This is
 
112
      done by calling FGEngine::CalculatePAvail()</li>
 
113
  <li>Next, calculate the thrust output from the thruster model given the power
 
114
      available and the power required. This may also result in new performance
 
115
      numbers for the thruster in the case of the propeller, at least. This
 
116
      result is returned from a call to Calculate().</li></ol>
 
117
 
 
118
      [Note: Should we be checking the Starved flag here?] */
 
119
  bool Run(void);
 
120
 
 
121
  /** Loads the propulsion system (engine[s], tank[s], thruster[s]).
 
122
      Characteristics of the propulsion system are read in from the config file.
 
123
      @param AC_cfg pointer to the config file instance that describes the
 
124
             aircraft being modeled.
 
125
      @return true if successfully loaded, otherwise false */
 
126
  bool Load(FGConfigFile* AC_cfg);
 
127
 
 
128
  /// Retrieves the number of engines defined for the aircraft.
 
129
  inline unsigned int GetNumEngines(void) {return Engines.size();}
 
130
 
 
131
  /** Retrieves an engine object pointer from the list of engines.
 
132
      @param index the engine index within the vector container
 
133
      @return the address of the specific engine, or zero if no such engine is
 
134
              available */
 
135
  inline FGEngine* GetEngine(unsigned int index) {
 
136
                      if (index <= Engines.size()-1) return Engines[index];
 
137
                      else                           return 0L;      }
 
138
 
 
139
  // Retrieves the number of tanks defined for the aircraft.
 
140
  inline unsigned int GetNumTanks(void) {return Tanks.size();}
 
141
 
 
142
  /** Retrieves a tank object pointer from the list of tanks.
 
143
      @param index the tank index within the vector container
 
144
      @return the address of the specific tank, or zero if no such tank is
 
145
              available */
 
146
  inline FGTank* GetTank(unsigned int index) {
 
147
                      if (index <= Tanks.size()-1) return Tanks[index];
 
148
                      else                         return 0L;        }
 
149
 
 
150
  /** Retrieves a thruster object pointer from the list of thrusters.
 
151
      @param index the thruster index within the vector container
 
152
      @return the address of the specific thruster, or zero if no such thruster is
 
153
              available */
 
154
  inline FGThruster* GetThruster(unsigned int index) {
 
155
                      if (index <= Thrusters.size()-1) return Thrusters[index];
 
156
                      else                             return 0L;    }
 
157
 
 
158
  /** Returns the number of fuel tanks currently actively supplying fuel */
 
159
  inline int GetnumSelectedFuelTanks(void) {return numSelectedFuelTanks;}
 
160
 
 
161
  /** Returns the number of oxidizer tanks currently actively supplying oxidizer */
 
162
  inline int GetnumSelectedOxiTanks(void)  {return numSelectedOxiTanks;}
 
163
 
 
164
  /** Loops the engines/thrusters until thrust output steady (used for trimming) */
 
165
  bool GetSteadyState(void);
 
166
  
 
167
  /** starts the engines in IC mode (dt=0).  All engine-specific setup must
 
168
      be done before calling this (i.e. magnetos, starter engage, etc.) */
 
169
  bool ICEngineStart(void);
 
170
  
 
171
  string GetPropulsionStrings(void);
 
172
  string GetPropulsionValues(void);
 
173
 
 
174
  inline FGColumnVector3& GetForces(void)  {return vForces; }
 
175
  inline double GetForces(int n) { return vForces(n);}
 
176
  inline FGColumnVector3& GetMoments(void) {return vMoments;}
 
177
  inline double GetMoments(int n) {return vMoments(n);}
 
178
  
 
179
  FGColumnVector3& GetTanksCG(void);
 
180
  double GetTanksWeight(void);
 
181
 
 
182
  double GetTanksIxx(const FGColumnVector3& vXYZcg);
 
183
  double GetTanksIyy(const FGColumnVector3& vXYZcg);
 
184
  double GetTanksIzz(const FGColumnVector3& vXYZcg);
 
185
  double GetTanksIxz(const FGColumnVector3& vXYZcg);
 
186
  double GetTanksIxy(const FGColumnVector3& vXYZcg);
 
187
 
 
188
private:
 
189
  vector <FGEngine*>   Engines;
 
190
  vector <FGTank*>     Tanks;
 
191
  vector <FGTank*>::iterator iTank;
 
192
  vector <FGThruster*> Thrusters;
 
193
  unsigned int numSelectedFuelTanks;
 
194
  unsigned int numSelectedOxiTanks;
 
195
  unsigned int numFuelTanks;
 
196
  unsigned int numOxiTanks;
 
197
  unsigned int numEngines;
 
198
  unsigned int numTanks;
 
199
  unsigned int numThrusters;
 
200
  double dt;
 
201
  FGColumnVector3 vForces;
 
202
  FGColumnVector3 vMoments;
 
203
  FGColumnVector3 vXYZtank;
 
204
  void Debug(int from);
 
205
};
 
206
 
 
207
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
208
#endif
 
209