C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_apply_eta.F,v 1.9 2012/11/15 15:55:42 dimitri Exp $
C $Name:  $

#include "OBCS_OPTIONS.h"

CBOP
C     !ROUTINE: OBCS_APPLY_ETA
C     !INTERFACE:
      SUBROUTINE OBCS_APPLY_ETA( bi, bj,
     U                           etaFld,
     I                           myThid )

C     !DESCRIPTION:
C     *==========================================================*
C     | S/R OBCS_APPLY_ETA
C     |   Apply surface position anomaly (Eta) OB values
C     |   to corresponding field array
C     *==========================================================*

C     !USES:
      IMPLICIT NONE
C     == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "SURFACE.h"
#include "OBCS_PARAMS.h"
#include "OBCS_GRID.h"
#include "OBCS_FIELDS.h"

C     !INPUT/OUTPUT PARAMETERS:
C     == Routine Arguments ==
C    bi, bj   :: indices of current tile
C    etaFld   :: surface r-position anomaly field
C    myThid   :: my Thread Id number
      INTEGER bi, bj
      _RL etaFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
      INTEGER myThid
CEOP

#ifdef NONLIN_FRSURF
C     !LOCAL VARIABLES:
C     == Local variables ==
      INTEGER i, j
      INTEGER Iobc, Jobc

c     IF ( nonlinFreeSurf.GT.0 ) THEN

C     Set model variable to OB values on North/South Boundaries
        IF ( tileHasOBN(bi,bj) ) THEN
C Northern boundary
         DO i=1-OLx,sNx+OLx
          Jobc = OB_Jn(i,bi,bj)
          IF ( Jobc.NE.OB_indexNone ) THEN
            IF ( kSurfS(i,Jobc,bi,bj).LE.Nr )
     &        etaFld(i,Jobc,bi,bj) = OBNeta(i,bi,bj)
          ENDIF
         ENDDO
        ENDIF
        IF ( tileHasOBS(bi,bj) ) THEN
C Southern boundary
         DO i=1-OLx,sNx+OLx
          Jobc = OB_Js(i,bi,bj)
          IF ( Jobc.NE.OB_indexNone ) THEN
            IF ( kSurfS(i,Jobc+1,bi,bj).LE.Nr )
     &        etaFld(i,Jobc,bi,bj) = OBSeta(i,bi,bj)
          ENDIF
         ENDDO
        ENDIF

C     Set model variables to OB values on East/West Boundaries
        IF ( tileHasOBE(bi,bj) ) THEN
C Eastern boundary
         DO j=1-OLy,sNy+OLy
          Iobc = OB_Ie(j,bi,bj)
          IF ( Iobc.NE.OB_indexNone ) THEN
            IF ( kSurfW(Iobc,j,bi,bj).LE.Nr )
     &        etaFld(Iobc,j,bi,bj) = OBEeta(j,bi,bj)
          ENDIF
         ENDDO
        ENDIF
        IF ( tileHasOBW(bi,bj) ) THEN
C Western boundary
         DO j=1-OLy,sNy+OLy
          Iobc = OB_Iw(j,bi,bj)
          IF ( Iobc.NE.OB_indexNone ) THEN
            IF ( kSurfW(Iobc+1,j,bi,bj).LE.Nr )
     &        etaFld(Iobc,j,bi,bj) = OBWeta(j,bi,bj)
          ENDIF
         ENDDO
        ENDIF

c     ENDIF
#endif /* NONLIN_FRSURF */

      RETURN
      END