quantum-espresso/flib/indxl2g.f

56 lines
1.6 KiB
Fortran

INTEGER FUNCTION INDXL2G( INDXLOC, NB, IPROC, ISRCPROC, NPROCS )
!
! -- ScaLAPACK tools routine (version 1.5) --
! University of Tennessee, Knoxville, Oak Ridge National Laboratory,
! and University of California, Berkeley.
! May 1, 1997
!
! .. Scalar Arguments ..
INTEGER INDXLOC, IPROC, ISRCPROC, NB, NPROCS
! ..
!
! Purpose
! =======
!
! INDXL2G computes the global index of a distributed matrix entry
! pointed to by the local index INDXLOC of the process indicated by
! IPROC.
!
! Arguments
! =========
!
! INDXLOC (global input) INTEGER
! The local index of the distributed matrix entry.
!
! NB (global input) INTEGER
! Block size, size of the blocks the distributed matrix is
! split into.
!
! IPROC (local input) INTEGER
! The coordinate of the process whose local array row or
! column is to be determined.
!
! ISRCPROC (global input) INTEGER
! The coordinate of the process that possesses the first
! row/column of the distributed matrix.
!
! NPROCS (global input) INTEGER
! The total number processes over which the distributed
! matrix is distributed.
!
! =====================================================================
!
! .. Intrinsic Functions ..
INTRINSIC MOD
! ..
! .. Executable Statements ..
!
INDXL2G = NPROCS*NB*((INDXLOC-1)/NB) + MOD(INDXLOC-1,NB) +
& MOD(NPROCS+IPROC-ISRCPROC, NPROCS)*NB + 1
!
RETURN
!
! End of INDXL2G
!
END