-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
--enable-tides Angular Momentum is not conserved #1034
Comments
This statement in the tides code in
@ilyamandel @veome22 Can you see anything wrong with that equation? We assume circular here. We use the root finder to calculate omega given (a) the mass of each constituent star The root finder finds omega, and the omega found satisfies equation (4) in the attached document (and equation (3) if we let Lf = Li). We then use the equation above to calculate a new semi-major axis using the omega found. But, if we then calculate the total angular momentum using the new semi-major axis, and eccentricity = 0, we get a slight difference from the total angular momentum we came in with - sometimes the difference is very small (< 0.03%), other times it is a few percent. So either the equation above is wrong for calculating semi-major axis, or the numbers (total angular momentum? In that how it was calculated is not the same as how we calculate it to check that it was conserved here) that we come in with are slightly wrong sometimes. |
I have been checking to see if the binary angular momentum computed using the Semi-Major Axis and Omega are consistent with each other. Right after the binary is synchronized, the relationship holds pretty well. This suggests to me that the formula itself is probably fine. However, I noticed that BEFORE the binary is synchronized, Semi-Major Axis and Omega DO NOT give equivalent values of angular momentum. I'm guessing this is because at the beginning of the synchronization call, the semi-major axis has been updated to reflect stellar evolution, but Omega has not. But since Do you think that could be an issue? |
We don't evolve omega for individual stars, or stars that are constituents of a binary, unless CHE is enabled (and only then for stars that are CH stars), or, now, when tides are enabled. When CHE is not enabled, and tides are not enabled, the total angular momentum is just the orbital angular momentum of the binary. So yes, before the binary is synchronised due to tides, if it is not evolving chemically homogeneously, omega for the constituent stars has not been evolved, and the total angular momentum for the binary is calculated with non-rotating constituent stars. Yes, that could be an issue. I'm wondering if the inconsistency of total angular momentum being for non-rotating stars sometimes, and for rotating stars at other times, is an issue we need to address - even in the documentation. @ilyamandel? |
I believe the problem here is that Should we change @ilyamandel thoughts? |
The moments of inertia are calculated in BaseBinaryStar::CalculateAngularMomentum() from the gyration radii as follows:
Assuming consistent inputs are passed, this should be identical to, say,
[Of course, it's a good idea to check if they are consistent... And yes, I would certainly prefer using actual stellar values to passing them in as BaseBinaryStar::CalculateAngularMomentum() does -- the former is more consistent with the OOP paradigm -- but I presume there was a reason for the latter choice. ;-) ] |
Ahh, sorry, I see your point -- CalculateGyrationRadius() for HG, FGB (and, by inheritance, CHeB) stars is not defined consistently with I agree, this is definitely a problem (and likely the problem). Well spotted, @jeffriley! (I didn't check that code when reviewing the tides PR... :( ) I personally think the simplest solution is to do away with gyration radii altogether (except in internal calculations, where relevant) and just work with moments of inertia -- including passing them in directly where gyration radii are currently passed in, as in BaseBinaryStar::CalculateAngularMomentum() . Otherwise, we end up having to recompute an effective gyration radius for giant stars to be consistent with GiantBranch::CalculateMomentOfInertia(). |
Fix for issue TeamCOMPAS#1034
Describe the bug
When using the
--enable-tides TRUE
option, the total angular momentum(m_TotalAngularMomentum)
of binaries is not conserved during tidal synchronization. For some binaries, the increase in angular momentum is >2% per time-step.Label the issue
urgency_moderate
- This is a moderately urgent issueseverity_moderate
- This is a moderately severe bugTo Reproduce
Using COMPAS v02.41.02, run
./COMPAS --number-of-systems 1 --random-seed 2 --eccentricity-distribution FLAT --enable-tides TRUE --initial-mass-function UNIFORM
In
BaseBinaryStar.cpp
, print the value ofm_TotalAngularMomentum
before and afterOmegaAfterSynchronisation()
at each time-step.Expected behavior
The tidal synchronization prescription should conserve total angular momentum when determining the final spins of the binary. The value of
m_TotalAngularMomentum
should, therefore, be the same during each call ofOmegaAfterSynchronisation()
.Screenshots

Detailed Output plot for the example binary:
Relative difference in Total and Orbital angular momentum for the binary. Note that the difference occurs when (either) one of the binary components evolves off the Main Sequence. [Edit: J_orbital plot has been updated to correctly reflect the difference after synchronization.]
Versioning (please complete the following information):
The text was updated successfully, but these errors were encountered: