C $Header: /u/gcmpack/MITgcm/pkg/exch2/w2_eeboot.F,v 1.15 2012/09/04 00:44:30 jmc Exp $ C $Name: $ #include "CPP_EEOPTIONS.h" CBOP C !ROUTINE: W2_EEBOOT C !INTERFACE: SUBROUTINE W2_EEBOOT C !DESCRIPTION: C *==========================================================* C | SUBROUTINE W2_EEBOOT C | o Setup execution "environment" for WRAPPER2 C *==========================================================* C | WRAPPER2 provides complex topology support. In this routine C | we setup the base topology for the default halo operations. C *==========================================================* C !USES: IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "W2_EXCH2_SIZE.h" #include "W2_EXCH2_TOPOLOGY.h" #include "W2_EXCH2_PARAMS.h" CEOP C !FUNCTIONS: INTEGER ILNBLNK EXTERNAL ILNBLNK C !LOCAL VARIABLES: CHARACTER*(MAX_LEN_MBUF) msgBuf CHARACTER*(MAX_LEN_FNAM) fName INTEGER stdUnit, iLen INTEGER myThid INTEGER ii, I, J C Set dummy myThid value (we are not multi-threaded here) myThid = 1 C Initialise to zero EXCH2_TOPOLOGY common blocks exch2_nTiles = 0 DO I = 1,W2_maxNbTiles exch2_tNx(I) = 0 exch2_tNy(I) = 0 exch2_tBasex(I) = 0 exch2_tBasey(I) = 0 exch2_txGlobalo(I) = 0 exch2_tyGlobalo(I) = 0 exch2_isWedge(I) = 0 exch2_isNedge(I) = 0 exch2_isEedge(I) = 0 exch2_isSedge(I) = 0 exch2_myFace(I) = 0 exch2_mydNx(I) = 0 exch2_mydNy(I) = 0 exch2_nNeighbours(I) = 0 DO J = 1,W2_maxNeighbours exch2_neighbourId(J,I) = 0 exch2_opposingSend(J,I) = 0 DO ii = 1,4 exch2_pij(ii,J,I) = 0 ENDDO exch2_oi(J,I) = 0 exch2_oj(J,I) = 0 exch2_iLo(J,I) = 0 exch2_iHi(J,I) = 0 exch2_jLo(J,I) = 0 exch2_jHi(J,I) = 0 ENDDO ENDDO W2_oUnit = standardMessageUnit C Set W2-EXCH2 parameters CALL W2_READPARMS( myThid ) stdUnit = standardMessageUnit WRITE(msgBuf,'(A)') '===== Start setting W2 TOPOLOGY:' CALL PRINT_MESSAGE( msgBuf, stdUnit, SQUEEZE_RIGHT, myThid ) C Open message output-file (if needed) IF ( W2_printMsg .LT. 0 ) THEN WRITE(fName,'(A,I4.4,A)') & 'w2_tile_topology.',myProcId,'.log' iLen = ILNBLNK(fName) CALL MDSFINDUNIT( W2_oUnit, myThid ) OPEN( W2_oUnit, file=fName(1:iLen), & status='unknown', form='formatted') WRITE(msgBuf,'(2A)') ' write to log-file: ', fName(1:iLen) CALL PRINT_MESSAGE( msgBuf, stdUnit, SQUEEZE_RIGHT, myThid ) ENDIF C Define topology for every tile CALL W2_E2SETUP( myThid ) C-- Decide which tiles this process handles; C fill also W2_procTileList for Single-CPU-IO and check also tile-size; C print tiles connection for this process and set myCommonFlag : CALL W2_MAP_PROCS( myThid ) C Print out the topology communication schedule IF ( W2_printMsg .NE. 0 ) THEN CALL W2_PRINT_COMM_SEQUENCE( myThid ) ENDIF C Close message output-file (if needed) IF ( W2_oUnit.NE.standardMessageUnit ) THEN WRITE(msgBuf,'(A)') '=== End TOPOLOGY report ===' CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_BOTH, myThid ) CLOSE( W2_oUnit ) ENDIF WRITE(msgBuf,'(A)') '===== setting W2 TOPOLOGY: Done' CALL PRINT_MESSAGE( msgBuf, stdUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(A)') ' ' CALL PRINT_MESSAGE( msgBuf, stdUnit, SQUEEZE_RIGHT, myThid ) RETURN END