subroutine fillps
! Chiel van Heerwaarden, 19 June 2007
! Adapted fillps for RK3 time loop
use modfields, only : up, vp, wp, um, vm, wm,u0,v0,w0
use modglobal, only : rk3step, ib,ie,jb,je,kb,ke,ih,jh,kh, dxfi,dyi,dzfi,dt,&
linoutflow,libm
use modmpi, only : excjs
use modboundary, only: bcpup
! use modibm, only : ibmnorm
implicit none
real,allocatable :: pup(:,:,:), pvp(:,:,:), pwp(:,:,:)
integer i,j,k
real rk3coef,rk3coefi
allocate(pup(ib-ih:ie+ih,jb-jh:je+jh,kb:ke+kh))
allocate(pvp(ib-ih:ie+ih,jb-jh:je+jh,kb:ke+kh))
allocate(pwp(ib-ih:ie+ih,jb-jh:je+jh,kb:ke+kh))
rk3coef = dt / (4. - dble(rk3step))
rk3coefi = 1. / rk3coef
do k=kb,ke
do j=jb,je
do i=ib,ie
pup(i,j,k) = up(i,j,k) + um(i,j,k) * rk3coefi ! see equation 5.81
pvp(i,j,k) = vp(i,j,k) + vm(i,j,k) * rk3coefi
pwp(i,j,k) = wp(i,j,k) + wm(i,j,k) * rk3coefi
end do
end do
end do
!****************************************************************
! Fill the right hand for the poisson solver.
! The values for up(i2,j,k) and vp(i,j2,k) are still
! unknown and have to be set cyclic.
! Also we take wp(i,j,1) and wp(i,j,k1) equal to zero.
! NOTE:
! The poisson-solver only accepts values for i from 2 to i1,
! for j from 1 to jmax and for k from 1 to kmax.
! The right-hand p is therefore filled in this partical way.
!**************************************************************
call bcpup(pup,pvp,pwp,rk3coef) ! boundary conditions for pup,pvp,pwp
do k=kb,ke
do j=jb,je
do i=ib,ie
p(i,j,k) = ( pup(i+1,j,k)-pup(i,j,k) ) * dxfi(i) & ! see equation 5.72
+( pvp(i,j+1,k)-pvp(i,j,k) ) * dyi &
+( pwp(i,j,k+1)-pwp(i,j,k) ) * dzfi(k)
end do
end do
end do
deallocate( pup,pvp,pwp )
end subroutine fillps