1 /*******************************************************************************
8 ------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
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
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
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.
24 Further information about the GNU General Public License can also be found on
25 the world wide web at http://www.gnu.org.
27 FUNCTIONAL DESCRIPTION
28 --------------------------------------------------------------------------------
32 --------------------------------------------------------------------------------
36 --------------------------------------------------------------------------------
40 ********************************************************************************
42 *******************************************************************************/
52 /*******************************************************************************
53 ************************************ CODE **************************************
54 *******************************************************************************/
57 FGEngine::FGEngine(char *engineName)
62 strcpy(Name, engineName);
63 sprintf(fullpath,"/h/curt/projects/FlightGear/Simulator/FDM/JSBsim/engine/%s.dat", engineName);
64 ifstream enginefile(fullpath);
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;
76 enginefile >> SLThrustMax;
77 enginefile >> VacThrustMax;
78 enginefile >> MaxThrottle;
79 enginefile >> MinThrottle;
80 enginefile >> SLFuelFlowMax;
82 enginefile >> SLOxiFlowMax;
85 cerr << "Unable to open engine definition file " << engineName << endl;
89 Starved = Flameout = false;
93 FGEngine::~FGEngine(void)
98 float FGEngine::CalcRocketThrust(void)
102 Throttle = FCS->GetThrottle();
103 lastThrust = Thrust; // last actual thrust
105 if (Throttle < MinThrottle || Starved) {
106 PctPower = Thrust = 0.0; // desired thrust
109 PctPower = Throttle / MaxThrottle;
110 Thrust = PctPower*((1.0 - State->Getrho() / 0.002378)*(VacThrustMax - SLThrustMax) +
111 SLThrustMax); // desired thrust
115 Thrust += 0.8*(Thrust - lastThrust); // actual thrust
121 float FGEngine::CalcPistonThrust(void)
127 float FGEngine::CalcThrust(void)
131 return CalcRocketThrust();
134 return CalcPistonThrust();
142 float FGEngine::CalcFuelNeed() {
143 FuelNeed = SLFuelFlowMax*PctPower;
148 float FGEngine::CalcOxidizerNeed() {
149 OxidizerNeed = SLOxiFlowMax*PctPower;