93 |
INTEGER kSurface |
INTEGER kSurface |
94 |
C IT :: ice thickness category index (MULTICATEGORIES and ITD code) |
C IT :: ice thickness category index (MULTICATEGORIES and ITD code) |
95 |
INTEGER IT |
INTEGER IT |
96 |
|
#ifdef SEAICE_DEBUG |
97 |
|
C coordinates for debugging output |
98 |
|
INTEGER i_dbOut, j_dbOut |
99 |
|
#endif |
100 |
C msgBuf :: Informational/error message buffer |
C msgBuf :: Informational/error message buffer |
101 |
#ifdef ALLOW_BALANCE_FLUXES |
#ifdef ALLOW_BALANCE_FLUXES |
102 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
367 |
c following Steele (1992), Equ. 2 |
c following Steele (1992), Equ. 2 |
368 |
floeAlpha = 0.66 _d 0 |
floeAlpha = 0.66 _d 0 |
369 |
c typical mean diameter used in CICE 4.1: |
c typical mean diameter used in CICE 4.1: |
370 |
|
c (this is currently computed as a function of ice concentration |
371 |
|
c following a suggestion by Luepkes at al. (2012)) |
372 |
c floeDiameter = 300. _d 0 |
c floeDiameter = 300. _d 0 |
373 |
c parameters needed for variable floe diameter following Luepkes et al. (2012): |
c parameters needed for variable floe diameter following Luepkes et al. (2012): |
374 |
floeDiameterMin = 8. _d 0 |
floeDiameterMin = 8. _d 0 |
375 |
floeDiameterMax = 300. _d 0 |
floeDiameterMax = 300. _d 0 |
376 |
#endif |
#endif |
377 |
|
#ifdef SEAICE_DEBUG |
378 |
|
i_dbOut = 1 |
379 |
|
j_dbOut = 1 |
380 |
|
#endif |
381 |
|
|
382 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
383 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
DO bi=myBxLo(myThid),myBxHi(myThid) |
730 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
731 |
& ' SEAICE_GROWTH: Heff increments 0, HEFF = ', |
& ' SEAICE_GROWTH: Heff increments 0, HEFF = ', |
732 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
733 |
& HEFFITD(1,1,:,bi,bj) |
& HEFFITD(i_dbOut,j_dbOut,:,bi,bj) |
734 |
#else |
#else |
735 |
& HEFF(1,1,bi,bj) |
& HEFF(i_dbOut,j_dbOut,bi,bj) |
736 |
#endif |
#endif |
737 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
738 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
739 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
740 |
& ' SEAICE_GROWTH: Area increments 0, AREA = ', |
& ' SEAICE_GROWTH: Area increments 0, AREA = ', |
741 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
742 |
& AREAITD(1,1,:,bi,bj) |
& AREAITD(i_dbOut,j_dbOut,:,bi,bj) |
743 |
#else |
#else |
744 |
& AREA(1,1,bi,bj) |
& AREA(i_dbOut,j_dbOut,bi,bj) |
745 |
#endif |
#endif |
746 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
747 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1353 |
c |
c |
1354 |
c variable floe diameter following Luepkes et al. (2012, JGR, Equ. 26) with beta=1 |
c variable floe diameter following Luepkes et al. (2012, JGR, Equ. 26) with beta=1 |
1355 |
tmpscal3=ONE/(ONE-(floeDiameterMin/floeDiameterMax)) |
tmpscal3=ONE/(ONE-(floeDiameterMin/floeDiameterMax)) |
1356 |
floeDiameter = floeDiameterMin |
floeDiameter = floeDiameterMin |
1357 |
& * (tmpscal3 / (tmpscal3-AREApreTH(I,J))) |
& * (tmpscal3 / (tmpscal3-AREApreTH(I,J))) |
1358 |
DO IT=1,nITD |
DO IT=1,nITD |
1359 |
C following the idea of SEAICE_areaLossFormula == 1: |
C following the idea of SEAICE_areaLossFormula == 1: |
1360 |
IF (r_QbyATMmult_cover(i,j,it).LT.ZERO .OR. |
IF (a_QbyATMmult_cover(i,j,it).LT.ZERO .OR. |
1361 |
& r_QbyATM_open(i,j) .LT.ZERO .OR. |
& a_QbyATM_open(i,j) .LT.ZERO .OR. |
1362 |
& r_QbyOCN(i,j) .LT.ZERO) THEN |
& a_QbyOCN(i,j) .LT.ZERO) THEN |
1363 |
c lateral melt rate as suggested by Perovich, 1983 (PhD thesis) |
c lateral melt rate as suggested by Perovich, 1983 (PhD thesis) |
1364 |
c latMeltRate(i,j,it) = 1.6 _d -6 * tmpscal1**1.36 |
latMeltRate(i,j,it) = 1.6 _d -6 * tmpscal1**1.36 |
1365 |
c lateral melt rate as suggested by Maykut and Perovich, 1987 (JGR 92(C7)), Equ. 24 |
c lateral melt rate as suggested by Maykut and Perovich, 1987 (JGR 92(C7)), Equ. 24 |
1366 |
c latMeltRate(i,j,it) = 13.5 _d -6 * tmpscal2 * tmpscal1**1.3 |
c latMeltRate(i,j,it) = 13.5 _d -6 * tmpscal2 * tmpscal1**1.3 |
1367 |
c further suggestion by Maykut and Perovich to avoid latMeltRate -> 0 for UG -> 0 |
c further suggestion by Maykut and Perovich to avoid latMeltRate -> 0 for UG -> 0 |
1368 |
latMeltRate(i,j,it) = (1.6 _d -6 + 13.5 _d -6 * tmpscal2) |
c latMeltRate(i,j,it) = (1.6 _d -6 + 13.5 _d -6 * tmpscal2) |
1369 |
& * tmpscal1**1.3 |
c & * tmpscal1**1.3 |
1370 |
c factor determining fraction of area and ice volume reduction |
c factor determining fraction of area and ice volume reduction |
1371 |
c due to lateral melt |
c due to lateral melt |
1372 |
latMeltFrac(i,j,it) = |
latMeltFrac(i,j,it) = |
1373 |
& latMeltRate(i,j,it)*SEAICE_deltaTtherm*PI / |
& latMeltRate(i,j,it)*SEAICE_deltaTtherm*PI / |
1374 |
& (floeAlpha * floeDiameter) |
& (floeAlpha * floeDiameter) |
1375 |
latMeltFrac(i,j,it)=max(ZERO, min(latMeltFrac(i,j,it),ONE)) |
latMeltFrac(i,j,it)=max(ZERO, min(latMeltFrac(i,j,it),ONE)) |
1376 |
print*,'latMelt',it,tmpscal1,latMeltRate(i,j,it), |
c if (i.eq.i_dbOut.and.j.eq.j_dbOut) then |
1377 |
& areaitd(i,j,it,bi,bj),latMeltFrac(i,j,it) |
c print*,'latMelt',it,tmpscal1,latMeltRate(i,j,it), |
1378 |
|
c & areaitd(i,j,it,bi,bj),latMeltFrac(i,j,it) |
1379 |
|
c endif |
1380 |
ELSE |
ELSE |
1381 |
c latMeltRate(i,j,it)=0.0 _d 0 |
latMeltRate(i,j,it)=0.0 _d 0 |
1382 |
latMeltFrac(i,j,it)=0.0 _d 0 |
latMeltFrac(i,j,it)=0.0 _d 0 |
1383 |
print*,'latMelt',it,' 0.0 0.0 ', |
c if (i.eq.i_dbOut.and.j.eq.j_dbOut) then |
1384 |
& areaitd(i,j,it,bi,bj),latMeltFrac(i,j,it) |
c print*,'latMelt',it,' 0.0 0.0 ', |
1385 |
|
c & areaitd(i,j,it,bi,bj),latMeltFrac(i,j,it) |
1386 |
|
c endif |
1387 |
ENDIF |
ENDIF |
1388 |
ENDDO |
ENDDO |
1389 |
ENDDO |
ENDDO |
1475 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1476 |
& ' SEAICE_GROWTH: Hsnow increments 1, d_HSNWySublim = ', |
& ' SEAICE_GROWTH: Hsnow increments 1, d_HSNWySublim = ', |
1477 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1478 |
& d_HSNWbySublim_ITD(1,1,:) |
& d_HSNWbySublim_ITD(i_dbOut,j_dbOut,:) |
1479 |
#else |
#else |
1480 |
& d_HSNWbySublim(1,1) |
& d_HSNWbySublim(i_dbOut,j_dbOut) |
1481 |
#endif |
#endif |
1482 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1483 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1484 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1485 |
& ' SEAICE_GROWTH: Heff increments 1, d_HEFFbySublim = ', |
& ' SEAICE_GROWTH: Heff increments 1, d_HEFFbySublim = ', |
1486 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1487 |
& d_HEFFbySublim_ITD(1,1,:) |
& d_HEFFbySublim_ITD(i_dbOut,j_dbOut,:) |
1488 |
#else |
#else |
1489 |
& d_HEFFbySublim(1,1) |
& d_HEFFbySublim(i_dbOut,j_dbOut) |
1490 |
#endif |
#endif |
1491 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1492 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1546 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1547 |
& ' SEAICE_GROWTH: Heff increments 2, d_HEFFbyOCNonICE = ', |
& ' SEAICE_GROWTH: Heff increments 2, d_HEFFbyOCNonICE = ', |
1548 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1549 |
& d_HEFFbyOCNonICE_ITD(1,1,:) |
& d_HEFFbyOCNonICE_ITD(i_dbOut,j_dbOut,:) |
1550 |
#else |
#else |
1551 |
& d_HEFFbyOCNonICE(1,1) |
& d_HEFFbyOCNonICE(i_dbOut,j_dbOut) |
1552 |
#endif |
#endif |
1553 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1554 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1606 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1607 |
& ' SEAICE_GROWTH: Hsnow increments 3, d_HSNWbyATMonSNW = ', |
& ' SEAICE_GROWTH: Hsnow increments 3, d_HSNWbyATMonSNW = ', |
1608 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1609 |
& d_HSNWbyATMonSNW_ITD(1,1,:) |
& d_HSNWbyATMonSNW_ITD(i_dbOut,j_dbOut,:) |
1610 |
#else |
#else |
1611 |
& d_HSNWbyATMonSNW(1,1) |
& d_HSNWbyATMonSNW(i_dbOut,j_dbOut) |
1612 |
#endif |
#endif |
1613 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1614 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1683 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1684 |
& ' SEAICE_GROWTH: Heff increments 4, d_HEFFbyATMonOCN_cover = ', |
& ' SEAICE_GROWTH: Heff increments 4, d_HEFFbyATMonOCN_cover = ', |
1685 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1686 |
& d_HEFFbyATMonOCN_cover_ITD(1,1,:) |
& d_HEFFbyATMonOCN_cover_ITD(i_dbOut,j_dbOut,:) |
1687 |
#else |
#else |
1688 |
& d_HEFFbyATMonOCN_cover(1,1) |
& d_HEFFbyATMonOCN_cover(i_dbOut,j_dbOut) |
1689 |
#endif |
#endif |
1690 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1691 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1692 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1693 |
& ' SEAICE_GROWTH: Heff increments 4, d_HEFFbyATMonOCN = ', |
& ' SEAICE_GROWTH: Heff increments 4, d_HEFFbyATMonOCN = ', |
1694 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1695 |
& d_HEFFbyATMonOCN_ITD(1,1,:) |
& d_HEFFbyATMonOCN_ITD(i_dbOut,j_dbOut,:) |
1696 |
#else |
#else |
1697 |
& d_HEFFbyATMonOCN(1,1) |
& d_HEFFbyATMonOCN(i_dbOut,j_dbOut) |
1698 |
#endif |
#endif |
1699 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1700 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1769 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1770 |
& ' SEAICE_GROWTH: Hsnow increments 5, d_HSNWbyRAIN = ', |
& ' SEAICE_GROWTH: Hsnow increments 5, d_HSNWbyRAIN = ', |
1771 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1772 |
& d_HSNWbyRAIN_ITD(1,1,:) |
& d_HSNWbyRAIN_ITD(i_dbOut,j_dbOut,:) |
1773 |
#else |
#else |
1774 |
& d_HSNWbyRAIN(1,1) |
& d_HSNWbyRAIN(i_dbOut,j_dbOut) |
1775 |
#endif |
#endif |
1776 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1777 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1833 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1834 |
& ' SEAICE_GROWTH: Hsnow increments 6, d_HSNWbyOCNonSNW = ', |
& ' SEAICE_GROWTH: Hsnow increments 6, d_HSNWbyOCNonSNW = ', |
1835 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1836 |
& d_HSNWbyOCNonSNW_ITD(1,1,:) |
& d_HSNWbyOCNonSNW_ITD(i_dbOut,j_dbOut,:) |
1837 |
#else |
#else |
1838 |
& d_HSNWbyOCNonSNW(1,1) |
& d_HSNWbyOCNonSNW(i_dbOut,j_dbOut) |
1839 |
#endif |
#endif |
1840 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1841 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1907 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1908 |
& ' SEAICE_GROWTH: Heff increments 7, d_HEFFbyATMonOCN_open = ', |
& ' SEAICE_GROWTH: Heff increments 7, d_HEFFbyATMonOCN_open = ', |
1909 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1910 |
& d_HEFFbyATMonOCN_open_ITD(1,1,:) |
& d_HEFFbyATMonOCN_open_ITD(i_dbOut,j_dbOut,:) |
1911 |
#else |
#else |
1912 |
& d_HEFFbyATMonOCN_open(1,1) |
& d_HEFFbyATMonOCN_open(i_dbOut,j_dbOut) |
1913 |
#endif |
#endif |
1914 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1915 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1916 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1917 |
& ' SEAICE_GROWTH: Heff increments 7, d_HEFFbyATMonOCN = ', |
& ' SEAICE_GROWTH: Heff increments 7, d_HEFFbyATMonOCN = ', |
1918 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1919 |
& d_HEFFbyATMonOCN_ITD(1,1,:) |
& d_HEFFbyATMonOCN_ITD(i_dbOut,j_dbOut,:) |
1920 |
#else |
#else |
1921 |
& d_HEFFbyATMonOCN(1,1) |
& d_HEFFbyATMonOCN(i_dbOut,j_dbOut) |
1922 |
#endif |
#endif |
1923 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1924 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
1975 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
1976 |
& ' SEAICE_GROWTH: Heff increments 8, d_HEFFbyFLOODING = ', |
& ' SEAICE_GROWTH: Heff increments 8, d_HEFFbyFLOODING = ', |
1977 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
1978 |
& d_HEFFbyFLOODING_ITD(1,1,:) |
& d_HEFFbyFLOODING_ITD(i_dbOut,j_dbOut,:) |
1979 |
#else |
#else |
1980 |
& d_HEFFbyFLOODING(1,1) |
& d_HEFFbyFLOODING(i_dbOut,j_dbOut) |
1981 |
#endif |
#endif |
1982 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
1983 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
2010 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
2011 |
& ' SEAICE_GROWTH: Heff increments 9, HEFF = ', |
& ' SEAICE_GROWTH: Heff increments 9, HEFF = ', |
2012 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
2013 |
& HEFFITD(1,1,:,bi,bj) |
& HEFFITD(i_dbOut,j_dbOut,:,bi,bj) |
2014 |
#else |
#else |
2015 |
& HEFF(1,1,bi,bj) |
& HEFF(i_dbOut,j_dbOut,bi,bj) |
2016 |
#endif |
#endif |
2017 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
2018 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
2019 |
WRITE(msgBuf,msgBufForm) |
WRITE(msgBuf,msgBufForm) |
2020 |
& ' SEAICE_GROWTH: Area increments 9, AREA = ', |
& ' SEAICE_GROWTH: Area increments 9, AREA = ', |
2021 |
#ifdef SEAICE_ITD |
#ifdef SEAICE_ITD |
2022 |
& AREAITD(1,1,:,bi,bj) |
& AREAITD(i_dbOut,j_dbOut,:,bi,bj) |
2023 |
#else |
#else |
2024 |
& AREA(1,1,bi,bj) |
& AREA(i_dbOut,j_dbOut,bi,bj) |
2025 |
#endif |
#endif |
2026 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
2027 |
& SQUEEZE_RIGHT , myThid) |
& SQUEEZE_RIGHT , myThid) |
2075 |
IF (HEFFITD(I,J,IT,bi,bj).LE.ZERO) THEN |
IF (HEFFITD(I,J,IT,bi,bj).LE.ZERO) THEN |
2076 |
AREAITD(I,J,IT,bi,bj)=ZERO |
AREAITD(I,J,IT,bi,bj)=ZERO |
2077 |
ELSE |
ELSE |
2078 |
|
c actual ice thickness from previous time step |
2079 |
|
c (actual ice thickness not to increase because of lateral melt!) |
2080 |
|
tmpscal1=HEFFITDpreTH(I,J,IT)/AREAITDpreTH(I,J,IT) |
2081 |
c melt ice laterally based on an average floe sice |
c melt ice laterally based on an average floe sice |
2082 |
c following Steele (1992) |
c following Steele (1992) |
2083 |
AREAITD(I,J,IT,bi,bj) = AREAITD(I,J,IT,bi,bj) |
AREAITD(I,J,IT,bi,bj) = AREAITD(I,J,IT,bi,bj) |
2084 |
& * (ONE - latMeltFrac(I,J,IT)) |
& * (ONE - latMeltFrac(I,J,IT)) |
2085 |
AREAITD(I,J,IT,bi,bj) = max(ZERO,AREAITD(I,J,IT,bi,bj)) |
AREAITD(I,J,IT,bi,bj) = max(ZERO,AREAITD(I,J,IT,bi,bj)) |
2086 |
|
c limit area reduction so that actual ice thickness does not increase |
2087 |
|
AREAITD(I,J,IT,bi,bj) = max(AREAITD(I,J,IT,bi,bj), |
2088 |
|
& HEFFITD(I,J,IT,bi,bj)/tmpscal1) |
2089 |
ENDIF |
ENDIF |
2090 |
ENDDO |
ENDDO |
2091 |
ENDDO |
ENDDO |