68 |
C buoyFreq - buoyancy freqency |
C buoyFreq - buoyancy freqency |
69 |
C TKEdissipation - dissipation of TKE |
C TKEdissipation - dissipation of TKE |
70 |
C GGL90mixingLength- mixing length of scheme following Banke+Delecuse |
C GGL90mixingLength- mixing length of scheme following Banke+Delecuse |
71 |
|
C rMixingLength- inverse of mixing length |
72 |
C totalDepth - thickness of water column (inverse of recip_Rcol) |
C totalDepth - thickness of water column (inverse of recip_Rcol) |
73 |
C TKEPrandtlNumber - here, an empirical function of the Richardson number |
C TKEPrandtlNumber - here, an empirical function of the Richardson number |
74 |
C rhoK, rhoKm1 - density at layer K and Km1 (relative to K) |
C rhoK, rhoKm1 - density at layer K and Km1 (relative to K) |
87 |
_RL tempU, tempV, prTemp |
_RL tempU, tempV, prTemp |
88 |
_RL TKEPrandtlNumber (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL TKEPrandtlNumber (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
89 |
_RL GGL90mixingLength(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL GGL90mixingLength(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
90 |
|
_RL rMixingLength(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
91 |
_RL KappaE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL KappaE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
92 |
_RL rhoK (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL rhoK (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
93 |
_RL rhoKm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL rhoKm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
112 |
jMax = sNy+OLy-1 |
jMax = sNy+OLy-1 |
113 |
|
|
114 |
C set separate time step (should be deltaTtracer) |
C set separate time step (should be deltaTtracer) |
115 |
deltaTggl90 = deltaTtracer |
deltaTggl90 = dTtracerLev(1) |
116 |
C |
C |
117 |
kSurf = 1 |
kSurf = 1 |
118 |
C implicit timestepping weights for dissipation |
C implicit timestepping weights for dissipation |
128 |
gTKE(I,J,K) = 0. _d 0 |
gTKE(I,J,K) = 0. _d 0 |
129 |
KappaE(I,J,K) = 0. _d 0 |
KappaE(I,J,K) = 0. _d 0 |
130 |
TKEPrandtlNumber(I,J,K) = 0. _d 0 |
TKEPrandtlNumber(I,J,K) = 0. _d 0 |
131 |
GGL90mixingLength(I,J,K) = 0. _d 0 |
GGL90mixingLength(I,J,K) = GGL90mixingLengthMin |
132 |
|
rMixingLength(I,J,K) = 0. _d 0 |
133 |
ENDDO |
ENDDO |
134 |
ENDDO |
ENDDO |
135 |
ENDDO |
ENDDO |
177 |
C compute Prandtl number (always greater than 0) |
C compute Prandtl number (always greater than 0) |
178 |
prTemp = 1. _d 0 |
prTemp = 1. _d 0 |
179 |
IF ( RiNumber .GE. 0.2 ) prTemp = 5.0 * RiNumber |
IF ( RiNumber .GE. 0.2 ) prTemp = 5.0 * RiNumber |
180 |
TKEPrandtlNumber(I,J,K) = MIN(10.,prTemp) |
TKEPrandtlNumber(I,J,K) = MIN(10.0 _d 0,prTemp) |
181 |
C mixing length |
C mixing length |
182 |
GGL90mixingLength(I,J,K) = |
GGL90mixingLength(I,J,K) = |
183 |
& SQRTTKE/SQRT( MAX(Nsquare,GGL90eps) ) |
& SQRTTKE/SQRT( MAX(Nsquare,GGL90eps) ) |
187 |
C impose minimum mixing length (to avoid division by zero) |
C impose minimum mixing length (to avoid division by zero) |
188 |
GGL90mixingLength(I,J,K) = MAX(GGL90mixingLength(I,J,K), |
GGL90mixingLength(I,J,K) = MAX(GGL90mixingLength(I,J,K), |
189 |
& GGL90mixingLengthMin) |
& GGL90mixingLengthMin) |
190 |
|
rMixingLength(I,J,K) = 1. _d 0 /GGL90mixingLength(I,J,K) |
191 |
C viscosity of last timestep |
C viscosity of last timestep |
192 |
KappaM = GGL90ck*GGL90mixingLength(I,J,K)*SQRTTKE |
KappaM = GGL90ck*GGL90mixingLength(I,J,K)*SQRTTKE |
193 |
KappaE(I,J,K) = KappaM*GGL90alpha |
KappaE(I,J,K) = KappaM*GGL90alpha |
194 |
C dissipation term |
C dissipation term |
195 |
TKEdissipation = ab05*GGL90ceps |
TKEdissipation = ab05*GGL90ceps |
196 |
& *SQRTTKE/GGL90mixingLength(I,J,K) |
& *SQRTTKE*rMixingLength(I,J,K) |
197 |
& *GGL90TKE(I,J,K,bi,bj) |
& *GGL90TKE(I,J,K,bi,bj) |
198 |
C sum up contributions to form the right hand side |
C sum up contributions to form the right hand side |
199 |
gTKE(I,J,K) = GGL90TKE(I,J,K,bi,bj) |
gTKE(I,J,K) = GGL90TKE(I,J,K,bi,bj) |
309 |
DO i=iMin,iMax |
DO i=iMin,iMax |
310 |
b(i,j,k) = 1. _d 0 - c(i,j,k) - a(i,j,k) |
b(i,j,k) = 1. _d 0 - c(i,j,k) - a(i,j,k) |
311 |
& + ab15*deltaTggl90*GGL90ceps*SQRT(GGL90TKE(I,J,K,bi,bj)) |
& + ab15*deltaTggl90*GGL90ceps*SQRT(GGL90TKE(I,J,K,bi,bj)) |
312 |
& /GGL90mixingLength(I,J,K) |
& *rMixingLength(I,J,K) |
313 |
ENDDO |
ENDDO |
314 |
ENDDO |
ENDDO |
315 |
ENDDO |
ENDDO |
328 |
& + surfaceForcingV(I, J+1,bi,bj) ) )**2 |
& + surfaceForcingV(I, J+1,bi,bj) ) )**2 |
329 |
& ) |
& ) |
330 |
C Dirichlet surface boundary condition for TKE |
C Dirichlet surface boundary condition for TKE |
331 |
gTKE(I,J,kSurf) = MAX(GGL90TKEmin,GGL90m2*uStarSquare) |
gTKE(I,J,kSurf) = MAX(GGL90TKEsurfMin,GGL90m2*uStarSquare) |
332 |
& *maskC(I,J,kSurf,bi,bj) |
& *maskC(I,J,kSurf,bi,bj) |
333 |
C Dirichlet bottom boundary condition for TKE = GGL90TKEbottom |
C Dirichlet bottom boundary condition for TKE = GGL90TKEbottom |
334 |
kBottom = MIN(MAX(kLowC(I,J,bi,bj),1),Nr) |
kBottom = MIN(MAX(kLowC(I,J,bi,bj),1),Nr) |
369 |
KappaH = KappaM/TKEPrandtlNumber(I,J,K) |
KappaH = KappaM/TKEPrandtlNumber(I,J,K) |
370 |
C Set a minium (= background) value |
C Set a minium (= background) value |
371 |
KappaM = MAX(KappaM,viscAr) |
KappaM = MAX(KappaM,viscAr) |
372 |
KappaH = MAX(KappaH,diffKrT) |
KappaH = MAX(KappaH,diffKrNrT(k)) |
373 |
C Set a maximum and mask land point |
C Set a maximum and mask land point |
374 |
GGL90viscAr(I,J,K,bi,bj) = MIN(KappaM,GGL90viscMax) |
GGL90viscAr(I,J,K,bi,bj) = MIN(KappaM,GGL90viscMax) |
375 |
& * maskC(I,J,K,bi,bj) |
& * maskC(I,J,K,bi,bj) |