File indexing completed on 2018-03-02 18:42:04 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
7c7b0b4a46 Alis*0001 #include "MOM_COMMON_OPTIONS.h"
6bffe74a45 Jean*0002 #undef CALC_CS_CORNER_EXTENDED
aea29c8517 Alis*0003
f2da9de9fe Jean*0004 SUBROUTINE MOM_CALC_RELVORT3(
aea29c8517 Alis*0005 I bi,bj,k,
0006 I uFld, vFld, hFacZ,
0007 O vort3,
220a9e88b5 Jean*0008 I myThid )
aea29c8517 Alis*0009 IMPLICIT NONE
f2da9de9fe Jean*0010
0011
0012
0013
aea29c8517 Alis*0014
0015
0016 #include "SIZE.h"
0017 #include "EEPARAMS.h"
0018 #include "PARAMS.h"
0019 #include "GRID.h"
4749c74143 Alis*0020 #ifdef ALLOW_EXCH2
f9f661930b Jean*0021 #include "W2_EXCH2_SIZE.h"
404487e0d3 Andr*0022 #include "W2_EXCH2_TOPOLOGY.h"
4749c74143 Alis*0023 #endif /* ALLOW_EXCH2 */
aea29c8517 Alis*0024
0025
0026 INTEGER bi,bj,k
0027 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0028 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0029 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0030 _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0031 INTEGER myThid
0032
0033
0034 INTEGER i,j
404487e0d3 Andr*0035 LOGICAL northWestCorner, northEastCorner,
0036 & southWestCorner, southEastCorner
f7fdcad707 Jean*0037 INTEGER myFace
4749c74143 Alis*0038 #ifdef ALLOW_EXCH2
404487e0d3 Andr*0039 INTEGER myTile
4749c74143 Alis*0040 #endif /* ALLOW_EXCH2 */
aea29c8517 Alis*0041
14bb46b4fa Jean*0042 #ifdef ALLOW_AUTODIFF
0043 DO J=1-OLy,sNy+OLy
0044 DO I=1-OLx,sNx+OLx
629d440dd4 Patr*0045 vort3(I,J) = 0. _d 0
0046 ENDDO
0047 ENDDO
0048 #endif
0049
14bb46b4fa Jean*0050 DO J=2-OLy,sNy+OLy
0051 DO I=2-OLx,sNx+OLx
aea29c8517 Alis*0052
0053
0054 vort3(I,J)=
0055 & recip_rAz(I,J,bi,bj)*(
f7fdcad707 Jean*0056 & ( vFld(I,J)*dyC(I,J,bi,bj)
0057 & -vFld(I-1,J)*dyC(I-1,J,bi,bj) )
0058 & -( uFld(I,J)*dxC(I,J,bi,bj)
0059 & -uFld(I,J-1)*dxC(I,J-1,bi,bj) )
220a9e88b5 Jean*0060 & )*recip_deepFacC(k)
aea29c8517 Alis*0061
0062
602b37a090 Jean*0063
aea29c8517 Alis*0064
0065
0066
0067
0068
0069
0070
0071
602b37a090 Jean*0072
0073
0074
aea29c8517 Alis*0075
0076 ENDDO
0077 ENDDO
404487e0d3 Andr*0078
aea29c8517 Alis*0079
0080 IF (useCubedSphereExchange) THEN
4749c74143 Alis*0081 #ifdef ALLOW_EXCH2
c424ee7cc7 Jean*0082 myTile = W2_myTileList(bi,bj)
f7fdcad707 Jean*0083 myFace = exch2_myFace(myTile)
602b37a090 Jean*0084 southWestCorner = exch2_isWedge(myTile).EQ.1
0085 & .AND. exch2_isSedge(myTile).EQ.1
0086 southEastCorner = exch2_isEedge(myTile).EQ.1
0087 & .AND. exch2_isSedge(myTile).EQ.1
0088 northEastCorner = exch2_isEedge(myTile).EQ.1
0089 & .AND. exch2_isNedge(myTile).EQ.1
0090 northWestCorner = exch2_isWedge(myTile).EQ.1
0091 & .AND. exch2_isNedge(myTile).EQ.1
87d8be0814 Alis*0092 #else
f7fdcad707 Jean*0093 myFace = bi
87d8be0814 Alis*0094 southWestCorner = .TRUE.
0095 southEastCorner = .TRUE.
0096 northWestCorner = .TRUE.
0097 northEastCorner = .TRUE.
4749c74143 Alis*0098 #endif /* ALLOW_EXCH2 */
f2da9de9fe Jean*0099
404487e0d3 Andr*0100 IF ( southWestCorner ) THEN
0101
0102
0103
0104
0105
0106
0107
0108
0109
aea29c8517 Alis*0110 I=1
0111 J=1
7dd05684e1 Jean*0112
0113
0114 vort3(I,J)=
f7fdcad707 Jean*0115 & +recip_rAz(I,J,bi,bj)*(
7dd05684e1 Jean*0116 & ( vFld(I,J)*dyC(I,J,bi,bj)
0117 & -uFld(I,J)*dxC(I,J,bi,bj) )
0118 & + uFld(I,J-1)*dxC(I,J-1,bi,bj)
220a9e88b5 Jean*0119 & )*recip_deepFacC(k)
f7fdcad707 Jean*0120
0121
0122
0123
0124
0125
220a9e88b5 Jean*0126
fc5dc5d012 Jean*0127 #ifdef CALC_CS_CORNER_EXTENDED
7dd05684e1 Jean*0128 vort3(I-1,J)=
404487e0d3 Andr*0129 & recip_rAz(I-1,J,bi,bj)*(
f7fdcad707 Jean*0130 & vFld(I-1,J)*dyC(I-1,J,bi,bj)
0131 & -vFld(I-2,J)*dyC(I-2,J,bi,bj)
0132 & -uFld(I-1,J)*dxC(I-1,J,bi,bj)
0133 & +vFld(I+0,J-1)*dyC(I+0,J-1,bi,bj)
220a9e88b5 Jean*0134 & )*recip_deepFacC(k)
e0f1ebae6e Jean*0135 & *maskS(i-1,j,k,bi,bj)*maskS(i-2,j,k,bi,bj)
0136 & *maskW(i-1,j,k,bi,bj)*maskS(i,j-1,k,bi,bj)
7dd05684e1 Jean*0137 vort3(I,J-1)=vort3(I-1,J)
fc5dc5d012 Jean*0138 #endif
404487e0d3 Andr*0139 ENDIF
f2da9de9fe Jean*0140
404487e0d3 Andr*0141 IF ( southEastCorner ) THEN
0142
0143
0144
0145
0146
0147
0148
0149
0150
aea29c8517 Alis*0151 I=sNx+1
0152 J=1
7dd05684e1 Jean*0153
0154
0155 IF ( myFace.EQ.2 ) THEN
0156 vort3(I,J)=
0157 & +recip_rAz(I,J,bi,bj)*(
0158 & (-uFld(I,J)*dxC(I,J,bi,bj)
0159 & -vFld(I-1,J)*dyC(I-1,J,bi,bj) )
0160 & + uFld(I,J-1)*dxC(I,J-1,bi,bj)
220a9e88b5 Jean*0161 & )*recip_deepFacC(k)
7dd05684e1 Jean*0162 ELSEIF ( myFace.EQ.4 ) THEN
f7fdcad707 Jean*0163 vort3(I,J)=
0164 & +recip_rAz(I,J,bi,bj)*(
0165 & (-vFld(I-1,J)*dyC(I-1,J,bi,bj)
0166 & +uFld(I,J-1)*dxC(I,J-1,bi,bj) )
0167 & - uFld(I,J)*dxC(I,J,bi,bj)
220a9e88b5 Jean*0168 & )*recip_deepFacC(k)
7dd05684e1 Jean*0169 ELSE
f7fdcad707 Jean*0170 vort3(I,J)=
0171 & +recip_rAz(I,J,bi,bj)*(
0172 & (+uFld(I,J-1)*dxC(I,J-1,bi,bj)
0173 & -uFld(I,J)*dxC(I,J,bi,bj) )
0174 & - vFld(I-1,J)*dyC(I-1,J,bi,bj)
220a9e88b5 Jean*0175 & )*recip_deepFacC(k)
f7fdcad707 Jean*0176 ENDIF
0177
0178
0179
0180
0181
0182
220a9e88b5 Jean*0183
fc5dc5d012 Jean*0184 #ifdef CALC_CS_CORNER_EXTENDED
7dd05684e1 Jean*0185 vort3(I+1,J)=
404487e0d3 Andr*0186 & recip_rAz(I+1,J,bi,bj)*(
f7fdcad707 Jean*0187 & vFld(I+1,J)*dyC(I+1,J,bi,bj)
0188 & -vFld(I-0,J)*dyC(I-0,J,bi,bj)
0189 & -uFld(I+1,J)*dxC(I+1,J,bi,bj)
0190 & -vFld(I-1,J-1)*dyC(I-1,J-1,bi,bj)
220a9e88b5 Jean*0191 & )*recip_deepFacC(k)
e0f1ebae6e Jean*0192 & *maskS(i+1,j,k,bi,bj)*maskS(i-0,j,k,bi,bj)
0193 & *maskW(i+1,j,k,bi,bj)*maskS(i-1,j-1,k,bi,bj)
7dd05684e1 Jean*0194 vort3(I,J-1)=vort3(I+1,J)
fc5dc5d012 Jean*0195 #endif
404487e0d3 Andr*0196 ENDIF
f2da9de9fe Jean*0197
404487e0d3 Andr*0198 IF ( northWestCorner ) THEN
0199
0200
0201
0202
0203
0204
0205
0206
0207
aea29c8517 Alis*0208 I=1
0209 J=sNy+1
7dd05684e1 Jean*0210
0211
f7fdcad707 Jean*0212 IF ( myFace.EQ.1 ) THEN
0213 vort3(I,J)=
aea29c8517 Alis*0214 & +recip_rAz(I,J,bi,bj)*(
7dd05684e1 Jean*0215 & (+uFld(I,J-1)*dxC(I,J-1,bi,bj)
0216 & +vFld(I,J)*dyC(I,J,bi,bj) )
0217 & -uFld(I,J)*dxC(I,J,bi,bj)
220a9e88b5 Jean*0218 & )*recip_deepFacC(k)
7dd05684e1 Jean*0219 ELSEIF ( myFace.EQ.3 ) THEN
f7fdcad707 Jean*0220 vort3(I,J)=
0221 & +recip_rAz(I,J,bi,bj)*(
0222 & (-uFld(I,J)*dxC(I,J,bi,bj)
0223 & +uFld(I,J-1)*dxC(I,J-1,bi,bj) )
0224 & + vFld(I,J)*dyC(I,J,bi,bj)
220a9e88b5 Jean*0225 & )*recip_deepFacC(k)
f7fdcad707 Jean*0226 ELSE
0227 vort3(I,J)=
0228 & +recip_rAz(I,J,bi,bj)*(
7dd05684e1 Jean*0229 & (+vFld(I,J)*dyC(I,J,bi,bj)
0230 & -uFld(I,J)*dxC(I,J,bi,bj) )
0231 & + uFld(I,J-1)*dxC(I,J-1,bi,bj)
220a9e88b5 Jean*0232 & )*recip_deepFacC(k)
f7fdcad707 Jean*0233 ENDIF
0234
0235
0236
0237
0238
0239
220a9e88b5 Jean*0240
fc5dc5d012 Jean*0241 #ifdef CALC_CS_CORNER_EXTENDED
7dd05684e1 Jean*0242 vort3(I-1,J)=
404487e0d3 Andr*0243 & recip_rAz(I-1,J,bi,bj)*(
f7fdcad707 Jean*0244 & vFld(I-1,J)*dyC(I-1,J,bi,bj)
0245 & -vFld(I-2,J)*dyC(I-2,J,bi,bj)
0246 & +vFld(I-0,J+1)*dyC(I-0,J+1,bi,bj)
0247 & +uFld(I-1,J-1)*dxC(I-1,J-1,bi,bj)
220a9e88b5 Jean*0248 & )*recip_deepFacC(k)
e0f1ebae6e Jean*0249 & *maskS(i-1,j,k,bi,bj)*maskS(i-2,j,k,bi,bj)
0250 & *maskS(i,j+1,k,bi,bj)*maskW(i-1,j-1,k,bi,bj)
7dd05684e1 Jean*0251 vort3(I,J+1)=vort3(I-1,J)
fc5dc5d012 Jean*0252 #endif
e0f1ebae6e Jean*0253 ENDIF
f2da9de9fe Jean*0254
e0f1ebae6e Jean*0255 IF ( northEastCorner ) THEN
404487e0d3 Andr*0256
0257
0258
0259
0260
0261
0262
0263
0264
aea29c8517 Alis*0265 I=sNx+1
0266 J=sNy+1
f7fdcad707 Jean*0267
7dd05684e1 Jean*0268
f7fdcad707 Jean*0269 IF ( MOD(myFace,2).EQ.1 ) THEN
0270 vort3(I,J)=
0271 & +recip_rAz(I,J,bi,bj)*(
7dd05684e1 Jean*0272 & (-uFld(I,J)*dxC(I,J,bi,bj)
0273 & -vFld(I-1,J)*dyC(I-1,J,bi,bj) )
0274 & + uFld(I,J-1)*dxC(I,J-1,bi,bj)
220a9e88b5 Jean*0275 & )*recip_deepFacC(k)
f7fdcad707 Jean*0276 ELSE
0277 vort3(I,J)=
aea29c8517 Alis*0278 & +recip_rAz(I,J,bi,bj)*(
7dd05684e1 Jean*0279 & (+uFld(I,J-1)*dxC(I,J-1,bi,bj)
0280 & -uFld(I,J)*dxC(I,J,bi,bj) )
0281 & - vFld(I-1,J)*dyC(I-1,J,bi,bj)
220a9e88b5 Jean*0282 & )*recip_deepFacC(k)
f7fdcad707 Jean*0283 ENDIF
0284
0285
0286
0287
0288
0289
220a9e88b5 Jean*0290
fc5dc5d012 Jean*0291 #ifdef CALC_CS_CORNER_EXTENDED
7dd05684e1 Jean*0292 vort3(I+1,J)=
404487e0d3 Andr*0293 & recip_rAz(I+1,J,bi,bj)*(
f7fdcad707 Jean*0294 & vFld(I+1,J)*dyC(I+1,J,bi,bj)
0295 & -vFld(I-0,J)*dyC(I-0,J,bi,bj)
0296 & -vFld(I-1,J+1)*dyC(I-1,J+1,bi,bj)
0297 & +uFld(I+1,J-1)*dxC(I+1,J-1,bi,bj)
220a9e88b5 Jean*0298 & )*recip_deepFacC(k)
e0f1ebae6e Jean*0299 & *maskS(i+1,j,k,bi,bj)*maskS(i-0,j,k,bi,bj)
0300 & *maskS(i-1,j+1,k,bi,bj)*maskW(i+1,j-1,k,bi,bj)
7dd05684e1 Jean*0301 vort3(I,J+1)=vort3(I+1,J)
fc5dc5d012 Jean*0302 #endif
aea29c8517 Alis*0303 ENDIF
e0f1ebae6e Jean*0304 ENDIF
aea29c8517 Alis*0305
0306 RETURN
0307 END