38 |
C i,j,bi,bj - Loop counters |
C i,j,bi,bj - Loop counters |
39 |
|
|
40 |
INTEGER i, j, bi, bj |
INTEGER i, j, bi, bj |
41 |
|
C number of surface interface layer |
42 |
|
INTEGER kSurface |
43 |
_RL TBC, salinity_ice, SDF, ICE_DENS, Q0, QS |
_RL TBC, salinity_ice, SDF, ICE_DENS, Q0, QS |
44 |
#ifdef ALLOW_SEAICE_FLOODING |
#ifdef ALLOW_SEAICE_FLOODING |
45 |
_RL hDraft, hFlood |
_RL hDraft, hFlood |
76 |
C wind speed |
C wind speed |
77 |
_RL UG (1-OLx:sNx+OLx, 1-OLy:sNy+OLy) |
_RL UG (1-OLx:sNx+OLx, 1-OLy:sNy+OLy) |
78 |
_RL SPEED_SQ |
_RL SPEED_SQ |
79 |
|
C local copy of AREA |
80 |
|
_RL areaLoc(1-OLx:sNx+OLx, 1-OLy:sNy+OLy) |
81 |
|
|
82 |
#ifdef SEAICE_MULTILEVEL |
#ifdef SEAICE_MULTILEVEL |
83 |
INTEGER it |
INTEGER it |
87 |
_RL FICEP(1-OLx:sNx+OLx, 1-OLy:sNy+OLy) |
_RL FICEP(1-OLx:sNx+OLx, 1-OLy:sNy+OLy) |
88 |
#endif |
#endif |
89 |
|
|
|
C number of surface interface layer |
|
|
INTEGER kSurface |
|
|
|
|
90 |
if ( buoyancyRelation .eq. 'OCEANICP' ) then |
if ( buoyancyRelation .eq. 'OCEANICP' ) then |
91 |
kSurface = Nr |
kSurface = Nr |
92 |
else |
else |
93 |
kSurface = 1 |
kSurface = 1 |
94 |
endif |
endif |
95 |
|
|
96 |
salinity_ice=4.0 _d 0 ! ICE SALINITY (g/kg) |
C ICE SALINITY (g/kg) |
97 |
TBC=SEAICE_freeze ! FREEZING TEMP. OF SEA WATER (deg C) |
salinity_ice = 4.0 _d 0 |
98 |
SDF=1000.0 _d 0/330.0 _d 0 ! RATIO OF WATER DESITY TO SNOW DENSITY |
C FREEZING TEMP. OF SEA WATER (deg C) |
99 |
ICE_DENS=0.920 _d 0 ! RATIO OF SEA ICE DESITY TO WATER DENSITY |
TBC = SEAICE_freeze |
100 |
Q0=1.0D-06/302.0 _d +00 ! INVERSE HEAT OF FUSION OF ICE (m^3/J) |
C RATIO OF WATER DESITY TO SNOW DENSITY |
101 |
QS=1.1 _d +08 ! HEAT OF FUSION OF SNOW (J/m^3) |
SDF = 1000.0 _d 0/330.0 _d 0 |
102 |
|
C RATIO OF SEA ICE DESITY TO WATER DENSITY |
103 |
|
ICE_DENS = 0.920 _d 0 |
104 |
|
C INVERSE HEAT OF FUSION OF ICE (m^3/J) |
105 |
|
Q0 = 1.0 _d -06 / 302.0 _d +00 |
106 |
|
C HEAT OF FUSION OF SNOW (J/m^3) |
107 |
|
QS = 1.1 _d +08 |
108 |
|
|
109 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
110 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
DO bi=myBxLo(myThid),myBxHi(myThid) |
135 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
136 |
DO J=1,sNy |
DO J=1,sNy |
137 |
DO I=1,sNx |
DO I=1,sNx |
138 |
AREA(I,J,3,bi,bj) = MAX(A22,AREA(I,J,2,bi,bj)) |
areaLoc(I,J) = MAX(A22,AREA(I,J,2,bi,bj)) |
139 |
FHEFF(I,J) = 0.0 _d 0 |
FHEFF(I,J) = 0.0 _d 0 |
140 |
FICE (I,J) = 0.0 _d 0 |
FICE (I,J) = 0.0 _d 0 |
141 |
#ifdef SEAICE_MULTILEVEL |
#ifdef SEAICE_MULTILEVEL |
142 |
FICEP(I,J) = 0.0 _d 0 |
FICEP(I,J) = 0.0 _d 0 |
143 |
#endif |
#endif |
144 |
FHEFF(I,J) = 0.0 _d 0 |
FHEFF(I,J) = 0.0 _d 0 |
145 |
FICE (I,J) = 0.0 _d 0 |
FICE (I,J) = 0.0 _d 0 |
146 |
QNETO(I,J) = 0.0 _d 0 |
QNETO(I,J) = 0.0 _d 0 |
147 |
QNETI(I,J) = 0.0 _d 0 |
QNETI(I,J) = 0.0 _d 0 |
148 |
QSWO (I,J) = 0.0 _d 0 |
QSWO (I,J) = 0.0 _d 0 |
149 |
QSWI (I,J) = 0.0 _d 0 |
QSWI (I,J) = 0.0 _d 0 |
150 |
HCORR(I,J) = 0.0 _d 0 |
HCORR(I,J) = 0.0 _d 0 |
151 |
SEAICE_SALT(I,J) = 0.0 _d 0 |
SEAICE_SALT(I,J) = 0.0 _d 0 |
152 |
RESID_HEAT (I,J) = 0.0 _d 0 |
RESID_HEAT (I,J) = 0.0 _d 0 |
153 |
ENDDO |
ENDDO |
154 |
ENDDO |
ENDDO |
155 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
164 |
DO I=1,sNx |
DO I=1,sNx |
165 |
cph need to adjoint-store AREA again before using it in further init. |
cph need to adjoint-store AREA again before using it in further init. |
166 |
cph (all these initialisations involving AREA are nasty "non-linear") |
cph (all these initialisations involving AREA are nasty "non-linear") |
167 |
HICE(I,J) = HEFF(I,J,2,bi,bj)/AREA(I,J,3,bi,bj) |
HICE(I,J) = HEFF(I,J,2,bi,bj)/areaLoc(I,J) |
168 |
hSnwLoc(I,J) = HSNOW(I,J,bi,bj)/AREA(I,J,3,bi,bj) |
hSnwLoc(I,J) = HSNOW(I,J,bi,bj)/areaLoc(I,J) |
169 |
ENDDO |
ENDDO |
170 |
ENDDO |
ENDDO |
171 |
|
|
197 |
ENDDO |
ENDDO |
198 |
ENDDO |
ENDDO |
199 |
|
|
|
#ifdef ALLOW_AUTODIFF_TAMC |
|
|
CADJ STORE theta(:,:,:,bi,bj)= comlev1_bibj, |
|
|
CADJ & key = iicekey, byte = isbyte |
|
|
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
|
|
CADJ & key = iicekey, byte = isbyte |
|
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
|
|
DO J=1,sNy |
|
|
DO I=1,sNx |
|
|
C-- Create or melt sea-ice so that first-level oceanic temperature |
|
|
C is approximately at the freezing point when there is sea-ice. |
|
|
C Initially the units of YNEG are m of sea-ice. |
|
|
C The factor dRf(1)/72.0764, used to convert temperature |
|
|
C change in deg K to m of sea-ice, is approximately: |
|
|
C dRf(1) * (sea water heat capacity = 3996 J/kg/K) |
|
|
C * (density of sea-water = 1026 kg/m^3) |
|
|
C / (latent heat of fusion of sea-ice = 334000 J/kg) |
|
|
C / (density of sea-ice = 910 kg/m^3) |
|
|
C Negative YNEG leads to ice growth. |
|
|
C Positive YNEG leads to ice melting. |
|
|
if ( .NOT. inAdMode ) then |
|
|
#ifdef SEAICE_VARIABLE_FREEZING_POINT |
|
|
TBC = -0.0575 _d 0*salt(I,J,kSurface,bi,bj) + 0.0901 _d 0 |
|
|
#endif /* SEAICE_VARIABLE_FREEZING_POINT */ |
|
|
YNEG(I,J,bi,bj)=(theta(I,J,kSurface,bi,bj)-TBC) |
|
|
& *dRf(1)/72.0764 _d 0 |
|
|
else |
|
|
YNEG(I,J,bi,bj)= 0. |
|
|
endif |
|
|
GHEFF(I,J)=HEFF(I,J,1,bi,bj) |
|
|
C Melt (YNEG>0) or create (YNEG<0) sea ice |
|
|
HEFF(I,J,1,bi,bj)=MAX(ZERO,HEFF(I,J,1,bi,bj)-YNEG(I,J,bi,bj)) |
|
|
RESID_HEAT(I,J) =YNEG(I,J,bi,bj) |
|
|
YNEG(I,J,bi,bj) =GHEFF(I,J)-HEFF(I,J,1,bi,bj) |
|
|
SEAICE_SALT(I,J) =SEAICE_SALT(I,J)-YNEG(I,J,bi,bj) |
|
|
RESID_HEAT(I,J) =RESID_HEAT(I,J)-YNEG(I,J,bi,bj) |
|
|
C YNEG now contains m of ice melted (>0) or created (<0) |
|
|
C SEAICE_SALT contains m of ice melted (<0) or created (>0) |
|
|
C RESID_HEAT is residual heat above freezing in equivalent m of ice |
|
|
ENDDO |
|
|
ENDDO |
|
200 |
|
|
201 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
202 |
cphCADJ STORE heff = comlev1, key = ikey_dynamics |
cphCADJ STORE heff = comlev1, key = ikey_dynamics |
210 |
# endif |
# endif |
211 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
212 |
|
|
|
C GROWTH SUBROUTINE CALCULATES TOTAL GROWTH TENDENCIES, |
|
|
C INCLUDING SNOWFALL |
|
|
CML beginning of groatb code |
|
|
|
|
213 |
C NOW DETERMINE GROWTH RATES |
C NOW DETERMINE GROWTH RATES |
214 |
C FIRST DO OPEN WATER |
C FIRST DO OPEN WATER |
215 |
CALL SEAICE_BUDGET_OCEAN( |
CALL SEAICE_BUDGET_OCEAN( |
259 |
O FICE, QSWI, |
O FICE, QSWI, |
260 |
I bi, bj) |
I bi, bj) |
261 |
#endif /* SEAICE_MULTILEVEL */ |
#endif /* SEAICE_MULTILEVEL */ |
|
CML end of groatb code |
|
262 |
|
|
263 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
264 |
|
CADJ STORE theta(:,:,:,bi,bj)= comlev1_bibj, |
265 |
|
CADJ & key = iicekey, byte = isbyte |
266 |
|
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
267 |
|
CADJ & key = iicekey, byte = isbyte |
268 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
269 |
|
DO J=1,sNy |
270 |
|
DO I=1,sNx |
271 |
|
C-- Create or melt sea-ice so that first-level oceanic temperature |
272 |
|
C is approximately at the freezing point when there is sea-ice. |
273 |
|
C Initially the units of YNEG are m of sea-ice. |
274 |
|
C The factor dRf(1)/72.0764, used to convert temperature |
275 |
|
C change in deg K to m of sea-ice, is approximately: |
276 |
|
C dRf(1) * (sea water heat capacity = 3996 J/kg/K) |
277 |
|
C * (density of sea-water = 1026 kg/m^3) |
278 |
|
C / (latent heat of fusion of sea-ice = 334000 J/kg) |
279 |
|
C / (density of sea-ice = 910 kg/m^3) |
280 |
|
C Negative YNEG leads to ice growth. |
281 |
|
C Positive YNEG leads to ice melting. |
282 |
|
IF ( .NOT. inAdMode ) THEN |
283 |
|
#ifdef SEAICE_VARIABLE_FREEZING_POINT |
284 |
|
TBC = -0.0575 _d 0*salt(I,J,kSurface,bi,bj) + 0.0901 _d 0 |
285 |
|
#endif /* SEAICE_VARIABLE_FREEZING_POINT */ |
286 |
|
YNEG(I,J,bi,bj) = (theta(I,J,kSurface,bi,bj)-TBC) |
287 |
|
& *dRf(1)/72.0764 _d 0 |
288 |
|
ELSE |
289 |
|
YNEG(I,J,bi,bj)= 0. |
290 |
|
ENDIF |
291 |
|
GHEFF(I,J)=HEFF(I,J,1,bi,bj) |
292 |
|
C Melt (YNEG>0) or create (YNEG<0) sea ice |
293 |
|
HEFF(I,J,1,bi,bj)=MAX(ZERO,HEFF(I,J,1,bi,bj)-YNEG(I,J,bi,bj)) |
294 |
|
RESID_HEAT(I,J) = YNEG(I,J,bi,bj) |
295 |
|
YNEG(I,J,bi,bj) = GHEFF(I,J)-HEFF(I,J,1,bi,bj) |
296 |
|
SEAICE_SALT(I,J) = SEAICE_SALT(I,J)-YNEG(I,J,bi,bj) |
297 |
|
RESID_HEAT(I,J) = RESID_HEAT(I,J)-YNEG(I,J,bi,bj) |
298 |
|
C YNEG now contains m of ice melted (>0) or created (<0) |
299 |
|
C SEAICE_SALT contains m of ice melted (<0) or created (>0) |
300 |
|
C RESID_HEAT is residual heat above freezing in equivalent m of ice |
301 |
|
ENDDO |
302 |
|
ENDDO |
303 |
|
|
304 |
cph( |
cph( |
305 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
306 |
cphCADJ STORE heff = comlev1, key = ikey_dynamics |
cphCADJ STORE heff = comlev1, key = ikey_dynamics |
320 |
|
|
321 |
DO J=1,sNy |
DO J=1,sNy |
322 |
DO I=1,sNx |
DO I=1,sNx |
323 |
C NOW CALCULATE CORRECTED GROWTH |
C NOW CALCULATE CORRECTED effective growth in J/m^2 (>0=melt) |
324 |
GHEFF(I,J)=-SEAICE_deltaTtherm*FICE(I,J) |
GHEFF(I,J)=-SEAICE_deltaTtherm*FICE(I,J)*AREA(I,J,2,bi,bj) |
|
& *AREA(I,J,2,bi,bj) ! effective growth in J/m^2 (>0=melt) |
|
325 |
ENDDO |
ENDDO |
326 |
ENDDO |
ENDDO |
327 |
|
|
328 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
329 |
CADJ STORE fice(:,:) = comlev1_bibj, |
CADJ STORE fice(:,:) = comlev1_bibj, |
330 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
331 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
332 |
|
|
333 |
DO J=1,sNy |
DO J=1,sNy |
358 |
ENDDO |
ENDDO |
359 |
|
|
360 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
361 |
CADJ STORE fice(:,:) = comlev1_bibj, |
CADJ STORE fice(:,:) = comlev1_bibj, |
362 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
363 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
364 |
|
|
365 |
DO J=1,sNy |
DO J=1,sNy |
375 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
376 |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
377 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
378 |
CADJ STORE fice(:,:) = comlev1_bibj, |
CADJ STORE fice(:,:) = comlev1_bibj, |
379 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
380 |
CADJ STORE fheff(:,:) = comlev1_bibj, |
CADJ STORE fheff(:,:) = comlev1_bibj, |
381 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
382 |
CADJ STORE qneto(:,:) = comlev1_bibj, |
CADJ STORE qneto(:,:) = comlev1_bibj, |
383 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
384 |
CADJ STORE qswi(:,:) = comlev1_bibj, |
CADJ STORE qswi(:,:) = comlev1_bibj, |
385 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
386 |
CADJ STORE qswo(:,:) = comlev1_bibj, |
CADJ STORE qswo(:,:) = comlev1_bibj, |
387 |
CADJ & key = iicekey, byte = isbyte |
CADJ & key = iicekey, byte = isbyte |
388 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
389 |
cph) |
cph) |
390 |
DO J=1,sNy |
DO J=1,sNy |
391 |
DO I=1,sNx |
DO I=1,sNx |
392 |
C NOW UPDATE AREA |
C NOW UPDATE AREA |
393 |
GHEFF(I,J)=-SEAICE_deltaTtherm*FHEFF(I,J)*Q0 |
GHEFF(I,J) = -SEAICE_deltaTtherm*FHEFF(I,J)*Q0 |
394 |
GAREA(I,J)=SEAICE_deltaTtherm*QNETO(I,J)*Q0 |
GAREA(I,J) = SEAICE_deltaTtherm*QNETO(I,J)*Q0 |
395 |
GHEFF(I,J)=-ONE*MIN(HEFF(I,J,1,bi,bj),GHEFF(I,J)) |
GHEFF(I,J) = -ONE*MIN(HEFF(I,J,1,bi,bj),GHEFF(I,J)) |
396 |
GAREA(I,J)=MAX(ZERO,GAREA(I,J)) |
GAREA(I,J) = MAX(ZERO,GAREA(I,J)) |
397 |
HCORR(I,J)=MIN(ZERO,GHEFF(I,J)) |
HCORR(I,J) = MIN(ZERO,GHEFF(I,J)) |
398 |
ENDDO |
ENDDO |
399 |
ENDDO |
ENDDO |
400 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
417 |
DO I=1,sNx |
DO I=1,sNx |
418 |
|
|
419 |
C NOW UPDATE HEFF |
C NOW UPDATE HEFF |
420 |
GHEFF(I,J)=-SEAICE_deltaTtherm* |
GHEFF(I,J) = -SEAICE_deltaTtherm* |
421 |
& FICE(I,J)*Q0*AREA(I,J,2,bi,bj) |
& FICE(I,J)*Q0*AREA(I,J,2,bi,bj) |
422 |
GHEFF(I,J)=-ONE*MIN(HEFF(I,J,1,bi,bj),GHEFF(I,J)) |
GHEFF(I,J) = -ONE*MIN(HEFF(I,J,1,bi,bj),GHEFF(I,J)) |
423 |
HEFF(I,J,1,bi,bj)=HEFF(I,J,1,bi,bj)+GHEFF(I,J) |
HEFF(I,J,1,bi,bj)= HEFF(I,J,1,bi,bj)+GHEFF(I,J) |
424 |
SEAICE_SALT(I,J)=SEAICE_SALT(I,J)+GHEFF(I,J) |
SEAICE_SALT(I,J) = SEAICE_SALT(I,J)+GHEFF(I,J) |
425 |
|
|
426 |
C NOW CALCULATE QNETI UNDER ICE IF ANY |
C NOW CALCULATE QNETI UNDER ICE IF ANY |
427 |
QNETI(I,J)=(GHEFF(I,J)-SEAICE_deltaTtherm* |
QNETI(I,J) = (GHEFF(I,J)-SEAICE_deltaTtherm* |
428 |
& FICE(I,J)*Q0*AREA(I,J,2,bi,bj))/Q0/SEAICE_deltaTtherm |
& FICE(I,J)*Q0*AREA(I,J,2,bi,bj))/Q0/SEAICE_deltaTtherm |
429 |
|
|
430 |
C NOW UPDATE OTHER THINGS |
C NOW UPDATE OTHER THINGS |
431 |
|
|
432 |
IF(FICE(I,J).GT.ZERO) THEN |
IF(FICE(I,J).GT.ZERO) THEN |
433 |
C FREEZING, PRECIP ADDED AS SNOW |
C FREEZING, PRECIP ADDED AS SNOW |
434 |
HSNOW(I,J,bi,bj)=HSNOW(I,J,bi,bj)+SEAICE_deltaTtherm* |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)+SEAICE_deltaTtherm* |
435 |
& PRECIP(I,J,bi,bj)*AREA(I,J,2,bi,bj)*SDF |
& PRECIP(I,J,bi,bj)*AREA(I,J,2,bi,bj)*SDF |
436 |
ELSE |
ELSE |
437 |
C ADD PRECIP AS RAIN, WATER CONVERTED INTO equivalent m of ICE BY 1/ICE_DENS |
C ADD PRECIP AS RAIN, WATER CONVERTED INTO equivalent m of ICE BY 1/ICE_DENS |
438 |
SEAICE_SALT(I,J)=SEAICE_SALT(I,J) |
SEAICE_SALT(I,J) = SEAICE_SALT(I,J) |
439 |
& -PRECIP(I,J,bi,bj)*AREA(I,J,2,bi,bj)* |
& -PRECIP(I,J,bi,bj)*AREA(I,J,2,bi,bj)* |
440 |
& SEAICE_deltaTtherm/ICE_DENS |
& SEAICE_deltaTtherm/ICE_DENS |
441 |
ENDIF |
ENDIF |
442 |
|
|
443 |
C Now add in precip over open water directly into ocean as negative salt |
C Now add in precip over open water directly into ocean as negative salt |
444 |
SEAICE_SALT(I,J)=SEAICE_SALT(I,J) |
SEAICE_SALT(I,J) = SEAICE_SALT(I,J) |
445 |
& -PRECIP(I,J,bi,bj)*(ONE-AREA(I,J,2,bi,bj)) |
& -PRECIP(I,J,bi,bj)*(ONE-AREA(I,J,2,bi,bj)) |
446 |
& *SEAICE_deltaTtherm/ICE_DENS |
& *SEAICE_deltaTtherm/ICE_DENS |
447 |
|
|
448 |
C Now melt snow if there is residual heat left in surface level |
C Now melt snow if there is residual heat left in surface level |
449 |
C Note that units of YNEG and SEAICE_SALT are m of ice |
C Note that units of YNEG and SEAICE_SALT are m of ice |
450 |
IF(RESID_HEAT(I,J).GT.ZERO.AND. |
IF( RESID_HEAT(I,J) .GT.ZERO |
451 |
& HSNOW(I,J,bi,bj).GT.ZERO) THEN |
& .AND.HSNOW(I,J,bi,bj).GT.ZERO ) THEN |
452 |
GHEFF(I,J)=MIN(HSNOW(I,J,bi,bj)/SDF/ICE_DENS, |
GHEFF(I,J) = MIN( HSNOW(I,J,bi,bj)/SDF/ICE_DENS, |
453 |
& RESID_HEAT(I,J)) |
& RESID_HEAT(I,J) ) |
454 |
YNEG(I,J,bi,bj)=YNEG(I,J,bi,bj)+GHEFF(I,J) |
YNEG(I,J,bi,bj) = YNEG(I,J,bi,bj)+GHEFF(I,J) |
455 |
HSNOW(I,J,bi,bj)=HSNOW(I,J,bi,bj)-GHEFF(I,J)*SDF*ICE_DENS |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)-GHEFF(I,J)*SDF*ICE_DENS |
456 |
SEAICE_SALT(I,J)=SEAICE_SALT(I,J)-GHEFF(I,J) |
SEAICE_SALT(I,J) = SEAICE_SALT(I,J)-GHEFF(I,J) |
457 |
ENDIF |
ENDIF |
458 |
|
|
459 |
C NOW GET FRESH WATER FLUX |
C NOW GET FRESH WATER FLUX |
460 |
EmPmR(I,J,bi,bj)= maskC(I,J,kSurface,bi,bj)*( |
EmPmR(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*( |
461 |
& EVAP(I,J,bi,bj)*(ONE-AREA(I,J,2,bi,bj)) |
& EVAP(I,J,bi,bj)*(ONE-AREA(I,J,2,bi,bj)) |
462 |
& -RUNOFF(I,J,bi,bj) |
& -RUNOFF(I,J,bi,bj) |
463 |
& +SEAICE_SALT(I,J)*ICE_DENS/SEAICE_deltaTtherm |
& +SEAICE_SALT(I,J)*ICE_DENS/SEAICE_deltaTtherm |
464 |
& ) |
& ) |
465 |
|
|
466 |
C NOW GET TOTAL QNET AND QSW |
C NOW GET TOTAL QNET AND QSW |
467 |
QNET(I,J,bi,bj)=QNETI(I,J) *AREA(I,J,2,bi,bj) |
QNET(I,J,bi,bj) = QNETI(I,J) * AREA(I,J,2,bi,bj) |
468 |
& +QNETO(I,J) *(ONE-AREA(I,J,2,bi,bj)) |
& +QNETO(I,J) * (ONE-AREA(I,J,2,bi,bj)) |
469 |
QSW(I,J,bi,bj) =QSWI(I,J) *AREA(I,J,2,bi,bj) |
QSW(I,J,bi,bj) = QSWI(I,J) * AREA(I,J,2,bi,bj) |
470 |
& +QSWO(I,J) *(ONE-AREA(I,J,2,bi,bj)) |
& +QSWO(I,J) * (ONE-AREA(I,J,2,bi,bj)) |
|
c #ifndef SHORTWAVE_HEATING |
|
|
c QNET(I,J,bi,bj)=QNET(I,J,bi,bj)+QSW(I,J,bi,bj) |
|
|
c #endif |
|
471 |
|
|
472 |
C Now convert YNEG back to deg K. |
C Now convert YNEG back to deg K. |
473 |
YNEG(I,J,bi,bj)=YNEG(I,J,bi,bj)*recip_dRf(1)*72.0764 _d 0 |
YNEG(I,J,bi,bj) = YNEG(I,J,bi,bj)*recip_dRf(1)*72.0764 _d 0 |
474 |
|
|
475 |
C Add YNEG contribution to QNET |
C Add YNEG contribution to QNET |
476 |
QNET(I,J,bi,bj)=QNET(I,J,bi,bj) |
QNET(I,J,bi,bj) = QNET(I,J,bi,bj) |
477 |
& +YNEG(I,J,bi,bj)/SEAICE_deltaTtherm |
& +YNEG(I,J,bi,bj)/SEAICE_deltaTtherm |
478 |
& *maskC(I,J,kSurface,bi,bj) |
& *maskC(I,J,kSurface,bi,bj) |
479 |
& *HeatCapacity_Cp*recip_horiVertRatio*rhoConst |
& *HeatCapacity_Cp*recip_horiVertRatio*rhoConst |
549 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
550 |
DO J=1,sNy |
DO J=1,sNy |
551 |
DO I=1,sNx |
DO I=1,sNx |
552 |
AREA(I,J,1,bi,bj)=MAX(ZERO,AREA(I,J,1,bi,bj)) |
AREA(I,J,1,bi,bj) = MAX(ZERO,AREA(I,J,1,bi,bj)) |
553 |
HSNOW(I,J,bi,bj)=MAX(ZERO,HSNOW(I,J,bi,bj)) |
HSNOW(I,J,bi,bj) = MAX(ZERO,HSNOW(I,J,bi,bj)) |
554 |
#endif |
#endif |
555 |
AREA(I,J,1,bi,bj)=AREA(I,J,1,bi,bj)*HEFFM(I,J,bi,bj) |
AREA(I,J,1,bi,bj) = AREA(I,J,1,bi,bj)*HEFFM(I,J,bi,bj) |
556 |
HEFF(I,J,1,bi,bj)=HEFF(I,J,1,bi,bj)*HEFFM(I,J,bi,bj) |
HEFF(I,J,1,bi,bj) = HEFF(I,J,1,bi,bj)*HEFFM(I,J,bi,bj) |
557 |
#ifdef DO_WE_NEED_THIS |
#ifdef DO_WE_NEED_THIS |
558 |
c HEFF(I,J,1,bi,bj)=MIN(MAX_HEFF,HEFF(I,J,1,bi,bj)) |
c HEFF(I,J,1,bi,bj)=MIN(MAX_HEFF,HEFF(I,J,1,bi,bj)) |
559 |
#endif |
#endif |
560 |
HSNOW(I,J,bi,bj)=HSNOW(I,J,bi,bj)*HEFFM(I,J,bi,bj) |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)*HEFFM(I,J,bi,bj) |
561 |
ENDDO |
ENDDO |
562 |
ENDDO |
ENDDO |
563 |
|
|
570 |
& +HEFF(I,J,1,bi,bj)*SEAICE_rhoIce)/1000. _d 0 |
& +HEFF(I,J,1,bi,bj)*SEAICE_rhoIce)/1000. _d 0 |
571 |
hFlood = hDraft - MIN(hDraft,HEFF(I,J,1,bi,bj)) |
hFlood = hDraft - MIN(hDraft,HEFF(I,J,1,bi,bj)) |
572 |
HEFF(I,J,1,bi,bj) = HEFF(I,J,1,bi,bj) + hFlood |
HEFF(I,J,1,bi,bj) = HEFF(I,J,1,bi,bj) + hFlood |
573 |
HSNOW(I,J,bi,bj) = MAX(0. _d 0,HSNOW(I,J,bi,bj)-hFlood/SDF) |
HSNOW(I,J,bi,bj) = MAX(0. _d 0,HSNOW(I,J,bi,bj)-hFlood/SDF) |
574 |
ENDDO |
ENDDO |
575 |
ENDDO |
ENDDO |
576 |
ENDIF |
ENDIF |