C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_get_ocean.F,v 1.3 2013/05/02 20:03:12 jmc Exp $ C $Name: $ #include "THSICE_OPTIONS.h" #ifdef ALLOW_SEAICE # include "SEAICE_OPTIONS.h" #endif /* ALLOW_SEAICE */ CBOP C !ROUTINE: THSICE_GET_OCEAN C !INTERFACE: SUBROUTINE THSICE_GET_OCEAN( I bi, bj, myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | S/R THSICE_GET_OCEAN C | o Get mixed layer properties from ocean main C | variables (surface level) and store them C | into this package local mixed-layer arrays C *==========================================================* C !USES: IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "SURFACE.h" #include "DYNVARS.h" c#include "THSICE_PARAMS.h" #include "THSICE_SIZE.h" #include "THSICE_VARS.h" #ifdef ALLOW_SEAICE # include "SEAICE_SIZE.h" # include "SEAICE.h" #endif /* ALLOW_SEAICE */ C !INPUT/OUTPUT PARAMETERS: C === Routine arguments === C bi, bj :: Tile indices C myTime :: Current time in simulation (s) C myIter :: Current iteration number C myThid :: My Thread Id. number INTEGER bi, bj _RL myTime INTEGER myIter INTEGER myThid CEOP #ifdef ALLOW_THSICE C !LOCAL VARIABLES: C === Local variables === INTEGER i,j INTEGER ks #ifdef ALLOW_SEAICE _RL uRel1, uRel2, vRel1, vRel2 #endif /* ALLOW_SEAICE */ C-- Mixed layer thickness: take the 1rst layer ks = 1 #ifdef NONLIN_FRSURF IF ( staggerTimeStep .AND. nonlinFreeSurf.GT.0 ) THEN IF ( select_rStar.GT.0 ) THEN DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx hOceMxL(i,j,bi,bj) = drF(ks)*h0FacC(i,j,ks,bi,bj) & *rStarFacC(i,j,bi,bj) ENDDO ENDDO ELSE DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx IF ( kSurfC(i,j,bi,bj).EQ.1 ) THEN hOceMxL(i,j,bi,bj) = drF(ks)*hFac_surfC(i,j,bi,bj) ELSE hOceMxL(i,j,bi,bj) = drF(ks)*hFacC(i,j,ks,bi,bj) ENDIF ENDDO ENDDO ENDIF ELSE #else /* ndef NONLIN_FRSURF */ IF (.TRUE.) THEN #endif /* NONLIN_FRSURF */ DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx hOceMxL(i,j,bi,bj) = drF(ks)*hFacC(i,j,ks,bi,bj) ENDDO ENDDO ENDIF DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx tOceMxL(i,j,bi,bj) = theta(i,j,ks,bi,bj) sOceMxL(i,j,bi,bj) = salt (i,j,ks,bi,bj) v2ocMxL(i,j,bi,bj) = 0. _d 0 icFrwAtm(i,j,bi,bj) = 0. _d 0 icFlxAtm(i,j,bi,bj) = 0. _d 0 icFlxSW (i,j,bi,bj) = 0. _d 0 siceAlb (i,j,bi,bj) = 0. _d 0 ENDDO ENDDO IF ( .NOT.useSEAICE ) THEN DO j=1-OLy,sNy+OLy-1 DO i=1-OLx,sNx+OLx-1 v2ocMxL(i,j,bi,bj) = & ( uVel(i,j,ks,bi,bj) * uVel(i,j,ks,bi,bj) & + uVel(i+1,j,ks,bi,bj)*uVel(i+1,j,ks,bi,bj) & + vVel(i,j+1,ks,bi,bj)*vVel(i,j+1,ks,bi,bj) & + vVel(i,j,ks,bi,bj) * vVel(i,j,ks,bi,bj) & )*0.5 _d 0 ENDDO ENDDO #ifdef ALLOW_SEAICE ELSE DO j=1-OLy,sNy+OLy-1 DO i=1-OLx,sNx+OLx-1 uRel1 = uVel( i, j,ks,bi,bj)-uIce( i, j,bi,bj) uRel2 = uVel(i+1,j,ks,bi,bj)-uIce(i+1,j,bi,bj) vRel1 = vVel(i, j, ks,bi,bj)-vIce(i, j, bi,bj) vRel2 = vVel(i,j+1,ks,bi,bj)-vIce(i,j+1,bi,bj) v2ocMxL(i,j,bi,bj) = & ( ( uRel1*uRel1 + uRel2*uRel2 ) & + ( vRel1*vRel1 + vRel2*vRel2 ) & )*0.5 _d 0 ENDDO ENDDO #endif /* ALLOW_SEAICE */ ENDIF C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| #endif /*ALLOW_THSICE*/ RETURN END