File indexing completed on 2025-05-05 05:08:23 UTC
view on githubraw file Latest commit 31fb0e0e on 2025-05-05 02:15:14 UTC
1c99f96b44 Jean*0001 #include "MOM_COMMON_OPTIONS.h"
0002
0003
0004
0005
0006
0007
0008 SUBROUTINE MOM_INIT_FIXED( myThid )
0009
0010
b6f977b498 Jean*0011
1c99f96b44 Jean*0012
0013
0014
0015 IMPLICIT NONE
0016 #include "SIZE.h"
0017 #include "EEPARAMS.h"
0018 #include "PARAMS.h"
b6f977b498 Jean*0019 #include "GRID.h"
0020 #include "SURFACE.h"
0c0d21fb5c Davi*0021 #include "MOM_VISC.h"
1c99f96b44 Jean*0022
0023
42b88cde36 Jean*0024
1c99f96b44 Jean*0025 INTEGER myThid
0026
0027
b6f977b498 Jean*0028
9543c83638 Jean*0029
845dcd8102 Jean*0030 INTEGER i,j,k,bi,bj
0031 _RL recip_dt
af960ebfb4 Jean*0032 _RL twoThird
ab47de63dc Mart*0033 #ifdef ALLOW_BOTTOMDRAG_ROUGHNESS
0034
0035 INTEGER kLow
0036 _RL hLoc
0037 _RL recip_zRoughBot
0038 CHARACTER*(MAX_LEN_MBUF) msgBuf
0039 #endif
845dcd8102 Jean*0040
af960ebfb4 Jean*0041 twoThird = 2. _d 0 / 3. _d 0
845dcd8102 Jean*0042 recip_dt = 1. _d 0
ab47de63dc Mart*0043 IF ( deltaTMom.NE.0. ) recip_dt = 1. _d 0/deltaTMom
b6f977b498 Jean*0044
31fb0e0e6d Jean*0045 _BEGIN_MASTER(myThid)
0046 DO k=1,Nr
0047 deepFacAdv(k) = 1. _d 0
0048 ENDDO
0049 #ifndef MOM_USE_OLD_DEEP_VERT_ADV
0050 IF ( useNHMTerms ) THEN
0051 DO k=1,Nr
0052 deepFacAdv(k) = deepFacC(k)
0053 ENDDO
0054 ENDIF
0055 #endif
0056 _END_MASTER(myThid)
0057
18ef5132e1 Gael*0058 DO bj=myByLo(myThid), myByHi(myThid)
0059 DO bi=myBxLo(myThid), myBxHi(myThid)
845dcd8102 Jean*0060
18ef5132e1 Gael*0061 #ifdef ALLOW_3D_VISCAH
845dcd8102 Jean*0062 DO k=1,Nr
0063 DO j=1-OLy,sNy+OLy
0064 DO i=1-OLx,sNx+OLx
0065 viscAhDfld(i,j,k,bi,bj) = 0. _d 0
0066 viscAhZfld(i,j,k,bi,bj) = 0. _d 0
0067 ENDDO
0068 ENDDO
0069 ENDDO
18ef5132e1 Gael*0070 #endif
42b88cde36 Jean*0071 #ifdef ALLOW_3D_VISCA4
845dcd8102 Jean*0072 DO k=1,Nr
0073 DO j=1-OLy,sNy+OLy
0074 DO i=1-OLx,sNx+OLx
0075 viscA4Dfld(i,j,k,bi,bj) = 0. _d 0
0076 viscA4Zfld(i,j,k,bi,bj) = 0. _d 0
0077 ENDDO
0078 ENDDO
0079 ENDDO
42b88cde36 Jean*0080 #endif
845dcd8102 Jean*0081 #ifdef ALLOW_NONHYDROSTATIC
0082
0083 DO k=1,Nr
0084 DO j=1-OLy,sNy+OLy
0085 DO i=1-OLx,sNx+OLx
0086 viscAh_W(i,j,k,bi,bj) = viscAhW
0087 viscA4_W(i,j,k,bi,bj) = viscA4W
0088 ENDDO
18ef5132e1 Gael*0089 ENDDO
0090 ENDDO
845dcd8102 Jean*0091 #endif /* ALLOW_NONHYDROSTATIC */
0c0d21fb5c Davi*0092
845dcd8102 Jean*0093
0094 DO j=1-OLy,sNy+OLy
0095 DO i=1-OLx,sNx+OLx
a57a19e4e4 Jean*0096 L2_D(i,j,bi,bj) = rA(i,j,bi,bj)
0097 ENDDO
0098 ENDDO
0099 IF ( .NOT.useAreaViscLength ) THEN
845dcd8102 Jean*0100 DO j=1-OLy,sNy+OLy
0101 DO i=1-OLx,sNx+OLx
a57a19e4e4 Jean*0102 IF ( recip_dxF(i,j,bi,bj).NE.0. .OR.
0103 & recip_dyF(i,j,bi,bj).NE.0. ) THEN
0104 L2_D(i,j,bi,bj) = 2. _d 0
0105 & /((recip_dxF(i,j,bi,bj)**2+recip_dyF(i,j,bi,bj)**2))
0106 ENDIF
0107 ENDDO
0108 ENDDO
0109 ENDIF
845dcd8102 Jean*0110 DO j=1-OLy,sNy+OLy
0111 DO i=1-OLx,sNx+OLx
a57a19e4e4 Jean*0112 L3_D(i,j,bi,bj) = L2_D(i,j,bi,bj)**1.5
0113 L4rdt_D(i,j,bi,bj) = 0.03125 _d 0*recip_dt
0114 & *L2_D(i,j,bi,bj)**2
0c0d21fb5c Davi*0115 ENDDO
0116 ENDDO
0117
845dcd8102 Jean*0118 DO j=1-OLy,sNy+OLy
0119 DO i=1-OLx,sNx+OLx
a57a19e4e4 Jean*0120 L2_Z(i,j,bi,bj) = rAz(i,j,bi,bj)
0121 ENDDO
0122 ENDDO
0123 IF ( .NOT.useAreaViscLength ) THEN
845dcd8102 Jean*0124 DO j=1-OLy,sNy+OLy
0125 DO i=1-OLx,sNx+OLx
a57a19e4e4 Jean*0126 IF ( recip_dxV(i,j,bi,bj).NE.0. .OR.
0127 & recip_dyU(i,j,bi,bj).NE.0. ) THEN
0128 L2_Z(i,j,bi,bj) = 2. _d 0
0129 & /((recip_dxV(i,j,bi,bj)**2+recip_dyU(i,j,bi,bj)**2))
0130 ENDIF
0131 ENDDO
0132 ENDDO
0133 ENDIF
845dcd8102 Jean*0134 DO j=1-OLy,sNy+OLy
0135 DO i=1-OLx,sNx+OLx
a57a19e4e4 Jean*0136 L3_Z(i,j,bi,bj) = L2_Z(i,j,bi,bj)**1.5
0137 L4rdt_Z(i,j,bi,bj) = 0.03125 _d 0*recip_dt
0138 & *L2_Z(i,j,bi,bj)**2
0c0d21fb5c Davi*0139 ENDDO
0140 ENDDO
845dcd8102 Jean*0141
af960ebfb4 Jean*0142 #ifdef ALLOW_SMAG_3D
0143 DO j=1-OLy,sNy+OLy
0144 DO i=1-OLx,sNx+OLx
0145 smag3D_hLsC(i,j,bi,bj) = rA (i,j,bi,bj)**twoThird
0146 smag3D_hLsW(i,j,bi,bj) = rAw(i,j,bi,bj)**twoThird
0147 smag3D_hLsS(i,j,bi,bj) = rAs(i,j,bi,bj)**twoThird
0148 smag3D_hLsZ(i,j,bi,bj) = rAz(i,j,bi,bj)**twoThird
0149 ENDDO
0150 ENDDO
0151 #endif /* ALLOW_SMAG_3D */
0152
845dcd8102 Jean*0153
0c0d21fb5c Davi*0154 ENDDO
845dcd8102 Jean*0155 ENDDO
b6f977b498 Jean*0156
d062b1342f Gael*0157 #ifdef ALLOW_3D_VISCAH
845dcd8102 Jean*0158 IF ( viscAhDfile .NE. ' ' ) THEN
0159 CALL READ_FLD_XYZ_RL(viscAhDfile,' ',viscAhDfld,0,myThid)
0160 CALL EXCH_3D_RL( viscAhDfld, Nr, myThid )
0161 ENDIF
0162 IF ( viscAhZfile .NE. ' ' ) THEN
0163 CALL READ_FLD_XYZ_RL(viscAhZfile,' ',viscAhZfld,0,myThid)
0164 CALL EXCH_Z_3D_RL( viscAhZfld, Nr, myThid )
0165 ENDIF
42b88cde36 Jean*0166 #endif /* ALLOW_3D_VISCAH */
d062b1342f Gael*0167 #ifdef ALLOW_3D_VISCA4
845dcd8102 Jean*0168 IF ( viscA4Dfile .NE. ' ' ) THEN
0169 CALL READ_FLD_XYZ_RL(viscA4Dfile,' ',viscA4Dfld,0,myThid)
0170 CALL EXCH_3D_RL( viscA4Dfld, Nr, myThid )
0171 ENDIF
0172 IF ( viscA4Zfile .NE. ' ' ) THEN
0173 CALL READ_FLD_XYZ_RL(viscA4Zfile,' ',viscA4Zfld,0,myThid)
0174 CALL EXCH_Z_3D_RL( viscA4Zfld, Nr, myThid )
0175 ENDIF
42b88cde36 Jean*0176 #endif /* ALLOW_3D_VISCA4 */
d062b1342f Gael*0177
ab47de63dc Mart*0178 #ifdef ALLOW_BOTTOMDRAG_ROUGHNESS
0179
0180
0181 DO bj=myByLo(myThid), myByHi(myThid)
0182 DO bi=myBxLo(myThid), myBxHi(myThid)
0183 DO j=1-OLy,sNy+OLy
0184 DO i=1-OLx,sNx+OLx
0185 bottomDragCoeffW(i,j,bi,bj) = bottomDragQuadratic
0186 bottomDragCoeffS(i,j,bi,bj) = bottomDragQuadratic
0187 ENDDO
0188 ENDDO
0189 IF ( zRoughBot .GT. 0. _d 0 .AND. usingZCoords ) THEN
0190 recip_zRoughBot = 1. _d 0 / zRoughBot
0191 DO j=1-OLy,sNy+OLy
0192 DO i=1-OLx+1,sNx+OLx
0193 kLow = MIN( kLowC(i-1,j,bi,bj), kLowC(i,j,bi,bj) )
0194 IF ( kLow .GE. 1 ) THEN
0195 hLoc = ( oneRL +
0196 & 0.5*drF(kLow)*hFacW(i,j,kLow,bi,bj)*recip_zRoughBot )
0197 hLoc = 0.4 _d 0/LOG(hLoc)
0198 bottomDragCoeffW(i,j,bi,bj) = hLoc*hLoc
0199 ELSE
0200 bottomDragCoeffW(i,j,bi,bj) = 0. _d 0
0201 ENDIF
0202 ENDDO
0203 ENDDO
0204 DO j=1-OLy+1,sNy+OLy
0205 DO i=1-OLx,sNx+OLx
0206 kLow = MIN( kLowC(i,j-1,bi,bj), kLowC(i,j,bi,bj) )
0207 IF ( kLow .GE. 1 ) THEN
0208 hLoc = ( oneRL +
0209 & 0.5*drF(kLow)*hFacS(i,j,kLow,bi,bj)*recip_zRoughBot )
0210 hLoc = 0.4 _d 0/LOG(hLoc)
0211 bottomDragCoeffS(i,j,bi,bj) = hLoc*hLoc
0212 ELSE
0213 bottomDragCoeffS(i,j,bi,bj) = 0. _d 0
0214 ENDIF
0215 ENDDO
0216 ENDDO
0217 ELSEIF ( zRoughBot .GT. 0. _d 0 ) THEN
0218
0219 WRITE(msgBuf,'(2A)') 'MOM_INIT_FIXED: zRoughBot > 0.',
0220 & ' not yet implemented for P-Coordinate'
0221 CALL PRINT_ERROR( msgBuf, myThid )
0222 STOP 'ABNORMAL END: S/R MOM_INIT_FIXED'
0223 ENDIF
0224 ENDDO
0225 ENDDO
0226 #endif /* ALLOW_BOTTOMDRAG_ROUGHNESS */
0227
1c99f96b44 Jean*0228 #ifdef ALLOW_DIAGNOSTICS
0229 IF ( useDiagnostics ) THEN
0230 CALL MOM_DIAGNOSTICS_INIT( myThid )
0231 ENDIF
0232 #endif /* ALLOW_DIAGNOSTICS */
0233
0234 RETURN
0235 END