99_Taupunkt.pm 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #
  2. # Taupunkt.pm
  3. #
  4. # 2011-12-21 Michael Bussmann <support@mb-net.net>
  5. #
  6. package main;
  7. use strict;
  8. use warnings;
  9. use POSIX;
  10. sub
  11. Taupunkt_Initialize($$)
  12. {
  13. my ($hash) = @_;
  14. }
  15. #
  16. # calc_sdd(T)
  17. #
  18. # Sättigungsdampfdruck [hPa] ( Temperatur t [C] )
  19. # über ebenen Wasseroberflächen
  20. #
  21. # Nach Magnus-Formel
  22. #
  23. # E_w (t)= 6.112 hPa * e ^ (17.62*T / ( 243.12 °C + T))
  24. # für -45 °C <= t <= 60 °C
  25. #
  26. # Nach D.Sonntag (Wikipedia)
  27. # http://de.wikibooks.org/wiki/Tabellensammlung_Chemie/_Stoffdaten_Wasser
  28. #
  29. sub
  30. calc_sdd($)
  31. {
  32. my ($t) = @_;
  33. my $tk = $t+273.15;
  34. # Magnus
  35. #return ( 6.112 * exp( (17.62*$t)/(243.12+$t)) );
  36. # Wikipedia/D.Sonntag
  37. return ( exp( (-6094.4642/$tk) + 21.1249952 - ($tk*2.7245552e-2) + ($tk**2 * 1.6853396e-5 ) + ( 2.4575506*log($tk)) ) / 100 );
  38. }
  39. #
  40. # calc_dd(r, T)
  41. #
  42. # Dampfdruck [hPa] (rel. Feuchte r [%], Temperatur T [C] )
  43. #
  44. # DD = r/100 * sdd(T)
  45. #
  46. sub
  47. calc_dd($$)
  48. {
  49. my ($r, $t) = @_;
  50. return ( $r*calc_sdd($t)/100.0 );
  51. }
  52. #
  53. # calc_dewpoint(r, T)
  54. #
  55. # Taupunkt [C] (rel. Feuchte r [%], Temperatur T [C] )
  56. #
  57. # Taupunkt (ü.W.): a = 7.5, b = 237.3 (für T>=0)
  58. # Taupunkt (ü.W.): a = 7.6, b = 240.7 (für T<0)
  59. # Frostpunkt: a = 9.5, b = 265.5 (für T<0)
  60. #
  61. # TD(r,T) = b*v/(a-v) mit v(r,T) = log10(DD(r,T)/6.1078)
  62. #
  63. sub
  64. calc_dewpoint($$)
  65. {
  66. my ($r, $t) = @_;
  67. my ($a, $b, $v);
  68. if ($t>=0) {
  69. $a=7.5; $b=237.3;
  70. } else {
  71. $a=7.6; $b=240.7;
  72. }
  73. $v=log10(calc_dd($r, $t)/6.1078);
  74. return ( ($b*$v)/($a-$v) );
  75. }
  76. #
  77. # calc_af(r, T)
  78. #
  79. # Absolute Feuchte [g/m^3] (rel. Feuchte r [%], Temperatur T [C] )
  80. #
  81. # auf 1 bar (10^5 Pa)
  82. #
  83. # R* = 8314.3 J/(kmol*K)
  84. # mw = 18.016 kg
  85. #
  86. # AF(r,TK) = 10^5 * mw/R* * DD(r,T)/TK
  87. # AF(TD,TK) = 10^5 * mw/R* * SDD(TD)/TK
  88. #
  89. sub
  90. calc_af($$)
  91. {
  92. my ($r, $t) = @_;
  93. my $tk = $t+273.15;
  94. return ( (1801600/8314.3) * (calc_dd($r, $t)/$tk) );
  95. ### return ( (1801600/8314.3) * (calc_sdd(calc_dewpoint($r, $t))/$tk) );
  96. }
  97. 1;