Skip to content

Commit b27d344

Browse files
committed
(lambda_enhancements) add enhanced Nanjing lambda option
1 parent 1540d15 commit b27d344

File tree

18 files changed

+202
-304
lines changed

18 files changed

+202
-304
lines changed

src/BaseStar.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,9 +1092,9 @@ double BaseStar::CalculateLambdaLoveridgeEnergyFormalism(const double p_EnvMass,
10921092
*
10931093
* @return Common envelope lambda parameter
10941094
*/
1095-
double BaseStar::EvaluateLambdaNanjing() {
1095+
double BaseStar::EvaluateLambdaNanjing() const {
10961096
double mass = m_MZAMS;
1097-
if (OPTIONS->CommonEnvelopeLambdaNanjingUseRejuvenatedMass()) {mass = m_Mass0} // Use rejuvenated mass to calculate lambda instead of true birth mass
1097+
if (OPTIONS->CommonEnvelopeLambdaNanjingUseRejuvenatedMass()) {mass = m_Mass0;} // Use rejuvenated mass to calculate lambda instead of true birth mass
10981098

10991099
if (OPTIONS->CommonEnvelopeLambdaNanjingEnhanced()) { // If using enhanced Nanjing lambda's
11001100
if (OPTIONS->CommonEnvelopeLambdaNanjingInterpolateInMass()) {
@@ -1103,23 +1103,23 @@ double BaseStar::EvaluateLambdaNanjing() {
11031103
}
11041104
else {
11051105
int Zind = 0;
1106-
if (utils::Compare(m_Metallicity, LAMBDA_NANJING_ZLIMIT) < 0) {Zind = 0} else {Zind = 1}
1106+
if (utils::Compare(m_Metallicity, LAMBDA_NANJING_ZLIMIT) < 0) {Zind = 0;} else {Zind = 1;}
11071107
return BaseStar::CalculateMassInterpolatedLambdaNanjing(mass, Zind);
11081108
}
11091109
}
11101110
else {
1111-
int massInd = BaseStar::FindLambdaNanjingNearestMassIndex(p_Mass); // Do not interpolate in mass, so need to use nearest mass bin
1111+
int massInd = BaseStar::FindLambdaNanjingNearestMassIndex(mass); // Do not interpolate in mass, so need to use nearest mass bin
11121112
if (OPTIONS->CommonEnvelopeLambdaNanjingInterpolateInMetallicity()) {
1113-
return BaseStar::CalculateZInterpolatedLambdaNanjing(m_Metallicity, massInd)
1113+
return BaseStar::CalculateZInterpolatedLambdaNanjing(m_Metallicity, massInd);
11141114
}
11151115
else {
11161116
int Zind = 0;
1117-
if (utils::Compare(m_Metallicity, LAMBDA_NANJING_ZLIMIT) < 0) {Zind = 0} else {Zind = 1}
1117+
if (utils::Compare(m_Metallicity, LAMBDA_NANJING_ZLIMIT) < 0) {Zind = 0;} else {Zind = 1;}
11181118
return BaseStar::CalculateLambdaNanjingEnhanced(massInd, Zind);
11191119
}
11201120
}
11211121
}
1122-
else {return BaseStar::CalculateLambdaNanjing(mass, m_Metallicity)} // Use default Nanjing Lambda's as implemented in STARTRACK (no mass nor metallicity interpolation)
1122+
else {return BaseStar::CalculateLambdaNanjing(mass, m_Metallicity);} // Use default Nanjing Lambda's as implemented in STARTRACK (no mass nor metallicity interpolation)
11231123
}
11241124

11251125

@@ -1131,18 +1131,18 @@ double BaseStar::EvaluateLambdaNanjing() {
11311131
*
11321132
* @return Common envelope lambda parameter
11331133
*/
1134-
double BaseStar::CalculateMassAndZInterpolatedLambdaNanjing(const double p_Mass, const double p_Z) {
1134+
double BaseStar::CalculateMassAndZInterpolatedLambdaNanjing(const double p_Mass, const double p_Z) const {
11351135

11361136
if (utils::Compare(m_Metallicity, LAMBDA_NANJING_POPII_Z) < 0) {
1137-
return BaseStar::CalculateMassInterpolatedLambdaNanjing(mass, 0); // Use lambda for pop. II metallicity
1137+
return BaseStar::CalculateMassInterpolatedLambdaNanjing(p_Mass, 0); // Use lambda for pop. II metallicity
11381138
}
11391139
else if (utils::Compare(m_Metallicity, LAMBDA_NANJING_POPI_Z) > 0) {
1140-
return BaseStar::CalculateMassInterpolatedLambdaNanjing(mass, 1); // Use lambda for pop. I metallicity
1140+
return BaseStar::CalculateMassInterpolatedLambdaNanjing(p_Mass, 1); // Use lambda for pop. I metallicity
11411141
}
1142-
else { // Linear interpolation in logZ between pop. I and pop. II metallicities
1142+
else { // Linear interpolation in logZ between pop. I and pop. II metallicities
11431143
const double logZ = log(m_Metallicity);
1144-
double lambdaLow = BaseStar::CalculateMassInterpolatedLambdaNanjing(mass, 0);
1145-
double lambdaUp = BaseStar::CalculateMassInterpolatedLambdaNanjing(mass, 1);
1144+
double lambdaLow = BaseStar::CalculateMassInterpolatedLambdaNanjing(p_Mass, 0);
1145+
double lambdaUp = BaseStar::CalculateMassInterpolatedLambdaNanjing(p_Mass, 1);
11461146
return lambdaLow + (logZ - LAMBDA_NANJING_POPII_LOGZ) / (LAMBDA_NANJING_POPI_LOGZ - LAMBDA_NANJING_POPII_LOGZ) * (lambdaUp - lambdaLow);
11471147
}
11481148
}
@@ -1158,7 +1158,7 @@ double BaseStar::CalculateMassAndZInterpolatedLambdaNanjing(const double p_Mass,
11581158
* @param [IN] p_Mass Mass / Msun to evaluate lambda with
11591159
* @return Common envelope lambda parameter
11601160
*/
1161-
double BaseStar::CalculateMassInterpolatedLambdaNanjing(const double p_Mass, const int p_Zind) {
1161+
double BaseStar::CalculateMassInterpolatedLambdaNanjing(const double p_Mass, const int p_Zind) const {
11621162

11631163
std::vector<int> ind = utils::binarySearch(NANJING_MASSES, p_Mass);
11641164
int low = ind[0];
@@ -1190,7 +1190,7 @@ double BaseStar::CalculateMassInterpolatedLambdaNanjing(const double p_Mass, con
11901190
* @param [IN] p_MassInd Index specifying donor mass (see NANJING_MASSES in constants.h)
11911191
* @return Common envelope lambda parameter
11921192
*/
1193-
double BaseStar::CalculateZInterpolatedLambdaNanjing(const double p_Z, const int p_MassInd) {
1193+
double BaseStar::CalculateZInterpolatedLambdaNanjing(const double p_Z, const int p_MassInd) const {
11941194

11951195
if (utils::Compare(m_Metallicity, LAMBDA_NANJING_POPII_Z) < 0) {
11961196
return BaseStar::CalculateLambdaNanjingEnhanced(p_MassInd, 0); // Use lambda for pop. II metallicity
@@ -1215,7 +1215,7 @@ double BaseStar::CalculateZInterpolatedLambdaNanjing(const double p_Z, const int
12151215
*
12161216
* @return Index in NANJING_MASSES
12171217
*/
1218-
double BaseStar::FindLambdaNanjingNearestMassIndex(const double p_Mass) {
1218+
double BaseStar::FindLambdaNanjingNearestMassIndex(const double p_Mass) const {
12191219

12201220
if (p_Mass < NANJING_MASSES_MIDPOINTS[0]) { // M < 1.5 Msun, use lambda for the 1 Msun model
12211221
return 0;
@@ -1323,7 +1323,7 @@ double BaseStar::CalculateZadiabatic(ZETA_PRESCRIPTION p_ZetaPrescription) {
13231323
void BaseStar::CalculateLambdas(const double p_EnvMass) {
13241324

13251325
m_Lambdas.fixed = OPTIONS->CommonEnvelopeLambda();
1326-
m_Lambdas.nanjing = CalculateMassAndZInterpolatedLambdaNanjing();
1326+
m_Lambdas.nanjing = EvaluateLambdaNanjing();
13271327
m_Lambdas.loveridge = CalculateLambdaLoveridgeEnergyFormalism(p_EnvMass, false);
13281328
m_Lambdas.loveridgeWinds = CalculateLambdaLoveridgeEnergyFormalism(p_EnvMass, true);
13291329
m_Lambdas.kruckow = CalculateLambdaKruckow(m_Radius, OPTIONS->CommonEnvelopeSlopeKruckow());

src/BaseStar.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,8 +386,8 @@ class BaseStar {
386386
virtual double CalculateLambdaDewi() const { SHOW_WARN(ERROR::NO_LAMBDA_DEWI, "Default used: 1.0"); return 1.0; } // Not supported: show error
387387
double CalculateLambdaKruckow(const double p_Radius, const double p_Alpha) const;
388388
double CalculateLambdaLoveridgeEnergyFormalism(const double p_EnvMass, const double p_IsMassLoss = false) const;
389-
virtual double CalculateLambdaNanjing() const { SHOW_WARN(ERROR::NO_LAMBDA_NANJING, "Default used: 1.0"); return 1.0; } // Not supported: show error
390-
virtual double CalculateLambdaNanjingEnhanced() const { SHOW_WARN(ERROR::NO_LAMBDA_NANJING, "Default used: 1.0"); return 1.0; } // Not supported: show error
389+
virtual double CalculateLambdaNanjing(const double p_Mass, const double p_Metallicity) const { SHOW_WARN(ERROR::NO_LAMBDA_NANJING, "Default used: 1.0"); return 1.0; } // Not supported: show error
390+
virtual double CalculateLambdaNanjingEnhanced(const int p_MassInd, const int p_Zind) const { SHOW_WARN(ERROR::NO_LAMBDA_NANJING, "Default used: 1.0"); return 1.0; } // Not supported: show error
391391

392392
void CalculateLCoefficients(const double p_LogMetallicityXi, DBL_VECTOR &p_LCoefficients);
393393

@@ -402,6 +402,10 @@ class BaseStar {
402402
double CalculateLuminosityGivenCoreMass(const double p_CoreMass) const;
403403
virtual double CalculateLuminosityOnPhase() const { return m_Luminosity; } // Default is NO-OP
404404

405+
double CalculateMassAndZInterpolatedLambdaNanjing(const double p_Mass, const double p_Z) const;
406+
double CalculateMassInterpolatedLambdaNanjing(const double p_Mass, const int p_Zind) const;
407+
double CalculateZInterpolatedLambdaNanjing(const double p_Z, const int p_MassInd) const;
408+
405409
void CalculateMassCutoffs(const double p_Metallicity, const double p_LogMetallicityXi, DBL_VECTOR &p_MassCutoffs);
406410

407411
static double CalculateMassLoss_Static(const double p_Mass, const double p_Mdot, const double p_Dt);
@@ -499,12 +503,14 @@ class BaseStar {
499503
const double p_EjectaMass,
500504
const double p_RemnantMass) const;
501505

506+
double EvaluateLambdaNanjing() const;
502507
virtual void EvolveOneTimestepPreamble() { }; // Default is NO-OP
503508

504509
STELLAR_TYPE EvolveOnPhase();
505510

506511
virtual STELLAR_TYPE EvolveToNextPhase() { return m_StellarType; }
507512

513+
double FindLambdaNanjingNearestMassIndex(const double p_Mass) const;
508514

509515
virtual bool IsEndOfPhase() const { return false; }
510516
virtual bool IsSupernova() const { return false; }

0 commit comments

Comments
 (0)