hot-CNO and breakout#

import pynucastro as pyna
rl = pyna.ReacLibLibrary()

Transition from CNO to hot-CNO#

We’ll start with nuclei involved in main CNO and hot-CNO cycles. We won’t worry about the CNO-II, CNO-III, and variations of hot-CNO.

Also, we’ll remove the 3-\(\alpha\) rate, since it is not dominant at the temperatures we are considering here.

linking_nuclei = ["p", "he4",
                  "c12", "c13",
                  "n13", "n14", "n15",
                  "o14", "o15",]
lib = rl.linking_nuclei(linking_nuclei, with_reverse=False)
r3a = lib.get_rate_by_name("he4(aa,g)c12")
lib.remove_rate(r3a)
rc = pyna.RateCollection(libraries=lib)

To evaluate the rates, we need a composition. This is defined using a list of Nucleus objects.

comp = pyna.Composition(rc.get_nuclei())
comp.set_solar_like()

Let’s look at the CNO cycle at a temperature and density just a bit hotter than the Sun’s core

T = 2.e7
rho = 200

When we plot, we’ll use a cut on the rates consuming a nucleus, to only show those within 5% of the fastest rate. This will hide links that are not important at the current thermodynamic conditions.

fig = rc.plot(rho=rho, T=T, comp=comp,
              consuming_rate_threshold=0.05,
              show_small_ydot=True,
              ydot_cutoff_value=1.e-20)
../_images/213c47b3230acc6c9c901d64484290894e0b5811bf1d4d0b2eb495ee38d526ae.png

Starting at \({}^{12}\mathrm{C}\), we see the following sequence dominate:

  • We capture a proton to make \({}^{13}\mathrm{N}\)

  • \({}^{13}\mathrm{N}\) almost immediately beta decays to \({}^{13}\mathrm{C}\), since the beta-decay rate is so much faster than a proton capture on \({}^{13}\mathrm{N}\).

  • We continue with proton captures, making \({}^{14}\mathrm{N}\) and then \({}^{15}\mathrm{O}\)

  • \({}^{15}\mathrm{O}\) then beta-decays to get \({}^{15}\mathrm{N}\)

  • Finally, one last proton capture, doing \({}^{15}\mathrm{N}(p,\alpha){}^{12}\mathrm{C}\), getting us back to where we started.

This is the basic CNO cycle

Now let’s make it a bit hotter

T = 3.e8
fig = rc.plot(rho=rho, T=T, comp=comp,
              consuming_rate_threshold=0.05,
              show_small_ydot=True,
              ydot_cutoff_value=1.e-20)
../_images/4657fcec30686bfe8f75b01ca9bf4c78561de832674d659a48d1bdf1cd2f6519.png

Now we see that the proton capture on \({}^{13}\mathrm{N}\) is faster than the beta-decay, and we make \({}^{14}\mathrm{O}\). Then the cycle continues as before.

As we increase the temperature and density further, we see that the beta decays become the rate-limiting steps.

T = 5.e8
rho = 1.e4
fig = rc.plot(rho=rho, T=T, comp=comp,
              consuming_rate_threshold=0.05,
              show_small_ydot=True,
              ydot_cutoff_value=1.e-20)
../_images/da82b1fda3f62447b4aff1f5729a24af053a63b1924a0e0d84c5d586e49b50ee.png

Since the beta-decays are temperature independent (you just have to wait for the nucleus to decay), the overall hot-CNO rate becomes insensitive to temperature.

When does hot-CNO set in?#

We can look at the temperature where we cross from CNO to hot-CNO by looking at the rates involving \({}^{13}\mathrm{N}\)

r1 = rl.get_rate_by_name("n13(p,g)o14")
r2 = rl.get_rate_by_name("n13(,)c13")
import numpy as np
import matplotlib.pyplot as plt
T = np.logspace(7.5, 8.5, 100)

rate_p_capture = [r1.eval(temp) for temp in T]
rate_beta_decay = [r2.eval(temp) for temp in T]
fig, ax = plt.subplots()
ax.plot(T, rate_p_capture, label=r"${}^{13}\mathrm{N}(p,\gamma){}^{14}\mathrm{O}$")
ax.plot(T, rate_beta_decay, label=r"${}^{13}\mathrm{N} \rightarrow {}^{13}\mathrm{C}$")
ax.legend()
ax.set_xscale("log")
ax.set_yscale("log")
ax.grid(ls=":")
../_images/ef8f35320442b2a2c3666706508f7f96261ea74f2f73153c95ae0c5aa8104c26.png

We see that above \(T \sim 2\times 10^8~\mathrm{K}\), the proton-capture proceeds faster than the beta-decay, and we transition to hot-CNO.

Breakout#

Let’s now include some heavier nuclei to see what happens when we break out of hot-CNO

linking_nuclei = ["p", "he4",
                  "c12", "c13",
                  "n13", "n14", "n15",
                  "o14", "o15", "o16", "o17",
                  "f17", "f18",
                  "ne18", "ne19", "ne20"]
lib = rl.linking_nuclei(linking_nuclei, with_reverse=False)
rc = pyna.RateCollection(libraries=lib)
comp = pyna.Composition(rc.unique_nuclei)
comp.set_solar_like()
rho = 1.e4
T = 1.e8
fig = rc.plot(rho, T, comp,
              consuming_rate_threshold=0.05,
              show_small_ydot=True,
              ydot_cutoff_value=1.e-20,
              hide_xalpha=True, hide_xp=True,
              Z_range=(5, 11), N_range=(5, 11))
Ignoring fixed x limits to fulfill fixed data aspect with adjustable data limits.
../_images/2323704b02f9ef56c05d02b3c658b258c21a89c242dbb03f25e5e195b0641319.png

We see at a temperature of \(10^8~\mathrm{K}\), we stick with the hot-CNO cycle.

Now let’s increase the temperature

T = 4.e8
fig = rc.plot(rho, T, comp,
              consuming_rate_threshold=0.05,
              show_small_ydot=True,
              ydot_cutoff_value=1.e-20,
              hide_xalpha=True, hide_xp=True,
              Z_range=(5, 11), N_range=(5, 11))
Ignoring fixed x limits to fulfill fixed data aspect with adjustable data limits.
Ignoring fixed x limits to fulfill fixed data aspect with adjustable data limits.
../_images/111381d666580a48574fbd824b246e47ad728ff1b8036680bfe4f689fd01a266.png

Now we see that \({}^{15}\mathrm{O}(\alpha, \gamma){}^{19}\mathrm{Ne}\) is operating about as fast as the decay of \({}^{15}\mathrm{O}\), allowing us to break out of the hot-CNO cycle.