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
33e17487ce Dimi*0001 #include "SEAICE_OPTIONS.h"
66d21a8387 Jean*0002 #ifdef ALLOW_EXF
0003 # include "EXF_OPTIONS.h"
0004 #endif
cafd3818b7 An T*0005 #ifdef ALLOW_SALT_PLUME
0006 # include "SALT_PLUME_OPTIONS.h"
0007 #endif
772b2ed80e Gael*0008 #ifdef ALLOW_AUTODIFF
0009 # include "AUTODIFF_OPTIONS.h"
0010 #endif
33e17487ce Dimi*0011
0012
0013
0014
0015 SUBROUTINE SEAICE_GROWTH( myTime, myIter, myThid )
0016
0017
0018
0019
0020
0021
0022
0023
0024 IMPLICIT NONE
0025
0026 #include "SIZE.h"
0027 #include "EEPARAMS.h"
0028 #include "PARAMS.h"
0029 #include "DYNVARS.h"
0030 #include "GRID.h"
0031 #include "FFIELDS.h"
ccaa3c61f4 Patr*0032 #include "SEAICE_SIZE.h"
33e17487ce Dimi*0033 #include "SEAICE_PARAMS.h"
0034 #include "SEAICE.h"
ccaa3c61f4 Patr*0035 #include "SEAICE_TRACER.h"
33e17487ce Dimi*0036 #ifdef ALLOW_EXF
0037 # include "EXF_PARAM.h"
66d21a8387 Jean*0038 # include "EXF_FIELDS.h"
33e17487ce Dimi*0039 #endif
0040 #ifdef ALLOW_SALT_PLUME
0041 # include "SALT_PLUME.h"
0042 #endif
0043 #ifdef ALLOW_AUTODIFF_TAMC
0044 # include "tamc.h"
0045 #endif
0046
0047
0048
0049
0050
0051
0052 _RL myTime
0053 INTEGER myIter, myThid
66d21a8387 Jean*0054
33e17487ce Dimi*0055
4dd39c50d9 Mart*0056 #ifndef SEAICE_USE_GROWTH_ADX
634144d037 Jean*0057 #if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP)
2651ba3350 Jean*0058
0059 #ifdef ALLOW_DIAGNOSTICS
0060 LOGICAL DIAGNOSTICS_IS_ON
0061 EXTERNAL DIAGNOSTICS_IS_ON
0062 #endif
0063
33e17487ce Dimi*0064
0065
c50ad14e64 Gael*0066
0c0ecd4c7b Jean*0067
0068
c50ad14e64 Gael*0069
0c0ecd4c7b Jean*0070
0071
c50ad14e64 Gael*0072
0073
0c0ecd4c7b Jean*0074
0075
0076
2651ba3350 Jean*0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
c50ad14e64 Gael*0094
33e17487ce Dimi*0095
0096 INTEGER i, j, bi, bj
00c7090dc0 Mart*0097
33e17487ce Dimi*0098 INTEGER kSurface
00c7090dc0 Mart*0099 #ifdef SHORTWAVE_HEATING
0100 INTEGER kSrfS
0101 #endif
8377b8ee87 Mart*0102
286983d3d2 Patr*0103 INTEGER IT
8377b8ee87 Mart*0104
75bbb16cce Jean*0105 #ifdef ALLOW_BALANCE_FLUXES
0106 CHARACTER*(MAX_LEN_MBUF) msgBuf
0107 #elif (defined (SEAICE_DEBUG))
5ffca4a0e2 Patr*0108 CHARACTER*(MAX_LEN_MBUF) msgBuf
0109 CHARACTER*12 msgBufForm
75bbb16cce Jean*0110 #endif
33e17487ce Dimi*0111
bb8e6379cb Mart*0112 _RL tempFrz, ICE2SNOW, SNOW2ICE
0113 _RL QI, QS, recip_QI
1d74e34c65 Jean*0114 _RL lhSublim
0115
0116
0117 _RL convertQ2HI, convertHI2Q
0118
0119 _RL convertPRECIP2HI, convertHI2PRECIP
0120
0121
0122 _RL MixedLayerTurbulenceFactor
0123
0124
0125 _RL SPEED_SQ
0126
0127
0128 _RL area_reg_sq, hice_reg_sq
0129
0130 _RL heffTooHeavy
0320e25227 Mart*0131
0132 _RL dzSurf
1d74e34c65 Jean*0133
0134
0135 _RL recip_multDim
0136 _RL recip_deltaTtherm
0137 _RL recip_rhoIce
0138
0139 _RL recip_HO
0140
0141 _RL recip_HH
6571f3ca98 Jean*0142 #ifndef SEAICE_ITD
74c037b5fb Mart*0143
6571f3ca98 Jean*0144 _RL pFac, pFacSnow
0145 #endif
4b6d456764 Mart*0146
0147 _RL denominator, recip_denominator, areaPDFfac
1d74e34c65 Jean*0148
0149
0150 _RL tmpscal0, tmpscal1, tmpscal2, tmpscal3, tmpscal4
0151
0152 #ifdef ALLOW_SITRACER
0153 INTEGER iTr
0154 #ifdef ALLOW_DIAGNOSTICS
0155 CHARACTER*8 diagName
0156 #endif
f61838dfc1 Torg*0157 #ifdef SEAICE_GREASE
0158 INTEGER iTrGrease
0159 _RL greaseDecayTime
0160 _RL greaseNewFrazil
0161 _RL THIRD
0162 PARAMETER (THIRD = 1.0 _d 0 / 3.0 _d 0)
0163 #endif
1d74e34c65 Jean*0164 #endif /* ALLOW_SITRACER */
0165 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0166
0167 INTEGER tkey
1d74e34c65 Jean*0168 #endif
33e17487ce Dimi*0169
1d74e34c65 Jean*0170
8377b8ee87 Mart*0171
5b0abbe6ee Jean*0172 _RL TmixLoc (1:sNx,1:sNy)
0173
6571f3ca98 Jean*0174 #ifndef SEAICE_ITD
1d74e34c65 Jean*0175
0176 _RL heffActual (1:sNx,1:sNy)
0177
0178 _RL hsnowActual (1:sNx,1:sNy)
6571f3ca98 Jean*0179 #endif
1d74e34c65 Jean*0180
0181 _RL recip_heffActual (1:sNx,1:sNy)
0182
8377b8ee87 Mart*0183
1d74e34c65 Jean*0184 _RL AREApreTH (1:sNx,1:sNy)
0185 _RL HEFFpreTH (1:sNx,1:sNy)
0186 _RL HSNWpreTH (1:sNx,1:sNy)
286983d3d2 Patr*0187 #ifdef SEAICE_ITD
0188 _RL AREAITDpreTH (1:sNx,1:sNy,1:nITD)
0189 _RL HEFFITDpreTH (1:sNx,1:sNy,1:nITD)
0190 _RL HSNWITDpreTH (1:sNx,1:sNy,1:nITD)
0191 _RL areaFracFactor (1:sNx,1:sNy,1:nITD)
0192 #endif
1d74e34c65 Jean*0193
0194
0195 _RL UG (1:sNx,1:sNy)
0196
0197
0198 _RL tmparr1 (1:sNx,1:sNy)
0199
f913c5a485 Mart*0200 _RL ticeInMult (1:sNx,1:sNy,nITD)
0201 _RL ticeOutMult (1:sNx,1:sNy,nITD)
0202 _RL heffActualMult (1:sNx,1:sNy,nITD)
0203 _RL hsnowActualMult (1:sNx,1:sNy,nITD)
286983d3d2 Patr*0204 #ifdef SEAICE_ITD
f913c5a485 Mart*0205 _RL recip_heffActualMult(1:sNx,1:sNy,nITD)
286983d3d2 Patr*0206 #endif
f913c5a485 Mart*0207 _RL a_QbyATMmult_cover (1:sNx,1:sNy,nITD)
0208 _RL a_QSWbyATMmult_cover(1:sNx,1:sNy,nITD)
0209 _RL a_FWbySublimMult (1:sNx,1:sNy,nITD)
56d13a40ed Mart*0210 #if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
f61838dfc1 Torg*0211 _RL greaseLayerThick (1:sNx,1:sNy)
0212 _RL d_HEFFbyGREASE (1:sNx,1:sNy)
56d13a40ed Mart*0213 _RL uRelW (1:sNx,1:sNy)
0214 _RL vRelW (1:sNx,1:sNy)
f61838dfc1 Torg*0215 #endif
286983d3d2 Patr*0216 #ifdef SEAICE_ITD
f913c5a485 Mart*0217 _RL r_QbyATMmult_cover (1:sNx,1:sNy,nITD)
0218 _RL r_FWbySublimMult (1:sNx,1:sNy,nITD)
1080be7801 Jean*0219
f913c5a485 Mart*0220 _RL latMeltFrac (1:sNx,1:sNy,nITD)
0221 _RL latMeltRate (1:sNx,1:sNy,nITD)
53b2f6dc29 Torg*0222 _RL floeAlpha
0223 _RL floeDiameter
0224 _RL floeDiameterMin
0225 _RL floeDiameterMax
286983d3d2 Patr*0226 #endif
1d74e34c65 Jean*0227
0c0ecd4c7b Jean*0228
2ae913cfea Gael*0229
c50ad14e64 Gael*0230
65b7f51792 Gael*0231
c50ad14e64 Gael*0232
292695ea58 Gael*0233 _RL a_QbyATM_cover (1:sNx,1:sNy)
0234 _RL a_QbyATM_open (1:sNx,1:sNy)
0235 _RL r_QbyATM_cover (1:sNx,1:sNy)
b34884f5be Mart*0236 _RL r_QbyATM_open (1:sNx,1:sNy)
2ae913cfea Gael*0237
0238
292695ea58 Gael*0239 _RL a_QSWbyATM_open (1:sNx,1:sNy)
0240 _RL a_QSWbyATM_cover (1:sNx,1:sNy)
286983d3d2 Patr*0241
292695ea58 Gael*0242
0c0ecd4c7b Jean*0243
2ae913cfea Gael*0244
65b7f51792 Gael*0245 _RL a_QbyOCN (1:sNx,1:sNy)
0246 _RL r_QbyOCN (1:sNx,1:sNy)
292695ea58 Gael*0247
1d74e34c65 Jean*0248
2afe30fba0 Dimi*0249 _RL d_HEFFbyOCNonICE (1:sNx,1:sNy)
0250
1d74e34c65 Jean*0251
0252
2afe30fba0 Dimi*0253 _RL d_HEFFbyATMonOCN (1:sNx,1:sNy)
1d74e34c65 Jean*0254
2afe30fba0 Dimi*0255 _RL d_HEFFbyFLOODING (1:sNx,1:sNy)
2651ba3350 Jean*0256
1d74e34c65 Jean*0257
0258
6b712295de Dimi*0259 _RL d_HEFFbyATMonOCN_open(1:sNx,1:sNy)
0260 _RL d_HEFFbyATMonOCN_cover(1:sNx,1:sNy)
0261
2afe30fba0 Dimi*0262 _RL d_HSNWbyATMonSNW (1:sNx,1:sNy)
0263 _RL d_HSNWbyOCNonSNW (1:sNx,1:sNy)
65b7f51792 Gael*0264 _RL d_HSNWbyRAIN (1:sNx,1:sNy)
2651ba3350 Jean*0265
65b7f51792 Gael*0266 _RL d_HFRWbyRAIN (1:sNx,1:sNy)
1d74e34c65 Jean*0267
83ad492c2d Jean*0268
b34884f5be Mart*0269
0270
0271 _RL a_FWbySublim (1:sNx,1:sNy)
ae36251cae Gael*0272 _RL r_FWbySublim (1:sNx,1:sNy)
b34884f5be Mart*0273 _RL d_HEFFbySublim (1:sNx,1:sNy)
0274 _RL d_HSNWbySublim (1:sNx,1:sNy)
1f07e6d037 Gael*0275
840c7fba30 Gael*0276 #ifdef SEAICE_CAP_SUBLIM
76f7eb184b Ian *0277
0278
0279 _RL latentHeatFluxMax (1:sNx,1:sNy)
f913c5a485 Mart*0280 _RL latentHeatFluxMaxMult(1:sNx,1:sNy,nITD)
2651ba3350 Jean*0281 #endif
d187c22362 Gael*0282
286983d3d2 Patr*0283 #ifdef SEAICE_ITD
8377b8ee87 Mart*0284 _RL d_HEFFbySublim_ITD (1:sNx,1:sNy,1:nITD)
0285 _RL d_HSNWbySublim_ITD (1:sNx,1:sNy,1:nITD)
0286 _RL d_HEFFbyOCNonICE_ITD (1:sNx,1:sNy,1:nITD)
0287 _RL d_HSNWbyATMonSNW_ITD (1:sNx,1:sNy,1:nITD)
0288 _RL d_HEFFbyATMonOCN_ITD (1:sNx,1:sNy,1:nITD)
0289 _RL d_HEFFbyATMonOCN_cover_ITD(1:sNx,1:sNy,1:nITD)
0290 _RL d_HEFFbyATMonOCN_open_ITD (1:sNx,1:sNy,1:nITD)
0291 _RL d_HSNWbyRAIN_ITD (1:sNx,1:sNy,1:nITD)
0292 _RL d_HSNWbyOCNonSNW_ITD (1:sNx,1:sNy,1:nITD)
0293 _RL d_HEFFbyFLOODING_ITD (1:sNx,1:sNy,1:nITD)
286983d3d2 Patr*0294 #endif
0295
33e17487ce Dimi*0296 #ifdef ALLOW_DIAGNOSTICS
1d74e34c65 Jean*0297
8377b8ee87 Mart*0298 _RL d_AREAbyATM (1:sNx,1:sNy)
0299 _RL d_AREAbyOCN (1:sNx,1:sNy)
0300 _RL d_AREAbyICE (1:sNx,1:sNy)
1d74e34c65 Jean*0301
2afe30fba0 Dimi*0302 _RL DIAGarrayA (1:sNx,1:sNy)
0303 _RL DIAGarrayB (1:sNx,1:sNy)
0304 _RL DIAGarrayC (1:sNx,1:sNy)
0305 _RL DIAGarrayD (1:sNx,1:sNy)
1d74e34c65 Jean*0306 #endif /* ALLOW_DIAGNOSTICS */
1ed503f8a3 Gael*0307
6509326d8c Gael*0308 _RL SItflux (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0309 _RL SIatmQnt (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0310 _RL SIatmFW (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0311 #ifdef ALLOW_BALANCE_FLUXES
0312 _RL FWFsiTile(nSx,nSy)
0313 _RL FWFsiGlob
0314 _RL HFsiTile(nSx,nSy)
0315 _RL HFsiGlob
0316 _RL FWF2HFsiTile(nSx,nSy)
0317 _RL FWF2HFsiGlob
0318 #endif
0319
cafd3818b7 An T*0320 #ifdef ALLOW_SALT_PLUME
8377b8ee87 Mart*0321 _RL localSPfrac (1:sNx,1:sNy)
cafd3818b7 An T*0322 #ifdef SALT_PLUME_IN_LEADS
8377b8ee87 Mart*0323 _RL leadPlumeFraction (1:sNx,1:sNy)
0324 _RL IceGrowthRateInLeads(1:sNx,1:sNy)
cafd3818b7 An T*0325 #endif /* SALT_PLUME_IN_LEADS */
0326 #endif /* ALLOW_SALT_PLUME */
0327
2651ba3350 Jean*0328
0329
0330
0331
0332
aea7db20a6 Gael*0333
0320e25227 Mart*0334 IF ( usingPCoords ) THEN
0335 kSurface = Nr
0336 dzSurf = drF(kSurface)*recip_rhoConst*recip_gravity
33e17487ce Dimi*0337 ELSE
0320e25227 Mart*0338 kSurface = 1
0339 dzSurf = drF(kSurface)
33e17487ce Dimi*0340 ENDIF
00c7090dc0 Mart*0341 #ifdef SHORTWAVE_HEATING
0342 IF ( usingPCoords ) THEN
0343 kSrfS = Nr
0344 ELSE
0345 kSrfS = 2
0346 ENDIF
0347 #endif
33e17487ce Dimi*0348
bb8e6379cb Mart*0349
00c7090dc0 Mart*0350 recip_multDim = SEAICE_multDim
0351 recip_multDim = ONE / recip_multDim
f5282c5b03 Gael*0352
00c7090dc0 Mart*0353
a4bc0a0b4c Jean*0354 recip_deltaTtherm = ONE / SEAICE_deltaTtherm
0355 recip_rhoIce = ONE / SEAICE_rhoIce
136908bfac Ian *0356
2651ba3350 Jean*0357
0320e25227 Mart*0358 heffTooHeavy = dzSurf * 0.2 _d 0
33e17487ce Dimi*0359
c5a377c43d Gael*0360 ICE2SNOW = SEAICE_rhoIce/SEAICE_rhoSnow
a4bc0a0b4c Jean*0361 SNOW2ICE = ONE / ICE2SNOW
85b399b441 Gael*0362
33e17487ce Dimi*0363
fff6be1885 Mart*0364 QI = SEAICE_rhoIce*SEAICE_lhFusion
a4bc0a0b4c Jean*0365 recip_QI = ONE / QI
33e17487ce Dimi*0366
fff6be1885 Mart*0367 QS = SEAICE_rhoSnow*SEAICE_lhFusion
136908bfac Ian *0368
52ff14d141 Ian *0369
0370 lhSublim = SEAICE_lhEvap + SEAICE_lhFusion
0371
136908bfac Ian *0372
0373 area_reg_sq = SEAICE_area_reg * SEAICE_area_reg
0374 hice_reg_sq = SEAICE_hice_reg * SEAICE_hice_reg
85b399b441 Gael*0375
2651ba3350 Jean*0376
65b7f51792 Gael*0377 convertQ2HI=SEAICE_deltaTtherm/QI
4eb4a54cba Jean*0378 convertHI2Q = ONE/convertQ2HI
2651ba3350 Jean*0379
292695ea58 Gael*0380 convertPRECIP2HI=SEAICE_deltaTtherm*rhoConstFresh/SEAICE_rhoIce
4eb4a54cba Jean*0381 convertHI2PRECIP = ONE/convertPRECIP2HI
4b6d456764 Mart*0382
0383
0384 denominator = 0. _d 0
0385 DO IT=1,SEAICE_multDim
0386 denominator = denominator + IT * SEAICE_pdf(IT)
0387 ENDDO
0388 denominator = (2.0 _d 0 * denominator) - 1.0 _d 0
0389 recip_denominator = 1. _d 0 / denominator
0390 #ifdef SEAICE_ITD
0391 areaPDFfac = 1. _d 0
0392 #else
0393 areaPDFfac = denominator * recip_multDim
0394 #endif /* SEAICE_ITD */
53b2f6dc29 Torg*0395 #ifdef SEAICE_ITD
1080be7801 Jean*0396
0397
53b2f6dc29 Torg*0398 floeAlpha = 0.66 _d 0
1080be7801 Jean*0399
0400
0401
0402
0403
53b2f6dc29 Torg*0404 floeDiameterMin = 8. _d 0
0405 floeDiameterMax = 300. _d 0
0406 #endif
292695ea58 Gael*0407
33e17487ce Dimi*0408 DO bj=myByLo(myThid),myByHi(myThid)
0409 DO bi=myBxLo(myThid),myBxHi(myThid)
2651ba3350 Jean*0410
33e17487ce Dimi*0411 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0412 tkey = bi + (bj-1)*nSx + (ikey_dynamics-1)*nSx*nSy
33e17487ce Dimi*0413 #endif /* ALLOW_AUTODIFF_TAMC */
2ae913cfea Gael*0414
56d13a40ed Mart*0415 #if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
f61838dfc1 Torg*0416
0417
0418 greaseDecayTime=1.44*86400. _d 0
0419
0420 iTrGrease=-1
0421 DO iTr = 1, SItrNumInUse
56d13a40ed Mart*0422 IF (SItrName(iTr).EQ.'grease') iTrGrease=iTr
f61838dfc1 Torg*0423 ENDDO
0424 #endif
0425
2ae913cfea Gael*0426
0427
0428
8377b8ee87 Mart*0429 DO j=1,sNy
0430 DO i=1,sNx
0431 a_QbyATM_cover(i,j) = 0.0 _d 0
0432 a_QbyATM_open (i,j) = 0.0 _d 0
0433 r_QbyATM_cover(i,j) = 0.0 _d 0
0434 r_QbyATM_open (i,j) = 0.0 _d 0
2651ba3350 Jean*0435
8377b8ee87 Mart*0436 a_QSWbyATM_open (i,j) = 0.0 _d 0
0437 a_QSWbyATM_cover(i,j) = 0.0 _d 0
2651ba3350 Jean*0438
8377b8ee87 Mart*0439 a_QbyOCN (i,j) = 0.0 _d 0
0440 r_QbyOCN (i,j) = 0.0 _d 0
2651ba3350 Jean*0441
381adf77df Gael*0442 #ifdef ALLOW_DIAGNOSTICS
8377b8ee87 Mart*0443 d_AREAbyATM(i,j) = 0.0 _d 0
0444 d_AREAbyICE(i,j) = 0.0 _d 0
0445 d_AREAbyOCN(i,j) = 0.0 _d 0
381adf77df Gael*0446 #endif
2651ba3350 Jean*0447
8377b8ee87 Mart*0448 d_HEFFbyOCNonICE(i,j) = 0.0 _d 0
0449 d_HEFFbyATMonOCN(i,j) = 0.0 _d 0
0450 d_HEFFbyFLOODING(i,j) = 0.0 _d 0
2651ba3350 Jean*0451
8377b8ee87 Mart*0452 d_HEFFbyATMonOCN_open(i,j) = 0.0 _d 0
0453 d_HEFFbyATMonOCN_cover(i,j)= 0.0 _d 0
6b712295de Dimi*0454
8377b8ee87 Mart*0455 d_HSNWbyATMonSNW(i,j) = 0.0 _d 0
0456 d_HSNWbyOCNonSNW(i,j) = 0.0 _d 0
0457 d_HSNWbyRAIN(i,j) = 0.0 _d 0
0458 a_FWbySublim(i,j) = 0.0 _d 0
0459 r_FWbySublim(i,j) = 0.0 _d 0
0460 d_HEFFbySublim(i,j) = 0.0 _d 0
0461 d_HSNWbySublim(i,j) = 0.0 _d 0
840c7fba30 Gael*0462 #ifdef SEAICE_CAP_SUBLIM
8377b8ee87 Mart*0463 latentHeatFluxMax(i,j) = 0.0 _d 0
840c7fba30 Gael*0464 #endif
8377b8ee87 Mart*0465 d_HFRWbyRAIN(i,j) = 0.0 _d 0
0466 tmparr1(i,j) = 0.0 _d 0
56d13a40ed Mart*0467 #if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
8377b8ee87 Mart*0468 greaseLayerThick(i,j) = 0.0 _d 0
0469 d_HEFFbyGREASE(i,j) = 0.0 _d 0
f61838dfc1 Torg*0470 #endif
286983d3d2 Patr*0471 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0472 ticeInMult(i,j,IT) = 0.0 _d 0
0473 ticeOutMult(i,j,IT) = 0.0 _d 0
0474 a_QbyATMmult_cover(i,j,IT) = 0.0 _d 0
0475 a_QSWbyATMmult_cover(i,j,IT) = 0.0 _d 0
0476 a_FWbySublimMult(i,j,IT) = 0.0 _d 0
a73db480d4 Jean*0477 #ifdef SEAICE_CAP_SUBLIM
8377b8ee87 Mart*0478 latentHeatFluxMaxMult(i,j,IT) = 0.0 _d 0
286983d3d2 Patr*0479 #endif
0480 #ifdef SEAICE_ITD
8377b8ee87 Mart*0481 d_HEFFbySublim_ITD(i,j,IT) = 0.0 _d 0
0482 d_HSNWbySublim_ITD(i,j,IT) = 0.0 _d 0
0483 d_HEFFbyOCNonICE_ITD(i,j,IT) = 0.0 _d 0
0484 d_HSNWbyATMonSNW_ITD(i,j,IT) = 0.0 _d 0
0485 d_HEFFbyATMonOCN_ITD(i,j,IT) = 0.0 _d 0
0486 d_HEFFbyATMonOCN_cover_ITD(i,j,IT) = 0.0 _d 0
0487 d_HEFFbyATMonOCN_open_ITD(i,j,IT) = 0.0 _d 0
0488 d_HSNWbyRAIN_ITD(i,j,IT) = 0.0 _d 0
0489 d_HSNWbyOCNonSNW_ITD(i,j,IT) = 0.0 _d 0
0490 d_HEFFbyFLOODING_ITD(i,j,IT) = 0.0 _d 0
0491 r_QbyATMmult_cover(i,j,IT) = 0.0 _d 0
0492 r_FWbySublimMult(i,j,IT) = 0.0 _d 0
1080be7801 Jean*0493
8377b8ee87 Mart*0494 latMeltFrac(i,j,IT) = 0.0 _d 0
0495 latMeltRate(i,j,IT) = 0.0 _d 0
a73db480d4 Jean*0496 #endif
f5282c5b03 Gael*0497 ENDDO
33e17487ce Dimi*0498 ENDDO
0499 ENDDO
0500
2651ba3350 Jean*0501
0502
0503
aea7db20a6 Gael*0504
c6b168144e Jean*0505
1cf549c217 Mart*0506
2651ba3350 Jean*0507
1cf549c217 Mart*0508
8377b8ee87 Mart*0509 DO j=1,sNy
0510 DO i=1,sNx
0511 HEFFpreTH(i,j) = HEFF(i,j,bi,bj)
0512 HSNWpreTH(i,j) = HSNOW(i,j,bi,bj)
0513 AREApreTH(i,j) = AREA(i,j,bi,bj)
4213eb5769 Gael*0514 #ifdef ALLOW_DIAGNOSTICS
8377b8ee87 Mart*0515 DIAGarrayB(i,j) = AREA(i,j,bi,bj)
0516 DIAGarrayC(i,j) = HEFF(i,j,bi,bj)
0517 DIAGarrayD(i,j) = HSNOW(i,j,bi,bj)
4213eb5769 Gael*0518 #endif
f50f58ec54 Gael*0519 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*0520 SItrHEFF(i,j,bi,bj,1)=HEFF(i,j,bi,bj)
0521 SItrAREA(i,j,bi,bj,2)=AREA(i,j,bi,bj)
f50f58ec54 Gael*0522 #endif
581175eaf0 Gael*0523 ENDDO
0524 ENDDO
286983d3d2 Patr*0525 #ifdef SEAICE_ITD
f913c5a485 Mart*0526 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0527 DO j=1,sNy
0528 DO i=1,sNx
0529 HEFFITDpreTH(i,j,IT)=HEFFITD(i,j,IT,bi,bj)
0530 HSNWITDpreTH(i,j,IT)=HSNOWITD(i,j,IT,bi,bj)
0531 AREAITDpreTH(i,j,IT)=AREAITD(i,j,IT,bi,bj)
286983d3d2 Patr*0532
1cf549c217 Mart*0533
8377b8ee87 Mart*0534 IF (AREA(i,j,bi,bj) .GT. ZERO) THEN
0535 areaFracFactor(i,j,IT)=AREAITD(i,j,IT,bi,bj)/AREA(i,j,bi,bj)
114c791332 Jean*0536 ELSE
0537
0538 IF (IT .EQ. 1) THEN
8377b8ee87 Mart*0539 areaFracFactor(i,j,IT)=ONE
114c791332 Jean*0540 ELSE
8377b8ee87 Mart*0541 areaFracFactor(i,j,IT)=ZERO
114c791332 Jean*0542 ENDIF
0543 ENDIF
286983d3d2 Patr*0544 ENDDO
0545 ENDDO
0546 ENDDO
0547 #ifdef ALLOW_SITRACER
1cf549c217 Mart*0548
286983d3d2 Patr*0549 DO iTr=2,5
8377b8ee87 Mart*0550 DO j=1,sNy
0551 DO i=1,sNx
0552 SItrHEFF(i,j,bi,bj,iTr)=ZERO
286983d3d2 Patr*0553 ENDDO
0554 ENDDO
0555 ENDDO
1cf549c217 Mart*0556
8377b8ee87 Mart*0557 DO j=1,sNy
0558 DO i=1,sNx
0559 SItrAREA(i,j,bi,bj,3)=ZERO
286983d3d2 Patr*0560 ENDDO
0561 ENDDO
0562 #endif
0563 #endif /* SEAICE_ITD */
33e17487ce Dimi*0564
4213eb5769 Gael*0565 #ifdef ALLOW_DIAGNOSTICS
4bc8f4264e Mart*0566 IF ( useDiagnostics ) THEN
0567 CALL DIAGNOSTICS_FILL(DIAGarrayB,'SIareaPT',0,1,3,bi,bj,myThid)
0568 CALL DIAGNOSTICS_FILL(DIAGarrayC,'SIheffPT',0,1,3,bi,bj,myThid)
0569 CALL DIAGNOSTICS_FILL(DIAGarrayD,'SIhsnoPT',0,1,3,bi,bj,myThid)
3721cfe5e4 Gael*0570 #ifdef ALLOW_SITRACER
38cfb58d85 Gael*0571 DO iTr = 1, SItrNumInUse
4bc8f4264e Mart*0572 WRITE(diagName,'(A4,I2.2,A2)') 'SItr',iTr,'PT'
4eb4a54cba Jean*0573 IF (SItrMate(iTr).EQ.'HEFF') THEN
4bc8f4264e Mart*0574 CALL DIAGNOSTICS_FRACT_FILL(
0575 I SItracer(1-OLx,1-OLy,bi,bj,iTr),HEFF(1-OLx,1-OLy,bi,bj),
0576 I ONE, 1, diagName,0,1,2,bi,bj,myThid )
4eb4a54cba Jean*0577 ELSE
4bc8f4264e Mart*0578 CALL DIAGNOSTICS_FRACT_FILL(
0579 I SItracer(1-OLx,1-OLy,bi,bj,iTr),AREA(1-OLx,1-OLy,bi,bj),
0580 I ONE, 1, diagName,0,1,2,bi,bj,myThid )
4eb4a54cba Jean*0581 ENDIF
4bc8f4264e Mart*0582 ENDDO
a73db480d4 Jean*0583 #endif /* ALLOW_SITRACER */
4bc8f4264e Mart*0584 ENDIF
a73db480d4 Jean*0585 #endif /* ALLOW_DIAGNOSTICS */
4213eb5769 Gael*0586
8377b8ee87 Mart*0587 #if (defined ALLOW_AUTODIFF && defined SEAICE_MODIFY_GROWTH_ADJ)
3a3bf6419a Gael*0588
4bc8f4264e Mart*0589 IF ( SEAICEadjMODE.GE.1 ) THEN
8377b8ee87 Mart*0590 DO j=1,sNy
0591 DO i=1,sNx
0592 HEFFpreTH(i,j) = 0. _d 0
0593 HSNWpreTH(i,j) = 0. _d 0
0594 AREApreTH(i,j) = 0. _d 0
4bc8f4264e Mart*0595 ENDDO
3a3bf6419a Gael*0596 ENDDO
286983d3d2 Patr*0597 #ifdef SEAICE_ITD
f913c5a485 Mart*0598 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0599 DO j=1,sNy
0600 DO i=1,sNx
0601 HEFFITDpreTH(i,j,IT) = 0. _d 0
0602 HSNWITDpreTH(i,j,IT) = 0. _d 0
0603 AREAITDpreTH(i,j,IT) = 0. _d 0
286983d3d2 Patr*0604 ENDDO
0605 ENDDO
0606 ENDDO
0607 #endif
4bc8f4264e Mart*0608 ENDIF
3a3bf6419a Gael*0609 #endif
581175eaf0 Gael*0610
1cf549c217 Mart*0611
0612
2651ba3350 Jean*0613
581175eaf0 Gael*0614 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0615
0616
0617
33e17487ce Dimi*0618 #endif /* ALLOW_AUTODIFF_TAMC */
286983d3d2 Patr*0619 #ifdef SEAICE_ITD
f913c5a485 Mart*0620 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0621 DO j=1,sNy
0622 DO i=1,sNx
0623 IF (HEFFITDpreTH(i,j,IT) .GT. ZERO) THEN
1cf549c217 Mart*0624
8377b8ee87 Mart*0625 tmpscal1 = SQRT( AREAITDpreTH(i,j,IT)*AREAITDpreTH(i,j,IT)
0626 & + area_reg_sq )
1cf549c217 Mart*0627
8377b8ee87 Mart*0628 tmpscal2 = HEFFITDpreTH(i,j,IT) / tmpscal1
1cf549c217 Mart*0629
8377b8ee87 Mart*0630 heffActualMult(i,j,IT) = SQRT(tmpscal2 * tmpscal2
1cf549c217 Mart*0631 & + hice_reg_sq)
0632
8377b8ee87 Mart*0633 hsnowActualMult(i,j,IT) = HSNWITDpreTH(i,j,IT) / tmpscal1
1cf549c217 Mart*0634
8377b8ee87 Mart*0635 recip_heffActualMult(i,j,IT) = AREAITDpreTH(i,j,IT) /
0636 & SQRT(HEFFITDpreTH(i,j,IT) * HEFFITDpreTH(i,j,IT)
1cf549c217 Mart*0637 & + hice_reg_sq)
0638
0639 ELSE
8377b8ee87 Mart*0640 heffActualMult(i,j,IT) = ZERO
0641 hsnowActualMult(i,j,IT) = ZERO
0642 recip_heffActualMult(i,j,IT) = ZERO
1cf549c217 Mart*0643 ENDIF
0644 ENDDO
0645 ENDDO
0646 ENDDO
0647 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*0648 DO j=1,sNy
0649 DO i=1,sNx
0650 IF (HEFFpreTH(i,j) .GT. ZERO) THEN
1d74e34c65 Jean*0651
8377b8ee87 Mart*0652 tmpscal1 = SQRT(AREApreTH(i,j)* AREApreTH(i,j) + area_reg_sq)
1d74e34c65 Jean*0653
8377b8ee87 Mart*0654 tmpscal2 = HEFFpreTH(i,j) / tmpscal1
1d74e34c65 Jean*0655
8377b8ee87 Mart*0656 heffActual(i,j) = SQRT(tmpscal2 * tmpscal2 + hice_reg_sq)
1d74e34c65 Jean*0657
8377b8ee87 Mart*0658 hsnowActual(i,j) = HSNWpreTH(i,j) / tmpscal1
1d74e34c65 Jean*0659
8377b8ee87 Mart*0660 recip_heffActual(i,j) = AREApreTH(i,j) /
0661 & SQRT(HEFFpreTH(i,j)*HEFFpreTH(i,j) + hice_reg_sq)
1d74e34c65 Jean*0662
4bc8f4264e Mart*0663 ELSE
8377b8ee87 Mart*0664 heffActual(i,j) = ZERO
0665 hsnowActual(i,j) = ZERO
0666 recip_heffActual(i,j) = ZERO
4bc8f4264e Mart*0667 ENDIF
33e17487ce Dimi*0668 ENDDO
0669 ENDDO
1cf549c217 Mart*0670 #endif /* SEAICE_ITD */
33e17487ce Dimi*0671
8377b8ee87 Mart*0672 #if (defined ALLOW_AUTODIFF && defined SEAICE_MODIFY_GROWTH_ADJ)
4bc8f4264e Mart*0673 CALL ZERO_ADJ_1D( sNx*sNy, heffActual, myThid)
0674 CALL ZERO_ADJ_1D( sNx*sNy, hsnowActual, myThid)
0675 CALL ZERO_ADJ_1D( sNx*sNy, recip_heffActual, myThid)
b2891f8c1a Gael*0676 #endif
581175eaf0 Gael*0677
840c7fba30 Gael*0678 #ifdef SEAICE_CAP_SUBLIM
1cf549c217 Mart*0679
0680
0681
0682
0683
286983d3d2 Patr*0684 #ifdef SEAICE_ITD
f913c5a485 Mart*0685 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0686 DO j=1,sNy
0687 DO i=1,sNx
0688 IF (HEFFITDpreTH(i,j,IT) .GT. ZERO) THEN
0689 latentHeatFluxMaxMult(i,j,IT) = lhSublim*recip_deltaTtherm *
0690 & (HEFFITDpreTH(i,j,IT)*SEAICE_rhoIce +
0691 & HSNWITDpreTH(i,j,IT)*SEAICE_rhoSnow)
0692 & /AREAITDpreTH(i,j,IT)
1cf549c217 Mart*0693 ELSE
8377b8ee87 Mart*0694 latentHeatFluxMaxMult(i,j,IT) = ZERO
1cf549c217 Mart*0695 ENDIF
0696 ENDDO
0697 ENDDO
0698 ENDDO
0699 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*0700 DO j=1,sNy
0701 DO i=1,sNx
0702 IF (HEFFpreTH(i,j) .GT. ZERO) THEN
0703 latentHeatFluxMax(i,j) = lhSublim * recip_deltaTtherm *
0704 & (HEFFpreTH(i,j) * SEAICE_rhoIce +
0705 & HSNWpreTH(i,j) * SEAICE_rhoSnow)/AREApreTH(i,j)
4bc8f4264e Mart*0706 ELSE
8377b8ee87 Mart*0707 latentHeatFluxMax(i,j) = ZERO
4bc8f4264e Mart*0708 ENDIF
52ff14d141 Ian *0709 ENDDO
0710 ENDDO
1cf549c217 Mart*0711 #endif /* SEAICE_ITD */
a73db480d4 Jean*0712 #endif /* SEAICE_CAP_SUBLIM */
2afe30fba0 Dimi*0713
2651ba3350 Jean*0714
0715
0716
aea7db20a6 Gael*0717
2ae913cfea Gael*0718
0719
0720
5b0abbe6ee Jean*0721 DO j=1,sNy
0722 DO i=1,sNx
840c7fba30 Gael*0723
5b0abbe6ee Jean*0724 TmixLoc(i,j) = theta(i,j,kSurface,bi,bj)+celsius2K
2ae913cfea Gael*0725
8377b8ee87 Mart*0726 UG(i,j) = MAX(SEAICE_EPS,wspeed(i,j,bi,bj))
33e17487ce Dimi*0727 ENDDO
0728 ENDDO
0729
3a3bf6419a Gael*0730 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0731
0732
0733
0734
3a3bf6419a Gael*0735 #endif /* ALLOW_AUTODIFF_TAMC */
0736
2ae913cfea Gael*0737 CALL SEAICE_BUDGET_OCEAN(
0738 I UG,
5b0abbe6ee Jean*0739 I TmixLoc,
2ae913cfea Gael*0740 O a_QbyATM_open, a_QSWbyATM_open,
0741 I bi, bj, myTime, myIter, myThid )
0742
0743
0744
33e17487ce Dimi*0745
358649780a Gael*0746 IF (useRelativeWind.AND.useAtmWind) THEN
33e17487ce Dimi*0747
8377b8ee87 Mart*0748 DO j=1,sNy
0749 DO i=1,sNx
33e17487ce Dimi*0750 SPEED_SQ =
8377b8ee87 Mart*0751 & (uWind(i,j,bi,bj)
33e17487ce Dimi*0752 & -0.5 _d 0*(uice(i,j,bi,bj)+uice(i+1,j,bi,bj)))**2
8377b8ee87 Mart*0753 & +(vWind(i,j,bi,bj)
33e17487ce Dimi*0754 & -0.5 _d 0*(vice(i,j,bi,bj)+vice(i,j+1,bi,bj)))**2
0755 IF ( SPEED_SQ .LE. SEAICE_EPS_SQ ) THEN
8377b8ee87 Mart*0756 UG(i,j)=SEAICE_EPS
33e17487ce Dimi*0757 ELSE
8377b8ee87 Mart*0758 UG(i,j)=SQRT(SPEED_SQ)
33e17487ce Dimi*0759 ENDIF
0760 ENDDO
0761 ENDDO
0762 ENDIF
2ae913cfea Gael*0763
33e17487ce Dimi*0764 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0765
0766
0767
66d21a8387 Jean*0768
edb6656069 Mart*0769
4fd8e94be0 Gael*0770
edb6656069 Mart*0771
057ebb1030 Mart*0772 #endif /* ALLOW_AUTODIFF_TAMC */
0773
f5282c5b03 Gael*0774
cbd0ee24a8 Mart*0775 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0776 DO j=1,sNy
0777 DO i=1,sNx
0778 ticeInMult(i,j,IT) = TICES(i,j,IT,bi,bj)
0779 ticeOutMult(i,j,IT) = TICES(i,j,IT,bi,bj)
0780 TICES(i,j,IT,bi,bj) = ZERO
286983d3d2 Patr*0781 ENDDO
0782 ENDDO
cbd0ee24a8 Mart*0783 #ifndef SEAICE_ITD
0784
4b6d456764 Mart*0785
cbd0ee24a8 Mart*0786
4b6d456764 Mart*0787 pFac = (2.0 _d 0*IT - 1.0 _d 0)*recip_denominator
74c037b5fb Mart*0788 pFacSnow = 1. _d 0
0789 IF ( SEAICE_useMultDimSnow ) pFacSnow=pFac
8377b8ee87 Mart*0790 DO j=1,sNy
0791 DO i=1,sNx
0792 heffActualMult(i,j,IT) = heffActual(i,j)*pFac
0793 hsnowActualMult(i,j,IT) = hsnowActual(i,j)*pFacSnow
840c7fba30 Gael*0794 #ifdef SEAICE_CAP_SUBLIM
8377b8ee87 Mart*0795 latentHeatFluxMaxMult(i,j,IT) = latentHeatFluxMax(i,j)*pFac
52ff14d141 Ian *0796 #endif
33e17487ce Dimi*0797 ENDDO
0798 ENDDO
cbd0ee24a8 Mart*0799 #endif /* ndef SEAICE_ITD */
f5282c5b03 Gael*0800 ENDDO
0801
0802 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0803
0804
0805
f5282c5b03 Gael*0806 # ifdef SEAICE_CAP_SUBLIM
4eb4a54cba Jean*0807
edb6656069 Mart*0808
f5282c5b03 Gael*0809 # endif
4eb4a54cba Jean*0810
edb6656069 Mart*0811
4eb4a54cba Jean*0812
edb6656069 Mart*0813
4eb4a54cba Jean*0814
edb6656069 Mart*0815
f5282c5b03 Gael*0816 #endif /* ALLOW_AUTODIFF_TAMC */
0817
286983d3d2 Patr*0818 DO IT=1,SEAICE_multDim
9637aec598 Jean*0819 CALL SEAICE_SOLVE4TEMP(
286983d3d2 Patr*0820 I UG, heffActualMult(1,1,IT), hsnowActualMult(1,1,IT),
840c7fba30 Gael*0821 #ifdef SEAICE_CAP_SUBLIM
286983d3d2 Patr*0822 I latentHeatFluxMaxMult(1,1,IT),
52ff14d141 Ian *0823 #endif
4dd39c50d9 Mart*0824 I ticeInMult(1,1,IT),
0825 O ticeOutMult(1,1,IT),
286983d3d2 Patr*0826 O a_QbyATMmult_cover(1,1,IT),
0827 O a_QSWbyATMmult_cover(1,1,IT),
0828 O a_FWbySublimMult(1,1,IT),
33e17487ce Dimi*0829 I bi, bj, myTime, myIter, myThid )
f5282c5b03 Gael*0830 ENDDO
0831
0832 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0833
0834
0835
f5282c5b03 Gael*0836 # ifdef SEAICE_CAP_SUBLIM
4eb4a54cba Jean*0837
edb6656069 Mart*0838
f5282c5b03 Gael*0839 # endif
4eb4a54cba Jean*0840
edb6656069 Mart*0841
4eb4a54cba Jean*0842
edb6656069 Mart*0843
4eb4a54cba Jean*0844
edb6656069 Mart*0845
f5282c5b03 Gael*0846 #endif /* ALLOW_AUTODIFF_TAMC */
4eb4a54cba Jean*0847
286983d3d2 Patr*0848 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0849 DO j=1,sNy
0850 DO i=1,sNx
b69fbfd195 Mart*0851
0852
0853
0854
0855
0856
0857
0858
0859
0860
0861
0862
0863
4b6d456764 Mart*0864
b69fbfd195 Mart*0865
8377b8ee87 Mart*0866 TICES(i,j,IT,bi,bj) = ticeOutMult(i,j,IT)
2ae913cfea Gael*0867
286983d3d2 Patr*0868 #ifdef SEAICE_ITD
0869
0870
8377b8ee87 Mart*0871 a_QbyATM_cover (i,j) = a_QbyATM_cover(i,j)
0872 & + a_QbyATMmult_cover(i,j,IT)*areaFracFactor(i,j,IT)
0873 a_QSWbyATM_cover (i,j) = a_QSWbyATM_cover(i,j)
0874 & + a_QSWbyATMmult_cover(i,j,IT)*areaFracFactor(i,j,IT)
0875 a_FWbySublim (i,j) = a_FWbySublim(i,j)
0876 & + a_FWbySublimMult(i,j,IT)*areaFracFactor(i,j,IT)
286983d3d2 Patr*0877 #else
8377b8ee87 Mart*0878 a_QbyATM_cover (i,j) = a_QbyATM_cover(i,j)
0879 & + a_QbyATMmult_cover(i,j,IT)*SEAICE_PDF(IT)
0880 a_QSWbyATM_cover (i,j) = a_QSWbyATM_cover(i,j)
0881 & + a_QSWbyATMmult_cover(i,j,IT)*SEAICE_PDF(IT)
0882 a_FWbySublim (i,j) = a_FWbySublim(i,j)
0883 & + a_FWbySublimMult(i,j,IT)*SEAICE_PDF(IT)
286983d3d2 Patr*0884 #endif
33e17487ce Dimi*0885 ENDDO
0886 ENDDO
0887 ENDDO
0888
840c7fba30 Gael*0889 #ifdef SEAICE_CAP_SUBLIM
0890 # ifdef ALLOW_DIAGNOSTICS
8377b8ee87 Mart*0891 DO j=1,sNy
0892 DO i=1,sNx
1d74e34c65 Jean*0893
8377b8ee87 Mart*0894 DIAGarrayA(i,j) = a_FWbySublim(i,j) * lhSublim
52ff14d141 Ian *0895 ENDDO
0896 ENDDO
1d74e34c65 Jean*0897
52ff14d141 Ian *0898 IF ( useDiagnostics ) THEN
0899 CALL DIAGNOSTICS_FILL(DIAGarrayA,
0900 & 'SIactLHF',0,1,3,bi,bj,myThid)
0901 CALL DIAGNOSTICS_FILL(latentHeatFluxMax,
0902 & 'SImaxLHF',0,1,3,bi,bj,myThid)
0903 ENDIF
a73db480d4 Jean*0904 # endif /* ALLOW_DIAGNOSTICS */
0905 #endif /* SEAICE_CAP_SUBLIM */
52ff14d141 Ian *0906
4fd8e94be0 Gael*0907 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0908
0909
0910
0911
0912
0913
4fd8e94be0 Gael*0914 #endif /* ALLOW_AUTODIFF_TAMC */
0915
2651ba3350 Jean*0916
286983d3d2 Patr*0917 #ifdef SEAICE_ITD
f913c5a485 Mart*0918 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0919 DO j=1,sNy
0920 DO i=1,sNx
0921 a_QbyATMmult_cover(i,j,IT) = a_QbyATMmult_cover(i,j,IT)
0922 & * convertQ2HI * AREAITDpreTH(i,j,IT)
0923 a_QSWbyATMmult_cover(i,j,IT) = a_QSWbyATMmult_cover(i,j,IT)
0924 & * convertQ2HI * AREAITDpreTH(i,j,IT)
286983d3d2 Patr*0925
8377b8ee87 Mart*0926 r_QbyATMmult_cover(i,j,IT)=a_QbyATMmult_cover(i,j,IT)
286983d3d2 Patr*0927
0928
0929 #ifdef SEAICE_DISABLE_SUBLIM
8377b8ee87 Mart*0930 a_FWbySublimMult(i,j,IT) = ZERO
286983d3d2 Patr*0931 #endif
8377b8ee87 Mart*0932 a_FWbySublimMult(i,j,IT) = SEAICE_deltaTtherm*recip_rhoIce
0933 & * a_FWbySublimMult(i,j,IT)*AREAITDpreTH(i,j,IT)
0934 r_FWbySublimMult(i,j,IT)=a_FWbySublimMult(i,j,IT)
114c791332 Jean*0935 ENDDO
286983d3d2 Patr*0936 ENDDO
0937 ENDDO
8377b8ee87 Mart*0938 DO j=1,sNy
0939 DO i=1,sNx
0940 a_QbyATM_open(i,j) = a_QbyATM_open(i,j)
0941 & * convertQ2HI * ( ONE - AREApreTH(i,j) )
0942 a_QSWbyATM_open(i,j) = a_QSWbyATM_open(i,j)
0943 & * convertQ2HI * ( ONE - AREApreTH(i,j) )
286983d3d2 Patr*0944
8377b8ee87 Mart*0945 r_QbyATM_open(i,j)=a_QbyATM_open(i,j)
286983d3d2 Patr*0946 ENDDO
0947 ENDDO
0948 #else /* SEAICE_ITD */
8377b8ee87 Mart*0949 DO j=1,sNy
0950 DO i=1,sNx
0951 a_QbyATM_cover(i,j) = a_QbyATM_cover(i,j)
0952 & * convertQ2HI * AREApreTH(i,j)
0953 a_QSWbyATM_cover(i,j) = a_QSWbyATM_cover(i,j)
0954 & * convertQ2HI * AREApreTH(i,j)
0955 a_QbyATM_open(i,j) = a_QbyATM_open(i,j)
0956 & * convertQ2HI * ( ONE - AREApreTH(i,j) )
0957 a_QSWbyATM_open(i,j) = a_QSWbyATM_open(i,j)
0958 & * convertQ2HI * ( ONE - AREApreTH(i,j) )
2651ba3350 Jean*0959
8377b8ee87 Mart*0960 r_QbyATM_cover(i,j)=a_QbyATM_cover(i,j)
0961 r_QbyATM_open(i,j)=a_QbyATM_open(i,j)
83ad492c2d Jean*0962
b34884f5be Mart*0963
840c7fba30 Gael*0964 #ifdef SEAICE_DISABLE_SUBLIM
1d74e34c65 Jean*0965
8377b8ee87 Mart*0966 a_FWbySublim(i,j) = ZERO
933b1d4757 Jean*0967 #endif /* SEAICE_DISABLE_SUBLIM */
8377b8ee87 Mart*0968 a_FWbySublim(i,j) = SEAICE_deltaTtherm*recip_rhoIce
0969 & * a_FWbySublim(i,j)*AREApreTH(i,j)
0970 r_FWbySublim(i,j)=a_FWbySublim(i,j)
bea7d9d588 Gael*0971 ENDDO
0972 ENDDO
286983d3d2 Patr*0973 #endif /* SEAICE_ITD */
2ae913cfea Gael*0974
4fd8e94be0 Gael*0975 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0976
0977
0978
0979
0980
0981
0982
0983
0984
4fd8e94be0 Gael*0985 #endif /* ALLOW_AUTODIFF_TAMC */
52ff14d141 Ian *0986
8377b8ee87 Mart*0987 #if (defined ALLOW_AUTODIFF && defined SEAICE_MODIFY_GROWTH_ADJ)
83ad492c2d Jean*0988
4bc8f4264e Mart*0989 IF ( SEAICEadjMODE.GE.3 ) THEN
286983d3d2 Patr*0990 #ifdef SEAICE_ITD
f913c5a485 Mart*0991 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*0992 DO j=1,sNy
0993 DO i=1,sNx
0994 a_QbyATMmult_cover(i,j,IT) = 0. _d 0
0995 r_QbyATMmult_cover(i,j,IT) = 0. _d 0
0996 a_QSWbyATMmult_cover(i,j,IT) = 0. _d 0
286983d3d2 Patr*0997 ENDDO
0998 ENDDO
114c791332 Jean*0999 ENDDO
cbd0ee24a8 Mart*1000 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1001 DO j=1,sNy
1002 DO i=1,sNx
1003 a_QbyATM_cover(i,j) = 0. _d 0
1004 r_QbyATM_cover(i,j) = 0. _d 0
1005 a_QSWbyATM_cover(i,j) = 0. _d 0
4bc8f4264e Mart*1006 ENDDO
3a3bf6419a Gael*1007 ENDDO
cbd0ee24a8 Mart*1008 #endif /* SEAICE_ITD */
4bc8f4264e Mart*1009 ENDIF
3a3bf6419a Gael*1010 #endif
1011
0c0ecd4c7b Jean*1012
2ae913cfea Gael*1013
1014
1015
33e17487ce Dimi*1016 #ifdef ALLOW_AUTODIFF_TAMC
4fd8e94be0 Gael*1017
edb6656069 Mart*1018
4fd8e94be0 Gael*1019
edb6656069 Mart*1020
33e17487ce Dimi*1021 #endif
01e3cf59a2 Gael*1022
8377b8ee87 Mart*1023 DO j=1,sNy
1024 DO i=1,sNx
1d74e34c65 Jean*1025
a4bc0a0b4c Jean*1026 tempFrz = SEAICE_tempFrz0 +
8377b8ee87 Mart*1027 & SEAICE_dTempFrz_dS *salt(i,j,kSurface,bi,bj)
1d74e34c65 Jean*1028
8377b8ee87 Mart*1029 IF ( theta(i,j,kSurface,bi,bj) .GE. tempFrz ) THEN
ceae9498ad Gael*1030 tmpscal1 = SEAICE_mcPheePiston
bb8e6379cb Mart*1031 ELSE
0320e25227 Mart*1032 tmpscal1 =SEAICE_frazilFrac*dzSurf/SEAICE_deltaTtherm
bb8e6379cb Mart*1033 ENDIF
1d74e34c65 Jean*1034
8377b8ee87 Mart*1035 IF ( (AREApreTH(i,j) .GT. 0. _d 0).AND.
ceae9498ad Gael*1036 & (.NOT.SEAICE_mcPheeStepFunc) ) THEN
a4bc0a0b4c Jean*1037 MixedLayerTurbulenceFactor = ONE -
8377b8ee87 Mart*1038 & SEAICE_mcPheeTaper * AREApreTH(i,j)
1039 ELSEIF ( (AREApreTH(i,j) .GT. 0. _d 0).AND.
ceae9498ad Gael*1040 & (SEAICE_mcPheeStepFunc) ) THEN
1041 MixedLayerTurbulenceFactor = ONE - SEAICE_mcPheeTaper
bb8e6379cb Mart*1042 ELSE
1043 MixedLayerTurbulenceFactor = ONE
1044 ENDIF
1d74e34c65 Jean*1045
bb8e6379cb Mart*1046 tmpscal2= - (HeatCapacity_Cp*rhoConst * recip_QI)
8377b8ee87 Mart*1047 & * (theta(i,j,kSurface,bi,bj)-tempFrz)
ec0d7df165 Mart*1048 & * SEAICE_deltaTtherm * HEFFM(i,j,bi,bj)
1d74e34c65 Jean*1049
bb8e6379cb Mart*1050 a_QbyOCN(i,j) =
1051 & tmpscal1 * tmpscal2 * MixedLayerTurbulenceFactor
1052 r_QbyOCN(i,j) = a_QbyOCN(i,j)
01e3cf59a2 Gael*1053 ENDDO
1054 ENDDO
83ad492c2d Jean*1055
53b2f6dc29 Torg*1056 #ifdef SEAICE_ITD
1057
6571f3ca98 Jean*1058
53b2f6dc29 Torg*1059
1060
f913c5a485 Mart*1061 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1062 DO j=1,sNy
1063 DO i=1,sNx
9a1fd902e7 Mart*1064 tempFrz = SEAICE_tempFrz0 +
8377b8ee87 Mart*1065 & SEAICE_dTempFrz_dS *salt(i,j,kSurface,bi,bj)
1066 tmpscal1=(theta(i,j,kSurface,bi,bj)-tempFrz)
1067 tmpscal2=SQRT(0.87 + 0.067*UG(i,j)) * UG(i,j)
9a1fd902e7 Mart*1068
c6b168144e Jean*1069
9a1fd902e7 Mart*1070
1071
1072
1073
1074
1075 floeDiameter = floeDiameterMin * floeDiameterMax
8377b8ee87 Mart*1076 & / ( floeDiameterMax*( 1. _d 0 - AREApreTH(i,j) )
1077 & + floeDiameterMin*AREApreTH(i,j) )
9a1fd902e7 Mart*1078
8377b8ee87 Mart*1079 IF (a_QbyATMmult_cover(i,j,IT).LT.ZERO .OR.
53b2f6dc29 Torg*1080 & a_QbyATM_open(i,j) .LT.ZERO .OR.
1081 & a_QbyOCN(i,j) .LT.ZERO) THEN
9a1fd902e7 Mart*1082
8377b8ee87 Mart*1083
47771cb6d0 Mart*1084
8377b8ee87 Mart*1085 latMeltRate(i,j,IT) = ZERO
a24915ab1a Jean*1086 IF (tmpscal1 .GT. ZERO)
8377b8ee87 Mart*1087 & latMeltRate(i,j,IT) = 1.6 _d -6 * exp(1.36*log(tmpscal1))
c6b168144e Jean*1088
9a1fd902e7 Mart*1089
8377b8ee87 Mart*1090
c6b168144e Jean*1091
9a1fd902e7 Mart*1092
8377b8ee87 Mart*1093
9a1fd902e7 Mart*1094
1095
1096
8377b8ee87 Mart*1097 latMeltFrac(i,j,IT) =
1098 & latMeltRate(i,j,IT)*SEAICE_deltaTtherm*PI /
6571f3ca98 Jean*1099 & (floeAlpha * floeDiameter)
8377b8ee87 Mart*1100 latMeltFrac(i,j,IT)=max(ZERO, min(latMeltFrac(i,j,IT),ONE))
6571f3ca98 Jean*1101 ELSE
8377b8ee87 Mart*1102 latMeltRate(i,j,IT)=0.0 _d 0
1103 latMeltFrac(i,j,IT)=0.0 _d 0
6571f3ca98 Jean*1104 ENDIF
1105 ENDDO
1106 ENDDO
53b2f6dc29 Torg*1107 ENDDO
cbd0ee24a8 Mart*1108 #endif /* SEAICE_ITD */
53b2f6dc29 Torg*1109
8377b8ee87 Mart*1110 #if (defined ALLOW_AUTODIFF && defined SEAICE_MODIFY_GROWTH_ADJ)
4bc8f4264e Mart*1111 CALL ZERO_ADJ_1D( sNx*sNy, r_QbyOCN, myThid)
d187c22362 Gael*1112 #endif
aea7db20a6 Gael*1113
2651ba3350 Jean*1114
1115
1116
aea7db20a6 Gael*1117
56d13a40ed Mart*1118 #if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
f61838dfc1 Torg*1119
1120
56d13a40ed Mart*1121 DO j=1,sNy
1122 DO i=1,sNx
1123 SItracer(i,j,bi,bj,iTrGrease) =
1124 & SItracer(i,j,bi,bj,iTrGrease) * HEFF(i,j,bi,bj)
1125 uRelW(i,j) = uWind(i,j,bi,bj)
1126 vRelW(i,j) = vWind(i,j,bi,bj)
f61838dfc1 Torg*1127 ENDDO
1128 ENDDO
56d13a40ed Mart*1129 IF ( useRelativeWind ) THEN
1130 DO j=1,sNy
1131 DO i=1,sNx
1132 uRelW(i,j) = uWind(i,j,bi,bj)
1133 & - 0.5 _d 0*( uIce(i,j,bi,bj) + uIce(i+1,j,bi,bj) )
1134 vRelW(i,j) = vWind(i,j,bi,bj)
1135 & - 0.5 _d 0*( vIce(i,j,bi,bj) + vIce(i,j+1,bi,bj) )
1136 ENDDO
1137 ENDDO
1138 ENDIF
f61838dfc1 Torg*1139
1140
1141
1142
56d13a40ed Mart*1143 DO j=1,sNy
1144 DO i=1,sNx
f61838dfc1 Torg*1145
c6b168144e Jean*1146
f61838dfc1 Torg*1147
1148
1149
56d13a40ed Mart*1150 tmpscal1 = uRelW(i,j)*uRelW(i,j) + vRelW(i,j)*vRelW(i,j)
f61838dfc1 Torg*1151 IF ( tmpscal1 .LE. SEAICE_EPS_SQ ) THEN
1152 tmpscal1=SEAICE_EPS
1153 ELSE
1154 tmpscal1=SQRT(tmpscal2)
1155 ENDIF
1156 tmpscal1 = 1.4 _d 0 * 1.3 _d -3 * tmpscal1
1157
1158
c6b168144e Jean*1159 tmpscal2 =
f61838dfc1 Torg*1160 & 0.5 _d 0*(uVel(i,j,kSurface,bi,bj)
1161 & +uVel(i+1,j,kSurface,bi,bj))
56d13a40ed Mart*1162 & -0.5 _d 0*(uIce(i,j,bi,bj)+uIce(i+1,j,bi,bj))
f61838dfc1 Torg*1163
c6b168144e Jean*1164 tmpscal3 =
f61838dfc1 Torg*1165 & 0.5 _d 0*(vVel(i,j,kSurface,bi,bj)
1166 & +vVel(i,j+1,kSurface,bi,bj))
56d13a40ed Mart*1167 & -0.5 _d 0*(vIce(i,j,bi,bj)+vIce(i,j+1,bi,bj))
f61838dfc1 Torg*1168
1169 tmpscal4 = (tmpscal2*tmpscal2 + tmpscal3*tmpscal3)
1170 IF ( tmpscal4 .LE. SEAICE_EPS_SQ ) THEN
1171 tmpscal4=SEAICE_EPS
1172 ELSE
1173 tmpscal4=SQRT(tmpscal4)
1174 ENDIF
1175 tmpscal4 = 1027.0 _d 0 * 6.0 _d -3 * tmpscal4
1176
c6b168144e Jean*1177 tmpscal0 =
56d13a40ed Mart*1178 & ( tmpscal1 * uRelW(i,j) + tmpscal4 * tmpscal2 )**2
1179 & + ( tmpscal1 * vRelW(i,j) + tmpscal4 * tmpscal3 )**2
f61838dfc1 Torg*1180 IF ( tmpscal0 .LE. SEAICE_EPS_SQ ) THEN
1181 tmpscal0=SEAICE_EPS
1182 ELSE
1183 tmpscal0=SQRT(tmpscal0)
1184 ENDIF
1185
1186
56d13a40ed Mart*1187 tmpscal3 = 0.5 _d 0 * (dxC(i,j,bi,bj)+dyC(i,j,bi,bj))
f61838dfc1 Torg*1188
1189
c6b168144e Jean*1190
f61838dfc1 Torg*1191
1192
1193
56d13a40ed Mart*1194 tmpscal4 = 4. _d 0 * SItracer(i,j,bi,bj,iTrGrease) * tmpscal3
c6b168144e Jean*1195
f61838dfc1 Torg*1196
56d13a40ed Mart*1197 greaseLayerThick(i,j) = 0.763 _d 0
f61838dfc1 Torg*1198
1199 & * ( tmpscal4
1200
1201
cbeffc6b9a Jean*1202
f61838dfc1 Torg*1203
1204 & * 0.8 _d 0 * tmpscal0
1205
1206 & * 0.01 _d 0 )**THIRD
1207
1208
56d13a40ed Mart*1209 greaseLayerThick(i,j)=max(4. _d -2, greaseLayerThick(i,j))
f61838dfc1 Torg*1210
56d13a40ed Mart*1211 greaseLayerThick(i,j)=min(4. _d 0 , greaseLayerThick(i,j))
f61838dfc1 Torg*1212
1213 ENDDO
1214 ENDDO
1215 #endif /* SEAICE_GREASE */
1216
ae36251cae Gael*1217
1218
2ae913cfea Gael*1219
b34884f5be Mart*1220 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1221
1222
b34884f5be Mart*1223 #endif /* ALLOW_AUTODIFF_TAMC */
286983d3d2 Patr*1224 #ifdef SEAICE_ITD
f913c5a485 Mart*1225 DO IT=1,SEAICE_multDim
cbd0ee24a8 Mart*1226 #endif /* SEAICE_ITD */
8377b8ee87 Mart*1227 DO j=1,sNy
1228 DO i=1,sNx
ae36251cae Gael*1229
a4bc0a0b4c Jean*1230 tmpscal2 =
286983d3d2 Patr*1231 #ifdef SEAICE_ITD
8377b8ee87 Mart*1232 & MAX(MIN(r_FWbySublimMult(i,j,IT),HSNOWITD(i,j,IT,bi,bj)
286983d3d2 Patr*1233 & *SNOW2ICE),ZERO)
8377b8ee87 Mart*1234 d_HSNWbySublim_ITD(i,j,IT) = - tmpscal2 * ICE2SNOW
286983d3d2 Patr*1235
8377b8ee87 Mart*1236 d_HSNWbySublim(i,j) = d_HSNWbySublim(i,j) - tmpscal2
286983d3d2 Patr*1237 & *ICE2SNOW
8377b8ee87 Mart*1238 r_FWbySublimMult(i,j,IT)= r_FWbySublimMult(i,j,IT) - tmpscal2
cbd0ee24a8 Mart*1239 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1240 & MAX(MIN(r_FWbySublim(i,j),HSNOW(i,j,bi,bj)*SNOW2ICE),ZERO)
1241 d_HSNWbySublim(i,j) = - tmpscal2 * ICE2SNOW
1242 HSNOW(i,j,bi,bj) = HSNOW(i,j,bi,bj) - tmpscal2*ICE2SNOW
1243 r_FWbySublim(i,j) = r_FWbySublim(i,j) - tmpscal2
cbd0ee24a8 Mart*1244 #endif /* SEAICE_ITD */
b34884f5be Mart*1245 ENDDO
1246 ENDDO
ae36251cae Gael*1247 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1248
1249
ae36251cae Gael*1250 #endif /* ALLOW_AUTODIFF_TAMC */
8377b8ee87 Mart*1251 DO j=1,sNy
1252 DO i=1,sNx
ae36251cae Gael*1253
a4bc0a0b4c Jean*1254 tmpscal2 =
286983d3d2 Patr*1255 #ifdef SEAICE_ITD
8377b8ee87 Mart*1256 & MAX(MIN(r_FWbySublimMult(i,j,IT),HEFFITD(i,j,IT,bi,bj)),ZERO)
1257 d_HEFFbySublim_ITD(i,j,IT) = - tmpscal2
286983d3d2 Patr*1258
8377b8ee87 Mart*1259 d_HEFFbySublim(i,j) = d_HEFFbySublim(i,j) - tmpscal2
1260 r_FWbySublimMult(i,j,IT) = r_FWbySublimMult(i,j,IT) - tmpscal2
cbd0ee24a8 Mart*1261 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1262 & MAX(MIN(r_FWbySublim(i,j),HEFF(i,j,bi,bj)),ZERO)
1263 d_HEFFbySublim(i,j) = - tmpscal2
1264 HEFF(i,j,bi,bj) = HEFF(i,j,bi,bj) - tmpscal2
1265 r_FWbySublim(i,j) = r_FWbySublim(i,j) - tmpscal2
cbd0ee24a8 Mart*1266 #endif /* SEAICE_ITD */
ae36251cae Gael*1267 ENDDO
1268 ENDDO
8377b8ee87 Mart*1269 DO j=1,sNy
1270 DO i=1,sNx
eed5d4f5a4 Gael*1271
286983d3d2 Patr*1272
eed5d4f5a4 Gael*1273
286983d3d2 Patr*1274 #ifdef SEAICE_ITD
8377b8ee87 Mart*1275 a_QbyATMmult_cover(i,j,IT) = a_QbyATMmult_cover(i,j,IT)
1276 & - r_FWbySublimMult(i,j,IT)
1277 r_QbyATMmult_cover(i,j,IT) = r_QbyATMmult_cover(i,j,IT)
1278 & - r_FWbySublimMult(i,j,IT)
cbd0ee24a8 Mart*1279 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1280 a_QbyATM_cover(i,j) = a_QbyATM_cover(i,j)-r_FWbySublim(i,j)
1281 r_QbyATM_cover(i,j) = r_QbyATM_cover(i,j)-r_FWbySublim(i,j)
cbd0ee24a8 Mart*1282 #endif /* SEAICE_ITD */
eed5d4f5a4 Gael*1283 ENDDO
1284 ENDDO
286983d3d2 Patr*1285 #ifdef SEAICE_ITD
1286
114c791332 Jean*1287 ENDDO
cbd0ee24a8 Mart*1288 #endif /* SEAICE_ITD */
b34884f5be Mart*1289
52ff14d141 Ian *1290
1291
1292
1293 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1294
1295
52ff14d141 Ian *1296 #endif /* ALLOW_AUTODIFF_TAMC */
1297
62cc8945c8 Gael*1298 IF (.NOT.SEAICE_growMeltByConv) THEN
6571f3ca98 Jean*1299
286983d3d2 Patr*1300 #ifdef SEAICE_ITD
f913c5a485 Mart*1301 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1302 DO j=1,sNy
1303 DO i=1,sNx
114c791332 Jean*1304
1305
286983d3d2 Patr*1306
8377b8ee87 Mart*1307 tmpscal1=MAX(r_QbyOCN(i,j)*areaFracFactor(i,j,IT),
1308 & -HEFFITD(i,j,IT,bi,bj))
1309 d_HEFFbyOCNonICE_ITD(i,j,IT)=tmpscal1
1310 d_HEFFbyOCNonICE(i,j) = d_HEFFbyOCNonICE(i,j) + tmpscal1
286983d3d2 Patr*1311 ENDDO
1312 ENDDO
1313 ENDDO
1314 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*1315 DO j=1,sNy
1316 DO i=1,sNx
1317 SItrHEFF(i,j,bi,bj,2) = HEFFpreTH(i,j)
1318 & + d_HEFFbySublim(i,j)
1319 & + d_HEFFbyOCNonICE(i,j)
286983d3d2 Patr*1320 ENDDO
1321 ENDDO
1322 #endif
8377b8ee87 Mart*1323 DO j=1,sNy
1324 DO i=1,sNx
1325 r_QbyOCN(i,j)=r_QbyOCN(i,j)-d_HEFFbyOCNonICE(i,j)
286983d3d2 Patr*1326 ENDDO
1327 ENDDO
1328 #else /* SEAICE_ITD */
8377b8ee87 Mart*1329 DO j=1,sNy
1330 DO i=1,sNx
1331 d_HEFFbyOCNonICE(i,j)=MAX(r_QbyOCN(i,j), -HEFF(i,j,bi,bj))
1332 r_QbyOCN(i,j)=r_QbyOCN(i,j)-d_HEFFbyOCNonICE(i,j)
1333 HEFF(i,j,bi,bj)=HEFF(i,j,bi,bj) + d_HEFFbyOCNonICE(i,j)
52ff14d141 Ian *1334 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*1335 SItrHEFF(i,j,bi,bj,2)=HEFF(i,j,bi,bj)
52ff14d141 Ian *1336 #endif
1337 ENDDO
1338 ENDDO
286983d3d2 Patr*1339 #endif /* SEAICE_ITD */
52ff14d141 Ian *1340
634144d037 Jean*1341 ENDIF
62cc8945c8 Gael*1342
ae36251cae Gael*1343
1344
1345
33e17487ce Dimi*1346 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1347
1348
33e17487ce Dimi*1349 #endif /* ALLOW_AUTODIFF_TAMC */
1350
286983d3d2 Patr*1351 #ifdef SEAICE_ITD
f913c5a485 Mart*1352 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1353 DO j=1,sNy
1354 DO i=1,sNx
286983d3d2 Patr*1355
1356
8377b8ee87 Mart*1357 tmpscal1=MAX(r_QbyATMmult_cover(i,j,IT),
1358 & -HSNOWITD(i,j,IT,bi,bj)*SNOW2ICE)
286983d3d2 Patr*1359 tmpscal2=MIN(tmpscal1,0. _d 0)
1360 #ifdef SEAICE_MODIFY_GROWTH_ADJ
1361
1362 IF ( SEAICEadjMODE.GE.2 ) tmpscal2 = 0. _d 0
1363 #endif
8377b8ee87 Mart*1364 d_HSNWbyATMonSNW_ITD(i,j,IT) = tmpscal2*ICE2SNOW
1365 d_HSNWbyATMonSNW(i,j) = d_HSNWbyATMonSNW(i,j)
286983d3d2 Patr*1366 & + tmpscal2*ICE2SNOW
8377b8ee87 Mart*1367 r_QbyATMmult_cover(i,j,IT)=r_QbyATMmult_cover(i,j,IT)
286983d3d2 Patr*1368 & - tmpscal2
114c791332 Jean*1369 ENDDO
1370 ENDDO
1371 ENDDO
286983d3d2 Patr*1372 #else /* SEAICE_ITD */
8377b8ee87 Mart*1373 DO j=1,sNy
1374 DO i=1,sNx
bb8e6379cb Mart*1375
1376
8377b8ee87 Mart*1377 tmpscal1=MAX(r_QbyATM_cover(i,j),-HSNOW(i,j,bi,bj)*SNOW2ICE)
3a3bf6419a Gael*1378 tmpscal2=MIN(tmpscal1,0. _d 0)
1379 #ifdef SEAICE_MODIFY_GROWTH_ADJ
1380
4bc8f4264e Mart*1381 IF ( SEAICEadjMODE.GE.2 ) tmpscal2 = 0. _d 0
3a3bf6419a Gael*1382 #endif
8377b8ee87 Mart*1383 d_HSNWbyATMonSNW(i,j)= tmpscal2*ICE2SNOW
1384 HSNOW(i,j,bi,bj) = HSNOW(i,j,bi,bj) + tmpscal2*ICE2SNOW
1385 r_QbyATM_cover(i,j)=r_QbyATM_cover(i,j) - tmpscal2
33e17487ce Dimi*1386 ENDDO
1387 ENDDO
286983d3d2 Patr*1388 #endif /* SEAICE_ITD */
33e17487ce Dimi*1389
c50ad14e64 Gael*1390
1391
2ae913cfea Gael*1392
b34884f5be Mart*1393 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1394
1395
3a3bf6419a Gael*1396 #endif /* ALLOW_AUTODIFF_TAMC */
2ae913cfea Gael*1397
2651ba3350 Jean*1398
1399
1400
1401
e27b57218b Gael*1402
286983d3d2 Patr*1403 #ifdef SEAICE_ITD
f913c5a485 Mart*1404 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1405 DO j=1,sNy
1406 DO i=1,sNx
1407 tmpscal1 = HEFFITDpreTH(i,j,IT)
1408 & + d_HEFFbySublim_ITD(i,j,IT)
1409 & + d_HEFFbyOCNonICE_ITD(i,j,IT)
286983d3d2 Patr*1410 tmpscal2 = MAX(-tmpscal1,
8377b8ee87 Mart*1411 & r_QbyATMmult_cover(i,j,IT)
1080be7801 Jean*1412
8377b8ee87 Mart*1413 & + AREAITDpreTH(i,j,IT) * r_QbyOCN(i,j))
1414 d_HEFFbyATMonOCN_cover_ITD(i,j,IT) = tmpscal2
1415 d_HEFFbyATMonOCN_cover(i,j) = d_HEFFbyATMonOCN_cover(i,j)
286983d3d2 Patr*1416 & + tmpscal2
8377b8ee87 Mart*1417 d_HEFFbyATMonOCN_ITD(i,j,IT) = d_HEFFbyATMonOCN_ITD(i,j,IT)
286983d3d2 Patr*1418 & + tmpscal2
8377b8ee87 Mart*1419 d_HEFFbyATMonOCN(i,j) = d_HEFFbyATMonOCN(i,j)
286983d3d2 Patr*1420 & + tmpscal2
8377b8ee87 Mart*1421 r_QbyATMmult_cover(i,j,IT) = r_QbyATMmult_cover(i,j,IT)
286983d3d2 Patr*1422 & - tmpscal2
114c791332 Jean*1423 ENDDO
1424 ENDDO
1425 ENDDO
286983d3d2 Patr*1426 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*1427 DO j=1,sNy
1428 DO i=1,sNx
1429 SItrHEFF(i,j,bi,bj,3) = SItrHEFF(i,j,bi,bj,2)
1430 & + d_HEFFbyATMonOCN_cover(i,j)
114c791332 Jean*1431 ENDDO
1432 ENDDO
286983d3d2 Patr*1433 #endif
cbd0ee24a8 Mart*1434 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1435 DO j=1,sNy
1436 DO i=1,sNx
2afe30fba0 Dimi*1437
8377b8ee87 Mart*1438 tmpscal2 = MAX(-HEFF(i,j,bi,bj),r_QbyATM_cover(i,j)+
1d74e34c65 Jean*1439
8377b8ee87 Mart*1440 & AREApreTH(i,j) * r_QbyOCN(i,j))
2afe30fba0 Dimi*1441
8377b8ee87 Mart*1442 d_HEFFbyATMonOCN_cover(i,j)=tmpscal2
1443 d_HEFFbyATMonOCN(i,j)=d_HEFFbyATMonOCN(i,j)+tmpscal2
1444 r_QbyATM_cover(i,j)=r_QbyATM_cover(i,j)-tmpscal2
1445 HEFF(i,j,bi,bj) = HEFF(i,j,bi,bj) + tmpscal2
2afe30fba0 Dimi*1446
f50f58ec54 Gael*1447 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*1448 SItrHEFF(i,j,bi,bj,3)=HEFF(i,j,bi,bj)
f50f58ec54 Gael*1449 #endif
ee38904d3a Gael*1450 ENDDO
1451 ENDDO
286983d3d2 Patr*1452 #endif /* SEAICE_ITD */
33e17487ce Dimi*1453
ed104d6f21 Dimi*1454
2ae913cfea Gael*1455
634144d037 Jean*1456 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1457
1458
1459
634144d037 Jean*1460 #endif /* ALLOW_AUTODIFF_TAMC */
ed104d6f21 Dimi*1461 IF ( snowPrecipFile .NE. ' ' ) THEN
1462
8377b8ee87 Mart*1463 DO j=1,sNy
1464 DO i=1,sNx
1465 d_HSNWbyRAIN(i,j) = convertPRECIP2HI * ICE2SNOW *
1466 & snowPrecip(i,j,bi,bj) * AREApreTH(i,j)
1467 d_HFRWbyRAIN(i,j) = -convertPRECIP2HI *
1468 & ( PRECIP(i,j,bi,bj) - snowPrecip(i,j,bi,bj) ) *
1469 & AREApreTH(i,j)
1470 HSNOW(i,j,bi,bj) = HSNOW(i,j,bi,bj) + d_HSNWbyRAIN(i,j)
ed104d6f21 Dimi*1471 ENDDO
1472 ENDDO
1473 ELSE
1474
1475
8377b8ee87 Mart*1476 DO j=1,sNy
1477 DO i=1,sNx
2651ba3350 Jean*1478
b69fbfd195 Mart*1479
c50ad14e64 Gael*1480
8377b8ee87 Mart*1481 IF ( a_QbyATM_cover(i,j).GE. 0. _d 0 ) THEN
3b4bb9d1ee Gael*1482
8377b8ee87 Mart*1483 d_HFRWbyRAIN(i,j)=0. _d 0
1484 d_HSNWbyRAIN(i,j)=convertPRECIP2HI*ICE2SNOW*
1485 & PRECIP(i,j,bi,bj)*AREApreTH(i,j)
ed104d6f21 Dimi*1486 ELSE
2651ba3350 Jean*1487
8377b8ee87 Mart*1488 d_HFRWbyRAIN(i,j)=-convertPRECIP2HI*
1489 & PRECIP(i,j,bi,bj)*AREApreTH(i,j)
1490 d_HSNWbyRAIN(i,j)=0. _d 0
ed104d6f21 Dimi*1491 ENDIF
286983d3d2 Patr*1492 ENDDO
1493 ENDDO
1494 #ifdef SEAICE_ITD
f913c5a485 Mart*1495 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1496 DO j=1,sNy
1497 DO i=1,sNx
1498 d_HSNWbyRAIN_ITD(i,j,IT)
1499 & = d_HSNWbyRAIN(i,j)*areaFracFactor(i,j,IT)
ed104d6f21 Dimi*1500 ENDDO
33e17487ce Dimi*1501 ENDDO
114c791332 Jean*1502 ENDDO
cbd0ee24a8 Mart*1503 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1504 DO j=1,sNy
1505 DO i=1,sNx
1506 HSNOW(i,j,bi,bj) = HSNOW(i,j,bi,bj) + d_HSNWbyRAIN(i,j)
286983d3d2 Patr*1507 ENDDO
1508 ENDDO
cbd0ee24a8 Mart*1509 #endif /* SEAICE_ITD */
2651ba3350 Jean*1510
1511
1512
286983d3d2 Patr*1513
ed104d6f21 Dimi*1514 ENDIF
33e17487ce Dimi*1515
c50ad14e64 Gael*1516
2ae913cfea Gael*1517
33e17487ce Dimi*1518
2651ba3350 Jean*1519
1520
33e17487ce Dimi*1521 #ifndef SEAICE_EXCLUDE_FOR_EXACT_AD_TESTING
3a3bf6419a Gael*1522 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1523
1524
3a3bf6419a Gael*1525 #endif /* ALLOW_AUTODIFF_TAMC */
286983d3d2 Patr*1526
62cc8945c8 Gael*1527 IF (.NOT.SEAICE_growMeltByConv) THEN
1528
286983d3d2 Patr*1529 #ifdef SEAICE_ITD
f913c5a485 Mart*1530 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1531 DO j=1,sNy
1532 DO i=1,sNx
1533 tmpscal4 = HSNWITDpreTH(i,j,IT)
1534 & + d_HSNWbySublim_ITD(i,j,IT)
1535 & + d_HSNWbyATMonSNW_ITD(i,j,IT)
1536 & + d_HSNWbyRAIN_ITD(i,j,IT)
1537 tmpscal1=MAX(r_QbyOCN(i,j)*ICE2SNOW*areaFracFactor(i,j,IT),
286983d3d2 Patr*1538 & -tmpscal4)
1539 tmpscal2=MIN(tmpscal1,0. _d 0)
1540 #ifdef SEAICE_MODIFY_GROWTH_ADJ
1541
8377b8ee87 Mart*1542 IF ( SEAICEadjMODE.GE.2 ) tmpscal2 = 0. _d 0
286983d3d2 Patr*1543 #endif
8377b8ee87 Mart*1544 d_HSNWbyOCNonSNW_ITD(i,j,IT) = tmpscal2
1545 d_HSNWbyOCNonSNW(i,j) = d_HSNWbyOCNonSNW(i,j) + tmpscal2
1546 r_QbyOCN(i,j)=r_QbyOCN(i,j) - tmpscal2*SNOW2ICE
286983d3d2 Patr*1547 ENDDO
1548 ENDDO
1549 ENDDO
cbd0ee24a8 Mart*1550 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1551 DO j=1,sNy
1552 DO i=1,sNx
1553 tmpscal1=MAX(r_QbyOCN(i,j)*ICE2SNOW, -HSNOW(i,j,bi,bj))
3a3bf6419a Gael*1554 tmpscal2=MIN(tmpscal1,0. _d 0)
1555 #ifdef SEAICE_MODIFY_GROWTH_ADJ
1556
8377b8ee87 Mart*1557 IF ( SEAICEadjMODE.GE.2 ) tmpscal2 = 0. _d 0
3a3bf6419a Gael*1558 #endif
8377b8ee87 Mart*1559 d_HSNWbyOCNonSNW(i,j) = tmpscal2
1560 r_QbyOCN(i,j)=r_QbyOCN(i,j)
1561 & -d_HSNWbyOCNonSNW(i,j)*SNOW2ICE
1562 HSNOW(i,j,bi,bj) = HSNOW(i,j,bi,bj)+d_HSNWbyOCNonSNW(i,j)
33e17487ce Dimi*1563 ENDDO
1564 ENDDO
286983d3d2 Patr*1565 #endif /* SEAICE_ITD */
62cc8945c8 Gael*1566
634144d037 Jean*1567 ENDIF
62cc8945c8 Gael*1568
2ae913cfea Gael*1569 #endif /* SEAICE_EXCLUDE_FOR_EXACT_AD_TESTING */
2651ba3350 Jean*1570
85586adda4 Gael*1571
1572
1573
1574 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1575
1576
1577
1578
1579
3a3bf6419a Gael*1580 #endif /* ALLOW_AUTODIFF_TAMC */
6ec4646d60 Gael*1581
8377b8ee87 Mart*1582 DO j=1,sNy
1583 DO i=1,sNx
286983d3d2 Patr*1584 #ifdef SEAICE_ITD
00c7090dc0 Mart*1585
1586
8377b8ee87 Mart*1587 tmpscal4 = HEFFpreTH(i,j)
1588 & + d_HEFFbySublim(i,j)
1589 & + d_HEFFbyOCNonICE(i,j)
1590 & + d_HEFFbyATMonOCN(i,j)
cbd0ee24a8 Mart*1591 #else /* ndef SEAICE_ITD */
00c7090dc0 Mart*1592
8377b8ee87 Mart*1593 tmpscal4 = HEFF(i,j,bi,bj)
cbd0ee24a8 Mart*1594 #endif /* SEAICE_ITD */
00c7090dc0 Mart*1595
1596
1597 tmpscal1=r_QbyATM_open(i,j)+r_QbyOCN(i,j) *
1598 & (1.0 _d 0 - AREApreTH(i,j))
1599
1600
1601 #ifdef SHORTWAVE_HEATING
1602
1603
1604
1605 tmpscal2 = SWFrac3D(i,j,kSrfS,bi,bj) * a_QSWbyATM_open(i,j)
1606 #else
1607 tmpscal2 = 0. _d 0
1608 #endif
1609
1610
1611 tmpscal3=facOpenGrow*MAX(tmpscal1-tmpscal2,
1612 & -tmpscal4*facOpenMelt)*HEFFM(i,j,bi,bj)
56d13a40ed Mart*1613 #if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
00c7090dc0 Mart*1614
1615
1616
1617
1618
f61838dfc1 Torg*1619
00c7090dc0 Mart*1620
f61838dfc1 Torg*1621 greaseNewFrazil = max(0.0 _d 0, tmpscal3)
1622
1623
00c7090dc0 Mart*1624
1625
8377b8ee87 Mart*1626 IF ((1.0 _d 0 - AREApreTH(i,j)).LE.siEps) THEN
1627 tmpscal3 = tmpscal3 + SItracer(i,j,bi,bj,iTrGrease)
1628 SItracer(i,j,bi,bj,iTrGrease) = 0. _d 0
c6b168144e Jean*1629
8377b8ee87 Mart*1630 ELSEIF (greaseNewFrazil .GT. 0. _d 0) THEN
00c7090dc0 Mart*1631
c6b168144e Jean*1632 tmpscal3=0. _d 0
f61838dfc1 Torg*1633
1634
00c7090dc0 Mart*1635
f61838dfc1 Torg*1636
00c7090dc0 Mart*1637
1638
f61838dfc1 Torg*1639 tmpscal1=exp(-SEAICE_deltaTtherm/greaseDecayTime)
00c7090dc0 Mart*1640
8377b8ee87 Mart*1641 d_HEFFbyGREASE(i,j) =
1642 & SItracer(i,j,bi,bj,iTrGrease)
f61838dfc1 Torg*1643 & * (1.0 _d 0 - tmpscal1)
00c7090dc0 Mart*1644
8377b8ee87 Mart*1645 SItracer(i,j,bi,bj,iTrGrease) =
1646 & SItracer(i,j,bi,bj,iTrGrease) * tmpscal1
00c7090dc0 Mart*1647
8377b8ee87 Mart*1648 SItrBucket(i,j,bi,bj,iTrGrease) =
1649 & SItrBucket(i,j,bi,bj,iTrGrease)
1650 & + d_HEFFbyGREASE(i,j)
f61838dfc1 Torg*1651
1652
1653
c6b168144e Jean*1654 SItracer(i,j,bi,bj,iTrGrease) =
f61838dfc1 Torg*1655 & SItracer(i,j,bi,bj,iTrGrease) + greaseNewFrazil
8377b8ee87 Mart*1656 ENDIF
f61838dfc1 Torg*1657
8377b8ee87 Mart*1658 tmpscal3=tmpscal3+SItrBucket(i,j,bi,bj,iTrGrease)
00c7090dc0 Mart*1659
8377b8ee87 Mart*1660 SItrBucket(i,j,bi,bj,iTrGrease)=0. _d 0
f61838dfc1 Torg*1661 #endif /* SEAICE_GREASE */
286983d3d2 Patr*1662 #ifdef SEAICE_ITD
00c7090dc0 Mart*1663
8377b8ee87 Mart*1664 d_HEFFbyATMonOCN_open_ITD(i,j,1)=tmpscal3
1665 d_HEFFbyATMonOCN_ITD(i,j,1) =d_HEFFbyATMonOCN_ITD(i,j,1)
286983d3d2 Patr*1666 & +tmpscal3
cbd0ee24a8 Mart*1667 #endif /* SEAICE_ITD */
8377b8ee87 Mart*1668 d_HEFFbyATMonOCN_open(i,j)=tmpscal3
1669 d_HEFFbyATMonOCN(i,j)=d_HEFFbyATMonOCN(i,j)+tmpscal3
1670 r_QbyATM_open(i,j)=r_QbyATM_open(i,j)-tmpscal3
1671 HEFF(i,j,bi,bj) = HEFF(i,j,bi,bj) + tmpscal3
85586adda4 Gael*1672 ENDDO
1673 ENDDO
1674
f50f58ec54 Gael*1675 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*1676 DO j=1,sNy
1677 DO i=1,sNx
1d74e34c65 Jean*1678
286983d3d2 Patr*1679 #ifdef SEAICE_ITD
8377b8ee87 Mart*1680 SItrHEFF(i,j,bi,bj,4)=SItrHEFF(i,j,bi,bj,3)
1681 & +d_HEFFbyATMonOCN_open(i,j)
cbd0ee24a8 Mart*1682 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1683 SItrHEFF(i,j,bi,bj,4)=HEFF(i,j,bi,bj)
cbd0ee24a8 Mart*1684 #endif /* SEAICE_ITD */
f50f58ec54 Gael*1685 ENDDO
1686 ENDDO
a73db480d4 Jean*1687 #endif /* ALLOW_SITRACER */
f50f58ec54 Gael*1688
581175eaf0 Gael*1689
1690
1691
2651ba3350 Jean*1692
3a3bf6419a Gael*1693 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1694
1695
3a3bf6419a Gael*1696 #endif /* ALLOW_AUTODIFF_TAMC */
581175eaf0 Gael*1697 IF ( SEAICEuseFlooding ) THEN
286983d3d2 Patr*1698 #ifdef SEAICE_ITD
f913c5a485 Mart*1699 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1700 DO j=1,sNy
1701 DO i=1,sNx
1702 tmpscal3 = HEFFITDpreTH(i,j,IT)
1703 & + d_HEFFbySublim_ITD(i,j,IT)
1704 & + d_HEFFbyOCNonICE_ITD(i,j,IT)
1705 & + d_HEFFbyATMonOCN_ITD(i,j,IT)
1706 tmpscal4 = HSNWITDpreTH(i,j,IT)
1707 & + d_HSNWbySublim_ITD(i,j,IT)
1708 & + d_HSNWbyATMonSNW_ITD(i,j,IT)
1709 & + d_HSNWbyRAIN_ITD(i,j,IT)
286983d3d2 Patr*1710 tmpscal0 = (tmpscal4*SEAICE_rhoSnow
1711 & + tmpscal3*SEAICE_rhoIce)
1712 & * recip_rhoConst
1713 tmpscal1 = MAX( 0. _d 0, tmpscal0 - tmpscal3)
8377b8ee87 Mart*1714 d_HEFFbyFLOODING_ITD(i,j,IT) = tmpscal1
1715 d_HEFFbyFLOODING(i,j) = d_HEFFbyFLOODING(i,j) + tmpscal1
114c791332 Jean*1716 ENDDO
1717 ENDDO
1718 ENDDO
cbd0ee24a8 Mart*1719 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1720 DO j=1,sNy
1721 DO i=1,sNx
1722 tmpscal0 = (HSNOW(i,j,bi,bj)*SEAICE_rhoSnow
1723 & +HEFF(i,j,bi,bj)*SEAICE_rhoIce)*recip_rhoConst
1724 tmpscal1 = MAX( 0. _d 0, tmpscal0 - HEFF(i,j,bi,bj))
1725 d_HEFFbyFLOODING(i,j)=tmpscal1
1726 HEFF(i,j,bi,bj) = HEFF(i,j,bi,bj)+d_HEFFbyFLOODING(i,j)
1727 HSNOW(i,j,bi,bj) = HSNOW(i,j,bi,bj)-
1728 & d_HEFFbyFLOODING(i,j)*ICE2SNOW
581175eaf0 Gael*1729 ENDDO
1730 ENDDO
cbd0ee24a8 Mart*1731 #endif /* SEAICE_ITD */
581175eaf0 Gael*1732 ENDIF
050eb90cc6 Gael*1733
286983d3d2 Patr*1734 #ifdef SEAICE_ITD
1735
1736
f913c5a485 Mart*1737 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1738 DO j=1,sNy
1739 DO i=1,sNx
1740 HEFFITD(i,j,IT,bi,bj) = HEFFITD(i,j,IT,bi,bj)
1741 & + d_HEFFbySublim_ITD(i,j,IT)
1742 & + d_HEFFbyOCNonICE_ITD(i,j,IT)
1743 & + d_HEFFbyATMonOCN_ITD(i,j,IT)
1744 & + d_HEFFbyFLOODING_ITD(i,j,IT)
1745 HSNOWITD(i,j,IT,bi,bj) = HSNOWITD(i,j,IT,bi,bj)
1746 & + d_HSNWbySublim_ITD(i,j,IT)
1747 & + d_HSNWbyATMonSNW_ITD(i,j,IT)
1748 & + d_HSNWbyRAIN_ITD(i,j,IT)
1749 & + d_HSNWbyOCNonSNW_ITD(i,j,IT)
1750 & - d_HEFFbyFLOODING_ITD(i,j,IT)
286983d3d2 Patr*1751 & * ICE2SNOW
114c791332 Jean*1752 ENDDO
1753 ENDDO
1754 ENDDO
cbd0ee24a8 Mart*1755 #endif /* SEAICE_ITD */
581175eaf0 Gael*1756
2651ba3350 Jean*1757
1758
1759
2ae913cfea Gael*1760
33e17487ce Dimi*1761 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1762
1763
1764
1765
1766
1767
4fcdd931bd Patr*1768
edb6656069 Mart*1769
1770
1771
4fcdd931bd Patr*1772
edb6656069 Mart*1773
1774
1775
1776
1777
1778
33e17487ce Dimi*1779 #endif /* ALLOW_AUTODIFF_TAMC */
1780
286983d3d2 Patr*1781 #ifdef SEAICE_ITD
c6b168144e Jean*1782
f913c5a485 Mart*1783
1784
cbd0ee24a8 Mart*1785
8377b8ee87 Mart*1786 DO j=1,sNy
1787 DO i=1,sNx
1788 HEFF(i,j,bi,bj)=HEFFITD(i,j,1,bi,bj)
1789 AREA(i,j,bi,bj)=AREAITD(i,j,1,bi,bj)
1790 HSNOW(i,j,bi,bj)=HSNOWITD(i,j,1,bi,bj)
1791 HEFFpreTH(i,j)=HEFFITDpreTH(i,j,1)
1792 AREApreTH(i,j)=AREAITDpreTH(i,j,1)
1793 recip_heffActual(i,j)=recip_heffActualMult(i,j,1)
114c791332 Jean*1794 ENDDO
1795 ENDDO
cbd0ee24a8 Mart*1796 #endif /* SEAICE_ITD */
8377b8ee87 Mart*1797 DO j=1,sNy
1798 DO i=1,sNx
2651ba3350 Jean*1799
56d13a40ed Mart*1800 #if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
c6b168144e Jean*1801
f61838dfc1 Torg*1802
1803
8377b8ee87 Mart*1804 recip_HO=4. _d 0 / greaseLayerThick(i,j)
f61838dfc1 Torg*1805 #else /* SEAICE_GREASE */
8377b8ee87 Mart*1806 IF ( YC(i,j,bi,bj) .LT. ZERO ) THEN
6ec4646d60 Gael*1807 recip_HO=1. _d 0 / HO_south
c7b18bd1fe Gael*1808 ELSE
6ec4646d60 Gael*1809 recip_HO=1. _d 0 / HO
2afe30fba0 Dimi*1810 ENDIF
f61838dfc1 Torg*1811 #endif /* SEAICE_GREASE */
8377b8ee87 Mart*1812 recip_HH = recip_heffActual(i,j)
2afe30fba0 Dimi*1813
a4bc0a0b4c Jean*1814
56d13a40ed Mart*1815 #if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
f61838dfc1 Torg*1816
8377b8ee87 Mart*1817 tmpscal4 = MAX(ZERO,d_HEFFbyGREASE(i,j))
f61838dfc1 Torg*1818 #else /* SEAICE_GREASE */
6ec4646d60 Gael*1819
1820
4eb4a54cba Jean*1821 IF (SEAICE_areaGainFormula.EQ.1) THEN
8377b8ee87 Mart*1822 tmpscal4 = MAX(ZERO,d_HEFFbyATMonOCN_open(i,j))
4eb4a54cba Jean*1823 ELSE
8377b8ee87 Mart*1824 tmpscal4=MAX(ZERO,a_QbyATM_open(i,j))
4eb4a54cba Jean*1825 ENDIF
f61838dfc1 Torg*1826 #endif /* SEAICE_GREASE */
65f34462d4 Gael*1827
a4bc0a0b4c Jean*1828
6ec4646d60 Gael*1829
1830
1831
4eb4a54cba Jean*1832 IF (SEAICE_areaLossFormula.EQ.1) THEN
8377b8ee87 Mart*1833 tmpscal3 = MIN( 0. _d 0 , d_HEFFbyATMonOCN_cover(i,j) )
1834 & + MIN( 0. _d 0 , d_HEFFbyATMonOCN_open(i,j) )
1835 & + MIN( 0. _d 0 , d_HEFFbyOCNonICE(i,j) )
4eb4a54cba Jean*1836 ELSEIF (SEAICE_areaLossFormula.EQ.2) THEN
8377b8ee87 Mart*1837 tmpscal3 = MIN( 0. _d 0 , d_HEFFbyATMonOCN_cover(i,j)
1838 & + d_HEFFbyATMonOCN_open(i,j) + d_HEFFbyOCNonICE(i,j) )
4eb4a54cba Jean*1839 ELSE
6ec4646d60 Gael*1840
8377b8ee87 Mart*1841 tmpscal0=HEFF(i,j,bi,bj) - d_HEFFbyATMonOCN(i,j)
6ec4646d60 Gael*1842
8377b8ee87 Mart*1843 tmpscal1= a_QbyATM_open(i,j)+a_QbyATM_cover(i,j)
1844 & - d_HSNWbyATMonSNW(i,j)*SNOW2ICE
6ec4646d60 Gael*1845
1846 tmpscal2 = MAX(-tmpscal0,tmpscal1)
1847 tmpscal3 = MIN(ZERO,tmpscal2)
4eb4a54cba Jean*1848 ENDIF
a4bc0a0b4c Jean*1849
2651ba3350 Jean*1850
85586adda4 Gael*1851 IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR.
1852 & (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN
8377b8ee87 Mart*1853 AREA(i,j,bi,bj)=MAX(0. _d 0,
1854 & MIN( SEAICE_area_max, AREA(i,j,bi,bj)
4b6d456764 Mart*1855 & + recip_HO*tmpscal4+HALF*recip_HH*tmpscal3
1856 & * areaPDFfac ))
85586adda4 Gael*1857 ELSE
8377b8ee87 Mart*1858 AREA(i,j,bi,bj)=0. _d 0
85586adda4 Gael*1859 ENDIF
bb24b8a3e6 Gael*1860 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*1861 SItrAREA(i,j,bi,bj,3)=AREA(i,j,bi,bj)
a73db480d4 Jean*1862 #endif /* ALLOW_SITRACER */
381adf77df Gael*1863 #ifdef ALLOW_DIAGNOSTICS
8377b8ee87 Mart*1864 d_AREAbyATM(i,j)=
1865 & recip_HO*MAX(ZERO,d_HEFFbyATMonOCN_open(i,j))
1866 & +HALF*recip_HH*MIN(0. _d 0,d_HEFFbyATMonOCN_open(i,j))
4b6d456764 Mart*1867 & *areaPDFfac
8377b8ee87 Mart*1868 d_AREAbyICE(i,j)=
1869 & HALF*recip_HH*MIN(0. _d 0,d_HEFFbyATMonOCN_cover(i,j))
4b6d456764 Mart*1870 & *areaPDFfac
8377b8ee87 Mart*1871 d_AREAbyOCN(i,j)=
1872 & HALF*recip_HH*MIN( 0. _d 0,d_HEFFbyOCNonICE(i,j) )
4b6d456764 Mart*1873 & *areaPDFfac
a73db480d4 Jean*1874 #endif /* ALLOW_DIAGNOSTICS */
33e17487ce Dimi*1875 ENDDO
1876 ENDDO
286983d3d2 Patr*1877 #ifdef SEAICE_ITD
1878
8377b8ee87 Mart*1879 DO j=1,sNy
1880 DO i=1,sNx
1881 HEFFITD(i,j,1,bi,bj)=HEFF(i,j,bi,bj)
1882 AREAITD(i,j,1,bi,bj)=AREA(i,j,bi,bj)
1883 HSNOWITD(i,j,1,bi,bj)=HSNOW(i,j,bi,bj)
286983d3d2 Patr*1884 ENDDO
1885 ENDDO
f322f85e9b Torg*1886
1887
8377b8ee87 Mart*1888 IF (SEAICE_multDim .GT. 1) THEN
f913c5a485 Mart*1889 DO IT=2,SEAICE_multDim
8377b8ee87 Mart*1890 DO j=1,sNy
1891 DO i=1,sNx
1892 IF (HEFFITD(i,j,IT,bi,bj).LE.ZERO) THEN
f322f85e9b Torg*1893
8377b8ee87 Mart*1894 AREAITD(i,j,IT,bi,bj)=ZERO
f322f85e9b Torg*1895 ELSE
3da5adc21e Mart*1896
1897
a24915ab1a Jean*1898
3da5adc21e Mart*1899
8377b8ee87 Mart*1900 IF ( HEFFITDpreTH(i,j,IT).LE.ZERO ) THEN
3da5adc21e Mart*1901 tmpscal1=0. _d 0
1902 ELSE
8377b8ee87 Mart*1903 tmpscal1=AREAITDpreTH(i,j,IT)*
1904 & HEFFITD(i,j,IT,bi,bj)/HEFFITDpreTH(i,j,IT)
3da5adc21e Mart*1905 ENDIF
f322f85e9b Torg*1906
1907
8377b8ee87 Mart*1908 AREAITD(i,j,IT,bi,bj) = AREAITD(i,j,IT,bi,bj)
1909 & * (ONE - latMeltFrac(i,j,IT))
3da5adc21e Mart*1910
1911
f322f85e9b Torg*1912
8377b8ee87 Mart*1913 AREAITD(i,j,IT,bi,bj) = max(AREAITD(i,j,IT,bi,bj),
3da5adc21e Mart*1914 & tmpscal1)
f322f85e9b Torg*1915 ENDIF
1916 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*1917 SItrAREA(i,j,bi,bj,3)=SItrAREA(i,j,bi,bj,3)
1918 & +AREAITD(i,j,IT,bi,bj)
f322f85e9b Torg*1919 #endif /* ALLOW_SITRACER */
1920 ENDDO
1921 ENDDO
1922 ENDDO
1923 ENDIF
cbd0ee24a8 Mart*1924 #endif /* SEAICE_ITD */
33e17487ce Dimi*1925
8377b8ee87 Mart*1926 #if (defined ALLOW_AUTODIFF && defined SEAICE_MODIFY_GROWTH_ADJ)
83ad492c2d Jean*1927
4bc8f4264e Mart*1928 IF ( SEAICEadjMODE.GE.1 ) THEN
286983d3d2 Patr*1929 #ifdef SEAICE_ITD
f913c5a485 Mart*1930 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*1931 DO j=1,sNy
1932 DO i=1,sNx
1933 AREAITD(i,j,IT,bi,bj) = AREAITDpreTH(i,j,IT) + 0.1 _d 0 *
1934 & ( HEFFITD(i,j,IT,bi,bj) - HEFFITDpreTH(i,j,IT) )
286983d3d2 Patr*1935 ENDDO
1936 ENDDO
1937 ENDDO
cbd0ee24a8 Mart*1938 #else /* ndef SEAICE_ITD */
8377b8ee87 Mart*1939 DO j=1,sNy
1940 DO i=1,sNx
3a3bf6419a Gael*1941
8377b8ee87 Mart*1942 AREA(i,j,bi,bj) = AREApreTH(i,j) + 0.1 _d 0 *
1943 & ( HEFF(i,j,bi,bj) - HEFFpreTH(i,j) )
4bc8f4264e Mart*1944 ENDDO
3a3bf6419a Gael*1945 ENDDO
cbd0ee24a8 Mart*1946 #endif /* SEAICE_ITD */
4bc8f4264e Mart*1947 ENDIF
3a3bf6419a Gael*1948 #endif
286983d3d2 Patr*1949 #ifdef SEAICE_ITD
5df73465ef Torg*1950
ed2f6fecc4 Mart*1951 IF ( SEAICEuseLinRemapITD ) CALL SEAICE_ITD_REMAP(
1952 I heffitdPreTH, areaitdPreTH,
1953 I bi, bj, myTime, myIter, myThid )
5df73465ef Torg*1954 CALL SEAICE_ITD_REDIST(bi, bj, myTime, myIter, myThid)
1955
1956
1957 CALL SEAICE_ITD_SUM(bi, bj, myTime, myIter, myThid)
cbd0ee24a8 Mart*1958 #endif /* SEAICE_ITD */
56d13a40ed Mart*1959 #if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
f61838dfc1 Torg*1960
1961
8377b8ee87 Mart*1962 DO j=1,sNy
1963 DO i=1,sNx
1964 IF (HEFF(i,j,bi,bj).GT.siEps) THEN
1965 SItracer(i,j,bi,bj,iTrGrease) =
1966 & SItracer(i,j,bi,bj,iTrGrease) / HEFF(i,j,bi,bj)
1967 ELSE
1968 SItracer(i,j,bi,bj,iTrGrease) = 0. _d 0
1969 ENDIF
f61838dfc1 Torg*1970 ENDDO
1971 ENDDO
1972 #endif /* SEAICE_GREASE */
3a3bf6419a Gael*1973
2651ba3350 Jean*1974
1975
1976
aea7db20a6 Gael*1977
a98c4b8072 Ian *1978 #ifndef SEAICE_VARIABLE_SALINITY
8120fff0c1 Mart*1979 # ifdef ALLOW_AUTODIFF_TAMC
1cf549c217 Mart*1980
edb6656069 Mart*1981
8120fff0c1 Mart*1982 # ifdef ALLOW_SALT_PLUME
edb6656069 Mart*1983
1984
1985
1986
1987
1988
6b89e1b973 Gael*1989
edb6656069 Mart*1990
8120fff0c1 Mart*1991 # endif /* ALLOW_SALT_PLUME */
1992 # endif /* ALLOW_AUTODIFF_TAMC */
8377b8ee87 Mart*1993 DO j=1,sNy
1994 DO i=1,sNx
1995 tmpscal1 = d_HEFFbyNEG(i,j,bi,bj) + d_HEFFbyOCNonICE(i,j) +
1996 & d_HEFFbyATMonOCN(i,j) + d_HEFFbyFLOODING(i,j)
1997 & + d_HEFFbySublim(i,j)
6510a54854 Jean*1998 #ifdef EXF_SEAICE_FRACTION
8377b8ee87 Mart*1999 & + d_HEFFbyRLX(i,j,bi,bj)
d32fe07ad8 Patr*2000 #endif
cafd3818b7 An T*2001
2002 tmpscal3 = max( 0. _d 0,
8377b8ee87 Mart*2003 & min(SEAICE_salt0,salt(i,j,kSurface,bi,bj)) )
2004 tmpscal2 = tmpscal1 * tmpscal3 * HEFFM(i,j,bi,bj)
bb8e6379cb Mart*2005 & * recip_deltaTtherm * SEAICE_rhoIce
8377b8ee87 Mart*2006 saltFlux(i,j,bi,bj) = tmpscal2
8a423a90df Gael*2007 #ifdef ALLOW_SALT_PLUME
ef6001d9aa An T*2008 #ifdef SALT_PLUME_SPLIT_BASIN
2009
8377b8ee87 Mart*2010 localSPfrac(i,j) = SPsalFRAC(1)
ef6001d9aa An T*2011 IF ( SaltPlumeSplitBasin ) THEN
8377b8ee87 Mart*2012 localSPfrac(i,j) = SPsalFRAC(2)
2013 IF(YC(i,j,bi,bj).LT. 85.0 .AND. YC(i,j,bi,bj).GT. 71.0
2014 & .AND. XC(i,j,bi,bj) .LT. -90.0) THEN
2015 localSPfrac(i,j) = SPsalFRAC(1)
ef6001d9aa An T*2016 ENDIF
2017 ENDIF
2018 #else
8377b8ee87 Mart*2019 localSPfrac(i,j) = SPsalFRAC
ef6001d9aa An T*2020 #endif /* SALT_PLUME_SPLIT_BASIN */
cafd3818b7 An T*2021 #ifdef SALT_PLUME_IN_LEADS
2022
2023
2024
2025
2026
2027
2028
8377b8ee87 Mart*2029 IceGrowthRateInLeads(i,j)=max(0. _d 0,d_HEFFbyATMonOCN(i,j))
2030 tmpscal1 = IceGrowthRateInLeads(i,j)
2031 leadPlumeFraction(i,j) =
2032 & (ONE + EXP( (SPinflectionPoint - AREApreTH(i,j))*5.0
cafd3818b7 An T*2033 & /(ONE - SPinflectionPoint) ))**(-ONE)
8377b8ee87 Mart*2034 localSPfrac(i,j)=localSPfrac(i,j)*leadPlumeFraction(i,j)
cafd3818b7 An T*2035 #endif /* SALT_PLUME_IN_LEADS */
8377b8ee87 Mart*2036 tmpscal3 = tmpscal1*salt(i,j,kSurface,bi,bj)*HEFFM(i,j,bi,bj)
bb8e6379cb Mart*2037 & * recip_deltaTtherm * SEAICE_rhoIce
8377b8ee87 Mart*2038 saltPlumeFlux(i,j,bi,bj) = MAX( tmpscal3-tmpscal2 , 0. _d 0)
2039 & *localSPfrac(i,j)
cafd3818b7 An T*2040
2041 IF ( .NOT. SaltPlumeSouthernOcean ) THEN
8377b8ee87 Mart*2042 IF ( YC(i,j,bi,bj) .LT. 0.0 _d 0 )
cafd3818b7 An T*2043 & saltPlumeFlux(i,j,bi,bj) = 0.0 _d 0
2044 ENDIF
8a423a90df Gael*2045 #endif /* ALLOW_SALT_PLUME */
2046 ENDDO
2047 ENDDO
a73db480d4 Jean*2048 #endif /* ndef SEAICE_VARIABLE_SALINITY */
8a423a90df Gael*2049
a98c4b8072 Ian *2050 #ifdef SEAICE_VARIABLE_SALINITY
33e17487ce Dimi*2051
2052 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*2053
33e17487ce Dimi*2054 #endif /* ALLOW_AUTODIFF_TAMC */
2055
8377b8ee87 Mart*2056 DO j=1,sNy
2057 DO i=1,sNx
2651ba3350 Jean*2058
8377b8ee87 Mart*2059 tmpscal1=d_HEFFbyOCNonICE(i,j)+d_HEFFbyATMonOCN(i,j)
2afe30fba0 Dimi*2060
4eb4a54cba Jean*2061
8377b8ee87 Mart*2062 tmpscal2=HEFF(i,j,bi,bj)-tmpscal1-d_HEFFbyFLOODING(i,j)
65b7f51792 Gael*2063
2064 IF ( tmpscal1 .GE. 0.0 ) THEN
8377b8ee87 Mart*2065 saltFlux(i,j,bi,bj) =
2066 & HEFFM(i,j,bi,bj)*recip_deltaTtherm
2067 & *SEAICE_saltFrac*salt(i,j,kSurface,bi,bj)
3d15111920 Ian *2068 & *tmpscal1*SEAICE_rhoIce
33e17487ce Dimi*2069 #ifdef ALLOW_SALT_PLUME
ef6001d9aa An T*2070 #ifdef SALT_PLUME_SPLIT_BASIN
2071
8377b8ee87 Mart*2072 localSPfrac(i,j) = SPsalFRAC(1)
ef6001d9aa An T*2073 IF ( SaltPlumeSplitBasin ) THEN
8377b8ee87 Mart*2074 localSPfrac(i,j) = SPsalFRAC(2)
2075 IF(YC(i,j,bi,bj).LT. 85.0 .AND. YC(i,j,bi,bj).GT. 71.0
2076 & .AND. XC(i,j,bi,bj) .LT. -90.0) THEN
2077 localSPfrac(i,j) = SPsalFRAC(1)
ef6001d9aa An T*2078 ENDIF
2079 ENDIF
2080 #else
8377b8ee87 Mart*2081 localSPfrac(i,j) = SPsalFRAC
ef6001d9aa An T*2082 #endif /* SALT_PLUME_SPLIT_BASIN */
cafd3818b7 An T*2083 #ifndef SALT_PLUME_IN_LEADS
33e17487ce Dimi*2084
8377b8ee87 Mart*2085 saltPlumeFlux(i,j,bi,bj)=
2086 & HEFFM(i,j,bi,bj)*recip_deltaTtherm
2087 & *(ONE-SEAICE_saltFrac)*salt(i,j,kSurface,bi,bj)
3d15111920 Ian *2088 & *tmpscal1*SEAICE_rhoIce
8377b8ee87 Mart*2089 & *localSPfrac(i,j)
cafd3818b7 An T*2090 #endif /* ndef SALT_PLUME_IN_LEADS */
33e17487ce Dimi*2091 #endif /* ALLOW_SALT_PLUME */
2651ba3350 Jean*2092
65b7f51792 Gael*2093
33e17487ce Dimi*2094 ELSE
8377b8ee87 Mart*2095 saltFlux(i,j,bi,bj) =
2096 & HEFFM(i,j,bi,bj)*recip_deltaTtherm
2097 & *HSALT(i,j,bi,bj)
581175eaf0 Gael*2098 & *tmpscal1/tmpscal2
33e17487ce Dimi*2099 #ifdef ALLOW_SALT_PLUME
cafd3818b7 An T*2100 #ifndef SALT_PLUME_IN_LEADS
33e17487ce Dimi*2101 saltPlumeFlux(i,j,bi,bj) = 0.0 _d 0
cafd3818b7 An T*2102 #endif /* ndef SALT_PLUME_IN_LEADS */
33e17487ce Dimi*2103 #endif /* ALLOW_SALT_PLUME */
2104 ENDIF
cafd3818b7 An T*2105
2106 #ifdef ALLOW_SALT_PLUME
2107 #ifdef SALT_PLUME_IN_LEADS
2108
2109
2110
2111
2112
2113
2114
8377b8ee87 Mart*2115 IceGrowthRateInLeads(i,j)=max(0. _d 0,d_HEFFbyATMonOCN(i,j))
2116 tmpscal1 = IceGrowthRateInLeads(i,j)
2117 leadPlumeFraction(i,j) =
2118 & (ONE + EXP( (SPinflectionPoint - AREApreTH(i,j))*5.0
cafd3818b7 An T*2119 & /(ONE - SPinflectionPoint) ))**(-ONE)
8377b8ee87 Mart*2120 localSPfrac(i,j)=localSPfrac(i,j)*leadPlumeFraction(i,j)
cafd3818b7 An T*2121 IF ( tmpscal1 .GE. 0.0) THEN
2122
8377b8ee87 Mart*2123 saltPlumeFlux(i,j,bi,bj)=
2124 & HEFFM(i,j,bi,bj)*recip_deltaTtherm
2125 & *(ONE-SEAICE_saltFrac)*salt(i,j,kSurface,bi,bj)
cafd3818b7 An T*2126 & *tmpscal1*SEAICE_rhoIce
8377b8ee87 Mart*2127 & *localSPfrac(i,j)
cafd3818b7 An T*2128 ELSE
8377b8ee87 Mart*2129 saltPlumeFlux(i,j,bi,bj) = 0. _d 0
cafd3818b7 An T*2130 ENDIF
2131 #endif /* SALT_PLUME_IN_LEADS */
2132
2133 IF ( .NOT. SaltPlumeSouthernOcean ) THEN
8377b8ee87 Mart*2134 IF ( YC(i,j,bi,bj) .LT. 0.0 _d 0 )
cafd3818b7 An T*2135 & saltPlumeFlux(i,j,bi,bj) = 0.0 _d 0
2136 ENDIF
2137 #endif /* ALLOW_SALT_PLUME */
33e17487ce Dimi*2138
8377b8ee87 Mart*2139 HSALT(i,j,bi,bj) = HSALT(i,j,bi,bj) +
2140 & saltFlux(i,j,bi,bj) * SEAICE_deltaTtherm
2141 saltFlux(i,j,bi,bj) =
2142 & saltFlux(i,j,bi,bj) + saltFluxAdjust(i,j,bi,bj)
33e17487ce Dimi*2143 ENDDO
2144 ENDDO
a98c4b8072 Ian *2145 #endif /* SEAICE_VARIABLE_SALINITY */
33e17487ce Dimi*2146
f50f58ec54 Gael*2147 #ifdef ALLOW_SITRACER
8377b8ee87 Mart*2148 DO j=1,sNy
2149 DO i=1,sNx
1d74e34c65 Jean*2150
8377b8ee87 Mart*2151 SItrHEFF(i,j,bi,bj,5)=HEFF(i,j,bi,bj)
f50f58ec54 Gael*2152 ENDDO
2153 ENDDO
a73db480d4 Jean*2154 #endif /* ALLOW_SITRACER */
2ae913cfea Gael*2155
2651ba3350 Jean*2156
2157
2158
aea7db20a6 Gael*2159
0c0ecd4c7b Jean*2160
aea7db20a6 Gael*2161
2162
2163
286983d3d2 Patr*2164 #ifdef SEAICE_ITD
2165
8377b8ee87 Mart*2166 DO j=1,sNy
2167 DO i=1,sNx
2168 a_QbyATM_cover(i,j) = 0.0 _d 0
2169 r_QbyATM_cover(i,j) = 0.0 _d 0
2170 a_QSWbyATM_cover(i,j) = 0.0 _d 0
2171 r_FWbySublim(i,j) = 0.0 _d 0
286983d3d2 Patr*2172 ENDDO
2173 ENDDO
f913c5a485 Mart*2174 DO IT=1,SEAICE_multDim
8377b8ee87 Mart*2175 DO j=1,sNy
2176 DO i=1,sNx
53b2f6dc29 Torg*2177
114c791332 Jean*2178
286983d3d2 Patr*2179
114c791332 Jean*2180
286983d3d2 Patr*2181
114c791332 Jean*2182
286983d3d2 Patr*2183
114c791332 Jean*2184
286983d3d2 Patr*2185
53b2f6dc29 Torg*2186
8377b8ee87 Mart*2187 a_QbyATM_cover(i,j)=a_QbyATM_cover(i,j)
2188 & + a_QbyATMmult_cover(i,j,IT)
2189 r_QbyATM_cover(i,j)=r_QbyATM_cover(i,j)
2190 & + r_QbyATMmult_cover(i,j,IT)
2191 a_QSWbyATM_cover(i,j)=a_QSWbyATM_cover(i,j)
2192 & + a_QSWbyATMmult_cover(i,j,IT)
2193 r_FWbySublim(i,j)=r_FWbySublim(i,j)
2194 & + r_FWbySublimMult(i,j,IT)
286983d3d2 Patr*2195 ENDDO
2196 ENDDO
2197 ENDDO
cbd0ee24a8 Mart*2198 #endif /* SEAICE_ITD */
286983d3d2 Patr*2199
4fd8e94be0 Gael*2200 #ifdef ALLOW_AUTODIFF_TAMC
1cf549c217 Mart*2201
edb6656069 Mart*2202
2203
4fd8e94be0 Gael*2204 #endif /* ALLOW_AUTODIFF_TAMC */
2205
8377b8ee87 Mart*2206 DO j=1,sNy
2207 DO i=1,sNx
2208 QNET(i,j,bi,bj) = r_QbyATM_cover(i,j) + r_QbyATM_open(i,j)
2209 & + a_QSWbyATM_cover(i,j)
2210 & - ( d_HEFFbyOCNonICE(i,j)
2211 & + d_HSNWbyOCNonSNW(i,j)*SNOW2ICE
2212 & + d_HEFFbyNEG(i,j,bi,bj)
6510a54854 Jean*2213 #ifdef EXF_SEAICE_FRACTION
8377b8ee87 Mart*2214 & + d_HEFFbyRLX(i,j,bi,bj)
d32fe07ad8 Patr*2215 #endif
8377b8ee87 Mart*2216 & + d_HSNWbyNEG(i,j,bi,bj)*SNOW2ICE
7e924a7b23 Jean*2217 & - convertPRECIP2HI *
8377b8ee87 Mart*2218 & snowPrecip(i,j,bi,bj) * (ONE-AREApreTH(i,j))
2219 & ) * HEFFM(i,j,bi,bj)
7e924a7b23 Jean*2220 ENDDO
2221 ENDDO
8377b8ee87 Mart*2222 DO j=1,sNy
2223 DO i=1,sNx
2224 QSW(i,j,bi,bj) = a_QSWbyATM_cover(i,j) + a_QSWbyATM_open(i,j)
aea7db20a6 Gael*2225 ENDDO
2226 ENDDO
2227
2651ba3350 Jean*2228
aea7db20a6 Gael*2229
bea7d9d588 Gael*2230
8377b8ee87 Mart*2231 DO j=1,sNy
2232 DO i=1,sNx
2233 QNET(i,j,bi,bj) = QNET(i,j,bi,bj)*convertHI2Q
2234 QSW(i,j,bi,bj) = QSW(i,j,bi,bj)*convertHI2Q
bea7d9d588 Gael*2235 ENDDO
2236 ENDDO
0c0ecd4c7b Jean*2237
381adf77df Gael*2238 #ifndef SEAICE_DISABLE_HEATCONSFIX
2239
2240
4fd8e94be0 Gael*2241 # ifdef ALLOW_AUTODIFF_TAMC
1cf549c217 Mart*2242
edb6656069 Mart*2243
2244
2245
1cf549c217 Mart*2246
edb6656069 Mart*2247
2248
2249
4fd8e94be0 Gael*2250
edb6656069 Mart*2251
4fd8e94be0 Gael*2252 # endif /* ALLOW_AUTODIFF_TAMC */
1080be7801 Jean*2253
1d74e34c65 Jean*2254
114c791332 Jean*2255
2256
2257
2258
ebf1adc97e Gael*2259
2260
114c791332 Jean*2261
ebf1adc97e Gael*2262
8377b8ee87 Mart*2263 DO j=1,sNy
2264 DO i=1,sNx
cafd3818b7 An T*2265
2266 tmpscal1 = ZERO
ebf1adc97e Gael*2267
8377b8ee87 Mart*2268 tmpscal3=rhoConstFresh*HEFFM(i,j,bi,bj)*(
2269 & ( d_HSNWbyATMonSNW(i,j)*SNOW2ICE
2270 & + d_HSNWbyOCNonSNW(i,j)*SNOW2ICE
2271 & + d_HEFFbyOCNonICE(i,j) + d_HEFFbyATMonOCN(i,j)
2272 & + d_HEFFbyNEG(i,j,bi,bj)+ d_HSNWbyNEG(i,j,bi,bj)*SNOW2ICE )
c0fe1e7a2d Gael*2273 & * convertHI2PRECIP
8377b8ee87 Mart*2274 & - snowPrecip(i,j,bi,bj) * (ONE-AREApreTH(i,j)) )
ebf1adc97e Gael*2275
634144d037 Jean*2276 IF ( (temp_EvPrRn.NE.UNSET_RL).AND.
2277 & useRealFreshWaterFlux.AND.(nonlinFreeSurf.NE.0) ) THEN
ebf1adc97e Gael*2278 tmpscal1 = - tmpscal3*
c0fe1e7a2d Gael*2279 & HeatCapacity_Cp * temp_EvPrRn
634144d037 Jean*2280 ELSEIF ( (temp_EvPrRn.EQ.UNSET_RL).AND.
2281 & useRealFreshWaterFlux.AND.(nonlinFreeSurf.NE.0) ) THEN
ebf1adc97e Gael*2282 tmpscal1 = - tmpscal3*
8377b8ee87 Mart*2283 & HeatCapacity_Cp * theta(i,j,kSurface,bi,bj)
634144d037 Jean*2284 ELSEIF ( (temp_EvPrRn.NE.UNSET_RL) ) THEN
2285 tmpscal1 = - tmpscal3*HeatCapacity_Cp*
8377b8ee87 Mart*2286 & ( temp_EvPrRn - theta(i,j,kSurface,bi,bj) )
634144d037 Jean*2287 ELSEIF ( (temp_EvPrRn.EQ.UNSET_RL) ) THEN
2288 tmpscal1 = ZERO
2289 ENDIF
381adf77df Gael*2290 #ifdef ALLOW_DIAGNOSTICS
ebf1adc97e Gael*2291
8377b8ee87 Mart*2292 DIAGarrayA(i,j)=tmpscal1
381adf77df Gael*2293 #endif
ebf1adc97e Gael*2294
634144d037 Jean*2295 IF ( useRealFreshWaterFlux.AND.(nonlinFreeSurf.GT.0)
2296 & .AND.SEAICEheatConsFix )
8377b8ee87 Mart*2297 & QNET(i,j,bi,bj)=QNET(i,j,bi,bj)+tmpscal1
c0fe1e7a2d Gael*2298 ENDDO
2299 ENDDO
2300 #ifdef ALLOW_DIAGNOSTICS
1080be7801 Jean*2301 IF ( useDiagnostics ) THEN
2302 CALL DIAGNOSTICS_FILL(DIAGarrayA,
2303 & 'SIaaflux',0,1,3,bi,bj,myThid)
2304 ENDIF
c0fe1e7a2d Gael*2305 #endif
a73db480d4 Jean*2306 #endif /* ndef SEAICE_DISABLE_HEATCONSFIX */
c0fe1e7a2d Gael*2307
6509326d8c Gael*2308
2309
8377b8ee87 Mart*2310 DO j=1,sNy
2311 DO i=1,sNx
1080be7801 Jean*2312
6509326d8c Gael*2313
2314
2315
2316
2317
2318
2319
8377b8ee87 Mart*2320 SIatmQnt(i,j,bi,bj) =
2321 & HEFFM(i,j,bi,bj)*convertHI2Q*(
2322 & a_QSWbyATM_cover(i,j) +
2323 & a_QbyATM_cover(i,j) + a_QbyATM_open(i,j) )
1080be7801 Jean*2324
ebf1adc97e Gael*2325
2326
8377b8ee87 Mart*2327 tmpscal1 = rhoConstFresh*HEFFM(i,j,bi,bj)
2328 & * convertHI2PRECIP * ( - d_HSNWbyRAIN(i,j)*SNOW2ICE
2329 & + a_FWbySublim(i,j) - r_FWbySublim(i,j) )
ebf1adc97e Gael*2330
8377b8ee87 Mart*2331 tmpscal2=rhoConstFresh*HEFFM(i,j,bi,bj)*
2332 & ( ( EVAP(i,j,bi,bj)-PRECIP(i,j,bi,bj) )
2333 & * ( ONE - AREApreTH(i,j) )
6509326d8c Gael*2334 #ifdef ALLOW_RUNOFF
8377b8ee87 Mart*2335 & - RUNOFF(i,j,bi,bj)
6509326d8c Gael*2336 #endif /* ALLOW_RUNOFF */
8377b8ee87 Mart*2337 & + ( d_HFRWbyRAIN(i,j) + r_FWbySublim(i,j) )
6509326d8c Gael*2338 & *convertHI2PRECIP )
ebf1adc97e Gael*2339
2340
2341
6509326d8c Gael*2342 tmpscal1= - tmpscal1*
2343 & ( -SEAICE_lhFusion + HeatCapacity_Cp * ZERO )
634144d037 Jean*2344 IF ( (temp_EvPrRn.NE.UNSET_RL).AND.
2345 & useRealFreshWaterFlux.AND.(nonlinFreeSurf.NE.0) ) THEN
2346 tmpscal2= - tmpscal2*
2347 & ( ZERO + HeatCapacity_Cp * temp_EvPrRn )
2348 ELSEIF ( (temp_EvPrRn.EQ.UNSET_RL).AND.
2349 & useRealFreshWaterFlux.AND.(nonlinFreeSurf.NE.0) ) THEN
2350 tmpscal2= - tmpscal2*
8377b8ee87 Mart*2351 & ( ZERO + HeatCapacity_Cp * theta(i,j,kSurface,bi,bj) )
634144d037 Jean*2352 ELSEIF ( (temp_EvPrRn.NE.UNSET_RL) ) THEN
2353 tmpscal2= - tmpscal2*HeatCapacity_Cp*
8377b8ee87 Mart*2354 & ( temp_EvPrRn - theta(i,j,kSurface,bi,bj) )
634144d037 Jean*2355 ELSEIF ( (temp_EvPrRn.EQ.UNSET_RL) ) THEN
2356 tmpscal2= ZERO
2357 ENDIF
8377b8ee87 Mart*2358 SItflux(i,j,bi,bj)= SIatmQnt(i,j,bi,bj)-tmpscal1-tmpscal2
6509326d8c Gael*2359 ENDDO
634144d037 Jean*2360 ENDDO
6509326d8c Gael*2361
0c0ecd4c7b Jean*2362
aea7db20a6 Gael*2363
2364
2365
8377b8ee87 Mart*2366 DO j=1,sNy
2367 DO i=1,sNx
2368 tmpscal1= d_HSNWbyATMonSNW(i,j)*SNOW2ICE
2369 & +d_HFRWbyRAIN(i,j)
2370 & +d_HSNWbyOCNonSNW(i,j)*SNOW2ICE
2371 & +d_HEFFbyOCNonICE(i,j)
2372 & +d_HEFFbyATMonOCN(i,j)
2373 & +d_HEFFbyNEG(i,j,bi,bj)
6510a54854 Jean*2374 #ifdef EXF_SEAICE_FRACTION
8377b8ee87 Mart*2375 & +d_HEFFbyRLX(i,j,bi,bj)
6ec718a0fc Dimi*2376 #endif
8377b8ee87 Mart*2377 & +d_HSNWbyNEG(i,j,bi,bj)*SNOW2ICE
6ec718a0fc Dimi*2378
8377b8ee87 Mart*2379 & +r_FWbySublim(i,j)
2380 EmPmR(i,j,bi,bj) = HEFFM(i,j,bi,bj)*(
2381 & ( EVAP(i,j,bi,bj)-PRECIP(i,j,bi,bj) )
2382 & * ( ONE - AREApreTH(i,j) )
6ec718a0fc Dimi*2383 #ifdef ALLOW_RUNOFF
8377b8ee87 Mart*2384 & - RUNOFF(i,j,bi,bj)
6ec718a0fc Dimi*2385 #endif /* ALLOW_RUNOFF */
b377c9ea62 Dimi*2386 & + tmpscal1*convertHI2PRECIP
2387 & )*rhoConstFresh
cc528f098c Mart*2388 #ifdef SEAICE_ITD
2389
2390
8377b8ee87 Mart*2391 & - fw2ObyRidge(i,j,bi,bj)*recip_deltaTtherm
2392 & * HEFFM(i,j,bi,bj)
cc528f098c Mart*2393 #endif /* SEAICE_ITD */
1080be7801 Jean*2394
8377b8ee87 Mart*2395 SIatmFW(i,j,bi,bj) = HEFFM(i,j,bi,bj)*(
2396 & EVAP(i,j,bi,bj)*( ONE - AREApreTH(i,j) )
2397 & - PRECIP(i,j,bi,bj)
6509326d8c Gael*2398 #ifdef ALLOW_RUNOFF
8377b8ee87 Mart*2399 & - RUNOFF(i,j,bi,bj)
6509326d8c Gael*2400 #endif /* ALLOW_RUNOFF */
2401 & )*rhoConstFresh
8377b8ee87 Mart*2402 & + a_FWbySublim(i,j) * SEAICE_rhoIce * recip_deltaTtherm
6509326d8c Gael*2403
6ec718a0fc Dimi*2404 ENDDO
114c791332 Jean*2405 ENDDO
aea7db20a6 Gael*2406
d187c22362 Gael*2407 #ifdef SEAICE_DEBUG
a24915ab1a Jean*2408 IF ( plotLevel.GE.debLevC ) THEN
4bc8f4264e Mart*2409 CALL PLOT_FIELD_XYRL( QSW,'Current QSW ', myIter, myThid )
2410 CALL PLOT_FIELD_XYRL( QNET,'Current QNET ', myIter, myThid )
2411 CALL PLOT_FIELD_XYRL( EmPmR,'Current EmPmR ', myIter, myThid )
a24915ab1a Jean*2412 ENDIF
d187c22362 Gael*2413 #endif /* SEAICE_DEBUG */
aea7db20a6 Gael*2414
2415
2416
2417
3a3bf6419a Gael*2418 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*2419
2420
3a3bf6419a Gael*2421 #endif /* ALLOW_AUTODIFF_TAMC */
2422
aea7db20a6 Gael*2423 IF ( useRealFreshWaterFlux ) THEN
8377b8ee87 Mart*2424 DO j=1,sNy
2425 DO i=1,sNx
0f709d7d9d Gael*2426 #ifdef SEAICE_CAP_ICELOAD
8377b8ee87 Mart*2427 tmpscal1 = HEFF(i,j,bi,bj)*SEAICE_rhoIce
2428 & + HSNOW(i,j,bi,bj)*SEAICE_rhoSnow
4eb4a54cba Jean*2429 tmpscal2 = MIN(tmpscal1,heffTooHeavy*rhoConst)
4fecc0d4b4 Jean*2430 #else
8377b8ee87 Mart*2431 tmpscal2 = HEFF(i,j,bi,bj)*SEAICE_rhoIce
2432 & + HSNOW(i,j,bi,bj)*SEAICE_rhoSnow
0f709d7d9d Gael*2433 #endif
2434 sIceLoad(i,j,bi,bj) = tmpscal2
aea7db20a6 Gael*2435 ENDDO
2436 ENDDO
2437 ENDIF
2438
6509326d8c Gael*2439 #ifdef ALLOW_BALANCE_FLUXES
2440
2441
634144d037 Jean*2442 FWFsiTile(bi,bj) = 0. _d 0
7e00d7e8f9 Jean*2443 IF ( selectBalanceEmPmR.EQ.1 ) THEN
634144d037 Jean*2444 DO j=1,sNy
2445 DO i=1,sNx
2446 FWFsiTile(bi,bj) =
2447 & FWFsiTile(bi,bj) + SIatmFW(i,j,bi,bj)
2448 & * rA(i,j,bi,bj) * maskInC(i,j,bi,bj)
2449 ENDDO
6509326d8c Gael*2450 ENDDO
634144d037 Jean*2451 ENDIF
1080be7801 Jean*2452
634144d037 Jean*2453 FWF2HFsiTile(bi,bj) = 0. _d 0
7e00d7e8f9 Jean*2454 IF ( selectBalanceEmPmR.EQ.1 .AND.
2455 & temp_EvPrRn.EQ.UNSET_RL ) THEN
634144d037 Jean*2456 DO j=1,sNy
2457 DO i=1,sNx
2458 FWF2HFsiTile(bi,bj) = FWF2HFsiTile(bi,bj) +
8377b8ee87 Mart*2459 & HeatCapacity_Cp * theta(i,j,kSurface,bi,bj)
634144d037 Jean*2460 & * rA(i,j,bi,bj) * maskInC(i,j,bi,bj)
2461 ENDDO
6509326d8c Gael*2462 ENDDO
634144d037 Jean*2463 ENDIF
2464 HFsiTile(bi,bj) = 0. _d 0
2465 IF ( balanceQnet ) THEN
2466 DO j=1,sNy
2467 DO i=1,sNx
2468 HFsiTile(bi,bj) =
2469 & HFsiTile(bi,bj) + SItflux(i,j,bi,bj)
2470 & * rA(i,j,bi,bj) * maskInC(i,j,bi,bj)
2471 ENDDO
6509326d8c Gael*2472 ENDDO
634144d037 Jean*2473 ENDIF
2474 #endif /* ALLOW_BALANCE_FLUXES */
6509326d8c Gael*2475
ae36251cae Gael*2476
2477
2478
2479
2480 #ifdef ALLOW_DIAGNOSTICS
2481 IF ( useDiagnostics ) THEN
bb8e6379cb Mart*2482 tmpscal1=1. _d 0 * recip_deltaTtherm
82e7b1b526 Gael*2483 CALL DIAGNOSTICS_SCALE_FILL(a_QbyATM_cover,
2484 & tmpscal1,1,'SIaQbATC',0,1,3,bi,bj,myThid)
2485 CALL DIAGNOSTICS_SCALE_FILL(a_QbyATM_open,
2486 & tmpscal1,1,'SIaQbATO',0,1,3,bi,bj,myThid)
2487 CALL DIAGNOSTICS_SCALE_FILL(a_QbyOCN,
2488 & tmpscal1,1,'SIaQbOCN',0,1,3,bi,bj,myThid)
2489 CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyOCNonICE,
2490 & tmpscal1,1,'SIdHbOCN',0,1,3,bi,bj,myThid)
2491 CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyATMonOCN_cover,
2492 & tmpscal1,1,'SIdHbATC',0,1,3,bi,bj,myThid)
2493 CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyATMonOCN_open,
2494 & tmpscal1,1,'SIdHbATO',0,1,3,bi,bj,myThid)
2495 CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyFLOODING,
2496 & tmpscal1,1,'SIdHbFLO',0,1,3,bi,bj,myThid)
2497 CALL DIAGNOSTICS_SCALE_FILL(d_HSNWbyOCNonSNW,
2498 & tmpscal1,1,'SIdSbOCN',0,1,3,bi,bj,myThid)
2499 CALL DIAGNOSTICS_SCALE_FILL(d_HSNWbyATMonSNW,
2500 & tmpscal1,1,'SIdSbATC',0,1,3,bi,bj,myThid)
2501 CALL DIAGNOSTICS_SCALE_FILL(d_AREAbyATM,
2502 & tmpscal1,1,'SIdAbATO',0,1,3,bi,bj,myThid)
2503 CALL DIAGNOSTICS_SCALE_FILL(d_AREAbyICE,
2504 & tmpscal1,1,'SIdAbATC',0,1,3,bi,bj,myThid)
2505 CALL DIAGNOSTICS_SCALE_FILL(d_AREAbyOCN,
83ad492c2d Jean*2506 & tmpscal1,1,'SIdAbOCN',0,1,3,bi,bj,myThid)
ae36251cae Gael*2507 CALL DIAGNOSTICS_SCALE_FILL(r_QbyATM_open,
82e7b1b526 Gael*2508 & convertHI2Q,1, 'SIqneto ',0,1,3,bi,bj,myThid)
ae36251cae Gael*2509 CALL DIAGNOSTICS_SCALE_FILL(r_QbyATM_cover,
82e7b1b526 Gael*2510 & convertHI2Q,1, 'SIqneti ',0,1,3,bi,bj,myThid)
ae36251cae Gael*2511
8377b8ee87 Mart*2512 DO j=1,sNy
2513 DO i=1,sNx
2514 DIAGarrayA(i,j) = HEFFM(i,j,bi,bj)
2515 & * d_HSNWbyRAIN(i,j)*SEAICE_rhoSnow*recip_deltaTtherm
2516 DIAGarrayB(i,j) = AREA(i,j,bi,bj)-AREApreTH(i,j)
ae36251cae Gael*2517 ENDDO
2518 ENDDO
82e7b1b526 Gael*2519 CALL DIAGNOSTICS_FILL(DIAGarrayA,
2520 & 'SIsnPrcp',0,1,3,bi,bj,myThid)
2521 CALL DIAGNOSTICS_SCALE_FILL(DIAGarrayB,
2522 & tmpscal1,1,'SIdA ',0,1,3,bi,bj,myThid)
8377b8ee87 Mart*2523 DO j=1,sNy
2524 DO i=1,sNx
2525 DIAGarrayB(i,j) = HEFFM(i,j,bi,bj) *
2526 & a_FWbySublim(i,j) * SEAICE_rhoIce * recip_deltaTtherm
e770811cc5 Gael*2527 ENDDO
2528 ENDDO
2529 CALL DIAGNOSTICS_FILL(DIAGarrayB,
2530 & 'SIfwSubl',0,1,3,bi,bj,myThid)
2531
8377b8ee87 Mart*2532 DO j=1,sNy
2533 DO i=1,sNx
83ad492c2d Jean*2534
8377b8ee87 Mart*2535 DIAGarrayA(i,j) = HEFFM(i,j,bi,bj)
2536 & * (a_FWbySublim(i,j)-r_FWbySublim(i,j))
bb8e6379cb Mart*2537 & * SEAICE_rhoIce * recip_deltaTtherm
1d74e34c65 Jean*2538
8377b8ee87 Mart*2539 DIAGarrayC(i,j) = HEFFM(i,j,bi,bj)
2540 & * r_FWbySublim(i,j)
bb8e6379cb Mart*2541 & * SEAICE_rhoIce * recip_deltaTtherm
e770811cc5 Gael*2542
8377b8ee87 Mart*2543 tmpscal1= EVAP(i,j,bi,bj)*( ONE - AREApreTH(i,j) )
2544 & + r_FWbySublim(i,j)*convertHI2PRECIP
2545 tmpscal2= ( a_FWbySublim(i,j)-r_FWbySublim(i,j) )
4bc8f4264e Mart*2546 & * convertHI2PRECIP
2547 tmpscal3= SEAICE_lhEvap+SEAICE_lhFusion
8377b8ee87 Mart*2548 DIAGarrayB(i,j) = -HEFFM(i,j,bi,bj)*rhoConstFresh
4bc8f4264e Mart*2549 & * ( tmpscal1*SEAICE_lhEvap + tmpscal2*tmpscal3 )
2550 ENDDO
e770811cc5 Gael*2551 ENDDO
4bc8f4264e Mart*2552 CALL DIAGNOSTICS_FILL(DIAGarrayA,'SIacSubl',0,1,3,bi,bj,myThid)
2553 CALL DIAGNOSTICS_FILL(DIAGarrayC,'SIrsSubl',0,1,3,bi,bj,myThid)
2554 CALL DIAGNOSTICS_FILL(DIAGarrayB,'SIhl ',0,1,3,bi,bj,myThid)
56d13a40ed Mart*2555 # if defined ( ALLOW_SITRACER ) && defined ( SEAICE_GREASE )
f61838dfc1 Torg*2556
2557 CALL DIAGNOSTICS_FILL(greaseLayerThick,
2558 & 'SIgrsLT ',0,1,3,bi,bj,myThid)
2559 # endif /* SEAICE_GREASE */
e770811cc5 Gael*2560 ENDIF
2561 #endif /* ALLOW_DIAGNOSTICS */
c0fe1e7a2d Gael*2562
aea7db20a6 Gael*2563
33e17487ce Dimi*2564 ENDDO
2565 ENDDO
66d21a8387 Jean*2566
6509326d8c Gael*2567
2568
2569
2570
2571 #ifdef ALLOW_BALANCE_FLUXES
2572
1080be7801 Jean*2573
6509326d8c Gael*2574 # ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*2575
2576
6509326d8c Gael*2577
2578 # endif /* ALLOW_AUTODIFF_TAMC */
7e00d7e8f9 Jean*2579 FWFsiGlob = 0. _d 0
2580 FWF2HFsiGlob = 0. _d 0
2581 IF ( selectBalanceEmPmR.EQ.1 ) THEN
2582 CALL GLOBAL_SUM_TILE_RL( FWFsiTile, FWFsiGlob, myThid )
2583 IF ( temp_EvPrRn.EQ.UNSET_RL ) THEN
2584 CALL GLOBAL_SUM_TILE_RL( FWF2HFsiTile, FWF2HFsiGlob, myThid )
2585 ELSE
2586 FWF2HFsiGlob = HeatCapacity_Cp * temp_EvPrRn * globalArea
2587 ENDIF
6509326d8c Gael*2588 ENDIF
2589 HFsiGlob=0. _d 0
2590 IF ( balanceQnet )
2591 & CALL GLOBAL_SUM_TILE_RL( HFsiTile, HFsiGlob, myThid )
2592
1080be7801 Jean*2593
2594
6509326d8c Gael*2595 tmpscal0=FWFsiGlob / globalArea
1080be7801 Jean*2596
2597
6509326d8c Gael*2598 tmpscal1=FWFsiGlob / globalArea * FWF2HFsiGlob / globalArea
1080be7801 Jean*2599
6509326d8c Gael*2600 tmpscal2=HFsiGlob / globalArea
1080be7801 Jean*2601
7e00d7e8f9 Jean*2602 IF ( selectBalanceEmPmR.EQ.1 ) tmpscal2=tmpscal2-tmpscal1
6509326d8c Gael*2603
1080be7801 Jean*2604
7e00d7e8f9 Jean*2605 IF ( selectBalanceEmPmR.EQ.1 ) THEN
634144d037 Jean*2606 DO bj=myByLo(myThid),myByHi(myThid)
2607 DO bi=myBxLo(myThid),myBxHi(myThid)
2608 DO j=1-OLy,sNy+OLy
2609 DO i=1-OLx,sNx+OLx
6509326d8c Gael*2610 empmr(i,j,bi,bj) = empmr(i,j,bi,bj) - tmpscal0
2611 SIatmFW(i,j,bi,bj) = SIatmFW(i,j,bi,bj) - tmpscal0
1080be7801 Jean*2612
2f464b8a56 Gael*2613 IF ( (temp_EvPrRn.NE.UNSET_RL).AND.
2614 & useRealFreshWaterFlux.AND.(nonlinFreeSurf.NE.0) ) THEN
6509326d8c Gael*2615 tmpscal1=
2616 & ( ZERO + HeatCapacity_Cp * temp_EvPrRn )
2f464b8a56 Gael*2617 ELSEIF ( (temp_EvPrRn.EQ.UNSET_RL).AND.
2618 & useRealFreshWaterFlux.AND.(nonlinFreeSurf.NE.0) ) THEN
6509326d8c Gael*2619 tmpscal1=
8377b8ee87 Mart*2620 & ( ZERO + HeatCapacity_Cp * theta(i,j,kSurface,bi,bj) )
2f464b8a56 Gael*2621 ELSEIF ( (temp_EvPrRn.NE.UNSET_RL) ) THEN
2622 tmpscal1=
8377b8ee87 Mart*2623 & HeatCapacity_Cp*(temp_EvPrRn - theta(i,j,kSurface,bi,bj))
2f464b8a56 Gael*2624 ELSE
2625 tmpscal1=ZERO
6509326d8c Gael*2626 ENDIF
2627 SItflux(i,j,bi,bj) = SItflux(i,j,bi,bj) - tmpscal0*tmpscal1
1080be7801 Jean*2628
634144d037 Jean*2629 ENDDO
6509326d8c Gael*2630 ENDDO
2631 ENDDO
2632 ENDDO
634144d037 Jean*2633 IF ( balancePrintMean ) THEN
2634 _BEGIN_MASTER( myThid )
0320e25227 Mart*2635 WRITE(msgBuf,'(2A,1PE21.14,A,I10)') 'rm Global mean of',
2636 & ' SIatmFW = ', tmpscal0, ' @ it=', myIter
634144d037 Jean*2637 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
2638 & SQUEEZE_RIGHT, myThid )
2639 _END_MASTER( myThid )
2640 ENDIF
6509326d8c Gael*2641 ENDIF
2642 IF ( balanceQnet ) THEN
634144d037 Jean*2643 DO bj=myByLo(myThid),myByHi(myThid)
2644 DO bi=myBxLo(myThid),myBxHi(myThid)
2645 DO j=1-OLy,sNy+OLy
2646 DO i=1-OLx,sNx+OLx
6509326d8c Gael*2647 SItflux(i,j,bi,bj) = SItflux(i,j,bi,bj) - tmpscal2
2648 qnet(i,j,bi,bj) = qnet(i,j,bi,bj) - tmpscal2
2649 SIatmQnt(i,j,bi,bj) = SIatmQnt(i,j,bi,bj) - tmpscal2
634144d037 Jean*2650 ENDDO
6509326d8c Gael*2651 ENDDO
2652 ENDDO
2653 ENDDO
634144d037 Jean*2654 IF ( balancePrintMean ) THEN
2655 _BEGIN_MASTER( myThid )
0320e25227 Mart*2656 WRITE(msgBuf,'(2A,1PE21.14,A,I10)') 'rm Global mean of',
2657 & ' SItflux = ', tmpscal2, ' @ it=', myIter
634144d037 Jean*2658 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
2659 & SQUEEZE_RIGHT, myThid )
2660 _END_MASTER( myThid )
2661 ENDIF
6509326d8c Gael*2662 ENDIF
75bbb16cce Jean*2663 #endif /* ALLOW_BALANCE_FLUXES */
6509326d8c Gael*2664
2665 #ifdef ALLOW_DIAGNOSTICS
1080be7801 Jean*2666 IF ( useDiagnostics ) THEN
2667
2668
2669 CALL DIAGNOSTICS_FILL(SItflux,
2670 & 'SItflux ',0,1,0,1,1,myThid)
2671 CALL DIAGNOSTICS_FILL(SIatmQnt,
2672 & 'SIatmQnt',0,1,0,1,1,myThid)
2673
2674 tmpscal1= - 1. _d 0
2675 CALL DIAGNOSTICS_SCALE_FILL(SIatmFW,
2676 & tmpscal1,1,'SIatmFW ',0,1,0,1,1,myThid)
2677 ENDIF
6509326d8c Gael*2678 #endif /* ALLOW_DIAGNOSTICS */
2679
634144d037 Jean*2680 #else /* ALLOW_EXF and ALLOW_ATM_TEMP */
2681 STOP 'SEAICE_GROWTH not compiled without EXF and ALLOW_ATM_TEMP'
2682 #endif /* ALLOW_EXF and ALLOW_ATM_TEMP */
5337b47ce7 Jean*2683 #endif /* ndef SEAICE_USE_GROWTH_ADX */
2a4b53eed1 Jean*2684
33e17487ce Dimi*2685 RETURN
2686 END