File indexing completed on 2024-02-01 06:10:43 UTC
view on githubraw file Latest commit 427e24e1 on 2024-01-31 16:50:14 UTC
af53f2701c Jean*0001 #include "MOM_COMMON_OPTIONS.h"
0002
0003
0004
0005
0006
0007 SUBROUTINE MOM_QUASIHYDROSTATIC(
ee19c4a296 Jean*0008 I bi, bj, k,
af53f2701c Jean*0009 I uFld, vFld,
ee19c4a296 Jean*0010 U effectiveBuoy,
0011 I myTime, myIter, myThid )
af53f2701c Jean*0012
0013
0014
0015
0016
0017
0018
0019
0020 IMPLICIT NONE
0021
0022
0023 #include "SIZE.h"
0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
0026 #include "GRID.h"
ee19c4a296 Jean*0027 #ifdef ALLOW_QHYD_STAGGER_TS
0028 # include "RESTART.h"
0029 # include "NH_VARS.h"
0030 #endif
af53f2701c Jean*0031
0032
0033
ee19c4a296 Jean*0034
af53f2701c Jean*0035
0036
0037
ee19c4a296 Jean*0038
0039
af53f2701c Jean*0040
ee19c4a296 Jean*0041 INTEGER bi, bj, k
af53f2701c Jean*0042 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0043 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
ee19c4a296 Jean*0044 _RL myTime
0045 INTEGER myIter
af53f2701c Jean*0046 INTEGER myThid
0047
0048
c178b9393a Jean*0049
0050 _RL effectiveBuoy(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
af53f2701c Jean*0051
0052
ee19c4a296 Jean*0053
0054
0055
af53f2701c Jean*0056
43262d8cdd Jean*0057 INTEGER iMin,iMax,jMin,jMax
0058 PARAMETER( iMin = 0 , iMax = sNx+1 )
0059 PARAMETER( jMin = 0 , jMax = sNy+1 )
ee19c4a296 Jean*0060 INTEGER i, j
0061 _RL gWinBuoy(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0062 #ifdef ALLOW_QHYD_STAGGER_TS
0063 _RL gw_AB (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0064 #endif
af53f2701c Jean*0065 _RL scalingFactor
0066
0067
427e24e121 Jean*0068 IF ( select3dCoriScheme.GE.1 .OR. useNHMTerms ) THEN
ee19c4a296 Jean*0069
0070 IF ( usingZCoords ) THEN
c178b9393a Jean*0071
0072
ee19c4a296 Jean*0073 scalingFactor = rhoConst*gravitySign
0074 & *recip_gravity*recip_gravFacC(k)
af53f2701c Jean*0075
ee19c4a296 Jean*0076
c178b9393a Jean*0077
ee19c4a296 Jean*0078 ELSEIF ( fluidIsWater ) THEN
c178b9393a Jean*0079
0080
5b172de0d2 Jean*0081
0082
0083
0084 scalingFactor = ( oneRL / rhoRef(k) )*recip_gravity
c178b9393a Jean*0085
ee19c4a296 Jean*0086 ELSE
c178b9393a Jean*0087
0088
ee19c4a296 Jean*0089 scalingFactor = tRef(k)*recip_gravity
c178b9393a Jean*0090
ee19c4a296 Jean*0091 ENDIF
af53f2701c Jean*0092
ee19c4a296 Jean*0093 DO j=1-OLy,sNy+OLy
0094 DO i=1-OLx,sNx+OLx
0095 gWinBuoy(i,j) = 0. _d 0
0096 ENDDO
9496c6c9ef Jean*0097 ENDDO
af53f2701c Jean*0098
427e24e121 Jean*0099 IF ( select3dCoriScheme.GE.1 ) THEN
ee19c4a296 Jean*0100 DO j=jMin,jMax
0101 DO i=iMin,iMax
0102 gWinBuoy(i,j) = fCoriCos(i,j,bi,bj)*
0103 & ( angleCosC(i,j,bi,bj)*halfRL
0104 & *( uFld(i,j,k,bi,bj) + uFld(i+1,j,k,bi,bj) )
0105 & -angleSinC(i,j,bi,bj)*halfRL
0106 & *( vFld(i,j,k,bi,bj) + vFld(i,j+1,k,bi,bj) )
0107 & )
0108 ENDDO
0109 ENDDO
0110 ENDIF
0111
0112 IF ( useNHMTerms ) THEN
0113 DO j=jMin,jMax
0114 DO i=iMin,iMax
0115 gWinBuoy(i,j) = gWinBuoy(i,j)
0116 & + ( ( uFld( i ,j,k,bi,bj)*uFld( i ,j,k,bi,bj)
0117 & + uFld(i+1,j,k,bi,bj)*uFld(i+1,j,k,bi,bj) )
0118 & + ( vFld(i, j ,k,bi,bj)*vFld(i, j ,k,bi,bj)
0119 & + vFld(i,j+1,k,bi,bj)*vFld(i,j+1,k,bi,bj) )
0120 & )* halfRL*recip_rSphere*recip_deepFacC(k)
0121 ENDDO
0122 ENDDO
0123 ENDIF
0124
0125 #ifdef ALLOW_QHYD_STAGGER_TS
0126 IF ( staggerTimeStep ) THEN
0127 # ifdef ALLOW_ADAMSBASHFORTH_3
0128 CALL ADAMS_BASHFORTH3( bi, bj, k, 1,
0129 U gWinBuoy,
0130 U QHydGwNm,
0131 O gw_AB,
0132 I qHydStartAB, myIter, myThid )
0133 # else /* ALLOW_ADAMSBASHFORTH_3 */
0134 CALL ADAMS_BASHFORTH2( bi, bj, 1, 1,
0135 U gWinBuoy,
0136 U QHydGwNm(1-OLx,1-OLy,k,bi,bj),
0137 O gw_AB,
0138 I qHydStartAB, myIter, myThid )
0139 # endif /* ALLOW_ADAMSBASHFORTH_3 */
0140 ENDIF
0141 #endif /* ALLOW_QHYD_STAGGER_TS */
0142
0143 DO j=jMin,jMax
0144 DO i=iMin,iMax
0145 effectiveBuoy(i,j) = effectiveBuoy(i,j)
0146 & + scalingFactor*gWinBuoy(i,j)
0147 ENDDO
af53f2701c Jean*0148 ENDDO
ee19c4a296 Jean*0149
af53f2701c Jean*0150 ENDIF
0151
0152 RETURN
0153 END