82 lines
1.5 KiB
Python
Executable File
82 lines
1.5 KiB
Python
Executable File
#!/usr/bin/python
|
|
# Boundary layer flow
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
def K(t):
|
|
"""
|
|
Forcing function as a function of time.
|
|
"""
|
|
return (1-np.exp(-0.1*t))*np.cos(t)
|
|
|
|
|
|
s = 10 # Shear wave number
|
|
n = 50 # Number of gridpoints in vertical direction
|
|
|
|
# Grid
|
|
y = np.linspace(0, 1, n)
|
|
|
|
dy = y[1]-y[0]
|
|
dt = 0.0005
|
|
|
|
l = (dt/(s**2*dy**2))
|
|
|
|
hnu = np.exp(-np.sqrt(1j)*s*y)
|
|
# fnu=(1-1j)/s
|
|
fnu = 0
|
|
|
|
|
|
def u_ex(tn):
|
|
"""
|
|
Exact harmonic solution of the velocity field
|
|
"""
|
|
return (((1-hnu)/(1-fnu))*np.exp(1j*(tn))/1j).real
|
|
|
|
|
|
def u_np1(un, tn, dt):
|
|
Kn = K(tn)
|
|
unp1 = un
|
|
unp1[0] = 0 # Velocity zero ver here
|
|
unp1[1:-1] = un[1:-1]+dt*Kn+l*(un[0:-2]-2*un[1:-1]+un[2:])
|
|
unp1[-1] = unp1[-2] # Approximate 'infinity' bc
|
|
return unp1
|
|
|
|
|
|
un0 = np.zeros(n, float)
|
|
t = 0
|
|
un = un0
|
|
|
|
f = plt.figure(1, figsize=(12, 6))
|
|
|
|
linefd, = plt.plot(un0, y)
|
|
linee, = plt.plot(un0, y)
|
|
plt.legend(('Finite difference', 'Periodic exact'),
|
|
loc='lower right')
|
|
plt.ylim(0, 1)
|
|
plt.xlim(-1.5, 1.5)
|
|
plt.ylabel('Distance from wall [m]')
|
|
plt.xlabel('Velocity [m/s]')
|
|
plt.grid(True)
|
|
plt.show(block=False)
|
|
i = 0
|
|
uold = un
|
|
|
|
try:
|
|
while(True):
|
|
t += dt
|
|
uold = un
|
|
un = u_np1(uold, t, dt)
|
|
if(i % 25 == 0):
|
|
linefd.set_xdata(un)
|
|
linee.set_xdata(u_ex(t))
|
|
f.canvas.draw_idle()
|
|
plt.pause(.000005)
|
|
if not plt.fignum_exists(1):
|
|
break
|
|
i += 1
|
|
except Exception:
|
|
pass
|
|
|
|
exit(0)
|