Code Proj3

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.

f90
Pgina 1 de 13 Sb 31 Dez 2016 19:03:22 BRST
1 module vars
2 implicit none
3 !
4 !
5 integer(4) :: dimen, i, j, malha,m,marca, faca
6 real(8) :: gama,tmax, t, iter, L, w
7 real(8) :: eps_harten1,eps_harten2,eps_harten3
8 real(8) :: deltax, rho1, p1, rho4, p4, deltat
9 real(8) :: t1, t2, total, titer
10 real(8), dimension(:,:), allocatable :: Q, F, Fharten, r1,r2,r3
11 real(8), dimension(:), allocatable :: x,u,p,c,H,a,
Mach,u_roe,p_roe,c_roe,H_roe, C1,C2
12 real(8), dimension(:), allocatable :: ni1, ni2, ni3,
phi_harten1,phi_harten2,phi_harten3
13 real(8), dimension(:), allocatable ::
gama_harten1,gama_harten2,gama_harten3, z1,z2,z3
14 real(8), dimension(:), allocatable :: alfa1,alfa2,alfa3,
g1,g2,g3,s1,s2,s3,g_til1,g_til2,g_til3
15 real(8), dimension(:), allocatable :: sl1,sl2,sl3
16 real(8), dimension(:), allocatable :: g_barra1, g_bbarra1, zeta1, theta1
17 real(8), dimension(:), allocatable :: g_barra2, g_bbarra2, zeta2, theta2
18 real(8), dimension(:), allocatable :: g_barra3, g_bbarra3, zeta3, theta3
19 !
20 !
21 end module
22
23 program proj2
24 use vars
25 implicit none
26 !
27 ! Problem data
28 !
29 malha = 1001
30 !
31 dimen = 3 ! dimension of matrix based on my problem dimension
32 ! in other words dimen is the dimension of our
flux vectors
33 !
34 !
35 ! calcule o CFL
36 !
37 marca = 0
38 m = 1
39 2 w = 0.6d0
40 gama = 1.4d0
41 L = 5.0d0
42 deltax = 2.0d0*L/DBLE(malha-1)
43 deltat = 0.0001d0
44 t = 0.0d0
45 tmax = 1.0d0
46 iter = 0.0d0
47 if (marca == 0)then
48 rho1 = 1.0d0
49 p1 = 1.0d0
50 rho4 = 5.0d0
51 p4 = 5.0d0
52 else if(marca == 1)then
53 rho1 = 1.0d0
54 p1 = 1.0d0
55 rho4 = 10.0d0
56 p4 = 10.0d0
57 else if(marca == 2)then
58 rho1 = 1.0d0
59 p1 = 1.0d0
60 rho4 = 20.0d0
61 p4 = 20.0d0
62 else if(marca == 3)then
63 rho1 = 1.0d0
64 p1 = 1.0d0
65 rho4 = 50.0d0
- 1 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 2 de 13 Sb 31 Dez 2016 19:03:22 BRST
66 p4 = 50.0d0
67 else if(marca == 4)then
68 rho1 = 1.0d0
69 p1 = 1.0d0
70 rho4 = 100.0d0
71 p4 = 100.0d0
72 else
73 continue
74 endif
75 !
76 ! primeira rodada muito dissipativo
77 !
78 !eps_harten1 = 0.20d0
79 !eps_harten2 = 0.00d0
80 !eps_harten3 = 0.20d0
81 !
82 ! segunda rodada ok
83 !
84 eps_harten1 = 0.005d0
85 eps_harten2 = 0.0d0
86 eps_harten3 = 0.005d0
87 !
88 !
89 allocate (Q(malha + 2,dimen), F(malha+2,dimen), Fharten(malha+2,dimen))
90 allocate (r1(malha + 2,dimen), r2(malha+2,dimen), r3(malha+2,dimen))
91 allocate (u(malha + 2), x(malha + 2), p(malha + 2),
Mach(malha+2),z1(malha+2),z2(malha+2),z3(malha+2))
92 allocate (phi_harten1(malha+2), phi_harten2(malha+2), phi_harten3(malha+2))
93 allocate (gama_harten1(malha+2), gama_harten2(malha+2), gama_harten3(malha+2))
94 allocate (ni1(malha+2), ni2(malha+2), ni3(malha+2))
95 allocate (u_roe(malha+2), H_roe(malha+2), c_roe(malha+2))
96 allocate (C1(malha+2), C2(malha+2), c(malha + 2), H(malha+2))
97 allocate (g1(malha+2), g2(malha+2), g3(malha+2), s1(malha+2), s2(malha+2),
s3(malha+2))
98 allocate (g_til1(malha+2), g_til2(malha+2), g_til3(malha+2), alfa1(malha+2),
alfa2(malha+2), alfa3(malha+2))
99 allocate (g_barra1(malha+2), g_bbarra1(malha+2), zeta1(malha+2), theta1(malha+2))
100 allocate (g_barra2(malha+2), g_bbarra2(malha+2), zeta2(malha+2), theta2(malha+2))
101 allocate (g_barra3(malha+2), g_bbarra3(malha+2), zeta3(malha+2), theta3(malha+2))
102 allocate (sl3(malha+2),sl2(malha+2),sl1(malha+2))
103 !
104 !
105 call mesh
106 call initial_cond
107 !
108 !
109 if (m == 1) then
110 call cpu_time(t1)
111 do while (t < tmax)
112 call fluxHarten
113 call Harten
114 iter = iter + 1.0d0
115 t = iter*deltat
116 call cpu_time(titer)
117 enddo
118 marca = marca + 1
119 if (marca == 1)then
120 open(10,file='Harten_1_p5')
121 !
122 do i = 1, malha + 2
123 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
124 enddo
125 !
126 open(10,file='Harten_1_rho5')
127 !
128 do i = 1, malha + 2
129 WRITE(10,*) x(i),Q(i,1)
130 enddo
131 !
- 2 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 3 de 13 Sb 31 Dez 2016 19:03:22 BRST
132 open(10,file='Harten_1_v5')
133 !
134 do i = 1, malha + 2
135 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
136 enddo
137 !
138 go to 1
139 elseif (marca == 2)then
140 open(10,file='Harten_1_p10')
141 !
142 do i = 1, malha + 2
143 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
144 enddo
145 !
146 open(10,file='Harten_1_rho10')
147 !
148 do i = 1, malha + 2
149 WRITE(10,*) x(i),Q(i,1)
150 enddo
151 !
152 open(10,file='Harten_1_v10')
153 !
154 do i = 1, malha + 2
155 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
156 enddo
157 !
158 go to 1
159 elseif (marca == 3)then
160 open(10,file='Harten_1_p20')
161 !
162 do i = 1, malha + 2
163 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
164 enddo
165 !
166 open(10,file='Harten_1_rho20')
167 !
168 do i = 1, malha + 2
169 WRITE(10,*) x(i),Q(i,1)
170 enddo
171 !
172 open(10,file='Harten_1_v20')
173 !
174 do i = 1, malha + 2
175 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
176 enddo
177 !
178 go to 1
179 elseif (marca == 4)then
180 open(10,file='Harten_1_p50')
181 !
182 do i = 1, malha + 2
183 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
184 enddo
185 !
186 open(10,file='Harten_1_rho50')
187 !
188 do i = 1, malha + 2
189 WRITE(10,*) x(i),Q(i,1)
190 enddo
191 !
192 open(10,file='Harten_1_v50')
193 !
194 do i = 1, malha + 2
195 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
196 enddo
197 !
198 go to 1
- 3 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 4 de 13 Sb 31 Dez 2016 19:03:22 BRST
199 elseif (marca == 5)then
200 open(10,file='Harten_1_p100')
201 !
202 do i = 1, malha + 2
203 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
204 enddo
205 !
206 open(10,file='Harten_1_rho100')
207 !
208 do i = 1, malha + 2
209 WRITE(10,*) x(i),Q(i,1)
210 enddo
211 !
212 open(10,file='Harten_1_v100')
213 !
214 do i = 1, malha + 2
215 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
216 enddo
217 !
218 marca = 0
219 m = m + 1
220 go to 1
221 endif
222 call cpu_time(t2)
223 total = t2 - t1
224 else if (m == 2) then
225 call cpu_time(t1)
226 do while (t < tmax)
227 call fluxHartenComp
228 call Harten
229 iter = iter + 1.0d0
230 t = iter*deltat
231 call cpu_time(titer)
232 enddo
233 marca = marca + 1
234 if (marca == 1)then
235 open(10,file='Harten_2_p5')
236 !
237 do i = 1, malha + 2
238 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
239 enddo
240 !
241 open(10,file='Harten_2_rho5')
242 !
243 do i = 1, malha + 2
244 WRITE(10,*) x(i),Q(i,1)
245 enddo
246 !
247 open(10,file='Harten_2_v5')
248 !
249 do i = 1, malha + 2
250 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
251 enddo
252 !
253 go to 1
254 elseif (marca == 2)then
255 open(10,file='Harten_2_p10')
256 !
257 do i = 1, malha + 2
258 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
259 enddo
260 !
261 open(10,file='Harten_2_rho10')
262 !
263 do i = 1, malha + 2
264 WRITE(10,*) x(i),Q(i,1)
265 enddo
- 4 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 5 de 13 Sb 31 Dez 2016 19:03:22 BRST
266 !
267 open(10,file='Harten_2_v10')
268 !
269 do i = 1, malha + 2
270 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
271 enddo
272 !
273 go to 1
274 elseif (marca == 3)then
275 open(10,file='Harten_2_p20')
276 !
277 do i = 1, malha + 2
278 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
279 enddo
280 !
281 open(10,file='Harten_2_rho20')
282 !
283 do i = 1, malha + 2
284 WRITE(10,*) x(i),Q(i,1)
285 enddo
286 !
287 open(10,file='Harten_2_v20')
288 !
289 do i = 1, malha + 2
290 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
291 enddo
292 !
293 go to 1
294 elseif (marca == 4)then
295 open(10,file='Harten_2_p50')
296 !
297 do i = 1, malha + 2
298 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
299 enddo
300 !
301 open(10,file='Harten_2_rho50')
302 !
303 do i = 1, malha + 2
304 WRITE(10,*) x(i),Q(i,1)
305 enddo
306 !
307 open(10,file='Harten_2_v50')
308 !
309 do i = 1, malha + 2
310 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
311 enddo
312 !
313 go to 1
314 elseif (marca == 5)then
315 open(10,file='Harten_2_p100')
316 !
317 do i = 1, malha + 2
318 WRITE(10,*) x(i),((gama - 1.0d0)*(Q(i,3) -
Q(i,1)*(Q(i,2)/Q(i,1))**2.0d0/2.0d0))
319 enddo
320 !
321 open(10,file='Harten_2_rho100')
322 !
323 do i = 1, malha + 2
324 WRITE(10,*) x(i),Q(i,1)
325 enddo
326 !
327 open(10,file='Harten_2_v100')
328 !
329 do i = 1, malha + 2
330 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
331 enddo
332 !
- 5 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 6 de 13 Sb 31 Dez 2016 19:03:22 BRST
333 marca = 0
334 m = m + 1
335 go to 1
336 endif
337 call cpu_time(t2)
338 total = t2 - t1
339 else
340 stop
341 end if
342 !
343 !
344 1 deallocate (Q, F, Fharten)
345 deallocate (r1, r2, r3)
346 deallocate (u, x, p, Mach,z1,z2,z3)
347 deallocate (phi_harten1, phi_harten2, phi_harten3)
348 deallocate (gama_harten1, gama_harten2, gama_harten3)
349 deallocate (ni1, ni2, ni3)
350 deallocate (u_roe, H_roe, c_roe)
351 deallocate (C1, C2,c,H)
352 deallocate (g1, g2, g3, s1, s2, s3)
353 deallocate (g_til1, g_til2, g_til3, alfa1, alfa2, alfa3)
354 deallocate (g_barra1, g_bbarra1, zeta1, theta1)
355 deallocate (g_barra2, g_bbarra2, zeta2, theta2)
356 deallocate (g_barra3, g_bbarra3, zeta3, theta3)
357 deallocate (sl3,sl2,sl1)
358 !
359 go to 2
360 !
361 end program proj2
362 !
363 !*****************mesh*******************
364 !
365 subroutine mesh
366 use vars
367 implicit none
368 !
369 !
370 !
371 do i = 1, malha + 2
372 x(i) = 0.0d0
373 enddo
374 !
375 !
376 !
377 x(1) = -L - deltax
378 x(malha + 2) = L + deltax
379 !
380 do i = 2, malha + 1
381 x(i) = -L + deltax*(i-2)
382 enddo
383 !
384 !
385 !
386 end subroutine mesh
387 !
388 !**********initial conditions************
389 !
390 subroutine initial_cond
391 use vars
392 implicit none
393 !
394 !
395 do i = 1, malha + 2
396 u(i) = 0.0d0
397 enddo
398 !
399 !initializing Q
400 !
401 do i = 1,malha + 2
402 if(x(i) <= 0.0d0)then
- 6 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 7 de 13 Sb 31 Dez 2016 19:03:22 BRST
403 Q(i,1) = rho4
404 Q(i,2) = 0.0d0
405 Q(i,3) = p4/(gama - 1.0d0)
406 else
407 Q(i,1) = rho1
408 Q(i,2) = 0.0d0
409 Q(i,3) = p1/(gama - 1.0d0)
410 endif
411 enddo
412 !
413 !initializing fluxes F
414 !
415 do i = 1, malha + 2
416 if(x(i) <= 0.0d0)then
417 F(i,1) = 0.0d0
418 F(i,2) = p4
419 F(i,3) = 0.0d0
420 else
421 F(i,1) = 0.0d0
422 F(i,2) = p1
423 F(i,3) = 0.0d0
424 endif
425 enddo
426 !
427 !
428 !
429 end subroutine initial_cond
430 !
431 !***********FLUX HARTEN-first_order***********
432 !
433 subroutine fluxHarten
434 use vars
435 implicit none
436 !
437 !
438 do i = 1, malha + 2
439 u(i) = Q(i,2)/Q(i,1)
440 p(i) = (gama -1.0d0)*(Q(i,3) - Q(i,1)*u(i)**2.0d0/2.0d0)
441 c(i) = (gama*p(i)/Q(i,1))**0.5d0
442 H(i) = (Q(i,3) + p(i))/Q(i,1)
443 enddo
444 !
445 !
446 !
447 ! Mdias de ROE para usar no mtodo de Harten
448 !
449 do i = 1, malha+2
450 u_roe(i) = (Q(i,1)**0.5d0*u(i) + Q(i+1,1)**0.5d0*u(i+1))/(Q(i,1)**0.5d0 +
Q(i+1,1)**0.5d0)
451 H_roe(i) = (Q(i,1)**0.5d0*H(i) + Q(i+1,1)**0.5d0*H(i+1))/(Q(i,1)**0.5d0 +
Q(i+1,1)**0.5d0)
452 c_roe(i) = ((gama - 1.0d0)*(H_roe(i) - 0.50d0*u_roe(i)**2.0d0))**0.5d0
453 !
454 !
455 !
456 phi_harten1(i) = 0.0d0
457 phi_harten2(i) = 0.0d0
458 phi_harten3(i) = 0.0d0
459 s1(i) = 0.0d0
460 s2(i) = 0.0d0
461 s3(i) = 0.0d0
462 enddo
463 !
464 ! Fluxos normais
465 !
466 do i = 1,malha+2
467 F(i,1) = Q(i,2)
468 F(i,2) = Q(i,2)**2.0d0/Q(i,1) + (gama-1.0d0)*(Q(i,3) -
0.50d0*Q(i,2)**2.0d0/Q(i,1))
469 F(i,3) = (Q(i,2)/Q(i,1))*(Q(i,3) + (gama -1.0d0)*(Q(i,3)-
- 7 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 8 de 13 Sb 31 Dez 2016 19:03:22 BRST
0.50d0*Q(i,2)**2.0d0/Q(i,1)))
470 enddo
471 !
472 !
473 do i = 1,malha+2
474 !
475 ! ni autovalores
476 !
477 ni1(i) = (deltat/deltax)*(u_roe(i) - c_roe(i))
478 ni2(i) = (deltat/deltax)*u_roe(i)
479 ni3(i) = (deltat/deltax)*(u_roe(i) + c_roe(i))
480 !
481 ! autovetores
482 !
483 r1(i,1) = 1.0d0
484 r1(i,2) = u_roe(i) - c_roe(i)
485 r1(i,3) = H_roe(i) - u_roe(i)*c_roe(i)
486 !
487 r2(i,1) = 1.0d0
488 r2(i,2) = u_roe(i)
489 r2(i,3) = u_roe(i)**2.0d0/2.0d0
490 !
491 r3(i,1) = 1.0d0
492 r3(i,2) = u_roe(i) + c_roe(i)
493 r3(i,3) = H_roe(i) + u_roe(i)*c_roe(i)
494 !
495 C1(i) = ((gama -1.0d0)/c_roe(i)**2.0d0)*( Q(i+1,3) - Q(i,3) &
496 + 0.50d0*u_roe(i)*(Q(i+1,1)-Q(i,1)) -
u_roe(i)*(u(i+1)*Q(i+1,1)-u(i)*Q(i,1)) )
497 C2(i) = (u(i+1)*Q(i+1,1)-u(i)*Q(i,1) - u_roe(i)*(Q(i+1,1)-Q(i,1)) )/c_roe(i)
498 !
499 alfa1(i) = 0.50d0*(C1(i) - C2(i))
500 alfa2(i) = Q(i+1,1) - Q(i,1) - C1(i)
501 alfa3(i) = 0.50d0*(C1(i) + C2(i))
502 !
503 if (abs(ni1(i)) < eps_harten1 ) then
504 phi_harten1(i) = 0.50d0*((ni1(i)**2.0d0)/eps_harten1 + eps_harten1)
505 else
506 phi_harten1(i) = abs(ni1(i))
507 endif
508 !
509 if (abs(ni2(i)) < eps_harten2 ) then
510 phi_harten2(i) = 0.50d0*((ni2(i)**2.0d0)/eps_harten2 + eps_harten2)
511 else
512 phi_harten2(i) = abs(ni2(i))
513 endif
514 !
515 if (abs(ni3(i)) < eps_harten3 ) then
516 phi_harten3(i) = 0.50d0*((ni3(i)**2.0d0)/eps_harten3 + eps_harten3)
517 else
518 phi_harten3(i) = abs(ni3(i))
519 endif
520 !
521 g_til1(i) = 0.50d0*(phi_harten1(i) - ni1(i)**2.0d0)*alfa1(i)
522 g_til2(i) = 0.50d0*(phi_harten2(i) - ni2(i)**2.0d0)*alfa2(i)
523 g_til3(i) = 0.50d0*(phi_harten3(i) - ni3(i)**2.0d0)*alfa3(i)
524 !
525 if (abs(g_til1(i)) > 1e-6 )then
526 s1(i) = g_til1(i)/abs(g_til1(i))
527 endif
528 if (abs(g_til2(i)) > 1e-6 )then
529 s2(i) = g_til2(i)/abs(g_til2(i))
530 endif
531 if (abs(g_til3(i)) > 1e-6 )then
532 s3(i) = g_til3(i)/abs(g_til3(i))
533 endif
534 enddo
535 !
536 !
537 do i=1,malha+1
- 8 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 9 de 13 Sb 31 Dez 2016 19:03:22 BRST
538 !
539 g1(i) = 0.0d0
540 g2(i) = 0.0d0
541 g3(i) = 0.0d0
542 !
543 g1(i+1) = 0.0d0
544 g2(i+1) = 0.0d0
545 g3(i+1) = 0.0d0
546 !
547 gama_harten1(i) = 0.0d0
548 !
549 gama_harten2(i) = 0.0d0
550 !
551 gama_harten3(i) = 0.0d0
552 !
553 enddo
554 !
555 !
556 do i =1, malha+2
557 !
558 phi_harten1(i) = 0.0d0
559 phi_harten2(i) = 0.0d0
560 phi_harten3(i) = 0.0d0
561 !
562 enddo
563 !
564 ! argumentos phi harten para o calculo do fluxo
565 !
566 do i =1, malha+2
567 z1(i) = ni1(i) + gama_harten1(i)
568 z2(i) = ni2(i) + gama_harten2(i)
569 z3(i) = ni3(i) + gama_harten3(i)
570 enddo
571 !
572 do i = 1, malha+2
573 !
574 if (abs(z1(i)) < eps_harten1 ) then
575 phi_harten1(i) = 0.50d0*((z1(i)**2.0d0)/eps_harten1 + eps_harten1)
576 else
577 phi_harten1(i) = abs(z1(i))
578 endif
579 !
580 if (abs(z2(i)) < eps_harten2 ) then
581 phi_harten2(i) = 0.50d0*((z2(i)**2.0d0)/eps_harten2 + eps_harten2)
582 else
583 phi_harten2(i) = abs(z2(i))
584 endif
585 !
586 if (abs(z3(i)) < eps_harten3 ) then
587 phi_harten3(i) = 0.50d0*((z3(i)**2.0d0)/eps_harten3 + eps_harten3)
588 else
589 phi_harten3(i) = abs(z3(i))
590 endif
591 !
592 enddo
593 !
594 ! calculo fluxos de harten
595 !
596 do i = 1, malha+2
597 Fharten(i,1) = 0.50d0*(F(i,1)+F(i+1,1) + (deltax/deltat)*r1(i,1)*(g1(i)
+g1(i+1) -phi_harten1(i)*alfa1(i) ) &
598 + (deltax/deltat)*r2(i,1)*(g2(i)
+g2(i+1) -phi_harten2(i)*alfa2(i) ) &
599 + (deltax/deltat)*r3(i,1)*(g3(i)
+g3(i+1) -phi_harten3(i)*alfa3(i) ) )
600 Fharten(i,2) = 0.50d0*(F(i,2)+F(i+1,2) + (deltax/deltat)*r1(i,2)*(g1(i)
+g1(i+1) -phi_harten1(i)*alfa1(i) ) &
601 + (deltax/deltat)*r2(i,2)*(g2(i)
+g2(i+1) -phi_harten2(i)*alfa2(i) ) &
602 + (deltax/deltat)*r3(i,2)*(g3(i)
- 9 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 10 de 13 Sb 31 Dez 2016 19:03:22 BRST
+g3(i+1) -phi_harten3(i)*alfa3(i) )
)

603 Fharten(i,3) = 0.50d0*(F(i,3)+F(i+1,3) + (deltax/deltat)*r1(i,3)*(g1(i)


+g1(i+1) -phi_harten1(i)*alfa1(i) ) &
604 + (deltax/deltat)*r2(i,3)*(g2(i)
+g2(i+1) -phi_harten2(i)*alfa2(i) ) &
605 + (deltax/deltat)*r3(i,3)*(g3(i)
+g3(i+1) -phi_harten3(i)*alfa3(i) )
)
606 enddo
607 !
608 end subroutine fluxHarten
609 !
610 !***********FLUX HARTEN-second_order***********
611 !
612 subroutine fluxHartenComp
613 use vars
614 implicit none
615 !
616 !
617 do i = 1, malha + 2
618 u(i) = Q(i,2)/Q(i,1)
619 p(i) = (gama -1.0d0)*(Q(i,3) - Q(i,1)*u(i)**2.0d0/2.0d0)
620 c(i) = (gama*p(i)/Q(i,1))**0.5d0
621 H(i) = (Q(i,3) + p(i))/Q(i,1)
622 enddo
623 !
624 !
625 !
626 ! Mdias de ROE para usar no mtodo de Harten
627 !
628 do i = 1, malha+2
629 u_roe(i) = (Q(i,1)**0.5d0*u(i) + Q(i+1,1)**0.5d0*u(i+1))/(Q(i,1)**0.5d0 +
Q(i+1,1)**0.5d0)
630 H_roe(i) = (Q(i,1)**0.5d0*H(i) + Q(i+1,1)**0.5d0*H(i+1))/(Q(i,1)**0.5d0 +
Q(i+1,1)**0.5d0)
631 c_roe(i) = ((gama - 1.0d0)*(H_roe(i) - 0.50d0*u_roe(i)**2.0d0))**0.5d0
632 !
633 !
634 !
635 phi_harten1(i) = 0.0d0
636 phi_harten2(i) = 0.0d0
637 phi_harten3(i) = 0.0d0
638 s1(i) = 0.0d0
639 s2(i) = 0.0d0
640 s3(i) = 0.0d0
641 enddo
642 !
643 ! Fluxos normais
644 !
645 do i = 1,malha+2
646 F(i,1) = Q(i,2)
647 F(i,2) = Q(i,2)**2.0d0/Q(i,1) + (gama-1.0d0)*(Q(i,3) -
0.50d0*Q(i,2)**2.0d0/Q(i,1))
648 F(i,3) = (Q(i,2)/Q(i,1))*(Q(i,3) + (gama -1.0d0)*(Q(i,3)-
0.50d0*Q(i,2)**2.0d0/Q(i,1)))
649 enddo
650 !
651 !
652 do i = 1,malha+2
653 !
654 ! ni autovalores
655 !
656 ni1(i) = (deltat/deltax)*(u_roe(i) - c_roe(i))
657 ni2(i) = (deltat/deltax)*u_roe(i)
658 ni3(i) = (deltat/deltax)*(u_roe(i) + c_roe(i))
659 !
660 ! autovetores
661 !
- 10 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 11 de 13 Sb 31 Dez 2016 19:03:22 BRST
662 r1(i,1) = 1.0d0
663 r1(i,2) = u_roe(i) - c_roe(i)
664 r1(i,3) = H_roe(i) - u_roe(i)*c_roe(i)
665 !
666 r2(i,1) = 1.0d0
667 r2(i,2) = u_roe(i)
668 r2(i,3) = 0.5d0*u_roe(i)**2.0d0
669 !
670 r3(i,1) = 1.0d0
671 r3(i,2) = u_roe(i) + c_roe(i)
672 r3(i,3) = H_roe(i) + u_roe(i)*c_roe(i)
673 !
674 C1(i) = ((gama -1.0d0)/c_roe(i)**2.0d0)*( Q(i+1,3) - Q(i,3) &
675 + 0.50d0*u_roe(i)*(Q(i+1,1)-Q(i,1)) -
u_roe(i)*(u(i+1)*Q(i+1,1)-u(i)*Q(i,1)) )
676 C2(i) = (u(i+1)*Q(i+1,1)-u(i)*Q(i,1) - u_roe(i)*(Q(i+1,1)-Q(i,1)) )/c_roe(i)
677 !
678 alfa1(i) = 0.50d0*(C1(i) - C2(i))
679 alfa2(i) = Q(i+1,1) - Q(i,1) - C1(i)
680 alfa3(i) = 0.50d0*(C1(i) + C2(i))
681 !
682 if (abs(ni1(i)) < eps_harten1 ) then
683 phi_harten1(i) = 0.50d0*((ni1(i)**2.0d0)/eps_harten1 + eps_harten1)
684 else
685 phi_harten1(i) = abs(ni1(i))
686 endif
687 !
688 if (abs(ni2(i)) < eps_harten2 ) then
689 phi_harten2(i) = 0.50d0*((ni2(i)**2.0d0)/eps_harten2 + eps_harten2)
690 else
691 phi_harten2(i) = abs(ni2(i))
692 endif
693 !
694 if (abs(ni3(i)) < eps_harten3 ) then
695 phi_harten3(i) = 0.50d0*((ni3(i)**2.0d0)/eps_harten3 + eps_harten3)
696 else
697 phi_harten3(i) = abs(ni3(i))
698 endif
699 !
700 g_til1(i) = 0.50d0*(phi_harten1(i) - ni1(i)**2.0d0)*alfa1(i)
701 g_til2(i) = 0.50d0*(phi_harten2(i) - ni2(i)**2.0d0)*alfa2(i)
702 g_til3(i) = 0.50d0*(phi_harten3(i) - ni3(i)**2.0d0)*alfa3(i)
703 !
704 if (abs(g_til1(i)) > 1e-6 )then
705 s1(i) = g_til1(i)/abs(g_til1(i))
706 endif
707 if (abs(g_til2(i)) > 1e-6 )then
708 s2(i) = g_til2(i)/abs(g_til2(i))
709 endif
710 if (abs(g_til3(i)) > 1e-6 )then
711 s3(i) = g_til3(i)/abs(g_til3(i))
712 endif
713 enddo
714 !
715 !
716 do i=1,malha+1
717 !
718 g1(i) = s1(i)*max( 0.0d0, min(abs(g_til1(i)),g_til1(i-1)*s1(i)) )
719 g2(i) = s2(i)*max( 0.0d0, min(abs(g_til2(i)),g_til2(i-1)*s2(i)) )
720 g3(i) = s3(i)*max( 0.0d0, min(abs(g_til3(i)),g_til3(i-1)*s3(i)) )
721 !
722 g1(i+1) = s1(i+1)*max( 0.0d0, min(abs(g_til1(i+1)),g_til1(i)*s1(i+1)) )
723 g2(i+1) = s2(i+1)*max( 0.0d0, min(abs(g_til2(i+1)),g_til2(i)*s2(i+1)) )
724 g3(i+1) = s3(i+1)*max( 0.0d0, min(abs(g_til3(i+1)),g_til3(i)*s3(i+1)) )
725 !
726 if (alfa1(i) >= 1e-6) then
727 gama_harten1(i) = (g1(i+1) -g1(i))/alfa1(i)
728 else
729 gama_harten1(i) = 0.0d0
730 endif
- 11 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 12 de 13 Sb 31 Dez 2016 19:03:22 BRST
731 !
732 if(alfa2(i) >= 1e-6) then
733 gama_harten2(i) = (g2(i+1) -g2(i))/alfa2(i)
734 else
735 gama_harten2(i) = 0.0d0
736 endif
737 !
738 if(alfa3(i) >= 1e-6) then
739 gama_harten3(i) = (g3(i+1) -g3(i))/alfa3(i)
740 else
741 gama_harten3(i) = 0.0d0
742 endif
743 !
744 enddo
745 !
746 !
747 do i =1, malha+2
748 !
749 phi_harten1(i) = 0.0d0
750 phi_harten2(i) = 0.0d0
751 phi_harten3(i) = 0.0d0
752 !
753 enddo
754 !
755 ! argumentos phi harten para o calculo do fluxo
756 !
757 do i =1, malha+2
758 z1(i) = ni1(i) + gama_harten1(i)
759 z2(i) = ni2(i) + gama_harten2(i)
760 z3(i) = ni3(i) + gama_harten3(i)
761 enddo
762 !
763 do i = 1, malha+2
764 !
765 if (abs(z1(i)) < eps_harten1 ) then
766 phi_harten1(i) = 0.50d0*((z1(i)**2.0d0)/eps_harten1 + eps_harten1)
767 else
768 phi_harten1(i) = abs(z1(i))
769 endif
770 !
771 if (abs(z2(i)) < eps_harten2 ) then
772 phi_harten2(i) = 0.50d0*((z2(i)**2.0d0)/eps_harten2 + eps_harten2)
773 else
774 phi_harten2(i) = abs(z2(i))
775 endif
776 !
777 if (abs(z3(i)) < eps_harten3 ) then
778 phi_harten3(i) = 0.50d0*((z3(i)**2.0d0)/eps_harten3 + eps_harten3)
779 else
780 phi_harten3(i) = abs(z3(i))
781 endif
782 !
783 enddo
784 !
785 ! calculo fluxos de harten
786 !
787 do i = 1, malha+2
788 Fharten(i,1) = 0.50d0*(F(i,1)+F(i+1,1) + (deltax/deltat)*r1(i,1)*(g1(i)
+g1(i+1) -phi_harten1(i)*alfa1(i) ) &
789 + (deltax/deltat)*r2(i,1)*(g2(i)
+g2(i+1) -phi_harten2(i)*alfa2(i) ) &
790 + (deltax/deltat)*r3(i,1)*(g3(i)
+g3(i+1) -phi_harten3(i)*alfa3(i) ) )
791 Fharten(i,2) = 0.50d0*(F(i,2)+F(i+1,2) + (deltax/deltat)*r1(i,2)*(g1(i)
+g1(i+1) -phi_harten1(i)*alfa1(i) ) &
792 + (deltax/deltat)*r2(i,2)*(g2(i)
+g2(i+1) -phi_harten2(i)*alfa2(i) ) &
793 + (deltax/deltat)*r3(i,2)*(g3(i)
+g3(i+1) -phi_harten3(i)*alfa3(i) )
)
- 12 -
/home/marcomatunaga/Documentos/Cc299/proj3_cc299_auto/proj3.f90
Pgina 13 de 13 Sb 31 Dez 2016 19:03:22 BRST

794 Fharten(i,3) = 0.50d0*(F(i,3)+F(i+1,3) + (deltax/deltat)*r1(i,3)*(g1(i)


+g1(i+1) -phi_harten1(i)*alfa1(i) ) &
795 + (deltax/deltat)*r2(i,3)*(g2(i)
+g2(i+1) -phi_harten2(i)*alfa2(i) ) &
796 + (deltax/deltat)*r3(i,3)*(g3(i)
+g3(i+1) -phi_harten3(i)*alfa3(i) )
)
797 enddo
798 !
799 end subroutine fluxHartenComp
800 !
801 !************Harten SCHEME**************
802 !
803 subroutine Harten
804 use vars
805 implicit none
806 !
807 !
808 do i = 2, malha + 1
809 Q(i,1) = Q(i,1) - (deltat/deltax)*(Fharten(i,1) - Fharten(i-1,1))
810 Q(i,2) = Q(i,2) - (deltat/deltax)*(Fharten(i,2) - Fharten(i-1,2))
811 Q(i,3) = Q(i,3) - (deltat/deltax)*(Fharten(i,3) - Fharten(i-1,3))
812 enddo
813 !
814 !
815 end subroutine Harten
816 !
817 !**********TECPLOT*************
818 !
819 subroutine tecplot
820 use vars
821 implicit none
822 !
823 !
824 open(10,file='proj2.dat')
825 !
826 !
827 write(10,*)' TITLE = "proj1" '
828 write(10,*)' VARIABLES = "Q"'
829 write(10,*)' ZONE I= ', malha + 2, 'J=',malha + 2,'DATAPACKING=POINT '
830 !
831 !
832 do i = 1, malha + 2
833 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
834 enddo
835 !
836 !
837 open(10,file='Harten')
838 do i = 1, malha + 2
839 WRITE(10,*) x(i),Q(i,2)/Q(i,1)
840 enddo
841 !
842 !
843 !
844 end subroutine tecplot
845

- 13 -

You might also like