C $Header: /u/gcmpack/MITgcm/pkg/cheapaml/cheapaml_copy_edges.F,v 1.1 2013/02/18 21:17:11 jmc Exp $
C $Name: $
#include "CHEAPAML_OPTIONS.h"
CBOP
C !ROUTINE: CHEAPAML_COPY_EDGES
C !INTERFACE:
SUBROUTINE CHEAPAML_COPY_EDGES(
I xIsPeriodic, yIsPeriodic,
I refFld,
U trcFld,
I bi, bj, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | S/R CHEAPAML_COPY_EDGES
C | o If not periodic, copy Edges of reference array "refFld"
C | into current tracer field array "trcFld"
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
C !INPUT/OUTPUT PARAMETERS:
C == Routine Arguments ==
C xIsPeriodic :: periodic in X dir
C yIsPeriodic :: periodic in Y dir
C refFld :: reference tracer field (copy from this field)
C trcFld :: current tracer field to update at the Edges
C bi, bj :: tile indices
C myIter :: current iteration number
C myThid :: my Thread Id number
LOGICAL xIsPeriodic, yIsPeriodic
_RL refFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL trcFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
INTEGER bi, bj, myIter, myThid
C !LOCAL VARIABLES:
C == Local variables ==
INTEGER i, j, iG, jG
CEOP
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
c DO bj=myByLo(myThid),myByHi(myThid)
c DO bi=myBxLo(myThid),myBxHi(myThid)
IF (.NOT.xIsPeriodic) THEN
iG = 1 + myXGlobalLo-1+(bi-1)*sNx
IF (iG.EQ.1) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,1
trcFld(i,j) = refFld(i,j)
ENDDO
ENDDO
ENDIF
iG = sNx + myXGlobalLo-1+(bi-1)*sNx
IF (iG.GE.Nx) THEN
DO j=1-OLy,sNy+OLy
DO i=sNx,sNx+OLx
trcFld(i,j) = refFld(i,j)
ENDDO
ENDDO
ENDIF
ENDIF
IF (.NOT.yIsPeriodic) THEN
jG = 1 + myYGlobalLo-1+(bj-1)*sNy
IF (jG.EQ.1) THEN
DO j=1-OLy,1
DO i=1-OLx,sNx+OLx
trcFld(i,j) = refFld(i,j)
ENDDO
ENDDO
ENDIF
jG = sNy + myYGlobalLo-1+(bj-1)*sNy
IF (jG.GE.Ny) THEN
DO j=sNy,sNy+OLy
DO i=1-OLx,sNx+OLx
trcFld(i,j) = refFld(i,j)
ENDDO
ENDDO
ENDIF
ENDIF
c ENDDO
c ENDDO
RETURN
END