Author: Benedito Dias Baptista Filho, Shawn Way
Date: 2022-03-06

# IAPWS95

#### Benedito Dias Baptista Filho, Shawn Way

#### 03/06/2022

This Vignette exemplifies the use of some functions of the Package IAPWS95, which calculates water thermodynamic and transport properties as function of different combinations of Temperature, Density, Pressure, Enthalphy and Entropy. The functions presented are used to return single values or generate tables of thermodynamic properties, being useful for scientists and engineers who analyze thermal and hydraulic experimental data or are involved with projects and equipment development, like turbines or nuclear reactors. This Vignette shows too few examples, but each function is documented with examples.

The name IAPWS95 comes from the “IAPWS Formulation 1995 for the Thermodynamic Properties of Ordinary Water Substance for General and Scientific Use”, a formulation developed by “The International Association for the Properties of Water and Steam”, revised in 2014. https://iapws.org/

IAPWS-95 formulation is based on the fundamental equation of Helmholtz free energy as a function of temperature and density, f = f(T, ρ). Other thermodynamic properties are obtained by differentiation and algebraic manipulation without the use of any other information. IAPWS-95 defines accurately the thermodynamic properties of the fluid phases of ordinary water substance, with complete thermodynamic consistency among these properties, over a wide range of states (pressures up to 1000 MPa and temperatures from the melting and sublimation temperatures to 1273 K). In this package the lower temperature limit is the triple point temperature, 273.16 K. The definition of properties includes those on the liquid–vapor equilibrium line.

The transport properties programmed were based on different IAPWS Releases: “Release on the IAPWS Formulation 2011 for the Thermal Conductivity of Ordinary Water Substance”; “Release on the IAPWS Formulation 2008 for the Viscosity of Ordinary Water Substance”; “Revised Release on Surface Tension of Ordinary Water Substance” (2014). The melting pressure was based on the “Revised Release on the Pressure along the Melting and Sublimation Curves of Ordinary Water Substance” (2011). The vapor pressure function introduced in this version was based on the Wagner and Pruß equation (1993).

## Organizations involved

This package was developed under a research project on water properties conducted at the “Energetic and Nuclear Research Institute”, a Research Institute of the “Brazilian Nuclear Energy Commission” (CNEN), by the author, who is the Representative of Brazil, an Associate Member of IAPWS.

This project was possible with the assistance of Dr. Allan Harvey, of the National Institute of Standards and Technology (NIST) and Chair of the Working Group of “Thermophysical Properties of Water and Steam” of the IAPWS.

After Dr. Benedito Dias Baptista Filho’s passing in 2018, this package will be maintained by Shawn Way.

## Example of a Table generating Function: spTcteTab(p1, p2, dp, T)

    # Entropy Function of Pressure, with Temperature Constant
    library(IAPWS95)
    library(pander)
    # Initial Pressure
    p1 <- 10.
    # Final Pressure
    p2 <- 100.
    # Pressure increment
    dp <- 10.
    # Temperature
    T <- 450.
    capture.output( Tabs <- spTcteTab(p1, p2, dp, T), file='NUL')
    pander::pandoc.table(Tabs)

Temp [K] | p [K] | s [kJ kg-1 K-1]
--- | --- | ---
TRUE | 10 | 2.097
TRUE | 20 | 2.084
TRUE | 30 | 2.072
TRUE | 40 | 2.061
TRUE | 50 | 2.049
TRUE | 60 | 2.039
TRUE | 70 | 2.028
TRUE | 80 | 2.018
TRUE | 90 | 2.009
TRUE | 100 | 1.999

## Table of Saturation Properties: satTabvT(T1, T2, dT)

    # Saturation Properties Function of Temperature
    library(IAPWS95)
    library(pander)
    # Initial Temperature
    T1 <- 300.
    # Final Temperature
    T2 <- 400.
    # Temperature increment
    dT <- 10.
    capture.output( TabT <- satTabvT(T1, T2, dT), file='NUL')
    pander::pandoc.table(TabT)

T | vf | vg | hf | hg | sf | sg
--- | --- | --- | --- | --- | --- | ---
300 | 0.001003 | 39.08 | 112.6 | 2550 | 0.3931 | 8.517
310 | 0.001007 | 22.9 | 154.4 | 2568 | 0.5301 | 8.316
320 | 0.001011 | 13.95 | 196.2 | 2586 | 0.6629 | 8.13
330 | 0.001015 | 8.805 | 238 | 2603 | 0.7915 | 7.959
340 | 0.001021 | 5.734 | 279.9 | 2621 | 0.9165 | 7.801
350 | 0.001027 | 3.842 | 321.8 | 2638 | 1.038 | 7.655
360 | 0.001034 | 2.641 | 363.8 | 2654 | 1.156 | 7.519
370 | 0.001041 | 1.859 | 405.9 | 2671 | 1.271 | 7.392
380 | 0.001049 | 1.336 | 448.1 | 2686 | 1.384 | 7.274
390 | 0.001058 | 0.9793 | 490.4 | 2701 | 1.494 | 7.163
400 | 0.001067 | 0.7302 | 533 | 2716 | 1.601 | 7.058

## Functions of Temperature and Density

    # Dynamic Viscosity [ Pa s ]
    library(IAPWS95)
    # Temperature
    T <- 500.
    # Density
    D <- 838.025
    ViscTD(T,D)

[1] 0.000119828

    # Specific Enthalpy [ kJ kg-1 ]
    hTD(T,D)

[1] 977.1816

    # Pressure [ MPa ]
    pTD(T,D)

[1] 10.00039

## Functions of Temperature and Pressure

    # Specific Internal Energy [ kJ kg-1 ]
    library(IAPWS95)
    # Temperature
    T <- 500.
    # Pressure
    p <- 10.0003858
    uTp(T,p)

[1] 965.2483

    # Specific Enthalpy [ kJ kg-1 ]
    #hTp(T,p)

## Error Codes

If the values given to any function is out of validity range, represent incorrect inputs, or generate convergence problems, an error message is printed. The errors are defined in the table listed as: `errorCodes`.

    # Error Codes
    library(IAPWS95)
    library(pander)
    capture.output( errorT <- errorCodes, file='NUL')
    pander::pandoc.table(errorT)

Error.code | Error.Description
--- | ---
-1001 | Outside limits of Temperature
-1101 | Outside limits of Temperature in two phase routine: TTC
-1028 | Outside limits of Temperature in an inner routine
-1002 | Outside limits of pressure
-1112 | NA
-1212 | Outside Pressure-Temperature Range
-1003 | Outside limits of Density
-1103 | Density did not converge in two phase routine
-1113 | Density D < DgTR
-1004 | Steam Quality did not converge in two phase routines
-1005 | Outside limits of Entropy
-1015 | NA
-1105 | NA
-1555 | Entropy s > sgTR in a two phase routine
-1006 | Enthalpy below minimum value
-9999 | Enthalpy over upper limit by Entropy
-1111 | Enthalpy under lower limit by Entropy
-1011 | Temperature did not converge
-1013 | Density did not converge
-3001 | Temperature T < 50K (for sublimation pressure)
-3002 | Temperature T >715K (over temp. limits for melting pressure)

## Graphics: An example of h-s Diagram for saturation line

This package does not have any graphics function yet, but you can make use of any R graphic function or package.

    library(IAPWS95)
    library(ggplot2)
    # Initial Temperature
    T1 <- 275.
    # Final Temperature
    T2 <- 647.
    # Temperature increment
    dT <- 3.
    capture.output( Tab <- satTabT(T1, T2, dT), file='NUL')
    x1 <- Tab[,6]
    x2 <- rev(Tab[,7])
    s <- append(x1, x2)
    y1 <- Tab[,4]
    y2 <- rev(Tab[,5])
    h <- append(y1, y2)
    # h- Graph
    plot(s,h, type = "o", pch=20)
    grid()

    dados <- as.data.frame(s)
    dados$h <- h
    ggplot2::ggplot(dados, ggplot2::aes(x=s, y=h)) + ggplot2::geom_line()