#!/usr/bin/env python
# coding: utf-8
# # 2D Linear Advection with Finite Differences
# ## CH EN 6355 - Computational Fluid Dynamics
# **Prof. Tony Saad (www.tsaad.net)
Department of Chemical Engineering
University of Utah**
#
# In[4]:
import numpy as np
get_ipython().run_line_magic('matplotlib', 'inline')
get_ipython().run_line_magic('config', "InlineBackend.figure_format = 'svg'")
import matplotlib.pyplot as plt
import matplotlib.animation as animation
plt.rcParams['animation.html'] = 'html5'
from matplotlib import cm
# In[5]:
nx = 21
ny = 21
Lx = 1.0
Ly = 1.0
x = np.linspace(0,Lx,nx)
y = np.linspace(0,Ly,ny)
dx = Lx/(nx-1)
dy = Ly/(ny-1)
# create a grid of coordinates
xx,yy = np.meshgrid(x,y)
# In[6]:
ω0 = 2.0*np.pi
u0 = lambda x,y : np.sin(ω0*x) * np.sin(ω0*y)
# plot the initial condition
plt.contourf(xx,yy,u0(xx,yy))
# In[7]:
cx = 1.0
cy = 1.0
dt = 0.001
tend = 0.5 #s
t = 0
cflx = cx * dt/dx
cfly = cy * dt/dy
# setup the initial condition
sol = []
u = np.zeros([ny+2,nx+2]) # we will ghost cells to simplify the implementation of periodic BCs
u[1:-1, 1:-1] = u0(xx,yy)
# set periodic boundaries
u[:,0] = u[:,-3] #x-minus face
u[:,-1] = u[:,2] #x-plus face
u[0,:] = u[-3,:] #y-minus face
u[-1,:] = u[2,:] #y-plus face
sol.append(u)
# In[8]:
while t < tend:
un = sol[-1]
unew = un.copy()
unew[1:-1,1:-1] = un[1:-1,1:-1] - cflx * (un[1:-1,1:-1] - un[1:-1,:-2]) - cfly * (un[1:-1,1:-1] - un[:-2,1:-1])
# set periodic boundaries
unew[:,0] = unew[:,-3] #x-minus face
unew[:,-1] = unew[:,2] #x-plus face
unew[0,:] = unew[-3,:] #y-minus face
unew[-1,:] = unew[2,:] #y-plus face
sol.append(unew)
t += dt
# In[9]:
fig = plt.figure(figsize=(6.1,5),facecolor='w')
ims = []
levs = np.linspace(-1,1,20)
i = 0
t = 0.0
for solution in sol:
if (i%10==0):
im = plt.contourf(xx,yy,solution[1:-1,1:-1],cmap=cm.jet,levels=levs,vmax=1.0,vmin=-1.0)
ims.append(im.collections)
i+=1
t += dt
cbar = plt.colorbar()
plt.clim(-1,1)
cbar.set_ticks(np.linspace(-1,1,5))
ani = animation.ArtistAnimation(fig, ims, interval=35, blit=True,repeat_delay=1000)
ani
# In[10]:
import urllib
import requests
from IPython.core.display import HTML
def css_styling():
styles = requests.get("https://raw.githubusercontent.com/saadtony/NumericalMethods/master/styles/custom.css")
return HTML(styles.text)
css_styling()