Sets up row indexing used with IJ interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(hypre_obj), | intent(inout) | :: | this |
Hypre machinery |
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