CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   Main CFD Forum (http://www.cfd-online.com/Forums/main/)
-   -   lid-driven cavity using Matlab (http://www.cfd-online.com/Forums/main/12604-lid-driven-cavity-using-matlab.html)

M.A November 27, 2006 09:49

lid-driven cavity using Matlab
 
Does anyone happen to have a Matlab code for solving the 2-D lid-driven cavity problem in primitive variables (i.e. pressure and velocity)? I will be so grateful, if you would be able to share it.

Thanks a lot.


Andrew Hayes November 27, 2006 10:38

Re: lid-driven cavity using Matlab
 
does it have to be in primitive variables? It is not difficult at all using streamfuntion-vorticity, or streamfunction-velocity equations.

M.A November 27, 2006 11:06

Re: lid-driven cavity using Matlab
 
Thanks Andrew. In fact, I have already solved the problem using vorticity-streamfuntion formulation (which is quite easy), but I'm having some troubles implementing the SIMPLE algorithm (on staggered grid) for this problem in Matlab.


Andrew Hayes November 28, 2006 07:46

Re: lid-driven cavity using Matlab
 
I have you tried using the SIMPLER method? Just out of curiousity, how are you defining the pressure in the cavity? I was reading that the SIMPLE method cannot be used in all situations. Can it be used here? You might need to incorporate the under-relaxation constant.

idris August 24, 2009 02:51

Quote:

Originally Posted by Andrew Hayes
;46703
does it have to be in primitive variables? It is not difficult at all using streamfuntion-vorticity, or streamfunction-velocity equations.

hi there, i know those equation, i applied the central difference method and put it in matlab code. The stream function i design it to be dimensionless and the same for the vorticity.

the problem is, after the coding, i can't get the nice solution.

i'm sorry to bother you all, but can you send me the code that's working because my code isn't. I just want to compare or to determine where is my code (matlab or fortran) went wrong. ok.

my email: sesenangje@yahoo.com

Thanx very much

Jonas Holdeman August 24, 2009 09:15

I have a Hermite FE code used in a paper to appear in IJNMF. It computes the velocity and the pressure as a function of the velocity.

idris August 26, 2009 00:48

Quote:

Originally Posted by Jonas Holdeman (Post 227288)
I have a Hermite FE code used in a paper to appear in IJNMF. It computes the velocity and the pressure as a function of the velocity.

thanx very much, but mine in FD not FE. but if you want to send me the codes, it will be really nice of you. With the codes, i can validate my streamline of a lid driven cavity by comparing your solution with mine. In addition, your solution was accepted by the international journal which i can rely on. thanks for your help. Would you mind send the FE code to me? my email is as shown above

Thank you very very much

Jonas Holdeman August 26, 2009 13:02

Idris,

I will send the Matlab LDC code for one of the methods to you as attachments. A preprint of the paper describing the method can be found at http://webpages.charter.net/jtholdeman/RevIJNMFart1.pdf .

idris September 2, 2009 04:30

thanx guys,
i finally created the code myself. it's the matter of boundary condition.
if the boundary condition is wrong, the solution also wrong. Actually my task is to solve vorticity-streamfunction equation of a lid driven cavity at steady state(using central finite difference). and not to forget,the relaxation scheme is needed when the reynolds number is very high (Re >1000)

Anyway, many thanks to everybody, especially Jonas Holdeman.

bye.

bhagat October 8, 2009 06:16

can u please share the code....

thank you.

idris October 8, 2009 23:28

ok, here it is

clear all;clf;clc;
re=100; % for higher reynolds number(>500-1000), use under relaxation
rex=1; % underrelaxation, 0<rex<1
rexb=rex;

nx=51; dx=1/(nx-1); %100x100 grid (101*101 nodes)
ny=51; dy=1/(ny-1);

fac=2*(1/dx^2+1/dy^2);
Y=1;
uo=1;
nu=Y/(uo*re);


% initial condition

p(1:nx,1:ny)=0;
o(1:nx,1:ny)=0;
psi(1:nx,1:ny)=0;
omega(1:nx,1:ny)=0;
uact(1:nx,1:ny)=0;
vact(1:nx,1:ny)=0;
u(1:nx,1:ny)=0;
v(1:nx,1:ny)=0;
u(1:nx,ny)=1;

for iteration =1:2000%iteration

disp(['iteration= ',int2str(iteration)])
% stream function(internal nodes)

for i=2:(nx-1)
for j=2:(ny-1)
pold(i,j)=p(i,j);
f1=1/fac*(o(i,j)+(p(i+1,j)+p(i-1,j))/dx^2+(p(i,j+1) ...
+p(i,j-1))/dy^2);
p(i,j)=p(i,j)+rex*(f1-p(i,j));
end
end

% Vorticity (Boundary nodes)
for j=1:ny
fab=-2*p(2,j)/dx^2; %left side(AB)
o(1,j)=o(1,j)+rexb*(fab-o(1,j));
fcd=-2*p(nx-1,j)/dx^2; %right side(CD)
o(nx,j)=o(nx,j)+rexb*(fcd-o(nx,j));
end

for i=1:nx
fad=-2*p(i,2)/dy^2; %bottom side(AD)
o(i,1)=o(i,1)+rexb*(fad-o(i,1));
fbc=-(2*p(i,ny-1)+2*uo*dy)/dy^2; %top side (BC)
o(i,ny)=o(i,ny)+rexb*(fbc-o(i,ny));
end

%vorticity internal nodes

for i=2:(nx-1)
for j=2:(ny-1)
oold(i,j)=o(i,j);
f2=1/fac*((o(i+1,j)+o(i-1,j))/dx^2+(o(i,j+1)+o(i,j-1))/dy^2 ...
-re*(p(i,j+1)-p(i,j-1))*(o(i+1,j)-o(i-1,j))/(4*dx*dy)...
+re*(p(i+1,j)-p(i-1,j))*(o(i,j+1)-o(i,j-1))/(4*dx*dy));

o(i,j)=o(i,j)+rex*(f2-o(i,j));


end
end

% Calculate the velocity (u and v)

for i=2:(nx-1)
for j=2:(ny-1)
u(i,j)=(p(i,j+1)-p(i,j-1))/(2*dy);
v(i,j)=-(p(i+1,j)-p(i-1,j))/(2*dx);
end
end

% rearrange in cartesian coordinate
%(which originally in matrix coordinate)
for i=1:nx
for j=1:ny
k=i;
l=j;
psi(l,k)=p(i,j);
omega(l,k)=o(i,j);
uact(l,k)=u(i,j);
vact(l,k)=v(i,j);
end
end
figure(1)% Streamline plot with number
Z = psi(1:ny,1:nx);
X = linspace(0,1,size(Z,2));
Y = linspace(0,1,size(Z,1));
[c,h] = contour(X,Y,Z);

axis equal
axis([0 1 0 1])
drawnow
end

hope you can further developed these code by yourself. It's up to you what you are going to do about it :-)

bhagat October 9, 2009 04:45

thank you very much

lava12005 November 13, 2010 04:55

Hi guys, I am a newbie in CFD thing. Currently I am trying to solve the same problem also.

I solved the problem using the stream function formulation, and now I'm trying to solve in in terms of primitive variable (u,v, and p) using projection method.

First I tried using the most simple explicit projection method and it turns out the solution diverge, and I also used implicit projection method where the value of velocity field in each time step is iterated first and it still diverge. I don't know whats wrong with the code.. Have any of you tried to solve the problem using Projection method?

Marshall November 15, 2010 14:29

thank you very much for posting these codes. but these codes seem to have some problems. it doesnt give correct plot nor correct data. if you have any other simple matlab code for lid driven cavity problem that worked , i would be very grateful.

Tanay November 16, 2010 12:05

Hello All,
I'm trying to implement SIMPLE in Finite Volume method in driven-cavity flow using C++ in basic variables. Since the problem is steady state, I start out with u=0, v=0, p=0 for all interior nodes. This is causing the code to diverge away to infinity. For high viscosities, the divergence is less pronounced but u doesn't ever become negative in the results as it should. What may be the problem? Is it because I'm using unrelaxed pressure and velocity corrector equations?
Thanks in advance.

vignesh November 20, 2010 16:40

Lid driven cavity problem with Stream-function vorticity formulation for Re = 150
 
Hello! I'm a beginner in CFD and coding; I have to solve the lid driven cavity problem for Re = 150 (non-dimensionalised). I've used the forward euler scheme in the code, though i'm supposed to use FTCS. I tried implementing it but there were some problems and couldn't get the plot properly. Could someone help me to check if the code and plot are correct? And also how to implement FTCS into the code? It would be really helpful.. Thank you very much!!!

function u = strvor(N)
M = N+1;
N = N+1;

%Setting initial values

DX = 1/(M-1);
DY = 1/(N-1);

RE = 150;
OMEGA = 1.9;
%Q = 1;
%h = min(((RE/2)*(((DX*DX)*(DY*DY))/((DX*DX)+(DY*DY)))), ((2/(RE*(Q*Q)))));
h = 0.0005;



UK = zeros (M, N);
VK = zeros (M, N);
P = zeros (M, N);
PSIK = zeros (M, N);
ZETAK = zeros (M, N);


%Setting boundary conditions

for i=1:M,
UK(i,1) = 0;
UK(i,N) = 0;

VK(i,1) = 0;
VK(i,N) = 0;
end

for j=1:N,
UK(1,j) = 0;
UK(M,j) = 1.0;

VK(1,j) = 0;
VK(M,j) = 0;
end

%Solving Poisson equation (SOR)
RES = 100;
TOL = 1e-6;
k=0;

while(abs(RES)>TOL || k<100),
k = k+1;

for i=2 : M-1,
for j=2: N-1,
R=0.25*(PSIK(i+1,j)+PSIK(i-1,j)+PSIK(i,j-1)+PSIK(i,j+1)+(ZETAK(i,j)*DX*DX));
PSIK(i,j)=OMEGA*R + (1.0-OMEGA)*PSIK(i,j);
end
end

%Calculating velocity field
for i=2:M-1,
for j=2:N-1,
UK(i,j) = (PSIK(i,j+1) - PSIK(i, j-1))/(2*DX);
VK(i,j) = (PSIK(i-1,j) - PSIK(i+1, j))/(2*DY);
end
end

for i=1:M,
ZETAK(i,N) = ((2/(DX*DX))*((PSIK(i,N))-(PSIK(i,N-1))));
ZETAK(i,1) = ((2/(DX*DX))*((PSIK(i,1)-(PSIK(i,2)))));
end
for j=1:N,
ZETAK(1,j) = ((2/(DX*DX))*((PSIK(1,j)-(PSIK(2,j)))));
ZETAK(M,j) = ((2/(DY*DY))*((PSIK(M,j))-(PSIK((M-1),j))+(1.0*(-DY))));
end
ZETAK1=ZETAK;

%Marching forward
for i=2:M-1,
for j=2:N-1,
ZETAK1(i,j)= h*(((1/RE)*(((ZETAK(i+1,j)-2*ZETAK(i,j)+ZETAK(i-1,j))/DX^2)+((ZETAK(i,j+1)-2*ZETAK(i,j)+ZETAK(i,j-1))/DX^2)))-(((UK(i,j)*(ZETAK(i+1,j)-ZETAK(i-1,j)))-(VK(i,j)*(ZETAK(i,j+1)-ZETAK(i,j-1))))/2*DX))+ZETAK(i,j);
end
end


for i=2 : M-1,
for j=2: N-1,
RES=-ZETAK1(i,j)*DX*DX + 4*PSIK(i,j) - PSIK(i+1,j) - PSIK(i-1,j) - PSIK(i,j+1) - PSIK(i,j-1);

if (abs(RES)>TOL)
ZETAK=ZETAK1;
break;
end
end

if (abs(RES)>TOL)
break;
end
end

end

%Calculating inner point values
for i = 2 : M-1,
for j = 2 : N-1,

a = -1/4*(2*((PSIK(i+1,j)-2*PSIK(i,j)+PSIK(i-1,j))*(PSIK(i,j+1)-2*PSIK(i,j)+PSIK(i,j-1))/DX^2 - ((PSIK(i+1,j+1)-PSIK(i-1,j+1))-(PSIK(i+1,j-1)+PSIK(i-1,j-1)))^2/16/DX^2) - P(i+1,j) - P(i-1,j) - P(i,j+1) - P(i,j-1));
P(i,j) = OMEGA*a + (1.0-OMEGA)*P(i,j);

if i==2
P(1,j) = 1/3/RE*(ZETAK(1,j+1)-ZETAK(1,j-1)) + 4/3*P(2,j) - P(3,j)/3;
end
if i==M-1
P(M,j) = 1/3/RE*(ZETAK(M,j+1)-ZETAK(M,j-1)) + 4/3*P(M-1,j) - P(M-2,j)/3;
end
if j==2
P(i,1) = -1/3/RE*(ZETAK(i+1,1)-ZETAK(i-1,1)) + 4/3*P(i,2) - P(i,3)/3;
end
if j==M-1
P(i,M) = -1/3/RE*(ZETAK(i+1,M)-ZETAK(i-1,M)) + 4/3*P(i,M-1) - P(i,M-2)/3;
end

end
end

%Plotting
figure(1)% Streamline plot with number
Z = PSIK(1:M,1:N);
X = linspace(0,1,size(Z,2));
Y = linspace(0,1,size(Z,1));
[c,h] = contour(X,Y,Z);

figure(2)% Pressure plot
Z = P(1:M-1,1:N-1);
X = linspace(0,1,size(Z,2));
Y = linspace(0,1,size(Z,1));
[c,h] = contourf(X,Y,Z);

axis equal
axis([0 1 0 1])
drawnow

u=UK;
end

ainal May 15, 2011 10:56

lid driven Cavity using FVM
 
hello ,
I am working on a CFD problem and developing a Matlab code for "Lid driven cavity " problem using finite volume method and Symmetric Couple Gauss Seidel Scheme but i have some confusion in writing the code in Matlab so can any one help me in this ...

I shall be very grateful if anyone can share this

ananthulasriram April 15, 2013 00:15

bro do u have any unsteady code for the same problem.. ??

fireblade April 14, 2014 06:23

Lid Driven Cavity using Staggered grid
 
Hi,
i have done LDC in collocated grid in stream function vorticity method...right now trying to do it in staggered grid in primitive variable method FDM....can somebody send me the code so that i can verify my results.. sm4fn@hotmail.com
i'm using SIMPLE

Boobale July 21, 2014 10:29

Quote:

Originally Posted by idris (Post 231964)
ok, here it is

clear all;clf;clc;
re=100; % for higher reynolds number(>500-1000), use under relaxation
rex=1; % underrelaxation, 0<rex<1
rexb=rex;

nx=51; dx=1/(nx-1); %100x100 grid (101*101 nodes)
ny=51; dy=1/(ny-1);

fac=2*(1/dx^2+1/dy^2);
Y=1;
uo=1;
nu=Y/(uo*re);


% initial condition

p(1:nx,1:ny)=0;
o(1:nx,1:ny)=0;
psi(1:nx,1:ny)=0;
omega(1:nx,1:ny)=0;
uact(1:nx,1:ny)=0;
vact(1:nx,1:ny)=0;
u(1:nx,1:ny)=0;
v(1:nx,1:ny)=0;
u(1:nx,ny)=1;

for iteration =1:2000%iteration

disp(['iteration= ',int2str(iteration)])
% stream function(internal nodes)

for i=2:(nx-1)
for j=2:(ny-1)
pold(i,j)=p(i,j);
f1=1/fac*(o(i,j)+(p(i+1,j)+p(i-1,j))/dx^2+(p(i,j+1) ...
+p(i,j-1))/dy^2);
p(i,j)=p(i,j)+rex*(f1-p(i,j));
end
end

% Vorticity (Boundary nodes)
for j=1:ny
fab=-2*p(2,j)/dx^2; %left side(AB)
o(1,j)=o(1,j)+rexb*(fab-o(1,j));
fcd=-2*p(nx-1,j)/dx^2; %right side(CD)
o(nx,j)=o(nx,j)+rexb*(fcd-o(nx,j));
end

for i=1:nx
fad=-2*p(i,2)/dy^2; %bottom side(AD)
o(i,1)=o(i,1)+rexb*(fad-o(i,1));
fbc=-(2*p(i,ny-1)+2*uo*dy)/dy^2; %top side (BC)
o(i,ny)=o(i,ny)+rexb*(fbc-o(i,ny));
end

%vorticity internal nodes

for i=2:(nx-1)
for j=2:(ny-1)
oold(i,j)=o(i,j);
f2=1/fac*((o(i+1,j)+o(i-1,j))/dx^2+(o(i,j+1)+o(i,j-1))/dy^2 ...
-re*(p(i,j+1)-p(i,j-1))*(o(i+1,j)-o(i-1,j))/(4*dx*dy)...
+re*(p(i+1,j)-p(i-1,j))*(o(i,j+1)-o(i,j-1))/(4*dx*dy));

o(i,j)=o(i,j)+rex*(f2-o(i,j));


end
end

% Calculate the velocity (u and v)

for i=2:(nx-1)
for j=2:(ny-1)
u(i,j)=(p(i,j+1)-p(i,j-1))/(2*dy);
v(i,j)=-(p(i+1,j)-p(i-1,j))/(2*dx);
end
end

% rearrange in cartesian coordinate
%(which originally in matrix coordinate)
for i=1:nx
for j=1:ny
k=i;
l=j;
psi(l,k)=p(i,j);
omega(l,k)=o(i,j);
uact(l,k)=u(i,j);
vact(l,k)=v(i,j);
end
end
figure(1)% Streamline plot with number
Z = psi(1:ny,1:nx);
X = linspace(0,1,size(Z,2));
Y = linspace(0,1,size(Z,1));
[c,h] = contour(X,Y,Z);

axis equal
axis([0 1 0 1])
drawnow
end

hope you can further developed these code by yourself. It's up to you what you are going to do about it :-)


Can anyone explain why the boundary conditions for the vorticity are what they are? I mean what kind of approximation is that for the derivative of psi?

Also what scheme is used for calculating the internal nodes of the vorticity?

Thanks alot for the help :D


All times are GMT -4. The time now is 16:38.