From cb740aa433d21e7464a598bb7c458117498d4cef Mon Sep 17 00:00:00 2001 From: Reinhold Willcox Date: Mon, 18 Nov 2024 18:36:18 +0100 Subject: [PATCH 1/5] added He star stability tables from Ge et al., and cleaned up H-rich star stability code --- src/BaseStar.cpp | 152 +--------------------------------------- src/BaseStar.h | 7 +- src/HeMS.cpp | 105 ++++++++++++++++++++++++++++ src/HeMS.h | 4 ++ src/MainSequence.cpp | 163 +++++++++++++++++++++++++++++++++++++++++++ src/MainSequence.h | 3 + src/Options.cpp | 2 +- src/Star.h | 4 +- src/constants.h | 82 +++++++++++++++++++--- src/typedefs.h | 6 +- 10 files changed, 360 insertions(+), 168 deletions(-) diff --git a/src/BaseStar.cpp b/src/BaseStar.cpp index 9b4586a7c..2a0124713 100755 --- a/src/BaseStar.cpp +++ b/src/BaseStar.cpp @@ -1402,9 +1402,9 @@ double BaseStar::CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, c qCrit = 0.0; break; - case QCRIT_PRESCRIPTION::GE20: - case QCRIT_PRESCRIPTION::GE20_IC: - qCrit = CalculateCriticalMassRatioGe20(OPTIONS->QCritPrescription(), p_massTransferEfficiencyBeta); + case QCRIT_PRESCRIPTION::GE: + case QCRIT_PRESCRIPTION::GE_IC: + qCrit = CalculateCriticalMassRatioGeEtAl(OPTIONS->QCritPrescription(), p_massTransferEfficiencyBeta); break; case QCRIT_PRESCRIPTION::CLAEYS: @@ -1430,152 +1430,6 @@ double BaseStar::CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, c } -/* - * Interpolate Ge+20 Critical Mass Ratios - * - * Function takes input QCRIT_PRESCRIPTION, currently either of the prescriptions for critical mass ratios - * from Ge et al. (2020), GE20 or GE20_IC. The first is the full adiabatic response, the second assumes - * artificially isentropic envelopes. From private communication with Ge, we have an updated datatable that - * includes qCrit for fully conservative and fully non-conservative MT, so we now interpolate on those as well. - * - * Interpolation is done linearly in logM, logR, and logZ - * - * double BaseStar::InterpolateGe20QCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) - * - * @param [IN] p_qCritPrescription Adopted critical mass ratio prescription - * @param [IN] p_massTransferEfficiencyBeta Mass transfer accretion efficiency - * @return Interpolated value of either the critical mass ratio or zeta for given stellar mass / radius - */ -double BaseStar::InterpolateGe20QCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) { - - // Iterate over the two QCRIT_GE tables to get the qcrits at each metallicity - double qcritPerMetallicity[2]; - std::vector qCritTables = { QCRIT_GE_LOW_Z, QCRIT_GE_HIGH_Z }; - - for (int ii=0; ii<2; ii++) { // iterate over the vector of tables to store qCrits per metallicity - - // Get vector of masses from qCritTable - GE_QCRIT_TABLE &qCritTable = qCritTables[ii]; - DBL_VECTOR massesFromQCritTable = std::get<0>(qCritTable); - GE_QCRIT_RADII_QCRIT_VECTOR radiiQCritsFromQCritTable = std::get<1>(qCritTable); - - INT_VECTOR indices = utils::BinarySearch(massesFromQCritTable, m_Mass); - int lowerMassIndex = indices[0]; - int upperMassIndex = indices[1]; - - if (lowerMassIndex == -1) { // if masses are out of range, set to endpoints - lowerMassIndex = 0; - upperMassIndex = 1; - } - else if (upperMassIndex == -1) { - lowerMassIndex = massesFromQCritTable.size() - 2; - upperMassIndex = massesFromQCritTable.size() - 1; - } - - // Get vector of radii from qCritTable for the lower and upper mass indices - std::vector logRadiusVectorLowerMass = std::get<0>(radiiQCritsFromQCritTable[lowerMassIndex]); - std::vector logRadiusVectorUpperMass = std::get<0>(radiiQCritsFromQCritTable[upperMassIndex]); - - // Get the qCrit vector for the lower and upper mass bounds - std::vector qCritVectorUpperEffLowerMass; - std::vector qCritVectorUpperEffUpperMass; - std::vector qCritVectorLowerEffLowerMass; - std::vector qCritVectorLowerEffUpperMass; - - // Set the appropriate qCrit vector, depends on MT eff and whether you use GE20 STD or IC - if (p_qCritPrescription == QCRIT_PRESCRIPTION::GE20) { - if (p_massTransferEfficiencyBeta > 0.5) { - qCritVectorUpperEffLowerMass = std::get<1>(radiiQCritsFromQCritTable[lowerMassIndex]); - qCritVectorUpperEffUpperMass = std::get<1>(radiiQCritsFromQCritTable[upperMassIndex]); - qCritVectorLowerEffLowerMass = std::get<2>(radiiQCritsFromQCritTable[lowerMassIndex]); - qCritVectorLowerEffUpperMass = std::get<2>(radiiQCritsFromQCritTable[upperMassIndex]); - } - else { - qCritVectorUpperEffLowerMass = std::get<2>(radiiQCritsFromQCritTable[lowerMassIndex]); - qCritVectorUpperEffUpperMass = std::get<2>(radiiQCritsFromQCritTable[upperMassIndex]); - qCritVectorLowerEffLowerMass = std::get<3>(radiiQCritsFromQCritTable[lowerMassIndex]); - qCritVectorLowerEffUpperMass = std::get<3>(radiiQCritsFromQCritTable[upperMassIndex]); - - } - } - else if (p_qCritPrescription == QCRIT_PRESCRIPTION::GE20_IC) { - if (p_massTransferEfficiencyBeta > 0.5) { - qCritVectorUpperEffLowerMass = std::get<4>(radiiQCritsFromQCritTable[lowerMassIndex]); - qCritVectorUpperEffUpperMass = std::get<4>(radiiQCritsFromQCritTable[upperMassIndex]); - qCritVectorLowerEffLowerMass = std::get<5>(radiiQCritsFromQCritTable[lowerMassIndex]); - qCritVectorLowerEffUpperMass = std::get<5>(radiiQCritsFromQCritTable[upperMassIndex]); - } - else { - qCritVectorUpperEffLowerMass = std::get<5>(radiiQCritsFromQCritTable[lowerMassIndex]); - qCritVectorUpperEffUpperMass = std::get<5>(radiiQCritsFromQCritTable[upperMassIndex]); - qCritVectorLowerEffLowerMass = std::get<6>(radiiQCritsFromQCritTable[lowerMassIndex]); - qCritVectorLowerEffUpperMass = std::get<6>(radiiQCritsFromQCritTable[upperMassIndex]); - - } - } - - // Get vector of radii from qCritTable for both lower and upper masses - INT_VECTOR indicesR0 = utils::BinarySearch(logRadiusVectorLowerMass, log10(m_Radius)); - int lowerRadiusLowerMassIndex = indicesR0[0]; - int upperRadiusLowerMassIndex = indicesR0[1]; - - if (lowerRadiusLowerMassIndex == -1) { // if radii are out of range, set to endpoints - lowerRadiusLowerMassIndex = 0; - upperRadiusLowerMassIndex = 1; - } - else if (upperRadiusLowerMassIndex == -1) { - lowerRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 2; - upperRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 1; - } - - INT_VECTOR indicesR1 = utils::BinarySearch(logRadiusVectorUpperMass, log10(m_Radius)); - int lowerRadiusUpperMassIndex = indicesR1[0]; - int upperRadiusUpperMassIndex = indicesR1[1]; - - if (lowerRadiusUpperMassIndex == -1) { // if radii are out of range, set to endpoints - lowerRadiusUpperMassIndex = 0; - upperRadiusUpperMassIndex = 1; - } - else if (upperRadiusUpperMassIndex == -1) { - lowerRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 2; - upperRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 1; - } - - // Set the 4 boundary points for the 2D interpolation - double qUppLowLow = qCritVectorUpperEffLowerMass[lowerRadiusLowerMassIndex]; - double qUppLowUpp = qCritVectorUpperEffLowerMass[upperRadiusLowerMassIndex]; - double qUppUppLow = qCritVectorUpperEffUpperMass[lowerRadiusUpperMassIndex]; - double qUppUppUpp = qCritVectorUpperEffUpperMass[upperRadiusUpperMassIndex]; - double qLowLowLow = qCritVectorLowerEffLowerMass[lowerRadiusLowerMassIndex]; - double qLowLowUpp = qCritVectorLowerEffLowerMass[upperRadiusLowerMassIndex]; - double qLowUppLow = qCritVectorLowerEffUpperMass[lowerRadiusUpperMassIndex]; - double qLowUppUpp = qCritVectorLowerEffUpperMass[upperRadiusUpperMassIndex]; - - double logLowerMass = log10(massesFromQCritTable[lowerMassIndex]); - double logUpperMass = log10(massesFromQCritTable[upperMassIndex]); - - double lowerLogRadiusLowerMass = logRadiusVectorLowerMass[lowerRadiusLowerMassIndex]; - double upperLogRadiusLowerMass = logRadiusVectorLowerMass[upperRadiusLowerMassIndex]; - double lowerLogRadiusUpperMass = logRadiusVectorUpperMass[lowerRadiusUpperMassIndex]; - double upperLogRadiusUpperMass = logRadiusVectorUpperMass[upperRadiusUpperMassIndex]; - - // Interpolate on logR first, then logM, then on the mass transfer efficiency beta - double qCritUpperEffLowerMass = qUppLowLow + (upperLogRadiusLowerMass - log10(m_Radius)) / (upperLogRadiusLowerMass - lowerLogRadiusLowerMass) * (qUppLowUpp - qUppLowLow); - double qCritUpperEffUpperMass = qUppUppLow + (upperLogRadiusUpperMass - log10(m_Radius)) / (upperLogRadiusUpperMass - lowerLogRadiusUpperMass) * (qUppUppUpp - qUppUppLow); - double qCritLowerEffLowerMass = qLowLowLow + (upperLogRadiusLowerMass - log10(m_Radius)) / (upperLogRadiusLowerMass - lowerLogRadiusLowerMass) * (qLowLowUpp - qLowLowLow); - double qCritLowerEffUpperMass = qLowUppLow + (upperLogRadiusUpperMass - log10(m_Radius)) / (upperLogRadiusUpperMass - lowerLogRadiusUpperMass) * (qLowUppUpp - qLowUppLow); - - double interpolatedQCritUpperEff = qCritUpperEffLowerMass + (logUpperMass - log10(m_Mass)) / (logUpperMass - logLowerMass) * (qCritUpperEffUpperMass - qCritUpperEffLowerMass); - double interpolatedQCritLowerEff = qCritLowerEffLowerMass + (logUpperMass - log10(m_Mass)) / (logUpperMass - logLowerMass) * (qCritLowerEffUpperMass - qCritLowerEffLowerMass); - - double interpolatedQCritForZ = p_massTransferEfficiencyBeta * interpolatedQCritUpperEff + (1.0 - p_massTransferEfficiencyBeta) * interpolatedQCritLowerEff; - qcritPerMetallicity[ii] = interpolatedQCritForZ; - } - double logZlo = -3; // log10(0.001) - double logZhi = LOG10_ZSOL; // log10(0.02) - - return qcritPerMetallicity[1] + (m_Log10Metallicity - logZhi)*(qcritPerMetallicity[1] - qcritPerMetallicity[0])/(logZhi - logZlo); -} /* diff --git a/src/BaseStar.h b/src/BaseStar.h index 94bd17095..4eb85fe98 100644 --- a/src/BaseStar.h +++ b/src/BaseStar.h @@ -227,8 +227,8 @@ class BaseStar { virtual double CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, const double p_massTransferEfficiencyBeta); virtual double CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { return 0.0; } // Default is 0.0 - double CalculateCriticalMassRatioGe20(const QCRIT_PRESCRIPTION p_qCritPrescription, - const double p_massTransferEfficiencyBeta) { return InterpolateGe20QCrit(p_qCritPrescription, p_massTransferEfficiencyBeta); } + virtual double CalculateCriticalMassRatioGeEtAl(const QCRIT_PRESCRIPTION p_qCritPrescription, + const double p_massTransferEfficiencyBeta) { return InterpolateGeEtAlQCrit(p_qCritPrescription, p_massTransferEfficiencyBeta); } virtual double CalculateCriticalMassRatioHurleyHjellmingWebbink() const { return 0.0; } // Default is 0.0 double CalculateDynamicalTimescale() const { return CalculateDynamicalTimescale_Static(m_Mass, m_Radius); } // Use class member variables @@ -312,7 +312,8 @@ class BaseStar { void HaltWinds() { m_Mdot = 0.0; } // Disable wind mass loss in current time step (e.g., if star is a donor or accretor in a RLOF episode) - double InterpolateGe20QCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta); + virtual double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, + const double p_massTransferEfficiencyBeta) { return 0.0; } // Placeholder, use interpolator for either H-rich or H-poor stars void ResetEnvelopeExpulsationByPulsations() { m_EnvelopeJustExpelledByPulsations = false; } diff --git a/src/HeMS.cpp b/src/HeMS.cpp index 8f6be0b60..c659d8656 100755 --- a/src/HeMS.cpp +++ b/src/HeMS.cpp @@ -620,3 +620,108 @@ STELLAR_TYPE HeMS::EvolveToNextPhase() { #undef timescales } + + + +/* + * Interpolate Ge+ Critical Mass Ratios, for H-poor stars + * + * Function to interpolate in mass and radius to calculate the stellar response of a He star to mass loss. + * Functionally works the same as the interpolator for H-rich stars, except that there is only one variation + * for the He-poor stars. + * + * Function takes no input (unlike in the H-rich case) because the existing table only applies for fully conservative + * mass transfer and the GE fully adiabatic response, not the artificially isentropic one. Also only for Z=Zsol. + * + * Interpolation is done linearly in logM and logR. + * + * double BaseStar::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) + * + * @param [IN] p_qCritPrescription Adopted critical mass ratio prescription + * @param [IN] p_massTransferEfficiencyBeta Mass transfer accretion efficiency + * @return Interpolated value of either the critical mass ratio or zeta for given stellar mass / radius + */ +double HeMS::InterpolateGeEtAlQCrit() { + + // Get vector of masses from qCritTable + GE_QCRIT_TABLE_HE qCritTable = QCRIT_GE_HE_STAR; + DBL_VECTOR massesFromQCritTable = std::get<0>(qCritTable); + GE_QCRIT_RADII_QCRIT_VECTOR_HE radiiQCritsFromQCritTable = std::get<1>(qCritTable); + + INT_VECTOR indices = utils::BinarySearch(massesFromQCritTable, m_Mass); + int lowerMassIndex = indices[0]; + int upperMassIndex = indices[1]; + + if (lowerMassIndex == -1) { // if masses are out of range, set to endpoints + lowerMassIndex = 0; + upperMassIndex = 1; + } + else if (upperMassIndex == -1) { + lowerMassIndex = massesFromQCritTable.size() - 2; + upperMassIndex = massesFromQCritTable.size() - 1; + } + + // Get vector of radii from qCritTable for the lower and upper mass indices + std::vector logRadiusVectorLowerMass = std::get<0>(radiiQCritsFromQCritTable[lowerMassIndex]); + std::vector logRadiusVectorUpperMass = std::get<0>(radiiQCritsFromQCritTable[upperMassIndex]); + + // Get the qCrit vector for the lower and upper mass bounds + std::vector qCritVectorLowerMass = std::get<1>(radiiQCritsFromQCritTable[lowerMassIndex]); + std::vector qCritVectorUpperMass = std::get<1>(radiiQCritsFromQCritTable[upperMassIndex]); + + + // Get vector of radii from qCritTable for both lower and upper masses + INT_VECTOR indicesR0 = utils::BinarySearch(logRadiusVectorLowerMass, log10(m_Radius)); + int lowerRadiusLowerMassIndex = indicesR0[0]; + int upperRadiusLowerMassIndex = indicesR0[1]; + + if (lowerRadiusLowerMassIndex == -1) { // if radii are out of range, set to endpoints + lowerRadiusLowerMassIndex = 0; + upperRadiusLowerMassIndex = 1; + } + else if (upperRadiusLowerMassIndex == -1) { + lowerRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 2; + upperRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 1; + } + + INT_VECTOR indicesR1 = utils::BinarySearch(logRadiusVectorUpperMass, log10(m_Radius)); + int lowerRadiusUpperMassIndex = indicesR1[0]; + int upperRadiusUpperMassIndex = indicesR1[1]; + + if (lowerRadiusUpperMassIndex == -1) { // if radii are out of range, set to endpoints + lowerRadiusUpperMassIndex = 0; + upperRadiusUpperMassIndex = 1; + } + else if (upperRadiusUpperMassIndex == -1) { + lowerRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 2; + upperRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 1; + } + + // Set the 4 boundary points for the 2D interpolation + double qLowLow = qCritVectorLowerMass[lowerRadiusLowerMassIndex]; + double qLowUpp = qCritVectorLowerMass[upperRadiusLowerMassIndex]; + double qUppLow = qCritVectorUpperMass[lowerRadiusUpperMassIndex]; + double qUppUpp = qCritVectorUpperMass[upperRadiusUpperMassIndex]; + + double lowerLogRadiusLowerMass = logRadiusVectorLowerMass[lowerRadiusLowerMassIndex]; + double upperLogRadiusLowerMass = logRadiusVectorLowerMass[upperRadiusLowerMassIndex]; + double lowerLogRadiusUpperMass = logRadiusVectorUpperMass[lowerRadiusUpperMassIndex]; + double upperLogRadiusUpperMass = logRadiusVectorUpperMass[upperRadiusUpperMassIndex]; + + double logLowerMass = log10(massesFromQCritTable[lowerMassIndex]); + double logUpperMass = log10(massesFromQCritTable[upperMassIndex]); + + // Interpolate on logR first, then logM, using nearest neighbor for extrapolation + double logRadius = log10(m_Radius); + double qCritLowerMass = (logRadius < lowerLogRadiusLowerMass) ? qLowLow + : (logRadius > upperLogRadiusLowerMass) ? qLowUpp + : qLowLow + (upperLogRadiusLowerMass - logRadius) / (upperLogRadiusLowerMass - lowerLogRadiusLowerMass) * (qLowUpp - qLowLow); + double qCritUpperMass = (logRadius < lowerLogRadiusUpperMass) ? qUppLow + : (logRadius > upperLogRadiusUpperMass) ? qUppUpp + : qUppLow + (upperLogRadiusUpperMass - logRadius) / (upperLogRadiusUpperMass - lowerLogRadiusUpperMass) * (qUppUpp - qUppLow); + + double logMass = log10(m_Mass); + return (logMass < logLowerMass) ? qCritLowerMass + : (logMass > logUpperMass) ? qCritUpperMass + : qCritLowerMass + (logUpperMass - logMass) / (logUpperMass - logLowerMass) * (qCritUpperMass - qCritLowerMass); +} diff --git a/src/HeMS.h b/src/HeMS.h index 30b2e0c2f..00770d6fa 100644 --- a/src/HeMS.h +++ b/src/HeMS.h @@ -149,6 +149,10 @@ class HeMS: virtual public BaseStar, public TPAGB { ENVELOPE DetermineEnvelopeType() const { return ENVELOPE::RADIATIVE; } // Always RADIATIVE + double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, + const double p_massTransferEfficiencyBeta) { return InterpolateGeEtAlQCrit(); } // The function arguments are irrelavant for He stars, for now + double InterpolateGeEtAlQCrit(); + bool IsEndOfPhase() const { return !ShouldEvolveOnPhase(); } bool IsSupernova() const { return false; } // Not here diff --git a/src/MainSequence.cpp b/src/MainSequence.cpp index daecdaeff..85effc070 100644 --- a/src/MainSequence.cpp +++ b/src/MainSequence.cpp @@ -898,3 +898,166 @@ void MainSequence::UpdateAfterMerger(double p_Mass, double p_HydrogenMass) { #undef timescales } + + + +/* + * Interpolate Ge+ Critical Mass Ratios, for H-rich stars + * + * Function takes input QCRIT_PRESCRIPTION, currently either of the prescriptions for critical mass ratios + * from Ge et al. (2020), GE or GE_IC. The first is the full adiabatic response, the second assumes + * artificially isentropic envelopes. From private communication with Ge, we have an updated datatable that + * includes qCrit for fully conservative and fully non-conservative MT, so we now interpolate on those as well. + * + * Interpolation is done linearly in logM, logR, and logZ + * + * double BaseStar::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) + * + * @param [IN] p_qCritPrescription Adopted critical mass ratio prescription + * @param [IN] p_massTransferEfficiencyBeta Mass transfer accretion efficiency + * @return Interpolated value of either the critical mass ratio or zeta for given stellar mass / radius + */ +double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) { + + // Iterate over the two QCRIT_GE tables to get the qcrits at each metallicity + double qCritPerMetallicity[2]; + std::vector qCritTables = { QCRIT_GE_LOW_Z, QCRIT_GE_HIGH_Z }; + + for (int ii=0; ii<2; ii++) { // iterate over the vector of tables to store qCrits per metallicity + + // Get vector of masses from qCritTable + GE_QCRIT_TABLE &qCritTable = qCritTables[ii]; + DBL_VECTOR massesFromQCritTable = std::get<0>(qCritTable); + GE_QCRIT_RADII_QCRIT_VECTOR radiiQCritsFromQCritTable = std::get<1>(qCritTable); + + INT_VECTOR indices = utils::BinarySearch(massesFromQCritTable, m_Mass); + int lowerMassIndex = indices[0]; + int upperMassIndex = indices[1]; + + if (lowerMassIndex == -1) { // if masses are out of range, set to endpoints + lowerMassIndex = 0; + upperMassIndex = 1; + } + else if (upperMassIndex == -1) { + lowerMassIndex = massesFromQCritTable.size() - 2; + upperMassIndex = massesFromQCritTable.size() - 1; + } + + // Get vector of radii from qCritTable for the lower and upper mass indices + std::vector logRadiusVectorLowerMass = std::get<0>(radiiQCritsFromQCritTable[lowerMassIndex]); + std::vector logRadiusVectorUpperMass = std::get<0>(radiiQCritsFromQCritTable[upperMassIndex]); + + // Get the qCrit vector for the lower and upper mass bounds + std::vector qCritVectorUpperEffLowerMass; + std::vector qCritVectorUpperEffUpperMass; + std::vector qCritVectorLowerEffLowerMass; + std::vector qCritVectorLowerEffUpperMass; + + // Set the appropriate qCrit vector, depends on MT eff and whether you use GE STD or IC + if (p_qCritPrescription == QCRIT_PRESCRIPTION::GE) { + if (p_massTransferEfficiencyBeta > 0.5) { + qCritVectorUpperEffLowerMass = std::get<1>(radiiQCritsFromQCritTable[lowerMassIndex]); + qCritVectorUpperEffUpperMass = std::get<1>(radiiQCritsFromQCritTable[upperMassIndex]); + qCritVectorLowerEffLowerMass = std::get<2>(radiiQCritsFromQCritTable[lowerMassIndex]); + qCritVectorLowerEffUpperMass = std::get<2>(radiiQCritsFromQCritTable[upperMassIndex]); + } + else { + qCritVectorUpperEffLowerMass = std::get<2>(radiiQCritsFromQCritTable[lowerMassIndex]); + qCritVectorUpperEffUpperMass = std::get<2>(radiiQCritsFromQCritTable[upperMassIndex]); + qCritVectorLowerEffLowerMass = std::get<3>(radiiQCritsFromQCritTable[lowerMassIndex]); + qCritVectorLowerEffUpperMass = std::get<3>(radiiQCritsFromQCritTable[upperMassIndex]); + + } + } + else if (p_qCritPrescription == QCRIT_PRESCRIPTION::GE_IC) { + if (p_massTransferEfficiencyBeta > 0.5) { + qCritVectorUpperEffLowerMass = std::get<4>(radiiQCritsFromQCritTable[lowerMassIndex]); + qCritVectorUpperEffUpperMass = std::get<4>(radiiQCritsFromQCritTable[upperMassIndex]); + qCritVectorLowerEffLowerMass = std::get<5>(radiiQCritsFromQCritTable[lowerMassIndex]); + qCritVectorLowerEffUpperMass = std::get<5>(radiiQCritsFromQCritTable[upperMassIndex]); + } + else { + qCritVectorUpperEffLowerMass = std::get<5>(radiiQCritsFromQCritTable[lowerMassIndex]); + qCritVectorUpperEffUpperMass = std::get<5>(radiiQCritsFromQCritTable[upperMassIndex]); + qCritVectorLowerEffLowerMass = std::get<6>(radiiQCritsFromQCritTable[lowerMassIndex]); + qCritVectorLowerEffUpperMass = std::get<6>(radiiQCritsFromQCritTable[upperMassIndex]); + + } + } + + // Get vector of radii from qCritTable for both lower and upper masses + INT_VECTOR indicesR0 = utils::BinarySearch(logRadiusVectorLowerMass, log10(m_Radius)); + int lowerRadiusLowerMassIndex = indicesR0[0]; + int upperRadiusLowerMassIndex = indicesR0[1]; + + if (lowerRadiusLowerMassIndex == -1) { // if radii are out of range, set to endpoints + lowerRadiusLowerMassIndex = 0; + upperRadiusLowerMassIndex = 1; + } + else if (upperRadiusLowerMassIndex == -1) { + lowerRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 2; + upperRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 1; + } + + INT_VECTOR indicesR1 = utils::BinarySearch(logRadiusVectorUpperMass, log10(m_Radius)); + int lowerRadiusUpperMassIndex = indicesR1[0]; + int upperRadiusUpperMassIndex = indicesR1[1]; + + if (lowerRadiusUpperMassIndex == -1) { // if radii are out of range, set to endpoints + lowerRadiusUpperMassIndex = 0; + upperRadiusUpperMassIndex = 1; + } + else if (upperRadiusUpperMassIndex == -1) { + lowerRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 2; + upperRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 1; + } + + // Set the 4 boundary points for the 2D interpolation + double qUppLowLow = qCritVectorUpperEffLowerMass[lowerRadiusLowerMassIndex]; + double qUppLowUpp = qCritVectorUpperEffLowerMass[upperRadiusLowerMassIndex]; + double qUppUppLow = qCritVectorUpperEffUpperMass[lowerRadiusUpperMassIndex]; + double qUppUppUpp = qCritVectorUpperEffUpperMass[upperRadiusUpperMassIndex]; + double qLowLowLow = qCritVectorLowerEffLowerMass[lowerRadiusLowerMassIndex]; + double qLowLowUpp = qCritVectorLowerEffLowerMass[upperRadiusLowerMassIndex]; + double qLowUppLow = qCritVectorLowerEffUpperMass[lowerRadiusUpperMassIndex]; + double qLowUppUpp = qCritVectorLowerEffUpperMass[upperRadiusUpperMassIndex]; + + double lowerLogRadiusLowerMass = logRadiusVectorLowerMass[lowerRadiusLowerMassIndex]; + double upperLogRadiusLowerMass = logRadiusVectorLowerMass[upperRadiusLowerMassIndex]; + double lowerLogRadiusUpperMass = logRadiusVectorUpperMass[lowerRadiusUpperMassIndex]; + double upperLogRadiusUpperMass = logRadiusVectorUpperMass[upperRadiusUpperMassIndex]; + + double logLowerMass = log10(massesFromQCritTable[lowerMassIndex]); + double logUpperMass = log10(massesFromQCritTable[upperMassIndex]); + + // Interpolate on logR first, then logM, then on the efficiency, using nearest neighbor for extrapolation + double logRadius = log10(m_Radius); + double qCritUpperEffLowerMass = (logRadius < lowerLogRadiusLowerMass) ? qUppLowLow + : (logRadius > upperLogRadiusLowerMass) ? qUppLowUpp + : qUppLowLow + (upperLogRadiusLowerMass - logRadius) / (upperLogRadiusLowerMass - lowerLogRadiusLowerMass) * (qUppLowUpp - qUppLowLow); + double qCritUpperEffUpperMass = (logRadius < lowerLogRadiusUpperMass) ? qUppUppLow + : (logRadius > upperLogRadiusUpperMass) ? qUppUppUpp + : qUppUppLow + (upperLogRadiusUpperMass - logRadius) / (upperLogRadiusUpperMass - lowerLogRadiusUpperMass) * (qUppUppUpp - qUppUppLow); + double qCritLowerEffLowerMass = (logRadius < lowerLogRadiusLowerMass) ? qLowLowLow + : (logRadius > upperLogRadiusLowerMass) ? qLowLowUpp + : qLowLowLow + (upperLogRadiusLowerMass - logRadius) / (upperLogRadiusLowerMass - lowerLogRadiusLowerMass) * (qLowLowUpp - qLowLowLow); + double qCritLowerEffUpperMass = (logRadius < lowerLogRadiusUpperMass) ? qLowUppLow + : (logRadius > upperLogRadiusUpperMass) ? qLowUppUpp + : qLowUppLow + (upperLogRadiusUpperMass - logRadius) / (upperLogRadiusUpperMass - lowerLogRadiusUpperMass) * (qLowUppUpp - qLowUppLow); + + double logMass = log10(m_Mass); + double interpolatedQCritUpperEff = (logMass < logLowerMass) ? qCritUpperEffLowerMass + : (logMass > logUpperMass) ? qCritUpperEffUpperMass + : qCritUpperEffLowerMass + (logUpperMass - logMass) / (logUpperMass - logLowerMass) * (qCritUpperEffUpperMass - qCritUpperEffLowerMass); + double interpolatedQCritLowerEff = (logMass < logLowerMass) ? qCritLowerEffLowerMass + : (logMass > logUpperMass) ? qCritLowerEffUpperMass + : qCritLowerEffLowerMass + (logUpperMass - logMass) / (logUpperMass - logLowerMass) * (qCritLowerEffUpperMass - qCritLowerEffLowerMass); + + double interpolatedQCritForZ = p_massTransferEfficiencyBeta * interpolatedQCritUpperEff + (1.0 - p_massTransferEfficiencyBeta) * interpolatedQCritLowerEff; // Don't need to use nearest neighbor for this, beta is always between 0 and 1 + qCritPerMetallicity[ii] = interpolatedQCritForZ; + } + double logZlo = -3; // log10(0.001) + double logZhi = LOG10_ZSOL; // log10(0.02) + + return qCritPerMetallicity[1] + (m_Log10Metallicity - logZhi)*(qCritPerMetallicity[1] - qCritPerMetallicity[0])/(logZhi - logZlo); +} diff --git a/src/MainSequence.h b/src/MainSequence.h index d2309d0e9..a83b4cbe7 100644 --- a/src/MainSequence.h +++ b/src/MainSequence.h @@ -97,6 +97,9 @@ class MainSequence: virtual public BaseStar { void EvolveOneTimestepPreamble(); STELLAR_TYPE EvolveToNextPhase() { return STELLAR_TYPE::HERTZSPRUNG_GAP; } + double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, + const double p_massTransferEfficiencyBeta); // RTW do I need a const here? + bool IsEndOfPhase() const { return !ShouldEvolveOnPhase(); } // Phase ends when age at or after MS timescale void PerturbLuminosityAndRadius() { } // NO-OP diff --git a/src/Options.cpp b/src/Options.cpp index f7ec8a177..2b81103d6 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -1679,7 +1679,7 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ( "critical-mass-ratio-prescription", po::value(&p_Options->m_QCritPrescription.typeString)->default_value(p_Options->m_QCritPrescription.typeString), - ("Prescription for which critical mass ratio threshold to use, if any (Ge models are only defined for conservative mass transfer) (" + AllowedOptionValuesFormatted("critical-mass-ratio-prescription") + ", default = '" + p_Options->m_QCritPrescription.typeString + "')").c_str() + ("Prescription for which critical mass ratio threshold to use, if any (" + AllowedOptionValuesFormatted("critical-mass-ratio-prescription") + ", default = '" + p_Options->m_QCritPrescription.typeString + "')").c_str() ) ( diff --git a/src/Star.h b/src/Star.h index 3c3932c50..0dc70aa24 100755 --- a/src/Star.h +++ b/src/Star.h @@ -227,8 +227,8 @@ class Star { double EvolveOneTimestep(const double p_Dt, const bool p_Force = false); - double InterpolateGe20QCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, - const double p_massTransferEfficiencyBeta) { return m_Star->InterpolateGe20QCrit(p_qCritPrescription, p_massTransferEfficiencyBeta); } + double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, + const double p_massTransferEfficiencyBeta) { return m_Star->InterpolateGeEtAlQCrit(p_qCritPrescription, p_massTransferEfficiencyBeta); } void HaltWinds() { m_Star->HaltWinds(); } void ResolveAccretion(const double p_AccretionMass) { m_Star->ResolveAccretion(p_AccretionMass); } diff --git a/src/constants.h b/src/constants.h index 5706bf313..e09a7ad7f 100755 --- a/src/constants.h +++ b/src/constants.h @@ -76,6 +76,8 @@ typedef std::tuple STR_STR_ typedef std::tuple STR_STR_STR_STR; typedef std::vector> GE_QCRIT_RADII_QCRIT_VECTOR; typedef std::tuple GE_QCRIT_TABLE; +typedef std::vector> GE_QCRIT_RADII_QCRIT_VECTOR_HE; +typedef std::tuple GE_QCRIT_TABLE_HE; #include "typedefs.h" @@ -617,10 +619,11 @@ const std::map> A_COEFF = { {81, {{ALPHA, 2.493000E0 }, {BETA, 1.147500E0 }, {GAMMA, 0.000000E0 }, {ETA, 0.000000E0 }, {MU, 0.000000E0 }}} }; -// Critial mass ratios for a grid of masses and radii. This is a subset of Tables A3 and A4 from Ge et al. 2024 (arXiv:2408.16350), -// provided by private request to Hongwei Ge. This is the most up to date version of these tables at the time of writing -// (replacing Ge et al. 2020, and Li et al. 2023). Table A3 corresponds to low metallicity Z=0.001, Table A4 is for Z=0.02. -// Both of these tables are represented below as two separate nested vectors, and we interpolate linearly in logM, logR, and logZ. +// Critial mass ratios for a grid of masses and radii. These come from the team of Hongwei Ge, in a series of papers +// titled "Adiabatic Mass Loss". The first two tables below are a subset of Tables A3 and A4 from Ge et al. 2024 +// (Paper V, arXiv:2408.16350), provided by private request to Hongwei Ge. This is the most up to date version of these +// tables at the time of writing. Table A3 corresponds to low metallicity Z=0.001, Table A4 is for Z=0.02. Both of +// these tables are represented below as two separate nested vectors, and we interpolate linearly in logM, logR, and logZ. // // Both tables contain the Mass/Msol, log(R/Rsol), and critical mass ratios for mass transfer instability for a variety of model // variations, namely qCritST_full, qCritST_half, qCritST_nonc, qCritIC_full, qCritIC_half, qCritIC_nonc. @@ -628,9 +631,15 @@ const std::map> A_COEFF = { // The _full, _half, and _nonc suffixes distinguish fully conservative MT, half conservative MT, and fully non-conservative MT, // respectively, where non-conservative models assume isotropic re-emission AM loss. // -// In all cases, q is mAccretor/mDonor, which is inverted from the Ge et al. datatable. First entry in the tuple is the vector of -// unique mass values, second entry is the vector containing 7-tuples of vectors for logR, and the six qCrits listed above (in order). -// Note that the radius may contract several times. These points have been removed to facilitate the interpolation, so logR is monotonic. +// The First entry in the tuple is the vector of unique mass values, second entry is the vector containing 7-tuples of vectors +// for logR, and the six qCrits listed above (in order). Note that the radius may contract several times. These points have +// been removed to facilitate the interpolation, so logR is monotonic. +// +// The third table below comes from Zhang et al. 2024 (Paper IV, arxiv:2406.13146). This table was computed exclusively for He +// stars, and does include the same variations as for the H-rich donors in the first two tables. There is only one critical mass +// ratio value per mass and radius, assuming fully conservative MT and a purely adiabatic (i.e non-istentropic) response to mass loss. +// +// In all cases, q is mAccretor/mDonor, which is inverted from the Ge et al. datatable. // // Low Z = 0.001 table const GE_QCRIT_TABLE QCRIT_GE_LOW_Z = { @@ -638,7 +647,7 @@ const GE_QCRIT_TABLE QCRIT_GE_LOW_Z = { { {{-0.0391, -0.029, -0.0112, 0.0059, 0.0217, 0.0359, 0.0492, 0.0663, 0.1844, 0.2985, 0.4157, 0.5323, 0.6365, 0.7326, 0.8349, 0.9336, 1.0333, 1.1347, 1.2364, 1.3386, 1.4372, 1.5371, 1.6372, 1.7365, 1.834, 1.9394, 2.0102, 2.0483, 2.1567, 2.2588}, {0.425, 0.412, 0.392, 0.375, 0.360, 0.348, 0.338, 0.326, 0.269, 0.239, 0.242, 0.962, 1.085, 1.101, 1.092, 1.071, 1.042, 1.007, 0.970, 0.928, 0.881, 0.827, 0.767, 0.700, 0.625, 0.532, 0.463, 0.286, 0.221, 0.138}, {0.425, 0.414, 0.398, 0.384, 0.372, 0.361, 0.352, 0.342, 0.292, 0.265, 0.264, 0.817, 0.912, 0.926, 0.919, 0.903, 0.882, 0.856, 0.829, 0.797, 0.762, 0.720, 0.675, 0.623, 0.564, 0.491, 0.435, 0.286, 0.332, 0.332}, {0.455, 0.446, 0.433, 0.422, 0.412, 0.404, 0.396, 0.387, 0.345, 0.322, 0.315, 0.693, 0.768, 0.779, 0.775, 0.765, 0.750, 0.732, 0.713, 0.691, 0.666, 0.637, 0.603, 0.565, 0.521, 0.465, 0.423, 0.296, 0.340, 0.340}, {0.424, 0.411, 0.390, 0.373, 0.359, 0.347, 0.336, 0.324, 0.267, 0.237, 0.241, 0.913, 1.022, 1.029, 1.007, 0.974, 0.932, 0.883, 0.831, 0.773, 0.711, 0.643, 0.570, 0.492, 0.410, 0.318, 0.255, 0.149, 0.088, 0.022}, {0.424, 0.414, 0.397, 0.382, 0.370, 0.360, 0.351, 0.341, 0.291, 0.264, 0.263, 0.779, 0.867, 0.873, 0.858, 0.833, 0.801, 0.765, 0.726, 0.682, 0.635, 0.582, 0.525, 0.464, 0.398, 0.323, 0.270, 0.172, 0.117, 0.046}, {0.454, 0.446, 0.433, 0.421, 0.411, 0.403, 0.395, 0.386, 0.344, 0.321, 0.314, 0.668, 0.737, 0.743, 0.734, 0.717, 0.696, 0.671, 0.644, 0.613, 0.579, 0.541, 0.499, 0.453, 0.403, 0.344, 0.303, 0.209, 0.164, 0.099}}, {{-0.0079, -0.0012, 0.0124, 0.0273, 0.0429, 0.0606, 0.0811, 0.1071, 0.1195, 0.1198, 0.2209, 0.3222, 0.4201, 0.5206, 0.6209, 0.7201, 0.8201, 0.9239, 1.0276, 1.1203, 1.2281, 1.3198, 1.4194, 1.5285, 1.627, 1.725, 1.8217, 1.9266, 2.0076, 2.0544, 2.1579, 2.2587, 2.3532}, {0.410, 0.401, 0.386, 0.372, 0.360, 0.348, 0.337, 0.326, 0.318, 0.309, 0.272, 0.246, 0.229, 0.250, 1.020, 1.094, 1.099, 1.082, 1.054, 1.022, 0.982, 0.950, 0.905, 0.847, 0.787, 0.721, 0.646, 0.553, 0.478, 0.363, 0.287, 0.201, 0.104}, {0.414, 0.407, 0.394, 0.382, 0.371, 0.361, 0.351, 0.342, 0.335, 0.327, 0.294, 0.272, 0.256, 0.269, 0.863, 0.921, 0.926, 0.913, 0.892, 0.869, 0.840, 0.816, 0.781, 0.738, 0.693, 0.642, 0.584, 0.511, 0.451, 0.352, 0.352, 0.352, 0.352}, {0.448, 0.441, 0.431, 0.421, 0.412, 0.403, 0.395, 0.387, 0.381, 0.374, 0.347, 0.328, 0.314, 0.317, 0.730, 0.776, 0.781, 0.773, 0.759, 0.743, 0.723, 0.707, 0.683, 0.652, 0.620, 0.583, 0.541, 0.486, 0.441, 0.353, 0.414, 0.414, 0.414}, {0.409, 0.400, 0.385, 0.372, 0.359, 0.347, 0.336, 0.325, 0.317, 0.309, 0.271, 0.245, 0.227, 0.248, 0.974, 1.036, 1.031, 1.002, 0.962, 0.918, 0.865, 0.820, 0.760, 0.688, 0.617, 0.541, 0.460, 0.367, 0.295, 0.201, 0.134, 0.058, 0.015}, {0.413, 0.406, 0.393, 0.381, 0.371, 0.360, 0.351, 0.341, 0.334, 0.327, 0.294, 0.271, 0.270, 0.268, 0.828, 0.879, 0.876, 0.855, 0.824, 0.792, 0.752, 0.718, 0.674, 0.619, 0.564, 0.505, 0.441, 0.366, 0.307, 0.221, 0.163, 0.090, 0.039}, {0.447, 0.441, 0.430, 0.420, 0.411, 0.403, 0.394, 0.386, 0.381, 0.374, 0.346, 0.327, 0.313, 0.316, 0.708, 0.748, 0.748, 0.734, 0.714, 0.692, 0.664, 0.641, 0.610, 0.571, 0.532, 0.488, 0.440, 0.383, 0.337, 0.256, 0.211, 0.150, 0.098}}, - {{0.0016, 0.0098, 0.0252, 0.0435, 0.0701, 0.0923, 0.1267, 0.1701, 0.1848, 0.1848, 0.2848, 0.3851, 0.4844, 0.5839, 0.6862, 0.7854, 0.882, 0.9848, 1.0819, 1.185, 1.2822, 1.3834, 1.4892, 1.5857, 1.682, 1.7881, 1.8817, 1.9827, 2.0905, 2.1867, 2.2913, 2.3847}, {0.417, 0.407, 0.392, 0.378, 0.361, 0.350, 0.336, 0.322, 0.315, 0.298, 0.270, 0.249, 0.233, 0.237, 1.054, 1.120, 1.122, 1.103, 1.075, 1.041, 1.005, 0.965, 0.915, 0.863, 0.804, 0.730, 0.655, 0.562, 0.412, 0.327, 0.227, 0.118}, {0.420, 0.411, 0.398, 0.386, 0.372, 0.362, 0.351, 0.338, 0.332, 0.317, 0.293, 0.275, 0.260, 0.261, 0.889, 0.942, 0.943, 0.929, 0.909, 0.883, 0.857, 0.828, 0.790, 0.751, 0.706, 0.650, 0.591, 0.519, 0.395, 0.327, 0.245, 0.152}, {0.452, 0.445, 0.434, 0.424, 0.412, 0.404, 0.394, 0.384, 0.379, 0.366, 0.345, 0.330, 0.318, 0.315, 0.751, 0.792, 0.795, 0.786, 0.773, 0.755, 0.737, 0.717, 0.691, 0.663, 0.631, 0.591, 0.548, 0.494, 0.391, 0.342, 0.280, 0.207}, {0.417, 0.407, 0.392, 0.377, 0.360, 0.349, 0.336, 0.336, 0.315, 0.298, 0.270, 0.248, 0.231, 0.235, 1.003, 1.058, 1.048, 1.018, 0.978, 0.931, 0.882, 0.828, 0.763, 0.698, 0.627, 0.543, 0.462, 0.370, 0.233, 0.159, 0.072, 0.016}, {0.419, 0.411, 0.398, 0.386, 0.371, 0.362, 0.350, 0.338, 0.332, 0.317, 0.293, 0.274, 0.259, 0.260, 0.852, 0.896, 0.890, 0.867, 0.838, 0.803, 0.766, 0.726, 0.677, 0.627, 0.573, 0.508, 0.443, 0.369, 0.250, 0.188, 0.107, 0.043}, {0.451, 0.445, 0.434, 0.424, 0.412, 0.404, 0.394, 0.383, 0.379, 0.365, 0.345, 0.329, 0.317, 0.314, 0.726, 0.762, 0.759, 0.745, 0.725, 0.701, 0.676, 0.649, 0.614, 0.579, 0.540, 0.492, 0.444, 0.388, 0.285, 0.238, 0.171, 0.109}}, + {{0.0016, 0.0098, 0.0252, 0.0435, 0.0701, 0.0923, 0.1267, 0.1701, 0.1848, 0.1849, 0.2848, 0.3851, 0.4844, 0.5839, 0.6862, 0.7854, 0.882, 0.9848, 1.0819, 1.185, 1.2822, 1.3834, 1.4892, 1.5857, 1.682, 1.7881, 1.8817, 1.9827, 2.0905, 2.1867, 2.2913, 2.3847}, {0.417, 0.407, 0.392, 0.378, 0.361, 0.350, 0.336, 0.322, 0.315, 0.298, 0.270, 0.249, 0.233, 0.237, 1.054, 1.120, 1.122, 1.103, 1.075, 1.041, 1.005, 0.965, 0.915, 0.863, 0.804, 0.730, 0.655, 0.562, 0.412, 0.327, 0.227, 0.118}, {0.420, 0.411, 0.398, 0.386, 0.372, 0.362, 0.351, 0.338, 0.332, 0.317, 0.293, 0.275, 0.260, 0.261, 0.889, 0.942, 0.943, 0.929, 0.909, 0.883, 0.857, 0.828, 0.790, 0.751, 0.706, 0.650, 0.591, 0.519, 0.395, 0.327, 0.245, 0.152}, {0.452, 0.445, 0.434, 0.424, 0.412, 0.404, 0.394, 0.384, 0.379, 0.366, 0.345, 0.330, 0.318, 0.315, 0.751, 0.792, 0.795, 0.786, 0.773, 0.755, 0.737, 0.717, 0.691, 0.663, 0.631, 0.591, 0.548, 0.494, 0.391, 0.342, 0.280, 0.207}, {0.417, 0.407, 0.392, 0.377, 0.360, 0.349, 0.336, 0.336, 0.315, 0.298, 0.270, 0.248, 0.231, 0.235, 1.003, 1.058, 1.048, 1.018, 0.978, 0.931, 0.882, 0.828, 0.763, 0.698, 0.627, 0.543, 0.462, 0.370, 0.233, 0.159, 0.072, 0.016}, {0.419, 0.411, 0.398, 0.386, 0.371, 0.362, 0.350, 0.338, 0.332, 0.317, 0.293, 0.274, 0.259, 0.260, 0.852, 0.896, 0.890, 0.867, 0.838, 0.803, 0.766, 0.726, 0.677, 0.627, 0.573, 0.508, 0.443, 0.369, 0.250, 0.188, 0.107, 0.043}, {0.451, 0.445, 0.434, 0.424, 0.412, 0.404, 0.394, 0.383, 0.379, 0.365, 0.345, 0.329, 0.317, 0.314, 0.726, 0.762, 0.759, 0.745, 0.725, 0.701, 0.676, 0.649, 0.614, 0.579, 0.540, 0.492, 0.444, 0.388, 0.285, 0.238, 0.171, 0.109}}, {{0.0094, 0.0178, 0.0431, 0.0596, 0.0885, 0.123, 0.1633, 0.2063, 0.2314, 0.2329, 0.3303, 0.4354, 0.5325, 0.6321, 0.7326, 0.8357, 0.9354, 1.0354, 1.1362, 1.2351, 1.336, 1.4396, 1.5329, 1.6374, 1.7418, 1.8345, 1.9551, 2.0503, 2.1428, 2.2423, 2.3321}, {0.423, 0.414, 0.393, 0.382, 0.366, 0.351, 0.336, 0.323, 0.313, 0.297, 0.271, 0.251, 0.236, 0.228, 1.042, 1.131, 1.134, 1.115, 1.086, 1.053, 1.013, 0.969, 0.924, 0.867, 0.802, 0.735, 0.632, 0.481, 0.405, 0.309, 0.206}, {0.425, 0.417, 0.399, 0.390, 0.376, 0.363, 0.351, 0.339, 0.331, 0.316, 0.294, 0.276, 0.263, 0.255, 0.879, 0.951, 0.953, 0.939, 0.918, 0.894, 0.864, 0.831, 0.797, 0.754, 0.705, 0.654, 0.574, 0.451, 0.391, 0.314, 0.228}, {0.455, 0.449, 0.434, 0.426, 0.415, 0.404, 0.394, 0.384, 0.377, 0.364, 0.346, 0.331, 0.320, 0.312, 0.744, 0.799, 0.803, 0.794, 0.779, 0.763, 0.743, 0.720, 0.697, 0.667, 0.632, 0.595, 0.537, 0.437, 0.393, 0.336, 0.271}, {0.423, 0.414, 0.393, 0.382, 0.366, 0.350, 0.336, 0.322, 0.313, 0.296, 0.270, 0.250, 0.235, 0.226, 0.988, 1.066, 1.057, 1.026, 0.985, 0.938, 0.886, 0.826, 0.768, 0.697, 0.618, 0.543, 0.435, 0.300, 0.228, 0.144, 0.061}, {0.424, 0.417, 0.399, 0.390, 0.376, 0.363, 0.350, 0.339, 0.330, 0.316, 0.293, 0.275, 0.262, 0.253, 0.840, 0.903, 0.897, 0.874, 0.844, 0.809, 0.770, 0.725, 0.682, 0.627, 0.567, 0.508, 0.422, 0.308, 0.249, 0.177, 0.098}, {0.455, 0.449, 0.434, 0.426, 0.415, 0.404, 0.394, 0.384, 0.377, 0.364, 0.345, 0.330, 0.319, 0.311, 0.718, 0.767, 0.765, 0.751, 0.730, 0.707, 0.680, 0.649, 0.618, 0.580, 0.537, 0.494, 0.430, 0.333, 0.289, 0.234, 0.169}}, {{0.0188, 0.0303, 0.0557, 0.0841, 0.1175, 0.1574, 0.2007, 0.252, 0.2781, 0.338, 0.4376, 0.5394, 0.6339, 0.7372, 0.8377, 0.9379, 1.0397, 1.1356, 1.2395, 1.3355, 1.4396, 1.5353, 1.6336, 1.7332, 1.833, 1.867, 1.9053, 2.1012, 2.2144, 2.3178, 2.4107}, {0.430, 0.420, 0.402, 0.385, 0.368, 0.351, 0.337, 0.321, 0.310, 0.281, 0.258, 0.241, 0.228, 0.220, 1.032, 1.112, 1.125, 1.112, 1.085, 1.053, 1.002, 0.959, 0.909, 0.850, 0.782, 0.756, 0.619, 0.499, 0.388, 0.272, 0.145}, {0.430, 0.422, 0.406, 0.392, 0.377, 0.363, 0.351, 0.337, 0.328, 0.302, 0.282, 0.267, 0.255, 0.247, 0.873, 0.936, 0.947, 0.938, 0.917, 0.894, 0.856, 0.824, 0.787, 0.743, 0.692, 0.672, 0.560, 0.468, 0.379, 0.285, 0.179}, {0.459, 0.452, 0.439, 0.427, 0.415, 0.404, 0.394, 0.382, 0.375, 0.352, 0.336, 0.323, 0.313, 0.305, 0.740, 0.790, 0.799, 0.794, 0.781, 0.765, 0.739, 0.717, 0.691, 0.660, 0.623, 0.609, 0.519, 0.452, 0.387, 0.317, 0.238}, {0.430, 0.420, 0.402, 0.384, 0.368, 0.351, 0.336, 0.321, 0.310, 0.281, 0.258, 0.240, 0.226, 0.218, 0.972, 1.039, 1.038, 1.013, 0.972, 0.926, 0.862, 0.804, 0.740, 0.668, 0.589, 0.561, 0.442, 0.307, 0.207, 0.109, 0.019}, {0.430, 0.421, 0.406, 0.391, 0.377, 0.363, 0.351, 0.337, 0.328, 0.302, 0.282, 0.266, 0.254, 0.245, 0.828, 0.883, 0.884, 0.865, 0.835, 0.801, 0.753, 0.710, 0.661, 0.606, 0.546, 0.523, 0.424, 0.316, 0.233, 0.146, 0.049}, {0.459, 0.452, 0.439, 0.427, 0.415, 0.404, 0.393, 0.382, 0.374, 0.352, 0.335, 0.322, 0.312, 0.303, 0.710, 0.754, 0.757, 0.746, 0.726, 0.703, 0.669, 0.640, 0.606, 0.567, 0.523, 0.507, 0.423, 0.343, 0.281, 0.212, 0.125}}, {{0.032, 0.0492, 0.0786, 0.1129, 0.1433, 0.1972, 0.2489, 0.3026, 0.3286, 0.3311, 0.428, 0.5312, 0.6328, 0.7301, 0.8284, 0.9305, 1.0295, 1.1287, 1.2304, 1.333, 1.4264, 1.4307, 1.5182, 1.5201, 1.6233, 1.7255, 1.8271, 1.9251, 2.034, 2.1287, 2.2229, 2.3246, 2.4363}, {0.438, 0.427, 0.408, 0.388, 0.374, 0.352, 0.335, 0.319, 0.310, 0.293, 0.271, 0.253, 0.239, 0.228, 0.224, 1.066, 1.127, 1.131, 1.116, 1.088, 1.055, 0.779, 0.787, 0.792, 0.779, 0.747, 0.705, 0.657, 0.595, 0.523, 0.422, 0.300, 0.135}, {0.437, 0.427, 0.411, 0.394, 0.382, 0.364, 0.349, 0.335, 0.327, 0.312, 0.293, 0.278, 0.265, 0.255, 0.250, 0.899, 0.948, 0.951, 0.941, 0.920, 0.896, 0.679, 0.687, 0.691, 0.682, 0.660, 0.628, 0.591, 0.543, 0.488, 0.408, 0.309, 0.172}, {0.464, 0.456, 0.443, 0.429, 0.419, 0.404, 0.392, 0.381, 0.374, 0.360, 0.344, 0.331, 0.321, 0.312, 0.306, 0.760, 0.798, 0.803, 0.796, 0.783, 0.766, 0.599, 0.607, 0.610, 0.606, 0.592, 0.570, 0.545, 0.511, 0.471, 0.412, 0.338, 0.236}, {0.438, 0.427, 0.408, 0.388, 0.374, 0.352, 0.335, 0.319, 0.310, 0.293, 0.271, 0.253, 0.238, 0.226, 0.221, 0.995, 1.042, 1.032, 1.002, 0.959, 0.912, 0.673, 0.666, 0.669, 0.640, 0.594, 0.539, 0.479, 0.405, 0.329, 0.238, 0.134, 0.017}, {0.436, 0.427, 0.411, 0.394, 0.382, 0.364, 0.349, 0.335, 0.327, 0.312, 0.293, 0.277, 0.264, 0.253, 0.247, 0.847, 0.885, 0.879, 0.858, 0.826, 0.791, 0.599, 0.596, 0.599, 0.578, 0.543, 0.501, 0.455, 0.397, 0.336, 0.261, 0.170, 0.047}, {0.464, 0.456, 0.443, 0.429, 0.419, 0.404, 0.392, 0.381, 0.374, 0.360, 0.344, 0.331, 0.320, 0.311, 0.305, 0.725, 0.756, 0.755, 0.741, 0.720, 0.696, 0.544, 0.545, 0.547, 0.534, 0.512, 0.482, 0.450, 0.407, 0.362, 0.305, 0.235, 0.127}}, @@ -646,7 +655,7 @@ const GE_QCRIT_TABLE QCRIT_GE_LOW_Z = { {{0.0987, 0.1221, 0.161, 0.199, 0.2447, 0.3006, 0.3524, 0.4134, 0.4442, 0.4813, 0.579, 0.6841, 0.7724, 0.8804, 0.9697, 1.0836, 1.1571, 1.2582, 1.3564, 1.4338, 1.5189, 1.6085, 1.6216, 1.7217, 1.8201, 1.9193, 2.0202, 2.1313, 2.211, 2.3205, 2.3502, 2.4163, 2.527}, {0.460, 0.446, 0.422, 0.402, 0.381, 0.360, 0.343, 0.325, 0.314, 0.290, 0.270, 0.254, 0.242, 0.230, 0.222, 0.215, 0.634, 1.007, 1.046, 1.050, 0.838, 0.853, 0.858, 0.842, 0.809, 0.766, 0.715, 0.647, 0.580, 0.455, 0.417, 0.312, 0.097}, {0.454, 0.442, 0.422, 0.405, 0.388, 0.369, 0.355, 0.339, 0.330, 0.309, 0.292, 0.277, 0.267, 0.256, 0.249, 0.241, 0.556, 0.856, 0.887, 0.892, 0.726, 0.739, 0.743, 0.733, 0.709, 0.677, 0.638, 0.586, 0.535, 0.436, 0.406, 0.320, 0.132}, {0.477, 0.467, 0.451, 0.437, 0.422, 0.407, 0.395, 0.382, 0.375, 0.355, 0.342, 0.329, 0.321, 0.311, 0.305, 0.297, 0.491, 0.731, 0.757, 0.763, 0.635, 0.648, 0.652, 0.646, 0.631, 0.609, 0.583, 0.546, 0.509, 0.436, 0.413, 0.348, 0.185}, {0.460, 0.446, 0.422, 0.402, 0.381, 0.360, 0.342, 0.324, 0.314, 0.289, 0.270, 0.254, 0.242, 0.229, 0.220, 0.211, 0.575, 0.917, 0.939, 0.931, 0.726, 0.725, 0.727, 0.695, 0.647, 0.590, 0.525, 0.443, 0.373, 0.258, 0.222, 0.131, 0.131}, {0.454, 0.442, 0.422, 0.405, 0.387, 0.369, 0.355, 0.339, 0.330, 0.308, 0.292, 0.277, 0.267, 0.255, 0.247, 0.238, 0.511, 0.789, 0.808, 0.804, 0.643, 0.644, 0.646, 0.623, 0.587, 0.544, 0.494, 0.430, 0.374, 0.279, 0.249, 0.168, 0.168}, {0.477, 0.467, 0.451, 0.437, 0.422, 0.407, 0.395, 0.382, 0.374, 0.355, 0.341, 0.329, 0.321, 0.311, 0.303, 0.295, 0.458, 0.686, 0.704, 0.704, 0.578, 0.583, 0.585, 0.571, 0.548, 0.518, 0.483, 0.437, 0.395, 0.324, 0.300, 0.239, 0.239}}, {{0.1633, 0.1852, 0.2184, 0.2609, 0.313, 0.3689, 0.4354, 0.4808, 0.5168, 0.5448, 0.6601, 0.7591, 0.8595, 0.9648, 1.0669, 1.1711, 1.2689, 1.3613, 1.4624, 1.5622, 1.6186, 1.6612, 1.7614, 1.7711, 1.8647, 1.9639, 2.0608, 2.1636, 2.2679, 2.3693, 2.46, 2.4818}, {0.476, 0.461, 0.440, 0.417, 0.392, 0.370, 0.348, 0.335, 0.322, 0.316, 0.281, 0.263, 0.249, 0.236, 0.226, 0.218, 0.211, 0.218, 0.910, 0.976, 0.984, 0.742, 0.792, 0.791, 0.789, 0.756, 0.709, 0.641, 0.553, 0.454, 0.298, 0.248}, {0.466, 0.454, 0.437, 0.417, 0.396, 0.378, 0.359, 0.347, 0.337, 0.330, 0.301, 0.285, 0.272, 0.261, 0.252, 0.244, 0.238, 0.243, 0.781, 0.835, 0.842, 0.651, 0.693, 0.693, 0.692, 0.668, 0.633, 0.582, 0.513, 0.436, 0.308, 0.267}, {0.486, 0.476, 0.462, 0.445, 0.428, 0.413, 0.397, 0.387, 0.378, 0.372, 0.348, 0.334, 0.324, 0.314, 0.306, 0.299, 0.293, 0.295, 0.676, 0.720, 0.728, 0.578, 0.615, 0.615, 0.618, 0.602, 0.579, 0.542, 0.493, 0.436, 0.339, 0.309}, {0.475, 0.461, 0.440, 0.416, 0.392, 0.370, 0.348, 0.334, 0.322, 0.316, 0.281, 0.263, 0.249, 0.236, 0.225, 0.216, 0.207, 0.211, 0.813, 0.859, 0.858, 0.636, 0.664, 0.662, 0.642, 0.594, 0.534, 0.458, 0.369, 0.274, 0.145, 0.108}, {0.466, 0.454, 0.436, 0.417, 0.396, 0.377, 0.359, 0.347, 0.336, 0.330, 0.300, 0.285, 0.272, 0.261, 0.251, 0.242, 0.234, 0.238, 0.710, 0.748, 0.748, 0.571, 0.597, 0.596, 0.582, 0.546, 0.500, 0.441, 0.371, 0.293, 0.181, 0.148}, {0.486, 0.476, 0.461, 0.445, 0.428, 0.413, 0.397, 0.387, 0.378, 0.372, 0.347, 0.334, 0.324, 0.314, 0.305, 0.297, 0.291, 0.291, 0.628, 0.663, 0.665, 0.523, 0.549, 0.549, 0.542, 0.518, 0.487, 0.444, 0.392, 0.335, 0.251, 0.227}}, {{0.2241, 0.2542, 0.2888, 0.338, 0.3907, 0.4184, 0.4912, 0.5441, 0.5804, 0.6431, 0.739, 0.841, 0.9404, 1.0414, 1.1442, 1.2482, 1.3489, 1.4494, 1.5385, 1.5651, 1.6428, 1.7331, 1.7358, 1.8352, 1.925, 1.9373, 2.0361, 2.1339, 2.2353, 2.3371, 2.4347, 2.5323, 2.5624}, {0.490, 0.469, 0.447, 0.421, 0.396, 0.385, 0.360, 0.343, 0.331, 0.301, 0.283, 0.267, 0.255, 0.243, 0.233, 0.224, 0.217, 0.210, 0.211, 0.480, 0.853, 0.917, 0.131, 0.632, 0.726, 0.737, 0.727, 0.685, 0.621, 0.542, 0.455, 0.247, 0.176}, {0.477, 0.460, 0.442, 0.419, 0.399, 0.390, 0.368, 0.354, 0.343, 0.317, 0.301, 0.288, 0.277, 0.267, 0.257, 0.250, 0.243, 0.237, 0.238, 0.432, 0.737, 0.790, 0.162, 0.563, 0.641, 0.651, 0.645, 0.615, 0.566, 0.504, 0.437, 0.266, 0.205}, {0.494, 0.480, 0.465, 0.446, 0.429, 0.422, 0.403, 0.392, 0.383, 0.360, 0.347, 0.336, 0.327, 0.318, 0.310, 0.303, 0.297, 0.292, 0.291, 0.391, 0.644, 0.688, 0.221, 0.509, 0.577, 0.584, 0.584, 0.564, 0.530, 0.486, 0.438, 0.307, 0.260}, {0.489, 0.469, 0.447, 0.420, 0.396, 0.385, 0.359, 0.343, 0.330, 0.301, 0.283, 0.267, 0.254, 0.243, 0.233, 0.223, 0.214, 0.205, 0.202, 0.413, 0.747, 0.791, 0.123, 0.525, 0.591, 0.598, 0.570, 0.516, 0.444, 0.362, 0.276, 0.115, 0.014}, {0.477, 0.460, 0.442, 0.419, 0.399, 0.390, 0.368, 0.354, 0.343, 0.317, 0.301, 0.288, 0.277, 0.266, 0.257, 0.248, 0.241, 0.233, 0.230, 0.378, 0.658, 0.696, 0.155, 0.481, 0.539, 0.546, 0.526, 0.485, 0.430, 0.364, 0.295, 0.154, 0.045}, {0.494, 0.480, 0.465, 0.446, 0.429, 0.421, 0.403, 0.392, 0.383, 0.360, 0.347, 0.336, 0.326, 0.318, 0.310, 0.302, 0.295, 0.289, 0.286, 0.356, 0.591, 0.625, 0.216, 0.451, 0.506, 0.512, 0.502, 0.474, 0.435, 0.387, 0.336, 0.231, 0.144}}, - {{0.2862, 0.3086, 0.3534, 0.3958, 0.4409, 0.4959, 0.5541, 0.6068, 0.6442, 0.6483, 0.7405, 0.8402, 0.9436, 1.0401, 1.1427, 1.2402, 1.3473, 1.4372, 1.6098, 1.6389, 1.7395, 1.8416, 1.8981, 1.9484, 2.0229, 2.0483, 2.1425, 2.1914, 2.1935, 2.2423, 2.3402, 2.4403, 2.5407, 2.5649, 2.5649}, {0.505, 0.488, 0.459, 0.435, 0.413, 0.390, 0.369, 0.352, 0.338, 0.326, 0.302, 0.285, 0.270, 0.258, 0.246, 0.237, 0.227, 0.220, 0.206, 0.204, 0.207, 0.870, 0.912, 0.125, 0.671, 0.776, 0.666, 0.653, 0.660, 0.639, 0.581, 0.496, 0.357, 0.296, 0.296}, {0.489, 0.476, 0.451, 0.431, 0.412, 0.393, 0.376, 0.361, 0.349, 0.338, 0.317, 0.303, 0.290, 0.279, 0.269, 0.260, 0.252, 0.245, 0.234, 0.232, 0.234, 0.751, 0.785, 0.156, 0.594, 0.680, 0.597, 0.588, 0.593, 0.579, 0.534, 0.468, 0.356, 0.306, 0.306}, {0.503, 0.491, 0.471, 0.455, 0.439, 0.423, 0.408, 0.397, 0.386, 0.376, 0.359, 0.347, 0.336, 0.327, 0.319, 0.311, 0.304, 0.298, 0.289, 0.287, 0.289, 0.654, 0.683, 0.215, 0.534, 0.603, 0.548, 0.543, 0.547, 0.537, 0.506, 0.459, 0.374, 0.337, 0.337}, {0.504, 0.488, 0.458, 0.434, 0.412, 0.390, 0.369, 0.352, 0.338, 0.326, 0.302, 0.284, 0.270, 0.257, 0.246, 0.236, 0.226, 0.218, 0.201, 0.197, 0.196, 0.723, 0.747, 0.112, 0.518, 0.600, 0.517, 0.495, 0.499, 0.473, 0.405, 0.320, 0.205, 0.162, 0.162}, {0.489, 0.475, 0.451, 0.431, 0.412, 0.393, 0.375, 0.361, 0.349, 0.338, 0.317, 0.302, 0.289, 0.279, 0.268, 0.260, 0.251, 0.243, 0.229, 0.227, 0.225, 0.641, 0.663, 0.145, 0.477, 0.547, 0.484, 0.468, 0.471, 0.451, 0.398, 0.330, 0.234, 0.196, 0.196}, {0.502, 0.491, 0.471, 0.454, 0.439, 0.423, 0.408, 0.397, 0.386, 0.376, 0.359, 0.347, 0.336, 0.327, 0.319, 0.311, 0.303, 0.297, 0.285, 0.283, 0.282, 0.579, 0.600, 0.206, 0.451, 0.512, 0.469, 0.459, 0.461, 0.448, 0.411, 0.360, 0.289, 0.261, 0.261}}, + {{0.2862, 0.3086, 0.3534, 0.3958, 0.4409, 0.4959, 0.5541, 0.6068, 0.6442, 0.6483, 0.7405, 0.8402, 0.9436, 1.0401, 1.1427, 1.2402, 1.3473, 1.4372, 1.6098, 1.6389, 1.7395, 1.8416, 1.8981, 1.9484, 2.0229, 2.0483, 2.1425, 2.1914, 2.1935, 2.2423, 2.3402, 2.4403, 2.5407, 2.5649, 2.5650}, {0.505, 0.488, 0.459, 0.435, 0.413, 0.390, 0.369, 0.352, 0.338, 0.326, 0.302, 0.285, 0.270, 0.258, 0.246, 0.237, 0.227, 0.220, 0.206, 0.204, 0.207, 0.870, 0.912, 0.125, 0.671, 0.776, 0.666, 0.653, 0.660, 0.639, 0.581, 0.496, 0.357, 0.296, 0.296}, {0.489, 0.476, 0.451, 0.431, 0.412, 0.393, 0.376, 0.361, 0.349, 0.338, 0.317, 0.303, 0.290, 0.279, 0.269, 0.260, 0.252, 0.245, 0.234, 0.232, 0.234, 0.751, 0.785, 0.156, 0.594, 0.680, 0.597, 0.588, 0.593, 0.579, 0.534, 0.468, 0.356, 0.306, 0.306}, {0.503, 0.491, 0.471, 0.455, 0.439, 0.423, 0.408, 0.397, 0.386, 0.376, 0.359, 0.347, 0.336, 0.327, 0.319, 0.311, 0.304, 0.298, 0.289, 0.287, 0.289, 0.654, 0.683, 0.215, 0.534, 0.603, 0.548, 0.543, 0.547, 0.537, 0.506, 0.459, 0.374, 0.337, 0.337}, {0.504, 0.488, 0.458, 0.434, 0.412, 0.390, 0.369, 0.352, 0.338, 0.326, 0.302, 0.284, 0.270, 0.257, 0.246, 0.236, 0.226, 0.218, 0.201, 0.197, 0.196, 0.723, 0.747, 0.112, 0.518, 0.600, 0.517, 0.495, 0.499, 0.473, 0.405, 0.320, 0.205, 0.162, 0.162}, {0.489, 0.475, 0.451, 0.431, 0.412, 0.393, 0.375, 0.361, 0.349, 0.338, 0.317, 0.302, 0.289, 0.279, 0.268, 0.260, 0.251, 0.243, 0.229, 0.227, 0.225, 0.641, 0.663, 0.145, 0.477, 0.547, 0.484, 0.468, 0.471, 0.451, 0.398, 0.330, 0.234, 0.196, 0.196}, {0.502, 0.491, 0.471, 0.454, 0.439, 0.423, 0.408, 0.397, 0.386, 0.376, 0.359, 0.347, 0.336, 0.327, 0.319, 0.311, 0.303, 0.297, 0.285, 0.283, 0.282, 0.579, 0.600, 0.206, 0.451, 0.512, 0.469, 0.459, 0.461, 0.448, 0.411, 0.360, 0.289, 0.261, 0.261}}, {{0.3507, 0.3756, 0.4147, 0.4564, 0.5074, 0.5621, 0.6203, 0.6728, 0.7091, 0.7744, 0.8732, 0.9762, 1.0737, 1.171, 1.2712, 1.3717, 1.4739, 1.5714, 1.6745, 1.7765, 1.8757, 1.9368, 1.9694, 2.0709, 2.1328, 2.2321, 2.3324, 2.4322, 2.5152}, {0.521, 0.502, 0.475, 0.450, 0.424, 0.401, 0.379, 0.362, 0.348, 0.319, 0.300, 0.284, 0.271, 0.259, 0.248, 0.238, 0.229, 0.220, 0.211, 0.202, 0.194, 0.459, 0.699, 0.812, 0.254, 0.623, 0.613, 0.553, 0.473}, {0.502, 0.486, 0.464, 0.443, 0.421, 0.402, 0.383, 0.369, 0.357, 0.332, 0.315, 0.301, 0.290, 0.280, 0.270, 0.262, 0.253, 0.246, 0.238, 0.231, 0.224, 0.416, 0.617, 0.710, 0.242, 0.563, 0.558, 0.512, 0.449}, {0.512, 0.499, 0.481, 0.463, 0.445, 0.429, 0.414, 0.402, 0.391, 0.370, 0.356, 0.345, 0.336, 0.327, 0.319, 0.312, 0.305, 0.298, 0.292, 0.286, 0.281, 0.382, 0.551, 0.629, 0.238, 0.520, 0.521, 0.490, 0.444}, {0.521, 0.502, 0.475, 0.450, 0.424, 0.400, 0.379, 0.362, 0.348, 0.319, 0.299, 0.284, 0.271, 0.259, 0.248, 0.238, 0.228, 0.219, 0.208, 0.196, 0.183, 0.369, 0.576, 0.654, 0.184, 0.477, 0.448, 0.379, 0.301}, {0.502, 0.486, 0.464, 0.443, 0.421, 0.401, 0.383, 0.369, 0.356, 0.332, 0.315, 0.301, 0.290, 0.280, 0.270, 0.261, 0.253, 0.244, 0.235, 0.225, 0.214, 0.344, 0.522, 0.591, 0.183, 0.450, 0.431, 0.377, 0.313}, {0.512, 0.499, 0.481, 0.463, 0.445, 0.429, 0.414, 0.402, 0.391, 0.370, 0.356, 0.345, 0.336, 0.327, 0.319, 0.312, 0.304, 0.297, 0.290, 0.282, 0.274, 0.332, 0.484, 0.548, 0.227, 0.441, 0.432, 0.394, 0.347}}, {{0.4172, 0.4384, 0.4817, 0.5229, 0.5735, 0.6281, 0.6865, 0.7473, 0.7819, 0.7858, 0.8796, 0.9794, 1.0808, 1.1778, 1.28, 1.3839, 1.4769, 1.5757, 1.6749, 1.8857, 1.9817, 2.0831, 2.1795, 2.252, 2.2562, 2.3548, 2.4287, 2.4515, 2.5519, 2.5719, 2.5829}, {0.540, 0.523, 0.491, 0.465, 0.438, 0.413, 0.390, 0.370, 0.356, 0.345, 0.321, 0.302, 0.287, 0.274, 0.262, 0.250, 0.241, 0.231, 0.221, 0.200, 0.190, 0.182, 0.688, 0.734, 0.118, 0.560, 0.563, 0.562, 0.479, 0.456, 0.444}, {0.517, 0.503, 0.476, 0.455, 0.432, 0.411, 0.392, 0.375, 0.363, 0.353, 0.333, 0.317, 0.304, 0.293, 0.282, 0.272, 0.263, 0.255, 0.246, 0.229, 0.221, 0.213, 0.610, 0.650, 0.151, 0.512, 0.518, 0.518, 0.454, 0.436, 0.426}, {0.523, 0.511, 0.489, 0.472, 0.453, 0.436, 0.420, 0.406, 0.396, 0.386, 0.370, 0.357, 0.346, 0.337, 0.328, 0.320, 0.312, 0.305, 0.298, 0.284, 0.278, 0.273, 0.551, 0.586, 0.211, 0.480, 0.489, 0.491, 0.446, 0.432, 0.425}, {0.540, 0.522, 0.491, 0.465, 0.438, 0.413, 0.390, 0.370, 0.356, 0.345, 0.321, 0.302, 0.287, 0.274, 0.262, 0.250, 0.240, 0.230, 0.220, 0.195, 0.181, 0.166, 0.543, 0.568, 0.100, 0.414, 0.403, 0.397, 0.315, 0.295, 0.283}, {0.517, 0.503, 0.476, 0.455, 0.432, 0.411, 0.392, 0.375, 0.363, 0.353, 0.333, 0.317, 0.303, 0.292, 0.282, 0.272, 0.263, 0.254, 0.245, 0.225, 0.213, 0.200, 0.500, 0.524, 0.135, 0.399, 0.394, 0.390, 0.324, 0.308, 0.299}, {0.523, 0.511, 0.489, 0.472, 0.453, 0.436, 0.420, 0.406, 0.396, 0.386, 0.369, 0.356, 0.346, 0.337, 0.328, 0.319, 0.312, 0.305, 0.297, 0.281, 0.273, 0.262, 0.473, 0.499, 0.199, 0.400, 0.402, 0.401, 0.354, 0.341, 0.335}}, {{0.4786, 0.5039, 0.5477, 0.583, 0.6468, 0.6954, 0.7625, 0.8173, 0.8565, 0.9311, 1.0241, 1.1271, 1.2236, 1.3247, 1.428, 1.5207, 1.6215, 1.7214, 1.8213, 1.927, 2.0055, 2.1314, 2.233, 2.3267, 2.4084, 2.4913, 2.5922, 2.63, 2.6607, 2.6765}, {0.561, 0.539, 0.505, 0.481, 0.445, 0.422, 0.396, 0.376, 0.360, 0.332, 0.313, 0.296, 0.282, 0.269, 0.257, 0.247, 0.236, 0.224, 0.212, 0.199, 0.189, 0.174, 0.163, 0.539, 0.708, 0.544, 0.456, 0.420, 0.386, 0.369}, {0.533, 0.515, 0.487, 0.468, 0.438, 0.419, 0.396, 0.380, 0.366, 0.342, 0.325, 0.311, 0.299, 0.288, 0.278, 0.268, 0.259, 0.249, 0.238, 0.227, 0.219, 0.206, 0.196, 0.487, 0.628, 0.497, 0.434, 0.406, 0.379, 0.365}, {0.535, 0.520, 0.497, 0.481, 0.457, 0.441, 0.422, 0.408, 0.397, 0.375, 0.362, 0.350, 0.341, 0.332, 0.323, 0.315, 0.307, 0.298, 0.290, 0.281, 0.274, 0.264, 0.257, 0.447, 0.568, 0.463, 0.429, 0.409, 0.390, 0.380}, {0.560, 0.538, 0.504, 0.481, 0.445, 0.422, 0.395, 0.376, 0.359, 0.332, 0.312, 0.295, 0.282, 0.269, 0.257, 0.246, 0.235, 0.223, 0.210, 0.196, 0.184, 0.165, 0.148, 0.388, 0.505, 0.358, 0.309, 0.278, 0.248, 0.232}, {0.533, 0.515, 0.487, 0.468, 0.438, 0.419, 0.396, 0.380, 0.365, 0.341, 0.325, 0.311, 0.299, 0.288, 0.277, 0.268, 0.258, 0.248, 0.237, 0.225, 0.215, 0.198, 0.183, 0.369, 0.473, 0.351, 0.318, 0.294, 0.269, 0.256}, {0.534, 0.520, 0.497, 0.481, 0.457, 0.441, 0.422, 0.408, 0.396, 0.375, 0.362, 0.350, 0.340, 0.331, 0.323, 0.315, 0.306, 0.298, 0.289, 0.279, 0.271, 0.258, 0.247, 0.360, 0.460, 0.358, 0.347, 0.329, 0.311, 0.302}}, @@ -668,7 +677,7 @@ const GE_QCRIT_TABLE QCRIT_GE_HIGH_Z = { {0.1, 0.13, 0.16, 0.2, 0.22, 0.25, 0.28, 0.32, 0.36, 0.4, 0.45, 0.5, 0.56, 0.63, 0.71, 0.8, 0.89, 1.0, 1.14, 1.3, 1.44, 1.6, 1.8, 2.0, 2.04, 2.5, 3.2, 4.0, 5.0, 6.3, 8.0, 10.0, 13.0, 16.0, 20.0, 25.0, 32.0, 40.0, 50.0, 63.0, 80.0, 100.0}, { {{-0.8724, -0.8581, -0.8457, -0.8367, -0.8336}, {-334.448, -502.513, -502.513, 497.512, 332.226}, {-200.401, -250.627, -200.401, 990.099, 497.512}, {-90.992, -111.235, -100.100, -334.448, 100000.000}, {1.517, 1.531, 1.534, 1.536, 1.538}, {1.241, 1.252, 1.253, 1.255, 1.255}, {1.006, 1.013, 1.014, 1.015, 1.016}}, - {{-0.7771, -0.7662, -0.7581, -0.7545, -0.7545, -0.7295, -0.7239}, {-250.627, -1010.101, 100000.000, 100000.000, 100000.000, 0.941, 0.209}, {-143.062, -334.448, -502.513, -502.513, -334.448, -13.335, 199.601}, {-83.403, -143.062, -166.945, -143.062, -143.062, -12.822, 199.601}, {1.531, 1.534, 1.536, 1.538, 1.538, 0.828, 0.209}, {1.250, 1.253, 1.255, 1.256, 1.256, 0.708, 0.248}, {1.012, 1.014, 1.015, 1.017, 1.017, 0.605, 0.326}}, + {{-0.7771, -0.7662, -0.7581, -0.7545, -0.7546, -0.7295, -0.7239}, {-250.627, -1010.101, 100000.000, 100000.000, 100000.000, 0.941, 0.209}, {-143.062, -334.448, -502.513, -502.513, -334.448, -13.335, 199.601}, {-83.403, -143.062, -166.945, -143.062, -143.062, -12.822, 199.601}, {1.531, 1.534, 1.536, 1.538, 1.538, 0.828, 0.209}, {1.250, 1.253, 1.255, 1.256, 1.256, 0.708, 0.248}, {1.012, 1.014, 1.015, 1.017, 1.017, 0.605, 0.326}}, {{-0.7068, -0.6996, -0.6958, -0.6953, -0.6949, -0.6642, -0.5622, -0.46, -0.3582, -0.256}, {332.226, -1010.101, 249.377, 100000.000, 497.512, 1.495, 0.600, 0.366, 0.204, 0.096}, {497.512, -334.448, 332.226, -334.448, -33.344, 249.377, 0.525, 0.330, 0.190, 0.147}, {-1010.101, -143.062, 990.099, -143.062, -26.323, 249.377, 0.459, 0.298, 0.264, 0.250}, {1.534, 1.538, 1.541, 1.543, 1.427, 1.186, 0.580, 0.354, 0.196, 0.096}, {1.252, 1.255, 1.258, 1.259, 1.171, 0.988, 0.509, 0.321, 0.183, 0.147}, {1.013, 1.016, 1.018, 1.019, 0.954, 0.819, 0.447, 0.291, 0.264, 0.250}}, {{-0.6373, -0.6331, -0.6305, -0.6299, -0.6295, -0.6251, -0.6117, -0.5659, -0.4627, -0.3596, -0.256, -0.1531, -0.0464, 0.0491, 0.1517, 0.2617, 0.3627}, {-1010.101, 332.226, 100000.000, 497.512, 249.377, 100000.000, 249.377, 1.309, 0.823, 0.664, 0.575, 0.495, 0.415, 0.342, 0.258, 0.156, 0.042}, {-334.448, 497.512, -502.513, -83.403, -43.497, -35.727, -27.034, -16.396, -11.629, -11.629, 0.527, 0.527, 0.372, 0.527, 0.527, -11.629, 0.558}, {-143.062, 100000.000, -166.945, -52.659, -33.344, -27.785, -23.261, -15.154, -11.365, -11.365, 0.460, 0.460, 0.336, 0.460, 0.460, -11.365, 0.487}, {1.538, 1.543, 1.548, 1.550, 1.534, 1.484, 1.381, 1.151, 0.797, 0.649, 0.560, 0.479, 0.397, 0.323, 0.240, 0.142, 0.042}, {1.256, 1.259, 1.263, 1.266, 1.252, 1.215, 1.136, 0.960, 0.684, 0.565, 0.493, 0.427, 0.358, 0.296, 0.224, 0.136, 0.087}, {1.016, 1.019, 1.021, 1.024, 1.014, 0.987, 0.929, 0.798, 0.587, 0.494, 0.436, 0.382, 0.325, 0.272, 0.212, 0.204, 0.016}}, {{-0.6087, -0.6047, -0.6021, -0.6015, -0.5993, -0.593, -0.5764, -0.5258, -0.4215, -0.3172, -0.2127, -0.1081, -0.0049, 0.0996, 0.2053, 0.3111, 0.4082, 0.5206, 0.6211}, {990.099, 497.512, 332.226, 100000.000, 249.377, 332.226, 990.099, 1.269, 0.870, 0.739, 0.674, 0.610, 0.543, 0.475, 0.403, 0.325, 0.247, 0.146, 0.030}, {-1010.101, 100000.000, -111.235, -47.642, 249.377, -32.268, -25.006, -15.876, 249.377, 0.637, 0.586, 0.534, 0.480, 0.424, 0.363, 0.297, 0.230, 0.139, 0.072}, {-200.401, -334.448, -62.539, -34.495, 249.377, -26.323, -21.281, -14.928, 249.377, 0.550, 0.510, 0.469, 0.426, 0.380, 0.330, 0.274, 0.215, 0.134, 0.022}, {1.541, 1.546, 1.550, 1.548, 1.522, 1.468, 1.364, 1.143, 0.844, 0.723, 0.659, 0.592, 0.523, 0.452, 0.378, 0.300, 0.224, 0.128, 0.030}, {1.258, 1.263, 1.266, 1.264, 1.244, 1.203, 1.124, 0.954, 0.720, 0.625, 0.574, 0.520, 0.464, 0.406, 0.344, 0.277, 0.211, 0.125, 0.071}, {1.018, 1.020, 1.024, 1.022, 1.008, 0.978, 0.920, 0.794, 0.615, 0.541, 0.502, 0.459, 0.414, 0.366, 0.315, 0.258, 0.200, 0.122, 0.019}}, @@ -711,6 +720,59 @@ const GE_QCRIT_TABLE QCRIT_GE_HIGH_Z = { {{1.1921, 1.2529, 1.3279, 1.4202, 1.5448, 1.6258, 1.7109, 1.8276, 1.9456, 2.0581, 2.164, 2.2702, 2.3409, 2.4455, 2.5366, 2.6464, 2.7418, 2.8473, 2.94, 3.0334, 3.1361, 3.2417, 3.3381, 3.4403, 3.513, 3.5774}, {1.520, 1.232, 0.942, 0.697, 0.481, 0.423, 0.342, 0.289, 0.239, 0.199, 0.171, 0.143, 0.094, 0.081, 0.072, 0.063, 0.056, 0.049, 0.043, 0.039, 0.035, 0.031, 0.027, 0.024, 0.023, 0.033}, {1.264, 1.048, 0.828, 0.637, 0.464, 0.419, 0.351, 0.302, 0.267, 0.236, 0.210, 0.187, 0.138, 0.124, 0.115, 0.105, 0.097, 0.089, 0.082, 0.077, 0.071, 0.066, 0.061, 0.057, 0.054, 0.062}, {1.062, 0.907, 0.745, 0.601, 0.464, 0.432, 0.375, 0.349, 0.316, 0.290, 0.270, 0.255, 0.215, 0.203, 0.195, 0.185, 0.177, 0.169, 0.163, 0.158, 0.153, 0.147, 0.141, 0.135, 0.132, 0.125}, {1.009, 0.720, 0.517, 0.378, 0.273, 0.230, 0.197, 0.164, 0.137, 0.116, 0.099, 0.082, 0.054, 0.046, 0.041, 0.034, 0.030, 0.026, 0.023, 0.019, 0.016, 0.013, 0.010, 0.008, 0.007, 0.009}, {0.873, 0.647, 0.484, 0.372, 0.284, 0.248, 0.220, 0.192, 0.169, 0.150, 0.136, 0.122, 0.102, 0.092, 0.084, 0.076, 0.070, 0.064, 0.059, 0.054, 0.048, 0.042, 0.036, 0.030, 0.028, 0.028}, {0.766, 0.595, 0.467, 0.377, 0.306, 0.276, 0.255, 0.233, 0.216, 0.202, 0.192, 0.186, 0.201, 0.192, 0.186, 0.178, 0.172, 0.166, 0.161, 0.156, 0.149, 0.143, 0.137, 0.132, 0.130, 0.127}}, } }; +// +// He star table +const GE_QCRIT_TABLE_HE QCRIT_GE_HE_STAR = { + {0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.8, 3.0, 3.2, 3.5, 3.8, 4.2, 4.6, 5.0, 5.4, 5.8, 6.3, 6.9, 7.5, 8.0, 8.6, 9.3, 10.0}, + { + {{-2.6886, -2.6486, -2.609, -2.5716, -2.5363, -2.5009, -2.4674, -2.4347, -2.4031, -2.3756, -2.3446}, {0.516, 0.506, 0.495, 0.485, 0.474, 0.463, 0.451, 0.438, 0.424, 0.347, 0.329}}, + {{-2.4785, -2.4489, -2.418, -2.3886, -2.3599, -2.3328, -2.3052, -2.2797, -2.2539, -2.2288, -2.2039}, {0.490, 0.483, 0.475, 0.466, 0.458, 0.449, 0.440, 0.431, 0.421, 0.409, 0.391}}, + {{-2.3271, -2.3001, -2.2704, -2.2431, -2.2163, -2.1905, -2.165, -2.1402, -2.1164, -2.0925, -2.0689}, {0.478, 0.471, 0.463, 0.455, 0.447, 0.439, 0.430, 0.421, 0.412, 0.401, 0.383}}, + {{-2.207, -2.1808, -2.1527, -2.126, -2.1008, -2.0757, -2.0509, -2.0277, -2.0044, -1.9818, -1.9589}, {0.472, 0.465, 0.457, 0.449, 0.441, 0.433, 0.424, 0.416, 0.407, 0.397, 0.379}}, + {{-2.1068, -2.084, -2.0552, -2.0321, -2.0058, -1.9804, -1.9563, -1.9345, -1.911, -1.8891, -1.8664}, {0.468, 0.462, 0.454, 0.447, 0.439, 0.430, 0.422, 0.414, 0.404, 0.394, 0.377}}, + {{-2.0215, -1.9984, -1.9739, -1.9483, -1.9222, -1.899, -1.875, -1.8517, -1.8301, -1.808, -1.7866, -1.701, -1.5877}, {0.467, 0.461, 0.454, 0.446, 0.437, 0.429, 0.421, 0.412, 0.403, 0.393, 0.376, 0.194, 0.160}}, + {{-1.9419, -1.9231, -1.899, -1.8755, -1.8507, -1.8262, -1.8033, -1.7829, -1.7589, -1.7382, -1.7162, -1.6156, -1.4951, -1.3803, -1.2697}, {0.466, 0.460, 0.453, 0.445, 0.437, 0.429, 0.421, 0.413, 0.403, 0.394, 0.376, 0.203, 0.179, 0.154, 0.129}}, + {{-1.8794, -1.8607, -1.8361, -1.8116, -1.7862, -1.7609, -1.7404, -1.7173, -1.6956, -1.6747, -1.654, -1.6536, -1.5397, -1.4296, -1.3075, -1.2006, -1.0765, -0.9684, -0.8665}, {0.468, 0.462, 0.454, 0.446, 0.438, 0.429, 0.422, 0.413, 0.404, 0.394, 0.377, 0.229, 0.208, 0.188, 0.166, 0.148, 0.128, 0.111, 0.095}}, + {{-1.819, -1.8011, -1.776, -1.7509, -1.728, -1.7035, -1.6813, -1.6605, -1.6392, -1.6183, -1.5977, -1.5808, -1.4799, -1.3623, -1.2452, -1.1258, -1.02, -0.8915, -0.7769, -0.6609, -0.5465, -0.458, -0.3784, -0.2617, -0.095}, {0.469, 0.463, 0.455, 0.447, 0.439, 0.431, 0.422, 0.414, 0.406, 0.396, 0.378, 0.230, 0.212, 0.192, 0.173, 0.155, 0.140, 0.123, 0.109, 0.096, 0.085, 0.076, 0.069, 0.058, 0.043}}, + {{-1.7639, -1.7436, -1.7218, -1.6993, -1.6758, -1.6504, -1.6292, -1.608, -1.587, -1.5673, -1.5465, -1.5149, -1.4125, -1.3089, -1.1871, -1.0796, -0.9488, -0.851, -0.728, -0.6204, -0.509, -0.4177, -0.2778, -0.1588, -0.0564, 0.0297, 0.089, 0.1673, 0.272, 0.3828, 0.4952, 0.6091, 0.7244, 0.8414, 0.9604, 1.0808, 1.2, 1.3145, 1.4514, 1.5367, 1.6549}, {0.470, 0.463, 0.456, 0.449, 0.441, 0.432, 0.424, 0.416, 0.407, 0.397, 0.380, 0.231, 0.213, 0.196, 0.178, 0.162, 0.145, 0.133, 0.119, 0.108, 0.098, 0.090, 0.080, 0.071, 0.065, 0.060, 0.057, 0.053, 0.048, 0.043, 0.039, 0.035, 0.032, 0.028, 0.025, 0.023, 0.020, 0.018, 0.015, 0.014, 0.012}}, + {{-1.7133, -1.6933, -1.6713, -1.6484, -1.6275, -1.6027, -1.5813, -1.5622, -1.5399, -1.5209, -1.4996, -1.4322, -1.3636, -1.2419, -1.1355, -1.0253, -0.9099, -0.7886, -0.6823, -0.5707, -0.4536, -0.3315, -0.2305, -0.1008, 0.0057, 0.1148, 0.2263, 0.3405, 0.4575, 0.5246, 0.63, 0.7058, 0.8049, 0.9377, 1.0881, 1.2368, 1.3784, 1.4811, 1.6236, 1.7508, 1.8321, 1.9048, 2.0157, 2.0924, 2.1893, 2.3081, 2.429, 2.5533, 2.6861, 2.8422, 3.0746, 3.1325, 3.2661, 3.3366, 3.4452, 3.5505, 3.615, 3.8234, 3.9139, 4.0265, 4.1342}, {0.472, 0.465, 0.458, 0.450, 0.443, 0.434, 0.426, 0.418, 0.409, 0.400, 0.382, 0.228, 0.216, 0.197, 0.181, 0.166, 0.151, 0.137, 0.126, 0.115, 0.105, 0.095, 0.088, 0.079, 0.073, 0.067, 0.062, 0.057, 0.052, 0.050, 0.046, 0.044, 0.041, 0.037, 0.033, 0.030, 0.027, 0.026, 0.023, 0.021, 0.020, 0.019, 0.018, 0.017, 0.016, 0.015, 0.014, 0.013, 0.012, 0.011, 0.010, 0.009, 0.009, 0.008, 0.008, 0.007, 0.007, 0.006, 0.006, 0.006, 0.005}}, + {{-1.6673, -1.645, -1.6196, -1.6, -1.5789, -1.5537, -1.5375, -1.5143, -1.4959, -1.4761, -1.456, -1.3885, -1.3027, -1.1979, -1.0725, -0.9601, -0.8419, -0.7382, -0.6296, -0.5155, -0.3956, -0.2699, -0.1656, -0.0582, 0.0521, 0.1653, 0.2812, 0.4, 0.5227, 0.6179, 0.7501, 0.8539, 0.9604, 1.101, 1.2028, 1.3326, 1.4339, 1.4818, 1.6173, 1.7137, 1.8375, 1.9618, 2.088, 2.2114, 2.3606, 2.4767, 2.5992, 2.6492, 2.7927, 2.8364, 2.9098, 2.992, 3.1166, 3.2766, 3.4377, 3.6175, 3.8265, 3.975, 4.0799, 4.1604, 4.2135, 4.3199, 4.4107, 4.9056}, {0.474, 0.466, 0.458, 0.451, 0.444, 0.434, 0.428, 0.419, 0.411, 0.401, 0.383, 0.231, 0.216, 0.200, 0.182, 0.167, 0.153, 0.141, 0.130, 0.119, 0.109, 0.100, 0.092, 0.086, 0.079, 0.073, 0.068, 0.063, 0.058, 0.054, 0.050, 0.047, 0.043, 0.040, 0.037, 0.035, 0.032, 0.032, 0.029, 0.028, 0.026, 0.024, 0.022, 0.021, 0.019, 0.018, 0.017, 0.016, 0.015, 0.015, 0.014, 0.013, 0.012, 0.011, 0.010, 0.010, 0.009, 0.008, 0.008, 0.007, 0.007, 0.007, 0.006, 0.007}}, + {{-1.5823, -1.5648, -1.5423, -1.5217, -1.4998, -1.4795, -1.4576, -1.4381, -1.4182, -1.3985, -1.3782, -1.3768, -1.3452, -1.3126, -1.2094, -1.0846, -0.9738, -0.8581, -0.7572, -0.6297, -0.5179, -0.4011, -0.3037, -0.1769, -0.0713, 0.0379, 0.1504, 0.2661, 0.3848, 0.507, 0.6017, 0.7329, 0.836, 0.9436, 1.0531, 1.1957, 1.298, 1.4282, 1.5221, 1.644, 1.7636, 1.882, 1.9997, 2.1167, 2.2337, 2.3514, 2.4719, 2.5668, 2.6705, 2.7513, 2.8585, 2.9339, 3.0304, 3.215, 3.3561, 3.4834, 3.6162, 3.7229, 3.8339, 3.9434, 4.0745, 4.2056, 4.3276, 4.4406, 4.5533, 4.6742, 4.7647, 5.1304, 5.2533}, {0.478, 0.471, 0.464, 0.456, 0.449, 0.441, 0.432, 0.424, 0.415, 0.405, 0.387, 0.247, 0.241, 0.235, 0.218, 0.199, 0.184, 0.169, 0.157, 0.144, 0.133, 0.123, 0.115, 0.106, 0.099, 0.092, 0.086, 0.080, 0.075, 0.069, 0.066, 0.061, 0.057, 0.054, 0.051, 0.047, 0.044, 0.041, 0.039, 0.036, 0.034, 0.032, 0.030, 0.028, 0.026, 0.025, 0.023, 0.022, 0.021, 0.020, 0.019, 0.018, 0.017, 0.016, 0.015, 0.014, 0.013, 0.012, 0.012, 0.011, 0.010, 0.010, 0.009, 0.011, 0.019, 0.025, 0.026, 0.011, 0.006}}, + {{-1.5077, -1.3828, -1.3647, -1.3483, -1.3294, -1.3104, -1.2435, -1.1432, -1.0233, -0.9167, -0.8047, -0.6859, -0.5595, -0.448, -0.331, -0.2334, -0.1065, -0.001, 0.1076, 0.2193, 0.3342, 0.4521, 0.5732, 0.6671, 0.7971, 0.8995, 1.0065, 1.1527, 1.2599, 1.363, 1.4941, 1.6195, 1.711, 1.831, 1.95, 2.0683, 2.1859, 2.3036, 2.4221, 2.5127, 2.6404, 2.7471, 2.8331, 2.8869, 3.0404, 3.1239, 3.2777, 3.4238, 3.5606, 3.6741, 3.786, 3.9029, 4.0197, 4.1549, 4.2745, 4.3945, 4.5145, 4.6318, 4.7498, 4.8564, 5.3118}, {0.483, 0.435, 0.427, 0.419, 0.409, 0.393, 0.240, 0.224, 0.206, 0.191, 0.176, 0.163, 0.150, 0.139, 0.129, 0.121, 0.112, 0.105, 0.098, 0.092, 0.086, 0.081, 0.075, 0.072, 0.067, 0.063, 0.059, 0.055, 0.052, 0.049, 0.046, 0.043, 0.041, 0.038, 0.036, 0.034, 0.032, 0.030, 0.028, 0.027, 0.025, 0.024, 0.023, 0.022, 0.021, 0.020, 0.018, 0.017, 0.016, 0.015, 0.014, 0.013, 0.013, 0.012, 0.012, 0.019, 0.036, 0.049, 0.049, 0.041, 0.007}}, + {{-1.4406, -1.4271, -1.4044, -1.3836, -1.3645, -1.3439, -1.3251, -1.3058, -1.2869, -1.2697, -1.2495, -1.1782, -1.0626, -0.9442, -0.8386, -0.7273, -0.609, -0.5046, -0.3945, -0.2789, -0.158, -0.0318, 0.0728, 0.1804, 0.291, 0.4047, 0.5213, 0.6411, 0.7652, 0.8618, 0.9969, 1.1036, 1.2126, 1.3198, 1.4568, 1.5549, 1.6805, 1.8025, 1.9225, 2.012, 2.1306, 2.2486, 2.3666, 2.4854, 2.6073, 2.7039, 2.8102, 2.8946, 3.0142, 3.0984, 3.2527, 3.3334, 3.4877, 3.637, 3.7531, 3.8651, 3.9814, 4.0967, 4.2278, 4.3558, 4.4754, 4.5844, 4.7017, 4.8192, 4.937, 5.3836, 5.4979}, {0.487, 0.480, 0.472, 0.465, 0.457, 0.449, 0.441, 0.433, 0.424, 0.415, 0.397, 0.243, 0.224, 0.207, 0.192, 0.178, 0.165, 0.154, 0.144, 0.134, 0.124, 0.115, 0.109, 0.102, 0.096, 0.090, 0.085, 0.079, 0.074, 0.070, 0.066, 0.062, 0.059, 0.056, 0.052, 0.049, 0.046, 0.043, 0.041, 0.039, 0.037, 0.035, 0.033, 0.031, 0.029, 0.028, 0.026, 0.025, 0.024, 0.023, 0.021, 0.020, 0.019, 0.017, 0.016, 0.015, 0.015, 0.014, 0.013, 0.014, 0.028, 0.053, 0.068, 0.065, 0.052, 0.010, 0.005}}, + {{-1.3799, -1.3656, -1.3467, -1.3258, -1.3066, -1.2861, -1.2674, -1.2505, -1.2317, -1.2131, -1.1943, -1.1067, -0.991, -0.8555, -0.7491, -0.6369, -0.538, -0.4125, -0.3244, -0.2095, -0.0402, 0.0608, 0.1913, 0.2717, 0.3814, 0.4941, 0.6096, 0.7283, 0.8512, 0.9469, 1.0463, 1.186, 1.2938, 1.3999, 1.5358, 1.6332, 1.7582, 1.8797, 1.9993, 2.1183, 2.2074, 2.3254, 2.4435, 2.5624, 2.6848, 2.782, 2.8895, 2.9766, 3.0331, 3.1913, 3.3343, 3.4193, 3.5645, 3.7097, 3.8261, 3.9394, 4.0555, 4.1939, 4.3138, 4.4318, 4.5515, 4.6707, 4.7884, 4.8982, 5.0166, 5.4675, 5.5836}, {0.492, 0.484, 0.477, 0.469, 0.462, 0.454, 0.446, 0.438, 0.429, 0.419, 0.400, 0.243, 0.225, 0.205, 0.191, 0.177, 0.166, 0.154, 0.146, 0.136, 0.123, 0.116, 0.108, 0.103, 0.097, 0.092, 0.086, 0.081, 0.076, 0.072, 0.069, 0.064, 0.061, 0.058, 0.054, 0.051, 0.048, 0.045, 0.043, 0.040, 0.039, 0.036, 0.034, 0.032, 0.030, 0.029, 0.028, 0.026, 0.026, 0.024, 0.022, 0.021, 0.020, 0.018, 0.017, 0.016, 0.016, 0.015, 0.014, 0.015, 0.037, 0.070, 0.082, 0.074, 0.057, 0.010, 0.005}}, + {{-1.3241, -1.3024, -1.2843, -1.2674, -1.2486, -1.2313, -1.2129, -1.1965, -1.1801, -1.162, -1.1444, -1.0679, -0.9539, -0.8393, -0.7203, -0.6123, -0.4973, -0.3748, -0.2668, -0.1535, -0.0353, 0.0876, 0.1893, 0.2937, 0.428, 0.5386, 0.6519, 0.768, 0.8877, 0.9806, 1.1096, 1.2114, 1.3168, 1.4573, 1.5591, 1.689, 1.783, 1.9048, 2.0243, 2.1429, 2.261, 2.3786, 2.4964, 2.615, 2.7061, 2.8333, 2.9387, 3.0212, 3.1347, 3.2126, 3.3678, 3.4453, 3.6035, 3.72, 3.8582, 3.9739, 4.0934, 4.21, 4.3464, 4.4702, 4.5872, 4.7094, 4.823, 4.937, 5.0521, 5.5163, 5.6259}, {0.497, 0.485, 0.478, 0.472, 0.464, 0.457, 0.449, 0.441, 0.433, 0.422, 0.406, 0.249, 0.230, 0.213, 0.197, 0.183, 0.171, 0.158, 0.148, 0.139, 0.129, 0.121, 0.114, 0.108, 0.101, 0.095, 0.090, 0.084, 0.079, 0.076, 0.071, 0.068, 0.064, 0.060, 0.057, 0.053, 0.051, 0.048, 0.045, 0.043, 0.040, 0.038, 0.036, 0.034, 0.033, 0.031, 0.029, 0.028, 0.026, 0.025, 0.024, 0.023, 0.021, 0.020, 0.019, 0.018, 0.017, 0.016, 0.015, 0.015, 0.033, 0.075, 0.091, 0.084, 0.066, 0.012, 0.006}}, + {{-1.2748, -1.2617, -1.243, -1.2222, -1.2062, -1.1857, -1.1696, -1.1506, -1.1342, -1.1161, -1.0983, -1.0982, -1.0048, -0.8907, -0.7758, -0.6568, -0.5491, -0.4349, -0.3133, -0.2063, -0.0944, 0.0223, 0.1434, 0.2435, 0.3723, 0.4781, 0.5866, 0.6978, 0.8115, 0.9283, 1.0492, 1.1434, 1.2752, 1.3784, 1.5165, 1.6172, 1.7462, 1.8394, 1.9606, 2.0795, 2.1975, 2.3151, 2.4324, 2.5497, 2.6679, 2.7579, 2.884, 2.9872, 3.0673, 3.1718, 3.2434, 3.4066, 3.4862, 3.6381, 3.7908, 3.9187, 4.0436, 4.1386, 4.2619, 4.3981, 4.5202, 4.6456, 4.7649, 4.8767, 4.9929, 5.1107, 5.5712, 5.6898}, {0.500, 0.493, 0.486, 0.477, 0.471, 0.462, 0.455, 0.446, 0.438, 0.427, 0.410, 0.409, 0.248, 0.230, 0.213, 0.197, 0.184, 0.171, 0.159, 0.149, 0.140, 0.131, 0.123, 0.116, 0.109, 0.103, 0.097, 0.092, 0.087, 0.082, 0.077, 0.074, 0.069, 0.066, 0.061, 0.059, 0.055, 0.053, 0.050, 0.047, 0.044, 0.042, 0.040, 0.037, 0.035, 0.034, 0.032, 0.030, 0.029, 0.028, 0.027, 0.025, 0.024, 0.022, 0.021, 0.019, 0.018, 0.017, 0.016, 0.015, 0.015, 0.023, 0.072, 0.095, 0.089, 0.069, 0.013, 0.007}}, + {{-1.2282, -1.2134, -1.1914, -1.1777, -1.1586, -1.1412, -1.1252, -1.1085, -1.0901, -1.0739, -1.0556, -0.9596, -0.8452, -0.7317, -0.6154, -0.5103, -0.3985, -0.2796, -0.1536, -0.0433, 0.0713, 0.1902, 0.2883, 0.4144, 0.5179, 0.6239, 0.7598, 0.8712, 0.9855, 1.1045, 1.1977, 1.3272, 1.4282, 1.53, 1.6629, 1.7907, 1.8831, 2.0032, 2.1209, 2.2378, 2.3544, 2.4709, 2.5875, 2.7049, 2.8246, 2.9183, 3.019, 3.1355, 3.243, 3.3166, 3.4013, 3.5653, 3.7081, 3.848, 3.9804, 4.0804, 4.182, 4.312, 4.4301, 4.5686, 4.6919, 4.8085, 4.9281, 5.042, 5.1558, 5.62, 5.7341}, {0.505, 0.496, 0.488, 0.482, 0.474, 0.466, 0.459, 0.451, 0.442, 0.432, 0.411, 0.250, 0.231, 0.215, 0.199, 0.186, 0.174, 0.162, 0.151, 0.141, 0.133, 0.124, 0.118, 0.111, 0.105, 0.099, 0.093, 0.088, 0.083, 0.078, 0.075, 0.070, 0.067, 0.064, 0.060, 0.056, 0.054, 0.051, 0.048, 0.046, 0.043, 0.041, 0.039, 0.037, 0.034, 0.033, 0.031, 0.030, 0.028, 0.027, 0.026, 0.024, 0.023, 0.021, 0.020, 0.019, 0.018, 0.017, 0.016, 0.015, 0.016, 0.041, 0.091, 0.091, 0.072, 0.015, 0.008}}, + {{-1.1861, -1.173, -1.1544, -1.1372, -1.1181, -1.1006, -1.0847, -1.0681, -1.0499, -1.0339, -1.0164, -0.9102, -0.7957, -0.6808, -0.563, -0.4575, -0.3462, -0.2285, -0.1253, 0.0041, 0.1164, 0.2327, 0.3284, 0.4514, 0.5777, 0.6812, 0.787, 0.9222, 1.0334, 1.1479, 1.2367, 1.3599, 1.4894, 1.5884, 1.7183, 1.8128, 1.9346, 2.0527, 2.1691, 2.2848, 2.4004, 2.5158, 2.6314, 2.7478, 2.8662, 2.9905, 3.0916, 3.1678, 3.2648, 3.329, 3.4874, 3.6441, 3.7595, 3.9044, 4.0054, 4.112, 4.2238, 4.37, 4.468, 4.6143, 4.7423, 4.854, 4.969, 5.0823, 5.2022}, {0.509, 0.502, 0.494, 0.487, 0.479, 0.471, 0.464, 0.456, 0.446, 0.436, 0.417, 0.251, 0.232, 0.215, 0.200, 0.187, 0.175, 0.163, 0.154, 0.143, 0.134, 0.126, 0.120, 0.113, 0.106, 0.101, 0.096, 0.089, 0.085, 0.080, 0.077, 0.073, 0.068, 0.065, 0.061, 0.059, 0.056, 0.053, 0.050, 0.047, 0.045, 0.042, 0.040, 0.038, 0.036, 0.034, 0.032, 0.031, 0.030, 0.029, 0.027, 0.025, 0.024, 0.022, 0.021, 0.020, 0.019, 0.018, 0.017, 0.016, 0.017, 0.054, 0.087, 0.090, 0.075}}, + {{-1.1391, -1.1296, -1.1048, -1.0857, -1.0706, -1.0566, -1.0413, -1.0254, -1.0101, -0.9963, -0.98, -0.9799, -0.8779, -0.763, -0.6477, -0.5301, -0.4254, -0.3157, -0.1999, -0.0783, 0.0275, 0.1594, 0.2732, 0.3669, 0.4871, 0.6103, 0.7111, 0.8399, 0.9452, 1.0527, 1.1631, 1.2771, 1.3957, 1.5201, 1.6159, 1.7429, 1.8667, 1.9862, 2.1027, 2.2176, 2.3319, 2.4461, 2.5598, 2.674, 2.7892, 2.9065, 2.9976, 3.1282, 3.2022, 3.2923, 3.4239, 3.501, 3.6543, 3.7816, 3.9384, 4.0383, 4.1733, 4.2771, 4.4096, 4.5277, 4.6302, 4.7659, 4.8901, 5.0054, 5.1315}, {0.515, 0.505, 0.494, 0.486, 0.479, 0.473, 0.465, 0.457, 0.449, 0.440, 0.422, 0.421, 0.254, 0.235, 0.217, 0.202, 0.189, 0.177, 0.165, 0.154, 0.145, 0.136, 0.128, 0.122, 0.114, 0.108, 0.102, 0.096, 0.091, 0.087, 0.082, 0.078, 0.074, 0.070, 0.067, 0.063, 0.060, 0.056, 0.053, 0.051, 0.048, 0.046, 0.043, 0.041, 0.039, 0.037, 0.035, 0.033, 0.032, 0.031, 0.029, 0.028, 0.026, 0.024, 0.023, 0.022, 0.020, 0.019, 0.018, 0.017, 0.017, 0.016, 0.033, 0.074, 0.087}}, + {{-1.1002, -1.0899, -1.0697, -1.0486, -1.0336, -1.0197, -1.0046, -0.9891, -0.9758, -0.9607, -0.9457, -0.8334, -0.7182, -0.6025, -0.5019, -0.3805, -0.2714, -0.1571, -0.0375, 0.0661, 0.1949, 0.306, 0.4201, 0.5372, 0.6571, 0.7549, 0.8797, 0.9815, 1.1113, 1.2181, 1.3279, 1.4418, 1.5608, 1.6834, 1.7754, 1.8951, 2.0121, 2.1257, 2.2662, 2.3777, 2.4892, 2.6013, 2.7139, 2.8273, 2.9426, 3.0623, 3.159, 3.2684, 3.363, 3.4257, 3.5679, 3.7112, 3.8697, 3.9732, 4.0717, 4.2033, 4.3044, 4.4347, 4.5521, 4.675, 4.8174}, {0.520, 0.508, 0.499, 0.490, 0.483, 0.477, 0.469, 0.461, 0.453, 0.443, 0.426, 0.254, 0.235, 0.218, 0.204, 0.189, 0.177, 0.166, 0.155, 0.147, 0.137, 0.129, 0.122, 0.115, 0.108, 0.103, 0.097, 0.093, 0.087, 0.083, 0.079, 0.075, 0.071, 0.067, 0.065, 0.061, 0.058, 0.055, 0.052, 0.049, 0.047, 0.044, 0.042, 0.040, 0.038, 0.036, 0.034, 0.033, 0.031, 0.030, 0.028, 0.027, 0.025, 0.024, 0.022, 0.021, 0.020, 0.019, 0.018, 0.017, 0.018}}, + {{-1.0724, -1.0605, -1.0318, -1.0252, -1.0095, -0.9922, -0.9766, -0.9604, -0.9466, -0.9295, -0.9136, -0.8008, -0.6847, -0.5848, -0.45, -0.3462, -0.2388, -0.1267, -0.0295, 0.1119, 0.2165, 0.3458, 0.4566, 0.57, 0.6859, 0.8041, 0.9002, 1.0224, 1.1472, 1.2491, 1.3537, 1.489, 1.6021, 1.7185, 1.835, 1.9492, 2.0614, 2.1708, 2.2797, 2.3877, 2.5242, 2.6332, 2.7432, 2.8547, 2.9681, 3.0857, 3.2122, 3.2839, 3.3691, 3.4888, 3.6226, 3.6904, 3.8745, 4.0199, 4.1171, 4.2455, 4.3909}, {0.523, 0.515, 0.502, 0.499, 0.492, 0.484, 0.476, 0.468, 0.460, 0.448, 0.430, 0.256, 0.236, 0.221, 0.203, 0.190, 0.179, 0.168, 0.159, 0.147, 0.139, 0.130, 0.123, 0.116, 0.110, 0.104, 0.099, 0.094, 0.089, 0.085, 0.081, 0.076, 0.072, 0.069, 0.065, 0.062, 0.059, 0.056, 0.054, 0.051, 0.048, 0.046, 0.044, 0.042, 0.039, 0.037, 0.035, 0.034, 0.033, 0.031, 0.029, 0.028, 0.026, 0.024, 0.023, 0.022, 0.021}}, + {{-1.0288, -1.0144, -0.9971, -0.9811, -0.9635, -0.9477, -0.9312, -0.9154, -0.8998, -0.883, -0.7793, -0.6636, -0.5472, -0.4293, -0.3082, -0.2006, -0.0892, 0.0261, 0.1453, 0.2473, 0.373, 0.4802, 0.6117, 0.7235, 0.8372, 0.9527, 1.0698, 1.1649, 1.2858, 1.4099, 1.512, 1.6175, 1.7542, 1.8643, 1.9736, 2.081, 2.2143, 2.3212, 2.4297, 2.5418, 2.7041}, {0.529, 0.513, 0.506, 0.498, 0.490, 0.482, 0.473, 0.464, 0.453, 0.433, 0.259, 0.239, 0.221, 0.205, 0.191, 0.179, 0.168, 0.158, 0.148, 0.140, 0.131, 0.125, 0.117, 0.111, 0.105, 0.100, 0.094, 0.090, 0.086, 0.081, 0.078, 0.074, 0.070, 0.067, 0.064, 0.061, 0.058, 0.055, 0.053, 0.050, 0.047}}, + {{-0.9957, -0.9864, -0.9735, -0.9549, -0.9359, -0.9224, -0.9076, -0.8947, -0.8818, -0.8675, -0.854, -0.8535, -0.7384, -0.6225, -0.5224, -0.4041, -0.2833, -0.1768, -0.0483, 0.0654, 0.1625, 0.2819, 0.404, 0.5077, 0.6343, 0.7415, 0.85, 0.982, 1.0932, 1.2056, 1.3196, 1.4359, 1.5556, 1.655, 1.7851, 1.8949}, {0.534, 0.519, 0.513, 0.504, 0.495, 0.488, 0.481, 0.473, 0.465, 0.455, 0.437, 0.281, 0.258, 0.238, 0.223, 0.207, 0.192, 0.180, 0.168, 0.158, 0.150, 0.141, 0.132, 0.126, 0.118, 0.112, 0.107, 0.101, 0.096, 0.091, 0.087, 0.083, 0.079, 0.075, 0.072, 0.068}}, + {{-0.9642, -0.942, -0.9276, -0.9153, -0.9011, -0.8907, -0.8763, -0.8638, -0.8515, -0.8393, -0.8264, -0.8244, -0.7094, -0.5935, -0.4764, -0.3748, -0.2541, -0.1482, -0.0213, 0.0905, 0.2048, 0.3214, 0.4401, 0.5403, 0.6621, 0.7852, 0.8886, 1.0135, 1.1183, 1.245, 1.3521, 1.4622, 1.606}, {0.539, 0.516, 0.509, 0.504, 0.496, 0.491, 0.483, 0.476, 0.468, 0.458, 0.441, 0.282, 0.259, 0.239, 0.221, 0.207, 0.193, 0.181, 0.168, 0.158, 0.149, 0.140, 0.132, 0.126, 0.119, 0.112, 0.107, 0.102, 0.097, 0.092, 0.088, 0.084, 0.079}}, + {{-0.9367, -0.9367, -0.918, -0.9015, -0.8859, -0.8682, -0.8475, -0.8371, -0.8246, -0.8125, -0.7996, -0.6873, -0.5711, -0.4537, -0.3348, -0.2314, -0.1084, -0.0007, 0.1091, 0.2396, 0.3532, 0.4682, 0.5842, 0.6814, 0.7985, 0.9157, 1.033, 1.1505, 1.2696, 1.4009}, {0.532, 0.532, 0.522, 0.514, 0.507, 0.498, 0.486, 0.480, 0.471, 0.462, 0.444, 0.261, 0.240, 0.222, 0.206, 0.194, 0.180, 0.170, 0.160, 0.149, 0.141, 0.133, 0.126, 0.120, 0.114, 0.108, 0.103, 0.098, 0.093, 0.088}}, + {{-0.9055, -0.8809, -0.87, -0.8576, -0.8437, -0.8335, -0.8218, -0.8096, -0.7976, -0.7861, -0.7743, -0.6605, -0.544, -0.4261, -0.3069, -0.2035, -0.081, 0.0256, 0.1518, 0.2612, 0.2612, 0.4829, 0.6129, 0.7242, 0.8349, 0.945, 1.073, 1.1978}, {0.547, 0.522, 0.516, 0.510, 0.502, 0.497, 0.490, 0.482, 0.474, 0.464, 0.447, 0.261, 0.240, 0.222, 0.206, 0.194, 0.180, 0.170, 0.159, 0.150, 0.150, 0.134, 0.126, 0.120, 0.114, 0.109, 0.103, 0.098}}, + {{-0.8807, -0.8592, -0.8406, -0.8279, -0.8176, -0.8079, -0.7964, -0.7844, -0.7727, -0.7627, -0.7504, -0.7497, -0.6351, -0.5189, -0.401, -0.2817, -0.1786, -0.0569, 0.0485, 0.1726, 0.2798, 0.4053, 0.5127, 0.6373, 0.7428, 0.8642, 0.9842, 1.1092}, {0.539, 0.527, 0.518, 0.511, 0.506, 0.500, 0.493, 0.485, 0.477, 0.469, 0.450, 0.285, 0.261, 0.241, 0.223, 0.206, 0.194, 0.181, 0.170, 0.159, 0.151, 0.142, 0.134, 0.127, 0.121, 0.115, 0.109, 0.104}}, + {{-0.848, -0.844, -0.825, -0.8074, -0.7892, -0.7752, -0.7625, -0.7468, -0.7337, -0.7197, -0.7048, -0.6004, -0.4836, -0.3656, -0.2466, -0.1438, -0.0236, 0.0967, 0.1996, 0.319, 0.437, 0.5527, 0.6651, 0.789, 0.9164}, {0.556, 0.552, 0.542, 0.533, 0.524, 0.516, 0.508, 0.499, 0.490, 0.478, 0.457, 0.265, 0.244, 0.225, 0.209, 0.196, 0.183, 0.171, 0.162, 0.152, 0.144, 0.136, 0.129, 0.123, 0.116}}, + {{-0.8019, -0.7969, -0.7866, -0.765, -0.7496, -0.7311, -0.7185, -0.7029, -0.6901, -0.6766, -0.6624, -0.6488, -0.5331, -0.4157, -0.3141, -0.1949, -0.0757, 0.0431, 0.1609, 0.2769, 0.3902, 0.4998, 0.6192, 0.7319}, {0.564, 0.559, 0.553, 0.542, 0.534, 0.523, 0.515, 0.505, 0.496, 0.485, 0.463, 0.283, 0.260, 0.239, 0.223, 0.207, 0.192, 0.180, 0.168, 0.158, 0.150, 0.142, 0.135, 0.128}}, + {{-0.7613, -0.7548, -0.7435, -0.7317, -0.7108, -0.6931, -0.6769, -0.662, -0.6515, -0.6384, -0.6245, -0.529, -0.4122, -0.2943, -0.1762, -0.0586, 0.0578, 0.1721, 0.2832, 0.4049, 0.5192, 0.6373}, {0.573, 0.568, 0.561, 0.555, 0.543, 0.532, 0.522, 0.512, 0.504, 0.492, 0.470, 0.267, 0.246, 0.227, 0.210, 0.195, 0.183, 0.171, 0.162, 0.152, 0.144, 0.137}}, + {{-0.6991, -0.6867, -0.6743, -0.6643, -0.6447, -0.6301, -0.6185, -0.6064, -0.595, -0.5832, -0.5711, -0.513, -0.4467, -0.3799, -0.3128, -0.2456, -0.1786, -0.1119, -0.0292, 0.036, 0.1003, 0.1788, 0.2398, 0.3134, 0.3834, 0.4494, 0.5226, 0.5896}, {0.582, 0.574, 0.567, 0.561, 0.549, 0.539, 0.531, 0.522, 0.513, 0.501, 0.479, 0.275, 0.262, 0.249, 0.238, 0.227, 0.217, 0.208, 0.198, 0.190, 0.183, 0.175, 0.170, 0.163, 0.158, 0.153, 0.148, 0.144}}, + {{-0.6517, -0.6416, -0.6064, -0.5957, -0.585, -0.5707, -0.5587, -0.5474, -0.5354, -0.5227, -0.4789, -0.4122, -0.3451, -0.2781, -0.2113, -0.1283, -0.0626, 0.0022, 0.0659, 0.1433, 0.2178, 0.2885, 0.3548, 0.4275, 0.4924}, {0.598, 0.590, 0.569, 0.561, 0.554, 0.544, 0.535, 0.525, 0.513, 0.488, 0.278, 0.264, 0.251, 0.239, 0.229, 0.216, 0.207, 0.199, 0.192, 0.183, 0.176, 0.169, 0.164, 0.158, 0.153}}, + {{-0.5886, -0.5764, -0.5603, -0.5442, -0.5284, -0.5163, -0.5069, -0.4869, -0.4757, -0.464, -0.4309, -0.3643, -0.2975, -0.2308, -0.1478, -0.0821, -0.0175, 0.0613, 0.1221, 0.1945, 0.2622, 0.336, 0.4102, 0.4787}, {0.615, 0.606, 0.595, 0.584, 0.573, 0.563, 0.556, 0.538, 0.525, 0.502, 0.280, 0.266, 0.252, 0.240, 0.227, 0.217, 0.208, 0.198, 0.191, 0.183, 0.176, 0.169, 0.163, 0.159}}, + {{-0.5367, -0.5315, -0.5175, -0.5042, -0.4918, -0.4778, -0.4633, -0.451, -0.4377, -0.4246, -0.4109, -0.3919, -0.3084, -0.2414, -0.1745, -0.1081, -0.0428, 0.0366, 0.0976, 0.1696, 0.2484, 0.3176, 0.3923, 0.4691}, {0.638, 0.631, 0.621, 0.612, 0.603, 0.592, 0.580, 0.569, 0.556, 0.541, 0.520, 0.282, 0.264, 0.251, 0.239, 0.228, 0.218, 0.206, 0.198, 0.190, 0.181, 0.175, 0.169, 0.164}}, + {{-0.4853, -0.4799, -0.4691, -0.4554, -0.4401, -0.4266, -0.4147, -0.4008, -0.3881, -0.3755, -0.3622, -0.3405, -0.2732, -0.2056, -0.1382, -0.0717, 0.0093, 0.0713, 0.1444, 0.2112, 0.2921, 0.3643, 0.4407}, {0.652, 0.650, 0.640, 0.630, 0.618, 0.606, 0.596, 0.582, 0.571, 0.559, 0.539, 0.281, 0.266, 0.252, 0.239, 0.228, 0.215, 0.206, 0.197, 0.189, 0.181, 0.175, 0.169}}, + {{-0.4429, -0.4377, -0.4252, -0.4095, -0.3944, -0.3811, -0.3695, -0.3558, -0.3433, -0.3299, -0.3171, -0.3099, -0.2419, -0.1734, -0.1053, -0.0385, 0.0263, 0.1028, 0.1732, 0.2476, 0.3174, 0.3917}, {0.675, 0.670, 0.660, 0.647, 0.634, 0.622, 0.612, 0.601, 0.590, 0.578, 0.558, 0.281, 0.266, 0.251, 0.238, 0.227, 0.216, 0.205, 0.196, 0.187, 0.180, 0.173}}, + {{-0.3454, -0.3328, -0.3263, -0.3165, -0.3051, -0.2959, -0.2853, -0.2751, -0.2739, -0.204, -0.1339, -0.0642, 0.0037, 0.0847, 0.1454, 0.2271, 0.2951, 0.3703, 0.447}, {0.702, 0.636, 0.630, 0.622, 0.613, 0.605, 0.595, 0.577, 0.283, 0.266, 0.251, 0.238, 0.225, 0.212, 0.203, 0.193, 0.185, 0.177, 0.169}}, + {{-0.3374, -0.3294, -0.3203, -0.3082, -0.2947, -0.2829, -0.2727, -0.2605, -0.2494, -0.2374, -0.226, -0.2184, -0.1636, -0.0905, -0.0184, 0.0518, 0.1179, 0.1947, 0.2624, 0.3381, 0.4155}, {0.707, 0.698, 0.690, 0.680, 0.669, 0.659, 0.651, 0.641, 0.631, 0.619, 0.600, 0.278, 0.265, 0.249, 0.234, 0.222, 0.211, 0.199, 0.190, 0.181, 0.173}}, + {{-0.2814, -0.2759, -0.2681, -0.2523, -0.2377, -0.2255, -0.2137, -0.2041, -0.1924, -0.1821, -0.1709, -0.1308, -0.0735, 0.0029, 0.0769, 0.1464, 0.2112, 0.2845, 0.3553, 0.4296, 0.5077}, {0.736, 0.729, 0.723, 0.709, 0.698, 0.687, 0.677, 0.668, 0.657, 0.647, 0.627, 0.265, 0.252, 0.236, 0.221, 0.209, 0.199, 0.189, 0.180, 0.171, 0.161}}, + {{-0.2439, -0.2434, -0.2267, -0.2112, -0.1951, -0.1832, -0.1708, -0.157, -0.1448, -0.1329, -0.1198, -0.0686, 0.0082, 0.0858, 0.1407, 0.2272, 0.292, 0.3613, 0.4354, 0.5159, 0.5721}, {0.781, 0.776, 0.760, 0.746, 0.733, 0.722, 0.712, 0.700, 0.689, 0.677, 0.654, 0.256, 0.239, 0.224, 0.214, 0.199, 0.190, 0.180, 0.171, 0.162, 0.158}}, + {{-0.2039, -0.1953, -0.1899, -0.1771, -0.1556, -0.1434, -0.1293, -0.1175, -0.104, -0.0915, -0.0789, -0.0129, 0.0599, 0.1337, 0.2068, 0.2765, 0.3422, 0.4126, 0.4884, 0.5674}, {0.801, 0.793, 0.789, 0.776, 0.757, 0.746, 0.734, 0.724, 0.711, 0.698, 0.675, 0.252, 0.232, 0.218, 0.205, 0.194, 0.184, 0.175, 0.165, 0.157}}, + {{-0.1677, -0.1592, -0.1421, -0.1298, -0.1159, -0.1013, -0.0868, -0.0731, -0.0593, -0.0454, -0.0312, 0.017, 0.0972, 0.1599, 0.2406, 0.2979, 0.3702, 0.4504, 0.5203, 0.5983, 0.6735}, {0.841, 0.831, 0.814, 0.803, 0.791, 0.778, 0.765, 0.752, 0.740, 0.725, 0.699, 0.262, 0.241, 0.226, 0.209, 0.197, 0.184, 0.172, 0.164, 0.155, 0.147}}, + {{-0.1202, -0.1111, -0.0941, -0.0788, -0.0626, -0.0486, -0.0346, -0.0195, -0.0049, 0.0095, 0.0238, 0.0382, 0.0953, 0.1756, 0.2393, 0.3211, 0.381, 0.4533, 0.5217, 0.5951, 0.674, 0.7481, 0.8196}, {0.878, 0.867, 0.850, 0.835, 0.821, 0.808, 0.796, 0.782, 0.768, 0.752, 0.725, 0.290, 0.271, 0.248, 0.233, 0.215, 0.203, 0.189, 0.177, 0.165, 0.151, 0.142, 0.135}}, + {{-0.0689, -0.0609, -0.0474, -0.0336, -0.0198, -0.0, 0.0233, 0.0385, 0.052, 0.0657, 0.0802, 0.1029, 0.1627, 0.232, 0.3074, 0.3674, 0.4451, 0.5197, 0.5885, 0.6534, 0.7327, 0.8048, 0.8844}, {0.911, 0.899, 0.885, 0.872, 0.858, 0.840, 0.819, 0.804, 0.791, 0.775, 0.743, 0.319, 0.292, 0.267, 0.245, 0.230, 0.213, 0.198, 0.185, 0.174, 0.160, 0.147, 0.133}}, + } +}; // B coefficients // Table in Appendix A of Hurley et al. 2000 diff --git a/src/typedefs.h b/src/typedefs.h index cc58128a1..23dc6e6cd 100755 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -940,12 +940,12 @@ enum class TIMESCALE: int { }; // critical mass ratio prescriptions -enum class QCRIT_PRESCRIPTION: int { NONE, CLAEYS, GE20, GE20_IC, HURLEY_HJELLMING_WEBBINK}; +enum class QCRIT_PRESCRIPTION: int { NONE, CLAEYS, GE, GE_IC, HURLEY_HJELLMING_WEBBINK}; const COMPASUnorderedMap QCRIT_PRESCRIPTION_LABEL = { { QCRIT_PRESCRIPTION::NONE, "NONE" }, { QCRIT_PRESCRIPTION::CLAEYS, "CLAEYS" }, - { QCRIT_PRESCRIPTION::GE20, "GE20" }, - { QCRIT_PRESCRIPTION::GE20_IC, "GE20_IC" }, + { QCRIT_PRESCRIPTION::GE_IC, "GE_IC" }, + { QCRIT_PRESCRIPTION::GE, "GE" }, { QCRIT_PRESCRIPTION::HURLEY_HJELLMING_WEBBINK, "HURLEY_HJELLMING_WEBBINK" }, }; From d52de3a88f29dc32035c6672abdeac119b397039 Mon Sep 17 00:00:00 2001 From: Reinhold Willcox Date: Mon, 18 Nov 2024 18:37:19 +0100 Subject: [PATCH 2/5] changelog --- src/changelog.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/changelog.h b/src/changelog.h index 6e47847e7..c54d4a689 100644 --- a/src/changelog.h +++ b/src/changelog.h @@ -1375,7 +1375,9 @@ // - Addressed documentation issues in issues #1272 and #1273. // 03.07.05 IM - Nov 07, 2024 - Defect repairs: // - Fix for issue #1270: root finder functions now check if either of the bracket edges provides a sufficiently good solution, which sometimes happens when the initial guess is very close to the truth +// 03.08.00 RTW - Nov 18, 2024 - Enhancement: +// - Added new critical mass ratio tables for He stars from Ge et al. team, now all of their Papers I-V are included -const std::string VERSION_STRING = "03.07.05"; +const std::string VERSION_STRING = "03.08.00"; # endif // __changelog_h__ From 13934370999bdc6a2297ab088d4d59749a02522c Mon Sep 17 00:00:00 2001 From: Reinhold Willcox Date: Mon, 18 Nov 2024 18:39:57 +0100 Subject: [PATCH 3/5] documentation --- .../Program options/program-options-list-defaults.rst | 6 +++--- online-docs/pages/whats-new.rst | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/online-docs/pages/User guide/Program options/program-options-list-defaults.rst b/online-docs/pages/User guide/Program options/program-options-list-defaults.rst index f1b117838..d362c6d05 100644 --- a/online-docs/pages/User guide/Program options/program-options-list-defaults.rst +++ b/online-docs/pages/User guide/Program options/program-options-list-defaults.rst @@ -311,11 +311,11 @@ Default = 1.28 **--critical-mass-ratio-prescription** |br| Critical mass ratio stability prescription (if any). |br| -Options: { NONE, ZERO, CLAEYS, GE20, GE20_IC, HURLEY_HJELLMING_WEBBINK } |br| +Options: { NONE, ZERO, CLAEYS, GE, GE_IC, HURLEY_HJELLMING_WEBBINK } |br| ``NONE`` defaults to the zeta prescription for stability. |br| ``CLAEYS`` uses qCrit values from Claeys et al. 2014. |br| -``GE20`` uses qCrit values from Ge et al. 2020 (adiabatic assumption). |br| -``GE20_IC`` uses qCrit values from Ge et al. 2020 (isentropic envelope assumption). |br| +``GE`` uses qCrit values from Ge et al. series (Papers I-V) (adiabatic assumption). |br| +``GE_IC`` uses qCrit values from Ge et al. series (Papers I-V) (isentropic envelope assumption). |br| ``HURLEY_HJELLMING_WEBBINK`` uses qCrit values from Hurley et al. 2002 (Hjellming & Webbink 1987 for mass transfer from a giant primary). |br| Warning: if running with ``--critical-mass-ratio-prescription``, zetas will not be computed, so should not be trusted in the outputs. |br| Default = NONE |br| diff --git a/online-docs/pages/whats-new.rst b/online-docs/pages/whats-new.rst index 2018d8bde..d3aa6d45f 100644 --- a/online-docs/pages/whats-new.rst +++ b/online-docs/pages/whats-new.rst @@ -3,6 +3,12 @@ What's new Following is a brief list of important updates to the COMPAS code. A complete record of changes can be found in the file ``changelog.h``. +**03.08.00 Nov 18, 2024** + +Updated implementation of the mass transfer stability critical mass ratio tables from the team of Hongwei Ge. +We now use all the most up to do date tables they've produced (public or otherwise) from Papers I-V, including +variations for adiabatic and isentropic treatments, variable accretion efficiency, and two different metallicities, +as well as for He stars (albeit only for adiabatic, fully conservative, solar metallicity stars). **03.07.01 Oct 23, 2024** From 4edbe96f8af3ba5b5897b7f27bc314ee9445fedb Mon Sep 17 00:00:00 2001 From: Reinhold Willcox Date: Mon, 18 Nov 2024 18:45:20 +0100 Subject: [PATCH 4/5] changelog again --- src/changelog.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/changelog.h b/src/changelog.h index c54d4a689..103643f3b 100644 --- a/src/changelog.h +++ b/src/changelog.h @@ -1376,7 +1376,9 @@ // 03.07.05 IM - Nov 07, 2024 - Defect repairs: // - Fix for issue #1270: root finder functions now check if either of the bracket edges provides a sufficiently good solution, which sometimes happens when the initial guess is very close to the truth // 03.08.00 RTW - Nov 18, 2024 - Enhancement: -// - Added new critical mass ratio tables for He stars from Ge et al. team, now all of their Papers I-V are included +// - Added new critical mass ratio tables for He stars from Ge et al. team +// - Cleaned up the stability calculation for H-rich stars as well, specifically implementing nearest neighbor for extrapolation +// - Now all of their results from Papers I-V are included (including those requested in private comm.) const std::string VERSION_STRING = "03.08.00"; From d92013989960af5d1d85121e0d6a9a335feb6427 Mon Sep 17 00:00:00 2001 From: Reinhold Willcox Date: Wed, 20 Nov 2024 10:48:55 +0100 Subject: [PATCH 5/5] added GE and GE_IC as replacement options in the critical-mass-transfer-stability-prescription --- src/Options.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Options.h b/src/Options.h index 65d4eb66f..345bb75e3 100755 --- a/src/Options.h +++ b/src/Options.h @@ -224,6 +224,8 @@ class Options { }; std::vector> deprecatedOptionValues = { + { "critical-mass-ratio-prescription", "GE20", "GE", false }, + { "critical-mass-ratio-prescription", "GE20_IC", "GE_IC", false }, { "LBV-mass-loss-prescription", "NONE", "ZERO", false }, { "luminous-blue-variable-prescription", "NONE", "ZERO", false }, { "OB-mass-loss", "NONE", "ZERO", false },