** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.
Last-Modified: Thu, 15 May 2024 05:11:27 GMT
Content-Type: text/html; charset=utf-8
MITgcm/MITgcm/pkg/gmredi/gmredi_calc_tensor.F
File indexing completed on 2024-02-29 06:10:24 UTC
view on github raw file Latest commit a4576c7c on 2024-02-28 22:55:11 UTC
0c49347dc7 Alis* 0001 #include "GMREDI_OPTIONS.h "
14e0496834 Jean* 0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h "
0004 #endif
ee8a6f4ffb Jean* 0005 #ifdef ALLOW_CTRL
0006 # include "CTRL_OPTIONS.h "
0007 #endif
e2259a1942 Jean* 0008 #ifdef ALLOW_KPP
0009 # include "KPP_OPTIONS.h "
0010 #endif
0c49347dc7 Alis* 0011
e2259a1942 Jean* 0012
0013
0014
0c49347dc7 Alis* 0015 SUBROUTINE GMREDI_CALC_TENSOR (
e2259a1942 Jean* 0016 I iMin , iMax , jMin , jMax ,
0c49347dc7 Alis* 0017 I sigmaX , sigmaY , sigmaR ,
e2259a1942 Jean* 0018 I bi , bj , myTime , myIter , myThid )
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0c49347dc7 Alis* 0029 IMPLICIT NONE
0030
0031
0032 #include "SIZE.h "
0033 #include "GRID.h "
0034 #include "DYNVARS.h "
0035 #include "EEPARAMS.h "
0036 #include "PARAMS.h "
0037 #include "GMREDI.h "
d29d98918f Jean* 0038 #include "GMREDI_TAVE.h "
ee8a6f4ffb Jean* 0039 #ifdef ALLOW_CTRL
0040 # include "CTRL_FIELDS.h "
0041 #endif
e2259a1942 Jean* 0042 #ifdef ALLOW_KPP
0043 # include "KPP.h "
0044 #endif
0c49347dc7 Alis* 0045
b6b11b9b2f Patr* 0046 #ifdef ALLOW_AUTODIFF_TAMC
a4576c7cde Juli* 0047 # include "tamc.h "
b6b11b9b2f Patr* 0048 #endif /* ALLOW_AUTODIFF_TAMC */
0049
e2259a1942 Jean* 0050
0051
0052
0053
0054
0c49347dc7 Alis* 0055
e2259a1942 Jean* 0056 INTEGER iMin ,iMax ,jMin ,jMax
ee8a6f4ffb Jean* 0057 _RL sigmaX (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,Nr )
0058 _RL sigmaY (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,Nr )
0059 _RL sigmaR (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,Nr )
e2259a1942 Jean* 0060 INTEGER bi , bj
0061 _RL myTime
0062 INTEGER myIter
0c49347dc7 Alis* 0063 INTEGER myThid
e2259a1942 Jean* 0064
0c49347dc7 Alis* 0065
0066 #ifdef ALLOW_GMREDI
0067
e2259a1942 Jean* 0068
8233d0ceb9 Jean* 0069
2ae58a73ff Jean* 0070 INTEGER i ,j ,k
8233d0ceb9 Jean* 0071 _RS maskFk (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
ee8a6f4ffb Jean* 0072 _RL SlopeX (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0073 _RL SlopeY (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0074 _RL dSigmaDx (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0075 _RL dSigmaDy (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0076 _RL dSigmaDr (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0077 _RL SlopeSqr (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0078 _RL taperFct (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0079 _RL ldd97_LrhoC (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0080 _RL ldd97_LrhoW (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0081 _RL ldd97_LrhoS (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
5b172de0d2 Jean* 0082 _RL Cspd , LrhoInf , LrhoSup , fCoriLoc , rDepth
f6de204bec Jean* 0083 _RL Kgm_tmp , isopycK , bolus_K
0c49347dc7 Alis* 0084
ee8a6f4ffb Jean* 0085 INTEGER kLow_W (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0086 INTEGER kLow_S (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0087 _RL locMixLayer (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0088 _RL baseSlope (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0089 _RL hTransLay (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
0090 _RL recipLambda (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
a4576c7cde Juli* 0091 INTEGER km1
0092 #if ( defined GM_NON_UNITY_DIAGONAL || defined GM_EXTRA_DIAGONAL )
2ae58a73ff Jean* 0093 INTEGER kp1
0094 _RL maskp1
0095 #endif
e2259a1942 Jean* 0096
0c49347dc7 Alis* 0097 #ifdef GM_VISBECK_VARIABLE_K
a4576c7cde Juli* 0098 # ifdef OLD_VISBECK_CALC
ee8a6f4ffb Jean* 0099 _RL Ssq (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
a4576c7cde Juli* 0100 # else
8233d0ceb9 Jean* 0101 INTEGER ks
0102 _RL dSigmaH , dSigmaR , Sloc , rTop
0103
a4576c7cde Juli* 0104 # endif
9bee368eff Jean* 0105 _RL recipMaxSlope
ea71059281 Jean* 0106 _RL deltaH , integrDepth
0107 _RL N2loc , SNloc
9bee368eff Jean* 0108 #endif /* GM_VISBECK_VARIABLE_K */
0c49347dc7 Alis* 0109
066e0d5e64 Jean* 0110 #ifdef ALLOW_DIAGNOSTICS
0111 LOGICAL doDiagRediFlx
0112 LOGICAL DIAGNOSTICS_IS_ON
0113 EXTERNAL DIAGNOSTICS_IS_ON
a4576c7cde Juli* 0114 # if ( defined GM_NON_UNITY_DIAGONAL || defined GM_EXTRA_DIAGONAL )
066e0d5e64 Jean* 0115 _RL dTdz
0116 _RL tmp1k (1-OLx :sNx +OLx ,1-OLy :sNy +OLy )
a4576c7cde Juli* 0117 # endif
2ae58a73ff Jean* 0118 #endif /* ALLOW_DIAGNOSTICS */
7c50f07931 Mart* 0119 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart* 0120
0121
0122 INTEGER tkey , kkey
7c50f07931 Mart* 0123 #endif
066e0d5e64 Jean* 0124
549d1a8d8c Jean* 0125
0126
b6b11b9b2f Patr* 0127 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart* 0128 tkey = bi + (bj -1)*nSx + (ikey_dynamics -1)*nSx *nSy
b6b11b9b2f Patr* 0129 #endif /* ALLOW_AUTODIFF_TAMC */
0130
066e0d5e64 Jean* 0131 #ifdef ALLOW_DIAGNOSTICS
0132 doDiagRediFlx = .FALSE.
0133 IF ( useDiagnostics ) THEN
0134 doDiagRediFlx = DIAGNOSTICS_IS_ON ('GM_KuzTz' , myThid )
b0e49a1609 Jean* 0135 doDiagRediFlx = doDiagRediFlx .OR.
066e0d5e64 Jean* 0136 & DIAGNOSTICS_IS_ON ('GM_KvzTz' , myThid )
0137 ENDIF
0138 #endif
b0e49a1609 Jean* 0139
2092dbb101 Patr* 0140 #ifdef GM_VISBECK_VARIABLE_K
9bee368eff Jean* 0141 recipMaxSlope = 0. _d 0
0142 IF ( GM_Visbeck_maxSlope .GT. 0. _d 0 ) THEN
0143 recipMaxSlope = 1. _d 0 / GM_Visbeck_maxSlope
0144 ENDIF
ee8a6f4ffb Jean* 0145 DO j =1-OLy ,sNy +OLy
0146 DO i =1-OLx ,sNx +OLx
2092dbb101 Patr* 0147 VisbeckK (i ,j ,bi ,bj ) = 0. _d 0
0148 ENDDO
0149 ENDDO
0150 #endif
0151
549d1a8d8c Jean* 0152
e2259a1942 Jean* 0153 IF ( GM_taper_scheme .EQ. 'ldd97' .OR.
0154 & GM_taper_scheme .EQ. 'fm07' ) THEN
549d1a8d8c Jean* 0155 Cspd = 2. _d 0
0156 LrhoInf = 15. _d 3
0157 LrhoSup = 100. _d 3
0158
ee8a6f4ffb Jean* 0159 DO j =1-OLy ,sNy +OLy
0160 DO i =1-OLx ,sNx +OLx
549d1a8d8c Jean* 0161 IF (fCori (i ,j ,bi ,bj ).NE. 0.) THEN
0162 ldd97_LrhoC (i ,j ) = Cspd /ABS(fCori (i ,j ,bi ,bj ))
0163 ELSE
0164 ldd97_LrhoC (i ,j ) = LrhoSup
0165 ENDIF
0166 ldd97_LrhoC (i ,j ) = MAX(LrhoInf ,MIN(ldd97_LrhoC (i ,j ),LrhoSup ))
0167 ENDDO
0168 ENDDO
0169
ee8a6f4ffb Jean* 0170 DO j =1-OLy ,sNy +OLy
0171 kLow_W (1-OLx ,j ) = 0
0172 ldd97_LrhoW (1-OLx ,j ) = LrhoSup
0173 DO i =1-OLx +1,sNx +OLx
e2259a1942 Jean* 0174 kLow_W (i ,j ) = MIN(kLowC (i -1,j ,bi ,bj ),kLowC (i ,j ,bi ,bj ))
549d1a8d8c Jean* 0175 fCoriLoc = op5 *(fCori (i -1,j ,bi ,bj )+fCori (i ,j ,bi ,bj ))
5b172de0d2 Jean* 0176 IF ( fCoriLoc .NE. zeroRL ) THEN
549d1a8d8c Jean* 0177 ldd97_LrhoW (i ,j ) = Cspd /ABS(fCoriLoc )
0178 ELSE
0179 ldd97_LrhoW (i ,j ) = LrhoSup
0180 ENDIF
0181 ldd97_LrhoW (i ,j ) = MAX(LrhoInf ,MIN(ldd97_LrhoW (i ,j ),LrhoSup ))
0182 ENDDO
0183 ENDDO
0184
ee8a6f4ffb Jean* 0185 DO i =1-OLx +1,sNx +OLx
0186 kLow_S (i ,1-OLy ) = 0
0187 ldd97_LrhoS (i ,1-OLy ) = LrhoSup
549d1a8d8c Jean* 0188 ENDDO
ee8a6f4ffb Jean* 0189 DO j =1-OLy +1,sNy +OLy
0190 DO i =1-OLx ,sNx +OLx
e2259a1942 Jean* 0191 kLow_S (i ,j ) = MIN(kLowC (i ,j -1,bi ,bj ),kLowC (i ,j ,bi ,bj ))
549d1a8d8c Jean* 0192 fCoriLoc = op5 *(fCori (i ,j -1,bi ,bj )+fCori (i ,j ,bi ,bj ))
5b172de0d2 Jean* 0193 IF ( fCoriLoc .NE. zeroRL ) THEN
549d1a8d8c Jean* 0194 ldd97_LrhoS (i ,j ) = Cspd /ABS(fCoriLoc )
0195 ELSE
0196 ldd97_LrhoS (i ,j ) = LrhoSup
0197 ENDIF
0198 ldd97_LrhoS (i ,j ) = MAX(LrhoInf ,MIN(ldd97_LrhoS (i ,j ),LrhoSup ))
0199 ENDDO
0200 ENDDO
0201 ELSE
0202
ee8a6f4ffb Jean* 0203 DO j =1-OLy ,sNy +OLy
0204 DO i =1-OLx ,sNx +OLx
549d1a8d8c Jean* 0205 ldd97_LrhoC (i ,j ) = 0. _d 0
0206 ldd97_LrhoW (i ,j ) = 0. _d 0
0207 ldd97_LrhoS (i ,j ) = 0. _d 0
0208 ENDDO
0209 ENDDO
0210 ENDIF
0211
050b4366e6 Jean* 0212 #ifdef GM_BOLUS_ADVEC
0213 DO k =1,Nr
ee8a6f4ffb Jean* 0214 DO j =1-OLy ,sNy +OLy
0215 DO i =1-OLx ,sNx +OLx
050b4366e6 Jean* 0216 GM_PsiX (i ,j ,k ,bi ,bj ) = 0. _d 0
0217 GM_PsiY (i ,j ,k ,bi ,bj ) = 0. _d 0
0218 ENDDO
0219 ENDDO
0220 ENDDO
0221 #endif /* GM_BOLUS_ADVEC */
14e0496834 Jean* 0222 #ifdef ALLOW_AUTODIFF
050b4366e6 Jean* 0223 DO k =1,Nr
ee8a6f4ffb Jean* 0224 DO j =1-OLy ,sNy +OLy
0225 DO i =1-OLx ,sNx +OLx
050b4366e6 Jean* 0226 Kwx (i ,j ,k ,bi ,bj ) = 0. _d 0
0227 Kwy (i ,j ,k ,bi ,bj ) = 0. _d 0
0228 Kwz (i ,j ,k ,bi ,bj ) = 0. _d 0
0229 Kux (i ,j ,k ,bi ,bj ) = 0. _d 0
0230 Kvy (i ,j ,k ,bi ,bj ) = 0. _d 0
0231 # ifdef GM_EXTRA_DIAGONAL
0232 Kuz (i ,j ,k ,bi ,bj ) = 0. _d 0
0233 Kvz (i ,j ,k ,bi ,bj ) = 0. _d 0
0234 # endif
0235 ENDDO
0236 ENDDO
0237 ENDDO
14e0496834 Jean* 0238 #endif /* ALLOW_AUTODIFF */
0c49347dc7 Alis* 0239
050b4366e6 Jean* 0240
ee8a6f4ffb Jean* 0241 DO j =1-OLy ,sNy +OLy
0242 DO i =1-OLx ,sNx +OLx
5755dbe390 Patr* 0243 hTransLay (i ,j ) = R_low (i ,j ,bi ,bj )
0244 baseSlope (i ,j ) = 0. _d 0
0245 recipLambda (i ,j ) = 0. _d 0
0246 locMixLayer (i ,j ) = 0. _d 0
0247 ENDDO
0248 ENDDO
e2259a1942 Jean* 0249 #ifdef ALLOW_KPP
0250 IF ( useKPP ) THEN
ee8a6f4ffb Jean* 0251 DO j =1-OLy ,sNy +OLy
0252 DO i =1-OLx ,sNx +OLx
e2259a1942 Jean* 0253 locMixLayer (i ,j ) = KPPhbl (i ,j ,bi ,bj )
0254 ENDDO
0255 ENDDO
0256 ELSE
0257 #else
0258 IF ( .TRUE. ) THEN
0259 #endif
ee8a6f4ffb Jean* 0260 DO j =1-OLy ,sNy +OLy
0261 DO i =1-OLx ,sNx +OLx
e2259a1942 Jean* 0262 locMixLayer (i ,j ) = hMixLayer (i ,j ,bi ,bj )
0263 ENDDO
0264 ENDDO
0265 ENDIF
0266
05118ac017 Jean* 0267 #ifdef GM_BATES_K3D
0268 IF (GM_useBatesK3d ) THEN
7ea279c259 Jean* 0269
0270 CALL TIMER_START ('GMREDI_CALC_BATES_K [GMREDI_CALC_TENSOR]' ,
0d1e4b948d Mich* 0271 & myThid )
7ea279c259 Jean* 0272 CALL GMREDI_CALC_BATES_K (
0d1e4b948d Mich* 0273 I iMin , iMax , jMin , jMax ,
0274 I sigmaX , sigmaY , sigmaR ,
7ea279c259 Jean* 0275 I bi , bj , myTime , myIter , myThid )
0276 CALL TIMER_STOP ('GMREDI_CALC_BATES_K [GMREDI_CALC_TENSOR]' ,
0d1e4b948d Mich* 0277 & myThid )
0278 ENDIF
0279 #endif
0280
f59d76b0dd Ed D* 0281 #ifdef ALLOW_GM_LEITH_QG
e25acdb1f2 Jean* 0282 # ifdef ALLOW_AUTODIFF
0283 DO k =1,Nr
8233d0ceb9 Jean* 0284 DO j =1-OLy ,sNy +OLy
0285 DO i =1-OLx ,sNx +OLx
0286 GM_LeithQG_K (i ,j ,k ,bi ,bj ) = 0. _d 0
f59d76b0dd Ed D* 0287 ENDDO
8233d0ceb9 Jean* 0288 ENDDO
e25acdb1f2 Jean* 0289 ENDDO
0290 # endif
0291 IF ( GM_useLeithQG ) THEN
0292
8233d0ceb9 Jean* 0293 CALL GMREDI_CALC_QGLEITH (
f59d76b0dd Ed D* 0294 O GM_LeithQG_K (1-OLx ,1-OLy ,1,bi ,bj ),
0295 I bi , bj , myTime , myIter , myThid )
0296 ENDIF
0297 #endif /* ALLOW_GM_LEITH_QG */
0298
a4576c7cde Juli* 0299 #ifdef GM_GEOM_VARIABLE_K
0300
0301
0302 IF ( GM_useGEOM ) THEN
0303 DO k =1,Nr
0304 DO j =1-OLy ,sNy +OLy
0305 DO i =1-OLx ,sNx +OLx
0306 GEOM_K3d (i ,j ,k ,bi ,bj ) = 0. _d 0
0307 ENDDO
0308 ENDDO
0309 ENDDO
0310 CALL GMREDI_CALC_GEOM (
0311 I sigmaX , sigmaY , sigmaR ,
0312 I bi , bj , myTime , myIter , myThid )
0313 ENDIF
0314 #endif /* GM_GEOM_VARIABLE_K */
0315
050b4366e6 Jean* 0316
0317
0318
e2259a1942 Jean* 0319 DO k =Nr ,2,-1
0320
ee8a6f4ffb Jean* 0321 DO j =1-OLy ,sNy +OLy
0322 DO i =1-OLx ,sNx +OLx
8233d0ceb9 Jean* 0323 #ifdef ALLOW_AUTODIFF
b6b11b9b2f Patr* 0324 SlopeX (i ,j ) = 0. _d 0
0325 SlopeY (i ,j ) = 0. _d 0
a4576c7cde Juli* 0326 dSigmaDx (i ,j ) = 0. _d 0
2092dbb101 Patr* 0327 dSigmaDy (i ,j ) = 0. _d 0
549d1a8d8c Jean* 0328 dSigmaDr (i ,j ) = 0. _d 0
b6b11b9b2f Patr* 0329 SlopeSqr (i ,j ) = 0. _d 0
0330 taperFct (i ,j ) = 0. _d 0
8233d0ceb9 Jean* 0331 #endif /* ALLOW_AUTODIFF */
0332 maskFk (i ,j ) = maskC (i ,j ,k -1,bi ,bj )*maskC (i ,j ,k ,bi ,bj )
b6b11b9b2f Patr* 0333 ENDDO
0334 ENDDO
0335
ee8a6f4ffb Jean* 0336 DO j =1-OLy +1,sNy +OLy -1
0337 DO i =1-OLx +1,sNx +OLx -1
0c49347dc7 Alis* 0338
b0e49a1609 Jean* 0339 dSigmaDx (i ,j )=op25 *( sigmaX (i +1,j ,k -1)+sigmaX (i ,j ,k -1)
0340 & +sigmaX (i +1,j , k )+sigmaX (i ,j , k )
8233d0ceb9 Jean* 0341 & )*maskFk (i ,j )
b0e49a1609 Jean* 0342 dSigmaDy (i ,j )=op25 *( sigmaY (i ,j +1,k -1)+sigmaY (i ,j ,k -1)
0343 & +sigmaY (i ,j +1, k )+sigmaY (i ,j , k )
8233d0ceb9 Jean* 0344 & )*maskFk (i ,j )
9bee368eff Jean* 0345
b0e49a1609 Jean* 0346 ENDDO
0c49347dc7 Alis* 0347 ENDDO
0348
b0e49a1609 Jean* 0349 #ifdef GM_VISBECK_VARIABLE_K
a4576c7cde Juli* 0350 # ifndef OLD_VISBECK_CALC
5b172de0d2 Jean* 0351 IF ( GM_Visbeck_alpha .GT. zeroRL .AND.
b0e49a1609 Jean* 0352 & -rC (k -1).LT. GM_Visbeck_depth ) THEN
0353
ee8a6f4ffb Jean* 0354 DO j =1-OLy ,sNy +OLy
0355 DO i =1-OLx ,sNx +OLx
5b172de0d2 Jean* 0356 dSigmaDr (i ,j ) = MAX( gravitySign *sigmaR (i ,j ,k ), zeroRL )
9bee368eff Jean* 0357 ENDDO
0358 ENDDO
0359
b0e49a1609 Jean* 0360
0361
0362
0363
0364
0365
0366
0367
8233d0ceb9 Jean* 0368 rTop = rF (1)
ee8a6f4ffb Jean* 0369 DO j =1-OLy +1,sNy +OLy -1
0370 DO i =1-OLx +1,sNx +OLx -1
8233d0ceb9 Jean* 0371 IF ( maskFk (i ,j ).NE. zeroRS ) THEN
0372 ks = kSurfC (i ,j ,bi ,bj )
0373
0374
0375
0376 rTop = Ro_surf (i ,j ,bi ,bj )
0377 integrDepth = rTop - rC ( kLowC (i ,j ,bi ,bj ) )
b0e49a1609 Jean* 0378
0379 integrDepth = MIN( integrDepth , GM_Visbeck_depth )
9bee368eff Jean* 0380
0381 integrDepth = MAX( integrDepth , GM_Visbeck_minDepth )
b0e49a1609 Jean* 0382
8233d0ceb9 Jean* 0383 deltaH = integrDepth - rTop + rC (k -1)
b0e49a1609 Jean* 0384
0385
0386
0387 deltaH = MIN( deltaH , drC (k ) )
0388
8233d0ceb9 Jean* 0389 deltaH = deltaH /( integrDepth - rTop + rC (ks ) )
b0e49a1609 Jean* 0390
ea71059281 Jean* 0391
9bee368eff Jean* 0392
0393
0394 dSigmaR = ( dSigmaDr (i ,j )*4. _d 0
0395 & + dSigmaDr (i -1,j )
0396 & + dSigmaDr (i +1,j )
0397 & + dSigmaDr (i ,j -1)
0398 & + dSigmaDr (i ,j +1)
0399 & )/( 4. _d 0
8233d0ceb9 Jean* 0400 & + maskFk (i -1,j )
0401 & + maskFk (i +1,j )
0402 & + maskFk (i ,j -1)
0403 & + maskFk (i ,j +1)
9bee368eff Jean* 0404 & )
b0e49a1609 Jean* 0405 dSigmaH = dSigmaDx (i ,j )*dSigmaDx (i ,j )
0406 & + dSigmaDy (i ,j )*dSigmaDy (i ,j )
0407 IF ( dSigmaH .GT. 0. _d 0 ) THEN
0408 dSigmaH = SQRT( dSigmaH )
9bee368eff Jean* 0409
5b172de0d2 Jean* 0410 IF ( dSigmaR .GT. dSigmaH *recipMaxSlope ) THEN
0411 Sloc = dSigmaH / dSigmaR
b0e49a1609 Jean* 0412 ELSE
9bee368eff Jean* 0413 Sloc = GM_Visbeck_maxSlope
b0e49a1609 Jean* 0414 ENDIF
8233d0ceb9 Jean* 0415
5b172de0d2 Jean* 0416 N2loc = gravity *recip_rhoConst *dSigmaR
ea71059281 Jean* 0417 IF ( N2loc .GT. 0. _d 0 ) THEN
0418 SNloc = Sloc *SQRT(N2loc )
0419 ELSE
0420 SNloc = 0. _d 0
0421 ENDIF
b0e49a1609 Jean* 0422 ELSE
0423 SNloc = 0. _d 0
0424 ENDIF
0425 VisbeckK (i ,j ,bi ,bj ) = VisbeckK (i ,j ,bi ,bj )
0426 & +deltaH *GM_Visbeck_alpha
0427 & *GM_Visbeck_length *GM_Visbeck_length *SNloc
0428 ENDIF
0429 ENDDO
0430 ENDDO
0431 ENDIF
a4576c7cde Juli* 0432 # endif /* ndef OLD_VISBECK_CALC */
b0e49a1609 Jean* 0433 #endif /* GM_VISBECK_VARIABLE_K */
5b172de0d2 Jean* 0434
0435
ee8a6f4ffb Jean* 0436 DO j =1-OLy ,sNy +OLy
0437 DO i =1-OLx ,sNx +OLx
5b172de0d2 Jean* 0438 dSigmaDr (i ,j ) = gravitySign *sigmaR (i ,j ,k )
9bee368eff Jean* 0439 ENDDO
0440 ENDDO
0441
0442 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart* 0443 kkey = k + (tkey -1)*Nr
9bee368eff Jean* 0444
0445
0446
361543e926 Jean* 0447 # ifndef GM_EXCLUDE_FM07_TAP
9bee368eff Jean* 0448
0449
0450
361543e926 Jean* 0451 # endif
9bee368eff Jean* 0452 #endif /* ALLOW_AUTODIFF_TAMC */
b0e49a1609 Jean* 0453
5b172de0d2 Jean* 0454
0455 IF ( usingZcoords ) THEN
0456 rDepth = rF (1) - rF (k )
0457 ELSE
0458 rDepth = rF (k ) - rF (Nr +1)
0459 ENDIF
0c49347dc7 Alis* 0460
b0e49a1609 Jean* 0461 CALL GMREDI_SLOPE_LIMIT (
549d1a8d8c Jean* 0462 O SlopeX , SlopeY ,
e9fd580bc4 Jean* 0463 O SlopeSqr , taperFct ,
e2259a1942 Jean* 0464 U hTransLay , baseSlope , recipLambda ,
549d1a8d8c Jean* 0465 U dSigmaDr ,
0466 I dSigmaDx , dSigmaDy ,
5b172de0d2 Jean* 0467 I ldd97_LrhoC , locMixLayer , rDepth , rF ,
ee8a6f4ffb Jean* 0468 I kLowC (1-OLx ,1-OLy ,bi ,bj ),
5b172de0d2 Jean* 0469 I 3, k , bi , bj , myTime , myIter , myThid )
0c49347dc7 Alis* 0470
8233d0ceb9 Jean* 0471 #ifdef GMREDI_MASK_SLOPES
ee8a6f4ffb Jean* 0472 DO j =1-OLy +1,sNy +OLy -1
0473 DO i =1-OLx +1,sNx +OLx -1
b0e49a1609 Jean* 0474
8233d0ceb9 Jean* 0475 SlopeX (i ,j ) = SlopeX (i ,j )*maskFk (i ,j )
0476 SlopeY (i ,j ) = SlopeY (i ,j )*maskFk (i ,j )
0477 SlopeSqr (i ,j ) = SlopeSqr (i ,j )*maskFk (i ,j )
b0e49a1609 Jean* 0478 ENDDO
b6b11b9b2f Patr* 0479 ENDDO
8233d0ceb9 Jean* 0480 #endif
b6b11b9b2f Patr* 0481
0482 #ifdef ALLOW_AUTODIFF_TAMC
9cb619cfcd Patr* 0483
0484
20b8842d78 Patr* 0485
549d1a8d8c Jean* 0486
0487
b6b11b9b2f Patr* 0488 #endif /* ALLOW_AUTODIFF_TAMC */
0489
5b172de0d2 Jean* 0490
0491
0492
ee8a6f4ffb Jean* 0493 DO j =1-OLy +1,sNy +OLy -1
0494 DO i =1-OLx +1,sNx +OLx -1
5b172de0d2 Jean* 0495 Kwx (i ,j ,k ,bi ,bj ) = -gravitySign *SlopeX (i ,j )*taperFct (i ,j )
0496 Kwy (i ,j ,k ,bi ,bj ) = -gravitySign *SlopeY (i ,j )*taperFct (i ,j )
0497 Kwz (i ,j ,k ,bi ,bj ) = SlopeSqr (i ,j )*taperFct (i ,j )
e2259a1942 Jean* 0498 ENDDO
0499 ENDDO
0c49347dc7 Alis* 0500
0501 #ifdef GM_VISBECK_VARIABLE_K
a4576c7cde Juli* 0502 # ifdef OLD_VISBECK_CALC
ee8a6f4ffb Jean* 0503 DO j =1-OLy +1,sNy +OLy -1
0504 DO i =1-OLx +1,sNx +OLx -1
e9fd580bc4 Jean* 0505
e2259a1942 Jean* 0506
0507
8233d0ceb9 Jean* 0508 Ssq (i ,j )=SlopeSqr (i ,j )*taperFct (i ,j )
e9fd580bc4 Jean* 0509
0c49347dc7 Alis* 0510
0511
0512
0513
0514
8233d0ceb9 Jean* 0515 deltaH =abs(GM_Visbeck_depth )-abs(rF (k ))
0c49347dc7 Alis* 0516
8233d0ceb9 Jean* 0517 integrDepth = drF (k )
0518 deltaH =min(deltaH ,integrDepth )
0c49347dc7 Alis* 0519
8233d0ceb9 Jean* 0520 deltaH =max(deltaH , 0. _d 0)
0c49347dc7 Alis* 0521
8233d0ceb9 Jean* 0522 deltaH =deltaH /GM_Visbeck_depth
0523
0524 IF ( Ssq (i ,j ).NE. 0. .AND. dSigmaDr (i ,j ).NE. 0. ) THEN
5b172de0d2 Jean* 0525 N2loc = gravity *recip_rhoConst *dSigmaDr (i ,j )
8233d0ceb9 Jean* 0526 SNloc = SQRT(Ssq (i ,j )*N2loc )
0527 VisbeckK (i ,j ,bi ,bj ) = VisbeckK (i ,j ,bi ,bj )
0528 & +deltaH *GM_Visbeck_alpha
0529 & *GM_Visbeck_length *GM_Visbeck_length *SNloc
0530 ENDIF
0c49347dc7 Alis* 0531
b0e49a1609 Jean* 0532 ENDDO
f42e64b3e7 Jean* 0533 ENDDO
a4576c7cde Juli* 0534 # endif /* OLD_VISBECK_CALC */
e2259a1942 Jean* 0535 #endif /* GM_VISBECK_VARIABLE_K */
f42e64b3e7 Jean* 0536
0537
0538 ENDDO
0539
0c49347dc7 Alis* 0540 #ifdef GM_VISBECK_VARIABLE_K
a4576c7cde Juli* 0541 # ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart* 0542
a4576c7cde Juli* 0543 # endif
5b172de0d2 Jean* 0544 IF ( GM_Visbeck_alpha .GT. zeroRL ) THEN
94a8024bbe Jean* 0545
ee8a6f4ffb Jean* 0546 DO j =1-OLy +1,sNy +OLy -1
0547 DO i =1-OLx +1,sNx +OLx -1
f42e64b3e7 Jean* 0548 VisbeckK (i ,j ,bi ,bj )=
9bee368eff Jean* 0549 & MIN( MAX( VisbeckK (i ,j ,bi ,bj ), GM_Visbeck_minVal_K ),
0550 & GM_Visbeck_maxVal_K )
f42e64b3e7 Jean* 0551 ENDDO
0c49347dc7 Alis* 0552 ENDDO
f42e64b3e7 Jean* 0553 ENDIF
a4576c7cde Juli* 0554 # ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart* 0555
a4576c7cde Juli* 0556 # endif
f42e64b3e7 Jean* 0557 #endif /* GM_VISBECK_VARIABLE_K */
0c49347dc7 Alis* 0558
5b172de0d2 Jean* 0559
620a1b6eb4 Patr* 0560 DO k =1,Nr
2092dbb101 Patr* 0561 #ifdef ALLOW_AUTODIFF_TAMC
361543e926 Jean* 0562
edb6656069 Mart* 0563 kkey = k + (tkey -1)*Nr
20b8842d78 Patr* 0564
0565
0566
2092dbb101 Patr* 0567 #endif
f6de204bec Jean* 0568 km1 = MAX(k -1,1)
0569 isopycK = GM_isopycK
0570 & *(GM_isoFac1d (km1 )+GM_isoFac1d (k ))*op5
0571 bolus_K = GM_background_K
0572 & *(GM_bolFac1d (km1 )+GM_bolFac1d (k ))*op5
ee8a6f4ffb Jean* 0573 DO j =1-OLy +1,sNy +OLy -1
0574 DO i =1-OLx +1,sNx +OLx -1
94a8024bbe Jean* 0575 #ifdef GM_READ_K3D_REDI
0576 Kgm_tmp = op5 *( GM_inpK3dRedi (i ,j ,km1 ,bi ,bj )
0577 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
7e2482cabc Gael* 0578 #else
f6de204bec Jean* 0579 Kgm_tmp = isopycK *GM_isoFac2d (i ,j ,bi ,bj )
7e2482cabc Gael* 0580 #endif
94a8024bbe Jean* 0581 #ifdef GM_READ_K3D_GM
0582 & + GM_skewflx *op5 *( GM_inpK3dGM (i ,j ,km1 ,bi ,bj )
0583 & + GM_inpK3dGM (i ,j ,k ,bi ,bj ) )
5116830959 Patr* 0584 #else
f6de204bec Jean* 0585 & + GM_skewflx *bolus_K *GM_bolFac2d (i ,j ,bi ,bj )
5116830959 Patr* 0586 #endif
f42e64b3e7 Jean* 0587 #ifdef GM_VISBECK_VARIABLE_K
f5509be190 Mart* 0588 & + VisbeckK (i ,j ,bi ,bj )*(GM_isoFac_calcK + GM_skewflx )
42c525bfb4 Alis* 0589 #endif
a4576c7cde Juli* 0590 #ifdef GM_GEOM_VARIABLE_K
0591 & + GM_skewflx *GEOM_K3d (i ,j ,k ,bi ,bj )
0592 #endif
f59d76b0dd Ed D* 0593 #ifdef ALLOW_GM_LEITH_QG
5b172de0d2 Jean* 0594 & + op5 *( GM_LeithQG_K (i ,j ,km1 ,bi ,bj )
0595 & + GM_LeithQG_K (i ,j ,k ,bi ,bj ) )
f5509be190 Mart* 0596 & *(GM_isoFac_calcK + GM_skewflx )
f59d76b0dd Ed D* 0597 #endif
a4576c7cde Juli* 0598 #if (defined GM_BATES_K3D &&
5b172de0d2 Jean* 0599 & + op5 *( GM_BatesK3d (i ,j ,km1 ,bi ,bj )
0600 & + GM_BatesK3d (i ,j ,k ,bi ,bj ) )
f5509be190 Mart* 0601 & *(GM_isoFac_calcK + GM_skewflx )
0d1e4b948d Mich* 0602 #endif
b0e49a1609 Jean* 0603 Kwx (i ,j ,k ,bi ,bj )= Kgm_tmp *Kwx (i ,j ,k ,bi ,bj )
0604 Kwy (i ,j ,k ,bi ,bj )= Kgm_tmp *Kwy (i ,j ,k ,bi ,bj )
94a8024bbe Jean* 0605 #ifdef GM_READ_K3D_REDI
0606 Kwz (i ,j ,k ,bi ,bj )= ( op5 *( GM_inpK3dRedi (i ,j ,km1 ,bi ,bj )
0607 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
7e2482cabc Gael* 0608 #else
3a15bf3a95 Jean* 0609 Kwz (i ,j ,k ,bi ,bj )= ( isopycK *GM_isoFac2d (i ,j ,bi ,bj )
7e2482cabc Gael* 0610 #endif
f42e64b3e7 Jean* 0611 #ifdef GM_VISBECK_VARIABLE_K
f5509be190 Mart* 0612 & + VisbeckK (i ,j ,bi ,bj )*GM_isoFac_calcK
f42e64b3e7 Jean* 0613 #endif
a4576c7cde Juli* 0614
f59d76b0dd Ed D* 0615 #ifdef ALLOW_GM_LEITH_QG
5b172de0d2 Jean* 0616 & + op5 *( GM_LeithQG_K (i ,j ,km1 ,bi ,bj )
0617 & + GM_LeithQG_K (i ,j ,k ,bi ,bj ) )
f5509be190 Mart* 0618 & *GM_isoFac_calcK
f59d76b0dd Ed D* 0619 #endif
a4576c7cde Juli* 0620 #if (defined GM_BATES_K3D &&
5b172de0d2 Jean* 0621 & + op5 *( GM_BatesK3d (i ,j ,km1 ,bi ,bj )
0622 & + GM_BatesK3d (i ,j ,k ,bi ,bj ) )
f5509be190 Mart* 0623 & *GM_isoFac_calcK
0d1e4b948d Mich* 0624 #endif
b0e49a1609 Jean* 0625 & )*Kwz (i ,j ,k ,bi ,bj )
0626 ENDDO
f42e64b3e7 Jean* 0627 ENDDO
e2259a1942 Jean* 0628 ENDDO
0629
0630 #ifdef ALLOW_DIAGNOSTICS
0631 IF ( useDiagnostics .AND. GM_taper_scheme .EQ. 'fm07' ) THEN
0632 CALL DIAGNOSTICS_FILL ( hTransLay , 'GM_hTrsL' , 0,1,2,bi ,bj ,myThid )
0633 CALL DIAGNOSTICS_FILL ( baseSlope , 'GM_baseS' , 0,1,2,bi ,bj ,myThid )
0634 CALL DIAGNOSTICS_FILL (recipLambda ,'GM_rLamb' , 0,1,2,bi ,bj ,myThid )
0635 ENDIF
0636 #endif /* ALLOW_DIAGNOSTICS */
0637
050b4366e6 Jean* 0638
0639
0640
0641 #ifdef GM_BOLUS_ADVEC
0642 IF (GM_AdvForm ) THEN
a4576c7cde Juli* 0643 # ifdef GM_BOLUS_BVP
050b4366e6 Jean* 0644 IF (GM_UseBVP ) THEN
0645 CALL GMREDI_CALC_PSI_BVP (
0646 I bi , bj , iMin , iMax , jMin , jMax ,
0647 I sigmaX , sigmaY , sigmaR ,
0648 I myThid )
0649 ELSE
a4576c7cde Juli* 0650 # endif
05118ac017 Jean* 0651 #ifndef GM_BATES_PASSIVE
0652 IF ( .NOT. GM_useBatesK3d ) THEN
a4576c7cde Juli* 0653 # endif
05118ac017 Jean* 0654
0d1e4b948d Mich* 0655 CALL GMREDI_CALC_PSI_B (
050b4366e6 Jean* 0656 I bi , bj , iMin , iMax , jMin , jMax ,
0657 I sigmaX , sigmaY , sigmaR ,
0658 I ldd97_LrhoW , ldd97_LrhoS ,
0659 I myThid )
a4576c7cde Juli* 0660 # ifndef GM_BATES_PASSIVE
0d1e4b948d Mich* 0661 ENDIF
a4576c7cde Juli* 0662 # endif
0663 # ifdef GM_BOLUS_BVP
050b4366e6 Jean* 0664 ENDIF
a4576c7cde Juli* 0665 # endif
050b4366e6 Jean* 0666 ENDIF
361543e926 Jean* 0667 #endif /* GM_BOLUS_ADVEC */
050b4366e6 Jean* 0668
0669 #ifndef GM_EXCLUDE_SUBMESO
0670 IF ( GM_useSubMeso .AND. GM_AdvForm ) THEN
0671 CALL SUBMESO_CALC_PSI (
0672 I bi , bj , iMin , iMax , jMin , jMax ,
0673 I sigmaX , sigmaY , sigmaR ,
0674 I locMixLayer ,
0675 I myIter , myThid )
0676 ENDIF
0677 #endif /* ndef GM_EXCLUDE_SUBMESO */
0c49347dc7 Alis* 0678
a4576c7cde Juli* 0679 #if ( defined GM_NON_UNITY_DIAGONAL || defined GM_EXTRA_DIAGONAL )
e2259a1942 Jean* 0680
0681
0682
a4576c7cde Juli* 0683 # ifdef ALLOW_KPP
e2259a1942 Jean* 0684 IF ( useKPP ) THEN
ee8a6f4ffb Jean* 0685 DO j =1-OLy ,sNy +OLy
0686 DO i =2-OLx ,sNx +OLx
e2259a1942 Jean* 0687 locMixLayer (i ,j ) = ( KPPhbl (i -1,j ,bi ,bj )
0688 & + KPPhbl ( i ,j ,bi ,bj ) )*op5
0689 ENDDO
0690 ENDDO
0691 ELSE
a4576c7cde Juli* 0692 # else
e2259a1942 Jean* 0693 IF ( .TRUE. ) THEN
a4576c7cde Juli* 0694 # endif
ee8a6f4ffb Jean* 0695 DO j =1-OLy ,sNy +OLy
0696 DO i =2-OLx ,sNx +OLx
e2259a1942 Jean* 0697 locMixLayer (i ,j ) = ( hMixLayer (i -1,j ,bi ,bj )
0698 & + hMixLayer ( i ,j ,bi ,bj ) )*op5
0699 ENDDO
0700 ENDDO
0701 ENDIF
ee8a6f4ffb Jean* 0702 DO j =1-OLy ,sNy +OLy
0703 DO i =1-OLx ,sNx +OLx
e2259a1942 Jean* 0704 hTransLay (i ,j ) = 0.
0705 baseSlope (i ,j ) = 0.
0706 recipLambda (i ,j )= 0.
0707 ENDDO
ee8a6f4ffb Jean* 0708 DO i =2-OLx ,sNx +OLx
e2259a1942 Jean* 0709 hTransLay (i ,j ) = MAX( R_low (i -1,j ,bi ,bj ), R_low (i ,j ,bi ,bj ) )
0710 ENDDO
0711 ENDDO
0712
0713 DO k =Nr ,1,-1
0714 kp1 = MIN(Nr ,k +1)
0715 maskp1 = 1. _d 0
0716 IF (k .GE. Nr ) maskp1 = 0. _d 0
a4576c7cde Juli* 0717 # ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart* 0718 kkey = k + (tkey -1)*Nr
a4576c7cde Juli* 0719 # endif
0c49347dc7 Alis* 0720
0721
ee8a6f4ffb Jean* 0722 DO j =1-OLy +1,sNy +OLy -1
0723 DO i =1-OLx +1,sNx +OLx -1
b0e49a1609 Jean* 0724 dSigmaDx (i ,j )=sigmaX (i ,j ,k )
0725 & *_maskW (i ,j ,k ,bi ,bj )
0726 dSigmaDy (i ,j )=op25 *( sigmaY (i -1,j +1,k )+sigmaY (i ,j +1,k )
0727 & +sigmaY (i -1, j ,k )+sigmaY (i , j ,k )
0728 & )*_maskW (i ,j ,k ,bi ,bj )
0729 dSigmaDr (i ,j )=op25 *( sigmaR (i -1,j , k )+sigmaR (i ,j , k )
0730 & +(sigmaR (i -1,j ,kp1 )+sigmaR (i ,j ,kp1 ))*maskp1
5b172de0d2 Jean* 0731 & )*_maskW (i ,j ,k ,bi ,bj )*gravitySign
b0e49a1609 Jean* 0732 ENDDO
0c49347dc7 Alis* 0733 ENDDO
0734
a4576c7cde Juli* 0735 # ifdef ALLOW_AUTODIFF_TAMC
2092dbb101 Patr* 0736
0737
5755dbe390 Patr* 0738
a4576c7cde Juli* 0739 # ifndef GM_EXCLUDE_FM07_TAP
5755dbe390 Patr* 0740
0741
0742
a4576c7cde Juli* 0743 # endif
0744 # endif /* ALLOW_AUTODIFF_TAMC */
2092dbb101 Patr* 0745
5b172de0d2 Jean* 0746
0747 IF ( usingZcoords ) THEN
0748 rDepth = rF (1) - rC (k )
0749 ELSE
0750 rDepth = rC (k ) - rF (Nr +1)
0751 ENDIF
0c49347dc7 Alis* 0752
b0e49a1609 Jean* 0753 CALL GMREDI_SLOPE_LIMIT (
549d1a8d8c Jean* 0754 O SlopeX , SlopeY ,
e9fd580bc4 Jean* 0755 O SlopeSqr , taperFct ,
e2259a1942 Jean* 0756 U hTransLay , baseSlope , recipLambda ,
549d1a8d8c Jean* 0757 U dSigmaDr ,
0758 I dSigmaDx , dSigmaDy ,
5b172de0d2 Jean* 0759 I ldd97_LrhoW , locMixLayer , rDepth , rC ,
e2259a1942 Jean* 0760 I kLow_W ,
5b172de0d2 Jean* 0761 I 1, k , bi , bj , myTime , myIter , myThid )
0c49347dc7 Alis* 0762
a4576c7cde Juli* 0763 # ifdef ALLOW_AUTODIFF_TAMC
549d1a8d8c Jean* 0764
a4576c7cde Juli* 0765 # endif /* ALLOW_AUTODIFF_TAMC */
9cb619cfcd Patr* 0766
a4576c7cde Juli* 0767 # ifdef GM_NON_UNITY_DIAGONAL
b0e49a1609 Jean* 0768
ee8a6f4ffb Jean* 0769 DO j =1-OLy +1,sNy +OLy -1
0770 DO i =1-OLx +1,sNx +OLx -1
f42e64b3e7 Jean* 0771 Kux (i ,j ,k ,bi ,bj ) =
a4576c7cde Juli* 0772 # ifdef GM_READ_K3D_REDI
94a8024bbe Jean* 0773 & ( op5 *( GM_inpK3dRedi (i -1,j ,k ,bi ,bj )
0774 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 0775 # else
f6de204bec Jean* 0776 & ( GM_isopycK *GM_isoFac1d (k )
0777 & *op5 *(GM_isoFac2d (i -1,j ,bi ,bj )+GM_isoFac2d (i ,j ,bi ,bj ))
a4576c7cde Juli* 0778 # endif
0779 # ifdef GM_VISBECK_VARIABLE_K
5b172de0d2 Jean* 0780 & + op5 *(VisbeckK (i -1,j ,bi ,bj )+VisbeckK (i ,j ,bi ,bj ))
f5509be190 Mart* 0781 & *GM_isoFac_calcK
a4576c7cde Juli* 0782 # endif
0783
0784 # ifdef ALLOW_GM_LEITH_QG
5b172de0d2 Jean* 0785 & + op5 *(GM_LeithQG_K (i -1,j ,k ,bi ,bj )+GM_LeithQG_K (i ,j ,k ,bi ,bj ))
f5509be190 Mart* 0786 & *GM_isoFac_calcK
a4576c7cde Juli* 0787 # endif
0788 # if (defined GM_BATES_K3D &&
5b172de0d2 Jean* 0789 & + op5 *(GM_BatesK3d (i -1,j ,k ,bi ,bj )+GM_BatesK3d (i ,j ,k ,bi ,bj ))
f5509be190 Mart* 0790 & *GM_isoFac_calcK
a4576c7cde Juli* 0791 # endif
e2259a1942 Jean* 0792 & )*taperFct (i ,j )
b6b11b9b2f Patr* 0793 ENDDO
0794 ENDDO
a4576c7cde Juli* 0795 # if ( defined ALLOW_AUTODIFF_TAMC && defined GM_EXCLUDE_CLIPPING )
2092dbb101 Patr* 0796
a4576c7cde Juli* 0797 # endif
ee8a6f4ffb Jean* 0798 DO j =1-OLy +1,sNy +OLy -1
0799 DO i =1-OLx +1,sNx +OLx -1
f42e64b3e7 Jean* 0800 Kux (i ,j ,k ,bi ,bj ) = MAX( Kux (i ,j ,k ,bi ,bj ), GM_Kmin_horiz )
0801 ENDDO
0802 ENDDO
b0e49a1609 Jean* 0803
a4576c7cde Juli* 0804 # endif /* GM_NON_UNITY_DIAGONAL */
f42e64b3e7 Jean* 0805
a4576c7cde Juli* 0806 # ifdef GM_EXTRA_DIAGONAL
2092dbb101 Patr* 0807
a4576c7cde Juli* 0808 # ifdef ALLOW_AUTODIFF_TAMC
2092dbb101 Patr* 0809
a4576c7cde Juli* 0810 # endif /* ALLOW_AUTODIFF_TAMC */
e2259a1942 Jean* 0811 IF ( GM_ExtraDiag ) THEN
ee8a6f4ffb Jean* 0812 DO j =1-OLy +1,sNy +OLy -1
0813 DO i =1-OLx +1,sNx +OLx -1
5b172de0d2 Jean* 0814 Kuz (i ,j ,k ,bi ,bj ) = -gravitySign *
a4576c7cde Juli* 0815 # ifdef GM_READ_K3D_REDI
94a8024bbe Jean* 0816 & ( op5 *( GM_inpK3dRedi (i -1,j ,k ,bi ,bj )
0817 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 0818 # else
f6de204bec Jean* 0819 & ( GM_isopycK *GM_isoFac1d (k )
0820 & *op5 *(GM_isoFac2d (i -1,j ,bi ,bj )+GM_isoFac2d (i ,j ,bi ,bj ))
a4576c7cde Juli* 0821 # endif
0822 # ifdef GM_READ_K3D_GM
94a8024bbe Jean* 0823 & - GM_skewflx *op5 *( GM_inpK3dGM (i -1,j ,k ,bi ,bj )
0824 & + GM_inpK3dGM (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 0825 # else
f6de204bec Jean* 0826 & - GM_skewflx *GM_background_K *GM_bolFac1d (k )
0827 & *op5 *(GM_bolFac2d (i -1,j ,bi ,bj )+GM_bolFac2d (i ,j ,bi ,bj ))
a4576c7cde Juli* 0828 # endif
0829 # ifdef GM_VISBECK_VARIABLE_K
f5509be190 Mart* 0830 & + op5 *(VisbeckK (i -1,j ,bi ,bj )+VisbeckK (i ,j ,bi ,bj ))
0831 & *(GM_isoFac_calcK - GM_skewflx )
a4576c7cde Juli* 0832 # endif
0833 # ifdef GM_GEOM_VARIABLE_K
0834 & - GM_skewflx *op25 *( ( GEOM_K3d (i -1,j , k , bi ,bj )
0835 & + GEOM_K3d ( i , j , k , bi ,bj ) )
0836 & + ( GEOM_K3d (i -1,j ,kp1 ,bi ,bj )
0837 & + GEOM_K3d ( i , j ,kp1 ,bi ,bj ) ) )
0838 # endif
0839 # ifdef ALLOW_GM_LEITH_QG
5b172de0d2 Jean* 0840 & + op5 *( GM_LeithQG_K (i -1,j ,k ,bi ,bj )
f5509be190 Mart* 0841 & + GM_LeithQG_K (i ,j ,k ,bi ,bj ) )
0842 & *(GM_isoFac_calcK - GM_skewflx )
a4576c7cde Juli* 0843 # endif
0844 # if (defined GM_BATES_K3D &&
5b172de0d2 Jean* 0845 & + op5 *( GM_BatesK3d (i -1,j ,k ,bi ,bj )
f5509be190 Mart* 0846 & + GM_BatesK3d (i ,j ,k ,bi ,bj ) )
0847 & *(GM_isoFac_calcK - GM_skewflx )
a4576c7cde Juli* 0848 # endif
f42e64b3e7 Jean* 0849 & )*SlopeX (i ,j )*taperFct (i ,j )
0850 ENDDO
0851 ENDDO
796b5e35f7 Jean* 0852
0853
0854
0855
0856
0857
b0e49a1609 Jean* 0858 ENDIF
a4576c7cde Juli* 0859 # endif /* GM_EXTRA_DIAGONAL */
0c49347dc7 Alis* 0860
a4576c7cde Juli* 0861 # ifdef ALLOW_DIAGNOSTICS
b0e49a1609 Jean* 0862 IF (doDiagRediFlx ) THEN
066e0d5e64 Jean* 0863 km1 = MAX(k -1,1)
0864 DO j =1,sNy
0865 DO i =1,sNx +1
0866
5b172de0d2 Jean* 0867 tmp1k (i ,j ) = -gravitySign *
a4576c7cde Juli* 0868 # ifdef GM_READ_K3D_REDI
5b172de0d2 Jean* 0869 & ( op5 *( GM_inpK3dRedi (i -1,j ,k ,bi ,bj )
0870 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 0871 # else
5b172de0d2 Jean* 0872 & ( GM_isopycK *GM_isoFac1d (k )
3a15bf3a95 Jean* 0873 & *op5 *(GM_isoFac2d (i -1,j ,bi ,bj )+GM_isoFac2d (i ,j ,bi ,bj ))
a4576c7cde Juli* 0874 # endif
0875 # ifdef GM_VISBECK_VARIABLE_K
5b172de0d2 Jean* 0876 & + op5 *(VisbeckK (i -1,j ,bi ,bj )+VisbeckK (i ,j ,bi ,bj ))
f5509be190 Mart* 0877 & *GM_isoFac_calcK
a4576c7cde Juli* 0878 # endif
0879
0880 # ifdef ALLOW_GM_LEITH_QG
5b172de0d2 Jean* 0881 & + op5 *( GM_LeithQG_K (i -1,j ,k ,bi ,bj )
0882 & + GM_LeithQG_K (i ,j ,k ,bi ,bj ) )
f5509be190 Mart* 0883 & *GM_isoFac_calcK
a4576c7cde Juli* 0884 # endif
0885 # if (defined GM_BATES_K3D &&
5b172de0d2 Jean* 0886 & + op5 *(GM_BatesK3d (i -1,j ,k ,bi ,bj )+GM_BatesK3d (i ,j ,k ,bi ,bj ))
f5509be190 Mart* 0887 & *GM_isoFac_calcK
a4576c7cde Juli* 0888 # endif
5b172de0d2 Jean* 0889 & )*SlopeX (i ,j )*taperFct (i ,j )
066e0d5e64 Jean* 0890 ENDDO
0891 ENDDO
0892 DO j =1,sNy
0893 DO i =1,sNx +1
0894
0895 dTdz = (
0896 & +recip_drC (k )*
8233d0ceb9 Jean* 0897 & ( maskC (i -1,j ,km1 ,bi ,bj )*maskC (i -1,j ,k ,bi ,bj )*
066e0d5e64 Jean* 0898 & (theta (i -1,j ,km1 ,bi ,bj )-theta (i -1,j ,k ,bi ,bj ))
8233d0ceb9 Jean* 0899 & +maskC ( i ,j ,km1 ,bi ,bj )*maskC ( i ,j ,k ,bi ,bj )*
066e0d5e64 Jean* 0900 & (theta ( i ,j ,km1 ,bi ,bj )-theta ( i ,j ,k ,bi ,bj ))
0901 & )
0902 & +recip_drC (kp1 )*
8233d0ceb9 Jean* 0903 & ( maskC (i -1,j ,k ,bi ,bj )*maskC (i -1,j ,kp1 ,bi ,bj )*
066e0d5e64 Jean* 0904 & (theta (i -1,j ,k ,bi ,bj )-theta (i -1,j ,kp1 ,bi ,bj ))
8233d0ceb9 Jean* 0905 & +maskC ( i ,j ,k ,bi ,bj )*maskC ( i ,j ,kp1 ,bi ,bj )*
066e0d5e64 Jean* 0906 & (theta ( i ,j ,k ,bi ,bj )-theta ( i ,j ,kp1 ,bi ,bj ))
0907 & ) ) * 0.25 _d 0
a67797e4f0 Jean* 0908 tmp1k (i ,j ) = dyG (i ,j ,bi ,bj ) * deepFacC (k )
0909 & * drF (k ) * _hFacW (i ,j ,k ,bi ,bj )
066e0d5e64 Jean* 0910 & * tmp1k (i ,j ) * dTdz
0911 ENDDO
0912 ENDDO
0913 CALL DIAGNOSTICS_FILL (tmp1k , 'GM_KuzTz' , k ,1,2,bi ,bj ,myThid )
b0e49a1609 Jean* 0914 ENDIF
a4576c7cde Juli* 0915 # endif /* ALLOW_DIAGNOSTICS */
066e0d5e64 Jean* 0916
e2259a1942 Jean* 0917
0918 ENDDO
0919
0920
0921
0922
a4576c7cde Juli* 0923 # ifdef ALLOW_KPP
e2259a1942 Jean* 0924 IF ( useKPP ) THEN
ee8a6f4ffb Jean* 0925 DO j =2-OLy ,sNy +OLy
0926 DO i =1-OLx ,sNx +OLx
e2259a1942 Jean* 0927 locMixLayer (i ,j ) = ( KPPhbl (i ,j -1,bi ,bj )
0928 & + KPPhbl (i , j ,bi ,bj ) )*op5
0929 ENDDO
0930 ENDDO
0931 ELSE
a4576c7cde Juli* 0932 # else
e2259a1942 Jean* 0933 IF ( .TRUE. ) THEN
a4576c7cde Juli* 0934 # endif
ee8a6f4ffb Jean* 0935 DO j =2-OLy ,sNy +OLy
0936 DO i =1-OLx ,sNx +OLx
e2259a1942 Jean* 0937 locMixLayer (i ,j ) = ( hMixLayer (i ,j -1,bi ,bj )
0938 & + hMixLayer (i , j ,bi ,bj ) )*op5
0939 ENDDO
0940 ENDDO
0941 ENDIF
ee8a6f4ffb Jean* 0942 DO j =1-OLy ,sNy +OLy
0943 DO i =1-OLx ,sNx +OLx
e2259a1942 Jean* 0944 hTransLay (i ,j ) = 0.
0945 baseSlope (i ,j ) = 0.
0946 recipLambda (i ,j )= 0.
0947 ENDDO
0948 ENDDO
ee8a6f4ffb Jean* 0949 DO j =2-OLy ,sNy +OLy
0950 DO i =1-OLx ,sNx +OLx
e2259a1942 Jean* 0951 hTransLay (i ,j ) = MAX( R_low (i ,j -1,bi ,bj ), R_low (i ,j ,bi ,bj ) )
0952 ENDDO
0953 ENDDO
0954
0c49347dc7 Alis* 0955
e2259a1942 Jean* 0956 DO k =Nr ,1,-1
0957 kp1 = MIN(Nr ,k +1)
0958 maskp1 = 1. _d 0
0959 IF (k .GE. Nr ) maskp1 = 0. _d 0
a4576c7cde Juli* 0960 # ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart* 0961 kkey = k + (tkey -1)*Nr
a4576c7cde Juli* 0962 # endif
e2259a1942 Jean* 0963
ee8a6f4ffb Jean* 0964 DO j =1-OLy +1,sNy +OLy -1
0965 DO i =1-OLx +1,sNx +OLx -1
b0e49a1609 Jean* 0966 dSigmaDx (i ,j )=op25 *( sigmaX (i , j ,k ) +sigmaX (i +1, j ,k )
0967 & +sigmaX (i ,j -1,k ) +sigmaX (i +1,j -1,k )
0968 & )*_maskS (i ,j ,k ,bi ,bj )
0969 dSigmaDy (i ,j )=sigmaY (i ,j ,k )
0970 & *_maskS (i ,j ,k ,bi ,bj )
0971 dSigmaDr (i ,j )=op25 *( sigmaR (i ,j -1, k )+sigmaR (i ,j , k )
0972 & +(sigmaR (i ,j -1,kp1 )+sigmaR (i ,j ,kp1 ))*maskp1
5b172de0d2 Jean* 0973 & )*_maskS (i ,j ,k ,bi ,bj )*gravitySign
b0e49a1609 Jean* 0974 ENDDO
0c49347dc7 Alis* 0975 ENDDO
0976
a4576c7cde Juli* 0977 # ifdef ALLOW_AUTODIFF_TAMC
2092dbb101 Patr* 0978
0979
5755dbe390 Patr* 0980
a4576c7cde Juli* 0981 # ifndef GM_EXCLUDE_FM07_TAP
5755dbe390 Patr* 0982
0983
0984
a4576c7cde Juli* 0985 # endif
0986 # endif /* ALLOW_AUTODIFF_TAMC */
2092dbb101 Patr* 0987
5b172de0d2 Jean* 0988
0989 IF ( usingZcoords ) THEN
0990 rDepth = rF (1) - rC (k )
0991 ELSE
0992 rDepth = rC (k ) - rF (Nr +1)
0993 ENDIF
0c49347dc7 Alis* 0994
b0e49a1609 Jean* 0995 CALL GMREDI_SLOPE_LIMIT (
549d1a8d8c Jean* 0996 O SlopeX , SlopeY ,
e9fd580bc4 Jean* 0997 O SlopeSqr , taperFct ,
e2259a1942 Jean* 0998 U hTransLay , baseSlope , recipLambda ,
549d1a8d8c Jean* 0999 U dSigmaDr ,
1000 I dSigmaDx , dSigmaDy ,
5b172de0d2 Jean* 1001 I ldd97_LrhoS , locMixLayer , rDepth , rC ,
e2259a1942 Jean* 1002 I kLow_S ,
5b172de0d2 Jean* 1003 I 2, k , bi , bj , myTime , myIter , myThid )
0c49347dc7 Alis* 1004
a4576c7cde Juli* 1005 # ifdef ALLOW_AUTODIFF_TAMC
361543e926 Jean* 1006
a4576c7cde Juli* 1007 # endif /* ALLOW_AUTODIFF_TAMC */
9cb619cfcd Patr* 1008
a4576c7cde Juli* 1009 # ifdef GM_NON_UNITY_DIAGONAL
b0e49a1609 Jean* 1010
ee8a6f4ffb Jean* 1011 DO j =1-OLy +1,sNy +OLy -1
1012 DO i =1-OLx +1,sNx +OLx -1
f42e64b3e7 Jean* 1013 Kvy (i ,j ,k ,bi ,bj ) =
a4576c7cde Juli* 1014 # ifdef GM_READ_K3D_REDI
94a8024bbe Jean* 1015 & ( op5 *( GM_inpK3dRedi (i ,j -1,k ,bi ,bj )
1016 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 1017 # else
f6de204bec Jean* 1018 & ( GM_isopycK *GM_isoFac1d (k )
1019 & *op5 *(GM_isoFac2d (i ,j -1,bi ,bj )+GM_isoFac2d (i ,j ,bi ,bj ))
a4576c7cde Juli* 1020 # endif
1021 # ifdef GM_VISBECK_VARIABLE_K
5b172de0d2 Jean* 1022 & + op5 *(VisbeckK (i ,j -1,bi ,bj )+VisbeckK (i ,j ,bi ,bj ))
f5509be190 Mart* 1023 & *GM_isoFac_calcK
a4576c7cde Juli* 1024 # endif
1025
1026 # ifdef ALLOW_GM_LEITH_QG
5b172de0d2 Jean* 1027 & + op5 *(GM_LeithQG_K (i ,j -1,k ,bi ,bj )+GM_LeithQG_K (i ,j ,k ,bi ,bj ))
f5509be190 Mart* 1028 & *GM_isoFac_calcK
a4576c7cde Juli* 1029 # endif
1030 # if (defined GM_BATES_K3D &&
5b172de0d2 Jean* 1031 & + op5 *(GM_BatesK3d (i ,j -1,k ,bi ,bj )+GM_BatesK3d (i ,j ,k ,bi ,bj ))
f5509be190 Mart* 1032 & *GM_isoFac_calcK
a4576c7cde Juli* 1033 # endif
e2259a1942 Jean* 1034 & )*taperFct (i ,j )
b6b11b9b2f Patr* 1035 ENDDO
1036 ENDDO
a4576c7cde Juli* 1037 # if ( defined ALLOW_AUTODIFF_TAMC && defined GM_EXCLUDE_CLIPPING )
2092dbb101 Patr* 1038
a4576c7cde Juli* 1039 # endif
ee8a6f4ffb Jean* 1040 DO j =1-OLy +1,sNy +OLy -1
1041 DO i =1-OLx +1,sNx +OLx -1
f42e64b3e7 Jean* 1042 Kvy (i ,j ,k ,bi ,bj ) = MAX( Kvy (i ,j ,k ,bi ,bj ), GM_Kmin_horiz )
1043 ENDDO
1044 ENDDO
b0e49a1609 Jean* 1045
a4576c7cde Juli* 1046 # endif /* GM_NON_UNITY_DIAGONAL */
f42e64b3e7 Jean* 1047
a4576c7cde Juli* 1048 # ifdef GM_EXTRA_DIAGONAL
2092dbb101 Patr* 1049
a4576c7cde Juli* 1050 # ifdef ALLOW_AUTODIFF_TAMC
2092dbb101 Patr* 1051
a4576c7cde Juli* 1052 # endif /* ALLOW_AUTODIFF_TAMC */
e2259a1942 Jean* 1053 IF ( GM_ExtraDiag ) THEN
ee8a6f4ffb Jean* 1054 DO j =1-OLy +1,sNy +OLy -1
1055 DO i =1-OLx +1,sNx +OLx -1
5b172de0d2 Jean* 1056 Kvz (i ,j ,k ,bi ,bj ) = -gravitySign *
a4576c7cde Juli* 1057 # ifdef GM_READ_K3D_REDI
94a8024bbe Jean* 1058 & ( op5 *( GM_inpK3dRedi (i ,j -1,k ,bi ,bj )
1059 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 1060 # else
f6de204bec Jean* 1061 & ( GM_isopycK *GM_isoFac1d (k )
1062 & *op5 *(GM_isoFac2d (i ,j -1,bi ,bj )+GM_isoFac2d (i ,j ,bi ,bj ))
a4576c7cde Juli* 1063 # endif
1064 # ifdef GM_READ_K3D_GM
94a8024bbe Jean* 1065 & - GM_skewflx *op5 *( GM_inpK3dGM (i ,j -1,k ,bi ,bj )
1066 & + GM_inpK3dGM (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 1067 # else
f6de204bec Jean* 1068 & - GM_skewflx *GM_background_K *GM_bolFac1d (k )
1069 & *op5 *(GM_bolFac2d (i ,j -1,bi ,bj )+GM_bolFac2d (i ,j ,bi ,bj ))
a4576c7cde Juli* 1070 # endif
1071 # ifdef GM_VISBECK_VARIABLE_K
f5509be190 Mart* 1072 & + op5 *(VisbeckK (i ,j -1,bi ,bj )+VisbeckK (i ,j ,bi ,bj ))
1073 & *(GM_isoFac_calcK - GM_skewflx )
a4576c7cde Juli* 1074 # endif
1075 # ifdef GM_GEOM_VARIABLE_K
1076 & - GM_skewflx *op25 *( ( GEOM_K3d (i ,j -1, k , bi ,bj )
1077 & + GEOM_K3d (i , j , k , bi ,bj ) )
1078 & + ( GEOM_K3d (i ,j -1,kp1 ,bi ,bj )
1079 & + GEOM_K3d (i , j , kp1 ,bi ,bj ) ) )
1080 # endif
1081 # ifdef ALLOW_GM_LEITH_QG
5b172de0d2 Jean* 1082 & + op5 *( GM_LeithQG_K (i ,j -1,k ,bi ,bj )
f5509be190 Mart* 1083 & + GM_LeithQG_K (i ,j ,k ,bi ,bj ) )
1084 & *(GM_isoFac_calcK - GM_skewflx )
a4576c7cde Juli* 1085 # endif
1086 # if (defined GM_BATES_K3D &&
5b172de0d2 Jean* 1087 & + op5 *( GM_BatesK3d (i ,j -1,k ,bi ,bj )
f5509be190 Mart* 1088 & + GM_BatesK3d (i ,j ,k ,bi ,bj ) )
1089 & *(GM_isoFac_calcK - GM_skewflx )
a4576c7cde Juli* 1090 # endif
f42e64b3e7 Jean* 1091 & )*SlopeY (i ,j )*taperFct (i ,j )
1092 ENDDO
1093 ENDDO
796b5e35f7 Jean* 1094
1095
1096
1097
1098
1099
b0e49a1609 Jean* 1100 ENDIF
a4576c7cde Juli* 1101 # endif /* GM_EXTRA_DIAGONAL */
f42e64b3e7 Jean* 1102
a4576c7cde Juli* 1103 # ifdef ALLOW_DIAGNOSTICS
b0e49a1609 Jean* 1104 IF (doDiagRediFlx ) THEN
81880fdab4 Davi* 1105 km1 = MAX(k -1,1)
066e0d5e64 Jean* 1106 DO j =1,sNy +1
1107 DO i =1,sNx
1108
5b172de0d2 Jean* 1109 tmp1k (i ,j ) = -gravitySign *
a4576c7cde Juli* 1110 # ifdef GM_READ_K3D_REDI
5b172de0d2 Jean* 1111 & ( op5 *( GM_inpK3dRedi (i ,j -1,k ,bi ,bj )
1112 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 1113 # else
5b172de0d2 Jean* 1114 & ( GM_isopycK *GM_isoFac1d (k )
3a15bf3a95 Jean* 1115 & *op5 *(GM_isoFac2d (i ,j -1,bi ,bj )+GM_isoFac2d (i ,j ,bi ,bj ))
a4576c7cde Juli* 1116 # endif
1117 # ifdef GM_VISBECK_VARIABLE_K
5b172de0d2 Jean* 1118 & + op5 *(VisbeckK (i ,j -1,bi ,bj )+VisbeckK (i ,j ,bi ,bj ))
f5509be190 Mart* 1119 & *GM_isoFac_calcK
a4576c7cde Juli* 1120 # endif
1121
1122 # ifdef ALLOW_GM_LEITH_QG
5b172de0d2 Jean* 1123 & + op5 *( GM_LeithQG_K (i ,j -1,k ,bi ,bj )
1124 & + GM_LeithQG_K (i ,j ,k ,bi ,bj ) )
f5509be190 Mart* 1125 & *GM_isoFac_calcK
a4576c7cde Juli* 1126 # endif
1127 # if (defined GM_BATES_K3D &&
5b172de0d2 Jean* 1128 & + op5 *(GM_BatesK3d (i ,j -1,k ,bi ,bj )+GM_BatesK3d (i ,j ,k ,bi ,bj ))
f5509be190 Mart* 1129 & *GM_isoFac_calcK
a4576c7cde Juli* 1130 # endif
5b172de0d2 Jean* 1131 & )*SlopeY (i ,j )*taperFct (i ,j )
066e0d5e64 Jean* 1132 ENDDO
1133 ENDDO
1134 DO j =1,sNy +1
1135 DO i =1,sNx
1136
1137 dTdz = (
1138 & +recip_drC (k )*
8233d0ceb9 Jean* 1139 & ( maskC (i ,j -1,km1 ,bi ,bj )*maskC (i ,j -1,k ,bi ,bj )*
066e0d5e64 Jean* 1140 & (theta (i ,j -1,km1 ,bi ,bj )-theta (i ,j -1,k ,bi ,bj ))
8233d0ceb9 Jean* 1141 & +maskC (i , j ,km1 ,bi ,bj )*maskC (i , j ,k ,bi ,bj )*
066e0d5e64 Jean* 1142 & (theta (i , j ,km1 ,bi ,bj )-theta (i , j ,k ,bi ,bj ))
1143 & )
1144 & +recip_drC (kp1 )*
8233d0ceb9 Jean* 1145 & ( maskC (i ,j -1,kp1 ,bi ,bj )*maskC (i ,j -1,k ,bi ,bj )*
066e0d5e64 Jean* 1146 & (theta (i ,j -1,k ,bi ,bj )-theta (i ,j -1,kp1 ,bi ,bj ))
8233d0ceb9 Jean* 1147 & +maskC (i , j ,kp1 ,bi ,bj )*maskC (i , j ,k ,bi ,bj )*
066e0d5e64 Jean* 1148 & (theta (i , j ,k ,bi ,bj )-theta (i , j ,kp1 ,bi ,bj ))
1149 & ) ) * 0.25 _d 0
a67797e4f0 Jean* 1150 tmp1k (i ,j ) = dxG (i ,j ,bi ,bj ) * deepFacC (k )
1151 & * drF (k ) * _hFacS (i ,j ,k ,bi ,bj )
066e0d5e64 Jean* 1152 & * tmp1k (i ,j ) * dTdz
1153 ENDDO
1154 ENDDO
1155 CALL DIAGNOSTICS_FILL (tmp1k , 'GM_KvzTz' , k ,1,2,bi ,bj ,myThid )
b0e49a1609 Jean* 1156 ENDIF
a4576c7cde Juli* 1157 # endif /* ALLOW_DIAGNOSTICS */
066e0d5e64 Jean* 1158
e2259a1942 Jean* 1159
f42e64b3e7 Jean* 1160 ENDDO
0c49347dc7 Alis* 1161
e2259a1942 Jean* 1162 #endif /* GM_NON_UNITY_DIAGONAL || GM_EXTRA_DIAGONAL */
1163
796b5e35f7 Jean* 1164 #ifndef GM_NON_UNITY_DIAGONAL
f5509be190 Mart* 1165
1166
796b5e35f7 Jean* 1167 DO k =1,Nr
1168 DO j =1-OLy +1,sNy +OLy -1
1169 DO i =1-OLx +1,sNx +OLx -1
1170 Kux (i ,j ,k ,bi ,bj ) = (
a4576c7cde Juli* 1171 # ifdef GM_READ_K3D_REDI
94a8024bbe Jean* 1172 & op5 *( GM_inpK3dRedi (i -1,j ,k ,bi ,bj )
1173 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 1174 # else
796b5e35f7 Jean* 1175 & GM_isopycK
a4576c7cde Juli* 1176 # endif
796b5e35f7 Jean* 1177 & )
1178 ENDDO
1179 ENDDO
1180 DO j =1-OLy +1,sNy +OLy -1
1181 DO i =1-OLx +1,sNx +OLx -1
1182 Kvy (i ,j ,k ,bi ,bj ) = (
a4576c7cde Juli* 1183 # ifdef GM_READ_K3D_REDI
94a8024bbe Jean* 1184 & op5 *( GM_inpK3dRedi (i ,j -1,k ,bi ,bj )
1185 & + GM_inpK3dRedi (i ,j ,k ,bi ,bj ) )
a4576c7cde Juli* 1186 # else
796b5e35f7 Jean* 1187 & GM_isopycK
a4576c7cde Juli* 1188 # endif
796b5e35f7 Jean* 1189 & )
1190 ENDDO
1191 ENDDO
1192 ENDDO
1193 #endif /* ndef GM_NON_UNITY_DIAGONAL */
1194
549d1a8d8c Jean* 1195 #ifdef ALLOW_TIMEAVE
1196
5b172de0d2 Jean* 1197 IF ( taveFreq .GT. zeroRL ) THEN
549d1a8d8c Jean* 1198
1199 CALL TIMEAVE_CUMULATE ( GM_Kwx_T , Kwx , Nr ,
e25acdb1f2 Jean* 1200 & deltaTClock , bi , bj , myThid )
549d1a8d8c Jean* 1201 CALL TIMEAVE_CUMULATE ( GM_Kwy_T , Kwy , Nr ,
e25acdb1f2 Jean* 1202 & deltaTClock , bi , bj , myThid )
549d1a8d8c Jean* 1203 CALL TIMEAVE_CUMULATE ( GM_Kwz_T , Kwz , Nr ,
e25acdb1f2 Jean* 1204 & deltaTClock , bi , bj , myThid )
a4576c7cde Juli* 1205 # ifdef GM_VISBECK_VARIABLE_K
549d1a8d8c Jean* 1206 IF ( GM_Visbeck_alpha .NE. 0. ) THEN
1207 CALL TIMEAVE_CUMULATE ( Visbeck_K_T , VisbeckK , 1,
e25acdb1f2 Jean* 1208 & deltaTClock , bi , bj , myThid )
549d1a8d8c Jean* 1209 ENDIF
a4576c7cde Juli* 1210 # endif
1211 # ifdef GM_BOLUS_ADVEC
549d1a8d8c Jean* 1212 IF ( GM_AdvForm ) THEN
1213 CALL TIMEAVE_CUMULATE ( GM_PsiXtave , GM_PsiX , Nr ,
e25acdb1f2 Jean* 1214 & deltaTClock , bi , bj , myThid )
549d1a8d8c Jean* 1215 CALL TIMEAVE_CUMULATE ( GM_PsiYtave , GM_PsiY , Nr ,
e25acdb1f2 Jean* 1216 & deltaTClock , bi , bj , myThid )
549d1a8d8c Jean* 1217 ENDIF
a4576c7cde Juli* 1218 # endif
e25acdb1f2 Jean* 1219 GM_timeAve (bi ,bj ) = GM_timeAve (bi ,bj )+deltaTClock
549d1a8d8c Jean* 1220
1221 ENDIF
1222 #endif /* ALLOW_TIMEAVE */
1223
d29d98918f Jean* 1224 #ifdef ALLOW_DIAGNOSTICS
1225 IF ( useDiagnostics ) THEN
7c23b426b4 Jean* 1226 CALL GMREDI_DIAGNOSTICS_FILL (bi ,bj ,myThid )
d29d98918f Jean* 1227 ENDIF
1228 #endif /* ALLOW_DIAGNOSTICS */
1229
0c49347dc7 Alis* 1230 #endif /* ALLOW_GMREDI */
1231
1232 RETURN
1233 END
b58589f5c2 Patr* 1234
8d8488bf10 Jean* 1235
b58589f5c2 Patr* 1236
3a15bf3a95 Jean* 1237
1238
1239
b58589f5c2 Patr* 1240 SUBROUTINE GMREDI_CALC_TENSOR_DUMMY (
e2259a1942 Jean* 1241 I iMin , iMax , jMin , jMax ,
b58589f5c2 Patr* 1242 I sigmaX , sigmaY , sigmaR ,
e2259a1942 Jean* 1243 I bi , bj , myTime , myIter , myThid )
3a15bf3a95 Jean* 1244
1245
1246
1247
1248
1249
1250
1251
1252
b58589f5c2 Patr* 1253 IMPLICIT NONE
1254
1255
1256 #include "SIZE.h "
1257 #include "EEPARAMS.h "
1258 #include "GMREDI.h "
1259
3a15bf3a95 Jean* 1260
ee8a6f4ffb Jean* 1261 _RL sigmaX (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,Nr )
1262 _RL sigmaY (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,Nr )
1263 _RL sigmaR (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,Nr )
e2259a1942 Jean* 1264 INTEGER iMin ,iMax ,jMin ,jMax
1265 INTEGER bi , bj
1266 _RL myTime
1267 INTEGER myIter
b58589f5c2 Patr* 1268 INTEGER myThid
3a15bf3a95 Jean* 1269
b58589f5c2 Patr* 1270
1271 #ifdef ALLOW_GMREDI
3a15bf3a95 Jean* 1272
e2259a1942 Jean* 1273 INTEGER i , j , k
1274
f42e64b3e7 Jean* 1275 DO k =1,Nr
ee8a6f4ffb Jean* 1276 DO j =1-OLy +1,sNy +OLy -1
1277 DO i =1-OLx +1,sNx +OLx -1
796b5e35f7 Jean* 1278 Kwx (i ,j ,k ,bi ,bj ) = 0. _d 0
1279 Kwy (i ,j ,k ,bi ,bj ) = 0. _d 0
1280 Kwz (i ,j ,k ,bi ,bj ) = 0. _d 0
1281 Kux (i ,j ,k ,bi ,bj ) = 0. _d 0
1282 Kvy (i ,j ,k ,bi ,bj ) = 0. _d 0
1283 # ifdef GM_EXTRA_DIAGONAL
1284 Kuz (i ,j ,k ,bi ,bj ) = 0. _d 0
1285 Kvz (i ,j ,k ,bi ,bj ) = 0. _d 0
1286 # endif
f42e64b3e7 Jean* 1287 ENDDO
b58589f5c2 Patr* 1288 ENDDO
1289 ENDDO
1290 #endif /* ALLOW_GMREDI */
1291
f42e64b3e7 Jean* 1292 RETURN
1293 END