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