File indexing completed on 2023-02-03 06:10:29 UTC
view on githubraw file Latest commit edb66560 on 2023-02-02 23:32:31 UTC
9637aec598 Jean*0001 #include "SEAICE_OPTIONS.h"
1043a55cc1 Jean*0002 #ifdef ALLOW_EXF
0003 # include "EXF_OPTIONS.h"
0004 #endif
772b2ed80e Gael*0005 #ifdef ALLOW_AUTODIFF
0006 # include "AUTODIFF_OPTIONS.h"
0007 #endif
9637aec598 Jean*0008
0009
0010
0011
0012 SUBROUTINE SEAICE_SOLVE4TEMP(
0013 I UG, HICE_ACTUAL, HSNOW_ACTUAL,
840c7fba30 Gael*0014 #ifdef SEAICE_CAP_SUBLIM
52ff14d141 Ian *0015 I F_lh_max,
0016 #endif
f5282c5b03 Gael*0017 I TSURFin,
0018 O TSURFout,
4dd39c50d9 Mart*0019 #ifdef SEAICE_USE_GROWTH_ADX
0020 O F_io_net, F_ia_net,
0021 #endif /* SEAICE_USE_GROWTH_ADX */
a676451ac2 Jean*0022 O F_ia, IcePenetSW,
69d8fa39b5 Mart*0023 O FWsublim,
9637aec598 Jean*0024 I bi, bj, myTime, myIter, myThid )
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 IMPLICIT NONE
0037
0038 #include "SIZE.h"
0039 #include "GRID.h"
0040 #include "EEPARAMS.h"
c68247b0e4 Jean*0041 #include "PARAMS.h"
9637aec598 Jean*0042 #include "FFIELDS.h"
ccaa3c61f4 Patr*0043 #include "SEAICE_SIZE.h"
9637aec598 Jean*0044 #include "SEAICE_PARAMS.h"
ccaa3c61f4 Patr*0045 #include "SEAICE.h"
9637aec598 Jean*0046 #include "DYNVARS.h"
0047 #ifdef ALLOW_EXF
0048 # include "EXF_FIELDS.h"
0049 #endif
6d55e2b45a Mart*0050 #ifdef ALLOW_AUTODIFF_TAMC
0051 # include "tamc.h"
0052 #endif
9637aec598 Jean*0053
a676451ac2 Jean*0054
0055
9637aec598 Jean*0056
0057
4dd39c50d9 Mart*0058
a676451ac2 Jean*0059
0060
0061
0062
0063
4dd39c50d9 Mart*0064
0065
0066
0067
a676451ac2 Jean*0068
0069
0070
6e70381b89 Jean*0071
0072
0073
0074
0075
0076
a676451ac2 Jean*0077 _RL UG (1:sNx,1:sNy)
0078 _RL HICE_ACTUAL (1:sNx,1:sNy)
0079 _RL HSNOW_ACTUAL(1:sNx,1:sNy)
840c7fba30 Gael*0080 #ifdef SEAICE_CAP_SUBLIM
a676451ac2 Jean*0081 _RL F_lh_max (1:sNx,1:sNy)
52ff14d141 Ian *0082 #endif
f5282c5b03 Gael*0083 _RL TSURFin (1:sNx,1:sNy)
0084 _RL TSURFout (1:sNx,1:sNy)
4dd39c50d9 Mart*0085 _RL F_io_net (1:sNx,1:sNy)
0086 _RL F_ia_net (1:sNx,1:sNy)
a676451ac2 Jean*0087 _RL F_ia (1:sNx,1:sNy)
0088 _RL IcePenetSW (1:sNx,1:sNy)
0089 _RL FWsublim (1:sNx,1:sNy)
9637aec598 Jean*0090 INTEGER bi, bj
0091 _RL myTime
0092 INTEGER myIter, myThid
1043a55cc1 Jean*0093
9637aec598 Jean*0094
1043a55cc1 Jean*0095 #if defined(ALLOW_ATM_TEMP) && defined(ALLOW_DOWNWARD_RADIATION)
9637aec598 Jean*0096
0097
c68247b0e4 Jean*0098
840c7fba30 Gael*0099
9637aec598 Jean*0100 INTEGER i, j
840c7fba30 Gael*0101 INTEGER kSurface
9637aec598 Jean*0102 INTEGER ITER
999f896fe3 Mart*0103 _RL D1, D1I
0104 _RL D3(1:sNx,1:sNy)
9b4e2be4e7 Mart*0105 _RL TMELT, XKI, XKS, HCUT, recip_HCUT, XIO
b58e51ce4e Jean*0106
2192eec603 Mart*0107 _RL SurfMeltTemp
a676451ac2 Jean*0108
2192eec603 Mart*0109 _RL effConduct(1:sNx,1:sNy)
a676451ac2 Jean*0110
0111 _RL lhSublim
0112
0113 _RL t1, t2, t3, t4
9637aec598 Jean*0114
6e70381b89 Jean*0115
aa0478ba9b Jean*0116
a676451ac2 Jean*0117 _RL C1, C2, C3, C4, C5, QS1
6e70381b89 Jean*0118
a676451ac2 Jean*0119 _RL lnTEN
9637aec598 Jean*0120 _RL aa1,aa2,bb1,bb2,Ppascals,cc0,cc1,cc2,cc3t
0121
a676451ac2 Jean*0122 _RL mm_pi,mm_log10pi
9637aec598 Jean*0123
4dd39c50d9 Mart*0124
0125
be38bd5ad7 Jean*0126
aa0478ba9b Jean*0127
0128
a676451ac2 Jean*0129
6e70381b89 Jean*0130
0131
0132
4dd39c50d9 Mart*0133 _RL tempFrz (1:sNx,1:sNy)
aa0478ba9b Jean*0134 _RL F_c (1:sNx,1:sNy)
a676451ac2 Jean*0135 _RL F_lwu (1:sNx,1:sNy)
0136 _RL F_sens (1:sNx,1:sNy)
0137 _RL F_lh (1:sNx,1:sNy)
0138 _RL qhice (1:sNx,1:sNy)
6e70381b89 Jean*0139 _RL dqh_dTs (1:sNx,1:sNy)
aa0478ba9b Jean*0140 _RL dFia_dTs (1:sNx,1:sNy)
a676451ac2 Jean*0141 _RL absorbedSW (1:sNx,1:sNy)
0142 _RL penetSWFrac
112191cc93 Jean*0143 _RL delTsurf
136908bfac Ian *0144
a676451ac2 Jean*0145
0146 _RL tsurfLoc (1:sNx,1:sNy)
112191cc93 Jean*0147 _RL tsurfPrev (1:sNx,1:sNy)
a676451ac2 Jean*0148 _RL atempLoc (1:sNx,1:sNy)
0149 _RL lwdownLoc (1:sNx,1:sNy)
0150 _RL ALB (1:sNx,1:sNy)
0151 _RL ALB_ICE (1:sNx,1:sNy)
0152 _RL ALB_SNOW (1:sNx,1:sNy)
0153
0154 LOGICAL iceOrNot(1:sNx,1:sNy)
7c50f07931 Mart*0155 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0156
0157 INTEGER ikey
7c50f07931 Mart*0158 #endif
a676451ac2 Jean*0159 #ifdef SEAICE_DEBUG
0160 #endif /* SEAICE_DEBUG */
0161
0162
9637aec598 Jean*0163
6d55e2b45a Mart*0164 #ifdef ALLOW_AUTODIFF_TAMC
1574069d50 Mart*0165
0166
0167
edb6656069 Mart*0168
6d55e2b45a Mart*0169 #endif /* ALLOW_AUTODIFF_TAMC */
0170
6e70381b89 Jean*0171
2192eec603 Mart*0172 C1= 2.7798202 _d -06
0173 C2= -2.6913393 _d -03
0174 C3= 0.97920849 _d +00
0175 C4= -158.63779 _d +00
0176 C5= 9653.1925 _d +00
9637aec598 Jean*0177 QS1=0.622 _d +00/1013.0 _d +00
6e70381b89 Jean*0178
a676451ac2 Jean*0179 lnTEN = LOG(10.0 _d 0)
9637aec598 Jean*0180 aa1 = 2663.5 _d 0
0181 aa2 = 12.537 _d 0
0182 bb1 = 0.622 _d 0
2192eec603 Mart*0183 bb2 = 1.0 _d 0 - bb1
9637aec598 Jean*0184 Ppascals = 100000. _d 0
2192eec603 Mart*0185
a676451ac2 Jean*0186 cc0 = EXP(aa2*lnTEN)
2192eec603 Mart*0187 cc1 = cc0*aa1*bb1*Ppascals*lnTEN
9637aec598 Jean*0188 cc2 = cc0*bb2
0189
0320e25227 Mart*0190 IF ( usingPCoords ) THEN
840c7fba30 Gael*0191 kSurface = Nr
0192 ELSE
0193 kSurface = 1
0194 ENDIF
9637aec598 Jean*0195
0196
fff6be1885 Mart*0197 D1=SEAICE_dalton*SEAICE_cpAir*SEAICE_rhoAir
9637aec598 Jean*0198
0199
136908bfac Ian *0200 lhSublim = SEAICE_lhEvap + SEAICE_lhFusion
0201 D1I=SEAICE_dalton*lhSublim*SEAICE_rhoAir
9637aec598 Jean*0202
0203
2192eec603 Mart*0204 TMELT = celsius2K
9637aec598 Jean*0205
0206
0207 XKI=SEAICE_iceConduct
0208
0209
0210 XKS=SEAICE_snowConduct
0211
0212
a676451ac2 Jean*0213
0214
0215 HCUT = SEAICE_snowThick
28e63a2c6a Jean*0216 recip_HCUT = 0. _d 0
0217 IF ( HCUT.GT.0. _d 0 ) recip_HCUT = 1. _d 0 / HCUT
9637aec598 Jean*0218
0219
0220 XIO=SEAICE_shortwave
0221
b58e51ce4e Jean*0222
0223 SurfMeltTemp = TMELT + SEAICE_wetAlbTemp
6e70381b89 Jean*0224
0225
0226
0227
c68247b0e4 Jean*0228
9637aec598 Jean*0229 DO J=1,sNy
2192eec603 Mart*0230 DO I=1,sNx
873b79f1c8 Jean*0231
0232 TSURFout (I,J) = TSURFin(I,J)
0233 F_ia (I,J) = 0. _d 0
4dd39c50d9 Mart*0234 F_ia_net (I,J) = 0. _d 0
0235 F_io_net (I,J) = 0. _d 0
873b79f1c8 Jean*0236 IcePenetSW(I,J)= 0. _d 0
0237 FWsublim (I,J) = 0. _d 0
2192eec603 Mart*0238
0239
0240
a676451ac2 Jean*0241 iceOrNot (I,J) = HICE_ACTUAL(I,J) .GT. 0. _d 0
0242 absorbedSW(I,J) = 0. _d 0
2192eec603 Mart*0243 qhice (I,J) = 0. _d 0
6e70381b89 Jean*0244 dqh_dTs (I,J) = 0. _d 0
69d8fa39b5 Mart*0245 F_lh (I,J) = 0. _d 0
2192eec603 Mart*0246 F_lwu (I,J) = 0. _d 0
0247 F_sens (I,J) = 0. _d 0
aa0478ba9b Jean*0248
f5282c5b03 Gael*0249 tsurfLoc (I,J) = TSURFin(I,J)
0250
aa0478ba9b Jean*0251 lwdownLoc(I,J) = MAX( MIN_LWDOWN, LWDOWN(I,J,bi,bj) )
6e70381b89 Jean*0252 atempLoc (I,J) = MAX( celsius2K+MIN_ATEMP, ATEMP(I,J,bi,bj) )
9637aec598 Jean*0253
840c7fba30 Gael*0254
0255 tempFrz(I,J) = SEAICE_dTempFrz_dS *salt(I,J,kSurface,bi,bj)
0256 & + SEAICE_tempFrz0 + celsius2K
28e63a2c6a Jean*0257
aa0478ba9b Jean*0258
0259
999f896fe3 Mart*0260 IF(HSNOW_ACTUAL(I,J).GT.0.0) THEN
a676451ac2 Jean*0261
999f896fe3 Mart*0262 D3(I,J)=SEAICE_snow_emiss*SEAICE_boltzmann
0263 #ifdef EXF_LWDOWN_WITH_EMISSIVITY
0264
aa0478ba9b Jean*0265 lwdownLoc(I,J) = SEAICE_snow_emiss*lwdownLoc(I,J)
999f896fe3 Mart*0266 #else /* use the old hard wired inconsistent value */
aa0478ba9b Jean*0267 lwdownLoc(I,J) = 0.97 _d 0*lwdownLoc(I,J)
999f896fe3 Mart*0268 #endif /* EXF_LWDOWN_WITH_EMISSIVITY */
0269 ELSE
a676451ac2 Jean*0270
999f896fe3 Mart*0271 D3(I,J)=SEAICE_ice_emiss*SEAICE_boltzmann
0272 #ifdef EXF_LWDOWN_WITH_EMISSIVITY
0273
aa0478ba9b Jean*0274 lwdownLoc(I,J) = SEAICE_ice_emiss*lwdownLoc(I,J)
999f896fe3 Mart*0275 #else /* use the old hard wired inconsistent value */
aa0478ba9b Jean*0276 lwdownLoc(I,J) = 0.97 _d 0*lwdownLoc(I,J)
999f896fe3 Mart*0277 #endif /* EXF_LWDOWN_WITH_EMISSIVITY */
0278 ENDIF
2192eec603 Mart*0279 ENDDO
9637aec598 Jean*0280 ENDDO
0281
0282 DO J=1,sNy
2192eec603 Mart*0283 DO I=1,sNx
9637aec598 Jean*0284
0285
2192eec603 Mart*0286 IF ( iceOrNot(I,J) ) THEN
4fecc0d4b4 Jean*0287
2192eec603 Mart*0288 IF ( YC(I,J,bi,bj) .LT. 0.0 _d 0 ) THEN
0289 IF (tsurfLoc(I,J) .GE. SurfMeltTemp) THEN
0290 ALB_ICE (I,J) = SEAICE_wetIceAlb_south
0291 ALB_SNOW(I,J) = SEAICE_wetSnowAlb_south
0292 ELSE
0293 ALB_ICE (I,J) = SEAICE_dryIceAlb_south
0294 ALB_SNOW(I,J) = SEAICE_drySnowAlb_south
0295 ENDIF
0296 ELSE
0297 IF (tsurfLoc(I,J) .GE. SurfMeltTemp) THEN
0298 ALB_ICE (I,J) = SEAICE_wetIceAlb
0299 ALB_SNOW(I,J) = SEAICE_wetSnowAlb
0300 ELSE
0301 ALB_ICE (I,J) = SEAICE_dryIceAlb
0302 ALB_SNOW(I,J) = SEAICE_drySnowAlb
0303 ENDIF
0304 ENDIF
9637aec598 Jean*0305
a676451ac2 Jean*0306
2192eec603 Mart*0307 IF (HSNOW_ACTUAL(I,J) .GT. HCUT) THEN
0308 ALB(I,J) = ALB_SNOW(I,J)
a676451ac2 Jean*0309 ELSEIF ( HCUT.LE.ZERO ) THEN
0310 ALB(I,J) = ALB_ICE(I,J)
2192eec603 Mart*0311 ELSE
a676451ac2 Jean*0312
9b4e2be4e7 Mart*0313 ALB(I,J) = MIN( ALB_ICE(I,J) + HSNOW_ACTUAL(I,J)*recip_HCUT
a676451ac2 Jean*0314 & *(ALB_SNOW(I,J) -ALB_ICE(I,J))
0315 & , ALB_SNOW(I,J) )
2192eec603 Mart*0316 ENDIF
9637aec598 Jean*0317
a676451ac2 Jean*0318
0319
0320
2192eec603 Mart*0321 IF (HSNOW_ACTUAL(I,J) .GT. 0.0 _d 0) THEN
a676451ac2 Jean*0322 penetSWFrac = 0.0 _d 0
2192eec603 Mart*0323 ELSE
a676451ac2 Jean*0324 penetSWFrac = XIO*EXP(-1.5 _d 0 * HICE_ACTUAL(I,J))
2192eec603 Mart*0325 ENDIF
a676451ac2 Jean*0326
0327 IcePenetSW(I,J) = -(1.0 _d 0 - ALB(I,J))
0328 & *penetSWFrac * SWDOWN(I,J,bi,bj)
0329
0330 absorbedSW(I,J) = (1.0 _d 0 - ALB(I,J))
0331 & *(1.0 _d 0 - penetSWFrac)* SWDOWN(I,J,bi,bj)
9637aec598 Jean*0332
6e70381b89 Jean*0333
aa0478ba9b Jean*0334
a676451ac2 Jean*0335
0336
0337
2192eec603 Mart*0338 effConduct(I,J) = XKI * XKS /
a676451ac2 Jean*0339 & (XKS * HICE_ACTUAL(I,J) + XKI * HSNOW_ACTUAL(I,J))
9637aec598 Jean*0340
0341 #ifdef SEAICE_DEBUG
a676451ac2 Jean*0342 IF ( (I .EQ. SEAICE_debugPointI) .AND.
52ff14d141 Ian *0343 & (J .EQ. SEAICE_debugPointJ) ) THEN
2192eec603 Mart*0344 print '(A,i6)','-----------------------------------'
0345 print '(A,i6)','ibi merged initialization ', myIter
0346 print '(A,i6,4(1x,D24.15))',
0347 & 'ibi iter, TSL, TS ',myIter,
f5282c5b03 Gael*0348 & tsurfLoc(I,J), TSURFin(I,J)
2192eec603 Mart*0349 print '(A,i6,4(1x,D24.15))',
0350 & 'ibi iter, TMELT ',myIter,TMELT
0351 print '(A,i6,4(1x,D24.15))',
0352 & 'ibi iter, HIA, EFKCON ',myIter,
0353 & HICE_ACTUAL(I,J), effConduct(I,J)
0354 print '(A,i6,4(1x,D24.15))',
0355 & 'ibi iter, HSNOW ',myIter,
0356 & HSNOW_ACTUAL(I,J), ALB(I,J)
0357 print '(A,i6)','-----------------------------------'
0358 print '(A,i6)','ibi energy balance iterat ', myIter
0359 ENDIF
300dea8deb Jean*0360 #endif /* SEAICE_DEBUG */
4fecc0d4b4 Jean*0361
2192eec603 Mart*0362 ENDIF
0363 ENDDO
0364 ENDDO
a676451ac2 Jean*0365
0366
2192eec603 Mart*0367 DO ITER=1,IMAX_TICE
16b9a002a2 Mart*0368 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0369 ikey = ITER
0370
16b9a002a2 Mart*0371 #endif
2192eec603 Mart*0372 DO J=1,sNy
0373 DO I=1,sNx
6d55e2b45a Mart*0374
112191cc93 Jean*0375
0376 tsurfPrev(I,J) = tsurfLoc(I,J)
2192eec603 Mart*0377 IF ( iceOrNot(I,J) ) THEN
9637aec598 Jean*0378
2192eec603 Mart*0379 t1 = tsurfLoc(I,J)
0380 t2 = t1*t1
0381 t3 = t2*t1
0382 t4 = t2*t2
9637aec598 Jean*0383
6e70381b89 Jean*0384
112191cc93 Jean*0385 IF ( useMaykutSatVapPoly ) THEN
6e70381b89 Jean*0386
112191cc93 Jean*0387 qhice(I,J)=QS1*(C1*t4+C2*t3 +C3*t2+C4*t1+C5)
0388 dqh_dTs(I,J) = 0. _d 0
0389 ELSE
6e70381b89 Jean*0390
2192eec603 Mart*0391
112191cc93 Jean*0392 mm_log10pi = -aa1 / t1 + aa2
2192eec603 Mart*0393
0394
112191cc93 Jean*0395
4fecc0d4b4 Jean*0396
112191cc93 Jean*0397 mm_pi = EXP(mm_log10pi*lnTEN)
0398 qhice(I,J) = bb1*mm_pi/( Ppascals -(1.0 _d 0 - bb1)*mm_pi )
a676451ac2 Jean*0399
112191cc93 Jean*0400
a676451ac2 Jean*0401
112191cc93 Jean*0402 cc3t = EXP(aa1 / t1 * lnTEN)
a676451ac2 Jean*0403
112191cc93 Jean*0404 dqh_dTs(I,J) = cc1*cc3t/((cc2-cc3t*Ppascals)**2 *t2)
0405 ENDIF
9637aec598 Jean*0406
69d8fa39b5 Mart*0407
16b9a002a2 Mart*0408 F_c(I,J) = effConduct(I,J)*(tempFrz(I,J)-t1)
69d8fa39b5 Mart*0409 F_lh(I,J) = D1I*UG(I,J)*(qhice(I,J)-AQH(I,J,bi,bj))
840c7fba30 Gael*0410 #ifdef SEAICE_CAP_SUBLIM
a676451ac2 Jean*0411
f208488703 Mart*0412
a676451ac2 Jean*0413 IF (F_lh(I,J) .GT. F_lh_max(I,J)) THEN
52ff14d141 Ian *0414 F_lh(I,J) = F_lh_max(I,J)
6e70381b89 Jean*0415 dqh_dTs(I,J) = ZERO
a676451ac2 Jean*0416 ENDIF
840c7fba30 Gael*0417 #endif /* SEAICE_CAP_SUBLIM */
52ff14d141 Ian *0418
a676451ac2 Jean*0419 F_lwu(I,J) = t4 * D3(I,J)
2192eec603 Mart*0420 F_sens(I,J)= D1 * UG(I,J) * (t1 - atempLoc(I,J))
a676451ac2 Jean*0421 F_ia(I,J) = -lwdownLoc(I,J) -absorbedSW(I,J) + F_lwu(I,J)
6e70381b89 Jean*0422 & + F_sens(I,J) + F_lh(I,J)
aa0478ba9b Jean*0423
0424 dFia_dTs(I,J) = 4.0 _d 0*D3(I,J)*t3 + D1*UG(I,J)
0425 & + D1I*UG(I,J)*dqh_dTs(I,J)
9637aec598 Jean*0426
0427 #ifdef SEAICE_DEBUG
a676451ac2 Jean*0428 IF ( (I .EQ. SEAICE_debugPointI) .AND.
52ff14d141 Ian *0429 & (J .EQ. SEAICE_debugPointJ) ) THEN
2192eec603 Mart*0430 print '(A,i6,4(1x,D24.15))',
0431 & 'ice-iter qhICE, ', ITER,qhIce(I,J)
0432 print '(A,i6,4(1x,D24.15))',
6e70381b89 Jean*0433 & 'ice-iter dFiDTs1 F_ia ', ITER,
0434 & dFia_dTs(I,J)+effConduct(I,J), F_ia(I,J)-F_c(I,J)
2192eec603 Mart*0435 ENDIF
300dea8deb Jean*0436 #endif /* SEAICE_DEBUG */
9637aec598 Jean*0437
aa0478ba9b Jean*0438
6e70381b89 Jean*0439 tsurfLoc(I,J) = tsurfLoc(I,J)
0440 & + ( F_c(I,J)-F_ia(I,J) ) / ( effConduct(I,J)+dFia_dTs(I,J) )
9637aec598 Jean*0441
16b9a002a2 Mart*0442 ENDIF
0443 ENDDO
0444 ENDDO
0445 IF ( useMaykutSatVapPoly ) THEN
aef1621d33 Patr*0446 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0447
16b9a002a2 Mart*0448 #endif
0449 DO J=1,sNy
0450 DO I=1,sNx
0451 tsurfLoc(I,J) = MAX( celsius2K+MIN_TICE, tsurfLoc(I,J) )
0452
0453
0454
aa0478ba9b Jean*0455
0456
0457
16b9a002a2 Mart*0458 ENDDO
0459 ENDDO
0460 ENDIF
0461 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0462
16b9a002a2 Mart*0463 #endif
0464 DO J=1,sNy
0465 DO I=1,sNx
0466 tsurfLoc(I,J) = MIN( tsurfLoc(I,J), TMELT )
9637aec598 Jean*0467
0468 #ifdef SEAICE_DEBUG
16b9a002a2 Mart*0469 IF ( (I .EQ. SEAICE_debugPointI) .AND.
0470 & (J .EQ. SEAICE_debugPointJ) ) THEN
0471 print '(A,i6,4(1x,D24.15))',
0472 & 'ice-iter tsurfLc,|dif|', ITER,
0473 & tsurfLoc(I,J),
0474 & LOG10(ABS(tsurfLoc(I,J) - tsurfPrev(I,J)))
0475 ENDIF
300dea8deb Jean*0476 #endif /* SEAICE_DEBUG */
9637aec598 Jean*0477
2192eec603 Mart*0478 ENDDO
0479 ENDDO
0480 ENDDO
a676451ac2 Jean*0481
0482
112191cc93 Jean*0483 #ifdef SEAICE_MODIFY_GROWTH_ADJ
0484
16b9a002a2 Mart*0485 IF ( SEAICEadjMODE.GE.2 ) THEN
0486 DO J=1,sNy
0487 DO I=1,sNx
0488 IF ( iceOrNot(I,J) ) THEN
f5282c5b03 Gael*0489 CALL ZERO_ADJ_1D( 1, TSURFin(I,J), myThid)
aa0478ba9b Jean*0490 absorbedSW(I,J) = 0.3 _d 0 *SWDOWN(I,J,bi,bj)
112191cc93 Jean*0491 IcePenetSW(I,J)= 0. _d 0
aa0478ba9b Jean*0492 ENDIF
16b9a002a2 Mart*0493 ENDIF
0494 ENDDO
0495 ENDDO
0496 IF ( postSolvTempIter.EQ.2 .OR. SEAICEadjMODE.GE.2 ) THEN
0497 DO J=1,sNy
0498 DO I=1,sNx
0499 IF ( iceOrNot(I,J) ) THEN
f5282c5b03 Gael*0500 t1 = TSURFin(I,J)
112191cc93 Jean*0501 #else /* SEAICE_MODIFY_GROWTH_ADJ */
16b9a002a2 Mart*0502 IF ( postSolvTempIter.EQ.2 ) THEN
0503 DO J=1,sNy
0504 DO I=1,sNx
0505 IF ( iceOrNot(I,J) ) THEN
2192eec603 Mart*0506
112191cc93 Jean*0507 t1 = tsurfLoc(I,J)
aa0478ba9b Jean*0508 #endif /* SEAICE_MODIFY_GROWTH_ADJ */
112191cc93 Jean*0509 t2 = t1*t1
0510 t3 = t2*t1
0511 t4 = t2*t2
9637aec598 Jean*0512
112191cc93 Jean*0513 IF ( useMaykutSatVapPoly ) THEN
0514 qhice(I,J)=QS1*(C1*t4+C2*t3 +C3*t2+C4*t1+C5)
0515 ELSE
2192eec603 Mart*0516
112191cc93 Jean*0517 mm_log10pi = -aa1 / t1 + aa2
2192eec603 Mart*0518
112191cc93 Jean*0519
4fecc0d4b4 Jean*0520
112191cc93 Jean*0521 mm_pi = EXP(mm_log10pi*lnTEN)
a676451ac2 Jean*0522
112191cc93 Jean*0523 qhice(I,J) = bb1*mm_pi/( Ppascals -(1.0 _d 0 - bb1)*mm_pi )
0524 ENDIF
840c7fba30 Gael*0525 F_c(I,J) = effConduct(I,J) * (tempFrz(I,J) - t1)
112191cc93 Jean*0526 F_lh(I,J) = D1I * UG(I,J)*(qhice(I,J)-AQH(I,J,bi,bj))
840c7fba30 Gael*0527 #ifdef SEAICE_CAP_SUBLIM
112191cc93 Jean*0528 IF (F_lh(I,J) .GT. F_lh_max(I,J)) THEN
52ff14d141 Ian *0529 F_lh(I,J) = F_lh_max(I,J)
112191cc93 Jean*0530 ENDIF
840c7fba30 Gael*0531 #endif /* SEAICE_CAP_SUBLIM */
112191cc93 Jean*0532 F_lwu(I,J) = t4 * D3(I,J)
0533 F_sens(I,J) = D1 * UG(I,J) * (t1 - atempLoc(I,J))
a676451ac2 Jean*0534
112191cc93 Jean*0535 F_ia(I,J) = -lwdownLoc(I,J) -absorbedSW(I,J) + F_lwu(I,J)
0536 & + F_sens(I,J) + F_lh(I,J)
9637aec598 Jean*0537
4dd39c50d9 Mart*0538
0539 IF (-F_c(I,J) .LT. ZERO) THEN
0540
0541 F_io_net(I,J) = F_c(I,J)
0542 F_ia_net(I,J) = ZERO
0543 ELSE
0544 F_io_net(I,J) = ZERO
0545 F_ia_net(I,J) = F_ia(I,J)
0546 ENDIF
0547
0548
16b9a002a2 Mart*0549 ENDIF
0550 ENDDO
0551 ENDDO
0552 ELSEIF ( postSolvTempIter.EQ.1 ) THEN
0553 DO J=1,sNy
0554 DO I=1,sNx
0555 IF ( iceOrNot(I,J) ) THEN
112191cc93 Jean*0556
0557 delTsurf = tsurfLoc(I,J)-tsurfPrev(I,J)
840c7fba30 Gael*0558 F_c(I,J) = effConduct(I,J)*(tempFrz(I,J)-tsurfLoc(I,J))
112191cc93 Jean*0559 F_ia(I,J) = F_ia(I,J) + dFia_dTs(I,J)*delTsurf
0560 F_lh(I,J) = F_lh(I,J)
0561 & + D1I*UG(I,J)*dqh_dTs(I,J)*delTsurf
aa0478ba9b Jean*0562
0563
112191cc93 Jean*0564
aa0478ba9b Jean*0565
a676451ac2 Jean*0566 ENDIF
16b9a002a2 Mart*0567 ENDDO
0568 ENDDO
0569 ENDIF
0570 DO J=1,sNy
0571 DO I=1,sNx
0572 IF ( iceOrNot(I,J) ) THEN
a676451ac2 Jean*0573
16b9a002a2 Mart*0574
0575 TSURFout(I,J) = tsurfLoc(I,J)
a676451ac2 Jean*0576
0577
0578
0579 FWsublim(I,J) = F_lh(I,J)/lhSublim
3a3bf6419a Gael*0580
a676451ac2 Jean*0581 #ifdef SEAICE_DEBUG
0582 IF ( (I .EQ. SEAICE_debugPointI) .AND.
52ff14d141 Ian *0583 & (J .EQ. SEAICE_debugPointJ) ) THEN
2192eec603 Mart*0584 print '(A)','----------------------------------------'
0585 print '(A,i6)','ibi complete ', myIter
0586 print '(A,4(1x,D24.15))',
0587 & 'ibi T(SURF, surfLoc,atmos) ',
f5282c5b03 Gael*0588 & TSURFout(I,J), tsurfLoc(I,J),atempLoc(I,J)
2192eec603 Mart*0589 print '(A,4(1x,D24.15))',
0590 & 'ibi LWL ', lwdownLoc(I,J)
0591 print '(A,4(1x,D24.15))',
0592 & 'ibi QSW(Total, Penetrating)',
a676451ac2 Jean*0593 & SWDOWN(I,J,bi,bj), IcePenetSW(I,J)
2192eec603 Mart*0594 print '(A,4(1x,D24.15))',
0595 & 'ibi qh(ATM ICE) ',
0596 & AQH(I,J,bi,bj),qhice(I,J)
52ff14d141 Ian *0597 print '(A,4(1x,D24.15))',
0598 & 'ibi F(lwd,swi,lwu) ',
a676451ac2 Jean*0599 & -lwdownLoc(I,J), -absorbedSW(I,J), F_lwu(I,J)
52ff14d141 Ian *0600 print '(A,4(1x,D24.15))',
0601 & 'ibi F(c,lh,sens) ',
0602 & F_c(I,J), F_lh(I,J), F_sens(I,J)
840c7fba30 Gael*0603 #ifdef SEAICE_CAP_SUBLIM
52ff14d141 Ian *0604 IF (F_lh_max(I,J) .GT. ZERO) THEN
0605 print '(A,4(1x,D24.15))',
0606 & 'ibi F_lh_max, F_lh/lhmax) ',
0607 & F_lh_max(I,J), F_lh(I,J)/ F_lh_max(I,J)
1043a55cc1 Jean*0608 ELSE
52ff14d141 Ian *0609 print '(A,4(1x,D24.15))',
0610 & 'ibi F_lh_max = ZERO! '
0611 ENDIF
0612 print '(A,4(1x,D24.15))',
0613 & 'ibi FWsub, FWsubm*dT/rhoI ',
0614 & FWsublim(I,J),
0615 & FWsublim(I,J)*SEAICE_deltaTtherm/SEAICE_rhoICE
840c7fba30 Gael*0616 #endif /* SEAICE_CAP_SUBLIM */
2192eec603 Mart*0617 print '(A,4(1x,D24.15))',
0618 & 'ibi F_ia, F_ia_net, F_c ',
4dd39c50d9 Mart*0619 & F_ia(I,J), F_ia_net(I,J), F_c(I,J)
2192eec603 Mart*0620 print '(A)','----------------------------------------'
0621 ENDIF
300dea8deb Jean*0622 #endif /* SEAICE_DEBUG */
4fecc0d4b4 Jean*0623
2192eec603 Mart*0624 ENDIF
0625 ENDDO
9637aec598 Jean*0626 ENDDO
0627
1043a55cc1 Jean*0628 #endif /* ALLOW_ATM_TEMP && ALLOW_DOWNWARD_RADIATION */
0629 RETURN
9637aec598 Jean*0630 END