90 |
|
|
91 |
c-- KPP_CALC computes vertical viscosity and diffusivity for region |
c-- KPP_CALC computes vertical viscosity and diffusivity for region |
92 |
c (-2:sNx+3,-2:sNy+3) as required by CALC_DIFFUSIVITY and requires |
c (-2:sNx+3,-2:sNy+3) as required by CALC_DIFFUSIVITY and requires |
93 |
c values of uVel, vVel, SurfaceTendencyU, SurfaceTendencyV in the |
c values of uVel, vVel, surfaceForcingU, surfaceForcingV in the |
94 |
c region (-2:sNx+4,-2:sNy+4). |
c region (-2:sNx+4,-2:sNy+4). |
95 |
c Hence overlap region needs to be set OLx=4, OLy=4. |
c Hence overlap region needs to be set OLx=4, OLy=4. |
96 |
c When option FRUGAL_KPP is used, computation in overlap regions |
c When option FRUGAL_KPP is used, computation in overlap regions |
305 |
|
|
306 |
c zero out dbloc over land points (so that the convective |
c zero out dbloc over land points (so that the convective |
307 |
c part of the interior mixing can be diagnosed) |
c part of the interior mixing can be diagnosed) |
308 |
dbloc(i,j,k) = dbloc(i,j,k) * pMask(i,j,k,bi,bj) |
dbloc(i,j,k) = dbloc(i,j,k) * maskC(i,j,k,bi,bj) |
309 |
ghat(i,j,k) = ghat(i,j,k) * pMask(i,j,k,bi,bj) |
ghat(i,j,k) = ghat(i,j,k) * maskC(i,j,k,bi,bj) |
310 |
Ritop(i,j,k) = Ritop(i,j,k) * pMask(i,j,k,bi,bj) |
Ritop(i,j,k) = Ritop(i,j,k) * maskC(i,j,k,bi,bj) |
311 |
if(k.eq.nzmax(i,j,bi,bj)) then |
if(k.eq.nzmax(i,j,bi,bj)) then |
312 |
dbloc(i,j,k) = p0 |
dbloc(i,j,k) = p0 |
313 |
ghat(i,j,k) = p0 |
ghat(i,j,k) = p0 |
335 |
c------------------------------------------------------------------------ |
c------------------------------------------------------------------------ |
336 |
c friction velocity, turbulent and radiative surface buoyancy forcing |
c friction velocity, turbulent and radiative surface buoyancy forcing |
337 |
c ------------------------------------------------------------------- |
c ------------------------------------------------------------------- |
338 |
c taux / rho = SurfaceTendencyU * drF(1) (N/m^2) |
c taux / rho = surfaceForcingU (N/m^2) |
339 |
c tauy / rho = SurfaceTendencyV * drF(1) (N/m^2) |
c tauy / rho = surfaceForcingV (N/m^2) |
340 |
c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s) |
c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s) |
341 |
c bo = - g * ( alpha*SurfaceTendencyT + |
c bo = - g * ( alpha*surfaceForcingT + |
342 |
c beta *SurfaceTendencyS ) * drF(1) / rho (m^2/s^3) |
c beta *surfaceForcingS ) / rho (m^2/s^3) |
343 |
c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3) |
c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3) |
344 |
c------------------------------------------------------------------------ |
c------------------------------------------------------------------------ |
345 |
|
|
357 |
DO i = imin, imax |
DO i = imin, imax |
358 |
ip1 = i+1 |
ip1 = i+1 |
359 |
work3(i,j) = |
work3(i,j) = |
360 |
& (SurfaceTendencyU(i,j,bi,bj) + SurfaceTendencyU(ip1,j,bi,bj)) * |
& (surfaceForcingU(i,j,bi,bj) + surfaceForcingU(ip1,j,bi,bj)) * |
361 |
& (SurfaceTendencyU(i,j,bi,bj) + SurfaceTendencyU(ip1,j,bi,bj)) + |
& (surfaceForcingU(i,j,bi,bj) + surfaceForcingU(ip1,j,bi,bj)) + |
362 |
& (SurfaceTendencyV(i,j,bi,bj) + SurfaceTendencyV(i,jp1,bi,bj)) * |
& (surfaceForcingV(i,j,bi,bj) + surfaceForcingV(i,jp1,bi,bj)) * |
363 |
& (SurfaceTendencyV(i,j,bi,bj) + SurfaceTendencyV(i,jp1,bi,bj)) |
& (surfaceForcingV(i,j,bi,bj) + surfaceForcingV(i,jp1,bi,bj)) |
364 |
END DO |
END DO |
365 |
END DO |
END DO |
366 |
cph( |
cph( |
371 |
DO i = imin, imax |
DO i = imin, imax |
372 |
ip1 = i+1 |
ip1 = i+1 |
373 |
|
|
374 |
if ( work3(i,j) .lt. (phepsi*phepsi) ) then |
if ( work3(i,j) .lt. (phepsi*phepsi*drF(1)*drF(1)) ) then |
375 |
ustar(i,j) = SQRT( phepsi * p5 * drF(1) ) |
ustar(i,j) = SQRT( phepsi * p5 * drF(1) ) |
376 |
else |
else |
377 |
tempVar2 = SQRT( work3(i,j) ) * p5 * drF(1) |
tempVar2 = SQRT( work3(i,j) ) * p5 |
378 |
ustar(i,j) = SQRT( tempVar2 ) |
ustar(i,j) = SQRT( tempVar2 ) |
379 |
endif |
endif |
380 |
|
|
381 |
bo(I,J) = - gravity * |
bo(I,J) = - gravity * |
382 |
& ( vddiff(I,J,1,1) * (SurfaceTendencyT(i,j,bi,bj)+ |
& ( vddiff(I,J,1,1) * (surfaceForcingT(i,j,bi,bj)+ |
383 |
& SurfaceTendencyTice(i,j,bi,bj)) + |
& surfaceForcingTice(i,j,bi,bj)) + |
384 |
& vddiff(I,J,1,2) * SurfaceTendencyS(i,j,bi,bj) ) * |
& vddiff(I,J,1,2) * surfaceForcingS(i,j,bi,bj) ) |
385 |
& drF(1) / work2(I,J) |
& / work2(I,J) |
386 |
|
|
387 |
bosol(I,J) = gravity * vddiff(I,J,1,1) * Qsw(i,j,bi,bj) * |
bosol(I,J) = gravity * vddiff(I,J,1,1) * Qsw(i,j,bi,bj) * |
388 |
& recip_Cp*recip_rhoConst*recip_dRf(1) * |
& recip_Cp*recip_rhoConst |
389 |
& drF(1) / work2(I,J) |
& / work2(I,J) |
390 |
|
|
391 |
END DO |
END DO |
392 |
END DO |
END DO |
486 |
vRef(i,j) = p5 * |
vRef(i,j) = p5 * |
487 |
& ( vVel(i,j,1,bi,bj) + vVel(i,jp1,1,bi,bj) ) |
& ( vVel(i,j,1,bi,bj) + vVel(i,jp1,1,bi,bj) ) |
488 |
IF ( zRef(i,j) .LT. drF(1) ) THEN |
IF ( zRef(i,j) .LT. drF(1) ) THEN |
489 |
ustarX = ( SurfaceTendencyU(i, j,bi,bj) + |
ustarX = ( surfaceForcingU(i, j,bi,bj) + |
490 |
& SurfaceTendencyU(ip1,j,bi,bj) ) * p5 |
& surfaceForcingU(ip1,j,bi,bj) ) * p5 |
491 |
ustarY = ( SurfaceTendencyV(i,j, bi,bj) + |
& *recip_drF(1) |
492 |
& SurfaceTendencyU(i,jp1,bi,bj) ) * p5 |
ustarY = ( surfaceForcingV(i,j, bi,bj) + |
493 |
|
& surfaceForcingU(i,jp1,bi,bj) ) * p5 |
494 |
|
& *recip_drF(1) |
495 |
tempVar1 = ustarX * ustarX + ustarY * ustarY |
tempVar1 = ustarX * ustarX + ustarY * ustarY |
496 |
if ( tempVar1 .lt. (epsln*epsln) ) then |
if ( tempVar1 .lt. (epsln*epsln) ) then |
497 |
tempVar2 = epsln |
tempVar2 = epsln |
667 |
DO j = jmin, jmax |
DO j = jmin, jmax |
668 |
DO i = imin, imax |
DO i = imin, imax |
669 |
DO k = 1, Nr |
DO k = 1, Nr |
670 |
KPPviscAz(i,j,k,bi,bj) = vddiff(i,j,k-1,1) * pMask(i,j,k,bi,bj) |
KPPviscAz(i,j,k,bi,bj) = vddiff(i,j,k-1,1) * maskC(i,j,k,bi,bj) |
671 |
KPPdiffKzS(i,j,k,bi,bj)= vddiff(i,j,k-1,2) * pMask(i,j,k,bi,bj) |
KPPdiffKzS(i,j,k,bi,bj)= vddiff(i,j,k-1,2) * maskC(i,j,k,bi,bj) |
672 |
KPPdiffKzT(i,j,k,bi,bj)= vddiff(i,j,k-1,3) * pMask(i,j,k,bi,bj) |
KPPdiffKzT(i,j,k,bi,bj)= vddiff(i,j,k-1,3) * maskC(i,j,k,bi,bj) |
673 |
KPPghat(i,j,k,bi,bj) = ghat(i,j,k) * pMask(i,j,k,bi,bj) |
KPPghat(i,j,k,bi,bj) = ghat(i,j,k) * maskC(i,j,k,bi,bj) |
674 |
END DO |
END DO |
675 |
KPPhbl(i,j,bi,bj) = hbl(i,j) * pMask(i,j,1,bi,bj) |
KPPhbl(i,j,bi,bj) = hbl(i,j) * maskC(i,j,1,bi,bj) |
676 |
END DO |
END DO |
677 |
END DO |
END DO |
678 |
#ifdef FRUGAL_KPP |
#ifdef FRUGAL_KPP |