!======================================================================= ! RCS Header: ! Revision [$Revision: 1.2.2.1 $] Named [$Name: release#2_9_b5 $] ! Last checkin [$Date: 2001/12/06 10:14:18 $] ! Author [$Author: frpb $] !======================================================================= ! *****************************COPYRIGHT******************************* ! (c) CROWN COPYRIGHT 2001, Met Office, All Rights Reserved. ! Please refer to Copyright file in top level GCOM directory ! for further details ! *****************************COPYRIGHT******************************* #include "gcg_prolog.h" INTEGER FUNCTION GCG_ME (GID) ! ****************************************************************** ! * Purpose: ! * ! * Return the rank of my node in this group, in the ! * range 0...groupsize(GID)-1 or -1 of invalid GID / not a member. ! * ! * Input: ! * GID - processor group ID ! * ! * Output: ! * ! * NOTES: ! * ! ****************************************************************** IMPLICIT NONE INTEGER GID #if defined(SHM_SRC) #include "gcg__grstore_common.h" INTEGER IGID, ILOC, ME, GC_ME #endif #if defined(MPI_SRC) INCLUDE 'mpif.h' INTEGER ISTAT, IGID, GRANK #endif #if defined(SHM_SRC) IF (GID .EQ. GCG__ALLGROUP) THEN GCG_ME = GC_ME() RETURN ELSE IF (GID .GT. GCG__ALLGROUP) THEN DO IGID = 1, MAX_GROUP IF (GR_ID(IGID) .EQ. GID) THEN ME = GC_ME() DO ILOC = GR_LOC(IGID), GR_LOC(IGID)+GR_SZ(IGID)-1 IF (ME .EQ. GR_MEM(ILOC)) THEN GCG_ME = ILOC - GR_LOC(IGID) RETURN ENDIF ENDDO ENDIF ENDDO ENDIF GCG_ME = -1 #endif #if defined(MPI_SRC) IF (GID .EQ. GCG__ALLGROUP) THEN IGID = MPI_COMM_WORLD ELSE IGID = GID ENDIF CALL MPI_COMM_RANK(IGID, GRANK, ISTAT) GCG_ME = GRANK #endif #if defined(SERIAL_SRC) GCG_ME = 0 #endif RETURN END