@@ -291,8 +291,7 @@ double MainSequence::CalculateLuminosityOnPhase(const double p_Time, const doubl
291291 // If BRCEK core prescription is used, return luminosity from Shikauchi et al. (2024) during core hydrogen burning (valid for MZAMS >= 15 Msol) or
292292 // luminosity that smoothly connects MS and HG during MS hook (valid for MZAMS >= BRCEK_LOWER_MASS_LIMIT)
293293 if ((OPTIONS->MainSequenceCoreMassPrescription () == CORE_MASS_PRESCRIPTION::BRCEK) && (utils::Compare (m_MZAMS, BRCEK_LOWER_MASS_LIMIT) >= 0 )) {
294- double tMS = timescales (tMS);
295- if (utils::Compare (p_Time, 0.99 * tMS) > 0 ) // star in MS hook?
294+ if (utils::Compare (p_Time, 0.99 * timescales (tMS)) > 0 ) // star in MS hook?
296295 return CalculateLuminosityTransitionToHG (p_Mass, p_Time, p_LZAMS);
297296 else {
298297 if (utils::Compare (m_MZAMS, 15.0 ) >= 0 ) // use Shikauchi luminosity if MZAMS >= 15 Msun
@@ -340,9 +339,16 @@ double MainSequence::CalculateLuminosityOnPhase(const double p_Time, const doubl
340339 */
341340double MainSequence::CalculateLuminosityShikauchi (const double p_CoreMass, const double p_HeliumAbundanceCore) const {
342341 DBL_VECTOR L_COEFFICIENTS = std::get<2 >(SHIKAUCHI_COEFFICIENTS);
343- double logMixingCoreMass = std::log10 (p_CoreMass);
344342
345- double logL = L_COEFFICIENTS[0 ] * logMixingCoreMass + L_COEFFICIENTS[1 ] * p_HeliumAbundanceCore + L_COEFFICIENTS[2 ] * logMixingCoreMass * p_HeliumAbundanceCore + L_COEFFICIENTS[3 ] * logMixingCoreMass * logMixingCoreMass + L_COEFFICIENTS[4 ] * p_HeliumAbundanceCore * p_HeliumAbundanceCore + L_COEFFICIENTS[5 ] * logMixingCoreMass * logMixingCoreMass * logMixingCoreMass + L_COEFFICIENTS[6 ] * p_HeliumAbundanceCore * p_HeliumAbundanceCore * p_HeliumAbundanceCore + L_COEFFICIENTS[7 ] * logMixingCoreMass * logMixingCoreMass * p_HeliumAbundanceCore + L_COEFFICIENTS[8 ] * logMixingCoreMass * p_HeliumAbundanceCore * p_HeliumAbundanceCore + L_COEFFICIENTS[9 ];
343+ // common factors
344+ double logMixingCoreMass = std::log10 (p_CoreMass);
345+ double logMixingCoreMass_2 = logMixingCoreMass * logMixingCoreMass;
346+ double logMixingCoreMass_3 = logMixingCoreMass_2 * logMixingCoreMass;
347+
348+ double heliumAbundanceCore_2 = p_HeliumAbundanceCore * p_HeliumAbundanceCore;
349+ double heliumAbundanceCore_3 = heliumAbundanceCore_2 * p_HeliumAbundanceCore;
350+
351+ double logL = L_COEFFICIENTS[0 ] * logMixingCoreMass + L_COEFFICIENTS[1 ] * p_HeliumAbundanceCore + L_COEFFICIENTS[2 ] * logMixingCoreMass * p_HeliumAbundanceCore + L_COEFFICIENTS[3 ] * logMixingCoreMass_2 + L_COEFFICIENTS[4 ] * heliumAbundanceCore_2 + L_COEFFICIENTS[5 ] * logMixingCoreMass_3 + L_COEFFICIENTS[6 ] * heliumAbundanceCore_3 + L_COEFFICIENTS[7 ] * logMixingCoreMass_2 * p_HeliumAbundanceCore + L_COEFFICIENTS[8 ] * logMixingCoreMass * heliumAbundanceCore_2 + L_COEFFICIENTS[9 ] * logMixingCoreMass_3 * logMixingCoreMass + L_COEFFICIENTS[10 ] * heliumAbundanceCore_3 * p_HeliumAbundanceCore + L_COEFFICIENTS[11 ] * logMixingCoreMass * heliumAbundanceCore_3 + L_COEFFICIENTS[12 ] * logMixingCoreMass_2 * heliumAbundanceCore_2 + L_COEFFICIENTS[13 ] * logMixingCoreMass_3 * p_HeliumAbundanceCore + L_COEFFICIENTS[14 ];
346352
347353 return PPOW (10.0 , logL);
348354}
@@ -764,11 +770,11 @@ DBL_DBL MainSequence::CalculateMainSequenceCoreMassBrcek(const double p_Dt, cons
764770
765771 auto fmix = [&](double mass) { return FMIX_COEFFICIENTS[0 ] + FMIX_COEFFICIENTS[1 ] * std::exp (-mass / FMIX_COEFFICIENTS[2 ]); }; // Shikauchi et al. (2024), eq (A3)
766772 double alpha = PPOW (10.0 , std::max (-2.0 , ALPHA_COEFFICIENTS[1 ] * m_MainSequenceCoreMass + ALPHA_COEFFICIENTS[2 ])) + ALPHA_COEFFICIENTS[0 ]; // ibid, eq (A2)
767- double g = - 0.0044 * m_MZAMS + 0.27 ; // ibid, eq (A7)
773+ double g = SHIKAUCHI_DELTA_COEFFICIENTS[ 1 ] * m_MainSequenceCoreMass + SHIKAUCHI_DELTA_COEFFICIENTS[ 2 ]; // ibid, eq (A7)
768774
769775 double delta;
770776 if (p_MassLossRate <= 0.0 )
771- delta = std::min (PPOW (10.0 , -(m_HeliumAbundanceCore - m_InitialHeliumAbundance) / (1.0 - m_InitialHeliumAbundance - m_Metallicity) + g), 1.0 ); // ibid, eq (A6)
777+ delta = std::min (PPOW (10.0 , -SHIKAUCHI_DELTA_COEFFICIENTS[ 0 ] * (m_HeliumAbundanceCore - m_InitialHeliumAbundance) / (1.0 - m_InitialHeliumAbundance - m_Metallicity) + g), 1.0 ); // ibid, eq (A6)
772778 else
773779 delta = PPOW (2.0 , -(m_HeliumAbundanceCore - m_InitialHeliumAbundance) / (1.0 - m_InitialHeliumAbundance - m_Metallicity)); // updated prescription for mass gain
774780
@@ -1324,7 +1330,7 @@ std::tuple <DBL_VECTOR, DBL_VECTOR, DBL_VECTOR> MainSequence::InterpolateShikauc
13241330
13251331 DBL_VECTOR alphaCoeff (3 , 0.0 );
13261332 DBL_VECTOR fmixCoeff (3 , 0.0 );
1327- DBL_VECTOR lCoeff (10 , 0.0 );
1333+ DBL_VECTOR lCoeff (15 , 0.0 );
13281334
13291335 // Skip calculation if BRCEK core prescription is not used
13301336 if (OPTIONS->MainSequenceCoreMassPrescription () != CORE_MASS_PRESCRIPTION::BRCEK)
@@ -1357,7 +1363,7 @@ std::tuple <DBL_VECTOR, DBL_VECTOR, DBL_VECTOR> MainSequence::InterpolateShikauc
13571363 alphaCoeff[i] = (SHIKAUCHI_ALPHA_COEFFICIENTS[0 ][i] * middle_logZ + SHIKAUCHI_ALPHA_COEFFICIENTS[1 ][i] * logZ_low) / middle_low;
13581364 fmixCoeff[i] = (SHIKAUCHI_FMIX_COEFFICIENTS[0 ][i] * middle_logZ + SHIKAUCHI_FMIX_COEFFICIENTS[1 ][i] * logZ_low) / middle_low;
13591365 }
1360- for (size_t i = 0 ; i < 10 ; i++)
1366+ for (size_t i = 0 ; i < 15 ; i++)
13611367 lCoeff[i] = (SHIKAUCHI_L_COEFFICIENTS[0 ][i] * middle_logZ + SHIKAUCHI_L_COEFFICIENTS[1 ][i] * logZ_low) / middle_low;
13621368 }
13631369 // Linear interpolation between metallicity middle and high
@@ -1366,7 +1372,7 @@ std::tuple <DBL_VECTOR, DBL_VECTOR, DBL_VECTOR> MainSequence::InterpolateShikauc
13661372 alphaCoeff[i] = (SHIKAUCHI_ALPHA_COEFFICIENTS[1 ][i] * high_logZ + SHIKAUCHI_ALPHA_COEFFICIENTS[2 ][i] * logZ_middle) / high_middle;
13671373 fmixCoeff[i] = (SHIKAUCHI_FMIX_COEFFICIENTS[1 ][i] * high_logZ + SHIKAUCHI_FMIX_COEFFICIENTS[2 ][i] * logZ_middle) / high_middle;
13681374 }
1369- for (size_t i = 0 ; i < 10 ; i++)
1375+ for (size_t i = 0 ; i < 15 ; i++)
13701376 lCoeff[i] = (SHIKAUCHI_L_COEFFICIENTS[1 ][i] * high_logZ + SHIKAUCHI_L_COEFFICIENTS[2 ][i] * logZ_middle) / high_middle;
13711377 }
13721378 // Linear extrapolation (constant) for metallicity equal to solar or higher
0 commit comments