Skip to content

Commit 76b6fce

Browse files
committed
Added pseudo-synchronization limit for KAPIL2025 tides, based on Hut (1981) Eq 42
1 parent 428dc2d commit 76b6fce

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/BaseBinaryStar.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,16 +1121,22 @@ double BaseBinaryStar::CalculateDOmegaTidalDt(const DBL_DBL_DBL_DBL p_ImKnm, con
11211121
double radiusStar = p_Star->Radius();
11221122
double massCompanion = p_Star == m_Star1 ? m_Star2->Mass() : m_Star1->Mass();
11231123

1124+
double e2 = m_Eccentricity * m_Eccentricity;
1125+
double e4 = e2 * e2;
1126+
double e6 = e4 * e2;
1127+
11241128
double ImK10, ImK12, ImK22, ImK32;
11251129
std::tie(ImK10, ImK12, ImK22, ImK32) = p_ImKnm;
11261130

11271131
double R1_AU = radiusStar * RSOL_TO_AU;
11281132
double R1_over_a = R1_AU / m_SemiMajorAxis;
11291133
double R1_over_a_6 = R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a;
1130-
double e2_spin_term = (m_Eccentricity * m_Eccentricity) * ((ImK12 / 4.0) - (5.0 * ImK22) + (49.0 * ImK32 / 4.0));
1134+
double e2_spin_term = e2 * ((ImK12 / 4.0) - (5.0 * ImK22) + (49.0 * ImK32 / 4.0));
1135+
1136+
double pseudo_sync_limit = OrbitalAngularVelocity() * (1.0 + (15.0 / 2.0) * e2 + (45.0 / 8.0) * e4 + (5.0 / 16.0) * e6) / ((1.0 + 3.0 * e2 + (3.0 / 8.0) * e4) * std::pow(1.0 - e2, 1.5)); // Hut 1981, Eq. (42)
11311137

11321138
// if the star is rotating (super) synchronously AND quadratic 'e' terms cause the star to spin up further, ignore the higher order terms
1133-
if ((utils::Compare(p_Star->Omega(), OrbitalAngularVelocity()) > 0) && (utils::Compare((ImK22 + e2_spin_term), 0.0) > 0)){e2_spin_term = 0.0;}
1139+
if ((utils::Compare(p_Star->Omega(), pseudo_sync_limit) > 0) && (utils::Compare((ImK22 + e2_spin_term), 0.0) > 0)){e2_spin_term = 0.0;}
11341140
return (3.0 / 2.0) * (1.0 / MoIstar) * (G_AU_Msol_yr * massCompanion * massCompanion / R1_AU) * R1_over_a_6 * (ImK22 + e2_spin_term);
11351141
}
11361142

@@ -1152,19 +1158,25 @@ double BaseBinaryStar::CalculateDSemiMajorAxisTidalDt(const DBL_DBL_DBL_DBL p_Im
11521158
double radiusStar = p_Star->Radius();
11531159
double massCompanion = p_Star == m_Star1 ? m_Star2->Mass() : m_Star1->Mass();
11541160

1161+
double e2 = m_Eccentricity * m_Eccentricity;
1162+
double e4 = e2 * e2;
1163+
double e6 = e4 * e2;
1164+
11551165
double ImK10, ImK12, ImK22, ImK32;
11561166
std::tie(ImK10, ImK12, ImK22, ImK32) = p_ImKnm;
11571167

11581168
double R1_AU = radiusStar * RSOL_TO_AU;
11591169
double R1_over_a = R1_AU / m_SemiMajorAxis;
11601170
double R1_over_a_7 = R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a;
1161-
double e2_sma_term = (m_Eccentricity * m_Eccentricity) * ((3.0 * ImK10 / 4.0) + (ImK12 / 8.0) - (5.0 * ImK22) + (147.0 * ImK32 / 8.0));
1171+
double e2_sma_term = e2 * ((3.0 * ImK10 / 4.0) + (ImK12 / 8.0) - (5.0 * ImK22) + (147.0 * ImK32 / 8.0));
1172+
1173+
double pseudo_sync_limit = OrbitalAngularVelocity() * (1.0 + (15.0 / 2.0) * e2 + (45.0 / 8.0) * e4 + (5.0 / 16.0) * e6) / ((1.0 + 3.0 * e2 + (3.0 / 8.0) * e4) * std::pow(1.0 - e2, 1.5)); // Hut 1981, Eq. (42)
11621174

11631175
// if the star is rotating (super) synchronously AND quadratic 'e' terms cause the star to spin up further, ignore the higher order terms.
11641176
// Note: here we use the SPIN e^2 terms (not the semi-major axis terms) to determine when to ignore the higher order terms in semi-major axis evolution.
11651177
// this is to ensure that the higher order terms are always consistently applied/ignored across the tidal evolution equations.
1166-
double e2_spin_term = (m_Eccentricity * m_Eccentricity) * ((ImK12 / 4.0) - (5.0 * ImK22) + (49.0 * ImK32 / 4.0));
1167-
if ((utils::Compare(p_Star->Omega(), OrbitalAngularVelocity()) > 0) && (utils::Compare((ImK22 + e2_spin_term), 0.0) > 0)){e2_sma_term = 0.0;}
1178+
double e2_spin_term = e2 * ((ImK12 / 4.0) - (5.0 * ImK22) + (49.0 * ImK32 / 4.0));
1179+
if ((utils::Compare(p_Star->Omega(), pseudo_sync_limit) > 0) && (utils::Compare((ImK22 + e2_spin_term), 0.0) > 0)){e2_sma_term = 0.0;}
11681180

11691181
return -(3.0 / OrbitalAngularVelocity()) * (1.0 + (massCompanion / massStar)) * (G_AU_Msol_yr * massCompanion / R1_AU / R1_AU) * R1_over_a_7 * (ImK22 + e2_sma_term);
11701182
}

0 commit comments

Comments
 (0)