// 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; }
// 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; }