File indexing completed on 2024-10-09 05:10:45 UTC
view on githubraw file Latest commit 4c91ca28 on 2024-10-08 14:20:22 UTC
2eab8f7357 Gael*0001 #include "ECCO_OPTIONS.h"
4c91ca28d5 Ou W*0002 #ifdef ALLOW_SEAICE
0003 # include "SEAICE_OPTIONS.h"
0004 #endif
7b8b86ab99 Timo*0005 #ifdef ALLOW_SHELFICE
0006 # include "SHELFICE_OPTIONS.h"
0007 #endif
35c4fdc74b Emma*0008 #ifdef ALLOW_AUTODIFF
0009 # include "AUTODIFF_OPTIONS.h"
0010 #endif
2eab8f7357 Gael*0011
aa93ca8e85 Ciar*0012
0013
0014
2eab8f7357 Gael*0015
aa93ca8e85 Ciar*0016
0cd0083da8 Ou W*0017 SUBROUTINE ECCO_PHYS( myTime, myIter, myThid )
2eab8f7357 Gael*0018
aa93ca8e85 Ciar*0019
0020
0021
2eab8f7357 Gael*0022
aa93ca8e85 Ciar*0023
0024 IMPLICIT NONE
2eab8f7357 Gael*0025
0026 #include "EEPARAMS.h"
0027 #include "SIZE.h"
0028 #include "PARAMS.h"
aa93ca8e85 Ciar*0029 #include "GRID.h"
2eab8f7357 Gael*0030 #include "DYNVARS.h"
0031 #include "FFIELDS.h"
49484c0542 Gael*0032 #ifdef ALLOW_ECCO
13d362b8c1 Ou W*0033 # include "ECCO_SIZE.h"
0034 # include "ECCO.h"
2eab8f7357 Gael*0035 #endif
4c91ca28d5 Ou W*0036 #ifdef ALLOW_SEAICE
0037 # include "SEAICE_SIZE.h"
0038 # include "SEAICE.h"
0039 # include "SEAICE_PARAMS.h"
0040 #endif
81e05fa829 Gael*0041 #ifdef ALLOW_PTRACERS
0042 # include "PTRACERS_SIZE.h"
0043 # include "PTRACERS_FIELDS.h"
0044 #endif
7b8b86ab99 Timo*0045 #if (defined ALLOW_GENCOST_CONTRIBUTION) && (defined ALLOW_SHELFICE)
0046 # include "SHELFICE.h"
0047 #endif
35c4fdc74b Emma*0048 #ifdef ALLOW_AUTODIFF_TAMC
0049 # include "tamc.h"
0050 #endif
2eab8f7357 Gael*0051
aa93ca8e85 Ciar*0052
0cd0083da8 Ou W*0053
0054
0055
0056 _RL myTime
0057 INTEGER myIter, myThid
2eab8f7357 Gael*0058
aa93ca8e85 Ciar*0059
0cd0083da8 Ou W*0060
0061
aa93ca8e85 Ciar*0062 INTEGER bi, bj
0063 INTEGER i, j, k
bdae1843b8 Gael*0064 #ifdef ALLOW_GENCOST_CONTRIBUTION
aa93ca8e85 Ciar*0065 INTEGER kgen, kgen3d, itr
17944dd1e8 Gael*0066 _RL areavolTile(nSx,nSy), areavolGlob
0067 _RL tmpfld, tmpvol, tmpmsk, tmpmsk2, tmpmskW, tmpmskS
aa93ca8e85 Ciar*0068 _RL tmp_sigmsk, tmpsig, tmpsig_lower, tmpsig_upper
bdae1843b8 Gael*0069 #endif
2eab8f7357 Gael*0070
0cd0083da8 Ou W*0071
fce41e6d01 An T*0072 _RL trVolW(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0073 _RL trVolS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0074 _RL trHeatW(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0075 _RL trHeatS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0076 _RL trSaltW(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0077 _RL trSaltS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0078
0cd0083da8 Ou W*0079 _RL tmpfac
0080 _RL sIceLoadFacLoc
447bdc4b79 Gael*0081 #ifdef ATMOSPHERIC_LOADING
13d362b8c1 Ou W*0082 #ifdef ALLOW_IB_CORR
0cd0083da8 Ou W*0083 _RL ploadbar, AREAsumGlob, PLOADsumGlob
0084 _RL AREAsumTile(nSx,nSy), PLOADsumTile(nSx,nSy)
0085 _RL m_eta_ib(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0086 _RL sterht (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
13d362b8c1 Ou W*0087 #endif
447bdc4b79 Gael*0088 #endif
0cd0083da8 Ou W*0089 _RL rhoLoc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
2eab8f7357 Gael*0090 #ifdef ALLOW_PSBAR_STERIC
0cd0083da8 Ou W*0091 _RL VOLsumTile(nSx,nSy), RHOsumTile(nSx,nSy)
b0b45f2373 Ou W*0092 _RL VOLsumGlob_1, RHOsumGlob_1
0cd0083da8 Ou W*0093
2eab8f7357 Gael*0094 #endif
0cd0083da8 Ou W*0095
0096
4c91ca28d5 Ou W*0097 #ifdef ALLOW_SEAICE
0098 _RL tmprecip_area, tmphsnowact, tmpheffact
0099 _RL area_reg_sq
0100 #endif
35c4fdc74b Emma*0101 #if ( defined ALLOW_AUTODIFF_TAMC && defined ALLOW_GENCOST_CONTRIBUTION )
0102
0103 INTEGER ikey
0104 #endif
aa93ca8e85 Ciar*0105
2eab8f7357 Gael*0106
4c91ca28d5 Ou W*0107 #ifdef ALLOW_SEAICE
0108 area_reg_sq = SEAICE_area_reg * SEAICE_area_reg
0109 #endif
0cd0083da8 Ou W*0110 tmpfac = recip_rhoConst*recip_gravity
0111 sIceLoadFacLoc = zeroRL
0112 IF ( useRealFreshWaterFlux ) sIceLoadFacLoc = recip_rhoConst
49484c0542 Gael*0113
2eab8f7357 Gael*0114 DO bj=myByLo(myThid),myByHi(myThid)
0115 DO bi=myBxLo(myThid),myBxHi(myThid)
0cd0083da8 Ou W*0116 IF ( myIter .EQ. -1 ) THEN
0117 DO k = 1,Nr
0118 CALL FIND_RHO_2D(
aa93ca8e85 Ciar*0119 I 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, k,
2eab8f7357 Gael*0120 I theta(1-OLx,1-OLy,k,bi,bj),
0121 I salt (1-OLx,1-OLy,k,bi,bj),
0cd0083da8 Ou W*0122 O rhoLoc(1-OLx,1-OLy,k,bi,bj),
2eab8f7357 Gael*0123 I k, bi, bj, myThid )
0cd0083da8 Ou W*0124 ENDDO
0125 ELSE
0126 DO k = 1,Nr
0127 DO j=1-OLy,sNy+OLy
0128 DO i=1-OLx,sNx+OLx
0129 rhoLoc(i,j,k,bi,bj) = rhoInSitu(i,j,k,bi,bj)
0130 ENDDO
0131 ENDDO
0132 ENDDO
0133 ENDIF
aa93ca8e85 Ciar*0134 ENDDO
0135 ENDDO
2eab8f7357 Gael*0136
0cd0083da8 Ou W*0137 #ifdef ALLOW_PSBAR_STERIC
2eab8f7357 Gael*0138 DO bj=myByLo(myThid),myByHi(myThid)
0139 DO bi=myBxLo(myThid),myBxHi(myThid)
0cd0083da8 Ou W*0140 RHOsumTile(bi,bj) = 0. _d 0
0141 VOLsumTile(bi,bj) = 0. _d 0
aa93ca8e85 Ciar*0142 DO k = 1,Nr
0143 DO j = 1,sNy
0144 DO i = 1,sNx
0cd0083da8 Ou W*0145 RHOsumTile(bi,bj) = RHOsumTile(bi,bj)
0146 & + ( rhoConst + rhoLoc(i,j,k,bi,bj) )
0147 & *hFacC(i,j,k,bi,bj)*drF(k)*rA(i,j,bi,bj)
0148 VOLsumTile(bi,bj) = VOLsumTile(bi,bj)
0149 & + hFacC(i,j,k,bi,bj)*drF(k)*rA(i,j,bi,bj)
aa93ca8e85 Ciar*0150 ENDDO
0151 ENDDO
0152 ENDDO
0153 ENDDO
0154 ENDDO
b0b45f2373 Ou W*0155 CALL GLOBAL_SUM_TILE_RL( VOLsumTile, VOLsumGlob_1, myThid )
0156 CALL GLOBAL_SUM_TILE_RL( RHOsumTile, RHOsumGlob_1, myThid )
0157
3a516654c6 Jean*0158 # ifndef ALLOW_AUTODIFF
b0b45f2373 Ou W*0159 _BEGIN_MASTER(myThid)
3a516654c6 Jean*0160 # endif
b0b45f2373 Ou W*0161 VOLsumGlob = VOLsumGlob_1
0162 RHOsumGlob = RHOsumGlob_1/VOLsumGlob
2eab8f7357 Gael*0163
aa93ca8e85 Ciar*0164 IF (RHOsumGlob_0.GT.0. _d 0) THEN
0cd0083da8 Ou W*0165 sterGloH = VOLsumGlob_0/globalArea
49484c0542 Gael*0166 & *(1. _d 0 - RHOsumGlob/RHOsumGlob_0)
aa93ca8e85 Ciar*0167 ELSE
0cd0083da8 Ou W*0168 sterGloH = 0. _d 0
aa93ca8e85 Ciar*0169 ENDIF
49484c0542 Gael*0170
0171
0cd0083da8 Ou W*0172
49484c0542 Gael*0173
3a516654c6 Jean*0174 # ifndef ALLOW_AUTODIFF
b0b45f2373 Ou W*0175 _END_MASTER(myThid)
0176 _BARRIER
3a516654c6 Jean*0177 # endif
49484c0542 Gael*0178
0cd0083da8 Ou W*0179 #endif /* ALLOW_PSBAR_STERIC */
2eab8f7357 Gael*0180
447bdc4b79 Gael*0181 #ifdef ATMOSPHERIC_LOADING
13d362b8c1 Ou W*0182 #ifdef ALLOW_IB_CORR
0183 DO bj=myByLo(myThid),myByHi(myThid)
0184 DO bi=myBxLo(myThid),myBxHi(myThid)
0cd0083da8 Ou W*0185 PLOADsumTile(bi,bj) = 0. _d 0
0186 AREAsumTile(bi,bj) = 0. _d 0
aa93ca8e85 Ciar*0187 DO j = 1,sNy
0188 DO i = 1,sNx
0cd0083da8 Ou W*0189 PLOADsumTile(bi,bj) = PLOADsumTile(bi,bj)
0190 & + pLoad(i,j,bi,bj)
0191 & *maskC(i,j,1,bi,bj)*rA(i,j,bi,bj)
0192 AREAsumTile(bi,bj) = AREAsumTile(bi,bj)
0193 & + maskC(i,j,1,bi,bj)*rA(i,j,bi,bj)
aa93ca8e85 Ciar*0194 ENDDO
0195 ENDDO
0196 ENDDO
0197 ENDDO
13d362b8c1 Ou W*0198 CALL GLOBAL_SUM_TILE_RL( AREAsumTile, AREAsumGlob, myThid )
0199 CALL GLOBAL_SUM_TILE_RL( PLOADsumTile, PLOADsumGlob, myThid )
0cd0083da8 Ou W*0200 ploadbar = PLOADsumGlob/AREAsumGlob
0201 #endif /* ALLOW_IB_CORR */
0202 #endif /* ATMOSPHERIC_LOADING */
2eab8f7357 Gael*0203
49484c0542 Gael*0204 DO bj=myByLo(myThid),myByHi(myThid)
0205 DO bi=myBxLo(myThid),myBxHi(myThid)
aa93ca8e85 Ciar*0206 DO j = 1-OLy, sNy+OLy
0207 DO i = 1-OLx, sNx+OLx
0cd0083da8 Ou W*0208
0209
13d362b8c1 Ou W*0210
0cd0083da8 Ou W*0211 m_eta(i,j,bi,bj) =
0212 & ( etaN(i,j,bi,bj)
0213 & + sIceLoad(i,j,bi,bj)*sIceLoadFacLoc
49484c0542 Gael*0214 #ifdef ALLOW_PSBAR_STERIC
0cd0083da8 Ou W*0215
0216 & + sterGloH
0217 #endif /* ALLOW_PSBAR_STERIC */
0218 & ) * maskC(i,j,1,bi,bj)
0219
0220
0221
0222
0223
0224
0225 m_bp(i,j,bi,bj) =
0226 & ( etaN(i,j,bi,bj)
0227
0228 & - R_low(i,j,bi,bj)
13d362b8c1 Ou W*0229 #ifdef ALLOW_PSBAR_STERIC
0230
0cd0083da8 Ou W*0231
0232 & + sterGloH
0233 #endif /* ALLOW_PSBAR_STERIC */
0234 & ) * gravity
0235
0236 & + sIceLoad(i,j,bi,bj) * gravity * sIceLoadFacLoc
0237
0238 & + pLoad(i,j,bi,bj) * recip_rhoConst
0239 ENDDO
0240 ENDDO
0241
0242 DO k = 1, Nr
0243 DO j = 1-OLy, sNy+OLy
0244 DO i = 1-OLx, sNx+OLx
0245 m_bp(i,j,bi,bj) = m_bp(i,j,bi,bj)
0246 & + rhoLoc(i,j,k,bi,bj)*drF(k)*hFacC(i,j,k,bi,bj)
0247 & * gravity * recip_rhoConst
0248 ENDDO
0249 ENDDO
0250 ENDDO
0251 DO j = 1-OLy, sNy+OLy
0252 DO i = 1-OLx, sNx+OLx
0253 m_bp(i,j,bi,bj) = m_bp(i,j,bi,bj) * maskC(i,j,1,bi,bj)
0254 ENDDO
0255 ENDDO
13d362b8c1 Ou W*0256
0257 #ifdef ATMOSPHERIC_LOADING
0258 #ifdef ALLOW_IB_CORR
0cd0083da8 Ou W*0259 DO j = 1-OLy, sNy+OLy
0260 DO i = 1-OLx, sNx+OLx
13d362b8c1 Ou W*0261
0cd0083da8 Ou W*0262 m_eta_ib(i,j,bi,bj) =
0263 & ( ploadbar - pLoad(i,j,bi,bj) )*tmpfac
13d362b8c1 Ou W*0264 & * maskC(i,j,1,bi,bj)
0265
0cd0083da8 Ou W*0266 m_eta_dyn(i,j,bi,bj) =
0267 & ( m_eta(i,j,bi,bj) - m_eta_ib(i,j,bi,bj) )
13d362b8c1 Ou W*0268 & * maskC(i,j,1,bi,bj)
0269
0270
0cd0083da8 Ou W*0271
0272 m_bp_nopabar(i,j,bi,bj) =
0273 & ( m_bp(i,j,bi,bj)
0274 & - ploadbar * recip_rhoConst
0275 & ) * maskC(i,j,1,bi,bj)
0276
0277
0278
0279 sterht(i,j,bi,bj) = m_eta_dyn(i,j,bi,bj)
0280 & - ( m_bp_nopabar(i,j,bi,bj) * recip_gravity
0281
0282 & + R_low(i,j,bi,bj) )
aa93ca8e85 Ciar*0283 ENDDO
0284 ENDDO
0cd0083da8 Ou W*0285 #endif /* ALLOW_IB_CORR */
0286 #endif /* ATMOSPHERIC_LOADING */
aa93ca8e85 Ciar*0287 ENDDO
0288 ENDDO
49484c0542 Gael*0289
0cd0083da8 Ou W*0290 #ifdef ALLOW_DIAGNOSTICS
0291 IF ( useDiagnostics .AND. myIter.GE.0 ) THEN
0292 CALL DIAGNOSTICS_FILL( m_eta, 'SSHNOIBC', 0,1, 0,1,1, myThid )
0293 CALL DIAGNOSTICS_SCALE_FILL( m_bp, recip_gravity, 1,
0294 & 'OBPGMAP ', 0,1, 0,1,1, myThid )
0295 #ifdef ATMOSPHERIC_LOADING
0296 #ifdef ALLOW_IB_CORR
0297 CALL DIAGNOSTICS_FILL( m_eta_ib,
0298 & 'SSHIBC ', 0,1, 0,1,1, myThid )
0299 CALL DIAGNOSTICS_FILL( m_eta_dyn,
0300 & 'SSH ', 0,1, 0,1,1, myThid )
0301 CALL DIAGNOSTICS_FILL( sterht,
0302 & 'STERICHT', 0,1, 0,1,1, myThid )
0303 CALL DIAGNOSTICS_SCALE_FILL( m_bp_nopabar, recip_gravity, 1,
0304 & 'OBP ', 0,1, 0,1,1, myThid )
0305 #endif /* ALLOW_IB_CORR */
0306 #endif /* ATMOSPHERIC_LOADING */
0307 ENDIF
0308 #endif /* ALLOW_DIAGNOSTICS */
0309
556841ad42 Gael*0310 DO bj=myByLo(myThid),myByHi(myThid)
0311 DO bi=myBxLo(myThid),myBxHi(myThid)
aa93ca8e85 Ciar*0312 DO k = 1,Nr
0cd0083da8 Ou W*0313 DO j = 1-OLy,sNy+OLy
0314 DO i = 1-OLx,sNx+OLx
0315 m_UE(i,j,k,bi,bj) = 0. _d 0
0316 m_VN(i,j,k,bi,bj) = 0. _d 0
aa93ca8e85 Ciar*0317 ENDDO
0318 ENDDO
0319 ENDDO
0320 ENDDO
0321 ENDDO
556841ad42 Gael*0322
0323 CALL ROTATE_UV2EN_RL(
0324 U uVel, vVel, m_UE, m_VN,
13d362b8c1 Ou W*0325 I .TRUE., .TRUE., .FALSE., Nr, myThid )
0761692d75 An T*0326
0327
0328
0329
0330
0331
0332
0333
0cd0083da8 Ou W*0334 CALL ECCO_ZERO( trVol, Nr, zeroRL, myThid )
0335 CALL ECCO_ZERO( trHeat, Nr, zeroRL, myThid )
0336 CALL ECCO_ZERO( trSalt, Nr, zeroRL, myThid )
0761692d75 An T*0337
bdae1843b8 Gael*0338 #ifdef ALLOW_GENCOST_CONTRIBUTION
bcdcbe969d Gael*0339
7b8b86ab99 Timo*0340
0341
0342
0343
0344
0345
0346
0347
0348
aa93ca8e85 Ciar*0349 DO kgen=1,NGENCOST
bdae1843b8 Gael*0350
aa93ca8e85 Ciar*0351 itr = gencost_itracer(kgen)
81e05fa829 Gael*0352
0cd0083da8 Ou W*0353 CALL ECCO_ZERO( gencost_storefld(1-OLx,1-OLy,1,1,kgen),
0354 & 1, zeroRL, myThid )
bdae1843b8 Gael*0355
aa93ca8e85 Ciar*0356 DO bj=myByLo(myThid),myByHi(myThid)
0357 DO bi=myBxLo(myThid),myBxHi(myThid)
bcdcbe969d Gael*0358 areavolTile(bi,bj)=0. _d 0
aa93ca8e85 Ciar*0359 ENDDO
0360 ENDDO
0361 areavolGlob=0. _d 0
0362
4c91ca28d5 Ou W*0363 #ifdef ALLOW_SEAICE
0364 IF (gencost_barfile(kgen)(1:11).EQ.'m_freeboard') THEN
0365 DO bj=myByLo(myThid),myByHi(myThid)
0366 DO bi=myBxLo(myThid),myBxHi(myThid)
0367 DO j = 1,sNy
0368 DO i = 1,sNx
0369 tmprecip_area = 1. _d 0/SQRT(area(i,j,bi,bj)*area(i,j,bi,bj)
0370 & + area_reg_sq)
0371 tmphsnowact = hsnow(i,j,bi,bj) * tmprecip_area
0372 tmpheffact = heff(i,j,bi,bj) * tmprecip_area
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385 gencost_storefld(i,j,bi,bj,kgen) =
0386 & ( ( tmphsnowact + tmpheffact ) -
0387 & ( tmphsnowact * SEAICE_rhoSnow +
0388 & tmpheffact * SEAICE_rhoIce ) * recip_rhoConst
0389 & ) * maskC(i,j,1,bi,bj)
0390 ENDDO
0391 ENDDO
0392 ENDDO
0393 ENDDO
0394 ENDIF
0395 #endif
0396
aa93ca8e85 Ciar*0397 DO bj=myByLo(myThid),myByHi(myThid)
0398 DO bi=myBxLo(myThid),myBxHi(myThid)
0399 DO j = 1,sNy
0400 DO i = 1,sNx
17944dd1e8 Gael*0401
aa93ca8e85 Ciar*0402 DO k = 1,Nr
17944dd1e8 Gael*0403 tmpvol=hFacC(i,j,k,bi,bj)*drF(k)*rA(i,j,bi,bj)
aa93ca8e85 Ciar*0404
17944dd1e8 Gael*0405 tmpmsk=0. _d 0
aa93ca8e85 Ciar*0406 IF (.NOT.gencost_msk_is3d(kgen)) THEN
0407 tmpmsk=gencost_mskCsurf(i,j,bi,bj,kgen)*
0408 & gencost_mskVertical(k,kgen)
17944dd1e8 Gael*0409 #ifdef ALLOW_GENCOST3D
aa93ca8e85 Ciar*0410 ELSE
0411 kgen3d=gencost_msk_pointer3d(kgen)
0412 tmpmsk=gencost_mskC(i,j,k,bi,bj,kgen3d)
0cd0083da8 Ou W*0413 #endif /* ALLOW_GENCOST3D */
aa93ca8e85 Ciar*0414 ENDIF
0415
0416
0417 IF ( maskC(i,j,k,bi,bj).EQ.oneRS .AND.
0418 & gencost_useDensityMask(kgen) ) THEN
0419
0420 CALL FIND_RHO_SCALAR(
0421 I theta(i,j,k,bi,bj),
0422 I salt(i,j,k,bi,bj),
0423 I gencost_refPressure(kgen),
0424 O tmpsig,
0425 I myThid )
0426
0427 tmpsig = tmpsig - 1000. _d 0
0428
0429 tmpsig_lower = 0.5 + 0.5*tanh(gencost_tanhScale(kgen)
0430 & *(tmpsig-gencost_sigmaLow(kgen)))
0431 tmpsig_upper = 0.5 - 0.5*tanh(gencost_tanhScale(kgen)
0432 & *(tmpsig-gencost_sigmaHigh(kgen)))
0433
0434 tmp_sigmsk = tmpsig_lower*tmpsig_upper
0435 tmpmsk = tmpmsk*tmp_sigmsk
0436 ENDIF
0437
0438
7b8b86ab99 Timo*0439
0440
0441
0442
0443
0444
0445
0446
17944dd1e8 Gael*0447 tmpfld=0. _d 0
0448 tmpmsk2=0. _d 0
aa93ca8e85 Ciar*0449 IF (gencost_barfile(kgen)(1:15).EQ.'m_boxmean_theta') THEN
0450 tmpfld=theta(i,j,k,bi,bj)
0451 IF (tmpmsk.NE.0. _d 0) tmpmsk2=1. _d 0
0452 ELSEIF (gencost_barfile(kgen)(1:14).EQ.'m_boxmean_salt')
0453 & THEN
0454 tmpfld=salt(i,j,k,bi,bj)
0455 IF (tmpmsk.NE.0. _d 0) tmpmsk2=1. _d 0
38d78826c7 Ciar*0456 ELSEIF (gencost_barfile(kgen)(1:13).EQ.'m_boxmean_vol') THEN
0457 tmpfld=1. _d 0
0458 IF (tmpmsk.NE.0. _d 0) tmpmsk2=1. _d 0
81e05fa829 Gael*0459 #ifdef ALLOW_PTRACERS
aa93ca8e85 Ciar*0460 ELSEIF (gencost_barfile(kgen)(1:17).EQ.'m_boxmean_ptracer')
0461 & THEN
0462 tmpfld=pTracer(i,j,k,bi,bj,itr)
0463 IF (tmpmsk.NE.0. _d 0) tmpmsk2=1. _d 0
0cd0083da8 Ou W*0464 #endif /* ALLOW_PTRACERS */
aa93ca8e85 Ciar*0465 ENDIF
0466
7b8b86ab99 Timo*0467
0468
0469
0470
0471
0472
0473
0474
0475
17944dd1e8 Gael*0476 gencost_storefld(i,j,bi,bj,kgen) =
0477 & gencost_storefld(i,j,bi,bj,kgen)
0478 & +tmpmsk*tmpfld*tmpvol
0479 areavolTile(bi,bj)=areavolTile(bi,bj)
35c4fdc74b Emma*0480 #ifdef ECCO_VARIABLE_AREAVOLGLOB
0481 & +tmpmsk2*tmpvol
0482 #else
17944dd1e8 Gael*0483 & +tmpmsk2*eccoVol_0(i,j,k,bi,bj)
35c4fdc74b Emma*0484 #endif
7b8b86ab99 Timo*0485
aa93ca8e85 Ciar*0486 ENDDO
0487
0488 tmpmsk = 0. _d 0
0489 tmpfld = 0. _d 0
0490 tmpmsk2 = 0. _d 0
0491 IF (gencost_barfile(kgen)(1:13).EQ.'m_boxmean_eta') THEN
7b8b86ab99 Timo*0492 tmpmsk=maskC(i,j,1,bi,bj)*gencost_mskCsurf(i,j,bi,bj,kgen)
13d362b8c1 Ou W*0493 tmpfld = m_eta(i,j,bi,bj)
0494 #if (defined ATMOSPHERIC_LOADING) && (defined ALLOW_IB_CORR)
aa93ca8e85 Ciar*0495 IF (gencost_barfile(kgen)(1:17).EQ.'m_boxmean_eta_dyn') THEN
0496 tmpfld = m_eta_dyn(i,j,bi,bj)
0497 ENDIF
13d362b8c1 Ou W*0498 #endif
aa93ca8e85 Ciar*0499 IF (tmpmsk.NE.0. _d 0) tmpmsk2=1. _d 0
0500 ENDIF
7b8b86ab99 Timo*0501 #ifdef ALLOW_SHELFICE
0502
0503
0504
0505
0506
0507
0508
0509
17944dd1e8 Gael*0510
7b8b86ab99 Timo*0511
0512
0513
0514
0515
aa93ca8e85 Ciar*0516 IF((gencost_barfile(kgen)(1:16).EQ.'m_boxmean_shifwf').OR.
0517 & (gencost_barfile(kgen)(1:16).EQ.'m_boxmean_shihtf')) THEN
7b8b86ab99 Timo*0518
0519 tmpmsk=maskSHI(i,j,1,bi,bj)*
0520 & gencost_mskCsurf(i,j,bi,bj,kgen)
0521
aa93ca8e85 Ciar*0522 IF (gencost_barfile(kgen)(11:16).EQ.'shifwf') THEN
0523 tmpfld=shelficeFreshWaterFlux(i,j,bi,bj) / rhoConstFresh
0524 ELSEIF (gencost_barfile(kgen)(11:16).EQ.'shihtf') THEN
0525 tmpfld=shelficeHeatFlux(i,j,bi,bj)
0526 ENDIF
0527 IF (tmpmsk.NE.0. _d 0) tmpmsk2=1. _d 0
0528 ENDIF
7b8b86ab99 Timo*0529 #endif /* ALLOW_SHELFICE */
0530
0531
0532
0533
0534
0535
0536
0537
aa93ca8e85 Ciar*0538 gencost_storefld(i,j,bi,bj,kgen) =
c17b89ca05 Gael*0539 & gencost_storefld(i,j,bi,bj,kgen)
17944dd1e8 Gael*0540 & +tmpmsk*tmpfld*rA(i,j,bi,bj)
aa93ca8e85 Ciar*0541 areavolTile(bi,bj)=areavolTile(bi,bj)
17944dd1e8 Gael*0542 & +tmpmsk2*rA(i,j,bi,bj)
0543
aa93ca8e85 Ciar*0544 DO k = 1,Nr
0545
17944dd1e8 Gael*0546 tmpmskW=0. _d 0
0547 tmpmskS=0. _d 0
aa93ca8e85 Ciar*0548 IF (.NOT.gencost_msk_is3d(kgen)) THEN
17944dd1e8 Gael*0549 tmpmskW=gencost_mskWsurf(i,j,bi,bj,kgen)
0550 & *gencost_mskVertical(k,kgen)
0551 tmpmskS=gencost_mskSsurf(i,j,bi,bj,kgen)
0552 & *gencost_mskVertical(k,kgen)
0553 #ifdef ALLOW_GENCOST3D
aa93ca8e85 Ciar*0554 ELSE
17944dd1e8 Gael*0555 kgen3d=gencost_msk_pointer3d(kgen)
0556 tmpmskW=gencost_mskW(i,j,k,bi,bj,kgen3d)
0557 tmpmskS=gencost_mskS(i,j,k,bi,bj,kgen3d)
0cd0083da8 Ou W*0558 #endif /* ALLOW_GENCOST3D */
aa93ca8e85 Ciar*0559 ENDIF
17944dd1e8 Gael*0560 tmpmskW=tmpmskW*hFacW(i,j,k,bi,bj)*dyG(i,j,bi,bj)*drF(k)
0561 tmpmskS=tmpmskS*hFacS(i,j,k,bi,bj)*dxG(i,j,bi,bj)*drF(k)
aa93ca8e85 Ciar*0562
0563 IF (gencost_barfile(kgen)(1:13).EQ.'m_horflux_vol') THEN
17944dd1e8 Gael*0564 gencost_storefld(i,j,bi,bj,kgen) =
0565 & gencost_storefld(i,j,bi,bj,kgen)
0566 & +uVel(i,j,k,bi,bj)*tmpmskW
0567 & +vVel(i,j,k,bi,bj)*tmpmskS
736e27304c Timo*0568
0569
7b8b86ab99 Timo*0570
aa93ca8e85 Ciar*0571 ELSEIF ( gencost_barfile(kgen)(1:7).EQ.'m_trVol' .OR.
0572 & gencost_barfile(kgen)(1:8).EQ.'m_trHeat'.OR.
0573 & gencost_barfile(kgen)(1:8).EQ.'m_trSalt' ) THEN
736e27304c Timo*0574
aa93ca8e85 Ciar*0575 trVolW(i,j,k) =
736e27304c Timo*0576 & uVel(i,j,k,bi,bj)*tmpmskW
0577 & *maskInW(i,j,bi,bj)
aa93ca8e85 Ciar*0578 trVolS(i,j,k) =
736e27304c Timo*0579 & vVel(i,j,k,bi,bj)*tmpmskS
0580 & *maskInS(i,j,bi,bj)
0581
aa93ca8e85 Ciar*0582 trHeatW(i,j,k) = trVolW(i,j,k)
736e27304c Timo*0583 & *(theta(i,j,k,bi,bj)+theta(i-1,j,k,bi,bj))*halfRL
0584 & *HeatCapacity_Cp*rhoConst
aa93ca8e85 Ciar*0585 trHeatS(i,j,k) = trVolS(i,j,k)
736e27304c Timo*0586 & *(theta(i,j,k,bi,bj)+theta(i,j-1,k,bi,bj))*halfRL
0587 & *HeatCapacity_Cp*rhoConst
0588
aa93ca8e85 Ciar*0589 trSaltW(i,j,k) = trVolW(i,j,k)
736e27304c Timo*0590 & *(salt(i,j,k,bi,bj)+salt(i-1,j,k,bi,bj))*halfRL
0591 & *rhoConst/1000.
aa93ca8e85 Ciar*0592 trSaltS(i,j,k) = trVolS(i,j,k)
736e27304c Timo*0593 & *(salt(i,j,k,bi,bj)+salt(i,j-1,k,bi,bj))*halfRL
0594 & *rhoConst/1000.
0595
aa93ca8e85 Ciar*0596 trVol(i,j,k,bi,bj)=trVolW(i,j,k)+trVolS(i,j,k)
0597 trHeat(i,j,k,bi,bj)=trHeatW(i,j,k)+trHeatS(i,j,k)
0598 trSalt(i,j,k,bi,bj)=trSaltW(i,j,k)+trSaltS(i,j,k)
736e27304c Timo*0599
aa93ca8e85 Ciar*0600 ENDIF
0601
0602 ENDDO
17944dd1e8 Gael*0603
aa93ca8e85 Ciar*0604 ENDDO
0605 ENDDO
0606 ENDDO
0607 ENDDO
bdae1843b8 Gael*0608
7b8b86ab99 Timo*0609
0610
0611
0612
0613
11c3150c71 Mart*0614
7b8b86ab99 Timo*0615
0616
38d78826c7 Ciar*0617 IF ( gencost_barfile(kgen)(1:9).EQ.'m_boxmean' .AND.
0618 & gencost_barfile(kgen)(11:13).NE.'shi' .AND.
0619 & gencost_barfile(kgen)(11:13).NE.'vol' ) THEN
17944dd1e8 Gael*0620 CALL GLOBAL_SUM_TILE_RL( areavolTile, areavolGlob, myThid )
35c4fdc74b Emma*0621 #ifdef ALLOW_AUTODIFF_TAMC
0622
0623
0624 ikey = kgen + (ikey_dynamics-1)*NGENCOST
0625
0626 #endif
0cd0083da8 Ou W*0627 CALL ECCO_DIV( gencost_storefld(1-OLx,1-OLy,1,1,kgen),
11c3150c71 Mart*0628 & areavolGlob, 1, 1, myThid )
aa93ca8e85 Ciar*0629 ENDIF
bcdcbe969d Gael*0630
aa93ca8e85 Ciar*0631
0632 ENDDO
bdae1843b8 Gael*0633
0634 #endif /* ALLOW_GENCOST_CONTRIBUTION */
0635
aa93ca8e85 Ciar*0636 RETURN
0637 END