]> git.mxchange.org Git - flightgear.git/blob - JSBsim/FGEngine.cpp
8ceca33be6208fcd27f47c35bcc7f2c1e33302c7
[flightgear.git] / JSBsim / FGEngine.cpp
1 /*******************************************************************************
2
3  Module:       FGEngine.cpp
4  Author:       Jon Berndt
5  Date started: 01/21/99
6  Called by:    FGAircraft
7
8  ------------- Copyright (C) 1999  Jon S. Berndt (jsb@hal-pc.org) -------------
9
10  This program is free software; you can redistribute it and/or modify it under
11  the terms of the GNU General Public License as published by the Free Software
12  Foundation; either version 2 of the License, or (at your option) any later
13  version.
14
15  This program is distributed in the hope that it will be useful, but WITHOUT
16  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
18  details.
19
20  You should have received a copy of the GNU General Public License along with
21  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
22  Place - Suite 330, Boston, MA  02111-1307, USA.
23
24  Further information about the GNU General Public License can also be found on
25  the world wide web at http://www.gnu.org.
26
27 FUNCTIONAL DESCRIPTION
28 --------------------------------------------------------------------------------
29 See header file.
30
31 ARGUMENTS
32 --------------------------------------------------------------------------------
33
34
35 HISTORY
36 --------------------------------------------------------------------------------
37
38 01/21/99   JSB   Created
39
40 ********************************************************************************
41 INCLUDES
42 *******************************************************************************/
43
44 #include "FGEngine.h"
45 #include "FGState.h"
46 #include "FGFCS.h"
47 #include <fstream.h>
48 #include <stdio.h>
49 #include <stdlib.h>
50 #include <string.h>
51
52 /*******************************************************************************
53 ************************************ CODE **************************************
54 *******************************************************************************/
55
56
57 FGEngine::FGEngine(char *engineName)
58 {
59   char fullpath[250];
60   char tag[220];
61
62   strcpy(Name, engineName);
63   sprintf(fullpath,"/h/curt/projects/FlightGear/Simulator/FDM/JSBsim/engine/%s.dat", engineName);
64   ifstream enginefile(fullpath);
65
66   if (enginefile) {
67     enginefile >> tag;
68     if (strstr(tag,"ROCKET")) Type = 0;
69     else if (strstr(tag,"PISTON")) Type = 1;
70     else if (strstr(tag,"TURBOPROP")) Type = 2;
71     else if (strstr(tag,"TURBOJET")) Type = 3;
72     else Type = 0;
73     enginefile >> X;
74     enginefile >> Y;
75     enginefile >> Z;
76     enginefile >> SLThrustMax;
77     enginefile >> VacThrustMax;
78     enginefile >> MaxThrottle;
79     enginefile >> MinThrottle;
80     enginefile >> SLFuelFlowMax;
81     if (Type == 0)
82       enginefile >> SLOxiFlowMax;
83     enginefile.close();
84   } else {
85     cerr << "Unable to open engine definition file " << engineName << endl;
86   }
87
88   Thrust = 0.0;
89   Starved = Flameout = false;
90 }
91
92
93 FGEngine::~FGEngine(void)
94 {
95 }
96
97
98 float FGEngine::CalcRocketThrust(void)
99 {
100   float lastThrust;
101
102   Throttle = FCS->GetThrottle();
103   lastThrust = Thrust;                 // last actual thrust
104
105   if (Throttle < MinThrottle || Starved) {
106     PctPower = Thrust = 0.0; // desired thrust
107     Flameout = true;
108   } else {
109     PctPower = Throttle / MaxThrottle;
110     Thrust = PctPower*((1.0 - State->Getrho() / 0.002378)*(VacThrustMax - SLThrustMax) +
111                                SLThrustMax); // desired thrust
112     Flameout = false;
113   }
114
115   Thrust +=     0.8*(Thrust - lastThrust); // actual thrust
116
117   return Thrust;
118 }
119
120
121 float FGEngine::CalcPistonThrust(void)
122 {
123   return Thrust;
124 }
125
126
127 float FGEngine::CalcThrust(void)
128 {
129   switch(Type) {
130   case 0: // Rocket
131     return CalcRocketThrust();
132     break;
133   case 1: // Piston
134     return CalcPistonThrust();
135     break;
136   default:
137     return 9999.0;
138     break;
139   }
140 }
141
142 float FGEngine::CalcFuelNeed() {
143   FuelNeed = SLFuelFlowMax*PctPower;
144   return FuelNeed;
145 }
146
147
148 float FGEngine::CalcOxidizerNeed() {
149   OxidizerNeed = SLOxiFlowMax*PctPower;
150   return OxidizerNeed;
151 }
152