\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}}\]
