Skip to content

Commit 2546f40

Browse files
authoredJan 10, 2022
Merge pull request #85 from pbartholomew08/fix/force-in-forces-module
Move force subroutine into forces module
2 parents 1096d3e + 792dc6d commit 2546f40

File tree

1 file changed

+327
-331
lines changed

1 file changed

+327
-331
lines changed
 

‎src/forces.f90

+327-331
Original file line numberDiff line numberDiff line change
@@ -203,146 +203,141 @@ subroutine restart_forces(itest1)
203203
endif
204204

205205
end subroutine restart_forces
206-
end module forces
207206

208-
!***********************************************************************
209-
subroutine force(ux1,uy1,ep1)
207+
subroutine force(ux1,uy1,ep1)
210208

211-
!***********************************************************************
209+
USE param
210+
USE variables
211+
USE decomp_2d
212+
USE MPI
213+
USE ibm_param
212214

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
219217

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
222223

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
228226

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
231228

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
233231

234-
real(mytype), dimension(nz) :: yLift,xDrag
235-
real(mytype) :: yLift_mean,xDrag_mean
232+
real(mytype), dimension(ny-1) :: del_y
236233

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
238238

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
243243

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
248249

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)
254253

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
258261

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
264282
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)
346341

347342
!!$!*********************************************************************************
348343
!!$! Secondly, the surface momentum fluxes
@@ -357,209 +352,210 @@ subroutine force(ux1,uy1,ep1)
357352
!!$! \ CV \
358353
!!$!(jcvlw) A____________D
359354

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

Comments
 (0)
Please sign in to comment.