]> git.mxchange.org Git - flightgear.git/commitdiff
Synced with latest JSBSim cvs.
authorcurt <curt>
Tue, 20 Nov 2001 22:34:24 +0000 (22:34 +0000)
committercurt <curt>
Tue, 20 Nov 2001 22:34:24 +0000 (22:34 +0000)
86 files changed:
src/FDM/JSBSim.cxx
src/FDM/JSBSim/FGAerodynamics.cpp
src/FDM/JSBSim/FGAerodynamics.h
src/FDM/JSBSim/FGAircraft.cpp
src/FDM/JSBSim/FGAircraft.h
src/FDM/JSBSim/FGAtmosphere.cpp
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGAuxiliary.cpp
src/FDM/JSBSim/FGAuxiliary.h
src/FDM/JSBSim/FGCoefficient.cpp
src/FDM/JSBSim/FGCoefficient.h
src/FDM/JSBSim/FGColumnVector3.cpp
src/FDM/JSBSim/FGColumnVector3.h
src/FDM/JSBSim/FGColumnVector4.cpp
src/FDM/JSBSim/FGColumnVector4.h
src/FDM/JSBSim/FGConfigFile.cpp
src/FDM/JSBSim/FGConfigFile.h
src/FDM/JSBSim/FGEngine.cpp
src/FDM/JSBSim/FGEngine.h
src/FDM/JSBSim/FGFCS.cpp
src/FDM/JSBSim/FGFCS.h
src/FDM/JSBSim/FGFDMExec.cpp
src/FDM/JSBSim/FGFDMExec.h
src/FDM/JSBSim/FGFactorGroup.cpp
src/FDM/JSBSim/FGFactorGroup.h
src/FDM/JSBSim/FGForce.cpp
src/FDM/JSBSim/FGForce.h
src/FDM/JSBSim/FGGroundReactions.cpp
src/FDM/JSBSim/FGInertial.cpp
src/FDM/JSBSim/FGInertial.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/FGJSBBase.h
src/FDM/JSBSim/FGLGear.cpp
src/FDM/JSBSim/FGLGear.h
src/FDM/JSBSim/FGMassBalance.h
src/FDM/JSBSim/FGMatrix33.cpp
src/FDM/JSBSim/FGMatrix33.h
src/FDM/JSBSim/FGNozzle.cpp
src/FDM/JSBSim/FGNozzle.h
src/FDM/JSBSim/FGOutput.cpp
src/FDM/JSBSim/FGOutput.h
src/FDM/JSBSim/FGPiston.cpp
src/FDM/JSBSim/FGPiston.h
src/FDM/JSBSim/FGPosition.cpp
src/FDM/JSBSim/FGPosition.h
src/FDM/JSBSim/FGPropeller.cpp
src/FDM/JSBSim/FGPropeller.h
src/FDM/JSBSim/FGPropulsion.cpp
src/FDM/JSBSim/FGPropulsion.h
src/FDM/JSBSim/FGRocket.cpp
src/FDM/JSBSim/FGRocket.h
src/FDM/JSBSim/FGRotation.cpp
src/FDM/JSBSim/FGRotation.h
src/FDM/JSBSim/FGRotor.cpp
src/FDM/JSBSim/FGRotor.h
src/FDM/JSBSim/FGState.cpp
src/FDM/JSBSim/FGState.h
src/FDM/JSBSim/FGTable.cpp
src/FDM/JSBSim/FGTable.h
src/FDM/JSBSim/FGTank.cpp
src/FDM/JSBSim/FGTank.h
src/FDM/JSBSim/FGThruster.h
src/FDM/JSBSim/FGTranslation.cpp
src/FDM/JSBSim/FGTranslation.h
src/FDM/JSBSim/FGTrim.cpp
src/FDM/JSBSim/FGTrim.h
src/FDM/JSBSim/FGTrimAxis.cpp
src/FDM/JSBSim/FGTrimAxis.h
src/FDM/JSBSim/FGTurboJet.cpp
src/FDM/JSBSim/FGTurboJet.h
src/FDM/JSBSim/FGTurboProp.cpp
src/FDM/JSBSim/FGTurboProp.h
src/FDM/JSBSim/FGTurboShaft.cpp
src/FDM/JSBSim/FGTurboShaft.h
src/FDM/JSBSim/FGfdmSocket.cpp
src/FDM/JSBSim/FGfdmSocket.h
src/FDM/JSBSim/JSBSim.cpp
src/FDM/JSBSim/filtersjb/FGFCSComponent.h
src/FDM/JSBSim/filtersjb/FGFilter.cpp
src/FDM/JSBSim/filtersjb/FGFilter.h
src/FDM/JSBSim/filtersjb/FGFlaps.cpp
src/FDM/JSBSim/filtersjb/FGFlaps.h
src/FDM/JSBSim/filtersjb/FGGain.cpp
src/FDM/JSBSim/filtersjb/FGGain.h
src/FDM/JSBSim/filtersjb/FGSummer.h

index 42bc2c5539093e018c26cea7afaf7f65d90867a2..ee28d6a633c53033708ee134625f50f607541532 100644 (file)
@@ -259,6 +259,28 @@ bool FGJSBsim::update( int multiloop ) {
         fdmex->Run();
     }
 
+    struct FGJSBBase::Message* msg;
+    while (fdmex->ReadMessage()) {
+      msg = fdmex->ProcessMessage();
+      switch (msg->type) {
+      case FGJSBBase::Message::eText:
+        cout << msg->messageId << ": " << msg->text << endl;
+        break;
+      case FGJSBBase::Message::eBool:
+        cout << msg->messageId << ": " << msg->text << " " << msg->bVal << endl;
+        break;
+      case FGJSBBase::Message::eInteger:
+        cout << msg->messageId << ": " << msg->text << " " << msg->iVal << endl;
+        break;
+      case FGJSBBase::Message::eDouble:
+        cout << msg->messageId << ": " << msg->text << " " << msg->dVal << endl;
+        break;
+      default:
+        cerr << "Unrecognized message type." << endl;
+              break;
+      }
+    }
+
     for( i=0; i<get_num_engines(); i++ ) {
       FGEngInterface * e = get_engine(i);
       FGEngine * eng = Propulsion->GetEngine(i);
index ed8ac0b7c09ba9d477f41d0b5708b3ff75bc4930..8c20cc60fae2459be772c5efc4560a1ef7d0e8c7 100644 (file)
@@ -88,14 +88,10 @@ FGAerodynamics::~FGAerodynamics()
 
 bool FGAerodynamics::Run(void)
 {
-  float alpha, beta;
   unsigned int axis_ctr,ctr;
 
   if (!FGModel::Run()) {
 
-    alpha = Translation->Getalpha();
-    beta = Translation->Getbeta();
-
     vLastFs = vFs;
     vFs.InitMatrix();
 
@@ -105,7 +101,7 @@ bool FGAerodynamics::Run(void)
       }
     }
 
-    vForces = State->GetTs2b(alpha, beta)*vFs;
+    vForces = State->GetTs2b()*vFs;
 
     vDXYZcg(eX) = -(Aircraft->GetXYZrp(eX) 
                       - MassBalance->GetXYZcg(eX))*inchtoft;
@@ -135,12 +131,12 @@ bool FGAerodynamics::Load(FGConfigFile* AC_cfg)
 
   AC_cfg->GetNextConfigLine();
 
-  while ((token = AC_cfg->GetValue()) != "/AERODYNAMICS") {
+  while ((token = AC_cfg->GetValue()) != string("/AERODYNAMICS")) {
     if (token == "AXIS") {
       CoeffArray ca;
       axis = AC_cfg->GetValue("NAME");
       AC_cfg->GetNextConfigLine();
-      while ((token = AC_cfg->GetValue()) != "/AXIS") {
+      while ((token = AC_cfg->GetValue()) != string("/AXIS")) {
         if( token == "COEFFICIENT" ) {
           ca.push_back( new FGCoefficient(FDMExec) );
           ca.back()->Load(AC_cfg);
@@ -202,7 +198,7 @@ string FGAerodynamics::GetCoefficientValues(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGAerodynamics::GetNlf(void)
+double FGAerodynamics::GetNlf(void)
 {
   if (fabs(Position->GetGamma()) < 1.57) {
     return (vFs(eZ)/(MassBalance->GetWeight()*cos(Position->GetGamma())));
@@ -213,9 +209,9 @@ float FGAerodynamics::GetNlf(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGAerodynamics::GetLoD(void)
+double FGAerodynamics::GetLoD(void)
 {
-  float LoD;
+  double LoD;
 
   if (vFs(1) != 0.00) return vFs(3)/vFs(1);
   else                return 0.00;
index fc87b529d7689fd87039e7fe62be3ebe769924c6..ffacb3148b15a91a8ef893b74ec710570fa9292f 100644 (file)
@@ -112,18 +112,18 @@ public:
   /** Gets the total aerodynamic force vector.
       @return a force vector reference. */
   FGColumnVector3& GetForces(void) {return vForces;}
-  inline float GetForces(int n) {return vForces(n);}
+  inline double GetForces(int n) {return vForces(n);}
 
   /** Gets the total aerodynamic moment vector.
       @return a moment vector reference. */
   FGColumnVector3& GetMoments(void) {return vMoments;}
-  inline float GetMoments(int n) {return vMoments(n);}
+  inline double GetMoments(int n) {return vMoments(n);}
 
   inline FGColumnVector3& GetvLastFs(void) { return vLastFs; }
-  inline float GetvLastFs(int axis) { return vLastFs(axis); }
+  inline double GetvLastFs(int axis) { return vLastFs(axis); }
   inline FGColumnVector3& GetvFs(void) { return vFs; }
-  inline float GetvFs(int axis) { return vFs(axis); }
-  float GetLoD(void);
+  inline double GetvFs(int axis) { return vFs(axis); }
+  double GetLoD(void);
 
     /** Gets the strings for the current set of coefficients.
       @return a string containing the descriptive names for all coefficients */
@@ -135,7 +135,7 @@ public:
   string GetCoefficientValues(void);
 
   /// Gets the Normal Load Factor
-  float GetNlf(void);
+  double GetNlf(void);
 
 private:
   typedef map<string,int> AxisIndex;
index 44dd4e75e48173e698a5373ce1fbec13c46d2c0f..f57e6b33afb0728d648168908566cc4c8f53d736 100644 (file)
@@ -134,8 +134,8 @@ bool FGAircraft::Load(FGConfigFile* AC_cfg)
 
   ReadPrologue(AC_cfg);
 
-  while ((AC_cfg->GetNextConfigLine() != "EOF") &&
-         (token = AC_cfg->GetValue()) != "/FDM_CONFIG") {
+  while ((AC_cfg->GetNextConfigLine() != string("EOF")) &&
+         (token = AC_cfg->GetValue()) != string("/FDM_CONFIG")) {
     if (token == "METRICS") {
       if (debug_lvl > 0) cout << fgcyan << "\n  Reading Metrics" << fgdef << endl;
       ReadMetrics(AC_cfg);
@@ -196,16 +196,40 @@ bool FGAircraft::Run(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+void FGAircraft::ReadPrologue(FGConfigFile* AC_cfg)
+{
+  string token = AC_cfg->GetValue();
+  string scratch;
+  AircraftName = AC_cfg->GetValue("NAME");
+  if (debug_lvl > 0) cout << underon << "Reading Aircraft Configuration File"
+            << underoff << ": " << highint << AircraftName << normint << endl;
+  scratch = AC_cfg->GetValue("VERSION").c_str();
+
+  CFGVersion = AC_cfg->GetValue("VERSION");
+
+  if (debug_lvl > 0)
+    cout << "                            Version: " << highint << CFGVersion
+                                                             << normint << endl;
+  if (CFGVersion != needed_cfg_version) {
+    cerr << endl << fgred << "YOU HAVE AN INCOMPATIBLE CFG FILE FOR THIS AIRCRAFT."
+            " RESULTS WILL BE UNPREDICTABLE !!" << endl;
+    cerr << "Current version needed is: " << needed_cfg_version << endl;
+    cerr << "         You have version: " << CFGVersion << endl << fgdef << endl;
+  }
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 void FGAircraft::ReadMetrics(FGConfigFile* AC_cfg)
 {
   string token = "";
   string parameter;
-  float EW, bixx, biyy, bizz, bixz, biyz;
+  double EW, bixx, biyy, bizz, bixz, biyz;
   FGColumnVector3 vbaseXYZcg(3);
 
   AC_cfg->GetNextConfigLine();
 
-  while ((token = AC_cfg->GetValue()) != "/METRICS") {
+  while ((token = AC_cfg->GetValue()) != string("/METRICS")) {
     *AC_cfg >> parameter;
     if (parameter == "AC_WINGAREA") {
       *AC_cfg >> WingArea;
@@ -325,100 +349,8 @@ void FGAircraft::ReadUndercarriage(FGConfigFile* AC_cfg)
 
 void FGAircraft::ReadOutput(FGConfigFile* AC_cfg)
 {
-  string token, parameter;
-  int OutRate = 0;
-  int subsystems = 0;
-
-  token = AC_cfg->GetValue("NAME");
-  Output->SetFilename(token);
-  token = AC_cfg->GetValue("TYPE");
-  Output->SetType(token);
-  AC_cfg->GetNextConfigLine();
-
-  while ((token = AC_cfg->GetValue()) != "/OUTPUT") {
-    *AC_cfg >> parameter;
-    if (parameter == "RATE_IN_HZ") *AC_cfg >> OutRate;
-    if (parameter == "SIMULATION") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssSimulation;
-    }
-    if (parameter == "AEROSURFACES") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssAerosurfaces;
-    }
-    if (parameter == "RATES") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssRates;
-    }
-    if (parameter == "VELOCITIES") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssVelocities;
-    }
-    if (parameter == "FORCES") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssForces;
-    }
-    if (parameter == "MOMENTS") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssMoments;
-    }
-    if (parameter == "ATMOSPHERE") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssAtmosphere;
-    }
-    if (parameter == "MASSPROPS") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssMassProps;
-    }
-    if (parameter == "POSITION") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssPosition;
-    }
-    if (parameter == "COEFFICIENTS") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssCoefficients;
-    }
-    if (parameter == "GROUND_REACTIONS") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssGroundReactions;
-    }
-    if (parameter == "FCS") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssFCS;
-    }
-    if (parameter == "PROPULSION") {
-      *AC_cfg >> parameter;
-      if (parameter == "ON") subsystems += ssPropulsion;
-    }
-  }
-
-  Output->SetSubsystems(subsystems);
-
-  OutRate = OutRate>120?120:(OutRate<0?0:OutRate);
-  Output->SetRate( (int)(0.5 + 1.0/(State->Getdt()*OutRate)) );
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGAircraft::ReadPrologue(FGConfigFile* AC_cfg)
-{
-  string token = AC_cfg->GetValue();
-  string scratch;
-  AircraftName = AC_cfg->GetValue("NAME");
-  if (debug_lvl > 0) cout << underon << "Reading Aircraft Configuration File"
-            << underoff << ": " << highint << AircraftName << normint << endl;
-  scratch = AC_cfg->GetValue("VERSION").c_str();
-
-  CFGVersion = AC_cfg->GetValue("VERSION");
-
-  if (debug_lvl > 0)
-    cout << "                            Version: " << highint << CFGVersion
-                                                             << normint << endl;
-  if (CFGVersion != needed_cfg_version) {
-    cerr << endl << fgred << "YOU HAVE AN INCOMPATIBLE CFG FILE FOR THIS AIRCRAFT."
-            " RESULTS WILL BE UNPREDICTABLE !!" << endl;
-    cerr << "Current version needed is: " << needed_cfg_version << endl;
-    cerr << "         You have version: " << CFGVersion << endl << fgdef << endl;
+  if (!Output->Load(AC_cfg)) {
+    cerr << "Output not successfully loaded" << endl;
   }
 }
 
index 710401f36b21e469f6279f623c28c54c4756c257..2fee85267b001a045192d079a8e9460c7d487686 100644 (file)
@@ -172,53 +172,36 @@ public:
   inline string GetAircraftName(void) { return AircraftName; }
   
   /// Gets the wing area
-  inline float GetWingArea(void) { return WingArea; }
+  inline double GetWingArea(void) { return WingArea; }
   /// Gets the wing span
-  inline float GetWingSpan(void) { return WingSpan; }
+  inline double GetWingSpan(void) { return WingSpan; }
   /// Gets the average wing chord
-  inline float Getcbar(void) { return cbar; }
-  inline float GetWingIncidence(void) { return WingIncidence; }
-  inline float GetHTailArea(void) { return HTailArea; }
-  inline float GetHTailArm(void)  { return HTailArm; }
-  inline float GetVTailArea(void) { return VTailArea; }
-  inline float GetVTailArm(void)  { return VTailArm; }
-  inline float Getlbarh(void) { return lbarh; } // HTailArm / cbar
-  inline float Getlbarv(void) { return lbarv; } // VTailArm / cbar
-  inline float Getvbarh(void) { return vbarh; } // H. Tail Volume
-  inline float Getvbarv(void) { return vbarv; } // V. Tail Volume
+  inline double Getcbar(void) { return cbar; }
+  inline double GetWingIncidence(void) { return WingIncidence; }
+  inline double GetHTailArea(void) { return HTailArea; }
+  inline double GetHTailArm(void)  { return HTailArm; }
+  inline double GetVTailArea(void) { return VTailArea; }
+  inline double GetVTailArm(void)  { return VTailArm; }
+  inline double Getlbarh(void) { return lbarh; } // HTailArm / cbar
+  inline double Getlbarv(void) { return lbarv; } // VTailArm / cbar
+  inline double Getvbarh(void) { return vbarh; } // H. Tail Volume
+  inline double Getvbarv(void) { return vbarv; } // V. Tail Volume
   inline FGColumnVector3& GetMoments(void) { return vMoments; }
   inline FGColumnVector3& GetForces(void) { return vForces; }
   inline FGColumnVector3& GetBodyAccel(void) { return vBodyAccel; }
   inline FGColumnVector3& GetNcg   (void)    { return vNcg; }
   inline FGColumnVector3& GetXYZrp(void) { return vXYZrp; }
   inline FGColumnVector3& GetXYZep(void) { return vXYZep; }
-  inline float GetXYZrp(int idx) { return vXYZrp(idx); }
-  inline float GetXYZep(int idx) { return vXYZep(idx); }
-  inline float GetAlphaCLMax(void) { return alphaclmax; }
-  inline float GetAlphaCLMin(void) { return alphaclmin; }
+  inline double GetXYZrp(int idx) { return vXYZrp(idx); }
+  inline double GetXYZep(int idx) { return vXYZep(idx); }
+  inline double GetAlphaCLMax(void) { return alphaclmax; }
+  inline double GetAlphaCLMin(void) { return alphaclmin; }
 
-  inline void SetAlphaCLMax(float tt) { alphaclmax=tt; }
-  inline void SetAlphaCLMin(float tt) { alphaclmin=tt; }
+  inline void SetAlphaCLMax(double tt) { alphaclmax=tt; }
+  inline void SetAlphaCLMin(double tt) { alphaclmin=tt; }
   
   inline bool GetStallWarn(void) { return impending_stall; }
 
-  /// Subsystem types for specifying which will be output in the FDM data logging
-  enum  SubSystems {
-    /** Subsystem: Simulation (= 1)          */ ssSimulation      = 1,
-    /** Subsystem: Aerosurfaces (= 2)        */ ssAerosurfaces    = 2,
-    /** Subsystem: Body rates (= 4)          */ ssRates           = 4,
-    /** Subsystem: Velocities (= 8)          */ ssVelocities      = 8,
-    /** Subsystem: Forces (= 16)             */ ssForces          = 16,
-    /** Subsystem: Moments (= 32)            */ ssMoments         = 32,
-    /** Subsystem: Atmosphere (= 64)         */ ssAtmosphere      = 64,
-    /** Subsystem: Mass Properties (= 128)   */ ssMassProps       = 128,
-    /** Subsystem: Coefficients (= 256)      */ ssCoefficients    = 256,
-    /** Subsystem: Position (= 512)          */ ssPosition        = 512,
-    /** Subsystem: Ground Reactions (= 1024) */ ssGroundReactions = 1024,
-    /** Subsystem: FCS (= 2048)              */ ssFCS             = 2048,
-    /** Subsystem: Propulsion (= 4096)       */ ssPropulsion      = 4096
-  } subsystems;
-
 private:
   FGColumnVector3 vMoments;
   FGColumnVector3 vForces;
@@ -229,11 +212,11 @@ private:
   FGColumnVector3 vBodyAccel;
   FGColumnVector3 vNcg;
 
-  float WingArea, WingSpan, cbar, WingIncidence;
-  float HTailArea, VTailArea, HTailArm, VTailArm;
-  float lbarh,lbarv,vbarh,vbarv;
-  float alphaclmax,alphaclmin;
-  float impending_stall;
+  double WingArea, WingSpan, cbar, WingIncidence;
+  double HTailArea, VTailArea, HTailArm, VTailArm;
+  double lbarh,lbarv,vbarh,vbarv;
+  double alphaclmax,alphaclmin;
+  double impending_stall;
   string CFGVersion;
   string AircraftName;
 
index 1ce5138f7ed8f61f462bebf75456f5174dc112e4..407d5dfd459ba385f52a663a8878f064eb0bb496 100644 (file)
@@ -135,19 +135,19 @@ bool FGAtmosphere::Run(void)
     soundspeed = sqrt(SHRatio*Reng*temperature);
 
     State->Seta(soundspeed);
-
   } else {                               // skip Run() execution this time
   }
+
   return false;
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGAtmosphere::Calculate(float altitude)
+void FGAtmosphere::Calculate(double altitude)
 {
   //see reference [1]
 
-  float slope,reftemp,refpress;
+  double slope,reftemp,refpress;
   int i=0; bool lookup = false;
   // cout << "Atmosphere:  h=" << altitude << " rho= " << density << endl;
   i=lastIndex;
index 431af4d453ae699559053cfbf288ebdcad357f87..fe0fe322b008fc0b5084dd76a92fe32eb9d9eb05 100644 (file)
@@ -91,32 +91,32 @@ public:
   bool InitModel(void);
 
   /// Returns the temperature in degrees Rankine.
-  inline float GetTemperature(void) {return temperature;}
+  inline double GetTemperature(void) {return temperature;}
   /** Returns the density in slugs/ft^3.
       <i>This function may <b>only</b> be used if Run() is called first.</i> */
-  inline float GetDensity(void)    {return density;}
+  inline double GetDensity(void)    {return density;}
   /// Returns the pressure in psf.
-  inline float GetPressure(void)   {return pressure;}
+  inline double GetPressure(void)   {return pressure;}
   /// Returns the speed of sound in ft/sec.
-  inline float GetSoundSpeed(void) {return soundspeed;}
+  inline double GetSoundSpeed(void) {return soundspeed;}
 
   /// Returns the sea level temperature in degrees Rankine.
-  inline float GetTemperatureSL(void) { return SLtemperature; }
+  inline double GetTemperatureSL(void) { return SLtemperature; }
   /// Returns the sea level density in slugs/ft^3
-  inline float GetDensitySL(void)     { return SLdensity; }
+  inline double GetDensitySL(void)     { return SLdensity; }
   /// Returns the sea level pressure in psf.
-  inline float GetPressureSL(void)    { return SLpressure; }
+  inline double GetPressureSL(void)    { return SLpressure; }
   /// Returns the sea level speed of sound in ft/sec.
-  inline float GetSoundSpeedSL(void)  { return SLsoundspeed; }
+  inline double GetSoundSpeedSL(void)  { return SLsoundspeed; }
 
   /// Returns the ratio of at-altitude temperature over the sea level value.
-  inline float GetTemperatureRatio(void)  { return temperature*rSLtemperature; }
+  inline double GetTemperatureRatio(void)  { return temperature*rSLtemperature; }
   /// Returns the ratio of at-altitude density over the sea level value.
-  inline float GetDensityRatio(void)     { return density*rSLdensity; }
+  inline double GetDensityRatio(void)    { return density*rSLdensity; }
   /// Returns the ratio of at-altitude pressure over the sea level value.
-  inline float GetPressureRatio(void)     { return pressure*rSLpressure; }
+  inline double GetPressureRatio(void)     { return pressure*rSLpressure; }
   /// Returns the ratio of at-altitude sound speed over the sea level value.
-  inline float GetSoundSpeedRatio(void)   { return soundspeed*rSLsoundspeed; }
+  inline double GetSoundSpeedRatio(void)   { return soundspeed*rSLsoundspeed; }
 
   /// Tells the simulator to use an externally calculated atmosphere model.
   inline void UseExternal(void)          { useExternal=true;  }
@@ -126,21 +126,21 @@ public:
   bool External(void) { return useExternal; }
 
   /// Provides the external atmosphere model with an interface to set the temperature.
-  inline void SetExTemperature(float t)  { exTemperature=t; }
+  inline void SetExTemperature(double t)  { exTemperature=t; }
   /// Provides the external atmosphere model with an interface to set the density.
-  inline void SetExDensity(float d)      { exDensity=d; }
+  inline void SetExDensity(double d)      { exDensity=d; }
   /// Provides the external atmosphere model with an interface to set the pressure.
-  inline void SetExPressure(float p)     { exPressure=p; }
+  inline void SetExPressure(double p)     { exPressure=p; }
 
   /// Sets the wind components in NED frame.
-  inline void SetWindNED(float wN, float wE, float wD) { vWindNED(1)=wN; vWindNED(2)=wE; vWindNED(3)=wD;}
+  inline void SetWindNED(double wN, double wE, double wD) { vWindNED(1)=wN; vWindNED(2)=wE; vWindNED(3)=wD;}
 
   /// Retrieves the wind components in NED frame.
   inline FGColumnVector3& GetWindNED(void) { return vWindNED; }
   
   /** Retrieves the wind direction. The direction is defined as north=0 and
       increases counterclockwise. The wind heading is returned in radians.*/
-  inline float GetWindPsi(void) { return psiw; }
+  inline double GetWindPsi(void) { return psiw; }
   
 private:
   double rho;
@@ -157,7 +157,7 @@ private:
   FGColumnVector3 vWindNED;
   double psiw;
 
-  void Calculate(float altitude);
+  void Calculate(double altitude);
   void Debug(void);
 };
 
index 6c2ee284b1828131c2cc9cb277bfd502c4dd1280..46f157545c833f24a6c346f4c58306d7410a02ad 100644 (file)
@@ -86,7 +86,7 @@ FGAuxiliary::~FGAuxiliary()
 
 bool FGAuxiliary::Run()
 {
-  float A,B,D;
+  double A,B,D;
 
   if (!FGModel::Run()) {
     GetState();
@@ -164,9 +164,9 @@ bool FGAuxiliary::Run()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGAuxiliary::GetHeadWind(void)
+double FGAuxiliary::GetHeadWind(void)
 {
-  float psiw,vw,psi;
+  double psiw,vw,psi;
 
   psiw = Atmosphere->GetWindPsi();
   psi = Rotation->Getpsi();
@@ -177,9 +177,9 @@ float FGAuxiliary::GetHeadWind(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGAuxiliary::GetCrossWind(void)
+double FGAuxiliary::GetCrossWind(void)
 {
-  float psiw,vw,psi;
+  double psiw,vw,psi;
 
   psiw = Atmosphere->GetWindPsi();
   psi = Rotation->Getpsi();
@@ -197,7 +197,7 @@ FGColumnVector3 FGAuxiliary::GetNpilot(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGAuxiliary::GetNpilot(int idx)
+double FGAuxiliary::GetNpilot(int idx)
 {
   return (vPilotAccel/Inertial->gravity())(idx);
 }
index 23ef0d7f70a8eb9ca3e928c387c65b4c614fcf45..a29ae2303511e26a82b42314dc090263cf6c07b2 100644 (file)
@@ -85,26 +85,26 @@ public:
   bool Run(void);
 
   // Use FGInitialCondition to set these speeds
-  inline float GetVcalibratedFPS(void) { return vcas; }
-  inline float GetVcalibratedKTS(void) { return vcas*fpstokts; }
-  inline float GetVequivalentFPS(void) { return veas; }
-  inline float GetVequivalentKTS(void) { return veas*fpstokts; }
+  inline double GetVcalibratedFPS(void) { return vcas; }
+  inline double GetVcalibratedKTS(void) { return vcas*fpstokts; }
+  inline double GetVequivalentFPS(void) { return veas; }
+  inline double GetVequivalentKTS(void) { return veas*fpstokts; }
   
   inline FGColumnVector3& GetPilotAccel(void) { return vPilotAccel; }
-  inline float GetPilotAccel(int idx) { return vPilotAccel(idx); }
+  inline double GetPilotAccel(int idx) { return vPilotAccel(idx); }
   FGColumnVector3 GetNpilot(void);
-  float GetNpilot(int idx);
+  double GetNpilot(int idx);
 
-  inline float GetEarthPositionAngle(void) { return earthPosAngle; }
+  inline double GetEarthPositionAngle(void) { return earthPosAngle; }
   
-  float GetHeadWind(void);
-  float GetCrossWind(void);
+  double GetHeadWind(void);
+  double GetCrossWind(void);
  
 private:
-  float vcas;
-  float veas;
-  float mach;
-  float qbar,rhosl,rho,p,psl,pt;
+  double vcas;
+  double veas;
+  double mach;
+  double qbar,rhosl,rho,p,psl,pt;
 
   // Don't add a getter for pt!
   // pt above is freestream total pressure for subsonic only
@@ -116,7 +116,7 @@ private:
   FGColumnVector3 vPilotAccel;
   FGColumnVector3 vToEyePt;
   
-  float earthPosAngle;
+  double earthPosAngle;
 
   void GetState(void);
   void Debug(void);
index 142c90e70fcf72ba06b87d411c9be316900857ee..927084f824ebca999e7e4d74b2f96ec1de7b84af 100644 (file)
@@ -140,7 +140,7 @@ bool FGCoefficient::Load(FGConfigFile *AC_cfg) {
     n     = multparms.find("|");
     start = 0;
 
-    if(multparms != "FG_NONE") {
+    if (multparms != string("FG_NONE")) {
       while (n < end && n >= 0) {
         n -= start;
         mult = multparms.substr(start,n);
@@ -179,9 +179,9 @@ bool FGCoefficient::Load(FGConfigFile *AC_cfg) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGCoefficient::Value(float rVal, float cVal)
+double FGCoefficient::Value(double rVal, double cVal)
 {
-  float Value;
+  double Value;
   unsigned int midx;
 
   SD = Value = Table->GetValue(rVal, cVal);
@@ -194,9 +194,9 @@ float FGCoefficient::Value(float rVal, float cVal)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGCoefficient::Value(float Val)
+double FGCoefficient::Value(double Val)
 {
-  float Value;
+  double Value;
 
   SD = Value = Table->GetValue(Val);
   
@@ -208,9 +208,9 @@ float FGCoefficient::Value(float Val)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGCoefficient::Value(void)
+double FGCoefficient::Value(void)
 {
-       float Value;
+       double Value;
 
   SD = Value = StaticValue;
 
@@ -222,7 +222,7 @@ float FGCoefficient::Value(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGCoefficient::TotalValue()
+double FGCoefficient::TotalValue()
 {
   
   switch(type) {
index b35282b79059d9869e0ea2f1fb177a6209520ce5..fb574aa7133c997abf9513b139948f13c7076c3b 100644 (file)
@@ -104,9 +104,9 @@ public:
   virtual bool Load(FGConfigFile* AC_cfg);
   
   typedef vector <eParam> MultVec;
-  virtual float TotalValue(void);
+  virtual double TotalValue(void);
   virtual inline string Getname(void) {return name;}
-  virtual inline float GetSD(void) { return SD;}
+  virtual inline double GetSD(void) { return SD;}
   inline MultVec Getmultipliers(void) {return multipliers;}
   void DumpSD(void);  
   
@@ -126,15 +126,15 @@ private:
   string description;
   string name;
   string method;
-  float Value(float, float);
-  float Value(float);
-  float Value(void);
-  float StaticValue;
+  double Value(double, double);
+  double Value(double);
+  double Value(void);
+  double StaticValue;
   eParam LookupR, LookupC;
   MultVec multipliers;
   int rows, columns;
   Type type;
-  float SD; // Actual stability derivative (or other coefficient) value
+  double SD; // Actual stability derivative (or other coefficient) value
   FGTable *Table;
 
   FGFDMExec*      FDMExec;
index 4f4f54d315b77bf7f6ba00ef91cf760d01ea2e15..070ea5e71504244c809cf6057c77053138888046 100644 (file)
@@ -218,7 +218,7 @@ FGColumnVector3 operator*(const double scalar, const FGColumnVector3& C)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGColumnVector3::Magnitude(void)
+double FGColumnVector3::Magnitude(void)
 {
   double num;
 
@@ -307,7 +307,7 @@ ostream& operator<<(ostream& os, const FGColumnVector3& col)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGColumnVector3& FGColumnVector3::operator<<(const float ff)
+FGColumnVector3& FGColumnVector3::operator<<(const double ff)
 {
   data[rowCtr] = ff;
   if (++rowCtr > 3 )
index 613dde3c5d40e00cf8d4278801b53845cbb29215..6c61b3ec65af65976b2c9e64244d2e4dd6f80a3d 100644 (file)
@@ -95,12 +95,12 @@ public:
   void operator*=(const double scalar);
   void operator/=(const double scalar);
 
-  FGColumnVector3& operator<<(const float ff);
+  FGColumnVector3& operator<<(const double ff);
 
   inline void InitMatrix(void) { data[1]=0; data[2]=0; data[3]=0; }
-  inline void InitMatrix(float ff) { data[1]=ff; data[2]=ff; data[3]=ff; }
+  inline void InitMatrix(double ff) { data[1]=ff; data[2]=ff; data[3]=ff; }
 
-  float Magnitude(void);
+  double Magnitude(void);
   FGColumnVector3 Normalize(void);
 
   friend FGColumnVector3 operator*(const double scalar, const FGColumnVector3& A);
index 24883abde389d4def7a3f9c51ec2c423b07ba211..1a1b6f26c8ce3fef1b410386a920e9f3f52f45b3 100644 (file)
@@ -204,7 +204,7 @@ FGColumnVector4 operator*(const double scalar, const FGColumnVector4& C)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGColumnVector4::Magnitude(void)
+double FGColumnVector4::Magnitude(void)
 {
   double num;
 
@@ -299,7 +299,7 @@ ostream& operator<<(ostream& os, FGColumnVector4& col)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGColumnVector4& FGColumnVector4::operator<<(const float ff)
+FGColumnVector4& FGColumnVector4::operator<<(const double ff)
 {
   data[rowCtr] = ff;
   if (++rowCtr > 4 )
index 5275f0509e58b59edc514bf6fe59b2baa6897af6..1a47539d15f2f595154dc43223c275cd27477552 100644 (file)
@@ -95,12 +95,12 @@ public:
   inline double operator()(int m) const { return data[m]; }
   inline double& operator()(int m) { return data[m]; }
   
-  FGColumnVector4& operator<<(const float ff);
+  FGColumnVector4& operator<<(const double ff);
 
   inline void InitMatrix(void) { data[1]=0; data[2]=0; data[3]=0; }
-  inline void InitMatrix(float ff) { data[1]=ff; data[2]=ff; data[3]=ff; }
+  inline void InitMatrix(double ff) { data[1]=ff; data[2]=ff; data[3]=ff; }
 
-  float Magnitude(void);
+  double Magnitude(void);
   FGColumnVector4 Normalize(void);
 
   friend FGColumnVector4 operator*(const double scalar, const FGColumnVector4& A);
index 42fbe6a32c458ed657b1c21113f1cd99af0d4a82..b9d5066f8423f334bdcd03a0a4930771bfaf35aa 100644 (file)
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Header:       FGConfigFile.h
- Author:       Jon Berndt
- Date started: 03/29/00
- Purpose:      Config file read-in class
- Called by:    FGAircraft
-
-FUNCTIONAL DESCRIPTION
---------------------------------------------------------------------------------
-
-HISTORY
---------------------------------------------------------------------------------
-03/16/2000 JSB  Created
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-INCLUDES
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-#include "FGConfigFile.h"
-#include <stdlib.h>
-#include <math.h>
-
-static const char *IdSrc = "$Id$";
-static const char *IdHdr = ID_CONFIGFILE;
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-CLASS IMPLEMENTATION
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-FGConfigFile::FGConfigFile(string cfgFileName)
-{
-#if defined ( sgi ) && !defined( __GNUC__ )
-  cfgfile.open(cfgFileName.c_str(), ios::in );
-#else
-  cfgfile.open(cfgFileName.c_str(), ios::in | ios::binary );
-#endif
-  CommentsOn = false;
-  CurrentIndex = 0;
-  Opened = true;
-#if defined ( sgi ) && !defined( __GNUC__ )
-   if (!cfgfile.fail() && !cfgfile.eof())  GetNextConfigLine();
-#else
-  if (cfgfile.is_open()) GetNextConfigLine();
-#endif
-  else Opened = false;
-
-  if (debug_lvl & 2) cout << "Instantiated: FGConfigFile" << endl;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGConfigFile::~FGConfigFile()
-{
-  cfgfile.close();
-  if (debug_lvl & 2) cout << "Destroyed:    FGConfigFile" << endl;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-string FGConfigFile::GetNextConfigLine(void)
-{
-  int deblank;
-
-  do {
-    CurrentLine = GetLine();
-    if (CurrentLine.find("<!--") != CurrentLine.npos) {
-      CommentsOn = true;
-      CommentString = "";
-      if (CurrentLine.find("<!--") != CurrentLine.npos)
-        CurrentLine.erase(CurrentLine.find("<!--"),4);
-      while((deblank = CurrentLine.find(" ")) != CurrentLine.npos) CurrentLine.erase(deblank,1);
-      if (CurrentLine.size() <= 2) CurrentLine = "";
-    }
-
-    if (CurrentLine.find("-->") != CurrentLine.npos) {
-      CommentsOn = false;
-
-      if (CurrentLine.find("-->") != CurrentLine.npos)
-        CurrentLine.erase(CurrentLine.find("-->"),4);
-
-      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 (CommentsOn);
-
-  if (CurrentLine.length() == 0) GetNextConfigLine();
-  CurrentIndex = 0;
-  return CurrentLine;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-string FGConfigFile::GetCommentString(void)
-{
-    return CommentString;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-string FGConfigFile::GetValue(string val)
-{
-  unsigned int pos, p1, p2, ptest;
-
-  if (val == "") {    // this call is to return the tag value
-    pos = CurrentLine.find("<");
-    if (pos != CurrentLine.npos) { // beginning brace found "<"
-      p1 = CurrentLine.find_first_not_of(" ",pos+1);
-      if (p1 != CurrentLine.npos) { // found first character of tag
-        p2 = CurrentLine.find_first_of(" >",p1+1);
-        if (p2 == CurrentLine.npos) p2 = p1+1;
-        return CurrentLine.substr(p1,p2-p1);
-      }
-    } else {   // beginning brace "<" not found; this is a regular data line
-      pos = CurrentLine.find_first_not_of(" ");
-      if (pos != CurrentLine.npos) {  // first character in line found
-        p2 = CurrentLine.find_first_of(" ",pos+1);
-        if (p2 != CurrentLine.npos) {
-          return CurrentLine.substr(pos,p2-pos);
-        } else {
-          return CurrentLine.substr(pos,CurrentLine.length()-pos);
-        }
-      }
-    }
-  } else { // return a value for a specific tag
-    pos = CurrentLine.find(val);
-    if (pos != CurrentLine.npos) {
-      pos = CurrentLine.find("=",pos);
-      if (pos != CurrentLine.npos) {
-        ptest = CurrentLine.find_first_not_of(" ",pos+1);
-        if (ptest != CurrentLine.npos) {
-          p1 = ptest + 1;
-          if (CurrentLine[ptest] == '"') { // quoted
-            p2 = CurrentLine.find_first_of("\"",p1);
-          } else { // not quoted
-            p2 = CurrentLine.find_first_of(" ",p1);
-          }
-          if (p2 != CurrentLine.npos) {
-            return CurrentLine.substr(p1,p2-p1);
-          }
-        }
-      } else {   // "=" not found
-        pos = CurrentLine.find(val);
-        pos = CurrentLine.find_first_of(" ",pos+1);
-        ptest = CurrentLine.find_first_not_of(" ",pos+1);
-        if (ptest != CurrentLine.npos) {
-          if (CurrentLine[ptest] == '"') { // quoted
-            p1 = ptest + 1;
-            p2 = CurrentLine.find_first_of("\"",p1);
-          } else { // not quoted
-            p1 = ptest;
-            p2 = CurrentLine.find_first_of(" ",p1);
-          }
-          if (p2 != CurrentLine.npos) {
-            return CurrentLine.substr(p1,p2-p1);
-          } else {
-            p2 = CurrentLine.length();
-            return CurrentLine.substr(p1,p2-p1);
-          }
-        }
-      }
-    }
-  }
-
-  return string("");
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-string FGConfigFile::GetValue(void)
-{
-  return GetValue("");
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-string FGConfigFile::GetLine(void)
-{
-  string scratch = "";
-  int test;
-
-  while ((test = cfgfile.get()) != EOF) {
-    if (test >= 0x20) {
-      scratch += (char)test;
-    } else {
-      if ((test = cfgfile.get()) != EOF) {
-#if defined ( sgi ) && !defined( __GNUC__ )
-        if (test >= 0x20) cfgfile.putback(test);
-#else
-        if (test >= 0x20) cfgfile.unget();
-#endif
-        break;
-      }
-    }
-  }
-  if (cfgfile.eof()) return string("EOF");
-  return scratch;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGConfigFile& FGConfigFile::operator>>(double& val)
-{
-  unsigned int pos, end;
-
-  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
-  if (pos == CurrentLine.npos) pos = CurrentLine.length();
-  end = CurrentLine.find_first_of(", ",pos+1);
-  if (end == CurrentLine.npos) end = CurrentLine.length();
-  string str = CurrentLine.substr(pos, end - pos);
-  val = strtod(str.c_str(),NULL);
-  CurrentIndex = end+1;
-  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();
-  return *this;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGConfigFile& FGConfigFile::operator>>(float& val)
-{
-  unsigned int pos, end;
-
-  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
-  if (pos == CurrentLine.npos) pos = CurrentLine.length();
-  end = CurrentLine.find_first_of(", ",pos+1);
-  if (end == CurrentLine.npos) end = CurrentLine.length();
-  string str = CurrentLine.substr(pos, end - pos);
-  val = strtod(str.c_str(),NULL);
-  CurrentIndex = end+1;
-  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();
-  return *this;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGConfigFile& FGConfigFile::operator>>(int& val)
-{
-  unsigned int pos, end;
-
-  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
-  if (pos == CurrentLine.npos) pos = CurrentLine.length();
-  end = CurrentLine.find_first_of(", ",pos+1);
-  if (end == CurrentLine.npos) end = CurrentLine.length();
-  string str = CurrentLine.substr(pos, end - pos);
-  val = atoi(str.c_str());
-  CurrentIndex = end+1;
-  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();
-  return *this;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGConfigFile& FGConfigFile::operator>>(eParam& val)
-{
-  unsigned int pos, end;
-
-  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
-  if (pos == CurrentLine.npos) pos = CurrentLine.length();
-  end = CurrentLine.find_first_of(", ",pos+1);
-  if (end == CurrentLine.npos) end = CurrentLine.length();
-  string str = CurrentLine.substr(pos, end - pos);
-  val = (eParam)atoi(str.c_str());
-  CurrentIndex = end+1;
-  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();
-  return *this;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGConfigFile& FGConfigFile::operator>>(string& str)
-{
-  unsigned int pos, end;
-
-  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
-  if (pos == CurrentLine.npos) pos = CurrentLine.length();
-  end = CurrentLine.find_first_of(", ",pos+1);
-  if (end == CurrentLine.npos) end = CurrentLine.length();
-  str = CurrentLine.substr(pos, end - pos);
-  CurrentIndex = end+1;
-  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();
-  return *this;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGConfigFile::ResetLineIndexToZero(void)
-{
-  CurrentIndex = 0;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGConfigFile::Debug(void)
-{
-    //TODO: Add your source code here
-}
-
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+ Header:       FGConfigFile.h\r
+ Author:       Jon Berndt\r
+ Date started: 03/29/00\r
+ Purpose:      Config file read-in class\r
+ Called by:    FGAircraft\r
+\r
+FUNCTIONAL DESCRIPTION\r
+--------------------------------------------------------------------------------\r
+\r
+HISTORY\r
+--------------------------------------------------------------------------------\r
+03/16/2000 JSB  Created\r
+\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+INCLUDES\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
+\r
+#include "FGConfigFile.h"\r
+#include <stdlib.h>\r
+#include <math.h>\r
+\r
+static const char *IdSrc = "$Id$";\r
+static const char *IdHdr = ID_CONFIGFILE;\r
+\r
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+CLASS IMPLEMENTATION\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
+\r
+FGConfigFile::FGConfigFile(string cfgFileName)\r
+{\r
+#if defined ( sgi ) && !defined( __GNUC__ )\r
+  cfgfile.open(cfgFileName.c_str(), ios::in );\r
+#else\r
+  cfgfile.open(cfgFileName.c_str(), ios::in | ios::binary );\r
+#endif\r
+  CommentsOn = false;\r
+  CurrentIndex = 0;\r
+  Opened = true;\r
+#if defined ( sgi ) && !defined( __GNUC__ )\r
+   if (!cfgfile.fail() && !cfgfile.eof())  GetNextConfigLine();\r
+#else\r
+  if (cfgfile.is_open()) GetNextConfigLine();\r
+#endif\r
+  else Opened = false;\r
+\r
+  if (debug_lvl & 2) cout << "Instantiated: FGConfigFile" << endl;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+FGConfigFile::~FGConfigFile()\r
+{\r
+  cfgfile.close();\r
+  if (debug_lvl & 2) cout << "Destroyed:    FGConfigFile" << endl;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+string FGConfigFile::GetNextConfigLine(void)\r
+{\r
+  int deblank, not_found = string::npos;\r
+  int comment_starts_at;\r
+  int comment_ends_at;\r
+  int comment_length;\r
+  int line_length;\r
+  bool start_comment, end_comment;\r
+  string CommentStringTemp;\r
+\r
+  do {\r
+    CurrentLine = GetLine();\r
+    line_length = CurrentLine.length();\r
+    comment_starts_at = CurrentLine.find("<!--");\r
+    \r
+    if (comment_starts_at >= 0) start_comment = true;\r
+    else start_comment = false;\r
+    \r
+    comment_ends_at = CurrentLine.find("-->");\r
+    \r
+    if (comment_ends_at >= 0) end_comment = true;\r
+    else end_comment = false;\r
+\r
+    if (!start_comment && !end_comment) {                              //  command comment\r
+      if (CommentsOn) CommentStringTemp = CurrentLine;\r
+      CommentString += CommentStringTemp + "\r\n";\r
+    } else if (start_comment && comment_ends_at > comment_starts_at) { //  <!-- ... -->\r
+      CommentsOn = false;\r
+      comment_length = comment_ends_at + 2 - comment_starts_at + 1;\r
+      LineComment = CurrentLine.substr(comment_starts_at+4, comment_length-4-3);\r
+      CurrentLine.erase(comment_starts_at, comment_length);\r
+    } else if ( start_comment && !end_comment) {                       //  <!-- ...\r
+      CommentsOn = true;\r
+      comment_length = line_length - comment_starts_at;\r
+      CommentStringTemp = CurrentLine.substr(comment_starts_at+4, comment_length-4);\r
+      CommentString = CommentStringTemp + "\r\n";\r
+      CurrentLine.erase(comment_starts_at, comment_length);\r
+    } else if (!start_comment && end_comment) {                       //  ... -->\r
+      CommentsOn = false;\r
+      comment_length = comment_ends_at + 2 + 1;\r
+      CommentStringTemp = CurrentLine.substr(0, comment_length-4);\r
+      CommentString += CommentStringTemp + "\r\n";\r
+      CurrentLine.erase(0, comment_length);\r
+    } else if (start_comment && comment_ends_at < comment_starts_at) { //  --> command <!--\r
+      cerr << "Old comment ends and new one starts - bad JSBSim config file form." << endl;\r
+      CommentsOn = false;\r
+      comment_length = comment_ends_at + 2 + 1;\r
+      CommentStringTemp = CurrentLine.substr(0, comment_length-4);\r
+      CommentString += CommentStringTemp + "\r\n";\r
+      CurrentLine.erase(0, comment_length);\r
+    }\r
+    \r
+  } while (CommentsOn);\r
+\r
+  if (CurrentLine.length() == 0) GetNextConfigLine();\r
+  CurrentIndex = 0;\r
+  return CurrentLine;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+string FGConfigFile::GetValue(string val)\r
+{\r
+  unsigned int pos, p1, p2, ptest;\r
+\r
+  if (val == "") {    // this call is to return the tag value\r
+    pos = CurrentLine.find("<");\r
+    if (pos != CurrentLine.npos) { // beginning brace found "<"\r
+      p1 = CurrentLine.find_first_not_of(" ",pos+1);\r
+      if (p1 != CurrentLine.npos) { // found first character of tag\r
+        p2 = CurrentLine.find_first_of(" >",p1+1);\r
+        if (p2 == CurrentLine.npos) p2 = p1+1;\r
+        return CurrentLine.substr(p1,p2-p1);\r
+      }\r
+    } else {   // beginning brace "<" not found; this is a regular data line\r
+      pos = CurrentLine.find_first_not_of(" ");\r
+      if (pos != CurrentLine.npos) {  // first character in line found\r
+        p2 = CurrentLine.find_first_of(" ",pos+1);\r
+        if (p2 != CurrentLine.npos) {\r
+          return CurrentLine.substr(pos,p2-pos);\r
+        } else {\r
+          return CurrentLine.substr(pos,CurrentLine.length()-pos);\r
+        }\r
+      }\r
+    }\r
+  } else { // return a value for a specific tag\r
+    pos = CurrentLine.find(val);\r
+    if (pos != CurrentLine.npos) {\r
+      pos = CurrentLine.find("=",pos);\r
+      if (pos != CurrentLine.npos) {\r
+        ptest = CurrentLine.find_first_not_of(" ",pos+1);\r
+        if (ptest != CurrentLine.npos) {\r
+          p1 = ptest + 1;\r
+          if (CurrentLine[ptest] == '"') { // quoted\r
+            p2 = CurrentLine.find_first_of("\"",p1);\r
+          } else { // not quoted\r
+            p2 = CurrentLine.find_first_of(" ",p1);\r
+          }\r
+          if (p2 != CurrentLine.npos) {\r
+            return CurrentLine.substr(p1,p2-p1);\r
+          }\r
+        }\r
+      } else {   // "=" not found\r
+        pos = CurrentLine.find(val);\r
+        pos = CurrentLine.find_first_of(" ",pos+1);\r
+        ptest = CurrentLine.find_first_not_of(" ",pos+1);\r
+        if (ptest != CurrentLine.npos) {\r
+          if (CurrentLine[ptest] == '"') { // quoted\r
+            p1 = ptest + 1;\r
+            p2 = CurrentLine.find_first_of("\"",p1);\r
+          } else { // not quoted\r
+            p1 = ptest;\r
+            p2 = CurrentLine.find_first_of(" ",p1);\r
+          }\r
+          if (p2 != CurrentLine.npos) {\r
+            return CurrentLine.substr(p1,p2-p1);\r
+          } else {\r
+            p2 = CurrentLine.length();\r
+            return CurrentLine.substr(p1,p2-p1);\r
+          }\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  return string("");\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+string FGConfigFile::GetValue(void)\r
+{\r
+  return GetValue("");\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+string FGConfigFile::GetLine(void)\r
+{\r
+  string scratch = "";\r
+  int test;\r
+\r
+  while ((test = cfgfile.get()) != EOF) {\r
+    if (test >= 0x20 || test == 0x09) {\r
+      if (test == 0x09) {\r
+        scratch += (char)0x20;\r
+      } else {\r
+        scratch += (char)test;\r
+      }\r
+    } else {\r
+      if ((test = cfgfile.get()) != EOF) { // get *next* character\r
+#if defined ( sgi ) && !defined( __GNUC__ )\r
+        if (test >= 0x20 || test == 0x09) cfgfile.putback(test);\r
+#else\r
+        if (test >= 0x20 || test == 0x09) cfgfile.unget();\r
+#endif\r
+        break;\r
+      }\r
+    }\r
+  }\r
+  if (cfgfile.eof()) return string("EOF");\r
+  return scratch;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+/*\r
+FGConfigFile& FGConfigFile::operator>>(double& val)\r
+{\r
+  unsigned int pos, end;\r
+\r
+  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);\r
+  if (pos == CurrentLine.npos) pos = CurrentLine.length();\r
+  end = CurrentLine.find_first_of(", ",pos+1);\r
+  if (end == CurrentLine.npos) end = CurrentLine.length();\r
+  string str = CurrentLine.substr(pos, end - pos);\r
+  val = strtod(str.c_str(),NULL);\r
+  CurrentIndex = end+1;\r
+  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();\r
+  return *this;\r
+}\r
+*/\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+FGConfigFile& FGConfigFile::operator>>(double& val)\r
+{\r
+  unsigned int pos, end;\r
+\r
+  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);\r
+  if (pos == CurrentLine.npos) pos = CurrentLine.length();\r
+  end = CurrentLine.find_first_of(", ",pos+1);\r
+  if (end == CurrentLine.npos) end = CurrentLine.length();\r
+  string str = CurrentLine.substr(pos, end - pos);\r
+  val = strtod(str.c_str(),NULL);\r
+  CurrentIndex = end+1;\r
+  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();\r
+  return *this;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+FGConfigFile& FGConfigFile::operator>>(int& val)\r
+{\r
+  unsigned int pos, end;\r
+\r
+  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);\r
+  if (pos == CurrentLine.npos) pos = CurrentLine.length();\r
+  end = CurrentLine.find_first_of(", ",pos+1);\r
+  if (end == CurrentLine.npos) end = CurrentLine.length();\r
+  string str = CurrentLine.substr(pos, end - pos);\r
+  val = atoi(str.c_str());\r
+  CurrentIndex = end+1;\r
+  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();\r
+  return *this;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+FGConfigFile& FGConfigFile::operator>>(eParam& val)\r
+{\r
+  unsigned int pos, end;\r
+\r
+  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);\r
+  if (pos == CurrentLine.npos) pos = CurrentLine.length();\r
+  end = CurrentLine.find_first_of(", ",pos+1);\r
+  if (end == CurrentLine.npos) end = CurrentLine.length();\r
+  string str = CurrentLine.substr(pos, end - pos);\r
+  val = (eParam)atoi(str.c_str());\r
+  CurrentIndex = end+1;\r
+  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();\r
+  return *this;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+FGConfigFile& FGConfigFile::operator>>(string& str)\r
+{\r
+  unsigned int pos, end;\r
+\r
+  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);\r
+  if (pos == CurrentLine.npos) pos = CurrentLine.length();\r
+  end = CurrentLine.find_first_of(", ",pos+1);\r
+  if (end == CurrentLine.npos) end = CurrentLine.length();\r
+  str = CurrentLine.substr(pos, end - pos);\r
+  CurrentIndex = end+1;\r
+  if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();\r
+  return *this;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+void FGConfigFile::ResetLineIndexToZero(void)\r
+{\r
+  CurrentIndex = 0;\r
+}\r
+\r
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+\r
+void FGConfigFile::Debug(void)\r
+{\r
+    //TODO: Add your source code here\r
+}\r
+\r
index 12ee643d5dea93e9e4b5f1cea218b1bdfd92f135..258f65cad62d88edfa9728d537aea735baef40c6 100644 (file)
@@ -116,10 +116,11 @@ public:
   string GetNextConfigLine(void);
   string GetValue(string);
   string GetValue(void);
-  string GetCommentString(void);
+  string GetCommentString(void) {return CommentString;}
+  string GetLineComment(void) {return LineComment;}
   bool IsOpen(void) {return Opened;}
+//  FGConfigFile& operator>>(double&);
   FGConfigFile& operator>>(double&);
-  FGConfigFile& operator>>(float&);
   FGConfigFile& operator>>(int&);
   FGConfigFile& operator>>(string&);
   FGConfigFile& operator>>(eParam&);
@@ -129,6 +130,7 @@ private:
   ifstream cfgfile;
   string   CurrentLine;
   string   CommentString;
+  string   LineComment;
   bool     CommentsOn;
   bool     Opened;
   unsigned int      CurrentIndex;
index 28aafbeb823e6ad46343b33350e3ec7f2cf14bd3..6b2329d18c46685d353fc7df3845480b5b60135a 100644 (file)
@@ -102,11 +102,10 @@ FGEngine::~FGEngine()
 // and sets the starved flag if necessary.
 
 void FGEngine::ConsumeFuel(void) {
-  float Fshortage, Oshortage;
+  double Fshortage, Oshortage;
   FGTank* Tank;
 
   if (TrimMode) return;
-
   Fshortage = Oshortage = 0.0;
   for (unsigned int i=0; i<SourceTanks.size(); i++) {
     Tank = Propulsion->GetTank(i);
@@ -123,21 +122,21 @@ void FGEngine::ConsumeFuel(void) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGEngine::CalcFuelNeed(void) {
+double FGEngine::CalcFuelNeed(void) {
   FuelNeed = SLFuelFlowMax*PctPower*State->Getdt()*Propulsion->GetRate();
   return FuelNeed;
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGEngine::CalcOxidizerNeed(void) {
+double 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) {
+void FGEngine::SetPlacement(double x, double y, double z, double pitch, double yaw) {
   X = x;
   Y = y;
   Z = z;
index ff982cacf0be6f385b56c2153fcc6f07b0a0dee4..ce7b960d06083ccd748028cc73a785418c214ac8 100644 (file)
@@ -113,13 +113,13 @@ public:
 
   enum EngineType {etUnknown, etRocket, etPiston, etTurboProp, etTurboJet, etTurboShaft};
 
-  virtual float  GetThrottleMin(void) { return MinThrottle; }
-  virtual float  GetThrottleMax(void) { return MaxThrottle; }
-  float  GetThrottle(void) { return Throttle; }
-  float  GetMixture(void) { return Mixture; }
+  virtual double  GetThrottleMin(void) { return MinThrottle; }
+  virtual double  GetThrottleMax(void) { return MaxThrottle; }
+  double  GetThrottle(void) { return Throttle; }
+  double  GetMixture(void) { return Mixture; }
   int    GetMagnetos(void) { return Magnetos; }
   bool    GetStarter(void) { return Starter; }
-  float  GetThrust(void) { return Thrust; }
+  double  GetThrust(void) { return Thrust; }
   bool   GetStarved(void) { return Starved; }
   bool   GetFlameout(void) { return Flameout; }
   bool   GetRunning(void) { return Running; }
@@ -127,19 +127,19 @@ public:
   int    GetType(void) { return Type; }
   string GetName(void) { return Name; }
 
-  virtual float getManifoldPressure_inHg () const {
+  virtual double getManifoldPressure_inHg () const {
     return ManifoldPressure_inHg;
   }
-  virtual float getExhaustGasTemp_degF () const {
+  virtual double getExhaustGasTemp_degF () const {
     return (ExhaustGasTemp_degK - 273) * (9.0 / 5.0) + 32.0;
   }
-  virtual float getCylinderHeadTemp_degF () const {
+  virtual double getCylinderHeadTemp_degF () const {
     return (CylinderHeadTemp_degK - 273) * (9.0 / 5.0) + 32.0;
   }
-  virtual float getOilPressure_psi () const {
+  virtual double getOilPressure_psi () const {
     return OilPressure_psi;
   }
-  virtual float getOilTemp_degF () const {
+  virtual double getOilTemp_degF () const {
     return (OilTemp_degK - 273.0) * (9.0 / 5.0) + 32.0;
   }
 
@@ -158,7 +158,7 @@ public:
              such as a propeller. This resisting effect must be provided to the 
              engine model.
       @return Thrust in pounds */
-  virtual float Calculate(float PowerRequired) {return 0.0;};
+  virtual double Calculate(double PowerRequired) {return 0.0;};
 
   /** Reduces the fuel in the active tanks by the amount required.
       This function should be called from within the
@@ -171,18 +171,18 @@ public:
       power level. It is also turned from a rate into an actual amount (pounds)
       by multiplying it by the delta T and the rate.
       @return Total fuel requirement for this engine in pounds. */
-  float CalcFuelNeed(void);
+  double CalcFuelNeed(void);
 
   /** The oxidizer need is calculated based on power levels and flow rate for that
       power level. It is also turned from a rate into an actual amount (pounds)
       by multiplying it by the delta T and the rate.
       @return Total oxidizer requirement for this engine in pounds. */
-  float CalcOxidizerNeed(void);
+  double CalcOxidizerNeed(void);
 
   /// Sets engine placement information
-  void SetPlacement(float x, float y, float z, float pitch, float yaw);
+  void SetPlacement(double x, double y, double z, double pitch, double yaw);
 
-  virtual float GetPowerAvailable(void) {return 0.0;};
+  virtual double GetPowerAvailable(void) {return 0.0;};
 
   bool GetTrimMode(void) {return TrimMode;}
   void SetTrimMode(bool state) {TrimMode = state;}
@@ -190,33 +190,33 @@ public:
 protected:
   string Name;
   EngineType Type;
-  float X, Y, Z;
-  float EnginePitch;
-  float EngineYaw;
-  float SLFuelFlowMax;
-  float SLOxiFlowMax;
-  float MaxThrottle;
-  float MinThrottle;
-
-  float Thrust;
-  float Throttle;
-  float Mixture;
+  double X, Y, Z;
+  double EnginePitch;
+  double EngineYaw;
+  double SLFuelFlowMax;
+  double SLOxiFlowMax;
+  double MaxThrottle;
+  double MinThrottle;
+
+  double Thrust;
+  double Throttle;
+  double Mixture;
   int   Magnetos;
   bool  Starter;
-  float FuelNeed, OxidizerNeed;
+  double FuelNeed, OxidizerNeed;
   bool  Starved;
   bool  Flameout;
   bool  Running;
   bool  Cranking;
-  float PctPower;
+  double PctPower;
   int   EngineNumber;
   bool  TrimMode;
 
-  float ManifoldPressure_inHg;
-  float ExhaustGasTemp_degK;
-  float CylinderHeadTemp_degK;
-  float OilPressure_psi;
-  float OilTemp_degK;
+  double ManifoldPressure_inHg;
+  double ExhaustGasTemp_degK;
+  double CylinderHeadTemp_degK;
+  double OilPressure_psi;
+  double OilTemp_degK;
 
   FGFDMExec*      FDMExec;
   FGState*        State;
index d84d17e182e8f3aaea3fa641f669315925ac78ab..4ea36fefb3c5262f5ea90b6b91592bd03d84b6eb 100644 (file)
@@ -107,13 +107,13 @@ bool FGFCS::Run(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGFCS::SetThrottleCmd(int engineNum, float setting)
+void FGFCS::SetThrottleCmd(int engineNum, double setting)
 {
   unsigned int ctr;
 
-  if ((int)ThrottleCmd.size() > engineNum) {
+  if (engineNum < (int)ThrottlePos.size()) {
     if (engineNum < 0) {
-      for (ctr=0;ctr<=ThrottleCmd.size();ctr++) ThrottleCmd[ctr] = setting;
+      for (ctr=0;ctr<ThrottleCmd.size();ctr++) ThrottleCmd[ctr] = setting;
     } else {
       ThrottleCmd[engineNum] = setting;
     }
@@ -126,13 +126,13 @@ void FGFCS::SetThrottleCmd(int engineNum, float setting)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGFCS::SetThrottlePos(int engineNum, float setting)
+void FGFCS::SetThrottlePos(int engineNum, double setting)
 {
   unsigned int ctr;
 
-  if ((int)ThrottlePos.size() > engineNum) {
+  if (engineNum < (int)ThrottlePos.size()) {
     if (engineNum < 0) {
-      for (ctr=0;ctr<=ThrottlePos.size();ctr++) ThrottlePos[ctr] = setting;
+      for (ctr=0;ctr<ThrottlePos.size();ctr++) ThrottlePos[ctr] = setting;
     } else {
       ThrottlePos[engineNum] = setting;
     }
@@ -145,9 +145,9 @@ void FGFCS::SetThrottlePos(int engineNum, float setting)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGFCS::GetThrottleCmd(int engineNum)
+double FGFCS::GetThrottleCmd(int engineNum)
 {
-  if ((int)ThrottleCmd.size() > engineNum) {
+  if (engineNum < (int)ThrottlePos.size()) {
     if (engineNum < 0) {
        cerr << "Cannot get throttle value for ALL engines" << endl;
     } else {
@@ -162,9 +162,9 @@ float FGFCS::GetThrottleCmd(int engineNum)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGFCS::GetThrottlePos(int engineNum)
+double FGFCS::GetThrottlePos(int engineNum)
 {
-  if ((int)ThrottlePos.size() > engineNum) {
+  if (engineNum < (int)ThrottlePos.size()) {
     if (engineNum < 0) {
        cerr << "Cannot get throttle value for ALL engines" << endl;
     } else {
@@ -179,27 +179,31 @@ float FGFCS::GetThrottlePos(int engineNum)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGFCS::SetMixtureCmd(int engineNum, float setting)
+void FGFCS::SetMixtureCmd(int engineNum, double setting)
 {
   unsigned int ctr;
 
-  if (engineNum < 0) {
-    for (ctr=0;ctr<MixtureCmd.size();ctr++) MixtureCmd[ctr] = setting;
-  } else {
-    MixtureCmd[engineNum] = setting;
+  if (engineNum < (int)ThrottlePos.size()) {
+    if (engineNum < 0) {
+      for (ctr=0;ctr<MixtureCmd.size();ctr++) MixtureCmd[ctr] = setting;
+    } else {
+      MixtureCmd[engineNum] = setting;
+    }
   }
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGFCS::SetMixturePos(int engineNum, float setting)
+void FGFCS::SetMixturePos(int engineNum, double setting)
 {
   unsigned int ctr;
 
-  if (engineNum < 0) {
-    for (ctr=0;ctr<=MixtureCmd.size();ctr++) MixturePos[ctr] = MixtureCmd[ctr];
-  } else {
-    MixturePos[engineNum] = setting;
+  if (engineNum < (int)ThrottlePos.size()) {
+    if (engineNum < 0) {
+      for (ctr=0;ctr<=MixtureCmd.size();ctr++) MixturePos[ctr] = MixtureCmd[ctr];
+    } else {
+      MixturePos[engineNum] = setting;
+    }
   }
 }
 
@@ -212,7 +216,7 @@ bool FGFCS::Load(FGConfigFile* AC_cfg)
   Name = Name + ":" + AC_cfg->GetValue("NAME");
   if (debug_lvl > 0) cout << "    Control System Name: " << Name << endl;
   AC_cfg->GetNextConfigLine();
-  while ((token = AC_cfg->GetValue()) != "/FLIGHT_CONTROL") {
+  while ((token = AC_cfg->GetValue()) != string("/FLIGHT_CONTROL")) {
     if (token == "COMPONENT") {
       token = AC_cfg->GetValue("TYPE");
       if (debug_lvl > 0) cout << "    Loading Component \""
@@ -252,7 +256,7 @@ bool FGFCS::Load(FGConfigFile* AC_cfg)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGFCS::GetComponentOutput(eParam idx) {
+double FGFCS::GetComponentOutput(eParam idx) {
   return Components[idx]->GetOutput();
 }
 
@@ -264,7 +268,7 @@ string FGFCS::GetComponentName(int idx) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGFCS::GetBrake(FGLGear::BrakeGroup bg) {
+double FGFCS::GetBrake(FGLGear::BrakeGroup bg) {
   switch (bg) {
   case FGLGear::bgLeft:
     return LeftBrake;
index 20fb0fa20452d007e44a024259f4610673435ffa..915e412d958a7d9de0edcdbfe64400a1616346e4 100644 (file)
@@ -171,78 +171,78 @@ public:
   //@{
   /** Gets the aileron command.
       @return aileron command in radians */
-  inline float GetDaCmd(void) { return DaCmd; }
+  inline double GetDaCmd(void) { return DaCmd; }
 
   /** Gets the elevator command.
       @return elevator command in radians */
-  inline float GetDeCmd(void) { return DeCmd; }
+  inline double GetDeCmd(void) { return DeCmd; }
 
   /** Gets the rudder command.
       @return rudder command in radians */
-  inline float GetDrCmd(void) { return DrCmd; }
+  inline double GetDrCmd(void) { return DrCmd; }
 
   /** Gets the flaps command.
       @return flaps command in radians */
-  inline float GetDfCmd(void) { return DfCmd; }
+  inline double GetDfCmd(void) { return DfCmd; }
 
   /** Gets the speedbrake command.
       @return speedbrake command in radians */
-  inline float GetDsbCmd(void) { return DsbCmd; }
+  inline double GetDsbCmd(void) { return DsbCmd; }
 
   /** Gets the spoiler command.
       @return spoiler command in radians */
-  inline float GetDspCmd(void) { return DspCmd; }
+  inline double GetDspCmd(void) { return DspCmd; }
 
   /** Gets the throttle command.
       @param engine engine ID number
       @return throttle command in percent ( 0 - 100) for the given engine */
-  float GetThrottleCmd(int engine);
+  double GetThrottleCmd(int engine);
 
   /** Gets the mixture command.
       @param engine engine ID number
       @return mixture command in percent ( 0 - 100) for the given engine */
-  inline float GetMixtureCmd(int engine) { return MixtureCmd[engine]; }
+  inline double GetMixtureCmd(int engine) { return MixtureCmd[engine]; }
 
   /** Gets the pitch trim command.
       @return pitch trim command in radians */
-  inline float GetPitchTrimCmd(void) { return PTrimCmd; }
+  inline double GetPitchTrimCmd(void) { return PTrimCmd; }
   //@}
 
   /// @name Aerosurface position retrieval
   //@{
   /** Gets the aileron position.
       @return aileron position in radians */
-  inline float GetDaPos(void) { return DaPos; }
+  inline double GetDaPos(void) { return DaPos; }
 
   /** Gets the elevator position.
       @return elevator position in radians */
-  inline float GetDePos(void) { return DePos; }
+  inline double GetDePos(void) { return DePos; }
 
   /** Gets the rudder position.
       @return rudder position in radians */
-  inline float GetDrPos(void) { return DrPos; }
+  inline double GetDrPos(void) { return DrPos; }
 
   /** Gets the flaps position.
       @return flaps position in radians */
-  inline float GetDfPos(void) { return DfPos; }
+  inline double GetDfPos(void) { return DfPos; }
 
   /** Gets the speedbrake position.
       @return speedbrake position in radians */
-  inline float GetDsbPos(void) { return DsbPos; }
+  inline double GetDsbPos(void) { return DsbPos; }
 
   /** Gets the spoiler position.
       @return spoiler position in radians */
-  inline float GetDspPos(void) { return DspPos; }
+  inline double GetDspPos(void) { return DspPos; }
 
   /** Gets the throttle position.
       @param engine engine ID number
       @return throttle position for the given engine in percent ( 0 - 100)*/
-  float GetThrottlePos(int engine);
+  double GetThrottlePos(int engine);
 
   /** Gets the mixture position.
       @param engine engine ID number
       @return mixture position for the given engine in percent ( 0 - 100)*/
-  inline float GetMixturePos(int engine) { return MixturePos[engine]; }
+  inline double GetMixturePos(int engine) { return MixturePos[engine]; }
   //@}
 
   /** Retrieves the State object pointer.
@@ -253,7 +253,7 @@ public:
   /** Retrieves a components output value
       @param idx the index of the component (the component ID)
       @return output value from the component */
-  float GetComponentOutput(eParam idx);
+  double GetComponentOutput(eParam idx);
 
   /** Retrieves the component name
       @param idx the index of the component (the component ID)
@@ -270,98 +270,98 @@ public:
   //@{
   /** Sets the aileron command
       @param cmd aileron command in radians*/
-  inline void SetDaCmd(float cmd) { DaCmd = cmd; }
+  inline void SetDaCmd(double cmd) { DaCmd = cmd; }
 
   /** Sets the elevator command
       @param cmd elevator command in radians*/
-  inline void SetDeCmd(float cmd) { DeCmd = cmd; }
+  inline void SetDeCmd(double cmd) { DeCmd = cmd; }
 
   /** Sets the rudder command
       @param cmd rudder command in radians*/
-  inline void SetDrCmd(float cmd) { DrCmd = cmd; }
+  inline void SetDrCmd(double cmd) { DrCmd = cmd; }
 
   /** Sets the flaps command
       @param cmd flaps command in radians*/
-  inline void SetDfCmd(float cmd) { DfCmd = cmd; }
+  inline void SetDfCmd(double cmd) { DfCmd = cmd; }
 
   /** Sets the speedbrake command
       @param cmd speedbrake command in radians*/
-  inline void SetDsbCmd(float cmd) { DsbCmd = cmd; }
+  inline void SetDsbCmd(double cmd) { DsbCmd = cmd; }
 
   /** Sets the spoilers command
       @param cmd spoilers command in radians*/
-  inline void SetDspCmd(float cmd) { DspCmd = cmd; }
+  inline void SetDspCmd(double cmd) { DspCmd = cmd; }
 
   /** Sets the pitch trim command
       @param cmd pitch trim command in radians*/
-  inline void SetPitchTrimCmd(float cmd) { PTrimCmd = cmd; }
+  inline void SetPitchTrimCmd(double cmd) { PTrimCmd = cmd; }
 
   /** Sets the throttle command for the specified engine
       @param engine engine ID number
       @param cmd throttle command in percent (0 - 100)*/
-  void SetThrottleCmd(int engine, float cmd);
+  void SetThrottleCmd(int engine, double cmd);
 
   /** Sets the mixture command for the specified engine
       @param engine engine ID number
       @param cmd mixture command in percent (0 - 100)*/
-  void SetMixtureCmd(int engine, float cmd);
+  void SetMixtureCmd(int engine, double cmd);
   //@}
 
   /// @name Aerosurface position setting
   //@{
   /** Sets the aileron position
       @param cmd aileron position in radians*/
-  inline void SetDaPos(float cmd) { DaPos = cmd; }
+  inline void SetDaPos(double cmd) { DaPos = cmd; }
 
   /** Sets the elevator position
       @param cmd elevator position in radians*/
-  inline void SetDePos(float cmd) { DePos = cmd; }
+  inline void SetDePos(double cmd) { DePos = cmd; }
 
   /** Sets the rudder position
       @param cmd rudder position in radians*/
-  inline void SetDrPos(float cmd) { DrPos = cmd; }
+  inline void SetDrPos(double cmd) { DrPos = cmd; }
 
   /** Sets the flaps position
       @param cmd flaps position in radians*/
-  inline void SetDfPos(float cmd) { DfPos = cmd; }
+  inline void SetDfPos(double cmd) { DfPos = cmd; }
 
   /** Sets the speedbrake position
       @param cmd speedbrake position in radians*/
-  inline void SetDsbPos(float cmd) { DsbPos = cmd; }
+  inline void SetDsbPos(double cmd) { DsbPos = cmd; }
 
   /** Sets the spoiler position
       @param cmd spoiler position in radians*/
-  inline void SetDspPos(float cmd) { DspPos = cmd; }
+  inline void SetDspPos(double cmd) { DspPos = cmd; }
 
   /** Sets the actual throttle setting for the specified engine
       @param engine engine ID number
       @param cmd throttle setting in percent (0 - 100)*/
-  void SetThrottlePos(int engine, float cmd);
+  void SetThrottlePos(int engine, double cmd);
 
   /** Sets the actual mixture setting for the specified engine
       @param engine engine ID number
       @param cmd mixture setting in percent (0 - 100)*/
-  void SetMixturePos(int engine, float cmd);
+  void SetMixturePos(int engine, double cmd);
   //@}
 
   /// @name Landing Gear brakes
   //@{
   /** Sets the left brake group
       @param cmd brake setting in percent (0.0 - 1.0) */
-  void SetLBrake(float cmd) {LeftBrake = cmd;}
+  void SetLBrake(double cmd) {LeftBrake = cmd;}
 
   /** Sets the right brake group
       @param cmd brake setting in percent (0.0 - 1.0) */
-  void SetRBrake(float cmd) {RightBrake = cmd;}
+  void SetRBrake(double cmd) {RightBrake = cmd;}
 
   /** Sets the center brake group
       @param cmd brake setting in percent (0.0 - 1.0) */
-  void SetCBrake(float cmd) {CenterBrake = cmd;}
+  void SetCBrake(double cmd) {CenterBrake = cmd;}
 
   /** Gets the brake for a specified group.
       @param bg which brakegroup to retrieve the command for
       @return the brake setting for the supplied brake group argument */
-  float GetBrake(FGLGear::BrakeGroup bg);
+  double GetBrake(FGLGear::BrakeGroup bg);
   //@}
 
   /** Loads the Flight Control System.
@@ -375,14 +375,14 @@ public:
   void AddThrottle(void);
 
 private:
-  float DaCmd, DeCmd, DrCmd, DfCmd, DsbCmd, DspCmd;
-  float DaPos, DePos, DrPos, DfPos, DsbPos, DspPos;
-  float PTrimCmd;
-  vector <float> ThrottleCmd;
-  vector <float> ThrottlePos;
-  vector <float> MixtureCmd;
-  vector <float> MixturePos;
-  float LeftBrake, RightBrake, CenterBrake; // Brake settings
+  double DaCmd, DeCmd, DrCmd, DfCmd, DsbCmd, DspCmd;
+  double DaPos, DePos, DrPos, DfPos, DsbPos, DspPos;
+  double PTrimCmd;
+  vector <double> ThrottleCmd;
+  vector <double> ThrottlePos;
+  vector <double> MixtureCmd;
+  vector <double> MixturePos;
+  double LeftBrake, RightBrake, CenterBrake; // Brake settings
 
   vector <FGFCSComponent*> Components;
   void Debug(void);
index ac7ed2f51708728cb18a4c964ef59a0588dfdebb..f6e10e0ff2a4f75b8e31e74482ca8e6816394faa 100644 (file)
@@ -320,6 +320,7 @@ int FGFDMExec::Schedule(FGModel* model, int rate)
     model_iterator->NextModel->SetRate(rate);
 
   }
+  
   return 0;
 }
 
@@ -413,7 +414,7 @@ bool FGFDMExec::LoadScript(string script)
   string aircraft="";
   string initialize="";
   bool result=false;
-  float dt=0.0;
+  double dt=0.0;
   int i;
   struct condition *newCondition;
 
@@ -424,13 +425,13 @@ bool FGFDMExec::LoadScript(string script)
   Scripted = true;
   if (debug_lvl > 0) cout << "Reading Script File " << ScriptName << endl;
 
-  while (Script.GetNextConfigLine() != "EOF" && Script.GetValue() != "/runscript") {
+  while (Script.GetNextConfigLine() != string("EOF") && Script.GetValue() != string("/runscript")) {
     token = Script.GetValue();
     if (token == "use") {
-      if ((token = Script.GetValue("aircraft")) != "") {
+      if ((token = Script.GetValue("aircraft")) != string("")) {
         aircraft = token;
         if (debug_lvl > 0) cout << "  Use aircraft: " << token << endl;
-      } else if ((token = Script.GetValue("initialize")) != "") {
+      } else if ((token = Script.GetValue("initialize")) != string("")) {
         initialize = token;
         if (debug_lvl > 0) cout << "  Use reset file: " << token << endl;
       } else {
@@ -444,13 +445,13 @@ bool FGFDMExec::LoadScript(string script)
       State->Setdt(dt);
       Script.GetNextConfigLine();
       token = Script.GetValue();
-      while (token != "/run") {
+      while (token != string("/run")) {
 
         if (token == "when") {
           Script.GetNextConfigLine();
           token = Script.GetValue();
           newCondition = new struct condition();
-          while (token != "/when") {
+          while (token != string("/when")) {
             if (token == "parameter") {
               newCondition->TestParam.push_back(State->GetParameterIndex(Script.GetValue("name")));
               newCondition->TestValue.push_back(strtod(Script.GetValue("value").c_str(), NULL));
@@ -599,8 +600,8 @@ void FGFDMExec::RunScript(void)
 
   int count=0;
 
-  float currentTime = State->Getsim_time();
-  float newSetValue;
+  double currentTime = State->Getsim_time();
+  double newSetValue;
 
   while (iC < Conditions.end()) {
     // determine whether the set of conditional tests for this condition equate
@@ -668,6 +669,9 @@ void FGFDMExec::RunScript(void)
           break;
         }
         State->SetParameter(iC->SetParam[i], newSetValue);
+        if ((unsigned long int)Propulsion->GetTank(0) == 0) {
+          cout << "Param # getting set: " << iC->SetParam[i] << " Value: " << newSetValue << endl;
+        }
       }
     }
     iC++;
index 14062a636c36d3b9cb796bc47b81c91a332cdbaf..3125e7936f270b9e37f4cf06ff1afd844737e6fe 100644 (file)
@@ -294,18 +294,18 @@ private:
   struct condition {
     vector <eParam>  TestParam;
     vector <eParam>  SetParam;
-    vector <float>   TestValue;
-    vector <float>   SetValue;
+    vector <double>   TestValue;
+    vector <double>   SetValue;
     vector <string>  Comparison;
-    vector <float>   TC;
+    vector <double>   TC;
     vector <bool>    Persistent;
     vector <eAction> Action;
     vector <eType>   Type;
     vector <bool>    Triggered;
-    vector <float>   newValue;
-    vector <float>   OriginalValue;
-    vector <float>   StartTime;
-    vector <float>   EndTime;
+    vector <double>   newValue;
+    vector <double>   OriginalValue;
+    vector <double>   StartTime;
+    vector <double>   EndTime;
 
     condition() {
     }
@@ -326,8 +326,8 @@ private:
   string EnginePath;
   string ScriptPath;
   string ScriptName;
-  float  StartTime;
-  float  EndTime;
+  double  StartTime;
+  double  EndTime;
   vector <struct condition> Conditions;
 
   FGState*           State;
index 3d010a11351bae85a98055a0a875aa8a030ef455..aee046833a46bf9e78add1c57a4b4b45c8f0fbf5 100644 (file)
@@ -99,7 +99,7 @@ bool FGFactorGroup::Load(FGConfigFile *AC_cfg) {
       //if (debug_lvl > 0) DisplayCoeffFactors(ca.back()->Getmultipliers());
     } 
     token = AC_cfg->GetValue();  
-    while ( token != "/GROUP" ) {
+    while ( token != string("/GROUP") ) {
           sum.push_back( new FGCoefficient(FDMExec) );
           sum.back()->Load(AC_cfg);
           //if (debug_lvl > 0) DisplayCoeffFactors(ca.back()->Getmultipliers());
@@ -114,9 +114,9 @@ bool FGFactorGroup::Load(FGConfigFile *AC_cfg) {
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-float FGFactorGroup::TotalValue(void) {
+double FGFactorGroup::TotalValue(void) {
   int i;
-  float totalsum=0;
+  double totalsum=0;
   SDtotal=0.0;
   for(i=0;i<sum.size();i++) {
      totalsum+=sum[i]->TotalValue();
index bb2f8a58974908806d60e593d7db724828f6fba1..2a2b418aab272504d6ccd46395f50869906c12b9 100644 (file)
@@ -98,11 +98,11 @@ class FGFactorGroup: public FGCoefficient {
     ~FGFactorGroup();
     
     bool Load(FGConfigFile *AC_cfg);
-    float TotalValue(void);
+    double TotalValue(void);
     //string GetCoefficientStrings(void);
     //string GetCoefficientValues(void);
-    inline float GetSD(void) { return SDtotal; }
-    inline float GetFactorSD(void) { return FGCoefficient::GetSD(); }
+    inline double GetSD(void) { return SDtotal; }
+    inline double GetFactorSD(void) { return FGCoefficient::GetSD(); }
     
   private:
     FGFDMExec *FDMExec;
@@ -110,7 +110,7 @@ class FGFactorGroup: public FGCoefficient {
     string description;
     typedef vector<FGCoefficient*> CoeffArray;
     CoeffArray sum;
-    float SDtotal;
+    double SDtotal;
     void Debug(void);
 };
     
index 105a31d42c58f5a2acd4c5c7dc83e510664e932b..daa63f4235a66f6b20b30c1448ecc1f4a69e1367 100644 (file)
@@ -102,7 +102,7 @@ FGColumnVector3& FGForce::GetBodyForces(void) {
 FGMatrix33 FGForce::Transform(void) {
   switch(ttype) {
   case tWindBody:
-    return fdmex->GetState()->GetTs2b(fdmex->GetTranslation()->Getalpha(),fdmex->GetTranslation()->Getbeta());
+    return fdmex->GetState()->GetTs2b();
   case tLocalBody:
     return fdmex->GetState()->GetTl2b();
   case tCustom:
@@ -117,10 +117,10 @@ FGMatrix33 FGForce::Transform(void) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGForce::SetAnglesToBody(float broll, float bpitch, float byaw) {
+void FGForce::SetAnglesToBody(double broll, double bpitch, double byaw) {
 
   if(ttype == tCustom) {
-    float cp,sp,cr,sr,cy,sy;
+    double cp,sp,cr,sr,cy,sy;
 
     cp=cos(bpitch); sp=sin(bpitch);
     cr=cos(broll);  sr=sin(broll);
index c64d931491a5a43eec46a974c725e1fc3d2884bc..e2f0e1e7340b8489a2858cbec183a3b6caef403b 100644 (file)
@@ -138,7 +138,7 @@ vector vFs and need to be passed to FGForce:</p>
 
 <p>Note that storing the native forces and moments outside of this class is not
 strictly necessary, overloaded SetNativeForces() and SetNativeMoments() methods
-which each accept three floats (rather than a vector) are provided and can be
+which each accept three doubles (rather than a vector) are provided and can be
 repeatedly called without incurring undue overhead. The body axes force vector
 can now be retrieved by calling:</p>
 
@@ -227,14 +227,14 @@ public:
 
   enum TransformType { tNone, tWindBody, tLocalBody, tCustom } ttype;
 
-  inline void SetNativeForces(float Fnx, float Fny, float Fnz) {
+  inline void SetNativeForces(double Fnx, double Fny, double Fnz) {
     vFn(1)=Fnx;
     vFn(2)=Fny;
     vFn(3)=Fnz;
   }
   inline void SetNativeForces(FGColumnVector3 vv) { vFn = vv; };
 
-  inline void SetNativeMoments(float Ln,float Mn, float Nn) {
+  inline void SetNativeMoments(double Ln,double Mn, double Nn) {
     vMn(1)=Ln;
     vMn(2)=Mn;
     vMn(3)=Nn;
@@ -251,14 +251,14 @@ public:
 
   //point of application, JSBsim structural coords
   //(inches, x +back, y +right, z +up)
-  inline void SetLocation(float x, float y, float z) {
+  inline void SetLocation(double x, double y, double z) {
     vXYZn(1) = x;
     vXYZn(2) = y;
     vXYZn(3) = z;
   }
-  inline void SetLocationX(float x) {vXYZn(1) = x;}
-  inline void SetLocationY(float y) {vXYZn(2) = y;}
-  inline void SetLocationZ(float z) {vXYZn(3) = z;}
+  inline void SetLocationX(double x) {vXYZn(1) = x;}
+  inline void SetLocationY(double y) {vXYZn(2) = y;}
+  inline void SetLocationZ(double z) {vXYZn(3) = z;}
   inline void SetLocation(FGColumnVector3 vv) { vXYZn = vv; }
   FGColumnVector3& GetLocation(void) { return vXYZn; }
 
@@ -269,10 +269,10 @@ public:
   //are going to get confused.
   //They are in radians.
 
-  void SetAnglesToBody(float broll, float bpitch, float byaw);
+  void SetAnglesToBody(double broll, double bpitch, double byaw);
   inline void  SetAnglesToBody(FGColumnVector3 vv) { SetAnglesToBody(vv(1), vv(2), vv(3));}
 
-  inline void SetSense(float x, float y, float z) { vSense(1)=x, vSense(2)=y, vSense(3)=z; }
+  inline void SetSense(double x, double y, double z) { vSense(1)=x, vSense(2)=y, vSense(3)=z; }
   inline void SetSense(FGColumnVector3 vv) { vSense=vv; }
 
   inline FGColumnVector3& GetSense(void) { return vSense; }
index 06983a02cf71e7867afac4fe0aba65a155f1c0bb..11a447d3a3110bcb8267d4c39988ded74267cb64 100644 (file)
@@ -61,8 +61,8 @@ FGGroundReactions::FGGroundReactions(FGFDMExec* fgex) : FGModel(fgex),
 
 bool FGGroundReactions::Run(void)
 {
-  float steerAngle = 0.0;
-  float xForces = 0.0, yForces = 0.0;
+  double steerAngle = 0.0;
+  double xForces = 0.0, yForces = 0.0;
 
   if (!FGModel::Run()) {
     vForces.InitMatrix();
@@ -147,7 +147,7 @@ bool FGGroundReactions::Load(FGConfigFile* AC_cfg)
 
   AC_cfg->GetNextConfigLine();
 
-  while ((token = AC_cfg->GetValue()) != "/UNDERCARRIAGE") {
+  while ((token = AC_cfg->GetValue()) != string("/UNDERCARRIAGE")) {
     lGear.push_back(FGLGear(AC_cfg, FDMExec));
   }
 
index 0a52d5af4a53223826373d9c3b14825567d1d115..c7c60c542af26243dfec9c1f773163440f639d9d 100644 (file)
@@ -78,7 +78,7 @@ FGInertial::~FGInertial(void)
 
 bool FGInertial::Run(void)
 {
-  float stht, ctht, sphi, cphi;
+  double stht, ctht, sphi, cphi;
 
   if (!FGModel::Run()) {
 
index b4aa56a3463c7382b7e9e0db6d39d697c1d0641b..6c0031b966dc37b0a4a00aacc9f96070ba2d55e6 100644 (file)
@@ -75,7 +75,7 @@ public:
   bool Run(void);
   FGColumnVector3& GetForces(void) {return vForces;}
   FGColumnVector3& GetGravity(void) {return vGravity;}
-  float GetForces(int n) {return vForces(n);}
+  double GetForces(int n) {return vForces(n);}
   bool LoadInertial(FGConfigFile* AC_cfg);
   double SLgravity(void) {return gAccelReference;}
   double gravity(void) {return gAccel;}
index 06c0259e4d949e8fd06c53aed03e22b81bfde189..31be45a1ebdcf0b573aa852b526de1fe542f9f1a 100644 (file)
@@ -103,7 +103,7 @@ FGInitialCondition::~FGInitialCondition()
 
 //******************************************************************************
 
-void FGInitialCondition::SetVcalibratedKtsIC(float tt) {
+void FGInitialCondition::SetVcalibratedKtsIC(double tt) {
 
   if(getMachFromVcas(&mach,tt*ktstofps)) {
     //cout << "Mach: " << mach << endl;
@@ -121,7 +121,7 @@ void FGInitialCondition::SetVcalibratedKtsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetVequivalentKtsIC(float tt) {
+void FGInitialCondition::SetVequivalentKtsIC(double tt) {
   ve=tt*ktstofps;
   lastSpeedSet=setve;
   vt=ve*1/sqrt(fdmex->GetAtmosphere()->GetDensityRatio());
@@ -131,9 +131,9 @@ void FGInitialCondition::SetVequivalentKtsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetVgroundFpsIC(float tt) {
-  float ua,va,wa;
-  float vxz;
+void FGInitialCondition::SetVgroundFpsIC(double tt) {
+  double ua,va,wa;
+  double vxz;
 
   vg=tt;
   lastSpeedSet=setvg;
@@ -152,7 +152,7 @@ void FGInitialCondition::SetVgroundFpsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetVtrueFpsIC(float tt) {
+void FGInitialCondition::SetVtrueFpsIC(double tt) {
   vt=tt;
   lastSpeedSet=setvt;
   mach=vt/fdmex->GetAtmosphere()->GetSoundSpeed();
@@ -162,7 +162,7 @@ void FGInitialCondition::SetVtrueFpsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetMachIC(float tt) {
+void FGInitialCondition::SetMachIC(double tt) {
   mach=tt;
   lastSpeedSet=setmach;
   vt=mach*fdmex->GetAtmosphere()->GetSoundSpeed();
@@ -173,13 +173,13 @@ void FGInitialCondition::SetMachIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetClimbRateFpmIC(float tt) {
+void FGInitialCondition::SetClimbRateFpmIC(double tt) {
   SetClimbRateFpsIC(tt/60.0);
 }
 
 //******************************************************************************
 
-void FGInitialCondition::SetClimbRateFpsIC(float tt) {
+void FGInitialCondition::SetClimbRateFpsIC(double tt) {
 
   if(vt > 0.1) {
     hdot=tt;
@@ -190,7 +190,7 @@ void FGInitialCondition::SetClimbRateFpsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetFlightPathAngleRadIC(float tt) {
+void FGInitialCondition::SetFlightPathAngleRadIC(double tt) {
   gamma=tt;
   sgamma=sin(gamma); cgamma=cos(gamma);
   getTheta();
@@ -199,7 +199,7 @@ void FGInitialCondition::SetFlightPathAngleRadIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetAlphaRadIC(float tt) {
+void FGInitialCondition::SetAlphaRadIC(double tt) {
   alpha=tt;
   salpha=sin(alpha); calpha=cos(alpha);
   getTheta();
@@ -207,7 +207,7 @@ void FGInitialCondition::SetAlphaRadIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetPitchAngleRadIC(float tt) {
+void FGInitialCondition::SetPitchAngleRadIC(double tt) {
   theta=tt;
   stheta=sin(theta); ctheta=cos(theta);
   getAlpha();
@@ -215,7 +215,7 @@ void FGInitialCondition::SetPitchAngleRadIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetBetaRadIC(float tt) {
+void FGInitialCondition::SetBetaRadIC(double tt) {
   beta=tt;
   sbeta=sin(beta); cbeta=cos(beta);
   getTheta();
@@ -224,7 +224,7 @@ void FGInitialCondition::SetBetaRadIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetRollAngleRadIC(float tt) {
+void FGInitialCondition::SetRollAngleRadIC(double tt) {
   phi=tt;
   sphi=sin(phi); cphi=cos(phi);
   getTheta();
@@ -232,7 +232,7 @@ void FGInitialCondition::SetRollAngleRadIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetTrueHeadingRadIC(float tt) {
+void FGInitialCondition::SetTrueHeadingRadIC(double tt) {
     psi=tt;
     spsi=sin(psi); cpsi=cos(psi);
     calcWindUVW();
@@ -240,7 +240,7 @@ void FGInitialCondition::SetTrueHeadingRadIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetUBodyFpsIC(float tt) {
+void FGInitialCondition::SetUBodyFpsIC(double tt) {
   u=tt;
   vt=sqrt(u*u + v*v + w*w);
   lastSpeedSet=setuvw;
@@ -248,7 +248,7 @@ void FGInitialCondition::SetUBodyFpsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetVBodyFpsIC(float tt) {
+void FGInitialCondition::SetVBodyFpsIC(double tt) {
   v=tt;
   vt=sqrt(u*u + v*v + w*w);
   lastSpeedSet=setuvw;
@@ -256,7 +256,7 @@ void FGInitialCondition::SetVBodyFpsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetWBodyFpsIC(float tt) {
+void FGInitialCondition::SetWBodyFpsIC(double tt) {
   w=tt;
   vt=sqrt( u*u + v*v + w*w );
   lastSpeedSet=setuvw;
@@ -264,7 +264,7 @@ void FGInitialCondition::SetWBodyFpsIC(float tt) {
 
 //******************************************************************************
 
-float FGInitialCondition::GetUBodyFpsIC(void) {
+double FGInitialCondition::GetUBodyFpsIC(void) {
     if(lastSpeedSet == setvg )
       return u;
     else
@@ -273,7 +273,7 @@ float FGInitialCondition::GetUBodyFpsIC(void) {
 
 //******************************************************************************
 
-float FGInitialCondition::GetVBodyFpsIC(void) {
+double FGInitialCondition::GetVBodyFpsIC(void) {
     if( lastSpeedSet == setvg )
       return v;
     else {
@@ -283,7 +283,7 @@ float FGInitialCondition::GetVBodyFpsIC(void) {
 
 //******************************************************************************
 
-float FGInitialCondition::GetWBodyFpsIC(void) {
+double FGInitialCondition::GetWBodyFpsIC(void) {
     if( lastSpeedSet == setvg )
       return w;
     else 
@@ -292,7 +292,7 @@ float FGInitialCondition::GetWBodyFpsIC(void) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetWindNEDFpsIC(float wN, float wE, float wD ) {
+void FGInitialCondition::SetWindNEDFpsIC(double wN, double wE, double wD ) {
   wnorth = wN; weast = wE; wdown = wD;
   lastWindSet = setwned;
   calcWindUVW();
@@ -303,7 +303,7 @@ void FGInitialCondition::SetWindNEDFpsIC(float wN, float wE, float wD ) {
 //******************************************************************************
 
 // positive from left
-void FGInitialCondition::SetHeadWindKtsIC(float head){ 
+void FGInitialCondition::SetHeadWindKtsIC(double head){ 
     whead=head*ktstofps;
     lastWindSet=setwhc; 
     calcWindUVW();
@@ -314,7 +314,7 @@ void FGInitialCondition::SetHeadWindKtsIC(float head){
 
 //******************************************************************************
 
-void FGInitialCondition::SetCrossWindKtsIC(float cross){ 
+void FGInitialCondition::SetCrossWindKtsIC(double cross){ 
     wcross=cross*ktstofps; 
     lastWindSet=setwhc; 
     calcWindUVW();
@@ -325,7 +325,7 @@ void FGInitialCondition::SetCrossWindKtsIC(float cross){
 
 //******************************************************************************
 
-void FGInitialCondition::SetWindDownKtsIC(float wD) { 
+void FGInitialCondition::SetWindDownKtsIC(double wD) { 
     wdown=wD; 
     calcWindUVW();
     if(lastSpeedSet == setvg)
@@ -334,7 +334,7 @@ void FGInitialCondition::SetWindDownKtsIC(float wD) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetWindMagKtsIC(float mag) {
+void FGInitialCondition::SetWindMagKtsIC(double mag) {
   wmag=mag*ktstofps;
   lastWindSet=setwmd;
   calcWindUVW();    
@@ -344,7 +344,7 @@ void FGInitialCondition::SetWindMagKtsIC(float mag) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetWindDirDegIC(float dir) {
+void FGInitialCondition::SetWindDirDegIC(double dir) {
   wdir=dir*degtorad;
   lastWindSet=setwmd;
   calcWindUVW();    
@@ -389,7 +389,7 @@ void FGInitialCondition::calcWindUVW(void) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetAltitudeFtIC(float tt) {
+void FGInitialCondition::SetAltitudeFtIC(double tt) {
   altitude=tt;
   fdmex->GetPosition()->Seth(altitude);
   fdmex->GetAtmosphere()->Run();
@@ -418,7 +418,7 @@ void FGInitialCondition::SetAltitudeFtIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetAltitudeAGLFtIC(float tt) {
+void FGInitialCondition::SetAltitudeAGLFtIC(double tt) {
   fdmex->GetPosition()->SetDistanceAGL(tt);
   altitude=fdmex->GetPosition()->Geth();
   SetAltitudeFtIC(altitude);
@@ -452,7 +452,7 @@ void FGInitialCondition::calcUVWfromNED(void) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetVnorthFpsIC(float tt) {
+void FGInitialCondition::SetVnorthFpsIC(double tt) {
   vnorth=tt;
   calcUVWfromNED();
   vt=sqrt(u*u + v*v + w*w);
@@ -461,7 +461,7 @@ void FGInitialCondition::SetVnorthFpsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetVeastFpsIC(float tt) {
+void FGInitialCondition::SetVeastFpsIC(double tt) {
   veast=tt;
   calcUVWfromNED();
   vt=sqrt(u*u + v*v + w*w);
@@ -470,7 +470,7 @@ void FGInitialCondition::SetVeastFpsIC(float tt) {
 
 //******************************************************************************
 
-void FGInitialCondition::SetVdownFpsIC(float tt) {
+void FGInitialCondition::SetVdownFpsIC(double tt) {
   vdown=tt;
   calcUVWfromNED();
   vt=sqrt(u*u + v*v + w*w);
@@ -480,10 +480,10 @@ void FGInitialCondition::SetVdownFpsIC(float tt) {
 
 //******************************************************************************
 
-bool FGInitialCondition::getMachFromVcas(float *Mach,float vcas) {
+bool FGInitialCondition::getMachFromVcas(double *Mach,double vcas) {
 
   bool result=false;
-  float guess=1.5;
+  double guess=1.5;
   xlo=xhi=0;
   xmin=0;xmax=50;
   sfunc=&FGInitialCondition::calcVcas;
@@ -498,7 +498,7 @@ bool FGInitialCondition::getMachFromVcas(float *Mach,float vcas) {
 
 bool FGInitialCondition::getAlpha(void) {
   bool result=false;
-  float guess=theta-gamma;
+  double guess=theta-gamma;
   xlo=xhi=0;
   xmin=fdmex->GetAircraft()->GetAlphaCLMin();
   xmax=fdmex->GetAircraft()->GetAlphaCLMax();
@@ -518,7 +518,7 @@ bool FGInitialCondition::getAlpha(void) {
 
 bool FGInitialCondition::getTheta(void) {
   bool result=false;
-  float guess=alpha+gamma;
+  double guess=alpha+gamma;
   xlo=xhi=0;
   xmin=-89;xmax=89;
   sfunc=&FGInitialCondition::GammaEqOfTheta;
@@ -535,9 +535,9 @@ bool FGInitialCondition::getTheta(void) {
 
 //******************************************************************************
 
-float FGInitialCondition::GammaEqOfTheta(float Theta) {
-  float a,b,c,d;
-  float sTheta,cTheta;
+double FGInitialCondition::GammaEqOfTheta(double Theta) {
+  double a,b,c,d;
+  double sTheta,cTheta;
 
   //theta=Theta; stheta=sin(theta); ctheta=cos(theta);
   sTheta=sin(Theta); cTheta=cos(Theta);
@@ -550,9 +550,9 @@ float FGInitialCondition::GammaEqOfTheta(float Theta) {
 
 //******************************************************************************
 
-float FGInitialCondition::GammaEqOfAlpha(float Alpha) {
-  float a,b,c,d;
-  float sAlpha,cAlpha;
+double FGInitialCondition::GammaEqOfAlpha(double Alpha) {
+  double a,b,c,d;
+  double sAlpha,cAlpha;
 
   sAlpha=sin(Alpha); cAlpha=cos(Alpha);
   a=wdown + vt*cAlpha*cbeta + uw;
@@ -564,12 +564,12 @@ float FGInitialCondition::GammaEqOfAlpha(float Alpha) {
 
 //******************************************************************************
 
-float FGInitialCondition::calcVcas(float Mach) {
+double FGInitialCondition::calcVcas(double Mach) {
 
-  float p=fdmex->GetAtmosphere()->GetPressure();
-  float psl=fdmex->GetAtmosphere()->GetPressureSL();
-  float rhosl=fdmex->GetAtmosphere()->GetDensitySL();
-  float pt,A,B,D,vcas;
+  double p=fdmex->GetAtmosphere()->GetPressure();
+  double psl=fdmex->GetAtmosphere()->GetPressureSL();
+  double rhosl=fdmex->GetAtmosphere()->GetDensitySL();
+  double pt,A,B,D,vcas;
   if(Mach < 0) Mach=0;
   if(Mach < 1)    //calculate total pressure assuming isentropic flow
     pt=p*pow((1 + 0.2*Mach*Mach),3.5);
@@ -605,13 +605,13 @@ float FGInitialCondition::calcVcas(float Mach) {
 
 //******************************************************************************
 
-bool FGInitialCondition::findInterval(float x,float guess) {
-  //void find_interval(inter_params &ip,eqfunc f,float y,float constant, int &flag){
+bool FGInitialCondition::findInterval(double x,double guess) {
+  //void find_interval(inter_params &ip,eqfunc f,double y,double constant, int &flag){
 
   int i=0;
   bool found=false;
-  float flo,fhi,fguess;
-  float lo,hi,step;
+  double flo,fhi,fguess;
+  double lo,hi,step;
   step=0.1;
   fguess=(this->*sfunc)(guess)-x;
   lo=hi=guess;
@@ -644,11 +644,11 @@ bool FGInitialCondition::findInterval(float x,float guess) {
 
 //******************************************************************************
 
-bool FGInitialCondition::solve(float *y,float x)
+bool FGInitialCondition::solve(double *y,double x)
 {
-  float x1,x2,x3,f1,f2,f3,d,d0;
-  float eps=1E-5;
-  float const relax =0.9;
+  double x1,x2,x3,f1,f2,f3,d,d0;
+  double eps=1E-5;
+  double const relax =0.9;
   int i;
   bool success=false;
 
@@ -695,7 +695,7 @@ bool FGInitialCondition::solve(float *y,float x)
 
 //******************************************************************************
 
-float FGInitialCondition::GetWindDirDegIC(void) {
+double FGInitialCondition::GetWindDirDegIC(void) {
   if(weast != 0.0) 
     return atan2(weast,wnorth)*radtodeg;
   else if(wnorth > 0) 
@@ -706,26 +706,25 @@ float FGInitialCondition::GetWindDirDegIC(void) {
 
 //******************************************************************************
 
-bool FGInitialCondition::Load(string path, string acname, string fname)
+bool FGInitialCondition::Load(string acpath, string acname, string rstfile)
 {
   string resetDef;
   string token="";
 
-  float temp;
+  double temp;
 
 # ifndef macintosh
-  resetDef = path + "/" + acname + "/" + fname + ".xml";
+  resetDef = acpath + "/" + acname + "/" + rstfile + ".xml";
 # else
-  resetDef = path + ";" + acname + ";" + fname + ".xml";
+  resetDef = acpath + ";" + acname + ";" + rstfile + ".xml";
 # endif
 
-  cout << resetDef << endl;
   FGConfigFile resetfile(resetDef);
   if (!resetfile.IsOpen()) return false;
 
   resetfile.GetNextConfigLine();
   token = resetfile.GetValue();
-  if (token != "initialize") {
+  if (token != string("initialize")) {
     cerr << "The reset file " << resetDef
          << " does not appear to be a reset file" << endl;
     return false;
@@ -733,7 +732,7 @@ bool FGInitialCondition::Load(string path, string acname, string fname)
   
   resetfile.GetNextConfigLine();
   resetfile >> token;
-  while (token != "/initialize" && token != "EOF") {
+  while (token != string("/initialize") && token != string("EOF")) {
     if (token == "UBODY" ) { resetfile >> temp; SetUBodyFpsIC(temp); } 
     if (token == "VBODY" ) { resetfile >> temp; SetVBodyFpsIC(temp); } 
     if (token == "WBODY" ) { resetfile >> temp; SetWBodyFpsIC(temp); }  
index bc39d56a66e6d8958aa62bcfce9f5e19399ae743..7c33cee2ff389ba2c9dbb701b827154138622bed 100644 (file)
@@ -140,137 +140,137 @@ public:
   /// Destructor
   ~FGInitialCondition();
 
-  void SetVcalibratedKtsIC(float tt);
-  void SetVequivalentKtsIC(float tt);
-  inline void SetVtrueKtsIC(float tt)   { SetVtrueFpsIC(tt*ktstofps);   }
-  inline void SetVgroundKtsIC(float tt) { SetVgroundFpsIC(tt*ktstofps); }
-  void SetMachIC(float tt);
+  void SetVcalibratedKtsIC(double tt);
+  void SetVequivalentKtsIC(double tt);
+  inline void SetVtrueKtsIC(double tt)   { SetVtrueFpsIC(tt*ktstofps);   }
+  inline void SetVgroundKtsIC(double tt) { SetVgroundFpsIC(tt*ktstofps); }
+  void SetMachIC(double tt);
   
-  inline void SetAlphaDegIC(float tt)      { SetAlphaRadIC(tt*degtorad); }
-  inline void SetBetaDegIC(float tt)       { SetBetaRadIC(tt*degtorad);}
+  inline void SetAlphaDegIC(double tt)      { SetAlphaRadIC(tt*degtorad); }
+  inline void SetBetaDegIC(double tt)       { SetBetaRadIC(tt*degtorad);}
   
-  inline void SetPitchAngleDegIC(float tt) { SetPitchAngleRadIC(tt*degtorad); }
-  inline void SetRollAngleDegIC(float tt)  { SetRollAngleRadIC(tt*degtorad);}
-  inline void SetTrueHeadingDegIC(float tt){ SetTrueHeadingRadIC(tt*degtorad); }
+  inline void SetPitchAngleDegIC(double tt) { SetPitchAngleRadIC(tt*degtorad); }
+  inline void SetRollAngleDegIC(double tt)  { SetRollAngleRadIC(tt*degtorad);}
+  inline void SetTrueHeadingDegIC(double tt){ SetTrueHeadingRadIC(tt*degtorad); }
   
-  void SetClimbRateFpmIC(float tt);
-  inline void SetFlightPathAngleDegIC(float tt) { SetFlightPathAngleRadIC(tt*degtorad); }
+  void SetClimbRateFpmIC(double tt);
+  inline void SetFlightPathAngleDegIC(double tt) { SetFlightPathAngleRadIC(tt*degtorad); }
 
-  void SetAltitudeFtIC(float tt);
-  void SetAltitudeAGLFtIC(float tt);
+  void SetAltitudeFtIC(double tt);
+  void SetAltitudeAGLFtIC(double tt);
   
   void SetSeaLevelRadiusFtIC(double tt);
   void SetTerrainAltitudeFtIC(double tt);
 
-  inline void SetLatitudeDegIC(float tt)  { latitude=tt*degtorad; }
-  inline void SetLongitudeDegIC(float tt) { longitude=tt*degtorad; }
+  inline void SetLatitudeDegIC(double tt)  { latitude=tt*degtorad; }
+  inline void SetLongitudeDegIC(double tt) { longitude=tt*degtorad; }
 
   
-  inline float GetVcalibratedKtsIC(void) { return vc*fpstokts; }
-  inline float GetVequivalentKtsIC(void) { return ve*fpstokts; }
-  inline float GetVgroundKtsIC(void) { return vg*fpstokts; }
-  inline float GetVtrueKtsIC(void) { return vt*fpstokts; }
-  inline float GetMachIC(void) { return mach; }
+  inline double GetVcalibratedKtsIC(void) { return vc*fpstokts; }
+  inline double GetVequivalentKtsIC(void) { return ve*fpstokts; }
+  inline double GetVgroundKtsIC(void) { return vg*fpstokts; }
+  inline double GetVtrueKtsIC(void) { return vt*fpstokts; }
+  inline double GetMachIC(void) { return mach; }
   
-  inline float GetClimbRateFpmIC(void) { return hdot*60; }
-  inline float GetFlightPathAngleDegIC(void) { return gamma*radtodeg; }
+  inline double GetClimbRateFpmIC(void) { return hdot*60; }
+  inline double GetFlightPathAngleDegIC(void) { return gamma*radtodeg; }
   
-  inline float GetAlphaDegIC(void)      { return alpha*radtodeg; }
-  inline float GetBetaDegIC(void)       { return beta*radtodeg; }
+  inline double GetAlphaDegIC(void)      { return alpha*radtodeg; }
+  inline double GetBetaDegIC(void)       { return beta*radtodeg; }
   
-  inline float GetPitchAngleDegIC(void) { return theta*radtodeg; }
-  inline float GetRollAngleDegIC(void) { return phi*radtodeg; }
-  inline float GetHeadingDegIC(void)   { return psi*radtodeg; }
+  inline double GetPitchAngleDegIC(void) { return theta*radtodeg; }
+  inline double GetRollAngleDegIC(void) { return phi*radtodeg; }
+  inline double GetHeadingDegIC(void)   { return psi*radtodeg; }
 
-  inline float GetLatitudeDegIC(void)  { return latitude*radtodeg; }
-  inline float GetLongitudeDegIC(void) { return longitude*radtodeg; }
+  inline double GetLatitudeDegIC(void)  { return latitude*radtodeg; }
+  inline double GetLongitudeDegIC(void) { return longitude*radtodeg; }
   
-  inline float GetAltitudeFtIC(void) { return altitude; }
-  inline float GetAltitudeAGLFtIC(void) { return altitude - terrain_altitude; }
+  inline double GetAltitudeFtIC(void) { return altitude; }
+  inline double GetAltitudeAGLFtIC(void) { return altitude - terrain_altitude; }
   
-  inline float GetSeaLevelRadiusFtIC(void)  { return sea_level_radius; }
-  inline float GetTerrainAltitudeFtIC(void) { return terrain_altitude; }
-
-  void SetVgroundFpsIC(float tt);
-  void SetVtrueFpsIC(float tt);
-  void SetUBodyFpsIC(float tt);
-  void SetVBodyFpsIC(float tt);
-  void SetWBodyFpsIC(float tt);
-  void SetVnorthFpsIC(float tt);
-  void SetVeastFpsIC(float tt);
-  void SetVdownFpsIC(float tt);
+  inline double GetSeaLevelRadiusFtIC(void)  { return sea_level_radius; }
+  inline double GetTerrainAltitudeFtIC(void) { return terrain_altitude; }
+
+  void SetVgroundFpsIC(double tt);
+  void SetVtrueFpsIC(double tt);
+  void SetUBodyFpsIC(double tt);
+  void SetVBodyFpsIC(double tt);
+  void SetWBodyFpsIC(double tt);
+  void SetVnorthFpsIC(double tt);
+  void SetVeastFpsIC(double tt);
+  void SetVdownFpsIC(double tt);
   
-  void SetWindNEDFpsIC(float wN, float wE, float wD);
+  void SetWindNEDFpsIC(double wN, double wE, double wD);
  
-  void SetWindMagKtsIC(float mag);
-  void SetWindDirDegIC(float dir);
+  void SetWindMagKtsIC(double mag);
+  void SetWindDirDegIC(double dir);
  
-  void SetHeadWindKtsIC(float head);
-  void SetCrossWindKtsIC(float cross);// positive from left
+  void SetHeadWindKtsIC(double head);
+  void SetCrossWindKtsIC(double cross);// positive from left
  
-  void SetWindDownKtsIC(float wD);                                          
+  void SetWindDownKtsIC(double wD);                                          
   
-  void SetClimbRateFpsIC(float tt);
-  inline float GetVgroundFpsIC(void) { return vg; }
-  inline float GetVtrueFpsIC(void) { return vt; }
-  inline float GetWindUFpsIC(void) { return uw; }
-  inline float GetWindVFpsIC(void) { return vw; }
-  inline float GetWindWFpsIC(void) { return ww; }
-  inline float GetWindNFpsIC(void) { return wnorth; }
-  inline float GetWindEFpsIC(void) { return weast; }
-  inline float GetWindDFpsIC(void) { return wdown; }
-  inline float GetWindFpsIC(void)  { return sqrt(wnorth*wnorth + weast*weast); }
-  float GetWindDirDegIC(void); 
-  inline float GetClimbRateFpsIC(void) { return hdot; }
-  float GetUBodyFpsIC(void);
-  float GetVBodyFpsIC(void);
-  float GetWBodyFpsIC(void);
-  void SetFlightPathAngleRadIC(float tt);
-  void SetAlphaRadIC(float tt);
-  void SetPitchAngleRadIC(float tt);
-  void SetBetaRadIC(float tt);
-  void SetRollAngleRadIC(float tt);
-  void SetTrueHeadingRadIC(float tt);
-  inline void SetLatitudeRadIC(float tt)  { latitude=tt; }
-  inline void SetLongitudeRadIC(float tt) { longitude=tt; }
-  inline float GetFlightPathAngleRadIC(void) { return gamma; }
-  inline float GetAlphaRadIC(void)      { return alpha; }
-  inline float GetPitchAngleRadIC(void) { return theta; }
-  inline float GetBetaRadIC(void)       { return beta; }
-  inline float GetRollAngleRadIC(void) { return phi; }
-  inline float GetHeadingRadIC(void)   { return psi; }
-  inline float GetLatitudeRadIC(void) { return latitude; }
-  inline float GetLongitudeRadIC(void) { return longitude; }
-  inline float GetThetaRadIC(void) { return theta; }
-  inline float GetPhiRadIC(void)   { return phi; }
-  inline float GetPsiRadIC(void)   { return psi; }
+  void SetClimbRateFpsIC(double tt);
+  inline double GetVgroundFpsIC(void) { return vg; }
+  inline double GetVtrueFpsIC(void) { return vt; }
+  inline double GetWindUFpsIC(void) { return uw; }
+  inline double GetWindVFpsIC(void) { return vw; }
+  inline double GetWindWFpsIC(void) { return ww; }
+  inline double GetWindNFpsIC(void) { return wnorth; }
+  inline double GetWindEFpsIC(void) { return weast; }
+  inline double GetWindDFpsIC(void) { return wdown; }
+  inline double GetWindFpsIC(void)  { return sqrt(wnorth*wnorth + weast*weast); }
+  double GetWindDirDegIC(void); 
+  inline double GetClimbRateFpsIC(void) { return hdot; }
+  double GetUBodyFpsIC(void);
+  double GetVBodyFpsIC(void);
+  double GetWBodyFpsIC(void);
+  void SetFlightPathAngleRadIC(double tt);
+  void SetAlphaRadIC(double tt);
+  void SetPitchAngleRadIC(double tt);
+  void SetBetaRadIC(double tt);
+  void SetRollAngleRadIC(double tt);
+  void SetTrueHeadingRadIC(double tt);
+  inline void SetLatitudeRadIC(double tt)  { latitude=tt; }
+  inline void SetLongitudeRadIC(double tt) { longitude=tt; }
+  inline double GetFlightPathAngleRadIC(void) { return gamma; }
+  inline double GetAlphaRadIC(void)      { return alpha; }
+  inline double GetPitchAngleRadIC(void) { return theta; }
+  inline double GetBetaRadIC(void)       { return beta; }
+  inline double GetRollAngleRadIC(void) { return phi; }
+  inline double GetHeadingRadIC(void)   { return psi; }
+  inline double GetLatitudeRadIC(void) { return latitude; }
+  inline double GetLongitudeRadIC(void) { return longitude; }
+  inline double GetThetaRadIC(void) { return theta; }
+  inline double GetPhiRadIC(void)   { return phi; }
+  inline double GetPsiRadIC(void)   { return psi; }
 
   inline speedset GetSpeedSet(void) { return lastSpeedSet; }
   inline windset GetWindSet(void) { return lastWindSet; }
   
-  bool Load(string path, string acname, string fname);
+  bool Load(string acpath, string acname, string rstname);
 
 private:
-  float vt,vc,ve,vg;
-  float mach;
-  float altitude,hdot;
-  float latitude,longitude;
-  float u,v,w;
-  float uw,vw,ww;
-  float vnorth,veast,vdown;
-  float wnorth,weast,wdown;
-  float whead, wcross, wdir, wmag;
+  double vt,vc,ve,vg;
+  double mach;
+  double altitude,hdot;
+  double latitude,longitude;
+  double u,v,w;
+  double uw,vw,ww;
+  double vnorth,veast,vdown;
+  double wnorth,weast,wdown;
+  double whead, wcross, wdir, wmag;
   double sea_level_radius;
   double terrain_altitude;
   double radius_to_vehicle;
 
-  float  alpha, beta, theta, phi, psi, gamma;
-  float salpha,sbeta,stheta,sphi,spsi,sgamma;
-  float calpha,cbeta,ctheta,cphi,cpsi,cgamma;
+  double  alpha, beta, theta, phi, psi, gamma;
+  double salpha,sbeta,stheta,sphi,spsi,sgamma;
+  double calpha,cbeta,ctheta,cphi,cpsi,cgamma;
 
-  float xlo, xhi,xmin,xmax;
+  double xlo, xhi,xmin,xmax;
 
-  typedef float (FGInitialCondition::*fp)(float x);
+  typedef double (FGInitialCondition::*fp)(double x);
   fp sfunc;
 
   speedset lastSpeedSet;
@@ -280,16 +280,16 @@ private:
 
   bool getAlpha(void);
   bool getTheta(void);
-  bool getMachFromVcas(float *Mach,float vcas);
+  bool getMachFromVcas(double *Mach,double vcas);
 
-  float GammaEqOfTheta(float Theta);
-  float GammaEqOfAlpha(float Alpha);
-  float calcVcas(float Mach);
+  double GammaEqOfTheta(double Theta);
+  double GammaEqOfAlpha(double Alpha);
+  double calcVcas(double Mach);
   void calcUVWfromNED(void);
   void calcWindUVW(void);
 
-  bool findInterval(float x,float guess);
-  bool solve(float *y, float x);
+  bool findInterval(double x,double guess);
+  bool solve(double *y, double x);
 };
 
 #endif
index 5561886de85ee461438cedac3ce5f5708b76ea5e..6408fa2c7cddea81186e00aca0569ff23e4b1667 100644 (file)
@@ -43,17 +43,22 @@ INCLUDES
 #  include <math.h>
 #  include <queue>
 #  include STL_STRING
-  SG_USING_STD(queue);
+
+SG_USING_STD(string);
+SG_USING_STD(queue);
+
 #else
+
+#  include <queue>
+#  include <string>
 #  if defined(sgi) && !defined(__GNUC__)
 #    include <math.h>
-#    include <queue.h>
-#    include <string.h>
 #  else
 #    include <cmath>
-#    include <queue>
-#    include <string>
 #  endif
+
+using std::string;
+using std::queue;
 #endif
 
 #ifndef M_PI 
index ce0c0f8e8e1e0826fa305642deabbfb0dd0230b1..2fe798e60a1e484fb34b9b7c5b314490829be5cb 100644 (file)
@@ -112,7 +112,7 @@ FGLGear::FGLGear(FGConfigFile* AC_cfg, FGFDMExec* fdmex) : vXYZ(3),
   FCS         = Exec->GetFCS();
   MassBalance = Exec->GetMassBalance();
 
-  WOW = false;
+  WOW = lastWOW = false;
   ReportEnable = true;
   FirstContact = false;
   Reported = false;
@@ -147,6 +147,7 @@ FGLGear::FGLGear(const FGLGear& lgear)
   vLocalGear = lgear.vLocalGear;
 
   WOW                = lgear.WOW;
+  lastWOW            = lgear.lastWOW;
   ReportEnable       = lgear.ReportEnable;
   FirstContact       = lgear.FirstContact;
   DistanceTraveled   = lgear.DistanceTraveled;
@@ -184,10 +185,10 @@ FGLGear::~FGLGear()
 
 FGColumnVector3& FGLGear::Force(void)
 {
-  float SteerGain;
-  float SinWheel, CosWheel, SideWhlVel, RollingWhlVel;
-  float RudderPedal, RollingForce, SideForce, FCoeff;
-  float WheelSlip;
+  double SteerGain;
+  double SinWheel, CosWheel, SideWhlVel, RollingWhlVel;
+  double RudderPedal, RollingForce, SideForce, FCoeff;
+  double WheelSlip;
 
   vWhlBodyVec     = (vXYZ - MassBalance->GetXYZcg()) / 12.0;
   vWhlBodyVec(eX) = -vWhlBodyVec(eX);
@@ -337,7 +338,7 @@ FGColumnVector3& FGLGear::Force(void)
 // case. NOTE: SQUARE LAW DAMPING NO GOOD!
 
     vLocalForce(eZ) =  min(-compressLength * kSpring
-                           - compressSpeed * bDamp, (float)0.0);
+                           - compressSpeed * bDamp, (double)0.0);
 
     MaximumStrutForce = max(MaximumStrutForce, fabs(vLocalForce(eZ)));
     MaximumStrutTravel = max(MaximumStrutTravel, fabs(compressLength));
@@ -397,6 +398,23 @@ FGColumnVector3& FGLGear::Force(void)
     if (debug_lvl > 0) Report();
   }
 
+  if (lastWOW != WOW) {
+    PutMessage("GEAR_CONTACT", WOW);
+  }
+
+  lastWOW = WOW;
+
+  // Crash detection logic (really out-of-bounds detection)
+  
+  if (compressLength > 500.0 ||
+      vForce.Magnitude() > 100000000.0 ||
+      vMoment.Magnitude() > 5000000000.0 ||
+      SinkRate > 1.4666*30)
+  {
+    PutMessage("Crash Detected");
+    Exec->Freeze();
+  }
+
   return vForce;
 }
 
index 16331004d53a64d6c12f1ce76548f2bf6dfec124..96261dc3049c2cf9a94e71b64f616ea1dec66492 100644 (file)
@@ -200,22 +200,22 @@ public:
 
   /// Gets the location of the gear in Body axes
   FGColumnVector3& GetBodyLocation(void) { return vWhlBodyVec; }
-  float GetBodyLocation(int idx) { return vWhlBodyVec(idx); }
+  double GetBodyLocation(int idx) { return vWhlBodyVec(idx); }
 
   FGColumnVector3& GetLocalGear(void) { return vLocalGear; }
-  float GetLocalGear(int idx) { return vLocalGear(idx); }
+  double GetLocalGear(int idx) { return vLocalGear(idx); }
 
   /// Gets the name of the gear
   inline string GetName(void)      {return name;          }
   /// Gets the Weight On Wheels flag value
   inline bool   GetWOW(void)       {return WOW;           }
   /// Gets the current compressed length of the gear in feet
-  inline float  GetCompLen(void)   {return compressLength;}
+  inline double  GetCompLen(void)   {return compressLength;}
   /// Gets the current gear compression velocity in ft/sec
-  inline float  GetCompVel(void)   {return compressSpeed; }
+  inline double  GetCompVel(void)   {return compressSpeed; }
   /// Gets the gear compression force in pounds
-  inline float  GetCompForce(void) {return Force()(3);    }
-  inline float  GetBrakeFCoeff(void) {return BrakeFCoeff;}
+  inline double  GetCompForce(void) {return Force()(3);    }
+  inline double  GetBrakeFCoeff(void) {return BrakeFCoeff;}
   
   /// Sets the brake value in percent (0 - 100)
   inline void SetBrake(double bp) {brakePct = bp;}
@@ -226,8 +226,8 @@ public:
   /** Get the console touchdown reporting feature
       @return true if reporting is turned on */
   inline bool GetReport(void)    { return ReportEnable; }
-  inline float GetSteerAngle(void) { return SteerAngle;}
-  inline float GetstaticFCoeff(void) { return staticFCoeff;}
+  inline double GetSteerAngle(void) { return SteerAngle;}
+  inline double GetstaticFCoeff(void) { return staticFCoeff;}
   
   inline int GetBrakeGroup(void) { return (int)eBrakeGrp; }
   inline int GetSteerType(void)  { return (int)eSteerType; }
@@ -240,21 +240,22 @@ private:
   FGColumnVector3 vForce;
   FGColumnVector3 vLocalForce;
   FGColumnVector3 vWhlVelVec;     // Velocity of this wheel (Local)
-  float SteerAngle;
-  float kSpring;
-  float bDamp;
-  float compressLength;
-  float compressSpeed;
-  float staticFCoeff, dynamicFCoeff, rollingFCoeff;
-  float brakePct;
-  float BrakeFCoeff;
-  float maxCompLen;
+  double SteerAngle;
+  double kSpring;
+  double bDamp;
+  double compressLength;
+  double compressSpeed;
+  double staticFCoeff, dynamicFCoeff, rollingFCoeff;
+  double brakePct;
+  double BrakeFCoeff;
+  double maxCompLen;
   double SinkRate;
   double GroundSpeed;
   double DistanceTraveled;
   double MaximumStrutForce;
   double MaximumStrutTravel;
   bool WOW;
+  bool lastWOW;
   bool FirstContact;
   bool Reported;
   bool ReportEnable;
@@ -263,7 +264,7 @@ private:
   string sBrakeGroup;
   BrakeGroup eBrakeGrp;
   SteerType  eSteerType;
-  float  maxSteerAngle;
+  double  maxSteerAngle;
 
   FGFDMExec*  Exec;
   FGState*    State;
index 06c63cbd8722700386afdb1ba326a8dae5e917f5..d59fbb16ef4ae51ada69baca3553ffb42d8be444 100644 (file)
@@ -60,38 +60,38 @@ public:
 
   bool Run(void);
 
-  inline float GetMass(void) {return Mass;}
-  inline float GetWeight(void) {return Weight;}
-  inline float GetIxx(void) {return Ixx;}
-  inline float GetIyy(void) {return Iyy;}
-  inline float GetIzz(void) {return Izz;}
-  inline float GetIxz(void) {return Ixz;}
-  inline float GetIyz(void) {return Iyz;}
+  inline double GetMass(void) {return Mass;}
+  inline double GetWeight(void) {return Weight;}
+  inline double GetIxx(void) {return Ixx;}
+  inline double GetIyy(void) {return Iyy;}
+  inline double GetIzz(void) {return Izz;}
+  inline double GetIxz(void) {return Ixz;}
+  inline double GetIyz(void) {return Iyz;}
   inline FGColumnVector3& GetXYZcg(void) {return vXYZcg;}
-  inline float GetXYZcg(int axis) {return vXYZcg(axis);}
-
-  inline void SetEmptyWeight(float EW) { EmptyWeight = EW;}
-  inline void SetBaseIxx(float bixx)   { baseIxx = bixx;}
-  inline void SetBaseIyy(float biyy)   { baseIyy = biyy;}
-  inline void SetBaseIzz(float bizz)   { baseIzz = bizz;}
-  inline void SetBaseIxz(float bixz)   { baseIxz = bixz;}
-  inline void SetBaseIyz(float biyz)   { baseIyz = biyz;}
+  inline double GetXYZcg(int axis) {return vXYZcg(axis);}
+
+  inline void SetEmptyWeight(double EW) { EmptyWeight = EW;}
+  inline void SetBaseIxx(double bixx)   { baseIxx = bixx;}
+  inline void SetBaseIyy(double biyy)   { baseIyy = biyy;}
+  inline void SetBaseIzz(double bizz)   { baseIzz = bizz;}
+  inline void SetBaseIxz(double bixz)   { baseIxz = bixz;}
+  inline void SetBaseIyz(double biyz)   { baseIyz = biyz;}
   inline void SetBaseCG(const FGColumnVector3& CG) {vbaseXYZcg = CG;}
 
 private:
-  float Weight;
-  float EmptyWeight;
-  float Mass;
-  float Ixx;
-  float Iyy;
-  float Izz;
-  float Ixz;
-  float Iyz;
-  float baseIxx;
-  float baseIyy;
-  float baseIzz;
-  float baseIxz;
-  float baseIyz;
+  double Weight;
+  double EmptyWeight;
+  double Mass;
+  double Ixx;
+  double Iyy;
+  double Izz;
+  double Ixz;
+  double Iyz;
+  double baseIxx;
+  double baseIyy;
+  double baseIzz;
+  double baseIxz;
+  double baseIyz;
   FGColumnVector3 vXYZcg;
   FGColumnVector3 vXYZtank;
   FGColumnVector3 vbaseXYZcg;
index f372fc3d608f450dd7954c2ecc1e23106a077036..dba3689917be13aadb9a29b42c8e0961bfc72e9e 100644 (file)
@@ -93,7 +93,7 @@ ostream& operator<<(ostream& os, const FGMatrix33& M)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGMatrix33& FGMatrix33::operator<<(const float ff)
+FGMatrix33& FGMatrix33::operator<<(const double ff)
 {
   data[rowCtr][colCtr] = ff;
   if (++colCtr > Cols()) {
@@ -304,7 +304,7 @@ FGMatrix33 FGMatrix33::operator*(const FGMatrix33& M)
 
 void FGMatrix33::operator*=(const FGMatrix33& M)
 {
-  float a,b,c;
+  double a,b,c;
   
   a = data[1][1]; b=data[1][2]; c=data[1][3];
   data[1][1] = a*M(1,1) + b*M(2,1) + c*M(3,1);
index 7845101931eab0db67a766045930c030d9e75874..df592228053e8f8c60806f87e18b10b7ca30c296 100644 (file)
@@ -111,7 +111,7 @@ public:
   FGMatrix33 operator*(const FGMatrix33& B);
   FGMatrix33 operator*(const double scalar);
   FGMatrix33 operator/(const double scalar);
-  FGMatrix33& operator<<(const float ff);
+  FGMatrix33& operator<<(const double ff);
 
   friend ostream& operator<<(ostream& os, const FGMatrix33& M);
   friend istream& operator>>(istream& is, FGMatrix33& M);
index b571e6ff3695603c8d45626c18a22bdf52db9049..3f0869081c75ca7c93790d77667d314839c8f799 100644 (file)
@@ -58,7 +58,7 @@ FGNozzle::FGNozzle(FGFDMExec* FDMExec, FGConfigFile* Nzl_cfg) : FGThruster(FDMEx
 
   Name = Nzl_cfg->GetValue("NAME");
   Nzl_cfg->GetNextConfigLine();
-  while (Nzl_cfg->GetValue() != "/FG_NOZZLE") {
+  while (Nzl_cfg->GetValue() != string("/FG_NOZZLE")) {
     *Nzl_cfg >> token;
     if      (token == "PE")      *Nzl_cfg >> PE;
     else if (token == "EXPR")    *Nzl_cfg >> ExpR;
@@ -92,10 +92,10 @@ FGNozzle::~FGNozzle()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGNozzle::Calculate(float CfPc)
+double FGNozzle::Calculate(double CfPc)
 {
-  float pAtm = fdmex->GetAtmosphere()->GetPressure();
-  Thrust = max((float)0.0, (CfPc * AreaT + (PE - pAtm)*Area2) * nzlEff);
+  double pAtm = fdmex->GetAtmosphere()->GetPressure();
+  Thrust = max((double)0.0, (CfPc * AreaT + (PE - pAtm)*Area2) * nzlEff);
   vFn(1) = Thrust;
 
   return Thrust;
@@ -103,7 +103,7 @@ float FGNozzle::Calculate(float CfPc)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGNozzle::GetPowerRequired(void)
+double FGNozzle::GetPowerRequired(void)
 {
   return PE;
 }
index 7a97261a663edaf656e3b156d0eda722c170c764..93c4d39d21b5886e35495d1ca1dfcc17ef38d4a0 100644 (file)
@@ -73,16 +73,16 @@ public:
   /// Destructor
   ~FGNozzle();
 
-  float Calculate(float CfPc);
-  float GetPowerRequired(void);
+  double Calculate(double CfPc);
+  double GetPowerRequired(void);
   
 private:
-  float PE;
-  float ExpR;
-  float nzlEff;
-  float Diameter;
-  float AreaT;
-  float Area2;
+  double PE;
+  double ExpR;
+  double nzlEff;
+  double Diameter;
+  double AreaT;
+  double Area2;
   void Debug(void);
 };
 
index b5e1df66537a40fd4a796b98d5d6c2a949db05b9..c18b4831b15dafcdef6cc522f1747ba90c49d0ad 100644 (file)
@@ -120,7 +120,7 @@ void FGOutput::SetType(string type)
     Type = otSocket;
   } else if (type == "TERMINAL") {
     Type = otTerminal;
-  } else if (type != "NONE"){
+  } else if (type != string("NONE")){
     Type = otUnknown;
     cerr << "Unknown type of output specified in config file" << endl;
   }
@@ -130,25 +130,23 @@ void FGOutput::SetType(string type)
 
 void FGOutput::DelimitedOutput(string fname)
 {
-# if defined(sgi) && !defined(__GNUC__)
-  ostream_withassign outstream;
-# else
-  _IO_ostream_withassign outstream;
-# endif
+  streambuf* buffer;
 
   if (fname == "COUT" || fname == "cout") {
-    outstream = cout;
+    buffer = cout.rdbuf();
   } else {
     datafile.open(fname.c_str());
-    outstream = datafile;
+    buffer = datafile.rdbuf();
   }
 
+  ostream outstream(buffer);
+
   if (dFirstPass) {
     outstream << "Time";
-    if (SubSystems & FGAircraft::ssSimulation) {
+    if (SubSystems & ssSimulation) {
       // Nothing here, yet
     }
-    if (SubSystems & FGAircraft::ssAerosurfaces) {
+    if (SubSystems & ssAerosurfaces) {
       outstream << ", ";
       outstream << "Throttle, ";
       outstream << "Mixture, ";
@@ -159,11 +157,11 @@ void FGOutput::DelimitedOutput(string fname)
       outstream << "Elevator Pos, ";
       outstream << "Rudder Pos";
     }
-    if (SubSystems & FGAircraft::ssRates) {
+    if (SubSystems & ssRates) {
       outstream << ", ";
       outstream << "P, Q, R";
     }
-    if (SubSystems & FGAircraft::ssVelocities) {
+    if (SubSystems & ssVelocities) {
       outstream << ", ";
       outstream << "QBar, ";
       outstream << "Vtotal, ";
@@ -171,21 +169,21 @@ void FGOutput::DelimitedOutput(string fname)
       outstream << "UAero, VAero, WAero, ";
       outstream << "Vn, Ve, Vd";
     }
-    if (SubSystems & FGAircraft::ssForces) {
+    if (SubSystems & ssForces) {
       outstream << ", ";
       outstream << "Drag, Side, Lift, ";
       outstream << "L/D, ";
       outstream << "Xforce, Yforce, Zforce";
     }
-    if (SubSystems & FGAircraft::ssMoments) {
+    if (SubSystems & ssMoments) {
       outstream << ", ";
       outstream << "L, M, N";
     }
-    if (SubSystems & FGAircraft::ssAtmosphere) {
+    if (SubSystems & ssAtmosphere) {
       outstream << ", ";
       outstream << "Rho";
     }
-    if (SubSystems & FGAircraft::ssMassProps) {
+    if (SubSystems & ssMassProps) {
       outstream << ", ";
       outstream << "Ixx, ";
       outstream << "Iyy, ";
@@ -194,7 +192,7 @@ void FGOutput::DelimitedOutput(string fname)
       outstream << "Mass, ";
       outstream << "Xcg, Ycg, Zcg";
     }
-    if (SubSystems & FGAircraft::ssPosition) {
+    if (SubSystems & ssPosition) {
       outstream << ", ";
       outstream << "Altitude, ";
       outstream << "Phi, Tht, Psi, ";
@@ -204,15 +202,15 @@ void FGOutput::DelimitedOutput(string fname)
       outstream << "Distance AGL, ";
       outstream << "Runway Radius";
     }
-    if (SubSystems & FGAircraft::ssCoefficients) {
+    if (SubSystems & ssCoefficients) {
       outstream << ", ";
       outstream << Aerodynamics->GetCoefficientStrings();
     }
-    if (SubSystems & FGAircraft::ssGroundReactions) {
+    if (SubSystems & ssGroundReactions) {
       outstream << ", ";
       outstream << GroundReactions->GetGroundReactionStrings();
     }
-    if (SubSystems & FGAircraft::ssPropulsion) {
+    if (SubSystems & ssPropulsion) {
       outstream << ", ";
       outstream << Propulsion->GetPropulsionStrings();
     }
@@ -222,9 +220,9 @@ void FGOutput::DelimitedOutput(string fname)
   }
 
   outstream << State->Getsim_time();
-  if (SubSystems & FGAircraft::ssSimulation) {
+  if (SubSystems & ssSimulation) {
   }
-  if (SubSystems & FGAircraft::ssAerosurfaces) {
+  if (SubSystems & ssAerosurfaces) {
     outstream << ", ";
     outstream << FCS->GetThrottlePos(0) << ", ";
     outstream << FCS->GetMixturePos(0) << ", ";
@@ -235,11 +233,11 @@ void FGOutput::DelimitedOutput(string fname)
     outstream << FCS->GetDePos() << ", ";
     outstream << FCS->GetDrPos();
   }
-  if (SubSystems & FGAircraft::ssRates) {
+  if (SubSystems & ssRates) {
     outstream << ", ";
     outstream << Rotation->GetPQR();
   }
-  if (SubSystems & FGAircraft::ssVelocities) {
+  if (SubSystems & ssVelocities) {
     outstream << ", ";
     outstream << Translation->Getqbar() << ", ";
     outstream << Translation->GetVt() << ", ";
@@ -247,21 +245,21 @@ void FGOutput::DelimitedOutput(string fname)
     outstream << Translation->GetvAero() << ", ";
     outstream << Position->GetVel();
   }
-  if (SubSystems & FGAircraft::ssForces) {
+  if (SubSystems & ssForces) {
     outstream << ", ";
     outstream << Aerodynamics->GetvFs() << ", ";
     outstream << Aerodynamics->GetLoD() << ", ";
     outstream << Aircraft->GetForces();
   }
-  if (SubSystems & FGAircraft::ssMoments) {
+  if (SubSystems & ssMoments) {
     outstream << ", ";
     outstream << Aircraft->GetMoments();
   }
-  if (SubSystems & FGAircraft::ssAtmosphere) {
+  if (SubSystems & ssAtmosphere) {
     outstream << ", ";
     outstream << Atmosphere->GetDensity();
   }
-  if (SubSystems & FGAircraft::ssMassProps) {
+  if (SubSystems & ssMassProps) {
     outstream << ", ";
     outstream << MassBalance->GetIxx() << ", ";
     outstream << MassBalance->GetIyy() << ", ";
@@ -270,7 +268,7 @@ void FGOutput::DelimitedOutput(string fname)
     outstream << MassBalance->GetMass() << ", ";
     outstream << MassBalance->GetXYZcg();
   }
-  if (SubSystems & FGAircraft::ssPosition) {
+  if (SubSystems & ssPosition) {
     outstream << ", ";
     outstream << Position->Geth() << ", ";
     outstream << Rotation->GetEuler() << ", ";
@@ -280,15 +278,15 @@ void FGOutput::DelimitedOutput(string fname)
     outstream << Position->GetDistanceAGL() << ", ";
     outstream << Position->GetRunwayRadius();
   }
-  if (SubSystems & FGAircraft::ssCoefficients) {
+  if (SubSystems & ssCoefficients) {
     outstream << ", ";
     outstream << Aerodynamics->GetCoefficientValues();
   }
-  if (SubSystems & FGAircraft::ssGroundReactions) {
+  if (SubSystems & ssGroundReactions) {
     outstream << ", ";
     outstream << GroundReactions->GetGroundReactionValues();
   }
-  if (SubSystems & FGAircraft::ssPropulsion) {
+  if (SubSystems & ssPropulsion) {
     outstream << ", ";
     outstream << Propulsion->GetPropulsionValues();
   }
@@ -410,6 +408,82 @@ void FGOutput::SocketStatusOutput(string out_str)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+bool FGOutput::Load(FGConfigFile* AC_cfg)
+{
+  string token, parameter;
+  int OutRate = 0;
+
+  token = AC_cfg->GetValue("NAME");
+  Output->SetFilename(token);
+  token = AC_cfg->GetValue("TYPE");
+  Output->SetType(token);
+  AC_cfg->GetNextConfigLine();
+
+  while ((token = AC_cfg->GetValue()) != string("/OUTPUT")) {
+    *AC_cfg >> parameter;
+    if (parameter == "RATE_IN_HZ") *AC_cfg >> OutRate;
+    if (parameter == "SIMULATION") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssSimulation;
+    }
+    if (parameter == "AEROSURFACES") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssAerosurfaces;
+    }
+    if (parameter == "RATES") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssRates;
+    }
+    if (parameter == "VELOCITIES") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssVelocities;
+    }
+    if (parameter == "FORCES") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssForces;
+    }
+    if (parameter == "MOMENTS") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssMoments;
+    }
+    if (parameter == "ATMOSPHERE") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssAtmosphere;
+    }
+    if (parameter == "MASSPROPS") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssMassProps;
+    }
+    if (parameter == "POSITION") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssPosition;
+    }
+    if (parameter == "COEFFICIENTS") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssCoefficients;
+    }
+    if (parameter == "GROUND_REACTIONS") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssGroundReactions;
+    }
+    if (parameter == "FCS") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssFCS;
+    }
+    if (parameter == "PROPULSION") {
+      *AC_cfg >> parameter;
+      if (parameter == "ON") SubSystems += ssPropulsion;
+    }
+  }
+
+  OutRate = OutRate>120?120:(OutRate<0?0:OutRate);
+  rate = (int)(0.5 + 1.0/(State->Getdt()*OutRate));
+
+  return true;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 void FGOutput::Debug(void)
 {
     //TODO: Add your source code here
index 669cf521809bcd1f3caf67d6aba4e0bf004686e8..a22157ec20476d0e9b8bfe8cc0bcb43cc7ea1bd1 100644 (file)
@@ -79,6 +79,24 @@ public:
   inline void Enable(void) { enabled = true; }
   inline void Disable(void) { enabled = false; }
   inline bool Toggle(void) {enabled = !enabled; return enabled;}
+  bool Load(FGConfigFile* AC_cfg);
+
+  /// Subsystem types for specifying which will be output in the FDM data logging
+  enum  SubSystems {
+    /** Subsystem: Simulation (= 1)          */ ssSimulation      = 1,
+    /** Subsystem: Aerosurfaces (= 2)        */ ssAerosurfaces    = 2,
+    /** Subsystem: Body rates (= 4)          */ ssRates           = 4,
+    /** Subsystem: Velocities (= 8)          */ ssVelocities      = 8,
+    /** Subsystem: Forces (= 16)             */ ssForces          = 16,
+    /** Subsystem: Moments (= 32)            */ ssMoments         = 32,
+    /** Subsystem: Atmosphere (= 64)         */ ssAtmosphere      = 64,
+    /** Subsystem: Mass Properties (= 128)   */ ssMassProps       = 128,
+    /** Subsystem: Coefficients (= 256)      */ ssCoefficients    = 256,
+    /** Subsystem: Position (= 512)          */ ssPosition        = 512,
+    /** Subsystem: Ground Reactions (= 1024) */ ssGroundReactions = 1024,
+    /** Subsystem: FCS (= 2048)              */ ssFCS             = 2048,
+    /** Subsystem: Propulsion (= 4096)       */ ssPropulsion      = 4096
+  } subsystems;
 
 private:
   bool sFirstPass, dFirstPass, enabled;
index 57fc8aacea8c7e6a6251d6b7d1f905164455fc0f..299f225a34c812372f7f4ee88063e540937e1241 100644 (file)
@@ -68,7 +68,7 @@ FGPiston::FGPiston(FGFDMExec* exec, FGConfigFile* Eng_cfg)
 
   Name = Eng_cfg->GetValue("NAME");
   Eng_cfg->GetNextConfigLine();
-  while (Eng_cfg->GetValue() != "/FG_PISTON") {
+  while (Eng_cfg->GetValue() != string("/FG_PISTON")) {
     *Eng_cfg >> token;
     if      (token == "MINMP") *Eng_cfg >> MinManifoldPressure_inHg;
     else if (token == "MAXMP") *Eng_cfg >> MaxManifoldPressure_inHg;
@@ -156,9 +156,9 @@ FGPiston::~FGPiston()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGPiston::Calculate(float PowerRequired)
+double FGPiston::Calculate(double PowerRequired)
 {
-  float h,EngineMaxPower;
+  double h,EngineMaxPower;
 
         // FIXME: calculate from actual fuel flow
   ConsumeFuel();
@@ -328,10 +328,10 @@ void FGPiston::doManifoldPressure(void)
 void FGPiston::doAirFlow(void)
 {
   rho_air = p_amb / (R_air * T_amb);
-  float rho_air_manifold = rho_air * ManifoldPressure_inHg / 29.6;
-  float displacement_SI = Displacement * CONVERT_CUBIC_INCHES_TO_METERS_CUBED;
-  float swept_volume = (displacement_SI * (RPM/60)) / 2;
-  float v_dot_air = swept_volume * volumetric_efficiency;
+  double rho_air_manifold = rho_air * ManifoldPressure_inHg / 29.6;
+  double displacement_SI = Displacement * CONVERT_CUBIC_INCHES_TO_METERS_CUBED;
+  double swept_volume = (displacement_SI * (RPM/60)) / 2;
+  double v_dot_air = swept_volume * volumetric_efficiency;
   m_dot_air = v_dot_air * rho_air_manifold;
 }
 
@@ -346,7 +346,7 @@ void FGPiston::doAirFlow(void)
 
 void FGPiston::doFuelFlow(void)
 {
-  float thi_sea_level = 1.3 * Mixture;
+  double thi_sea_level = 1.3 * Mixture;
   equivalence_ratio = thi_sea_level * p_amb_sea_level / p_amb;
   m_dot_fuel = m_dot_air / 14.7 * equivalence_ratio;
 }
@@ -368,15 +368,15 @@ void FGPiston::doFuelFlow(void)
 
 void FGPiston::doEnginePower(void)
 {
-  float True_ManifoldPressure_inHg = ManifoldPressure_inHg * p_amb / p_amb_sea_level;
-  float ManXRPM = True_ManifoldPressure_inHg * RPM;
+  double True_ManifoldPressure_inHg = ManifoldPressure_inHg * p_amb / p_amb_sea_level;
+  double ManXRPM = True_ManifoldPressure_inHg * RPM;
         // FIXME: this needs to be generalized
   Percentage_Power = (6e-9 * ManXRPM * ManXRPM) + (8e-4 * ManXRPM) - 1.0;
-  float T_amb_degF = (T_amb * 1.8) - 459.67;
-  float T_amb_sea_lev_degF = (288 * 1.8) - 459.67; 
+  double T_amb_degF = (T_amb * 1.8) - 459.67;
+  double T_amb_sea_lev_degF = (288 * 1.8) - 459.67; 
   Percentage_Power =
     Percentage_Power + ((T_amb_sea_lev_degF - T_amb_degF) * 7 /120);
-  float Percentage_of_best_power_mixture_power =
+  double Percentage_of_best_power_mixture_power =
     Power_Mixture_Correlation->GetValue(14.7 / equivalence_ratio);
   Percentage_Power =
     Percentage_Power * Percentage_of_best_power_mixture_power / 100.0;
@@ -417,10 +417,10 @@ void FGPiston::doEnginePower(void)
 void FGPiston::doEGT(void)
 {
   combustion_efficiency = Lookup_Combustion_Efficiency->GetValue(equivalence_ratio);
-  float enthalpy_exhaust = m_dot_fuel * calorific_value_fuel * 
+  double enthalpy_exhaust = m_dot_fuel * calorific_value_fuel * 
     combustion_efficiency * 0.33;
-  float heat_capacity_exhaust = (Cp_air * m_dot_air) + (Cp_fuel * m_dot_fuel);
-  float delta_T_exhaust = enthalpy_exhaust / heat_capacity_exhaust;
+  double heat_capacity_exhaust = (Cp_air * m_dot_air) + (Cp_fuel * m_dot_fuel);
+  double delta_T_exhaust = enthalpy_exhaust / heat_capacity_exhaust;
   ExhaustGasTemp_degK = T_amb + delta_T_exhaust;
   ExhaustGasTemp_degK *= 0.444 + ((0.544 - 0.444) * Percentage_Power / 100.0);
 }
@@ -437,26 +437,26 @@ void FGPiston::doEGT(void)
 
 void FGPiston::doCHT(void)
 {
-  float h1 = -95.0;
-  float h2 = -3.95;
-  float h3 = -0.05;
-
-  float arbitary_area = 1.0;
-  float CpCylinderHead = 800.0;
-  float MassCylinderHead = 8.0;
-
-  float temperature_difference = CylinderHeadTemp_degK - T_amb;
-  float v_apparent = IAS * 0.5144444;
-  float v_dot_cooling_air = arbitary_area * v_apparent;
-  float m_dot_cooling_air = v_dot_cooling_air * rho_air;
-  float dqdt_from_combustion = 
+  double h1 = -95.0;
+  double h2 = -3.95;
+  double h3 = -0.05;
+
+  double arbitary_area = 1.0;
+  double CpCylinderHead = 800.0;
+  double MassCylinderHead = 8.0;
+
+  double temperature_difference = CylinderHeadTemp_degK - T_amb;
+  double v_apparent = IAS * 0.5144444;
+  double v_dot_cooling_air = arbitary_area * v_apparent;
+  double m_dot_cooling_air = v_dot_cooling_air * rho_air;
+  double dqdt_from_combustion = 
     m_dot_fuel * calorific_value_fuel * combustion_efficiency * 0.33;
-  float dqdt_forced = (h2 * m_dot_cooling_air * temperature_difference) + 
+  double dqdt_forced = (h2 * m_dot_cooling_air * temperature_difference) + 
     (h3 * RPM * temperature_difference);
-  float dqdt_free = h1 * temperature_difference;
-  float dqdt_cylinder_head = dqdt_from_combustion + dqdt_forced + dqdt_free;
+  double dqdt_free = h1 * temperature_difference;
+  double dqdt_cylinder_head = dqdt_from_combustion + dqdt_forced + dqdt_free;
     
-  float HeatCapacityCylinderHead = CpCylinderHead * MassCylinderHead;
+  double HeatCapacityCylinderHead = CpCylinderHead * MassCylinderHead;
     
   CylinderHeadTemp_degK = dqdt_cylinder_head / HeatCapacityCylinderHead;
 }
@@ -472,9 +472,9 @@ void FGPiston::doCHT(void)
 
 void FGPiston::doOilTemperature(void)
 {
-  float idle_percentage_power = 2.3;        // approximately
-  float target_oil_temp;        // Steady state oil temp at the current engine conditions
-  float time_constant;          // The time constant for the differential equation
+  double idle_percentage_power = 2.3;        // approximately
+  double target_oil_temp;        // Steady state oil temp at the current engine conditions
+  double time_constant;          // The time constant for the differential equation
 
   if (Running) {
     target_oil_temp = 363;
@@ -488,7 +488,7 @@ void FGPiston::doOilTemperature(void)
                            // that oil is no longer getting circulated
   }
 
-  float dOilTempdt = (target_oil_temp - OilTemp_degK) / time_constant;
+  double dOilTempdt = (target_oil_temp - OilTemp_degK) / time_constant;
 
   OilTemp_degK += (dOilTempdt * dt);
 }
@@ -504,11 +504,11 @@ void FGPiston::doOilTemperature(void)
 
 void FGPiston::doOilPressure(void)
 {
-  float Oil_Press_Relief_Valve = 60; // FIXME: may vary by engine
-  float Oil_Press_RPM_Max = 1800;    // FIXME: may vary by engine
-  float Design_Oil_Temp = 85;        // FIXME: may vary by engine
+  double Oil_Press_Relief_Valve = 60; // FIXME: may vary by engine
+  double Oil_Press_RPM_Max = 1800;    // FIXME: may vary by engine
+  double Design_Oil_Temp = 85;        // FIXME: may vary by engine
              // FIXME: WRONG!!! (85 degK???)
-  float Oil_Viscosity_Index = 0.25;
+  double Oil_Viscosity_Index = 0.25;
 
   OilPressure_psi = (Oil_Press_Relief_Valve / Oil_Press_RPM_Max) * RPM;
 
index a3a757b71af3fdf79e93b7a1f44b18c460322653..9e2dc476a1fdda57e040bd17a7b511d245c24fae 100644 (file)
@@ -84,18 +84,18 @@ public:
   /// Destructor
   ~FGPiston();
 
-  float Calculate(float PowerRequired);
-  float GetPowerAvailable(void) {return PowerAvailable;}
+  double Calculate(double PowerRequired);
+  double GetPowerAvailable(void) {return PowerAvailable;}
 
 private:
-  float BrakeHorsePower;
-  float SpeedSlope;
-  float SpeedIntercept;
-  float AltitudeSlope;
-  float PowerAvailable;
+  double BrakeHorsePower;
+  double SpeedSlope;
+  double SpeedIntercept;
+  double AltitudeSlope;
+  double PowerAvailable;
 
   // timestep
-  float dt;
+  double dt;
 
   void doEngineStartup(void);
   void doManifoldPressure(void);
@@ -110,13 +110,13 @@ private:
   //
   // constants
   //
-  const float CONVERT_CUBIC_INCHES_TO_METERS_CUBED;
+  const double 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
+  const double R_air;
+  const double rho_fuel;    // kg/m^3
+  const double calorific_value_fuel;  // W/Kg (approximate)
+  const double Cp_air;      // J/KgK
+  const double Cp_fuel;     // J/KgK
 
   FGTable *Lookup_Combustion_Efficiency;
   FGTable *Power_Mixture_Correlation;
@@ -124,35 +124,35 @@ private:
   //
   // 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
+  double MinManifoldPressure_inHg; // Inches Hg
+  double MaxManifoldPressure_inHg; // Inches Hg
+  double Displacement;             // cubic inches
+  double MaxHP;                    // horsepower
+  double Cycles;                   // cycles/power stroke
+  double 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
+  double p_amb;              // Pascals
+  double p_amb_sea_level;    // Pascals
+  double T_amb;              // degrees Kelvin
+  double RPM;                // revolutions per minute
+  double 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;
+  double rho_air;
+  double volumetric_efficiency;
+  double m_dot_air;
+  double equivalence_ratio;
+  double m_dot_fuel;
+  double Percentage_Power;
+  double HP;
+  double combustion_efficiency;
 
   void Debug(void);
 };
index 8e7bf1e96ca359ab1ff2894422ba804104f1ea71..33128b19b6915b07e6f6d7c8983d13f406841f63 100644 (file)
@@ -91,7 +91,7 @@ static const char *IdHdr = ID_POSITION;
 CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-extern float globalTriNormal[3];
+extern double globalTriNormal[3];
 extern double globalSceneryAltitude;
 extern double globalSeaLevelRadius;
 
index 0c5ba2794feabeb495c0d670be4952e4128fc22d..095018a4fe6ed55a69ba2dab0b8b0960c64a7413 100644 (file)
@@ -104,10 +104,10 @@ public:
   inline FGColumnVector3& GetRunwayNormal(void) { return vRunwayNormal; }
   
   inline double GetGamma(void) { return gamma; }
-  inline void SetGamma(float tt) { gamma = tt; }
+  inline void SetGamma(double tt) { gamma = tt; }
   inline double GetHOverB(void) { return hoverb; }
   void SetvVel(const FGColumnVector3& v) { vVel = v; }
-  void SetLatitude(float tt) { Latitude = tt; }
+  void SetLatitude(double tt) { Latitude = tt; }
   void SetLongitude(double tt) { Longitude = tt; }
   void Seth(double tt);
   void SetRunwayRadius(double tt) { RunwayRadius = tt; }
@@ -127,13 +127,13 @@ private:
   double LatitudeDot, LongitudeDot, RadiusDot;
   double lastLatitudeDot, lastLongitudeDot, lastRadiusDot;
   double Longitude, Latitude;
-  float dt;
+  double dt;
   double RunwayRadius;
   double DistanceAGL;
   double SeaLevelRadius;
   double gamma;
   double Vt, Vground;
-  float hoverb,b;
+  double hoverb,b;
 
   double psigt;
 
index 477f3c4f05f9c64805d86784e44f8bf47a7c0340..d0e015ed74e8ffc53cf57aa27b16ac235e428199 100644 (file)
@@ -54,7 +54,7 @@ FGPropeller::FGPropeller(FGFDMExec* exec, FGConfigFile* Prop_cfg) : FGThruster(e
 
   Name = Prop_cfg->GetValue("NAME");
   Prop_cfg->GetNextConfigLine();
-  while (Prop_cfg->GetValue() != "/FG_PROPELLER") {
+  while (Prop_cfg->GetValue() != string("/FG_PROPELLER")) {
     *Prop_cfg >> token;
     if (token == "IXX") {
       *Prop_cfg >> Ixx;
@@ -135,13 +135,13 @@ FGPropeller::~FGPropeller()
 //
 // Because RPM could be zero, we need to be creative about what RPM is stated as.
 
-float FGPropeller::Calculate(float PowerAvailable)
+double FGPropeller::Calculate(double PowerAvailable)
 {
-  float J, C_Thrust, omega;
-  float Vel = (fdmex->GetTranslation()->GetvAero())(1);
-  float rho = fdmex->GetAtmosphere()->GetDensity();
-  float RPS = RPM/60.0;
-  float alpha, beta;
+  double J, C_Thrust, omega;
+  double Vel = (fdmex->GetTranslation()->GetvAero())(1);
+  double rho = fdmex->GetAtmosphere()->GetDensity();
+  double RPS = RPM/60.0;
+  double alpha, beta;
 
   if (RPM > 0.10) {
     J = Vel / (Diameter * RPM / 60.0);
@@ -188,14 +188,14 @@ float FGPropeller::Calculate(float PowerAvailable)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGPropeller::GetPowerRequired(void)
+double FGPropeller::GetPowerRequired(void)
 {
   if (RPM <= 0.10) return 0.0; // If the prop ain't turnin', the fuel ain't burnin'.
 
-  float cPReq, RPS = RPM / 60.0;
+  double cPReq, RPS = RPM / 60.0;
 
-  float J = (fdmex->GetTranslation()->GetvAero())(1) / (Diameter * RPS);
-  float rho = fdmex->GetAtmosphere()->GetDensity();
+  double J = (fdmex->GetTranslation()->GetvAero())(1) / (Diameter * RPS);
+  double rho = fdmex->GetAtmosphere()->GetDensity();
 
   if (MaxPitch == MinPitch) { // Fixed pitch prop
     cPReq = cPower->GetValue(J);
index e5c130a4418bef2b819c0c103c90d249d106f766..ff65142e3131b2200354c57d9aca474e78455e50 100644 (file)
@@ -104,7 +104,7 @@ public:
       equation for rotational acceleration "a": a = Q/I , where Q is Torque and
       I is moment of inertia for the propeller.
       @param rpm the rotational velocity of the propeller */
-  void SetRPM(float rpm) {RPM = rpm;}
+  void SetRPM(double rpm) {RPM = rpm;}
 
   /** This commands the pitch of the blade to change to the value supplied.
       This call is meant to be issued either from the cockpit or by the flight
@@ -114,28 +114,28 @@ public:
       indices to the power, thrust, and efficiency tables for variable-pitch
       propellers.
       @param pitch the pitch of the blade in degrees. */
-  void SetPitch(float pitch) {Pitch = pitch;}
+  void SetPitch(double pitch) {Pitch = pitch;}
   
   void SetPFactor(double pf) {P_Factor = pf;}
   
   void SetSense(double s) { Sense = s;}
 
   /// Retrieves the pitch of the propeller in degrees.
-  float GetPitch(void)         { return Pitch;         }
+  double GetPitch(void)         { return Pitch;         }
   
   /// Retrieves the RPMs of the propeller
-  float GetRPM(void)           { return RPM;           }
+  double GetRPM(void)           { return RPM;           }
   
   /// Retrieves the propeller moment of inertia
-  float GetIxx(void)           { return Ixx;           }
+  double GetIxx(void)           { return Ixx;           }
   
   /// Retrieves the Torque in foot-pounds (Don't you love the English system?)
-  float GetTorque(void)        { return Torque;        }
+  double GetTorque(void)        { return Torque;        }
   
   /** Retrieves the power required (or "absorbed") by the propeller -
       i.e. the power required to keep spinning the propeller at the current
       velocity, air density,  and rotational rate. */
-  float GetPowerRequired(void);
+  double GetPowerRequired(void);
   
   /** Calculates and returns the thrust produced by this propeller.
       Given the excess power available from the engine (in foot-pounds), the thrust is
@@ -146,19 +146,19 @@ public:
       accelerate the prop. It could be negative, dictating that the propeller
       would be slowed.
                  @return the thrust in pounds */
-  float Calculate(float PowerAvailable);
+  double Calculate(double PowerAvailable);
 
 private:
   int   numBlades;
-  float RPM;
-  float Ixx;
-  float Diameter;
-  float MaxPitch;
-  float MinPitch;
-  float P_Factor;
-  float Sense;
-  float Pitch;
-  float Torque;
+  double RPM;
+  double Ixx;
+  double Diameter;
+  double MaxPitch;
+  double MinPitch;
+  double P_Factor;
+  double Sense;
+  double Pitch;
+  double Torque;
   FGTable *Efficiency;
   FGTable *cThrust;
   FGTable *cPower;
index e8830e12e6d035ed299341329ba3fa85d7487e40..89b9dd86a839ee6798dafe47ddd24c0cc43eb879 100644 (file)
@@ -87,8 +87,9 @@ FGPropulsion::~FGPropulsion()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-bool FGPropulsion::Run(void) {
-  float PowerAvailable;
+bool FGPropulsion::Run(void)
+{
+  double PowerAvailable;
   dt = State->Getdt();
 
   Forces->InitMatrix();
@@ -102,7 +103,6 @@ bool FGPropulsion::Run(void) {
       *Forces  += Thrusters[i]->GetBodyForces();  // sum body frame forces
       *Moments += Thrusters[i]->GetMoments();     // sum body frame moments
     }
-
     return false;
   } else {
     return true;
@@ -112,8 +112,8 @@ bool FGPropulsion::Run(void) {
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 bool FGPropulsion::GetSteadyState(void) {
-  float PowerAvailable;
-  float currentThrust = 0, lastThrust=-1;
+  double PowerAvailable;
+  double currentThrust = 0, lastThrust=-1;
   dt = State->Getdt();
   int steady_count,j=0;
   bool steady=false;
@@ -153,7 +153,7 @@ bool FGPropulsion::GetSteadyState(void) {
 
 
 bool FGPropulsion::ICEngineStart(void) {
-  float PowerAvailable;
+  double PowerAvailable;
   int j;
   dt = State->Getdt();
 
@@ -198,7 +198,7 @@ bool FGPropulsion::Load(FGConfigFile* AC_cfg)
 
   AC_cfg->GetNextConfigLine();
 
-  while ((token = AC_cfg->GetValue()) != "/PROPULSION") {
+  while ((token = AC_cfg->GetValue()) != string("/PROPULSION")) {
 
     if (token == "AC_ENGINE") {                   // ============ READING ENGINES
 
@@ -230,7 +230,7 @@ bool FGPropulsion::Load(FGConfigFile* AC_cfg)
         }
 
         AC_cfg->GetNextConfigLine();
-        while ((token = AC_cfg->GetValue()) != "/AC_ENGINE") {
+        while ((token = AC_cfg->GetValue()) != string("/AC_ENGINE")) {
           *AC_cfg >> token;
           if      (token == "XLOC")  { *AC_cfg >> xLoc; }
           else if (token == "YLOC")  { *AC_cfg >> yLoc; }
@@ -299,7 +299,7 @@ bool FGPropulsion::Load(FGConfigFile* AC_cfg)
         }
 
         AC_cfg->GetNextConfigLine();
-        while ((token = AC_cfg->GetValue()) != "/AC_THRUSTER") {
+        while ((token = AC_cfg->GetValue()) != string("/AC_THRUSTER")) {
           *AC_cfg >> token;
           if (token == "XLOC") *AC_cfg >> xLoc;
           else if (token == "YLOC") *AC_cfg >> yLoc;
@@ -453,9 +453,9 @@ FGColumnVector3& FGPropulsion::GetTanksCG(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGPropulsion::GetTanksWeight(void)
+double FGPropulsion::GetTanksWeight(void)
 {
-  float Tw = 0.0;
+  double Tw = 0.0;
 
   iTank = Tanks.begin();
   while (iTank < Tanks.end()) {
@@ -467,9 +467,9 @@ float FGPropulsion::GetTanksWeight(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGPropulsion::GetTanksIxx(const FGColumnVector3& vXYZcg)
+double FGPropulsion::GetTanksIxx(const FGColumnVector3& vXYZcg)
 {
-  float I = 0.0;
+  double I = 0.0;
   iTank = Tanks.begin();
   while (iTank < Tanks.end()) {
     I += ((*iTank)->GetX() - vXYZcg(eX))*((*iTank)->GetX() - vXYZcg(eX)) * (*iTank)->GetContents()/(144.0*Inertial->gravity());
@@ -480,9 +480,9 @@ float FGPropulsion::GetTanksIxx(const FGColumnVector3& vXYZcg)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGPropulsion::GetTanksIyy(const FGColumnVector3& vXYZcg)
+double FGPropulsion::GetTanksIyy(const FGColumnVector3& vXYZcg)
 {
-  float I = 0.0;
+  double I = 0.0;
   iTank = Tanks.begin();
   while (iTank < Tanks.end()) {
     I += ((*iTank)->GetY() - vXYZcg(eY))*((*iTank)->GetY() - vXYZcg(eY)) * (*iTank)->GetContents()/(144.0*Inertial->gravity());
@@ -493,9 +493,9 @@ float FGPropulsion::GetTanksIyy(const FGColumnVector3& vXYZcg)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGPropulsion::GetTanksIzz(const FGColumnVector3& vXYZcg)
+double FGPropulsion::GetTanksIzz(const FGColumnVector3& vXYZcg)
 {
-  float I = 0.0;
+  double I = 0.0;
   iTank = Tanks.begin();
   while (iTank < Tanks.end()) {
     I += ((*iTank)->GetZ() - vXYZcg(eZ))*((*iTank)->GetZ() - vXYZcg(eZ)) * (*iTank)->GetContents()/(144.0*Inertial->gravity());
@@ -506,9 +506,9 @@ float FGPropulsion::GetTanksIzz(const FGColumnVector3& vXYZcg)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGPropulsion::GetTanksIxz(const FGColumnVector3& vXYZcg)
+double FGPropulsion::GetTanksIxz(const FGColumnVector3& vXYZcg)
 {
-  float I = 0.0;
+  double I = 0.0;
   iTank = Tanks.begin();
   while (iTank < Tanks.end()) {
     I += ((*iTank)->GetX() - vXYZcg(eX))*((*iTank)->GetZ() - vXYZcg(eZ)) * (*iTank)->GetContents()/(144.0*Inertial->gravity());
@@ -519,9 +519,9 @@ float FGPropulsion::GetTanksIxz(const FGColumnVector3& vXYZcg)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGPropulsion::GetTanksIxy(const FGColumnVector3& vXYZcg)
+double FGPropulsion::GetTanksIxy(const FGColumnVector3& vXYZcg)
 {
-  float I = 0.0;
+  double I = 0.0;
   iTank = Tanks.begin();
   while (iTank != Tanks.end()) {
     I += ((*iTank)->GetX() - vXYZcg(eX))*((*iTank)->GetY() - vXYZcg(eY)) * (*iTank)->GetContents()/(144.0*Inertial->gravity());
index 4070128fc0e8047a9c350e52e4a7d0a86acf8dcd..be3c3e61a069c03812132c7f79e46fcfbabc97d1 100644 (file)
@@ -169,18 +169,18 @@ public:
   string GetPropulsionValues(void);
 
   inline FGColumnVector3& GetForces(void)  {return *Forces; }
-  inline float GetForces(int n) { return (*Forces)(n);}
+  inline double GetForces(int n) { return (*Forces)(n);}
   inline FGColumnVector3& GetMoments(void) {return *Moments;}
-  inline float GetMoments(int n) {return (*Moments)(n);}
+  inline double GetMoments(int n) {return (*Moments)(n);}
   
   FGColumnVector3& GetTanksCG(void);
-  float GetTanksWeight(void);
+  double GetTanksWeight(void);
 
-  float GetTanksIxx(const FGColumnVector3& vXYZcg);
-  float GetTanksIyy(const FGColumnVector3& vXYZcg);
-  float GetTanksIzz(const FGColumnVector3& vXYZcg);
-  float GetTanksIxz(const FGColumnVector3& vXYZcg);
-  float GetTanksIxy(const FGColumnVector3& vXYZcg);
+  double GetTanksIxx(const FGColumnVector3& vXYZcg);
+  double GetTanksIyy(const FGColumnVector3& vXYZcg);
+  double GetTanksIzz(const FGColumnVector3& vXYZcg);
+  double GetTanksIxz(const FGColumnVector3& vXYZcg);
+  double GetTanksIxy(const FGColumnVector3& vXYZcg);
 
 private:
   vector <FGEngine*>   Engines;
@@ -194,7 +194,7 @@ private:
   unsigned int numEngines;
   unsigned int numTanks;
   unsigned int numThrusters;
-  float dt;
+  double dt;
   FGColumnVector3 *Forces;
   FGColumnVector3 *Moments;
   FGColumnVector3 vXYZtank;
index 416cbbfb84b2907b1a6347e1153e879d19818e4d..e805849ffad0019eeb9cb62aae61cb3163a7ab3a 100644 (file)
@@ -54,7 +54,7 @@ FGRocket::FGRocket(FGFDMExec* exec, FGConfigFile* Eng_cfg) : FGEngine(exec)
   Name = Eng_cfg->GetValue("NAME");
   Eng_cfg->GetNextConfigLine();
 
-  while (Eng_cfg->GetValue() != "/FG_ROCKET") {
+  while (Eng_cfg->GetValue() != string("/FG_ROCKET")) {
     *Eng_cfg >> token;
     if      (token == "SHR")           *Eng_cfg >> SHR;
     else if (token == "MAX_PC")        *Eng_cfg >> maxPC;
@@ -97,9 +97,9 @@ FGRocket::~FGRocket()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGRocket::Calculate(float pe)
+double FGRocket::Calculate(double pe)
 {
-  float Cf;
+  double Cf;
 
   ConsumeFuel();
 
@@ -111,7 +111,7 @@ float FGRocket::Calculate(float pe)
     PC = 0.0;
   } else {
     PctPower = Throttle / MaxThrottle;
-    PC = maxPC*PctPower * (1.0 + Variance * ((float)rand()/(float)RAND_MAX - 0.5));
+    PC = maxPC*PctPower * (1.0 + Variance * ((double)rand()/(double)RAND_MAX - 0.5));
     Cf = sqrt(kFactor*(1 - pow(pe/(PC), (SHR-1)/SHR)));
     Flameout = false;
   }
index db4c2700fac3c550e3bc7ec47d128407fd5e15f5..35b49de9cd13e0a63a994fd1e609075e9cc5dc96 100644 (file)
@@ -116,19 +116,19 @@ public:
       coefficient times the chamber pressure.
       @param pe nozzle exit pressure
       @return thrust coefficient times chamber pressure */
-  float Calculate(float pe);
+  double Calculate(double pe);
   
   /** Gets the chamber pressure.
       @return chamber pressure in psf. */
-  float GetChamberPressure(void) {return PC;}
+  double GetChamberPressure(void) {return PC;}
 
 private:
-  float SHR;
-  float maxPC;
-  float propEff;
-  float kFactor;
-  float Variance;
-  float PC;
+  double SHR;
+  double maxPC;
+  double propEff;
+  double kFactor;
+  double Variance;
+  double PC;
   void Debug(void);
 };
 
index dd928d555d6f63e271dfe6a24345d014389255a0..1bf51da3fd4b4cf1b4f71ade4e8b5d2366519bd1 100644 (file)
@@ -101,8 +101,8 @@ FGRotation::~FGRotation()
 
 bool FGRotation::Run(void)
 {
-  float L2, N1;
-  float tTheta;
+  double L2, N1;
+  double tTheta;
 
   if (!FGModel::Run()) {
     GetState();
index 410f7296e14e1ccb9b07d143145a403c266f4f92..bce0d18f41a5ae4d78c6aa279b107b04ac04d883 100644 (file)
@@ -87,27 +87,27 @@ public:
   bool Run(void);
 
   inline FGColumnVector3& GetPQR(void) {return vPQR;}
-  inline float GetPQR(int axis) {return vPQR(axis);}
+  inline double GetPQR(int axis) {return vPQR(axis);}
   inline FGColumnVector3& GetPQRdot(void) {return vPQRdot;}
-  inline float GetPQRdot(int idx) {return vPQRdot(idx);}
+  inline double GetPQRdot(int idx) {return vPQRdot(idx);}
   inline FGColumnVector3& GetEuler(void) {return vEuler;}
-  inline float GetEuler(int axis) {return vEuler(axis);}
+  inline double GetEuler(int axis) {return vEuler(axis);}
   inline FGColumnVector3& GetEulerRates(void) { return vEulerRates; }
-  inline float GetEulerRates(int axis) { return vEulerRates(axis); }
+  inline double GetEulerRates(int axis) { return vEulerRates(axis); }
   inline void SetPQR(FGColumnVector3 tt) {vPQR = tt;}
   inline void SetEuler(FGColumnVector3 tt) {vEuler = tt;}
   
-  inline float Getphi(void) {return vEuler(1);}
-  inline float Gettht(void) {return vEuler(2);}
-  inline float Getpsi(void) {return vEuler(3);}
+  inline double Getphi(void) {return vEuler(1);}
+  inline double Gettht(void) {return vEuler(2);}
+  inline double Getpsi(void) {return vEuler(3);}
   
-  inline float GetCosphi(void) {return cPhi;}
-  inline float GetCostht(void) {return cTht;}
-  inline float GetCospsi(void) {return cPsi;}
+  inline double GetCosphi(void) {return cPhi;}
+  inline double GetCostht(void) {return cTht;}
+  inline double GetCospsi(void) {return cPsi;}
 
-  inline float GetSinphi(void) {return sPhi;}
-  inline float GetSintht(void) {return sTht;}
-  inline float GetSinpsi(void) {return sPsi;}
+  inline double GetSinphi(void) {return sPhi;}
+  inline double GetSintht(void) {return sTht;}
+  inline double GetSinpsi(void) {return sPsi;}
 
 private:
   FGColumnVector3 vPQR;
@@ -117,12 +117,12 @@ private:
   FGColumnVector3 vEulerRates;
   FGColumnVector3 vlastPQRdot;
   
-  float cTht,sTht;
-  float cPhi,sPhi;
-  float cPsi,sPsi;
+  double cTht,sTht;
+  double cPhi,sPhi;
+  double cPsi,sPsi;
   
-  float Ixx, Iyy, Izz, Ixz;
-  float dt;
+  double Ixx, Iyy, Izz, Ixz;
+  double dt;
 
   void GetState(void);
 
index a80f04ad30c475b6b754071f1d449fb6a28d7e1d..51bc5d49178b423b1fd2790a7bce91f9ebc9d258 100644 (file)
@@ -59,7 +59,7 @@ FGRotor::~FGRotor()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGRotor::Calculate(float PowerAvailable)
+double FGRotor::Calculate(double PowerAvailable)
 {
   return 0.0;
 }
index e86d11c1783504c250e3628d63ec2ecf7ba00019..a13408408d4e5435b50a1c1a6403ed526745e9e8 100644 (file)
@@ -56,7 +56,7 @@ public:
   FGRotor(FGFDMExec *FDMExec);
   ~FGRotor();
 
-  float Calculate(float);
+  double Calculate(double);
 
 private:
   void Debug(void);
index 2c673bca96243795d65ef635ffd9fa5acd3e0ec6..7a63758fe7d4199c77052657c772796bf8278db3 100644 (file)
@@ -166,8 +166,8 @@ FGState::~FGState()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGState::GetParameter(eParam val_idx) {
-  float scratch;
+double FGState::GetParameter(eParam val_idx) {
+  double scratch;
   
   switch(val_idx) {
   case FG_TIME:
@@ -296,7 +296,7 @@ float FGState::GetParameter(eParam val_idx) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGState::GetParameter(string val_string) {
+double FGState::GetParameter(string val_string) {
   return GetParameter(coeffdef[val_string]);
 }
 
@@ -308,7 +308,7 @@ eParam FGState::GetParameterIndex(string val_string) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGState::SetParameter(eParam val_idx, float val) {
+void FGState::SetParameter(eParam val_idx, double val) {
   switch(val_idx) {
   case FG_ELEVATOR_POS:
     FCS->SetDePos(val);
@@ -403,10 +403,10 @@ bool FGState::Reset(string path, string acname, string fname)
   string resetDef;
   string token="";
 
-  float U, V, W;
-  float phi, tht, psi;
-  float latitude, longitude, h;
-  float wdir, wmag, wnorth, weast;
+  double U, V, W;
+  double phi, tht, psi;
+  double latitude, longitude, h;
+  double wdir, wmag, wnorth, weast;
 
 # ifndef macintosh
   resetDef = path + "/" + acname + "/" + fname + ".xml";
@@ -462,13 +462,13 @@ bool FGState::Reset(string path, string acname, string fname)
 // Initialize: Assume all angles GIVEN IN RADIANS !!
 //
 
-void FGState::Initialize(float U, float V, float W,
-                         float phi, float tht, float psi,
-                         float Latitude, float Longitude, float H,
-                         float wnorth, float weast, float wdown)
+void FGState::Initialize(double U, double V, double W,
+                         double phi, double tht, double psi,
+                         double Latitude, double Longitude, double H,
+                         double wnorth, double weast, double wdown)
 {
-  float alpha, beta;
-  float qbar, Vt;
+  double alpha, beta;
+  double qbar, Vt;
   FGColumnVector3 vAero;
 
   Position->SetLatitude(Latitude);
@@ -516,10 +516,10 @@ void FGState::Initialize(float U, float V, float W,
 
 void FGState::Initialize(FGInitialCondition *FGIC) {
 
-  float tht,psi,phi;
-  float U, V, W, h;
-  float latitude, longitude;
-  float wnorth,weast, wdown;
+  double tht,psi,phi;
+  double U, V, W, h;
+  double latitude, longitude;
+  double wnorth,weast, wdown;
   
   latitude = FGIC->GetLatitudeRadIC();
   longitude = FGIC->GetLongitudeRadIC();
@@ -567,14 +567,14 @@ bool FGState::StoreData(string fname) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGState::InitMatrices(float phi, float tht, float psi) {
-  float thtd2, psid2, phid2;
-  float Sthtd2, Spsid2, Sphid2;
-  float Cthtd2, Cpsid2, Cphid2;
-  float Cphid2Cthtd2;
-  float Cphid2Sthtd2;
-  float Sphid2Sthtd2;
-  float Sphid2Cthtd2;
+void FGState::InitMatrices(double phi, double tht, double psi) {
+  double thtd2, psid2, phid2;
+  double Sthtd2, Spsid2, Sphid2;
+  double Cthtd2, Cpsid2, Cphid2;
+  double Cphid2Cthtd2;
+  double Cphid2Sthtd2;
+  double Sphid2Sthtd2;
+  double Sphid2Cthtd2;
 
   thtd2 = tht/2.0;
   psid2 = psi/2.0;
@@ -604,9 +604,9 @@ void FGState::InitMatrices(float phi, float tht, float psi) {
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 void FGState::CalcMatrices(void) {
-  float Q0Q0, Q1Q1, Q2Q2, Q3Q3;
-  float Q0Q1, Q0Q2, Q0Q3, Q1Q2;
-  float Q1Q3, Q2Q3;
+  double Q0Q0, Q1Q1, Q2Q2, Q3Q3;
+  double Q0Q1, Q0Q2, Q0Q3, Q1Q2;
+  double Q1Q3, Q2Q3;
 
   Q0Q0 = vQtrn(1)*vQtrn(1);
   Q1Q1 = vQtrn(2)*vQtrn(2);
@@ -664,9 +664,12 @@ FGColumnVector3& FGState::CalcEuler(void) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGMatrix33& FGState::GetTs2b(float alpha, float beta)
+FGMatrix33& FGState::GetTs2b(void)
 {
-  float ca, cb, sa, sb;
+  double ca, cb, sa, sb;
+
+  double alpha = Translation->Getalpha();
+  double beta  = Translation->Getbeta();
 
   ca = cos(alpha);
   sa = sin(alpha);
index 240eeb00d44ebb5e1942033750f38a24fd0b388d..1d337dae32eaf2618aeb26abab7efc53855bfb96 100644 (file)
@@ -147,18 +147,18 @@ public:
       @param weast eastward velocity in feet per second
       @param wdown downward velocity in feet per second
       */
-  void Initialize(float U,
-                  float V,
-                  float W,
-                  float lat,
-                  float lon,
-                  float phi,
-                  float tht,
-                  float psi,
-                  float h,
-                  float wnorth,
-                  float weast,
-                  float wdown);
+  void Initialize(double U,
+                  double V,
+                  double W,
+                  double lat,
+                  double lon,
+                  double phi,
+                  double tht,
+                  double psi,
+                  double h,
+                  double wnorth,
+                  double weast,
+                  double wdown);
 
   /** Initializes the simulation state based on parameters from an Initial Conditions object.
       @param FGIC pointer to an initial conditions object.
@@ -173,12 +173,12 @@ public:
   bool StoreData(string filename);
 
   /// returns the speed of sound in feet per second.
-  inline float Geta(void) { return a; }
+  inline double Geta(void) { return a; }
 
   /// Returns the simulation time in seconds.
-  inline float Getsim_time(void) { return sim_time; }
+  inline double Getsim_time(void) { return sim_time; }
   /// Returns the simulation delta T.
-  inline float Getdt(void) { return dt; }
+  inline double Getdt(void) { return dt; }
 
   /// Suspends the simulation and sets the delta T to zero.
   inline void Suspend(void) {saved_dt = dt; dt = 0.0;}
@@ -190,7 +190,7 @@ public:
       @param val_idx one of the enumerated JSBSim parameters.
       @return the value of the parameter.
       */
-  float GetParameter(eParam val_idx);
+  double GetParameter(eParam val_idx);
 
   /** Retrieves a parameter.
       The parameters that can be retrieved are enumerated in FGJSBBase.h.
@@ -198,7 +198,7 @@ public:
              i.e. "FG_QBAR".
       @return the value of the parameter.
       */
-  float GetParameter(string val_string);
+  double GetParameter(string val_string);
 
   /** Retrieves the JSBSim parameter enumerated item given the text string.
       @param val_string the parameter string, i.e. "FG_QBAR".
@@ -209,13 +209,13 @@ public:
   /** Sets the speed of sound.
       @param speed the speed of sound in feet per second.
       */
-  inline void Seta(float speed) { a = speed; }
+  inline void Seta(double speed) { a = speed; }
 
   /** Sets the current sim time.
       @param cur_time the current time
       @return the current time.
       */
-  inline float Setsim_time(float cur_time) {
+  inline double Setsim_time(double cur_time) {
     sim_time = cur_time;
     return sim_time;
   }
@@ -223,18 +223,18 @@ public:
   /** Sets the integration time step for the simulation executive.
       @param delta_t the time step in seconds.
       */
-  inline void  Setdt(float delta_t) { dt = delta_t; }
+  inline void  Setdt(double delta_t) { dt = delta_t; }
 
   /** Sets the JSBSim parameter to the supplied value.
       @param prm the JSBSim parameter to set, i.e. FG_RUDDER_POS.
       @param val the value to give the parameter.
       */
-  void SetParameter(eParam prm, float val);
+  void SetParameter(eParam prm, double val);
 
   /** Increments the simulation time.
       @return the new simulation time.
       */
-  inline float IncrTime(void) {
+  inline double IncrTime(void) {
     sim_time+=dt;
     return sim_time;
   }
@@ -244,7 +244,7 @@ public:
       @param tht the pitch angle in radians.
       @param psi the heading angle in radians
       */
-  void InitMatrices(float phi, float tht, float psi);
+  void InitMatrices(double phi, double tht, double psi);
 
   /** Calculates the local-to-body and body-to-local conversion matrices.
       */
@@ -265,11 +265,9 @@ public:
   FGColumnVector3& CalcEuler(void);
 
   /** Calculates and returns the stability-to-body axis transformation matrix.
-      @param alpha angle of attack in radians.
-      @param beta angle of sideslip in radians.
       @return a reference to the stability-to-body transformation matrix.
       */
-  FGMatrix33& GetTs2b(float alpha, float beta);
+  FGMatrix33& GetTs2b(void);
 
   /** Retrieves the local-to-body transformation matrix.
       @return a reference to the local-to-body transformation matrix.
@@ -281,7 +279,7 @@ public:
       @param c matrix column index.
       @return the matrix element described by the row and column supplied.
       */
-  float GetTl2b(int r, int c) { return mTl2b(r,c);}
+  double GetTl2b(int r, int c) { return mTl2b(r,c);}
 
   /** Retrieves the body-to-local transformation matrix.
       @return a reference to the body-to-local matrix.
@@ -293,7 +291,7 @@ public:
       @param c matrix column index.
       @return the matrix element described by the row and column supplied.
       */
-  float GetTb2l(int i, int j) { return mTb2l(i,j);}
+  double GetTb2l(int i, int j) { return mTb2l(i,j);}
   
   /** Prints a summary of simulator state (speed, altitude, 
       configuration, etc.)
@@ -305,9 +303,9 @@ public:
   ParamMap paramdef;
 
 private:
-  float a;                          // speed of sound
-  float sim_time, dt;
-  float saved_dt;
+  double a;                          // speed of sound
+  double sim_time, dt;
+  double saved_dt;
 
   FGFDMExec* FDMExec;
   FGMatrix33 mTb2l;
index db880264b38a149b0943188d4698043cb8474441..450fcd2919c59670713e721dbfe90a6795fdd279 100644 (file)
@@ -78,11 +78,11 @@ FGTable::FGTable(int NRows) : nRows(NRows), nCols(1)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float** FGTable::Allocate(void)
+double** FGTable::Allocate(void)
 {
-  Data = new float*[nRows+1];
+  Data = new double*[nRows+1];
   for (int r=0; r<=nRows; r++) {
-    Data[r] = new float[nCols+1];
+    Data[r] = new double[nCols+1];
     for (int c=0; c<=nCols; c++) {
       Data[r][c] = 0.0;
     }
@@ -101,9 +101,9 @@ FGTable::~FGTable()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGTable::GetValue(float key)
+double FGTable::GetValue(double key)
 {
-  float Factor, Value, Span;
+  double Factor, Value, Span;
   int r;
 
   for (r=1; r<=nRows; r++) if (Data[r][0] >= key) break;
@@ -126,9 +126,9 @@ float FGTable::GetValue(float key)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGTable::GetValue(float rowKey, float colKey)
+double FGTable::GetValue(double rowKey, double colKey)
 {
-  float rFactor, cFactor, col1temp, col2temp, Value;
+  double rFactor, cFactor, col1temp, col2temp, Value;
   int r, c;
 
   for (r=1;r<=nRows;r++) if (Data[r][0] >= rowKey) break;
@@ -195,13 +195,13 @@ FGTable& FGTable::operator<<(const int n)
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGTable& FGTable::operator<<(const float n)
+/*
+FGTable& FGTable::operator<<(const double n)
 {
   *this << (double)n;
   return *this;
 }
-
+*/
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 void FGTable::Print(void)
index c6d68d688ae93d8d2b12530fd72af4b85fe7bfcd..20201b83ae0bce005c26b97803c8ab060b12d6d7 100644 (file)
@@ -78,8 +78,8 @@ public:
   ~FGTable();
   FGTable(int nRows);
   FGTable(int nRows, int nCols);
-  float GetValue(float key);
-  float GetValue(float rowKey, float colKey);
+  double GetValue(double key);
+  double GetValue(double rowKey, double 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
@@ -92,19 +92,19 @@ 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];}
+  FGTable& operator<<(const int n);
+//  FGTable& operator<<(const double n);
+  inline double GetElement(int r, int c) {return Data[r][c];}
   void Print(void);
   
 private:
   enum type {tt1D, tt2D} Type;
-  float** Data;
+  double** Data;
   int nRows, nCols;
   unsigned int colCounter;
   unsigned int rowCounter;
-  float** Allocate(void);
+  double** Allocate(void);
   void Debug(void);
 };
 
index a8f29c1b5c0db6af01ca2dc757427ebc5d1ef62d..65f7242df2908e8e319189c3e31ae24246ee21e0 100644 (file)
@@ -61,7 +61,7 @@ FGTank::FGTank(FGConfigFile* AC_cfg)
   else                         Type = ttUNKNOWN;
   
   AC_cfg->GetNextConfigLine();
-  while ((token = AC_cfg->GetValue()) != "/AC_TANK") {
+  while ((token = AC_cfg->GetValue()) != string("/AC_TANK")) {
     if (token == "XLOC") *AC_cfg >> X;
     else if (token == "YLOC") *AC_cfg >> Y;
     else if (token == "ZLOC") *AC_cfg >> Z;
@@ -99,9 +99,9 @@ FGTank::~FGTank()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGTank::Reduce(float used)
+double FGTank::Reduce(double used)
 {
-  float shortage;
+  double shortage;
 
   if (used < Contents) {
     Contents -= used;
index 17bcfd0b4335710e89998769c1a680ed323e76c1..15be71714e4e0df92371a48727ab2e9f2074e9e3 100644 (file)
@@ -82,24 +82,24 @@ public:
   FGTank(FGConfigFile*);
   ~FGTank();
 
-  float Reduce(float);
+  double Reduce(double);
   int GetType(void) {return Type;}
   bool GetSelected(void) {return Selected;}
-  float GetPctFull(void) {return PctFull;}
-  float GetContents(void) {return Contents;}
-  float inline GetX(void) {return X;}
-  float inline GetY(void) {return Y;}
-  float inline GetZ(void) {return Z;}
+  double GetPctFull(void) {return PctFull;}
+  double GetContents(void) {return Contents;}
+  double inline GetX(void) {return X;}
+  double inline GetY(void) {return Y;}
+  double inline GetZ(void) {return Z;}
 
   enum TankType {ttUNKNOWN, ttFUEL, ttOXIDIZER};
 
 private:
   TankType Type;
-  float X, Y, Z;
-  float Capacity;
-  float Radius;
-  float PctFull;
-  float Contents;
+  double X, Y, Z;
+  double Capacity;
+  double Radius;
+  double PctFull;
+  double Contents;
   bool  Selected;
   void Debug(void);
 };
index c49b62c3b6f3194fb49fde1cf66354ac3b277c5a..cb06a03ff5925c7233bf8024936346381408e6fa 100644 (file)
@@ -74,21 +74,21 @@ public:
 
   enum eType {ttNozzle, ttRotor, ttPropeller};
 
-  virtual float Calculate(float) {return 0.0;}
+  virtual double Calculate(double) {return 0.0;}
   void SetName(string name) {Name = name;}
-  virtual float GetPowerRequired(void) {return 0.0;}
-  virtual void SetdeltaT(float dt) {deltaT = dt;}
-  float GetThrust(void) {return Thrust;}
+  virtual double GetPowerRequired(void) {return 0.0;}
+  virtual void SetdeltaT(double dt) {deltaT = dt;}
+  double GetThrust(void) {return Thrust;}
   eType GetType(void) {return Type;}
   string GetName(void) {return Name;}
-  virtual float GetRPM(void) { return 0.0; };
+  virtual double GetRPM(void) { return 0.0; };
 
 protected:
   eType Type;
   string Name;
-  float Thrust;
-  float PowerRequired;
-  float deltaT;
+  double Thrust;
+  double PowerRequired;
+  double deltaT;
   virtual void Debug(void);
 };
 
index 871c8a3f57b3f2ea50ecc1e1ba6d1b7cf9ac2bca..6c5c37aa21e515186bdd5a3962ac339c0714e3d1 100644 (file)
@@ -105,7 +105,7 @@ FGTranslation::~FGTranslation()
 
 bool FGTranslation::Run(void)
 {
-  float Tc = 0.5*State->Getdt()*rate;
+  double Tc = 0.5*State->Getdt()*rate;
 
   if (!FGModel::Run()) {
 
@@ -133,8 +133,8 @@ bool FGTranslation::Run(void)
                sqrt(vAero(eU)*vAero(eU) + vAero(eW)*vAero(eW))) : 0.0;
 
       // stolen, quite shamelessly, from LaRCsim
-      float mUW = (vAero(eU)*vAero(eU) + vAero(eW)*vAero(eW));
-      float signU=1;
+      double mUW = (vAero(eU)*vAero(eU) + vAero(eW)*vAero(eW));
+      double signU=1;
       if (vAero(eU) != 0.0)
         signU = vAero(eU)/fabs(vAero(eU));
 
index 21dbd2aeba839a31a0d6943ff4add7031ed8dbba..66a9831d8a58467731ff973ed134834dbc7fafd3 100644 (file)
@@ -88,31 +88,31 @@ public:
   ~FGTranslation();
 
   inline FGColumnVector3& GetUVW   (void)    { return vUVW; }
-  inline float            GetUVW   (int idx) { return vUVW(idx); }
+  inline double            GetUVW   (int idx) { return vUVW(idx); }
   inline FGColumnVector3& GetUVWdot(void)    { return vUVWdot; }
-  inline float            GetUVWdot(int idx) { return vUVWdot(idx); }
+  inline double            GetUVWdot(int idx) { return vUVWdot(idx); }
   inline FGColumnVector3& GetvAero (void)    { return vAero; }
-  inline float            GetvAero (int idx) { return vAero(idx); }
+  inline double            GetvAero (int idx) { return vAero(idx); }
 
-  inline float Getalpha(void) { return alpha; }
-  inline float Getbeta (void) { return beta; }
-  inline float Getqbar (void) { return qbar; }
-  inline float GetVt   (void) { return Vt; }
-  inline float GetMach (void) { return Mach; }
-  inline float Getadot (void) { return adot; }
-  inline float Getbdot (void) { return bdot; }
+  inline double Getalpha(void) { return alpha; }
+  inline double Getbeta (void) { return beta; }
+  inline double Getqbar (void) { return qbar; }
+  inline double GetVt   (void) { return Vt; }
+  inline double GetMach (void) { return Mach; }
+  inline double Getadot (void) { return adot; }
+  inline double Getbdot (void) { return bdot; }
 
   void SetUVW(FGColumnVector3 tt) { vUVW = tt; }
 
-  inline void Setalpha(float tt) { alpha = tt; }
-  inline void Setbeta (float tt) { beta  = tt; }
-  inline void Setqbar (float tt) { qbar = tt; }
-  inline void SetVt   (float tt) { Vt = tt; }
-  inline void SetMach (float tt) { Mach=tt; }
-  inline void Setadot (float tt) { adot = tt; }
-  inline void Setbdot (float tt) { bdot = tt; }
+  inline void Setalpha(double tt) { alpha = tt; }
+  inline void Setbeta (double tt) { beta  = tt; }
+  inline void Setqbar (double tt) { qbar = tt; }
+  inline void SetVt   (double tt) { Vt = tt; }
+  inline void SetMach (double tt) { Mach=tt; }
+  inline void Setadot (double tt) { adot = tt; }
+  inline void Setbdot (double tt) { bdot = tt; }
 
-  inline void SetAB(float t1, float t2) { alpha=t1; beta=t2; }
+  inline void SetAB(double t1, double t2) { alpha=t1; beta=t2; }
   
   bool Run(void);
 
@@ -123,10 +123,10 @@ private:
   FGMatrix33       mVel;
   FGColumnVector3 vAero;
 
-  float Vt, qbar, Mach;
-  float dt;
-  float alpha, beta;
-  float adot,bdot;
+  double Vt, qbar, Mach;
+  double dt;
+  double alpha, beta;
+  double adot,bdot;
 
   void Debug(void);
 };
index ccde8c51983203fb59da132b4c773d69db39805a..ebd8a10754230edbcbdd6c99e8593177ef1b0091 100644 (file)
@@ -104,8 +104,8 @@ FGTrim::FGTrim(FGFDMExec *FDMExec,FGInitialCondition *FGIC, TrimMode tt ) {
     break;
   }
   //cout << "TrimAxes.size(): " << TrimAxes.size() << endl;
-  sub_iterations=new float[TrimAxes.size()];
-  successful=new float[TrimAxes.size()];
+  sub_iterations=new double[TrimAxes.size()];
+  successful=new double[TrimAxes.size()];
   solution=new bool[TrimAxes.size()];
   current_axis=0;
   
@@ -138,7 +138,7 @@ void FGTrim::TrimStats() {
       snprintf(out,80,"   %5s: %3.0f average: %5.2f  successful: %3.0f  stability: %5.2f\n",
                   TrimAxes[current_axis]->GetStateName().c_str(),
                   sub_iterations[current_axis],
-                  sub_iterations[current_axis]/float(total_its),
+                  sub_iterations[current_axis]/double(total_its),
                   successful[current_axis],
                   TrimAxes[current_axis]->GetAvgStability() );
       cout << out;
@@ -192,8 +192,8 @@ bool FGTrim::AddState( State state, Control control ) {
     delete[] sub_iterations;
     delete[] successful;
     delete[] solution;
-    sub_iterations=new float[TrimAxes.size()];
-    successful=new float[TrimAxes.size()];
+    sub_iterations=new double[TrimAxes.size()];
+    successful=new double[TrimAxes.size()];
     solution=new bool[TrimAxes.size()];
   }
   return result;
@@ -221,8 +221,8 @@ bool FGTrim::RemoveState( State state ) {
     delete[] sub_iterations;
     delete[] successful;
     delete[] solution;
-    sub_iterations=new float[TrimAxes.size()];
-    successful=new float[TrimAxes.size()];
+    sub_iterations=new double[TrimAxes.size()];
+    successful=new double[TrimAxes.size()];
     solution=new bool[TrimAxes.size()];
   }  
   return result;
@@ -365,9 +365,9 @@ bool FGTrim::DoTrim(void) {
 
 bool FGTrim::solve(void) {
 
-  float x1,x2,x3,f1,f2,f3,d,d0;
-  const float relax =0.9;
-  float eps=TrimAxes[current_axis]->GetSolverEps();
+  double x1,x2,x3,f1,f2,f3,d,d0;
+  const double relax =0.9;
+  double eps=TrimAxes[current_axis]->GetSolverEps();
 
   x1=x2=x3=0;
   d=1;
@@ -446,12 +446,12 @@ bool FGTrim::solve(void) {
 */
 bool FGTrim::findInterval(void) {
   bool found=false;
-  float step;
-  float current_control=TrimAxes[current_axis]->GetControl();
-  float current_accel=TrimAxes[current_axis]->GetState();;
-  float xmin=TrimAxes[current_axis]->GetControlMin();
-  float xmax=TrimAxes[current_axis]->GetControlMax();
-  float lastxlo,lastxhi,lastalo,lastahi;
+  double step;
+  double current_control=TrimAxes[current_axis]->GetControl();
+  double current_accel=TrimAxes[current_axis]->GetState();;
+  double xmin=TrimAxes[current_axis]->GetControlMin();
+  double xmax=TrimAxes[current_axis]->GetControlMax();
+  double lastxlo,lastxhi,lastalo,lastahi;
   
   step=0.025*fabs(xmax);
   xlo=xhi=current_control;
@@ -516,8 +516,8 @@ bool FGTrim::findInterval(void) {
 
 bool FGTrim::checkLimits(void) {
   bool solutionExists;
-  float current_control=TrimAxes[current_axis]->GetControl();
-  float current_accel=TrimAxes[current_axis]->GetState();
+  double current_control=TrimAxes[current_axis]->GetControl();
+  double current_accel=TrimAxes[current_axis]->GetState();
   xlo=TrimAxes[current_axis]->GetControlMin();
   xhi=TrimAxes[current_axis]->GetControlMax();
 
index bdd3316becc379a47841710d393ca1d973dadb73..acbff2fba9f3db3de5489906966c81d0574f08f3 100644 (file)
@@ -145,11 +145,11 @@ private:
   int N, Nsub;
   TrimMode mode;
   int Debug;
-  float Tolerance, A_Tolerance;
-  float wdot,udot,qdot;
-  float dth;
-  float *sub_iterations;
-  float *successful;
+  double Tolerance, A_Tolerance;
+  double wdot,udot,qdot;
+  double dth;
+  double *sub_iterations;
+  double *successful;
   bool *solution;
   int max_sub_iterations;
   int max_iterations;
@@ -159,7 +159,7 @@ private:
   bool trim_failed;
   int axis_count;
   int solutionDomain;
-  float xlo,xhi,alo,ahi;
+  double xlo,xhi,alo,ahi;
 
   FGFDMExec* fdmex;
   FGInitialCondition* fgic;
@@ -261,7 +261,7 @@ public:
       held to a tolerance of 1/10th of the given.  The default is 
       0.001 for the recti-linear accelerations and 0.0001 for the angular.
   */         
-  inline void SetTolerance(float tt) {
+  inline void SetTolerance(double tt) {
     Tolerance = tt;
     A_Tolerance = tt / 10;
   }
index 594fe1412cdd0b7ac1a1e292dffdb5bd59e900b8..6bdfd66322596eaa439102e59bc1c7938bf4e1d8 100644 (file)
@@ -186,8 +186,8 @@ void FGTrimAxis::getControl(void) {
 
 /*****************************************************************************/
 
-float FGTrimAxis::computeHmgt(void) {
-  float diff;
+double FGTrimAxis::computeHmgt(void) {
+  double diff;
   
   diff   = fdmex->GetRotation()->Getpsi() - 
              fdmex->GetPosition()->GetGroundTrack();
@@ -236,7 +236,7 @@ void FGTrimAxis::setControl(void) {
 // new center of rotation, pick a gear unit as a reference and use its
 // location vector to calculate the new height change. i.e. new altitude =
 // earth z component of that vector (which is in body axes )  
-void FGTrimAxis::SetThetaOnGround(float ff) {
+void FGTrimAxis::SetThetaOnGround(double ff) {
   int center,i,ref;
 
   // favor an off-center unit so that the same one can be used for both
@@ -257,12 +257,12 @@ void FGTrimAxis::SetThetaOnGround(float ff) {
   }
   cout << "SetThetaOnGround ref gear: " << ref << endl;
   if(ref >= 0) {
-    float sp=fdmex->GetRotation()->GetSinphi();
-    float cp=fdmex->GetRotation()->GetCosphi();
-    float lx=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(1);
-    float ly=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(2);
-    float lz=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(3);
-    float hagl = -1*lx*sin(ff) +
+    double sp=fdmex->GetRotation()->GetSinphi();
+    double cp=fdmex->GetRotation()->GetCosphi();
+    double lx=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(1);
+    double ly=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(2);
+    double lz=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(3);
+    double hagl = -1*lx*sin(ff) +
                     ly*sp*cos(ff) +
                     lz*cp*cos(ff);
    
@@ -277,9 +277,9 @@ void FGTrimAxis::SetThetaOnGround(float ff) {
 
 bool FGTrimAxis::initTheta(void) {
   int i,N,iAft, iForward;
-  float zAft,zForward,zDiff,theta;
+  double zAft,zForward,zDiff,theta;
   bool level;  
-  float saveAlt;
+  double saveAlt;
   
   saveAlt=fgic->GetAltitudeAGLFtIC();
   fgic->SetAltitudeAGLFtIC(100);
@@ -337,7 +337,7 @@ bool FGTrimAxis::initTheta(void) {
 
 /*****************************************************************************/
 
-void FGTrimAxis::SetPhiOnGround(float ff) {
+void FGTrimAxis::SetPhiOnGround(double ff) {
   int i,ref;
 
   i=0; ref=-1;
@@ -349,12 +349,12 @@ void FGTrimAxis::SetPhiOnGround(float ff) {
     i++; 
   }
   if(ref >= 0) {
-    float st=fdmex->GetRotation()->GetSintht();
-    float ct=fdmex->GetRotation()->GetCostht();
-    float lx=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(1);
-    float ly=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(2);
-    float lz=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(3);
-    float hagl = -1*lx*st +
+    double st=fdmex->GetRotation()->GetSintht();
+    double ct=fdmex->GetRotation()->GetCostht();
+    double lx=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(1);
+    double ly=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(2);
+    double lz=fdmex->GetGroundReactions()->GetGearUnit(ref)->GetBodyLocation(3);
+    double hagl = -1*lx*st +
                     ly*sin(ff)*ct +
                     lz*cos(ff)*ct;
    
@@ -368,7 +368,7 @@ void FGTrimAxis::SetPhiOnGround(float ff) {
 
 void FGTrimAxis::Run(void) {
 
-  float last_state_value;
+  double last_state_value;
   int i;
   setControl();
   //cout << "FGTrimAxis::Run: " << control_value << endl;
@@ -393,7 +393,7 @@ void FGTrimAxis::Run(void) {
 /*****************************************************************************/
 
 void FGTrimAxis::setThrottlesPct(void) {
-  float tMin,tMax;
+  double tMin,tMax;
   for(unsigned i=0;i<fdmex->GetPropulsion()->GetNumEngines();i++) {
       tMin=fdmex->GetPropulsion()->GetEngine(i)->GetThrottleMin();
       tMax=fdmex->GetPropulsion()->GetEngine(i)->GetThrottleMax();
@@ -419,9 +419,9 @@ void FGTrimAxis::AxisReport(void) {
 
 /*****************************************************************************/
 
-float FGTrimAxis::GetAvgStability( void ) {
+double FGTrimAxis::GetAvgStability( void ) {
   if(total_iterations > 0) {
-    return float(total_stability_iterations)/float(total_iterations);
+    return double(total_stability_iterations)/double(total_iterations);
   }
   return 0;
 }
index face0e94e4e0a0b219f6e285214d5936142757c7..3aff23ee27a40af33367f6a9247f92487d253947 100644 (file)
@@ -82,10 +82,10 @@ public:
 
   void Run(void);
  
-  float GetState(void) { getState(); return state_value; }
+  double GetState(void) { getState(); return state_value; }
   //Accels are not settable
-  inline void SetControl(float value ) { control_value=value; }
-  inline float GetControl(void) { return control_value; }
+  inline void SetControl(double value ) { control_value=value; }
+  inline double GetControl(void) { return control_value; }
 
   inline State GetStateType(void) { return state; }
   inline Control GetControlType(void) { return control; }
@@ -93,32 +93,32 @@ public:
   inline string GetStateName(void) { return StateNames[state]; }
   inline string GetControlName(void) { return ControlNames[control]; }
 
-  inline float GetControlMin(void) { return control_min; }
-  inline float GetControlMax(void) { return control_max; }
+  inline double GetControlMin(void) { return control_min; }
+  inline double GetControlMax(void) { return control_max; }
 
   inline void SetControlToMin(void) { control_value=control_min; }
   inline void SetControlToMax(void) { control_value=control_max; }
   
-  inline void SetControlLimits(float min, float max) { 
+  inline void SetControlLimits(double min, double max) { 
       control_min=min;
       control_max=max;
   }    
 
-  inline void  SetTolerance(float ff) { tolerance=ff;}
-  inline float GetTolerance(void) { return tolerance; }
+  inline void  SetTolerance(double ff) { tolerance=ff;}
+  inline double GetTolerance(void) { return tolerance; }
 
-  inline float GetSolverEps(void) { return solver_eps; }
-  inline void SetSolverEps(float ff) { solver_eps=ff; }
+  inline double GetSolverEps(void) { return solver_eps; }
+  inline void SetSolverEps(double ff) { solver_eps=ff; }
 
   inline int  GetIterationLimit(void) { return max_iterations; }
   inline void SetIterationLimit(int ii) { max_iterations=ii; }
 
   inline int GetStability(void) { return its_to_stable_value; }
   inline int GetRunCount(void) { return total_stability_iterations; }
-  float GetAvgStability( void );
+  double GetAvgStability( void );
   
-  void SetThetaOnGround(float ff);
-  void SetPhiOnGround(float ff);
+  void SetThetaOnGround(double ff);
+  void SetPhiOnGround(double ff);
   
   bool initTheta(void);
   
@@ -133,18 +133,18 @@ private:
   State   state;
   Control control;
 
-  float state_value;
-  float control_value;
+  double state_value;
+  double control_value;
 
-  float control_min;
-  float control_max;
+  double control_min;
+  double control_max;
 
-  float tolerance;
+  double tolerance;
 
-  float solver_eps;
+  double solver_eps;
 
-  float state_convert;
-  float control_convert;
+  double state_convert;
+  double control_convert;
 
   int max_iterations;
 
@@ -158,7 +158,7 @@ private:
   void getControl(void);
   void setControl(void);
   
-  float computeHmgt(void);
+  double computeHmgt(void);
   
   void Debug(void);
 };
index bfc5e7580e55ca34e8cc2e39da6d3fc3be4d259b..4f0b867ac0019c708b1325161ceb4757572d343c 100644 (file)
@@ -62,7 +62,7 @@ FGTurboJet::~FGTurboJet()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGTurboJet::Calculate(float dummy)
+double FGTurboJet::Calculate(double dummy)
 {
   ConsumeFuel();
   return 0.0;
index 8c3456eb1430a982420629b3c47efce9cd6607e5..1db6bc8e34350863082abedfe8abbdefa7802772 100644 (file)
@@ -57,7 +57,7 @@ public:
   FGTurboJet(FGFDMExec* exec, FGConfigFile* Eng_cfg);
   ~FGTurboJet();
 
-  float Calculate(float);
+  double Calculate(double);
   
 private:
   void Debug(void);
index c84d63371ca9482683243dcc9b18b67ededc97a8..5cad270cef997b09a0469c10abd78975181e2263 100644 (file)
@@ -61,7 +61,7 @@ FGTurboProp::~FGTurboProp()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGTurboProp::Calculate(float dummy)
+double FGTurboProp::Calculate(double dummy)
 {
   ConsumeFuel();
   return 0.0;
index cbec9c7f6125b316a5d5ccbb9b7a0fd3bfc3e959..822f73505beca64b8ae2ad0eccda828e6c4e3d64 100644 (file)
@@ -57,7 +57,7 @@ public:
   FGTurboProp(FGFDMExec* exec, FGConfigFile* Eng_cfg);
   ~FGTurboProp();
 
-  float Calculate(float);
+  double Calculate(double);
 private:
   void Debug(void);
 };
index 9c5531b51023455641e27193e809e033f1293408..0c454e1e42c808f2d58ca7670f4171c37a46d019 100644 (file)
@@ -61,7 +61,7 @@ FGTurboShaft::~FGTurboShaft()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGTurboShaft::Calculate(float dummy) {
+double FGTurboShaft::Calculate(double dummy) {
   ConsumeFuel();
   return 0.0;
 }
index 278ed557eba5f8dc052f4b0238f0b5971aa3c957..3f2d2aba776f9a553c7139c93aa9f3d4bc001d0c 100644 (file)
@@ -57,7 +57,7 @@ public:
   FGTurboShaft(FGFDMExec* exec, FGConfigFile* Eng_cfg);
   ~FGTurboShaft();
 
-  float Calculate(float);
+  double Calculate(double);
 private:
   void Debug(void);
 };
index 48915055c200e917cc91d7bfa85b50b9d8ef9da7..457ddcfcf48cb9f33eb14cca2a4c49979bc6f08f 100644 (file)
@@ -115,7 +115,7 @@ void FGfdmSocket::Append(const char* item)
   size++;
 }
 
-void FGfdmSocket::Append(float item)
+void FGfdmSocket::Append(double item)
 {
   char s[25];
 
index ccf36a15be0a724eca47f6face6562935fa3414d..a01dae7ce4ecd750f688355f6297f059a8ae38ff 100644 (file)
@@ -97,7 +97,7 @@ public:
   ~FGfdmSocket();
   void Send(void);
   void Append(const char*);
-  void Append(float);
+  void Append(double);
   void Append(long);
   void Clear(void);
 
index 499e95167f9918953f3cddc96127fd22ea8fcbd2..a8219e4878695de684c33c81546dfb54e90915ab 100644 (file)
@@ -133,25 +133,23 @@ int main(int argc, char** argv)
 
   FDMExec = new FGFDMExec();
 
-  if (scripted) {
+  if (scripted) { // form jsbsim <scriptfile>
     result = FDMExec->LoadScript(argv[1]);
     if (!result) {
       cerr << "Script file " << argv[1] << " was not successfully loaded" << endl;
       exit(-1);
     }
-  } else {
-    // result = FDMExec->LoadModel("aircraft", "engine", string(argv[1]));
-    FGInitialCondition IC(FDMExec);
-    result = IC.Load("aircraft","engine",string(argv[1]));
-
-    if (!result) {
-       cerr << "Aircraft file " << argv[1] << " was not found" << endl;
-           exit(-1);
-    }
-    if ( ! FDMExec->GetState()->Reset("aircraft", string(argv[1]), string(argv[2]))) {
+  } else {        // form jsbsim <acname> <resetfile>
+    if ( ! FDMExec->LoadModel("aircraft", "engine", string(argv[1]))) {
        cerr << "JSBSim could not be started" << endl;
-           exit(-1);
+      exit(-1);
     }                   
+
+    FGInitialCondition IC(FDMExec);
+    if ( ! IC.Load("aircraft",string(argv[1]),string(argv[2]))) {
+       cerr << "Initialization unsuccessful" << endl;
+      exit(-1);
+    }
   }
 
   struct FGJSBBase::Message* msg;
index dda386f7c38f0fbb710d9a1a35d3ba005027d9cd..a1a5582137989ed2e9bc6edcf11fc7b8580f747c 100644 (file)
@@ -99,7 +99,7 @@ public:
 
   virtual bool Run(void);
   virtual void SetOutput(void);
-  inline float GetOutput (void) {return Output;}
+  inline double GetOutput (void) {return Output;}
   inline string GetName(void) {return Name;}
 
 protected:
@@ -110,10 +110,10 @@ protected:
   string Name;
   int ID;
   eParam InputIdx;
-  float Input;
+  double Input;
   string sOutputIdx;
   eParam OutputIdx;
-  float Output;
+  double Output;
   bool IsOutput;
   virtual void Debug(void);
 };
index 44dc815770354cd03689b296ab8b8c61efafc175..842aa6d8ad56abd3b1dfd04ff0983564e89404e1 100644 (file)
@@ -50,7 +50,7 @@ FGFilter::FGFilter(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
                                                        AC_cfg(AC_cfg)
 {
   string token;
-  float denom;
+  double denom;
 
   Type = AC_cfg->GetValue("TYPE");
   Name = AC_cfg->GetValue("NAME");
index 2fa35b67146c118c8c72a2d1075b15335afe4149..8a6255aff07d50625e9201cd36ff11b15a91d4bf 100644 (file)
@@ -98,22 +98,22 @@ public:
   enum {eLag, eLeadLag, eOrder2, eWashout, eIntegrator, eUnknown} FilterType;
 
 private:
-  float dt;
-  float ca;
-  float cb;
-  float cc;
-  float cd;
-  float ce;
-  float C1;
-  float C2;
-  float C3;
-  float C4;
-  float C5;
-  float C6;
-  float PreviousInput1;
-  float PreviousInput2;
-  float PreviousOutput1;
-  float PreviousOutput2;
+  double dt;
+  double ca;
+  double cb;
+  double cc;
+  double cd;
+  double ce;
+  double C1;
+  double C2;
+  double C3;
+  double C4;
+  double C5;
+  double C6;
+  double PreviousInput1;
+  double PreviousInput2;
+  double PreviousOutput1;
+  double PreviousOutput2;
   FGConfigFile* AC_cfg;
   void Debug(void);
 };
index 5b746ae78c51258587966b6285a7d2846446daa3..b81e55d3a0825436b6eabcac61aa5d81f14251be 100644 (file)
@@ -49,8 +49,8 @@ CLASS IMPLEMENTATION
 FGFlaps::FGFlaps(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
 AC_cfg(AC_cfg) {
   string token;
-  float tmpDetent;
-  float tmpTime;
+  double tmpDetent;
+  double tmpTime;
 
   Detents.clear();
   TransitionTimes.clear();
@@ -109,8 +109,8 @@ FGFlaps::~FGFlaps()
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 bool FGFlaps::Run(void ) {
-  float dt=fcs->GetState()->Getdt();
-  float flap_transit_rate=0;
+  double dt=fcs->GetState()->Getdt();
+  double flap_transit_rate=0;
 
   FGFCSComponent::Run(); // call the base class for initialization of Input
   Flap_Handle = Input*Detents[NumDetents-1];
index 4ec0e3bfaca88f5a1c2229bd93bb4bc00dc86706..de7309651abfdbe11d28d8a617ace288d6067847 100644 (file)
@@ -74,12 +74,12 @@ public:
   
 private:
   FGConfigFile* AC_cfg;
-  vector<float> Detents;
-  vector<float> TransitionTimes;
+  vector<double> Detents;
+  vector<double> TransitionTimes;
   int NumDetents,fi;
-  float lastFlapHandle;
-  float Flap_Handle;
-  float Flap_Position;
+  double lastFlapHandle;
+  double Flap_Handle;
+  double Flap_Position;
   bool  Flaps_In_Transit;
 
   void Debug(void);
index acb6401c92fe58e809a459bb4fba197fb724e790..b89b72fbc31bac8ee4858cef7ffa0dc0c88857cf 100644 (file)
@@ -132,8 +132,8 @@ FGGain::~FGGain()
 
 bool FGGain::Run(void )
 {
-  float SchedGain = 1.0;
-  float LookupVal = 0;
+  double SchedGain = 1.0;
+  double LookupVal = 0;
 
   FGFCSComponent::Run(); // call the base class for initialization of Input
 
index 2ac84589685f3471e5c0856d010097af7a891a41..a5f33c6ea520701edb2dbc573b1af3576bf51ecc 100644 (file)
@@ -77,8 +77,8 @@ private:
   FGConfigFile* AC_cfg;
   FGTable* Table;
   FGState* State;
-  float Gain;
-  float Min, Max;
+  double Gain;
+  double Min, Max;
   int Rows;
   eParam ScheduledBy;
 
index e07d53aa1d6927fc7309a4e66026f90886ae06f1..557f1a4bbf17f24d4dd7ac1c2fcaa7591b6f815d 100644 (file)
@@ -79,7 +79,7 @@ private:
   vector <eParam> InputIndices;
   vector <int> InputTypes;
   bool clip;
-  float clipmin,clipmax;
+  double clipmin,clipmax;
   void Debug(void);
 };