Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ok-landscape
GitHub Repository: Ok-landscape/computational-pipeline
Path: blob/main/latex-templates/templates/nuclear-physics/binding_energy.tex
75 views
unlisted
1
\documentclass[a4paper, 11pt]{article}
2
\usepackage[utf8]{inputenc}
3
\usepackage[T1]{fontenc}
4
\usepackage{amsmath, amssymb, amsthm}
5
\usepackage{graphicx}
6
\usepackage{booktabs}
7
\usepackage{siunitx}
8
\usepackage{subcaption}
9
\usepackage[makestderr]{pythontex}
10
11
\newtheorem{definition}{Definition}
12
\newtheorem{theorem}{Theorem}
13
\newtheorem{example}{Example}
14
\newtheorem{remark}{Remark}
15
16
\title{Nuclear Binding Energy: Semi-Empirical Mass Formula and Nuclear Stability}
17
\author{Nuclear Physics Computation Laboratory}
18
\date{\today}
19
20
\begin{document}
21
\maketitle
22
23
\begin{abstract}
24
This technical report presents comprehensive computational analysis of nuclear binding energies using the semi-empirical mass formula (SEMF). We implement the Bethe-Weizs\"acker model with volume, surface, Coulomb, asymmetry, and pairing terms to predict nuclear masses and stability. The analysis includes the valley of stability, Q-values for nuclear reactions, and separation energies. Applications span nuclear structure, stellar nucleosynthesis, and nuclear energy production.
25
\end{abstract}
26
27
\section{Theoretical Framework}
28
29
\begin{definition}[Nuclear Binding Energy]
30
The binding energy $B(A,Z)$ is the energy required to disassemble a nucleus into free nucleons:
31
\begin{equation}
32
B(A,Z) = [Zm_p + Nm_n - M(A,Z)]c^2
33
\end{equation}
34
where $A = Z + N$ is the mass number, $Z$ is the proton number, and $N$ is the neutron number.
35
\end{definition}
36
37
\begin{theorem}[Semi-Empirical Mass Formula]
38
The nuclear binding energy can be approximated as:
39
\begin{equation}
40
B(A,Z) = a_V A - a_S A^{2/3} - a_C \frac{Z(Z-1)}{A^{1/3}} - a_A \frac{(A-2Z)^2}{A} + \delta(A,Z)
41
\end{equation}
42
where the terms represent volume, surface, Coulomb, asymmetry, and pairing contributions.
43
\end{theorem}
44
45
\subsection{Physical Interpretation of Terms}
46
47
\begin{itemize}
48
\item \textbf{Volume}: $a_V A$ --- saturated nuclear force, proportional to nucleon number
49
\item \textbf{Surface}: $-a_S A^{2/3}$ --- surface nucleons have fewer neighbors
50
\item \textbf{Coulomb}: $-a_C Z(Z-1)/A^{1/3}$ --- electrostatic repulsion of protons
51
\item \textbf{Asymmetry}: $-a_A (N-Z)^2/A$ --- Pauli exclusion principle effect
52
\item \textbf{Pairing}: $\delta(A,Z)$ --- spin-pairing effects
53
\end{itemize}
54
55
\begin{example}[Pairing Term]
56
The pairing term depends on nucleon parity:
57
\begin{equation}
58
\delta(A,Z) = \begin{cases}
59
+a_P A^{-1/2} & \text{even-even (Z, N both even)} \\
60
0 & \text{odd A} \\
61
-a_P A^{-1/2} & \text{odd-odd (Z, N both odd)}
62
\end{cases}
63
\end{equation}
64
\end{example}
65
66
\section{Computational Analysis}
67
68
\begin{pycode}
69
import numpy as np
70
import matplotlib.pyplot as plt
71
from scipy.optimize import minimize_scalar
72
plt.rc('text', usetex=True)
73
plt.rc('font', family='serif', size=10)
74
75
# SEMF parameters (MeV) - standard values
76
a_V = 15.75 # Volume coefficient
77
a_S = 17.8 # Surface coefficient
78
a_C = 0.711 # Coulomb coefficient
79
a_A = 23.7 # Asymmetry coefficient
80
a_P = 11.18 # Pairing coefficient
81
82
# Physical constants
83
m_p = 938.272 # Proton mass (MeV/c^2)
84
m_n = 939.565 # Neutron mass (MeV/c^2)
85
m_e = 0.511 # Electron mass (MeV/c^2)
86
87
def pairing_term(A, Z):
88
"""Calculate pairing term."""
89
N = A - Z
90
if A == 0:
91
return 0
92
if Z % 2 == 0 and N % 2 == 0:
93
return a_P / np.sqrt(A)
94
elif Z % 2 == 1 and N % 2 == 1:
95
return -a_P / np.sqrt(A)
96
else:
97
return 0
98
99
def binding_energy(A, Z):
100
"""Calculate total binding energy using SEMF (MeV)."""
101
if A <= 0 or Z <= 0 or Z > A:
102
return 0
103
104
B = (a_V * A
105
- a_S * A**(2/3)
106
- a_C * Z * (Z - 1) / A**(1/3)
107
- a_A * (A - 2*Z)**2 / A
108
+ pairing_term(A, Z))
109
return max(0, B)
110
111
def binding_per_nucleon(A, Z):
112
"""Binding energy per nucleon (MeV)."""
113
if A <= 0:
114
return 0
115
return binding_energy(A, Z) / A
116
117
def nuclear_mass(A, Z):
118
"""Nuclear mass in MeV/c^2."""
119
return Z * m_p + (A - Z) * m_n - binding_energy(A, Z)
120
121
def atomic_mass(A, Z):
122
"""Atomic mass in MeV/c^2."""
123
return nuclear_mass(A, Z) + Z * m_e
124
125
def most_stable_Z(A):
126
"""Find most stable Z for given A using SEMF."""
127
if A <= 0:
128
return 0
129
# Analytical formula from SEMF
130
Z_opt = A / (2 + a_C * A**(2/3) / (2 * a_A))
131
return int(round(Z_opt))
132
133
def separation_energy_n(A, Z):
134
"""Neutron separation energy S_n."""
135
return binding_energy(A, Z) - binding_energy(A-1, Z)
136
137
def separation_energy_p(A, Z):
138
"""Proton separation energy S_p."""
139
return binding_energy(A, Z) - binding_energy(A-1, Z-1)
140
141
def separation_energy_alpha(A, Z):
142
"""Alpha separation energy S_alpha."""
143
return binding_energy(A, Z) - binding_energy(A-4, Z-2) - binding_energy(4, 2)
144
145
# Q-value calculations
146
def Q_alpha(A, Z):
147
"""Q-value for alpha decay."""
148
parent_mass = nuclear_mass(A, Z)
149
daughter_mass = nuclear_mass(A-4, Z-2)
150
alpha_mass = nuclear_mass(4, 2)
151
return parent_mass - daughter_mass - alpha_mass
152
153
def Q_beta_minus(A, Z):
154
"""Q-value for beta-minus decay."""
155
parent_mass = atomic_mass(A, Z)
156
daughter_mass = atomic_mass(A, Z+1)
157
return parent_mass - daughter_mass
158
159
def Q_beta_plus(A, Z):
160
"""Q-value for beta-plus decay."""
161
parent_mass = atomic_mass(A, Z)
162
daughter_mass = atomic_mass(A, Z-1)
163
return parent_mass - daughter_mass - 2*m_e
164
165
# Calculate binding energies for chart of nuclides
166
A_range = np.arange(1, 261)
167
Z_stable = np.array([most_stable_Z(A) for A in A_range])
168
B_per_A = np.array([binding_per_nucleon(A, Z) for A, Z in zip(A_range, Z_stable)])
169
170
# Find maximum B/A
171
max_idx = np.argmax(B_per_A)
172
A_max = A_range[max_idx]
173
Z_max = Z_stable[max_idx]
174
B_max = B_per_A[max_idx]
175
176
# Specific nuclei for analysis
177
key_nuclei = [
178
('H-2', 2, 1),
179
('He-4', 4, 2),
180
('Li-7', 7, 3),
181
('C-12', 12, 6),
182
('O-16', 16, 8),
183
('Fe-56', 56, 26),
184
('Ni-62', 62, 28),
185
('U-235', 235, 92),
186
('U-238', 238, 92)
187
]
188
189
# SEMF term contributions
190
A_terms = np.linspace(10, 250, 200)
191
Z_terms = A_terms / 2.2
192
193
volume = a_V * np.ones_like(A_terms)
194
surface = -a_S / A_terms**(1/3)
195
coulomb = -a_C * Z_terms * (Z_terms - 1) / A_terms**(4/3)
196
asymmetry = -a_A * (A_terms - 2*Z_terms)**2 / A_terms**2
197
198
# Magic numbers analysis
199
magic_numbers = [2, 8, 20, 28, 50, 82, 126]
200
201
# Create visualization
202
fig = plt.figure(figsize=(12, 10))
203
gs = fig.add_gridspec(3, 3, hspace=0.35, wspace=0.35)
204
205
# Plot 1: B/A vs A
206
ax1 = fig.add_subplot(gs[0, 0])
207
ax1.plot(A_range, B_per_A, 'b-', lw=1.5)
208
ax1.axvline(x=A_max, color='r', ls='--', alpha=0.5)
209
ax1.annotate(f'Max: A={A_max}', xy=(A_max, B_max),
210
xytext=(A_max+30, B_max-0.5),
211
arrowprops=dict(arrowstyle='->', color='red'),
212
fontsize=8)
213
ax1.set_xlabel('Mass Number $A$')
214
ax1.set_ylabel('$B/A$ (MeV)')
215
ax1.set_title('Binding Energy per Nucleon')
216
ax1.grid(True, alpha=0.3)
217
218
# Plot 2: SEMF term contributions
219
ax2 = fig.add_subplot(gs[0, 1])
220
ax2.plot(A_terms, volume, 'b-', lw=1.5, label='Volume')
221
ax2.plot(A_terms, surface, 'g-', lw=1.5, label='Surface')
222
ax2.plot(A_terms, coulomb, 'r-', lw=1.5, label='Coulomb')
223
ax2.plot(A_terms, asymmetry, 'm-', lw=1.5, label='Asymmetry')
224
ax2.axhline(y=0, color='gray', ls='--', alpha=0.5)
225
ax2.set_xlabel('Mass Number $A$')
226
ax2.set_ylabel('Contribution to $B/A$ (MeV)')
227
ax2.set_title('SEMF Term Contributions')
228
ax2.legend(fontsize=7)
229
ax2.grid(True, alpha=0.3)
230
231
# Plot 3: Valley of stability
232
ax3 = fig.add_subplot(gs[0, 2])
233
A_grid = np.arange(1, 201)
234
Z_grid = np.arange(1, 101)
235
B_grid = np.zeros((len(Z_grid), len(A_grid)))
236
237
for i, Z in enumerate(Z_grid):
238
for j, A in enumerate(A_grid):
239
if Z <= A:
240
B_grid[i, j] = binding_per_nucleon(A, Z)
241
242
c = ax3.contourf(A_grid, Z_grid, B_grid, levels=20, cmap='viridis')
243
plt.colorbar(c, ax=ax3, label='$B/A$ (MeV)')
244
245
# Plot valley of stability
246
A_valley = np.arange(1, 201)
247
Z_valley = np.array([most_stable_Z(A) for A in A_valley])
248
ax3.plot(A_valley, Z_valley, 'r-', lw=2, label='Valley')
249
ax3.plot(A_valley, A_valley/2, 'w--', alpha=0.5, label='N=Z')
250
ax3.set_xlabel('Mass Number $A$')
251
ax3.set_ylabel('Proton Number $Z$')
252
ax3.set_title('Nuclear Stability Chart')
253
ax3.legend(fontsize=7, loc='lower right')
254
255
# Plot 4: Key nuclei B/A
256
ax4 = fig.add_subplot(gs[1, 0])
257
names = [n[0] for n in key_nuclei]
258
B_values = [binding_per_nucleon(n[1], n[2]) for n in key_nuclei]
259
colors = plt.cm.viridis(np.linspace(0.2, 0.8, len(key_nuclei)))
260
bars = ax4.bar(range(len(names)), B_values, color=colors)
261
ax4.set_xticks(range(len(names)))
262
ax4.set_xticklabels(names, rotation=45, fontsize=7)
263
ax4.set_ylabel('$B/A$ (MeV)')
264
ax4.set_title('Binding Energies of Key Nuclei')
265
ax4.grid(True, alpha=0.3, axis='y')
266
267
# Plot 5: Separation energies
268
ax5 = fig.add_subplot(gs[1, 1])
269
A_sep = np.arange(10, 121)
270
Z_sep = np.array([most_stable_Z(A) for A in A_sep])
271
272
S_n = np.array([separation_energy_n(A, Z) for A, Z in zip(A_sep, Z_sep)])
273
S_p = np.array([separation_energy_p(A, Z) for A, Z in zip(A_sep, Z_sep)])
274
275
ax5.plot(A_sep, S_n, 'b-', lw=1.5, label='$S_n$')
276
ax5.plot(A_sep, S_p, 'r--', lw=1.5, label='$S_p$')
277
278
# Mark magic numbers
279
for N_magic in [20, 28, 50, 82]:
280
ax5.axvline(x=2*N_magic, color='gray', ls=':', alpha=0.5)
281
282
ax5.set_xlabel('Mass Number $A$')
283
ax5.set_ylabel('Separation Energy (MeV)')
284
ax5.set_title('Nucleon Separation Energies')
285
ax5.legend(fontsize=8)
286
ax5.grid(True, alpha=0.3)
287
ax5.set_ylim([0, 15])
288
289
# Plot 6: Q-values for alpha decay
290
ax6 = fig.add_subplot(gs[1, 2])
291
A_alpha = np.arange(150, 261)
292
Z_alpha = np.array([most_stable_Z(A) for A in A_alpha])
293
294
Q_a = np.array([Q_alpha(A, Z) for A, Z in zip(A_alpha, Z_alpha)])
295
296
ax6.plot(A_alpha, Q_a, 'g-', lw=1.5)
297
ax6.axhline(y=0, color='r', ls='--', alpha=0.5)
298
ax6.fill_between(A_alpha, Q_a, 0, where=(Q_a > 0), alpha=0.3, color='green',
299
label='$\\alpha$-unstable')
300
ax6.set_xlabel('Mass Number $A$')
301
ax6.set_ylabel('$Q_\\alpha$ (MeV)')
302
ax6.set_title('Alpha Decay Q-Values')
303
ax6.legend(fontsize=8)
304
ax6.grid(True, alpha=0.3)
305
306
# Plot 7: Pairing effect
307
ax7 = fig.add_subplot(gs[2, 0])
308
A_pair = np.arange(20, 101)
309
B_even_even = np.array([binding_per_nucleon(A, A//2) for A in A_pair if A % 2 == 0])
310
B_odd_odd = np.array([binding_per_nucleon(A, A//2) for A in A_pair if A % 2 == 0])
311
B_odd = np.array([binding_per_nucleon(A, (A-1)//2) for A in A_pair if A % 2 == 1])
312
313
A_even = A_pair[::2]
314
A_odd = A_pair[1::2]
315
316
ax7.plot(A_even, B_even_even, 'bo-', ms=4, label='Even-Even')
317
ax7.plot(A_odd, B_odd, 'r^-', ms=4, label='Odd A')
318
ax7.set_xlabel('Mass Number $A$')
319
ax7.set_ylabel('$B/A$ (MeV)')
320
ax7.set_title('Pairing Effect')
321
ax7.legend(fontsize=8)
322
ax7.grid(True, alpha=0.3)
323
324
# Plot 8: Mass excess
325
ax8 = fig.add_subplot(gs[2, 1])
326
A_me = np.arange(1, 101)
327
Z_me = np.array([most_stable_Z(A) for A in A_me])
328
329
# Mass excess = M - A*u (in MeV)
330
u_MeV = 931.494 # atomic mass unit in MeV
331
mass_excess = np.array([atomic_mass(A, Z) - A * u_MeV for A, Z in zip(A_me, Z_me)])
332
333
ax8.plot(A_me, mass_excess, 'purple', lw=1.5)
334
ax8.axhline(y=0, color='gray', ls='--', alpha=0.5)
335
ax8.set_xlabel('Mass Number $A$')
336
ax8.set_ylabel('Mass Excess (MeV)')
337
ax8.set_title('Nuclear Mass Excess')
338
ax8.grid(True, alpha=0.3)
339
340
# Plot 9: Fission vs fusion
341
ax9 = fig.add_subplot(gs[2, 2])
342
343
# Energy release per nucleon
344
E_fission = (B_per_A[233] - B_per_A[116]) * 0.85 # Approximate fission products
345
E_fusion_DT = binding_per_nucleon(4, 2) - (binding_per_nucleon(2, 1) + binding_per_nucleon(3, 1))/2
346
347
reactions = ['D-T Fusion', 'U-235 Fission', 'He-4 Formation']
348
energies = [17.6/4, 200/235, 28.3/4] # MeV per nucleon
349
350
ax9.bar(reactions, energies, color=['red', 'blue', 'green'], alpha=0.7)
351
ax9.set_ylabel('Energy per Nucleon (MeV)')
352
ax9.set_title('Nuclear Energy Release')
353
ax9.grid(True, alpha=0.3, axis='y')
354
355
plt.savefig('binding_energy_plot.pdf', bbox_inches='tight', dpi=150)
356
print(r'\begin{center}')
357
print(r'\includegraphics[width=\textwidth]{binding_energy_plot.pdf}')
358
print(r'\end{center}')
359
plt.close()
360
361
# Summary calculations
362
B_Fe56 = binding_per_nucleon(56, 26)
363
B_Ni62 = binding_per_nucleon(62, 28)
364
B_He4 = binding_per_nucleon(4, 2)
365
Q_U235_alpha = Q_alpha(235, 92)
366
\end{pycode}
367
368
\section{Results and Analysis}
369
370
\subsection{Binding Energy per Nucleon}
371
372
\begin{pycode}
373
print(r'\begin{table}[htbp]')
374
print(r'\centering')
375
print(r'\caption{Binding Energies of Key Nuclei}')
376
print(r'\begin{tabular}{lccccc}')
377
print(r'\toprule')
378
print(r'Nucleus & A & Z & B (MeV) & B/A (MeV) & Type \\')
379
print(r'\midrule')
380
381
for name, A, Z in key_nuclei:
382
B = binding_energy(A, Z)
383
BpA = binding_per_nucleon(A, Z)
384
N = A - Z
385
if Z % 2 == 0 and N % 2 == 0:
386
ptype = 'e-e'
387
elif Z % 2 == 1 and N % 2 == 1:
388
ptype = 'o-o'
389
else:
390
ptype = 'odd'
391
print(f'{name} & {A} & {Z} & {B:.1f} & {BpA:.3f} & {ptype} \\\\')
392
393
print(r'\bottomrule')
394
print(r'\end{tabular}')
395
print(r'\end{table}')
396
\end{pycode}
397
398
\subsection{Maximum Stability}
399
400
The binding energy curve reaches its maximum near the iron-nickel region:
401
\begin{itemize}
402
\item Maximum $B/A$ at $A = \py{A_max}$: \py{f"{B_max:.3f}"} MeV
403
\item Fe-56: \py{f"{B_Fe56:.3f}"} MeV/nucleon
404
\item Ni-62: \py{f"{B_Ni62:.3f}"} MeV/nucleon (highest known $B/A$)
405
\item He-4: \py{f"{B_He4:.3f}"} MeV/nucleon (exceptionally stable)
406
\end{itemize}
407
408
\begin{remark}
409
While Fe-56 is often cited as the most stable nucleus, Ni-62 actually has the highest binding energy per nucleon. Fe-56 is the most abundant end product of stellar nucleosynthesis due to the peak in the Fe-56 production cross section.
410
\end{remark}
411
412
\subsection{SEMF Coefficients}
413
414
\begin{pycode}
415
print(r'\begin{table}[htbp]')
416
print(r'\centering')
417
print(r'\caption{Semi-Empirical Mass Formula Parameters}')
418
print(r'\begin{tabular}{lcc}')
419
print(r'\toprule')
420
print(r'Term & Coefficient & Physical Origin \\')
421
print(r'\midrule')
422
print(f'Volume & $a_V = {a_V}$ MeV & Strong force saturation \\\\')
423
print(f'Surface & $a_S = {a_S}$ MeV & Surface tension \\\\')
424
print(f'Coulomb & $a_C = {a_C}$ MeV & Electrostatic repulsion \\\\')
425
print(f'Asymmetry & $a_A = {a_A}$ MeV & Fermi gas model \\\\')
426
print(f'Pairing & $a_P = {a_P}$ MeV & Spin coupling \\\\')
427
print(r'\bottomrule')
428
print(r'\end{tabular}')
429
print(r'\end{table}')
430
\end{pycode}
431
432
\section{Nuclear Reactions}
433
434
\begin{example}[Nuclear Fusion]
435
The fusion of deuterium and tritium releases:
436
\begin{equation}
437
\text{D} + \text{T} \to \alpha + n + 17.6 \text{ MeV}
438
\end{equation}
439
This represents $\sim$3.5 MeV per nucleon, the highest energy density achievable.
440
\end{example}
441
442
\begin{example}[Nuclear Fission]
443
The fission of U-235 releases approximately 200 MeV per event:
444
\begin{equation}
445
^{235}\text{U} + n \to \text{fission products} + 2.5n + 200 \text{ MeV}
446
\end{equation}
447
This is $\sim$0.85 MeV per nucleon, less than fusion but easier to achieve.
448
\end{example}
449
450
\begin{theorem}[Energy Release Criterion]
451
Energy is released in nuclear reactions when the products have higher $B/A$ than reactants:
452
\begin{itemize}
453
\item Fusion is energetically favorable for $A < 56$
454
\item Fission is energetically favorable for $A > 100$
455
\end{itemize}
456
\end{theorem}
457
458
\section{Discussion}
459
460
The SEMF successfully reproduces nuclear binding energies with an RMS error of $\sim$2-3 MeV for nuclei away from closed shells. Key insights include:
461
462
\begin{enumerate}
463
\item \textbf{Liquid drop model}: The first three terms describe the nucleus as a charged liquid drop with surface tension.
464
\item \textbf{Fermi gas}: The asymmetry term arises from the Pauli exclusion principle in a degenerate Fermi gas.
465
\item \textbf{Shell effects}: Magic numbers cause deviations from SEMF predictions, requiring shell corrections.
466
\item \textbf{Stability valley}: The competition between Coulomb and asymmetry terms determines the valley of stability.
467
\end{enumerate}
468
469
\section{Conclusions}
470
471
This computational analysis demonstrates:
472
\begin{itemize}
473
\item Maximum binding energy per nucleon: \py{f"{B_max:.3f}"} MeV at $A = \py{A_max}$
474
\item Volume term dominates: $a_V = \py{a_V}$ MeV
475
\item Alpha decay Q-value for U-235: \py{f"{Q_U235_alpha:.2f}"} MeV
476
\item Energy release in fusion exceeds fission by factor of $\sim$4 per nucleon
477
\end{itemize}
478
479
The SEMF provides a quantitative foundation for understanding nuclear stability, decay modes, and energy production in nuclear reactions.
480
481
\section{Further Reading}
482
\begin{itemize}
483
\item Krane, K.S., \textit{Introductory Nuclear Physics}, Wiley, 1987
484
\item Heyde, K., \textit{Basic Ideas and Concepts in Nuclear Physics}, 3rd Edition, IOP Publishing, 2004
485
\item Wong, S.S.M., \textit{Introductory Nuclear Physics}, 2nd Edition, Wiley-VCH, 2004
486
\end{itemize}
487
488
\end{document}
489
490