Numerical-Simulation/HW2/case2.py

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