]> git.mxchange.org Git - flightgear.git/commitdiff
Sync. again
authorErik Hofman <erik@ehofman.com>
Mon, 11 Jan 2016 10:39:11 +0000 (11:39 +0100)
committerErik Hofman <erik@ehofman.com>
Tue, 12 Jan 2016 18:05:51 +0000 (19:05 +0100)
14 files changed:
src/FDM/JSBSim/FGFDMExec.cpp
src/FDM/JSBSim/FGJSBBase.cpp
src/FDM/JSBSim/FGJSBBase.h
src/FDM/JSBSim/initialization/FGInitialCondition.cpp
src/FDM/JSBSim/initialization/FGInitialCondition.h
src/FDM/JSBSim/input_output/FGXMLElement.cpp [changed mode: 0644->0755]
src/FDM/JSBSim/models/FGAtmosphere.cpp
src/FDM/JSBSim/models/FGAtmosphere.h
src/FDM/JSBSim/models/FGAuxiliary.cpp [changed mode: 0644->0755]
src/FDM/JSBSim/models/FGPropulsion.cpp
src/FDM/JSBSim/models/propulsion/FGPiston.cpp
src/FDM/JSBSim/models/propulsion/FGPiston.h
src/FDM/JSBSim/models/propulsion/FGPropeller.cpp
src/FDM/JSBSim/models/propulsion/FGPropeller.h

index 928595695dd3bba79ac14869ab125bb8d9abf3c6..14a9b2f4f2665d6b4fcf3aa8fee95f2e254ada9c 100644 (file)
@@ -72,7 +72,7 @@ using namespace std;
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGFDMExec.cpp,v 1.185 2015/12/13 08:01:50 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGFDMExec.cpp,v 1.186 2016/01/10 16:32:26 bcoconni Exp $");
 IDENT(IdHdr,ID_FDMEXEC);
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -399,7 +399,6 @@ void FGFDMExec::LoadInputs(unsigned int idx)
     Auxiliary->in.TurbPQR      = Winds->GetTurbPQR();
     Auxiliary->in.WindPsi      = Winds->GetWindPsi();
     Auxiliary->in.Vwind        = Winds->GetTotalWindNED().Magnitude();
-    Auxiliary->in.PitotAngle   = Aircraft->GetPitotAngle();
     break;
   case eSystems:
     // Dynamic inputs come into the components that FCS manages through properties
@@ -542,6 +541,7 @@ void FGFDMExec::LoadModelConstants(void)
   Aerodynamics->in.Wingspan      = Aircraft->GetWingSpan();
   Auxiliary->in.Wingspan         = Aircraft->GetWingSpan();
   Auxiliary->in.Wingchord        = Aircraft->Getcbar();
+  Auxiliary->in.PitotAngle       = Aircraft->GetPitotAngle();
   GroundReactions->in.vXYZcg     = MassBalance->GetXYZcg();
 
   LoadPlanetConstants();
index d978da9cdc0fcc10dfc66404667d19b354ef3fdb..8a8fbc82ff0e2af4de0e16590637f764b2aa7b56 100644 (file)
@@ -46,7 +46,7 @@ using namespace std;
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGJSBBase.cpp,v 1.40 2015/07/12 19:34:08 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGJSBBase.cpp,v 1.41 2016/01/10 12:07:49 bcoconni Exp $");
 IDENT(IdHdr,ID_JSBBASE);
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -84,8 +84,8 @@ const double FGJSBBase::degtorad = 0.017453292519943295769236907684886;
 const double FGJSBBase::hptoftlbssec = 550.0;
 const double FGJSBBase::psftoinhg = 0.014138;
 const double FGJSBBase::psftopa = 47.88;
-const double FGJSBBase::fpstokts = 0.592484;
 const double FGJSBBase::ktstofps = 1.68781;
+const double FGJSBBase::fpstokts = 1.0/ktstofps;
 const double FGJSBBase::inchtoft = 0.08333333;
 const double FGJSBBase::in3tom3 = 1.638706E-5;
 const double FGJSBBase::m3toft3 = 1.0/(fttom*fttom*fttom);
@@ -275,13 +275,11 @@ double FGJSBBase::GaussianRandomNumber(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-double FGJSBBase::VcalibratedFromMach(double mach, double p, double psl, double rhosl)
+double FGJSBBase::PitotTotalPressure(double mach, double p)
 {
-  double pt,A;
-
-  if (mach < 0) mach=0;
+  if (mach < 0) return 0;
   if (mach < 1)    //calculate total pressure assuming isentropic flow
-    pt=p*pow((1 + 0.2*mach*mach),3.5);
+    return p*pow((1 + 0.2*mach*mach),3.5);
   else {
     // shock in front of pitot tube, we'll assume its normal and use
     // the Rayleigh Pitot Tube Formula, i.e. the ratio of total
@@ -298,10 +296,17 @@ double FGJSBBase::VcalibratedFromMach(double mach, double p, double psl, double
     // The denominator below is zero for Mach ~ 0.38, for which
     // we'll never be here, so we're safe
 
-    pt = p*166.92158*pow(mach,7.0)/pow(7*mach*mach-1,2.5);
+    return p*166.92158*pow(mach,7.0)/pow(7*mach*mach-1,2.5);
   }
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGJSBBase::VcalibratedFromMach(double mach, double p, double psl, double rhosl)
+{
+  double pt = PitotTotalPressure(mach, p);
+  double A = pow(((pt-p)/psl+1), 1./3.5);
 
-  A = pow(((pt-p)/psl+1),0.28571);
   return sqrt(7*psl/rhosl*(A-1));
 }
 
@@ -312,7 +317,7 @@ double FGJSBBase::MachFromVcalibrated(double vcas, double p, double psl, double
   double pt = p + psl*(pow(1+vcas*vcas*rhosl/(7.0*psl),3.5)-1);
 
   if (pt/p < 1.89293)
-    return sqrt(5.0*(pow(pt/p, 0.2857143) -1)); // Mach < 1
+    return sqrt(5.0*(pow(pt/p, 1./3.5) -1)); // Mach < 1
   else {
     // Mach >= 1
     double mach = sqrt(0.77666*pt/p); // Initial guess is based on a quadratic approximation of the Rayleigh formula
index b3a5cf21a3dd06a5cae03b3f49c25a0eaccc3ea9..8fec460c493d10e0d55b1b194e312793a69aca43 100644 (file)
@@ -54,7 +54,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_JSBBASE "$Id: FGJSBBase.h,v 1.44 2015/09/17 19:44:13 bcoconni Exp $"
+#define ID_JSBBASE "$Id: FGJSBBase.h,v 1.45 2016/01/10 12:07:49 bcoconni Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -70,7 +70,7 @@ CLASS DOCUMENTATION
 *   This class provides universal constants, utility functions, messaging
 *   functions, and enumerated constants to JSBSim.
     @author Jon S. Berndt
-    @version $Id: FGJSBBase.h,v 1.44 2015/09/17 19:44:13 bcoconni Exp $
+    @version $Id: FGJSBBase.h,v 1.45 2016/01/10 12:07:49 bcoconni Exp $
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -261,6 +261,15 @@ public:
     return measure*0.3048;
   }
 
+  /** Compute the total pressure in front of the Pitot tube. It uses the
+  *   Rayleigh formula for supersonic speeds (See "Introduction to Aerodynamics
+  *   of a Compressible Fluid - H.W. Liepmann, A.E. Puckett - Wiley & sons
+  *   (1947)" ยง5.4 pp 75-80)
+  *   @param mach  The Mach number
+  *   @param p     Pressure in psf
+  *   @return The total pressure in front of the Pitot tube in psf */
+  static double PitotTotalPressure(double mach, double p);
+
   /** Calculate the calibrated airspeed from the Mach number. It uses the
   *   Rayleigh formula for supersonic speeds (See "Introduction to Aerodynamics
   *   of a Compressible Fluid - H.W. Liepmann, A.E. Puckett - Wiley & sons
index d285dd2b765bb462d7c5c25bd58db2a730e04916..262ef8ada0ecc0df30a72dd7538fc4077c8be6c0 100644 (file)
@@ -50,6 +50,7 @@ INCLUDES
 #include "FGFDMExec.h"
 #include "models/FGInertial.h"
 #include "models/FGAtmosphere.h"
+#include "models/FGAircraft.h"
 #include "models/FGAccelerations.h"
 #include "input_output/FGXMLFileRead.h"
 
@@ -57,7 +58,7 @@ using namespace std;
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGInitialCondition.cpp,v 1.102 2015/12/13 08:16:00 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGInitialCondition.cpp,v 1.104 2016/01/10 16:35:28 bcoconni Exp $");
 IDENT(IdHdr,ID_INITIALCONDITION);
 
 //******************************************************************************
@@ -68,6 +69,7 @@ FGInitialCondition::FGInitialCondition(FGFDMExec *FDMExec) : fdmex(FDMExec)
 
   if(FDMExec != NULL ) {
     Atmosphere=fdmex->GetAtmosphere();
+    Aircraft=fdmex->GetAircraft();
   } else {
     cout << "FGInitialCondition: This class requires a pointer to a valid FGFDMExec object" << endl;
   }
@@ -161,8 +163,7 @@ void FGInitialCondition::SetVequivalentKtsIC(double ve)
 void FGInitialCondition::SetMachIC(double mach)
 {
   double altitudeASL = position.GetAltitudeASL();
-  double temperature = Atmosphere->GetTemperature(altitudeASL);
-  double soundSpeed = sqrt(SHRatio*Reng*temperature);
+  double soundSpeed = Atmosphere->GetSoundSpeed(altitudeASL);
   SetVtrueFpsIC(mach*soundSpeed);
   lastSpeedSet = setmach;
 }
@@ -176,10 +177,10 @@ void FGInitialCondition::SetVcalibratedKtsIC(double vcas)
   double pressureSL = Atmosphere->GetPressureSL();
   double rhoSL = Atmosphere->GetDensitySL();
   double mach = MachFromVcalibrated(fabs(vcas)*ktstofps, pressure, pressureSL, rhoSL);
-  double temperature = Atmosphere->GetTemperature(altitudeASL);
-  double soundSpeed = sqrt(SHRatio*Reng*temperature);
+  double soundSpeed = Atmosphere->GetSoundSpeed(altitudeASL);
+  double PitotAngle = Aircraft->GetPitotAngle();
 
-  SetVtrueFpsIC(mach*soundSpeed);
+  SetVtrueFpsIC(mach * soundSpeed / (cos(alpha+PitotAngle) * cos(beta)));
   lastSpeedSet = setvc;
 }
 
@@ -206,8 +207,8 @@ void FGInitialCondition::calcAeroAngles(const FGColumnVector3& _vt_NED)
     alpha = atan2( wa, ua );
 
   // alpha cannot be constrained without updating other informations like the
-  // true speed or the Euler angles. Otherwise we might end up with an inconsistent
-  // state of the aircraft.
+  // true speed or the Euler angles. Otherwise we might end up with an
+  // inconsistent state of the aircraft.
   /*alpha = Constrain(fdmex->GetAerodynamics()->GetAlphaCLMin(), alpha,
                     fdmex->GetAerodynamics()->GetAlphaCLMax());*/
 
@@ -686,10 +687,9 @@ void FGInitialCondition::SetAltitudeAGLFtIC(double agl)
 void FGInitialCondition::SetAltitudeASLFtIC(double alt)
 {
   double altitudeASL = position.GetAltitudeASL();
-  double temperature = Atmosphere->GetTemperature(altitudeASL);
   double pressure = Atmosphere->GetPressure(altitudeASL);
   double pressureSL = Atmosphere->GetPressureSL();
-  double soundSpeed = sqrt(SHRatio*Reng*temperature);
+  double soundSpeed = Atmosphere->GetSoundSpeed(altitudeASL);
   double rho = Atmosphere->GetDensity(altitudeASL);
   double rhoSL = Atmosphere->GetDensitySL();
 
@@ -700,8 +700,7 @@ void FGInitialCondition::SetAltitudeASLFtIC(double alt)
   altitudeASL=alt;
   position.SetAltitudeASL(alt);
 
-  temperature = Atmosphere->GetTemperature(altitudeASL);
-  soundSpeed = sqrt(SHRatio*Reng*temperature);
+  soundSpeed = Atmosphere->GetSoundSpeed(altitudeASL);
   rho = Atmosphere->GetDensity(altitudeASL);
   pressure = Atmosphere->GetPressure(altitudeASL);
 
@@ -813,12 +812,13 @@ double FGInitialCondition::GetBodyWindFpsIC(int idx) const
 double FGInitialCondition::GetVcalibratedKtsIC(void) const
 {
   double altitudeASL = position.GetAltitudeASL();
-  double temperature = Atmosphere->GetTemperature(altitudeASL);
   double pressure = Atmosphere->GetPressure(altitudeASL);
   double pressureSL = Atmosphere->GetPressureSL();
   double rhoSL = Atmosphere->GetDensitySL();
-  double soundSpeed = sqrt(SHRatio*Reng*temperature);
-  double mach = vt / soundSpeed;
+  double soundSpeed = Atmosphere->GetSoundSpeed(altitudeASL);
+  double PitotAngle = Aircraft->GetPitotAngle();
+  double mach = vt * cos(alpha+PitotAngle) * cos(beta) / soundSpeed;
+
   return fpstokts * VcalibratedFromMach(mach, pressure, pressureSL, rhoSL);
 }
 
@@ -837,8 +837,7 @@ double FGInitialCondition::GetVequivalentKtsIC(void) const
 double FGInitialCondition::GetMachIC(void) const
 {
   double altitudeASL = position.GetAltitudeASL();
-  double temperature = Atmosphere->GetTemperature(altitudeASL);
-  double soundSpeed = sqrt(SHRatio*Reng*temperature);
+  double soundSpeed = Atmosphere->GetSoundSpeed(altitudeASL);
   return vt / soundSpeed;
 }
 
index 1a11bf5d2b698a76ef189c0d43f781ca77eecf7e..488d37addc2ae669ab605f810b9b25443b6d2568 100644 (file)
@@ -54,7 +54,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_INITIALCONDITION "$Id: FGInitialCondition.h,v 1.43 2015/03/28 14:49:01 bcoconni Exp $"
+#define ID_INITIALCONDITION "$Id: FGInitialCondition.h,v 1.44 2016/01/10 16:35:28 bcoconni Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -66,6 +66,7 @@ class FGFDMExec;
 class FGMatrix33;
 class FGColumnVector3;
 class FGAtmosphere;
+class FGAircraft;
 class FGPropertyManager;
 class Element;
 
@@ -218,7 +219,7 @@ CLASS DOCUMENTATION
    @property ic/r-rad_sec (read/write) Yaw rate initial condition in radians/second
 
    @author Tony Peden
-   @version "$Id: FGInitialCondition.h,v 1.43 2015/03/28 14:49:01 bcoconni Exp $"
+   @version "$Id: FGInitialCondition.h,v 1.44 2016/01/10 16:35:28 bcoconni Exp $"
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -684,6 +685,7 @@ private:
 
   FGFDMExec *fdmex;
   FGAtmosphere* Atmosphere;
+  FGAircraft* Aircraft;
 
   bool Load_v1(Element* document);
   bool Load_v2(Element* document);
@@ -701,4 +703,3 @@ private:
 };
 }
 #endif
-
old mode 100644 (file)
new mode 100755 (executable)
index 1aebb93..ac9fb70
@@ -45,7 +45,7 @@ FORWARD DECLARATIONS
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGXMLElement.cpp,v 1.54 2015/09/27 15:39:45 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGXMLElement.cpp,v 1.55 2016/01/02 15:23:50 bcoconni Exp $");
 IDENT(IdHdr,ID_XMLELEMENT);
 
 bool Element::converterIsInitialized = false;
@@ -698,7 +698,7 @@ void Element::MergeAttributes(Element* el)
     if (attributes.find(it->first) == attributes.end())
       attributes[it->first] = it->second;
     else {
-      if (FGJSBBase::debug_lvl > 0)
+      if (FGJSBBase::debug_lvl > 0 && (attributes[it->first] != it->second))
         cout << el->ReadFrom() << " Attribute '" << it->first << "' is overridden in file "
              << GetFileName() << ": line " << GetLineNumber() << endl
              << " The value '" << attributes[it->first] << "' will be used instead of '"
index d3576d115505c6a16ce95beaf9c665d5eaa34bb6..672c0f93c70c7944cb01ac898d2de34260bfb759 100644 (file)
@@ -50,7 +50,7 @@ INCLUDES
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGAtmosphere.cpp,v 1.59 2014/05/07 19:51:43 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGAtmosphere.cpp,v 1.61 2016/01/10 19:22:12 bcoconni Exp $");
 IDENT(IdHdr,ID_ATMOSPHERE);
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -153,6 +153,13 @@ double FGAtmosphere::GetDensity(double altitude) const
 {
   return GetPressure(altitude)/(Reng * GetTemperature(altitude));
 }
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+// Get the sound speed at a specified altitude
+
+double FGAtmosphere::GetSoundSpeed(double altitude) const
+{
+  return sqrt(SHRatio * Reng * GetTemperature(altitude));
+}
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 // This function sets the sea level temperature.
@@ -244,7 +251,7 @@ double FGAtmosphere::ConvertFromPSF(double p, ePressure unit) const
 
 void FGAtmosphere::bind(void)
 {
-//  typedef double (FGAtmosphere::*PMFi)(int) const;
+  typedef double (FGAtmosphere::*PMFi)(int) const;
 //  typedef void (FGAtmosphere::*PMF)(int, double);
   PropertyManager->Tie("atmosphere/T-R", this, &FGAtmosphere::GetTemperature);
   PropertyManager->Tie("atmosphere/rho-slugs_ft3", this, &FGAtmosphere::GetDensity);
@@ -252,8 +259,8 @@ void FGAtmosphere::bind(void)
   PropertyManager->Tie("atmosphere/a-fps", this, &FGAtmosphere::GetSoundSpeed);
   PropertyManager->Tie("atmosphere/T-sl-R", this, &FGAtmosphere::GetTemperatureSL);
   PropertyManager->Tie("atmosphere/rho-sl-slugs_ft3", this, &FGAtmosphere::GetDensitySL);
-//  PropertyManager->Tie("atmosphere/P-sl-psf", this, ePSF,
-//                                   (PMFi)&FGAtmosphere::GetPressureSL,
+  PropertyManager->Tie("atmosphere/P-sl-psf", this, ePSF,
+                       (PMFi)&FGAtmosphere::GetPressureSL);
 //                                   (PMF)&FGAtmosphere::SetPressureSL);
   PropertyManager->Tie("atmosphere/a-sl-fps", this, &FGAtmosphere::GetSoundSpeedSL);
   PropertyManager->Tie("atmosphere/theta", this, &FGAtmosphere::GetTemperatureRatio);
index b1789a33498870db537b9f806dfd2867b8690520..4a603bdc7a0b0c0acbb5a1432955c07b87c03208 100644 (file)
@@ -45,7 +45,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_ATMOSPHERE "$Id: FGAtmosphere.h,v 1.31 2012/08/20 12:28:50 jberndt Exp $"
+#define ID_ATMOSPHERE "$Id: FGAtmosphere.h,v 1.32 2016/01/10 15:56:30 bcoconni Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -74,7 +74,7 @@ CLASS DOCUMENTATION
   @property atmosphere/a-ratio
 
   @author Jon Berndt
-  @version $Id: FGAtmosphere.h,v 1.31 2012/08/20 12:28:50 jberndt Exp $
+  @version $Id: FGAtmosphere.h,v 1.32 2016/01/10 15:56:30 bcoconni Exp $
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -190,6 +190,9 @@ public:
   /// Returns the speed of sound in ft/sec.
   virtual double GetSoundSpeed(void) const {return Soundspeed;}
 
+  /// Returns the speed of sound in ft/sec at a given altitude in ft.
+  virtual double GetSoundSpeed(double altitude) const;
+  
   /// Returns the sea level speed of sound in ft/sec.
   virtual double GetSoundSpeedSL(void) const { return SLsoundspeed; }
 
old mode 100644 (file)
new mode 100755 (executable)
index 3492dea..3a51c04
@@ -51,7 +51,7 @@ using namespace std;
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGAuxiliary.cpp,v 1.70 2015/09/20 20:53:13 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGAuxiliary.cpp,v 1.71 2016/01/10 12:12:59 bcoconni Exp $");
 IDENT(IdHdr,ID_AUXILIARY);
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -139,8 +139,6 @@ FGAuxiliary::~FGAuxiliary()
 
 bool FGAuxiliary::Run(bool Holding)
 {
-  double A,B,D;
-
   if (FGModel::Run(Holding)) return true; // return true if error returned from base class
   if (Holding) return false;
 
@@ -215,20 +213,10 @@ bool FGAuxiliary::Run(bool Holding)
   Vpitot = vPitotUVW(eU);
   if (Vpitot < 0.0) Vpitot = 0.0;
   MachPitot = Vpitot / in.SoundSpeed;
-  double MachP2 = MachPitot * MachPitot;
-
-  if (MachPitot < 1) {   // Calculate total pressure assuming isentropic flow
-    pt = in.Pressure*pow((1 + 0.2*MachP2),3.5);
-  } else {
-    // Use Rayleigh pitot tube formula for normal shock in front of pitot tube
-    B = 5.76 * MachP2 / (5.6*MachP2 - 0.8);
-    D = (2.8 * MachP2 - 0.4) * 0.4167;
-    pt = in.Pressure*pow(B,3.5)*D;
-  }
+  pt = PitotTotalPressure(MachPitot, in.Pressure);
 
-  A = pow(((pt-in.Pressure)/in.PressureSL + 1),0.28571);
   if (abs(MachPitot) > 0.0) {
-    vcas = sqrt(7 * in.PressureSL / in.DensitySL * (A-1));
+    vcas = VcalibratedFromMach(MachPitot, in.Pressure, in.PressureSL, in.DensitySL);
     veas = sqrt(2 * qbar / in.DensitySL);
     vtrue = 1116.43559 * Mach * sqrt(in.Temperature / 518.67);
   } else {
index 9cbce745c4d5294bbadb9c5b176e5982e47ba9f0..31d3b73806a91ab722a5f239f98695c33f76bb1a 100644 (file)
@@ -65,7 +65,7 @@ using namespace std;
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGPropulsion.cpp,v 1.84 2015/03/28 14:49:02 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGPropulsion.cpp,v 1.85 2016/01/02 17:42:53 bcoconni Exp $");
 IDENT(IdHdr,ID_PROPULSION);
 
 extern short debug_lvl;
@@ -281,12 +281,18 @@ bool FGPropulsion::GetSteadyState(void)
   int steady_count = 0, j = 0;
   bool steady = false;
   bool TrimMode = FDMExec->GetTrimStatus();
+  bool suspended = FDMExec->IntegrationSuspended();
 
   vForces.InitMatrix();
   vMoments.InitMatrix();
 
   if (!FGModel::Run(false)) {
     FDMExec->SetTrimStatus(true);
+    if (suspended)
+      FDMExec->ResumeIntegration();
+    // This is a time marching algorithm so it needs a non-zero time step to
+    // reach a steady state.
+    in.TotalDeltaT = 0.5;
 
     for (unsigned int i=0; i<numEngines; i++) {
       steady=false;
@@ -311,6 +317,12 @@ bool FGPropulsion::GetSteadyState(void)
     }
 
     FDMExec->SetTrimStatus(TrimMode);
+    if (suspended) {
+      FDMExec->SuspendIntegration();
+      in.TotalDeltaT = 0.0;
+    }
+    else
+      in.TotalDeltaT = FDMExec->GetDeltaT() * rate;
 
     return false;
   } else {
index 5880881e78c8a1e68a0a4989ff83ae253b4491c4..e16e49c89fae12389248172be49dadfdba14d92d 100644 (file)
@@ -51,7 +51,7 @@ using namespace std;
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGPiston.cpp,v 1.81 2015/09/27 09:54:21 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGPiston.cpp,v 1.82 2016/01/02 17:42:53 bcoconni Exp $");
 IDENT(IdHdr,ID_PISTON);
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -470,8 +470,6 @@ void FGPiston::Calculate(void)
 
   RunPreFunctions();
 
-  TotalDeltaT = ( in.TotalDeltaT < 1e-9 ) ? 1.0 : in.TotalDeltaT;
-
 /* The thruster controls the engine RPM because it encapsulates the gear ratio and other transmission variables */
   RPM = Thruster->GetEngineRPM();
 
@@ -644,7 +642,7 @@ void FGPiston::doMAP(void)
 
   // Add a variable lag to manifold pressure changes
   double dMAP=(TMAP - p_ram * map_coefficient);
-  if (ManifoldPressureLag > TotalDeltaT) dMAP *= TotalDeltaT/ManifoldPressureLag;
+  if (ManifoldPressureLag > in.TotalDeltaT) dMAP *= in.TotalDeltaT/ManifoldPressureLag;
 
   TMAP -=dMAP;
 
@@ -833,7 +831,7 @@ void FGPiston::doEGT(void)
   } else {  // Drop towards ambient - guess an appropriate time constant for now
     combustion_efficiency = 0;
     dEGTdt = (RankineToKelvin(in.Temperature) - ExhaustGasTemp_degK) / 100.0;
-    delta_T_exhaust = dEGTdt * TotalDeltaT;
+    delta_T_exhaust = dEGTdt * in.TotalDeltaT;
 
     ExhaustGasTemp_degK += delta_T_exhaust;
   }
@@ -873,7 +871,7 @@ void FGPiston::doCHT(void)
   double HeatCapacityCylinderHead = CpCylinderHead * MassCylinderHead;
 
   CylinderHeadTemp_degK +=
-    (dqdt_cylinder_head / HeatCapacityCylinderHead) * TotalDeltaT;
+    (dqdt_cylinder_head / HeatCapacityCylinderHead) * in.TotalDeltaT;
 
 }
 
@@ -908,7 +906,7 @@ void FGPiston::doOilTemperature(void)
 
   double dOilTempdt = (target_oil_temp - OilTemp_degK) / time_constant;
 
-  OilTemp_degK += (dOilTempdt * TotalDeltaT);
+  OilTemp_degK += (dOilTempdt * in.TotalDeltaT);
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
index b23a51c29435e8e20cf31da51088ae79439a1299..1934f221ea32e58bf401b636edb1fb04f670a903 100644 (file)
@@ -46,7 +46,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_PISTON "$Id: FGPiston.h,v 1.37 2015/02/27 20:36:47 bcoconni Exp $"
+#define ID_PISTON "$Id: FGPiston.h,v 1.38 2016/01/02 17:42:53 bcoconni Exp $"
 #define FG_MAX_BOOST_SPEEDS 3
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -211,7 +211,7 @@ boostspeed they refer to:
     @author David Megginson (initial porting and additional code)
     @author Ron Jensen (additional engine code)
     @see Taylor, Charles Fayette, "The Internal Combustion Engine in Theory and Practice"
-    @version $Id: FGPiston.h,v 1.37 2015/02/27 20:36:47 bcoconni Exp $
+    @version $Id: FGPiston.h,v 1.38 2016/01/02 17:42:53 bcoconni Exp $
   */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -351,7 +351,6 @@ private:
   //
   // Inputs (in addition to those in FGEngine).
   //
-  double TotalDeltaT;        // Time in seconds between calls.
   double p_amb;              // Pascals
   double p_ram;              // Pascals
   double T_amb;              // degrees Kelvin
index 81ea5b08aead0c977328c928bd4bf1f857b9bdba..f8a4d345c7d68b102ea42acf9b727fb65dfb0f7c 100644 (file)
@@ -45,7 +45,7 @@ using namespace std;
 
 namespace JSBSim {
 
-IDENT(IdSrc,"$Id: FGPropeller.cpp,v 1.56 2015/12/13 08:56:06 bcoconni Exp $");
+IDENT(IdSrc,"$Id: FGPropeller.cpp,v 1.57 2016/01/02 17:42:53 bcoconni Exp $");
 IDENT(IdHdr,ID_PROPELLER);
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -205,9 +205,6 @@ double FGPropeller::Calculate(double EnginePower)
   double Vel = localAeroVel(eU) + Vinduced;
   double rho = in.Density;
   double RPS = RPM/60.0;
-  // The time step should not be 0 for the propeller RPM to reach a steady
-  // value during trimming.
-  deltaT = ( in.TotalDeltaT > 0.0 ) ? in.TotalDeltaT : 0.01;
 
   // Calculate helical tip Mach
   double Area = 0.25*Diameter*Diameter*M_PI;
@@ -288,7 +285,7 @@ double FGPropeller::Calculate(double EnginePower)
   if (omega > 0.0) ExcessTorque = PowerAvailable / omega;
   else             ExcessTorque = PowerAvailable / 1.0;
 
-  RPM = (RPS + ((ExcessTorque / Ixx) / (2.0 * M_PI)) * deltaT) * 60.0;
+  RPM = (RPS + ((ExcessTorque / Ixx) / (2.0 * M_PI)) * in.TotalDeltaT) * 60.0;
 
   if (RPM < 0.0) RPM = 0.0; // Engine won't turn backwards
 
@@ -329,7 +326,7 @@ double FGPropeller::GetPowerRequired(void)
           double dRPM = rpmReq - RPM;
           // The pitch of a variable propeller cannot be changed when the RPMs are
           // too low - the oil pump does not work.
-          if (RPM > 200) Pitch -= dRPM * deltaT;
+          if (RPM > 200) Pitch -= dRPM * in.TotalDeltaT;
           if (Pitch < MinPitch)       Pitch = MinPitch;
           else if (Pitch > MaxPitch)  Pitch = MaxPitch;
 
index 490f87b80f8aa0e1174d20227453e3ab5d2ed1f5..b5cf0111cf925f04878fa6b332f34b7fba0b4687 100644 (file)
@@ -45,7 +45,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_PROPELLER "$Id: FGPropeller.h,v 1.25 2015/12/13 08:56:06 bcoconni Exp $"
+#define ID_PROPELLER "$Id: FGPropeller.h,v 1.26 2016/01/02 17:42:53 bcoconni Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -142,7 +142,7 @@ CLASS DOCUMENTATION
     <li>Various NACA Technical Notes and Reports</li>
     </ul>
     @author Jon S. Berndt
-    @version $Id: FGPropeller.h,v 1.25 2015/12/13 08:56:06 bcoconni Exp $
+    @version $Id: FGPropeller.h,v 1.26 2016/01/02 17:42:53 bcoconni Exp $
     @see FGEngine
     @see FGThruster
 */
@@ -303,7 +303,6 @@ private:
   bool   Reversed;     // true, when propeller is reversed
   double Reverse_coef; // 0 - 1 defines AdvancePitch (0=MIN_PITCH 1=REVERSE_PITCH)
   bool   Feathered;    // true, if feather command
-  double deltaT;       // Time step
 };
 }
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%