diff --git a/dev/fluids/Helium.json b/dev/fluids/Helium.json index c4cc1324..aedc3177 100644 --- a/dev/fluids/Helium.json +++ b/dev/fluids/Helium.json @@ -322,5 +322,11 @@ "rhoVtriple_units": "mol/m^3" } ], - "NAME": "Helium" + "NAME": "Helium", + "TRANSPORT": { + "viscosity": { + "BibTeX": "ARP-NIST-1998", + "hardcoded": "Helium" + } + } } \ No newline at end of file diff --git a/doc/transport_table/table.tex b/doc/transport_table/table.tex index e058d70a..bffcded0 100644 --- a/doc/transport_table/table.tex +++ b/doc/transport_table/table.tex @@ -16,9 +16,9 @@ Fluid & Reference & $\eta^0$ & $\eta^r$ \\ Ammonia & (data) Fenghour 1995 & $\eta^0 = \dfrac{0.021357\sqrt{MT}}{\sigma^2\Game(T^*)}$\newline$\mathfrak{S}(T^*)=\exp\left(\sum_{i=0}^{4}a_i[\ln T^*]^i\right)$ & $\eta^r = B_{BV}\rho\eta^0(T) + \Delta\eta$\newline$\Delta\eta = \sum_i b_i(T)\rho^i$\\\hline \hline\hline -H2S & Quinones-Cisneros 2012 & $\eta^0 = 8.7721\dfrac{\sqrt{T}}{S^*(T^*)}$ \newline $S^*(T^*) = \sum_i \frac{\alpha_i}{T^{*i}}$ & FRICTION THEORY\\\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 -Helium & Arp 1998 & NASTY & NASTY \\\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 Propane & (data) Vogel 1998 & $\eta^0 = \dfrac{0.021357\sqrt{MT}}{\sigma^2\mathfrak{S}(T^*)}$\newline$\mathfrak{S}(T^*)=\exp\left(\sum_{i=0}^{4}a_i[\ln T^*]^i\right)$ & $\eta_h = \displaystyle\sum_{i=2}^n\displaystyle\sum_{j=0}^me_{ij}\frac{\delta^i}{\tau_j}+f_1\left(\frac{\delta}{\delta_0(\tau)-\delta}-\frac{\delta}{\delta_0(\tau)}\right)$ \newline $\delta_0(\tau)=g_1(1+g_2\tau^{1/2})$\\\hline @@ -39,6 +39,7 @@ Hydrogen & (from v5) Muzny 2013 & $\eta^0 = \dfrac{0.021357\sqrt{MT}}{\sigma^2S^ n-Hexane & (data) Michailidou 2013 &$\eta^0 = \dfrac{0.021357\sqrt{MT}}{\sigma^2S(T^*)}$\newline$S(T^*)=\exp\left(\sum_{i=0}^{4}a_i[\ln T^*]^i\right)$& $\eta^r = \eta^0(T)\rho B_{RF} + \Delta\eta$\newline$\Delta\eta = (\rho_r^{2/3}T_r^{1/2})\left\lbrace\dfrac{c_0}{T_r}+\dfrac{c_1}{c_2+T_r+c_3\rho_r^2}+\dfrac{c_4(1+\rho_r)}{c_5 + c_6T_r+c_7\rho_r+\rho_r^2+c_8\rho_rT_r} \right\rbrace$ \\\hline 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 \hline\hline \end{tabular} diff --git a/src/Backends/Helmholtz/Fluids/FluidLibrary.h b/src/Backends/Helmholtz/Fluids/FluidLibrary.h index ed20ff73..ccf93499 100644 --- a/src/Backends/Helmholtz/Fluids/FluidLibrary.h +++ b/src/Backends/Helmholtz/Fluids/FluidLibrary.h @@ -436,6 +436,10 @@ protected: fluid.transport.hardcoded = CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_WATER; return; } + else if (!target.compare("Helium")){ + fluid.transport.hardcoded = CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_HELIUM; + return; + } else{ throw ValueError(); } diff --git a/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp b/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp index dd3a68a2..7aecce4d 100644 --- a/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp +++ b/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp @@ -138,6 +138,8 @@ long double HelmholtzEOSMixtureBackend::calc_viscosity(void) { case CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_WATER: return TransportRoutines::viscosity_water_hardcoded(*this); + case CoolProp::TransportPropertyData::VISCOSITY_HARDCODED_HELIUM: + return TransportRoutines::viscosity_helium_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 0dd2229e..10255441 100644 --- a/src/Backends/Helmholtz/TransportRoutines.cpp +++ b/src/Backends/Helmholtz/TransportRoutines.cpp @@ -340,4 +340,46 @@ long double TransportRoutines::viscosity_higher_order_friction_theory(HelmholtzE } +long double TransportRoutines::viscosity_helium_hardcoded(HelmholtzEOSMixtureBackend &HEOS) +{ + double eta_0,eta_0_slash, eta_E_slash, B,C,D,ln_eta,x; + // + // Arp, V.D., McCarty, R.D., and Friend, D.G., + // "Thermophysical Properties of Helium-4 from 0.8 to 1500 K with Pressures to 2000 MPa", + // NIST Technical Note 1334 (revised), 1998. + // + // Using Arp NIST report + // Report is not clear on viscosity, referring to REFPROP source code for clarity + + // Correlation wants density in g/cm^3; kg/m^3 --> g/cm^3, divide by 1000 + long double rho = HEOS.keyed_output(CoolProp::iDmass)/1000.0, T = HEOS.T(); + + if (T <= 300){ + x = log(T); + } + else{ + x = log(300.0); + } + // Evaluate the terms B,C,D + B = -47.5295259/x+87.6799309-42.0741589*x+8.33128289*x*x-0.589252385*x*x*x; + C = 547.309267/x-904.870586+431.404928*x-81.4504854*x*x+5.37008433*x*x*x; + D = -1684.39324/x+3331.08630-1632.19172*x+308.804413*x*x-20.2936367*x*x*x; + eta_0_slash = -0.135311743/x+1.00347841+1.20654649*x-0.149564551*x*x+0.012520841*x*x*x; + eta_E_slash = rho*B+rho*rho*C+rho*rho*rho*D; + + if (T<=100) + { + ln_eta = eta_0_slash + eta_E_slash; + // Correlation yields viscosity in micro g/(cm-s); to get Pa-s, divide by 10 to get micro Pa-s, then another 1e6 to get Pa-s + return exp(ln_eta)/10.0/1e6; + } + else + { + ln_eta = eta_0_slash + eta_E_slash; + eta_0 = 196*pow(T,static_cast(0.71938))*exp(12.451/T-295.67/T/T-4.1249); + // Correlation yields viscosity in micro g/(cm-s); to get Pa-s, divide by 10 to get micro Pa-s, then another 1e6 to get Pa-s + return (exp(ln_eta)+eta_0-exp(eta_0_slash))/10.0/1e6; + } +} + }; /* namespace CoolProp */ \ No newline at end of file diff --git a/src/Backends/Helmholtz/TransportRoutines.h b/src/Backends/Helmholtz/TransportRoutines.h index 465af747..8a7ef293 100644 --- a/src/Backends/Helmholtz/TransportRoutines.h +++ b/src/Backends/Helmholtz/TransportRoutines.h @@ -84,6 +84,8 @@ public: static long double viscosity_water_hardcoded(HelmholtzEOSMixtureBackend &HEOS); + static long double viscosity_helium_hardcoded(HelmholtzEOSMixtureBackend &HEOS); + static long double viscosity_hydrogen_higher_order_hardcoded(HelmholtzEOSMixtureBackend &HEOS); static long double viscosity_hexane_higher_order_hardcoded(HelmholtzEOSMixtureBackend &HEOS); diff --git a/src/Tests/CoolProp-Tests.cpp b/src/Tests/CoolProp-Tests.cpp index 76863757..7973dd3e 100644 --- a/src/Tests/CoolProp-Tests.cpp +++ b/src/Tests/CoolProp-Tests.cpp @@ -173,6 +173,10 @@ vel("R507A", "T", 243.15, "Q", 0, "V", 284.59e-6, 3e-2), 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), + +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), }; class ViscosityValidationFixture