Computing/plotting Bosch-Hale Nuclear Reaction Cross Sections

name: BH_CrossSections.ipynb
date: 11 Jan 14
auth: Zach Hartwig hartwig@psfc.mit.edu

This IPython notebook plots the Bosch-Hale nuclear reaction cross section parameterizations found in H.-S. and G.M. Hale, Nuclear Fusion 32 (1992) p611. Reaction energies are in [keV]; cross sections are in [m$^2$]. The B-H parameterizations have been computed for four reactions: $\mathrm{^{2}H(d,n)^{3}He}$; $\mathrm{^{2}H(d,p)^{3}H}$; $\mathrm{^{3}H(d,n)^{4}He}$; and $\mathrm{^{3}He(d,p)^{4}He}$. Each of these reactions is treated here.

The final figure produced is used in Chapter 9 of the MFE Formulary. Additionally, the code used in this notebook can easily be extended or adapted for your own calculations since the B-H coefficients and parameters are alreadyentered correctly.


In [7]:
import numpy as np
import matplotlib.pyplot  as plt

In [8]:
# Assign indices for each of the four reactions
i_2Hdn  = 0 #  2H(d,n)3He "D-D"
i_2Hdp  = 1 #  2H(d,p)3H  "D-D"
i_3Hdn  = 2 #  3H(d,n)4He "D-T"
i_3Hedp = 3 # 3He(d,p)4He "D-He3"
reactions = (i_2Hdn, i_2Hdp, i_3Hdn, i_3Hedp)

# Assign numerial values for all the B-H parameters. Notation 
# ("A","B","B_G") corresponds exactly as found in the original
# B-H reference for clarity.

# Allocate the Bosch-Hale coefficients for each fusion reaction
B_G_2Hdn  = 31.3970
B_G_2Hdp  = 31.3970
B_G_3Hdn  = 34.3827
B_G_3Hedp = 68.7508
B_G = (B_G_2Hdn, B_G_2Hdp, B_G_3Hdn, B_G_3Hedp)

#                     A_1       A_2        A_3        A_4         A_5
A_2Hdn  = np.array([5.3701e4, 3.3027e2, -1.2706e-1, 2.9327e-5, -2.5151e-9 ])
A_2Hdp  = np.array([5.5576e4, 2.1054e2, -3.2638e-2, 1.4987e-6,  1.8181e-10])
A_3Hdn  = np.array([6.9270e4, 7.4540e8,  2.0500e6,  5.2000e4,   0.0000e0  ])
A_3Hedp = np.array([5.7501e6, 2.5226e3,  4.5566e1,  0.0000e0,   0.0000e0  ])
A = (A_2Hdn, A_2Hdp, A_3Hdn, A_3Hedp)

#                      B_1         B_2        B_3        B_4
B_2Hdn  = np.array([ 0.000    ,  0.000    , 0.000    , 0.000   ])
B_2Hdp  = np.array([ 0.000    ,  0.000    , 0.000    , 0.000   ])
B_3Hdn  = np.array([ 6.380e1  , -9.950e-1 , 6.981e-5 , 1.728e-4])
B_3Hedp = np.array([-3.1995e-3, -8.5530e-6, 5.9014e-8, 0.000   ])
B = (B_2Hdn, B_2Hdp, B_3Hdn, B_3Hedp)

# Assign the valid energy ranges for each reaction [E_min, E_max] [keV]
En_2Hdn = np.array([0.5, 4900]) # 
En_2Hdp = np.array([0.5, 5000])
En_3Hdn = np.array([0.5, 550])
En_3Hedp = np.array([0.3, 900])
En = (En_2Hdn, En_2Hdp, En_3Hdn, En_3Hedp)

In [9]:
# Compute the B-H cross sections. The cross section will be arrays
# corresponding to cross section as functions of energy

# List to hold the cross-section arrays for each reaction
sigma = []

# Iterate over each of the four reactions
for r in reactions:
    E = np.logspace(0, 3, 500) # [keV]
    S_n = A[r][0] + E*(A[r][1] + E * (A[r][2] + E * (A[r][3] + E * A[r][4])))
    S_d = 1 + E * (B[r][0] + E * (B[r][1] + E * (B[r][2] + E * B[r][3])))
    S = S_n / S_d
    cs = S / (E * exp(B_G[r] / sqrt(E))) # [millibarn]

    # Transform units from [millibarn] to [m^2]
    millibarn_2_barn = 1e-3
    barn_2_m2 = 1e-28
    cs = cs * millibarn_2_barn * barn_2_m2 # [m2]

    # Append this reaction cross section to container
    sigma.append(cs) # [m2]

In [10]:
# Draw all four cross sections on the same log-log plot over
# reasonably useful energy ranges

fig, ax = plt.subplots()

plt.hold(True)
ax.loglog(E, sigma[0], '-bo', linewidth=2, markersize=14, markevery=30, label='$\mathrm{^2\!H(d,n)^3\!He}$')
ax.loglog(E, sigma[1], '-k^', linewidth=2, markersize=12, markevery=30, label='$\mathrm{^2\!H(d,p)^3\!H}$')
ax.loglog(E, sigma[2], '-rs', linewidth=2, markersize=11, markevery=30, label='$\mathrm{^3\!H(d,n)^4\!He}$')
ax.loglog(E, sigma[3], '-g*', linewidth=2, markersize=15, markevery=30, label= '$\mathrm{^3\!He(d,p)^4\!He}$')
ax.hold(False)

ax.legend(loc='lower right', fontsize=24, numpoints=1)

font = {'family' : 'sans-serif',
        'style'  : 'normal',
        'weight' : 'normal',
        'size'   : 28}
matplotlib.rc('font', **font)

ax.grid(axis='both')
plt.title('Bosch-Hale Nuclear Reaction Cross Sections', fontsize=24)
plt.xlabel('Energy [keV]')
plt.ylabel('Cross section [ m$^2$]')

ax.xaxis.set_tick_params(which='major', width=1, length=10)
ax.xaxis.set_tick_params(which='minor', width=1, length=5)
ax.yaxis.set_tick_params(which='major', width=1, length=10)
ax.yaxis.set_tick_params(which='minor', width=1, length=5)

pylab.xlim([1,1000])
pylab.ylim([1e-35,1e-27])

gcf().subplots_adjust(top=0.92, bottom=0.2, left=0.2, right=0.95)

fig.set_size_inches(10,8)

plt.show()



In [11]:
# Save the figure as a vector-graphic EPS file
fig.savefig('BH_CrossSections.eps')