49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
# case2.py
|
|
|
|
import numpy as np
|
|
|
|
k = 0.5 # W / (cm K)
|
|
area = np.pi / 100 # cm^2
|
|
|
|
def analytical(a, x):
|
|
return 100 * np.cosh(a*x) / np.cosh(a)
|
|
|
|
def analytical_heat_loss(a):
|
|
return -100*k*area*a*np.tanh(a)
|
|
|
|
def fdm_array(n, a = 2.75):
|
|
dx = 1 / n
|
|
kap = 2 + ((a**2)*(dx**2))
|
|
kap_prime = (kap/2)
|
|
|
|
left_FDM_array = np.zeros((n, n))
|
|
left_FDM_array[0][0:2] = [kap_prime, -1]
|
|
row_FDM = [-1, kap, -1]
|
|
|
|
for i in range(1, n-1):
|
|
left_FDM_array[i][i-1:i+2] = row_FDM
|
|
|
|
left_FDM_array[n-1][n-2:n] = [-1, kap]
|
|
|
|
return left_FDM_array
|
|
|
|
def fem_array(n, a = 2.75):
|
|
dx = 1 / n
|
|
kap = (2/dx + 4*a**2*dx/6) / (1/dx - a**2*dx/6)
|
|
kap_prime = (kap/2)
|
|
|
|
left_FDM_array = np.zeros((n, n))
|
|
left_FDM_array[0][0:2] = [kap_prime, -1]
|
|
row_FDM = [-1, kap, -1]
|
|
|
|
for i in range(1, n-1):
|
|
left_FDM_array[i][i-1:i+2] = row_FDM
|
|
|
|
left_FDM_array[n-1][n-2:n] = [-1, kap]
|
|
|
|
return left_FDM_array
|
|
|
|
def right_array(n):
|
|
array = [0 for _ in range(n-1)]
|
|
array.append(100)
|
|
return array |