blob: de514cccd2586f0ea02da24f4c352e13d751fa06 [file] [log] [blame]
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine pintgr
c---------------------------------------------------------------------
c---------------------------------------------------------------------
implicit none
include 'mpinpb.h'
include 'applu.incl'
c---------------------------------------------------------------------
c local variables
c---------------------------------------------------------------------
integer i, j, k
integer ibeg, ifin, ifin1
integer jbeg, jfin, jfin1
integer iglob, iglob1, iglob2
integer jglob, jglob1, jglob2
integer ind1, ind2
double precision phi1(0:isiz2+1,0:isiz3+1),
> phi2(0:isiz2+1,0:isiz3+1)
double precision frc1, frc2, frc3
double precision dummy
integer IERROR
c---------------------------------------------------------------------
c set up the sub-domains for integeration in each processor
c---------------------------------------------------------------------
ibeg = nx + 1
ifin = 0
iglob1 = ipt + 1
iglob2 = ipt + nx
if (iglob1.ge.ii1.and.iglob2.lt.ii2+nx) ibeg = 1
if (iglob1.gt.ii1-nx.and.iglob2.le.ii2) ifin = nx
if (ii1.ge.iglob1.and.ii1.le.iglob2) ibeg = ii1 - ipt
if (ii2.ge.iglob1.and.ii2.le.iglob2) ifin = ii2 - ipt
jbeg = ny + 1
jfin = 0
jglob1 = jpt + 1
jglob2 = jpt + ny
if (jglob1.ge.ji1.and.jglob2.lt.ji2+ny) jbeg = 1
if (jglob1.gt.ji1-ny.and.jglob2.le.ji2) jfin = ny
if (ji1.ge.jglob1.and.ji1.le.jglob2) jbeg = ji1 - jpt
if (ji2.ge.jglob1.and.ji2.le.jglob2) jfin = ji2 - jpt
ifin1 = ifin
jfin1 = jfin
if (ipt + ifin1.eq.ii2) ifin1 = ifin -1
if (jpt + jfin1.eq.ji2) jfin1 = jfin -1
c---------------------------------------------------------------------
c initialize
c---------------------------------------------------------------------
do i = 0,isiz2+1
do k = 0,isiz3+1
phi1(i,k) = 0.
phi2(i,k) = 0.
end do
end do
do j = jbeg,jfin
jglob = jpt + j
do i = ibeg,ifin
iglob = ipt + i
k = ki1
phi1(i,j) = c2*( u(5,i,j,k)
> - 0.50d+00 * ( u(2,i,j,k) ** 2
> + u(3,i,j,k) ** 2
> + u(4,i,j,k) ** 2 )
> / u(1,i,j,k) )
k = ki2
phi2(i,j) = c2*( u(5,i,j,k)
> - 0.50d+00 * ( u(2,i,j,k) ** 2
> + u(3,i,j,k) ** 2
> + u(4,i,j,k) ** 2 )
> / u(1,i,j,k) )
end do
end do
c---------------------------------------------------------------------
c communicate in i and j directions
c---------------------------------------------------------------------
call exchange_4(phi1,phi2,ibeg,ifin1,jbeg,jfin1)
frc1 = 0.0d+00
do j = jbeg,jfin1
do i = ibeg, ifin1
frc1 = frc1 + ( phi1(i,j)
> + phi1(i+1,j)
> + phi1(i,j+1)
> + phi1(i+1,j+1)
> + phi2(i,j)
> + phi2(i+1,j)
> + phi2(i,j+1)
> + phi2(i+1,j+1) )
end do
end do
c---------------------------------------------------------------------
c compute the global sum of individual contributions to frc1
c---------------------------------------------------------------------
dummy = frc1
call MPI_ALLREDUCE( dummy,
> frc1,
> 1,
> dp_type,
> MPI_SUM,
> MPI_COMM_WORLD,
> IERROR )
frc1 = dxi * deta * frc1
c---------------------------------------------------------------------
c initialize
c---------------------------------------------------------------------
do i = 0,isiz2+1
do k = 0,isiz3+1
phi1(i,k) = 0.
phi2(i,k) = 0.
end do
end do
jglob = jpt + jbeg
ind1 = 0
if (jglob.eq.ji1) then
ind1 = 1
do k = ki1, ki2
do i = ibeg, ifin
iglob = ipt + i
phi1(i,k) = c2*( u(5,i,jbeg,k)
> - 0.50d+00 * ( u(2,i,jbeg,k) ** 2
> + u(3,i,jbeg,k) ** 2
> + u(4,i,jbeg,k) ** 2 )
> / u(1,i,jbeg,k) )
end do
end do
end if
jglob = jpt + jfin
ind2 = 0
if (jglob.eq.ji2) then
ind2 = 1
do k = ki1, ki2
do i = ibeg, ifin
iglob = ipt + i
phi2(i,k) = c2*( u(5,i,jfin,k)
> - 0.50d+00 * ( u(2,i,jfin,k) ** 2
> + u(3,i,jfin,k) ** 2
> + u(4,i,jfin,k) ** 2 )
> / u(1,i,jfin,k) )
end do
end do
end if
c---------------------------------------------------------------------
c communicate in i direction
c---------------------------------------------------------------------
if (ind1.eq.1) then
call exchange_5(phi1,ibeg,ifin1)
end if
if (ind2.eq.1) then
call exchange_5 (phi2,ibeg,ifin1)
end if
frc2 = 0.0d+00
do k = ki1, ki2-1
do i = ibeg, ifin1
frc2 = frc2 + ( phi1(i,k)
> + phi1(i+1,k)
> + phi1(i,k+1)
> + phi1(i+1,k+1)
> + phi2(i,k)
> + phi2(i+1,k)
> + phi2(i,k+1)
> + phi2(i+1,k+1) )
end do
end do
c---------------------------------------------------------------------
c compute the global sum of individual contributions to frc2
c---------------------------------------------------------------------
dummy = frc2
call MPI_ALLREDUCE( dummy,
> frc2,
> 1,
> dp_type,
> MPI_SUM,
> MPI_COMM_WORLD,
> IERROR )
frc2 = dxi * dzeta * frc2
c---------------------------------------------------------------------
c initialize
c---------------------------------------------------------------------
do i = 0,isiz2+1
do k = 0,isiz3+1
phi1(i,k) = 0.
phi2(i,k) = 0.
end do
end do
iglob = ipt + ibeg
ind1 = 0
if (iglob.eq.ii1) then
ind1 = 1
do k = ki1, ki2
do j = jbeg, jfin
jglob = jpt + j
phi1(j,k) = c2*( u(5,ibeg,j,k)
> - 0.50d+00 * ( u(2,ibeg,j,k) ** 2
> + u(3,ibeg,j,k) ** 2
> + u(4,ibeg,j,k) ** 2 )
> / u(1,ibeg,j,k) )
end do
end do
end if
iglob = ipt + ifin
ind2 = 0
if (iglob.eq.ii2) then
ind2 = 1
do k = ki1, ki2
do j = jbeg, jfin
jglob = jpt + j
phi2(j,k) = c2*( u(5,ifin,j,k)
> - 0.50d+00 * ( u(2,ifin,j,k) ** 2
> + u(3,ifin,j,k) ** 2
> + u(4,ifin,j,k) ** 2 )
> / u(1,ifin,j,k) )
end do
end do
end if
c---------------------------------------------------------------------
c communicate in j direction
c---------------------------------------------------------------------
if (ind1.eq.1) then
call exchange_6(phi1,jbeg,jfin1)
end if
if (ind2.eq.1) then
call exchange_6(phi2,jbeg,jfin1)
end if
frc3 = 0.0d+00
do k = ki1, ki2-1
do j = jbeg, jfin1
frc3 = frc3 + ( phi1(j,k)
> + phi1(j+1,k)
> + phi1(j,k+1)
> + phi1(j+1,k+1)
> + phi2(j,k)
> + phi2(j+1,k)
> + phi2(j,k+1)
> + phi2(j+1,k+1) )
end do
end do
c---------------------------------------------------------------------
c compute the global sum of individual contributions to frc3
c---------------------------------------------------------------------
dummy = frc3
call MPI_ALLREDUCE( dummy,
> frc3,
> 1,
> dp_type,
> MPI_SUM,
> MPI_COMM_WORLD,
> IERROR )
frc3 = deta * dzeta * frc3
frc = 0.25d+00 * ( frc1 + frc2 + frc3 )
c if (id.eq.0) write (*,1001) frc
return
1001 format (//5x,'surface integral = ',1pe12.5//)
end