]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/FGAtmosphere.cpp
JSBSim tweaks.
[flightgear.git] / src / FDM / JSBSim / FGAtmosphere.cpp
index d494c1d31b5fad50e8adc81fb43be545ec88e745..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,55 +57,72 @@ 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);
-  temperature = T;
-  pressure    = p;
-  density     = rho;
-  soundspeed  = a;
+  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();
+    //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) );
 
-    Calculate(h);
+    if (psiw < 0) psiw += 2*M_PI;
 
-    temperature = T;
-    pressure    = p;
-    density     = rhos;
-    soundspeed  = a;
+    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);
-  return GetDensity(altitude);
-}
-
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 void FGAtmosphere::Calculate(float altitude)
 {
@@ -114,7 +131,7 @@ void FGAtmosphere::Calculate(float altitude)
   float slope,reftemp,refpress,refdens;
   int i=0;
   float htab[]={0,36089,82020,154198,173882,259183,295272,344484}; //ft.
-
+  // cout << "Atmosphere:  h=" << altitude << " rho= " << density << endl;
   if (altitude <= htab[0]) {
     altitude=0;
   } else if (altitude >= htab[7]){
@@ -177,45 +194,24 @@ void FGAtmosphere::Calculate(float altitude)
     break;
   }
 
-
   if (slope == 0) {
-    T = reftemp;
-    p = refpress*exp(-GRAVITY/(reftemp*Reng)*(altitude-htab[i]));
-    rhos = refdens*exp(-GRAVITY/(reftemp*Reng)*(altitude-htab[i]));
+    temperature = reftemp;
+    pressure = refpress*exp(-GRAVITY/(reftemp*Reng)*(altitude-htab[i]));
+    density = refdens*exp(-GRAVITY/(reftemp*Reng)*(altitude-htab[i]));
   } else {
-    T = reftemp+slope*(altitude-htab[i]);
-    p = refpress*pow(T/reftemp,-GRAVITY/(slope*Reng));
-    rhos = refdens*pow(T/reftemp,-(GRAVITY/(slope*Reng)+1));
+    temperature = reftemp+slope*(altitude-htab[i]);
+    pressure = refpress*pow(temperature/reftemp,-GRAVITY/(slope*Reng));
+    density = refdens*pow(temperature/reftemp,-(GRAVITY/(slope*Reng)+1));
   }
 
-  a = sqrt(SHRATIO*Reng*T);
+  //cout << "Atmosphere:  h=" << altitude << " rho= " << density << endl;
 
 }
 
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-float FGAtmosphere::GetTemperature(float altitude)
-{
-    Calculate(altitude);
-    return T;
-}
-
-
-float FGAtmosphere::GetPressure(float altitude)
-{
-    Calculate(altitude);
-    return p;
-}
-
-float FGAtmosphere::GetDensity(float altitude)
-{
-    Calculate(altitude);
-    return rhos;
-}
-
-
-float FGAtmosphere::GetSoundSpeed(float altitude)
+void FGAtmosphere::Debug(void)
 {
-    Calculate(altitude);
-    return a;
+    //TODO: Add your source code here
 }