subroutine bcpup(pup, pvp, pwp, rk3coef)
use modglobal, only:ib, ie, jb, je, ih, jh, kb, ke, kh, linoutflow, dxfi, iinletgen, &
Uinf, libm, jmax, idriver
use modfields, only:pres0, up, vp, wp, um, w0, u0, uouttot
use modmpi, only:excjs, myid
use modinletdata, only:irecy, u0inletbc, ddispdx, u0driver
real, dimension(ib - ih:ie + ih, jb - jh:je + jh, kb:ke + kh), intent(inout) :: pup
real, dimension(ib - ih:ie + ih, jb - jh:je + jh, kb:ke + kh), intent(inout) :: pvp
real, dimension(ib - ih:ie + ih, jb - jh:je + jh, kb:ke + kh), intent(inout) :: pwp
real, intent(in) :: rk3coef
real rk3coefi
integer i, j, k
rk3coefi = 1./rk3coef
if (linoutflow) then
if ((iinletgen == 1) .or. (iinletgen == 2)) then
do j = jb, je
do i = ib, ie
pwp(i, j, kb) = 0.
pwp(i, j, ke + kh) = (Uinf*ddispdx)*rk3coefi
end do
end do
do k = kb, ke
do j = jb, je
pup(ie + 1, j, k) = -(u0(ie + 1, j, k) - u0(ie, j, k))*dxfi(ie)*uouttot + um(ie + 1, j, k)*rk3coefi ! du/dt +u*du/dx=0 -> pup(i)=um(i)/rk3coef -um(i)*(um(i)-um(i-1))/dxf(i-1)
pup(ib, j, k) = u0inletbc(j, k)*rk3coefi
end do
end do
elseif (idriver == 2) then
do j=jb,je
do i=ib,ie
pwp(i,j,kb) = 0.
pwp(i,j,ke+kh)= 0. !(Uinf*ddispdx ) *rk3coefi ! tg3315 - idriver does not use Uinf ddisp etc.
end do
end do
do k=kb,ke
do j=jb,je
pup(ie+1,j,k) = - (u0(ie+1,j,k)-u0(ie,j,k))*dxfi(ie)*uouttot + um(ie+1,j,k)*rk3coefi ! du/dt +u*du/dx=0 -> pup(i)=um(i)/rk3coef -um(i)*(um(i)-um(i-1))/dxf(i-1)
pup(ib,j,k) = u0driver(j,k)*rk3coefi
end do
end do
else ! if not iinletgen
do j = jb, je
do i = ib, ie
pwp(i, j, kb) = 0.
pwp(i, j, ke + kh) = 0.
end do
end do
do k = kb, ke
do j = jb, je
pup(ie + 1, j, k) = -(u0(ie + 1, j, k) - u0(ie, j, k))*dxfi(ie)*uouttot + um(ie + 1, j, k)*rk3coefi ! du/dt +u*du/dx=0 -> pup(i)=um(i)/rk3coef -um(i)*(um(i)-um(i-1))/dxf(i-1)
pup(ib, j, k) = pup(ib, j, k) - up(ib, j, k) ! pup(ib)= up(ib) + um(ib)/rk3coef, where up should be zero!
end do
end do
end if ! inletgen
else ! if not linoutflow
do j = jb, je
do i = ib, ie
pwp(i, j, kb) = 0.
pwp(i, j, ke + kh) = 0.
end do
end do
do k = kb, ke
do j = jb, je
pup(ie + 1, j, k) = pup(ib, j, k) ! cyclic
!pup(ib - 1, j, k) = pup(ie, j, k) ! tg3315 is this condition not needed? Was not here before but I think exists in Dales4.0 in modpois...!?
end do
end do
endif
call excjs(pup, ib, ie, jb, je, kb, ke + kh, ih, jh) ! cyclic
call excjs(pvp, ib, ie, jb, je, kb, ke + kh, ih, jh) ! cyclic
call excjs(pwp, ib, ie, jb, je, kb, ke + kh, ih, jh) ! cyclic
end subroutine bcpup