/* LIB Peter Rauch */
/* eine Weiterentwicklung und Anpassung der Berechnung der Luftfeuchtigkeit von Ernst Schmidt MTEC Technology Software */

var PMIN = 0.01;
var PMAX = 20;
var TMIN = -20;
var TMAX = 100;

function Clear(form)
 {
  form.x.value = '';
  form.x1.value = '';
  form.pS.value = '';
  form.tTau.value = '';
  form.Schim.value = '';
  return;
 }

function BerechneForm(form)
 {
  if (form.t.value.length == 0 || form.p.value.length == 0)
   {
    return;
   }
  var t = parseFloat(form.t.value);
  var p = parseFloat(form.p.value);
  if(t < TMIN)
   {
    alert('t < ' + TMIN + ' °C');
    return;
   }
  if(p < PMIN)
   {
    alert('t < ' + PMIN + ' bar');
    return;
   }
  if(t > TMAX)
   {
    alert('t > ' + TMAX + ' °C');
    return;
   }
  if(p > PMAX)
   {
    alert('t > ' + PMAX + ' bar');
    return;
   }
  Clear(form);
  var pS = SattdampfDruckWasser(t);
  form.pS.value = Aufrunden(pS, 5);
  form.x.value = Aufrunden(AbsFeuchte(form, pS), 4);
  form.x1.value = Aufrunden(AbsFeuchte1(form, pS), 4)

  var tTau = '';
  var x = AbsFeuchte(form, pS);
  if(x > 0)

   tTau = Sattdampftemperatur(SattdampfFunktion(x,p));
  if(x > 0 && tTau > 0)
   form.tTau.value = Aufrunden(tTau, 1);
  else
   tTau = '';
  if(pS == 0)
   form.pS.value = '';

 Schim = Sattdampftemperatur(SattdampfFunktion(x,p)) / 0.75;
 if(x > 0 && Schim < t)
   form.Schim.value = Aufrunden(Schim, 1);
  else
   form.Schim.value = t ;
  if(pS == 0)
   form.pS.value = '';

 }

function Sattdampftemperatur(pS)
 {
  var t = 100;
  var dt = 0.001;
  do
   {
    var t0 = t - dt / 2;
    var t1 = t + dt / 2;
    var f0 = SattdampfDruckWasser(t0) - pS;
    var f1 = SattdampfDruckWasser(t1) - pS;
    var fS = (f1 - f0) / dt;
    var t0 = t;
    var t = t - f0 / fS;
   }
  while(Math.abs(t - t0) > dt);
  return(t);
 }

function SattdampfFunktion(x,p)
 {
  return(x * p / (0.622 + x));
 }

function AbsFeuchte(form, pS)
 {
  var phi = parseFloat(form.phi.value);
  phi = phi / 100;
  var p = parseFloat(form.p.value);
  var x = 0.622 * phi * pS  / (p - phi * pS);
  return(x);
 }

function AbsFeuchte1(form, pS)
 {var phi = parseFloat(form.phi.value);
  phi = phi / 100;
  var p = parseFloat(form.p.value);
  var x1 = 0.622 * phi * pS * 1188.1 / (p - phi * pS);
  return(x1);
  /* Der Wert 1188.1 gilt für 293 K  */
 }

function SattdampfDruckWasser(t)
 {
  var aq = 5.426651;
  var bq = -2005.1;
  var cq = 0.00013869;
  var dq = 0.000000000011965;
  var eq = -0.0044;
  var fq = -0.0057148;
  var kq = 293700;
  var ta = (t + 273.15) / 647.3;
  if(t >= -20 && t <= 374)
   {
    var te = t + 273.16;
    var x = te * te - kq;
var x1 = te * te * 1.1881 - kq;
    var y = 374.11 - t;
    var h1 = dq * x * x;
    var al = aq + bq / te + cq * x / te * (Math.pow(10, h1) - 1)
             + eq * Math.pow(10, (fq * Math.pow(y, 1.25)));
    h1 = Math.exp(-12 * Math.pow(ta, 4));
    var pS = 1.01325 * Math.pow(10, al) + (ta - 0.422) * (0.577 - ta)
             * Math.exp(h1) * 0.00980665;
    return(pS);
   }
  else
   return(0);
 }

function Aufrunden(Wert, Stellen)
 {
  Stellen = parseInt(Stellen);
  var x = Math.pow(10, Stellen);
  var str = "" + Math.round(Wert * x) / x;
  return str;
 }
