Computing the Screened Triple-alpha rate#
We want to evaluate the 3-
import pynucastro as pyna
We’ll define the thermodynamics first – a composition of just He and C
temp = 1.e8
dens = 1.e6
he4 = pyna.Nucleus("he4")
c12 = pyna.Nucleus("c12")
nuclei = [he4, c12]
comp = pyna.Composition(nuclei)
comp.X[he4] = 0.9
comp.X[c12] = 0.1
fig = comp.plot()

Manual method#
Here well read in this rate and compute the screening factors ourselves and then build up the full form of the rate
rl = pyna.ReacLibLibrary()
triple_alpha = rl.get_rate_by_name("a(aa,)c12")
Here’s the temperature sensitivity of just the 3-
fig = triple_alpha.plot(Tmin=5.e7)

To compute the screening, we first need to get the plasma state
plasma = pyna.make_plasma_state(temp, dens, comp.get_molar())
Now, the 3-
scn_fac1 = pyna.make_screen_factors(he4, he4)
scn1 = pyna.screening.screen5(plasma, scn_fac1)
scn_fac2 = pyna.make_screen_factors(he4, pyna.Nucleus("be8"))
scn2 = pyna.screening.screen5(plasma, scn_fac2)
scn = scn1 * scn2
print(f"{scn:20.10g}")
5.802207275
This shows that our our thermodynamic conditions, screening speeds up the rate by almost
Now, the total rate is:
where
We get
r = scn * dens**2 / 6.0 * comp.get_molar()[he4]**3 * triple_alpha.eval(temp)
print(f"{r:20.10g}")
2.247437735e-14
This is the rate in units of
Computing it via a RateCollection#
We can build a simple RateCollection
containing only this rate
rc = pyna.RateCollection(rates=[triple_alpha])
fig = rc.plot()

The evaluate_rates()
method will take the thermodynamic state and screening function (optionally) and compute the value of each of the rates in the network.
rc.evaluate_rates(dens, temp, comp, screen_func=pyna.screening.screen5)
{3 He4 ⟶ C12 + 𝛾: 2.2474377346294803e-14}
We see that we get the same value as computing it manually.