207 |
ENDDO |
ENDDO |
208 |
ENDIF |
ENDIF |
209 |
|
|
210 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
#ifdef GM_BOLUS_ADVEC |
211 |
C-- 1rst loop on k : compute Tensor Coeff. at W points. |
DO k=1,Nr |
212 |
|
DO j=1-Oly,sNy+Oly |
213 |
|
DO i=1-Olx,sNx+Olx |
214 |
|
GM_PsiX(i,j,k,bi,bj) = 0. _d 0 |
215 |
|
GM_PsiY(i,j,k,bi,bj) = 0. _d 0 |
216 |
|
ENDDO |
217 |
|
ENDDO |
218 |
|
ENDDO |
219 |
|
#endif /* GM_BOLUS_ADVEC */ |
220 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
221 |
|
DO k=1,Nr |
222 |
|
DO j=1-Oly,sNy+Oly |
223 |
|
DO i=1-Olx,sNx+Olx |
224 |
|
Kwx(i,j,k,bi,bj) = 0. _d 0 |
225 |
|
Kwy(i,j,k,bi,bj) = 0. _d 0 |
226 |
|
Kwz(i,j,k,bi,bj) = 0. _d 0 |
227 |
|
# ifdef GM_NON_UNITY_DIAGONAL |
228 |
|
Kux(i,j,k,bi,bj) = 0. _d 0 |
229 |
|
Kvy(i,j,k,bi,bj) = 0. _d 0 |
230 |
|
# endif |
231 |
|
# ifdef GM_EXTRA_DIAGONAL |
232 |
|
Kuz(i,j,k,bi,bj) = 0. _d 0 |
233 |
|
Kvz(i,j,k,bi,bj) = 0. _d 0 |
234 |
|
# endif |
235 |
|
ENDDO |
236 |
|
ENDDO |
237 |
|
ENDDO |
238 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
239 |
|
|
240 |
|
C-- Initialise Mixed Layer related array: |
241 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
242 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
243 |
hTransLay(i,j) = R_low(i,j,bi,bj) |
hTransLay(i,j) = R_low(i,j,bi,bj) |
264 |
ENDDO |
ENDDO |
265 |
ENDIF |
ENDIF |
266 |
|
|
267 |
|
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
268 |
|
C-- 1rst loop on k : compute Tensor Coeff. at W points. |
269 |
|
|
270 |
DO k=Nr,2,-1 |
DO k=Nr,2,-1 |
271 |
|
|
272 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
280 |
dSigmaDr(i,j) = 0. _d 0 |
dSigmaDr(i,j) = 0. _d 0 |
281 |
SlopeSqr(i,j) = 0. _d 0 |
SlopeSqr(i,j) = 0. _d 0 |
282 |
taperFct(i,j) = 0. _d 0 |
taperFct(i,j) = 0. _d 0 |
|
Kwx(i,j,k,bi,bj) = 0. _d 0 |
|
|
Kwy(i,j,k,bi,bj) = 0. _d 0 |
|
|
Kwz(i,j,k,bi,bj) = 0. _d 0 |
|
|
# ifdef GM_NON_UNITY_DIAGONAL |
|
|
Kux(i,j,k,bi,bj) = 0. _d 0 |
|
|
Kvy(i,j,k,bi,bj) = 0. _d 0 |
|
|
# endif |
|
|
# ifdef GM_EXTRA_DIAGONAL |
|
|
Kuz(i,j,k,bi,bj) = 0. _d 0 |
|
|
Kvz(i,j,k,bi,bj) = 0. _d 0 |
|
|
# endif |
|
|
# ifdef GM_BOLUS_ADVEC |
|
|
GM_PsiX(i,j,k,bi,bj) = 0. _d 0 |
|
|
GM_PsiY(i,j,k,bi,bj) = 0. _d 0 |
|
|
# endif |
|
283 |
ENDDO |
ENDDO |
284 |
ENDDO |
ENDDO |
285 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
527 |
#ifdef ALLOW_KAPREDI_CONTROL |
#ifdef ALLOW_KAPREDI_CONTROL |
528 |
Kwz(i,j,k,bi,bj)= ( kapredi(i,j,k,bi,bj) |
Kwz(i,j,k,bi,bj)= ( kapredi(i,j,k,bi,bj) |
529 |
#else |
#else |
530 |
Kwz(i,j,k,bi,bj)= ( GM_isopycK*GM_isoFac2d(i,j,bi,bj) |
Kwz(i,j,k,bi,bj)= ( isopycK*GM_isoFac2d(i,j,bi,bj) |
531 |
#endif |
#endif |
532 |
#ifdef GM_VISBECK_VARIABLE_K |
#ifdef GM_VISBECK_VARIABLE_K |
533 |
& + VisbeckK(i,j,bi,bj) |
& + VisbeckK(i,j,bi,bj) |
545 |
ENDIF |
ENDIF |
546 |
#endif /* ALLOW_DIAGNOSTICS */ |
#endif /* ALLOW_DIAGNOSTICS */ |
547 |
|
|
548 |
|
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
549 |
|
C-- Calculate Stream-Functions used in Advective Form: |
550 |
|
|
551 |
|
#ifdef GM_BOLUS_ADVEC |
552 |
|
IF (GM_AdvForm) THEN |
553 |
|
#ifdef GM_BOLUS_BVP |
554 |
|
IF (GM_UseBVP) THEN |
555 |
|
CALL GMREDI_CALC_PSI_BVP( |
556 |
|
I bi, bj, iMin, iMax, jMin, jMax, |
557 |
|
I sigmaX, sigmaY, sigmaR, |
558 |
|
I myThid ) |
559 |
|
ELSE |
560 |
|
#endif |
561 |
|
CALL GMREDI_CALC_PSI_B( |
562 |
|
I bi, bj, iMin, iMax, jMin, jMax, |
563 |
|
I sigmaX, sigmaY, sigmaR, |
564 |
|
I ldd97_LrhoW, ldd97_LrhoS, |
565 |
|
I myThid ) |
566 |
|
#ifdef GM_BOLUS_BVP |
567 |
|
ENDIF |
568 |
|
#endif |
569 |
|
ENDIF |
570 |
|
#endif |
571 |
|
|
572 |
|
#ifndef GM_EXCLUDE_SUBMESO |
573 |
|
IF ( GM_useSubMeso .AND. GM_AdvForm ) THEN |
574 |
|
CALL SUBMESO_CALC_PSI( |
575 |
|
I bi, bj, iMin, iMax, jMin, jMax, |
576 |
|
I sigmaX, sigmaY, sigmaR, |
577 |
|
I locMixLayer, |
578 |
|
I myIter, myThid ) |
579 |
|
ENDIF |
580 |
|
#endif /* ndef GM_EXCLUDE_SUBMESO */ |
581 |
|
|
582 |
#if ( defined (GM_NON_UNITY_DIAGONAL) || defined (GM_EXTRA_DIAGONAL) ) |
#if ( defined (GM_NON_UNITY_DIAGONAL) || defined (GM_EXTRA_DIAGONAL) ) |
583 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
732 |
#ifdef ALLOW_KAPREDI_CONTROL |
#ifdef ALLOW_KAPREDI_CONTROL |
733 |
tmp1k(i,j) = ( kapredi(i,j,k,bi,bj) |
tmp1k(i,j) = ( kapredi(i,j,k,bi,bj) |
734 |
#else |
#else |
735 |
tmp1k(i,j) = ( GM_isopycK |
tmp1k(i,j) = ( GM_isopycK*GM_isoFac1d(k) |
736 |
|
& *op5*(GM_isoFac2d(i-1,j,bi,bj)+GM_isoFac2d(i,j,bi,bj)) |
737 |
#endif |
#endif |
738 |
#ifdef GM_VISBECK_VARIABLE_K |
#ifdef GM_VISBECK_VARIABLE_K |
739 |
& +(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*0.5 _d 0 |
& +(VisbeckK(i,j,bi,bj)+VisbeckK(i-1,j,bi,bj))*0.5 _d 0 |
924 |
#ifdef ALLOW_KAPREDI_CONTROL |
#ifdef ALLOW_KAPREDI_CONTROL |
925 |
tmp1k(i,j) = ( kapredi(i,j,k,bi,bj) |
tmp1k(i,j) = ( kapredi(i,j,k,bi,bj) |
926 |
#else |
#else |
927 |
tmp1k(i,j) = ( GM_isopycK |
tmp1k(i,j) = ( GM_isopycK*GM_isoFac1d(k) |
928 |
|
& *op5*(GM_isoFac2d(i,j-1,bi,bj)+GM_isoFac2d(i,j,bi,bj)) |
929 |
#endif |
#endif |
930 |
#ifdef GM_VISBECK_VARIABLE_K |
#ifdef GM_VISBECK_VARIABLE_K |
931 |
& +(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*0.5 _d 0 |
& +(VisbeckK(i,j,bi,bj)+VisbeckK(i,j-1,bi,bj))*0.5 _d 0 |
963 |
|
|
964 |
#endif /* GM_NON_UNITY_DIAGONAL || GM_EXTRA_DIAGONAL */ |
#endif /* GM_NON_UNITY_DIAGONAL || GM_EXTRA_DIAGONAL */ |
965 |
|
|
|
|
|
|
#ifdef GM_BOLUS_ADVEC |
|
|
IF (GM_AdvForm) THEN |
|
|
CALL GMREDI_CALC_PSI_B( |
|
|
I bi, bj, iMin, iMax, jMin, jMax, |
|
|
I sigmaX, sigmaY, sigmaR, |
|
|
I ldd97_LrhoW, ldd97_LrhoS, |
|
|
I myThid ) |
|
|
ENDIF |
|
|
#endif |
|
|
|
|
966 |
#ifdef ALLOW_TIMEAVE |
#ifdef ALLOW_TIMEAVE |
967 |
C-- Time-average |
C-- Time-average |
968 |
IF ( taveFreq.GT.0. ) THEN |
IF ( taveFreq.GT.0. ) THEN |
1005 |
|
|
1006 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
1007 |
|
|
1008 |
|
CBOP |
1009 |
|
C !ROUTINE: GMREDI_CALC_TENSOR_DUMMY |
1010 |
|
C !INTERFACE: |
1011 |
SUBROUTINE GMREDI_CALC_TENSOR_DUMMY( |
SUBROUTINE GMREDI_CALC_TENSOR_DUMMY( |
1012 |
I iMin, iMax, jMin, jMax, |
I iMin, iMax, jMin, jMax, |
1013 |
I sigmaX, sigmaY, sigmaR, |
I sigmaX, sigmaY, sigmaR, |
1014 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
1015 |
C /==========================================================\ |
|
1016 |
C | SUBROUTINE GMREDI_CALC_TENSOR | |
C !DESCRIPTION: \bv |
1017 |
C | o Calculate tensor elements for GM/Redi tensor. | |
C *==========================================================* |
1018 |
C |==========================================================| |
C | SUBROUTINE GMREDI_CALC_TENSOR_DUMMY |
1019 |
C \==========================================================/ |
C | o Calculate tensor elements for GM/Redi tensor. |
1020 |
|
C *==========================================================* |
1021 |
|
C \ev |
1022 |
|
|
1023 |
|
C !USES: |
1024 |
IMPLICIT NONE |
IMPLICIT NONE |
1025 |
|
|
1026 |
C == Global variables == |
C == Global variables == |
1028 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
1029 |
#include "GMREDI.h" |
#include "GMREDI.h" |
1030 |
|
|
1031 |
C == Routine arguments == |
C !INPUT/OUTPUT PARAMETERS: |
|
C |
|
1032 |
_RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL sigmaX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
1033 |
_RL sigmaY(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL sigmaY(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
1034 |
_RL sigmaR(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL sigmaR(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
1037 |
_RL myTime |
_RL myTime |
1038 |
INTEGER myIter |
INTEGER myIter |
1039 |
INTEGER myThid |
INTEGER myThid |
1040 |
CEndOfInterface |
CEOP |
1041 |
|
|
1042 |
#ifdef ALLOW_GMREDI |
#ifdef ALLOW_GMREDI |
1043 |
|
C !LOCAL VARIABLES: |
1044 |
INTEGER i, j, k |
INTEGER i, j, k |
1045 |
|
|
1046 |
DO k=1,Nr |
DO k=1,Nr |