Updates from Christian Mayer to put some of the weather data "on the bus."
This commit is contained in:
parent
8d1295119f
commit
df26bde4c4
3 changed files with 43 additions and 35 deletions
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue