File indexing completed on 2024-02-29 06:10:23 UTC
view on githubraw file Latest commit a4576c7c on 2024-02-28 22:55:11 UTC
f42e64b3e7 Jean*0001 #include "GMREDI_OPTIONS.h"
14e0496834 Jean*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
ee8a6f4ffb Jean*0005 #ifdef ALLOW_CTRL
0006 # include "CTRL_OPTIONS.h"
0007 #endif
f42e64b3e7 Jean*0008
f6de204bec Jean*0009
0010
0011
f42e64b3e7 Jean*0012 SUBROUTINE GMREDI_CALC_PSI_B(
0013 I bi, bj, iMin, iMax, jMin, jMax,
0014 I sigmaX, sigmaY, sigmaR,
c1c6d46ee2 Jean*0015 I ldd97_LrhoW, ldd97_LrhoS,
f42e64b3e7 Jean*0016 I myThid )
f6de204bec Jean*0017
0018
0019
0020
0021
0022
0023
0024
0025
f42e64b3e7 Jean*0026 IMPLICIT NONE
0027
0028
0029 #include "SIZE.h"
0030 #include "GRID.h"
0031 #include "DYNVARS.h"
0032 #include "EEPARAMS.h"
0033 #include "PARAMS.h"
0034 #include "GMREDI.h"
43af9695da Gael*0035 #include "FFIELDS.h"
ee8a6f4ffb Jean*0036 #ifdef ALLOW_CTRL
0037 # include "CTRL_FIELDS.h"
0038 #endif
2092dbb101 Patr*0039 #ifdef ALLOW_AUTODIFF_TAMC
5b172de0d2 Jean*0040 # include "tamc.h"
2092dbb101 Patr*0041 #endif /* ALLOW_AUTODIFF_TAMC */
0042
f6de204bec Jean*0043
ee8a6f4ffb Jean*0044 _RL sigmaX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0045 _RL sigmaY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0046 _RL sigmaR(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0047 _RL ldd97_LrhoW(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0048 _RL ldd97_LrhoS(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
f42e64b3e7 Jean*0049 INTEGER bi,bj,iMin,iMax,jMin,jMax
0050 INTEGER myThid
f6de204bec Jean*0051
f42e64b3e7 Jean*0052
0053 #ifdef ALLOW_GMREDI
0054 #ifdef GM_BOLUS_ADVEC
0055
f6de204bec Jean*0056
f42e64b3e7 Jean*0057 INTEGER i,j,k, km1
7c50f07931 Mart*0058 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0059
0060
0061 INTEGER tkey, kkey
7c50f07931 Mart*0062 #endif
5b172de0d2 Jean*0063 _RL halfSign
0064 _RL rDepth, half_K
ee8a6f4ffb Jean*0065 _RL SlopeX(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0066 _RL SlopeY(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0067 _RL dSigmaDrW(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0068 _RL dSigmaDrS(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0069 _RL taperX(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0070 _RL taperY(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
f42e64b3e7 Jean*0071
0072
0073
2092dbb101 Patr*0074 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0075 tkey = bi + (bj-1)*nSx + (ikey_dynamics-1)*nSx*nSy
2092dbb101 Patr*0076 #endif /* ALLOW_AUTODIFF_TAMC */
0077
ecaea33887 Patr*0078 #ifdef ALLOW_AUTODIFF_TAMC
0079 # ifdef GM_VISBECK_VARIABLE_K
edb6656069 Mart*0080
ecaea33887 Patr*0081 # endif
a4576c7cde Juli*0082 # ifdef GM_GEOM_VARIABLE_K
0083
0084 # endif
ecaea33887 Patr*0085 #endif
f42e64b3e7 Jean*0086 IF (GM_AdvForm) THEN
5b172de0d2 Jean*0087
0088 halfSign = halfRL*gravitySign
0089
f42e64b3e7 Jean*0090 DO k=2,Nr
8233d0ceb9 Jean*0091 km1 = k-1
2092dbb101 Patr*0092
14e0496834 Jean*0093 #ifdef ALLOW_AUTODIFF
8233d0ceb9 Jean*0094 DO j=1-OLy,sNy+OLy
0095 DO i=1-OLx,sNx+OLx
0096 SlopeX(i,j) = 0. _d 0
0097 SlopeY(i,j) = 0. _d 0
0098 dSigmaDrW(i,j) = 0. _d 0
0099 dSigmaDrS(i,j) = 0. _d 0
0100 ENDDO
2092dbb101 Patr*0101 ENDDO
0102 #endif
f42e64b3e7 Jean*0103
0104
8233d0ceb9 Jean*0105 DO j=1-OLy,sNy+OLy
0106 DO i=1-OLx+1,sNx+OLx
5b172de0d2 Jean*0107 SlopeX(i,j) = ( sigmaX(i,j,km1)+sigmaX(i,j,k) )*halfRL
8233d0ceb9 Jean*0108 & *maskW(i,j,km1,bi,bj)*maskW(i,j,k,bi,bj)
5b172de0d2 Jean*0109 dSigmaDrW(i,j) = ( sigmaR(i-1,j,k)+sigmaR(i,j,k) )*halfSign
8233d0ceb9 Jean*0110 & *maskW(i,j,km1,bi,bj)*maskW(i,j,k,bi,bj)
0111 ENDDO
c1c6d46ee2 Jean*0112 ENDDO
8233d0ceb9 Jean*0113 DO j=1-OLy+1,sNy+OLy
0114 DO i=1-OLx,sNx+OLx
5b172de0d2 Jean*0115 SlopeY(i,j) = ( sigmaY(i,j,km1)+sigmaY(i,j,k) )*halfRL
8233d0ceb9 Jean*0116 & *maskS(i,j,km1,bi,bj)*maskS(i,j,k,bi,bj)
5b172de0d2 Jean*0117 dSigmaDrS(i,j) = ( sigmaR(i,j-1,k)+sigmaR(i,j,k) )*halfSign
8233d0ceb9 Jean*0118 & *maskS(i,j,km1,bi,bj)*maskS(i,j,k,bi,bj)
0119 ENDDO
c1c6d46ee2 Jean*0120 ENDDO
f42e64b3e7 Jean*0121
5b172de0d2 Jean*0122
0123 IF ( usingZcoords ) THEN
0124 rDepth = rF(1) - rF(k)
0125 ELSE
0126 rDepth = rF(k) - rF(Nr+1)
0127 ENDIF
c1c6d46ee2 Jean*0128
8233d0ceb9 Jean*0129 CALL GMREDI_SLOPE_PSI(
0130 O taperX, taperY,
0131 U SlopeX, SlopeY,
0132 U dSigmaDrW, dSigmaDrS,
5b172de0d2 Jean*0133 I ldd97_LrhoW, ldd97_LrhoS, rDepth, k,
8233d0ceb9 Jean*0134 I bi, bj, myThid )
f42e64b3e7 Jean*0135
2092dbb101 Patr*0136 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0137 kkey = k + (tkey-1)*Nr
2092dbb101 Patr*0138
0139
0140
0141
0142 #endif /* ALLOW_AUTODIFF_TAMC */
0143
f6de204bec Jean*0144
8233d0ceb9 Jean*0145
0146 half_K = GM_background_K
f6de204bec Jean*0147 & *(GM_bolFac1d(km1)+GM_bolFac1d(k))*op25
8233d0ceb9 Jean*0148 DO j=1-OLy,sNy+OLy
0149 DO i=1-OLx+1,sNx+OLx
c1c6d46ee2 Jean*0150 GM_PsiX(i,j,k,bi,bj) = SlopeX(i,j)*taperX(i,j)
94a8024bbe Jean*0151 #ifdef GM_READ_K3D_GM
0152 & *( op25
0153 & *( GM_inpK3dGM(i-1,j,km1,bi,bj)+GM_inpK3dGM(i,j,km1,bi,bj)
0154 & + GM_inpK3dGM(i-1,j,k,bi,bj)+GM_inpK3dGM(i,j,k,bi,bj) )
f6de204bec Jean*0155 #else
0156 & *( half_K
0157 & *(GM_bolFac2d(i-1,j,bi,bj)+GM_bolFac2d(i,j,bi,bj))
5116830959 Patr*0158 #endif
f42e64b3e7 Jean*0159 #ifdef GM_VISBECK_VARIABLE_K
94a8024bbe Jean*0160 & + op5*(VisbeckK(i-1,j,bi,bj)+VisbeckK(i,j,bi,bj))
f42e64b3e7 Jean*0161 #endif
a4576c7cde Juli*0162 #ifdef GM_GEOM_VARIABLE_K
0163 & + op5*(GEOM_K3d(i-1,j,k,bi,bj)+GEOM_K3d(i,j,k,bi,bj))
0164 #endif
f59d76b0dd Ed D*0165 #ifdef ALLOW_GM_LEITH_QG
94a8024bbe Jean*0166 & + op25*( GM_LeithQG_K(i-1,j,km1,bi,bj)
0167 & + GM_LeithQG_K( i ,j,km1,bi,bj)
0168 & + GM_LeithQG_K(i-1,j,k,bi,bj)
0169 & + GM_LeithQG_K( i ,j,k,bi,bj) )
f59d76b0dd Ed D*0170 #endif
8233d0ceb9 Jean*0171 & )
0172
43af9695da Gael*0173 #ifdef ALLOW_EDDYPSI
0174 & +eddyPsiX(i,j,k,bi,bj)*maskW(i,j,k,bi,bj)
0175 #endif
8233d0ceb9 Jean*0176 ENDDO
c1c6d46ee2 Jean*0177 ENDDO
8233d0ceb9 Jean*0178 DO j=1-OLy+1,sNy+OLy
0179 DO i=1-OLx,sNx+OLx
0180 GM_PsiY(i,j,k,bi,bj) = SlopeY(i,j)*taperY(i,j)
94a8024bbe Jean*0181 #ifdef GM_READ_K3D_GM
0182 & *( op25
0183 & *( GM_inpK3dGM(i,j-1,km1,bi,bj)+GM_inpK3dGM(i,j,km1,bi,bj)
0184 & + GM_inpK3dGM(i,j-1,k,bi,bj)+GM_inpK3dGM(i,j,k,bi,bj) )
f6de204bec Jean*0185 #else
0186 & *( half_K
0187 & *(GM_bolFac2d(i,j-1,bi,bj)+GM_bolFac2d(i,j,bi,bj))
5116830959 Patr*0188 #endif
f42e64b3e7 Jean*0189 #ifdef GM_VISBECK_VARIABLE_K
94a8024bbe Jean*0190 & + op5*(VisbeckK(i,j-1,bi,bj)+VisbeckK(i,j,bi,bj))
f42e64b3e7 Jean*0191 #endif
a4576c7cde Juli*0192 #ifdef GM_GEOM_VARIABLE_K
0193 & + op5*(GEOM_K3d(i,j-1,k,bi,bj)+GEOM_K3d(i,j,k,bi,bj))
0194 #endif
f59d76b0dd Ed D*0195 #ifdef ALLOW_GM_LEITH_QG
94a8024bbe Jean*0196 & + op25*( GM_LeithQG_K(i,j-1,km1,bi,bj)
0197 & + GM_LeithQG_K(i, j ,km1,bi,bj)
0198 & + GM_LeithQG_K(i,j-1,k,bi,bj)
0199 & + GM_LeithQG_K(i, j ,k,bi,bj) )
f59d76b0dd Ed D*0200 #endif
8233d0ceb9 Jean*0201 & )
0202
43af9695da Gael*0203 #ifdef ALLOW_EDDYPSI
0204 & +eddyPsiY(i,j,k,bi,bj)*maskS(i,j,k,bi,bj)
0205 #endif
8233d0ceb9 Jean*0206 ENDDO
c1c6d46ee2 Jean*0207 ENDDO
f42e64b3e7 Jean*0208
c1c6d46ee2 Jean*0209
f42e64b3e7 Jean*0210 ENDDO
c1c6d46ee2 Jean*0211
8233d0ceb9 Jean*0212
f42e64b3e7 Jean*0213 ENDIF
0214 #endif /* GM_BOLUS_ADVEC */
0215 #endif /* ALLOW_GMREDI */
0216
0217 RETURN
0218 END