block_obj_SetupUniformGrid Subroutine

private impure subroutine block_obj_SetupUniformGrid(this, xlo, xhi, lo, hi)

Initializes a uniform grid on this block.

Type Bound

block_obj

Arguments

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

A block object

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

Coordinates of the bottom left corner

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

Coordinates of the top right corner

integer, intent(in) :: lo(3)

Array lower bound

integer, intent(in) :: hi(3)

Array upper bound


Calls

proc~~block_obj_setupuniformgrid~~CallsGraph proc~block_obj_setupuniformgrid block_obj%block_obj_SetupUniformGrid proc~axis_obj_init axis_obj%axis_obj_Init proc~block_obj_setupuniformgrid->proc~axis_obj_init proc~block_obj_setconveniencepointers block_obj%block_obj_SetConveniencePointers proc~block_obj_setupuniformgrid->proc~block_obj_setconveniencepointers proc~block_obj_setupmpitypes block_obj%block_obj_SetupMPITypes proc~block_obj_setupuniformgrid->proc~block_obj_setupmpitypes proc~block_obj_updategridghostcells block_obj%block_obj_UpdateGridGhostCells proc~block_obj_setupuniformgrid->proc~block_obj_updategridghostcells proc~block_obj_updatemidpoints block_obj%block_obj_UpdateMidPoints proc~block_obj_setupuniformgrid->proc~block_obj_updatemidpoints proc~block_obj_updatespacing block_obj%block_obj_UpdateSpacing proc~block_obj_setupuniformgrid->proc~block_obj_updatespacing mpi_type_commit mpi_type_commit proc~block_obj_setupmpitypes->mpi_type_commit mpi_type_free mpi_type_free proc~block_obj_setupmpitypes->mpi_type_free mpi_type_vector mpi_type_vector proc~block_obj_setupmpitypes->mpi_type_vector mpi_irecv mpi_irecv proc~block_obj_updategridghostcells->mpi_irecv mpi_isend mpi_isend proc~block_obj_updategridghostcells->mpi_isend mpi_wait mpi_wait proc~block_obj_updategridghostcells->mpi_wait mpi_waitall mpi_waitall proc~block_obj_updategridghostcells->mpi_waitall proc~block_obj_updateextents block_obj%block_obj_UpdateExtents proc~block_obj_updategridghostcells->proc~block_obj_updateextents proc~block_obj_updateextents->proc~axis_obj_init

Called by

proc~~block_obj_setupuniformgrid~~CalledByGraph proc~block_obj_setupuniformgrid block_obj%block_obj_SetupUniformGrid proc~block_obj_init2 block_obj%block_obj_Init2 proc~block_obj_init2->proc~block_obj_setupuniformgrid proc~collision_obj_setupcollisionblock collision_obj%collision_obj_SetupCollisionBlock proc~collision_obj_setupcollisionblock->proc~block_obj_setupuniformgrid none~initialize~6 block_obj%Initialize proc~collision_obj_setupcollisionblock->none~initialize~6 proc~collision_obj_setupcollisionblock2 collision_obj%collision_obj_SetupCollisionBlock2 proc~collision_obj_setupcollisionblock2->proc~block_obj_setupuniformgrid proc~collision_obj_setupcollisionblock2->none~initialize~6 none~initialize~6->proc~block_obj_init2 proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->proc~collision_obj_setupcollisionblock proc~cdifs_obj_preparesolverblock cdifs_obj_PrepareSolverBlock proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolverblock proc~grans_obj_preparesolvercollision grans_obj_PrepareSolverCollision proc~grans_obj_preparesolvercollision->proc~collision_obj_setupcollisionblock interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver proc~cdifs_obj_preparesolverblock->none~initialize~6 proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->proc~grans_obj_preparesolvercollision proc~grans_obj_preparesolverblock grans_obj_PrepareSolverBlock proc~grans_obj_preparesolver->proc~grans_obj_preparesolverblock proc~grans_obj_preparesolverblock->none~initialize~6 interface~grans_obj_preparesolver grans_obj%grans_obj_PrepareSolver interface~grans_obj_preparesolver->proc~grans_obj_preparesolver

Source Code

    impure subroutine block_obj_SetupUniformGrid(this,xlo,xhi,lo,hi)
      !> Initializes a uniform grid on this block.
      implicit none
      class(block_obj), intent(inout) :: this                                  !! A block object
      real(wp),         intent(in)    :: xlo(3)                                !! Coordinates of the bottom left corner
      real(wp),         intent(in)    :: xhi(3)                                !! Coordinates of the top right corner
      integer,          intent(in)    :: lo(3)                                 !! Array lower bound
      integer,          intent(in)    :: hi(3)                                 !! Array upper bound
      ! Work variables
      integer :: i,dir
      real(wp):: dl

      ! Setup bounds
      this%lo = lo
      this%hi = hi

      ! Initialize axes
      do dir=1,3
        call this%axis(dir)%Initialize(this%lo(dir),this%hi(dir),this%ngc)
      end do

      ! Associate pointers
      call this%SetConveniencePointers

      ! Create a uniform grid on this block
      associate (axis => this%axis)
        ! Define the nodal grid points
        do dir=1,3
          axis(dir)%x=0.0_wp
          dl = (xhi(dir)-xlo(dir))/real(hi(dir)-lo(dir)+1,wp)
          do i=lo(dir),hi(dir)+1
            axis(dir)%x(i)= xlo(dir)+ (i-lo(dir))*dl
          end do
        end do
      end associate

      ! Update values within ghostcells
      call this%UpdateGridGhostCells()

      ! Update mid points (xm)
      call this%UpdateMidPoints()

      ! Update spacing (dxm)
      call this%UpdateSpacing()

      ! Create MPI type for ghostcell communication
      call this%SetupMPITypes()

      return
    end subroutine block_obj_SetupUniformGrid