File indexing completed on 2023-02-03 06:10:13 UTC
view on githubraw file Latest commit edb66560 on 2023-02-02 23:32:31 UTC
9c05b3873e Alis*0001 #include "MOM_COMMON_OPTIONS.h"
14bb46b4fa Jean*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
aecc8b0f47 Mart*0005 #ifdef ALLOW_CTRL
0006 # include "CTRL_OPTIONS.h"
0007 #endif
aea29c8517 Alis*0008
71207ba845 Alis*0009
0010
0011
0012
aea29c8517 Alis*0013 SUBROUTINE MOM_CALC_HFACZ(
3678fae08f Jean*0014 I bi, bj, k,
0015 O hFacZ, r_hFacZ,
0016 I myThid )
aea29c8517 Alis*0017
71207ba845 Alis*0018
0019
0020
0021
0022 IMPLICIT NONE
aea29c8517 Alis*0023 #include "SIZE.h"
9354528577 Jean*0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
aea29c8517 Alis*0026 #include "GRID.h"
3678fae08f Jean*0027 #ifdef ALLOW_DEPTH_CONTROL
7c50f07931 Mart*0028 # ifdef ALLOW_AUTODIFF_TAMC
3678fae08f Jean*0029 # include "tamc.h"
0030 # endif
0031 #else /* ALLOW_DEPTH_CONTROL */
0032 # ifdef ALLOW_EXCH2
0033 # include "W2_EXCH2_SIZE.h"
0034 # include "W2_EXCH2_TOPOLOGY.h"
0035 # endif
0036 #endif /* ALLOW_DEPTH_CONTROL */
616600b8d2 Patr*0037
71207ba845 Alis*0038
3678fae08f Jean*0039
0040
0041
0042 INTEGER bi, bj, k
71207ba845 Alis*0043 INTEGER myThid
0044
0045
3678fae08f Jean*0046
0047
aea29c8517 Alis*0048 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0049 _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0050
71207ba845 Alis*0051
3678fae08f Jean*0052
9354528577 Jean*0053
0054
0055
0056
0057
0058
0059
3678fae08f Jean*0060 INTEGER i,j
616600b8d2 Patr*0061 #ifdef ALLOW_DEPTH_CONTROL
351ff83338 Jean*0062 _RS hFacZOpenI(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0063 _RS hFacZOpenJ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
616600b8d2 Patr*0064 # ifdef USE_SMOOTH_MIN
bcc0cf4625 Jean*0065 _RS SMOOTHMIN_RS
0066 EXTERNAL SMOOTHMIN_RS
616600b8d2 Patr*0067 # endif /* USE_SMOOTH_MIN */
7c50f07931 Mart*0068 # ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0069 INTEGER kkey
7c50f07931 Mart*0070 # endif
3678fae08f Jean*0071 #else /* ALLOW_DEPTH_CONTROL */
0e80da5578 Jean*0072 _RS hFacZOpen
9354528577 Jean*0073 INTEGER hZoption
0074 LOGICAL northWestCorner, northEastCorner,
0075 & southWestCorner, southEastCorner
0076 INTEGER myFace
3678fae08f Jean*0077 # ifdef ALLOW_EXCH2
9354528577 Jean*0078 INTEGER myTile
3678fae08f Jean*0079 # endif /* ALLOW_EXCH2 */
9354528577 Jean*0080 PARAMETER ( hZoption = 0 )
0081 #endif /* ALLOW_DEPTH_CONTROL */
3678fae08f Jean*0082
0083
0084
aea29c8517 Alis*0085
616600b8d2 Patr*0086 #ifdef ALLOW_DEPTH_CONTROL
3678fae08f Jean*0087
0088 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0089 kkey = bi + (bj-1)*nSx + (ikey_dynamics-1)*nSx*nSy
0090 kkey = k + (kkey-1)*Nr
616600b8d2 Patr*0091 #endif /* ALLOW_AUTODIFF_TAMC */
0092
bcc0cf4625 Jean*0093 DO j=1-OLy,sNy+OLy
0094 DO i=1-OLx,sNx+OLx
616600b8d2 Patr*0095 hFacZ(i,j) =0.
0096 r_hFacZ(i,j) =0.
3678fae08f Jean*0097 hFacZOpenI(i,j)=0.
616600b8d2 Patr*0098 hFacZOpenJ(i,j)=0.
0099 ENDDO
0100 ENDDO
0101
0102 #ifdef ALLOW_AUTODIFF_TAMC
0103
0104
0105 #endif /* ALLOW_AUTODIFF_TAMC */
bcc0cf4625 Jean*0106 DO j=2-OLy,sNy+OLy
0107 DO i=2-OLx,sNx+OLx
616600b8d2 Patr*0108 hFacZOpenJ(i,j)=
0109 #ifdef USE_SMOOTH_MIN
bcc0cf4625 Jean*0110 & SMOOTHMIN_RS(_hFacW(i ,j ,k,bi,bj),
616600b8d2 Patr*0111 #else
0112 & MIN(_hFacW(i ,j ,k,bi,bj),
0113 #endif /* USE_SMOOTH_MIN */
0114 & _hFacW(i ,j-1,k,bi,bj))
0115 & *maskW(i,j,k,bi,bj)*maskW(i,j-1,k,bi,bj)
0116 hFacZOpenI(i,j)=
0117 #ifdef USE_SMOOTH_MIN
bcc0cf4625 Jean*0118 & SMOOTHMIN_RS(_hFacS(i ,j ,k,bi,bj),
616600b8d2 Patr*0119 #else
0120 & MIN(_hFacS(i ,j ,k,bi,bj),
0121 #endif /* USE_SMOOTH_MIN */
0122 & _hFacS(i-1,j ,k,bi,bj))
0123 & *maskS(i,j,k,bi,bj)*maskS(i-1,j,k,bi,bj)
0124 ENDDO
0125 ENDDO
3678fae08f Jean*0126 #ifdef ALLOW_AUTODIFF_TAMC
616600b8d2 Patr*0127
0128
3678fae08f Jean*0129 #endif /* ALLOW_AUTODIFF_TAMC */
bcc0cf4625 Jean*0130 DO j=2-OLy,sNy+OLy
0131 DO i=2-OLx,sNx+OLx
616600b8d2 Patr*0132 hFacZ(i,j) =
0133 #ifdef USE_SMOOTH_MIN
bcc0cf4625 Jean*0134 & SMOOTHMIN_RS(hFacZOpenI(i,j),hFacZOpenJ(i,j))
616600b8d2 Patr*0135 #else
0136 & MIN(hFacZOpenI(i,j),hFacZOpenJ(i,j))
0137 #endif /* USE_SMOOTH_MIN */
0138 & *maskW(i,j,k,bi,bj)*maskW(i,j-1,k,bi,bj)
0139 & *maskS(i,j,k,bi,bj)*maskS(i-1,j,k,bi,bj)
0140 ENDDO
0141 ENDDO
3678fae08f Jean*0142 #ifdef ALLOW_AUTODIFF_TAMC
616600b8d2 Patr*0143
3678fae08f Jean*0144 #endif /* ALLOW_AUTODIFF_TAMC */
bcc0cf4625 Jean*0145 DO j=2-OLy,sNy+OLy
0146 DO i=2-OLx,sNx+OLx
616600b8d2 Patr*0147 IF (hFacZ(i,j).EQ.0.) THEN
3678fae08f Jean*0148 r_hFacZ(i,j) = 0. _d 0
616600b8d2 Patr*0149 ELSE
3678fae08f Jean*0150 r_hFacZ(i,j) = 1. _d 0/hFacZ(i,j)
616600b8d2 Patr*0151 ENDIF
0152 ENDDO
0153 ENDDO
3678fae08f Jean*0154 #ifdef ALLOW_AUTODIFF_TAMC
616600b8d2 Patr*0155
3678fae08f Jean*0156 #endif /* ALLOW_AUTODIFF_TAMC */
616600b8d2 Patr*0157
0158 #else /* not ALLOW_DEPTH_CONTROL */
0159
9354528577 Jean*0160
0161
0162
bcc0cf4625 Jean*0163
0164
9354528577 Jean*0165
0166
0167
0168
0169
bcc0cf4625 Jean*0170 DO i=1-OLx,sNx+OLx
0171 hFacZ(i,1-OLy)=0.
aea29c8517 Alis*0172 ENDDO
bcc0cf4625 Jean*0173 DO j=2-OLy,sNy+OLy
0174 hFacZ(1-OLx,j)=0.
9354528577 Jean*0175 ENDDO
0176
0177
0178
0179 IF ( hZoption.EQ.2 ) THEN
bcc0cf4625 Jean*0180 DO j=2-OLy,sNy+OLy
0181 DO i=2-OLx,sNx+OLx
9354528577 Jean*0182
0183
0184
0185
0186
0187
0188 hFacZOpen=
0189 & ( _hFacW(i, j ,k,bi,bj)
0190 & +_hFacW(i,j-1,k,bi,bj) )
0191 & + ( _hFacS( i ,j,k,bi,bj)
0192 & +_hFacS(i-1,j,k,bi,bj) )
0193 hFacZ(i,j) = 0.25 _d 0 * hFacZOpen
0194 ENDDO
0195 ENDDO
0196 ELSEIF ( hZoption.EQ.1 ) THEN
bcc0cf4625 Jean*0197 DO j=2-OLy,sNy+OLy
0198 DO i=2-OLx,sNx+OLx
9354528577 Jean*0199
0200
0201
0202
0203
0204
0205
0206 hFacZOpen=MIN(
0207 & _hFacW(i, j ,k,bi,bj)
0208 & + _hFacW(i,j-1,k,bi,bj)
0209 & , _hFacS( i ,j,k,bi,bj)
0210 & + _hFacS(i-1,j,k,bi,bj)
0211 & )
0212 hFacZ(i,j) = 0.5 _d 0 * hFacZOpen
0213 ENDDO
0214 ENDDO
0215 ELSE
bcc0cf4625 Jean*0216 DO j=2-OLy,sNy+OLy
0217 DO i=2-OLx,sNx+OLx
9354528577 Jean*0218 hFacZOpen=MIN(_hFacW(i,j,k,bi,bj),
0219 & _hFacW(i,j-1,k,bi,bj))
0220 hFacZOpen=MIN(_hFacS(i,j,k,bi,bj),hFacZOpen)
0221 hFacZOpen=MIN(_hFacS(i-1,j,k,bi,bj),hFacZOpen)
0222 hFacZ(i,j)=hFacZOpen
0223 ENDDO
0224 ENDDO
0225 ENDIF
0226
3678fae08f Jean*0227
9354528577 Jean*0228
0229 IF ( useCubedSphereExchange .AND. hZoption.GE.1 ) THEN
0230
0231 #ifdef ALLOW_EXCH2
c424ee7cc7 Jean*0232 myTile = W2_myTileList(bi,bj)
9354528577 Jean*0233 myFace = exch2_myFace(myTile)
0234 southWestCorner = exch2_isWedge(myTile).EQ.1
3678fae08f Jean*0235 & .AND. exch2_isSedge(myTile).EQ.1
9354528577 Jean*0236 southEastCorner = exch2_isEedge(myTile).EQ.1
0237 & .AND. exch2_isSedge(myTile).EQ.1
0238 northEastCorner = exch2_isEedge(myTile).EQ.1
0239 & .AND. exch2_isNedge(myTile).EQ.1
0240 northWestCorner = exch2_isWedge(myTile).EQ.1
0241 & .AND. exch2_isNedge(myTile).EQ.1
0242 #else
0243 myFace = bi
0244 southWestCorner = .TRUE.
0245 southEastCorner = .TRUE.
0246 northWestCorner = .TRUE.
0247 northEastCorner = .TRUE.
0248 #endif /* ALLOW_EXCH2 */
0249
0250 IF ( southWestCorner ) THEN
0251 i=1
0252 j=1
0253 IF ( hZoption.EQ.1 ) THEN
0254 hFacZOpen=MIN(_hFacW(i,j,k,bi,bj),
0255 & _hFacW(i,j-1,k,bi,bj))
0256 hFacZOpen=MIN(_hFacS(i,j,k,bi,bj),hFacZOpen)
0257 hFacZ(i,j)=hFacZOpen
0258 ELSE
0259 IF ( MOD(myFace,2).EQ.1 ) THEN
0260 hFacZOpen=
0261 & ( _hFacW(i,j-1,k,bi,bj)
0262 & +_hFacS( i ,j,k,bi,bj) )
0263 & + _hFacW(i, j ,k,bi,bj)
0264 ELSE
0265 hFacZOpen=
0266 & ( _hFacW(i, j ,k,bi,bj)
0267 & +_hFacW(i,j-1,k,bi,bj) )
0268 & + _hFacS( i ,j,k,bi,bj)
0269 ENDIF
0270 hFacZ(i,j) = hFacZOpen / 3. _d 0
0271 ENDIF
0272 ENDIF
0273
0274 IF ( southEastCorner ) THEN
3678fae08f Jean*0275 i=sNx+1
0276 j=1
9354528577 Jean*0277
0278 IF ( hZoption.EQ.1 ) THEN
0279 hFacZOpen=MIN(_hFacW(i,j,k,bi,bj),
0280 & _hFacW(i,j-1,k,bi,bj))
0281 hFacZOpen=MIN(_hFacS(i-1,j,k,bi,bj),hFacZOpen)
0282 hFacZ(i,j)=hFacZOpen
0283 ELSE
0284 IF ( myFace.EQ.4 ) THEN
0285 hFacZOpen=
0286 & ( _hFacS(i-1,j,k,bi,bj)
0287 & +_hFacW(i,j-1,k,bi,bj) )
0288 & + _hFacW(i, j ,k,bi,bj)
0289 ELSEIF ( myFace.EQ.6 ) THEN
0290 hFacZOpen=
0291 & ( _hFacW(i,j-1,k,bi,bj)
0292 & +_hFacW(i, j ,k,bi,bj) )
0293 & + _hFacS(i-1,j,k,bi,bj)
0294 ELSE
0295 hFacZOpen=
0296 & ( _hFacW(i, j ,k,bi,bj)
0297 & +_hFacS(i-1,j,k,bi,bj) )
0298 & + _hFacW(i,j-1,k,bi,bj)
0299 ENDIF
0300 hFacZ(i,j) = hFacZOpen / 3. _d 0
0301 ENDIF
0302 ENDIF
0303
0304 IF ( northWestCorner ) THEN
0305 i=1
0306 j=sNy+1
0307
0308 IF ( hZoption.EQ.1 ) THEN
0309 hFacZOpen=MIN(_hFacW(i,j,k,bi,bj),
0310 & _hFacW(i,j-1,k,bi,bj))
0311 hFacZOpen=MIN(_hFacS(i,j,k,bi,bj),hFacZOpen)
0312 hFacZ(i,j)=hFacZOpen
0313 ELSE
0314 IF ( myFace.EQ.1 ) THEN
0315 hFacZOpen=
0316 & ( _hFacS( i ,j,k,bi,bj)
0317 & +_hFacW(i, j ,k,bi,bj) )
0318 & + _hFacW(i,j-1,k,bi,bj)
0319 ELSEIF ( myFace.EQ.5 ) THEN
0320 hFacZOpen=
0321 & ( _hFacW(i, j ,k,bi,bj)
0322 & +_hFacW(i,j-1,k,bi,bj) )
0323 & + _hFacS( i ,j,k,bi,bj)
0324 ELSE
0325 hFacZOpen=
0326 & ( _hFacW(i,j-1,k,bi,bj)
0327 & +_hFacS( i ,j,k,bi,bj) )
0328 & + _hFacW(i, j ,k,bi,bj)
0329 ENDIF
0330 hFacZ(i,j) = hFacZOpen / 3. _d 0
0331 ENDIF
0332 ENDIF
0333
0334 IF ( northEastCorner ) THEN
0335 i=sNx+1
0336 j=sNy+1
0337 IF ( hZoption.EQ.1 ) THEN
0338 hFacZOpen=MIN(_hFacW(i,j,k,bi,bj),
0339 & _hFacW(i,j-1,k,bi,bj))
0340 hFacZOpen=MIN(_hFacS(i-1,j,k,bi,bj),hFacZOpen)
0341 hFacZ(i,j)=hFacZOpen
0342 ELSE
0343 IF ( MOD(myFace,2).EQ.1 ) THEN
0344 hFacZOpen=
0345 & ( _hFacW(i,j-1,k,bi,bj)
0346 & +_hFacW(i, j ,k,bi,bj) )
0347 & + _hFacS(i-1,j,k,bi,bj)
0348 ELSE
0349 hFacZOpen=
0350 & ( _hFacW(i, j ,k,bi,bj)
0351 & +_hFacS(i-1,j,k,bi,bj) )
0352 & + _hFacW(i,j-1,k,bi,bj)
0353 ENDIF
0354 hFacZ(i,j) = hFacZOpen / 3. _d 0
0355 ENDIF
0356 ENDIF
0357
0358 ENDIF
3678fae08f Jean*0359
0360
9354528577 Jean*0361
edb6656069 Mart*0362
bcc0cf4625 Jean*0363 DO j=1-OLy,sNy+OLy
0364 DO i=1-OLx,sNx+OLx
aea29c8517 Alis*0365 IF (hFacZ(i,j).EQ.0.) THEN
9354528577 Jean*0366 r_hFacZ(i,j) = 0.
aea29c8517 Alis*0367 ELSE
9354528577 Jean*0368 r_hFacZ(i,j) = 1. _d 0/hFacZ(i,j)
aea29c8517 Alis*0369 ENDIF
0370 ENDDO
0371 ENDDO
9354528577 Jean*0372
0373
616600b8d2 Patr*0374 #endif /* ALLOW_DEPTH_CONTROL */
aea29c8517 Alis*0375
0376 RETURN
0377 END