C $Header: /u/gcmpack/MITgcm/model/src/add_walls2masks.F,v 1.1 2014/02/08 17:20:06 jmc Exp $ C $Name: $ c#include "PACKAGES_CONFIG.h" #include "CPP_OPTIONS.h" CBOP C !ROUTINE: ADD_WALLS2MASKS C !INTERFACE: SUBROUTINE ADD_WALLS2MASKS( myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE ADD_WALLS2MASKS C | o Apply additional closing of Western and Southern edges C | grid-cell open-water factor C *==========================================================* C | Reset to zero hFacW and/or hFacS grid factors at some C | specific locations. In particular, allow to prevent fluid C | transport (at any detph) between 2 adjacent vertical C | column by adding a "thin wall" between the 2. C *==========================================================* C \ev C !USES: IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" c#include "SURFACE.h" C !INPUT/OUTPUT PARAMETERS: C == Routine arguments == C myThid :: my Thread Id number INTEGER myThid C !LOCAL VARIABLES: C == Local variables == C bi,bj :: tile indices C i,j,k :: Loop counters C tmpfld :: Temporary array used to load file in _RS tmpFldW(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RS tmpFldS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) INTEGER bi, bj INTEGER i, j, k CEOP C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| IF ( addWwallFile.NE.' ' .OR. addSwallFile.NE.' ' ) THEN C-- Load files "addWwallFile" and/or "addSwallFile": DO bj=myByLo(myThid), myByHi(myThid) DO bi=myBxLo(myThid), myBxHi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx tmpFldW(i,j,bi,bj) = zeroRS tmpFldS(i,j,bi,bj) = zeroRS ENDDO ENDDO ENDDO ENDDO IF ( addWwallFile.NE.' ' ) THEN CALL READ_FLD_XY_RS( addWwallFile, ' ', tmpFldW, 0, myThid ) ENDIF IF ( addSwallFile.NE.' ' ) THEN CALL READ_FLD_XY_RS( addSwallFile, ' ', tmpFldS, 0, myThid ) ENDIF CALL EXCH_UV_XY_RS( tmpFldW, tmpFldS, .FALSE., myThid ) ENDIF IF ( selectSigmaCoord.EQ.0 ) THEN C--- r-coordinate with partial-cell or full cell mask C-- The following block allows thin walls representation of non-periodic C boundaries such as happen on the lat-lon grid at the N/S poles. C We should really supply a flag for doing this. c IF ( closedBoundaryAtPoles ) THEN DO bj=myByLo(myThid), myByHi(myThid) DO bi=myBxLo(myThid), myBxHi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx IF ( dyG(i,j,bi,bj).EQ.zeroRS ) THEN DO k=1,Nr hFacW(i,j,k,bi,bj) = zeroRS ENDDO rLowW (i,j,bi,bj) = rF(1) rSurfW(i,j,bi,bj) = rF(1) ENDIF IF ( dxG(i,j,bi,bj).EQ.zeroRS ) THEN DO k=1,Nr hFacS(i,j,k,bi,bj) = zeroRS ENDDO rLowS (i,j,bi,bj) = rF(1) rSurfS(i,j,bi,bj) = rF(1) ENDIF ENDDO ENDDO ENDDO ENDDO c ENDIF C-- Addtional closing of Western and Southern grid-cell edges C as provided in files: "addWwallFile" or "addSwallFile" IF ( addWwallFile.NE.' ' .OR. addSwallFile.NE.' ' ) THEN DO bj=myByLo(myThid), myByHi(myThid) DO bi=myBxLo(myThid), myBxHi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx IF ( tmpFldW(i,j,bi,bj).EQ.oneRS ) THEN DO k=1,Nr hFacW(i,j,k,bi,bj) = zeroRS ENDDO rLowW (i,j,bi,bj) = rF(1) rSurfW(i,j,bi,bj) = rF(1) ENDIF IF ( tmpFldS(i,j,bi,bj).EQ.oneRS ) THEN DO k=1,Nr hFacS(i,j,k,bi,bj) = zeroRS ENDDO rLowS (i,j,bi,bj) = rF(1) rSurfS(i,j,bi,bj) = rF(1) ENDIF ENDDO ENDDO ENDDO ENDDO ENDIF ELSE #ifndef DISABLE_SIGMA_CODE C--- Sigma and Hybrid-Sigma set-up: #endif /* DISABLE_SIGMA_CODE */ ENDIF RETURN END