11 |
|
|
12 |
SUBROUTINE MOM_VECINV( |
SUBROUTINE MOM_VECINV( |
13 |
I bi,bj,k,iMin,iMax,jMin,jMax, |
I bi,bj,k,iMin,iMax,jMin,jMax, |
14 |
I KappaRU, KappaRV, |
I kappaRU, kappaRV, |
15 |
I fVerUkm, fVerVkm, |
I fVerUkm, fVerVkm, |
16 |
O fVerUkp, fVerVkp, |
O fVerUkp, fVerVkp, |
17 |
O guDiss, gvDiss, |
O guDiss, gvDiss, |
72 |
C myThid :: my Thread Id number |
C myThid :: my Thread Id number |
73 |
INTEGER bi,bj,k |
INTEGER bi,bj,k |
74 |
INTEGER iMin,iMax,jMin,jMax |
INTEGER iMin,iMax,jMin,jMax |
75 |
_RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL kappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) |
76 |
_RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL kappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1) |
77 |
_RL fVerUkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL fVerUkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
78 |
_RL fVerVkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL fVerVkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
79 |
_RL fVerUkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL fVerUkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
230 |
ENDIF |
ENDIF |
231 |
|
|
232 |
IF ( no_slip_bottom |
IF ( no_slip_bottom |
233 |
& .OR. bottomDragQuadratic.NE.0. |
& .OR. selectBotDragQuadr.GE.0 |
234 |
& .OR. bottomDragLinear.NE.0.) THEN |
& .OR. bottomDragLinear.NE.0.) THEN |
235 |
bottomDragTerms=.TRUE. |
bottomDragTerms=.TRUE. |
236 |
ELSE |
ELSE |
358 |
C-- Vertical flux (fVer is at upper face of "u" cell) |
C-- Vertical flux (fVer is at upper face of "u" cell) |
359 |
C Eddy component of vertical flux (interior component only) -> vrF |
C Eddy component of vertical flux (interior component only) -> vrF |
360 |
IF ( .NOT.implicitViscosity ) THEN |
IF ( .NOT.implicitViscosity ) THEN |
361 |
CALL MOM_U_RVISCFLUX(bi,bj,k+1,uVel,KappaRU,vrF,myThid) |
CALL MOM_U_RVISCFLUX(bi,bj,k+1,uVel,kappaRU,vrF,myThid) |
362 |
C Combine fluxes |
C Combine fluxes |
363 |
DO j=jMin,jMax |
DO j=jMin,jMax |
364 |
DO i=iMin,iMax |
DO i=iMin,iMax |
394 |
|
|
395 |
C- No-slip BCs impose a drag at bottom |
C- No-slip BCs impose a drag at bottom |
396 |
IF ( bottomDragTerms ) THEN |
IF ( bottomDragTerms ) THEN |
397 |
CALL MOM_U_BOTTOMDRAG(bi,bj,k,uFld,KE,KappaRU,vF,myThid) |
CALL MOM_U_BOTTOMDRAG( bi, bj, k, |
398 |
|
I uFld, vFld, KE, kappaRU, |
399 |
|
O vF, |
400 |
|
I myThid ) |
401 |
DO j=jMin,jMax |
DO j=jMin,jMax |
402 |
DO i=iMin,iMax |
DO i=iMin,iMax |
403 |
guDiss(i,j) = guDiss(i,j)+vF(i,j) |
guDiss(i,j) = guDiss(i,j)+vF(i,j) |
405 |
ENDDO |
ENDDO |
406 |
ENDIF |
ENDIF |
407 |
#ifdef ALLOW_SHELFICE |
#ifdef ALLOW_SHELFICE |
408 |
IF ( useShelfIce.AND.bottomDragTerms ) THEN |
IF ( useShelfIce ) THEN |
409 |
CALL SHELFICE_U_DRAG(bi,bj,k,uFld,KE,KappaRU,vF,myThid) |
CALL SHELFICE_U_DRAG( bi, bj, k, |
410 |
|
I uFld, vFld, KE, kappaRU, |
411 |
|
O vF, |
412 |
|
I myThid ) |
413 |
DO j=jMin,jMax |
DO j=jMin,jMax |
414 |
DO i=iMin,iMax |
DO i=iMin,iMax |
415 |
guDiss(i,j) = guDiss(i,j) + vF(i,j) |
guDiss(i,j) = guDiss(i,j) + vF(i,j) |
423 |
C-- Vertical flux (fVer is at upper face of "v" cell) |
C-- Vertical flux (fVer is at upper face of "v" cell) |
424 |
C Eddy component of vertical flux (interior component only) -> vrF |
C Eddy component of vertical flux (interior component only) -> vrF |
425 |
IF ( .NOT.implicitViscosity ) THEN |
IF ( .NOT.implicitViscosity ) THEN |
426 |
CALL MOM_V_RVISCFLUX(bi,bj,k+1,vVel,KappaRV,vrF,myThid) |
CALL MOM_V_RVISCFLUX(bi,bj,k+1,vVel,kappaRV,vrF,myThid) |
427 |
C Combine fluxes -> fVerV |
C Combine fluxes -> fVerV |
428 |
DO j=jMin,jMax |
DO j=jMin,jMax |
429 |
DO i=iMin,iMax |
DO i=iMin,iMax |
459 |
|
|
460 |
C- No-slip BCs impose a drag at bottom |
C- No-slip BCs impose a drag at bottom |
461 |
IF ( bottomDragTerms ) THEN |
IF ( bottomDragTerms ) THEN |
462 |
CALL MOM_V_BOTTOMDRAG(bi,bj,k,vFld,KE,KappaRV,vF,myThid) |
CALL MOM_V_BOTTOMDRAG( bi, bj, k, |
463 |
|
I uFld, vFld, KE, kappaRV, |
464 |
|
O vF, |
465 |
|
I myThid ) |
466 |
DO j=jMin,jMax |
DO j=jMin,jMax |
467 |
DO i=iMin,iMax |
DO i=iMin,iMax |
468 |
gvDiss(i,j) = gvDiss(i,j)+vF(i,j) |
gvDiss(i,j) = gvDiss(i,j)+vF(i,j) |
470 |
ENDDO |
ENDDO |
471 |
ENDIF |
ENDIF |
472 |
#ifdef ALLOW_SHELFICE |
#ifdef ALLOW_SHELFICE |
473 |
IF (useShelfIce.AND.bottomDragTerms ) THEN |
IF ( useShelfIce ) THEN |
474 |
CALL SHELFICE_V_DRAG(bi,bj,k,vFld,KE,KappaRV,vF,myThid) |
CALL SHELFICE_V_DRAG( bi, bj, k, |
475 |
DO j=jMin,jMax |
I uFld, vFld, KE, kappaRV, |
476 |
DO i=iMin,iMax |
O vF, |
477 |
gvDiss(i,j) = gvDiss(i,j) + vF(i,j) |
I myThid ) |
478 |
ENDDO |
DO j=jMin,jMax |
479 |
ENDDO |
DO i=iMin,iMax |
480 |
ENDIF |
gvDiss(i,j) = gvDiss(i,j) + vF(i,j) |
481 |
|
ENDDO |
482 |
|
ENDDO |
483 |
|
ENDIF |
484 |
#endif /* ALLOW_SHELFICE */ |
#endif /* ALLOW_SHELFICE */ |
485 |
|
|
486 |
C-- if (momViscosity) end of block. |
C-- if (momViscosity) end of block. |
774 |
CALL DIAGNOSTICS_FILL(KE, 'momKE ',k,1,2,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(KE, 'momKE ',k,1,2,bi,bj,myThid) |
775 |
IF (momViscosity) THEN |
IF (momViscosity) THEN |
776 |
CALL DIAGNOSTICS_FILL(hDiv, 'momHDiv ',k,1,2,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(hDiv, 'momHDiv ',k,1,2,bi,bj,myThid) |
|
CALL DIAGNOSTICS_FILL(guDiss, 'Um_Diss ',k,1,2,bi,bj,myThid) |
|
|
CALL DIAGNOSTICS_FILL(gvDiss, 'Vm_Diss ',k,1,2,bi,bj,myThid) |
|
777 |
ENDIF |
ENDIF |
778 |
IF ( useVariableVisc .OR. useStrainTensionVisc ) THEN |
IF ( useVariableVisc .OR. useStrainTensionVisc ) THEN |
779 |
CALL DIAGNOSTICS_FILL(tension, 'Tension ',k,1,2,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(tension, 'Tension ',k,1,2,bi,bj,myThid) |