SF6 and H2S viscosity - still problems with H2S

Signed-off-by: Ian Bell <ian.h.bell@gmail.com>
This commit is contained in:
Ian Bell
2014-05-22 22:03:31 +02:00
parent 3d9a99733d
commit c135ca319b
7 changed files with 186 additions and 33 deletions

View File

@@ -287,6 +287,18 @@ protected:
fluid.transport.viscosity_dilute.type = CoolProp::ViscosityDiluteVariables::VISCOSITY_DILUTE_POWERS_OF_T;
}
else if (!type.compare("collision_integral_powers_of_Tstar")){
// Get a reference to the entry in the fluid instance
CoolProp::ViscosityDiluteCollisionIntegralPowersOfTstarData &CI = fluid.transport.viscosity_dilute.collision_integral_powers_of_Tstar;
// Load up the values
CI.a = cpjson::get_long_double_array(dilute["a"]);
CI.t = cpjson::get_long_double_array(dilute["t"]);
CI.T_reducing = cpjson::get_double(dilute,"T_reducing");
CI.C = cpjson::get_double(dilute,"C");
fluid.transport.viscosity_dilute.type = CoolProp::ViscosityDiluteVariables::VISCOSITY_DILUTE_COLLISION_INTEGRAL_POWERS_OF_TSTAR ;
}
else{
throw ValueError(format("type [%s] is not understood for fluid %s",type.c_str(),fluid.name.c_str()));
}
@@ -372,7 +384,8 @@ protected:
F.Aa = cpjson::get_long_double_array(higher["Aa"]);
F.Aaa = cpjson::get_long_double_array(higher["Aaa"]);
F.Ar = cpjson::get_long_double_array(higher["Ar"]);
F.Arr = cpjson::get_long_double_array(higher["Arr"]);
F.Na = cpjson::get_integer(higher,"Na");
F.Naa = cpjson::get_integer(higher,"Naa");
F.Nr = cpjson::get_integer(higher,"Nr");
@@ -382,9 +395,21 @@ protected:
assert(F.Aa.size() == 3);
assert(F.Aaa.size() == 3);
assert(F.Ar.size() == 3);
assert(F.Arr.size() == 3);
F.T_reduce = cpjson::get_double(higher,"T_reduce");
if (higher.HasMember("Arr") && !higher.HasMember("Adrdr")){
F.Arr = cpjson::get_long_double_array(higher["Arr"]);
assert(F.Arr.size() == 3);
}
else if (higher.HasMember("Adrdr") && !higher.HasMember("Arr")){
F.Adrdr = cpjson::get_long_double_array(higher["Adrdr"]);
assert(F.Adrdr.size() == 3);
}
else{
throw ValueError(format("can only provide one of Arr or Adrdr for fluid %s",fluid.name.c_str()));
}
if (higher.HasMember("Aaaa") && higher.HasMember("Arrr") && higher.HasMember("Aii")){
F.Aaaa = cpjson::get_long_double_array(higher["Aaaa"]);
F.Arrr = cpjson::get_long_double_array(higher["Arrr"]);

View File

@@ -152,6 +152,8 @@ long double HelmholtzEOSMixtureBackend::calc_viscosity(void)
eta_dilute = TransportRoutines::viscosity_dilute_collision_integral(*this); break;
case ViscosityDiluteVariables::VISCOSITY_DILUTE_POWERS_OF_T:
eta_dilute = TransportRoutines::viscosity_dilute_powers_of_T(*this); break;
case ViscosityDiluteVariables::VISCOSITY_DILUTE_COLLISION_INTEGRAL_POWERS_OF_TSTAR:
eta_dilute = TransportRoutines::viscosity_dilute_collision_integral_powers_of_T(*this); break;
default:
throw ValueError(format("dilute viscosity type [%d] is invalid for fluid %s", components[0]->transport.viscosity_dilute.type, name().c_str()));
}

View File

@@ -78,6 +78,26 @@ long double TransportRoutines::viscosity_dilute_powers_of_T(HelmholtzEOSMixtureB
}
}
long double TransportRoutines::viscosity_dilute_collision_integral_powers_of_T(HelmholtzEOSMixtureBackend &HEOS)
{
if (HEOS.is_pure_or_pseudopure)
{
// Retrieve values from the state class
CoolProp::ViscosityDiluteCollisionIntegralPowersOfTstarData &data = HEOS.components[0]->transport.viscosity_dilute.collision_integral_powers_of_Tstar;
const std::vector<long double> &a = data.a, &t = data.t;
long double summer = 0, Tstar = HEOS.T()/data.T_reducing;
for (std::size_t i = 0; i < a.size(); ++i)
{
summer += a[i]*pow(Tstar, t[i]);
}
return data.C*sqrt(HEOS.T())/summer;
}
else{
throw NotImplementedError("TransportRoutines::viscosity_dilute_collision_integral_powers_of_T is only for pure and pseudo-pure");
}
}
long double TransportRoutines::viscosity_higher_order_modified_Batschinski_Hildebrand(HelmholtzEOSMixtureBackend &HEOS)
{
if (HEOS.is_pure_or_pseudopure)
@@ -273,7 +293,7 @@ long double TransportRoutines::viscosity_higher_order_friction_theory(HelmholtzE
{
CoolProp::ViscosityFrictionTheoryData &F = HEOS.components[0]->transport.viscosity_higher_order.friction_theory;
long double tau = F.T_reduce/HEOS.T(), kii, krrr, kaaa;
long double tau = F.T_reduce/HEOS.T(), kii, krrr, kaaa, krr, kdrdr;
double psi1 = exp(tau)-F.c1;
double psi2 = exp(pow(tau,2))-F.c2;
@@ -283,9 +303,16 @@ long double TransportRoutines::viscosity_higher_order_friction_theory(HelmholtzE
double ka = (F.Aa[0] + F.Aa[1]*psi1 + F.Aa[2]*psi2)*pow(tau, F.Na);
double kr = (F.Ar[0] + F.Ar[1]*psi1 + F.Ar[2]*psi2)*pow(tau, F.Nr);
double kaa = (F.Aaa[0] + F.Aaa[1]*psi1 + F.Aaa[2]*psi2)*pow(tau, F.Naa);
double krr = (F.Arr[0] + F.Arr[1]*psi1 + F.Arr[2]*psi2)*pow(tau, F.Nrr);
if (F.Arr.empty()){
krr = 0;
kdrdr = (F.Adrdr[0] + F.Adrdr[1]*psi1 + F.Adrdr[2]*psi2)*pow(tau, F.Nrr);
}
else{
krr = (F.Arr[0] + F.Arr[1]*psi1 + F.Arr[2]*psi2)*pow(tau, F.Nrr);
kdrdr = 0;
}
if (!F.Aii.empty() && !F.Aii.empty() && !F.Aii.empty()){
if (!F.Aii.empty() && !F.Arrr.empty() && !F.Aaaa.empty()){
kii = (F.Aii[0] + F.Aii[1]*psi1 + F.Aii[2]*psi2)*pow(tau, F.Nii);
krrr = (F.Arrr[0] + F.Arrr[1]*psi1 + F.Arrr[2]*psi2)*pow(tau, F.Nrrr);
kaaa = (F.Aaaa[0] + F.Aaaa[1]*psi1 + F.Aaaa[2]*psi2)*pow(tau, F.Naaa);
@@ -302,9 +329,9 @@ long double TransportRoutines::viscosity_higher_order_friction_theory(HelmholtzE
double pid = HEOS.rhomolar() * HEOS.gas_constant() * HEOS.T() / 1e5; // [bar]; 1e5 for conversion from Pa -> bar
double deltapr = pr - pid;
double eta_f = ka*pa + kr*deltapr + ki*pid + kaa*pa*pa + krr*deltapr*deltapr + kii*pid*pid + krrr*pr*pr*pr + kaaa*pa*pa*pa;
double eta_f = ka*pa + kr*deltapr + ki*pid + kaa*pa*pa + kdrdr*deltapr*deltapr + krr*pr*pr + kii*pid*pid + krrr*pr*pr*pr + kaaa*pa*pa*pa;
return eta_f/1000;
return eta_f; //[Pa-s]
}
else{
throw NotImplementedError("TransportRoutines::viscosity_higher_order_friction_theory is only for pure and pseudo-pure");

View File

@@ -44,6 +44,8 @@ public:
*/
static long double viscosity_dilute_powers_of_T(HelmholtzEOSMixtureBackend &HEOS);
static long double viscosity_dilute_collision_integral_powers_of_T(HelmholtzEOSMixtureBackend &HEOS);
/**
\brief The initial density dependence term \f$B_{\eta}\f$ from Rainwater-Friend theory