You are on page 1of 8

Indian Institute of Technology Madras

Department of Ocean Engineering

OE5450
Numerical Techniques in Ocean Hydrodynamics
Jan - May 2022

Assignment 7:
Simulation of Lid Driven Cavity Problem Using
SIMPLE Algorithm

Author:
Lt Cdr Saurabh Tripathi
OE21D200

Instructor:
Dr. K. Murali

Submission Date: April 25, 2022


Assignment-7 Numerical Techniques in Ocean Hydrodynamics

1 Problem Statement:
Benchmark Standard Lid Driven Cavity Problem Statement is as follows:

Figure 1: Lid Driven Cavity Setup

2 SIMPLE Algorithm
SIMPLE Algorithm is used to simulate the LDC problem in C++ and MATLAB both to get the benchmark
results.

Figure 2: SIMPLE Algorithm

Page 1
Assignment-7 Numerical Techniques in Ocean Hydrodynamics

3 Results and Discussions


The program was implemented in C++ (g++ ver: 8.1.0 ) and MATLAB (ver: R2021b) exactly as shown in the
flowchart. The programs can be found in my Github repo here. The obtained results are plotted below:-

Figure 3: Velocity Plot

Figure 4: Pressure Plot

Page 2
Assignment-7 Numerical Techniques in Ocean Hydrodynamics

4 C Code
4.1 LDC SIMPLE

1 #i n c l u d e <s t d i o . h>
2 #i n c l u d e < s t d l i b . h>
3 #i n c l u d e <time . h>
4 #i n c l u d e <math . h>
5 #d e f i n e g r i d 50
6

7 i n t main ( v o i d )
8 {
9 d o u b l e u [ g r i d ] [ g r i d +1] , un [ g r i d ] [ g r i d +1] , uc [ g r i d ] [ g r i d ] ;
10 d o u b l e v [ g r i d + 1 ] [ g r i d ] , vn [ g r i d + 1 ] [ g r i d ] , vc [ g r i d ] [ g r i d ] ;
11 d o u b l e p [ g r i d + 1 ] [ g r i d +1] , pn [ g r i d + 1 ] [ g r i d +1] , pc [ g r i d ] [ g r i d ] ;
12 d o u b l e m[ g r i d + 1 ] [ g r i d + 1 ] ;
13 int i , j , step ;
14 d o u b l e dx , dy , dt , tau , d e l t a , e r r o r , Re ;
15 s t e p =1;
16 dx = 1 . 0 / ( g r i d −1) ;
17 dy = 1 . 0 / ( g r i d −1) ;
18 dt = 0 . 0 0 1 ;
19 delta = 4.5;
20 error = 1.0;
21 Re = 1 0 . 0 ;
22

23 // I n i t i a l i z i n g u
24 f o r ( i =0; i <=(g r i d −1) ; i ++)
25 {
26 f o r ( j =0; j <=(g r i d ) ; j ++)
27 {
28 u[ i ][ j ] = 0.0;
29 u [ i ] [ grid ] = 1.0;
30 u [ i ] [ g r i d −1] = 1 . 0 ;
31 }
32 }
33

34 // I n i t i a l i z i n g v
35 f o r ( i =0; i <=(g r i d ) ; i ++)
36 {
37 f o r ( j =0; j <=(g r i d −1) ; j ++)
38 {
39 v[ i ][ j ] = 0.0;
40 }
41 }
42

43 // I n i t i a l i z i n g p
44 f o r ( i =0; i <=(g r i d ) ; i ++)
45 {
46 f o r ( j =0; j <=(g r i d ) ; j ++)
47 {
48 p[ i ][ j ] = 1.0;
49 }
50 }
51

52 while ( error > 0.000001)


53 {
54 // S o l v e u−momentum e q u a t i o n

Page 3
Assignment-7 Numerical Techniques in Ocean Hydrodynamics

55 f o r ( i =1; i <=(g r i d −2) ; i ++)


56 {
57 f o r ( j =1; j <=(g r i d −1) ; j ++)
58 {
59 un [ i ] [ j ] = u [ i ] [ j ] − dt ∗ ( ( u [ i + 1 ] [ j ] ∗ u [ i + 1 ] [ j ]−u [ i − 1 ] [ j ] ∗ u [ i
− 1 ] [ j ] ) / 2 . 0 / dx
60 +0.25∗( ( u [ i ] [ j ]+u [ i ] [ j +1]) ∗ ( v [ i ] [ j ]+v [ i + 1 ] [ j ] ) −(u [ i
] [ j ]+u [ i ] [ j −1]) ∗ ( v [ i + 1 ] [ j −1]+v [ i ] [ j −1]) ) /dy )
61 − dt /dx ∗ ( p [ i + 1 ] [ j ]−p [ i ] [ j ] )
62 + dt ∗ 1 . 0 / Re ∗ ( ( u [ i + 1 ] [ j ] −2.0∗ u [ i ] [ j ]+u [ i − 1 ] [
j ] ) /dx/dx +(u [ i ] [ j +1] −2.0∗u [ i ] [ j ]+u [ i ] [ j
−1]) /dy/dy ) ;
63 }
64 }
65

66 // Boundary c o n d i t i o n s
67 f o r ( j =1; j <=(g r i d −1) ; j ++)
68 {
69 un [ 0 ] [ j ] = 0 . 0 ;
70 un [ g r i d − 1 ] [ j ] = 0 . 0 ;
71 }
72

73 f o r ( i =0; i <=(g r i d −1) ; i ++)


74 {
75 un [ i ] [ 0 ] = −un [ i ] [ 1 ] ;
76 un [ i ] [ g r i d ] = 2 − un [ i ] [ g r i d − 1 ] ;
77 }
78

79

80 // S o l v e s v−momentum
81 f o r ( i =1; i <=(g r i d −1) ; i ++)
82 {
83 f o r ( j =1; j <=(g r i d −2) ; j ++)
84 {
85 vn [ i ] [ j ] = v [ i ] [ j ] − dt ∗ ( 0 . 2 5 ∗ ( ( u [ i ] [ j ]+u [ i ] [ j +1]) ∗ ( v [ i ] [ j ]+v
[ i + 1 ] [ j ] ) −(u [ i − 1 ] [ j ]+u [ i − 1 ] [ j +1]) ∗ ( v [ i ] [ j ]+v [ i − 1 ] [ j ] ) ) /dx
86 +(v [ i ] [ j +1]∗ v [ i ] [ j +1]−v [ i ] [ j −1]∗ v [ i ] [ j −1]) / 2 . 0 / dy )
87 − dt /dy ∗ ( p [ i ] [ j +1]−p [ i ] [ j ] )
88 + dt ∗ 1 . 0 / Re ∗ ( ( v [ i + 1 ] [ j ] −2.0∗ v [ i ] [ j ]+v [ i − 1 ] [
j ] ) /dx/dx+(v [ i ] [ j +1] −2.0∗ v [ i ] [ j ]+v [ i ] [ j
−1]) /dy/dy ) ;
89 }
90 }
91

92 // Boundary c o n d i t i o n s
93 f o r ( j =1; j <=(g r i d −2) ; j ++)
94 {
95 vn [ 0 ] [ j ] = −vn [ 1 ] [ j ] ;
96 vn [ g r i d ] [ j ] = −vn [ g r i d − 1 ] [ j ] ;
97 }
98

99 f o r ( i =0; i <=(g r i d ) ; i ++)


100 {
101 vn [ i ] [ 0 ] = 0 . 0 ;
102 vn [ i ] [ g r i d −1] = 0 . 0 ;
103 }
104

105 // S o l v e s c o n t i n u i t y e q u a t i o n

Page 4
Assignment-7 Numerical Techniques in Ocean Hydrodynamics

106 f o r ( i =1; i <=(g r i d −1) ; i ++)


107 {
108 f o r ( j =1; j <=(g r i d −1) ; j ++)
109 {
110 pn [ i ] [ j ] = p [ i ] [ j ]− dt ∗ d e l t a ∗ ( ( un [ i ] [ j ]−un [ i − 1 ] [ j ] ) /dx + ( vn
[ i ] [ j ]−vn [ i ] [ j −1] ) /dy ) ;
111 }
112 }
113

114

115 // Boundary c o n d i t i o n s
116 f o r ( i =1; i <=(g r i d −1) ; i ++)
117 {
118 pn [ i ] [ 0 ] = pn [ i ] [ 1 ] ;
119 pn [ i ] [ g r i d ] = pn [ i ] [ g r i d − 1 ] ;
120 }
121

122 f o r ( j =0; j <=(g r i d ) ; j ++)


123 {
124 pn [ 0 ] [ j ] = pn [ 1 ] [ j ] ;
125 pn [ g r i d ] [ j ] = pn [ g r i d − 1 ] [ j ] ;
126 }
127

128 // D i s p l a y i n g e r r o r
129 error = 0.0;
130

131 f o r ( i =1; i <=(g r i d −1) ; i ++)


132 {
133 f o r ( j =1; j <=(g r i d −1) ; j ++)
134 {
135 m[ i ] [ j ] = ( ( un [ i ] [ j ]−un [ i − 1 ] [ j ] ) /dx + ( vn [ i ] [ j ]−vn [ i ] [ j −1]
) /dy ) ;
136 e r r o r = e r r o r + f a b s (m[ i ] [ j ] ) ;
137 }
138 }
139

140 i f ( s t e p %10000 ==1)


141 {
142 p r i n t f ( " E r r o r i s %5.8 l f f o r t h e s t e p %d\n" , e r r o r , s t e p ) ;
143 }
144

145

146 // I t e r a t i n g u
147 f o r ( i =0; i <=(g r i d −1) ; i ++)
148 {
149 f o r ( j =0; j <=(g r i d ) ; j ++)
150 {
151 u [ i ] [ j ] = un [ i ] [ j ] ;
152 }
153 }
154

155 // I t e r a t i n g v
156 f o r ( i =0; i <=(g r i d ) ; i ++)
157 {
158 f o r ( j =0; j <=(g r i d −1) ; j ++)
159 {
160 v [ i ] [ j ] = vn [ i ] [ j ] ;
161 }

Page 5
Assignment-7 Numerical Techniques in Ocean Hydrodynamics

162 }
163

164 // I t e r a t i n g p
165 f o r ( i =0; i <=(g r i d ) ; i ++)
166 {
167 f o r ( j =0; j <=(g r i d ) ; j ++)
168 {
169 p [ i ] [ j ] = pn [ i ] [ j ] ;
170 }
171 }
172

173 step = step + 1;


174

175 }
176

177 f o r ( i =0; i <=(g r i d −1) ; i ++)


178 {
179 f o r ( j =0; j <=(g r i d −1) ; j ++)
180 {
181 uc [ i ] [ j ] = 0 . 5 ∗ ( u [ i ] [ j ]+u [ i ] [ j +1]) ;
182 vc [ i ] [ j ] = 0 . 5 ∗ ( v [ i ] [ j ]+v [ i + 1 ] [ j ] ) ;
183 pc [ i ] [ j ] = 0 . 2 5 ∗ ( p [ i ] [ j ]+p [ i + 1 ] [ j ]+p [ i ] [ j +1]+p [ i + 1 ] [ j +1]) ;
184 }
185 }
186

187

188

189 // OUTPUT DATA


190 FILE ∗ f o u t 2 , ∗ f o u t 3 , ∗ f o u t 4 ;
191 f o u t 2 = f o p e n ( " / U s e r s / saurabh / Desktop /UVP. p l t " , "w+t " ) ;
192 f o u t 3 = f o p e n ( " / U s e r s / saurabh / Desktop / Central_U . p l t " , "w+t " ) ;
193 f o u t 4 = f o p e n ( " / U s e r s / saurabh / Desktop / Central_V . p l t " , "w+t " ) ;
194

195 i f ( f o u t 2 == NULL )
196 {
197 p r i n t f ( "\nERROR when o p e n i n g f i l e \n" ) ;
198 f c l o s e ( fout2 ) ;
199 }
200

201 else
202 {
203 f p r i n t f ( f o u t 2 , "VARIABLES=\"X\ " , \ "Y\ " , \ "U\ " , \ "V\ " , \ "P\"\n" ) ;
204 f p r i n t f ( f o u t 2 , "ZONE F=POINT\n" ) ;
205 f p r i n t f ( f o u t 2 , " I=%d , J=%d\n" , g r i d , g r i d ) ;
206

207 f o r ( j = 0 ; j < ( g r i d ) ; j++ )


208 {
209 f o r ( i = 0 ; i < ( g r i d ) ; i++ )
210 {
211 d o u b l e xpos , ypos ;
212 xpos = i ∗dx ;
213 ypos = j ∗dy ;
214

215 f p r i n t f ( f o u t 2 , " %5.8 l f \ t %5.8 l f \ t %5.8 l f \ t %5.8 l f \ t %5.8 l f \n" , xpos , ypos ,
uc [ i ] [ j ] , vc [ i ] [ j ] , pc [ i ] [ j ] ) ;
216 }
217 }
218 }

Page 6
Assignment-7 Numerical Techniques in Ocean Hydrodynamics

219

220 f c l o s e ( fout2 ) ;
221

222 // CENTRAL −−U


223 f p r i n t f ( f o u t 3 , "VARIABLES=\"U\ " , \ "Y\"\n" ) ;
224 f p r i n t f ( f o u t 3 , "ZONE F=POINT\n" ) ;
225 f p r i n t f ( f o u t 3 , " I=%d\n" , g r i d ) ;
226

227 f o r ( j = 0 ; j < g r i d ; j++ )


228 {
229 d o u b l e ypos ;
230 ypos = ( d o u b l e ) j ∗dy ;
231

232 f p r i n t f ( f o u t 3 , " %5.8 l f \ t %5.8 l f \n" , ( uc [ g r i d / 2 ] [ j ] + uc [ ( g r i d / 2 ) + 1 ] [ j ] ) / ( 2 . )


, ypos ) ;
233 }
234 //CENTRAL −−V
235 f p r i n t f ( f o u t 4 , "VARIABLES=\"V\ " , \ "X\"\n" ) ;
236 f p r i n t f ( f o u t 4 , "ZONE F=POINT\n" ) ;
237 f p r i n t f ( f o u t 4 , "J=%d\n" , g r i d ) ;
238

239 f o r ( i = 0 ; i < g r i d ; i++ )


240 {
241 d o u b l e xpos ;
242 xpos = ( d o u b l e ) i ∗dy ;
243

244 f p r i n t f ( f o u t 4 , " %5.8 l f \ t %5.8 l f \n" , ( vc [ i ] [ g r i d / 2 ] + vc [ i ] [ ( g r i d / 2 ) +1]) / ( 2 . )


, xpos ) ;
245 }
246 }

Page 7

You might also like