In [ ]:
# Numerical solution with traditional loop
gridHtx = initialH.copy();
#print gridHtx
start_time = time.time();
for tn in range(totalGPoint_T - 1):
for xn in range(totalGPoint_X):
if (xn - 1) < 0: leftX = 0.0
else: leftX = gridHtx[tn, xn - 1];
if (xn + 1) > totalGPoint_X - 1: rightX = 0.0
else: rightX = gridHtx[tn, xn + 1];
gridHtx[tn + 1, xn] = gridHtx[tn , xn] + dt*(leftX - 2.0*gridHtx[tn, xn] + rightX)/(dx)**2;
# print 'tn = %i, xn = %i, gridHtx = %f'% (tn, xn, gridHtx[tn + 1,xn]);
stop_time = time.time();
total_time = stop_time - start_time;
print ('total computational time = %f'% total_time);
#print gridHtx
numberingFig = numberingFig + 1;
plt.figure(numberingFig, figsize = AlvaFigSize);
plt.plot(gridX, gridHtx.T);
plt.grid(True)
plt.title(r'$ Numerical \ solution \ (dt = %f,\ dx = %f) $'%(dt, dx), fontsize = AlvaFontSize);
plt.xlabel(r'$x \ (space)$', fontsize = AlvaFontSize); plt.ylabel(r'$H(x,t)$', fontsize = AlvaFontSize);
plt.show()
In [ ]:
# Numerical solution with the feature of NumPy
gridHtx = initialH.copy();
Hgear = initialH.copy();
#print gridHtx
start_time = time.time();
for tn in range(totalGPoint_T - 1):
leftX = np.roll(Hgear[tn, :], 1); leftX[0:1] = 0.0;
centerX = Hgear[tn, :];
rightX = np.roll(Hgear[tn, :], -1); rightX[-1:] = 0.0;
gridHtx[tn + 1, :] = Hgear[tn, :] + dt*(leftX - 2.0*centerX + rightX)/(dx)**2;
Hgear = gridHtx.copy()
stop_time = time.time();
total_time = stop_time - start_time;
print 'total computational time = %f'% (total_time);
#print gridHtx
numberingFig = numberingFig + 1;
plt.figure(numberingFig, figsize = AlvaFigSize);
plt.plot(gridX, gridHtx.T);
plt.grid(True)
plt.title(r'$ Numerical \ solution: (dt = %f,\ dx = %f) $'%(dt, dx), fontsize = AlvaFontSize);
plt.xlabel(r'$x \ (space)$', fontsize = AlvaFontSize); plt.ylabel(r'$H(x,t)$', fontsize = AlvaFontSize);
plt.show()
numberingFig = numberingFig + 1;
plt.figure(numberingFig, figsize = AlvaFigSize);
plt.pcolor(X, Y, gridHtx);
plt.title(r'$ Numerical \ solution: (dt = %f,\ dx = %f) $'%(dt, dx), fontsize = AlvaFontSize);
plt.xlabel(r'$x \ (space)$', fontsize = AlvaFontSize); plt.ylabel(r'$H(x,t)$', fontsize = AlvaFontSize);
#plt.colorbar();
plt.show()