Python Why is my Hydrodynamics Simulation Code Producing a Noisy Signal?

AI Thread Summary
The discussion revolves around a user's attempt to simulate a sod shock tube using Python code, but they encounter issues with plotting density versus distance, resulting in a noisy signal. The user seeks assistance in identifying potential errors in their code. Key points include the initialization of variables for density, pressure, and energy, as well as the calculation of maximum speed and fluxes. There are suggestions to repost the code using proper formatting tags to improve readability. Additionally, a side conversation addresses how to display code tags without triggering browser formatting issues, highlighting a workaround involving color changes to the first character of the tags. Overall, the focus remains on troubleshooting the simulation code for better output.
Silviu
Messages
612
Reaction score
11
Hi! I have this code which should simulate a sod shock tube like this: https://en.wikipedia.org/wiki/Sod_shock_tube But when i plot density versus distance I just get something like a noisy signal. Any idea where I am doing something wrong?

from matplotlib import pyplot as plt

import numpy as np

import copy

import random

import mathL=1.0

gamma = 1.4

N=1000

h=L/(N-1)

CFL=0.1v=[[0 for x in range(3)] for x in range(N)]

F=[[0 for x in range(3)] for x in range(N)]
# give the values to each cell
def initialise():

for i in range(N):

if i<N/2:

rho=1

p=1

u=0

else:

rho=0.125

p=0.1

u=0

e=p/((gamma-1)*rho)

v[0]=rho #create a matrix with first column for density, second for density times speed

v[1]=u*rho #and third for e, and a vector for the volume of each grid

v[2]=e
# calculate the maximum speed in the program

def cMax():

uMax=0

for i in range(N):

pressure = (gamma-1)*v[0]*v[2]

speed=v[1]/v[0]

c=np.sqrt(gamma*abs(pressure)/abs(v[0]))

if uMax< (c+abs(speed)):

uMax=c+abs(speed)

return uMax

def fluxCalculator():

for i in range(1,N-1):

#density flux

if v[0]< v[i-1][0]:

rho=v[i-1][0]

if v[0]> v[i-1][0]:

rho=v[0]

if v[0]==v[i-1][0]:

rho=0

F[0]=rho*v[1]/v[0]
#energy flux
if v[2]<v[i-1][2]:

e=v[i-1][2]

if v[2]>v[i-1][2]:

e=v[2]

if v[2]==v[i-1][2]:

e=0

F[2]=F[0]*e
#momentum flux
if v[1]/v[0]<v[i-1][1]/v[i-1][0]:

u=v[i-1][1]/v[i-1][0]

if v[1]/v[0]>v[i-1][1]/v[i-1][0]:

u=v[1]/v[0]

if v[1]/v[0]==v[i-1][1]/v[i-1][0]:

u=0

F[1]=0.5*u*(F[i+1][0]+F[0])initialise()
def update():

tau=CFL*h/cMax()

fluxCalculator()

for i in range(1,N-1):

rho=v[0]

m=v[1]

e=v[2]

pressure=(gamma-1)*rho*e

e=e-tau/h*pressure*(v[i+1][1]/v[i+1][0]-m/rho)

m=m-tau/h*(pressure-(gamma-1)*v[i-1][0]*v[i-1][2])

rho=rho-tau/h*(F[i+1][0]-F[0])

e=e-tau/h*(F[i+1][2]-F[2])

m=m-tau/h*(F[i+1][1]-F[1])

v[0]=rho

v[1]=m

v[2]=e

density=[]

position=np.arange(0,1+h/2,h)
for i in range(1000):

update()
for i in range(N):

density=density+[v[0]]

plt.plot(position,density)

plt.show()
 
Technology news on Phys.org
Please repost your code, using a
Python:
 tag at the top and a
tag at the bottom.

You might notice that what is displayed above switches to italics in the middle somewhere. This is because your code contains v[0]. The first pair of brackets is interpreted by browsers as a sign that the following text should be in italics. Each in the code is "gobbled up" and doesn't appear.
Silviu said:
But when i plot density versus distance I just get something like a noisy signal. Any idea where I am doing something wrong?
Given the amount of code, this is probably not enough for us to go on. If you can identify a section of code that you think is misbehaving, that would be very helpful.
 
Last edited:
  • Like
Likes BvU
Mark44 said:
Please repost your code, using a
Python:
 tag at the top and a
tag at the bottom.
Hehe, I wanted to point that out to Silviu in a private conversation, so his (her) thread would remain unanswered, but never mind. Out of curiosity: How can you let the tags
Python:
[code=python] and ##[\ /code]##  appear without the browser taking action
o0)?
 
BvU said:
Hehe, I wanted to point that out to Silviu in a private conversation, so his (her) thread would remain unanswered, but never mind. Out of curiosity: How can you let the tags
Python:
[code=python] and ##[\ /code]##  appear without the browser taking action
o0)?
I change the color of the first character in each tag. Black works fine -- this causes the browser to not interpret the tag as it usually would.
 
  • Like
Likes Ibix and BvU
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...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...
Back
Top