Emad Masroor / Nov 30 2023
Upwind scheme
from scipy.integrate import solve_ivpfrom numpy import zeros,exp,linspace,array,sin,cos,arange,pifrom numpy.linalg import normimport matplotlib.pyplot as plt# Decide schemescheme = "central"# Define cc = 1.5# Define domaindelta_x = 0.1delta_t = 0.05final_t = 3.0x_values = arange(0,4*pi+delta_x,delta_x)t_values = arange(0,final_t+delta_t,delta_t)n = len(x_values)m = len(t_values)# Initialize empty vector to contain solutionphi_values = zeros((n,m))# set initial conditionphi_values[:,0] = exp(-(x_values-pi)**2)# advance in timefor j in range(1,m): # space sweep for i in range(n): if i == 0 or i == n-1: phi_values[i,j] = 0 else: # for interior points phi_this = phi_values[i,j-1] phi_east = phi_values[i+1,j-1] phi_west = phi_values[i-1,j-1] if scheme == "central": phi_values[i,j] = phi_this - \ (c*delta_t/(2*delta_x))*(phi_east-phi_west) elif scheme == "upwind": if c > 0: phi_values[i,j] = 0 elif c < 0: phi_values[i,j] = 0def plotstep(k): plt.plot(x_values[1:n-1],phi_values[1:n-1,k],label=f't = {k*delta_t:.2f}') return Noneplt.figure(1)plt.plot(x_values,phi_values[:,0],label=f't = 0')plt.title(f'Scheme: {scheme}')plotstep(30)plotstep(50)plt.legend()plt.show()0.6s