block_obj_GetOwningCellWGC Function

private pure function block_obj_GetOwningCellWGC(this, p) result(cell)

Returns the coordinates of the cell that contains the position p, inclusive of ghost cells.

Type Bound

block_obj

Arguments

Type IntentOptional Attributes Name
class(block_obj), intent(in) :: this

A block object

real(kind=wp), intent(in) :: p(3)

Position to locate

Return Value integer, (3)

Cell coordinates


Called by

proc~~block_obj_getowningcellwgc~~CalledByGraph proc~block_obj_getowningcellwgc block_obj%block_obj_GetOwningCellWGC proc~collision_obj_setupcollisionblock2 collision_obj%collision_obj_SetupCollisionBlock2 proc~collision_obj_setupcollisionblock2->proc~block_obj_getowningcellwgc proc~collision_obj_updateneighborlist collision_obj%collision_obj_UpdateNeighborList proc~collision_obj_updateneighborlist->proc~block_obj_getowningcellwgc proc~cdifs_obj_updatecollisions cdifs_obj_UpdateCollisions proc~cdifs_obj_updatecollisions->proc~collision_obj_updateneighborlist proc~grans_obj_advancesolution_computecollisionforces grans_obj_AdvanceSolution_ComputeCollisionForces proc~grans_obj_advancesolution_computecollisionforces->proc~collision_obj_updateneighborlist proc~cdifs_obj_advancesolutionrp cdifs_obj_AdvanceSolutionRP proc~cdifs_obj_advancesolutionrp->proc~cdifs_obj_updatecollisions proc~grans_obj_advancesolution grans_obj_AdvanceSolution proc~grans_obj_advancesolution->proc~grans_obj_advancesolution_computecollisionforces interface~grans_obj_advancesolution grans_obj%grans_obj_AdvanceSolution interface~grans_obj_advancesolution->proc~grans_obj_advancesolution proc~cdifs_obj_advancesolution cdifs_obj_AdvanceSolution proc~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolutionrp interface~cdifs_obj_advancesolution cdifs_obj%cdifs_obj_AdvanceSolution interface~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolution

Source Code

    pure function block_obj_GetOwningCellWGC(this,p) result (cell)
      !> Returns the coordinates of the cell that contains
      ! the position p, inclusive of ghost cells.
      implicit none
      class(block_obj), intent(in) :: this                                     !! A block object
      real(wp),         intent(in) :: p(3)                                     !! Position to locate
      integer                      :: cell(3)                                  !! Cell coordinates
      ! Work variables
      integer :: c_hi(3),c_lo(3)
      integer :: dir


      c_lo = this%lo   - this%ngc
      c_hi = this%hi+1 + this%ngc

      do dir =1,3
        ! Sandwich xp between x(c) and x(c+1)
        do while (c_hi(dir)-c_lo(dir).ge.2)
          ! Compute a mid-point
          cell(dir)= (c_hi(dir)+c_lo(dir))/2
          if (p(dir).ge.this%axis(dir)%x(cell(dir))) then
            c_lo(dir)=cell(dir)
          else
            c_hi(dir)=cell(dir)
          end if
        end do
        ! xm(c) lies between x(c) and x(c+1)
        cell(dir)= c_lo(dir)
      end do

      return
    end function block_obj_GetOwningCellWGC