@@ -203,146 +203,141 @@ subroutine restart_forces(itest1)
203
203
endif
204
204
205
205
end subroutine restart_forces
206
- end module forces
207
206
208
- ! ***********************************************************************
209
- subroutine force (ux1 ,uy1 ,ep1 )
207
+ subroutine force (ux1 ,uy1 ,ep1 )
210
208
211
- ! ***********************************************************************
209
+ USE param
210
+ USE variables
211
+ USE decomp_2d
212
+ USE MPI
213
+ USE ibm_param
212
214
213
- USE forces
214
- USE param
215
- USE variables
216
- USE decomp_2d
217
- USE MPI
218
- USE ibm_param
215
+ use var, only : ta1, tb1, tc1, td1, di1
216
+ use var, only : ux2, uy2, ta2, tb2, tc2, td2, di2
219
217
220
- use var, only : ta1, tb1, tc1, td1, di1
221
- use var, only : ux2, uy2, ta2, tb2, tc2, td2, di2
218
+ implicit none
219
+ character (len= 30 ) :: filename, filename2
220
+ integer :: nzmsize
221
+ integer :: i, iv, j, k, kk, code, jj
222
+ integer :: nvect1,nvect2,nvect3
222
223
223
- implicit none
224
- character (len= 30 ) :: filename, filename2
225
- integer :: nzmsize
226
- integer :: i, iv, j, k, kk, code, jj
227
- integer :: nvect1,nvect2,nvect3
224
+ real (mytype), dimension (xsize(1 ),xsize(2 ),xsize(3 )),intent (in ) :: ux1, uy1
225
+ real (mytype), dimension (xsize(1 ),xsize(2 ),xsize(3 )),intent (in ) :: ep1
228
226
229
- real (mytype), dimension (xsize(1 ),xsize(2 ),xsize(3 )),intent (in ) :: ux1, uy1
230
- real (mytype), dimension (xsize(1 ),xsize(2 ),xsize(3 )),intent (in ) :: ep1
227
+ real (mytype), dimension (ysize(1 ),ysize(2 ),ysize(3 )) :: ppi2
231
228
232
- real (mytype), dimension (ysize(1 ),ysize(2 ),ysize(3 )) :: ppi2
229
+ real (mytype), dimension (nz) :: yLift,xDrag
230
+ real (mytype) :: yLift_mean,xDrag_mean
233
231
234
- real (mytype), dimension (nz) :: yLift,xDrag
235
- real (mytype) :: yLift_mean,xDrag_mean
232
+ real (mytype), dimension (ny-1 ) :: del_y
236
233
237
- real (mytype), dimension (ny-1 ) :: del_y
234
+ real (mytype), dimension (nz) :: tunstxl, tunstyl
235
+ real (mytype), dimension (nz) :: tconvxl,tconvyl
236
+ real (mytype), dimension (nz) :: tpresxl,tpresyl
237
+ real (mytype), dimension (nz) :: tdiffxl,tdiffyl
238
238
239
- real (mytype), dimension (nz) :: tunstxl, tunstyl
240
- real (mytype), dimension (nz) :: tconvxl,tconvyl
241
- real (mytype), dimension (nz) :: tpresxl,tpresyl
242
- real (mytype), dimension (nz) :: tdiffxl,tdiffyl
239
+ real (mytype), dimension (nz) :: tunstx, tunsty
240
+ real (mytype), dimension (nz) :: tconvx,tconvy
241
+ real (mytype), dimension (nz) :: tpresx,tpresy
242
+ real (mytype), dimension (nz) :: tdiffx,tdiffy
243
243
244
- real (mytype), dimension (nz) :: tunstx, tunsty
245
- real (mytype), dimension (nz) :: tconvx,tconvy
246
- real (mytype), dimension (nz) :: tpresx,tpresy
247
- real (mytype), dimension (nz) :: tdiffx,tdiffy
244
+ real (mytype) :: uxmid,uymid,prmid
245
+ real (mytype) :: dudxmid,dudymid,dvdxmid,dvdymid
246
+ real (mytype) :: fac,tsumx,tsumy
247
+ real (mytype) :: fcvx,fcvy,fprx,fpry,fdix,fdiy
248
+ real (mytype) :: xmom,ymom
248
249
249
- real (mytype) :: uxmid,uymid,prmid
250
- real (mytype) :: dudxmid,dudymid,dvdxmid,dvdymid
251
- real (mytype) :: fac,tsumx,tsumy
252
- real (mytype) :: fcvx,fcvy,fprx,fpry,fdix,fdiy
253
- real (mytype) :: xmom,ymom
250
+ nvect1= xsize(1 )* xsize(2 )* xsize(3 )
251
+ nvect2= ysize(1 )* ysize(2 )* ysize(3 )
252
+ nvect3= zsize(1 )* zsize(2 )* zsize(3 )
254
253
255
- nvect1= xsize(1 )* xsize(2 )* xsize(3 )
256
- nvect2= ysize(1 )* ysize(2 )* ysize(3 )
257
- nvect3= zsize(1 )* zsize(2 )* zsize(3 )
254
+ do jj = 1 , ny-1
255
+ if (istret.eq. 0 ) then
256
+ del_y(jj)= dy
257
+ else
258
+ del_y(jj)= yp(jj+1 )- yp(jj)
259
+ endif
260
+ enddo
258
261
259
- do jj = 1 , ny-1
260
- if (istret.eq. 0 ) then
261
- del_y(jj)= dy
262
- else
263
- del_y(jj)= yp(jj+1 )- yp(jj)
262
+ if (itime.eq. 1 ) then
263
+ do k = 1 , xsize(3 )
264
+ do j = 1 , xsize(2 )
265
+ do i = 1 , xsize(1 )
266
+ ux11(i,j,k)= ux1(i,j,k)
267
+ uy11(i,j,k)= uy1(i,j,k)
268
+ enddo
269
+ enddo
270
+ enddo
271
+ return
272
+ elseif (itime.eq. 2 ) then
273
+ do k = 1 , xsize(3 )
274
+ do j = 1 , xsize(2 )
275
+ do i = 1 , xsize(1 )
276
+ ux01(i,j,k)= ux1(i,j,k)
277
+ uy01(i,j,k)= uy1(i,j,k)
278
+ enddo
279
+ enddo
280
+ enddo
281
+ return
264
282
endif
265
- enddo
266
-
267
- if (itime.eq. 1 ) then
268
- do k = 1 , xsize(3 )
269
- do j = 1 , xsize(2 )
270
- do i = 1 , xsize(1 )
271
- ux11(i,j,k)= ux1(i,j,k)
272
- uy11(i,j,k)= uy1(i,j,k)
273
- enddo
274
- enddo
275
- enddo
276
- return
277
- elseif (itime.eq. 2 ) then
278
- do k = 1 , xsize(3 )
279
- do j = 1 , xsize(2 )
280
- do i = 1 , xsize(1 )
281
- ux01(i,j,k)= ux1(i,j,k)
282
- uy01(i,j,k)= uy1(i,j,k)
283
- enddo
284
- enddo
285
- enddo
286
- return
287
- endif
288
-
289
- call derx (ta1,ux1,di1,sx,ffx,fsx,fwx,xsize(1 ),xsize(2 ),xsize(3 ),0 ,ubcx) ! dudx
290
- call derx (tb1,uy1,di1,sx,ffxp,fsxp,fwxp,xsize(1 ),xsize(2 ),xsize(3 ),1 ,ubcy) ! dvdx
291
- call transpose_x_to_y(ta1,ta2) ! dudx
292
- call transpose_x_to_y(tb1,tb2) ! dvdx
293
-
294
- call transpose_x_to_y(ux1,ux2)
295
- call transpose_x_to_y(uy1,uy2)
296
- call transpose_x_to_y(ppi1,ppi2)
297
-
298
- call dery (tc2,ux2,di2,sy,ffyp,fsyp,fwyp,ppy,ysize(1 ),ysize(2 ),ysize(3 ),1 ,ubcx) ! dudy
299
- call dery (td2,uy2,di2,sy,ffy,fsy,fwy,ppy,ysize(1 ),ysize(2 ),ysize(3 ),0 ,ubcy) ! dvdy
300
- call transpose_y_to_x(tc2,tc1) ! dudy
301
- call transpose_y_to_x(td2,td1) ! dvdy
302
-
303
- ! *****************************************************************
304
- ! Drag and Lift coefficients
305
- ! *****************************************************************
306
- do iv= 1 ,nvol
307
-
308
- ! *****************************************************************
309
- ! Calculation of the momentum terms
310
- ! *****************************************************************
311
- !
312
- ! Calculation of the momentum terms. First we integrate the
313
- ! time rate of momentum along the CV.
314
- !
315
- ! Excluding the body internal cells. If the centroid
316
- ! of the cell falls inside the body the cell is
317
- ! excluded.
318
-
319
- tunstxl= zero
320
- tunstyl= zero
321
- do k= 1 ,xsize(3 )
322
- tsumx= zero
323
- tsumy= zero
324
- do j= jcvlw_lx(iv),jcvup_lx(iv)
325
- do i= icvlf_lx(iv),icvrt_lx(iv)
326
- ! The velocity time rate has to be relative to the cell center,
327
- ! and not to the nodes, because, here, we have an integral
328
- ! relative to the volume, and, therefore, this has a sense
329
- ! of a "source".
330
- ! fac = (1.5*ux1(i,j,k)-2.0*ux01(i,j,k)+0.5*ux11(i,j,k))*epcv1(i,j,k)
331
- fac = (onepfive* ux1(i,j,k)- two* ux01(i,j,k)+ half* ux11(i,j,k))* (one- ep1(i,j,k))
332
- tsumx = tsumx+ fac* dx* del_y(j+ (xstart(2 )- 1 ))/ dt ! tsumx+fac*dx*dy/dt
333
- ! sumx(k) = sumx(k)+dudt1*dx*dy
334
-
335
- ! fac = (1.5*uy1(i,j,k)-2.0*uy01(i,j,k)+0.5*uy11(i,j,k))*epcv1(i,j,k)
336
- fac = (onepfive* uy1(i,j,k)- two* uy01(i,j,k)+ half* uy11(i,j,k))* (one- ep1(i,j,k))
337
- tsumy = tsumy+ fac* dx* del_y(j+ (xstart(2 )- 1 ))/ dt ! tsumy+fac*dx*dy/dt
338
- ! sumy(k) = sumy(k)+dudt1*dx*dy
339
- enddo
340
- enddo
341
- tunstxl(xstart(3 )- 1 + k)= tsumx
342
- tunstyl(xstart(3 )- 1 + k)= tsumy
343
- enddo
344
- call MPI_ALLREDUCE(tunstxl,tunstx,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
345
- call MPI_ALLREDUCE(tunstyl,tunsty,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
283
+
284
+ call derx (ta1,ux1,di1,sx,ffx,fsx,fwx,xsize(1 ),xsize(2 ),xsize(3 ),0 ,ubcx) ! dudx
285
+ call derx (tb1,uy1,di1,sx,ffxp,fsxp,fwxp,xsize(1 ),xsize(2 ),xsize(3 ),1 ,ubcy) ! dvdx
286
+ call transpose_x_to_y(ta1,ta2) ! dudx
287
+ call transpose_x_to_y(tb1,tb2) ! dvdx
288
+
289
+ call transpose_x_to_y(ux1,ux2)
290
+ call transpose_x_to_y(uy1,uy2)
291
+ call transpose_x_to_y(ppi1,ppi2)
292
+
293
+ call dery (tc2,ux2,di2,sy,ffyp,fsyp,fwyp,ppy,ysize(1 ),ysize(2 ),ysize(3 ),1 ,ubcx) ! dudy
294
+ call dery (td2,uy2,di2,sy,ffy,fsy,fwy,ppy,ysize(1 ),ysize(2 ),ysize(3 ),0 ,ubcy) ! dvdy
295
+ call transpose_y_to_x(tc2,tc1) ! dudy
296
+ call transpose_y_to_x(td2,td1) ! dvdy
297
+
298
+ ! *****************************************************************
299
+ ! Drag and Lift coefficients
300
+ ! *****************************************************************
301
+ do iv= 1 ,nvol
302
+
303
+ ! *****************************************************************
304
+ ! Calculation of the momentum terms
305
+ ! *****************************************************************
306
+ !
307
+ ! Calculation of the momentum terms. First we integrate the
308
+ ! time rate of momentum along the CV.
309
+ !
310
+ ! Excluding the body internal cells. If the centroid
311
+ ! of the cell falls inside the body the cell is
312
+ ! excluded.
313
+
314
+ tunstxl= zero
315
+ tunstyl= zero
316
+ do k= 1 ,xsize(3 )
317
+ tsumx= zero
318
+ tsumy= zero
319
+ do j= jcvlw_lx(iv),jcvup_lx(iv)
320
+ do i= icvlf_lx(iv),icvrt_lx(iv)
321
+ ! The velocity time rate has to be relative to the cell center,
322
+ ! and not to the nodes, because, here, we have an integral
323
+ ! relative to the volume, and, therefore, this has a sense
324
+ ! of a "source".
325
+ ! fac = (1.5*ux1(i,j,k)-2.0*ux01(i,j,k)+0.5*ux11(i,j,k))*epcv1(i,j,k)
326
+ fac = (onepfive* ux1(i,j,k)- two* ux01(i,j,k)+ half* ux11(i,j,k))* (one- ep1(i,j,k))
327
+ tsumx = tsumx+ fac* dx* del_y(j+ (xstart(2 )- 1 ))/ dt ! tsumx+fac*dx*dy/dt
328
+ ! sumx(k) = sumx(k)+dudt1*dx*dy
329
+
330
+ ! fac = (1.5*uy1(i,j,k)-2.0*uy01(i,j,k)+0.5*uy11(i,j,k))*epcv1(i,j,k)
331
+ fac = (onepfive* uy1(i,j,k)- two* uy01(i,j,k)+ half* uy11(i,j,k))* (one- ep1(i,j,k))
332
+ tsumy = tsumy+ fac* dx* del_y(j+ (xstart(2 )- 1 ))/ dt ! tsumy+fac*dx*dy/dt
333
+ ! sumy(k) = sumy(k)+dudt1*dx*dy
334
+ enddo
335
+ enddo
336
+ tunstxl(xstart(3 )- 1 + k)= tsumx
337
+ tunstyl(xstart(3 )- 1 + k)= tsumy
338
+ enddo
339
+ call MPI_ALLREDUCE(tunstxl,tunstx,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
340
+ call MPI_ALLREDUCE(tunstyl,tunsty,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
346
341
347
342
! !$!*********************************************************************************
348
343
! !$! Secondly, the surface momentum fluxes
@@ -357,209 +352,210 @@ subroutine force(ux1,uy1,ep1)
357
352
!!$! \ CV \
358
353
!!$!(jcvlw) A____________D
359
354
360
- tconvxl= zero
361
- tconvyl= zero
362
- tdiffxl= zero
363
- tdiffyl= zero
364
- tpresxl= zero
365
- tpresyl= zero
366
- ! BC and AD : x-pencils
367
- ! AD
368
- if ((jcvlw(iv).ge. xstart(2 )).and. (jcvlw(iv).le. xend(2 ))) then
369
- j= jcvlw(iv)- xstart(2 )+ 1
370
- do k= 1 ,xsize(3 )
371
- kk= xstart(3 )- 1 + k
372
- fcvx= zero
373
- fcvy= zero
374
- fpry= zero
375
- fdix= zero
376
- fdiy= zero
377
- do i= icvlf_lx(iv),icvrt_lx(iv)- 1
378
- ! momentum flux
379
- uxmid = half* (ux1(i,j,k)+ ux1(i+1 ,j,k))
380
- uymid = half* (uy1(i,j,k)+ uy1(i+1 ,j,k))
381
- fcvx = fcvx - uxmid* uymid* dx
382
- fcvy = fcvy - uymid* uymid* dx
383
-
384
- ! pressure
385
- prmid = half* (ppi1(i,j,k)+ ppi1(i+1 ,j,k))
386
- fpry = fpry + prmid* dx
387
-
388
- ! viscous term
389
- dudymid = half* (tc1(i,j,k)+ tc1(i+1 ,j,k))
390
- dvdxmid = half* (tb1(i,j,k)+ tb1(i+1 ,j,k))
391
- dvdymid = half* (td1(i,j,k)+ td1(i+1 ,j,k))
392
- fdix = fdix - (xnu* (dudymid+ dvdxmid)* dx)
393
- fdiy = fdiy - two* xnu* dvdymid* dx
394
-
395
- enddo
396
-
397
- tconvxl(kk)= tconvxl(kk)+ fcvx
398
- tconvyl(kk)= tconvyl(kk)+ fcvy
399
- tpresyl(kk)= tpresyl(kk)+ fpry
400
- tdiffxl(kk)= tdiffxl(kk)+ fdix
401
- tdiffyl(kk)= tdiffyl(kk)+ fdiy
402
- enddo
403
- endif
404
- ! BC
405
- if ((jcvup(iv).ge. xstart(2 )).and. (jcvup(iv).le. xend(2 ))) then
406
- j= jcvup(iv)- xstart(2 )+ 1
407
- do k= 1 ,xsize(3 )
408
- kk= xstart(3 )- 1 + k
409
- fcvx= zero
410
- fcvy= zero
411
- fpry= zero
412
- fdix= zero
413
- fdiy= zero
414
- do i= icvlf_lx(iv),icvrt_lx(iv)- 1
415
- ! momentum flux
416
- uxmid = half* (ux1(i,j,k)+ ux1(i+1 ,j,k))
417
- uymid = half* (uy1(i,j,k)+ uy1(i+1 ,j,k))
418
- fcvx= fcvx + uxmid* uymid* dx
419
- fcvy= fcvy + uymid* uymid* dx
420
-
421
- ! pressure
422
- prmid = half* (ppi1(i,j,k)+ ppi1(i+1 ,j,k))
423
- fpry = fpry - prmid* dx
424
-
425
- ! viscous term
426
- dudymid = half* (tc1(i,j,k)+ tc1(i+1 ,j,k))
427
- dvdxmid = half* (tb1(i,j,k)+ tb1(i+1 ,j,k))
428
- dvdymid = half* (td1(i,j,k)+ td1(i+1 ,j,k))
429
- fdix = fdix + (xnu* (dudymid+ dvdxmid)* dx)
430
- fdiy = fdiy + two* xnu* dvdymid* dx
431
-
432
- enddo
433
- tconvxl(kk)= tconvxl(kk)+ fcvx
434
- tconvyl(kk)= tconvyl(kk)+ fcvy
435
- tpresyl(kk)= tpresyl(kk)+ fpry
436
- tdiffxl(kk)= tdiffxl(kk)+ fdix
437
- tdiffyl(kk)= tdiffyl(kk)+ fdiy
438
- enddo
439
- endif
440
- ! AB and DC : y-pencils
441
- ! AB
442
- if ((icvlf(iv).ge. ystart(1 )).and. (icvlf(iv).le. yend(1 ))) then
443
- i= icvlf(iv)- ystart(1 )+ 1
444
- do k= 1 ,ysize(3 )
445
- kk= ystart(3 )- 1 + k
446
- fcvx= zero
447
- fcvy= zero
448
- fprx= zero
449
- fdix= zero
450
- fdiy= zero
451
- do j= jcvlw_ly(iv),jcvup_ly(iv)- 1
452
- ! momentum flux
453
- uxmid = half* (ux2(i,j,k)+ ux2(i,j+1 ,k))
454
- uymid = half* (uy2(i,j,k)+ uy2(i,j+1 ,k))
455
- fcvx= fcvx - uxmid* uxmid* del_y(j)
456
- fcvy= fcvy - uxmid* uymid* del_y(j)
457
-
458
- ! pressure
459
- prmid= half* (ppi2(i,j,k)+ ppi2(i,j+1 ,k))
460
- fprx = fprx + prmid* del_y(j)
461
-
462
- ! viscous term
463
- dudxmid = half* (ta2(i,j,k)+ ta2(i,j+1 ,k))
464
- dudymid = half* (tc2(i,j,k)+ tc2(i,j+1 ,k))
465
- dvdxmid = half* (tb2(i,j,k)+ tb2(i,j+1 ,k))
466
- fdix = fdix - two* xnu* dudxmid* del_y(j)
467
- fdiy = fdiy - xnu* (dvdxmid+ dudymid)* del_y(j)
468
- enddo
469
- tconvxl(kk)= tconvxl(kk)+ fcvx
470
- tconvyl(kk)= tconvyl(kk)+ fcvy
471
- tpresxl(kk)= tpresxl(kk)+ fprx
472
- tdiffxl(kk)= tdiffxl(kk)+ fdix
473
- tdiffyl(kk)= tdiffyl(kk)+ fdiy
474
- enddo
475
- endif
476
- ! DC
477
- if ((icvrt(iv).ge. ystart(1 )).and. (icvrt(iv).le. yend(1 ))) then
478
- i= icvrt(iv)- ystart(1 )+ 1
479
- do k= 1 ,ysize(3 )
480
- kk= ystart(3 )- 1 + k
481
- fcvx= zero
482
- fcvy= zero
483
- fprx= zero
484
- fdix= zero
485
- fdiy= zero
486
- do j= jcvlw_ly(iv),jcvup_ly(iv)- 1
487
- ! momentum flux
488
- uxmid = half* (ux2(i,j,k)+ ux2(i,j+1 ,k))
489
- uymid = half* (uy2(i,j,k)+ uy2(i,j+1 ,k))
490
- fcvx= fcvx + uxmid* uxmid* del_y(j)
491
- fcvy= fcvy + uxmid* uymid* del_y(j)
492
-
493
- ! pressure
494
- prmid= half* (ppi2(i,j,k)+ ppi2(i,j+1 ,k))
495
- fprx = fprx - prmid* del_y(j)
496
-
497
- ! viscous term
498
- dudxmid = half* (ta2(i,j,k)+ ta2(i,j+1 ,k))
499
- dudymid = half* (tc2(i,j,k)+ tc2(i,j+1 ,k))
500
- dvdxmid = half* (tb2(i,j,k)+ tb2(i,j+1 ,k))
501
- fdix = fdix + two* xnu* dudxmid* del_y(j)
502
- fdiy = fdiy + xnu* (dvdxmid+ dudymid)* del_y(j)
503
- enddo
504
- tconvxl(kk)= tconvxl(kk)+ fcvx
505
- tconvyl(kk)= tconvyl(kk)+ fcvy
506
- tpresxl(kk)= tpresxl(kk)+ fprx
507
- tdiffxl(kk)= tdiffxl(kk)+ fdix
508
- tdiffyl(kk)= tdiffyl(kk)+ fdiy
509
- enddo
510
- endif
511
- call MPI_ALLREDUCE(tconvxl,tconvx,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
512
- call MPI_ALLREDUCE(tconvyl,tconvy,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
513
- call MPI_ALLREDUCE(tpresxl,tpresx,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
514
- call MPI_ALLREDUCE(tpresyl,tpresy,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
515
- call MPI_ALLREDUCE(tdiffxl,tdiffx,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
516
- call MPI_ALLREDUCE(tdiffyl,tdiffy,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
517
-
518
- do k= 1 ,zsize(3 )
519
-
520
- tpresx(k)= tpresx(k)/ dt
521
- tpresy(k)= tpresy(k)/ dt
522
-
523
- xmom = tunstx(k)+ tconvx(k)
524
- ymom = tunsty(k)+ tconvy(k)
525
- xDrag(k) = two* (tdiffx(k)+ tpresx(k)- xmom)
526
- yLift(k) = two* (tdiffy(k)+ tpresy(k)- ymom)
527
-
528
- enddo
529
-
530
- ! Edited by F. Schuch
531
- xDrag_mean = sum (xDrag(:))/ real (nz,mytype)
532
- yLift_mean = sum (yLift(:))/ real (nz,mytype)
533
-
534
- ! if ((itime==ifirst).or.(itime==0)) then
535
- ! if (nrank .eq. 0) then
536
- ! write(filename,"('aerof',I1.1)") iv
537
- ! open(38+(iv-1),file=filename,status='unknown',form='formatted')
538
- ! endif
539
- ! endif
540
- if (nrank .eq. 0 ) then
541
- write (38 ,* ) t,xDrag_mean,yLift_mean
542
- call flush(38 )
543
- endif
544
- if (mod (itime, icheckpoint).eq. 0 ) then
545
- if (nrank .eq. 0 ) then
546
- write (filename," ('forces.dat',I7.7)" ) itime
547
- call system(" cp forces.dat " // filename)
548
- endif
549
- endif
550
- enddo
551
-
552
- do k = 1 , xsize(3 )
553
- do j = 1 , xsize(2 )
554
- do i = 1 , xsize(1 )
555
- ux11(i,j,k)= ux01(i,j,k)
556
- uy11(i,j,k)= uy01(i,j,k)
557
- ux01(i,j,k)= ux1(i,j,k)
558
- uy01(i,j,k)= uy1(i,j,k)
559
- enddo
560
- enddo
561
- enddo
562
-
563
- return
564
-
565
- end subroutine force
355
+ tconvxl= zero
356
+ tconvyl= zero
357
+ tdiffxl= zero
358
+ tdiffyl= zero
359
+ tpresxl= zero
360
+ tpresyl= zero
361
+ ! BC and AD : x-pencils
362
+ ! AD
363
+ if ((jcvlw(iv).ge. xstart(2 )).and. (jcvlw(iv).le. xend(2 ))) then
364
+ j= jcvlw(iv)- xstart(2 )+ 1
365
+ do k= 1 ,xsize(3 )
366
+ kk= xstart(3 )- 1 + k
367
+ fcvx= zero
368
+ fcvy= zero
369
+ fpry= zero
370
+ fdix= zero
371
+ fdiy= zero
372
+ do i= icvlf_lx(iv),icvrt_lx(iv)- 1
373
+ ! momentum flux
374
+ uxmid = half* (ux1(i,j,k)+ ux1(i+1 ,j,k))
375
+ uymid = half* (uy1(i,j,k)+ uy1(i+1 ,j,k))
376
+ fcvx = fcvx - uxmid* uymid* dx
377
+ fcvy = fcvy - uymid* uymid* dx
378
+
379
+ ! pressure
380
+ prmid = half* (ppi1(i,j,k)+ ppi1(i+1 ,j,k))
381
+ fpry = fpry + prmid* dx
382
+
383
+ ! viscous term
384
+ dudymid = half* (tc1(i,j,k)+ tc1(i+1 ,j,k))
385
+ dvdxmid = half* (tb1(i,j,k)+ tb1(i+1 ,j,k))
386
+ dvdymid = half* (td1(i,j,k)+ td1(i+1 ,j,k))
387
+ fdix = fdix - (xnu* (dudymid+ dvdxmid)* dx)
388
+ fdiy = fdiy - two* xnu* dvdymid* dx
389
+
390
+ enddo
391
+
392
+ tconvxl(kk)= tconvxl(kk)+ fcvx
393
+ tconvyl(kk)= tconvyl(kk)+ fcvy
394
+ tpresyl(kk)= tpresyl(kk)+ fpry
395
+ tdiffxl(kk)= tdiffxl(kk)+ fdix
396
+ tdiffyl(kk)= tdiffyl(kk)+ fdiy
397
+ enddo
398
+ endif
399
+ ! BC
400
+ if ((jcvup(iv).ge. xstart(2 )).and. (jcvup(iv).le. xend(2 ))) then
401
+ j= jcvup(iv)- xstart(2 )+ 1
402
+ do k= 1 ,xsize(3 )
403
+ kk= xstart(3 )- 1 + k
404
+ fcvx= zero
405
+ fcvy= zero
406
+ fpry= zero
407
+ fdix= zero
408
+ fdiy= zero
409
+ do i= icvlf_lx(iv),icvrt_lx(iv)- 1
410
+ ! momentum flux
411
+ uxmid = half* (ux1(i,j,k)+ ux1(i+1 ,j,k))
412
+ uymid = half* (uy1(i,j,k)+ uy1(i+1 ,j,k))
413
+ fcvx= fcvx + uxmid* uymid* dx
414
+ fcvy= fcvy + uymid* uymid* dx
415
+
416
+ ! pressure
417
+ prmid = half* (ppi1(i,j,k)+ ppi1(i+1 ,j,k))
418
+ fpry = fpry - prmid* dx
419
+
420
+ ! viscous term
421
+ dudymid = half* (tc1(i,j,k)+ tc1(i+1 ,j,k))
422
+ dvdxmid = half* (tb1(i,j,k)+ tb1(i+1 ,j,k))
423
+ dvdymid = half* (td1(i,j,k)+ td1(i+1 ,j,k))
424
+ fdix = fdix + (xnu* (dudymid+ dvdxmid)* dx)
425
+ fdiy = fdiy + two* xnu* dvdymid* dx
426
+
427
+ enddo
428
+ tconvxl(kk)= tconvxl(kk)+ fcvx
429
+ tconvyl(kk)= tconvyl(kk)+ fcvy
430
+ tpresyl(kk)= tpresyl(kk)+ fpry
431
+ tdiffxl(kk)= tdiffxl(kk)+ fdix
432
+ tdiffyl(kk)= tdiffyl(kk)+ fdiy
433
+ enddo
434
+ endif
435
+ ! AB and DC : y-pencils
436
+ ! AB
437
+ if ((icvlf(iv).ge. ystart(1 )).and. (icvlf(iv).le. yend(1 ))) then
438
+ i= icvlf(iv)- ystart(1 )+ 1
439
+ do k= 1 ,ysize(3 )
440
+ kk= ystart(3 )- 1 + k
441
+ fcvx= zero
442
+ fcvy= zero
443
+ fprx= zero
444
+ fdix= zero
445
+ fdiy= zero
446
+ do j= jcvlw_ly(iv),jcvup_ly(iv)- 1
447
+ ! momentum flux
448
+ uxmid = half* (ux2(i,j,k)+ ux2(i,j+1 ,k))
449
+ uymid = half* (uy2(i,j,k)+ uy2(i,j+1 ,k))
450
+ fcvx= fcvx - uxmid* uxmid* del_y(j)
451
+ fcvy= fcvy - uxmid* uymid* del_y(j)
452
+
453
+ ! pressure
454
+ prmid= half* (ppi2(i,j,k)+ ppi2(i,j+1 ,k))
455
+ fprx = fprx + prmid* del_y(j)
456
+
457
+ ! viscous term
458
+ dudxmid = half* (ta2(i,j,k)+ ta2(i,j+1 ,k))
459
+ dudymid = half* (tc2(i,j,k)+ tc2(i,j+1 ,k))
460
+ dvdxmid = half* (tb2(i,j,k)+ tb2(i,j+1 ,k))
461
+ fdix = fdix - two* xnu* dudxmid* del_y(j)
462
+ fdiy = fdiy - xnu* (dvdxmid+ dudymid)* del_y(j)
463
+ enddo
464
+ tconvxl(kk)= tconvxl(kk)+ fcvx
465
+ tconvyl(kk)= tconvyl(kk)+ fcvy
466
+ tpresxl(kk)= tpresxl(kk)+ fprx
467
+ tdiffxl(kk)= tdiffxl(kk)+ fdix
468
+ tdiffyl(kk)= tdiffyl(kk)+ fdiy
469
+ enddo
470
+ endif
471
+ ! DC
472
+ if ((icvrt(iv).ge. ystart(1 )).and. (icvrt(iv).le. yend(1 ))) then
473
+ i= icvrt(iv)- ystart(1 )+ 1
474
+ do k= 1 ,ysize(3 )
475
+ kk= ystart(3 )- 1 + k
476
+ fcvx= zero
477
+ fcvy= zero
478
+ fprx= zero
479
+ fdix= zero
480
+ fdiy= zero
481
+ do j= jcvlw_ly(iv),jcvup_ly(iv)- 1
482
+ ! momentum flux
483
+ uxmid = half* (ux2(i,j,k)+ ux2(i,j+1 ,k))
484
+ uymid = half* (uy2(i,j,k)+ uy2(i,j+1 ,k))
485
+ fcvx= fcvx + uxmid* uxmid* del_y(j)
486
+ fcvy= fcvy + uxmid* uymid* del_y(j)
487
+
488
+ ! pressure
489
+ prmid= half* (ppi2(i,j,k)+ ppi2(i,j+1 ,k))
490
+ fprx = fprx - prmid* del_y(j)
491
+
492
+ ! viscous term
493
+ dudxmid = half* (ta2(i,j,k)+ ta2(i,j+1 ,k))
494
+ dudymid = half* (tc2(i,j,k)+ tc2(i,j+1 ,k))
495
+ dvdxmid = half* (tb2(i,j,k)+ tb2(i,j+1 ,k))
496
+ fdix = fdix + two* xnu* dudxmid* del_y(j)
497
+ fdiy = fdiy + xnu* (dvdxmid+ dudymid)* del_y(j)
498
+ enddo
499
+ tconvxl(kk)= tconvxl(kk)+ fcvx
500
+ tconvyl(kk)= tconvyl(kk)+ fcvy
501
+ tpresxl(kk)= tpresxl(kk)+ fprx
502
+ tdiffxl(kk)= tdiffxl(kk)+ fdix
503
+ tdiffyl(kk)= tdiffyl(kk)+ fdiy
504
+ enddo
505
+ endif
506
+ call MPI_ALLREDUCE(tconvxl,tconvx,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
507
+ call MPI_ALLREDUCE(tconvyl,tconvy,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
508
+ call MPI_ALLREDUCE(tpresxl,tpresx,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
509
+ call MPI_ALLREDUCE(tpresyl,tpresy,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
510
+ call MPI_ALLREDUCE(tdiffxl,tdiffx,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
511
+ call MPI_ALLREDUCE(tdiffyl,tdiffy,nz,real_type,MPI_SUM,MPI_COMM_WORLD,code)
512
+
513
+ do k= 1 ,zsize(3 )
514
+
515
+ tpresx(k)= tpresx(k)/ dt
516
+ tpresy(k)= tpresy(k)/ dt
517
+
518
+ xmom = tunstx(k)+ tconvx(k)
519
+ ymom = tunsty(k)+ tconvy(k)
520
+ xDrag(k) = two* (tdiffx(k)+ tpresx(k)- xmom)
521
+ yLift(k) = two* (tdiffy(k)+ tpresy(k)- ymom)
522
+
523
+ enddo
524
+
525
+ ! Edited by F. Schuch
526
+ xDrag_mean = sum (xDrag(:))/ real (nz,mytype)
527
+ yLift_mean = sum (yLift(:))/ real (nz,mytype)
528
+
529
+ ! if ((itime==ifirst).or.(itime==0)) then
530
+ ! if (nrank .eq. 0) then
531
+ ! write(filename,"('aerof',I1.1)") iv
532
+ ! open(38+(iv-1),file=filename,status='unknown',form='formatted')
533
+ ! endif
534
+ ! endif
535
+ if (nrank .eq. 0 ) then
536
+ write (38 ,* ) t,xDrag_mean,yLift_mean
537
+ call flush(38 )
538
+ endif
539
+ if (mod (itime, icheckpoint).eq. 0 ) then
540
+ if (nrank .eq. 0 ) then
541
+ write (filename," ('forces.dat',I7.7)" ) itime
542
+ call system(" cp forces.dat " // filename)
543
+ endif
544
+ endif
545
+ enddo
546
+
547
+ do k = 1 , xsize(3 )
548
+ do j = 1 , xsize(2 )
549
+ do i = 1 , xsize(1 )
550
+ ux11(i,j,k)= ux01(i,j,k)
551
+ uy11(i,j,k)= uy01(i,j,k)
552
+ ux01(i,j,k)= ux1(i,j,k)
553
+ uy01(i,j,k)= uy1(i,j,k)
554
+ enddo
555
+ enddo
556
+ enddo
557
+
558
+ return
559
+
560
+ end subroutine force
561
+ end module forces
0 commit comments