Navigation
Wichtige Links
Back
#!/bin/sh # # relhumidity # Berechnung der relativen Luftfeuchtigkeit # aus Temperatur und Taupunkt # # parameter: # arg1 = Temperatur # arg2 = Taupunkt # bc wird zum Rechnen gebraucht BCPROG="/usr/bin/bc" BCOPTS="-lq" BC="$BCPROG $BCOPTS" # mal sehen, ob das bc Programm gefunden wird if ! which $BCPROG >/dev/null 2>&1 ; then echo "ERROR: relhumidity needs bc" exit 1 fi # prüfe, ob zwei Argumente übergeben wurden if test -z "$1" -o -z "$2" ; then echo "ERROR: relhumidity needs arguments <temperature> <dewpoint>" exit 1 fi # Taupunkttemperatur kann nicht grösser sein als Temperatur BOOL=$(echo "$1 >= $2" | $BC) if ! test $BOOL == 1 ; then echo "ERROR: Dewpoint is greater than Temperature" exit 1 fi # die eigentliche Berechnung macht bc #echo "if ($1 > 0.0) { ta = 7.5 ; tb = 237.3 ; } \ # else { ta = 7.6 ; tb = 240.7 ; } ; \ # if ($2 > 0.0) { tpa = 7.5 ; tpb = 237.3 ; } \ # else { tpa = 7.6 ; tpb = 240.7 ; } ; \ # sddt = 6.1078 * e( l(10) * ((ta * $1) / (tb + $1)) ) ; \ # sddtp = 6.1078 * e( l(10) * ((tpa * $2) / (tpb + $2)) ) ; \ # rh = (100 * sddtp / sddt) + 0.05 ; \ # scale = 1 ; # (rh / 1.0) * 1.0 ;" | $BC # # eine alternative Version (besser lesbar): # Formeln: # r = relative Luftfeuchte # T = Temperatur in °C # TD = Taupunkttemperatur in °C # SDD = Sättigungsdampfdruck in hPa # # Parameter: # a = 7.5, b = 237.3 für T >= 0 # a = 7.6, b = 240.7 für T < 0 # # SDD(T) = 6.1078 * 10^((a*T)/(b+T)) # r(T,TD) = 100 * SDD(TD) / SDD(T) # # Da bc nur ganzzahlige Exponenten akzeptiert, muss mit # Logarithmen gerechnet werden. Es gilt: # ln(a^b) = b * ln(a) # also: a^b = e^(b * ln(a)) # echo "define pa (n) { if (n >= 0.0) { return (7.5); } else { return (7.6); } } define pb (n) { if (n >= 0.0) { return (237.3); } else { return (240.7); } } define sdd (t) { return (6.1078 * e( l(10) * ((pa(t) * t) / (pb(t) + t)) ) ); } scale = 20; rh = (100.0 * sdd($2) / sdd($1)); /* adding 0.05 for correct rounding */ rh = (rh + 0.05); /* rounding result to one decimal digit */ scale = 1; (rh / 1.0)" | $BC exit 0