Python How Can I Implement a Three-Variable Advection Equation in Python?

  • Thread starter Thread starter leonmate
  • Start date Start date
  • Tags Tags
    Python
AI Thread Summary
The discussion focuses on developing a numerical solution for a three-variable advection equation using Python. The user has a basic implementation for a single variable and seeks guidance on extending it to three variables: u, v, and w, with their respective evolution equations. The current code uses the Euler method for time integration, but the user is unsure how to modify the loop to accommodate the interactions between the three variables. Initial conditions are provided, and the user is encouraged to break down the problem into smaller steps, create placeholder functions for unresolved parts, and iterate on the code to facilitate debugging. The conversation emphasizes the importance of structuring the solution methodically to handle the complexity of the equations.
leonmate
Messages
81
Reaction score
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:]
Our variables:
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
This code works for a single varible, I need it to work for three, I believe the structure is similar.

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:
Technology news on Phys.org
Not having really studied your code, I can give you some advice:

Manually write down the steps of how you would solve it. For each step, think about the code you'd write. When you have a complicated step break it up into smaller steps. When you just don't know what to do invent a function to handle it with the input variables needed and the output to be generated. After a while, you get the hang of it.

Note by creating placeholder functions for steps you can't implement yet, you make a program that can be run and debugged up to a certain point.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
What percentage of programmers have learned to touch type? Have you? Do you think it's important, not just for programming, but for more-than-casual computer users generally? ChatGPT didn't have much on it ("Research indicates that less than 20% of people can touch type fluently, with many relying on the hunt-and-peck method for typing ."). 'Hunt-and-peck method' made me smile. It added, "For programmers, touch typing is a valuable skill that can enhance speed, accuracy, and focus. While...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...
Back
Top