3 |
|
|
4 |
#include "MOM_VECINV_OPTIONS.h" |
#include "MOM_VECINV_OPTIONS.h" |
5 |
|
|
6 |
SUBROUTINE MOM_VECINV( |
SUBROUTINE MOM_VECINV( |
7 |
I bi,bj,iMin,iMax,jMin,jMax,k,kUp,kDown, |
I bi,bj,iMin,iMax,jMin,jMax,k,kUp,kDown, |
8 |
I KappaRU, KappaRV, |
I KappaRU, KappaRV, |
9 |
U fVerU, fVerV, |
U fVerU, fVerV, |
71 |
_RL vrF(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL vrF(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
72 |
_RL uCf(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL uCf(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
73 |
_RL vCf(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL vCf(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
c _RL mT (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
74 |
_RS hFacZ (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RS hFacZ (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
75 |
_RS r_hFacZ (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RS r_hFacZ (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
76 |
_RL uFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL uFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
93 |
INTEGER i,j,k |
INTEGER i,j,k |
94 |
C xxxFac - On-off tracer parameters used for switching terms off. |
C xxxFac - On-off tracer parameters used for switching terms off. |
95 |
_RL ArDudrFac |
_RL ArDudrFac |
|
c _RL mtFacU |
|
96 |
_RL ArDvdrFac |
_RL ArDvdrFac |
|
c _RL mtFacV |
|
97 |
_RL sideMaskFac |
_RL sideMaskFac |
98 |
LOGICAL bottomDragTerms |
LOGICAL bottomDragTerms |
99 |
LOGICAL writeDiag |
LOGICAL writeDiag |
143 |
vrF(i,j) = 0. |
vrF(i,j) = 0. |
144 |
uCf(i,j) = 0. |
uCf(i,j) = 0. |
145 |
vCf(i,j) = 0. |
vCf(i,j) = 0. |
|
c mT(i,j) = 0. |
|
146 |
del2u(i,j) = 0. |
del2u(i,j) = 0. |
147 |
del2v(i,j) = 0. |
del2v(i,j) = 0. |
148 |
dStar(i,j) = 0. |
dStar(i,j) = 0. |
168 |
C-- Term by term tracer parmeters |
C-- Term by term tracer parmeters |
169 |
C o U momentum equation |
C o U momentum equation |
170 |
ArDudrFac = vfFacMom*1. |
ArDudrFac = vfFacMom*1. |
|
c mTFacU = mtFacMom*1. |
|
171 |
C o V momentum equation |
C o V momentum equation |
172 |
ArDvdrFac = vfFacMom*1. |
ArDvdrFac = vfFacMom*1. |
|
c mTFacV = mtFacMom*1. |
|
173 |
|
|
174 |
C note: using standard stencil (no mask) results in under-estimating |
C note: using standard stencil (no mask) results in under-estimating |
175 |
C vorticity at a no-slip boundary by a factor of 2 = sideDragFactor |
C vorticity at a no-slip boundary by a factor of 2 = sideDragFactor |
207 |
CALL MOM_CALC_RELVORT3(bi,bj,k,uFld,vFld,hFacZ,vort3,myThid) |
CALL MOM_CALC_RELVORT3(bi,bj,k,uFld,vFld,hFacZ,vort3,myThid) |
208 |
|
|
209 |
IF (momViscosity) THEN |
IF (momViscosity) THEN |
210 |
C-- For viscous term, compute horizontal divergence, tension & strain |
C-- For viscous term, compute horizontal divergence, tension & strain |
211 |
C and mask relative vorticity (free-slip case): |
C and mask relative vorticity (free-slip case): |
212 |
|
|
213 |
CALL MOM_CALC_HDIV(bi,bj,k,2,uFld,vFld,hDiv,myThid) |
CALL MOM_CALC_HDIV(bi,bj,k,2,uFld,vFld,hDiv,myThid) |
285 |
I viscAh_Z,viscAh_D,viscA4_Z,viscA4_D, |
I viscAh_Z,viscAh_D,viscA4_Z,viscA4_D, |
286 |
I harmonic,biharmonic,useVariableViscosity, |
I harmonic,biharmonic,useVariableViscosity, |
287 |
O guDiss,gvDiss, |
O guDiss,gvDiss, |
288 |
& myThid) |
& myThid) |
289 |
ENDIF |
ENDIF |
290 |
C-- if (momViscosity) end of block. |
C-- if (momViscosity) end of block. |
291 |
ENDIF |
ENDIF |
321 |
ENDDO |
ENDDO |
322 |
ENDIF |
ENDIF |
323 |
|
|
324 |
C-- No-slip and drag BCs appear as body forces in cell abutting topography |
C-- No-slip and drag BCs appear as body forces in cell abutting topography |
325 |
IF (momViscosity.AND.no_slip_sides) THEN |
IF (momViscosity.AND.no_slip_sides) THEN |
326 |
C- No-slip BCs impose a drag at walls... |
C- No-slip BCs impose a drag at walls... |
327 |
CALL MOM_U_SIDEDRAG( |
CALL MOM_U_SIDEDRAG( |
386 |
ENDDO |
ENDDO |
387 |
ENDIF |
ENDIF |
388 |
|
|
389 |
C-- No-slip and drag BCs appear as body forces in cell abutting topography |
C-- No-slip and drag BCs appear as body forces in cell abutting topography |
390 |
IF (momViscosity.AND.no_slip_sides) THEN |
IF (momViscosity.AND.no_slip_sides) THEN |
391 |
C- No-slip BCs impose a drag at walls... |
C- No-slip BCs impose a drag at walls... |
392 |
CALL MOM_V_SIDEDRAG( |
CALL MOM_V_SIDEDRAG( |
475 |
gV(i,j,k,bi,bj) = vCf(i,j) |
gV(i,j,k,bi,bj) = vCf(i,j) |
476 |
ENDDO |
ENDDO |
477 |
ENDDO |
ENDDO |
|
|
|
478 |
IF ( writeDiag ) THEN |
IF ( writeDiag ) THEN |
479 |
IF (snapshot_mdsio) THEN |
IF (snapshot_mdsio) THEN |
480 |
CALL WRITE_LOCAL_RL('fV','I10',1,uCf,bi,bj,k,myIter,myThid) |
CALL WRITE_LOCAL_RL('fV','I10',1,uCf,bi,bj,k,myIter,myThid) |
495 |
CALL DIAGNOSTICS_FILL(vCf,'Vm_Cori ',k,1,2,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(vCf,'Vm_Cori ',k,1,2,bi,bj,myThid) |
496 |
ENDIF |
ENDIF |
497 |
#endif /* ALLOW_DIAGNOSTICS */ |
#endif /* ALLOW_DIAGNOSTICS */ |
|
|
|
498 |
ELSE |
ELSE |
499 |
DO j=jMin,jMax |
DO j=jMin,jMax |
500 |
DO i=iMin,iMax |
DO i=iMin,iMax |
626 |
C-- end if momAdvection |
C-- end if momAdvection |
627 |
ENDIF |
ENDIF |
628 |
|
|
629 |
C-- Metric terms for curvilinear grid systems |
C-- 3.D Coriolis term (horizontal momentum, Eastward component: -f'*w) |
630 |
c IF (usingSphericalPolarMTerms) THEN |
IF ( nonHydrostatic.OR.quasiHydrostatic ) THEN |
631 |
C o Spherical polar grid metric terms |
CALL MOM_U_CORIOLIS_NH(bi,bj,k,wVel,uCf,myThid) |
632 |
c CALL MOM_U_METRIC_NH(bi,bj,k,uFld,wVel,mT,myThid) |
DO j=jMin,jMax |
633 |
c DO j=jMin,jMax |
DO i=iMin,iMax |
634 |
c DO i=iMin,iMax |
gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j) |
635 |
c gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mTFacU*mT(i,j) |
ENDDO |
636 |
c ENDDO |
ENDDO |
637 |
c ENDDO |
IF ( usingCurvilinearGrid ) THEN |
638 |
c CALL MOM_V_METRIC_NH(bi,bj,k,vFld,wVel,mT,myThid) |
C- presently, non zero angleSinC array only supported with Curvilinear-Grid |
639 |
c DO j=jMin,jMax |
CALL MOM_V_CORIOLIS_NH(bi,bj,k,wVel,vCf,myThid) |
640 |
c DO i=iMin,iMax |
DO j=jMin,jMax |
641 |
c gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mTFacV*mT(i,j) |
DO i=iMin,iMax |
642 |
c ENDDO |
gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j) |
643 |
c ENDDO |
ENDDO |
644 |
c ENDIF |
ENDDO |
645 |
|
ENDIF |
646 |
|
ENDIF |
647 |
|
|
648 |
|
C-- Non-Hydrostatic (spherical) metric terms |
649 |
|
IF ( useNHMTerms ) THEN |
650 |
|
CALL MOM_U_METRIC_NH(bi,bj,k,uFld,wVel,uCf,myThid) |
651 |
|
DO j=jMin,jMax |
652 |
|
DO i=iMin,iMax |
653 |
|
gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j) |
654 |
|
ENDDO |
655 |
|
ENDDO |
656 |
|
CALL MOM_V_METRIC_NH(bi,bj,k,vFld,wVel,vCf,myThid) |
657 |
|
DO j=jMin,jMax |
658 |
|
DO i=iMin,iMax |
659 |
|
gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j) |
660 |
|
ENDDO |
661 |
|
ENDDO |
662 |
|
ENDIF |
663 |
|
|
664 |
C-- Set du/dt & dv/dt on boundaries to zero |
C-- Set du/dt & dv/dt on boundaries to zero |
665 |
DO j=jMin,jMax |
DO j=jMin,jMax |