cdifs_obj_PrepareSolverOperatorsPGRAD Subroutine

subroutine cdifs_obj_PrepareSolverOperatorsPGRAD(this)

Uses

  • proc~~cdifs_obj_preparesolveroperatorspgrad~~UsesGraph proc~cdifs_obj_preparesolveroperatorspgrad cdifs_obj_PrepareSolverOperatorsPGRAD module~leapbc leapBC proc~cdifs_obj_preparesolveroperatorspgrad->module~leapbc iso_fortran_env iso_fortran_env module~leapbc->iso_fortran_env module~leapblock leapBlock module~leapbc->module~leapblock module~leapeulerian leapEulerian module~leapbc->module~leapeulerian module~leapio leapIO module~leapbc->module~leapio module~leapkinds leapKinds module~leapbc->module~leapkinds module~leapparallel leapParallel module~leapbc->module~leapparallel module~leaputils leapUtils module~leapbc->module~leaputils mpi_f08 mpi_f08 module~leapbc->mpi_f08 module~leapblock->iso_fortran_env module~leapblock->module~leapkinds module~leapblock->module~leapparallel module~leapblock->mpi_f08 module~leapio_hdf5 leapIO_hdf5 module~leapblock->module~leapio_hdf5 module~leapeulerian->iso_fortran_env module~leapeulerian->module~leapblock module~leapeulerian->module~leapio module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel module~leapeulerian->module~leaputils module~leapeulerian->mpi_f08 module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio->module~leapio_hdf5 module~leapio_silo leapIO_silo module~leapio->module~leapio_silo module~leapio_xdmf leapIO_xdmf module~leapio->module~leapio_xdmf module~leapkinds->iso_fortran_env module~leapparallel->iso_fortran_env module~leapparallel->module~leapkinds module~leapparallel->mpi_f08 module~leaputils->module~leapkinds module~leapio_h5hut->module~leapkinds module~leapio_h5hut->module~leapparallel module~leapio_h5hut->module~leapio_hdf5 module~leapio_hdf5->module~leapkinds module~leapio_hdf5->module~leapparallel module~leapio_hdf5->module~leaputils hdf5 hdf5 module~leapio_hdf5->hdf5 module~leapio_silo->module~leapkinds module~leapio_silo->module~leapparallel module~leapio_silo->module~leaputils module~leapio_silo->mpi_f08 module~leapio_xdmf->module~leapkinds module~leapio_xdmf->module~leaputils

Generates the gradient operator for the pressure field, and adjusts at the boundaries.

Arguments

Type IntentOptional Attributes Name
class(cdifs_obj), intent(inout) :: this

CDIFS solver


Calls

proc~~cdifs_obj_preparesolveroperatorspgrad~~CallsGraph proc~cdifs_obj_preparesolveroperatorspgrad cdifs_obj_PrepareSolverOperatorsPGRAD proc~bc_set_checkbcexists bc_set%bc_set_CheckBCExists proc~cdifs_obj_preparesolveroperatorspgrad->proc~bc_set_checkbcexists proc~bc_set_getbctype bc_set%bc_set_GetBCType proc~cdifs_obj_preparesolveroperatorspgrad->proc~bc_set_getbctype proc~bc_set_getextents bc_set%bc_set_GetExtents proc~cdifs_obj_preparesolveroperatorspgrad->proc~bc_set_getextents proc~bc_set_getsidedirbyregion bc_set%bc_set_GetSideDirByRegion proc~cdifs_obj_preparesolveroperatorspgrad->proc~bc_set_getsidedirbyregion proc~bc_set_getregionindex bc_set%bc_set_GetRegionIndex proc~bc_set_checkbcexists->proc~bc_set_getregionindex proc~region_obj_getbcindex region_obj%region_obj_GetBCIndex proc~bc_set_checkbcexists->proc~region_obj_getbcindex proc~bc_set_getbctype->proc~bc_set_getregionindex proc~bc_set_getbctype->proc~region_obj_getbcindex proc~bc_set_getextents->proc~bc_set_getregionindex proc~bc_set_getsidedirbyregion->proc~bc_set_getregionindex none~get~3 hashtbl_obj%Get proc~bc_set_getregionindex->none~get~3 proc~hashtbl_obj_hashstring hashtbl_obj%hashtbl_obj_HashString proc~bc_set_getregionindex->proc~hashtbl_obj_hashstring proc~region_obj_getbcindex->none~get~3 proc~region_obj_getbcindex->proc~hashtbl_obj_hashstring proc~hashtbl_obj_get_int4 hashtbl_obj%hashtbl_obj_Get_int4 none~get~3->proc~hashtbl_obj_get_int4 proc~hashtbl_obj_get_int8 hashtbl_obj%hashtbl_obj_Get_int8 none~get~3->proc~hashtbl_obj_get_int8 proc~hashtbl_obj_get_real_dp hashtbl_obj%hashtbl_obj_Get_real_dp none~get~3->proc~hashtbl_obj_get_real_dp proc~hashtbl_obj_get_real_sp hashtbl_obj%hashtbl_obj_Get_real_sp none~get~3->proc~hashtbl_obj_get_real_sp none~get~2 sllist_obj%Get proc~hashtbl_obj_get_int4->none~get~2 proc~hashtbl_obj_get_int8->none~get~2 proc~hashtbl_obj_get_real_dp->none~get~2 proc~hashtbl_obj_get_real_sp->none~get~2 proc~sllist_obj_get_int4 sllist_obj%sllist_obj_Get_int4 none~get~2->proc~sllist_obj_get_int4 proc~sllist_obj_get_int8 sllist_obj%sllist_obj_Get_int8 none~get~2->proc~sllist_obj_get_int8 proc~sllist_obj_get_real_dp sllist_obj%sllist_obj_Get_real_dp none~get~2->proc~sllist_obj_get_real_dp proc~sllist_obj_get_real_sp sllist_obj%sllist_obj_Get_real_sp none~get~2->proc~sllist_obj_get_real_sp proc~sllist_obj_get_int4->proc~sllist_obj_get_int4 proc~sllist_obj_get_int8->proc~sllist_obj_get_int8 proc~sllist_obj_get_real_dp->proc~sllist_obj_get_real_dp proc~sllist_obj_get_real_sp->proc~sllist_obj_get_real_sp

Called by

proc~~cdifs_obj_preparesolveroperatorspgrad~~CalledByGraph proc~cdifs_obj_preparesolveroperatorspgrad cdifs_obj_PrepareSolverOperatorsPGRAD proc~cdifs_obj_preparesolveroperators cdifs_obj_PrepareSolverOperators proc~cdifs_obj_preparesolveroperators->proc~cdifs_obj_preparesolveroperatorspgrad proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolveroperators interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver

Source Code

    subroutine cdifs_obj_PrepareSolverOperatorsPGRAD(this)
      !> Generates the gradient operator for the pressure
      ! field, and adjusts at the boundaries.
      use leapBC
      implicit none
      class(cdifs_obj), intent(inout) :: this                                  !! CDIFS solver
      ! Work variables
      integer          :: i,j,k,n,m
      logical          :: found
      type(extent_obj) :: extents
      integer          :: shift(3)
      integer          :: dir
      integer          :: side
      integer          :: ierr

      ! Allocate array
      associate (lo => this%block%lo, hi => this%block%hi, &
        op => this%op, bcs => this%bcs)
        allocate(this%pGRAD(-op%st:op%st-1,lo(1)-op%st+1:hi(1)+op%st,lo(2)-op%st+1:hi(2)+op%st,lo(3)-op%st+1:hi(3)+op%st,3), &
                 source = 0.0_wp, stat=ierr)
        if (ierr.ne.0) call this%parallel%Stop('Unable to allocate pGRAD array')
      end associate

      ! Define gradients of pressure
      associate (lo => this%block%lo, hi => this%block%hi, &
        op => this%op, bcs => this%bcs)
        do k=lo(3)-op%st+1,hi(3)+op%st
          do j=lo(2)-op%st+1,hi(2)+op%st
            do i=lo(1)-op%st+1,hi(1)+op%st

              do m=-op%st,op%st-1
                this%pGRAD(m,i,j,k,1) = this%pGRAD(m,i,j,k,1) + op%c_d1dx1m(m,i)
                this%pGRAD(m,i,j,k,2) = this%pGRAD(m,i,j,k,2) + op%c_d1dx2m(m,j)
                this%pGRAD(m,i,j,k,3) = this%pGRAD(m,i,j,k,3) + op%c_d1dx3m(m,k)
              end do

            end do
          end do
        end do

        ! Apply Neumann BC
        do n=1,bcs%count
          ! Check Whether we have a BC for this variable on this region
          found = bcs%CheckBCExists(bcs%region(n)%name,'P')
          if (.not.found) cycle

          select case (bcs%GetBCType(bcs%region(n)%name,'P'))
          case (BC_NEUMANN)
           ! Get extents
           extents = bcs%GetExtents(bcs%region(n)%name)

           ! Get direction and side of BC
           call bcs%GetSideDirByRegion(bcs%region(n)%name,side,dir)

           shift = 0
           ! Treatment for cell-centered fields in dir-direction
           select case (side)
           case (1) ! BC_RIGHT
             shift(dir) = 1
           case (0) ! BC_LEFT
             shift(dir) = 0
           end select

           ! Assuming zero gradient
           do k=extents%lo(3),extents%hi(3)
             do j=extents%lo(2),extents%hi(2)
               do i=extents%lo(1),extents%hi(1)
                 this%pGRAD(:,i+shift(1),j+shift(2),k+shift(3),dir) = 0.0_wp
               end do
             end do
           end do
          end select
        end do
      end associate

      return
    end subroutine cdifs_obj_PrepareSolverOperatorsPGRAD