From f3f41cbcbc42998a5992d51312eddeb1b5d57373 Mon Sep 17 00:00:00 2001 From: Ian Bell Date: Mon, 26 May 2014 23:25:33 +0200 Subject: [PATCH] Water viscosity hardcoded implemented; Fixed reference for CO2 - need to double check all transport references Signed-off-by: Ian Bell --- dev/fluids/CarbonDioxide.json | 2 +- dev/fluids/Water.json | 4 ++ src/Backends/Helmholtz/Fluids/FluidLibrary.h | 10 +++ .../Helmholtz/HelmholtzEOSMixtureBackend.cpp | 2 +- src/Backends/Helmholtz/TransportRoutines.cpp | 65 ++++++++++++++++++- src/Backends/Helmholtz/TransportRoutines.h | 3 + src/Tests/CoolProp-Tests.cpp | 50 +++++++++----- 7 files changed, 113 insertions(+), 23 deletions(-) diff --git a/dev/fluids/CarbonDioxide.json b/dev/fluids/CarbonDioxide.json index 957be172..0fcbb1ae 100644 --- a/dev/fluids/CarbonDioxide.json +++ b/dev/fluids/CarbonDioxide.json @@ -448,7 +448,7 @@ "NAME": "CarbonDioxide", "TRANSPORT": { "conductivity": { - "BibTeX": "Marsh-JCED-2002", + "BibTeX": "Vesovic-JPCRD-1990", "critical": { "GAMMA": 0.052, "R0": 1.01, diff --git a/dev/fluids/Water.json b/dev/fluids/Water.json index b598be6d..d94d2a14 100644 --- a/dev/fluids/Water.json +++ b/dev/fluids/Water.json @@ -489,6 +489,10 @@ ], "NAME": "Water", "TRANSPORT": { + "conductivity": { + "BibTeX": "Huber-JPCRD-2012", + "hardcoded": "Water" + }, "viscosity": { "BibTeX": "Huber-JPCRD-2009", "hardcoded": "Water" diff --git a/src/Backends/Helmholtz/Fluids/FluidLibrary.h b/src/Backends/Helmholtz/Fluids/FluidLibrary.h index 3dde52d7..a3e100ee 100644 --- a/src/Backends/Helmholtz/Fluids/FluidLibrary.h +++ b/src/Backends/Helmholtz/Fluids/FluidLibrary.h @@ -608,6 +608,16 @@ protected: /// Parse the thermal conductivity data void parse_thermal_conductivity(rapidjson::Value &conductivity, CoolPropFluid & fluid) { + if (conductivity.HasMember("hardcoded")){ + std::string target = cpjson::get_string(conductivity, "hardcoded"); + if (!target.compare("Water")){ + fluid.transport.hardcoded_conductivity = CoolProp::TransportPropertyData::CONDUCTIVITY_HARDCODED_WATER; return; + } + else{ + throw ValueError(format("hardcoded residual conductivity term [%s] is not understood for fluid %s",target.c_str(), fluid.name.c_str())); + } + } + // Load the BibTeX key fluid.transport.BibTeX_conductivity = cpjson::get_string(conductivity,"BibTeX"); diff --git a/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp b/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp index b0b077f8..c90a5249 100644 --- a/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp +++ b/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp @@ -220,7 +220,7 @@ long double HelmholtzEOSMixtureBackend::calc_conductivity(void) switch(components[0]->transport.hardcoded_conductivity) { case CoolProp::TransportPropertyData::CONDUCTIVITY_HARDCODED_WATER: - return TransportRoutines::viscosity_water_hardcoded(*this); + return TransportRoutines::conductivity_hardcoded_water(*this); default: throw ValueError(format("hardcoded viscosity type [%d] is invalid for fluid %s", components[0]->transport.hardcoded_conductivity, name().c_str())); } diff --git a/src/Backends/Helmholtz/TransportRoutines.cpp b/src/Backends/Helmholtz/TransportRoutines.cpp index 61faf15d..5560ad31 100644 --- a/src/Backends/Helmholtz/TransportRoutines.cpp +++ b/src/Backends/Helmholtz/TransportRoutines.cpp @@ -571,9 +571,9 @@ long double TransportRoutines::conductivity_critical_hardcoded_R123(HelmholtzEOS long double TransportRoutines::conductivity_dilute_hardcoded_CO2(HelmholtzEOSMixtureBackend &HEOS){ - double e_k=251.196,Tstar; - double b[]={0.4226159,0.6280115,-0.5387661,0.6735941,0,0,-0.4362677,0.2255388}; - double c[]={0,2.387869e-2,4.350794,-10.33404,7.981590,-1.940558}; + double e_k = 251.196, Tstar; + double b[] = {0.4226159, 0.6280115, -0.5387661, 0.6735941, 0, 0, -0.4362677, 0.2255388}; + double c[] = {0, 2.387869e-2, 4.350794, -10.33404, 7.981590, -1.940558}; //Vesovic Eq. 31 [no units] double summer = 0; @@ -624,5 +624,64 @@ long double TransportRoutines::conductivity_dilute_eta0_and_poly(HelmholtzEOSMix } } +long double TransportRoutines::conductivity_hardcoded_water(HelmholtzEOSMixtureBackend &HEOS){ + + double L[5][6] = {{1.60397357,-0.646013523,0.111443906,0.102997357,-0.0504123634,0.00609859258}, + {2.33771842,-2.78843778,1.53616167,-0.463045512,0.0832827019,-0.00719201245}, + {2.19650529,-4.54580785,3.55777244,-1.40944978,0.275418278,-0.0205938816}, + {-1.21051378,1.60812989,-0.621178141,0.0716373224,0,0}, + {-2.7203370,4.57586331,-3.18369245,1.1168348,-0.19268305,0.012913842}}; + + double lambdabar_0,lambdabar_1,lambdabar_2,rhobar,Tbar,sum,R_Water; + double Tstar=647.096,rhostar=322,pstar=22064000,lambdastar=1e-3,mustar=1e-6; + double tau,xi; + int i,j; + + Tbar = HEOS.T()/Tstar; + rhobar = HEOS.keyed_output(CoolProp::iDmass)/rhostar; + + // Dilute gas contribution + lambdabar_0 = sqrt(Tbar)/(2.443221e-3+1.323095e-2/Tbar+6.770357e-3/pow(Tbar,2)-3.454586e-3/pow(Tbar,3)+4.096266e-4/pow(Tbar,4)); + + sum=0; + for (i=0;i<=4;i++){ + for (j=0;j<=5;j++){ + sum+=L[i][j]*powInt(1.0/Tbar-1.0,i)*powInt(rhobar-1,j); + } + } + // Finite density contribution + lambdabar_1=exp(rhobar*sum); + + double nu=0.630,GAMMA =177.8514,gamma=1.239,xi_0=0.13,Lambda_0=0.06,Tr_bar=1.5,tau_ref = Tr_bar*Tstar/HEOS.T(), + qd_bar=1/0.4,pi=3.141592654, delta = HEOS.delta(), R=461.51805;//J/kg/K + tau=1/Tbar; + + double drhodp = 1/(R*HEOS.T()*(1+2*rhobar*HEOS.dalphar_dDelta()+rhobar*rhobar*HEOS.d2alphar_dDelta2())); + double drhobar_dpbar = pstar/rhostar*drhodp; + double drhodp_Trbar = 1/(R*Tr_bar*Tstar*(1+2*rhobar*HEOS.calc_alphar_deriv_nocache(0,1,HEOS.mole_fractions,1/Tr_bar,delta)+delta*delta*HEOS.calc_alphar_deriv_nocache(0,2,HEOS.mole_fractions,1/Tr_bar,delta))); + double drhobar_dpbar_Trbar = pstar/rhostar*drhodp_Trbar; + double cp = HEOS.cpmolar(); // [J/mol/K] + double cv = HEOS.cvmolar(); // [J/mol/K] + double cpbar = cp/8.31447215; //[-] + double mubar = HEOS.viscosity()/mustar; + double DELTAchibar_T = rhobar*(drhobar_dpbar-drhobar_dpbar_Trbar*Tr_bar/Tbar); + if (DELTAchibar_T<0) + xi = 0; + else + xi = xi_0*pow(DELTAchibar_T/Lambda_0,nu/gamma); + double y = qd_bar*xi; + + double Z; + double kappa = cp/cv; + if (y < 1.2e-7) + Z = 0; + else + Z = 2/(pi*y)*(((1-1/kappa)*atan(y)+y/kappa)-(1-exp(-1/(1/y+y*y/3/rhobar/rhobar)))); + + lambdabar_2 = GAMMA*rhobar*cpbar*Tbar/mubar*Z; + + return (lambdabar_0*lambdabar_1+lambdabar_2)*lambdastar; +} + }; /* namespace CoolProp */ \ No newline at end of file diff --git a/src/Backends/Helmholtz/TransportRoutines.h b/src/Backends/Helmholtz/TransportRoutines.h index 2fe7d5a5..86a940c6 100644 --- a/src/Backends/Helmholtz/TransportRoutines.h +++ b/src/Backends/Helmholtz/TransportRoutines.h @@ -166,6 +166,9 @@ public: static long double conductivity_dilute_eta0_and_poly(HelmholtzEOSMixtureBackend &HEOS); static long double conductivity_residual_polynomial_and_exponential(HelmholtzEOSMixtureBackend &HEOS); + static long double conductivity_hardcoded_water(HelmholtzEOSMixtureBackend &HEOS); + + }; /* class TransportRoutines */ }; /* namespace CoolProp */ diff --git a/src/Tests/CoolProp-Tests.cpp b/src/Tests/CoolProp-Tests.cpp index 87f904d1..e9a47307 100644 --- a/src/Tests/CoolProp-Tests.cpp +++ b/src/Tests/CoolProp-Tests.cpp @@ -129,17 +129,17 @@ vel("R152A", "T", 384, "Dmass", 504.51, "V", 43.29e-6, 5e-3), vel("R152A", "T", 384, "Dmass", 239.35, "V", 21.01e-6, 10e-3), // Huber, JPCRD, 2008 and IAPWS -vel("Water", "T", 298.15, "Dmass", 998, "V", 889.735100e-6, 1e-3), -vel("Water", "T", 298.15, "Dmass", 1200, "V", 1437.649467e-6, 1e-3), -vel("Water", "T", 373.15, "Dmass", 1000, "V", 307.883622e-6, 1e-3), -vel("Water", "T", 433.15, "Dmass", 1, "V", 14.538324e-6, 1e-3), -vel("Water", "T", 433.15, "Dmass", 1000, "V", 217.685358e-6, 1e-3), -vel("Water", "T", 873.15, "Dmass", 1, "V", 32.619287e-6, 1e-3), -vel("Water", "T", 873.15, "Dmass", 100, "V", 35.802262e-6, 1e-3), -vel("Water", "T", 873.15, "Dmass", 600, "V", 77.430195e-6, 1e-3), -vel("Water", "T", 1173.15, "Dmass", 1, "V", 44.217245e-6, 1e-3), -vel("Water", "T", 1173.15, "Dmass", 100, "V", 47.640433e-6, 1e-3), -vel("Water", "T", 1173.15, "Dmass", 400, "V", 64.154608e-6, 1e-3), +vel("Water", "T", 298.15, "Dmass", 998, "V", 889.735100e-6, 1e-8), +vel("Water", "T", 298.15, "Dmass", 1200, "V", 1437.649467e-6, 1e-8), +vel("Water", "T", 373.15, "Dmass", 1000, "V", 307.883622e-6, 1e-8), +vel("Water", "T", 433.15, "Dmass", 1, "V", 14.538324e-6, 1e-8), +vel("Water", "T", 433.15, "Dmass", 1000, "V", 217.685358e-6, 1e-8), +vel("Water", "T", 873.15, "Dmass", 1, "V", 32.619287e-6, 1e-8), +vel("Water", "T", 873.15, "Dmass", 100, "V", 35.802262e-6, 1e-8), +vel("Water", "T", 873.15, "Dmass", 600, "V", 77.430195e-6, 1e-8), +vel("Water", "T", 1173.15, "Dmass", 1, "V", 44.217245e-6, 1e-8), +vel("Water", "T", 1173.15, "Dmass", 100, "V", 47.640433e-6, 1e-8), +vel("Water", "T", 1173.15, "Dmass", 400, "V", 64.154608e-6, 1e-8), // Quinones-Cisneros, JPCRD, 2012 vel("SF6", "T", 300, "Dmass", 1e-14, "V", 15.2887e-6, 1e-4), @@ -346,13 +346,13 @@ vel("R123", "T", 430, "Dmass", 996.35, "L", 45.62e-3, 1e-3), vel("R123", "T", 430, "Dmass", 166.9, "L", 21.03e-3, 1e-3), // From Vesovic, JPCRD, 1990 -vel("CO2", "T", 220, "Dmass", 2.440, "L", 10.90e-3, 1e-2), -vel("CO2", "T", 300, "Dmass", 1.773, "L", 16.77e-3, 1e-2), -vel("CO2", "T", 800, "Dmass", 0.662, "L", 56.65e-3, 1e-2), -vel("CO2", "T", 304, "Dmass", 254.3205, "L", 42.52e-3, 1e-2), -vel("CO2", "T", 220, "Dmass", 1194.86, "L", 187.50e-3, 1e-2), -vel("CO2", "T", 300, "Dmass", 1029.27, "L", 137.61e-3, 1e-2), -vel("CO2", "T", 800, "Dmass", 407.828, "L", 78.47e-3, 1e-2), +vel("CO2", "T", 220, "Dmass", 2.440, "L", 10.90e-3, 1e-4), +vel("CO2", "T", 300, "Dmass", 1.773, "L", 16.77e-3, 1e-4), +vel("CO2", "T", 800, "Dmass", 0.662, "L", 56.65e-3, 1e-4), +vel("CO2", "T", 304, "Dmass", 254.3205, "L", 42.52e-3, 1e-4), +vel("CO2", "T", 220, "Dmass", 1194.86, "L", 187.50e-3, 1e-4), +vel("CO2", "T", 300, "Dmass", 1029.27, "L", 137.61e-3, 1e-4), +vel("CO2", "T", 800, "Dmass", 407.828, "L", 78.47e-3, 1e-4), // From Friend, JPCRD, 1991 vel("Ethane", "T", 100, "Dmass", 1e-13, "L", 3.46e-3, 1e-2), @@ -385,6 +385,20 @@ vel("Air", "T", 100, "Dmolar", 28000, "L", 119.221e-3, 1e-4), vel("Air", "T", 200, "Dmolar", 10000, "L", 35.3185e-3, 1e-4), vel("Air", "T", 300, "Dmolar", 5000, "L", 32.6062e-3, 1e-4), vel("Air", "T", 132.64, "Dmolar", 10400, "L", 75.6231e-3, 1e-4), + +// Huber, JPCRD, 2012 +vel("Water", "T", 298.15, "Dmass", 1e-14, "L", 18.4341883e-3, 1e-6), +vel("Water", "T", 298.15, "Dmass", 998, "L", 607.712868e-3, 1e-6), +vel("Water", "T", 298.15, "Dmass", 1200, "L", 799.038144e-3, 1e-6), +vel("Water", "T", 873.15, "Dmass", 1e-14, "L", 79.1034659e-3, 1e-6), +vel("Water", "T", 647.35, "Dmass", 1, "L", 51.9298924e-3, 1e-6), +vel("Water", "T", 647.35, "Dmass", 122, "L", 130.922885e-3, 1e-6), +vel("Water", "T", 647.35, "Dmass", 222, "L", 367.787459e-3, 1e-6), +vel("Water", "T", 647.35, "Dmass", 272, "L", 757.959776e-3, 1e-6), +vel("Water", "T", 647.35, "Dmass", 322, "L", 1443.75556e-3, 1e-6), +vel("Water", "T", 647.35, "Dmass", 372, "L", 650.319402e-3, 1e-6), +vel("Water", "T", 647.35, "Dmass", 422, "L", 448.883487e-3, 1e-6), +vel("Water", "T", 647.35, "Dmass", 750, "L", 600.961346e-3, 1e-6), }; TEST_CASE_METHOD(TransportValidationFixture, "Compare thermal conductivities against published data", "[conductivity]")