C $Header: /u/gcmpack/MITgcm/pkg/atm_compon_interf/cpl_register.F,v 1.6 2015/12/31 21:37:34 jmc Exp $ C $Name: $ #include "ATM_CPL_OPTIONS.h" CBOP 0 C !ROUTINE: CPL_REGISTER C !INTERFACE: SUBROUTINE CPL_REGISTER C !DESCRIPTION: C *==========================================================* C | SUBROUTINE CPL_REGISTER C | o Routine controlling registration with MIT coupler. C | - Atmospheric version - C *==========================================================* C | This version talks to the MIT Coupler. It uses the MIT C | Coupler "checkpoint1" library calls. C *==========================================================* C !USES: IMPLICIT NONE C == Global variables == #include "SIZE.h" #include "EEPARAMS.h" #ifdef ALLOW_EXCH2 # include "W2_EXCH2_SIZE.h" # include "W2_EXCH2_TOPOLOGY.h" # include "W2_EXCH2_PARAMS.h" #endif /* ALLOW_EXCH2 */ C !INPUT/OUTPUT PARAMETERS: C == Routine arguments == C myThid :: Thread number for this instance of the routine c INTEGER myThid CEOP #ifdef COMPONENT_MODULE C !LOCAL VARIABLES: C == Local variables == C bi, bj :: Tile indices C j :: Loop counter C iG0, jG0 :: Base coordinates of a tile on the global grid. C iReg :: Array for passing attributes to the coupler C x,ySize :: expected size of the coupler 2-D maps INTEGER iG0, jG0 INTEGER bi, bj INTEGER j, nTiles INTEGER iReg(6,nSx*nSy) c INTEGER xSize, ySize #ifdef ALLOW_EXCH2 INTEGER tN LOGICAL useExch2LayOut #endif /* ALLOW_EXCH2 */ C-- Set dimensions of coupler 2-D maps: c xSize = Nx c ySize = Ny #ifdef ALLOW_EXCH2 C-- Note: current coupler mapping relies only on i0,j0,nx,ny ; this prevent to C map tiles to Exch-2 global map when faces do not fit in global-IO-array C (see, e.g., gather/scatter_2d routines in eesupp/src, case where C iGjLoc <> 0 or jGjLoc <> 1 ). useExch2LayOut = .FALSE. IF ( W2_useE2ioLayOut ) THEN useExch2LayOut = .TRUE. DO tN=1,exch2_nTiles IF ( exch2_mydNx(tN) .GT. exch2_global_Nx ) THEN useExch2LayOut = .FALSE. C- face x-size larger than glob-size : fold it c iGjLoc = 0 c jGjLoc = exch2_mydNx(tN) / xSize ELSEIF ( exch2_tNy(tN) .GT. exch2_global_Ny ) THEN useExch2LayOut = .FALSE. C- tile y-size larger than glob-size : make a long line c iGjLoc = exch2_mydNx(tN) c jGjLoc = 0 ELSE C- default (face fit into global-IO-array) c iGjLoc = 0 c jGjLoc = 1 ENDIF ENDDO ENDIF c IF ( useExch2LayOut ) THEN c xSize = exch2_global_Nx c ySize = exch2_global_Ny c ENDIF C-- Note: should check that xSize,ySize match with coupler Nx_atm,Ny_atm #endif /* ALLOW_EXCH2 */ C-- Register with the MIT coupler j = 0 DO bj=1,nSy DO bi=1,nSx j = j+1 jG0 = myYGlobalLo+(bj-1)*sNy iG0 = myXGlobalLo+(bi-1)*sNx #ifdef ALLOW_EXCH2 IF ( useExch2LayOut ) THEN tN = W2_myTileList(bi,bj) iG0 = exch2_txGlobalo(tN) jG0 = exch2_tyGlobalo(tN) ENDIF #endif /* ALLOW_EXCH2 */ iReg(1,j) = bi iReg(2,j) = bj iReg(3,j) = sNx iReg(4,j) = sNy iReg(5,j) = iG0 iReg(6,j) = jG0 ENDDO ENDDO nTiles = nSx*nSy CALL MITCOMPONENT_TILE_REGISTER( nTiles, iReg ) #endif /* COMPONENT_MODULE */ RETURN END