/[MITgcm]/MITgcm_contrib/torge/itd/code/seaice_growth.F
ViewVC logotype

Diff of /MITgcm_contrib/torge/itd/code/seaice_growth.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.17 by torge, Wed Apr 10 00:35:33 2013 UTC revision 1.18 by torge, Thu Apr 11 21:48:06 2013 UTC
# Line 93  C     number of surface interface layer Line 93  C     number of surface interface layer
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
# Line 363  c constants for lateral melt parameteriz Line 367  c constants for lateral melt parameteriz
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)
# Line 720  C    and update AREA, HEFF, and HSNOW Line 730  C    and update AREA, HEFF, and HSNOW
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)
# Line 1343  C ====================================== Line 1353  C ======================================
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
# Line 1461  c ToM<<< debug seaice_growth Line 1475  c ToM<<< debug seaice_growth
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)
# Line 1532  c ToM<<< debug seaice_growth Line 1546  c ToM<<< debug seaice_growth
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)
# Line 1592  c ToM<<< debug seaice_growth Line 1606  c ToM<<< debug seaice_growth
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)
# Line 1669  c ToM<<< debug seaice_growth Line 1683  c ToM<<< debug seaice_growth
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)
# Line 1755  c ToM<<< debug seaice_growth Line 1769  c ToM<<< debug seaice_growth
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)
# Line 1819  c ToM<<< debug seaice_growth Line 1833  c ToM<<< debug seaice_growth
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)
# Line 1893  c ToM<<< debug seaice_growth Line 1907  c ToM<<< debug seaice_growth
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)
# Line 1961  c ToM<<< debug seaice_growth Line 1975  c ToM<<< debug seaice_growth
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)
# Line 1996  c ToM<<< debug seaice_growth Line 2010  c ToM<<< debug seaice_growth
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)
# Line 2061  C       i.e. change sin AREA only occur Line 2075  C       i.e. change sin AREA only occur
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

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.18

  ViewVC Help
Powered by ViewVC 1.1.22