2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
#include "MOM_VECINV_OPTIONS.h" |
#include "MOM_VECINV_OPTIONS.h" |
5 |
|
#ifdef ALLOW_AUTODIFF |
6 |
|
# include "AUTODIFF_OPTIONS.h" |
7 |
|
#endif |
8 |
#ifdef ALLOW_MOM_COMMON |
#ifdef ALLOW_MOM_COMMON |
9 |
# include "MOM_COMMON_OPTIONS.h" |
# include "MOM_COMMON_OPTIONS.h" |
10 |
#endif |
#endif |
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) |
91 |
EXTERNAL DIFFERENT_MULTIPLE |
EXTERNAL DIFFERENT_MULTIPLE |
92 |
|
|
93 |
C == Local variables == |
C == Local variables == |
94 |
|
C strainBC :: same as strain but account for no-slip BC |
95 |
|
C vort3BC :: same as vort3 but account for no-slip BC |
96 |
_RL vF (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL vF (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
97 |
_RL vrF(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL vrF(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
98 |
_RL uCf(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL uCf(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
108 |
_RL zStar (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL zStar (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
109 |
_RL tension (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL tension (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
110 |
_RL strain (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL strain (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
111 |
|
_RL strainBC(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
112 |
_RL KE (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL KE (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
113 |
_RL omega3 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL omega3 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
114 |
_RL vort3 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL vort3 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
115 |
|
_RL vort3BC (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
116 |
_RL hDiv (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL hDiv (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
117 |
_RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
118 |
_RL viscAh_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL viscAh_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
135 |
CHARACTER*(1) pf |
CHARACTER*(1) pf |
136 |
#endif |
#endif |
137 |
|
|
138 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
139 |
C-- only the kDown part of fverU/V is set in this subroutine |
C-- only the kDown part of fverU/V is set in this subroutine |
140 |
C-- the kUp is still required |
C-- the kUp is still required |
141 |
C-- In the case of mom_fluxform Kup is set as well |
C-- In the case of mom_fluxform Kup is set as well |
207 |
c viscA4_Z(i,j) = 0. |
c viscA4_Z(i,j) = 0. |
208 |
c viscA4_D(i,j) = 0. |
c viscA4_D(i,j) = 0. |
209 |
strain(i,j) = 0. _d 0 |
strain(i,j) = 0. _d 0 |
210 |
|
strainBC(i,j)= 0. _d 0 |
211 |
tension(i,j) = 0. _d 0 |
tension(i,j) = 0. _d 0 |
212 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
213 |
hFacZ(i,j) = 0. _d 0 |
hFacZ(i,j) = 0. _d 0 |
214 |
#endif |
#endif |
215 |
ENDDO |
ENDDO |
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 |
256 |
|
|
257 |
CALL MOM_CALC_RELVORT3(bi,bj,k,uFld,vFld,hFacZ,vort3,myThid) |
CALL MOM_CALC_RELVORT3(bi,bj,k,uFld,vFld,hFacZ,vort3,myThid) |
258 |
|
|
259 |
|
C- mask vort3 and account for no-slip / free-slip BC in vort3BC: |
260 |
|
DO j=1-OLy,sNy+OLy |
261 |
|
DO i=1-OLx,sNx+OLx |
262 |
|
vort3BC(i,j) = vort3(i,j) |
263 |
|
IF ( hFacZ(i,j).EQ.zeroRS ) THEN |
264 |
|
vort3BC(i,j) = sideMaskFac*vort3BC(i,j) |
265 |
|
vort3(i,j) = 0. |
266 |
|
ENDIF |
267 |
|
ENDDO |
268 |
|
ENDDO |
269 |
|
|
270 |
IF (momViscosity) THEN |
IF (momViscosity) THEN |
271 |
C-- For viscous term, compute horizontal divergence, tension & strain |
C-- For viscous term, compute horizontal divergence, tension & strain |
272 |
C and mask relative vorticity (free-slip case): |
C and mask relative vorticity (free-slip case): |
288 |
ENDIF |
ENDIF |
289 |
#endif /* NONLIN_FRSURF */ |
#endif /* NONLIN_FRSURF */ |
290 |
|
|
|
#ifdef ALLOW_AUTODIFF_TAMC |
|
|
CADJ STORE vort3(:,:) = |
|
|
CADJ & comlev1_bibj_k, key = imomkey, byte = isbyte |
|
|
#endif |
|
|
|
|
291 |
CALL MOM_CALC_HDIV(bi,bj,k,2,uFld,vFld,hDiv,myThid) |
CALL MOM_CALC_HDIV(bi,bj,k,2,uFld,vFld,hDiv,myThid) |
292 |
|
|
293 |
CALL MOM_CALC_TENSION(bi,bj,k,uFld,vFld,tension,myThid) |
IF ( useVariableVisc .OR. useStrainTensionVisc ) THEN |
294 |
|
CALL MOM_CALC_TENSION( bi,bj,k,uFld,vFld,tension,myThid ) |
295 |
CALL MOM_CALC_STRAIN(bi,bj,k,uFld,vFld,hFacZ,strain,myThid) |
CALL MOM_CALC_STRAIN( bi,bj,k,uFld,vFld,hFacZ,strain,myThid ) |
296 |
|
C- mask strain and account for no-slip / free-slip BC in strainBC: |
297 |
C- account for no-slip / free-slip BC: |
DO j=1-OLy,sNy+OLy |
298 |
DO j=1-OLy,sNy+OLy |
DO i=1-OLx,sNx+OLx |
299 |
DO i=1-OLx,sNx+OLx |
strainBC(i,j) = strain(i,j) |
300 |
IF ( hFacZ(i,j).EQ.0. ) THEN |
IF ( hFacZ(i,j).EQ.zeroRS ) THEN |
301 |
vort3(i,j) = sideMaskFac*vort3(i,j) |
strainBC(i,j) = sideMaskFac*strainBC(i,j) |
302 |
strain(i,j) = sideMaskFac*strain(i,j) |
strain(i,j) = 0. |
303 |
ENDIF |
ENDIF |
304 |
|
ENDDO |
305 |
ENDDO |
ENDDO |
306 |
ENDDO |
ENDIF |
307 |
|
|
308 |
C-- Calculate Lateral Viscosities |
C-- Calculate Lateral Viscosities |
309 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
315 |
ENDDO |
ENDDO |
316 |
ENDDO |
ENDDO |
317 |
IF ( useVariableVisc ) THEN |
IF ( useVariableVisc ) THEN |
318 |
|
C- uses vort3BC & strainBC which account for no-slip / free-slip BC |
319 |
CALL MOM_CALC_VISC( bi, bj, k, |
CALL MOM_CALC_VISC( bi, bj, k, |
320 |
O viscAh_Z, viscAh_D, viscA4_Z, viscA4_D, |
O viscAh_Z, viscAh_D, viscA4_Z, viscA4_D, |
321 |
I hDiv, vort3, tension, strain, KE, hfacZ, |
I hDiv, vort3BC, tension, strainBC, KE, hfacZ, |
322 |
I myThid ) |
I myThid ) |
323 |
ENDIF |
ENDIF |
324 |
|
|
326 |
IF (useBiharmonicVisc) THEN |
IF (useBiharmonicVisc) THEN |
327 |
CALL MOM_VI_DEL2UV(bi,bj,k,hDiv,vort3,hFacZ, |
CALL MOM_VI_DEL2UV(bi,bj,k,hDiv,vort3,hFacZ, |
328 |
O del2u,del2v, |
O del2u,del2v, |
329 |
& myThid) |
I myThid) |
330 |
CALL MOM_CALC_HDIV(bi,bj,k,2,del2u,del2v,dStar,myThid) |
CALL MOM_CALC_HDIV(bi,bj,k,2,del2u,del2v,dStar,myThid) |
331 |
CALL MOM_CALC_RELVORT3(bi,bj,k, |
CALL MOM_CALC_RELVORT3(bi,bj,k, |
332 |
& del2u,del2v,hFacZ,zStar,myThid) |
& del2u,del2v,hFacZ,zStar,myThid) |
|
IF ( writeDiag ) THEN |
|
|
CALL WRITE_LOCAL_RL( 'del2u', 'I10', 1, del2u, |
|
|
& bi,bj,k, myIter, myThid ) |
|
|
CALL WRITE_LOCAL_RL( 'del2v', 'I10', 1, del2v, |
|
|
& bi,bj,k, myIter, myThid ) |
|
|
CALL WRITE_LOCAL_RL( 'dStar', 'I10', 1, dStar, |
|
|
& bi,bj,k, myIter, myThid ) |
|
|
CALL WRITE_LOCAL_RL( 'zStar', 'I10', 1, zStar, |
|
|
& bi,bj,k, myIter, myThid ) |
|
|
ENDIF |
|
333 |
ENDIF |
ENDIF |
334 |
|
|
|
C- Strain diagnostics: |
|
|
IF ( writeDiag ) THEN |
|
|
IF (snapshot_mdsio) THEN |
|
|
CALL WRITE_LOCAL_RL('Ds','I10',1,strain,bi,bj,k,myIter,myThid) |
|
|
ENDIF |
|
|
#ifdef ALLOW_MNC |
|
|
IF (useMNC .AND. snapshot_mnc) THEN |
|
|
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Ds',strain, |
|
|
& offsets, myThid) |
|
|
ENDIF |
|
|
#endif /* ALLOW_MNC */ |
|
|
ENDIF |
|
|
#ifdef ALLOW_DIAGNOSTICS |
|
|
IF ( useDiagnostics ) THEN |
|
|
CALL DIAGNOSTICS_FILL(strain, 'Strain ',k,1,2,bi,bj,myThid) |
|
|
ENDIF |
|
|
#endif /* ALLOW_DIAGNOSTICS */ |
|
|
|
|
335 |
C--- Calculate dissipation terms for U and V equations |
C--- Calculate dissipation terms for U and V equations |
336 |
|
|
337 |
C in terms of tension and strain |
C- in terms of tension and strain |
338 |
IF (useStrainTensionVisc) THEN |
IF (useStrainTensionVisc) THEN |
339 |
C mask strain as if free-slip since side-drag is computed separately |
C use masked strain as if free-slip since side-drag is computed separately |
|
DO j=1-OLy,sNy+OLy |
|
|
DO i=1-OLx,sNx+OLx |
|
|
IF ( hFacZ(i,j).EQ.0. ) strain(i,j) = 0. _d 0 |
|
|
ENDDO |
|
|
ENDDO |
|
340 |
CALL MOM_HDISSIP( bi, bj, k, |
CALL MOM_HDISSIP( bi, bj, k, |
341 |
I hDiv, vort3, tension, strain, KE, hFacZ, |
I tension, strain, hFacZ, |
342 |
I viscAh_Z, viscAh_D, viscA4_Z, viscA4_D, |
I viscAh_Z, viscAh_D, viscA4_Z, viscA4_D, |
343 |
I useHarmonicVisc, useBiharmonicVisc, useVariableVisc, |
I useHarmonicVisc, useBiharmonicVisc, useVariableVisc, |
344 |
O guDiss, gvDiss, |
O guDiss, gvDiss, |
345 |
I myThid ) |
I myThid ) |
346 |
ELSE |
ELSE |
347 |
C in terms of vorticity and divergence |
C- in terms of vorticity and divergence |
348 |
CALL MOM_VI_HDISSIP( bi, bj, k, |
CALL MOM_VI_HDISSIP( bi, bj, k, |
349 |
I hDiv, vort3, tension, strain, KE, hFacZ,dStar,zStar, |
I hDiv, vort3, dStar, zStar, hFacZ, |
350 |
I viscAh_Z, viscAh_D, viscA4_Z, viscA4_D, |
I viscAh_Z, viscAh_D, viscA4_Z, viscA4_D, |
351 |
I useHarmonicVisc, useBiharmonicVisc, useVariableVisc, |
I useHarmonicVisc, useBiharmonicVisc, useVariableVisc, |
352 |
O guDiss, gvDiss, |
O guDiss, gvDiss, |
353 |
& myThid ) |
I myThid ) |
354 |
ENDIF |
ENDIF |
355 |
|
|
356 |
C--- Other dissipation terms in Zonal momentum equation |
C--- Other dissipation terms in Zonal momentum equation |
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. |
489 |
C- Return to standard hfacZ (min-4) and mask vort3 accordingly: |
C- Return to standard hfacZ (min-4) and mask vort3 accordingly: |
490 |
c CALL MOM_VI_MASK_VORT3(bi,bj,k,hFacZ,r_hFacZ,vort3,myThid) |
c CALL MOM_VI_MASK_VORT3(bi,bj,k,hFacZ,r_hFacZ,vort3,myThid) |
491 |
|
|
|
C- Vorticity diagnostics: |
|
|
IF ( writeDiag ) THEN |
|
|
IF (snapshot_mdsio) THEN |
|
|
CALL WRITE_LOCAL_RL('Z3','I10',1,vort3, bi,bj,k,myIter,myThid) |
|
|
ENDIF |
|
|
#ifdef ALLOW_MNC |
|
|
IF (useMNC .AND. snapshot_mnc) THEN |
|
|
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Z3',vort3, |
|
|
& offsets, myThid) |
|
|
ENDIF |
|
|
#endif /* ALLOW_MNC */ |
|
|
ENDIF |
|
|
#ifdef ALLOW_DIAGNOSTICS |
|
|
IF ( useDiagnostics ) THEN |
|
|
CALL DIAGNOSTICS_FILL(vort3, 'momVort3',k,1,2,bi,bj,myThid) |
|
|
ENDIF |
|
|
#endif /* ALLOW_DIAGNOSTICS */ |
|
|
|
|
492 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
493 |
|
|
494 |
C--- Prepare for Advection & Coriolis terms: |
C--- Prepare for Advection & Coriolis terms: |
495 |
C- Mask relative vorticity and calculate absolute vorticity |
C- calculate absolute vorticity |
|
DO j=1-OLy,sNy+OLy |
|
|
DO i=1-OLx,sNx+OLx |
|
|
IF ( hFacZ(i,j).EQ.0. ) vort3(i,j) = 0. |
|
|
ENDDO |
|
|
ENDDO |
|
496 |
IF (useAbsVorticity) |
IF (useAbsVorticity) |
497 |
& CALL MOM_CALC_ABSVORT3(bi,bj,k,vort3,omega3,myThid) |
& CALL MOM_CALC_ABSVORT3(bi,bj,k,vort3,omega3,myThid) |
498 |
|
|
725 |
#endif /* ALLOW_DEBUG */ |
#endif /* ALLOW_DEBUG */ |
726 |
|
|
727 |
IF ( writeDiag ) THEN |
IF ( writeDiag ) THEN |
728 |
|
IF (useBiharmonicVisc) THEN |
729 |
|
CALL WRITE_LOCAL_RL( 'del2u', 'I10', 1, del2u, |
730 |
|
& bi,bj,k, myIter, myThid ) |
731 |
|
CALL WRITE_LOCAL_RL( 'del2v', 'I10', 1, del2v, |
732 |
|
& bi,bj,k, myIter, myThid ) |
733 |
|
CALL WRITE_LOCAL_RL( 'dStar', 'I10', 1, dStar, |
734 |
|
& bi,bj,k, myIter, myThid ) |
735 |
|
CALL WRITE_LOCAL_RL( 'zStar', 'I10', 1, zStar, |
736 |
|
& bi,bj,k, myIter, myThid ) |
737 |
|
ENDIF |
738 |
IF (snapshot_mdsio) THEN |
IF (snapshot_mdsio) THEN |
739 |
CALL WRITE_LOCAL_RL('W3','I10',1,omega3, bi,bj,k,myIter,myThid) |
CALL WRITE_LOCAL_RL('W3','I10',1,omega3, bi,bj,k,myIter,myThid) |
740 |
|
CALL WRITE_LOCAL_RL('Z3','I10',1,vort3BC,bi,bj,k,myIter,myThid) |
741 |
CALL WRITE_LOCAL_RL('KE','I10',1,KE, bi,bj,k,myIter,myThid) |
CALL WRITE_LOCAL_RL('KE','I10',1,KE, bi,bj,k,myIter,myThid) |
742 |
CALL WRITE_LOCAL_RL('D', 'I10',1,hDiv, bi,bj,k,myIter,myThid) |
CALL WRITE_LOCAL_RL('D', 'I10',1,hDiv, bi,bj,k,myIter,myThid) |
743 |
CALL WRITE_LOCAL_RL('Dt','I10',1,tension,bi,bj,k,myIter,myThid) |
CALL WRITE_LOCAL_RL('Dt','I10',1,tension,bi,bj,k,myIter,myThid) |
744 |
|
CALL WRITE_LOCAL_RL( 'Ds', 'I10', 1, strainBC, |
745 |
|
& bi,bj,k, myIter, myThid ) |
746 |
CALL WRITE_LOCAL_RL('Du','I10',1,guDiss, bi,bj,k,myIter,myThid) |
CALL WRITE_LOCAL_RL('Du','I10',1,guDiss, bi,bj,k,myIter,myThid) |
747 |
CALL WRITE_LOCAL_RL('Dv','I10',1,gvDiss, bi,bj,k,myIter,myThid) |
CALL WRITE_LOCAL_RL('Dv','I10',1,gvDiss, bi,bj,k,myIter,myThid) |
748 |
ENDIF |
ENDIF |
750 |
IF (useMNC .AND. snapshot_mnc) THEN |
IF (useMNC .AND. snapshot_mnc) THEN |
751 |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'W3',omega3, |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'W3',omega3, |
752 |
& offsets, myThid) |
& offsets, myThid) |
753 |
|
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Z3',vort3BC, |
754 |
|
& offsets, myThid) |
755 |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'KE',KE, |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'KE',KE, |
756 |
& offsets, myThid) |
& offsets, myThid) |
757 |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'D', hDiv, |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'D', hDiv, |
758 |
& offsets, myThid) |
& offsets, myThid) |
759 |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Dt',tension, |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Dt',tension, |
760 |
& offsets, myThid) |
& offsets, myThid) |
761 |
|
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Ds',strainBC, |
762 |
|
& offsets, myThid) |
763 |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Du',guDiss, |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Du',guDiss, |
764 |
& offsets, myThid) |
& offsets, myThid) |
765 |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Dv',gvDiss, |
CALL MNC_CW_RL_W_OFFSET(pf,'mom_vi',bi,bj,'Dv',gvDiss, |
770 |
|
|
771 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
772 |
IF ( useDiagnostics ) THEN |
IF ( useDiagnostics ) THEN |
773 |
|
CALL DIAGNOSTICS_FILL(vort3BC,'momVort3',k,1,2,bi,bj,myThid) |
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) |
777 |
CALL DIAGNOSTICS_FILL(tension,'Tension ',k,1,2,bi,bj,myThid) |
ENDIF |
778 |
CALL DIAGNOSTICS_FILL(guDiss, 'Um_Diss ',k,1,2,bi,bj,myThid) |
IF ( useVariableVisc .OR. useStrainTensionVisc ) THEN |
779 |
CALL DIAGNOSTICS_FILL(gvDiss, 'Vm_Diss ',k,1,2,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(tension, 'Tension ',k,1,2,bi,bj,myThid) |
780 |
|
CALL DIAGNOSTICS_FILL(strainBC,'Strain ',k,1,2,bi,bj,myThid) |
781 |
ENDIF |
ENDIF |
782 |
CALL DIAGNOSTICS_FILL(gU(1-OLx,1-OLy,k,bi,bj), |
CALL DIAGNOSTICS_FILL(gU(1-OLx,1-OLy,k,bi,bj), |
783 |
& 'Um_Advec',k,1,2,bi,bj,myThid) |
& 'Um_Advec',k,1,2,bi,bj,myThid) |