diff --git a/src/FDM/JSBSim/FGTable.cpp b/src/FDM/JSBSim/FGTable.cpp new file mode 100644 index 000000000..54ddab0b6 --- /dev/null +++ b/src/FDM/JSBSim/FGTable.cpp @@ -0,0 +1,206 @@ +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Module: FGTable.cpp + Author: Jon S. Berndt + Date started: 1/9/2001 + Purpose: Models a lookup table + + ------------- Copyright (C) 2001 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 +-------------------------------------------------------------------------------- +Models a lookup table + +HISTORY +-------------------------------------------------------------------------------- +JSB 1/9/00 Created + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +INCLUDES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "FGTable.h" +#include + +static const char *IdSrc = "$Id$"; +static const char *IdHdr = ID_TABLE; + +extern short debug_lvl; + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS IMPLEMENTATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +using namespace std; + +FGTable::FGTable(int NRows, int NCols) : nRows(NRows), nCols(NCols) +{ + Type = tt2D; + colCounter = 1; + rowCounter = 0; + + Data = Allocate(); + + if (debug_lvl & 2) cout << "Instantiated: FGTable" << endl; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FGTable::FGTable(int NRows) : nRows(NRows), nCols(1) +{ + Type = tt1D; + colCounter = 0; + rowCounter = 1; + + Data = Allocate(); + if (debug_lvl & 2) cout << "Instantiated: FGTable" << endl; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +float** FGTable::Allocate(void) +{ + Data = new float*[nRows+1]; + for (int r=0; r<=nRows; r++) { + Data[r] = new float[nCols+1]; + for (int c=0; c<=nCols; c++) { + Data[r][c] = 0.0; + } + } + return Data; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FGTable::~FGTable() +{ + for (int r=0; r<=nRows; r++) if (Data[r]) delete Data[r]; + if (Data) delete Data; + if (debug_lvl & 2) cout << "Destroyed: FGTable" << endl; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +float FGTable::GetValue(float key) +{ + float Factor, Value, Span; + int r; + + for (r=1; r<=nRows; r++) if (Data[r][0] >= key) break; + r = r < 2 ? 2 : (r > nRows ? nRows : r); + + // make sure denominator below does not go to zero. + + Span = Data[r][0] - Data[r-1][0]; + if (Span != 0.0) { + Factor = (key - Data[r-1][0]) / Span; + if (Factor > 1.0) Factor = 1.0; + } else { + Factor = 1.0; + } + + Value = Factor*(Data[r][1] - Data[r-1][1]) + Data[r-1][1]; + + return Value; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +float FGTable::GetValue(float rowKey, float colKey) +{ + float rFactor, cFactor, col1temp, col2temp, Value; + int r, c; + + for (r=1;r<=nRows;r++) if (Data[r][0] >= rowKey) break; + for (c=1;c<=nCols;c++) if (Data[0][c] >= colKey) break; + + c = c < 2 ? 2 : (c > nCols ? nCols : c); + r = r < 2 ? 2 : (r > nRows ? nRows : r); + + rFactor = (rowKey - Data[r-1][0]) / (Data[r][0] - Data[r-1][0]); + cFactor = (colKey - Data[0][c-1]) / (Data[0][c] - Data[0][c-1]); + + if (rFactor > 1.0) rFactor = 1.0; + else if (rFactor < 0.0) rFactor = 0.0; + + if (cFactor > 1.0) cFactor = 1.0; + else if (cFactor < 0.0) cFactor = 0.0; + + col1temp = rFactor*(Data[r][c-1] - Data[r-1][c-1]) + Data[r-1][c-1]; + col2temp = rFactor*(Data[r][c] - Data[r-1][c]) + Data[r-1][c]; + + Value = col1temp + cFactor*(col2temp - col1temp); + + return Value; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void FGTable::operator<<(FGConfigFile& infile) +{ + int startRow; + + if (Type == tt1D) startRow = 1; + else startRow = 0; + + for (int r=startRow; r<=nRows; r++) { + for (int c=0; c<=nCols; c++) { + if (r != 0 || c != 0) { + infile >> Data[r][c]; + } + } + } +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +void FGTable::Print(void) +{ + int startRow; + + if (Type == tt1D) startRow = 1; + else startRow = 0; + + cout.setf(ios::fixed); // set up output stream + cout.precision(4); + + for (int r=startRow; r<=nRows; r++) { + cout << " "; + for (int c=0; c<=nCols; c++) { + if (r == 0 && c == 0) { + cout << " "; + } else { + cout << Data[r][c] << " "; + } + } + cout << endl; + } + cout.setf(0, ios::floatfield); // reset +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void FGTable::Debug(void) +{ + //TODO: Add your source code here +} + + diff --git a/src/FDM/JSBSim/FGTable.h b/src/FDM/JSBSim/FGTable.h new file mode 100644 index 000000000..da4f33bf3 --- /dev/null +++ b/src/FDM/JSBSim/FGTable.h @@ -0,0 +1,110 @@ +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Header: FGTable.h + Author: Jon S. Berndt + Date started: 1/9/2001 + + ------------- Copyright (C) 2001 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 +-------------------------------------------------------------------------------- +JSB 1/9/00 Created + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +SENTRY +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#ifndef FGTABLE_H +#define FGTABLE_H + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +INCLUDES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "FGConfigFile.h" + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +DEFINITIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#define ID_TABLE "$Id$" + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FORWARD DECLARATIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS DOCUMENTATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +/** Lookup table class. + Models a lookup table for use in FGCoefficient, FGPropeller, etc. + @author Jon S. Berndt + @version $Id$ + @see FGCoefficient + @see FGPropeller +*/ + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS DECLARATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +class FGTable { + +public: + ~FGTable(); + FGTable(int nRows); + FGTable(int nRows, int nCols); + float GetValue(float key); + float GetValue(float rowKey, float colKey); + /** Read the table in. + Data in the config file should be in matrix format with the row + independents as the first column and the column independents in + the first row. The implication of this layout is that there should + be no value in the upper left corner of the matrix e.g: +
+           0  10  20 30 ...
+      -5   1  2   3  4  ...
+       ...
+       
+ */ + void operator<<(FGConfigFile&); + 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; + float** Allocate(void); + void Debug(void); +}; + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +#endif + diff --git a/src/FDM/JSBSim/FGTurboProp.cpp b/src/FDM/JSBSim/FGTurboProp.cpp new file mode 100644 index 000000000..fa0e8f2fa --- /dev/null +++ b/src/FDM/JSBSim/FGTurboProp.cpp @@ -0,0 +1,78 @@ +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Module: FGTurboProp.cpp + Author: Jon S. Berndt + Date started: 11/20/2000 + Purpose: This module models a Turboprop engine + + ------------- 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. + +FUNCTIONAL DESCRIPTION +-------------------------------------------------------------------------------- + +This class descends from the FGEngine class and models a Turboprop engine based +on parameters given in the engine config file for this class + +HISTORY +-------------------------------------------------------------------------------- +11/20/2000 JSB Created + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +INCLUDES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "FGTurboProp.h" + +static const char *IdSrc = "$Id$"; +static const char *IdHdr = ID_TURBOPROP; + +extern short debug_lvl; + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS IMPLEMENTATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +FGTurboProp::FGTurboProp(FGFDMExec* exec, FGConfigFile* cfg) : FGEngine(exec) +{ + if (debug_lvl & 2) cout << "Instantiated: FGTurboProp" << endl; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FGTurboProp::~FGTurboProp() +{ + if (debug_lvl & 2) cout << "Destroyed: FGTurboProp" << endl; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +float FGTurboProp::Calculate(float dummy) +{ + ConsumeFuel(); + return 0.0; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void FGTurboProp::Debug(void) +{ + //TODO: Add your source code here +} + diff --git a/src/FDM/JSBSim/FGTurboProp.h b/src/FDM/JSBSim/FGTurboProp.h new file mode 100644 index 000000000..cbec9c7f6 --- /dev/null +++ b/src/FDM/JSBSim/FGTurboProp.h @@ -0,0 +1,67 @@ +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Header: FGTurboProp.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 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +COMMENTS, REFERENCES, and NOTES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +SENTRY +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#ifndef FGTURBOPROP_H +#define FGTURBOPROP_H + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +INCLUDES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "FGEngine.h" +#include "FGConfigFile.h" + +#define ID_TURBOPROP "$Id$" + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS DECLARATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +class FGTurboProp : public FGEngine +{ +public: + FGTurboProp(FGFDMExec* exec, FGConfigFile* Eng_cfg); + ~FGTurboProp(); + + float Calculate(float); +private: + void Debug(void); +}; + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +#endif +