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
|
||||
stops our dependancy on the (ugly) voronoi
|
||||
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/constants.h>
|
||||
#include <simgear/misc/fgpath.hxx>
|
||||
|
||||
#include <Aircraft/aircraft.hxx>
|
||||
|
||||
|
@ -57,6 +60,8 @@ HISTORY
|
|||
|
||||
#include "FGWeatherParse.h"
|
||||
|
||||
#include "FGWeatherUtils.h"
|
||||
|
||||
/****************************************************************************/
|
||||
/********************************** CODE ************************************/
|
||||
/****************************************************************************/
|
||||
|
@ -66,7 +71,7 @@ FGLocalWeatherDatabase *WeatherDatabase;
|
|||
|
||||
void FGLocalWeatherDatabase::init( const WeatherPrecision visibility,
|
||||
const DatabaseWorkingType type,
|
||||
const string& root )
|
||||
const string &root )
|
||||
{
|
||||
cerr << "Initializing FGLocalWeatherDatabase\n";
|
||||
cerr << "-----------------------------------\n";
|
||||
|
@ -98,10 +103,7 @@ void FGLocalWeatherDatabase::init( const WeatherPrecision visibility,
|
|||
{
|
||||
FGWeatherParse *parsed_data = new FGWeatherParse();
|
||||
|
||||
FGPath file( root );
|
||||
file.append( "Weather" );
|
||||
file.append( "current.txt.gz" );
|
||||
parsed_data->input( file.c_str() );
|
||||
parsed_data->input( "weather/current.gz" );
|
||||
unsigned int n = parsed_data->stored_stations();
|
||||
|
||||
sgVec2 *p = new sgVec2 [n];
|
||||
|
@ -251,33 +253,29 @@ void FGLocalWeatherDatabase::setProperties(const FGPhysicalProperties2D& x)
|
|||
void fgUpdateWeatherDatabase(void)
|
||||
{
|
||||
sgVec3 position;
|
||||
sgVec3 wind;
|
||||
sgVec3 wind;
|
||||
|
||||
|
||||
sgSetVec3(position,
|
||||
current_aircraft.fdm_state->get_Latitude(),
|
||||
current_aircraft.fdm_state->get_Longitude(),
|
||||
current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER);
|
||||
sgSetVec3(position,
|
||||
current_aircraft.fdm_state->get_Latitude(),
|
||||
current_aircraft.fdm_state->get_Longitude(),
|
||||
current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER);
|
||||
|
||||
WeatherDatabase->update( position );
|
||||
|
||||
#define rho0 1.293 /*for air in normal altitudes*/
|
||||
#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
|
||||
// get the data on 'the bus' for the FDM
|
||||
|
||||
FGPhysicalProperty porperty = WeatherDatabase->get(position);
|
||||
|
||||
FGPhysicalProperty my_value = WeatherDatabase->get(position);
|
||||
current_aircraft.fdm_state->set_Static_temperature(my_value.Temperature*KTOR);
|
||||
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(density*KGMTOSGF);
|
||||
current_aircraft.fdm_state->set_Static_temperature( Kelvin2Rankine(porperty.Temperature) );
|
||||
current_aircraft.fdm_state->set_Static_pressure( Pascal2psf(porperty.AirPressure) );
|
||||
|
||||
current_aircraft.fdm_state->set_Density( SIdensity2JSBsim( Density(porperty.AirPressure, porperty.Temperature) ) );
|
||||
|
||||
#define KPHTOFPS 0.9113 //km/hr 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,
|
||||
my_value.Wind[0]*KPHTOFPS,
|
||||
my_value.Wind[2]*KPHTOFPS);
|
||||
current_aircraft.fdm_state->set_Velocities_Local_Airmass(porperty.Wind[1]*MSTOFPS,
|
||||
porperty.Wind[0]*MSTOFPS,
|
||||
porperty.Wind[2]*MSTOFPS);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ public:
|
|||
|
||||
void init( const WeatherPrecision visibility,
|
||||
const DatabaseWorkingType type,
|
||||
const string& root );
|
||||
const string &root );
|
||||
|
||||
/************************************************************************/
|
||||
/* Constructor and Destructor */
|
||||
|
|
|
@ -39,6 +39,8 @@ HISTORY
|
|||
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
|
||||
*****************************************************************************/
|
||||
|
||||
/****************************************************************************/
|
||||
|
@ -71,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 */
|
||||
|
@ -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)
|
||||
{
|
||||
return celsius + 273.16; //Kelvin
|
||||
return celsius + 273.15; //Kelvin
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
return kelvin - 273.16; //Celsius
|
||||
return kelvin - 273.15; //Celsius
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
Loading…
Reference in a new issue