Example #1
0
//  Calculate the "e ^ (-mgh/RT)" term for pressure conversions:
static double calcPressureTerm(float tempF, float elevationFT)
{
    double      exponent;
    double      elevMeters = (double)wvutilsConvertFeetToMeters(elevationFT);
    double      tempKelvin = (double)wvutilsConvertFToC(tempF) + 273.15;

    // e ^ -elevMeters/(tempK * 29.263)
    exponent = (-elevMeters);

    // degrees Kelvin (T)
    exponent /= (tempKelvin * 29.263);

    // e ^ (-mgh/RT)
    exponent = exp(exponent);

    return exponent;
}
Example #2
0
//  calculate altimeter pressure from station pressure
float wvutilsConvertSPToAltimeter (float SPInches, float elevationFT)
{
    double      magicEXP            = 0.190284;
    double      inverseMagicEXP     = 1 / magicEXP;
    double      elevMeters          = (double)wvutilsConvertFeetToMeters(elevationFT);
    double      stationPressureMB   = (double)wvutilsConvertINHGToHPA(SPInches);
    double      constantTerm;
    double      variableTerm;
    double      tempdouble;
    double      altimeter;

    // Formula used: http://www.wrh.noaa.gov/slc/projects/wxcalc/formulas/altimeterSetting.pdf
    
    // calculate the constant term
    constantTerm =  pow (1013.25, magicEXP);
    constantTerm *= 0.0065;
    constantTerm /= 288;

    // calculate the variable term
    tempdouble = stationPressureMB - 0.3;
    tempdouble = pow (tempdouble, magicEXP);
    variableTerm = elevMeters / tempdouble;

    // compute main term
    tempdouble = constantTerm * variableTerm;
    tempdouble += 1;
    tempdouble = pow (tempdouble, inverseMagicEXP);

    // compute altimeter
    altimeter = stationPressureMB - 0.3;
    altimeter *= tempdouble;

    // finally, convert back to inches
    altimeter *= 0.0295299;
    
    return (float)altimeter;
}