blob: 5500ea06153eb3fc2f72677a623eb434650100e9 [file] [log] [blame]
#!/usr/bin/python3
# SPDX-License-Identifier: Apache-2.0
# Copyright 2020 IBM Corp.
# https://en.wikipedia.org/wiki/Barometric_formula
from math import exp, log
import sys
import argparse
Pb = 101325.00
Tb = 288.15
Lb = -0.0065
hb = 0
Rstar = 8.3144598
g0 = 9.80665
M = 0.0289644
C0 = 273.15
def P(h):
return Pb * exp((-g0 * M * (h - hb)) / (Rstar * Tb))
def T(h):
return (h - hb) * Lb + Tb
def Hp(p):
return (log(p / Pb) * (Rstar * Tb)) / (-g0 * M) + hb
def Ht(t):
return ((t - Tb) / Lb) + hb
def K(c):
return C0 + c
def C(k):
return k - C0
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--height", type=float, default=None, help="Height above sea level in metres")
parser.add_argument("--temperature", type=float, default=None, help="Temperature in Celcius")
parser.add_argument("--pressure", type=float, default=None, help="Atmospheric pressure in Pascals")
args = parser.parse_args()
out = []
if args.height is not None:
local = []
local.append("Height")
p = P(args.height)
local.append("Pressure at {:.2f}m: {:.2f}Pa".format(args.height, p))
c = C(T(args.height))
local.append("Temperature at {:.2f}m: {:.2f}C".format(args.height, c))
out.append("\n\t".join(local))
if args.temperature is not None:
local = []
local.append("Temperature")
ht = Ht(K(args.temperature))
local.append("Height at {:.2f}C: {:.2f}m".format(args.temperature, ht))
p = P(ht)
local.append("Pressure at {:.2f}m: {:.2f}Pa".format(ht, p))
out.append("\n\t".join(local))
if args.pressure is not None:
local = []
local.append("Pressure")
hp = Hp(args.pressure)
local.append("Height at {:.2f}Pa: {:.2f}m".format(args.pressure, hp))
t = C(T(hp))
local.append("Temperature at {:.2f}m: {:.2f}C".format(hp, t))
out.append("\n\t".join(local))
print("\n\n".join(out))
if __name__ == "__main__":
main()