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