casualguitar

Untitled

Dec 10th, 2021
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.81 KB | None | 0 0
  1. import numpy as np
  2. import scipy as sp
  3. from scipy.integrate import solve_ivp
  4. import matplotlib.pyplot as plt
  5. import math
  6.  
  7.  
  8. n = 3 # number of elements in spatial array
  9.  
  10. Tsat = 105 #inlet temperature (K)
  11. cpL = 2 #heat capacity (kJ/kg.K)
  12. cpV = 1 #heat capacity (kJ/kg.K)
  13. rhoL = 800 #liquid density (kg/m3)
  14. volumeV = 0.01/n #m3
  15. area = 0.1/n #m2
  16. mS = 1/n #kg
  17. gasConstant = 287.058*28 #J/kgK
  18. hVap = 200 #kJ/kg
  19. P = 200000 #Pa
  20. mW = 28 #amu
  21. mS = 57.75/n #kg
  22. cpS = 1.1 #kJ/kgK
  23. u = 1 #heat transfer coefficient between fluid and solid (W/m2.K)
  24. T0 = 80 #initial fluid temp (K)
  25.  
  26. Tin = 90 #Inlet fluid temperature (K)
  27. minL = 0.05 #inlet mass flow (kg/s)
  28. hIn = cpL*(Tin-Tsat) #Inlet enthalpy (kJ/kg)
  29.  
  30.  
  31. def temp(H):
  32.     #returns temperature given enthalpy (after processing function)
  33.     T = Tsat + (H/cpL)
  34.     return T
  35.  
  36. def mass(H,T):
  37.     #returns mass holdup given enthalpy
  38.     m = rhoL*volumeV
  39.     return m
  40.  
  41. def dpdh(H,T):
  42.     # returns mass holdup given enthalpy
  43.     dpdh = 0
  44.     return dpdh
  45.  
  46. def my_system(t, y, n, hIn, Tin, minL, mS, cpS, u, area):
  47.     dydt = np.zeros(3*n)
  48.    
  49.     # y = [h_0, Ts_0, m_0, ... h_n, Ts_n, m_n]
  50.     y[0] = hIn
  51.     y[1] = Tin
  52.     y[2] = minL
  53.  
  54.     M_dot = minL
  55.  
  56.     for i in range(3,3*n,3):
  57.         T, m = temp(y[i]), mass(y[i], temp(y[i]))
  58.         M_T =  u * area * (y[i+1] - T)
  59.        
  60.         # [h, T_S, m]
  61.         dydt[i] = (M_dot * (y[i-3] - y[i]) + M_T) / m
  62.         dydt[i+1] = -M_T / (mS * cpS)
  63.         dydt[i+2] = dydt[i] * dpdh(y[i], T) * volumeV #/ n
  64.  
  65.         M_dot -= dydt[i+2]
  66.  
  67.     return dydt
  68.  
  69. # starting condition
  70. H0 = cpL*(T0-Tsat) #fluid starting enthalpy (kJ/kg)
  71. Ts0 = 80 #solid starting temperature (K)
  72. m0 = mass(H0,T0)
  73.  
  74. y0 = np.copy(np.asarray([H0, Ts0, m0]*n))
  75. y0[0] = hIn
  76. y0[1] = Tin
  77. y0[2] = minL
  78.  
  79. # time steps
  80. t_max = 1000
  81. t = (0, t_max) #time range
  82. t_eval = np.linspace(0, t_max, 1000*t_max)  # optional
  83.  
  84. parameters =  (n, hIn, Tin, minL, mS, cpS, u, area)
  85. solution = solve_ivp(my_system, t, y0, args=parameters, method='LSODA', t_eval = t_eval)
  86.  
  87. h_arr = solution.y[0::3]
  88. Ts_arr = solution.y[1::3]
  89. m_arr = solution.y[2::3]
  90.  
  91. time = solution.t
  92. dt = 2*(time[2:]-time[:-2])
  93.  
  94. #recalculating derivative arrays
  95. dhdt_arr = (h_arr[:,2:]-h_arr[:,:-2]) / dt
  96. dTsdt_arr = (Ts_arr[:,2:]-Ts_arr[:,:-2]) / dt
  97. dmdt_arr = (m_arr[:,2:]-m_arr[:,:-2]) / dt
  98.  
  99. #creating the fluid array from the solid array
  100. Tf_arr = np.zeros_like(Ts_arr)
  101. Tf_arr[:,1:-1] = Ts_arr[:,1:-1] + dTsdt_arr * (mS * cpS) / (u * area)
  102. Tf_arr[:,0] = Ts0 #I.C cannot be calculated as there is no derivative at the boundary. Manually entering here
  103.  
  104. plt.plot(Tf_arr[1,:-1],'--', color='b', label="position 1")
  105. plt.ylabel(r'T (K)')
  106. plt.xlabel(r'Time')
  107. plt.ylim((80,91))
  108. plt.grid('both')
  109. plt.title("T fluid for first tank (n=3)")
  110. plt.legend(loc='lower right')
  111. plt.show()
  112.  
  113.  
Advertisement
Add Comment
Please, Sign In to add comment