]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/FGAtmosphere.cpp
JSBSim tweaks.
[flightgear.git] / src / FDM / JSBSim / FGAtmosphere.cpp
index 4d4b4744ffc655ceb7799394a8bc5ad222e61dc5..770e6a5c3d16a84686af846048eb3f15f537b69d 100644 (file)
@@ -1,4 +1,4 @@
-/*******************************************************************************
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
  Module:       FGAtmosphere.cpp
  Author:       Jon Berndt
@@ -36,15 +36,15 @@ HISTORY
 11/24/98   JSB   Created
 07/23/99   TP    Added implementation of 1959 Standard Atmosphere
                  Moved calculation of Mach number to FGTranslation
-********************************************************************************
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 COMMENTS, REFERENCES,  and NOTES
-********************************************************************************
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 [1]   Anderson, John D. "Introduction to Flight, Third Edition", McGraw-Hill,
       1989, ISBN 0-07-001641-0
 
-********************************************************************************
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 INCLUDES
-*******************************************************************************/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 #include "FGAtmosphere.h"
 #include "FGState.h"
@@ -57,60 +57,88 @@ INCLUDES
 #include "FGAuxiliary.h"
 #include "FGOutput.h"
 #include "FGDefs.h"
+#include "FGMatrix.h"
 
-/*******************************************************************************
-************************************ CODE **************************************
-*******************************************************************************/
+static const char *IdSrc = "$Id$";
+static const char *IdHdr = ID_ATMOSPHERE;
 
+extern short debug_lvl;
 
-FGAtmosphere::FGAtmosphere(FGFDMExec* fdmex) : FGModel(fdmex)
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CLASS IMPLEMENTATION
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+FGAtmosphere::FGAtmosphere(FGFDMExec* fdmex) : FGModel(fdmex),
+                                               vWindNED(3)
 {
   Name = "FGAtmosphere";
-  h=0;
-  Calculate();
+  h = 0;
+  Calculate(h);
+  SLtemperature = temperature;
+  SLpressure    = pressure;
+  SLdensity     = density;
+  SLsoundspeed  = sqrt(SHRATIO*Reng*temperature);
+  useExternal=false;
+
+  if (debug_lvl & 2) cout << "Instantiated: " << Name << endl;
 }
 
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 FGAtmosphere::~FGAtmosphere()
 {
+  if (debug_lvl & 2) cout << "Destroyed:    FGAtmosphere" << endl;
 }
 
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 bool FGAtmosphere::Run(void)
 {
+  //cout << "In FGAtmosphere::Run(void)" << endl;
   if (!FGModel::Run()) {                 // if false then execute this Run()
-    h = State->Geth();
-    Calculate();
+    //do temp, pressure, and density first
+    if (!useExternal) {
+      //cout << "Atmosphere: Using internal model, altitude= ";
+      h = Position->Geth();
+
+      Calculate(h);
+    } else {
+      density = exDensity;
+      pressure = exPressure;
+      temperature = exTemperature;
+    }
+
+    if (vWindNED(1) != 0.0) psiw = atan2( vWindNED(2), vWindNED(1) );
+
+    if (psiw < 0) psiw += 2*M_PI;
+
+    soundspeed = sqrt(SHRATIO*Reng*temperature);
+    //cout << "Atmosphere: soundspeed: " << soundspeed << endl;
     State->Seta(soundspeed);
+
   } else {                               // skip Run() execution this time
   }
   return false;
 }
 
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGAtmosphere::CalcRho(float altitude)
-{
-  return (0.00237 - 7.0E-08*altitude
-        + 7.0E-13*altitude*altitude
-        - 2.0E-18*altitude*altitude*altitude);
-}
-
-
-void FGAtmosphere::Calculate(void)
+void FGAtmosphere::Calculate(float altitude)
 {
   //see reference [1]
 
   float slope,reftemp,refpress,refdens;
   int i=0;
   float htab[]={0,36089,82020,154198,173882,259183,295272,344484}; //ft.
-
-  if (h <= htab[0]) {
-    h=0;
-  } else if (h >= htab[7]){
+  // cout << "Atmosphere:  h=" << altitude << " rho= " << density << endl;
+  if (altitude <= htab[0]) {
+    altitude=0;
+  } else if (altitude >= htab[7]){
     i = 7;
-    h = htab[7];
+    altitude = htab[7];
   } else {
-    while (htab[i+1] < h) {
+    while (htab[i+1] < altitude) {
       i++;
     }
   }
@@ -166,60 +194,24 @@ void FGAtmosphere::Calculate(void)
     break;
   }
 
-
   if (slope == 0) {
     temperature = reftemp;
-    pressure = refpress*exp(-GRAVITY/(reftemp*Reng)*(h-htab[i]));
-    density = refdens*exp(-GRAVITY/(reftemp*Reng)*(h-htab[i]));
+    pressure = refpress*exp(-GRAVITY/(reftemp*Reng)*(altitude-htab[i]));
+    density = refdens*exp(-GRAVITY/(reftemp*Reng)*(altitude-htab[i]));
   } else {
-    temperature = reftemp+slope*(h-htab[i]);
+    temperature = reftemp+slope*(altitude-htab[i]);
     pressure = refpress*pow(temperature/reftemp,-GRAVITY/(slope*Reng));
     density = refdens*pow(temperature/reftemp,-(GRAVITY/(slope*Reng)+1));
   }
 
-  soundspeed = sqrt(SHRATIO*Reng*temperature);
+  //cout << "Atmosphere:  h=" << altitude << " rho= " << density << endl;
 
 }
 
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGAtmosphere::GetTemperature(float altitude)
+void FGAtmosphere::Debug(void)
 {
-  if (altitude != h) {
-    h = altitude;
-    Calculate();
-  }
-  return temperature;
-}
-
-
-float FGAtmosphere::GetPressure(float altitude)
-{
-  if (altitude != h) {
-    h = altitude;
-    Calculate();
-  }
-
-  return pressure;
-}
-
-float FGAtmosphere::GetDensity(float altitude)
-{
-  if (altitude != h) {
-    h = altitude;
-    Calculate();
-  }
-
-  return density;
-}
-
-
-float FGAtmosphere::GetSoundSpeed(float altitude)
-{
-  if (altitude != h) {
-    h = altitude;
-    Calculate();
-  }
-
-  return soundspeed;
+    //TODO: Add your source code here
 }