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