- #1
leonmate
- 84
- 1
Homework Statement
What I'm trying to achieve is an advection equation that will run using 3 variables. I must confess I don't have a great grasp over this part of my course. Its pretty complicated!
Homework Equations
The code I have at the moment is:
Code:
def SolveAdvectionEquation(a, b, t0, t1, Nx, Nt, v, method):
dx = (float) (b-a)/Nx
dt = (t1-t0)/Nt
# We have Nx+1 points for Nx intervals, plus an extra ghost point.
pts = linspace(a-dx,b,Nx+2)
times = linspace(t0,t1,Nt+1)
solndata = zeros((Nt+1,Nx+2))
sigma2 = 2.*0.1**2
solndata[0] = exp(-((pts-0.5)**2)/(sigma2))
solndata[0] = ApplyBoundaryConditions(solndata[0])
for tn in range(0,Nt):
solndata[tn+1] = method(solndata[tn],dx,dt,v)
solndata[tn+1] = ApplyBoundaryConditions(solndata[tn+1])
return times, pts[1:], solndata[:,1:]
a and b are my limits for x. For my example this is -1 and 1
likewise t0 and t1 are my limits for time
Nt and Nx are the number of time and x intervals (there will be Nt+1 times from t=0 to t=T and Nx+1 points in the interval of physical interest, x=a to x=b)
v is our Courant factor (dt/dx)
the method I want to use is Euler, I have a function made for this too:
Code:
def Euler(y0,dx,dt,v):
y1 = zeros(len(y0))
for i in range(1,len(y0)-1):
y1 = y0 - v*dt*(y0[i+1]-y0[i-1])/(2.0*dx)
return y1
The equations I want to solve are
du/dt = v
dv/dt = dw/dx
dw/dt = dv/dx
i.e., you have three variables (u, v, w) and the evolution equations for each of them depends on the other variables, or the spatial derivatives of the other variables. The assignment provides the initial conditions for each variable, since v = du/dt, and w = du/dx.
The Attempt at a Solution
I don't really know what to show you for this, I've got as far as I've shown above and really don't know where to go from there. I figure I need to alter the for loop at the bottom of the function?
Really need some help here, this is actually a computational physics assignment but felt it was better suited for the computer science section. Let me know if it should really be in one of the physics forums.
Last edited: