From: curt Date: Mon, 23 Jul 2001 22:17:47 +0000 (+0000) Subject: Initial revision. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=d76c92df5e5eba0b37bb7b46a12edaa1e1d32f65;p=flightgear.git Initial revision. --- diff --git a/src/FDM/JSBSim/FGFactorGroup.cpp b/src/FDM/JSBSim/FGFactorGroup.cpp new file mode 100644 index 000000000..f46a472cc --- /dev/null +++ b/src/FDM/JSBSim/FGFactorGroup.cpp @@ -0,0 +1,160 @@ +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Module: FGFactorGroup.cpp + Author: Tony Peden + Date started: 7/21/01 + Purpose: Encapsulates coefficients in the mathematical construct: + factor*(coeff1 + coeff2 + coeff3 + ... + coeffn) + Called by: FGAerodynamics + + ------------- Copyright (C) 2001 Tony Peden (apeden@earthlink.net) ----------- + + 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 models the stability derivative coefficient lookup tables or +equations. Note that the coefficients need not be calculated each delta-t. + +Note that the values in a row which index into the table must be the same value +for each column of data, so the first column of numbers for each altitude are +seen to be equal, and there are the same number of values for each altitude. + +See the header file FGFactorGroup.h for the values of the identifiers. + +HISTORY +-------------------------------------------------------------------------------- +7/21/01 TP Created + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +INCLUDES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "FGCoefficient.h" +#include "FGFactorGroup.h" +#include "FGState.h" +#include "FGFDMExec.h" + +#ifndef FGFS +# include +#else +# include STL_IOMANIP +#endif + +extern short debug_lvl; + +static const char *IdSrc = "$Id$"; +static const char *IdHdr = ID_FACTORGROUP; + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS IMPLEMENTATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +FGFactorGroup::FGFactorGroup( FGFDMExec* fdmex ) : FGCoefficient( fdmex) { + FDMExec=fdmex; +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +FGFactorGroup::~FGFactorGroup() { + int i; + for (i=0; iGetValue("NAME"); + AC_cfg->GetNextConfigLine(); + *AC_cfg >> description; + token = AC_cfg->GetValue(); + if( token == "FACTOR") { + FGCoefficient::Load(AC_cfg); + //if (debug_lvl > 0) DisplayCoeffFactors(ca.back()->Getmultipliers()); + } + token = AC_cfg->GetValue(); + while ( token != "/GROUP" ) { + sum.push_back( new FGCoefficient(FDMExec) ); + sum.back()->Load(AC_cfg); + //if (debug_lvl > 0) DisplayCoeffFactors(ca.back()->Getmultipliers()); + token = AC_cfg->GetValue(); + } + AC_cfg->GetNextConfigLine(); + return true; + } else { + return false; + } +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +float FGFactorGroup::TotalValue(void) { + int i; + float totalsum=0; + SDtotal=0.0; + for(i=0;iTotalValue(); + SDtotal += sum[i]->GetSD(); + } + totalsum *= FGCoefficient::TotalValue(); + SDtotal *= FGCoefficient::GetSD(); + cout << "FGCoefficient::GetSD(): " << FGCoefficient::GetSD() << endl; + cout << "FGFactorGroup::SDtotal: " << SDtotal << endl; + return totalsum; +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +string FGFactorGroup::GetCoefficientStrings(void) { + int i; + string CoeffStrings; + + CoeffStrings += name; + CoeffStrings += ", "; + CoeffStrings += FGCoefficient::Getname(); + for(i=0;iGetname(); + } + return CoeffStrings; +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +string FGFactorGroup::GetCoefficientValues(void) { + int i; + char buffer[10]; + string values; + + snprintf(buffer,10,"%9.6f",SDtotal); + values += string(buffer); + values += ", "; + snprintf(buffer,10,"%9.6f",FGCoefficient::GetSD() ); + values += string(buffer); + values += ", "; + for(i=0;iGetCoefficientValues(); + } + return values; +} + diff --git a/src/FDM/JSBSim/FGFactorGroup.h b/src/FDM/JSBSim/FGFactorGroup.h new file mode 100644 index 000000000..6d2145a69 --- /dev/null +++ b/src/FDM/JSBSim/FGFactorGroup.h @@ -0,0 +1,118 @@ +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + Header: FGFactorGroup.h + Author: Tony Peden + Date started: 7/14/01 + + ------------- Copyright (C) 2001 Tony Peden (apeden@earthlink.net ------------ + + 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 +-------------------------------------------------------------------------------- +12/28/98 JSB Created + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +SENTRY +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#ifndef FGFACTORGROUP_H +#define FGFACTORGROUP_H + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +INCLUDES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#ifdef FGFS +# include +#endif + +#include +#include +#include "FGConfigFile.h" +#include "FGDefs.h" +#include "FGTable.h" +#include "FGCoefficient.h" +#include "FGAerodynamics.h" +#include "FGFactorGroup.h" + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +DEFINITIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#define ID_FACTORGROUP "$Id$" + +using std::vector; + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FORWARD DECLARATIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +class FGFDMExec; +class FGState; +class FGAtmosphere; +class FGFCS; +class FGAircraft; +class FGTranslation; +class FGRotation; +class FGPosition; +class FGAuxiliary; +class FGOutput; + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS DOCUMENTATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +/** This class encapsulates the functionality needed to manage a factor group + i.e. factor*(coeff1 + coeff2 + coeff3) + @author Tony Peden + @see - +*/ + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS DECLARATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +class FGFactorGroup: public FGCoefficient { + public: + FGFactorGroup(FGFDMExec* fdmex); + ~FGFactorGroup(); + + bool Load(FGConfigFile *AC_cfg); + float TotalValue(void); + string GetCoefficientStrings(void); + string GetCoefficientValues(void); + inline float GetSD(void) { return SDtotal; }; + inline float GetFactorSD(void) { return FGCoefficient::GetSD(); } + + private: + FGFDMExec *FDMExec; + string name; + string description; + typedef vector CoeffArray; + CoeffArray sum; + float SDtotal; + +}; + +#endif