]> git.mxchange.org Git - flightgear.git/blobdiff - src/WeatherCM/FGWeatherUtils.h
Moved some of the low level scene graph construction code over to simgear.
[flightgear.git] / src / WeatherCM / FGWeatherUtils.h
index 502120960bc4c5c5fbb1297ac547800b60fbec15..505fcdc58cc81103daa0d03449cdab997444a683 100644 (file)
@@ -37,6 +37,10 @@ HISTORY
                                suggestion
 19.10.1999 Christian Mayer     change to use PLIB's sg instead of Point[2/3]D
                                and lots of wee code cleaning
+17.01.2000 Christian Mayer     Added conversion routines make it easier for
+                               JSBsim to use the weather database.
+18.05.2000 Christian Mayer      Added function for geting the density when
+                                temperature and pressure are given
 *****************************************************************************/
 
 /****************************************************************************/
@@ -69,7 +73,7 @@ HISTORY
 /* dp:     dew point in °C                                                 */
 /* wb:     approximate wetbulp in °C                                       */
 /*                                                                         */
-/* NOTE: Pascal is the SI unit for preasure and is defined as Pa = N/m^2    */
+/* NOTE: Pascal is the SI unit for pressure and is defined as Pa = N/m^2    */
 /*       1 mbar = 1 hPa = 100 Pa                                           */
 /* NOTE: °C isn't a SI unit, so I should use °K instead. But as all        */
 /*       formulas are given in °C and the weather database only uses       */
@@ -139,39 +143,77 @@ inline WeatherPrecision wb(const WeatherPrecision t, const WeatherPrecision p, c
 
 }
 
-inline WeatherPrecision Celsius(const WeatherPrecision celsius)
+// Assume that we've got an ideal gas in normal altitudes
+inline WeatherPrecision Density(const WeatherPrecision AirPressure, const WeatherPrecision Temperature )
 {
-    return celsius + 273.16;                           //Kelvin
+    const float rho0 = 1.293; /*density for air in normal altitudes at 0°C and 1013 mbar*/
+
+    return rho0 * 273.15 * AirPressure / (101300.0 * Temperature);
+}
+
+inline WeatherPrecision Celsius                    (const WeatherPrecision celsius)
+{
+    return celsius + 273.15;                           //Kelvin
 }
 
-inline WeatherPrecision Fahrenheit(const WeatherPrecision fahrenheit)
+inline WeatherPrecision Fahrenheit         (const WeatherPrecision fahrenheit)
 {
-    return (fahrenheit * 9.0 / 5.0) + 32.0 + 273.16;   //Kelvin
+    return (fahrenheit * 9.0 / 5.0) + 32.0 + 273.15;   //Kelvin
 }
 
-inline WeatherPrecision Kelvin2Celsius(const WeatherPrecision kelvin)
+inline WeatherPrecision Kelvin2Celsius     (const WeatherPrecision kelvin)
 {
-    return kelvin - 273.16;                            //Celsius
+    return kelvin - 273.15;                            //Celsius
 }
 
-inline WeatherPrecision Kelvin2Fahrenheit(const WeatherPrecision kelvin)
+inline WeatherPrecision Kelvin2Fahrenheit   (const WeatherPrecision kelvin)
 {
-    return ((kelvin - 273.16) * 9.0 / 5.0) + 32.0;      //Fahrenheit
+    return ((kelvin - 273.15) * 9.0 / 5.0) + 32.0;     //Fahrenheit
 }
 
-inline WeatherPrecision Celsius2Fahrenheit(const WeatherPrecision celsius)
+inline WeatherPrecision Celsius2Fahrenheit  (const WeatherPrecision celsius)
 {
-    return (celsius * 9.0 / 5.0) + 32.0;                //Fahrenheit
+    return (celsius * 9.0 / 5.0) + 32.0;               //Fahrenheit
 }
 
-inline WeatherPrecision Fahrenheit2Celsius(const WeatherPrecision fahrenheit)
+inline WeatherPrecision Fahrenheit2Celsius  (const WeatherPrecision fahrenheit)
 {
     return (fahrenheit - 32.0) * 5.0 / 9.0;            //Celsius
 }
 
-inline WeatherPrecision Torr2Pascal(const WeatherPrecision torr)
+inline WeatherPrecision Torr2Pascal        (const WeatherPrecision torr)
+{
+    return (101325.0/760.0)*torr;                      //Pascal
+}
+
+inline WeatherPrecision Rankine2Kelvin     (const WeatherPrecision Rankine)
+{
+    return (5.0 / 9.0) * Rankine;                      //Kelvin
+}
+
+inline WeatherPrecision JSBsim2SIdensity    (const WeatherPrecision JSBsim)
+{
+    return JSBsim / 0.0019403203;                      //kg / cubic metres
+}
+
+inline WeatherPrecision psf2Pascal         (const WeatherPrecision psf)
+{
+    return psf / 0.020885434;                          //lbs / square foot (used in JSBsim)
+}
+
+inline WeatherPrecision Kelvin2Rankine     (const WeatherPrecision kelvin)
+{
+    return (9.0 / 5.0) * kelvin;                       //Rankine (used in JSBsim)
+}
+
+inline WeatherPrecision SIdensity2JSBsim    (const WeatherPrecision SIdensity)
+{
+    return 0.0019403203 * SIdensity;                   //slug / cubic feet (used in JSBsim)
+}
+
+inline WeatherPrecision Pascal2psf         (const WeatherPrecision Pascal)
 {
-    return (101325.0/760.0)*torr;
+    return 0.020885434 * Pascal;                       //lbs / square feet (used in JSBsim)
 }
 
 /****************************************************************************/
@@ -179,4 +221,4 @@ inline WeatherPrecision Torr2Pascal(const WeatherPrecision torr)
 /****************************************************************************/
 
 /****************************************************************************/
-#endif /*FGWeatherUtils_H*/
\ No newline at end of file
+#endif /*FGWeatherUtils_H*/