File indexing completed on 2024-06-06 05:11:10 UTC
view on githubraw file Latest commit af61e5eb on 2024-06-06 03:30:35 UTC
dc54d31829 Ian *0001 #include "SEAICE_OPTIONS.h"
0002 #ifdef ALLOW_EXF
0003 # include "EXF_OPTIONS.h"
0004 #endif
0005 #ifdef ALLOW_SALT_PLUME
0006 # include "SALT_PLUME_OPTIONS.h"
0007 #endif
0008 #ifdef ALLOW_AUTODIFF
0009 # include "AUTODIFF_OPTIONS.h"
0010 #endif
0011
2383f7d4e9 Mart*0012 #undef SEAICE_GROWTH_ADX_STORE_MORE
0013
dc54d31829 Ian *0014
0015
0016
4dd39c50d9 Mart*0017 SUBROUTINE SEAICE_GROWTH_ADX( myTime, myIter, myThid )
dc54d31829 Ian *0018
0019
0020
4dd39c50d9 Mart*0021
0022
dc54d31829 Ian *0023
0024
0025
0026
0027
0028 IMPLICIT NONE
0029
0030 #include "SIZE.h"
0031 #include "EEPARAMS.h"
0032 #include "PARAMS.h"
0033 #include "DYNVARS.h"
0034 #include "GRID.h"
0035 #include "FFIELDS.h"
0036 #include "SEAICE_SIZE.h"
0037 #include "SEAICE_PARAMS.h"
0038 #include "SEAICE.h"
0039 #include "SEAICE_TRACER.h"
0040 #ifdef ALLOW_EXF
0041 # include "EXF_PARAM.h"
0042 # include "EXF_FIELDS.h"
0043 #endif
0044 #ifdef ALLOW_SALT_PLUME
0045 # include "SALT_PLUME.h"
0046 #endif
0047 #ifdef ALLOW_AUTODIFF_TAMC
0048 # include "tamc.h"
0049 #endif
0050
0051
0052
0053
0054
0055
0056 _RL myTime
0057 INTEGER myIter, myThid
0058
0059
5337b47ce7 Jean*0060 #ifdef SEAICE_USE_GROWTH_ADX
dc54d31829 Ian *0061 #if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP)
0062
0063 #ifdef ALLOW_DIAGNOSTICS
0064 LOGICAL DIAGNOSTICS_IS_ON
0065 EXTERNAL DIAGNOSTICS_IS_ON
0066 #endif
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079 INTEGER i, j, bi, bj
0080
0081 INTEGER kSurface
0082
0083 INTEGER IT
0084
914da317ef jm-c 0085
dc54d31829 Ian *0086
0087 _RL tempFrz, ICE2SNOW, SNOW2ICE, surf_theta
914da317ef jm-c 0088 _RL QI, QS
dc54d31829 Ian *0089 _RL lhSublim
0090
0091
0092 _RL area_reg_sq, hice_reg_sq
0093
0094
0095 _RL heffTooHeavy
0096
0097
0098 _RL recip_multDim
0099 _RL recip_deltaTtherm
0100 _RL recip_rhoIce
4dd39c50d9 Mart*0101 _RL recip_QI
0102 _RL recip_QS
0103 _RL recip_HO
0104 _RL recip_HO_south
0105 _RL rhoFresh2rhoSnow
0106 _RL rhoSnow2rhoFresh
0107 _RL rhoIce2rhoFresh
dc54d31829 Ian *0108
0109
0110 _RL pFac, pFacSnow
0111
0112
914da317ef jm-c 0113 _RL tmpscal0, tmpscal1, tmpscal2, tmpscal3
dc54d31829 Ian *0114
7c50f07931 Mart*0115 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0116
0117 INTEGER tkey
7c50f07931 Mart*0118 #endif
0119
dc54d31829 Ian *0120
0121
0122 _RL TmixLoc (1:sNx,1:sNy)
0123
0124
0125 _RL hiceActual (1:sNx,1:sNy)
0126
0127 _RL hsnowActual (1:sNx,1:sNy)
0128
0129 _RL recip_hiceActual (1:sNx,1:sNy)
0130
0131
0132 _RL AREApreTH (1:sNx,1:sNy)
0133 _RL HEFFpreTH (1:sNx,1:sNy)
0134 _RL HSNWpreTH (1:sNx,1:sNy)
0135
0136
0137 _RL UG (1:sNx,1:sNy)
0138
0139
0140 _RL ticeInMult (1:sNx,1:sNy,nITD)
0141 _RL ticeOutMult (1:sNx,1:sNy,nITD)
0142 _RL hiceActualMult (1:sNx,1:sNy,nITD)
0143 _RL hsnowActualMult (1:sNx,1:sNy,nITD)
0144
0145 _RL F_io_net_mult (1:sNx,1:sNy,nITD)
0146 _RL F_ia_net_mult (1:sNx,1:sNy,nITD)
0147 _RL F_ia_mult (1:sNx,1:sNy,nITD)
0148 _RL QSWI_mult (1:sNx,1:sNy,nITD)
a4e168e012 antn*0149
0150
0151
0152
dc54d31829 Ian *0153 _RL FWsublim_mult (1:sNx,1:sNy,nITD)
a4e168e012 antn*0154 _RL FWsublim (1:sNx,1:sNy)
dc54d31829 Ian *0155
0156 #ifdef ALLOW_SALT_PLUME
0157
0158 _RL IceGrowthRateInLeads (1:sNx,1:sNy)
0159
0160
0161
0162 _RL leadPlumeFraction (1:sNx,1:sNy)
0163 #endif
0164
0165 _RL QSWO_BELOW_FIRST_LAYER (1:sNx,1:sNy)
0166 _RL QSWO_IN_FIRST_LAYER (1:sNx,1:sNy)
0167 _RL QSWO (1:sNx,1:sNy)
0168 _RL QSWI (1:sNx,1:sNy)
0169
0170
0171 _RL ActualNewTotalVolumeChange (1:sNx,1:sNy)
0172 _RL ActualNewTotalSnowMelt (1:sNx,1:sNy)
0173
0174 _RL NetExistingIceGrowthRate (1:sNx,1:sNy)
0175 _RL IceGrowthRateUnderExistingIce (1:sNx,1:sNy)
0176 _RL IceGrowthRateFromSurface (1:sNx,1:sNy)
0177 _RL IceGrowthRateOpenWater (1:sNx,1:sNy)
0178 _RL IceGrowthRateMixedLayer (1:sNx,1:sNy)
0179
0180 _RL EnergyInNewTotalIceVolume (1:sNx,1:sNy)
0181 _RL NetEnergyFluxOutOfOcean (1:sNx,1:sNy)
0182
d73d15cdef antn*0183 #ifdef ALLOW_DIAGNOSTICS
a4e168e012 antn*0184
4dd39c50d9 Mart*0185 _RL SItflux (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
a4e168e012 antn*0186 _RL SIeprflx (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
4dd39c50d9 Mart*0187 _RL SIatmFW (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
d73d15cdef antn*0188 #endif
dc54d31829 Ian *0189
0190
4dd39c50d9 Mart*0191 _RL SIheffNeg (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0192 _RL SIhsnwNeg (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
dc54d31829 Ian *0193
d73d15cdef antn*0194 _RL d_HEFFbyFLOODING (1:sNx,1:sNy)
dc54d31829 Ian *0195
0196
0197
0198 _RL ResidualEnergyOutOfOcean (1:sNx,1:sNy)
0199
0200
0201 _RL SnowAccRateOverIce (1:sNx,1:sNy)
0202
0203
0204 _RL SnowAccOverIce (1:sNx,1:sNy)
0205
0206
0207 _RL PrecipRateOverIceSurfaceToSea (1:sNx,1:sNy)
0208
0209
0210
0211 _RL PotSnowMeltRateFromSurf (1:sNx,1:sNy)
0212
0213
0214
0215 _RL PotSnowMeltFromSurf (1:sNx,1:sNy)
0216
0217
0218 _RL SnowMeltRateFromSurface (1:sNx,1:sNy)
0219
0220
0221 _RL SurfHeatFluxConvergToSnowMelt (1:sNx,1:sNy)
0222
0223
0224
0225 _RL SnowMeltFromSurface (1:sNx,1:sNy)
0226
0227
0228 _RL FreshwaterContribFromSnowMelt (1:sNx,1:sNy)
0229
0230
0231 _RL FreshwaterContribFromIce (1:sNx,1:sNy)
0232
0233
0234 _RL S_a (1:sNx,1:sNy)
0235
0236
0237 _RL S_h (1:sNx,1:sNy)
0238
0239
0240 _RL S_hsnow (1:sNx,1:sNy)
0241
0242
0243
0244
0245 _RL F_ia (1:sNx,1:sNy)
0246
0247
0248
0249
0250
0251
0252
0253 _RL F_ia_net (1:sNx,1:sNy)
0254
0255
0256
0257
0258 _RL F_ia_net_before_snow (1:sNx,1:sNy)
0259
0260
0261
0262
0263
0264
0265 _RL F_io_net (1:sNx,1:sNy)
0266
0267
0268
0269 _RL F_ao (1:sNx,1:sNy)
0270
0271
0272 _RL F_mi (1:sNx,1:sNy)
0273
0274
0275 _RL S_a_IGROW (1:sNx,1:sNy)
0276
0277
0278 _RL S_a_IGRML (1:sNx,1:sNy)
0279
0280
0281 _RL S_a_IGRNE (1:sNx,1:sNy)
0282
0283
0284
4dd39c50d9 Mart*0285 _RL MLTF
dc54d31829 Ian *0286
0287
0288
0289
0290
0291
0292
0320e25227 Mart*0293 IF ( usingPCoords ) THEN
dc54d31829 Ian *0294 kSurface = Nr
0295 ELSE
0296 kSurface = 1
0297 ENDIF
0298
0299
0300 heffTooHeavy=drF(kSurface) / 5. _d 0
0320e25227 Mart*0301 IF ( usingPCoords )
0302 & heffTooHeavy = heffTooHeavy * recip_rhoConst * recip_gravity
dc54d31829 Ian *0303
0304
0305 ICE2SNOW = SEAICE_rhoIce/SEAICE_rhoSnow
0306 SNOW2ICE = ONE / ICE2SNOW
0307
0308
0309 QI = ONE/(SEAICE_rhoIce*SEAICE_lhFusion)
0310
0311 QS = ONE/(SEAICE_rhoSnow*SEAICE_lhFusion)
0312
0313
0314 lhSublim = SEAICE_lhEvap + SEAICE_lhFusion
0315
4dd39c50d9 Mart*0316
0317 recip_multDim = SEAICE_multDim
0318 recip_multDim = ONE / recip_multDim
0319
0320
0321 recip_deltaTtherm = ONE / SEAICE_deltaTtherm
0322 recip_rhoIce = ONE / SEAICE_rhoIce
0323 recip_QI = ONE / QI
0324 recip_QS = ONE / QS
0325 recip_HO = ONE / HO
0326 recip_HO_south = ONE / HO_south
0327 rhoFresh2rhoSnow = rhoConstFresh / SEAICE_rhoSnow
0328 rhoSnow2rhoFresh = ONE / rhoFresh2rhoSnow
0329 rhoIce2rhoFresh = SEAICE_rhoIce / rhoConstFresh
0330
dc54d31829 Ian *0331
0332 area_reg_sq = SEAICE_area_reg * SEAICE_area_reg
0333 hice_reg_sq = SEAICE_hice_reg * SEAICE_hice_reg
0334
0335
0336 DO bj=myByLo(myThid),myByHi(myThid)
0337 DO bi=myBxLo(myThid),myBxHi(myThid)
0338
0339 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0340 tkey = bi + (bj-1)*nSx + (ikey_dynamics-1)*nSx*nSy
4dd39c50d9 Mart*0341
edb6656069 Mart*0342
0343
0344
0345
0346
0347
2383f7d4e9 Mart*0348
0349 #endif
dc54d31829 Ian *0350
0351
0352
0353
0354 DO J=1,sNy
0355 DO I=1,sNx
0356
0357
0358 NetExistingIceGrowthRate(I,J) = 0.0 _d 0
0359 IceGrowthRateOpenWater(I,J) = 0.0 _d 0
0360 IceGrowthRateFromSurface(I,J) = 0.0 _d 0
0361 IceGrowthRateMixedLayer(I,J) = 0.0 _d 0
0362
0363 EnergyInNewTotalIceVolume(I,J) = 0.0 _d 0
0364 NetEnergyFluxOutOfOcean(I,J) = 0.0 _d 0
0365 ResidualEnergyOutOfOcean(I,J) = 0.0 _d 0
0366
0367 PrecipRateOverIceSurfaceToSea(I,J) = 0.0 _d 0
0368
0369 DO IT=1,SEAICE_multDim
0370 ticeInMult(I,J,IT) = 0.0 _d 0
0371 ticeOutMult(I,J,IT) = 0.0 _d 0
0372
0373 F_io_net_mult(I,J,IT) = 0.0 _d 0
0374 F_ia_net_mult(I,J,IT) = 0.0 _d 0
0375 F_ia_mult(I,J,IT) = 0.0 _d 0
0376
0377 QSWI_mult(I,J,IT) = 0.0 _d 0
0378 FWsublim_mult(I,J,IT) = 0.0 _d 0
0379 ENDDO
0380
0381 F_io_net(I,J) = 0.0 _d 0
0382 F_ia_net(I,J) = 0.0 _d 0
0383 F_ia(I,J) = 0.0 _d 0
0384
0385 QSWI(I,J) = 0.0 _d 0
0386 FWsublim(I,J) = 0.0 _d 0
0387
0388 QSWO_BELOW_FIRST_LAYER (I,J) = 0.0 _d 0
0389 QSWO_IN_FIRST_LAYER (I,J) = 0.0 _d 0
0390 QSWO(I,J) = 0.0 _d 0
0391
0392 ActualNewTotalVolumeChange(I,J) = 0.0 _d 0
0393 ActualNewTotalSnowMelt(I,J) = 0.0 _d 0
0394
0395 SnowAccOverIce(I,J) = 0.0 _d 0
0396 SnowAccRateOverIce(I,J) = 0.0 _d 0
0397
0398 PotSnowMeltRateFromSurf(I,J) = 0.0 _d 0
0399 PotSnowMeltFromSurf(I,J) = 0.0 _d 0
0400 SnowMeltRateFromSurface(I,J) = 0.0 _d 0
0401 SurfHeatFluxConvergToSnowMelt(I,J) = 0.0 _d 0
0402 SnowMeltFromSurface(I,J) = 0.0 _d 0
0403
0404 FreshwaterContribFromSnowMelt(I,J) = 0.0 _d 0
0405 FreshwaterContribFromIce(I,J) = 0.0 _d 0
0406
0407 S_a(I,J) = 0.0 _d 0
0408 S_a_IGROW(I,J) = 0.0 _d 0
0409 S_a_IGRML(I,J) = 0.0 _d 0
0410 S_a_IGRNE(I,J) = 0.0 _d 0
0411
0412 S_h(I,J) = 0.0 _d 0
0413 S_hsnow(I,J) = 0.0 _d 0
0414
d73d15cdef antn*0415 d_HEFFbyFLOODING(I,J) = 0.0 _d 0
dc54d31829 Ian *0416 #ifdef ALLOW_SALT_PLUME
0417 IceGrowthRateInLeads (I,J) = 0. _d 0
0418 leadPlumeFraction (I,J) = 0. _d 0
0419 saltPlumeFlux (I,J,bi,bj) = 0. _d 0
0420 #endif
af61e5eb16 Mart*0421 #ifdef ALLOW_DIAGNOSTICS
a4e168e012 antn*0422 SIeprflx(I,J,bi,bj) = 0. _d 0
af61e5eb16 Mart*0423 #endif
dc54d31829 Ian *0424 ENDDO
0425 ENDDO
0426
0427
0428
0429
0430
0431
0432 DO J=1,sNy
0433 DO I=1,sNx
0434 SIheffNeg(I,J,bi,bj)=d_HEFFbyNEG(I,J,bi,bj)*SINegFac
0435 SIhsnwNeg(I,J,bi,bj)=d_HSNWbyNEG(I,J,bi,bj)*SINegFac
0436 ENDDO
0437 ENDDO
0438
0439 DO J=1,sNy
0440 DO I=1,sNx
0441
4dd39c50d9 Mart*0442 tmpscal0 = HEFF(I,J,bi,bj)
0443 HEFF(I,J,bi,bj) = MAX(ZERO, tmpscal0)
0444 tmpscal1 = AREA(I,J,bi,bj)
0445 AREA(I,J,bi,bj) = MAX(ZERO, tmpscal1)
dc54d31829 Ian *0446
0447 IF (HEFF(I,J,bi,bj) .LE. ZERO) then
0448 AREA(I,J, bi,bj) = ZERO
0449 HSNOW(I,J, bi,bj) = ZERO
0450 ELSEIF (AREA(I,J,bi,bj) .LE. ZERO) then
0451 HEFF(I,J,bi,bj) = ZERO
0452 HSNOW(I,J,bi,bj) = ZERO
0453 ENDIF
0454
0455 HEFFpreTH(I,J) = HEFF(I,J,bi,bj)
0456 HSNWpreTH(I,J) = HSNOW(I,J,bi,bj)
0457 AREApreTH(I,J) = AREA(I,J,bi,bj)
0458
0459 ENDDO
0460 ENDDO
0461
0462 #ifdef ALLOW_DIAGNOSTICS
0463 IF ( useDiagnostics ) THEN
d73d15cdef antn*0464 CALL DIAGNOSTICS_FILL(AREA, 'SIareaPT',0,1,1,bi,bj,myThid)
0465 CALL DIAGNOSTICS_FILL(HEFF, 'SIheffPT',0,1,1,bi,bj,myThid)
0466 CALL DIAGNOSTICS_FILL(HSNOW,'SIhsnoPT',0,1,1,bi,bj,myThid)
dc54d31829 Ian *0467 ENDIF
0468 #endif /* ALLOW_DIAGNOSTICS */
0469
2383f7d4e9 Mart*0470 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_GROWTH_ADX_STORE_MORE)
dc54d31829 Ian *0471
edb6656069 Mart*0472
0473
0474
dc54d31829 Ian *0475
2383f7d4e9 Mart*0476 #endif /* ALLOW_AUTODIFF_TAMC */
dc54d31829 Ian *0477
0478
0479
0480
0481 DO J=1,sNy
0482 DO I=1,sNx
0483 IF (HEFFpreTH(I,J) .GT. ZERO) THEN
0484
0485 tmpscal1 = SQRT(AREApreTH(I,J)* AREApreTH(I,J) + area_reg_sq)
0486
0487
0488 tmpscal2 = HEFFpreTH(I,J) / tmpscal1
0489
0490
0491
0492 hiceActual(I,J) = MAX(0.05 _d 0, tmpscal2)
0493
0494
0495
4dd39c50d9 Mart*0496
dc54d31829 Ian *0497 hsnowActual(I,J) = HSNWpreTH(I,J) / AREApreTH(I,J)
0498
0499
0500 recip_hiceActual(I,J) = AREApreTH(I,J) /
0501 & sqrt(HEFFpreTH(I,J)*HEFFpreTH(I,J) + hice_reg_sq)
0502
0503
0504 ELSE
0505 hiceActual (I,J) = ZERO
0506 hsnowActual(I,J) = ZERO
0507 recip_hiceActual(I,J) = ZERO
0508 ENDIF
0509
0510 ENDDO
0511 ENDDO
0512
0513
0514
0515
0516
0517 DO J=1,sNy
0518 DO I=1,sNx
0519
0520
0521 IF (( AREApreTH(I,J) .GT. ZERO) .AND.
0522 & ( TICES(I,J,1,bi,bj) .LT. celsius2k) ) THEN
0523
0524
0525 IF ( snowPrecipFile .NE. ' ' ) THEN
0526
0527
4dd39c50d9 Mart*0528 SnowAccRateOverIce(I,J) = rhoFresh2rhoSnow *
dc54d31829 Ian *0529 & snowPrecip(i,j,bi,bj)
0530
0531 ELSE
4dd39c50d9 Mart*0532 SnowAccRateOverIce(I,J) = rhoFresh2rhoSnow *
dc54d31829 Ian *0533 & PRECIP(i,j,bi,bj)
0534
0535 ENDIF
0536
0537 PrecipRateOverIceSurfaceToSea(I,J) = ZERO
0538
0539 ELSE
0540
0541
0542 SnowAccRateOverIce(I,J) = ZERO
0543 PrecipRateOverIceSurfaceToSea(I,J) = PRECIP(i,j,bi,bj)
0544 ENDIF
0545
0546
0547
0548 SnowAccOverIce(I,J) =
0549 & SnowAccRateOverIce(I,J) * SEAICE_deltaTtherm * AREApreTH(I,J)
0550
0551
0552 ENDDO
0553 ENDDO
0554
0555
0556
0557
0558
0559 DO j=1,sNy
0560 DO i=1,sNx
0561
0562 TmixLoc(i,j) = theta(i,j,kSurface,bi,bj) + celsius2K
0563
0564 UG(I,J) = MAX(SEAICE_EPS, wspeed(I,J,bi,bj))
0565 ENDDO
0566 ENDDO
2383f7d4e9 Mart*0567 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_GROWTH_ADX_STORE_MORE)
0568
edb6656069 Mart*0569
0570
2383f7d4e9 Mart*0571
edb6656069 Mart*0572
2383f7d4e9 Mart*0573
0574 #endif /* ALLOW_AUTODIFF_TAMC */
dc54d31829 Ian *0575
0576
0577
0578
0579
0580 CALL SEAICE_BUDGET_OCEAN(
0581 I UG,
0582 I TmixLoc,
0583 O F_ao, QSWO,
0584 I bi, bj, myTime, myIter, myThid )
0585
2383f7d4e9 Mart*0586 #if (
0587
0588
0589
edb6656069 Mart*0590
0591
2383f7d4e9 Mart*0592
0593 #endif
dc54d31829 Ian *0594
0595
0596
0597
8e32c48b8f Mart*0598
0599
0600
0601
0602
0603
dc54d31829 Ian *0604 DO J=1,sNy
0605 DO I=1,sNx
0606
0607
0608
0609 #ifdef SHORTWAVE_HEATING
8e32c48b8f Mart*0610 QSWO_BELOW_FIRST_LAYER(I,J)= QSWO(I,J)*SEAICE_SWFrac
0611 QSWO_IN_FIRST_LAYER(I,J) = QSWO(I,J)*(ONE - SEAICE_SWFrac)
dc54d31829 Ian *0612 #else
0613 QSWO_BELOW_FIRST_LAYER(I,J)= ZERO
0614 QSWO_IN_FIRST_LAYER(I,J) = ZERO
0615 #endif
0616 IceGrowthRateOpenWater(I,J) = QI *
0617 & (F_ao(I,J) - QSWO(I,J) + QSWO_IN_FIRST_LAYER(I,J))
0618
0619 ENDDO
0620 ENDDO
0621
0622 #ifdef ALLOW_AUTODIFF_TAMC
2383f7d4e9 Mart*0623
4dd39c50d9 Mart*0624
edb6656069 Mart*0625
dc54d31829 Ian *0626
2383f7d4e9 Mart*0627 #endif /* ALLOW_AUTODIFF_TAMC */
dc54d31829 Ian *0628
0629
0630
0631
0632
0633
0634
0635 DO IT=1,SEAICE_multDim
0636
0637 DO J=1,sNy
0638 DO I=1,sNx
0639
0640 ticeInMult(I,J,IT) = TICES(I,J,IT,bi,bj)
0641 ticeOutMult(I,J,IT) = TICES(I,J,IT,bi,bj)
0642 TICES(I,J,IT,bi,bj) = ZERO
0643 ENDDO
0644 ENDDO
0645
0646
0647 pFac = (2.0 _d 0*IT - 1.0 _d 0)*recip_multDim
0648 pFacSnow = 1. _d 0
0649
0650
0651 IF ( SEAICE_useMultDimSnow ) pFacSnow=pFac
0652
0653 DO J=1,sNy
0654 DO I=1,sNx
0655 hiceActualMult(I,J,IT) = hiceActual(I,J) *pFac
0656 hsnowActualMult(I,J,IT) = hsnowActual(I,J)*pFacSnow
0657 ENDDO
0658 ENDDO
4dd39c50d9 Mart*0659
0660 ENDDO
dc54d31829 Ian *0661
2383f7d4e9 Mart*0662 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_GROWTH_ADX_STORE_MORE)
dc54d31829 Ian *0663
edb6656069 Mart*0664
0665
dc54d31829 Ian *0666
2383f7d4e9 Mart*0667 #endif /* ALLOW_AUTODIFF_TAMC */
dc54d31829 Ian *0668
0669
0670
0671
0672
0673
0674 DO IT=1,SEAICE_multDim
4dd39c50d9 Mart*0675 CALL SEAICE_SOLVE4TEMP(
dc54d31829 Ian *0676 I UG, hiceActualMult(1,1,IT), hsnowActualMult(1,1,IT),
4dd39c50d9 Mart*0677 #ifdef SEAICE_CAP_SUBLIM
0678 This error is put here intentionally, because SEAICE_CAP_SUBLIM
0679 cannot be defined together with SEAICE_USE_GROWTH_ADX
0680 I latentHeatFluxMaxMult(1,1,IT),
0681 #endif
0682 I ticeInMult(1,1,IT),
0683 O ticeOutMult(1,1,IT),
dc54d31829 Ian *0684 O F_io_net_mult(1,1,IT),
0685 O F_ia_net_mult(1,1,IT),
0686 O F_ia_mult(1,1,IT),
0687 O QSWI_mult(1,1,IT),
0688 O FWsublim_mult(1,1,IT),
0689 I bi, bj, myTime, myIter, myThid )
0690 ENDDO
0691
0692
0693
0694
0695
0696 DO IT=1,SEAICE_multDim
0697 DO J=1,sNy
0698 DO I=1,sNx
0699
0700
0701 TICES(I,J,IT,bi,bj) = ticeOutMult(I,J,IT)
0702
0703 F_io_net(I,J) = F_io_net(I,J) +
0704 & F_io_net_mult(I,J,IT)*recip_multDim
0705
0706 F_ia_net(I,J) = F_ia_net(I,J) +
0707 & F_ia_net_mult(I,J,IT)*recip_multDim
0708
0709 F_ia(I,J) = F_ia(I,J) +
0710 & F_ia_mult(I,J,IT)*recip_multDim
0711
0712 QSWI(I,J) = QSWI(I,J) + QSWI_mult(I,J,IT)*recip_multDim
0713
0714 FWsublim(I,J) = FWsublim(I,J) +
0715 & FWsublim_mult(I,J,IT)*recip_multDim
0716
0717 ENDDO
0718 ENDDO
0719 ENDDO
2383f7d4e9 Mart*0720 #ifdef ALLOW_AUTODIFF_TAMC
0721
0722
0723
edb6656069 Mart*0724
2383f7d4e9 Mart*0725
0726 #endif /* ALLOW_AUTODIFF_TAMC */
dc54d31829 Ian *0727
0728 DO J=1,sNy
0729 DO I=1,sNx
0730
4dd39c50d9 Mart*0731
dc54d31829 Ian *0732
0733
0734
0735
0736 F_ia_net_before_snow(I,J) = F_ia_net(I,J)
0737
0738
0739 IF (AREApreTH(I,J) .LE. ZERO) THEN
0740 IceGrowthRateUnderExistingIce(I,J) = 0. _d 0
0741 IceGrowthRateFromSurface(I,J) = 0. _d 0
0742 NetExistingIceGrowthRate(I,J) = 0. _d 0
0743 ELSE
0744
0745
0746 IceGrowthRateUnderExistingIce(I,J) = F_io_net(I,J)*QI
0747
0748
0749
0750
0751 PotSnowMeltRateFromSurf(I,J) = - F_ia_net(I,J)*QS
0752
0753
0754 PotSnowMeltFromSurf(I,J) =
0755 & PotSnowMeltRateFromSurf(I,J) * SEAICE_deltaTtherm
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
4dd39c50d9 Mart*0767
dc54d31829 Ian *0768 IF (PotSnowMeltFromSurf(I,J) .GE. hsnowActual(I,J)) THEN
0769
0770
0771 SnowMeltFromSurface(I,J) = hsnowActual(I,J)
0772
0773 SnowMeltRateFromSurface(I,J) =
4dd39c50d9 Mart*0774 & SnowMeltFromSurface(I,J) * recip_deltaTtherm
dc54d31829 Ian *0775
0776 SurfHeatFluxConvergToSnowMelt(I,J) =
4dd39c50d9 Mart*0777 & - hsnowActual(I,J)*recip_QS*recip_deltaTtherm
dc54d31829 Ian *0778 ELSE
0779
0780
0781
0782 SnowMeltFromSurface(I,J) = PotSnowMeltFromSurf(I,J)
0783
0784 SnowMeltRateFromSurface(I,J) =PotSnowMeltRateFromSurf(I,J)
0785
0786 SurfHeatFluxConvergToSnowMelt(I,J) = F_ia_net(I,J)
0787
0788 ENDIF
0789
0790
0791
0792 F_ia_net(I,J) = F_ia_net(I,J) -
0793 & SurfHeatFluxConvergToSnowMelt(I,J)
0794
0795 IceGrowthRateFromSurface(I,J) = F_ia_net(I,J) * QI
0796
0797
0798
0799 NetExistingIceGrowthRate(I,J) =
0800 & IceGrowthRateUnderExistingIce(I,J) +
0801 & IceGrowthRateFromSurface(I,J)
0802 ENDIF
0803
0804 ENDDO
0805 ENDDO
2383f7d4e9 Mart*0806 #ifdef ALLOW_AUTODIFF_TAMC
0807
0808
edb6656069 Mart*0809
0810
0811
2383f7d4e9 Mart*0812
edb6656069 Mart*0813
2383f7d4e9 Mart*0814
edb6656069 Mart*0815
2383f7d4e9 Mart*0816
0817 #endif /* ALLOW_AUTODIFF_TAMC */
4dd39c50d9 Mart*0818
0819 tmpscal0 = 0.4 _d 0
0820
0821 tmpscal1 = 7.0 _d 0/tmpscal0
0822
0823 tmpscal2 = STANTON_NUMBER*USTAR_BASE*rhoConst*HeatCapacity_Cp
2383f7d4e9 Mart*0824
dc54d31829 Ian *0825 DO J=1,sNy
0826 DO I=1,sNx
0827
4dd39c50d9 Mart*0828
dc54d31829 Ian *0829 tempFrz = SEAICE_tempFrz0 +
0830 & SEAICE_dTempFrz_dS * salt(I,J,kSurface,bi,bj)
0831
0832 surf_theta = max(theta(I,J,kSurface,bi,bj), tempFrz)
0833
4dd39c50d9 Mart*0834
0835 MLTF = ONE + (MCPHEE_TAPER_FAC - ONE)
0836 & / ( ONE + EXP( (AREApreTH(I,J) - tmpscal0)*tmpscal1 ) )
dc54d31829 Ian *0837
4dd39c50d9 Mart*0838
0839
0840
0841
0842
0843
dc54d31829 Ian *0844
4dd39c50d9 Mart*0845 F_mi(I,J) = - tmpscal2 * (surf_theta - tempFrz) * MLTF
dc54d31829 Ian *0846
0847 IceGrowthRateMixedLayer (I,J) = F_mi(I,J) * QI
0848
0849 ENDDO
0850 ENDDO
0851 #ifdef ALLOW_AUTODIFF_TAMC
2383f7d4e9 Mart*0852
0853
dc54d31829 Ian *0854
2383f7d4e9 Mart*0855
edb6656069 Mart*0856
2383f7d4e9 Mart*0857
edb6656069 Mart*0858
2383f7d4e9 Mart*0859 # ifdef SEAICE_GROWTH_ADX_STORE_MORE
0860
edb6656069 Mart*0861
2383f7d4e9 Mart*0862
edb6656069 Mart*0863
2383f7d4e9 Mart*0864
edb6656069 Mart*0865
2383f7d4e9 Mart*0866 # endif
0867
0868 #endif /* ALLOW_AUTODIFF_TAMC */
dc54d31829 Ian *0869
0870
0871 DO J=1,sNy
0872 DO I=1,sNx
0873
0874 S_h(I,J) =
0875 & NetExistingIceGrowthRate(I,J) * AREApreTH(I,J)
0876 & + IceGrowthRateOpenWater(I,J) * (ONE - AREApreTH(I,J))
0877 & + IceGrowthRateMixedLayer(I,J)
0878
0879
0880
0881
0882 S_hsnow(I,J) = AREApreTH(I,J) *
0883 & ( SnowAccRateOverIce(I,J) - SnowMeltRateFromSurface(I,J))
0884
0885 ENDDO
0886 ENDDO
2383f7d4e9 Mart*0887 #ifdef ALLOW_AUTODIFF_TAMC
0888
0889
edb6656069 Mart*0890
2383f7d4e9 Mart*0891
0892 #endif /* ALLOW_AUTODIFF_TAMC */
dc54d31829 Ian *0893
0894 #ifdef ALLOW_SALT_PLUME
4dd39c50d9 Mart*0895 # ifdef SALT_PLUME_IN_LEADS
0896
0897 tmpscal0 = 5. _d 0 / (ONE - SPinflectionPoint)
0898
0899
dc54d31829 Ian *0900 DO J=1,sNy
0901 DO I=1,sNx
0902
4dd39c50d9 Mart*0903
0904
0905
0906
dc54d31829 Ian *0907
4dd39c50d9 Mart*0908
0909
0910
0911
0912
0913
0914
0915
dc54d31829 Ian *0916
4dd39c50d9 Mart*0917
0918
0919
0920
0921
0922
0923
0924
0925
0926
0927
0928 IF (AREApreTH(I,J) .GT. ZERO .OR. S_h(I,J) .GT. ZERO ) THEN
0929
0930 leadPlumeFraction(I,J) = ONE
0931 & / ( ONE + EXP( ( SPinflectionPoint - AREApreTH(I,J) )
0932 & * tmpscal0 )
0933 & )
0934
0935
0936 IceGrowthRateInLeads(I,J) = max( ZERO,
0937 & (ONE - AREApreTH(I,J)) * IceGrowthRateOpenWater(I,J))
0938
0939 saltPlumeFlux(I,J,bi,bj) = leadPlumeFraction(I,J) *
0940 & HEFFM(I,J,bi,bj)*IceGrowthRateInLeads(I,J)*
0941 & ICE2WATR*rhoConstFresh*
0942 & (salt(I,J,kSurface,bi,bj) - SEAICE_salt0)
0943 ELSE
0944
0945 saltPlumeFlux(I,J,bi,bj) = ZERO
0946
0947 ENDIF
dc54d31829 Ian *0948
0949 ENDDO
0950 ENDDO
0951 #endif /* SALT_PLUME_IN_LEADS */
0952 #endif /* ALLOW_SALT_PLUME */
0953
0954
0955 DO J=1,sNy
0956 DO I=1,sNx
0957
0958 S_a(I,J) = 0. _d 0
0959
4dd39c50d9 Mart*0960
0961
0962
0963
dc54d31829 Ian *0964
4dd39c50d9 Mart*0965
0966
0967
0968
dc54d31829 Ian *0969
4dd39c50d9 Mart*0970 tmpscal0 = 0.5 _d 0 * recip_hiceActual(I,J)
dc54d31829 Ian *0971
0972
0973
0974
0975 S_a_IGROW(I,J) = ZERO
0976
0977
0978 IF ( IceGrowthRateOpenWater(I,J) .GT. ZERO) THEN
4dd39c50d9 Mart*0979 IF ( AREApreTH(I,J) .GT. ZERO .OR.
0980 & S_h(I,J) .GT. ZERO ) THEN
0981
0982
0983 IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN
0984 S_a_IGROW(I,J) = (ONE - AREApreTH(I,J)) *
0985 & IceGrowthRateOpenWater(I,J)*recip_HO_south
0986 ELSE
0987 S_a_IGROW(I,J) = (ONE - AREApreTH(I,J)) *
0988 & IceGrowthRateOpenWater(I,J)*recip_HO
dc54d31829 Ian *0989 ENDIF
4dd39c50d9 Mart*0990 ENDIF
dc54d31829 Ian *0991
0992
0993
0994 ELSE
4dd39c50d9 Mart*0995 S_a_IGROW(I,J) = tmpscal0 *
dc54d31829 Ian *0996 & IceGrowthRateOpenWater(I,J) * (ONE - AREApreTH(I,J))
0997 ENDIF
0998
0999 S_a(I,J) = S_a(I,J) + S_a_IGROW(I,J)
1000
1001
1002
1003
1004 S_a_IGRML(I,J) = ZERO
1005
1006 IF ( IceGrowthRateMixedLayer(I,J) .LE. ZERO) THEN
4dd39c50d9 Mart*1007 S_a_IGRML(I,J) = tmpscal0 * IceGrowthRateMixedLayer(I,J)
dc54d31829 Ian *1008 ENDIF
1009
1010 S_a(I,J) = S_a(I,J) + S_a_IGRML(I,J)
1011
1012
1013
1014
1015
1016 S_a_IGRNE(I,J) = ZERO
4dd39c50d9 Mart*1017 IF ( NetExistingIceGrowthRate(I,J) .LE. ZERO .AND.
1018 & HEFFpreTH(I,J) .GT. ZERO ) THEN
dc54d31829 Ian *1019
4dd39c50d9 Mart*1020 S_a_IGRNE(I,J) =
dc54d31829 Ian *1021 & tmpscal0 * NetExistingIceGrowthRate(I,J) * AREApreTH(I,J)
1022
1023 ENDIF
1024
1025 S_a(I,J) = S_a(I,J) + S_a_IGRNE(I,J)
1026
2383f7d4e9 Mart*1027 ENDDO
1028 ENDDO
dc54d31829 Ian *1029
2383f7d4e9 Mart*1030
dc54d31829 Ian *1031 DO J=1,sNy
1032 DO I=1,sNx
4dd39c50d9 Mart*1033 HEFF(I,J,bi,bj) = HEFFpreTH(I,J) +
6b47d550f4 Mart*1034 & SEAICE_deltaTtherm * S_h(I,J) * HEFFM(I,J,bi,bj)
dc54d31829 Ian *1035
4dd39c50d9 Mart*1036 AREA(I,J,bi,bj) = AREApreTH(I,J) +
6b47d550f4 Mart*1037 & SEAICE_deltaTtherm * S_a(I,J) * HEFFM(I,J,bi,bj)
dc54d31829 Ian *1038
4dd39c50d9 Mart*1039 HSNOW(I,J,bi,bj) = HSNWpreTH(I,J) +
6b47d550f4 Mart*1040 & SEAICE_deltaTtherm * S_hsnow(I,J) * HEFFM(I,J,bi,bj)
dc54d31829 Ian *1041 ENDDO
1042 ENDDO
1043
2383f7d4e9 Mart*1044 #ifdef ALLOW_AUTODIFF_TAMC
1045
edb6656069 Mart*1046
1047
1048
2383f7d4e9 Mart*1049
1050 #endif /* ALLOW_AUTODIFF_TAMC */
dc54d31829 Ian *1051 DO J=1,sNy
4dd39c50d9 Mart*1052 DO I=1,sNx
1053
1054 tmpscal0 = AREA(I,J,bi,bj)
1055 AREA(I,J,bi,bj) = MIN(ONE, tmpscal0)
1056 tmpscal1 = AREA(I,J,bi,bj)
1057 AREA(I,J,bi,bj) = MAX(ZERO, tmpscal1)
1058 tmpscal2 = HEFF(I,J,bi,bj)
1059 HEFF(I,J,bi,bj) = MAX(ZERO, tmpscal2)
1060 tmpscal3 = HSNOW(I,J,bi,bj)
1061 HSNOW(I,J,bi,bj) = MAX(ZERO, tmpscal3)
1062
1063
1064 IF ( HEFF(I,J,bi,bj) .LE. ZERO .OR.
1065 & AREA(I,J,bi,bj) .LE. ZERO ) THEN
1066
1067 AREA(I,J,bi,bj) = 0. _d 0
1068 HEFF(I,J,bi,bj) = 0. _d 0
1069 HSNOW(I,J,bi,bj) = 0. _d 0
dc54d31829 Ian *1070
4dd39c50d9 Mart*1071 ENDIF
dc54d31829 Ian *1072
4dd39c50d9 Mart*1073 ENDDO
1074 ENDDO
dc54d31829 Ian *1075
1076 DO J=1,sNy
4dd39c50d9 Mart*1077 DO I=1,sNx
dc54d31829 Ian *1078
1079
1080 #ifdef SHORTWAVE_HEATING
4dd39c50d9 Mart*1081 QSW(I,J,bi,bj) =
dc54d31829 Ian *1082 & QSWI(I,J) * ( AREApreTH(I,J)) +
1083 & QSWO(I,J) * (ONE - AREApreTH(I,J))
1084 #else
4dd39c50d9 Mart*1085 QSW(I,J,bi,bj) = 0. _d 0
dc54d31829 Ian *1086 #endif
4dd39c50d9 Mart*1087 ENDDO
1088 ENDDO
1089
1090 DO J=1,sNy
1091 DO I=1,sNx
dc54d31829 Ian *1092
4dd39c50d9 Mart*1093
1094 ActualNewTotalVolumeChange(I,J) =
1095 & HEFF(I,J,bi,bj) - HEFFpreTH(I,J)
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105 ActualNewTotalSnowMelt(I,J) =
1106 & HSNWpreTH(I,J) +
1107 & SnowAccOverIce(I,J) -
1108 & HSNOW(I,J,bi,bj)
1109
1110
1111 EnergyInNewTotalIceVolume(I,J) =
1112 & ActualNewTotalVolumeChange(I,J)*recip_QI
dc54d31829 Ian *1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
4dd39c50d9 Mart*1128 NetEnergyFluxOutOfOcean(I,J) = SEAICE_deltaTtherm *
dc54d31829 Ian *1129 & ( AREApreTH(I,J) *
1130 & (F_ia_net(I,J) + F_io_net(I,J) + QSWI(I,J))
1131 & + ( ONE - AREApreTH(I,J)) * F_ao(I,J))
1132
1133
1134
1135
1136
1137
4dd39c50d9 Mart*1138 ResidualEnergyOutOfOcean(I,J) =
dc54d31829 Ian *1139 & NetEnergyFluxOutOfOcean(I,J) -
1140 & EnergyInNewTotalIceVolume(I,J)
1141
1142
1143
1144
1145
4dd39c50d9 Mart*1146 QNET(I,J,bi,bj) =
1147 & ResidualEnergyOutOfOcean(I,J) * recip_deltaTtherm
dc54d31829 Ian *1148
4dd39c50d9 Mart*1149
1150
1151
1152
1153
1154
1155
1156 IF (salt(I,J,kSurface,bi,bj) .GE. SEAICE_salt0 .AND.
1157 & salt(I,J,kSurface,bi,bj) .GT. 0. _d 0) THEN
dc54d31829 Ian *1158
4dd39c50d9 Mart*1159 FreshwaterContribFromIce(I,J) =
dc54d31829 Ian *1160 & - ActualNewTotalVolumeChange(I,J) *
4dd39c50d9 Mart*1161 & rhoIce2rhoFresh
dc54d31829 Ian *1162
1163
4dd39c50d9 Mart*1164 ELSE
1165
1166
1167 FreshwaterContribFromIce(I,J) =
dc54d31829 Ian *1168 & -ActualNewTotalVolumeChange(I,J) *
4dd39c50d9 Mart*1169 & rhoIce2rhoFresh
1170 ENDIF
dc54d31829 Ian *1171
1172 tmpscal3 = max( 0. _d 0,
1173 & min(SEAICE_salt0,salt(I,J,kSurface,bi,bj)) )
4dd39c50d9 Mart*1174
1175 tmpscal2 = (ActualNewTotalVolumeChange(I,J)+
dc54d31829 Ian *1176 & SIheffNeg(I,J,bi,bj)+
1177 & 0.0 )
1178 & * tmpscal3
1179 & * HEFFM(I,J,bi,bj)
4dd39c50d9 Mart*1180 & * recip_deltaTtherm * SEAICE_rhoIce
dc54d31829 Ian *1181
4dd39c50d9 Mart*1182
1183 saltflux(I,J,bi,bj) = tmpscal2
dc54d31829 Ian *1184
1185
4dd39c50d9 Mart*1186
1187
1188
1189
1190 FreshwaterContribFromSnowMelt(I,J) =
1191 & ActualNewTotalSnowMelt(I,J)*rhoSnow2rhoFresh
dc54d31829 Ian *1192
1193
1194
1195
1196
4dd39c50d9 Mart*1197 EmPmR(I,J,bi,bj) = HEFFM(I,J,bi,bj)*(
1198 & ( EVAP(I,J,bi,bj) - PRECIP(I,J,bi,bj) )
1199 & * ( ONE - AREApreTH(I,J) )
1200 & - PrecipRateOverIceSurfaceToSea(I,J)*AREApreTH(I,J)
dc54d31829 Ian *1201 #ifdef ALLOW_RUNOFF
4dd39c50d9 Mart*1202 & - RUNOFF(I,J,bi,bj)
dc54d31829 Ian *1203 #endif
4dd39c50d9 Mart*1204 & - (FreshwaterContribFromIce(I,J) +
1205 & FreshwaterContribFromSnowMelt(I,J))
1206 & *recip_deltaTtherm ) * rhoConstFresh
1207 & +( SIheffNeg(I,J,bi,bj)*SEAICE_rhoIce
1208 & + SIhsnwNeg(I,J,bi,bj)*SEAICE_rhoSnow)
1209 & *recip_deltaTtherm * HEFFM(I,J,bi,bj)
1210
dc54d31829 Ian *1211 ENDDO
1212 ENDDO
1213
1214
1215
d73d15cdef antn*1216
1217 IF(SEAICEuseFlooding) THEN
1218 #ifdef ALLOW_AUTODIFF_TAMC
1219
1220
1221
1222
1223 #endif /* ALLOW_AUTODIFF_TAMC */
1224
1225 DO J=1,sNy
1226 DO I=1,sNx
1227 tmpscal0 = ( HSNOW(I,J,bi,bj)*SEAICE_rhoSnow
1228 & +HEFF(I,J,bi,bj)*SEAICE_rhoIce )*recip_rhoConst
1229 d_HEFFbyFLOODING(I,J) = MAX(0. _d 0,tmpscal0-HEFF(I,J,bi,bj))
1230 HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + d_HEFFbyFLOODING(I,J)
1231 HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)
1232 & - d_HEFFbyFLOODING(I,J)*ICE2SNOW
1233
1234 ENDDO
1235 ENDDO
1236
1237 ENDIF
1238 #ifdef ALLOW_DIAGNOSTICS
1239 IF (useDiagnostics) THEN
1240 tmpscal1=1. _d 0 * recip_deltaTtherm
1241 CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyFLOODING,
1242 & tmpscal1,1,'SIdHbFLO',0,1,3,bi,bj,myThid)
1243 ENDIF
1244 #endif /* ALLOW_DIAGNOSTICS */
1245
4dd39c50d9 Mart*1246
1247
dc54d31829 Ian *1248 IF ( useRealFreshWaterFlux ) THEN
1249 DO J=1,sNy
1250 DO I=1,sNx
1251 #ifdef SEAICE_CAP_ICELOAD
1252 tmpscal1 = HEFF(I,J,bi,bj)*SEAICE_rhoIce
1253 & + HSNOW(I,J,bi,bj)*SEAICE_rhoSnow
1254 tmpscal2 = MIN(tmpscal1,heffTooHeavy*rhoConst)
1255 #else
1256 tmpscal2 = HEFF(I,J,bi,bj)*SEAICE_rhoIce
1257 & + HSNOW(I,J,bi,bj)*SEAICE_rhoSnow
1258 #endif
1259 sIceLoad(i,j,bi,bj) = tmpscal2
1260 ENDDO
1261 ENDDO
1262 ENDIF
1263
d73d15cdef antn*1264
1265
1266
1267
1268 #ifdef ALLOW_DIAGNOSTICS
1269 IF (useDiagnostics) THEN
1270 DO J=1,sNy
1271 DO I=1,sNx
1272 SItflux(I,J,bi,bj) = 0.0 +
1273
1274
1275
1276
1277 & NetEnergyFluxOutOfOcean(I,J)*recip_deltaTtherm
1278 & *HEFFM(I,J,bi,bj)
1279 & +(SIheffNeg(I,J,bi,bj)*recip_QI
1280 & +( SIhsnwNeg(I,J,bi,bj) - ActualNewTotalSnowMelt(I,J)
1281 & + SnowAccOverIce(I,J) )*recip_QS)
1282 & * recip_deltaTtherm * HEFFM(I,J,bi,bj)
1283
1284 SIatmFW(I,J,bi,bj) = HEFFM(I,J,bi,bj)*(
1285 & EVAP(I,J,bi,bj)*( ONE - AREApreTH(I,J) )
1286 & - PRECIP(I,J,bi,bj)
1287 #ifdef ALLOW_RUNOFF
1288 & - RUNOFF(I,J,bi,bj)
1289 #endif /* ALLOW_RUNOFF */
1290 & )*rhoConstFresh
1291 ENDDO
1292 ENDDO
1293
1294 IF (useRealFreshWaterFlux.AND.(nonlinFreeSurf.NE.0)) THEN
1295 DO J=1,sNy
1296 DO I=1,sNx
1297
1298 SIeprflx(I,J,bi,bj) = -EmPmR(I,J,bi,bj)
1299 & * HeatCapacity_Cp *theta(I,J,kSurface,bi,bj)
1300 ENDDO
1301 ENDDO
1302
1303
1304 ENDIF
1305 ENDIF
1306 #endif /* ALLOW_DIAGNOSTICS */
1307
dc54d31829 Ian *1308 #ifdef SEAICE_DEBUG
4dd39c50d9 Mart*1309 DO j=1,sNy
1310 DO i=1,sNx
1311
1312 IF ( (i .EQ. SEAICE_debugPointI) .and.
1313 & (j .EQ. SEAICE_debugPointJ) ) THEN
1314
1315 print *,'ifice: myTime,myIter:',myTime,myIter
1316
1317 print '(A,2i4,2(1x,1P3E15.4))',
1318 & 'ifice i j -------------- ',i,j
1319
1320 print '(A,2i4,2(1x,1P3E15.4))',
1321 & 'ifice i j F(mi ao), rHIA ',
1322 & i,j, F_mi(i,j), F_ao(i,j),
1323 & recip_hiceActual(i,j)
1324
1325 print '(A,2i4,2(1x,1P3E15.4))',
1326 & 'ifice i j Fi(a,ant2/1 ont)',
1327 & i,j, F_ia(i,j),
1328 & F_ia_net_before_snow(i,j),
1329 & F_ia_net(i,j),
1330 & F_io_net(i,j)
1331
1332 print '(A,2i4,2(1x,1P3E15.4))',
1333 & 'ifice i j AREA2/1 HEFF2/1 ',i,j,
1334 & AREApreTH(I,J),
1335 & AREA(i,j,bi,bj),
1336 & HEFFpreTH(I,J),
1337 & HEFF(i,j,bi,bj)
1338
1339 print '(A,2i4,2(1x,1P3E15.4))',
1340 & 'ifice i j HSNOW2/1 TMX ',i,j,
1341 & HSNWpreTH(I,J),
1342 & HSNOW(I,J,bi,bj),
1343 & theta(I,J,kSurface,bi,bj)
1344
1345 print '(A,2i4,2(1x,1P3E15.4))',
1346 & 'ifice i j TI ATP LWD ',i,j,
1347 & TICES(i,j,1, bi,bj) - celsius2k,
1348 & ATEMP(i,j,bi,bj) - celsius2k,
1349 & LWDOWN(i,j,bi,bj)
1350
1351 print '(A,2i4,2(1x,1P3E15.4))',
1352 & 'ifice i j S_a(tot,OW,ML,NE',i,j,
1353 & S_a(i,j),
1354 & S_a_IGROW(I,J),
1355 & S_a_IGRML(I,J),
1356 & S_a_IGRNE(I,J)
1357
1358 print '(A,2i4,2(1x,1P3E15.4))',
1359 & 'ifice i j S_a S_h S_hsnow ',i,j,
1360 & S_a(i,j),
1361 & S_h(i,j),
1362 & S_hsnow(i,j)
1363
1364 print '(A,2i4,2(1x,1P3E15.4))',
1365 & 'ifice i j IGR(ML OW ICE) ',i,j,
1366 & IceGrowthRateMixedLayer(i,j),
1367 & IceGrowthRateOpenWater(i,j),
1368 & NetExistingIceGrowthRate(i,j)
1369
1370 print '(A,2i4,2(1x,1P3E15.4))',
1371 & 'ifice i j IVC(A ENIN) ',i,j,
1372 & ActualNewTotalVolumeChange(i,j),
1373 & EnergyInNewTotalIceVolume(i,j)
1374
1375
1376 print '(A,2i4,2(1x,1P3E15.4))',
1377 & 'ifice i j EF(NOS RE) QNET ',i,j,
1378 & NetEnergyFluxOutOfOcean(i,j),
1379 & ResidualEnergyOutOfOcean(i,j),
1380 & QNET(I,J,bi,bj)
1381
1382 print '(A,2i4,3(1x,1P3E15.4))',
1383 & 'ifice i j QSW QSWO QSWI ',i,j,
1384 & QSW(i,j,bi,bj),
1385 & QSWO(i,j),
1386 & QSWI(i,j)
dc54d31829 Ian *1387
1388
1389
1390
1391
8e32c48b8f Mart*1392
dc54d31829 Ian *1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
4dd39c50d9 Mart*1410 print '(A,2i4,3(1x,1P3E15.4))',
1411 & 'ifice i j EmPmR EVP PRE RU',i,j,
1412 & EmPmR(I,J,bi,bj),
1413 & EVAP(I,J,bi,bj),
1414 & PRECIP(I,J,bi,bj),
1415 & RUNOFF(I,J,bi,bj)
1416
1417 print '(A,2i4,3(1x,1P3E15.4))',
1418 & 'ifice i j PRROIS,SAOI(R .)',i,j,
1419 & PrecipRateOverIceSurfaceToSea(I,J),
1420 & SnowAccRateOverIce(I,J),
1421 & SnowAccOverIce(I,J)
1422
1423 print '(A,2i4,4(1x,1P3E15.4))',
1424 & 'ifice i j SM(PM PMR . .R) ',i,j,
1425 & PotSnowMeltFromSurf(I,J),
1426 & PotSnowMeltRateFromSurf(I,J),
1427 & SnowMeltFromSurface(I,J),
1428 & SnowMeltRateFromSurface(I,J)
1429
1430 print '(A,2i4,4(1x,1P3E15.4))',
1431 & 'ifice i j TotSnwMlt ',i,j,
1432 & ActualNewTotalSnowMelt(I,J)
dc54d31829 Ian *1433
1434
4dd39c50d9 Mart*1435 print '(A,2i4,4(1x,1P3E15.4))',
1436 & 'ifice i j fw(CFICE, CFSM) ',i,j,
1437 & FreshwaterContribFromIce(I,J),
1438 & FreshwaterContribFromSnowMelt(I,J)
dc54d31829 Ian *1439
4dd39c50d9 Mart*1440 print '(A,2i4,2(1x,1P3E15.4))',
1441 & 'ifice i j -------------- ',i,j
dc54d31829 Ian *1442
4dd39c50d9 Mart*1443 ENDIF
dc54d31829 Ian *1444
4dd39c50d9 Mart*1445 ENDDO
1446 ENDDO
dc54d31829 Ian *1447 #endif /* SEAICE_DEBUG */
1448
1449
1450 ENDDO
1451 ENDDO
1452
1453 #ifdef ALLOW_DIAGNOSTICS
1454 IF ( useDiagnostics ) THEN
1455
1456
1457
4dd39c50d9 Mart*1458 CALL DIAGNOSTICS_FILL(SItflux, 'SItflux ',0,1,0,1,1,myThid)
a4e168e012 antn*1459 CALL DIAGNOSTICS_FILL(SIeprflx,'SIeprflx',0,1,0,1,1,myThid)
dc54d31829 Ian *1460
d73d15cdef antn*1461
4dd39c50d9 Mart*1462 tmpscal1= - 1. _d 0
1463 CALL DIAGNOSTICS_SCALE_FILL(SIatmFW,
1464 & tmpscal1,1,'SIatmFW ',0,1,0,1,1,myThid)
dc54d31829 Ian *1465 ENDIF
1466 #endif /* ALLOW_DIAGNOSTICS */
1467
1468 #else /* ALLOW_EXF and ALLOW_ATM_TEMP */
4dd39c50d9 Mart*1469 STOP 'SEAICE_GROWTH_ADX not compiled with EXF and ALLOW_ATM_TEMP'
dc54d31829 Ian *1470 #endif /* ALLOW_EXF and ALLOW_ATM_TEMP */
5337b47ce7 Jean*1471 #endif /* SEAICE_USE_GROWTH_ADX */
dc54d31829 Ian *1472
1473 RETURN
1474 END