bcpup Subroutine

public subroutine bcpup(pup, pvp, pwp, rk3coef)

Uses

  • proc~~bcpup~~UsesGraph proc~bcpup modboundary::bcpup module~modfields modfields proc~bcpup->module~modfields module~modglobal modglobal proc~bcpup->module~modglobal module~modinletdata modinletdata proc~bcpup->module~modinletdata module~modmpi modmpi proc~bcpup->module~modmpi mpi mpi module~modmpi->mpi

Arguments

Type IntentOptional Attributes Name
real, intent(inout), dimension(ib - ih:ie + ih, jb - jh:je + jh, kb:ke + kh) :: pup
real, intent(inout), dimension(ib - ih:ie + ih, jb - jh:je + jh, kb:ke + kh) :: pvp
real, intent(inout), dimension(ib - ih:ie + ih, jb - jh:je + jh, kb:ke + kh) :: pwp
real, intent(in) :: rk3coef

Calls

proc~~bcpup~~CallsGraph proc~bcpup modboundary::bcpup proc~excjs modmpi::excjs proc~bcpup->proc~excjs mpi_sendrecv mpi_sendrecv proc~excjs->mpi_sendrecv

Called by

proc~~bcpup~~CalledByGraph proc~bcpup modboundary::bcpup proc~fillps modpois::fillps proc~fillps->proc~bcpup proc~poisson modpois::poisson proc~poisson->proc~fillps program~dalesurban DALESURBAN program~dalesurban->proc~poisson

Contents

Source Code


Source Code

   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