!======================================================================= ! RCS Header: ! Revision [$Revision: 1.11.1.3 $] Named [$Name: release#2_9_b5 $] ! Last checkin [$Date: 2002/08/16 14:42:20 $] ! 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 "gc_prolog.h" SUBROUTINE GC_INIT (PATH, ME, NPROC) ! ****************************************************************** ! * Purpose: ! * ! * Initialize all (machine dependent) variables used in the ! * communication. ! * ! * Input: ! * NPROC - OBSOLETE [ number of nodes (PVM_SRC only) ] ! * PATH - OBSOLETE [ path name of executable to be ] ! * [ spawned (PVM_SRC only) used only ] ! * [ if first character is non-blank. ] ! * ! * Output: ! * NPROC - number of nodes ! * ME - my node ID, 0..NPROC-1 ! * ! * NOTES: ! * Initialize BCAST_SYNC_WRK, REDUCESYNC (SHMEM only). ! * ! ****************************************************************** IMPLICIT NONE CHARACTER*(*) PATH INTEGER ME, NPROC #include "gc__init_common.h" #if defined(SHM_SRC) INTEGER SHMEM_MY_PE, SHMEM_N_PES REAL TSECND #include "gc__timeout_common.h" #endif #if defined(MPI_SRC) INCLUDE 'mpif.h' INTEGER INFO LOGICAL MPIFLAG #if defined(BUFFERED_MPI) INTEGER BSEND_BUFFER(MPI_BSEND_BUFFER_SIZE) SAVE BSEND_BUFFER #endif INTEGER IERR #include "gc__mpi_common.h" #endif LOGICAL INITED INTEGER I DATA INITED/.FALSE./ SAVE INITED IF (INITED) THEN RETURN ELSE CALL GC__INIT_INTERNALS(INITED) ENDIF #if defined(SHM_SRC) ME = SHMEM_MY_PE() NPROC = SHMEM_N_PES() CALL SHMEM_SET_CACHE_INV() !--set the default SHM_NAM timeout as ~10 seconds NAM_MAX_SECONDS=TSECND() NAM_MAX_SECONDS=300 CALL BARRIER #endif #if defined(MPI_SRC) CALL MPI_INIT(INFO) CALL MPI_COMM_RANK(MPI_COMM_WORLD, ME, INFO) CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPROC, INFO) CALL MPI_ATTR_GET(MPI_COMM_WORLD,MPI_TAG_UB,GC__MPI_MAXTAG, $ MPIFLAG,INFO) #if defined(BUFFERED_MPI) #if !defined(SGI) CALL MPI_BUFFER_ATTACH(BSEND_BUFFER, $ MPI_BSEND_BUFFER_SIZE*GC__ISIZE, IERR) #else GC__MPI_MAXTAG=32767 #endif #endif #endif #if defined(SERIAL_SRC) ME = 0 NPROC = 1 #else IF (NPROC .GT. MAX_PROC) CALL GC__ERRLIM(0, 'INIT', 'PROC', $ MAX_PROC, NPROC) #endif GC__NPROC = NPROC GC__ME = ME GC__INITED = .TRUE. IF (GC__ME .EQ. 0) CALL GC__STAMP() RETURN END