module Numeric.Estimator.Model.Pressure (pressureToHeight, heightToPressure) where
basePressure, baseTemperature, lapseRate, baseAltitude, airGasConstant, g_0, airMass :: Floating a => a
basePressure = 101325
baseTemperature = 288.15
lapseRate = 0.0065
baseAltitude = 0
airGasConstant = 8.31432
g_0 = 9.80665
airMass = 0.0289644
pressureToHeight :: Floating a => a -> a
pressureToHeight pressure = (baseAltitude * lapseRate + baseTemperature / ((pressure / basePressure) ** (airGasConstant * lapseRate / (g_0 * airMass))) baseTemperature) / lapseRate
heightToPressure :: Floating a => a -> a
heightToPressure height = basePressure * (baseTemperature / (baseTemperature + lapseRate * (height baseAltitude))) ** (g_0 * airMass / (airGasConstant * lapseRate))