FB/AT 16-feb-2010


HS-data för vatten och vattenånga


Detta är en bruksanvisning för hs som används för beräkning av termodynamiska data för vatten och vattenånga.

Funktionsbiblioteket hs (från programbiblioteket CHEEP skrivet Tapio Westerlund) används för beräkning av termodynamiska data för vatten och vattenånga (samma information som i HS-diagrammet). Värdet på två termodynamiska storheter måste anges för att de övriga skall kunna räknas ut. Storheterna och den enhet de skall anges i är

Förutom de givna storheternas värden måste man även ange vilka dessa storheter är med ett sexsiffrigt heltal, här benämnt kod. Koden 101000 anger att tryck och temperatur är givna medan de övriga storheternas värden skall beräknas.

Funktionen hs finns i flera versioner och visas med enkla exempel för

Funktionen returnerar en felkod, ier, i form av ett heltal. Om värdet på detta heltal är olikt noll är resultatet osäkert eller fel.

Huvudprogrammet måste, för fortran- och C-versionen, kompileras och länkas till funktionen hs. Kompileringsproceduren är lite olika och visas därför, tillsammans med utskrift från körningarna, för de olika versionerna (enbart resultat för matlab-versionen)

Man kan notera att resultaten skiljer sig en aning i de de sista decimalerna vilken beror på att den numeriska behandlingen är lite olika i de olika programmeringspråken.


Exempel på hs i fortrankod

C     file.f

C     inga fördefinierade variabler
      IMPLICIT NONE

      REAL P, V, T, X, H, S

      INTEGER KOD, IER

C     tryck och temperatur givna
      P = 1.013
      T = 100

      KOD = 101000

      CALL HS(P,V,T,X,H,S,KOD,IER)

      IF (IER .NE. 0) THEN
         WRITE(*,*)'Resultatet fel eller osäkert'
      ENDIF	

      WRITE(*,*)'P = ',P,' bar'
      WRITE(*,*)'V = ',V,' m3/kg'
      WRITE(*,*)'T = ',T,' C'
      WRITE(*,*)'X = ',X,' kg ånga/kg fuktig ånga'
      WRITE(*,*)'H = ',H,' kJ/kg'
      WRITE(*,*)'S = ',S,' kJ/kgK'

      END

Kompilering av fortrankod och resultat från körning

% f77 -o exe-file -L/home/aton/fbjondah/cheep/lib file.f -lcheep
file.f:
 MAIN:

% exe-file
 P =     1.01300 bar
 V =     1.04778E-03 m3/kg
 T =    100.0000 C
 X =   0. kg ånga/kg fuktig ånga
 H =     418.980 kJ/kg
 S =     1.30522 kJ/kgK

Exempel på hs i C-kod

/* file.c */

#include <stdio.h> /* inkluderar headerfil för IO */
#include <hs.h>    /* inkluderar headerfil för hs */

int main (void) {

  double p, v, t, x, h, s;
  int    ier, kod;

  /* givna data */
  kod = 101000; /* tryck och temperatur givna */
  p = 1.103;    /* bar */
  t = 100;      /* grader C */

  ier = hs (&p, &v, &t, &x, &h, &s, kod);

  if (ier != 0) {
    fprintf(stderr,"Resultatet fel eller osäkert!\n");
  }

  fprintf(stdout,"p = %f bar\n", p);
  fprintf(stdout,"v = %f m3/kg\n", v);
  fprintf(stdout,"t = %f C\n", t);
  fprintf(stdout,"x = %f kh ånga/kg fuktig ånga\n", x);
  fprintf(stdout,"h = %f kJ/kg\n", h);
  fprintf(stdout,"s = %f kJ/kgK\n", s);

  return 0;

}

Kompilering av C-kod och resultat från körning

% gcc -Wall -pedantic -o exe-file 
-L/home/aton/fbjondah/cheep/lib 
-I/home/aton/fbjondah/cheep/include file.c -lhs -lm 

% exe-file
p = 1.103000 bar
v = 0.001006 m3/kg
t = 100.000000 C
x = 0.000000 kh ånga/kg fuktig ånga
h = 418.987246 kJ/kg
s = 1.305208 kJ/kgK

Matlab-versionen av hs

Ett paket med matlab-funktioner finns tillgängligt i

Paketet packas upp och placeras i någon lämplig plats t.ex. på hemområdet H:\HS\. En path till directoryn innehållande HS måste anges (se exemplet). Hjälp kan också fås med matlab:s help kommando (help HS).

Exempel på hs i matlab-kod

% file.m

% addera hs-directoryn till pathen
path(path,'H:\HS');                        % på ÅA:s windowsmaskiner

% tryck och temperatur är givna
p = 1.013;
v = 0;
t = 100;
x = 0;
h = 0;
s = 0;

kod = 101000;

[p,v,t,x,h,s,ier] = hs(p,v,t,x,h,s,kod);

if (ier ~= 0) then
  fprintf(1,'Resultatet är osäkert eller fel\n');
end

fprintf(1,'p = %10f bar\n',p);
fprintf(1,'v = %10f m3/kg\n',v);
fprintf(1,'t = %10f C\n',t);
fprintf(1,'x = %10f kg ånga/kg fuktig ånga\n',x);
fprintf(1,'h = %10f kJ/kg\n',h);
fprintf(1,'s = %10f kJ/kgK\n',s);

Resultat från körning med matlab

>> file
p =   1.013000 bar
v =   0.001048 m3/kg
t = 100.000000 C
x =   0.000000 kg ånga/kg fuktig ånga
h = 418.980438 kJ/kg
s =   1.305215 kJ/kgK

Scilab-versionen av hs

Ett paket med matlab-funktioner finns tillgängligt i

Paketet packas upp och placeras i någon lämplig plats t.ex. på hemområdet H:\HS\. Funktionen laddas in med exec('h:\HS\hs-all.sce',-1);.

Exempel på hs i scilab-kod

// file.sce
// ladda in funktionerna i hs
exec('H:\HS\hs-all.sce',-1);                   
// tryck och temperatur är givna
p = 1.013;
v = 0;
t = 100;
x = 0;
h = 0;
s = 0;

kod = 101000;

[p,v,t,x,h,s,ier] = hs(p,v,t,x,h,s,kod);

if (ier ~= 0) then
  mprintf('Resultatet är osäkert eller fel\n');
end

mprintf('p = %10f bar\n',p);
mprintf('v = %10f m3/kg\n',v);
mprintf('t = %10f C\n',t);
mprintf('x = %10f kg ånga/kg fuktig ånga\n',x);
mprintf('h = %10f kJ/kg\n',h);
mprintf('s = %10f kJ/kgK\n',s);

Resultat från körning med scilab

-->exec('C:\Documents and Settings\fbjondah\Desktop\file.sce', -1)
p = 1.013000 bar
v = 0.001048 m3/kg
t = 100.000000 C
x = 0.000000 kg ånga/kg fuktig ånga
h = 418.980306 kJ/kg
s = 1.305215 kJ/kgK