Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

HLL Riemann Shock Tube Matlab Problem

12 views
Skip to first unread message

laf...@gmail.com

unread,
Aug 29, 2008, 3:16:06 AM8/29/08
to
Hi There.

I am trying to write a simple code in MATLAB for an air-air shock tube
using Godunov's method and the HLL Flux. I am using the ideal gas
equation of state, and also assuming constant specific heats so we
have P=RT*rho and e=(5/2)RT.

My present code is having problems and I think it may be me
misunderstanding the Godunov/HLL Flux. Please, could someone look at
my code and help me out. See below.

Thanks for the help

clear all

clc format long

%----------------Constants and Initial
Conditions--------------------------

Dx=0.001; %Length of the Cells Dt=1*10^(-7); %Timestep N=1000; %Number
of cells = 2N T=300; %Number of Timesteps R=287.05; %Specific Gas
Constant for air

P_A=zeros(2*N,1); %Air Pressure of shock tube T_A=zeros(2*N,1); %Air
Temperature of shock tube rho_A=zeros(2*N,1); %Air density of shock
tube u_A=zeros(2*N,1); %Air velocity profile of shock tube
c_A=zeros(2*N,1); %Air sound velocity profile of shock tube

Ta=20; %Atmospheric Temperature in Celcius Pa=101325; %Atmospheric
Pressure in Pascals rho_a=(Pa)/(R*(Ta+273.15));%density of air (Ideal
Gas Law)

u_a=0; %initial shock tube air velocity c_a=331.3*sqrt(1+Ta/273.15);
%Air sound speed e_a=5/2*R*(Ta+273.15); %Air Internal Energy

PD=50000; % Pressure difference in the tube

%-----------Setting the initial condition in the tube----------------

for i=1:N

P_A(i)=Pa; T_A(i)=Ta; rho_A(i)=rho_a; u_A(i)=u_a; c_A(i)=c_a; P_A(N
+i)=Pa-PD; T_A(N+i)=Ta; rho_A(N+i)=P_A(N+i)/(R*(T_A(N+1)+273.15));
u_A(N+i)=u_a; c_A(N+i)=c_a;

end

e_A=5/2.*R.*(T_A+273.15);

%--------------------------------------------------------------------------

%----------------Creating initial set of conserved
variables---------------

for j=1:2*N

Q_A(1,j)=rho_A(j); Q_A(2,j)=rho_A(j)*u_A(j); Q_A(3,j)=rho_A(j)*(e_A(j)
+0.5*u_A(j)^2); end

Q_OLD=Q_A; AIRPRESSURE=P_A;

%--------------------HLL RIEMANN
SOLVER----------------------------------

for timestep=1:T

time=T-timestep

Q_NEW(:,1)=Q_OLD(:,1);

Q_NEW(:,2*N)=Q_OLD(:,2*N);

for i=2:2*N-1

%--------------Calculating F(i+1/2)--------------------------

SL=min([u_A(i)-c_A(i),u_A(i+1)-c_A(i+1)]);

SR=max([u_A(i)+c_A(i),u_A(i+1)+c_A(i+1)]);

RHO_L=Q_A(1,i);

U_L=Q_A(2,i)/RHO_L;

E_L=Q_A(3,i)/RHO_L;

P_L=AIRPRESSURE(i);

RHO_R=Q_A(1,i+1);

U_R=Q_A(2,i+1)/RHO_R;

E_R=Q_A(3,i+1)/RHO_R;

P_R=AIRPRESSURE(i+1);

if SL>=0

F_A_PLUS=[RHO_L*U_L;RHO_L*U_L^2+P_L;U_L*RHO_L*E_L+U_L*P_L];

marker=1;

else if SR<=0

F_A_PLUS=[RHO_R*U_R;RHO_R*U_R^2+P_R;U_R*RHO_R*E_R+U_R*P_R];

marker=2;

else

F_A_PLUS=(SR.*[RHO_L.*U_L;RHO_L.*U_L.^2+P_L;RHO_L.*E_L.*U_L+U_L.*P_L]-
SL.*[RHO_R.*U_R;RHO_R.*U_R.^2+P_R;RHO_R.*E_R.*U_R+U_R.*P_R]
+SL.*SR.*([RHO_R;RHO_R.*U_R;RHO_R.*E_R]-
[RHO_L;RHO_L.*U_L;RHO_L.*E_L]))./(SR-SL);

end

end

F(:,i)=F_A_PLUS;

end %end cell iteration

F(:,1)=F(:,2);

F(:,2*N)=F(:,2*N-1);

%------------------------------------------------------------------

%----------------Updating Vector of Conserved Variables---------------

for i=2:2*N-1

Q_NEW(:,i)=Q_OLD(:,i)+(Dt/Dx).*(F(:,i-1)-F(:,i));

end

%----------------------------------------------------------------------

%------------------Updating Primitive variables-----------------------

rho_A=Q_NEW(1,:);

u_A=Q_NEW(2,:)./rho_A;

e_A=Q_NEW(3,:)./rho_A-0.5.*u_A.^2;

T_A=(2/5).*e_A./R-273.15;

c_a=331.3.*sqrt(1+Ta./273.15);

AIRPRESSURE=(2/5).*rho_A.*e_A;

%---------------------------------------------------------------------

clear Q_OLD

Q_OLD=Q_NEW;

clear Q_NEW

end %end timestep

Svend Tollak Munkejord

unread,
Sep 3, 2008, 8:53:18 AM9/3/08
to
On 2008-08-29, laf...@gmail.com wrote:

> I am trying to write a simple code in MATLAB for an air-air shock tube
> using Godunov's method and the HLL Flux. I am using the ideal gas
> equation of state, and also assuming constant specific heats so we
> have P=RT*rho and e=(5/2)RT.
>
> My present code is having problems and I think it may be me
> misunderstanding the Godunov/HLL Flux. Please, could someone look at
> my code and help me out. See below.

I think you have to be more specific than "please debug my code" ;-)
Which source have you used? The following book should be detailed
enough:

E.F. Toro: Riemann Solvers and Numerical Methods for Fluid Dynamics,
Springer, 1999, 2nd ed.

I would also have a look at:

R. LeVeque: Finite Volume Methods for Hyperbolic Problems, Cambridge,
2002.

Regards,
--
Svend Tollak Munkejord

0 new messages