1
0
Fork 0

Updates from Christian Mayer to put some of the weather data "on the bus."

This commit is contained in:
curt 2000-09-30 03:55:57 +00:00
parent 8d1295119f
commit df26bde4c4
3 changed files with 43 additions and 35 deletions

View file

@ -42,6 +42,10 @@ HISTORY
Eberly's spherical interpolation code. This Eberly's spherical interpolation code. This
stops our dependancy on the (ugly) voronoi stops our dependancy on the (ugly) voronoi
code and simplyfies the code structure a lot. code and simplyfies the code structure a lot.
07.05.2000 Tony Peden Added functionality to get the weather data
on 'the bus'
18.05.2000 Christian Mayer Minor clean-ups. Changed the code to use
FGWeatherUtils.h for unit conversion
*****************************************************************************/ *****************************************************************************/
/****************************************************************************/ /****************************************************************************/
@ -49,7 +53,6 @@ HISTORY
/****************************************************************************/ /****************************************************************************/
#include <simgear/compiler.h> #include <simgear/compiler.h>
#include <simgear/constants.h> #include <simgear/constants.h>
#include <simgear/misc/fgpath.hxx>
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
@ -57,6 +60,8 @@ HISTORY
#include "FGWeatherParse.h" #include "FGWeatherParse.h"
#include "FGWeatherUtils.h"
/****************************************************************************/ /****************************************************************************/
/********************************** CODE ************************************/ /********************************** CODE ************************************/
/****************************************************************************/ /****************************************************************************/
@ -66,7 +71,7 @@ FGLocalWeatherDatabase *WeatherDatabase;
void FGLocalWeatherDatabase::init( const WeatherPrecision visibility, void FGLocalWeatherDatabase::init( const WeatherPrecision visibility,
const DatabaseWorkingType type, const DatabaseWorkingType type,
const string& root ) const string &root )
{ {
cerr << "Initializing FGLocalWeatherDatabase\n"; cerr << "Initializing FGLocalWeatherDatabase\n";
cerr << "-----------------------------------\n"; cerr << "-----------------------------------\n";
@ -98,10 +103,7 @@ void FGLocalWeatherDatabase::init( const WeatherPrecision visibility,
{ {
FGWeatherParse *parsed_data = new FGWeatherParse(); FGWeatherParse *parsed_data = new FGWeatherParse();
FGPath file( root ); parsed_data->input( "weather/current.gz" );
file.append( "Weather" );
file.append( "current.txt.gz" );
parsed_data->input( file.c_str() );
unsigned int n = parsed_data->stored_stations(); unsigned int n = parsed_data->stored_stations();
sgVec2 *p = new sgVec2 [n]; sgVec2 *p = new sgVec2 [n];
@ -251,33 +253,29 @@ void FGLocalWeatherDatabase::setProperties(const FGPhysicalProperties2D& x)
void fgUpdateWeatherDatabase(void) void fgUpdateWeatherDatabase(void)
{ {
sgVec3 position; sgVec3 position;
sgVec3 wind; sgVec3 wind;
sgSetVec3(position, sgSetVec3(position,
current_aircraft.fdm_state->get_Latitude(), current_aircraft.fdm_state->get_Latitude(),
current_aircraft.fdm_state->get_Longitude(), current_aircraft.fdm_state->get_Longitude(),
current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER); current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER);
WeatherDatabase->update( position ); WeatherDatabase->update( position );
#define rho0 1.293 /*for air in normal altitudes*/ // get the data on 'the bus' for the FDM
#define PATOPSF 0.02089 // Pascals to psf
#define KTOR 1.8 // Kelvin to degree Rankine
#define KGMTOSGF 0.0019403 // kg/m^3 to slug/ft^3
FGPhysicalProperty porperty = WeatherDatabase->get(position);
FGPhysicalProperty my_value = WeatherDatabase->get(position); current_aircraft.fdm_state->set_Static_temperature( Kelvin2Rankine(porperty.Temperature) );
current_aircraft.fdm_state->set_Static_temperature(my_value.Temperature*KTOR); current_aircraft.fdm_state->set_Static_pressure( Pascal2psf(porperty.AirPressure) );
current_aircraft.fdm_state->set_Static_pressure(my_value.AirPressure*PATOPSF);
float density=rho0 * 273.15 * my_value.AirPressure / (101300 *my_value.Temperature )*KGMTOSGF; current_aircraft.fdm_state->set_Density( SIdensity2JSBsim( Density(porperty.AirPressure, porperty.Temperature) ) );
current_aircraft.fdm_state->set_Density(density*KGMTOSGF);
#define KPHTOFPS 0.9113 //km/hr to ft/s
#define MSTOFPS 3.2808 //m/s to ft/s #define MSTOFPS 3.2808 //m/s to ft/s
current_aircraft.fdm_state->set_Velocities_Local_Airmass(my_value.Wind[1]*KPHTOFPS, current_aircraft.fdm_state->set_Velocities_Local_Airmass(porperty.Wind[1]*MSTOFPS,
my_value.Wind[0]*KPHTOFPS, porperty.Wind[0]*MSTOFPS,
my_value.Wind[2]*KPHTOFPS); porperty.Wind[2]*MSTOFPS);
} }

View file

@ -114,7 +114,7 @@ public:
void init( const WeatherPrecision visibility, void init( const WeatherPrecision visibility,
const DatabaseWorkingType type, const DatabaseWorkingType type,
const string& root ); const string &root );
/************************************************************************/ /************************************************************************/
/* Constructor and Destructor */ /* Constructor and Destructor */

View file

@ -39,6 +39,8 @@ HISTORY
and lots of wee code cleaning and lots of wee code cleaning
17.01.2000 Christian Mayer Added conversion routines make it easier for 17.01.2000 Christian Mayer Added conversion routines make it easier for
JSBsim to use the weather database. JSBsim to use the weather database.
18.05.2000 Christian Mayer Added function for geting the density when
temperature and pressure are given
*****************************************************************************/ *****************************************************************************/
/****************************************************************************/ /****************************************************************************/
@ -71,7 +73,7 @@ HISTORY
/* dp: dew point in °C */ /* dp: dew point in °C */
/* wb: approximate wetbulp 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 */ /* 1 mbar = 1 hPa = 100 Pa */
/* NOTE: °C isn't a SI unit, so I should use °K instead. But as all */ /* 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 */ /* formulas are given in °C and the weather database only uses */
@ -141,24 +143,32 @@ inline WeatherPrecision wb(const WeatherPrecision t, const WeatherPrecision p, c
} }
// Assume that we've got an ideal gas in normal altitudes
inline WeatherPrecision Density(const WeatherPrecision AirPressure, const WeatherPrecision Temperature )
{
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) inline WeatherPrecision Celsius (const WeatherPrecision celsius)
{ {
return celsius + 273.16; //Kelvin 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)