Update JSBSim files to latest JSBSim CVS.
This commit is contained in:
parent
c3ec11ca13
commit
c74c2f224f
11 changed files with 1056 additions and 963 deletions
|
@ -60,16 +60,42 @@ FGConfigFile::~FGConfigFile()
|
|||
|
||||
string FGConfigFile::GetNextConfigLine(void)
|
||||
{
|
||||
int deblank;
|
||||
|
||||
do {
|
||||
CurrentLine = GetLine();
|
||||
if ((CurrentLine.find("<COMMENT>") != CurrentLine.npos) ||
|
||||
(CurrentLine.find("<!--") != CurrentLine.npos)) CommentsOn = true;
|
||||
(CurrentLine.find("<!--") != CurrentLine.npos)) {
|
||||
CommentsOn = true;
|
||||
CommentString = "";
|
||||
if (CurrentLine.find("<!--") != CurrentLine.npos)
|
||||
CurrentLine.erase(CurrentLine.find("<!--"),4);
|
||||
else if (CurrentLine.find("<COMMENT>") != CurrentLine.npos)
|
||||
CurrentLine.erase(CurrentLine.find("<COMMENT>"),9);
|
||||
while((deblank = CurrentLine.find(" ")) != CurrentLine.npos) CurrentLine.erase(deblank,1);
|
||||
if (CurrentLine.size() <= 2) CurrentLine = "";
|
||||
}
|
||||
|
||||
if ((CurrentLine.find("</COMMENT>") != CurrentLine.npos) ||
|
||||
(CurrentLine.find("-->") != CurrentLine.npos)) {
|
||||
CommentsOn = false;
|
||||
|
||||
if (CurrentLine.find("-->") != CurrentLine.npos)
|
||||
CurrentLine.erase(CurrentLine.find("-->"),4);
|
||||
else if (CurrentLine.find("</COMMENT>") != CurrentLine.npos)
|
||||
CurrentLine.erase(CurrentLine.find("</COMMENT>"),10);
|
||||
|
||||
while((deblank = CurrentLine.find(" ")) != CurrentLine.npos) CurrentLine.erase(deblank,1);
|
||||
if (CurrentLine.size() <= 2) CurrentLine = "";
|
||||
|
||||
CommentString += CurrentLine;
|
||||
GetNextConfigLine();
|
||||
}
|
||||
|
||||
if (CommentsOn) CommentString += CurrentLine + "\r\n";
|
||||
|
||||
} while (IsCommentLine());
|
||||
|
||||
if (CurrentLine.length() == 0) GetNextConfigLine();
|
||||
CurrentIndex = 0;
|
||||
return CurrentLine;
|
||||
|
@ -77,6 +103,13 @@ string FGConfigFile::GetNextConfigLine(void)
|
|||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
string FGConfigFile::GetCommentString(void)
|
||||
{
|
||||
return CommentString;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
string FGConfigFile::GetValue(string val)
|
||||
{
|
||||
unsigned int pos, p1, p2, ptest;
|
||||
|
|
|
@ -117,6 +117,7 @@ public:
|
|||
string GetNextConfigLine(void);
|
||||
string GetValue(string);
|
||||
string GetValue(void);
|
||||
string GetCommentString(void);
|
||||
bool IsCommentLine(void);
|
||||
bool IsOpen(void) {return Opened;}
|
||||
FGConfigFile& operator>>(double&);
|
||||
|
@ -129,6 +130,7 @@ public:
|
|||
private:
|
||||
ifstream cfgfile;
|
||||
string CurrentLine;
|
||||
string CommentString;
|
||||
bool CommentsOn;
|
||||
bool Opened;
|
||||
unsigned int CurrentIndex;
|
||||
|
|
|
@ -1,129 +1,129 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Header: FGDefs.h
|
||||
Author: Jon S. Berndt
|
||||
Date started: 02/01/99
|
||||
|
||||
------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Further information about the GNU General Public License can also be found on
|
||||
the world wide web at http://www.gnu.org.
|
||||
|
||||
HISTORY
|
||||
--------------------------------------------------------------------------------
|
||||
02/01/99 JSB Created
|
||||
|
||||
********************************************************************************
|
||||
SENTRY
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef FGDEFS_H
|
||||
#define FGDEFS_H
|
||||
|
||||
#define GRAVITY 32.174
|
||||
#define INVGRAVITY 0.031081
|
||||
#define EARTHRAD 20925650.00 // feet, equatorial
|
||||
#define EARTHRADSQRD 437882827922500.0
|
||||
#define ONESECOND 4.848136811E-6
|
||||
#define Reng 1716 //Specific Gas Constant,ft^2/(sec^2*R)
|
||||
#define SHRATIO 1.4 //Specific Heat Ratio
|
||||
#define RADTODEG 57.29578
|
||||
#define DEGTORAD 1.745329E-2
|
||||
#define KTSTOFPS 1.68781
|
||||
#define FPSTOKTS 0.592484
|
||||
#define INCHTOFT 0.08333333
|
||||
#define OMEGA_EARTH .00007272205217
|
||||
#define NEEDED_CFG_VERSION "1.40"
|
||||
#define JSBSIM_VERSION "0.8.7"
|
||||
|
||||
#define HPTOFTLBSSEC 550
|
||||
#define METERS_TO_FEET 3.2808
|
||||
|
||||
#if defined ( sgi ) && !defined( __GNUC__ )
|
||||
#define __STL_FUNCTION_TMPL_PARTIAL_ORDER
|
||||
#endif
|
||||
|
||||
enum eParam {
|
||||
FG_UNDEF = 0,
|
||||
FG_TIME,
|
||||
FG_QBAR,
|
||||
FG_WINGAREA,
|
||||
FG_WINGSPAN,
|
||||
FG_CBAR,
|
||||
FG_ALPHA,
|
||||
FG_ALPHADOT,
|
||||
FG_BETA,
|
||||
FG_BETADOT,
|
||||
FG_PHI,
|
||||
FG_THT,
|
||||
FG_PSI,
|
||||
FG_PITCHRATE,
|
||||
FG_ROLLRATE,
|
||||
FG_YAWRATE,
|
||||
FG_CL_SQRD,
|
||||
FG_MACH,
|
||||
FG_ALTITUDE,
|
||||
FG_BI2VEL,
|
||||
FG_CI2VEL,
|
||||
FG_ELEVATOR_POS,
|
||||
FG_AILERON_POS,
|
||||
FG_RUDDER_POS,
|
||||
FG_SPDBRAKE_POS,
|
||||
FG_SPOILERS_POS,
|
||||
FG_FLAPS_POS,
|
||||
FG_ELEVATOR_CMD,
|
||||
FG_AILERON_CMD,
|
||||
FG_RUDDER_CMD,
|
||||
FG_SPDBRAKE_CMD,
|
||||
FG_SPOILERS_CMD,
|
||||
FG_FLAPS_CMD,
|
||||
FG_THROTTLE_CMD,
|
||||
FG_THROTTLE_POS,
|
||||
/*******************************************************************************
|
||||
|
||||
Header: FGDefs.h
|
||||
Author: Jon S. Berndt
|
||||
Date started: 02/01/99
|
||||
|
||||
------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Further information about the GNU General Public License can also be found on
|
||||
the world wide web at http://www.gnu.org.
|
||||
|
||||
HISTORY
|
||||
--------------------------------------------------------------------------------
|
||||
02/01/99 JSB Created
|
||||
|
||||
********************************************************************************
|
||||
SENTRY
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef FGDEFS_H
|
||||
#define FGDEFS_H
|
||||
|
||||
#define GRAVITY 32.174
|
||||
#define INVGRAVITY 0.031081
|
||||
#define EARTHRAD 20925650.00 // feet, equatorial
|
||||
#define EARTHRADSQRD 437882827922500.0
|
||||
#define ONESECOND 4.848136811E-6
|
||||
#define Reng 1716 //Specific Gas Constant,ft^2/(sec^2*R)
|
||||
#define SHRATIO 1.4 //Specific Heat Ratio
|
||||
#define RADTODEG 57.29578
|
||||
#define DEGTORAD 1.745329E-2
|
||||
#define KTSTOFPS 1.68781
|
||||
#define FPSTOKTS 0.592484
|
||||
#define INCHTOFT 0.08333333
|
||||
#define OMEGA_EARTH .00007272205217
|
||||
#define NEEDED_CFG_VERSION "1.50"
|
||||
#define JSBSIM_VERSION "0.9.0"
|
||||
|
||||
#define HPTOFTLBSSEC 550
|
||||
#define METERS_TO_FEET 3.2808
|
||||
|
||||
#if defined ( sgi ) && !defined( __GNUC__ )
|
||||
#define __STL_FUNCTION_TMPL_PARTIAL_ORDER
|
||||
#endif
|
||||
|
||||
enum eParam {
|
||||
FG_UNDEF = 0,
|
||||
FG_TIME,
|
||||
FG_QBAR,
|
||||
FG_WINGAREA,
|
||||
FG_WINGSPAN,
|
||||
FG_CBAR,
|
||||
FG_ALPHA,
|
||||
FG_ALPHADOT,
|
||||
FG_BETA,
|
||||
FG_BETADOT,
|
||||
FG_PHI,
|
||||
FG_THT,
|
||||
FG_PSI,
|
||||
FG_PITCHRATE,
|
||||
FG_ROLLRATE,
|
||||
FG_YAWRATE,
|
||||
FG_CL_SQRD,
|
||||
FG_MACH,
|
||||
FG_ALTITUDE,
|
||||
FG_BI2VEL,
|
||||
FG_CI2VEL,
|
||||
FG_ELEVATOR_POS,
|
||||
FG_AILERON_POS,
|
||||
FG_RUDDER_POS,
|
||||
FG_SPDBRAKE_POS,
|
||||
FG_SPOILERS_POS,
|
||||
FG_FLAPS_POS,
|
||||
FG_ELEVATOR_CMD,
|
||||
FG_AILERON_CMD,
|
||||
FG_RUDDER_CMD,
|
||||
FG_SPDBRAKE_CMD,
|
||||
FG_SPOILERS_CMD,
|
||||
FG_FLAPS_CMD,
|
||||
FG_THROTTLE_CMD,
|
||||
FG_THROTTLE_POS,
|
||||
FG_MIXTURE_CMD,
|
||||
FG_MIXTURE_POS,
|
||||
FG_ACTIVE_ENGINE,
|
||||
FG_HOVERB,
|
||||
FG_PITCH_TRIM_CMD,
|
||||
FG_LEFT_BRAKE_CMD,
|
||||
FG_CENTER_BRAKE_CMD,
|
||||
FG_RIGHT_BRAKE_CMD,
|
||||
FG_SET_LOGGING,
|
||||
FG_ALPHAH,
|
||||
FG_ALPHAW,
|
||||
FG_LBARH, //normalized horizontal tail arm
|
||||
FG_LBARV, //normalized vertical tail arm
|
||||
FG_HTAILAREA,
|
||||
FG_VTAILAREA,
|
||||
FG_VBARH, //horizontal tail volume
|
||||
FG_VBARV //vertical tail volume
|
||||
};
|
||||
|
||||
enum eAction {
|
||||
FG_RAMP = 1,
|
||||
FG_STEP = 2,
|
||||
FG_EXP = 3
|
||||
};
|
||||
|
||||
enum eType {
|
||||
FG_VALUE = 1,
|
||||
FG_DELTA = 2,
|
||||
FG_BOOL = 3
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
#endif
|
||||
|
||||
FG_ACTIVE_ENGINE,
|
||||
FG_HOVERB,
|
||||
FG_PITCH_TRIM_CMD,
|
||||
FG_LEFT_BRAKE_CMD,
|
||||
FG_CENTER_BRAKE_CMD,
|
||||
FG_RIGHT_BRAKE_CMD,
|
||||
FG_SET_LOGGING,
|
||||
FG_ALPHAH,
|
||||
FG_ALPHAW,
|
||||
FG_LBARH, //normalized horizontal tail arm
|
||||
FG_LBARV, //normalized vertical tail arm
|
||||
FG_HTAILAREA,
|
||||
FG_VTAILAREA,
|
||||
FG_VBARH, //horizontal tail volume
|
||||
FG_VBARV //vertical tail volume
|
||||
};
|
||||
|
||||
enum eAction {
|
||||
FG_RAMP = 1,
|
||||
FG_STEP = 2,
|
||||
FG_EXP = 3
|
||||
};
|
||||
|
||||
enum eType {
|
||||
FG_VALUE = 1,
|
||||
FG_DELTA = 2,
|
||||
FG_BOOL = 3
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,159 +1,161 @@
|
|||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
Module: FGEngine.cpp
|
||||
Author: Jon Berndt
|
||||
Date started: 01/21/99
|
||||
Called by: FGAircraft
|
||||
|
||||
------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Further information about the GNU General Public License can also be found on
|
||||
the world wide web at http://www.gnu.org.
|
||||
|
||||
FUNCTIONAL DESCRIPTION
|
||||
--------------------------------------------------------------------------------
|
||||
See header file.
|
||||
|
||||
HISTORY
|
||||
--------------------------------------------------------------------------------
|
||||
01/21/99 JSB Created
|
||||
09/03/99 JSB Changed Rocket thrust equation to correct -= Thrust instead of
|
||||
+= Thrust (thanks to Tony Peden)
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
INCLUDES
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#ifdef FGFS
|
||||
# include <simgear/compiler.h>
|
||||
# ifdef SG_HAVE_STD_INCLUDES
|
||||
# include <fstream>
|
||||
# else
|
||||
# include <fstream.h>
|
||||
# endif
|
||||
#else
|
||||
# if defined(sgi) && !defined(__GNUC__)
|
||||
# include <fstream.h>
|
||||
# else
|
||||
# include <fstream>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "FGEngine.h"
|
||||
#include "FGTank.h"
|
||||
|
||||
static const char *IdSrc = "$Id$";
|
||||
static const char *IdHdr = ID_ENGINE;
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
CLASS IMPLEMENTATION
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
|
||||
FGEngine::FGEngine(FGFDMExec* exec) {
|
||||
FDMExec = exec;
|
||||
State = FDMExec->GetState();
|
||||
Atmosphere = FDMExec->GetAtmosphere();
|
||||
FCS = FDMExec->GetFCS();
|
||||
Propulsion = FDMExec->GetPropulsion();
|
||||
Aircraft = FDMExec->GetAircraft();
|
||||
Translation = FDMExec->GetTranslation();
|
||||
Rotation = FDMExec->GetRotation();
|
||||
Position = FDMExec->GetPosition();
|
||||
Auxiliary = FDMExec->GetAuxiliary();
|
||||
Output = FDMExec->GetOutput();
|
||||
|
||||
Mixture = 1.0; // FIXME: get actual value
|
||||
Thrust = PctPower = 0.0;
|
||||
Starved = Flameout = false;
|
||||
Running = true;
|
||||
|
||||
if (debug_lvl & 2) cout << "Instantiated: FGEngine" << endl;
|
||||
TrimMode = false;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
FGEngine::~FGEngine()
|
||||
{
|
||||
if (debug_lvl & 2) cout << "Destroyed: FGEngine" << endl;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
// This base class function should be called from within the
|
||||
// derived class' Calculate() function before any other calculations are done.
|
||||
// This base class method removes fuel from the fuel tanks as appropriate,
|
||||
// and sets the starved flag if necessary.
|
||||
|
||||
void FGEngine::ConsumeFuel(void) {
|
||||
float Fshortage, Oshortage;
|
||||
FGTank* Tank;
|
||||
|
||||
if (TrimMode) return;
|
||||
|
||||
Fshortage = Oshortage = 0.0;
|
||||
for (unsigned int i=0; i<SourceTanks.size(); i++) {
|
||||
Tank = Propulsion->GetTank(i);
|
||||
if (Tank->GetType() == FGTank::ttFUEL) {
|
||||
Fshortage += Tank->Reduce(CalcFuelNeed()/Propulsion->GetnumSelectedFuelTanks());
|
||||
} else {
|
||||
Oshortage += Tank->Reduce(CalcOxidizerNeed()/Propulsion->GetnumSelectedOxiTanks());
|
||||
}
|
||||
}
|
||||
|
||||
if (Fshortage < 0.00 || Oshortage < 0.00) Starved = true;
|
||||
else Starved = false;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
float FGEngine::CalcFuelNeed(void) {
|
||||
FuelNeed = SLFuelFlowMax*PctPower*State->Getdt()*Propulsion->GetRate();
|
||||
return FuelNeed;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
float FGEngine::CalcOxidizerNeed(void) {
|
||||
OxidizerNeed = SLOxiFlowMax*PctPower*State->Getdt()*Propulsion->GetRate();
|
||||
return OxidizerNeed;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGEngine::SetPlacement(float x, float y, float z, float pitch, float yaw) {
|
||||
X = x;
|
||||
Y = y;
|
||||
Z = z;
|
||||
EnginePitch = pitch;
|
||||
EngineYaw = yaw;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGEngine::AddFeedTank(int tkID)
|
||||
{
|
||||
SourceTanks.push_back(tkID);
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGEngine::Debug(void)
|
||||
{
|
||||
//TODO: Add your source code here
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
Module: FGEngine.cpp
|
||||
Author: Jon Berndt
|
||||
Date started: 01/21/99
|
||||
Called by: FGAircraft
|
||||
|
||||
------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Further information about the GNU General Public License can also be found on
|
||||
the world wide web at http://www.gnu.org.
|
||||
|
||||
FUNCTIONAL DESCRIPTION
|
||||
--------------------------------------------------------------------------------
|
||||
See header file.
|
||||
|
||||
HISTORY
|
||||
--------------------------------------------------------------------------------
|
||||
01/21/99 JSB Created
|
||||
09/03/99 JSB Changed Rocket thrust equation to correct -= Thrust instead of
|
||||
+= Thrust (thanks to Tony Peden)
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
INCLUDES
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#ifdef FGFS
|
||||
# include <simgear/compiler.h>
|
||||
# ifdef SG_HAVE_STD_INCLUDES
|
||||
# include <fstream>
|
||||
# else
|
||||
# include <fstream.h>
|
||||
# endif
|
||||
#else
|
||||
# if defined(sgi) && !defined(__GNUC__)
|
||||
# include <fstream.h>
|
||||
# else
|
||||
# include <fstream>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "FGEngine.h"
|
||||
#include "FGTank.h"
|
||||
|
||||
static const char *IdSrc = "$Id$";
|
||||
static const char *IdHdr = ID_ENGINE;
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
CLASS IMPLEMENTATION
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
|
||||
FGEngine::FGEngine(FGFDMExec* exec) {
|
||||
FDMExec = exec;
|
||||
State = FDMExec->GetState();
|
||||
Atmosphere = FDMExec->GetAtmosphere();
|
||||
FCS = FDMExec->GetFCS();
|
||||
Propulsion = FDMExec->GetPropulsion();
|
||||
Aircraft = FDMExec->GetAircraft();
|
||||
Translation = FDMExec->GetTranslation();
|
||||
Rotation = FDMExec->GetRotation();
|
||||
Position = FDMExec->GetPosition();
|
||||
Auxiliary = FDMExec->GetAuxiliary();
|
||||
Output = FDMExec->GetOutput();
|
||||
|
||||
Mixture = 1.0; // FIXME: get actual value
|
||||
|
||||
Thrust = PctPower = 0.0;
|
||||
Starved = Flameout = false;
|
||||
Running = false;
|
||||
Cranking = false;
|
||||
|
||||
if (debug_lvl & 2) cout << "Instantiated: FGEngine" << endl;
|
||||
TrimMode = false;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
FGEngine::~FGEngine()
|
||||
{
|
||||
if (debug_lvl & 2) cout << "Destroyed: FGEngine" << endl;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
// This base class function should be called from within the
|
||||
// derived class' Calculate() function before any other calculations are done.
|
||||
// This base class method removes fuel from the fuel tanks as appropriate,
|
||||
// and sets the starved flag if necessary.
|
||||
|
||||
void FGEngine::ConsumeFuel(void) {
|
||||
float Fshortage, Oshortage;
|
||||
FGTank* Tank;
|
||||
|
||||
if (TrimMode) return;
|
||||
|
||||
Fshortage = Oshortage = 0.0;
|
||||
for (unsigned int i=0; i<SourceTanks.size(); i++) {
|
||||
Tank = Propulsion->GetTank(i);
|
||||
if (Tank->GetType() == FGTank::ttFUEL) {
|
||||
Fshortage += Tank->Reduce(CalcFuelNeed()/Propulsion->GetnumSelectedFuelTanks());
|
||||
} else {
|
||||
Oshortage += Tank->Reduce(CalcOxidizerNeed()/Propulsion->GetnumSelectedOxiTanks());
|
||||
}
|
||||
}
|
||||
|
||||
if (Fshortage < 0.00 || Oshortage < 0.00) Starved = true;
|
||||
else Starved = false;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
float FGEngine::CalcFuelNeed(void) {
|
||||
FuelNeed = SLFuelFlowMax*PctPower*State->Getdt()*Propulsion->GetRate();
|
||||
return FuelNeed;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
float FGEngine::CalcOxidizerNeed(void) {
|
||||
OxidizerNeed = SLOxiFlowMax*PctPower*State->Getdt()*Propulsion->GetRate();
|
||||
return OxidizerNeed;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGEngine::SetPlacement(float x, float y, float z, float pitch, float yaw) {
|
||||
X = x;
|
||||
Y = y;
|
||||
Z = z;
|
||||
EnginePitch = pitch;
|
||||
EngineYaw = yaw;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGEngine::AddFeedTank(int tkID)
|
||||
{
|
||||
SourceTanks.push_back(tkID);
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGEngine::Debug(void)
|
||||
{
|
||||
//TODO: Add your source code here
|
||||
}
|
||||
|
||||
|
|
|
@ -121,6 +121,7 @@ public:
|
|||
bool GetStarved(void) { return Starved; }
|
||||
bool GetFlameout(void) { return Flameout; }
|
||||
bool GetRunning(void) { return Running; }
|
||||
bool GetCranking(void) { return Cranking; }
|
||||
int GetType(void) { return Type; }
|
||||
string GetName(void) { return Name; }
|
||||
|
||||
|
@ -147,6 +148,9 @@ public:
|
|||
void SetName(string name) {Name = name;}
|
||||
void AddFeedTank(int tkID);
|
||||
|
||||
void SetMagnetos(int m) { Magnetos = m; }
|
||||
void SetStarter(bool s) { Starter = s;}
|
||||
|
||||
/** Calculates the thrust of the engine, and other engine functions.
|
||||
@param PowerRequired this is the power required to run the thrusting device
|
||||
such as a propeller. This resisting effect must be provided to the
|
||||
|
@ -195,10 +199,13 @@ protected:
|
|||
float Thrust;
|
||||
float Throttle;
|
||||
float Mixture;
|
||||
int Magnetos;
|
||||
bool Starter;
|
||||
float FuelNeed, OxidizerNeed;
|
||||
bool Starved;
|
||||
bool Flameout;
|
||||
bool Running;
|
||||
bool Cranking;
|
||||
float PctPower;
|
||||
int EngineNumber;
|
||||
bool TrimMode;
|
||||
|
|
|
@ -53,10 +53,6 @@ FGMatrix33::FGMatrix33(int r, int c)
|
|||
FGMatrix33::FGMatrix33(const FGMatrix33& M)
|
||||
{
|
||||
rowCtr = colCtr = 1;
|
||||
width = M.width;
|
||||
prec = M.prec;
|
||||
delim = M.delim;
|
||||
origin = M.origin;
|
||||
|
||||
data[1][1] = M.data[1][1];
|
||||
data[1][2] = M.data[1][2];
|
||||
|
@ -125,11 +121,6 @@ istream& operator>>(istream& is, FGMatrix33& M)
|
|||
FGMatrix33& FGMatrix33::operator=(const FGMatrix33& M)
|
||||
{
|
||||
if (&M != this) {
|
||||
width = M.width;
|
||||
prec = M.prec;
|
||||
delim = M.delim;
|
||||
origin = M.origin;
|
||||
|
||||
data[1][1] = M.data[1][1];
|
||||
data[1][2] = M.data[1][2];
|
||||
data[1][3] = M.data[1][3];
|
||||
|
@ -139,23 +130,12 @@ FGMatrix33& FGMatrix33::operator=(const FGMatrix33& M)
|
|||
data[3][1] = M.data[3][1];
|
||||
data[3][2] = M.data[3][2];
|
||||
data[3][3] = M.data[3][3];
|
||||
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGMatrix33::SetOParams(char delim,int width,int prec,int origin)
|
||||
{
|
||||
FGMatrix33::delim = delim;
|
||||
FGMatrix33::width = width;
|
||||
FGMatrix33::prec = prec;
|
||||
FGMatrix33::origin = origin;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGMatrix33::InitMatrix(double value)
|
||||
{
|
||||
if (data) {
|
||||
|
@ -196,7 +176,6 @@ FGMatrix33 FGMatrix33::operator-(const FGMatrix33& M)
|
|||
Diff(3,2) = data[3][2] - M(3,2);
|
||||
Diff(3,3) = data[3][3] - M(3,3);
|
||||
|
||||
|
||||
return Diff;
|
||||
}
|
||||
|
||||
|
@ -213,7 +192,6 @@ void FGMatrix33::operator-=(const FGMatrix33 &M)
|
|||
data[3][1] -= M(3,1);
|
||||
data[3][2] -= M(3,2);
|
||||
data[3][3] -= M(3,3);
|
||||
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
@ -248,7 +226,6 @@ void FGMatrix33::operator+=(const FGMatrix33 &M)
|
|||
data[3][1] += M(3,1);
|
||||
data[3][2] += M(3,2);
|
||||
data[3][3] += M(3,3);
|
||||
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
@ -293,7 +270,6 @@ FGMatrix33 operator*(double scalar, FGMatrix33 &M)
|
|||
|
||||
void FGMatrix33::operator*=(const double scalar)
|
||||
{
|
||||
|
||||
data[1][1] *= scalar;
|
||||
data[1][2] *= scalar;
|
||||
data[1][3] *= scalar;
|
||||
|
@ -303,7 +279,6 @@ void FGMatrix33::operator*=(const double scalar)
|
|||
data[3][1] *= scalar;
|
||||
data[3][2] *= scalar;
|
||||
data[3][3] *= scalar;
|
||||
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
@ -345,7 +320,6 @@ void FGMatrix33::operator*=(const FGMatrix33& M)
|
|||
data[3][1] = a*M(1,1) + b*M(2,1) + c*M(3,1);
|
||||
data[3][2] = a*M(1,2) + b*M(2,2) + c*M(3,2);
|
||||
data[3][3] = a*M(1,3) + b*M(2,3) + c*M(3,3);
|
||||
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
@ -378,7 +352,7 @@ FGMatrix33 FGMatrix33::operator/(const double scalar)
|
|||
void FGMatrix33::operator/=(const double scalar)
|
||||
{
|
||||
if( scalar != 0 ) {
|
||||
double tmp = 1.0/scalar;
|
||||
double tmp = 1.0/scalar;
|
||||
data[1][1] *= tmp;
|
||||
data[1][2] *= tmp;
|
||||
data[1][3] *= tmp;
|
||||
|
|
|
@ -122,14 +122,10 @@ public:
|
|||
void operator*=(const double scalar);
|
||||
void operator/=(const double scalar);
|
||||
|
||||
void SetOParams(char delim,int width,int prec, int origin=0);
|
||||
|
||||
protected:
|
||||
double data[4][4];
|
||||
|
||||
private:
|
||||
char delim;
|
||||
int width,prec,origin;
|
||||
void TransposeSquare(void);
|
||||
unsigned int rowCtr, colCtr;
|
||||
void Debug(void);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,159 +1,161 @@
|
|||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
Header: FGPiston.h
|
||||
Author: Jon S. Berndt
|
||||
Date started: 09/12/2000
|
||||
|
||||
------------- Copyright (C) 2000 Jon S. Berndt (jsb@hal-pc.org) --------------
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Further information about the GNU General Public License can also be found on
|
||||
the world wide web at http://www.gnu.org.
|
||||
|
||||
HISTORY
|
||||
--------------------------------------------------------------------------------
|
||||
09/12/2000 JSB Created
|
||||
10/01/2001 DPM Modified to use equations from Dave Luff's piston model.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
COMMENTS, REFERENCES, and NOTES
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
SENTRY
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#ifndef FGPISTON_H
|
||||
#define FGPISTON_H
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
INCLUDES
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "FGEngine.h"
|
||||
#include "FGConfigFile.h"
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
DEFINITIONS
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#define ID_PISTON "$Id$";
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
FORWARD DECLARATIONS
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
COMMENTS, REFERENCES, and NOTES
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
DOCUMENTATION
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
/** Models Dave Luff's engine model as ported into JSBSim by David Megginson.
|
||||
@author Jon S. Berndt (Engine framework code and framework-related mods)
|
||||
@author Dave Luff (engine operational code)
|
||||
@author David Megginson (porting and additional code)
|
||||
@version $Id$
|
||||
*/
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
CLASS DECLARATION
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
class FGPiston : public FGEngine
|
||||
{
|
||||
public:
|
||||
/// Constructor
|
||||
FGPiston(FGFDMExec* exec, FGConfigFile* Eng_cfg);
|
||||
/// Destructor
|
||||
~FGPiston();
|
||||
|
||||
float Calculate(float PowerRequired);
|
||||
float GetPowerAvailable(void) {return PowerAvailable;}
|
||||
|
||||
private:
|
||||
float BrakeHorsePower;
|
||||
float SpeedSlope;
|
||||
float SpeedIntercept;
|
||||
float AltitudeSlope;
|
||||
float PowerAvailable;
|
||||
|
||||
// timestep
|
||||
float dt;
|
||||
|
||||
// engine state
|
||||
bool running;
|
||||
bool cranking;
|
||||
|
||||
void doEngineStartup(void);
|
||||
void doManifoldPressure(void);
|
||||
void doAirFlow(void);
|
||||
void doFuelFlow(void);
|
||||
void doEnginePower(void);
|
||||
void doEGT(void);
|
||||
void doCHT(void);
|
||||
void doOilPressure(void);
|
||||
void doOilTemperature(void);
|
||||
|
||||
//
|
||||
// constants
|
||||
//
|
||||
const float CONVERT_CUBIC_INCHES_TO_METERS_CUBED;
|
||||
|
||||
const float R_air;
|
||||
const float rho_fuel; // kg/m^3
|
||||
const float calorific_value_fuel; // W/Kg (approximate)
|
||||
const float Cp_air; // J/KgK
|
||||
const float Cp_fuel; // J/KgK
|
||||
|
||||
//
|
||||
// Configuration
|
||||
//
|
||||
float MinManifoldPressure_inHg; // Inches Hg
|
||||
float MaxManifoldPressure_inHg; // Inches Hg
|
||||
float Displacement; // cubic inches
|
||||
float MaxHP; // horsepower
|
||||
float Cycles; // cycles/power stroke
|
||||
float IdleRPM; // revolutions per minute
|
||||
|
||||
//
|
||||
// Inputs (in addition to those in FGEngine).
|
||||
//
|
||||
float p_amb; // Pascals
|
||||
float p_amb_sea_level; // Pascals
|
||||
float T_amb; // degrees Kelvin
|
||||
float RPM; // revolutions per minute
|
||||
float IAS; // knots
|
||||
|
||||
//
|
||||
// Outputs (in addition to those in FGEngine).
|
||||
//
|
||||
float rho_air;
|
||||
float volumetric_efficiency;
|
||||
float m_dot_air;
|
||||
float equivalence_ratio;
|
||||
float m_dot_fuel;
|
||||
float Percentage_Power;
|
||||
float HP;
|
||||
float combustion_efficiency;
|
||||
|
||||
void Debug(void);
|
||||
};
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
#endif
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
Header: FGPiston.h
|
||||
Author: Jon S. Berndt
|
||||
Date started: 09/12/2000
|
||||
|
||||
------------- Copyright (C) 2000 Jon S. Berndt (jsb@hal-pc.org) --------------
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Further information about the GNU General Public License can also be found on
|
||||
the world wide web at http://www.gnu.org.
|
||||
|
||||
HISTORY
|
||||
--------------------------------------------------------------------------------
|
||||
09/12/2000 JSB Created
|
||||
10/01/2001 DPM Modified to use equations from Dave Luff's piston model.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
COMMENTS, REFERENCES, and NOTES
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
SENTRY
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#ifndef FGPISTON_H
|
||||
#define FGPISTON_H
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
INCLUDES
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "FGEngine.h"
|
||||
#include "FGConfigFile.h"
|
||||
#include "FGTable.h"
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
DEFINITIONS
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#define ID_PISTON "$Id$";
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
FORWARD DECLARATIONS
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
COMMENTS, REFERENCES, and NOTES
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
DOCUMENTATION
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
/** Models Dave Luff's engine model as ported into JSBSim by David Megginson.
|
||||
@author Jon S. Berndt (Engine framework code and framework-related mods)
|
||||
@author Dave Luff (engine operational code)
|
||||
@author David Megginson (porting and additional code)
|
||||
@version $Id$
|
||||
*/
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
CLASS DECLARATION
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
class FGPiston : public FGEngine
|
||||
{
|
||||
public:
|
||||
/// Constructor
|
||||
FGPiston(FGFDMExec* exec, FGConfigFile* Eng_cfg);
|
||||
/// Destructor
|
||||
~FGPiston();
|
||||
|
||||
float Calculate(float PowerRequired);
|
||||
float GetPowerAvailable(void) {return PowerAvailable;}
|
||||
|
||||
private:
|
||||
float BrakeHorsePower;
|
||||
float SpeedSlope;
|
||||
float SpeedIntercept;
|
||||
float AltitudeSlope;
|
||||
float PowerAvailable;
|
||||
|
||||
// timestep
|
||||
float dt;
|
||||
|
||||
void doEngineStartup(void);
|
||||
void doManifoldPressure(void);
|
||||
void doAirFlow(void);
|
||||
void doFuelFlow(void);
|
||||
void doEnginePower(void);
|
||||
void doEGT(void);
|
||||
void doCHT(void);
|
||||
void doOilPressure(void);
|
||||
void doOilTemperature(void);
|
||||
|
||||
//
|
||||
// constants
|
||||
//
|
||||
const float CONVERT_CUBIC_INCHES_TO_METERS_CUBED;
|
||||
|
||||
const float R_air;
|
||||
const float rho_fuel; // kg/m^3
|
||||
const float calorific_value_fuel; // W/Kg (approximate)
|
||||
const float Cp_air; // J/KgK
|
||||
const float Cp_fuel; // J/KgK
|
||||
|
||||
FGTable *Lookup_Combustion_Efficiency;
|
||||
FGTable *Power_Mixture_Correlation;
|
||||
|
||||
//
|
||||
// Configuration
|
||||
//
|
||||
float MinManifoldPressure_inHg; // Inches Hg
|
||||
float MaxManifoldPressure_inHg; // Inches Hg
|
||||
float Displacement; // cubic inches
|
||||
float MaxHP; // horsepower
|
||||
float Cycles; // cycles/power stroke
|
||||
float IdleRPM; // revolutions per minute
|
||||
|
||||
//
|
||||
// Inputs (in addition to those in FGEngine).
|
||||
//
|
||||
float p_amb; // Pascals
|
||||
float p_amb_sea_level; // Pascals
|
||||
float T_amb; // degrees Kelvin
|
||||
float RPM; // revolutions per minute
|
||||
float IAS; // knots
|
||||
|
||||
//
|
||||
// Outputs (in addition to those in FGEngine).
|
||||
//
|
||||
bool Magneto_Left;
|
||||
bool Magneto_Right;
|
||||
float rho_air;
|
||||
float volumetric_efficiency;
|
||||
float m_dot_air;
|
||||
float equivalence_ratio;
|
||||
float m_dot_fuel;
|
||||
float Percentage_Power;
|
||||
float HP;
|
||||
float combustion_efficiency;
|
||||
|
||||
void Debug(void);
|
||||
};
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
#endif
|
||||
|
|
|
@ -174,6 +174,35 @@ void FGTable::operator<<(FGConfigFile& infile)
|
|||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
FGTable& FGTable::operator<<(const double n)
|
||||
{
|
||||
Data[rowCounter][colCounter] = n;
|
||||
if (colCounter == nCols) {
|
||||
colCounter = 0;
|
||||
rowCounter++;
|
||||
} else {
|
||||
colCounter++;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
FGTable& FGTable::operator<<(const int n)
|
||||
{
|
||||
*this << (double)n;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
FGTable& FGTable::operator<<(const float n)
|
||||
{
|
||||
*this << (double)n;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
void FGTable::Print(void)
|
||||
{
|
||||
|
|
|
@ -92,15 +92,18 @@ public:
|
|||
</pre>
|
||||
*/
|
||||
void operator<<(FGConfigFile&);
|
||||
FGTable& operator<<(const float n);
|
||||
FGTable& operator<<(const int n);
|
||||
FGTable& operator<<(const double n);
|
||||
inline float GetElement(int r, int c) {return Data[r][c];}
|
||||
void Print(void);
|
||||
|
||||
private:
|
||||
enum type {tt1D, tt2D} Type;
|
||||
unsigned int rowCounter;
|
||||
unsigned int colCounter;
|
||||
float** Data;
|
||||
int nRows, nCols;
|
||||
unsigned int colCounter;
|
||||
unsigned int rowCounter;
|
||||
float** Allocate(void);
|
||||
void Debug(void);
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue