81 const double MY_PI = EIGEN_PI;
83 const std::vector<std::tuple<int, double>> c_dhBH {
89 const double c_ln_dhBH = -0.063920968;
91 const std::vector<std::tuple<int, double>> c_Delta_B2_hBH {
101 const std::vector<std::tuple<int, int, double>> c_Cij = {
103 { 0, 3, -28.17881636},
104 { 0, 4, 28.28313847},
105 { 0, 5, -10.42402873},
106 {-1, 2, -19.58371655},
107 {-1, 3, 75.62340289},
108 {-1, 4, -120.70586598},
109 {-1, 5, 93.92740328},
110 {-1, 6, -27.37737354},
111 {-2, 2, 29.34470520},
112 {-2, 3, -112.3535693},
113 {-2, 4, 170.64908980 },
114 {-2, 5, -123.06669187},
115 {-2, 6, 34.42288969 },
116 {-4, 2, -13.37031968},
117 {-4, 3, 65.38059570},
118 {-4, 4, -115.09233113},
119 {-4, 5, 88.91973082},
120 {-4, 6, -25.62099890}
123 const double gamma = 1.92907278;
126 template<
typename TTYPE>
127 auto get_dhBH(
const TTYPE& Tstar)
const {
128 TTYPE summer = c_ln_dhBH*log(Tstar);
129 for (
auto [i, C_i] : c_dhBH){
130 summer += C_i*
pow(Tstar, i/2.0);
135 template<
typename TTYPE>
136 auto get_d_dhBH_d1T(
const TTYPE& Tstar)
const {
137 TTYPE summer = c_ln_dhBH;
138 for (
auto [i, C_i] : c_dhBH){
139 summer += (i/2.0)*C_i*
pow(Tstar, i/2.0);
145 template<
typename TTYPE>
146 auto get_DeltaB2hBH(
const TTYPE& Tstar)
const {
148 for (
auto [i, C_i] : c_Delta_B2_hBH){
149 summer += C_i*
pow(Tstar, i/2.0);
154 template<
typename TTYPE>
155 auto get_d_DeltaB2hBH_d1T(
const TTYPE& Tstar)
const {
157 for (
auto [i, C_i] : c_Delta_B2_hBH){
158 summer += (i/2.0)*C_i*
pow(Tstar, i/2.0);
164 template<
typename TTYPE,
typename RHOTYPE>
165 auto get_ahs(
const TTYPE& Tstar,
const RHOTYPE& rhostar)
const {
166 auto zeta = MY_PI/6.0*rhostar*
pow(get_dhBH(Tstar), 3);
167 return forceeval(Tstar*(5.0/3.0*log(1.0-zeta) + zeta*(34.0-33.0*zeta+4.0*
POW2(zeta))/(6.0*
POW2(1.0-zeta))));
171 template<
typename TTYPE,
typename RHOTYPE>
172 auto get_zhs(
const TTYPE& Tstar,
const RHOTYPE& rhostar)
const {
173 std::common_type_t<TTYPE, RHOTYPE> zeta = MY_PI/6.0*rhostar*
POW3(get_dhBH(Tstar));
174 return forceeval((1.0+zeta+zeta**zeta-2.0/3.0*
POW3(zeta)*(1+zeta))/
POW3(1.0-zeta));
178 template<
typename TTYPE,
typename RHOTYPE>
179 auto get_a(
const TTYPE& Tstar,
const RHOTYPE& rhostar)
const{
180 std::common_type_t<TTYPE, RHOTYPE> summer = 0.0;
181 for (
auto [i, j, Cij] : c_Cij){
182 summer += Cij*
pow(Tstar, i/2.0)*
pow(rhostar, j);
184 return forceeval(get_ahs(Tstar, rhostar) + exp(-gamma*
POW2(rhostar))*rhostar*Tstar*get_DeltaB2hBH(Tstar)+summer);
189 template<
typename MoleFracType>
190 double R(
const MoleFracType &)
const {
return 1.0; }
192 template<
typename TTYPE,
typename RHOTYPE,
typename MoleFracType>
193 auto alphar(
const TTYPE& Tstar,
const RHOTYPE& rhostar,
const MoleFracType& )
const {
194 return forceeval(get_a(Tstar, rhostar)/Tstar);
208 auto POW2(
const T& x)
const -> T{
213 auto POW3(
const T& x)
const -> T{
218 auto POW4(
const T& x)
const -> T{
219 return POW2(x)*POW2(x);
222 const double gamma = 3.0;
223 const std::vector<double> x {
233 2.798291772190376e03,
234 -4.8394220260857657e-2,
236 -3.698000291272493e01,
237 2.084012299434647e01,
238 8.305402124717285e01,
239 -9.574799715203068e02,
240 -1.477746229234994e02,
242 6.398607852471505e01,
243 1.603993673294834e01,
244 6.805916615864377e01,
245 -2.791293578795945e03,
247 -8.116836104958410e03,
248 1.488735559561229e01,
249 -1.059346754655084e04,
250 -1.131607632802822e02,
251 -8.867771540418822e03,
252 -3.986982844450543e01,
253 -4.689270299917261e03,
254 2.593535277438717e02,
255 -2.694523589434903e03,
256 -7.218487631550215e02,
261 template<
typename TTYPE>
262 auto get_ai(
const int i,
const TTYPE& Tstar)
const -> TTYPE{
265 return x[1]*Tstar + x[2]*sqrt(Tstar) + x[3] + x[4]/Tstar + x[5]/POW2(Tstar);
267 return x[6]*Tstar + x[7] + x[8]/Tstar + x[9]/POW2(Tstar);
269 return x[10]*Tstar + x[11] + x[12]/Tstar;
273 return x[14]/Tstar + x[15]/POW2(Tstar);
277 return x[17]/Tstar + x[18]/POW2(Tstar);
279 return x[19]/POW2(Tstar);
286 template<
typename TTYPE>
287 auto get_bi(
const int i,
const TTYPE& Tstar)
const -> TTYPE{
290 return x[20]/POW2(Tstar) + x[21]/POW3(Tstar);
292 return x[22]/POW2(Tstar) + x[23]/POW4(Tstar);
294 return x[24]/POW2(Tstar) + x[25]/POW3(Tstar);
296 return x[26]/POW2(Tstar) + x[27]/POW4(Tstar);
298 return x[28]/POW2(Tstar) + x[29]/POW3(Tstar);
300 return x[30]/POW2(Tstar) + x[31]/POW3(Tstar) + x[32]/POW4(Tstar);
307 template<
typename FTYPE,
typename RHOTYPE>
308 auto get_Gi(
const int i,
const FTYPE& F,
const RHOTYPE& rhostar)
const -> RHOTYPE{
314 return forceeval(-(F*
powi(rhostar, 2*(i-1)) - 2.0*(i-1)*get_Gi(i-1, F, rhostar))/(2.0*gamma));
318 template<
typename TTYPE,
typename RHOTYPE>
319 auto get_alphar(
const TTYPE& Tstar,
const RHOTYPE& rhostar)
const{
320 std::common_type_t<TTYPE, RHOTYPE> summer = 0.0;
321 auto F = exp(-gamma*POW2(rhostar));
322 for (
int i = 1; i <= 8; ++i){
323 summer += get_ai(i, Tstar)*
powi(rhostar, i)/
static_cast<double>(i);
325 for (
int i = 1; i <= 6; ++i){
326 summer += get_bi(i, Tstar)*get_Gi(i, F, rhostar);
334 template<
typename MoleFracType>
335 double R(
const MoleFracType &)
const {
return 1.0; }
337 template<
typename TTYPE,
typename RHOTYPE,
typename MoleFracType>
338 auto alphar(
const TTYPE& Tstar,
const RHOTYPE& rhostar,
const MoleFracType& )
const {
339 return forceeval(get_alphar(Tstar, rhostar)/Tstar);
auto build_multifluid_JSONstr(const std::vector< std::string > &componentJSON, const std::string &BIPJSON, const std::string &departureJSON, const nlohmann::json &flags={})
A builder function where the JSON-formatted strings are provided explicitly rather than file paths.