h-x-Diagramm selber erstellen; Teil 1

Hx-Dia_Prinzip_1
Bild 1: Mollier – h,x – Diagramm

Hier möchte ich mit euch meine Erfolge und Rückschläge teilen bei dem Versuch selbst ein h-x – Diagramm zu zeichnen.

Erste Anlaufstelle um mehr über das Diagramm zu erfahren war der Wikipedia Eintrag zum Mollier-h-x-Diagramm. Dieser Eintrag ist zwar sehr interessant, hilft aber nicht wirklich dabei zu verstehen, wie das Diagramm erstellt wird 😦

Über den Artikel relative Feuchte gelangt man dann aber schnell zum Begriff des Sättigungsdampfdrucks, und von dort zur Magnus-Formel

E_w(t) = {6,112}\times{e^ \frac{{17,62}\times{t}}{243,12 + t}}

t = relative Teperatur in °C

Mit der Magnus-Formel lässt sich der Sättigungsdampfdruck von Wasserdampf annähernd bestimmen. Im genannten Wikipedia-Artikel gibt es einen Link zur Unterseite Formeln und Tabellen, diese enthält neben einer Tabelle (an Hand derer man seine eigenen Berechnungen prüfen kann) auch eine bessere Näherungsformel – Am Ende habe ich diese dann auch benutzt.

E_w(T) = e^{\frac{-6094,4642}{T}-21,1249952-{2,724552}\times{10^{-2}}\times{T}+1,6853396\times{10^{-5}}\times{T^2}+2,4575506\times{\ln{T}}}

T = absoulte Temperatur in K

Die Ergebnisse beider Formeln gelten nur für ebene Oberflächen und in der Abwesenheit anderer Gase bzw. Gasgemische wie Luft. Sie gelten also lediglich für reine Phasen und benötigen einen Korrekturfaktor bei der Anwesenheit von Luft.

f_w=1,00519\pm{0,00108}

das ganze sieht in Javascript dann so aus:

function saettigungsdampfdruck(T){
    var term1=(-6094.4642/T);
    var term2=21.1249952 - (2.7245552e-2) * T;
    var term3=(1.6853396e-5) * (T*T);
    var term4=2.4575506 * Math.log(T);
    return Math.exp(term1 + term2 + term3 + term4)*1.00519;
}

Da wir nun eine Formel zur Berechnung des Sättigungsdampfdrucks haben, die nur von der Temperatur T abhängt, ist es nur noch ein kleiner Schritt zur ersten Etappe. Wir können uns nun der relativ einfachen Formel für die Sättigungsmenge von Wasserdampf zuwenden. Die maximale Sättigungsmenge beträgt

{\rho}_{w,max}=\frac{E_w}{R_w\times{T}}

hier ist

E_w der Sättigungsdampfdruck nach der oben genannten Formel.
T die absolute Temperatur in K
R_w die individuelle Gaskonstante des Wassers = 461,52 \frac{J}{kg K}

function saettigungsmenge(t){
    var T= 273+t;
    return (saettigungsdampfdruck(t)*1000)/(461,52*(T))
  }

das Ergebnis dieser Formel ist allerdings in g/m³, wir brauchen jedoch die ausgabe in g/kg. Das Ergebnis muss also noch durch die Dichte der Luft bei Temperatur T geteilt werden. Die Formel dafür ist,

\varrho=\frac{p_0}{R_l\times{T}}

p_0 athmosphärischer Normdruck 101325Pa
R_l Gaskonstante der Luft 287 \frac{J}{kg K}

function luftdichte(T){
   return 101325/(287*T)
}

unsere obere Formel für die Sättigungsmenge können wir nun abändern, so dass sie einen Wert in g/kg zurück gibt.

 

function saettigungsmenge(t){
    var T= 273+t;
    return (saettigungsdampfdruck(T)*1000)/(461.52*(T))/luftdichte(T)
}

Nun können wir ein erstes Diagramm zeichnen:

hx1
Bild 2: erster Plot unserer Funktion

Dies ist die Sättigungskurve für Wasserdampf, also die Kurve für eine reletive Luftfeuchte von 100%. Was uns feht ist die Möglichkeit eine Kurvenschaar für belibige relative feuchten zu zeichnen. Dies ist allerdings sehr simple. Wir müssen unserer Funktion lediglich einen Parameter für die relative Luftfeuchte übergeben, und das Ergebnis einfach damit multiplizieren.

function saettigungsmenge(t,rel){
    var T= 273+t;
    return ((saettigungsdampfdruck(T)*1000)/(461.52*(T))/luftdichte(T))*rel
}

Nun können wir die absolute Menge Wasser in der Luft bei gegebener Temperatur und relativer Feuchte berechnen.

hx2
Bild 3: Kurvenschaar abs. Feuchte zu Temperatur für rel. Feuchten zwischen 0 und 1

der vollständige Code zum Zeichnen des Diagramms sieht wie folgst aus:

<html>
<script>
function luftdichte(T){
   return 101325/(287*T)
}
function saettigungsdampfdruck(T){
    var term1=(-6094.4642/T);
    var term2=21.1249952 - (2.7245552e-2) * T;
    var term3=(1.6853396e-5) * (T*T);
    var term4=2.4575506 * Math.log(T);
    return Math.exp(term1 + term2 + term3 + term4)*1.00519;
}
function saettigungsmenge(t,rel){
    var T= 273+t;
    var x=(saettigungsdampfdruck(T)*1000)/(461.52*(T))/luftdichte(T)
    return x*rel
}

</script>
<style>
body{background:#eee}
</style>

<body>
  <svg id="svg" xmlns="http://www.w3.org/2000/svg" width="600" height="400" viewBox="0 0 600 400" fill="none" stroke="black">
    <rect x="0" y="0" width="600" height="400" fill="white"/>
  </svg>
</body>
<script>
var svgns="http://www.w3.org/2000/svg"
var svg=document.getElementById("svg")


for(var t=0;t<=60;t+=5){
var path=document.createElementNS(svgns,"line")
var y1=400-t*7
path.setAttribute("x1",0)
path.setAttribute("y1",y1)
path.setAttribute("x2",600)
path.setAttribute("y2",y1)
path.setAttribute("stroke","#ddd")
svg.appendChild(path)
}

for(var k=0;k<=60;k+=2){
var path=document.createElementNS(svgns,"line")
var x1=k*10
path.setAttribute("x1",x1)
path.setAttribute("y1",0)
path.setAttribute("x2",x1)
path.setAttribute("y2",400)
path.setAttribute("stroke","#ddd")
svg.appendChild(path)
}

for(var r=0;r<=1;r+=0.1){
var d="M0,400"
for(var t=0;t<=60;t++){
  d+=`L${saettigungsmenge(t,r)*10} ${400-t*7}`
}
var path=document.createElementNS(svgns,"path")
path.setAttribute("d",d)
path.setAttribute("stroke","red")
path.setAttribute("stroke-width",2)
svg.appendChild(path)
}


</script>
</html>

Weiter gehts im 2ten Teil…

2 Gedanken zu “h-x-Diagramm selber erstellen; Teil 1

Hinterlasse einen Kommentar