Advertisement
Guest User

p3_num_code

a guest
Oct 22nd, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.23 KB | None | 0 0
  1. import numpy as np
  2. import numpy.linalg as npla
  3. import matplotlib.pyplot as plt
  4.  
  5.  
  6. # geometry
  7.  
  8. r_f = 1.056/2
  9. t_g = 0.008
  10. t_c = 0.0864
  11. r_c = 0.6224
  12.  
  13. # thermal properties
  14.  
  15. kf = 0.025
  16. kg = 0.004
  17. kc = 0.107
  18.  
  19. t_inlet = 269+273
  20. t_outlet = 286+273
  21. t_inf = (t_inlet+t_outlet)/2
  22. t_inf_C = (269+286)/2
  23.  
  24. avg_heat = 50.3
  25. max_heat = 111.5
  26.  
  27. avg_vol_heat = avg_heat*2/r_f
  28. max_vol_heat = max_heat*2/r_f
  29.  
  30. h_inf_0 = 0.0484
  31.  
  32. # nodes
  33.  
  34. n_f = 10
  35. n_g = 5
  36. n_c = 5
  37. n_total = n_f + n_g + n_c + 1
  38.  
  39. # spacing
  40.  
  41. df = r_f / n_f
  42. dg = t_g / n_g
  43. dc = t_c / n_c
  44.  
  45. # build list of radius at each point
  46.  
  47. rad_f = np.linspace(df, r_f, n_f)
  48. rad_g = np.linspace(r_f + dg, t_g + r_f, n_g)
  49. rad_c = np.linspace(rad_g[-1] + dc, r_c, n_c)
  50.  
  51. radii = np.append(rad_f, [rad_g, rad_c])
  52. radii = np.append(np.array(0), radii)
  53.  
  54. # set id for each region
  55.  
  56. # 0 = fuel center node
  57. # 1 = fuel inner node
  58. # 2 = fuel/gap interface node
  59. # 3 = gap inner node
  60. # 4 = gap/clad interface node
  61. # 5 = clad inner node
  62. # 6 = clad/coolant interface node
  63.  
  64. region_id = np.zeros(n_total, dtype=int)
  65.  
  66. region_id[1:n_f] = 1
  67. region_id[n_f] = 2
  68. region_id[n_f + 1:n_f + n_g] = 3
  69. region_id[n_f + n_g] = 4
  70. region_id[n_f + n_g + 1:n_total - 1] = 5
  71. region_id[n_total - 1] = 6
  72.  
  73. # set up functions for coefficients
  74.  
  75. # fuel nodes
  76. # fuel inner backward (T_i-1)
  77. f_back = lambda i: -(radii[i]-df/2)/radii[i]
  78.  
  79. # fuel inner forward (T_i+1)
  80. f_forw = lambda i: -(radii[i]+df/2)/radii[i]
  81.  
  82. # fuel/gap interface nodes
  83. # fuel/gap interface backward
  84. fg_back = lambda i: kf/df*(radii[i]-df/2)
  85.  
  86. # fuel/gap interface central
  87. fg_cent = lambda i: (-kf/df*(radii[i]-df/2)-kg/dg*(radii[i]+dg/2))
  88.  
  89. # fuel/gap interface forward
  90. fg_forw = lambda i: (kg/dg*(radii[i]+dg/2))
  91.  
  92. # fuel/gap interface q
  93. fg_q = lambda i: -(radii[i]*df-df**2/4)/2
  94.  
  95. # gap nodes
  96. # gap inner backward
  97. g_back = lambda i: (radii[i]-dg/2)/dg
  98.  
  99. # gap inner central
  100. g_cent = lambda i: -2*radii[i]/dg
  101.  
  102. # gap inner forward
  103. g_forw = lambda i: (radii[i]+dg/2)/dg
  104.  
  105. # gap/clad interface nodes
  106. # gap/clad interface backward
  107. gc_back = lambda i: kg/dg*(radii[i]-dg/2)
  108.  
  109. # gap/clad interface central
  110. gc_cent = lambda i: (-kg/dg*(radii[i]-dg/2)-kc/dc*(radii[i]+dc/2))
  111.  
  112. # gap/clad interface forward
  113. gc_forw = lambda i: kc/dc*(radii[i]+dc/2)
  114.  
  115. # clad inner nodes
  116. # clad inner forward
  117. c_forw = lambda i: (radii[i]+dc/2)/dc
  118.  
  119. # clad inner central
  120. c_cent = lambda i: -2*radii[i]/dc
  121.  
  122. # clad inner backward
  123. c_back = lambda i: (radii[i]-dc/2)/dc
  124.  
  125.  
  126. # set up matrices
  127.  
  128. a_mat = np.zeros([n_total, n_total])
  129. q_vec = np.zeros(n_total)
  130.  
  131. # fill the a matrix with coefficients
  132. for i in range(n_total):
  133.     # get the id of the current node
  134.     node = region_id[i]
  135.     # place coefficients according to the region id
  136.  
  137.     # node at center of fuel
  138.     if node == 0:
  139.         a_mat[i, i] = 1
  140.         a_mat[i, i+1] = -1
  141.         q_vec[i] = df**2/4/kf
  142.  
  143.     # node at inner fuel
  144.     if node == 1:
  145.         a_mat[i, i-1] = f_back(i)
  146.         a_mat[i, i+1] = f_forw(i)
  147.         a_mat[i, i] = 2
  148.         q_vec[i] = df**2/kf
  149.  
  150.     # node at fuel/gap interface
  151.     if node == 2:
  152.         a_mat[i, i-1] = fg_back(i)
  153.         a_mat[i, i+1] = fg_forw(i)
  154.         a_mat[i, i] = fg_cent(i)
  155.         q_vec[i] = fg_q(i)
  156.  
  157.     # node at inner gap
  158.     if node == 3:
  159.         a_mat[i, i-1] = g_back(i)
  160.         a_mat[i, i+1] = g_forw(i)
  161.         a_mat[i, i] = g_cent(i)
  162.  
  163.     # node at gap/clad interface
  164.     if node == 4:
  165.         a_mat[i, i-1] = gc_back(i)
  166.         a_mat[i, i+1] = gc_forw(i)
  167.         a_mat[i, i] = gc_cent(i)
  168.  
  169.     # node at inner clad
  170.     if node == 5:
  171.         a_mat[i, i-1] = c_back(i)
  172.         a_mat[i, i+1] = c_forw(i)
  173.         a_mat[i, i] = c_cent(i)
  174.  
  175.     # node at clad/coolant interface
  176.     if node == 6:
  177.         a_mat[i, i-1] = -kc/dc*(r_c-dc/2)
  178.         a_mat[i, i] = h_inf_0*r_c+kc/dc*(r_c-dc/2)
  179.         q_vec[i] = h_inf_0*r_c*t_inf_C
  180.  
  181.  
  182. # solve the system
  183. def solve_system(q_vector):
  184.     temps = npla.solve(a_mat, q_vector)
  185.     return temps
  186.  
  187.  
  188. temp_profile = solve_system(q_vec)
  189. fig, ax = plt.subplots()
  190. ax.plot(radii, temp_profile)
  191. plt.show()
  192. fig.savefig("/users/1uw/documents/college/ne571/p3num.png")
  193.  
  194. plt.close("all")
  195.  
  196.  
  197. def set_h(h_inf, q_vector):
  198.     q = h_inf*r_c*t_inf_C
  199.     q_vector[-1] = q
  200.     return q_vector
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement