Polytropic Stellar Models and the Lane-Emden Equation#

This tutorial uses physicskit.astro.stellar_structure to build simple self-gravitating stellar models from the Lane-Emden equation, and to check two of astrophysics’ best-known mass scales.

Solving the Lane-Emden equation#

A polytrope – a self-gravitating gas sphere with equation of state \(P=K\rho^{1+1/n}\) – has a dimensionless hydrostatic-equilibrium profile \(\theta(\xi)\) governed by the Lane-Emden equation, solved by lane_emden():

from physicskit.astro.stellar_structure import lane_emden

for n in [0.0, 1.0, 1.5, 3.0]:
    xi, theta = lane_emden(n)
    print(n, xi[-1])
# 0.0 2.449...  (exact: sqrt(6))
# 1.0 3.1416...  (exact: pi)
# 1.5 3.6538...
# 3.0 6.8968...

The point where \(\theta\) first reaches zero is the star’s surface (density hits zero there); larger polytropic index n – a softer, more centrally-concentrated equation of state – pushes that dimensionless surface radius further out. The \(n=0\) (uniform density) and \(n=1\) cases have simple closed forms, \(\theta=1-\xi^2/6\) and \(\theta=\sin\xi/\xi\), matching the numerical surfaces \(\sqrt6\) and \(\pi\) exactly – a good sanity check that the solver is correct.

Building a physical star#

PolytropicStar turns a Lane-Emden solution into a physical star, given a polytropic constant K and central density rho_c:

from physicskit.astro.stellar_structure import PolytropicStar

star = PolytropicStar(n=1.5, K=1.0, rho_c=1.0)
print(star.radius)  # 1.6297  (n=1.5 is a reasonable model for a fully
print(star.mass)    # 3.0279  # convective star, e.g. a low-mass red dwarf)

\(n=1.5\) is the classic model for a fully convective star; n=3 (the Eddington standard model, and the same index behind the Chandrasekhar mass below) gives a more centrally concentrated star of the same central density and polytropic constant:

star3 = PolytropicStar(n=3.0, K=1.0, rho_c=1.0)
print(star3.radius, star3.mass)  # 3.891  4.557 -- bigger and more massive
                                  # at the same rho_c, K

The Chandrasekhar mass and the mass-luminosity relation#

An \(n=3\) polytrope supported by relativistic electron degeneracy pressure – a white dwarf – has a maximum possible mass independent of its central density, the Chandrasekhar limit, chandrasekhar_mass():

from physicskit.astro.stellar_structure import chandrasekhar_mass, main_sequence_luminosity

print(chandrasekhar_mass(mu_e=2.0))  # 1.4575 solar masses

matching the textbook value of roughly 1.4 solar masses for a carbon-oxygen white dwarf (\(\mu_e=2\)) – above this mass, electron degeneracy pressure can no longer hold the star up against its own gravity, and it either collapses further or, if enough mass accretes onto it from a companion, detonates as a Type Ia supernova.

For ordinary main-sequence stars, luminosity climbs steeply with mass – main_sequence_luminosity() implements the empirical \(L\propto M^{3.5}\) scaling:

print(main_sequence_luminosity(1.0))    # 1.0 (the Sun, by definition)
print(main_sequence_luminosity(10.0))   # 3162 -- a 10-solar-mass star is
                                         # over 3000x as luminous

This steep scaling is why massive stars burn through their nuclear fuel so much faster than the Sun, despite starting with more of it – and therefore live dramatically shorter lives.

See Also#