File indexing completed on 2023-02-03 06:10:34 UTC
view on githubraw file Latest commit edb66560 on 2023-02-02 23:32:31 UTC
fc7306ba7d Jean*0001 #include "THSICE_OPTIONS.h"
6b47d550f4 Mart*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
a85293d087 Mart*0004 # define ALLOW_AUTODIFF_TAMC_MORE
6b47d550f4 Mart*0005 #endif
fc7306ba7d Jean*0006
87ea84cac6 Jean*0007
0008
0009
0010 SUBROUTINE THSICE_CALC_THICKN(
6dc8890c80 Patr*0011 I bi, bj,
7269783f6f Jean*0012 I iMin,iMax, jMin,jMax, dBugFlag,
0013 I iceMask, tFrz, tOce, v2oc,
0014 I snowP, prcAtm, sHeat, flxCnB,
c1c3d0f9d7 Patr*0015 U icFrac, hIce, hSnow1, tSrf, qIc1, qIc2,
7269783f6f Jean*0016 U frwAtm, fzMlOc, flx2oc,
281cce82f4 Jean*0017 O frw2oc, fsalt, frzSeaWat,
7269783f6f Jean*0018 I myTime, myIter, myThid )
87ea84cac6 Jean*0019
0020
0021
0022
0023
0024
7269783f6f Jean*0025
0026
0027
0028
88f72205aa Jean*0029
0030
0031
7269783f6f Jean*0032
0033
0034
0035
0036
0037
0038
0039
87ea84cac6 Jean*0040
c53e1eb37c Jean*0041
0042
0043
6053aec1b8 Jean*0044
c53e1eb37c Jean*0045
0046
6053aec1b8 Jean*0047
0048
0049
c53e1eb37c Jean*0050
6053aec1b8 Jean*0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
c53e1eb37c Jean*0062
87ea84cac6 Jean*0063
fc7306ba7d Jean*0064 IMPLICIT NONE
0065
87ea84cac6 Jean*0066
d09af74739 Mart*0067 #include "SIZE.h"
dbce8fc2d4 Jean*0068 #include "EEPARAMS.h"
fc7306ba7d Jean*0069 #include "THSICE_SIZE.h"
0070 #include "THSICE_PARAMS.h"
d6f06800ae Patr*0071 #ifdef ALLOW_AUTODIFF_TAMC
0072 # include "tamc.h"
0073 #endif
fc7306ba7d Jean*0074
87ea84cac6 Jean*0075
0076
7269783f6f Jean*0077
0078
0079
0080
0081
0082
d09af74739 Mart*0083
0084
0085
0086
0087
0088
0089
7269783f6f Jean*0090
d09af74739 Mart*0091
0092
c1c3d0f9d7 Patr*0093
d09af74739 Mart*0094
7269783f6f Jean*0095
0096
0097
d09af74739 Mart*0098
0099
7269783f6f Jean*0100
d09af74739 Mart*0101
0102
281cce82f4 Jean*0103
7269783f6f Jean*0104
0105
0106
0107
0108 INTEGER bi,bj
0109 INTEGER iMin, iMax
0110 INTEGER jMin, jMax
0111 LOGICAL dBugFlag
6dc8890c80 Patr*0112 _RL iceMask(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0113 _RL tFrz (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0114 _RL tOce (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0115 _RL v2oc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0116 _RL snowP (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0117 _RL prcAtm (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0118 _RL sHeat (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0119 _RL flxCnB (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0120 _RL icFrac (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0121 _RL hIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0707ba3b3d Jean*0122 _RL hSnow1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
6dc8890c80 Patr*0123 _RL tSrf (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0124 _RL qIc1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0125 _RL qIc2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0126 _RL frwAtm (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0127 _RL fzMlOc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0128 _RL flx2oc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0129 _RL frw2oc (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0130 _RL fsalt (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
281cce82f4 Jean*0131 _RL frzSeaWat(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
7269783f6f Jean*0132 _RL myTime
0133 INTEGER myIter
0134 INTEGER myThid
0135
0136
0137 #ifdef ALLOW_THSICE
0138
0139
0140
281cce82f4 Jean*0141 _RL qicen(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nlyr)
98b4e0ca2d Jean*0142
87ea84cac6 Jean*0143
98b4e0ca2d Jean*0144
0145
d09af74739 Mart*0146
98b4e0ca2d Jean*0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
d09af74739 Mart*0168
0169
0170
0171
0172
98b4e0ca2d Jean*0173 INTEGER i,j,k
d09af74739 Mart*0174 _RL rec_nlyr
281cce82f4 Jean*0175 _RL evapLoc(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0176 _RL Fbot (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0177 _RL etop (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0178 _RL ebot (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0179 _RL etope (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0180 _RL ebote (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0181 _RL esurp (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
d09af74739 Mart*0182 _RL extend
281cce82f4 Jean*0183 _RL hnew (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nlyr)
a85293d087 Mart*0184
0185 _RL hnewTmp, icFracTmp, hIceTmp, hSnwTmp
d09af74739 Mart*0186 _RL hlyr
0187 _RL dhi
0188 _RL dhs
0189 _RL rq
0190 _RL rqh
0191 _RL qbot
0192 _RL dt
281cce82f4 Jean*0193 _RL mwater0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0194 _RL msalt0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
d09af74739 Mart*0195 _RL freshe
0196 _RL salte
98b4e0ca2d Jean*0197 _RL lowIcFrac1, lowIcFrac2
d09af74739 Mart*0198 _RL f1
0199 _RL qh1, qh2
0200 _RL qhtot
0201 _RL q2tmp
0202 #ifdef CHECK_ENERGY_CONSERV
0203 _RL qaux(nlyr)
0204 #endif /* CHECK_ENERGY_CONSERV */
fc7306ba7d Jean*0205
87ea84cac6 Jean*0206 _RL ustar, cpchr
98b4e0ca2d Jean*0207 _RL chi
fc7306ba7d Jean*0208 _RL frace, rs, hq
4a5f035778 Jean*0209 #ifdef THSICE_FRACEN_POWERLAW
0210 INTEGER powerLaw
0211 _RL rec_pLaw
0212 _RL c1Mlt, c2Mlt, aMlt, hMlt
0213 _RL c1Frz, c2Frz, aFrz, hFrz
281cce82f4 Jean*0214 _RL enFrcMlt(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
a85293d087 Mart*0215 _RL xxMlt
281cce82f4 Jean*0216 _RL enFrcFrz(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
a85293d087 Mart*0217 _RL xxFrz
0218 # if (
0219 _RL tmpMlt, tmpFrz
0220 # endif
4a5f035778 Jean*0221 #endif
7269783f6f Jean*0222
7c50f07931 Mart*0223 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0224
0225
0226 INTEGER tkey, kkey
7c50f07931 Mart*0227 #endif
f6de6620bc Mart*0228 #ifdef THSICE_REGULARIZE_CALC_THICKN
a85293d087 Mart*0229 _RL kScal
f6de6620bc Mart*0230 PARAMETER ( kScal = 1.D0 )
a85293d087 Mart*0231 #endif
0232 #ifdef ALLOW_DBUG_THSICE
7269783f6f Jean*0233
0234 #include "THSICE_DEBUG.h"
fc7306ba7d Jean*0235
87ea84cac6 Jean*0236 1020 FORMAT(A,1P4E11.3)
a85293d087 Mart*0237 #endif
87ea84cac6 Jean*0238
7269783f6f Jean*0239
0240
1818702d6f Patr*0241 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0242 tkey = bi + (bj-1)*nSx + (ikey_dynamics-1)*nSx*nSy
1818702d6f Patr*0243 #endif /* ALLOW_AUTODIFF_TAMC */
d6f06800ae Patr*0244
7269783f6f Jean*0245 rec_nlyr = nlyr
0246 rec_nlyr = 1. _d 0 / rec_nlyr
fc7306ba7d Jean*0247 dt = thSIce_deltaT
a85293d087 Mart*0248 cpchr = cpWater*rhosw*bMeltCoef
fc7306ba7d Jean*0249
6053aec1b8 Jean*0250
0251 lowIcFrac1 = iceMaskMin*1.01 _d 0
0252 lowIcFrac2 = iceMaskMin*1.10 _d 0
4a5f035778 Jean*0253 #ifdef THSICE_FRACEN_POWERLAW
0254 IF ( powerLawExp2 .GE. 1 ) THEN
0255 powerLaw = 1 + 2**powerLawExp2
0256 rec_pLaw = powerLaw
0257 rec_pLaw = 1. _d 0 / rec_pLaw
0258
0259
0260 c1Mlt = fracEnMelt**rec_pLaw
0261 c2Mlt = (1. _d 0 - fracEnMelt)**rec_pLaw
0262 aMlt = (c1Mlt+c2Mlt)/(hThickIce-hThinIce)
0263 hMlt = hThinIce+c2Mlt/aMlt
0264
0265
0266 c1Frz = fracEnFreez**rec_pLaw
0267 c2Frz = (1. _d 0 -fracEnFreez)**rec_pLaw
0268 aFrz = (c1Frz+c2Frz)/(hThickIce-hThinIce)
0269 hFrz = hThinIce+c2Frz/aFrz
0270 ELSE
0271
0272 powerLaw = 1
0273 aMlt = -1. _d 0 /(hThickIce-hThinIce)
0274 hMlt = hThickIce
0275 aFrz = -1. _d 0 /(hThickIce-hThinIce)
0276 hFrz = hThickIce
0277 ENDIF
0278 #endif /* THSICE_FRACEN_POWERLAW */
0279
d09af74739 Mart*0280
281cce82f4 Jean*0281 DO j=1-OLy,sNy+OLy
0282 DO i=1-OLx,sNx+OLx
d09af74739 Mart*0283 evapLoc(i,j) = 0. _d 0
0284 Fbot (i,j) = 0. _d 0
0285 etop (i,j) = 0. _d 0
0286 ebot (i,j) = 0. _d 0
0287 etope (i,j) = 0. _d 0
0288 ebote (i,j) = 0. _d 0
0289 esurp (i,j) = 0. _d 0
0290 mwater0(i,j) = 0. _d 0
0291 msalt0 (i,j) = 0. _d 0
0292 #ifdef THSICE_FRACEN_POWERLAW
0293 enFrcMlt(i,j)= 0. _d 0
0294 enFrcFrz(i,j)= 0. _d 0
0295 #endif
0296 ENDDO
0297 ENDDO
0298 DO k = 1,nlyr
281cce82f4 Jean*0299 DO j=1-OLy,sNy+OLy
0300 DO i=1-OLx,sNx+OLx
0707ba3b3d Jean*0301 qicen(i,j,k) = 0. _d 0
0302 hnew (i,j,k) = 0. _d 0
d09af74739 Mart*0303 ENDDO
0304 ENDDO
0305 ENDDO
0306
a85293d087 Mart*0307 #ifdef ALLOW_AUTODIFF_TAMC
0308
edb6656069 Mart*0309
a85293d087 Mart*0310
edb6656069 Mart*0311
0312
0313
0314
0315
0316
0317
a85293d087 Mart*0318 #endif
7269783f6f Jean*0319 DO j = jMin, jMax
0320 DO i = iMin, iMax
d6f06800ae Patr*0321
7269783f6f Jean*0322 IF (iceMask(i,j).GT.0. _d 0) THEN
d09af74739 Mart*0323 qicen(i,j,1)= qIc1(i,j)
0324 qicen(i,j,2)= qIc2(i,j)
7269783f6f Jean*0325
87ea84cac6 Jean*0326
d09af74739 Mart*0327 esurp(i,j) = 0. _d 0
fc7306ba7d Jean*0328
d09af74739 Mart*0329
0330 evapLoc(i,j) = frwAtm(i,j)
fc7306ba7d Jean*0331
d09af74739 Mart*0332
0333
0334
fc7306ba7d Jean*0335
4a5f035778 Jean*0336 #ifdef THSICE_FRACEN_POWERLAW
d09af74739 Mart*0337 xxMlt = aMlt*(hIce(i,j)-hMlt)
0338 xxFrz = aFrz*(hIce(i,j)-hFrz)
4a5f035778 Jean*0339
0340 IF ( powerLawExp2 .GE. 1 ) THEN
a85293d087 Mart*0341 #if ( defined TARGET_NEC_SX || defined ALLOW_AUTODIFF )
d09af74739 Mart*0342
0343 xxMlt = xxMlt**powerLaw
0344 xxFrz = xxFrz**powerLaw
0345 #else
0346 tmpMlt = xxMlt
0347 tmpFrz = xxFrz
0348 DO k=1,powerLawExp2
0349 tmpMlt = tmpMlt*tmpMlt
0350 tmpFrz = tmpFrz*tmpFrz
0351 ENDDO
0352 xxMlt = xxMlt*tmpMlt
0353 xxFrz = xxFrz*tmpFrz
0354 #endif /* TARGET_NEC_SX */
0355 xxMlt = fracEnMelt -xxMlt
0356 xxFrz = fracEnFreez-xxFrz
4a5f035778 Jean*0357 ENDIF
d09af74739 Mart*0358 enFrcMlt(i,j) = MAX( 0. _d 0, MIN( xxMlt, 1. _d 0 ) )
0359 enFrcFrz(i,j) = MAX( 0. _d 0, MIN( xxFrz, 1. _d 0 ) )
4a5f035778 Jean*0360 #endif /* THSICE_FRACEN_POWERLAW */
0361
d09af74739 Mart*0362 IF (fzMlOc(i,j).GE. 0. _d 0) THEN
fc7306ba7d Jean*0363
0364
0365
d09af74739 Mart*0366 Fbot(i,j) = fzMlOc(i,j)
0367 IF ( icFrac(i,j).LT.iceMaskMax ) THEN
4a5f035778 Jean*0368 #ifdef THSICE_FRACEN_POWERLAW
d09af74739 Mart*0369 Fbot(i,j) = enFrcFrz(i,j)*fzMlOc(i,j)
4a5f035778 Jean*0370 #else /* THSICE_FRACEN_POWERLAW */
d09af74739 Mart*0371 IF (hIce(i,j).GT.hThickIce) THEN
0372
0373 Fbot(i,j) = 0. _d 0
0374 ELSEIF (hIce(i,j).GE.hThinIce) THEN
5884801cd0 Jean*0375
d09af74739 Mart*0376 Fbot(i,j) = (1. _d 0 - fracEnFreez)*fzMlOc(i,j)
0377 ENDIF
4a5f035778 Jean*0378 #endif /* THSICE_FRACEN_POWERLAW */
d09af74739 Mart*0379 ENDIF
0380 ELSE
fc7306ba7d Jean*0381
0382
0383
f6de6620bc Mart*0384 #ifdef THSICE_REGULARIZE_CALC_THICKN
a85293d087 Mart*0385
f6de6620bc Mart*0386 ustar = SQRT(0.00536 _d 0 *v2oc(i,j) + 25. _d -6)
a85293d087 Mart*0387 #else
98b4e0ca2d Jean*0388
f6de6620bc Mart*0389 ustar = 5. _d -3
fc7306ba7d Jean*0390
d4b7a0d2bc Patr*0391 IF (v2oc(i,j) .NE. 0.)
0392 & ustar = SQRT(0.00536 _d 0*v2oc(i,j))
f6de6620bc Mart*0393 ustar = MAX(5. _d -3,ustar)
a85293d087 Mart*0394 #endif
0395
d09af74739 Mart*0396 Fbot(i,j) = cpchr*(tFrz(i,j)-tOce(i,j))*ustar
0397
f6de6620bc Mart*0398 #ifdef THSICE_REGULARIZE_CALC_THICKN
a85293d087 Mart*0399
0400
0401
0402 Fbot(i,j) = (
f6de6620bc Mart*0403 & Fbot(i,j) * EXP(kScal* Fbot(i,j))
0404 & + fzMlOc(i,j) * EXP(kScal*fzMlOc(i,j))
0405 & )/( EXP(kScal*Fbot(i,j)) + EXP(kScal*fzMlOc(i,j)) )
a85293d087 Mart*0406 #else
f6de6620bc Mart*0407 Fbot(i,j) = MAX(Fbot(i,j),fzMlOc(i,j))
a85293d087 Mart*0408 #endif
f6de6620bc Mart*0409 Fbot(i,j) = MIN(Fbot(i,j),0. _d 0)
d09af74739 Mart*0410 ENDIF
fc7306ba7d Jean*0411
0412
c1c3d0f9d7 Patr*0413 mwater0(i,j) = rhos*hSnow1(i,j) + rhoi*hIce(i,j)
d09af74739 Mart*0414 msalt0 (i,j) = rhoi*hIce(i,j)*saltIce
fc7306ba7d Jean*0415
7269783f6f Jean*0416 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*0417 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
6fc136ac68 Jean*0418 & 'ThSI_CALC_TH: evpAtm, fzMlOc, Fbot =',
d09af74739 Mart*0419 & frwAtm(i,j),fzMlOc(i,j),Fbot(i,j)
7269783f6f Jean*0420 #endif
6fc136ac68 Jean*0421
d09af74739 Mart*0422 ENDIF
0423
0424 ENDDO
0425 ENDDO
a85293d087 Mart*0426 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0427
a85293d087 Mart*0428 #endif
87ea84cac6 Jean*0429
d09af74739 Mart*0430 DO j = jMin, jMax
0431 DO i = iMin, iMax
0432 IF (iceMask(i,j).GT.0. _d 0) THEN
fc7306ba7d Jean*0433
d09af74739 Mart*0434
fc7306ba7d Jean*0435
4a5f035778 Jean*0436 #ifdef THSICE_FRACEN_POWERLAW
d09af74739 Mart*0437 IF ( fracEnMelt.EQ.0. _d 0 ) THEN
0438 frace = 0. _d 0
0439 ELSE
0440 frace = (icFrac(i,j) - lowIcFrac1)/(lowIcFrac2-iceMaskMin)
0441 frace = MIN( enFrcMlt(i,j), MAX( 0. _d 0, frace ) )
0442 ENDIF
4a5f035778 Jean*0443 #else /* THSICE_FRACEN_POWERLAW */
d09af74739 Mart*0444 IF ( hIce(i,j).GT.hThickIce .OR. fracEnMelt.EQ.0. _d 0 ) THEN
5884801cd0 Jean*0445
d09af74739 Mart*0446 frace = 0. _d 0
0447 ELSEIF (hIce(i,j).LT.hThinIce) THEN
fc7306ba7d Jean*0448
d09af74739 Mart*0449 frace = 1. _d 0
0450 ELSE
0451 frace = fracEnMelt
0452 ENDIF
6053aec1b8 Jean*0453
0454
d09af74739 Mart*0455
0456 IF ( icFrac(i,j).LE.lowIcFrac1 ) THEN
0457 frace = 0. _d 0
0458 ELSEIF (icFrac(i,j).LE.lowIcFrac2 ) THEN
0459 frace = MIN( frace, fracEnMelt )
0460 ENDIF
4a5f035778 Jean*0461 #endif /* THSICE_FRACEN_POWERLAW */
fc7306ba7d Jean*0462
d09af74739 Mart*0463
0464 IF ( sHeat(i,j).GT.0. _d 0 ) THEN
0465 etop(i,j) = (1. _d 0-frace)*sHeat(i,j) * dt
0466 etope(i,j) = frace*sHeat(i,j) * dt
0467 ELSE
0468 etop(i,j) = 0. _d 0
0469 etope(i,j) = 0. _d 0
0470
0471 esurp(i,j) = sHeat(i,j) * dt
0472 ENDIF
7269783f6f Jean*0473
87ea84cac6 Jean*0474
0475
d09af74739 Mart*0476
0477
0478
9a68c0a761 Jean*0479
d09af74739 Mart*0480
0481
9a68c0a761 Jean*0482
87ea84cac6 Jean*0483
d09af74739 Mart*0484 ebot(i,j) = (flxCnB(i,j)-Fbot(i,j)) * dt
0485 IF (ebot(i,j).GT.0. _d 0) THEN
0486 ebote(i,j) = frace*ebot(i,j)
0487 ebot(i,j) = ebot(i,j)-ebote(i,j)
0488 ELSE
0489 ebote(i,j) = 0. _d 0
0490 ENDIF
7269783f6f Jean*0491 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*0492 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
0493 & 'ThSI_CALC_TH: etop,etope,ebot,ebote=',
0494 & etop(i,j),etope(i,j),ebot(i,j),ebote(i,j)
7269783f6f Jean*0495 #endif
6fc136ac68 Jean*0496
d09af74739 Mart*0497 ENDIF
0498
0499 ENDDO
0500 ENDDO
fc7306ba7d Jean*0501
d09af74739 Mart*0502
0503
9a68c0a761 Jean*0504 DO k = 1, nlyr
d09af74739 Mart*0505 DO j = jMin, jMax
0506 DO i = iMin, iMax
0507 hnew(i,j,k) = hIce(i,j) * rec_nlyr
0508 ENDDO
0509 ENDDO
9a68c0a761 Jean*0510 ENDDO
fc7306ba7d Jean*0511
a85293d087 Mart*0512 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0513
0514
a85293d087 Mart*0515 #endif
d09af74739 Mart*0516 DO j = jMin, jMax
0517 DO i = iMin, iMax
0518 IF (iceMask(i,j) .GT. 0. _d 0 .AND.
0519 & etop(i,j) .GT. 0. _d 0 .AND.
f6de6620bc Mart*0520 & hSnow1(i,j) .GT. 0. _d 0) THEN
d09af74739 Mart*0521
0522
0523
0524
0525
0526 rq = rhos * qsnow
c1c3d0f9d7 Patr*0527 rqh = rq * hSnow1(i,j)
d09af74739 Mart*0528 IF (etop(i,j) .LT. rqh) THEN
c1c3d0f9d7 Patr*0529 hSnow1(i,j) = hSnow1(i,j) - etop(i,j)/rq
d09af74739 Mart*0530 etop(i,j) = 0. _d 0
0531 ELSE
0532 etop(i,j) = etop(i,j) - rqh
c1c3d0f9d7 Patr*0533 hSnow1(i,j) = 0. _d 0
9a68c0a761 Jean*0534 ENDIF
d09af74739 Mart*0535
0536 ENDIF
0537
0538 ENDDO
0539 ENDDO
a85293d087 Mart*0540 #ifdef ALLOW_AUTODIFF_TAMC_MORE
edb6656069 Mart*0541
a85293d087 Mart*0542 #endif
d09af74739 Mart*0543
0544 DO k = 1, nlyr
a85293d087 Mart*0545 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0546 kkey = k + (tkey-1)*nlyr
0547
0548
0549
a85293d087 Mart*0550 #endif
d09af74739 Mart*0551 DO j = jMin, jMax
0552 DO i = iMin, iMax
0553 IF (iceMask(i,j).GT.0. _d 0) THEN
0554 IF (etop(i,j) .GT. 0. _d 0) THEN
0555 rq = rhoi * qicen(i,j,k)
0556 rqh = rq * hnew(i,j,k)
0557 IF (etop(i,j) .LT. rqh) THEN
0558 hnew(i,j,k) = hnew(i,j,k) - etop(i,j) / rq
0559 etop(i,j) = 0. _d 0
0560 ELSE
0561 etop(i,j) = etop(i,j) - rqh
0562 hnew(i,j,k) = 0. _d 0
0563 ENDIF
0564 ELSE
0565 etop(i,j)=0. _d 0
0566 ENDIF
fc7306ba7d Jean*0567
d09af74739 Mart*0568
9a68c0a761 Jean*0569
d09af74739 Mart*0570
fc7306ba7d Jean*0571
9a68c0a761 Jean*0572
fc7306ba7d Jean*0573
6fc136ac68 Jean*0574
d09af74739 Mart*0575 ENDIF
0576
0577 ENDDO
0578 ENDDO
0579
0580 ENDDO
a85293d087 Mart*0581 #ifdef ALLOW_AUTODIFF_TAMC_MORE
0582
0583
edb6656069 Mart*0584
0585
0586
a85293d087 Mart*0587 #endif
fc7306ba7d Jean*0588
281cce82f4 Jean*0589
d09af74739 Mart*0590 DO j = jMin, jMax
0591 DO i = iMin, iMax
0592 IF (iceMask(i,j).GT.0. _d 0 .AND. ebot(i,j) .LT. 0. _d 0) THEN
fc7306ba7d Jean*0593
d09af74739 Mart*0594 qbot = -cpIce *tFrz(i,j) + Lfresh
0595 dhi = -ebot(i,j) / (qbot * rhoi)
0596 ebot(i,j) = 0. _d 0
6fc136ac68 Jean*0597 qicen(i,j,nlyr) =
d09af74739 Mart*0598 & (hnew(i,j,nlyr)*qicen(i,j,nlyr)+dhi*qbot) /
0599 & (hnew(i,j,nlyr)+dhi)
0600 hnew(i,j,nlyr) = hnew(i,j,nlyr) + dhi
281cce82f4 Jean*0601 frzSeaWat(i,j) = rhoi*dhi/dt
d09af74739 Mart*0602
0603
0604 ENDIF
0605
0606 ENDDO
0607 ENDDO
1818702d6f Patr*0608
a85293d087 Mart*0609 #ifdef ALLOW_AUTODIFF_TAMC_MORE
0610
0611
edb6656069 Mart*0612
0613
1818702d6f Patr*0614 #endif
0615
281cce82f4 Jean*0616
d09af74739 Mart*0617 DO k = nlyr, 1, -1
a85293d087 Mart*0618 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0619 kkey = k + (tkey-1)*nlyr
0620
a85293d087 Mart*0621 #endif
d09af74739 Mart*0622 DO j = jMin, jMax
0623 DO i = iMin, iMax
0624 IF (iceMask(i,j) .GT. 0. _d 0 .AND.
6fc136ac68 Jean*0625 & ebot(i,j) .GT. 0. _d 0 .AND.
d09af74739 Mart*0626 & hnew(i,j,k) .GT. 0. _d 0) THEN
0627 rq = rhoi * qicen(i,j,k)
0628 rqh = rq * hnew(i,j,k)
0629 IF (ebot(i,j) .LT. rqh) THEN
0630 hnew(i,j,k) = hnew(i,j,k) - ebot(i,j) / rq
0631 ebot(i,j) = 0. _d 0
0632 ELSE
0633 ebot(i,j) = ebot(i,j) - rqh
0634 hnew(i,j,k) = 0. _d 0
0635 ENDIF
0636
0637 ENDIF
0638
0639 ENDDO
0640 ENDDO
0641
0642 ENDDO
a85293d087 Mart*0643 #ifdef ALLOW_AUTODIFF_TAMC_MORE
0644
0645
edb6656069 Mart*0646
0647
a85293d087 Mart*0648 #endif
d09af74739 Mart*0649
0650
0651 DO j = jMin, jMax
0652 DO i = iMin, iMax
6fc136ac68 Jean*0653 IF (iceMask(i,j) .GT. 0. _d 0 .AND.
0654 & ebot(i,j) .GT. 0. _d 0 .AND.
f6de6620bc Mart*0655 & hSnow1(i,j) .GT. 0. _d 0) THEN
d09af74739 Mart*0656 rq = rhos * qsnow
c1c3d0f9d7 Patr*0657 rqh = rq * hSnow1(i,j)
d09af74739 Mart*0658 IF (ebot(i,j) .LT. rqh) THEN
c1c3d0f9d7 Patr*0659 hSnow1(i,j) = hSnow1(i,j) - ebot(i,j) / rq
d09af74739 Mart*0660 ebot(i,j) = 0. _d 0
0661 ELSE
0662 ebot(i,j) = ebot(i,j) - rqh
c1c3d0f9d7 Patr*0663 hSnow1(i,j) = 0. _d 0
9a68c0a761 Jean*0664 ENDIF
d09af74739 Mart*0665
fc7306ba7d Jean*0666
d09af74739 Mart*0667
fc7306ba7d Jean*0668
9a68c0a761 Jean*0669
fc7306ba7d Jean*0670
d09af74739 Mart*0671
0672 ENDIF
0673
0674 ENDDO
9a68c0a761 Jean*0675 ENDDO
a85293d087 Mart*0676 #ifdef ALLOW_AUTODIFF_TAMC_MORE
edb6656069 Mart*0677
a85293d087 Mart*0678 #endif
d09af74739 Mart*0679 DO j = jMin, jMax
0680 DO i = iMin, iMax
0681 IF (iceMask(i,j).GT.0. _d 0) THEN
0682
0683 hIce(i,j) = hnew(i,j,1) + hnew(i,j,2)
7269783f6f Jean*0684 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*0685 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
c1c3d0f9d7 Patr*0686 & 'ThSI_CALC_TH: etop, ebot, hIce, hSnow1 =',
0687 & etop(i,j), ebot(i,j), hIce(i,j), hSnow1(i,j)
7269783f6f Jean*0688 #endif
fc7306ba7d Jean*0689
d09af74739 Mart*0690
6fc136ac68 Jean*0691 IF ( hIce(i,j).LT.hIceMin
c1c3d0f9d7 Patr*0692 & .AND. (hIce(i,j)+hSnow1(i,j)).GT.0. _d 0 ) THEN
0693 esurp(i,j) = esurp(i,j) - rhos*qsnow*hSnow1(i,j)
d09af74739 Mart*0694 & - rhoi*qicen(i,j,1)*hnew(i,j,1)
0695 & - rhoi*qicen(i,j,2)*hnew(i,j,2)
0696 hIce(i,j) = 0. _d 0
c1c3d0f9d7 Patr*0697 hSnow1(i,j) = 0. _d 0
d09af74739 Mart*0698 tSrf(i,j) = 0. _d 0
0699 icFrac(i,j) = 0. _d 0
0700 qicen(i,j,1) = 0. _d 0
0701 qicen(i,j,2) = 0. _d 0
7269783f6f Jean*0702 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*0703 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
0704 & 'ThSI_CALC_TH: -1 : esurp=',esurp(i,j)
7269783f6f Jean*0705 #endif
d09af74739 Mart*0706 ENDIF
0707
6fc136ac68 Jean*0708
d09af74739 Mart*0709 ENDIF
0710
0711 ENDDO
0712 ENDDO
1818702d6f Patr*0713
d09af74739 Mart*0714 DO j = jMin, jMax
0715 DO i = iMin, iMax
0716 IF (iceMask(i,j).GT.0. _d 0) THEN
fc7306ba7d Jean*0717
0718
0719
6fc136ac68 Jean*0720 frw2oc(i,j) = (mwater0(i,j)
c1c3d0f9d7 Patr*0721 & - (rhos*hSnow1(i,j)+rhoi*hIce(i,j)))/dt
fc7306ba7d Jean*0722
d09af74739 Mart*0723 IF ( hIce(i,j) .LE. 0. _d 0 ) THEN
9a68c0a761 Jean*0724
d09af74739 Mart*0725 frw2oc(i,j) = frw2oc(i,j) + snowP(i,j)
0726 flx2oc(i,j) = flx2oc(i,j) - snowP(i,j)*Lfresh
0727 ENDIF
6fc136ac68 Jean*0728
0729
d09af74739 Mart*0730 ENDIF
0731
0732 ENDDO
0733 ENDDO
0734
0735 DO j = jMin, jMax
0736 DO i = iMin, iMax
0737 IF (iceMask(i,j).GT.0. _d 0) THEN
fc7306ba7d Jean*0738
d09af74739 Mart*0739 IF ( hIce(i,j) .GT. 0. _d 0 ) THEN
fc7306ba7d Jean*0740
c1c3d0f9d7 Patr*0741 hSnow1(i,j) = hSnow1(i,j) + dt*snowP(i,j)/rhos
fc7306ba7d Jean*0742
0743
c1c3d0f9d7 Patr*0744 IF (hSnow1(i,j).GT.0. _d 0) THEN
0745 IF (evapLoc(i,j)/rhos *dt.GT.hSnow1(i,j)) THEN
0746 evapLoc(i,j)=evapLoc(i,j)-hSnow1(i,j)*rhos/dt
0747 hSnow1(i,j)=0. _d 0
d09af74739 Mart*0748 ELSE
c1c3d0f9d7 Patr*0749 hSnow1(i,j) = hSnow1(i,j) - evapLoc(i,j)/rhos *dt
d09af74739 Mart*0750 evapLoc(i,j)=0. _d 0
0751 ENDIF
0752 ENDIF
0753
9a68c0a761 Jean*0754 ENDIF
6fc136ac68 Jean*0755
d09af74739 Mart*0756 ENDIF
0757
0758 ENDDO
0759 ENDDO
1818702d6f Patr*0760
d09af74739 Mart*0761
0762 DO k = 1, nlyr
a85293d087 Mart*0763 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0764 kkey = k + (tkey-1)*nlyr
0765
a85293d087 Mart*0766 #endif
d09af74739 Mart*0767 DO j = jMin, jMax
0768 DO i = iMin, iMax
0769 IF (iceMask(i,j).GT.0. _d 0 ) THEN
0770
a85293d087 Mart*0771 hnewTmp = hnew(i,j,k)
d09af74739 Mart*0772 IF (hIce(i,j).GT.0. _d 0.AND.evapLoc(i,j).GT.0. _d 0) THEN
0773
fc7306ba7d Jean*0774
0775
a85293d087 Mart*0776
0777
d09af74739 Mart*0778
9a68c0a761 Jean*0779
a85293d087 Mart*0780
d09af74739 Mart*0781
9a68c0a761 Jean*0782
fc7306ba7d Jean*0783
d09af74739 Mart*0784 dhi = evapLoc(i,j)/rhoi*dt
a85293d087 Mart*0785 IF (dhi.GE.hnewTmp) THEN
0786 evapLoc(i,j)=evapLoc(i,j)-hnewTmp*rhoi/dt
6fc136ac68 Jean*0787 esurp(i,j) = esurp(i,j)
a85293d087 Mart*0788 & - hnewTmp*rhoi*(qicen(i,j,k)-Lfresh)
d09af74739 Mart*0789 hnew(i,j,k)=0. _d 0
0790 ELSE
a85293d087 Mart*0791 hq = hnewTmp*qicen(i,j,k)-dhi*Lfresh
0792 hnew(i,j,k) = hnewTmp - dhi
d09af74739 Mart*0793 qicen(i,j,k)=hq/hnew(i,j,k)
0794 evapLoc(i,j)=0. _d 0
0795 ENDIF
fc7306ba7d Jean*0796
d09af74739 Mart*0797
9a68c0a761 Jean*0798
d09af74739 Mart*0799
fc7306ba7d Jean*0800
9a68c0a761 Jean*0801
d09af74739 Mart*0802
0803 ENDIF
6fc136ac68 Jean*0804
d09af74739 Mart*0805 ENDIF
0806
0807 ENDDO
9a68c0a761 Jean*0808 ENDDO
d09af74739 Mart*0809
0810 ENDDO
1818702d6f Patr*0811
a85293d087 Mart*0812 #ifdef ALLOW_AUTODIFF_TAMC_MORE
0813
0814
edb6656069 Mart*0815
0816
0817
0818
0819
1818702d6f Patr*0820 #endif
0821
6fc136ac68 Jean*0822
d09af74739 Mart*0823 DO j = jMin, jMax
0824 DO i = iMin, iMax
0825 IF (iceMask(i,j).GT.0. _d 0) THEN
0826 IF (hIce(i,j) .GT. 0. _d 0) THEN
0827
6fc136ac68 Jean*0828 hIce(i,j) = hnew(i,j,1) + hnew(i,j,2)
d09af74739 Mart*0829
0830 IF ( hIce(i,j).GT.0. _d 0 .AND. hIce(i,j).LT.hIceMin ) THEN
6fc136ac68 Jean*0831 frw2oc(i,j) = frw2oc(i,j)
c1c3d0f9d7 Patr*0832 & + (rhos*hSnow1(i,j) + rhoi*hIce(i,j))/dt
0833 esurp(i,j) = esurp(i,j) - rhos*qsnow*hSnow1(i,j)
d09af74739 Mart*0834 & - rhoi*qicen(i,j,1)*hnew(i,j,1)
0835 & - rhoi*qicen(i,j,2)*hnew(i,j,2)
0836 hIce(i,j) = 0. _d 0
c1c3d0f9d7 Patr*0837 hSnow1(i,j) = 0. _d 0
d09af74739 Mart*0838 tSrf(i,j) = 0. _d 0
0839 icFrac(i,j) = 0. _d 0
0840 qicen(i,j,1) = 0. _d 0
0841 qicen(i,j,2) = 0. _d 0
7269783f6f Jean*0842 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*0843 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
6fc136ac68 Jean*0844 & 'ThSI_CALC_TH: -2 : esurp,frw2oc=',
d09af74739 Mart*0845 & esurp(i,j), frw2oc(i,j)
7269783f6f Jean*0846 #endif
d09af74739 Mart*0847 ENDIF
9a68c0a761 Jean*0848
d09af74739 Mart*0849
0850 ENDIF
0851
6fc136ac68 Jean*0852
d09af74739 Mart*0853 ENDIF
0854
0855 ENDDO
0856 ENDDO
1818702d6f Patr*0857
d09af74739 Mart*0858 DO j = jMin, jMax
0859 DO i = iMin, iMax
a85293d087 Mart*0860
0861 hIceTmp = hIce(i,j)
0862 hSnwTmp = hSnow1(i,j)
0863 hnewTmp = hnew(i,j,1)
d09af74739 Mart*0864 IF (iceMask(i,j).GT.0. _d 0) THEN
9a68c0a761 Jean*0865
a85293d087 Mart*0866 IF ( hIceTmp .GT. 0. _d 0 ) THEN
fc7306ba7d Jean*0867
7269783f6f Jean*0868
0869
e6b6bab319 Davi*0870
c1c3d0f9d7 Patr*0871
e6b6bab319 Davi*0872
fc7306ba7d Jean*0873
a85293d087 Mart*0874 IF ( hSnwTmp .GT. hIceTmp*floodFac
0875 & .OR. hSnwTmp .GT. hsMax ) THEN
9a68c0a761 Jean*0876
a85293d087 Mart*0877
d09af74739 Mart*0878
a85293d087 Mart*0879 dhs = (hSnwTmp - hIceTmp*floodFac) * rhoi / rhosw
0880 dhs = MAX( hSnwTmp - hsMax, dhs )
d09af74739 Mart*0881 dhi = dhs * rhos / rhoi
a85293d087 Mart*0882 rqh = rhoi*qicen(i,j,1)*hnewTmp + rhos*qsnow*dhs
0883 hnew(i,j,1) = hnewTmp + dhi
0884 qicen(i,j,1) = rqh / (rhoi*hnew(i,j,1))
0885 hIce(i,j) = hIceTmp + dhi
0886 hSnow1(i,j) = hSnwTmp - dhs
d09af74739 Mart*0887 ENDIF
a85293d087 Mart*0888 #ifdef ALLOW_AUTODIFF
0889
0890
0891
0892
0893
0894
0895
0896
fc7306ba7d Jean*0897
a85293d087 Mart*0898
0899 ENDIF
0900
0901 ENDIF
0902
0903 ENDDO
0904 ENDDO
0905 #ifdef ALLOW_AUTODIFF_TAMC_MORE
0906
0907
edb6656069 Mart*0908
0909
0910
a85293d087 Mart*0911 #endif
0912 DO j = jMin, jMax
0913 DO i = iMin, iMax
0914
0915 hIceTmp = hIce(i,j)
0916 IF (iceMask(i,j).GT.0. _d 0) THEN
0917 IF ( hIceTmp .GT. 0. _d 0 ) THEN
0918
0919
0920
0921 IF (hIceTmp.GT.hiMax) THEN
0922
0923 chi=hIceTmp-hiMax
0924 #else /* ndef ALLOW_AUTODIFF */
fc7306ba7d Jean*0925
0926
0927
d09af74739 Mart*0928 IF (hIce(i,j).GT.hiMax) THEN
0929
0930 chi=hIce(i,j)-hiMax
a85293d087 Mart*0931 #endif /* ALLOW_AUTODIFF */
d09af74739 Mart*0932 hnew(i,j,1)=hnew(i,j,1)-chi/2. _d 0
0933 hnew(i,j,2)=hnew(i,j,2)-chi/2. _d 0
0934 frw2oc(i,j) = frw2oc(i,j) + chi*rhoi/dt
0935 ENDIF
c1c3d0f9d7 Patr*0936
0937
0938
0939
d09af74739 Mart*0940
e6b6bab319 Davi*0941
fc7306ba7d Jean*0942
0943
d09af74739 Mart*0944 hIce(i,j) = hnew(i,j,1) + hnew(i,j,2)
fc7306ba7d Jean*0945
7269783f6f Jean*0946 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*0947 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
6fc136ac68 Jean*0948 & 'ThSI_CALC_TH: b-Winton: hnew, qice =',
0949 & hnew(i,j,1), hnew(i,j,2),
0950 & qicen(i,j,1), qicen(i,j,2)
7269783f6f Jean*0951 #endif
0952
d09af74739 Mart*0953 hlyr = hIce(i,j) * rec_nlyr
0954
0955
0956
0957
0958
0959
6fc136ac68 Jean*0960
d09af74739 Mart*0961
0962 if (hnew(i,j,1).gt.hnew(i,j,2)) then
0963
0964 f1 = (hnew(i,j,1)-hlyr)/hlyr
0965 q2tmp = f1*qicen(i,j,1) + (1. _d 0-f1)*qicen(i,j,2)
0966 if (q2tmp.gt.Lfresh) then
0967 qicen(i,j,2) = q2tmp
0968 else
0969
0970 qh2 = hlyr*qicen(i,j,2)
0971 qhtot = hnew(i,j,1)*qicen(i,j,1) + hnew(i,j,2)*qicen(i,j,2)
0972 qh1 = qhtot - qh2
0973 qicen(i,j,1) = qh1/hlyr
0974 endif
0975 else
0976
0977 f1 = hnew(i,j,1)/hlyr
0978 qicen(i,j,1) = f1*qicen(i,j,1) + (1. _d 0-f1)*qicen(i,j,2)
0979 endif
0980
fc7306ba7d Jean*0981
7269783f6f Jean*0982 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*0983 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
c1c3d0f9d7 Patr*0984 & 'ThSI_CALC_TH: icFrac,hIce, qtot, hSnow1 =',
6fc136ac68 Jean*0985 & icFrac(i,j),hIce(i,j), (qicen(i,j,1)+qicen(i,j,2))*0.5,
c1c3d0f9d7 Patr*0986 & hSnow1(i,j)
7269783f6f Jean*0987 #endif
fc7306ba7d Jean*0988
d09af74739 Mart*0989
0990 ENDIF
29188f9691 Jean*0991
fc7306ba7d Jean*0992
6fc136ac68 Jean*0993
d09af74739 Mart*0994 ENDIF
0995
0996 ENDDO
0997 ENDDO
a85293d087 Mart*0998 #ifdef ALLOW_AUTODIFF_TAMC_MORE
edb6656069 Mart*0999
1000
a85293d087 Mart*1001 #endif
1818702d6f Patr*1002
d09af74739 Mart*1003 DO j = jMin, jMax
1004 DO i = iMin, iMax
1005 IF (iceMask(i,j).GT.0. _d 0) THEN
fc7306ba7d Jean*1006
1007
d09af74739 Mart*1008 IF (hIce(i,j).LE.0. _d 0) icFrac(i,j)=0. _d 0
fc7306ba7d Jean*1009
1010
6fc136ac68 Jean*1011 flx2oc(i,j) = flx2oc(i,j)
d09af74739 Mart*1012 & + (Fbot(i,j)+(esurp(i,j)+etop(i,j)+ebot(i,j))/dt)
7269783f6f Jean*1013 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*1014 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
1015 & 'ThSI_CALC_TH: [esurp,etop+ebot]/dt =',
1016 & esurp(i,j)/dt,etop(i,j)/dt,ebot(i,j)/dt
7269783f6f Jean*1017 #endif
fc7306ba7d Jean*1018
d09af74739 Mart*1019
1020 frw2oc(i,j) = frw2oc(i,j) - evapLoc(i,j)
1021
1022
1023
1024 flx2oc(i,j) = flx2oc(i,j) + evapLoc(i,j)*Lfresh
fc7306ba7d Jean*1025
1026
c1c3d0f9d7 Patr*1027
d09af74739 Mart*1028
1029
1030
1031
1032
1033
c1c3d0f9d7 Patr*1034
7269783f6f Jean*1035
d09af74739 Mart*1036 fsalt(i,j) = (msalt0(i,j) - rhoi*hIce(i,j)*saltIce)/dt
7269783f6f Jean*1037
1038 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*1039 IF (dBug(i,j,bi,bj) ) THEN
1040 WRITE(6,1020)'ThSI_CALC_TH:dH2O,Ev[kg],frw2oc,fsalt',
c1c3d0f9d7 Patr*1041 & (mwater0(i,j)-(rhos*hSnow1(i,j)+rhoi*hIce(i,j)))/dt,
d09af74739 Mart*1042 & evapLoc(i,j),frw2oc(i,j),fsalt(i,j)
1043 WRITE(6,1020)'ThSI_CALC_TH: flx2oc,Fbot,extend/dt =',
f6de6620bc Mart*1044 & flx2oc(i,j),Fbot(i,j),(etope(i,j)+ebote(i,j))/dt
d09af74739 Mart*1045 ENDIF
7269783f6f Jean*1046 #endif
fc7306ba7d Jean*1047
d09af74739 Mart*1048
1049 frw2oc(i,j) = frw2oc(i,j) + (prcAtm(i,j)-snowP(i,j))
1050
6fc136ac68 Jean*1051
d09af74739 Mart*1052 ENDIF
1053
1054 ENDDO
1055 ENDDO
1818702d6f Patr*1056
d09af74739 Mart*1057 DO j = jMin, jMax
1058 DO i = iMin, iMax
a85293d087 Mart*1059
1060 icFracTmp = icFrac(i,j)
d09af74739 Mart*1061 IF (iceMask(i,j).GT.0. _d 0) THEN
1062
1063
1064
1065
1066 extend=etope(i,j)+ebote(i,j)
a85293d087 Mart*1067 IF (icFracTmp.GT.0. _d 0.AND.extend.GT.0. _d 0) THEN
d09af74739 Mart*1068 rq = rhoi * 0.5 _d 0*(qicen(i,j,1)+qicen(i,j,2))
1069 rs = rhos * qsnow
c1c3d0f9d7 Patr*1070 rqh = rq * hIce(i,j) + rs * hSnow1(i,j)
1071 freshe=(rhos*hSnow1(i,j)+rhoi*hIce(i,j))/dt
d09af74739 Mart*1072 salte=(rhoi*hIce(i,j)*saltIce)/dt
1073 IF ( extend.LT.rqh ) THEN
a85293d087 Mart*1074 icFrac(i,j)=(1. _d 0-extend/rqh)*icFracTmp
d09af74739 Mart*1075 ENDIF
1076 IF ( extend.LT.rqh .AND. icFrac(i,j).GE.iceMaskMin ) THEN
1077 frw2oc(i,j)=frw2oc(i,j)+extend/rqh*freshe
7269783f6f Jean*1078 fsalt(i,j)=fsalt(i,j)+extend/rqh*salte
d09af74739 Mart*1079 ELSE
1080 icFrac(i,j)=0. _d 0
1081 hIce(i,j) =0. _d 0
c1c3d0f9d7 Patr*1082 hSnow1(i,j) =0. _d 0
d09af74739 Mart*1083 flx2oc(i,j)=flx2oc(i,j)+(extend-rqh)/dt
1084 frw2oc(i,j)=frw2oc(i,j)+freshe
7269783f6f Jean*1085 fsalt(i,j)=fsalt(i,j)+salte
d09af74739 Mart*1086 ENDIF
1087 ELSEIF (extend.GT.0. _d 0) THEN
1088 flx2oc(i,j)=flx2oc(i,j)+extend/dt
9a68c0a761 Jean*1089 ENDIF
6fc136ac68 Jean*1090
d09af74739 Mart*1091 ENDIF
1092
1093 ENDDO
1094 ENDDO
1095 DO j = jMin, jMax
1096 DO i = iMin, iMax
1097 IF (iceMask(i,j).GT.0. _d 0) THEN
7269783f6f Jean*1098
d09af74739 Mart*1099
7269783f6f Jean*1100
d09af74739 Mart*1101
7269783f6f Jean*1102
d09af74739 Mart*1103 frwAtm(i,j) = frwAtm(i,j) - prcAtm(i,j)
7269783f6f Jean*1104
d09af74739 Mart*1105
1106
1107 fzMlOc(i,j) = fzMlOc(i,j) - Fbot(i,j)*iceMask(i,j)
7269783f6f Jean*1108
d09af74739 Mart*1109
1110 qIc1(i,j) = qicen(i,j,1)
1111 qIc2(i,j) = qicen(i,j,2)
7269783f6f Jean*1112 #ifdef ALLOW_DBUG_THSICE
d09af74739 Mart*1113 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
1114 & 'ThSI_CALC_TH: icFrac,flx2oc,fsalt,frw2oc=',
1115 & icFrac(i,j), flx2oc(i,j), fsalt(i,j), frw2oc(i,j)
7269783f6f Jean*1116 #endif
d09af74739 Mart*1117
1118 ENDIF
1119 ENDDO
1120 ENDDO
6fc136ac68 Jean*1121
7269783f6f Jean*1122
6fc136ac68 Jean*1123 #ifdef CHECK_ENERGY_CONSERV
d09af74739 Mart*1124 DO j = jMin, jMax
1125 DO i = iMin, iMax
1126 IF (iceMask(i,j).GT.0. _d 0) THEN
1127 qaux(1)=qIc1(i,j)
1128 qaux(2)=qIc2(i,j)
1129 CALL THSICE_CHECK_CONSERV( dBugFlag, i, j, bi, bj, 0,
c1c3d0f9d7 Patr*1130 I iceMask(i,j), icFrac(i,j), hIce(i,j), hSnow1(i,j),
d09af74739 Mart*1131 I qaux,
1132 I flx2oc(i,j), frw2oc(i,j), fsalt,
1133 I myTime, myIter, myThid )
6fc136ac68 Jean*1134
7269783f6f Jean*1135 ENDIF
d09af74739 Mart*1136
7269783f6f Jean*1137 ENDDO
1138 ENDDO
d09af74739 Mart*1139 #endif /* CHECK_ENERGY_CONSERV */
1140
fc7306ba7d Jean*1141 #endif /* ALLOW_THSICE */
1142
1143
1144
1145 RETURN
1146 END