Tabulated Weak Rate Example

Tabulated Weak Rate Example#

Here we walk through an example of a single network consisting of just 2 nuclei linked together by electron-capture and beta-decay.

We’ll consider 56Ni and 56Co. The evolution of this system is:

dYNidt=λecapYNi+λβYCo dYCodt=+λecapYNiλβYCo

where YNi and YCo are the molar fractions of the nuclei.

Let’s create a network with these rates.

pynucastro will use the tabulated rates from Langanke and Martínez-Pinedo [2001].

import pynucastro as pyna
tl = pyna.TabularLibrary()
lib = tl.linking_nuclei(["ni56", "co56"])
lib
Ni56 + e⁻ ⟶ Co56 + 𝜈           [Q =   2.13 MeV] (Ni56 --> Co56 <tabular_tabular>)
Co56 ⟶ Ni56 + e⁻ + 𝜈           [Q =  -2.13 MeV] (Co56 --> Ni56 <tabular_tabular>)

We’ll create a RateCollection so we can evaluate the rates easily

rc = pyna.RateCollection(libraries=[lib])
fig = rc.plot(curved_edges=True)
_images/09cea8bd83eb97f8b8de790322274ccbed3fc25ddc5d6ef65001e99207e42a7c.png

Let’s create a composition – we’ll make equal amounts of Ni and Co

comp = pyna.Composition(rc.unique_nuclei)
comp.set_equal()

We can see from the electron fraction that we are a little neutron-rich

Ye = comp.ye
Ye
0.4910714285714286

Now let’s compute the rates. We’ll pick a density (actually ρYe) and temperature right on one of the points tabulated in the original source so we can directly compare to what is in the table.

rho = 1.e7 / Ye
T = 1.e9

The rates are proportional to the molar fractions, so we can get those too:

Y = comp.get_molar()
Y
{Co56: 0.008928571428571428, Ni56: 0.008928571428571428}

Now we can evaluate the rates

rc.evaluate_rates(rho, T, comp)
{Co56 ⟶ Ni56 + e⁻ + 𝜈: 2.6914293082016787e-23,
 Ni56 + e⁻ ⟶ Co56 + 𝜈: 7.240723730837853e-06}
ydots = rc.evaluate_ydots(rho, T, comp)
ydots
{Co56: 7.240723730837853e-06, Ni56: -7.240723730837853e-06}

If we look at the original tables from Langanke and Martínez-Pinedo [2001], they tabulate (for the conditions we selected above):

 neg. daughter Ni56 z=28 n=28 a=56 Q= -1.6240                                           
 pos. daughter Co56 z=27 n=29 a=56 Q=  1.6240                                           
                      +++ Ni56 --> Co56 +++      --- Co56 --> Ni56 ---
   t9   lrho    uf    lbeta+    leps-    lrnu    lbeta-    leps+  lrnubar
...
  1.00  7.0   0.689  -15.299   -3.091   -3.097  -20.521  -23.856  -20.878
...

We see that there are 2 rates for 56Ni56Co: positron decay (lbeta+) and electron capture (leps-), and 2 rates for 56Co56Ni: beta-decay (lbeta-) and positron capture (leps+). All of these are log base-10 in s1.

In this case, the dominant rate is the electron capture. Let’s compute that rate manually

lambda_ec = 10.0**-3.091
r = Y[pyna.Nucleus("ni56")] * lambda_ec
r
7.240723730837861e-06

We get the same result as evaluate_rates()!

Finally, we can compute the evolution of the electron fraction:

Ye=kZkYk  dYedt=kZkdYkdt

dyedt = sum(q.Z * ydots[q] for q in rc.unique_nuclei)
dyedt
-7.240723730837865e-06