From f29c329b8c3c6c8e9cd785cda40e9df1cf809cfe Mon Sep 17 00:00:00 2001 From: Ian Bell Date: Thu, 22 May 2014 23:13:56 +0200 Subject: [PATCH] R23 viscosity Signed-off-by: Ian Bell --- dev/fluids/R23.json | 8 ++++- doc/transport_table/table.tex | 2 +- include/CoolPropFluid.h | 1 + src/Backends/Helmholtz/Fluids/FluidLibrary.h | 9 ++--- .../Helmholtz/HelmholtzEOSMixtureBackend.cpp | 2 ++ src/Backends/Helmholtz/TransportRoutines.cpp | 33 +++++++++++++++++++ src/Backends/Helmholtz/TransportRoutines.h | 1 + src/Tests/CoolProp-Tests.cpp | 6 ++++ 8 files changed, 56 insertions(+), 6 deletions(-) diff --git a/dev/fluids/R23.json b/dev/fluids/R23.json index 3405928b..f1abac75 100644 --- a/dev/fluids/R23.json +++ b/dev/fluids/R23.json @@ -271,5 +271,11 @@ "rhoVtriple_units": "mol/m^3" } ], - "NAME": "R23" + "NAME": "R23", + "TRANSPORT": { + "viscosity": { + "BibTeX": "Shan-ASHRAE-2000", + "hardcoded": "R23" + } + } } \ No newline at end of file diff --git a/doc/transport_table/table.tex b/doc/transport_table/table.tex index bffcded0..2de9a2de 100644 --- a/doc/transport_table/table.tex +++ b/doc/transport_table/table.tex @@ -17,7 +17,6 @@ Ammonia & (data) Fenghour 1995 & $\eta^0 = \dfrac{0.021357\sqrt{MT}}{\sigma^2\Ga \hline\hline H2S & Quinones-Cisneros 2012 & $\eta^0 = 0.87721\dfrac{\sqrt{T}}{S^*(T^*)}$ \newline $S^*(T^*) = \sum_i \frac{\alpha_i}{T^{*i}}$ & FRICTION THEORY\\\hline -R23 & Shan 2000 & $\eta^0 = \frac{5}{16}\sqrt{\frac{MkT}{1000\pi N}}\frac{10^{24}}{\sigma^2\Omega^*(T^*)}$\newline $\Omega(T^*)=\exp\left(\sum_{i=0}^{4}a_i[\ln T^*]^i\right)$ & \\\hline Ethane & Friend 1991 & $\eta^0 = \dfrac{12.0085\sqrt{t}}{\Omega^{(2,2)*}(t)}$ \newline $\Omega^{(2,2)*}(t) = \left[\sum_i C_it^{(i-1)/3-1} \right]^{-1}$& $\Delta\eta = 15.977\left[\displaystyle\sum_i g_i\delta^{r_i}\tau^{s_i}\right]\left[1+\displaystyle\sum_{i=10}^{11}g_i\delta^{r_i}\tau^{s_i}\right]^{-1}$\\\hline \hline\hline \multicolumn{4}{c}{DONE below this line}\\ \hline\hline @@ -40,6 +39,7 @@ n-Hexane & (data) Michailidou 2013 &$\eta^0 = \dfrac{0.021357\sqrt{MT}}{\sigma^2 SF6 & (data) Quinones-Cisneros 2012 & $\eta^0 = \sum_i d_i T_r^{n_i}$ & FRICTION THEORY\\\hline R404A, R410A, R507, R407 & (data) Geller 2000 & $\eta^0 = \sum_i A_iT^i$&$\eta^r = \sum_j b_j\rho^j$ \\\hline Helium & Arp 1998 & hardcoded & hardcoded \\\hline +R23 & Shan 2000 & $\eta^0 = \frac{5}{16}\sqrt{\frac{MkT}{1000\pi N}}\frac{10^{24}}{\sigma^2\Omega^*(T^*)}$\newline $\Omega(T^*)=\exp\left(\sum_{i=0}^{4}a_i[\ln T^*]^i\right)$ & \\\hline \hline\hline \end{tabular} diff --git a/include/CoolPropFluid.h b/include/CoolPropFluid.h index ace6d84c..7987e33f 100644 --- a/include/CoolPropFluid.h +++ b/include/CoolPropFluid.h @@ -110,6 +110,7 @@ class TransportPropertyData public: enum ViscosityDiluteEnum {VISCOSITY_HARDCODED_WATER, VISCOSITY_HARDCODED_HELIUM, + VISCOSITY_HARDCODED_R23, VISCOSITY_NOT_HARDCODED }; ViscosityDiluteVariables viscosity_dilute; diff --git a/src/Backends/Helmholtz/Fluids/FluidLibrary.h b/src/Backends/Helmholtz/Fluids/FluidLibrary.h index ccf93499..9f425862 100644 --- a/src/Backends/Helmholtz/Fluids/FluidLibrary.h +++ b/src/Backends/Helmholtz/Fluids/FluidLibrary.h @@ -433,12 +433,13 @@ protected: if (viscosity.HasMember("hardcoded")){ std::string target = cpjson::get_string(viscosity,"hardcoded"); if (!target.compare("Water")){ - fluid.transport.hardcoded = CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_WATER; - return; + fluid.transport.hardcoded = CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_WATER; return; } else if (!target.compare("Helium")){ - fluid.transport.hardcoded = CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_HELIUM; - return; + fluid.transport.hardcoded = CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_HELIUM; return; + } + else if (!target.compare("R23")){ + fluid.transport.hardcoded = CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_R23; return; } else{ throw ValueError(); diff --git a/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp b/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp index 7aecce4d..997092e1 100644 --- a/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp +++ b/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp @@ -140,6 +140,8 @@ long double HelmholtzEOSMixtureBackend::calc_viscosity(void) return TransportRoutines::viscosity_water_hardcoded(*this); case CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_HELIUM: return TransportRoutines::viscosity_helium_hardcoded(*this); + case CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_R23: + return TransportRoutines::viscosity_R23_hardcoded(*this); default: throw ValueError(format("hardcoded viscosity type [%d] is invalid for fluid %s", components[0]->transport.hardcoded, name().c_str())); } diff --git a/src/Backends/Helmholtz/TransportRoutines.cpp b/src/Backends/Helmholtz/TransportRoutines.cpp index 10255441..a23ec1ef 100644 --- a/src/Backends/Helmholtz/TransportRoutines.cpp +++ b/src/Backends/Helmholtz/TransportRoutines.cpp @@ -382,4 +382,37 @@ long double TransportRoutines::viscosity_helium_hardcoded(HelmholtzEOSMixtureBac } } +long double TransportRoutines::viscosity_R23_hardcoded(HelmholtzEOSMixtureBackend &HEOS) +{ + double C1 = 1.3163, // + C2 = 0.1832, + DeltaGstar = 771.23, + rhoL = 32.174, + rhocbar = 7.5114, + Tc = 299.2793, + DELTAeta_max = 3.967, + k = 1.380658e-23, + N_A = 6.022137e23, // 1/mol + pi = 3.141592654, // + Ru = 8.31451, + molar_mass = 70.014; + + double a[] = {0.4425728, -0.5138403, 0.1547566, -0.02821844, 0.001578286}; + double e_k = 243.91, sigma = 0.4278; + double Tstar = HEOS.T()/e_k; + double logTstar = log(Tstar); + double Omega = exp(a[0]+a[1]*logTstar+a[2]*pow(logTstar,2)+a[3]*pow(logTstar,3)+a[4]*pow(logTstar,4)); + double eta_DG = 1.25*0.021357*sqrt(molar_mass*HEOS.T())/(sigma*sigma*Omega); // uPa-s + + double rhobar = HEOS.rhomolar()/1000; // [mol/L] + double eta_L = C2*(rhoL*rhoL)/(rhoL-rhobar)*sqrt(HEOS.T())*exp(rhobar/(rhoL-rhobar)*DeltaGstar/(Ru*HEOS.T())); + + double chi = rhobar - rhocbar; + double tau = HEOS.T() - Tc; + + double DELTAeta_c = 4*DELTAeta_max/((exp(chi)+exp(-chi))*(exp(tau)+exp(-tau))); + + return (pow((rhoL-rhobar)/rhoL,C1)*eta_DG+pow(rhobar/rhoL,C1)*eta_L+DELTAeta_c)/1e6; +} + }; /* namespace CoolProp */ \ No newline at end of file diff --git a/src/Backends/Helmholtz/TransportRoutines.h b/src/Backends/Helmholtz/TransportRoutines.h index 8a7ef293..e291c9d6 100644 --- a/src/Backends/Helmholtz/TransportRoutines.h +++ b/src/Backends/Helmholtz/TransportRoutines.h @@ -85,6 +85,7 @@ public: static long double viscosity_water_hardcoded(HelmholtzEOSMixtureBackend &HEOS); static long double viscosity_helium_hardcoded(HelmholtzEOSMixtureBackend &HEOS); + static long double viscosity_R23_hardcoded(HelmholtzEOSMixtureBackend &HEOS); static long double viscosity_hydrogen_higher_order_hardcoded(HelmholtzEOSMixtureBackend &HEOS); diff --git a/src/Tests/CoolProp-Tests.cpp b/src/Tests/CoolProp-Tests.cpp index 7973dd3e..60c546f0 100644 --- a/src/Tests/CoolProp-Tests.cpp +++ b/src/Tests/CoolProp-Tests.cpp @@ -174,9 +174,15 @@ vel("R507A", "T", 243.15, "Q", 1, "V", 9.83e-6, 1e-2), vel("R507A", "T", 333.15, "Q", 0, "V", 74.37e-6, 1e-2), vel("R507A", "T", 333.15, "Q", 1, "V", 19.35e-6, 1e-2), +// From Arp, NIST, 1998 vel("Helium", "T", 3.6, "P", 0.180e6, "V", 3.745e-6, 1e-2), vel("Helium", "T", 50, "P", 0.180e6, "V", 6.376e-6, 1e-2), vel("Helium", "T", 400, "P", 0.180e6, "V", 24.29e-6, 1e-2), + +// From Shan, ASHRAE, 2000 +vel("R23", "T", 180, "Dmolar", 21097, "V", 353.88e-6, 1e-4), +vel("R23", "T", 420, "Dmolar", 7564, "V", 39.459e-6, 1e-4), +vel("R23", "T", 370, "Dmolar", 32.62, "V", 18.213e-6, 1e-4), }; class ViscosityValidationFixture