File indexing completed on 2024-02-01 06:10:44 UTC
view on githubraw file Latest commit 427e24e1 on 2024-01-31 16:50:14 UTC
71207ba845 Alis*0001
0002
0003
cfdc763dc5 Alis*0004
71207ba845 Alis*0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
6d54cf9ca1 Ed H*0025 #include "MOM_FLUXFORM_OPTIONS.h"
88b07ffa37 Jean*0026 #ifdef ALLOW_AUTODIFF
0027 # include "AUTODIFF_OPTIONS.h"
0028 #endif
f0501c53d1 Jean*0029 #ifdef ALLOW_MOM_COMMON
0030 # include "MOM_COMMON_OPTIONS.h"
0031 #endif
9293d3c672 Hajo*0032 #ifdef ALLOW_GGL90
0033 # include "GGL90_OPTIONS.h"
0034 #endif
cda1c18f72 Jean*0035
0036 #undef OLD_UV_GEOM
aea29c8517 Alis*0037
71207ba845 Alis*0038
0039
0040
0041
9496c6c9ef Jean*0042 SUBROUTINE MOM_FLUXFORM(
07e17fa184 Jean*0043 I bi,bj,k,iMin,iMax,jMin,jMax,
1833b564cb Jean*0044 I kappaRU, kappaRV,
07e17fa184 Jean*0045 U fVerUkm, fVerVkm,
0046 O fVerUkp, fVerVkp,
722a76e285 Jean*0047 O guDiss, gvDiss,
07e17fa184 Jean*0048 I myTime, myIter, myThid )
71207ba845 Alis*0049
0050
0051
eaba2fd266 Jean*0052
aea29c8517 Alis*0053
71207ba845 Alis*0054
aea29c8517 Alis*0055
71207ba845 Alis*0056 IMPLICIT NONE
aea29c8517 Alis*0057 #include "SIZE.h"
0058 #include "EEPARAMS.h"
0059 #include "PARAMS.h"
0060 #include "GRID.h"
f0501c53d1 Jean*0061 #include "DYNVARS.h"
0062 #include "FFIELDS.h"
aea29c8517 Alis*0063 #include "SURFACE.h"
f0501c53d1 Jean*0064 #ifdef ALLOW_MOM_COMMON
0065 # include "MOM_VISC.h"
0066 #endif
9293d3c672 Hajo*0067 #if ( defined ALLOW_GGL90 && defined ALLOW_GGL90_LANGMUIR )
0068 # include "GGL90.h"
0069 #endif
88b07ffa37 Jean*0070 #ifdef ALLOW_AUTODIFF
7c50f07931 Mart*0071 # ifdef ALLOW_AUTODIFF_TAMC
0072 # include "tamc.h"
0073 # endif
aa2d1573fa Patr*0074 # include "MOM_FLUXFORM.h"
0075 #endif
aea29c8517 Alis*0076
71207ba845 Alis*0077
07e17fa184 Jean*0078
0079
0080
1833b564cb Jean*0081
0082
07e17fa184 Jean*0083
0084
0085
0086
722a76e285 Jean*0087
0088
bd2e80b12f Jean*0089
71207ba845 Alis*0090
07e17fa184 Jean*0091
0092 INTEGER bi,bj,k
0093 INTEGER iMin,iMax,jMin,jMax
1833b564cb Jean*0094 _RL kappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1)
0095 _RL kappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1)
07e17fa184 Jean*0096 _RL fVerUkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0097 _RL fVerVkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0098 _RL fVerUkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0099 _RL fVerVkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
722a76e285 Jean*0100 _RL guDiss(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0101 _RL gvDiss(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
bd2e80b12f Jean*0102 _RL myTime
3a279374db Alis*0103 INTEGER myIter
0104 INTEGER myThid
aea29c8517 Alis*0105
71207ba845 Alis*0106
0107
0108
0109
0110
0111
0112
9293d3c672 Hajo*0113
71207ba845 Alis*0114
0115
0116
07e17fa184 Jean*0117
71207ba845 Alis*0118 INTEGER i,j
9496c6c9ef Jean*0119 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0120
0121 INTEGER kkey
aa2d1573fa Patr*0122 #endif
9293d3c672 Hajo*0123 _RL vF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
71207ba845 Alis*0124 _RL v4F(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
9293d3c672 Hajo*0125 _RL uCf(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0126 _RL vCf(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0127 _RL mT(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
71207ba845 Alis*0128 _RL fZon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0129 _RL fMer(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
722a76e285 Jean*0130 _RL fVrUp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0131 _RL fVrDw(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
4d2713b160 Jean*0132
9496c6c9ef Jean*0133
0134
aea29c8517 Alis*0135
4d2713b160 Jean*0136
aea29c8517 Alis*0137
0138
4d2713b160 Jean*0139
722a76e285 Jean*0140
aea29c8517 Alis*0141 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
fd362e9f7c Jean*0142 _RS h0FacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
aea29c8517 Alis*0143 _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
9293d3c672 Hajo*0144 _RS xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0145 _RS yA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0146 _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0147 _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0148 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0149 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
bd2e80b12f Jean*0150 _RL rTransU(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0151 _RL rTransV(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
9293d3c672 Hajo*0152 #if ( defined ALLOW_GGL90 && defined ALLOW_GGL90_LANGMUIR )
0153 _RL uRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0154 _RL vRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0155 #endif
79074ef66b Jean*0156 _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0157 _RL cDrag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
05b9f17ae6 Bayl*0158 _RL viscAh_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0159 _RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0160 _RL viscA4_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0161 _RL viscA4_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
79074ef66b Jean*0162 _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0163 _RL hDiv(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0164 _RL strain(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0165 _RL tension(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
f59d76b0dd Ed D*0166 _RL stretching(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
06244a5e4f Jean*0167 #ifdef ALLOW_LEITH_QG
2ff762fc08 Jean*0168 _RL Nsquare(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
06244a5e4f Jean*0169 #endif
aea29c8517 Alis*0170 _RL uDudxFac
0171 _RL AhDudxFac
0172 _RL vDudyFac
0173 _RL AhDudyFac
0174 _RL rVelDudrFac
0175 _RL ArDudrFac
0176 _RL fuFac
0177 _RL mtFacU
4d2713b160 Jean*0178 _RL mtNHFacU
aea29c8517 Alis*0179 _RL uDvdxFac
0180 _RL AhDvdxFac
0181 _RL vDvdyFac
0182 _RL AhDvdyFac
0183 _RL rVelDvdrFac
0184 _RL ArDvdrFac
0185 _RL fvFac
0186 _RL mtFacV
4d2713b160 Jean*0187 _RL mtNHFacV
ea2dd4993a Jean*0188 _RL sideMaskFac
427e24e121 Jean*0189 LOGICAL bottomDragTerms, metricTerms
71207ba845 Alis*0190
229b6d70e7 Jean*0191 #ifdef MOM_BOUNDARY_CONSERVE
0192 COMMON / MOM_FLUXFORM_LOCAL / uBnd, vBnd
0193 _RL uBnd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0194 _RL vBnd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0195 #endif /* MOM_BOUNDARY_CONSERVE */
aea29c8517 Alis*0196
aa2d1573fa Patr*0197 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0198 kkey = bi + (bj-1)*nSx + (ikey_dynamics-1)*nSx*nSy
0199 kkey = k + (kkey-1)*Nr
aa2d1573fa Patr*0200 #endif /* ALLOW_AUTODIFF_TAMC */
0201
aea29c8517 Alis*0202
722a76e285 Jean*0203 DO j=1-OLy,sNy+OLy
0204 DO i=1-OLx,sNx+OLx
aea29c8517 Alis*0205 vF(i,j) = 0.
0206 v4F(i,j) = 0.
9293d3c672 Hajo*0207 uCf(i,j) = 0.
0208 vCf(i,j) = 0.
aea29c8517 Alis*0209 mT(i,j) = 0.
0210 fZon(i,j) = 0.
0211 fMer(i,j) = 0.
722a76e285 Jean*0212 fVrUp(i,j)= 0.
0213 fVrDw(i,j)= 0.
0214 rTransU(i,j)= 0.
0215 rTransV(i,j)= 0.
54ecf2c8fe Jean*0216
cc254a4876 Patr*0217 hDiv(i,j) = 0.
54ecf2c8fe Jean*0218 vort3(i,j) = 0.
7c7b0b4a46 Alis*0219 strain(i,j) = 0.
722a76e285 Jean*0220 tension(i,j)= 0.
f59d76b0dd Ed D*0221 stretching(i,j) = 0.
06244a5e4f Jean*0222 #ifdef ALLOW_LEITH_QG
0223 Nsquare(i,j) = 0.
0224 #endif
722a76e285 Jean*0225 guDiss(i,j) = 0.
0226 gvDiss(i,j) = 0.
9293d3c672 Hajo*0227 #if ( defined ALLOW_GGL90 && defined ALLOW_GGL90_LANGMUIR )
0228
0229
0230 #endif
aea29c8517 Alis*0231 ENDDO
0232 ENDDO
0233
0234
0235
0236 uDudxFac = afFacMom*1.
0237 AhDudxFac = vfFacMom*1.
0238 vDudyFac = afFacMom*1.
0239 AhDudyFac = vfFacMom*1.
0240 rVelDudrFac = afFacMom*1.
0241 ArDudrFac = vfFacMom*1.
4d2713b160 Jean*0242 mtFacU = mtFacMom*1.
0243 mtNHFacU = 1.
aea29c8517 Alis*0244 fuFac = cfFacMom*1.
0245
0246 uDvdxFac = afFacMom*1.
0247 AhDvdxFac = vfFacMom*1.
0248 vDvdyFac = afFacMom*1.
0249 AhDvdyFac = vfFacMom*1.
0250 rVelDvdrFac = afFacMom*1.
0251 ArDvdrFac = vfFacMom*1.
4d2713b160 Jean*0252 mtFacV = mtFacMom*1.
0253 mtNHFacV = 1.
aea29c8517 Alis*0254 fvFac = cfFacMom*1.
722a76e285 Jean*0255
427e24e121 Jean*0256 metricTerms = selectMetricTerms.GE.1
722a76e285 Jean*0257 IF (implicitViscosity) THEN
0258 ArDudrFac = 0.
0259 ArDvdrFac = 0.
0260 ENDIF
aea29c8517 Alis*0261
ea2dd4993a Jean*0262
0263
0264 IF ( no_slip_sides ) THEN
0265 sideMaskFac = sideDragFactor
0266 ELSE
0267 sideMaskFac = 0. _d 0
0268 ENDIF
0269
99731c717f Jean*0270 IF ( selectImplicitDrag.EQ.0 .AND.
0271 & ( no_slip_bottom
ca594b8231 Jean*0272 & .OR. selectBotDragQuadr.GE.0
99731c717f Jean*0273 & .OR. bottomDragLinear.NE.0. ) ) THEN
aea29c8517 Alis*0274 bottomDragTerms=.TRUE.
0275 ELSE
0276 bottomDragTerms=.FALSE.
0277 ENDIF
0278
0279
fd362e9f7c Jean*0280 CALL MOM_CALC_HFACZ( bi,bj,k,hFacZ,r_hFacZ,myThid )
7448700841 Mart*0281 #ifdef ALLOW_AUTODIFF_TAMC
0282
0283 #endif
aea29c8517 Alis*0284
0285
0286
0287 DO j=1-OLy,sNy+OLy
0288 DO i=1-OLx,sNx+OLx
eaba2fd266 Jean*0289 xA(i,j) = _dyG(i,j,bi,bj)*deepFacC(k)
0290 & *drF(k)*_hFacW(i,j,k,bi,bj)
0291 yA(i,j) = _dxG(i,j,bi,bj)*deepFacC(k)
0292 & *drF(k)*_hFacS(i,j,k,bi,bj)
fd362e9f7c Jean*0293 h0FacZ(i,j) = hFacZ(i,j)
aea29c8517 Alis*0294 ENDDO
0295 ENDDO
fd362e9f7c Jean*0296 #ifdef NONLIN_FRSURF
0297 IF ( momViscosity .AND. no_slip_sides
0298 & .AND. nonlinFreeSurf.GT.0 ) THEN
0299 DO j=2-OLy,sNy+OLy
0300 DO i=2-OLx,sNx+OLx
0301 h0FacZ(i,j) = MIN(
0302 & MIN( h0FacW(i,j,k,bi,bj), h0FacW(i,j-1,k,bi,bj) ),
0303 & MIN( h0FacS(i,j,k,bi,bj), h0FacS(i-1,j,k,bi,bj) ) )
0304 ENDDO
0305 ENDDO
7448700841 Mart*0306 ENDIF
0307 # ifdef ALLOW_AUTODIFF_TAMC
0308
0309 # endif
fd362e9f7c Jean*0310 #endif /* NONLIN_FRSURF */
aea29c8517 Alis*0311
0312
0313 DO j=1-OLy,sNy+OLy
0314 DO i=1-OLx,sNx+OLx
0315 uFld(i,j) = uVel(i,j,k,bi,bj)
0316 vFld(i,j) = vVel(i,j,k,bi,bj)
0317 ENDDO
0318 ENDDO
0319
0320
eaba2fd266 Jean*0321
aea29c8517 Alis*0322 DO j=1-OLy,sNy+OLy
0323 DO i=1-OLx,sNx+OLx
eaba2fd266 Jean*0324 uTrans(i,j) = uFld(i,j)*xA(i,j)*rhoFacC(k)
0325 vTrans(i,j) = vFld(i,j)*yA(i,j)*rhoFacC(k)
aea29c8517 Alis*0326 ENDDO
0327 ENDDO
0328
fd362e9f7c Jean*0329 CALL MOM_CALC_KE( bi,bj,k,2,uFld,vFld,KE,myThid )
3c031bdc7b Jean*0330 IF ( useVariableVisc ) THEN
fd362e9f7c Jean*0331 CALL MOM_CALC_HDIV( bi,bj,k,2,uFld,vFld,hDiv,myThid )
0332 CALL MOM_CALC_RELVORT3( bi,bj,k,uFld,vFld,hFacZ,vort3,myThid )
0333 CALL MOM_CALC_TENSION( bi,bj,k,uFld,vFld,tension,myThid )
0334 CALL MOM_CALC_STRAIN( bi,bj,k,uFld,vFld,hFacZ,strain,myThid )
f59d76b0dd Ed D*0335 #ifdef ALLOW_LEITH_QG
0336 IF ( viscC2LeithQG.NE.zeroRL ) THEN
0337 CALL MOM_VISC_QGL_STRETCH(bi,bj,k,
0338 O stretching, Nsquare,
0339 I myTime, myIter, myThid)
0340 CALL MOM_VISC_QGL_LIMIT(bi,bj,k,
0341 O stretching,
0342 I Nsquare, uFld,vFld,vort3,
0343 I myTime, myIter, myThid )
0344 ENDIF
06244a5e4f Jean*0345 #endif /* ALLOW_LEITH_QG */
9e4f1da9cf Jean*0346 DO j=1-OLy,sNy+OLy
0347 DO i=1-OLx,sNx+OLx
ea2dd4993a Jean*0348 IF ( hFacZ(i,j).EQ.0. ) THEN
0349 vort3(i,j) = sideMaskFac*vort3(i,j)
0350 strain(i,j) = sideMaskFac*strain(i,j)
0351 ENDIF
0352 ENDDO
0353 ENDDO
0354 #ifdef ALLOW_DIAGNOSTICS
0355 IF ( useDiagnostics ) THEN
0356 CALL DIAGNOSTICS_FILL(hDiv, 'momHDiv ',k,1,2,bi,bj,myThid)
0357 CALL DIAGNOSTICS_FILL(vort3, 'momVort3',k,1,2,bi,bj,myThid)
0358 CALL DIAGNOSTICS_FILL(tension,'Tension ',k,1,2,bi,bj,myThid)
0359 CALL DIAGNOSTICS_FILL(strain, 'Strain ',k,1,2,bi,bj,myThid)
f59d76b0dd Ed D*0360
0361 IF ( viscC2LeithQG.NE.zeroRL ) THEN
0362 CALL DIAGNOSTICS_FILL(stretching,
0363 I 'Stretch ',k,1,2,bi,bj,myThid)
0364 ENDIF
ea2dd4993a Jean*0365 ENDIF
0366 #endif
0367 ENDIF
7448700841 Mart*0368 #ifdef ALLOW_AUTODIFF_TAMC
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381 #endif
0382
07e17fa184 Jean*0383
bd2e80b12f Jean*0384 IF (momAdvection.AND.k.EQ.1) THEN
0385
229b6d70e7 Jean*0386 #ifdef MOM_BOUNDARY_CONSERVE
0387 CALL MOM_UV_BOUNDARY( bi, bj, k,
0388 I uVel, vVel,
0389 O uBnd(1-OLx,1-OLy,k,bi,bj),
0390 O vBnd(1-OLx,1-OLy,k,bi,bj),
0391 I myTime, myIter, myThid )
0392 #endif /* MOM_BOUNDARY_CONSERVE */
0393
bd2e80b12f Jean*0394
aa2d1573fa Patr*0395
0396 #ifdef ALLOW_AUTODIFF_TAMC
a377feeea9 Patr*0397 # ifdef NONLIN_FRSURF
0398 # ifndef DISABLE_RSTAR_CODE
edb6656069 Mart*0399
0400
0401
a377feeea9 Patr*0402 # endif
0403 # endif /* NONLIN_FRSURF */
aa2d1573fa Patr*0404 #endif /* ALLOW_AUTODIFF_TAMC */
722a76e285 Jean*0405 CALL MOM_CALC_RTRANS( k, bi, bj,
0406 O rTransU, rTransV,
fd362e9f7c Jean*0407 I myTime, myIter, myThid )
bd2e80b12f Jean*0408
0409
722a76e285 Jean*0410 CALL MOM_U_ADV_WU( bi,bj,k,uVel,wVel,rTransU,
07e17fa184 Jean*0411 O fVerUkm, myThid )
bd2e80b12f Jean*0412
722a76e285 Jean*0413 CALL MOM_V_ADV_WV( bi,bj,k,vVel,wVel,rTransV,
07e17fa184 Jean*0414 O fVerVkm, myThid )
bd2e80b12f Jean*0415
0416
0417 ENDIF
0418
0419
0420 IF (momAdvection) THEN
722a76e285 Jean*0421 CALL MOM_CALC_RTRANS( k+1, bi, bj,
0422 O rTransU, rTransV,
fd362e9f7c Jean*0423 I myTime, myIter, myThid )
bd2e80b12f Jean*0424 ENDIF
7448700841 Mart*0425 #ifdef ALLOW_AUTODIFF_TAMC
0426
0427
0428
0429
0430 #endif
bd2e80b12f Jean*0431
229b6d70e7 Jean*0432 #ifdef MOM_BOUNDARY_CONSERVE
0433 IF ( momAdvection .AND. k.LT.Nr ) THEN
0434 CALL MOM_UV_BOUNDARY( bi, bj, k+1,
0435 I uVel, vVel,
0436 O uBnd(1-OLx,1-OLy,k+1,bi,bj),
0437 O vBnd(1-OLx,1-OLy,k+1,bi,bj),
0438 I myTime, myIter, myThid )
0439 ENDIF
0440 #endif /* MOM_BOUNDARY_CONSERVE */
0441
05b9f17ae6 Bayl*0442 IF (momViscosity) THEN
b639c0f848 Jean*0443 DO j=1-OLy,sNy+OLy
0444 DO i=1-OLx,sNx+OLx
0445 viscAh_D(i,j) = viscAhD
0446 viscAh_Z(i,j) = viscAhZ
0447 viscA4_D(i,j) = viscA4D
0448 viscA4_Z(i,j) = viscA4Z
0449 ENDDO
0450 ENDDO
0451 IF ( useVariableVisc ) THEN
0452 CALL MOM_CALC_VISC( bi, bj, k,
0453 O viscAh_Z, viscAh_D, viscA4_Z, viscA4_D,
f59d76b0dd Ed D*0454 I hDiv, vort3, tension, strain, stretching, KE, hFacZ,
b639c0f848 Jean*0455 I myThid )
0456 ENDIF
7448700841 Mart*0457 #ifdef ALLOW_AUTODIFF_TAMC
0458 # ifndef AUTODIFF_ALLOW_VISCFACADJ
0459
0460
0461
0462
0463
0464
0465
0466 # endif /* AUTODIFF_ALLOW_VISCFACADJ */
0467 #endif /* ALLOW_AUTODIFF_TAMC */
05b9f17ae6 Bayl*0468 ENDIF
bd2e80b12f Jean*0469
722a76e285 Jean*0470
aea29c8517 Alis*0471
722a76e285 Jean*0472
aea29c8517 Alis*0473
722a76e285 Jean*0474 IF (momAdvection) THEN
0475
aea29c8517 Alis*0476
229b6d70e7 Jean*0477 #ifdef MOM_BOUNDARY_CONSERVE
0478 CALL MOM_U_ADV_UU( bi,bj,k,uTrans,uBnd(1-OLx,1-OLy,k,bi,bj),
0479 O fZon,myThid )
0480 CALL MOM_U_ADV_VU( bi,bj,k,vTrans,uBnd(1-OLx,1-OLy,k,bi,bj),
0481 O fMer,myThid )
0482 CALL MOM_U_ADV_WU(
0483 I bi,bj,k+1,uBnd,wVel,rTransU,
07e17fa184 Jean*0484 O fVerUkp, myThid )
229b6d70e7 Jean*0485 #else /* MOM_BOUNDARY_CONSERVE */
aea29c8517 Alis*0486
722a76e285 Jean*0487
fd362e9f7c Jean*0488 CALL MOM_U_ADV_UU( bi,bj,k,uTrans,uFld,fZon,myThid )
aea29c8517 Alis*0489
0490
722a76e285 Jean*0491
fd362e9f7c Jean*0492 CALL MOM_U_ADV_VU( bi,bj,k,vTrans,uFld,fMer,myThid )
aea29c8517 Alis*0493
0494
722a76e285 Jean*0495
0496 CALL MOM_U_ADV_WU(
0497 I bi,bj,k+1,uVel,wVel,rTransU,
07e17fa184 Jean*0498 O fVerUkp, myThid )
229b6d70e7 Jean*0499 #endif /* MOM_BOUNDARY_CONSERVE */
aea29c8517 Alis*0500
0501
722a76e285 Jean*0502 DO j=jMin,jMax
0503 DO i=iMin,iMax
0504 gU(i,j,k,bi,bj) =
aea29c8517 Alis*0505 #ifdef OLD_UV_GEOM
722a76e285 Jean*0506 & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)/
0507 & ( 0.5 _d 0*(rA(i,j,bi,bj)+rA(i-1,j,bi,bj)) )
aea29c8517 Alis*0508 #else
722a76e285 Jean*0509 & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
eaba2fd266 Jean*0510 & *recip_rAw(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)
aea29c8517 Alis*0511 #endif
07e17fa184 Jean*0512 & *( ( fZon(i,j ) - fZon(i-1,j) )*uDudxFac
0513 & +( fMer(i,j+1) - fMer(i, j) )*vDudyFac
0514 & +( fVerUkp(i,j) - fVerUkm(i,j) )*rkSign*rVelDudrFac
722a76e285 Jean*0515 & )
0516 ENDDO
0517 ENDDO
aea29c8517 Alis*0518
711329b07b Jean*0519 #ifdef ALLOW_DIAGNOSTICS
0520 IF ( useDiagnostics ) THEN
07e17fa184 Jean*0521 CALL DIAGNOSTICS_FILL( fZon, 'ADVx_Um ',k,1,2,bi,bj,myThid)
0522 CALL DIAGNOSTICS_FILL( fMer, 'ADVy_Um ',k,1,2,bi,bj,myThid)
0523 CALL DIAGNOSTICS_FILL(fVerUkm,'ADVrE_Um',k,1,2,bi,bj,myThid)
711329b07b Jean*0524 ENDIF
0525 #endif
0526
bd2e80b12f Jean*0527 #ifdef NONLIN_FRSURF
0528
cdc9f269ae Patr*0529 # ifndef DISABLE_RSTAR_CODE
722a76e285 Jean*0530 IF ( select_rStar.GT.0 ) THEN
0531 DO j=jMin,jMax
0532 DO i=iMin,iMax
0533 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
88b07ffa37 Jean*0534 & - (rStarExpW(i,j,bi,bj) - 1. _d 0)/deltaTFreeSurf
bd2e80b12f Jean*0535 & *uVel(i,j,k,bi,bj)
722a76e285 Jean*0536 ENDDO
0537 ENDDO
0538 ENDIF
0539 IF ( select_rStar.LT.0 ) THEN
0540 DO j=jMin,jMax
0541 DO i=iMin,iMax
0542 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
bd2e80b12f Jean*0543 & - rStarDhWDt(i,j,bi,bj)*uVel(i,j,k,bi,bj)
722a76e285 Jean*0544 ENDDO
0545 ENDDO
0546 ENDIF
cdc9f269ae Patr*0547 # endif /* DISABLE_RSTAR_CODE */
722a76e285 Jean*0548 #endif /* NONLIN_FRSURF */
0549
9e4f1da9cf Jean*0550 #ifdef ALLOW_ADDFLUID
0551 IF ( selectAddFluid.GE.1 ) THEN
0552 DO j=jMin,jMax
0553 DO i=iMin,iMax
0554 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
0555 & + uVel(i,j,k,bi,bj)*mass2rUnit*0.5 _d 0
0556 & *( addMass(i-1,j,k,bi,bj) + addMass(i,j,k,bi,bj) )
0557 & *_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)*recip_rhoFacC(k)
0558 & * recip_rAw(i,j,bi,bj)*recip_deepFac2C(k)
0559 ENDDO
0560 ENDDO
0561 ENDIF
0562 #endif /* ALLOW_ADDFLUID */
0563
722a76e285 Jean*0564 ELSE
0565
0566 DO j=1-OLy,sNy+OLy
0567 DO i=1-OLx,sNx+OLx
0568 gU(i,j,k,bi,bj) = 0. _d 0
0569 ENDDO
bd2e80b12f Jean*0570 ENDDO
722a76e285 Jean*0571
0572
bd2e80b12f Jean*0573 ENDIF
722a76e285 Jean*0574
0575 IF (momViscosity) THEN
0576
0577
0578
f0501c53d1 Jean*0579 IF ( useBiharmonicVisc )
fd362e9f7c Jean*0580 & CALL MOM_U_DEL2U( bi, bj, k, uFld, hFacZ, h0FacZ,
0581 O v4f, myThid )
7448700841 Mart*0582 #ifdef ALLOW_AUTODIFF_TAMC
0583
0584 #endif
722a76e285 Jean*0585
0586
fd362e9f7c Jean*0587 CALL MOM_U_XVISCFLUX( bi,bj,k,uFld,v4F,fZon,
0588 I viscAh_D,viscA4_D,myThid )
722a76e285 Jean*0589
0590
fd362e9f7c Jean*0591 CALL MOM_U_YVISCFLUX( bi,bj,k,uFld,v4F,hFacZ,fMer,
0592 I viscAh_Z,viscA4_Z,myThid )
722a76e285 Jean*0593
0594
0595 IF (.NOT.implicitViscosity) THEN
1833b564cb Jean*0596 CALL MOM_U_RVISCFLUX( bi,bj, k, uVel,kappaRU,fVrUp,myThid )
0597 CALL MOM_U_RVISCFLUX( bi,bj,k+1,uVel,kappaRU,fVrDw,myThid )
722a76e285 Jean*0598 ENDIF
0599
0600
eaba2fd266 Jean*0601
722a76e285 Jean*0602 DO j=jMin,jMax
0603 DO i=iMin,iMax
0604 guDiss(i,j) =
0605 #ifdef OLD_UV_GEOM
0606 & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)/
0607 & ( 0.5 _d 0*(rA(i,j,bi,bj)+rA(i-1,j,bi,bj)) )
0608 #else
0609 & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
eaba2fd266 Jean*0610 & *recip_rAw(i,j,bi,bj)*recip_deepFac2C(k)
722a76e285 Jean*0611 #endif
eaba2fd266 Jean*0612 & *( ( fZon(i,j ) - fZon(i-1,j) )*AhDudxFac
0613 & +( fMer(i,j+1) - fMer(i, j) )*AhDudyFac
0614 & +( fVrDw(i,j) - fVrUp(i,j) )*rkSign*ArDudrFac
0615 & *recip_rhoFacC(k)
722a76e285 Jean*0616 & )
0617 ENDDO
0618 ENDDO
bd2e80b12f Jean*0619
711329b07b Jean*0620 #ifdef ALLOW_DIAGNOSTICS
0621 IF ( useDiagnostics ) THEN
0622 CALL DIAGNOSTICS_FILL(fZon, 'VISCx_Um',k,1,2,bi,bj,myThid)
0623 CALL DIAGNOSTICS_FILL(fMer, 'VISCy_Um',k,1,2,bi,bj,myThid)
0624 IF (.NOT.implicitViscosity)
0625 & CALL DIAGNOSTICS_FILL(fVrUp,'VISrE_Um',k,1,2,bi,bj,myThid)
0626 ENDIF
0627 #endif
0628
9496c6c9ef Jean*0629
722a76e285 Jean*0630 IF (no_slip_sides) THEN
aea29c8517 Alis*0631
f0501c53d1 Jean*0632 CALL MOM_U_SIDEDRAG( bi, bj, k,
fd362e9f7c Jean*0633 I uFld, v4f, h0FacZ,
f0501c53d1 Jean*0634 I viscAh_Z, viscA4_Z,
0635 I useHarmonicVisc, useBiharmonicVisc, useVariableVisc,
998681995e Bayl*0636 O vF,
f0501c53d1 Jean*0637 I myThid )
722a76e285 Jean*0638 DO j=jMin,jMax
0639 DO i=iMin,iMax
79074ef66b Jean*0640 guDiss(i,j) = guDiss(i,j) + vF(i,j)
722a76e285 Jean*0641 ENDDO
0642 ENDDO
0643 ENDIF
aea29c8517 Alis*0644
e2d988bd46 Jean*0645 IF ( bottomDragTerms ) THEN
79074ef66b Jean*0646 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0647
79074ef66b Jean*0648 #endif
a125ab7be7 Jean*0649 CALL MOM_U_BOTDRAG_COEFF( bi, bj, k, .TRUE.,
79074ef66b Jean*0650 I uFld, vFld, kappaRU, KE,
0651 O cDrag,
0652 I myIter, myThid )
7448700841 Mart*0653 #ifdef ALLOW_AUTODIFF_TAMC
0654
0655 #endif
722a76e285 Jean*0656 DO j=jMin,jMax
0657 DO i=iMin,iMax
79074ef66b Jean*0658 guDiss(i,j) = guDiss(i,j)
0659 & - cDrag(i,j)*uFld(i,j)
0660 & *_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
722a76e285 Jean*0661 ENDDO
0662 ENDDO
79074ef66b Jean*0663 IF ( useDiagnostics ) THEN
0664 DO j=jMin,jMax
0665 DO i=iMin,iMax
0666 botDragU(i,j,bi,bj) = botDragU(i,j,bi,bj)
0667 & - cDrag(i,j)*uFld(i,j)*rUnit2mass
0668 ENDDO
0669 ENDDO
0670 ENDIF
722a76e285 Jean*0671 ENDIF
0672
dd49642a1d Mart*0673 #ifdef ALLOW_SHELFICE
e2d988bd46 Jean*0674 IF ( useShelfIce .AND. selectImplicitDrag.EQ.0 ) THEN
0675 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0676
e2d988bd46 Jean*0677 #endif
0678 CALL SHELFICE_U_DRAG_COEFF( bi, bj, k, .TRUE.,
0679 I uFld, vFld, kappaRU, KE,
0680 O cDrag,
0681 I myIter, myThid )
7448700841 Mart*0682 #ifdef ALLOW_AUTODIFF_TAMC
0683
0684 #endif
dd49642a1d Mart*0685 DO j=jMin,jMax
0686 DO i=iMin,iMax
e2d988bd46 Jean*0687 guDiss(i,j) = guDiss(i,j)
0688 & - cDrag(i,j)*uFld(i,j)
0689 & *_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
dd49642a1d Mart*0690 ENDDO
0691 ENDDO
0692 ENDIF
0693 #endif /* ALLOW_SHELFICE */
0694
722a76e285 Jean*0695
aea29c8517 Alis*0696 ENDIF
0697
7fc445a0ef Jean*0698
0699
0700
0701
0702
aea29c8517 Alis*0703
0704
3121bb922d Alis*0705 IF (useNHMTerms) THEN
4d2713b160 Jean*0706
fd362e9f7c Jean*0707 CALL MOM_U_METRIC_NH( bi,bj,k,uFld,wVel,mT,myThid )
aea29c8517 Alis*0708 DO j=jMin,jMax
0709 DO i=iMin,iMax
4d2713b160 Jean*0710 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtNHFacU*mT(i,j)
aea29c8517 Alis*0711 ENDDO
0712 ENDDO
3121bb922d Alis*0713 ENDIF
4d2713b160 Jean*0714 IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN
0715
fd362e9f7c Jean*0716 CALL MOM_U_METRIC_SPHERE( bi,bj,k,uFld,vFld,mT,myThid )
aea29c8517 Alis*0717 DO j=jMin,jMax
0718 DO i=iMin,iMax
4d2713b160 Jean*0719 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)
aea29c8517 Alis*0720 ENDDO
0721 ENDDO
0de9c264f0 Andr*0722 ENDIF
4d2713b160 Jean*0723 IF ( usingCylindricalGrid .AND. metricTerms ) THEN
0724
fd362e9f7c Jean*0725 CALL MOM_U_METRIC_CYLINDER( bi,bj,k,uFld,vFld,mT,myThid )
4d2713b160 Jean*0726 DO j=jMin,jMax
0727 DO i=iMin,iMax
0728 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)
0729 ENDDO
0ac260a803 Andr*0730 ENDDO
aea29c8517 Alis*0731 ENDIF
0732
722a76e285 Jean*0733
aea29c8517 Alis*0734
0735
0736
722a76e285 Jean*0737 IF (momAdvection) THEN
229b6d70e7 Jean*0738
0739 #ifdef MOM_BOUNDARY_CONSERVE
0740 CALL MOM_V_ADV_UV( bi,bj,k,uTrans,vBnd(1-OLx,1-OLy,k,bi,bj),
0741 O fZon,myThid )
0742 CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vBnd(1-OLx,1-OLy,k,bi,bj),
0743 O fMer,myThid )
07e17fa184 Jean*0744 CALL MOM_V_ADV_WV( bi,bj,k+1,vBnd,wVel,rTransV,
0745 O fVerVkp, myThid )
229b6d70e7 Jean*0746 #else /* MOM_BOUNDARY_CONSERVE */
722a76e285 Jean*0747
0748
07e17fa184 Jean*0749 CALL MOM_V_ADV_UV( bi,bj,k,uTrans,vFld,fZon,myThid )
aea29c8517 Alis*0750
0751
722a76e285 Jean*0752
07e17fa184 Jean*0753 CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vFld,fMer,myThid )
aea29c8517 Alis*0754
0755
722a76e285 Jean*0756
07e17fa184 Jean*0757 CALL MOM_V_ADV_WV( bi,bj,k+1,vVel,wVel,rTransV,
0758 O fVerVkp, myThid )
229b6d70e7 Jean*0759 #endif /* MOM_BOUNDARY_CONSERVE */
aea29c8517 Alis*0760
0761
722a76e285 Jean*0762 DO j=jMin,jMax
0763 DO i=iMin,iMax
0764 gV(i,j,k,bi,bj) =
aea29c8517 Alis*0765 #ifdef OLD_UV_GEOM
722a76e285 Jean*0766 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)/
0767 & ( 0.5 _d 0*(_rA(i,j,bi,bj)+_rA(i,j-1,bi,bj)) )
aea29c8517 Alis*0768 #else
722a76e285 Jean*0769 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
eaba2fd266 Jean*0770 & *recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)
aea29c8517 Alis*0771 #endif
07e17fa184 Jean*0772 & *( ( fZon(i+1,j) - fZon(i,j ) )*uDvdxFac
0773 & +( fMer(i, j) - fMer(i,j-1) )*vDvdyFac
0774 & +( fVerVkp(i,j) - fVerVkm(i,j) )*rkSign*rVelDvdrFac
722a76e285 Jean*0775 & )
711329b07b Jean*0776 ENDDO
0777 ENDDO
0778
0779 #ifdef ALLOW_DIAGNOSTICS
0780 IF ( useDiagnostics ) THEN
07e17fa184 Jean*0781 CALL DIAGNOSTICS_FILL( fZon, 'ADVx_Vm ',k,1,2,bi,bj,myThid)
0782 CALL DIAGNOSTICS_FILL( fMer, 'ADVy_Vm ',k,1,2,bi,bj,myThid)
0783 CALL DIAGNOSTICS_FILL(fVerVkm,'ADVrE_Vm',k,1,2,bi,bj,myThid)
711329b07b Jean*0784 ENDIF
0785 #endif
aea29c8517 Alis*0786
bd2e80b12f Jean*0787 #ifdef NONLIN_FRSURF
0788
cdc9f269ae Patr*0789 # ifndef DISABLE_RSTAR_CODE
722a76e285 Jean*0790 IF ( select_rStar.GT.0 ) THEN
0791 DO j=jMin,jMax
0792 DO i=iMin,iMax
0793 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
88b07ffa37 Jean*0794 & - (rStarExpS(i,j,bi,bj) - 1. _d 0)/deltaTFreeSurf
bd2e80b12f Jean*0795 & *vVel(i,j,k,bi,bj)
722a76e285 Jean*0796 ENDDO
0797 ENDDO
0798 ENDIF
0799 IF ( select_rStar.LT.0 ) THEN
0800 DO j=jMin,jMax
0801 DO i=iMin,iMax
0802 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
bd2e80b12f Jean*0803 & - rStarDhSDt(i,j,bi,bj)*vVel(i,j,k,bi,bj)
722a76e285 Jean*0804 ENDDO
0805 ENDDO
0806 ENDIF
cdc9f269ae Patr*0807 # endif /* DISABLE_RSTAR_CODE */
722a76e285 Jean*0808 #endif /* NONLIN_FRSURF */
0809
9e4f1da9cf Jean*0810 #ifdef ALLOW_ADDFLUID
0811 IF ( selectAddFluid.GE.1 ) THEN
0812 DO j=jMin,jMax
0813 DO i=iMin,iMax
0814 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
0815 & + vVel(i,j,k,bi,bj)*mass2rUnit*0.5 _d 0
0816 & *( addMass(i,j-1,k,bi,bj) + addMass(i,j,k,bi,bj) )
0817 & *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)*recip_rhoFacC(k)
0818 & * recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)
0819 ENDDO
0820 ENDDO
0821 ENDIF
0822 #endif /* ALLOW_ADDFLUID */
0823
722a76e285 Jean*0824 ELSE
0825
0826 DO j=1-OLy,sNy+OLy
0827 DO i=1-OLx,sNx+OLx
0828 gV(i,j,k,bi,bj) = 0. _d 0
0829 ENDDO
bd2e80b12f Jean*0830 ENDDO
722a76e285 Jean*0831
0832
bd2e80b12f Jean*0833 ENDIF
722a76e285 Jean*0834
0835 IF (momViscosity) THEN
0836
0837
f0501c53d1 Jean*0838 IF ( useBiharmonicVisc )
fd362e9f7c Jean*0839 & CALL MOM_V_DEL2V( bi, bj, k, vFld, hFacZ, h0FacZ,
0840 O v4f, myThid )
7448700841 Mart*0841 #ifdef ALLOW_AUTODIFF_TAMC
0842
0843 #endif
722a76e285 Jean*0844
0845
fd362e9f7c Jean*0846 CALL MOM_V_XVISCFLUX( bi,bj,k,vFld,v4f,hFacZ,fZon,
0847 I viscAh_Z,viscA4_Z,myThid )
722a76e285 Jean*0848
0849
fd362e9f7c Jean*0850 CALL MOM_V_YVISCFLUX( bi,bj,k,vFld,v4f,fMer,
0851 I viscAh_D,viscA4_D,myThid )
722a76e285 Jean*0852
0853
0854 IF (.NOT.implicitViscosity) THEN
fd362e9f7c Jean*0855 CALL MOM_V_RVISCFLUX( bi,bj, k, vVel,KappaRV,fVrUp,myThid )
0856 CALL MOM_V_RVISCFLUX( bi,bj,k+1,vVel,KappaRV,fVrDw,myThid )
722a76e285 Jean*0857 ENDIF
0858
0859
eaba2fd266 Jean*0860
722a76e285 Jean*0861 DO j=jMin,jMax
0862 DO i=iMin,iMax
0863 gvDiss(i,j) =
0864 #ifdef OLD_UV_GEOM
0865 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)/
0866 & ( 0.5 _d 0*(_rA(i,j,bi,bj)+_rA(i,j-1,bi,bj)) )
0867 #else
0868 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
eaba2fd266 Jean*0869 & *recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)
722a76e285 Jean*0870 #endif
eaba2fd266 Jean*0871 & *( ( fZon(i+1,j) - fZon(i,j ) )*AhDvdxFac
0872 & +( fMer(i, j) - fMer(i,j-1) )*AhDvdyFac
0873 & +( fVrDw(i,j) - fVrUp(i,j) )*rkSign*ArDvdrFac
0874 & *recip_rhoFacC(k)
722a76e285 Jean*0875 & )
0876 ENDDO
0877 ENDDO
bd2e80b12f Jean*0878
711329b07b Jean*0879 #ifdef ALLOW_DIAGNOSTICS
0880 IF ( useDiagnostics ) THEN
0881 CALL DIAGNOSTICS_FILL(fZon, 'VISCx_Vm',k,1,2,bi,bj,myThid)
0882 CALL DIAGNOSTICS_FILL(fMer, 'VISCy_Vm',k,1,2,bi,bj,myThid)
0883 IF (.NOT.implicitViscosity)
0884 & CALL DIAGNOSTICS_FILL(fVrUp,'VISrE_Vm',k,1,2,bi,bj,myThid)
0885 ENDIF
0886 #endif
0887
9496c6c9ef Jean*0888
dd49642a1d Mart*0889 IF (no_slip_sides) THEN
aea29c8517 Alis*0890
f0501c53d1 Jean*0891 CALL MOM_V_SIDEDRAG( bi, bj, k,
fd362e9f7c Jean*0892 I vFld, v4f, h0FacZ,
0893 I viscAh_Z, viscA4_Z,
f0501c53d1 Jean*0894 I useHarmonicVisc, useBiharmonicVisc, useVariableVisc,
998681995e Bayl*0895 O vF,
f0501c53d1 Jean*0896 I myThid )
722a76e285 Jean*0897 DO j=jMin,jMax
0898 DO i=iMin,iMax
0899 gvDiss(i,j) = gvDiss(i,j) + vF(i,j)
0900 ENDDO
0901 ENDDO
0902 ENDIF
aea29c8517 Alis*0903
e2d988bd46 Jean*0904 IF ( bottomDragTerms ) THEN
79074ef66b Jean*0905 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0906
79074ef66b Jean*0907 #endif
a125ab7be7 Jean*0908 CALL MOM_V_BOTDRAG_COEFF( bi, bj, k, .TRUE.,
79074ef66b Jean*0909 I uFld, vFld, kappaRV, KE,
0910 O cDrag,
0911 I myIter, myThid )
7448700841 Mart*0912 #ifdef ALLOW_AUTODIFF_TAMC
0913
0914 #endif
722a76e285 Jean*0915 DO j=jMin,jMax
0916 DO i=iMin,iMax
79074ef66b Jean*0917 gvDiss(i,j) = gvDiss(i,j)
0918 & - cDrag(i,j)*vFld(i,j)
0919 & *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
722a76e285 Jean*0920 ENDDO
0921 ENDDO
79074ef66b Jean*0922 IF ( useDiagnostics ) THEN
0923 DO j=jMin,jMax
0924 DO i=iMin,iMax
0925 botDragV(i,j,bi,bj) = botDragV(i,j,bi,bj)
0926 & - cDrag(i,j)*vFld(i,j)*rUnit2mass
0927 ENDDO
0928 ENDDO
0929 ENDIF
722a76e285 Jean*0930 ENDIF
0931
dd49642a1d Mart*0932 #ifdef ALLOW_SHELFICE
e2d988bd46 Jean*0933 IF ( useShelfIce .AND. selectImplicitDrag.EQ.0 ) THEN
0934 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0935
e2d988bd46 Jean*0936 #endif
0937 CALL SHELFICE_V_DRAG_COEFF( bi, bj, k, .TRUE.,
0938 I uFld, vFld, kappaRV, KE,
0939 O cDrag,
0940 I myIter, myThid )
7448700841 Mart*0941 #ifdef ALLOW_AUTODIFF_TAMC
0942
0943 #endif
dd49642a1d Mart*0944 DO j=jMin,jMax
0945 DO i=iMin,iMax
e2d988bd46 Jean*0946 gvDiss(i,j) = gvDiss(i,j)
0947 & - cDrag(i,j)*vFld(i,j)
0948 & *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
dd49642a1d Mart*0949 ENDDO
0950 ENDDO
0951 ENDIF
0952 #endif /* ALLOW_SHELFICE */
0953
722a76e285 Jean*0954
aea29c8517 Alis*0955 ENDIF
0956
7fc445a0ef Jean*0957
0958
0959
0960
0961
aea29c8517 Alis*0962
0963
3121bb922d Alis*0964 IF (useNHMTerms) THEN
4d2713b160 Jean*0965
fd362e9f7c Jean*0966 CALL MOM_V_METRIC_NH( bi,bj,k,vFld,wVel,mT,myThid )
aea29c8517 Alis*0967 DO j=jMin,jMax
0968 DO i=iMin,iMax
4d2713b160 Jean*0969 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtNHFacV*mT(i,j)
aea29c8517 Alis*0970 ENDDO
0971 ENDDO
3121bb922d Alis*0972 ENDIF
4d2713b160 Jean*0973 IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN
0974
fd362e9f7c Jean*0975 CALL MOM_V_METRIC_SPHERE( bi,bj,k,uFld,mT,myThid )
aea29c8517 Alis*0976 DO j=jMin,jMax
0977 DO i=iMin,iMax
4d2713b160 Jean*0978 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)
aea29c8517 Alis*0979 ENDDO
0980 ENDDO
0981 ENDIF
4d2713b160 Jean*0982 IF ( usingCylindricalGrid .AND. metricTerms ) THEN
0983
fd362e9f7c Jean*0984 CALL MOM_V_METRIC_CYLINDER( bi,bj,k,uFld,vFld,mT,myThid )
4d2713b160 Jean*0985 DO j=jMin,jMax
0986 DO i=iMin,iMax
0987 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)
0988 ENDDO
0989 ENDDO
0ac260a803 Andr*0990 ENDIF
aea29c8517 Alis*0991
722a76e285 Jean*0992
aea29c8517 Alis*0993
c831f9444b Jean*0994
9293d3c672 Hajo*0995 IF ( .NOT.useCDscheme ) THEN
0996 #if ( defined ALLOW_GGL90 && defined ALLOW_GGL90_LANGMUIR )
0997 IF ( useLANGMUIR ) THEN
0998 CALL GGL90_ADD_STOKESDRIFT(
0999 O uRes, vRes,
1000 I uFld, vFld, k, bi, bj, myThid )
1001 CALL MOM_U_CORIOLIS( bi,bj,k,vRes,uCf,myThid )
1002 CALL MOM_V_CORIOLIS( bi,bj,k,uRes,vCf,myThid )
1003 ELSE
1004 #endif
1005 CALL MOM_U_CORIOLIS( bi,bj,k,vFld,uCf,myThid )
1006 CALL MOM_V_CORIOLIS( bi,bj,k,uFld,vCf,myThid )
1007 #if ( defined ALLOW_GGL90 && defined ALLOW_GGL90_LANGMUIR )
1008 ENDIF
711329b07b Jean*1009 #endif
7fc445a0ef Jean*1010 DO j=jMin,jMax
1011 DO i=iMin,iMax
9293d3c672 Hajo*1012 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj) + fuFac*uCf(i,j)
1013 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj) + fvFac*vCf(i,j)
7fc445a0ef Jean*1014 ENDDO
1015 ENDDO
711329b07b Jean*1016 #ifdef ALLOW_DIAGNOSTICS
9293d3c672 Hajo*1017 IF ( useDiagnostics ) THEN
1018 CALL DIAGNOSTICS_FILL( uCf,'Um_Cori ',k,1,2,bi,bj,myThid )
1019 CALL DIAGNOSTICS_FILL( vCf,'Vm_Cori ',k,1,2,bi,bj,myThid )
1020 ENDIF
711329b07b Jean*1021 #endif
7fc445a0ef Jean*1022 ENDIF
1023
3daafce20b Jean*1024
427e24e121 Jean*1025 IF ( select3dCoriScheme.GE.1 ) THEN
9293d3c672 Hajo*1026 CALL MOM_U_CORIOLIS_NH( bi,bj,k,wVel,uCf,myThid )
ac8c612649 Jean*1027 DO j=jMin,jMax
1028 DO i=iMin,iMax
9293d3c672 Hajo*1029 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj) + fuFac*uCf(i,j)
ac8c612649 Jean*1030 ENDDO
c5990018f4 Alis*1031 ENDDO
427e24e121 Jean*1032 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
ac8c612649 Jean*1033
9293d3c672 Hajo*1034 CALL MOM_V_CORIOLIS_NH( bi,bj,k,wVel,vCf,myThid )
ac8c612649 Jean*1035 DO j=jMin,jMax
1036 DO i=iMin,iMax
9293d3c672 Hajo*1037 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj) + fvFac*vCf(i,j)
ac8c612649 Jean*1038 ENDDO
1039 ENDDO
1040 ENDIF
c5990018f4 Alis*1041 ENDIF
aea29c8517 Alis*1042
722a76e285 Jean*1043
1044 DO j=jMin,jMax
1045 DO i=iMin,iMax
1046 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)*_maskW(i,j,k,bi,bj)
1047 guDiss(i,j) = guDiss(i,j) *_maskW(i,j,k,bi,bj)
1048 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)
1049 gvDiss(i,j) = gvDiss(i,j) *_maskS(i,j,k,bi,bj)
1050 ENDDO
1051 ENDDO
1052
711329b07b Jean*1053 #ifdef ALLOW_DIAGNOSTICS
1054 IF ( useDiagnostics ) THEN
b114b87ee5 Bayl*1055 CALL DIAGNOSTICS_FILL(KE, 'momKE ',k,1,2,bi,bj,myThid)
9e4f1da9cf Jean*1056 CALL DIAGNOSTICS_FILL(gU(1-OLx,1-OLy,k,bi,bj),
711329b07b Jean*1057 & 'Um_Advec',k,1,2,bi,bj,myThid)
9e4f1da9cf Jean*1058 CALL DIAGNOSTICS_FILL(gV(1-OLx,1-OLy,k,bi,bj),
711329b07b Jean*1059 & 'Vm_Advec',k,1,2,bi,bj,myThid)
1060 ENDIF
1061 #endif /* ALLOW_DIAGNOSTICS */
1062
aea29c8517 Alis*1063 RETURN
1064 END