hypre_obj_SetupRowsIJ Subroutine

private impure subroutine hypre_obj_SetupRowsIJ(this)

Sets up row indexing used with IJ interface.

Type Bound

hypre_obj

Arguments

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

Hypre machinery


Calls

proc~~hypre_obj_setuprowsij~~CallsGraph proc~hypre_obj_setuprowsij hypre_obj%hypre_obj_SetupRowsIJ proc~eulerian_obj_init eulerian_obj_base%eulerian_obj_Init proc~hypre_obj_setuprowsij->proc~eulerian_obj_init proc~eulerian_obj_updateghostcells eulerian_obj_base%eulerian_obj_UpdateGhostCells proc~hypre_obj_setuprowsij->proc~eulerian_obj_updateghostcells proc~eulerian_obj_updateghostcells_x eulerian_obj_base%eulerian_obj_UpdateGhostCells_x proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_x proc~eulerian_obj_updateghostcells_y eulerian_obj_base%eulerian_obj_UpdateGhostCells_y proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_y proc~eulerian_obj_updateghostcells_z eulerian_obj_base%eulerian_obj_UpdateGhostCells_z proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_z cell cell proc~eulerian_obj_updateghostcells_x->cell mpi_irecv mpi_irecv proc~eulerian_obj_updateghostcells_x->mpi_irecv mpi_isend mpi_isend proc~eulerian_obj_updateghostcells_x->mpi_isend mpi_waitall mpi_waitall proc~eulerian_obj_updateghostcells_x->mpi_waitall proc~eulerian_obj_updateghostcells_y->cell proc~eulerian_obj_updateghostcells_y->mpi_irecv proc~eulerian_obj_updateghostcells_y->mpi_isend proc~eulerian_obj_updateghostcells_y->mpi_waitall proc~eulerian_obj_updateghostcells_z->cell proc~eulerian_obj_updateghostcells_z->mpi_irecv proc~eulerian_obj_updateghostcells_z->mpi_isend proc~eulerian_obj_updateghostcells_z->mpi_waitall

Called by

proc~~hypre_obj_setuprowsij~~CalledByGraph proc~hypre_obj_setuprowsij hypre_obj%hypre_obj_SetupRowsIJ proc~hypre_obj_setup hypre_obj%hypre_obj_Setup proc~hypre_obj_setup->proc~hypre_obj_setuprowsij proc~cdifs_obj_preparesolveroperatorsplap cdifs_obj_PrepareSolverOperatorsPLAP proc~cdifs_obj_preparesolveroperatorsplap->proc~hypre_obj_setup proc~cdifs_obj_preparesolveroperatorsvflap cdifs_obj_PrepareSolverOperatorsVFLAP proc~cdifs_obj_preparesolveroperatorsvflap->proc~hypre_obj_setup proc~grans_obj_preparesolveroperators grans_obj_PrepareSolverOperators proc~grans_obj_preparesolveroperators->proc~hypre_obj_setup proc~marker_set_computesolidvolfrac marker_set%marker_set_ComputeSolidVolFrac proc~marker_set_computesolidvolfrac->proc~hypre_obj_setup proc~cdifs_obj_preparesolveroperators cdifs_obj_PrepareSolverOperators proc~cdifs_obj_preparesolveroperators->proc~cdifs_obj_preparesolveroperatorsplap proc~cdifs_obj_preparesolveroperators->proc~cdifs_obj_preparesolveroperatorsvflap proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->proc~grans_obj_preparesolveroperators interface~grans_obj_preparesolver grans_obj%grans_obj_PrepareSolver interface~grans_obj_preparesolver->proc~grans_obj_preparesolver 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

    impure subroutine hypre_obj_SetupRowsIJ(this)
      !> Sets up row indexing used with IJ interface.
      implicit none
      class(hypre_obj), intent(inout) :: this                                  !! Hypre machinery
      ! Work variables
      integer, allocatable :: ncell(:)
      integer, allocatable :: buffi(:)
      integer :: i,j,k
      integer :: nn

      associate(nproc=>this%parallel%nproc, rank=>this%parallel%rank, &
        parallel=>this%parallel, block=>this%block )

        allocate(buffi(nproc))
        allocate(ncell(nproc))

        ncell = 0
        ncell(rank%mine) = (block%hi(3)-block%lo(3)+1) &
                         * (block%hi(2)-block%lo(2)+1) &
                         * (block%hi(1)-block%lo(1)+1)

        call parallel%Sum(ncell,buffi); ncell=buffi

        this%irow_lo = 0
        do i=1,rank%mine - 1
          this%irow_lo = this%irow_lo+ ncell(i)
        end do

        ! Initialize row indicies: wall = -1
        call this%irow%Initialize('irow',block,parallel,0)
        this%irow%cell=-1

        ! Update indices and update ghostcells
        nn = this%irow_lo
        do k=block%lo(3),block%hi(3)
          do j=block%lo(2),block%hi(2)
            do i=block%lo(1),block%hi(1)
              this%irow%cell(i,j,k) = nn
              nn = nn + 1
            end do
          end do
        end do
        this%irow_hi=  nn - 1
        call this%irow%UpdateGhostCells

        deallocate(ncell,buffi)
      end associate

      return
    end subroutine hypre_obj_SetupRowsIJ