File indexing completed on 2025-09-19 05:08:09 UTC
view on githubraw file Latest commit c3be0435 on 2025-09-18 18:40:16 UTC
6d54cf9ca1 Ed H*0001 #include "PACKAGES_CONFIG.h"
fb5eaa30cd Jean*0002 #include "CPP_OPTIONS.h"
52dd931a85 Timo*0003 #ifdef ALLOW_AUTODIFF
0004 # include "AUTODIFF_OPTIONS.h"
0005 #endif
aecc8b0f47 Mart*0006 #ifdef ALLOW_CTRL
0007 # include "CTRL_OPTIONS.h"
0008 #endif
fb5eaa30cd Jean*0009
0010
0011
0012
0013 SUBROUTINE INTEGR_CONTINUITY(
bfdbc242ac Jean*0014 I uFld, vFld,
fb5eaa30cd Jean*0015 I myTime, myIter, myThid )
0016
0017
21b8df1d84 Jean*0018
0019
bfdbc242ac Jean*0020
0021
52dd931a85 Timo*0022
0023
fb5eaa30cd Jean*0024
0025
0026
0027
0028 IMPLICIT NONE
0029
0030 #include "SIZE.h"
0031 #include "EEPARAMS.h"
0032 #include "PARAMS.h"
0033 #include "DYNVARS.h"
0034 #include "GRID.h"
0035 #include "SURFACE.h"
0036 #include "FFIELDS.h"
aecc8b0f47 Mart*0037 #ifdef ALLOW_AUTODIFF_TAMC
0038 # include "tamc.h"
0039 #endif
fb5eaa30cd Jean*0040
0041
0042
bfdbc242ac Jean*0043
0044
0045
0046
0047
fb5eaa30cd Jean*0048 _RL myTime
0049 INTEGER myIter
0050 INTEGER myThid
e1fb02e8f0 Jean*0051 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0052 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
fb5eaa30cd Jean*0053
0054
0055
0056
0057
bfdbc242ac Jean*0058
0059
0060
0061
8dc89a3cca Jean*0062
e1fb02e8f0 Jean*0063 INTEGER k,bi,bj
0064 INTEGER i, j
b924705ae1 Matt*0065 INTEGER ks
e1fb02e8f0 Jean*0066 _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0067 _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0068 _RL hDivFlow(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
d2a11ab670 Jean*0069 _RL facEmP, facMass
0070 #ifndef ALLOW_ADDFLUID
0071 _RL addMass(1)
0072 #endif /* ndef ALLOW_ADDFLUID */
65de7f3d8d Jean*0073 #if (defined NONLIN_FRSURF) &&
e1fb02e8f0 Jean*0074 _RL rStarDhDt(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
aecc8b0f47 Mart*0075 # if (defined ALLOW_AUTODIFF_TAMC) && (defined ALLOW_DEPTH_CONTROL)
edb6656069 Mart*0076
0077 INTEGER tkey
aecc8b0f47 Mart*0078 # endif
65de7f3d8d Jean*0079 #else
0080 _RL rStarDhDt(1)
0081 #endif
fb5eaa30cd Jean*0082
0083
bfdbc242ac Jean*0084
0085 DO bj=myByLo(myThid),myByHi(myThid)
0086 DO bi=myBxLo(myThid),myBxHi(myThid)
0087
fb5eaa30cd Jean*0088
0089
79b5d5775c Jean*0090 IF ( exactConserv ) THEN
fb5eaa30cd Jean*0091
d2a11ab670 Jean*0092 facEmP = 0.
0093 IF ( fluidIsWater.AND.useRealFreshWaterFlux ) facEmP=mass2rUnit
0094 facMass = 0.
79b5d5775c Jean*0095 IF ( selectAddFluid.GE.1 .AND. myIter.NE.0 ) facMass = mass2rUnit
d2a11ab670 Jean*0096
fb5eaa30cd Jean*0097
0098
21b8df1d84 Jean*0099
e1fb02e8f0 Jean*0100 DO j=1-OLy,sNy+OLy
0101 DO i=1-OLx,sNx+OLx
8dc89a3cca Jean*0102 hDivFlow(i,j) = 0. _d 0
0103 utrans(i,j) = 0. _d 0
0104 vtrans(i,j) = 0. _d 0
d2a11ab670 Jean*0105 ENDDO
fb5eaa30cd Jean*0106 ENDDO
0107
d2a11ab670 Jean*0108 DO k=1,Nr
21b8df1d84 Jean*0109
fb5eaa30cd Jean*0110
4606c28752 Jean*0111
fb5eaa30cd Jean*0112 DO j=1,sNy+1
0113 DO i=1,sNx+1
0114 uTrans(i,j) = uFld(i,j,k,bi,bj)*_dyG(i,j,bi,bj)
4606c28752 Jean*0115 & *deepFacC(k)*rhoFacC(k)
fb5eaa30cd Jean*0116 & *drF(k)*_hFacW(i,j,k,bi,bj)
0117 vTrans(i,j) = vFld(i,j,k,bi,bj)*_dxG(i,j,bi,bj)
4606c28752 Jean*0118 & *deepFacC(k)*rhoFacC(k)
fb5eaa30cd Jean*0119 & *drF(k)*_hFacS(i,j,k,bi,bj)
0120 ENDDO
0121 ENDDO
0122
21b8df1d84 Jean*0123
fb5eaa30cd Jean*0124 DO j=1,sNy
0125 DO i=1,sNx
8dc89a3cca Jean*0126 hDivFlow(i,j) = hDivFlow(i,j)
fb5eaa30cd Jean*0127 & +maskC(i,j,k,bi,bj)*( uTrans(i+1,j)-uTrans(i,j)
0128 & +vTrans(i,j+1)-vTrans(i,j) )
d2a11ab670 Jean*0129 #ifdef ALLOW_ADDFLUID
0130 & -facMass*addMass(i,j,k,bi,bj)
0131 #endif /* ALLOW_ADDFLUID */
fb5eaa30cd Jean*0132 ENDDO
0133 ENDDO
0134
0135
d2a11ab670 Jean*0136 ENDDO
fb5eaa30cd Jean*0137
8dc89a3cca Jean*0138
4606c28752 Jean*0139
0140
bfdbc242ac Jean*0141 IF ( myIter.EQ.nIter0 .AND. myIter.NE.0
0142 & .AND. fluidIsWater .AND. useRealFreshWaterFlux ) THEN
615c650f5e Jean*0143
8dc89a3cca Jean*0144
615c650f5e Jean*0145
0146 IF ( usePickupBeforeC54 ) THEN
8dc89a3cca Jean*0147 DO j=1,sNy
0148 DO i=1,sNx
615c650f5e Jean*0149 dEtaHdt(i,j,bi,bj) = (etaN(i,j,bi,bj)-etaH(i,j,bi,bj))
edb6656069 Mart*0150 & / (implicDiv2Dflow*deltaTFreeSurf)
615c650f5e Jean*0151 ENDDO
0152 ENDDO
0153 ENDIF
0154
0155 DO j=1,sNy
0156 DO i=1,sNx
8dc89a3cca Jean*0157 PmEpR(i,j,bi,bj) = dEtaHdt(i,j,bi,bj)
0158 & + hDivFlow(i,j)*recip_rA(i,j,bi,bj)
4606c28752 Jean*0159 & *recip_deepFac2F(1)
62fd6ae4e5 Jean*0160 PmEpR(i,j,bi,bj) = PmEpR(i,j,bi,bj)*rUnit2mass
8dc89a3cca Jean*0161 ENDDO
615c650f5e Jean*0162 ENDDO
bfdbc242ac Jean*0163 ELSEIF ( myIter.EQ.nIter0 ) THEN
8dc89a3cca Jean*0164 DO j=1,sNy
0165 DO i=1,sNx
edb6656069 Mart*0166 ks = kSurfC(i,j,bi,bj)
8dc89a3cca Jean*0167 PmEpR(i,j,bi,bj) = 0. _d 0
0168 dEtaHdt(i,j,bi,bj) = -hDivFlow(i,j)*recip_rA(i,j,bi,bj)
4606c28752 Jean*0169 & *recip_deepFac2F(ks)
8dc89a3cca Jean*0170 ENDDO
21b8df1d84 Jean*0171 ENDDO
8dc89a3cca Jean*0172 ELSE
21b8df1d84 Jean*0173
0174
0175 DO j=1-OLy,sNy+OLy
0176 DO i=1-OLx,sNx+OLx
0177 PmEpR(i,j,bi,bj) = -EmPmR(i,j,bi,bj)
0178 ENDDO
0179 ENDDO
8dc89a3cca Jean*0180 DO j=1,sNy
0181 DO i=1,sNx
2d3bf0eeda Jean*0182 ks = kSurfC(i,j,bi,bj)
8dc89a3cca Jean*0183 dEtaHdt(i,j,bi,bj) = -hDivFlow(i,j)*recip_rA(i,j,bi,bj)
4606c28752 Jean*0184 & *recip_deepFac2F(ks)
8dc89a3cca Jean*0185 & -facEmP*EmPmR(i,j,bi,bj)
0186 ENDDO
0187 ENDDO
0188 ENDIF
0189
0190
2d3bf0eeda Jean*0191 #ifdef ALLOW_OBCS
0192
0193 IF ( useOBCS ) THEN
0194 DO j=1,sNy
0195 DO i=1,sNx
0196 dEtaHdt(i,j,bi,bj) = dEtaHdt(i,j,bi,bj)*maskInC(i,j,bi,bj)
0197 ENDDO
0198 ENDDO
0199 ENDIF
0200 #endif /* ALLOW_OBCS */
0201
0202
fb5eaa30cd Jean*0203 ENDIF
0204
0205
0206
bfdbc242ac Jean*0207 IF ( exactConserv .AND. myIter.NE.nIter0 ) THEN
21b8df1d84 Jean*0208
fb5eaa30cd Jean*0209
0210
79b5d5775c Jean*0211 IF ( implicDiv2Dflow.EQ.zeroRL ) THEN
e1fb02e8f0 Jean*0212 DO j=1-OLy,sNy+OLy
0213 DO i=1-OLx,sNx+OLx
21b8df1d84 Jean*0214 etaN(i,j,bi,bj) = etaH(i,j,bi,bj)
fb5eaa30cd Jean*0215 ENDDO
0216 ENDDO
0217 ELSE
0218 DO j=1,sNy
0219 DO i=1,sNx
0220 etaN(i,j,bi,bj) = etaH(i,j,bi,bj)
edb6656069 Mart*0221 & + implicDiv2Dflow*dEtaHdt(i,j,bi,bj)*deltaTFreeSurf
fb5eaa30cd Jean*0222 ENDDO
0223 ENDDO
0224 ENDIF
0225
b3d6da8289 Dimi*0226 #ifdef ALLOW_OBCS
2d3bf0eeda Jean*0227
0228
0229
0230
0231
21b8df1d84 Jean*0232 #endif /* ALLOW_OBCS */
604cf5604a Alis*0233
bfdbc242ac Jean*0234
fb5eaa30cd Jean*0235 ENDIF
0236
0237
0238
cdc9f269ae Patr*0239 # ifdef NONLIN_FRSURF
aecc8b0f47 Mart*0240 # if (defined ALLOW_AUTODIFF_TAMC) && \
0241 (defined ALLOW_DEPTH_CONTROL) && (
edb6656069 Mart*0242 tkey = bi + (bj-1)*nSx + (ikey_dynamics-1)*nSx*nSy
0243
aecc8b0f47 Mart*0244 # endif
79b5d5775c Jean*0245 IF ( select_rStar.NE.0 ) THEN
cdc9f269ae Patr*0246 # ifndef DISABLE_RSTAR_CODE
65de7f3d8d Jean*0247
0248
8dc89a3cca Jean*0249 DO j=1,sNy
0250 DO i=1,sNx
2d3bf0eeda Jean*0251 ks = kSurfC(i,j,bi,bj)
65de7f3d8d Jean*0252 rStarDhDt(i,j) = dEtaHdt(i,j,bi,bj)
0253 & *deepFac2F(ks)*rhoFacF(ks)
0254 & *recip_Rcol(i,j,bi,bj)
00b29feb62 Jean*0255 ENDDO
cdc9f269ae Patr*0256 ENDDO
0257 # endif /* DISABLE_RSTAR_CODE */
00b29feb62 Jean*0258 ENDIF
aecc8b0f47 Mart*0259 # if (defined ALLOW_AUTODIFF_TAMC) && \
0260 (defined ALLOW_DEPTH_CONTROL) && (
edb6656069 Mart*0261
aecc8b0f47 Mart*0262 # endif
cdc9f269ae Patr*0263 # endif /* NONLIN_FRSURF */
0264
00b29feb62 Jean*0265
0266
fb5eaa30cd Jean*0267 DO k=Nr,1,-1
0268
0269
0270 CALL INTEGRATE_FOR_W(
65de7f3d8d Jean*0271 I bi, bj, k, uFld, vFld,
0272 I addMass, rStarDhDt,
fb5eaa30cd Jean*0273 O wVel,
79b5d5775c Jean*0274 I myIter, myThid )
21b8df1d84 Jean*0275
bfdbc242ac Jean*0276 IF ( k.EQ.Nr .AND. myIter.NE.0 .AND. usingPCoords
0277 & .AND. fluidIsWater .AND. useRealFreshWaterFlux ) THEN
e0c3eb6fa1 Jean*0278
2d3bf0eeda Jean*0279 DO j=1,sNy
0280 DO i=1,sNx
0281 wVel(i,j,k,bi,bj) = wVel(i,j,k,bi,bj)
62fd6ae4e5 Jean*0282 & +mass2rUnit*PmEpR(i,j,bi,bj)*maskC(i,j,k,bi,bj)
e0c3eb6fa1 Jean*0283 ENDDO
2d3bf0eeda Jean*0284 ENDDO
e0c3eb6fa1 Jean*0285
0286 ENDIF
0287
fb5eaa30cd Jean*0288 #ifdef ALLOW_OBCS
2d3bf0eeda Jean*0289
0290 IF ( useOBCS ) THEN
0291 DO j=1,sNy
0292 DO i=1,sNx
0293 wVel(i,j,k,bi,bj) = wVel(i,j,k,bi,bj)*maskInC(i,j,bi,bj)
0294 ENDDO
0295 ENDDO
0296 ENDIF
0297
0298 IF ( useOBCS.AND.nonHydrostatic )
0299 & CALL OBCS_APPLY_W( bi, bj, k, wVel, myThid )
21b8df1d84 Jean*0300 #endif /* ALLOW_OBCS */
fb5eaa30cd Jean*0301
0302
0303 ENDDO
0304
0305
0306
bfdbc242ac Jean*0307
0308 ENDDO
0309 ENDDO
0310
52dd931a85 Timo*0311 #ifdef ALLOW_AUTODIFF_MONITOR
0312
0313 CALL DUMMY_FOR_ETAN( myTime, myIter, myThid )
0314 _EXCH_XY_RL( etaN , myThid )
0315 #else /* ALLOW_AUTODIFF_MONITOR */
bfdbc242ac Jean*0316 IF ( exactConserv .AND. myIter.NE.nIter0
0317 & .AND. implicDiv2Dflow .NE. 0. _d 0 )
c1e2d059e3 Jean*0318 & _EXCH_XY_RL( etaN , myThid )
52dd931a85 Timo*0319 #endif /* ALLOW_AUTODIFF_MONITOR */
0320
bfdbc242ac Jean*0321 IF ( implicitIntGravWave .OR. myIter.EQ.nIter0 )
c1e2d059e3 Jean*0322 & _EXCH_XYZ_RL( wVel , myThid )
bfdbc242ac Jean*0323
0324
79b5d5775c Jean*0325 IF ( exactConserv ) THEN
c1e2d059e3 Jean*0326
0327
bfdbc242ac Jean*0328 #ifdef ALLOW_DEBUG
79b5d5775c Jean*0329 IF ( debugMode ) CALL DEBUG_CALL('UPDATE_ETAH',myThid)
bfdbc242ac Jean*0330 #endif
0331 CALL UPDATE_ETAH( myTime, myIter, myThid )
0332 ENDIF
c1e2d059e3 Jean*0333
0334 #ifdef NONLIN_FRSURF
0335 # ifndef DISABLE_SIGMA_CODE
0336 IF ( nonlinFreeSurf.GT.0 .AND. selectSigmaCoord.NE.0 ) THEN
0337 CALL EXCH_XY_RL( dEtaHdt, myThid )
0338 CALL UPDATE_ETAWS( myTime, myIter, myThid )
0339 ENDIF
0340 # endif /* DISABLE_SIGMA_CODE */
0341 #endif /* NONLIN_FRSURF */
0342
fb5eaa30cd Jean*0343 RETURN
0344 END