二维平板导热数值计算代码
import matplotlib.pyplot as plt
import numpy as np
import copy
Bio = 0.5
T0_1 = 400
T0_2 = 300
T_00 = 300
x_n = 100
y_n = 50
T_ii = np.empty([y_n, x_n])
T_ii_aft = np.empty([y_n, x_n])
def inside_func(T1, T2, T3, T4):
T = 0.25 * (T1+T2+T3+T4)
return T
def ns_side_func(Tw, Te, Ts, T00):
a = 2*Bio/(2+Bio)
b = 1/(3+a)
T = b*(Tw+Te+Ts) + b*a*T00
return T
def ws_side_func(Tn, Te, Ts, T0):
T = 0.2 * (Tn+Te+Ts+2*T0)
return T
def cor_side_func(Te, Ts, T0, T00):
a = 2*Bio/(2+Bio)
b = 1/(4+a)
T = b*(Te+Ts+2*T0) + b*a*T00
return T
e = 1
iteration = 0
while e > 0.005:
T_ii_aft[0][0] = cor_side_func(T_ii[0][1], T_ii[1][0], T0_1, T_00)
T_ii_aft[y_n-1][0] = cor_side_func(T_ii[y_n-1][1], T_ii[y_n-2][0], T0_1, T_00)
T_ii_aft[0][x_n-1] = cor_side_func(T_ii[0][x_n-2], T_ii[1][x_n-1], T0_2, T_00)
T_ii_aft[y_n-1][x_n-1] = cor_side_func(T_ii[y_n-1][x_n-2], T_ii[y_n-2][x_n-1], T0_2, T_00)
for j in range(1, x_n-1):
T_ii_aft[0][j] = ns_side_func(T_ii[0][j - 1], T_ii[0][j + 1], T_ii[1][j], T_00)
T_ii_aft[y_n-1][j] = ns_side_func(T_ii[y_n-1][j - 1], T_ii[y_n-1][j + 1], T_ii[y_n-2][j], T_00)
for i in range(1, y_n-1):
T_ii_aft[i][0] = ws_side_func(T_ii[i-1][0], T_ii[i+1][0], T_ii[i][1], T0_1)
T_ii_aft[i][x_n-1] = ws_side_func(T_ii[i-1][x_n-1], T_ii[i+1][x_n-1], T_ii[i][x_n-2], T0_2)
for i in range(1, y_n-1):
for j in range(1, x_n-1):
T_ii_aft[i][j] = inside_func(T_ii[i-1][j], T_ii[i+1][j], T_ii[i][j-1], T_ii[i][j+1])
iteration += 1
if iteration == 5000:
print('达到迭代上限')
break
e = abs(T_ii - T_ii_aft).max()
print(e)
T_ii = copy.deepcopy(T_ii_aft)
plt.imshow(T_ii, 'gist_heat_r')
plt.colorbar()
plt.show()