120 |
|
|
121 |
C ICE/SNOW stocks tendencies associated with the various melt/freeze processes |
C ICE/SNOW stocks tendencies associated with the various melt/freeze processes |
122 |
_RL d_AREAbyATM (1:sNx,1:sNy) |
_RL d_AREAbyATM (1:sNx,1:sNy) |
|
#ifdef FENTY_AREA_EXPANSION_CONTRACTION |
|
123 |
_RL d_AREAbyOCN (1:sNx,1:sNy) |
_RL d_AREAbyOCN (1:sNx,1:sNy) |
124 |
_RL d_AREAbyICE (1:sNx,1:sNy) |
_RL d_AREAbyICE (1:sNx,1:sNy) |
|
#endif |
|
125 |
|
|
126 |
c The change of mean ice thickness due to out-of-bounds values following |
c The change of mean ice thickness due to out-of-bounds values following |
127 |
c sea ice dyhnamics |
c sea ice dyhnamics |
164 |
_RL hsnowActual (1:sNx,1:sNy) |
_RL hsnowActual (1:sNx,1:sNy) |
165 |
C actual ice thickness (with lower limit only) Reciprocal |
C actual ice thickness (with lower limit only) Reciprocal |
166 |
_RL recip_heffActual (1:sNx,1:sNy) |
_RL recip_heffActual (1:sNx,1:sNy) |
167 |
|
C local value (=HO or HO_south) |
168 |
|
_RL HO_loc |
169 |
|
|
170 |
C AREA_PRE :: hold sea-ice fraction field before any seaice-thermo update |
C AREA_PRE :: hold sea-ice fraction field before any seaice-thermo update |
171 |
_RL AREApreTH (1:sNx,1:sNy) |
_RL AREApreTH (1:sNx,1:sNy) |
311 |
r_QbyOCN (I,J) = 0.0 _d 0 |
r_QbyOCN (I,J) = 0.0 _d 0 |
312 |
|
|
313 |
d_AREAbyATM(I,J) = 0.0 _d 0 |
d_AREAbyATM(I,J) = 0.0 _d 0 |
|
#ifdef FENTY_AREA_EXPANSION_CONTRACTION |
|
314 |
d_AREAbyICE(I,J) = 0.0 _d 0 |
d_AREAbyICE(I,J) = 0.0 _d 0 |
315 |
d_AREAbyOCN(I,J) = 0.0 _d 0 |
d_AREAbyOCN(I,J) = 0.0 _d 0 |
|
#endif |
|
316 |
|
|
317 |
|
d_HEFFbyNEG(I,J) = 0.0 _d 0 |
318 |
d_HEFFbyOCNonICE(I,J) = 0.0 _d 0 |
d_HEFFbyOCNonICE(I,J) = 0.0 _d 0 |
319 |
d_HEFFbyATMonOCN(I,J) = 0.0 _d 0 |
d_HEFFbyATMonOCN(I,J) = 0.0 _d 0 |
320 |
d_HEFFbyFLOODING(I,J) = 0.0 _d 0 |
d_HEFFbyFLOODING(I,J) = 0.0 _d 0 |
322 |
d_HEFFbyATMonOCN_open(I,J) = 0.0 _d 0 |
d_HEFFbyATMonOCN_open(I,J) = 0.0 _d 0 |
323 |
d_HEFFbyATMonOCN_cover(I,J) = 0.0 _d 0 |
d_HEFFbyATMonOCN_cover(I,J) = 0.0 _d 0 |
324 |
|
|
325 |
|
d_HSNWbyNEG(I,J) = 0.0 _d 0 |
326 |
d_HSNWbyATMonSNW(I,J) = 0.0 _d 0 |
d_HSNWbyATMonSNW(I,J) = 0.0 _d 0 |
327 |
d_HSNWbyOCNonSNW(I,J) = 0.0 _d 0 |
d_HSNWbyOCNonSNW(I,J) = 0.0 _d 0 |
328 |
d_HSNWbyRAIN(I,J) = 0.0 _d 0 |
d_HSNWbyRAIN(I,J) = 0.0 _d 0 |
843 |
c of potential ice melt |
c of potential ice melt |
844 |
a_QbyOCN(I,J) = a_QbyOCN(I,J) * convertQ2HI |
a_QbyOCN(I,J) = a_QbyOCN(I,J) * convertQ2HI |
845 |
|
|
846 |
c by design r_QbyOCN .LE. 0. so that initial ice growth cannot |
c by design a_QbyOCN .LE. 0. so that initial ice growth cannot |
847 |
c be triggered by this term, which Ian says is better for adjoint |
c be triggered by this term, which Ian says is better for adjoint |
848 |
#else |
#else |
849 |
|
|
1218 |
DO J=1,sNy |
DO J=1,sNy |
1219 |
DO I=1,sNx |
DO I=1,sNx |
1220 |
|
|
1221 |
C compute ice melt due to ATM (and OCN) heat stocks |
IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN |
1222 |
#ifdef FENTY_AREA_EXPANSION_CONTRACTION |
HO_loc=HO_south |
1223 |
|
ELSE |
1224 |
#ifdef ALLOW_DIAGNOSTICS |
HO_loc=HO |
|
DIAGarrayA(I,J) = ZERO |
|
|
DIAGarrayB(I,J) = ZERO |
|
|
DIAGarrayC(I,J) = ZERO |
|
|
DIAGarray(I,J) = ZERO |
|
|
#endif |
|
|
|
|
|
c the various thickness tendency terms |
|
|
tmpscal1 = d_HEFFbyATMOnOCN_open(I,J) |
|
|
tmpscal2 = d_HEFFbyATMOnOCN_cover(I,J) |
|
|
tmpscal3 = d_HEFFbyOCNonICE(I,J) |
|
|
|
|
|
c Part 1: Treat expansion/contraction of ice cover in open-water areas |
|
|
|
|
|
C All new ice cover is created from divergent air-sea heat fluxes. Divergent |
|
|
c air-sea heat fluxes must exceed the potential convergent ocean-ice heat fluxes |
|
|
c for ice to form. |
|
|
IF (tmpscal1 .GT. ZERO) then |
|
|
IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN |
|
|
d_AREAbyATM(I,J)=tmpscal1/HO_south |
|
|
ELSE |
|
|
d_AREAbyATM(I,J)=tmpscal1/HO |
|
|
ENDIF |
|
|
|
|
|
c If there are convergent air-sea heat fluxes and convergent air-sea |
|
|
c heat fluxes are permitted to melt ice, tmpscal1 < 0. |
|
|
ELSEIF (AREApreTH(I,J) .GT. ZERO) THEN |
|
|
d_AREAbyATM(i,J) = HALF*tmpscal1*recip_heffActual(I,J) |
|
1225 |
ENDIF |
ENDIF |
1226 |
|
|
1227 |
c Part 2: Reduce ice concentration from ice thinning from above |
C compute contraction/expansion from melt/growth |
|
|
|
|
c Ice concentrations are reduced whenever existing ice thins from surface |
|
|
c heat flux convergence. |
|
|
if (tmpscal2 .LE. ZERO) then |
|
|
d_AREAbyICE(I,J) = HALF * tmpscal2 *recip_heffActual(I,J) |
|
|
endif |
|
|
|
|
|
c Part 3: Reduce ice concentration from ice thinning from below |
|
|
|
|
|
c Sensible heat transfer from the ocean to the sea ice thins it and |
|
|
c reduces concentrations |
|
|
if (tmpscal3 .LE.ZERO) then |
|
|
d_AREAbyOCN(I,J) = HALF * tmpscal3 *recip_heffActual(I,J) |
|
|
endif |
|
|
|
|
|
#ifdef ALLOW_DIAGNOSTICS |
|
|
DIAGarrayA(I,J) = d_AREAbyATM(I,J) |
|
|
DIAGarrayB(I,J) = d_AREAbyICE(I,J) |
|
|
DIAGarrayC(I,J) = d_AREAbyOCN(I,J) |
|
|
DIAGarray(I,J) = d_AREAbyICE(I,J) + d_AREAbyATM(I,J) |
|
|
& + d_AREAbyOCN(I,J) |
|
|
#endif |
|
|
|
|
|
#else /* FENTY_AREA_EXPANSION_CONTRACTION */ |
|
|
|
|
1228 |
#ifdef SEAICE_GROWTH_LEGACY |
#ifdef SEAICE_GROWTH_LEGACY |
1229 |
|
|
1230 |
C compute heff after ice melt by ocn: |
C compute heff after ice melt by ocn: |
1231 |
tmpscal0=HEFF(I,J,bi,bj) |
tmpscal0=HEFF(I,J,bi,bj) - d_HEFFbyATMonOCN(I,J) |
|
& - d_HEFFbyATMonOCN(I,J) - d_HEFFbyFLOODING(I,J) |
|
1232 |
C compute available heat left after snow melt by atm: |
C compute available heat left after snow melt by atm: |
1233 |
tmpscal1= a_QbyATM_open(I,J)+a_QbyATM_cover(I,J) |
tmpscal1= a_QbyATM_open(I,J)+a_QbyATM_cover(I,J) |
1234 |
& - d_HSNWbyATMonSNW(I,J)/ICE2SNOW |
& - d_HSNWbyATMonSNW(I,J)/ICE2SNOW |
1239 |
DIAGarray(I,J) = tmpscal2 |
DIAGarray(I,J) = tmpscal2 |
1240 |
#endif |
#endif |
1241 |
C gain of new ice over open water |
C gain of new ice over open water |
1242 |
tmpscal4 = MAX(ZERO,a_QbyATM_open(I,J)) |
tmpscal4=MAX(ZERO,a_QbyATM_open(I,J)) |
1243 |
|
C compute cover fraction tendency |
1244 |
|
d_AREAbyATM(I,J)=tmpscal4/HO_loc+HALF*tmpscal3 |
1245 |
|
& *AREApreTH(I,J) /(tmpscal0+.00001 _d 0) |
1246 |
|
|
1247 |
#else /* SEAICE_GROWTH_LEGACY */ |
#else /* SEAICE_GROWTH_LEGACY */ |
1248 |
|
|
1249 |
# ifdef SEAICE_OCN_MELT_ACT_ON_AREA |
# ifdef FENTY_AREA_EXPANSION_CONTRACTION |
1250 |
|
|
1251 |
|
C the various volume tendency terms |
1252 |
|
tmpscal1 = d_HEFFbyATMOnOCN_open(I,J) |
1253 |
|
tmpscal2 = d_HEFFbyATMOnOCN_cover(I,J) |
1254 |
|
tmpscal3 = d_HEFFbyOCNonICE(I,J) |
1255 |
|
|
1256 |
|
C Part 1: expansion/contraction of ice cover in open-water areas. |
1257 |
|
IF (tmpscal1 .GT. ZERO) then |
1258 |
|
C Ice cover is all created from open ocean-water air-sea heat fluxes |
1259 |
|
d_AREAbyATM(I,J)=tmpscal1/HO_loc |
1260 |
|
ELSEIF (AREApreTH(I,J) .GT. ZERO) THEN |
1261 |
|
C that can also act to remove ice cover. |
1262 |
|
d_AREAbyATM(i,J) = HALF*tmpscal1*recip_heffActual(I,J) |
1263 |
|
ENDIF |
1264 |
|
|
1265 |
|
C Part 2: contraction from ice thinning from above |
1266 |
|
if (tmpscal2 .LE. ZERO) d_AREAbyICE(I,J) = |
1267 |
|
& HALF * tmpscal2 * recip_heffActual(I,J) |
1268 |
|
|
1269 |
|
C Part 3: contraction from ice thinning from below |
1270 |
|
if (tmpscal3 .LE.ZERO) d_AREAbyOCN(I,J) = |
1271 |
|
& HALF * tmpscal3* recip_heffActual(I,J) |
1272 |
|
|
1273 |
|
# else /* FENTY_AREA_EXPANSION_CONTRACTION */ |
1274 |
|
|
1275 |
|
# ifdef SEAICE_OCN_MELT_ACT_ON_AREA |
1276 |
C ice cover reduction by joint OCN+ATM melt |
C ice cover reduction by joint OCN+ATM melt |
1277 |
tmpscal3 = MIN( 0. _d 0 , |
tmpscal3 = MIN( 0. _d 0 , |
1278 |
& d_HEFFbyATMonOCN(I,J)+d_HEFFbyOCNonICE(I,J) ) |
& d_HEFFbyATMonOCN(I,J)+d_HEFFbyOCNonICE(I,J) ) |
1279 |
# else |
# else |
1280 |
C ice cover reduction by ATM melt only -- as in legacy code |
C ice cover reduction by ATM melt only -- as in legacy code |
1281 |
tmpscal3 = MIN( 0. _d 0 , d_HEFFbyATMonOCN(I,J) ) |
tmpscal3 = MIN( 0. _d 0 , d_HEFFbyATMonOCN(I,J) ) |
1282 |
# endif |
# endif |
1283 |
C gain of new ice over open water |
C gain of new ice over open water |
1284 |
|
|
1285 |
# ifdef SEAICE_DO_OPEN_WATER_GROWTH |
# ifdef SEAICE_DO_OPEN_WATER_GROWTH |
1286 |
C the one effectively used to increment HEFF |
C the one effectively used to increment HEFF |
1287 |
tmpscal4 = d_HEFFbyATMonOCN_open(I,J) |
tmpscal4 = MAX(ZERO,d_HEFFbyATMonOCN_open(I,J)) |
1288 |
# else |
# else |
1289 |
C the virtual one -- as in legcy code |
C the virtual one -- as in legcy code |
1290 |
tmpscal4 = MAX(ZERO,a_QbyATM_open(I,J)) |
tmpscal4 = MAX(ZERO,a_QbyATM_open(I,J)) |
1291 |
# endif |
# endif |
|
#endif /* SEAICE_GROWTH_LEGACY */ |
|
1292 |
|
|
1293 |
C compute cover fraction tendency |
C compute cover fraction tendency |
1294 |
IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN |
d_AREAbyATM(I,J)=tmpscal4/HO_loc+ |
1295 |
d_AREAbyATM(I,J)=tmpscal4/HO_south |
& HALF*tmpscal3*recip_heffActual(I,J) |
1296 |
ELSE |
|
1297 |
d_AREAbyATM(I,J)=tmpscal4/HO |
# endif /* FENTY_AREA_EXPANSION_CONTRACTION */ |
|
ENDIF |
|
|
d_AREAbyATM(I,J)=d_AREAbyATM(I,J) |
|
|
#ifdef SEAICE_GROWTH_LEGACY |
|
|
& +HALF*tmpscal3*AREApreTH(I,J) |
|
|
& /(tmpscal0+.00001 _d 0) |
|
|
#else |
|
|
& +HALF*tmpscal3*recip_heffActual(I,J) |
|
|
#endif |
|
1298 |
|
|
1299 |
#endif /* FENTY_AREA_EXPANSION_CONTRACTION */ |
#endif /* SEAICE_GROWTH_LEGACY */ |
1300 |
|
|
1301 |
C apply tendency |
C apply tendency |
1302 |
IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR. |
IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR. |
1303 |
& (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN |
& (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN |
1304 |
AREA(I,J,bi,bj)=max(0. _d 0 , min( 1. _d 0, |
AREA(I,J,bi,bj)=max(0. _d 0, min( 1. _d 0, AREA(I,J,bi,bj) |
1305 |
& AREA(I,J,bi,bj)+d_AREAbyATM(I,J) |
& +d_AREAbyATM(I,J) + d_AREAbyOCN(I,J) + d_AREAbyICE(I,J) )) |
|
#ifdef FENTY_AREA_EXPANSION_CONTRACTION |
|
|
& + d_AREAbyOCN(I,J) + d_AREAbyICE(I,J) |
|
|
#endif |
|
|
& )) |
|
1306 |
ELSE |
ELSE |
1307 |
AREA(I,J,bi,bj)=0. _d 0 |
AREA(I,J,bi,bj)=0. _d 0 |
1308 |
ENDIF |
ENDIF |
1309 |
|
|
1310 |
|
#ifdef ALLOW_DIAGNOSTICS |
1311 |
|
DIAGarray(I,J) = d_AREAbyICE(I,J) + d_AREAbyATM(I,J) |
1312 |
|
& + d_AREAbyOCN(I,J) |
1313 |
|
#endif |
1314 |
|
|
1315 |
ENDDO |
ENDDO |
1316 |
ENDDO |
ENDDO |
1317 |
|
|
1322 |
& 'SIdA ',0,1,3,bi,bj,myThid) |
& 'SIdA ',0,1,3,bi,bj,myThid) |
1323 |
ENDIF |
ENDIF |
1324 |
IF ( DIAGNOSTICS_IS_ON('SIdAbATO',myThid) ) THEN |
IF ( DIAGNOSTICS_IS_ON('SIdAbATO',myThid) ) THEN |
1325 |
CALL DIAGNOSTICS_FILL(DIAGarrayA, |
CALL DIAGNOSTICS_FILL(d_AREAbyATM, |
1326 |
& 'SIdAbATO',0,1,3,bi,bj,myThid) |
& 'SIdAbATO',0,1,3,bi,bj,myThid) |
1327 |
ENDIF |
ENDIF |
1328 |
IF ( DIAGNOSTICS_IS_ON('SIdAbATC',myThid) ) THEN |
IF ( DIAGNOSTICS_IS_ON('SIdAbATC',myThid) ) THEN |
1329 |
CALL DIAGNOSTICS_FILL(DIAGarrayB, |
CALL DIAGNOSTICS_FILL(d_AREAbyICE, |
1330 |
& 'SIdAbATC',0,1,3,bi,bj,myThid) |
& 'SIdAbATC',0,1,3,bi,bj,myThid) |
1331 |
ENDIF |
ENDIF |
1332 |
IF ( DIAGNOSTICS_IS_ON('SIdAbOCN',myThid) ) THEN |
IF ( DIAGNOSTICS_IS_ON('SIdAbOCN',myThid) ) THEN |
1333 |
CALL DIAGNOSTICS_FILL(DIAGarrayC, |
CALL DIAGNOSTICS_FILL(d_AREAbyOCN, |
1334 |
& 'SIdAbOCN',0,1,3,bi,bj,myThid) |
& 'SIdAbOCN',0,1,3,bi,bj,myThid) |
1335 |
ENDIF |
ENDIF |
1336 |
ENDIF |
ENDIF |