Back to home page

MITgcm

 
 

    


File indexing completed on 2023-08-04 05:10:48 UTC

view on githubraw file Latest commit 45315406 on 2023-08-03 16:50:12 UTC
4b22dd6e44 Mart*0001 #include "SEAICE_OPTIONS.h"
                0002 #ifdef ALLOW_OBCS
                0003 # include "OBCS_OPTIONS.h"
                0004 #endif
                0005 
                0006 CBOP
                0007 C     !ROUTINE: SEAICE_OCEANDRAG_COEFFS
                0008 C     !INTERFACE:
                0009       SUBROUTINE SEAICE_OCEANDRAG_COEFFS(
ec0d7df165 Mart*0010      I     uIceLoc, vIceLoc, HEFFMLoc,
4b22dd6e44 Mart*0011      O     CwatC,
                0012      I     iStep, myTime, myIter, myThid )
                0013 
                0014 C     !DESCRIPTION: \bv
                0015 C     *==========================================================*
                0016 C     | SUBROUTINE SEAICE_OCEANDRAG_COEFFS
                0017 C     | o Compute the drag coefficients for ice-ocean drag,
                0018 C     |   so that we can use the same code for different solvers
                0019 C     *==========================================================*
                0020 C     | written by Martin Losch, Oct 2012
                0021 C     *==========================================================*
                0022 C     \ev
                0023 
                0024 C     !USES:
                0025       IMPLICIT NONE
                0026 
                0027 C     === Global variables ===
                0028 #include "SIZE.h"
                0029 #include "EEPARAMS.h"
                0030 #include "PARAMS.h"
                0031 #include "GRID.h"
                0032 #include "DYNVARS.h"
                0033 #include "SEAICE_SIZE.h"
                0034 #include "SEAICE_PARAMS.h"
                0035 
                0036 C     !INPUT/OUTPUT PARAMETERS:
                0037 C     === Routine arguments ===
                0038 C     myTime :: Simulation time
                0039 C     myIter :: Simulation timestep number
                0040 C     myThid :: my Thread Id. number
5867b94c2f Mart*0041 C     iStep  :: current sub-time step iterate
4b22dd6e44 Mart*0042       _RL     myTime
                0043       INTEGER myIter
                0044       INTEGER myThid
                0045       INTEGER iStep
                0046 C     u/vIceLoc :: local copies of the current ice velocity
                0047       _RL uIceLoc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0048       _RL vIceLoc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
ec0d7df165 Mart*0049 C     HEFFMLoc  :: local copy of land-sea masks
                0050       _RL HEFFMLoc  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
4b22dd6e44 Mart*0051 C     CwatC     :: drag coefficients
                0052       _RL CwatC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0053 
45315406aa Mart*0054 #ifdef SEAICE_CGRID
4b22dd6e44 Mart*0055 C     === local variables ===
                0056 C     i,j,bi,bj,ksrf :: loop indices
                0057       INTEGER i,j,bi,bj
                0058       INTEGER kSrf
5867b94c2f Mart*0059       _RL     tempVar, tempMin
b8665dacca Mart*0060       _RL     dragCoeff
4b22dd6e44 Mart*0061 CEOP
                0062 
0320e25227 Mart*0063       IF ( usingPCoords ) THEN
                0064        kSrf = Nr
                0065       ELSE
                0066        kSrf = 1
                0067       ENDIF
5867b94c2f Mart*0068       tempMin = SEAICEdWatMin*SEAICEdWatMin
4b22dd6e44 Mart*0069 
                0070       DO bj=myByLo(myThid),myByHi(myThid)
                0071        DO bi=myBxLo(myThid),myBxHi(myThid)
5867b94c2f Mart*0072         DO j=1-OLy,sNy+OLy-1
439f623ce9 Mart*0073          DO i=1-OLx,sNx+OLy-1
b8665dacca Mart*0074 C     non-linear water drag coefficients CwatC (DWATN)
4b22dd6e44 Mart*0075 #ifdef OBCS_UVICE_OLD
5867b94c2f Mart*0076           tempVar = 0.25 _d 0*(
4b22dd6e44 Mart*0077      &            ( ( uIceLoc(i  ,j,bi,bj)-uVel(i  ,j,kSrf,bi,bj) )
                0078      &             +( uIceLoc(i+1,j,bi,bj)-uVel(i+1,j,kSrf,bi,bj) )
                0079      &            )**2
                0080      &          + ( ( vIceLoc(i, j ,bi,bj)-vVel(i, j ,kSrf,bi,bj) )
                0081      &             +( vIceLoc(i,j+1,bi,bj)-vVel(i,j+1,kSrf,bi,bj) )
                0082      &            )**2 )
                0083 #else /* OBCS_UVICE_OLD */
5867b94c2f Mart*0084           tempVar = 0.25 _d 0*(
4b22dd6e44 Mart*0085      &            ( ( uIceLoc(i  ,j,bi,bj)-uVel(i  ,j,kSrf,bi,bj) )
                0086      &             *maskInW( i ,j,bi,bj)
5867b94c2f Mart*0087      &             +( uIceLoc(i+1,j,bi,bj)-uVel(i+1,j,kSrf,bi,bj) )
4b22dd6e44 Mart*0088      &             *maskInW(i+1,j,bi,bj) )**2
                0089      &          + ( ( vIceLoc(i,j  ,bi,bj)-vVel(i,j  ,kSrf,bi,bj) )
                0090      &             *maskInS(i, j ,bi,bj)
                0091      &             +( vIceLoc(i,j+1,bi,bj)-vVel(i,j+1,kSrf,bi,bj) )
                0092      &             *maskInS(i,j+1,bi,bj) )**2 )
                0093 #endif /* OBCS_UVICE_OLD */
5867b94c2f Mart*0094           IF ( YC(i,j,bi,bj) .LT. ZERO ) THEN
b8665dacca Mart*0095            dragCoeff = SEAICE_waterDrag_south*rhoConst
4b22dd6e44 Mart*0096           ELSE
b8665dacca Mart*0097            dragCoeff = SEAICE_waterDrag      *rhoConst
4b22dd6e44 Mart*0098           ENDIF
5867b94c2f Mart*0099           CwatC(i,j,bi,bj) = SEAICEdWatMin
                0100 C     This is the AD-proof version of
                0101 C         IF ( dragCoeff * SQRT(tempVar) .GT. SEAICEdWatMin )
b8665dacca Mart*0102 C     which was previously implemented as
5867b94c2f Mart*0103 C         IF ( tempVar .GT. (SEAICEdWatMin/dragCoeff)**2 )
b8665dacca Mart*0104 C     I like this better:
5867b94c2f Mart*0105           IF ( dragCoeff*dragCoeff * tempVar .GT. tempMin )
                0106      &         CwatC(i,j,bi,bj) = dragCoeff*SQRT(tempVar)
                0107           CwatC(i,j,bi,bj) = CwatC(i,j,bi,bj) * HEFFMLoc(i,j,bi,bj)
4b22dd6e44 Mart*0108          ENDDO
                0109         ENDDO
                0110        ENDDO
                0111       ENDDO
                0112 
45315406aa Mart*0113 #endif /* SEAICE_CGRID */
4b22dd6e44 Mart*0114 
                0115       RETURN
                0116       END