[Mesa-users] Binary system: angular momentum lost by accretor at breakup rotation

Pablo Marchant pamarca at gmail.com
Tue Feb 7 14:06:34 UTC 2023

Hi Ruggero,

The way this is dealt with can be a bit confusing, I'll try my best to
describe below but let me know if any of it does not add up. I'll be a bit
verbose and also point directly to the code in case you want to check these
things directly (and also cause I want to be unambiguous).

Whenever we model one step in the evolution of each star, the code uses a
total mdot which is the addition of contributions from the stellar wind and
the mass transfer rate (negative for the donor, positive for the accretor).
If we care about winds taking away angular momentum from the star, it can
be unclear what happens if, for instance, the mass transfer rate is equal
to the wind mass loss rate, resulting in no net mass loss from the star.

If you consider the case of a non-interacting star losing mass, angular
momentum is taken from the star matching its surface specific angular
momentum. The details on how this is done are in the subroutine
adjust_J_lost in $MESA_DIR/star/private/adjust_mass.f90. If this star is in
a binary the loss of orbital angular momentum is computed by assuming
material takes away the specific angular momentum that corresponds to the
mass losing component(s). This is done in the subroutine  default_jdot_ml
in in $MESA_DIR/binary/private/binary_jdot.f90. copying the relevant bit
here we have:

130          !mass lost from vicinity of donor
131          b% jdot_ml = (b% mdot_system_transfer(b% d_i) + b%
mdot_system_wind(b% d_i))*&
132              pow2(b% m(b% a_i)/(b% m(b% a_i)+b% m(b% d_i))*b%
separation)*2*pi/b% period *&
133              sqrt(1 - pow2(b% eccentricity))
134          !mass lost from vicinity of accretor
135          b% jdot_ml = b% jdot_ml + (b% mdot_system_transfer(b% a_i) +
b% mdot_system_wind(b% a_i))*&
136              pow2(b% m(b% d_i)/(b% m(b% a_i)+b% m(b% d_i))*b%
separation)*2*pi/b% period *&
137              sqrt(1 - pow2(b% eccentricity))
138          !mass lost from circumbinary coplanar toroid
139          b% jdot_ml = b% jdot_ml + b% mdot_system_cct * b%
mass_transfer_gamma * &
140              sqrt(standard_cgrav * (b% m(1) + b% m(2)) * b% separation)

The first two parts of this relate to mass being lost from the vicinity of
each component, while the third is to account for the ejection of material
that has settled in a circumbinary disk. mdot_system_transfer
and mdot_system_cct are computed directly from the mass transfer rate and
the value of the alpha, beta and delta factors, in your case those are set
to zero, so they do not play a role here (any mass lost due to being above
the Eddington limit is also included in these factors, but I guess that is
not relevant to you now). The value of mdot_system_wind is meant to account
for the net wind mass loss coming from each star, and it is computed in
$MESA_DIR/private/binary_evolve.f90, for instance this is what is done for
the donor

310          b% mdot_system_wind(b% d_i) = b% s_donor% mstar_dot - b%
mtransfer_rate &
311             + b% mdot_wind_transfer(b% a_i) - b% mdot_wind_transfer(b%

The idea here is to recover the wind mass loss from the total mdot of the
star minus any other contribution coming from mass transfer in the binary.

So now, consider there is no mass transfer in a binary model. If a star is
losing mass, the orbital angular momentum will be lowered as described
above, and you will also lose spin angular momentum from the star itself as
implemented in the adjust_J_lost subroutine (ie, taking its specific
surface angular momentum). If the star happens to be tidally coupled, the
loss of spin angular momentum will drain orbital angular momentum as the
star re-synchronizes.

Now if we consider the case where the wind is perfectly balanced with the
mass transfer rate, such that the net mdot on the donor is zero, the loss
of orbital angular momentum will still be computed as expected. However, as
the stellar model does not have any actual mass change, its spin angular
momentum will be unaffected. So this is where it becomes tricky, and one
could think one needs a correction to account for the loss of spin angular
momentum here. And there is an option to do this, implemented in the
subroutine default_jdot_missing_wind
in $MESA_DIR/binary/private/binary_jdot.f90. Just copying that subroutine
here we have:

183       subroutine default_jdot_missing_wind(binary_id, ierr)
184          integer, intent(in) :: binary_id
185          integer, intent(out) :: ierr
186          type (binary_info), pointer :: b
187          type (star_info), pointer :: s
188          ierr = 0
189          call binary_ptr(binary_id, b, ierr)
190          if (ierr /= 0) then
191             write(*,*) 'failed in binary_ptr'
192             return
193          end if
194          b% jdot_missing_wind = 0
195          if (b% point_mass_i /= 0) return
197          s => b% s_accretor
199          if (s% mstar_dot < 0) then
200             b% jdot_missing_wind = b% mtransfer_rate * b%
201          else
202             b% jdot_missing_wind = b% mdot_system_wind(b% a_i)
203          end if
204          b% jdot_missing_wind = b% jdot_missing_wind * s% j_rot(1)
206       end subroutine default_jdot_missing_wind

The idea here is that whatever spin mass loss was not accounted for due to
cancellation between wind and mass transfer rate is factored in as an
additional loss of orbital angular momentum. If you want to enable this
option you can use the option do_jdot_missing_wind, and you can also use
your own one if you want to use a different angular momentum loss.

So, that is a very long answer to what seems like a simple question. But in
actual implementation accounting for all these sources/sinks of angular
momentum can be tricky. Hope I did not miss any important details above,
and my explanation is good enough to be digestable by you :).

Let me know if (unsurprisingly perhaps) some of it remains unclear.


On Fri, Jan 27, 2023 at 7:56 PM Ruggero Valli <ruvalli at mpa-garching.mpg.de>

> Hi MESA users,
> I am modeling a binary during stable mass transfer with rotation enabled.
> I have set the mass transfer to be conservative
> mass_transfer_alpha = 0.0d0
> mass_transfer_beta = 0.0d0
> mass_transfer_delta = 0.0d0
> mass_transfer_gamma = 0.0d0
> and I am using the de Mink et al. 2013 model for the angular momentum of
> the matter that is accreted.
> do_j_accretion = .true.
> As soon as mass transfer starts, the accretor is spun up quickly to
> critical rotation (breakup), at which point it undergoes mass loss as
> described in controls.default ("For critical rotation mass loss"), until
> the surface falls below critical rotation again. And this excess mass
> appears to be lost from the binary system.
> *My question is the following: *what is the specific angular momentum
> that the code assumes for the mass that is lost due to the accretor being
> above critical rotation? Is this lost mass just handled as wind mass loss
> or does it have a different treatment?
> Thank you,
> Best regards,
> Ruggero
> _______________________________________________
> mesa-users at lists.mesastar.org
> https://lists.mesastar.org/mailman/listinfo/mesa-users

Pablo Marchant Campos
M.Sc on Astrophysics, Universidad Católica de Chile
PhD on Astrophysics, Argelander-Institut für Astronomie, Universität Bonn
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.mesastar.org/pipermail/mesa-users/attachments/20230207/8599ad94/attachment.htm>

More information about the Mesa-users mailing list