C $Header: /u/gcmpack/MITgcm/model/src/update_etah.F,v 1.13 2011/12/08 22:35:43 jmc Exp $ C $Name: $ #include "PACKAGES_CONFIG.h" #include "CPP_OPTIONS.h" CBOP C !ROUTINE: UPDATE_ETAH C !INTERFACE: SUBROUTINE UPDATE_ETAH( myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE UPDATE_ETAH C | o Update etaH after mom-correction-step/integr_continuity C | (required with NLFS to derive surface layer thickness) C *==========================================================* C \ev C !USES: IMPLICIT NONE C == Global variables #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "DYNVARS.h" #include "GRID.h" #include "SURFACE.h" C !INPUT/OUTPUT PARAMETERS: C == Routine arguments == C myTime :: Current time in simulation C myIter :: Current iteration number C myThid :: my Thread Id number _RL myTime INTEGER myIter INTEGER myThid C !LOCAL VARIABLES: #ifdef EXACT_CONSERV C Local variables in common block C Local variables C i,j,bi,bj :: Loop counters INTEGER i,j,bi,bj CEOP C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) C-- before updating etaH, save current etaH field in etaHnm1 DO j=1-Oly,sNy+Oly DO i=1-Olx,sNx+Olx etaHnm1(i,j,bi,bj) = etaH(i,j,bi,bj) ENDDO ENDDO C-- Update etaH at the end of the time step : C Incorporate the Explicit part of -Divergence(Barotropic_Flow) IF (implicDiv2Dflow.EQ. 1. _d 0) THEN DO j=1-Oly,sNy+Oly DO i=1-Olx,sNx+Olx etaH(i,j,bi,bj) = etaN(i,j,bi,bj) ENDDO ENDDO ELSE DO j=1,sNy DO i=1,sNx etaH(i,j,bi,bj) = etaN(i,j,bi,bj) & + (1. - implicDiv2Dflow)*dEtaHdt(i,j,bi,bj) & *deltaTfreesurf ENDDO ENDDO ENDIF #ifdef ALLOW_OBCS C-- Apply OBC to etaH (NonLin-FreeSurf): needed since viscous terms C depend on hFacZ which is not only function of boundary hFac values. IF ( useOBCS.AND.nonlinFreeSurf.GT.0 ) & CALL OBCS_APPLY_ETA( bi, bj, etaH, myThid ) #endif /* ALLOW_OBCS */ C- end bi,bj loop. ENDDO ENDDO C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| IF ( implicDiv2Dflow .NE. 1. _d 0 .OR. & ( useOBCS.AND.nonlinFreeSurf.GT.0 ) ) & CALL EXCH_XY_RL( etaH, myThid ) #endif /* EXACT_CONSERV */ RETURN END