/[MITgcm]/MITgcm/model/src/calc_oce_mxlayer.F
ViewVC logotype

Diff of /MITgcm/model/src/calc_oce_mxlayer.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.1 by jmc, Sun Jun 3 22:50:47 2007 UTC revision 1.7 by dfer, Fri Nov 14 03:04:09 2008 UTC
# Line 24  C     == Global variables == Line 24  C     == Global variables ==
24  #include "EEPARAMS.h"  #include "EEPARAMS.h"
25  #include "PARAMS.h"  #include "PARAMS.h"
26  #include "GRID.h"  #include "GRID.h"
 #include "SURFACE.h"  
27  #include "DYNVARS.h"  #include "DYNVARS.h"
28  #ifdef ALLOW_GMREDI  #ifdef ALLOW_GMREDI
29  # include "GMREDI.h"  # include "GMREDI.h"
# Line 57  C     i,j :: Loop counters Line 56  C     i,j :: Loop counters
56        INTEGER i,j,k        INTEGER i,j,k
57        LOGICAL calcMixLayerDepth        LOGICAL calcMixLayerDepth
58        INTEGER method        INTEGER method
59        _RL     dRhoSmall, rhoBigNb        _RL     rhoBigNb
60        _RL     rhoMxL(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL     rhoMxL(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
61        _RL     rhoKm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL     rhoKm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
62        _RL     rhoLoc(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL     rhoLoc(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 66  CEOP Line 65  CEOP
65    
66        calcMixLayerDepth = .FALSE.        calcMixLayerDepth = .FALSE.
67  #ifdef ALLOW_GMREDI  #ifdef ALLOW_GMREDI
68        IF ( useGMRedi ) calcMixLayerDepth = GM_taper_scheme.EQ.'fm07'        IF ( useGMRedi ) THEN
69           IF ( .NOT.useKPP ) calcMixLayerDepth = GM_taper_scheme.EQ.'fm07'
70          ENDIF
71  #endif  #endif
72  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
73        IF ( useDiagnostics.AND. .NOT.calcMixLayerDepth ) THEN        IF ( useDiagnostics.AND. .NOT.calcMixLayerDepth ) THEN
# Line 88  C       surface density plus Delta_Rho = Line 89  C       surface density plus Delta_Rho =
89  C     = density of water which is -hMixCriteria colder than surface water  C     = density of water which is -hMixCriteria colder than surface water
90    
91  c       hMixCriteria  = -0.8 _d 0  c       hMixCriteria  = -0.8 _d 0
92          dRhoSmall = 1. _d -6  c       dRhoSmall = 1. _d -6
93          rhoBigNb  = rhoConst*1. _d 10          rhoBigNb  = rhoConst*1. _d 10
94          CALL FIND_ALPHA(          CALL FIND_ALPHA(
95       I            bi, bj, 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, 1, 1,       I            bi, bj, 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, 1, 1,
# Line 99  c       hMixCriteria  = -0.8 _d 0 Line 100  c       hMixCriteria  = -0.8 _d 0
100             rhoKm1(i,j) = rhoSurf(i,j)             rhoKm1(i,j) = rhoSurf(i,j)
101             rhoMxL(i,j) = rhoSurf(i,j)             rhoMxL(i,j) = rhoSurf(i,j)
102       &                 + MAX( rhoMxL(i,j)*hMixCriteria, dRhoSmall )       &                 + MAX( rhoMxL(i,j)*hMixCriteria, dRhoSmall )
103             hMixLayer(i,j,bi,bj) = rF(1)-R_low(I,J,bi,bj)             hMixLayer(i,j,bi,bj) = rF(1)-R_low(i,j,bi,bj)
104           ENDDO           ENDDO
105          ENDDO          ENDDO
106          DO k = 2,Nr          DO k = 2,Nr
107  C-    potential density (reference level = surface level)  C-    potential density (reference level = surface level)
108           CALL FIND_RHO(           CALL FIND_RHO_2D(
109       I             bi, bj, 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, K, 1,       I        1-OLx, sNx+OLx, 1-OLy, sNy+OLy, 1,
110       I             theta, salt,       I        theta(1-OLx,1-OLy,k,bi,bj), salt(1-OLx,1-OLy,k,bi,bj),
111       O             rhoLoc, myThid )       O        rhoLoc,
112         I        k, bi, bj, myThid )
113    
114           DO j=1-Oly,sNy+Oly           DO j=1-Oly,sNy+Oly
115            DO i=1-Olx,sNx+Olx            DO i=1-Olx,sNx+Olx
# Line 134  C--   Second method : Line 136  C--   Second method :
136  C     where the local stratification exceed the mean stratification above  C     where the local stratification exceed the mean stratification above
137  C     (from surface down to here) by factor hMixCriteria  C     (from surface down to here) by factor hMixCriteria
138    
139  c       hMixCriteria  = 2. _d 0  c       hMixCriteria  = 1.5 _d 0
140    c       dRhoSmall = 1. _d -2
141          DO j=1-Oly,sNy+Oly          DO j=1-Oly,sNy+Oly
142           DO i=1-Olx,sNx+Olx           DO i=1-Olx,sNx+Olx
143             IF ( klowC(i,j,bi,bj) .GT. 0 ) THEN             IF ( klowC(i,j,bi,bj) .GT. 0 ) THEN
# Line 146  c       hMixCriteria  = 2. _d 0 Line 149  c       hMixCriteria  = 2. _d 0
149             ENDIF             ENDIF
150           ENDDO           ENDDO
151          ENDDO          ENDDO
152          DO k = 3,Nr          DO k = 2,Nr-1
153  C-    potential density (reference level = surface level)  C-    potential density (reference level = surface level)
154           CALL FIND_RHO(           CALL FIND_RHO_2D(
155       I             bi, bj, 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, K, 1,       I        1-OLx, sNx+OLx, 1-OLy, sNy+OLy, 1,
156       I             theta, salt,       I        theta(1-OLx,1-OLy,k,bi,bj), salt(1-OLx,1-OLy,k,bi,bj),
157       O             rhoLoc, myThid )       O        rhoLoc,
158         I        k, bi, bj, myThid )
159    
160           DO j=1-Oly,sNy+Oly           DO j=1-Oly,sNy+Oly
161            DO i=1-Olx,sNx+Olx            DO i=1-Olx,sNx+Olx
162             IF ( k.LE.klowC(i,j,bi,bj)             IF ( k.LT.klowC(i,j,bi,bj)
163       &          .AND. rhoMxL(i,j).GE.0. ) THEN       &          .AND. rhoMxL(i,j).GE.0. ) THEN
164               sigmAv = ( rhoLoc(i,j)-rhoSurf(i,j) ) / ( rC(1)-rC(k) )               sigmAv = ( rhoLoc(i,j)-rhoSurf(i,j)+dRhoSmall )
165               IF ( -sigmaR(i,j,k).GE.sigmAv*hMixCriteria ) THEN       &              / ( rC(1)-rC(k) )
166                 IF ( -sigmaR(i,j,k+1).GT.sigmAv*hMixCriteria ) THEN
167                 tmpFac = 0. _d 0                 tmpFac = 0. _d 0
168                 IF ( sigmAv.GT.0. _d 0 ) THEN                 IF ( sigmAv.GT.0. _d 0 ) THEN
169                   tmpFac = sigmaR(i,j,k-1)/sigmaR(i,j,k)                   tmpFac = hMixCriteria*sigmaR(i,j,k)/sigmaR(i,j,k+1)
170                   tmpFac = ( tmpFac*hMixCriteria - 1. _d 0 )                   IF ( tmpFac .GT. 1. _d 0 ) THEN
171       &                         / ( hMixCriteria - 1. _d 0 )                     tmpFac = 1. _d 0
172                   tmpFac = MAX( 0. _d 0, MIN( tmpFac, 1. _d 0 ) )       &             + ( tmpFac - 1. _d 0 )/( hMixCriteria - 1. _d 0 )
173                     ENDIF
174                     tmpFac = MAX( 0. _d 0, MIN( tmpFac, 2. _d 0 ) )
175                 ENDIF                 ENDIF
176                 hMixLayer(i,j,bi,bj) = rF(1)-rC(k-1)+tmpFac*drC(k)                 hMixLayer(i,j,bi,bj) = rF(1)-rF(k+1)
177         &                              - drF(k)*tmpFac*0.5 _d 0
178                 rhoMxL(i,j) = -1.                 rhoMxL(i,j) = -1.
179               ENDIF               ENDIF
180             ENDIF             ENDIF
# Line 178  C-    potential density (reference level Line 186  C-    potential density (reference level
186          STOP 'S/R CALC_OCE_MXLAYER: invalid method'          STOP 'S/R CALC_OCE_MXLAYER: invalid method'
187         ENDIF         ENDIF
188    
189           IF ( hMixSmooth .GT. 0. _d 0 ) THEN
190            tmpFac = (1. _d 0 - hMixSmooth ) / 4. _d 0
191            DO j=1-Oly+1,sNy+Oly-1
192             DO i=1-Olx+1,sNx+Olx-1
193                rhoLoc(i,j)=(hMixSmooth *   hMixLayer(i,j,bi,bj)   +
194         &                       tmpFac * ( hMixLayer(i-1,j,bi,bj) +
195         &                                  hMixLayer(i+1,j,bi,bj) +
196         &                                  hMixLayer(i,j-1,bi,bj) +
197         &                                  hMixLayer(i,j+1,bi,bj) )
198         &                  )
199         &                 /(hMixSmooth +
200         &                       tmpFac * ( maskC(i-1,j,1,bi,bj) +
201         &                                  maskC(i+1,j,1,bi,bj) +
202         &                                  maskC(i,j-1,1,bi,bj) +
203         &                                  maskC(i,j+1,1,bi,bj) )
204         &                  ) * maskC(i,j,1,bi,bj)
205             ENDDO
206            ENDDO
207            DO j=1-Oly+1,sNy+Oly-1
208             DO i=1-Olx+1,sNx+Olx-1
209                hMixLayer(i,j,bi,bj) = rhoLoc(i,j)
210             ENDDO
211            ENDDO
212           ENDIF
213    
214  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
215         IF ( useDiagnostics ) THEN         IF ( useDiagnostics ) THEN
216          CALL DIAGNOSTICS_FILL( hMixLayer, 'MXLDEPTH',          CALL DIAGNOSTICS_FILL( hMixLayer, 'MXLDEPTH',

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.22