From 455c1249b46281d5569aab1e61b1ecfeaa69550b Mon Sep 17 00:00:00 2001 From: Harry Moffat Date: Tue, 4 Jul 2006 01:11:35 +0000 Subject: [PATCH] Added a test for WaterTP --- test_problems/cathermo/Makefile.in | 4 + test_problems/cathermo/testWaterTP/.cvsignore | 11 ++ .../cathermo/testWaterTP/Makefile.in | 112 ++++++++++++++ test_problems/cathermo/testWaterTP/README | 11 ++ .../cathermo/testWaterTP/output_blessed.txt | 39 +++++ test_problems/cathermo/testWaterTP/runtest | 33 ++++ .../cathermo/testWaterTP/testWaterTP.cpp | 145 ++++++++++++++++++ .../cathermo/testWaterTP/waterTPphase.xml | 54 +++++++ 8 files changed, 409 insertions(+) create mode 100644 test_problems/cathermo/testWaterTP/.cvsignore create mode 100644 test_problems/cathermo/testWaterTP/Makefile.in create mode 100644 test_problems/cathermo/testWaterTP/README create mode 100644 test_problems/cathermo/testWaterTP/output_blessed.txt create mode 100755 test_problems/cathermo/testWaterTP/runtest create mode 100644 test_problems/cathermo/testWaterTP/testWaterTP.cpp create mode 100644 test_problems/cathermo/testWaterTP/waterTPphase.xml diff --git a/test_problems/cathermo/Makefile.in b/test_problems/cathermo/Makefile.in index a35e9148b..9ac39c730 100644 --- a/test_problems/cathermo/Makefile.in +++ b/test_problems/cathermo/Makefile.in @@ -17,6 +17,7 @@ ifeq ($(test_electrolytes),1) cd testIAPWSPres; @MAKE@ all cd testIAPWSTripP; @MAKE@ all cd testWaterPDSS; @MAKE@ all + cd testWaterTP; @MAKE@ all endif test: @@ -29,6 +30,7 @@ ifeq ($(test_electrolytes),1) cd testIAPWSPres; @MAKE@ test cd testIAPWSTripP; @MAKE@ test cd testWaterPDSS; @MAKE@ test + cd testWaterTP; @MAKE@ test endif clean: @@ -39,6 +41,7 @@ clean: cd testIAPWSPres; @MAKE@ clean cd testIAPWSTripP; @MAKE@ clean cd testWaterPDSS; @MAKE@ clean + cd testWaterTP; @MAKE@ clean depends: ifeq ($(test_issp),1) @@ -50,4 +53,5 @@ ifeq ($(test_electrolytes),1) cd testIAPWSPres; @MAKE@ depends cd testIAPWSTripP; @MAKE@ depends cd testWaterPDSS; @MAKE@ depends + cd testWaterTP; @MAKE@ depends endif diff --git a/test_problems/cathermo/testWaterTP/.cvsignore b/test_problems/cathermo/testWaterTP/.cvsignore new file mode 100644 index 000000000..0b0e7ecad --- /dev/null +++ b/test_problems/cathermo/testWaterTP/.cvsignore @@ -0,0 +1,11 @@ +testIAPWSphi +Makefile +output.txt +outputa.txt +*.d + .depends +csvCode.txt +diff_test.out +test.diff +test.out +testWaterTP diff --git a/test_problems/cathermo/testWaterTP/Makefile.in b/test_problems/cathermo/testWaterTP/Makefile.in new file mode 100644 index 000000000..6bad84652 --- /dev/null +++ b/test_problems/cathermo/testWaterTP/Makefile.in @@ -0,0 +1,112 @@ +#!/bin/sh + +############################################################################ +# +# Makefile to compile and link a C++ application to +# Cantera. +# +############################################################################# + +# addition to suffixes +.SUFFIXES : .d + +# the name of the executable program to be created +PROG_NAME = testWaterTP + +# the object files to be linked together. List those generated from Fortran +# and from C/C++ separately +OBJS = testWaterTP.o + +# Location of the current build. Will assume that tests are run +# in the source directory tree location +src_dir_tree = 1 + +# additional flags to be passed to the linker. If your program +# requires other external libraries, put them here +LINK_OPTIONS = @EXTRA_LINK@ + +############################################################################# + +# Check to see whether we are in the msvc++ environment +os_is_win = @OS_IS_WIN@ + +# Fortran libraries +FORT_LIBS = @FLIBS@ + +# the C++ compiler +CXX = @CXX@ + +# C++ compile flags +ifeq ($(src_dir_tree), 1) +CXX_FLAGS = -DSRCDIRTREE @CXXFLAGS@ +else +CXX_FLAGS = @CXXFLAGS@ +endif + +# Ending C++ linking libraries +LCXX_END_LIBS = @LCXX_END_LIBS@ + +# the directory where the Cantera libraries are located +CANTERA_LIBDIR=@buildlib@ + +# required Cantera libraries +CANTERA_LIBS = @LOCAL_LIBS@ -lctcxx + +# the directory where Cantera include files may be found. +ifeq ($(src_dir_tree), 1) +CANTERA_INCDIR=../../../Cantera/src +INCLUDES=-I$(CANTERA_INCDIR) -I$(CANTERA_INCDIR)/thermo +else +CANTERA_INCDIR=@ctroot@/build/include/cantera +INCLUDES=-I$(CANTERA_INCDIR) -I$(CANTERA_INCDIR)/kernel +endif + +# flags passed to the C++ compiler/linker for the linking step +LCXX_FLAGS = -L$(CANTERA_LIBDIR) @LOCAL_LIB_DIRS@ @CXXFLAGS@ + +# How to compile C++ source files to object files +.@CXX_EXT@.@OBJ_EXT@: + $(CXX) -c $< $(INCLUDES) $(CXX_FLAGS) + +# How to compile the dependency file +.cpp.d: + g++ -MM $(INCLUDES) $(CXX_FLAGS) $*.cpp > $*.d + +# List of dependency files to be created +DEPENDS=$(OBJS:.o=.d) + +# Program Name +PROGRAM = $(PROG_NAME)$(EXE_EXT) + +all: $(PROGRAM) .depends + +$(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ + $(CANTERA_LIBDIR)/libcaThermo.a + $(CXX) -o $(PROGRAM) $(OBJS) $(LCXX_FLAGS) $(LINK_OPTIONS) \ + $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ + $(LCXX_END_LIBS) + +# depends target -> forces recalculation of dependencies +depends: + @MAKE@ .depends + +.depends: $(DEPENDS) + cat $(DEPENDS) > .depends + +# Do the test -> For the windows vc++ environment, we have to skip checking on +# whether the program is uptodate, because we don't utilize make +# in that environment to build programs. +test: +ifeq ($(os_is_win), 1) +else + @MAKE@ $(PROGRAM) +endif + ./runtest + +clean: + $(RM) $(OBJS) $(PROGRAM) $(DEPENDS) .depends + ../../../bin/rm_cvsignore + (if test -d SunWS_cache ; then \ + $(RM) -rf SunWS_cache ; \ + fi ) + diff --git a/test_problems/cathermo/testWaterTP/README b/test_problems/cathermo/testWaterTP/README new file mode 100644 index 000000000..a0b0e774b --- /dev/null +++ b/test_problems/cathermo/testWaterTP/README @@ -0,0 +1,11 @@ + +This test is used to make sure that the basic functions in +the water property routine satisfy tests +specified in the paper: + +W. Wagner, A. Prub, "The IAPWS Formulation 1995 for the +Thermodynamic Properties of Ordinary Water Substance +for General and Scientific Use," J. Phys. Chem. +Ref. Data, v. 31, 387 - 442, 2002. + +This routine exercises the saturation pressure routine. diff --git a/test_problems/cathermo/testWaterTP/output_blessed.txt b/test_problems/cathermo/testWaterTP/output_blessed.txt new file mode 100644 index 000000000..fc2f9f22a --- /dev/null +++ b/test_problems/cathermo/testWaterTP/output_blessed.txt @@ -0,0 +1,39 @@ +s = 188835 +h = -2.41826e+08 +psat(273.16) = 611.655 +Comparisons to NIST: (see http://webbook.nist.gov): + +H0(298.15) = -2.41826e+08 J/kmol +S0(298.15) = 188835 J/kmolK + +Ideal Gas Standard State: + T Cp0 S0 -(G0-H298)/T H0-H298 + (K) (J/molK) (J/molK) (J/molK) (kJ/mol) + 298.15 33.5873 188.835 188.835 0 + 500 35.2263 206.535 192.686 6.92447 + 600 36.3249 213.053 195.551 10.5013 + 1000 41.2673 232.739 206.738 26.0001 + + +H_liq(298.15, onebar) = -2.85838e+08 J/kmol +S_liq(298.15, onebar) = 69922.4 J/kmolK + +Liquid 1bar or psat Standard State + T press psat Cp0 S0 -(G0-H298)/T H0-H298 + (K) (bar) (bar) (J/molK) (J/molK) (J/molK) (kJ/mol) + 273.19 1 0.00612989 76.0121 63.3157 70.2194 -1.88603 + 298.15 1 0.0316993 75.3276 69.9224 69.9224 2.38419e-13 + 300 1 0.0353681 75.3153 70.3884 69.9239 0.139344 + 373.15 1.01621 1.01418 75.9465 86.857 71.6855 5.66125 + 400 2.46261 2.45769 76.6642 92.1544 72.8766 7.71115 + 500 26.4447 26.392 84.0126 109.805 78.4402 15.6825 + +Liquid Densities: + T press psat Density molarVol + (K) (bar) (bar) (kg/m3) (m3/kmol) + 273.19 1 0.00612989 999.845 0.0180181 + 298.15 1 0.0316993 997.047 0.0180686 + 300 1 0.0353681 996.556 0.0180775 + 373.15 1.01621 1.01418 958.349 0.0187982 + 400 2.46261 2.45769 937.486 0.0192166 + 500 26.4447 26.392 831.318 0.0216707 diff --git a/test_problems/cathermo/testWaterTP/runtest b/test_problems/cathermo/testWaterTP/runtest new file mode 100755 index 000000000..ef6267d07 --- /dev/null +++ b/test_problems/cathermo/testWaterTP/runtest @@ -0,0 +1,33 @@ +#!/bin/sh +# +# +temp_success="1" +/bin/rm -f output.txt outputa.txt + +testName=testWaterTP +################################################################# +# +################################################################# +CANTERA_DATA=${CANTERA_DATA:=../../../data/inputs}; export CANTERA_DATA + +CANTERA_BIN=${CANTERA_BIN:=../../../bin} +./testWaterTP > output.txt +retnStat=$? +if [ $retnStat != "0" ] +then + temp_success="0" + echo "$testName returned with bad status, $retnStat, check output" +fi + +$CANTERA_BIN/exp3to2.sh output.txt > outputa.txt +diff -w outputa.txt output_blessed.txt > diff_test.out +retnStat=$? +if [ $retnStat = "0" ] +then + echo "successful diff comparison on $testName test" +else + echo "unsuccessful diff comparison on $testName test" + echo "FAILED" > csvCode.txt + temp_success="0" +fi + diff --git a/test_problems/cathermo/testWaterTP/testWaterTP.cpp b/test_problems/cathermo/testWaterTP/testWaterTP.cpp new file mode 100644 index 000000000..64d6d09fb --- /dev/null +++ b/test_problems/cathermo/testWaterTP/testWaterTP.cpp @@ -0,0 +1,145 @@ +/* + * $Id$ + */ +#include "stdio.h" +#include "WaterTP.h" +#include +using namespace std; + +int main () { + + double dens, u, s, h, cv, cp, pres; + try { + WaterTP *w = new WaterTP("waterTPphase.xml",""); + + double rho; + + /* + * Print out the triple point conditions + */ + double temp = 273.16; + pres = w->satPressure(temp); + printf("psat(%g) = %g\n", temp, pres); + double presLow = 1.0E-2; + temp = 298.15; + double oneBar = 1.0E5; + + printf("Comparisons to NIST: (see http://webbook.nist.gov):\n\n"); + + w->setDensity(1.0E-8); + w->setState_TP(temp, presLow); + double h = w->enthalpy_mole(); + printf("H0(298.15) = %g J/kmol\n", h); + double h298 = h; + + double s = w->entropy_mole(); + s -= GasConstant * log(oneBar/presLow); + printf("S0(298.15) = %g J/kmolK\n", s); + + + double T[20]; + T[0] = 298.15; + T[1] = 500.; + T[2] = 600.; + T[3] = 1000.; + + double Cp0, delh0, delg0, g; + + printf("\nIdeal Gas Standard State:\n"); + printf (" T Cp0 S0 " + " -(G0-H298)/T H0-H298\n"); + printf (" (K) (J/molK) (J/molK) " + " (J/molK) (kJ/mol)\n"); + for (int i = 0; i < 4; i++) { + temp = T[i]; + w->setState_TP(temp, presLow); + h = w->enthalpy_mole(); + delh0 = h - h298; + g = w->gibbs_mole(); + delg0 = (g - h298)/temp + GasConstant * log(oneBar/presLow); + Cp0 = w->cp_mole(); + s = w->entropy_mole(); + s -= GasConstant * log(oneBar/presLow); + printf("%10g %10g %13g %13g %13g\n", temp, Cp0*1.0E-3, s*1.0E-3, + -delg0*1.0E-3, delh0*1.0E-6); + } + printf("\n\n"); + + temp = 298.15; + w->setDensity(1000.); + w->setState_TP(temp, oneBar); + h = w->enthalpy_mole(); + printf("H_liq(298.15, onebar) = %g J/kmol\n", h); + double h298l = h; + s = w->entropy_mole(); + printf("S_liq(298.15, onebar) = %g J/kmolK\n", s); + + + T[0] = 273.19; + T[1] = 298.15; + T[2] = 300.; + T[3] = 373.15; + T[4] = 400.; + T[5] = 500.; + printf("\nLiquid 1bar or psat Standard State\n"); + printf (" T press psat Cp0 S0 " + " -(G0-H298)/T H0-H298\n"); + printf (" (K) (bar) (bar) (J/molK) (J/molK)" + " (J/molK) (kJ/mol)\n"); + + for (int i = 0; i < 6; i++) { + temp = T[i]; + double psat = w->satPressure(temp); + double press = oneBar; + if (psat > press) { + press = psat*1.002; + } + w->setState_TP(temp, press); + h = w->enthalpy_mole(); + delh0 = h - h298l; + g = w->gibbs_mole(); + delg0 = (g - h298l)/temp; + Cp0 = w->cp_mole(); + s = w->entropy_mole(); + printf("%10g %10g %12g %13g %13g %13g %13g\n", temp, press*1.0E-5, + psat*1.0E-5, + Cp0*1.0E-3, s*1.0E-3, + -delg0*1.0E-3, delh0*1.0E-6); + } + + printf("\nLiquid Densities:\n"); + printf (" T press psat Density molarVol " + "\n"); + printf (" (K) (bar) (bar) (kg/m3) (m3/kmol)" + "\n"); + for (int i = 0; i < 6; i++) { + temp = T[i]; + double psat = w->satPressure(temp); + double press = oneBar; + if (psat > press) { + press = psat*1.002; + } + w->setState_TP(temp, press); + double d = w->density(); + double mw = w->molecularWeight(0); + double vbar = mw/d; + // not implemented + //w.getPartialMolarVolumes(&vbar); + + printf("%10g %10g %12g %13g %13g\n", temp, press*1.0E-5, + psat*1.0E-5, d, vbar); + + } + + + delete w; + } catch (CanteraError) { + + showErrors(); + Cantera::appdelete(); + return -1; + } + + + return 0; +} diff --git a/test_problems/cathermo/testWaterTP/waterTPphase.xml b/test_problems/cathermo/testWaterTP/waterTPphase.xml new file mode 100644 index 000000000..827bc2948 --- /dev/null +++ b/test_problems/cathermo/testWaterTP/waterTPphase.xml @@ -0,0 +1,54 @@ + + + + + + + O H + H2O + + 300.0 + 101325.0 + + + + + + + + + + + + + H:2 O:1 + + + + 4.198640560E+00, -2.036434100E-03, 6.520402110E-06, -5.487970620E-09, + 1.771978170E-12, -3.029372670E+04, -8.490322080E-01 + + + + 3.033992490E+00, 2.176918040E-03, -1.640725180E-07, -9.704198700E-11, + 1.682009920E-14, -3.000429710E+04, 4.966770100E+00 + + + + + + + + H:2 C:2 F:4 + + + 273.14999999999998 + 23083414.8686 + 167025.46599999999 + 0.0 + + + + + +