thermo is impossible

This commit is contained in:
Dane Sabo 2024-12-17 11:22:11 -05:00
parent 8e22b04161
commit dda1852289
7 changed files with 976 additions and 446 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -630,7 +630,7 @@
},
{
"cell_type": "code",
"execution_count": 24,
"execution_count": 23,
"id": "1145f10a-cffc-4453-9beb-6cbc43335427",
"metadata": {},
"outputs": [
@ -667,7 +667,7 @@
},
{
"cell_type": "code",
"execution_count": 32,
"execution_count": 24,
"id": "4dd972ef-38b7-4746-9f8a-8eb63ed7ec69",
"metadata": {},
"outputs": [
@ -701,7 +701,7 @@
},
{
"cell_type": "code",
"execution_count": 33,
"execution_count": 25,
"id": "b8e4782c-98a5-4558-96a3-eae23fee99ca",
"metadata": {},
"outputs": [
@ -722,6 +722,74 @@
"#Calculate axial peaking factor:\n",
"answer_print('2b', f'{q_prime_max_value[0]/(q/6):.3e}')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "22f94e04-404d-44f9-8a5c-6e9098dc2cf8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"=========FINAL ANSWER=========\n",
"2c:\n",
"547.599 F\n",
"=========FINAL ANSWER=========\n",
"\n"
]
}
],
"source": [
"#Calculate Cladding Temperature\n",
"h = 7900 #BTU/(hr-ft^2-F)\n",
"T_bulk = 400 #F\n",
"D_clad_o = 0.158/12 #ft\n",
"\n",
"T_clad_max = (q_prime_max_value[0]*3.41) /np.pi/D_clad_o/h + T_bulk\n",
"\n",
"answer_print('2c', f'{T_clad_max:.3f} F') "
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "8c5b890f-7c78-495e-81fc-404b42bca4e8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.166e+6 BTU/(hr-ft^2)\n",
"3.367e+10 BTU/(hr-ft^2)\n",
"\n",
"=========FINAL ANSWER=========\n",
"2d:\n",
"We can afford 3.367e+10 BTU/(hr-ft^2) more flux before local boiling initiates.\n",
"=========FINAL ANSWER=========\n",
"\n"
]
}
],
"source": [
"P = 2000 #lbs/ft^2\n",
"\n",
"#Find the flux as found for temperature in 2c:\n",
"q_pprime_2c = h*(T_clad_max - T_bulk)\n",
"print(f'{q_pprime_2c:.3e} BTU/(hr-ft^2)')\n",
"\n",
"#Calculate q_pprime using Jens-Lottes\n",
"q_pprime_jl = (np.exp(P/900)/1.9*(T_clad_max - 635.8))**4\n",
"print(f'{q_pprime_jl:.3e} BTU/(hr-ft^2)')\n",
"\n",
"#Calculate flux margin:\n",
"q_pprime_margin = q_pprime_jl - q_pprime_2c\n",
"\n",
"answer_print('2d',f'We can afford {q_pprime_margin:.3e} BTU/(hr-ft^2) more flux before local boiling initiates.')"
]
}
],
"metadata": {

View File

@ -155,11 +155,13 @@
"id": "83e934ae-821c-4137-8683-9038dd5009f5",
"metadata": {},
"source": [
"1. An open pressurizer relief valuve gets stuck open. This results in low primary coolant pressure, but it keeps sending back a 'closed' signal despite being stuck open from mechanical failure.\n",
"1. An open pressurizer relief valve gets stuck open. This results in low primary coolant pressure, but it keeps sending back a 'closed' signal despite being stuck open from mechanical failure.\n",
"2. Coolant just starts dumping through pressurizer relief. Operators have no clue because they think it is closed. They're worried about going 'solid', which is when the primary system has no gas buffer and water hammer can happen.\n",
"3. Operators stop auxilliary feed into the primary system to try and avoid going solid. Little do they know this is actually causing huge problems because there is actually a huge volume loss in the primary loop. A gas bubble forms in the reactor as a result.\n",
"3. Operators stop auxiliary feed into the primary system to try and avoid going solid. Little do they know this is actually causing huge problems because there is actually a huge volume loss in the primary loop. A gas bubble forms in the reactor as a result.\n",
"4. Gas bubble = no cooling > fuel temps reach ~4,000 F and slump. Coolant keeps getting dumped into system once they realize whats wrong and some of that water gets out through auxiliary systems through open PORV.\n",
"5. Coolant pumps get restarted and reactor core gets back under control. Avoids catastrophic accident."
"5. Coolant pumps get restarted and reactor core gets back under control. Avoids catastrophic accident.\n",
"\n",
"It's worth saying that throughout the process the utility is communicating to the state and NRC about what is happening, but is doing such a bad job that the state and NRC do not trust their reporting."
]
},
{
@ -269,10 +271,10 @@
"1. Uranium ore is extracted from the ground\n",
"2. The ore is then processed physically and chemically to obtain highly pure Uranium Hexafluoride (UF6)\n",
"3. (OPTIONAL FOR CANDU) This gas goes through 'enrichment,' where the percentage of 235U is increased\n",
"4. UF6 is converted back into a poweder of choice (usually UO2), and packed into fuel pellet shapes.\n",
"5. These pelets are stacked into rods, which are bundled into assemblies, and used as nuclear fuel\n",
"4. UF6 is converted back into a powder of choice (usually UO2), and packed into fuel pellet shapes.\n",
"5. These pellets are stacked into rods, which are bundled into assemblies, and used as nuclear fuel\n",
"6. When the fuel is exhausted, the fuel assemblies are temporarily stored at the reactor plant's spent fuel pool\n",
"7. In the open cycle, the fuel mateirals are then put into dry cask storage and put... somewhere. Possibly under a mountain in the desert in a highly secure facility."
"7. In the open cycle, the fuel materials are then put into dry cask storage and put... somewhere. Possibly under a mountain in the desert in a highly secure facility."
]
},
{
@ -353,7 +355,7 @@
" }\n",
"\n",
"givens = ThermodynamicProperties().sat_prop\n",
"m_dot = 72 #lbm/s\n",
"m_dot = 72*60*60 #lbm/hr\n",
"print(givens.get(2000)['hg'])"
]
},
@ -379,46 +381,141 @@
},
{
"cell_type": "markdown",
"id": "6388f4c3-e1ca-4d4e-8e9b-82e502e46850",
"id": "5f98f8ca-4486-4d32-ab42-bf34541f36fb",
"metadata": {},
"source": [
"To find the mass fraction, we will utilize the conservation of mass and conservation of energy:\n",
"$$ \\dot m_8 + \\dot m_9 = \\dot m_7 $$\n",
"$$ \\dot m_8 h_8 + \\dot m_9 h_9 + W_{LPT}= \\dot m_7 h_7 $$\n",
"\n",
"Which when subsituting in $\\dot m_8 = y \\dot m_7$ and $\\dot m_9 = (1-y) \\dot m_7$, we get one key equation:\n",
"$$ y h_8 + (1-y) h_9 + W_{LPT}= h_7 $$\n",
"$$ y h_8 + h_9 - y h_9 + W_{LPT}= h_7 $$\n",
"$$ y = \\frac{h_7 - h_9 - W_{LPT}}{h_8-h_9} $$\n",
"We know $h_7$ but do not know $h_8$, or $h_9$. We can find the enthalpies using the entropies, however, and then solve the system to find the mass flow fraction."
"To find the mass fraction, we need to analyze the closed feedwater heater and mixing chamber."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "085fa335-9198-4923-86d9-efb9ac397280",
"id": "3f22d5dc-4c89-4e78-9dbf-2b873281ae6b",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle h_{10} m_{dot} \\left(1 - y\\right) + h_{3} m_{dot} y = h_{2} m_{dot} \\left(1 - y\\right) + h_{8} m_{dot} y$"
],
"text/plain": [
"Eq(h_10*m_dot*(1 - y) + h_3*m_dot*y, h_2*m_dot*(1 - y) + h_8*m_dot*y)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\displaystyle h_{4} m_{dot} = h_{10} m_{dot} \\left(1 - y\\right) + h_{11} m_{dot} y$"
],
"text/plain": [
"Eq(h_4*m_dot, h_10*m_dot*(1 - y) + h_11*m_dot*y)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"h_3s, h_2s, h_8s, h_10s, h_11s, h_4s, m_dots, ys = sm.symbols('h_3, h_2, h_8, h_10, h_11, h_4, m_dot, y', positive = True)\n",
"#Conservation of Energy in CFHW\n",
"CFWH = sm.Eq(m_dots*ys*h_3s + m_dots*(1-ys)*h_10s, m_dots*ys*h_8s + m_dots*(1-ys)*h_2s)\n",
"display(CFWH)\n",
"\n",
"#Conservation of Energy in Mixing Chamber\n",
"MIX = sm.Eq(m_dots*h_4s, m_dots*ys*h_11s + m_dots*(1-ys)*h_10s)\n",
"display(MIX)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "88ad678b-4bc5-4e4b-a246-88caf4db17d6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"h_4 = 671.797 BTU/lbm\n",
"h_3 = 333.420 BTU/lbm\n",
"x_8 = 0.985\n",
"h_8 = 1182.380 BTU/lbm\n",
"x_9 = 0.812\n",
"h_9 = 930.914 BTU/lbm\n"
"h_8 = 1182.380 BTU/lbm\n"
]
}
],
"source": [
"#Get values from givens\n",
"h_4 = givens.get(2000)['hf'] #BTU/lbm\n",
"h_3 = givens.get(155)['hf'] #BTU/lbm\n",
"print(f'h_4 = {h_4:.3f} BTU/lbm')\n",
"print(f'h_3 = {h_3:.3f} BTU/lbm')\n",
"\n",
"# Find quality at 8\n",
"x_8 = (1.57063 - givens.get(155)['sf']) / (givens.get(155)['sg'] - givens.get(155)['sf'])\n",
"print(f'x_8 = {x_8:.3f}')\n",
"\n",
"# Find enthalpy at 8\n",
"h_8 = x_8 * (givens.get(155)['hg'] - givens.get(155)['hf']) + givens.get(155)['hf']\n",
"print(f'h_8 = {h_8:.3f} BTU/lbm')\n",
"print(f'h_8 = {h_8:.3f} BTU/lbm')"
]
},
{
"cell_type": "markdown",
"id": "34e51d70-7dd6-4816-a505-2d087d3630e6",
"metadata": {},
"source": [
"Now we need to find the enthalpies at states 2 and 11. We can do this by realizing the work in the pumps is equivalent to the change in entropy by this equation:\n",
"$$ W_{pump} = \\dot m (h_{in} - h_{out}) = -\\dot m \\nu \\Delta P$$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6e6e8f21-7f54-44e8-a845-35a55f0ea187",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"h_1 = 671.797 BTU/lbm\n",
"h_2 = 722.993 BTU/lbm\n",
"h_11 = 380.717 BTU/lbm\n"
]
}
],
"source": [
"h_1 = givens.get(2000)['hf']\n",
"print(f'h_1 = {h_1:.3f} BTU/lbm')\n",
"\n",
"#Solve for h_2, rearranging equation\n",
"h_2 = givens.get(2000)['vf']*(2000-2.9) + h_1\n",
"print(f'h_2 = {h_2:.3f} BTU/lbm')\n",
"\n",
"#Solve for h_11, rearranging equation\n",
"h_11 = givens.get(2000)['vf']*(2000-155) + h_3\n",
"print(f'h_11 = {h_11:.3f} BTU/lbm')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "bd17dae3-0685-4f43-a38d-1019a146ea49",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x_9 = 0.812\n",
"h_9 = 930.914 BTU/lbm\n"
]
}
],
"source": [
"# Find Quality at 9\n",
"x_9 = (1.57063 - givens.get(2.9)['sf']) / (givens.get(2.9)['sg'] - givens.get(2.9)['sf'])\n",
"print(f'x_9 = {x_9:.3f}')\n",
@ -429,64 +526,143 @@
]
},
{
"cell_type": "markdown",
"id": "06f7a7be-2537-46fc-91cc-8279bdfd96e7",
"cell_type": "code",
"execution_count": 7,
"id": "d8dc1172-4f08-45d7-a4a1-0d1d9cb674e2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"459.3875750241941"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Now we look at the closed feedwater heater, which conserves energy:\n",
"$$\\dot m_8 h_8 + \\dot m_2 h_2 = \\dot m_3 h_3 + \\dot m_{10} h_{10}$$\n",
"$$\\dot m_7 y h_8 + \\dot m_7 (1-y) h_2 = \\dot m_7 y h_3 + \\dot m_7 (1-y) h_{10}$$\n",
"$$y h_8 + (1-y) h_2 = y h_3 + (1-y) h_{10}$$\n",
"$$y h_8 + h_2 - y h_2 = y h_3 + h_{10} - y h_{10}$$"
"h_8 - h_2"
]
},
{
"cell_type": "markdown",
"id": "63541c28-394a-4611-be12-5f32e8ea131f",
"id": "5ff4a0e5-2f55-47c5-8026-205b221a81d5",
"metadata": {},
"source": [
"$$y(h_8 - h_2 - h_3 + h_{10}) = h_{10}-h_2 $$\n",
"$$y = \\frac{h_{10}-h_2}{h_8 - h_2 - h_3 + h_{10}} $$\n",
"\n",
"Now, we don't know $y$, $h_{11}$, $h_{10}$, or $h_2$.\n",
"\n",
"But we know something about the mixing chamber!\n",
"$$ \\dot m_4 h_4 = \\dot m_{11} h_{11} + \\dot m_{10} h_{10}$$\n",
"$$ \\dot m_7 h_4 = \\dot m_{7} y h_{11} + \\dot m_{7} (1-y) h_{10}$$\n",
"$$ h_4 = y h_{11} + (1-y) h_{10}$$\n",
"$$ h_4 = y h_{11} + h_{10} -y h_{10}$$\n",
"$$ y = \\frac{h_4 - h_{10}}{h_{11} - h_{10}}$$\n",
"\n",
"At this point we have 4 unknowns, 2 equations. Let's look at the boiler:\n",
"$$ Q_{boiler} = \\dot m_4 h_4 - \\dot m_5 h_5 $$\n"
"Now we can substitute all of these values into our equations to solve for $y$ and $h_{10}$ simultaneously."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "92c15504-e768-4766-84f8-ae20010015b4",
"execution_count": 19,
"id": "ad26f275-5630-40d9-884a-a5a46cc226c2",
"metadata": {},
"outputs": [],
"source": []
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle - 259200 h_{10} y + 259200 h_{10} + 86422464.0 y = 119073259.446271 y + 187399697.0832$"
],
"text/plain": [
"Eq(-259200*h_10*y + 259200*h_10 + 86422464.0*y, 119073259.446271*y + 187399697.0832)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\displaystyle 174129782.4 = 259200 h_{10} \\left(1 - y\\right) + 98681736.24 y$"
],
"text/plain": [
"Eq(174129782.4, 259200*h_10*(1 - y) + 98681736.24*y)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[81.0*(2000000.0*h_10 - 1445985317.0)/(162000000.0*h_10 + 20406747153.9195)]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[40.0*(1000.0*h_10 - 671797.0)/(40000.0*h_10 - 15228663.0)]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Substitute these values into our symbolic equations\n",
"substitutions = {\n",
" h_2s: h_2,\n",
" h_3s: h_3,\n",
" h_4s: h_4,\n",
" h_8s: h_8,\n",
" h_11s: h_11, \n",
" m_dots: m_dot\n",
"}\n",
"\n",
"CFWH_sub = CFWH.subs(substitutions)\n",
"\n",
"MIX_sub = MIX.subs(substitutions)\n",
"display(CFWH_sub.expand(), MIX_sub)\n",
"display(sm.solve(CFWH_sub,ys), sm.solve(MIX_sub,ys))"
]
},
{
"cell_type": "markdown",
"id": "5bd7f9ab-f870-425d-9dd9-757ae992c3de",
"cell_type": "code",
"execution_count": 9,
"id": "1128a135-175a-4ae8-97cf-a9175b916da1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"###### Find h_2\n",
"x_2 = (givens.get(2.9)['sf'] - givens.get(2000)['sf']) / (givens.get(2000)['sg'] - givens.get(2000)['sf'])\n",
"print(f'x_2 = {x_2:.3f}')\n",
"h_2 = x_2 * (givens.get(2000)['hg'] - givens.get(2000)['hf']) + givens.get(2000)['hf']\n",
"print(f'h_2 = {h_2:.3f} BTU/lbm')\n",
"\n",
"#Find h_10\n",
"h_10 = givens.get(2000)['hf']\n",
"print(f'h_10 = {h_10:.3f} BTU/lbm')\n",
"\n",
"#Find h_3\n",
"h_3 = givens.get(155)['hf']\n",
"print(f'h_3 = {h_3:.3f} BTU/lbm')"
"sm.solve([CFWH_sub, MIX_sub])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ef401e1f-d74c-4993-9305-3bcb7002ebb2",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'soln' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[10], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mh_10 = \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[43msoln\u001b[49m[h_10]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m BTU/lbm\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 2\u001b[0m answer_print(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m8a\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124my = \u001b[39m\u001b[38;5;132;01m{\u001b[39;00msoln[y]\u001b[38;5;132;01m:\u001b[39;00m\u001b[38;5;124m.3f\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n",
"\u001b[0;31mNameError\u001b[0m: name 'soln' is not defined"
]
}
],
"source": [
"print(f'h_10 = {soln[h_10]} BTU/lbm')\n",
"answer_print('8a', f'y = {soln[y]:.3f}')"
]
},
{
@ -500,25 +676,10 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": null,
"id": "4ce1da3b-82c9-492a-ae75-62bef90d9bae",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x_6 = 0.986\n",
"h_6 = 1192.609 BTU/lbm\n",
"\n",
"=========FINAL ANSWER=========\n",
"8b:\n",
"W_HPT = 2.605e+07 BTU/hr\n",
"=========FINAL ANSWER=========\n",
"\n"
]
}
],
"outputs": [],
"source": [
"# Find quality at 8\n",
"x_6 = (1.42335 - givens.get(680)['sf']) / (givens.get(680)['sg'] - givens.get(680)['sf'])\n",
@ -528,11 +689,53 @@
"h_6 = x_6 * (givens.get(680)['hg'] - givens.get(680)['hf']) + givens.get(680)['hf']\n",
"print(f'h_6 = {h_6:.3f} BTU/lbm')\n",
"\n",
"W_hpt = (72*60*60) *(1293.1 - h_6)\n",
"W_hpt = m_dot *(1293.1 - h_6)\n",
"answer_print('8b', f'W_HPT = {W_hpt:.3e} BTU/hr')\n",
" "
]
},
{
"cell_type": "markdown",
"id": "2d52ec40-02c1-42ca-bd54-12b9c2a1ce07",
"metadata": {},
"source": [
"**Part C**"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bbe89ad0-6f7d-42e7-bd5e-8b23176d8b10",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "c9a11bd3-f08d-4c68-a931-8b5dc8889f6d",
"metadata": {},
"source": [
"**Part D**\n",
"$$Q_{boiler} = \\dot m_5 h_5 - \\dot m_4 h_4 + \\dot m_7 h_7 - \\dot m_6 h_6$$\n",
"$$Q_{boiler} = \\dot m (h_5 - h_4 + h_7 - h_6)$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e9ff69ca-a2ac-44a8-9e79-feb4abb16f70",
"metadata": {},
"outputs": [],
"source": [
"h_5 = 1293.1 #BTU/lbm\n",
"h_7 = 1346.05 #BTU/lbm\n",
"h_4 = givens.get(2000)['hf']\n",
"print(f'h_4 = {h_4:.3f} BTU/lbm')\n",
"\n",
"Q_boiler = m_dot*(h_5 - h_4 + h_7 - h_6)\n",
"answer_print('8d', f'Q_boiler = {Q_boiler:.3e} BTU/hr')"
]
},
{
"attachments": {
"d49e73b1-8a6b-4c3a-8e39-f82c3fa98d67.png": {
@ -546,6 +749,55 @@
"![image.png](attachment:d49e73b1-8a6b-4c3a-8e39-f82c3fa98d67.png)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "2d7143d7-4d76-4d38-b2f3-fe85b2169a2c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"f = 0.881\n",
"N_U235 = 1.150e+21 U235 atoms/cm^3\n",
"q''' = 3.149e+02 W/cm^3\n",
"\n",
"=========FINAL ANSWER=========\n",
"9a:\n",
"q''' = 3.042e+07 BTU/hr-ft^2\n",
"=========FINAL ANSWER=========\n",
"\n"
]
}
],
"source": [
"#Find fuel mass fraction\n",
"M_U235 = 235.0439 #g/mol\n",
"M_U238 = 238.0508 #g/mol\n",
"M_O2 = 2*15.9944 #g/mol\n",
"r = 0.0485\n",
"\n",
"f = (r*M_U235 + (1-r)*M_U238)/(r*M_U235 + (1-r)*M_U238 + M_O2)\n",
"print(f'f = {f:.3f}')\n",
"\n",
"#Find Number Density\n",
"rho = 10.5 #g/cm^3\n",
"avo = 0.60225e24 #molecules/mol\n",
"N_U235 = avo/ M_U235*r*f*rho\n",
"\n",
"print(f'N_U235 = {N_U235:.3e} U235 atoms/cm^3')\n",
"\n",
"phi = 4.5e13 #Neutrons/s/cm^2\n",
"sigma_f = 200e-24 #cm^2\n",
"Q_fission = 190 #MeV/fission\n",
"\n",
"qppprime_fuel = N_U235*sigma_f*phi*Q_fission*1.601e-13 #MeV/fission\n",
"print(f'q\\'\\'\\' = {qppprime_fuel:.3e} W/cm^3')\n",
"\n",
"answer_print('9a', f'q\\'\\'\\' = {qppprime_fuel*3.41214/0.03281**3:.3e} BTU/hr-ft^2')"
]
},
{
"attachments": {
"1f62b1ff-56c4-4bce-8874-933dc44d5042.png": {

View File

@ -155,11 +155,13 @@
"id": "83e934ae-821c-4137-8683-9038dd5009f5",
"metadata": {},
"source": [
"1. An open pressurizer relief valuve gets stuck open. This results in low primary coolant pressure, but it keeps sending back a 'closed' signal despite being stuck open from mechanical failure.\n",
"1. An open pressurizer relief valve gets stuck open. This results in low primary coolant pressure, but it keeps sending back a 'closed' signal despite being stuck open from mechanical failure.\n",
"2. Coolant just starts dumping through pressurizer relief. Operators have no clue because they think it is closed. They're worried about going 'solid', which is when the primary system has no gas buffer and water hammer can happen.\n",
"3. Operators stop auxilliary feed into the primary system to try and avoid going solid. Little do they know this is actually causing huge problems because there is actually a huge volume loss in the primary loop. A gas bubble forms in the reactor as a result.\n",
"3. Operators stop auxiliary feed into the primary system to try and avoid going solid. Little do they know this is actually causing huge problems because there is actually a huge volume loss in the primary loop. A gas bubble forms in the reactor as a result.\n",
"4. Gas bubble = no cooling > fuel temps reach ~4,000 F and slump. Coolant keeps getting dumped into system once they realize whats wrong and some of that water gets out through auxiliary systems through open PORV.\n",
"5. Coolant pumps get restarted and reactor core gets back under control. Avoids catastrophic accident."
"5. Coolant pumps get restarted and reactor core gets back under control. Avoids catastrophic accident.\n",
"\n",
"It's worth saying that throughout the process the utility is communicating to the state and NRC about what is happening, but is doing such a bad job that the state and NRC do not trust their reporting."
]
},
{
@ -269,10 +271,10 @@
"1. Uranium ore is extracted from the ground\n",
"2. The ore is then processed physically and chemically to obtain highly pure Uranium Hexafluoride (UF6)\n",
"3. (OPTIONAL FOR CANDU) This gas goes through 'enrichment,' where the percentage of 235U is increased\n",
"4. UF6 is converted back into a poweder of choice (usually UO2), and packed into fuel pellet shapes.\n",
"5. These pelets are stacked into rods, which are bundled into assemblies, and used as nuclear fuel\n",
"4. UF6 is converted back into a powder of choice (usually UO2), and packed into fuel pellet shapes.\n",
"5. These pellets are stacked into rods, which are bundled into assemblies, and used as nuclear fuel\n",
"6. When the fuel is exhausted, the fuel assemblies are temporarily stored at the reactor plant's spent fuel pool\n",
"7. In the open cycle, the fuel mateirals are then put into dry cask storage and put... somewhere. Possibly under a mountain in the desert in a highly secure facility."
"7. In the open cycle, the fuel materials are then put into dry cask storage and put... somewhere. Possibly under a mountain in the desert in a highly secure facility."
]
},
{
@ -353,7 +355,7 @@
" }\n",
"\n",
"givens = ThermodynamicProperties().sat_prop\n",
"m_dot = 72 #lbm/s\n",
"m_dot = 72*60*60 #lbm/hr\n",
"print(givens.get(2000)['hg'])"
]
},
@ -379,46 +381,141 @@
},
{
"cell_type": "markdown",
"id": "6388f4c3-e1ca-4d4e-8e9b-82e502e46850",
"id": "5f98f8ca-4486-4d32-ab42-bf34541f36fb",
"metadata": {},
"source": [
"To find the mass fraction, we will utilize the conservation of mass and conservation of energy:\n",
"$$ \\dot m_8 + \\dot m_9 = \\dot m_7 $$\n",
"$$ \\dot m_8 h_8 + \\dot m_9 h_9 + W_{LPT}= \\dot m_7 h_7 $$\n",
"\n",
"Which when subsituting in $\\dot m_8 = y \\dot m_7$ and $\\dot m_9 = (1-y) \\dot m_7$, we get one key equation:\n",
"$$ y h_8 + (1-y) h_9 + W_{LPT}= h_7 $$\n",
"$$ y h_8 + h_9 - y h_9 + W_{LPT}= h_7 $$\n",
"$$ y = \\frac{h_7 - h_9 - W_{LPT}}{h_8-h_9} $$\n",
"We know $h_7$ but do not know $h_8$, or $h_9$. We can find the enthalpies using the entropies, however, and then solve the system to find the mass flow fraction."
"To find the mass fraction, we need to analyze the closed feedwater heater and mixing chamber."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "085fa335-9198-4923-86d9-efb9ac397280",
"id": "3f22d5dc-4c89-4e78-9dbf-2b873281ae6b",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle h_{10} m_{dot} \\left(1 - y\\right) + h_{3} m_{dot} y = h_{2} m_{dot} \\left(1 - y\\right) + h_{8} m_{dot} y$"
],
"text/plain": [
"Eq(h_10*m_dot*(1 - y) + h_3*m_dot*y, h_2*m_dot*(1 - y) + h_8*m_dot*y)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\displaystyle h_{4} m_{dot} = h_{10} m_{dot} \\left(1 - y\\right) + h_{11} m_{dot} y$"
],
"text/plain": [
"Eq(h_4*m_dot, h_10*m_dot*(1 - y) + h_11*m_dot*y)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"h_3s, h_2s, h_8s, h_10s, h_11s, h_4s, m_dots, ys = sm.symbols('h_3, h_2, h_8, h_10, h_11, h_4, m_dot, y', positive = True)\n",
"#Conservation of Energy in CFHW\n",
"CFWH = sm.Eq(m_dots*ys*h_3s + m_dots*(1-ys)*h_10s, m_dots*ys*h_8s + m_dots*(1-ys)*h_2s)\n",
"display(CFWH)\n",
"\n",
"#Conservation of Energy in Mixing Chamber\n",
"MIX = sm.Eq(m_dots*h_4s, m_dots*ys*h_11s + m_dots*(1-ys)*h_10s)\n",
"display(MIX)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "88ad678b-4bc5-4e4b-a246-88caf4db17d6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"h_4 = 671.797 BTU/lbm\n",
"h_3 = 333.420 BTU/lbm\n",
"x_8 = 0.985\n",
"h_8 = 1182.380 BTU/lbm\n",
"x_9 = 0.812\n",
"h_9 = 930.914 BTU/lbm\n"
"h_8 = 1182.380 BTU/lbm\n"
]
}
],
"source": [
"#Get values from givens\n",
"h_4 = givens.get(2000)['hf'] #BTU/lbm\n",
"h_3 = givens.get(155)['hf'] #BTU/lbm\n",
"print(f'h_4 = {h_4:.3f} BTU/lbm')\n",
"print(f'h_3 = {h_3:.3f} BTU/lbm')\n",
"\n",
"# Find quality at 8\n",
"x_8 = (1.57063 - givens.get(155)['sf']) / (givens.get(155)['sg'] - givens.get(155)['sf'])\n",
"print(f'x_8 = {x_8:.3f}')\n",
"\n",
"# Find enthalpy at 8\n",
"h_8 = x_8 * (givens.get(155)['hg'] - givens.get(155)['hf']) + givens.get(155)['hf']\n",
"print(f'h_8 = {h_8:.3f} BTU/lbm')\n",
"print(f'h_8 = {h_8:.3f} BTU/lbm')"
]
},
{
"cell_type": "markdown",
"id": "34e51d70-7dd6-4816-a505-2d087d3630e6",
"metadata": {},
"source": [
"Now we need to find the enthalpies at states 2 and 11. We can do this by realizing the work in the pumps is equivalent to the change in entropy by this equation:\n",
"$$ W_{pump} = \\dot m (h_{in} - h_{out}) = -\\dot m \\nu \\Delta P$$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6e6e8f21-7f54-44e8-a845-35a55f0ea187",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"h_1 = 671.797 BTU/lbm\n",
"h_2 = 722.993 BTU/lbm\n",
"h_11 = 380.717 BTU/lbm\n"
]
}
],
"source": [
"h_1 = givens.get(2000)['hf']\n",
"print(f'h_1 = {h_1:.3f} BTU/lbm')\n",
"\n",
"#Solve for h_2, rearranging equation\n",
"h_2 = givens.get(2000)['vf']*(2000-2.9) + h_1\n",
"print(f'h_2 = {h_2:.3f} BTU/lbm')\n",
"\n",
"#Solve for h_11, rearranging equation\n",
"h_11 = givens.get(2000)['vf']*(2000-155) + h_3\n",
"print(f'h_11 = {h_11:.3f} BTU/lbm')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "bd17dae3-0685-4f43-a38d-1019a146ea49",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x_9 = 0.812\n",
"h_9 = 930.914 BTU/lbm\n"
]
}
],
"source": [
"# Find Quality at 9\n",
"x_9 = (1.57063 - givens.get(2.9)['sf']) / (givens.get(2.9)['sg'] - givens.get(2.9)['sf'])\n",
"print(f'x_9 = {x_9:.3f}')\n",
@ -429,64 +526,143 @@
]
},
{
"cell_type": "markdown",
"id": "06f7a7be-2537-46fc-91cc-8279bdfd96e7",
"cell_type": "code",
"execution_count": 7,
"id": "d8dc1172-4f08-45d7-a4a1-0d1d9cb674e2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"459.3875750241941"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Now we look at the closed feedwater heater, which conserves energy:\n",
"$$\\dot m_8 h_8 + \\dot m_2 h_2 = \\dot m_3 h_3 + \\dot m_{10} h_{10}$$\n",
"$$\\dot m_7 y h_8 + \\dot m_7 (1-y) h_2 = \\dot m_7 y h_3 + \\dot m_7 (1-y) h_{10}$$\n",
"$$y h_8 + (1-y) h_2 = y h_3 + (1-y) h_{10}$$\n",
"$$y h_8 + h_2 - y h_2 = y h_3 + h_{10} - y h_{10}$$"
"h_8 - h_2"
]
},
{
"cell_type": "markdown",
"id": "63541c28-394a-4611-be12-5f32e8ea131f",
"id": "5ff4a0e5-2f55-47c5-8026-205b221a81d5",
"metadata": {},
"source": [
"$$y(h_8 - h_2 - h_3 + h_{10}) = h_{10}-h_2 $$\n",
"$$y = \\frac{h_{10}-h_2}{h_8 - h_2 - h_3 + h_{10}} $$\n",
"\n",
"Now, we don't know $y$, $h_{11}$, $h_{10}$, or $h_2$.\n",
"\n",
"But we know something about the mixing chamber!\n",
"$$ \\dot m_4 h_4 = \\dot m_{11} h_{11} + \\dot m_{10} h_{10}$$\n",
"$$ \\dot m_7 h_4 = \\dot m_{7} y h_{11} + \\dot m_{7} (1-y) h_{10}$$\n",
"$$ h_4 = y h_{11} + (1-y) h_{10}$$\n",
"$$ h_4 = y h_{11} + h_{10} -y h_{10}$$\n",
"$$ y = \\frac{h_4 - h_{10}}{h_{11} - h_{10}}$$\n",
"\n",
"At this point we have 4 unknowns, 2 equations. Let's look at the boiler:\n",
"$$ Q_{boiler} = \\dot m_4 h_4 - \\dot m_5 h_5 $$\n"
"Now we can substitute all of these values into our equations to solve for $y$ and $h_{10}$ simultaneously."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "92c15504-e768-4766-84f8-ae20010015b4",
"execution_count": 19,
"id": "ad26f275-5630-40d9-884a-a5a46cc226c2",
"metadata": {},
"outputs": [],
"source": []
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle - 259200 h_{10} y + 259200 h_{10} + 86422464.0 y = 119073259.446271 y + 187399697.0832$"
],
"text/plain": [
"Eq(-259200*h_10*y + 259200*h_10 + 86422464.0*y, 119073259.446271*y + 187399697.0832)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\displaystyle 174129782.4 = 259200 h_{10} \\left(1 - y\\right) + 98681736.24 y$"
],
"text/plain": [
"Eq(174129782.4, 259200*h_10*(1 - y) + 98681736.24*y)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[81.0*(2000000.0*h_10 - 1445985317.0)/(162000000.0*h_10 + 20406747153.9195)]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[40.0*(1000.0*h_10 - 671797.0)/(40000.0*h_10 - 15228663.0)]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Substitute these values into our symbolic equations\n",
"substitutions = {\n",
" h_2s: h_2,\n",
" h_3s: h_3,\n",
" h_4s: h_4,\n",
" h_8s: h_8,\n",
" h_11s: h_11, \n",
" m_dots: m_dot\n",
"}\n",
"\n",
"CFWH_sub = CFWH.subs(substitutions)\n",
"\n",
"MIX_sub = MIX.subs(substitutions)\n",
"display(CFWH_sub.expand(), MIX_sub)\n",
"display(sm.solve(CFWH_sub,ys), sm.solve(MIX_sub,ys))"
]
},
{
"cell_type": "markdown",
"id": "5bd7f9ab-f870-425d-9dd9-757ae992c3de",
"cell_type": "code",
"execution_count": 9,
"id": "1128a135-175a-4ae8-97cf-a9175b916da1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"###### Find h_2\n",
"x_2 = (givens.get(2.9)['sf'] - givens.get(2000)['sf']) / (givens.get(2000)['sg'] - givens.get(2000)['sf'])\n",
"print(f'x_2 = {x_2:.3f}')\n",
"h_2 = x_2 * (givens.get(2000)['hg'] - givens.get(2000)['hf']) + givens.get(2000)['hf']\n",
"print(f'h_2 = {h_2:.3f} BTU/lbm')\n",
"\n",
"#Find h_10\n",
"h_10 = givens.get(2000)['hf']\n",
"print(f'h_10 = {h_10:.3f} BTU/lbm')\n",
"\n",
"#Find h_3\n",
"h_3 = givens.get(155)['hf']\n",
"print(f'h_3 = {h_3:.3f} BTU/lbm')"
"sm.solve([CFWH_sub, MIX_sub])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ef401e1f-d74c-4993-9305-3bcb7002ebb2",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'soln' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[10], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mh_10 = \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[43msoln\u001b[49m[h_10]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m BTU/lbm\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 2\u001b[0m answer_print(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m8a\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124my = \u001b[39m\u001b[38;5;132;01m{\u001b[39;00msoln[y]\u001b[38;5;132;01m:\u001b[39;00m\u001b[38;5;124m.3f\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n",
"\u001b[0;31mNameError\u001b[0m: name 'soln' is not defined"
]
}
],
"source": [
"print(f'h_10 = {soln[h_10]} BTU/lbm')\n",
"answer_print('8a', f'y = {soln[y]:.3f}')"
]
},
{
@ -500,25 +676,10 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": null,
"id": "4ce1da3b-82c9-492a-ae75-62bef90d9bae",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x_6 = 0.986\n",
"h_6 = 1192.609 BTU/lbm\n",
"\n",
"=========FINAL ANSWER=========\n",
"8b:\n",
"W_HPT = 2.605e+07 BTU/hr\n",
"=========FINAL ANSWER=========\n",
"\n"
]
}
],
"outputs": [],
"source": [
"# Find quality at 8\n",
"x_6 = (1.42335 - givens.get(680)['sf']) / (givens.get(680)['sg'] - givens.get(680)['sf'])\n",
@ -528,11 +689,53 @@
"h_6 = x_6 * (givens.get(680)['hg'] - givens.get(680)['hf']) + givens.get(680)['hf']\n",
"print(f'h_6 = {h_6:.3f} BTU/lbm')\n",
"\n",
"W_hpt = (72*60*60) *(1293.1 - h_6)\n",
"W_hpt = m_dot *(1293.1 - h_6)\n",
"answer_print('8b', f'W_HPT = {W_hpt:.3e} BTU/hr')\n",
" "
]
},
{
"cell_type": "markdown",
"id": "2d52ec40-02c1-42ca-bd54-12b9c2a1ce07",
"metadata": {},
"source": [
"**Part C**"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bbe89ad0-6f7d-42e7-bd5e-8b23176d8b10",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "c9a11bd3-f08d-4c68-a931-8b5dc8889f6d",
"metadata": {},
"source": [
"**Part D**\n",
"$$Q_{boiler} = \\dot m_5 h_5 - \\dot m_4 h_4 + \\dot m_7 h_7 - \\dot m_6 h_6$$\n",
"$$Q_{boiler} = \\dot m (h_5 - h_4 + h_7 - h_6)$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e9ff69ca-a2ac-44a8-9e79-feb4abb16f70",
"metadata": {},
"outputs": [],
"source": [
"h_5 = 1293.1 #BTU/lbm\n",
"h_7 = 1346.05 #BTU/lbm\n",
"h_4 = givens.get(2000)['hf']\n",
"print(f'h_4 = {h_4:.3f} BTU/lbm')\n",
"\n",
"Q_boiler = m_dot*(h_5 - h_4 + h_7 - h_6)\n",
"answer_print('8d', f'Q_boiler = {Q_boiler:.3e} BTU/hr')"
]
},
{
"attachments": {
"d49e73b1-8a6b-4c3a-8e39-f82c3fa98d67.png": {
@ -546,6 +749,55 @@
"![image.png](attachment:d49e73b1-8a6b-4c3a-8e39-f82c3fa98d67.png)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "2d7143d7-4d76-4d38-b2f3-fe85b2169a2c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"f = 0.881\n",
"N_U235 = 1.150e+21 U235 atoms/cm^3\n",
"q''' = 3.149e+02 W/cm^3\n",
"\n",
"=========FINAL ANSWER=========\n",
"9a:\n",
"q''' = 3.042e+07 BTU/hr-ft^2\n",
"=========FINAL ANSWER=========\n",
"\n"
]
}
],
"source": [
"#Find fuel mass fraction\n",
"M_U235 = 235.0439 #g/mol\n",
"M_U238 = 238.0508 #g/mol\n",
"M_O2 = 2*15.9944 #g/mol\n",
"r = 0.0485\n",
"\n",
"f = (r*M_U235 + (1-r)*M_U238)/(r*M_U235 + (1-r)*M_U238 + M_O2)\n",
"print(f'f = {f:.3f}')\n",
"\n",
"#Find Number Density\n",
"rho = 10.5 #g/cm^3\n",
"avo = 0.60225e24 #molecules/mol\n",
"N_U235 = avo/ M_U235*r*f*rho\n",
"\n",
"print(f'N_U235 = {N_U235:.3e} U235 atoms/cm^3')\n",
"\n",
"phi = 4.5e13 #Neutrons/s/cm^2\n",
"sigma_f = 200e-24 #cm^2\n",
"Q_fission = 190 #MeV/fission\n",
"\n",
"qppprime_fuel = N_U235*sigma_f*phi*Q_fission*1.601e-13 #MeV/fission\n",
"print(f'q\\'\\'\\' = {qppprime_fuel:.3e} W/cm^3')\n",
"\n",
"answer_print('9a', f'q\\'\\'\\' = {qppprime_fuel*3.41214/0.03281**3:.3e} BTU/hr-ft^2')"
]
},
{
"attachments": {
"1f62b1ff-56c4-4bce-8874-933dc44d5042.png": {