Message info

Hi, I have written some code which solve's the 2d wave equation (code is below). It seems to work, however when the wave reaches the boundaries it reflects off them and I would like to remove this effect. Does anyone know of a method to do this?

Also, I would like to run it over a large area, but when I do the images take a long time to render (I've tried saving them as .png files instead, which is a bit faster) so if anyone has any suggestions how I can improve this I'd appreciate it.

Thanks in advance,

D

import matplotlib.pyplot as plt

import numpy as np

import pylab as py

from mpl_toolkits.mplot3d import Axes3D

from matplotlib import cm

pi = np.pi

#Set up grid.

fig = py.figure()

ax = Axes3D(fig)

nx = 10

nz = 10

X = np.arange(0, nx, 1)

Y = np.arange(0, nz, 1)

X, Y = np.meshgrid(X, Y)

nsteps = 100

# Constants for equation.

c = 4000

dt = 1e-4

h = 1

# Set up source.

xs = 0

zs = 0

#fig2 = py.figure()

ts = np.arange(dt,nsteps*dt,dt)

s = 0.5*np.sin(2*pi*100*ts)

#py.plot(ts,s)

#py.show()

# Homogeneous pressure field.

p = np.zeros([nx, nz, nsteps])

# Solve equation.

for t in range(0,nsteps-1):

for z in range(0,nz-1):

for x in range(0,nx-1):

p[xs,zs,t] = s[t]

k = (c*dt/h)**2

p[x,z,t] = 2*p[x,z,t-1] - p[x,z,t-2] + k*(p[x+1,z,t-1]-4*p[x,z,t-1]+p[x-1,z,t-1]+p[x,z+1,t-1]+p[x,z-1,t-1])

snap = p[:,:,t]

surf = ax.plot_surface(X,Y,snap, rstride=1, cstride=1, cmap=cm.jet, linewidth=0)

#fig.colorbar(surf, shrink=0.5, aspect=5)

py.draw()

#py.savefig('/home/davcra/Desktop/plots/2Dwave/'+str(t))

Also, I would like to run it over a large area, but when I do the images take a long time to render (I've tried saving them as .png files instead, which is a bit faster) so if anyone has any suggestions how I can improve this I'd appreciate it.

Thanks in advance,

D

import matplotlib.pyplot as plt

import numpy as np

import pylab as py

from mpl_toolkits.mplot3d import Axes3D

from matplotlib import cm

pi = np.pi

#Set up grid.

fig = py.figure()

ax = Axes3D(fig)

nx = 10

nz = 10

X = np.arange(0, nx, 1)

Y = np.arange(0, nz, 1)

X, Y = np.meshgrid(X, Y)

nsteps = 100

# Constants for equation.

c = 4000

dt = 1e-4

h = 1

# Set up source.

xs = 0

zs = 0

#fig2 = py.figure()

ts = np.arange(dt,nsteps*dt,dt)

s = 0.5*np.sin(2*pi*100*ts)

#py.plot(ts,s)

#py.show()

# Homogeneous pressure field.

p = np.zeros([nx, nz, nsteps])

# Solve equation.

for t in range(0,nsteps-1):

for z in range(0,nz-1):

for x in range(0,nx-1):

p[xs,zs,t] = s[t]

k = (c*dt/h)**2

p[x,z,t] = 2*p[x,z,t-1] - p[x,z,t-2] + k*(p[x+1,z,t-1]-4*p[x,z,t-1]+p[x-1,z,t-1]+p[x,z+1,t-1]+p[x,z-1,t-1])

snap = p[:,:,t]

surf = ax.plot_surface(X,Y,snap, rstride=1, cstride=1, cmap=cm.jet, linewidth=0)

#fig.colorbar(surf, shrink=0.5, aspect=5)

py.draw()

#py.savefig('/home/davcra/Desktop/plots/2Dwave/'+str(t))