IAPWS-IF97 水物性 Fortran90 程序
原版本有问题,现已修改。
代码开源,版权所有,引用请标明出处
(2015/12/1 巢飞-西交大修改)
本文给出了基于 IAPWS-IF97 的水物性计算 Fortran90 语言程序代码,适用 Compaq visual
fortran 和 Intel Fortran 编译环境。目前网上大量水物性包在 Intel Fortran 调用都会报错,本
程序最大优势是可在 Intel Fortran 下实现物性调用。本版本基于网上版本修改,使用者若涉
及版权问题,本人概不负责。
如上图所示,水与水蒸气可分为 5 个区,但本程序只适用于 4 个区,即图中的第 1、2、
3、4 区,不包括第 5 区。压力与温度范围为:
611.657Pa P 100MPa
273.15K T 1073.15K
程序的输入变量为压力 P 与温度 T,单位分别为 Pa 与 K。输出变量(12 个)如下:
----------------------------------------------------------------------------------------------------------------
内能 u 比焓 h 比熵 s 定压比热容 Cp 定容比热容 Cv 声速 w
比容 v
m^3/kg
J/kg
J/kg*K J/kg*K
J/kg*K
J/kg
m/s
定压热膨胀率β 等温压缩率κ
导热系数λ 动力粘度μ 表面张力σ
1/Pa
Pa*s
N/m
W/m*K
1/K
----------------------------------------------------------------------------------------------------------------
输出变量是以一个数组的形式存储,例如数组为 prop(12),数组与变量的对应顺序为:
s
v
单位如前所述。
Cp Cv w β
μ
σ
κ
λ
u
h
1. 使用方法:
将附录 19 个源文件处理成.f90 文件(必须是.f90, 处理成.for 需要排除大量语法错
误),然后加入到所需调用物性的工程中,调试即可。
2. 调用方法:
给定压力 P(Pa)与温度 T(K),计算物性,程序自己判断所属区域:
call h2o(P,T,prop)
若想得到给定压力 P(Pa)或温度 T(K)下的饱和态物性,则可如下调用:
a. 给定温度求压力 call PsatW(P,T)或给定压力求温度 call TsatW(P,T)
b. 饱 和 液 态 call
h2o(P,0.9999999*T,prop(12)) 或 饱 和 汽 态 call
h2o(P,1.0000001*T,prop(12)) (原文误差大,修正)
附录:源程序(19个文件)
【1】. const.f90
module const
implicit none
real*8 :: Rg=0.461526E3 !J/kg/K
real*8 :: Tc=647.096
real*8 :: Pc=22.064E6
real*8 :: rhoc=322.0
end module const
!K
!Pa
!kg/m^3
【2】. reg1.f90
:: I(34),J(34)
module reg1
implicit none
integer
real*8 :: n(34)
data I /&
0
0
0
0
0
0
0
0
,&
,&
,&
,&
,&
,&
,&
,&
1
,&
1
,&
1
,&
1
,&
1
,&
1
,&
2
,&
2
,&
2
,&
2
,&
2
,&
3
,&
3
,&
3
,&
4
,&
4
,&
4
,&
5
,&
8
,&
8
,&
21 ,&
23 ,&
29 ,&
30 ,&
31 ,&
32
&
/
data J /&
-2 ,&
-1 ,&
,&
0
,&
1
2
,&
,&
3
4
,&
5
,&
-9 ,&
-7 ,&
-1 ,&
,&
0
,&
1
3
,&
-3 ,&
0
,&
,&
1
3
,&
17 ,&
-4 ,&
,&
0
6
,&
-5 ,&
-2 ,&
10 ,&
-8 ,&
-11 ,&
-6 ,&
-29 ,&
-31 ,&
-38 ,&
-39 ,&
-40 ,&
-41 &
/
data n /&
,&
0.14632971213167
,&
-0.84548187169114
,&
-3.756360367204
,&
3.3855169168385
,&
-0.95791963387872
,&
0.15772038513228
,&
-0.016616417199501
,&
8.1214629983568E-04
,&
2.8319080123804E-04
-6.0706301565874E-04 ,&
,&
-0.018990068218419
,&
-0.032529748770505
-0.021841717175414
,&
-5.283835796993E-05
,&
-4.7184321073267E-04 ,&
-3.0001780793026E-04 ,&
4.7661393906987E-05
,&
-4.4141845330846E-06 ,&
-7.2694996297594E-16 ,&
-3.1679644845054E-05 ,&
-2.8270797985312E-06 ,&
-8.5205128120103E-10 ,&
-2.2425281908E-06
,&
-6.5171222895601E-07 ,&
-1.4341729937924E-13 ,&
-4.0516996860117E-07 ,&
-1.2734301741641E-09 ,&
-1.7424871230634E-10 ,&
-6.8762131295531E-19 ,&
1.4478307828521E-20
,&
2.6335781662795E-23
,&
-1.1947622640071E-23 ,&
,&
1.8228094581404E-24
-9.3537087292458E-26
&
/
end module reg1
【3】. reg2.f90
:: Jo(9),I(43),J(43)
module reg2
implicit none
integer
real*8 :: no(9),n(43)
data Jo /&
,&
0
1
,&
-5 ,&
-4 ,&
-3 ,&
-2 ,&
-1 ,&
,&
2
3
&
/
data no /&
-9.6927686500217
,&
10.086655968018
,&
-0.005608791128302 ,&
0.071452738081455 ,&
-0.40710498223928 ,&
,&
1.4240819171444
-4.383951131945
,&
-0.28408632460772 ,&
0.021268463753307
&
/
data I /&
1
1
,&
,&
,&
1
,&
1
,&
1
,&
2
,&
2
,&
2
,&
2
,&
2
,&
3
,&
3
,&
3
,&
3
,&
3
,&
4
,&
4
,&
4
,&
5
,&
6
,&
6
,&
6
,&
7
,&
7
,&
7
,&
8
,&
8
,&
9
10 ,&
10 ,&
10 ,&
16 ,&
16 ,&
18 ,&
20 ,&
20 ,&
20 ,&
21 ,&
22 ,&
23 ,&
24 ,&
24 ,&
24
&
/
data J /&
0
,&
,&
1
,&
2
,&
3
,&
6
,&
1
,&
2
,&
4
7
,&
36 ,&
0
,&
,&
1
,&
3
6
,&
35 ,&
,&
1
,&
2
3
,&
,&
7
3
,&
16 ,&
35 ,&
0
,&
11 ,&
25 ,&
8
,&
36 ,&
13 ,&
4
,&
10 ,&
14 ,&
29 ,&
50 ,&
57 ,&
20 ,&
35 ,&
48 ,&
21 ,&
53 ,&
39 ,&
26 ,&
40 ,&
58
&
/
data n /&
-1.7731742473213E-03 ,&
,&
-0.017834862292358
,&
-0.045996013696365
-0.057581259083432
,&
-0.05032527872793
,&
-3.3032641670203E-05 ,&
-1.8948987516315E-04 ,&
-3.9392777243355E-03 ,&
-0.043797295650573
,&
-2.6674547914087E-05 ,&
,&
2.0481737692309E-08
,&
4.3870667284435E-07
-3.227767723857E-05
,&
-1.5033924542148E-03 ,&
-0.040668253562649
,&
-7.8847309559367E-10 ,&
1.2790717852285E-08
,&
,&
4.8225372718507E-07
2.2922076337661E-06
,&
-1.6714766451061E-11 ,&
-2.1171472321355E-03 ,&
,&
-23.895741934104
-5.905956432427E-18
,&
-1.2621808899101E-06 ,&
,&
-0.038946842435739
1.1256211360459E-11
,&
,&
-8.2311340897998
,&
1.9809712802088E-08
1.0406965210174E-19
,&
-1.0234747095929E-13 ,&
-1.0018179379511E-09 ,&
-8.0882908646985E-11 ,&
0.10693031879409
,&
,&
-0.33662250574171
8.9185845355421E-25
,&
3.0629316876232E-13
,&
-4.2002467698208E-06 ,&
-5.9056029685639E-26 ,&
3.7826947613457E-06
,&
-1.2768608934681E-15 ,&
,&
7.3087610595061E-29
5.5414715350778E-17
,&
-9.436970724121E-07
&
/