** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.
Last-Modified: Sat, 20 Mar 2026 05:09:16 GMT
Content-Type: text/html; charset=utf-8
MITgcm/MITgcm/pkg/thsice/thsice_calc_thickn.F
File indexing completed on 2023-02-03 06:10:34 UTC
view on github raw 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