mirror of https://github.com/ecmwf/eccodes.git
Units
This commit is contained in:
parent
372b8a90e4
commit
1a5708b255
|
@ -0,0 +1,258 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import re
|
||||
from collections import defaultdict
|
||||
import cfunits
|
||||
|
||||
|
||||
RE = re.compile(r"^\d+ \d+ ([\-A-Za-z0-9]+) (.*)\((.*)\)$")
|
||||
|
||||
FIX = {
|
||||
"deg C": "degC",
|
||||
"degrees C": "degC",
|
||||
"Dobson": "DU",
|
||||
"kg m**-2/day": "kg m**-2 day**-1",
|
||||
"m**2 / m**2": "m**2 m**-2",
|
||||
"kg kg**-1 per day": "kg kg**-1 day**-1",
|
||||
"K per day": "K day**-1",
|
||||
"cm per day": "cm day**-1",
|
||||
"mm per day": "mm day**-1",
|
||||
"m s**-1 per day": "m s**-1 day**-1s",
|
||||
"degreeperday": "degC day**-1",
|
||||
"Joule": "J",
|
||||
"Jm-2": "J m**-2",
|
||||
"Nm**-3": "N m**-3",
|
||||
"Ws m**-2": "W s m**-2",
|
||||
"m s**-1 day**-1s": "m s**-1 day**-1 s",
|
||||
"m s**-1 deg C": "m s**-1 degC",
|
||||
"psuperday": "psu day**-1",
|
||||
"ms*-1": "m s**-1",
|
||||
"m s*-1": "m s**-1",
|
||||
"kg kg-1": "kg kg**-1",
|
||||
"kg/kg": "kg kg**-1",
|
||||
"kg2 kg-2": "kg**2 kg**-2",
|
||||
"m3 m-3": "m**3 m**-3",
|
||||
"m3/m3": "m**3 m**-3",
|
||||
"ms-1": "m s**-1",
|
||||
"cm/s": "cm s**-1",
|
||||
"mm6/m3": "mm**6 m**-3",
|
||||
"m**2 K s**-2": "K m**2 s**-2",
|
||||
"m s-**2": "m s**-2",
|
||||
# "M":"m",
|
||||
"M/S": "m s**-1",
|
||||
"bq m-2 s-1": "Bq m**-2 s**-1",
|
||||
"bq m-2": "Bq m**-2",
|
||||
"bq m-3": "Bq m**-3",
|
||||
"C": "degC",
|
||||
"J kg-1": "J kg**-1",
|
||||
"J kg-1 ": "J kg**-1",
|
||||
"J/kg": "J kg**-1",
|
||||
"m2 s-2": "m**2 s**-2",
|
||||
"m2/s2": "m**2 s**-2",
|
||||
" m2/s": "m**2 s**-1",
|
||||
"W/kg": "W kg**-1",
|
||||
"m2 s-3": "m**2 s**-3",
|
||||
"radians": "rad",
|
||||
"s-2": "s**-2",
|
||||
"K s-1": "K s**-1",
|
||||
"Deg C": "degC",
|
||||
" kg kg**-1 s**-1": "kg kg**-1 s**-1",
|
||||
"1/s": "s**-1",
|
||||
"kg kg-1 s-1": "kg kg**-1 s**-1",
|
||||
"kg/kg/s": "kg kg**-1 s**-1",
|
||||
"s-1": "s**-1",
|
||||
"K kg kg-1": "K kg kg**-1",
|
||||
"K2": "K**2",
|
||||
"N m-2": "N m**-2",
|
||||
" N m-2": "N m**-2",
|
||||
"N/m2": "N m**-2",
|
||||
"kg/m2/h": "kg m**-2 hour**-2",
|
||||
"mW/m2": "m W m**-2",
|
||||
"1/km": "km**-1",
|
||||
"mm s-1": "mm s**-1",
|
||||
"m2 2-1": "m**2 s**-1",
|
||||
"km2": "km**2",
|
||||
"10-7 s-2": "10**-7 s**-2",
|
||||
"0-1": "[0..1]",
|
||||
"0 - 1": "[0..1]",
|
||||
"0to1": "[0..1]",
|
||||
"(0 to 1)": "[0..1]",
|
||||
"(0-1)": "[0..1]",
|
||||
"(-1 to 1)": "[-1..1]",
|
||||
"-1 to 1": "[-1..1]",
|
||||
"min": "minute",
|
||||
"m3/s": "m**3 s**-1",
|
||||
"m3 kg-1 s-1": "m**3 kg**-1 s**-1",
|
||||
"m**2 s radian**-1": "m**2 s rad**-1",
|
||||
"m2/s": "m**2 s**-1",
|
||||
"m2 s-1": "m**2 s**-1",
|
||||
"m2 s**-1": "m**2 s**-1",
|
||||
"K m2 kg-1 s-1": "K m**2 kg**-1 s**-1",
|
||||
"K*m2 / kg / s": "K m**2 kg**-1 s**-1",
|
||||
"K*m2/kg/s": "K m**2 kg**-1 s**-1",
|
||||
"m2 kg-1 s-1": "m**2 kg**-1 s**-1",
|
||||
"kg m2": "kg m**2",
|
||||
" m2": "m**2",
|
||||
"m s-2": "m s-**2",
|
||||
"m/s": "m s**-1",
|
||||
"m s-1": "m s**-1",
|
||||
" m/s": "m s**-1",
|
||||
" m s-1": "m s**-1",
|
||||
"Pa m**2 s**-3": "m**2 Pa s**-3",
|
||||
"W m sr m-2": "W m sr m**-2",
|
||||
"kgm-2": "kg m**-2",
|
||||
"N m-2 ": "N m**-2",
|
||||
"d": "day",
|
||||
"W m-2": "W m**-2",
|
||||
"W m-2 ": "W m**-2",
|
||||
"W/m2": "W m**-2",
|
||||
"W m-2 K-1": "W m**-2 K**-1",
|
||||
" m": "m",
|
||||
" 1/m": "m**-1",
|
||||
"1/m": "m**-1",
|
||||
"m-1": "m**-1",
|
||||
"h": "hour",
|
||||
"kg-1": "kg**-1",
|
||||
"Bq kg-1": "Bq kg**-1",
|
||||
"1/kg2/s": "kg**-2 s**-1",
|
||||
"kg-2 s-1": "kg**-2 s**-1",
|
||||
"J m-2": "J m**-2",
|
||||
"kg s-2": "kg s**-2",
|
||||
"K m-1": "K m**-1",
|
||||
"K/m": "K m**-1",
|
||||
"kg m-1": "kg m**-1",
|
||||
"kg/m": "kg m**-1",
|
||||
"N m-2 s": "N m**-2 s",
|
||||
"Pa s-1": "Pa s**-1",
|
||||
"Pa/s": "Pa s**-1",
|
||||
"W/m3/sr": "W m**-3 sr**-1",
|
||||
" 1/m/sr": "m**-1 sr**-1",
|
||||
"1/m/sr": "m**-1 sr**-1",
|
||||
"s m-1": "s m**-1",
|
||||
"s/m": "s m**-1",
|
||||
"m-2": "m**-2",
|
||||
"kg m-2": "kg m**-2",
|
||||
"kg/m2": "kg m**-2",
|
||||
"kg m-2 s-1": "kg s**-1 m**-2",
|
||||
"kg/m2/s": "kg s**-1 m**-2",
|
||||
"m-2/s-2": "m**-2 s**2",
|
||||
"s2 m-2": "m**-2 s**2",
|
||||
"Bq s m-3": "Bq s m**-3",
|
||||
"m-3": "m**-3",
|
||||
"kg kg-1m-3": "kg kg**-1 m**-3",
|
||||
"kg m-3": "kg m**-3",
|
||||
"kg/m3": "kg m**-3",
|
||||
"Bq m-3": "Bq m**-3",
|
||||
"kg2 m-4": "kg**2 m**-4",
|
||||
"m kg-1 s-1": "m kg**-1 s**-1",
|
||||
"W/m/sr": "W m**-1 sr**-1",
|
||||
"W m-1 s-1": "W m**-1 s**-1",
|
||||
"klux": "klx",
|
||||
"m s-**2": "m s**-2",
|
||||
"W m-**3 sr**-1": "W m**-3 sr**-1",
|
||||
"m**2s**-2": "m**2 s**-2",
|
||||
"m2s-2": "m**2 s**-2",
|
||||
"w m**-2": "W m**-2",
|
||||
"w m-2": "W m**-2",
|
||||
"m-2 s-1": "m**-2 s**-1",
|
||||
"m-2s-1": "m**-2 s**-1",
|
||||
"s**-1 m**-2": "m**-2 s**-1",
|
||||
"s-1 m-2": "m**-2 s**-1",
|
||||
"K2 m-2 s-1": "K**2 m**-2 s**-1",
|
||||
"mol m-2 s-1": "mol m**-2 s**-1",
|
||||
"m Pa s**-2": "Pa m s**-2",
|
||||
"Pa s**-1 K": "K Pa s**-1",
|
||||
"Km kg-1 s-1": "K m kg**-1 s**-1",
|
||||
"hPa s-1": "hPa s**-1",
|
||||
"(10**-6 g) m**-3": "ug m**-3",
|
||||
"ug/m**3": "ug m**-3",
|
||||
"kg m-1 s-2": "kg m**-1 s**-2",
|
||||
"Bq m-2": "Bq m**-2",
|
||||
# C = CO2, S = SOX
|
||||
"kg C m**-2 s**-1": "kg m**-2 s**-1",
|
||||
"mg S/m**2": "mg m**-2",
|
||||
}
|
||||
|
||||
|
||||
class P(defaultdict):
|
||||
def __init__(self):
|
||||
super().__init__(set)
|
||||
|
||||
|
||||
class Q(defaultdict):
|
||||
def __init__(self):
|
||||
super().__init__(P)
|
||||
|
||||
|
||||
def F(u):
|
||||
return FIX.get(u, u)
|
||||
|
||||
|
||||
def C(u):
|
||||
x = cfunits.Units(u).formatted()
|
||||
if x is None:
|
||||
return "~~ /" + u + "/"
|
||||
return x
|
||||
|
||||
|
||||
U = defaultdict(Q)
|
||||
|
||||
for root, _, files in os.walk("."):
|
||||
for file in files:
|
||||
full = os.path.join(root, file)
|
||||
|
||||
if full.endswith(".table"):
|
||||
with open(full) as f:
|
||||
first = True
|
||||
for line in f.readlines():
|
||||
line = line.strip()
|
||||
if first:
|
||||
if (
|
||||
line.strip()
|
||||
!= "# This file was automatically generated by ./param.pl"
|
||||
):
|
||||
break
|
||||
# print(full)
|
||||
first = False
|
||||
continue
|
||||
# print(line)
|
||||
m = RE.match(line)
|
||||
if m:
|
||||
units = m.group(3)
|
||||
param = m.group(2).strip()
|
||||
if param.endswith("("):
|
||||
param = param[:-1]
|
||||
units = "(" + units
|
||||
units = F(units)
|
||||
U[C(units)][units][param].add(
|
||||
full.replace("./definitions/", "")
|
||||
)
|
||||
|
||||
if full.endswith("units.def"):
|
||||
with open(full) as f:
|
||||
param = "?"
|
||||
units = "?"
|
||||
for line in f.readlines():
|
||||
line = line.strip()
|
||||
if line.startswith("#") and "file generated" not in line:
|
||||
param = line[1:]
|
||||
|
||||
if line.endswith("= {"):
|
||||
units = line[1:-5]
|
||||
units = F(units)
|
||||
U[C(units)][units][param].add(
|
||||
full.replace("./definitions/", "")
|
||||
)
|
||||
param = "?"
|
||||
units = "?"
|
||||
|
||||
for k, v in sorted(U.items()):
|
||||
print(k)
|
||||
for p, f in sorted(v.items()):
|
||||
print(" [{}]".format(p))
|
||||
for a, b in sorted(f.items()):
|
||||
# print(' [{}] {}'.format(a, ", ".join(sorted(b)))) # , list(f))
|
||||
print(" [{}]".format(a))
|
||||
|
||||
print()
|
Loading…
Reference in New Issue