C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/nesting_sannino/nest_child/nest_eeinit.F,v 1.1 2010/11/28 00:50:11 jmc Exp $ C $Name: $ #include "NEST_CHILD_OPTIONS.h" CBOP C !ROUTINE: NEST_EEINIT C !INTERFACE: SUBROUTINE NEST_EEINIT( I mpiMyWid, O color ) C !DESCRIPTION: C *==========================================================* C | SUBROUTINE NEST\_EEINIT C | o Set Nesting Execution Environment C *==========================================================* C | This is the NEST_CHILD version C *==========================================================* C !USES: IMPLICIT NONE C == Global data == #include "SIZE.h" #include "EEPARAMS.h" #include "EESUPPORT.h" #include "NEST_CHILD_PARAMS.h" C !INPUT PARAMETERS: C mpiMyWid :: my World MPI rank INTEGER mpiMyWid C !OUTPUT PARAMETERS: C color :: type of group I belong to INTEGER color #ifdef ALLOW_USE_MPI C !LOCAL VARIABLES: C mpiRC :: Error code reporting variable used with MPI. C msgBuf :: Used to build messages for printing. c CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER mpiRC INTEGER size, npd INTEGER Count_Lev CEOP C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CALL MPI_COMM_SIZE( MPI_COMM_WORLD, size, mpiRC ) npd=size-(NCPUs_PAR_C+NCPUs_CLD_C(1)) MSTR_DRV_C(1) = 0 MSTR_PAR_C(1) = npd MSTR_CLD_C(1) = NCPUs_PAR_C + npd DO Count_Lev = 2, NST_LEV_TOT_C MSTR_DRV_C(Count_Lev) = MSTR_CLD_C(Count_Lev-1) & + NCPUs_CLD_C(Count_Lev-1) MSTR_CLD_C(Count_Lev) = MSTR_DRV_C(Count_Lev) + 1 MSTR_PAR_C(Count_Lev) = MSTR_CLD_C(Count_Lev-1) ENDDO IF (NST_LEV_C.EQ.1) THEN IF (mpiMyWId.GE.MSTR_PAR_C(1).AND.mpiMyWId.LT.MSTR_CLD_C(1)) & color = 1 IF (mpiMyWId.GE.MSTR_CLD_C(1)) & color = 2 ENDIF IF (NST_LEV_C.GT.1) THEN IF (mpiMyWId.GE.MSTR_CLD_C(NST_LEV_C).AND. & mpiMyWId.LT.MSTR_CLD_C(NST_LEV_C)+NCPUs_CLD_C(NST_LEV_C)) & color = (NST_LEV_C + 1) ENDIF C-- split per group of same color ? CALL MPI_COMM_SPLIT ( MPI_COMM_WORLD, color, 0, & MPI_COMM_MODEL, mpiRC ) IF ( mpiRC .NE. MPI_SUCCESS ) THEN write(*,*) 'error SPLIT' ENDIF #else /* ALLOW_USE_MPI */ STOP 'ABNORMAL END: S/R NEST_EEINIT: Needs to Use MPI' #endif /* ALLOW_USE_MPI */ C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| RETURN END