M .task/backlog.data M .task/completed.data M .task/pending.data M .task/undo.data A Class_Work/nuce2101/exam2/NUCE2101_SABO/Submission.pdf A Class_Work/nuce2101/exam2/NUCE2101_SABO/problem1.py A Class_Work/nuce2101/exam2/NUCE2101_SABO/problem1_equal_loading.png A Class_Work/nuce2101/exam2/NUCE2101_SABO/problem1_unequal_loading.png
371 lines
13 KiB
TeX
371 lines
13 KiB
TeX
\section*{Problem 2}
|
|
|
|
\subsubsection*{Cross-Section Data}
|
|
|
|
Two-group cross-section data stored in Python dictionary:
|
|
|
|
\begin{lstlisting}[language=Python,
|
|
basicstyle=\ttfamily\small,
|
|
keywordstyle=\color{blue},
|
|
commentstyle=\color{gray},
|
|
stringstyle=\color{red},
|
|
showstringspaces=false,
|
|
numbers=left,
|
|
numberstyle=\tiny,
|
|
frame=single,
|
|
breaklines=true]
|
|
import numpy as np
|
|
|
|
cross_sections = {
|
|
'fast': {
|
|
'D': 1.4, # Diffusion constant [cm]
|
|
'Sigma_a': 0.010, # Absorption [cm^-1]
|
|
'Sigma_s': 0.050, # Scattering from fast to thermal [cm^-1]
|
|
'nu_Sigma_f': 0.000, # nu*Sigma_f [cm^-1]
|
|
'chi': 1, # Fission spectrum
|
|
'v': 1.8e7, # Average group velocity [cm/sec]
|
|
},
|
|
'thermal': {
|
|
'D': 0.35, # Diffusion constant [cm]
|
|
'Sigma_a': 0.080, # Absorption [cm^-1]
|
|
'Sigma_s': 0.0, # Scattering from thermal to fast [cm^-1]
|
|
'nu_Sigma_f': 0.125, # nu*Sigma_f [cm^-1]
|
|
'chi': 0, # Fission spectrum
|
|
'v': 2.2e5, # Average group velocity [cm/sec]
|
|
}
|
|
}
|
|
|
|
# Extract variables for easy access
|
|
D_fast = cross_sections['fast']['D']
|
|
D_thermal = cross_sections['thermal']['D']
|
|
Sigma_a_fast = cross_sections['fast']['Sigma_a']
|
|
Sigma_a_thermal = cross_sections['thermal']['Sigma_a']
|
|
Sigma_s_fast = cross_sections['fast']['Sigma_s']
|
|
nu_Sigma_f_fast = cross_sections['fast']['nu_Sigma_f']
|
|
nu_Sigma_f_thermal = cross_sections['thermal']['nu_Sigma_f']
|
|
\end{lstlisting}
|
|
|
|
\subsection*{Part A}
|
|
|
|
\subsubsection*{Python Code}
|
|
\begin{lstlisting}[language=Python,
|
|
basicstyle=\ttfamily\small,
|
|
keywordstyle=\color{blue},
|
|
commentstyle=\color{gray},
|
|
stringstyle=\color{red},
|
|
showstringspaces=false,
|
|
numbers=left,
|
|
numberstyle=\tiny,
|
|
frame=single,
|
|
breaklines=true]
|
|
# Four-Factor Formula: k_inf = epsilon * p * f * eta
|
|
|
|
# Fast fission factor: epsilon = 1 (no fast fissions)
|
|
epsilon = 1.0
|
|
|
|
# Resonance escape probability
|
|
p = Sigma_s_fast / (Sigma_a_fast + Sigma_s_fast)
|
|
|
|
# Thermal utilization factor: f = 1 (single-region)
|
|
f = 1.0
|
|
|
|
# Reproduction factor
|
|
eta = nu_Sigma_f_thermal / Sigma_a_thermal
|
|
|
|
# Four-Factor Formula
|
|
k_inf = epsilon * p * f * eta
|
|
|
|
print(f"k_inf = epsilon * p * f * eta = {k_inf:.4f}")
|
|
\end{lstlisting}
|
|
|
|
\subsubsection*{Solution}
|
|
|
|
The infinite multiplication factor is calculated using the \textbf{Four-Factor Formula}:
|
|
|
|
\[k_\infty = \varepsilon \cdot p \cdot f \cdot \eta\]
|
|
|
|
where:
|
|
\begin{itemize}
|
|
\item $\varepsilon$ = fast fission factor (neutrons from fast fissions per thermal fission)
|
|
\item $p$ = resonance escape probability (fraction of fast neutrons reaching thermal energies)
|
|
\item $f$ = thermal utilization factor (fraction of thermal neutrons absorbed in fuel)
|
|
\item $\eta$ = reproduction factor (neutrons produced per thermal neutron absorbed in fuel)
|
|
\end{itemize}
|
|
|
|
\textbf{Given cross-sections:}
|
|
\begin{itemize}
|
|
\item $\nu\Sigma_{f,fast}$ = 0.000 cm$^{-1}$ (no fast fissions)
|
|
\item $\nu\Sigma_{f,thermal}$ = 0.125 cm$^{-1}$
|
|
\item $\Sigma_{a,fast}$ = 0.010 cm$^{-1}$
|
|
\item $\Sigma_{a,thermal}$ = 0.080 cm$^{-1}$
|
|
\item $\Sigma_{s,fast}$ = 0.050 cm$^{-1}$ (scattering from fast to thermal)
|
|
\end{itemize}
|
|
|
|
\textbf{Calculating each factor:}
|
|
|
|
\textbf{1. Fast fission factor:}
|
|
\[\varepsilon = 1.0000 \quad \text{(no fast fissions since } \nu\Sigma_{f,fast} = 0\text{)}\]
|
|
|
|
\textbf{2. Resonance escape probability:}
|
|
\[p = \frac{\Sigma_{s,fast}}{\Sigma_{a,fast} + \Sigma_{s,fast}} = \frac{0.050}{0.010 + 0.050} = \frac{0.050}{0.060} = 0.8333\]
|
|
|
|
\textbf{3. Thermal utilization factor:}
|
|
\[f = 1.0000 \quad \text{(single-region, homogeneous medium)}\]
|
|
|
|
\textbf{4. Reproduction factor:}
|
|
\[\eta = \frac{\nu\Sigma_{f,thermal}}{\Sigma_{a,thermal}} = \frac{0.125}{0.080} = 1.5625\]
|
|
|
|
\textbf{Final calculation:}
|
|
\[k_\infty = \varepsilon \cdot p \cdot f \cdot \eta = 1.0000 \times 0.8333 \times 1.0000 \times 1.5625 = 1.3021\]
|
|
|
|
\[\boxed{k_\infty = 1.302}\]
|
|
|
|
\subsection*{Part B}
|
|
|
|
\subsubsection*{Python Code}
|
|
\begin{lstlisting}[language=Python,
|
|
basicstyle=\ttfamily\small,
|
|
keywordstyle=\color{blue},
|
|
commentstyle=\color{gray},
|
|
stringstyle=\color{red},
|
|
showstringspaces=false,
|
|
numbers=left,
|
|
numberstyle=\tiny,
|
|
frame=single,
|
|
breaklines=true]
|
|
# Calculate diffusion lengths
|
|
# L^2_fast = D_fast / Sigma_total_fast
|
|
# where Sigma_total_fast = Sigma_a_fast + Sigma_s_fast (removal from fast group)
|
|
Sigma_total_fast = Sigma_a_fast + Sigma_s_fast
|
|
L_squared_fast = D_fast / Sigma_total_fast
|
|
|
|
# L^2_th = D_th / Sigma_a_th
|
|
L_squared_th = D_thermal / Sigma_a_thermal
|
|
|
|
L_fast = np.sqrt(L_squared_fast)
|
|
L_thermal = np.sqrt(L_squared_th)
|
|
|
|
print(f"L_fast = {L_fast:.3f} cm")
|
|
print(f"L_thermal = {L_thermal:.3f} cm")
|
|
\end{lstlisting}
|
|
|
|
\subsubsection*{Solution}
|
|
|
|
The diffusion lengths for each group are calculated as:
|
|
|
|
\[L^2 = \frac{D}{\Sigma_{removal}}\]
|
|
|
|
\textbf{Fast Group:}
|
|
|
|
The removal cross-section includes both absorption and scattering out:
|
|
\[\Sigma_{removal,fast} = \Sigma_{a,fast} + \Sigma_{s,fast} = 0.010 + 0.050 = 0.060 \text{ cm}^{-1}\]
|
|
|
|
\[L^2_{fast} = \frac{D_{fast}}{\Sigma_{removal,fast}} = \frac{1.4}{0.060} = 23.333 \text{ cm}^2\]
|
|
|
|
\[L_{fast} = \sqrt{23.333} = 4.830 \text{ cm}\]
|
|
|
|
\textbf{Thermal Group:}
|
|
|
|
For the thermal group (lowest energy group), only absorption removes neutrons:
|
|
\[L^2_{thermal} = \frac{D_{thermal}}{\Sigma_{a,thermal}} = \frac{0.35}{0.080} = 4.375 \text{ cm}^2\]
|
|
|
|
\[L_{thermal} = \sqrt{4.375} = 2.092 \text{ cm}\]
|
|
|
|
\[\boxed{L_{fast} = 4.830 \text{ cm}, \quad L_{thermal} = 2.092 \text{ cm}}\]
|
|
|
|
\subsection*{Part C}
|
|
|
|
\subsubsection*{Solution}
|
|
|
|
For a rectangular solid geometry (box) with dimensions $L_x$, $L_y$, and $L_z$, where the neutron flux goes to zero at the edges (bare reactor boundary condition), the \textbf{geometric buckling} is:
|
|
|
|
\[\boxed{B^2 = \left(\frac{\pi}{L_x}\right)^2 + \left(\frac{\pi}{L_y}\right)^2 + \left(\frac{\pi}{L_z}\right)^2}\]
|
|
|
|
This expression comes from solving the neutron diffusion equation with boundary conditions $\phi = 0$ at the reactor boundaries. The solution for the fundamental mode has the form:
|
|
|
|
\[\phi(x,y,z) = A \sin\left(\frac{\pi x}{L_x}\right) \sin\left(\frac{\pi y}{L_y}\right) \sin\left(\frac{\pi z}{L_z}\right)\]
|
|
|
|
The geometric buckling is the eigenvalue associated with this spatial mode, representing the curvature of the neutron flux distribution. Each term corresponds to the buckling in one spatial dimension:
|
|
|
|
\begin{itemize}
|
|
\item $B_x^2 = \left(\frac{\pi}{L_x}\right)^2$ - buckling in x-direction
|
|
\item $B_y^2 = \left(\frac{\pi}{L_y}\right)^2$ - buckling in y-direction
|
|
\item $B_z^2 = \left(\frac{\pi}{L_z}\right)^2$ - buckling in z-direction
|
|
\end{itemize}
|
|
|
|
The total geometric buckling is the sum of the directional components.
|
|
|
|
\textbf{Note:} The derivation of this formula from the diffusion equation was completed in Exam 1. The proof is left to that work.
|
|
|
|
\subsection*{Part D}
|
|
|
|
\subsubsection*{Python Code}
|
|
\begin{lstlisting}[language=Python,
|
|
basicstyle=\ttfamily\small,
|
|
keywordstyle=\color{blue},
|
|
commentstyle=\color{gray},
|
|
stringstyle=\color{red},
|
|
showstringspaces=false,
|
|
numbers=left,
|
|
numberstyle=\tiny,
|
|
frame=single,
|
|
breaklines=true]
|
|
import sympy as sm
|
|
|
|
# Given dimensions
|
|
L_x_val = 150 # cm (width)
|
|
L_y_val = 200 # cm (length)
|
|
|
|
# Define L_z (height) as unknown
|
|
L_z_sym = sm.Symbol('L_z', positive=True)
|
|
|
|
# Buckling with unknown height
|
|
B_sq = (sm.pi / L_x_val)**2 + (sm.pi / L_y_val)**2 + (sm.pi / L_z_sym)**2
|
|
|
|
# Criticality equation: k_inf = (L^2_fast * B^2 + 1)(L^2_thermal * B^2 + 1)
|
|
criticality_eq = (L_squared_fast * B_sq + 1) * (L_squared_th * B_sq + 1) - k_inf
|
|
|
|
# Solve for L_z
|
|
L_z_solutions = sm.solve(criticality_eq, L_z_sym)
|
|
L_z_critical = float([sol for sol in L_z_solutions if sol.is_real and sol > 0][0])
|
|
|
|
print(f"Critical height L_z = {L_z_critical:.2f} cm")
|
|
\end{lstlisting}
|
|
|
|
\subsubsection*{Solution}
|
|
|
|
For a trough with width $L_x = 150$ cm and length $L_y = 200$ cm, we need to find the critical height $L_z$ where $k_{eff} = 1$.
|
|
|
|
\textbf{Criticality condition using two-group theory:}
|
|
|
|
At criticality, the effective multiplication factor equals unity:
|
|
\[k_{eff} = \frac{k_\infty}{(L_{fast}^2 B^2 + 1)(L_{thermal}^2 B^2 + 1)} = 1\]
|
|
|
|
Rearranging:
|
|
\[(L_{fast}^2 B^2 + 1)(L_{thermal}^2 B^2 + 1) = k_\infty\]
|
|
|
|
The geometric buckling for the rectangular trough is:
|
|
\[B^2 = \left(\frac{\pi}{L_x}\right)^2 + \left(\frac{\pi}{L_y}\right)^2 + \left(\frac{\pi}{L_z}\right)^2\]
|
|
|
|
\textbf{Known values:}
|
|
\begin{itemize}
|
|
\item $k_\infty = 1.3021$
|
|
\item $L_{fast}^2 = 23.333$ cm$^2$
|
|
\item $L_{thermal}^2 = 4.375$ cm$^2$
|
|
\item $L_x = 150$ cm
|
|
\item $L_y = 200$ cm
|
|
\end{itemize}
|
|
|
|
\textbf{Calculation:}
|
|
|
|
Substituting the buckling expression:
|
|
\[B^2 = \left(\frac{\pi}{150}\right)^2 + \left(\frac{\pi}{200}\right)^2 + \left(\frac{\pi}{L_z}\right)^2\]
|
|
|
|
\[B^2 = 4.386 \times 10^{-4} + 2.467 \times 10^{-4} + \frac{\pi^2}{L_z^2}\]
|
|
|
|
Substituting into the criticality equation:
|
|
\[\left(23.333 \left(6.853 \times 10^{-4} + \frac{\pi^2}{L_z^2}\right) + 1\right) \left(4.375 \left(6.853 \times 10^{-4} + \frac{\pi^2}{L_z^2}\right) + 1\right) = 1.3021\]
|
|
|
|
Solving this equation numerically (or symbolically with SymPy) yields:
|
|
|
|
\[\boxed{L_z = 31.72 \text{ cm}}\]
|
|
|
|
\textbf{Verification:}
|
|
\begin{itemize}
|
|
\item $B^2 = 0.010496$ cm$^{-2}$
|
|
\item $k_{eff} = 1.000000$ \checkmark
|
|
\end{itemize}
|
|
|
|
The trough would become critical at a height of approximately 31.7 cm.
|
|
|
|
\subsection*{Part E}
|
|
|
|
\subsubsection*{Python Code}
|
|
\begin{lstlisting}[language=Python,
|
|
basicstyle=\ttfamily\small,
|
|
keywordstyle=\color{blue},
|
|
commentstyle=\color{gray},
|
|
stringstyle=\color{red},
|
|
showstringspaces=false,
|
|
numbers=left,
|
|
numberstyle=\tiny,
|
|
frame=single,
|
|
breaklines=true]
|
|
# Prompt criticality
|
|
BETA = 640e-5 # Delayed neutron fraction
|
|
|
|
# Prompt critical k_eff = 1/(1-beta)
|
|
k_eff_prompt = 1 / (1 - BETA)
|
|
|
|
# Solve for height at prompt criticality
|
|
L_z_prompt_sym = sm.Symbol('L_z_prompt', positive=True)
|
|
B_sq_prompt = (sm.pi / L_x_val)**2 + (sm.pi / L_y_val)**2 + (sm.pi / L_z_prompt_sym)**2
|
|
|
|
prompt_crit_eq = (L_squared_fast * B_sq_prompt + 1) * \
|
|
(L_squared_th * B_sq_prompt + 1) - k_inf / k_eff_prompt
|
|
|
|
L_z_prompt_solutions = sm.solve(prompt_crit_eq, L_z_prompt_sym)
|
|
L_z_prompt = float([sol for sol in L_z_prompt_solutions
|
|
if sol.is_real and sol > 0][0])
|
|
|
|
print(f"Prompt critical height L_z = {L_z_prompt:.2f} cm")
|
|
\end{lstlisting}
|
|
|
|
\subsubsection*{Solution}
|
|
|
|
\textbf{Prompt criticality} occurs when the reactor can sustain a chain reaction on prompt neutrons alone, without relying on delayed neutrons. This happens when:
|
|
|
|
\[k_{eff} = \frac{1}{1 - \beta}\]
|
|
|
|
where $\beta$ is the delayed neutron fraction.
|
|
|
|
\textbf{Given:}
|
|
\begin{itemize}
|
|
\item $\beta = 640 \times 10^{-5} = 0.00640$
|
|
\end{itemize}
|
|
|
|
\textbf{Prompt critical condition:}
|
|
\[k_{eff,prompt} = \frac{1}{1 - 0.00640} = \frac{1}{0.99360} = 1.00644\]
|
|
|
|
Using the same two-group criticality equation from Part D, but now solving for the height where $k_{eff} = 1.00644$:
|
|
|
|
\[\frac{k_\infty}{(L_{fast}^2 B^2 + 1)(L_{thermal}^2 B^2 + 1)} = 1.00644\]
|
|
|
|
Rearranging:
|
|
\[(L_{fast}^2 B^2 + 1)(L_{thermal}^2 B^2 + 1) = \frac{k_\infty}{k_{eff,prompt}} = \frac{1.3021}{1.00644} = 1.2938\]
|
|
|
|
With $B^2 = \left(\frac{\pi}{150}\right)^2 + \left(\frac{\pi}{200}\right)^2 + \left(\frac{\pi}{L_z}\right)^2$, solving numerically:
|
|
|
|
\[\boxed{L_{z,prompt} = 32.18 \text{ cm}}\]
|
|
|
|
\textbf{Comparison:}
|
|
\begin{itemize}
|
|
\item Delayed critical height: $L_z = 31.72$ cm
|
|
\item Prompt critical height: $L_{z,prompt} = 32.18$ cm
|
|
\item Difference: $\Delta L_z = 0.46$ cm
|
|
\end{itemize}
|
|
|
|
The liquid must rise an additional 0.46 cm above delayed criticality to reach prompt criticality. This small difference highlights why delayed neutrons are crucial for reactor control.
|
|
|
|
\subsection*{Part F}
|
|
|
|
\subsubsection*{Solution}
|
|
|
|
The presence of people near the trough could significantly impact the critical height.
|
|
|
|
\textbf{Physical mechanism:}
|
|
|
|
If the neutron flux is not actually zero at the trough edges (as assumed in our bare reactor model), people standing nearby would:
|
|
|
|
\begin{enumerate}
|
|
\item \textbf{Act as neutron reflectors:} Human bodies contain significant amounts of water ($\sim$60\% by mass), which is an excellent neutron moderator and reflector
|
|
|
|
\item \textbf{Reduce neutron leakage:} Neutrons that would have escaped the trough can be scattered back by the hydrogen in the water content of human tissue
|
|
|
|
\item \textbf{Increase system reactivity:} Reduced leakage means more neutrons remain in the system to cause fissions
|
|
\end{enumerate}
|
|
|
|
\textbf{Impact on critical height:}
|
|
|
|
\[\boxed{\text{Critical height would DECREASE}}\]
|