| 162 |
_RL worka ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
_RL worka ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
| 163 |
integer work1 ( ibot:itop , jbot:jtop ) |
integer work1 ( ibot:itop , jbot:jtop ) |
| 164 |
_KPP_RL work2 ( ibot:itop , jbot:jtop ) |
_KPP_RL work2 ( ibot:itop , jbot:jtop ) |
| 165 |
|
_KPP_RL work3 ( ibot:itop , jbot:jtop ) |
| 166 |
_KPP_RL ustar ( ibot:itop , jbot:jtop ) |
_KPP_RL ustar ( ibot:itop , jbot:jtop ) |
| 167 |
_KPP_RL bo ( ibot:itop , jbot:jtop ) |
_KPP_RL bo ( ibot:itop , jbot:jtop ) |
| 168 |
_KPP_RL bosol ( ibot:itop , jbot:jtop ) |
_KPP_RL bosol ( ibot:itop , jbot:jtop ) |
| 300 |
END DO |
END DO |
| 301 |
END DO |
END DO |
| 302 |
|
|
| 303 |
|
cph( |
| 304 |
|
cph this avoids a single or double recomp./call of statekpp |
| 305 |
|
CADJ store work2 = comlev1_kpp, key = ikey |
| 306 |
|
#ifdef ALLOW_AUTODIFF_KPP_EXTENSIVE_STORE |
| 307 |
|
CADJ store dbloc, Ritop, ghat = comlev1_kpp, key = ikey |
| 308 |
|
CADJ store vddiff = comlev1_kpp, key = ikey |
| 309 |
|
#endif |
| 310 |
|
cph) |
| 311 |
|
|
| 312 |
c------------------------------------------------------------------------ |
c------------------------------------------------------------------------ |
| 313 |
c friction velocity, turbulent and radiative surface buoyancy forcing |
c friction velocity, turbulent and radiative surface buoyancy forcing |
| 314 |
c ------------------------------------------------------------------- |
c ------------------------------------------------------------------- |
| 315 |
c taux / rho = SurfaceTendencyU * delZ(1) (N/m^2) |
c taux / rho = SurfaceTendencyU * drF(1) (N/m^2) |
| 316 |
c tauy / rho = SurfaceTendencyV * delZ(1) (N/m^2) |
c tauy / rho = SurfaceTendencyV * drF(1) (N/m^2) |
| 317 |
c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s) |
c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s) |
| 318 |
c bo = - g * ( alpha*SurfaceTendencyT + |
c bo = - g * ( alpha*SurfaceTendencyT + |
| 319 |
c beta *SurfaceTendencyS ) * delZ(1) / rho (m^2/s^3) |
c beta *SurfaceTendencyS ) * drF(1) / rho (m^2/s^3) |
| 320 |
c bosol = - g * alpha * Qsw * delZ(1) / rho (m^2/s^3) |
c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3) |
| 321 |
c------------------------------------------------------------------------ |
c------------------------------------------------------------------------ |
| 322 |
|
|
| 323 |
c initialize arrays to zero |
c initialize arrays to zero |
| 333 |
jp1 = j + 1 |
jp1 = j + 1 |
| 334 |
DO i = imin, imax |
DO i = imin, imax |
| 335 |
ip1 = i+1 |
ip1 = i+1 |
| 336 |
tempVar1 = |
work3(i,j) = |
| 337 |
& (SurfaceTendencyU(i,j,bi,bj) + SurfaceTendencyU(ip1,j,bi,bj)) * |
& (SurfaceTendencyU(i,j,bi,bj) + SurfaceTendencyU(ip1,j,bi,bj)) * |
| 338 |
& (SurfaceTendencyU(i,j,bi,bj) + SurfaceTendencyU(ip1,j,bi,bj)) + |
& (SurfaceTendencyU(i,j,bi,bj) + SurfaceTendencyU(ip1,j,bi,bj)) + |
| 339 |
& (SurfaceTendencyV(i,j,bi,bj) + SurfaceTendencyV(i,jp1,bi,bj)) * |
& (SurfaceTendencyV(i,j,bi,bj) + SurfaceTendencyV(i,jp1,bi,bj)) * |
| 340 |
& (SurfaceTendencyV(i,j,bi,bj) + SurfaceTendencyV(i,jp1,bi,bj)) |
& (SurfaceTendencyV(i,j,bi,bj) + SurfaceTendencyV(i,jp1,bi,bj)) |
| 341 |
if ( tempVar1 .lt. (phepsi*phepsi) ) then |
END DO |
| 342 |
ustar(i,j) = SQRT( phepsi * p5 * delZ(1) ) |
END DO |
| 343 |
|
cph( |
| 344 |
|
CADJ store work3 = comlev1_kpp, key = ikey |
| 345 |
|
cph) |
| 346 |
|
DO j = jmin, jmax |
| 347 |
|
jp1 = j + 1 |
| 348 |
|
DO i = imin, imax |
| 349 |
|
ip1 = i+1 |
| 350 |
|
if ( work3(i,j) .lt. (phepsi*phepsi) ) then |
| 351 |
|
ustar(i,j) = SQRT( phepsi * p5 * drF(1) ) |
| 352 |
else |
else |
| 353 |
tempVar2 = SQRT( tempVar1 ) * p5 * delZ(1) |
tempVar2 = SQRT( work3(i,j) ) * p5 * drF(1) |
| 354 |
ustar(i,j) = SQRT( tempVar2 ) |
ustar(i,j) = SQRT( tempVar2 ) |
| 355 |
endif |
endif |
| 356 |
bo(I,J) = - gravity * |
bo(I,J) = - gravity * |
| 357 |
& ( vddiff(I,J,1,1) * SurfaceTendencyT(i,j,bi,bj) + |
& ( vddiff(I,J,1,1) * SurfaceTendencyT(i,j,bi,bj) + |
| 358 |
& vddiff(I,J,1,2) * SurfaceTendencyS(i,j,bi,bj) |
& vddiff(I,J,1,2) * SurfaceTendencyS(i,j,bi,bj) |
| 359 |
& ) * |
& ) * |
| 360 |
& delZ(1) / work2(I,J) |
& drF(1) / work2(I,J) |
| 361 |
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) * |
| 362 |
& recip_Cp*recip_rhoNil*recip_dRf(1) * |
& recip_Cp*recip_rhoConst*recip_dRf(1) * |
| 363 |
& delZ(1) / work2(I,J) |
& drF(1) / work2(I,J) |
| 364 |
END DO |
END DO |
| 365 |
END DO |
END DO |
| 366 |
|
|
| 367 |
|
cph( |
| 368 |
|
CADJ store ustar = comlev1_kpp, key = ikey |
| 369 |
|
cph) |
| 370 |
|
|
| 371 |
c------------------------------------------------------------------------ |
c------------------------------------------------------------------------ |
| 372 |
c velocity shear |
c velocity shear |
| 373 |
c -------------- |
c -------------- |
| 603 |
END DO |
END DO |
| 604 |
END DO |
END DO |
| 605 |
|
|
| 606 |
|
cph( |
| 607 |
|
#ifdef ALLOW_AUTODIFF_KPP_EXTENSIVE_STORE |
| 608 |
|
CADJ store dvsq, shsq = comlev1_kpp, key = ikey |
| 609 |
|
#endif |
| 610 |
|
cph) |
| 611 |
|
|
| 612 |
c----------------------------------------------------------------------- |
c----------------------------------------------------------------------- |
| 613 |
c solve for viscosity, diffusivity, ghat, and hbl on "t-grid" |
c solve for viscosity, diffusivity, ghat, and hbl on "t-grid" |
| 614 |
c----------------------------------------------------------------------- |
c----------------------------------------------------------------------- |
| 631 |
|
|
| 632 |
CALL TIMER_STOP ('KPPMIX [KPP_CALC]', myThid) |
CALL TIMER_STOP ('KPPMIX [KPP_CALC]', myThid) |
| 633 |
|
|
|
#ifdef ALLOW_AUTODIFF_TAMC |
|
|
cph( storing not necessary |
|
|
cphCADJ STORE vddiff, ghat = comlev1_kpp, key = ikey |
|
|
cph) |
|
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
|
|
|
|
| 634 |
c----------------------------------------------------------------------- |
c----------------------------------------------------------------------- |
| 635 |
c zero out land values and transfer to global variables |
c zero out land values and transfer to global variables |
| 636 |
c----------------------------------------------------------------------- |
c----------------------------------------------------------------------- |
| 678 |
_EXCH_XYZ_R8(KPPdiffKzT , myThid ) |
_EXCH_XYZ_R8(KPPdiffKzT , myThid ) |
| 679 |
#endif /* KPP_SMOOTH_DIFF */ |
#endif /* KPP_SMOOTH_DIFF */ |
| 680 |
|
|
| 681 |
|
cph( |
| 682 |
|
cph crucial: this avoids full recomp./call of kppmix |
| 683 |
|
CADJ store KPPhbl = comlev1_kpp, key = ikey |
| 684 |
|
cph) |
| 685 |
|
|
| 686 |
C Compute fraction of solar short-wave flux penetrating to |
C Compute fraction of solar short-wave flux penetrating to |
| 687 |
C the bottom of the mixing layer. |
C the bottom of the mixing layer. |
| 688 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |