5 |
#ifdef ALLOW_KPP |
#ifdef ALLOW_KPP |
6 |
# include "KPP_OPTIONS.h" |
# include "KPP_OPTIONS.h" |
7 |
#endif |
#endif |
|
#undef OLD_VISBECK_CALC |
|
8 |
|
|
9 |
CBOP |
CBOP |
10 |
C !ROUTINE: GMREDI_CALC_TENSOR |
C !ROUTINE: GMREDI_CALC_TENSOR |
86 |
|
|
87 |
#ifdef GM_VISBECK_VARIABLE_K |
#ifdef GM_VISBECK_VARIABLE_K |
88 |
#ifdef OLD_VISBECK_CALC |
#ifdef OLD_VISBECK_CALC |
|
_RL deltaH,zero_rs |
|
|
PARAMETER(zero_rs=0.D0) |
|
|
_RL N2,SN |
|
89 |
_RL Ssq(1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
_RL Ssq(1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
90 |
#else |
#else |
91 |
_RL dSigmaH |
_RL dSigmaH |
92 |
_RL deltaH, integrDepth |
_RL Sloc, M2loc |
|
_RL Sloc, M2loc, SNloc |
|
93 |
#endif |
#endif |
94 |
|
_RL deltaH, integrDepth |
95 |
|
_RL N2loc, SNloc |
96 |
#endif |
#endif |
97 |
|
|
98 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
307 |
C Now we convert deltaH to a non-dimensional fraction |
C Now we convert deltaH to a non-dimensional fraction |
308 |
deltaH = deltaH/( integrDepth+rC(1) ) |
deltaH = deltaH/( integrDepth+rC(1) ) |
309 |
|
|
310 |
C-- compute: ( M^2 * S )^1/2 (= M^2 / N since S=M^2/N^2 ) |
C-- compute: ( M^2 * S )^1/2 (= S*N since S=M^2/N^2 ) |
311 |
dSigmaH = dSigmaDx(i,j)*dSigmaDx(i,j) |
dSigmaH = dSigmaDx(i,j)*dSigmaDx(i,j) |
312 |
& + dSigmaDy(i,j)*dSigmaDy(i,j) |
& + dSigmaDy(i,j)*dSigmaDy(i,j) |
313 |
IF ( dSigmaH .GT. 0. _d 0 ) THEN |
IF ( dSigmaH .GT. 0. _d 0 ) THEN |
318 |
ELSE |
ELSE |
319 |
Sloc = GM_maxSlope |
Sloc = GM_maxSlope |
320 |
ENDIF |
ENDIF |
321 |
M2loc = Gravity*recip_RhoConst*dSigmaH |
M2loc = gravity*recip_rhoConst*dSigmaH |
322 |
SNloc = SQRT( Sloc*M2loc ) |
c SNloc = SQRT( Sloc*M2loc ) |
323 |
|
N2loc = -gravity*recip_rhoConst*dSigmaDr(i,j) |
324 |
|
IF ( N2loc.GT.0. _d 0 ) THEN |
325 |
|
SNloc = Sloc*SQRT(N2loc) |
326 |
|
ELSE |
327 |
|
SNloc = 0. _d 0 |
328 |
|
ENDIF |
329 |
ELSE |
ELSE |
330 |
SNloc = 0. _d 0 |
SNloc = 0. _d 0 |
331 |
ENDIF |
ENDIF |
392 |
C Distance between interface above layer and the integration depth |
C Distance between interface above layer and the integration depth |
393 |
deltaH=abs(GM_Visbeck_depth)-abs(rF(k)) |
deltaH=abs(GM_Visbeck_depth)-abs(rF(k)) |
394 |
C If positive we limit this to the layer thickness |
C If positive we limit this to the layer thickness |
395 |
deltaH=min(deltaH,drF(k)) |
integrDepth = drF(k) |
396 |
|
deltaH=min(deltaH,integrDepth) |
397 |
C If negative then we are below the integration level |
C If negative then we are below the integration level |
398 |
deltaH=max(deltaH,zero_rs) |
deltaH=max(deltaH, 0. _d 0) |
399 |
C Now we convert deltaH to a non-dimensional fraction |
C Now we convert deltaH to a non-dimensional fraction |
400 |
deltaH=deltaH/GM_Visbeck_depth |
deltaH=deltaH/GM_Visbeck_depth |
401 |
|
|
|
IF (K.eq.2) VisbeckK(i,j,bi,bj)=0. |
|
402 |
IF ( Ssq(i,j).NE.0. .AND. dSigmaDr(i,j).NE.0. ) THEN |
IF ( Ssq(i,j).NE.0. .AND. dSigmaDr(i,j).NE.0. ) THEN |
403 |
N2= -Gravity*recip_RhoConst*dSigmaDr(i,j) |
N2loc = -gravity*recip_rhoConst*dSigmaDr(i,j) |
404 |
SN=sqrt(Ssq(i,j)*N2) |
SNloc = SQRT(Ssq(i,j)*N2loc ) |
405 |
VisbeckK(i,j,bi,bj)=VisbeckK(i,j,bi,bj)+deltaH |
VisbeckK(i,j,bi,bj) = VisbeckK(i,j,bi,bj) |
406 |
& *GM_Visbeck_alpha*GM_Visbeck_length*GM_Visbeck_length*SN |
& +deltaH*GM_Visbeck_alpha |
407 |
|
& *GM_Visbeck_length*GM_Visbeck_length*SNloc |
408 |
ENDIF |
ENDIF |
409 |
|
|
410 |
ENDDO |
ENDDO |
454 |
#else |
#else |
455 |
Kgm_tmp = GM_isopycK |
Kgm_tmp = GM_isopycK |
456 |
#endif |
#endif |
457 |
#if (defined (ALLOW_AUTODIFF) && defined (ALLOW_KAPGM_CONTROL)) |
#ifdef ALLOW_KAPGM_CONTROL |
458 |
& + GM_skewflx*kapgm(i,j,k,bi,bj) |
& + GM_skewflx*kapgm(i,j,k,bi,bj) |
459 |
#else |
#else |
460 |
& + GM_skewflx*GM_background_K |
& + GM_skewflx*GM_background_K |
465 |
Kwx(i,j,k,bi,bj)= Kgm_tmp*Kwx(i,j,k,bi,bj) |
Kwx(i,j,k,bi,bj)= Kgm_tmp*Kwx(i,j,k,bi,bj) |
466 |
Kwy(i,j,k,bi,bj)= Kgm_tmp*Kwy(i,j,k,bi,bj) |
Kwy(i,j,k,bi,bj)= Kgm_tmp*Kwy(i,j,k,bi,bj) |
467 |
#ifdef ALLOW_KAPREDI_CONTROL |
#ifdef ALLOW_KAPREDI_CONTROL |
468 |
Kwz(i,j,k,bi,bj)= ( kapredi(i,j,k,bi,bj) |
Kwz(i,j,k,bi,bj)= ( kapredi(i,j,k,bi,bj) |
469 |
#else |
#else |
470 |
Kwz(i,j,k,bi,bj)= ( GM_isopycK |
Kwz(i,j,k,bi,bj)= ( GM_isopycK |
471 |
#endif |
#endif |
613 |
#else |
#else |
614 |
& ( GM_isopycK |
& ( GM_isopycK |
615 |
#endif |
#endif |
616 |
#if (defined (ALLOW_AUTODIFF) && defined (ALLOW_KAPGM_CONTROL)) |
#ifdef ALLOW_KAPGM_CONTROL |
617 |
& - GM_skewflx*kapgm(i,j,k,bi,bj) |
& - GM_skewflx*kapgm(i,j,k,bi,bj) |
618 |
#else |
#else |
619 |
& - GM_skewflx*GM_background_K |
& - GM_skewflx*GM_background_K |
799 |
#ifdef ALLOW_KAPREDI_CONTROL |
#ifdef ALLOW_KAPREDI_CONTROL |
800 |
& ( kapredi(i,j,k,bi,bj) |
& ( kapredi(i,j,k,bi,bj) |
801 |
#else |
#else |
802 |
& ( GM_isopycK |
& ( GM_isopycK |
803 |
#endif |
#endif |
804 |
#if (defined (ALLOW_AUTODIFF) && defined (ALLOW_KAPGM_CONTROL)) |
#ifdef ALLOW_KAPGM_CONTROL |
805 |
& - GM_skewflx*kapgm(i,j,k,bi,bj) |
& - GM_skewflx*kapgm(i,j,k,bi,bj) |
806 |
#else |
#else |
807 |
& - GM_skewflx*GM_background_K |
& - GM_skewflx*GM_background_K |