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