New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 13899 for NEMO/branches/2020/tickets_icb_1900/src/OCE/TRA/traadv_fct.F90 – NEMO

Ignore:
Timestamp:
2020-11-27T17:26:33+01:00 (4 years ago)
Author:
mathiot
Message:

ticket #1900: update branch to trunk and add ICB test case

Location:
NEMO/branches/2020/tickets_icb_1900
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/tickets_icb_1900

    • Property svn:externals
      •  

        old new  
        22^/utils/build/makenemo@HEAD   makenemo 
        33^/utils/build/mk@HEAD         mk 
        4 ^/utils/tools/@HEAD           tools 
         4^/utils/tools@HEAD            tools 
        55^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
         
        88 
        99# SETTE 
        10 ^/utils/CI/sette@12931        sette 
         10^/utils/CI/sette@13559        sette 
  • NEMO/branches/2020/tickets_icb_1900/src/OCE/TRA/traadv_fct.F90

    r13237 r13899  
    139139      IF( ll_zAimp ) THEN 
    140140         ALLOCATE(zwdia(jpi,jpj,jpk), zwinf(jpi,jpj,jpk),zwsup(jpi,jpj,jpk)) 
    141          DO_3D_00_00( 1, jpkm1 ) 
     141         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    142142            zwdia(ji,jj,jk) =  1._wp + p2dt * ( MAX( wi(ji,jj,jk) , 0._wp ) - MIN( wi(ji,jj,jk+1) , 0._wp ) )   & 
    143143            &                               / e3t(ji,jj,jk,Krhs) 
     
    151151         !        !==  upstream advection with initial mass fluxes & intermediate update  ==! 
    152152         !                    !* upstream tracer flux in the i and j direction  
    153          DO_3D_10_10( 1, jpkm1 ) 
     153         DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    154154            ! upstream scheme 
    155155            zfp_ui = pU(ji,jj,jk) + ABS( pU(ji,jj,jk) ) 
     
    160160            zwy(ji,jj,jk) = 0.5 * ( zfp_vj * pt(ji,jj,jk,jn,Kbb) + zfm_vj * pt(ji  ,jj+1,jk,jn,Kbb) ) 
    161161         END_3D 
    162          !                    !* upstream tracer flux in the k direction *! 
    163          DO_3D_11_11( 2, jpkm1 ) 
     162         !                               !* upstream tracer flux in the k direction *! 
     163         DO_3D( 1, 1, 1, 1, 2, jpkm1 )      ! Interior value ( multiplied by wmask) 
    164164            zfp_wk = pW(ji,jj,jk) + ABS( pW(ji,jj,jk) ) 
    165165            zfm_wk = pW(ji,jj,jk) - ABS( pW(ji,jj,jk) ) 
    166166            zwz(ji,jj,jk) = 0.5 * ( zfp_wk * pt(ji,jj,jk,jn,Kbb) + zfm_wk * pt(ji,jj,jk-1,jn,Kbb) ) * wmask(ji,jj,jk) 
    167167         END_3D 
    168          IF( ln_linssh ) THEN    ! top ocean value (only in linear free surface as zwz has been w-masked) 
    169             IF( ln_isfcav ) THEN             ! top of the ice-shelf cavities and at the ocean surface 
    170                DO_2D_11_11 
     168         IF( ln_linssh ) THEN               ! top ocean value (only in linear free surface as zwz has been w-masked) 
     169            IF( ln_isfcav ) THEN                        ! top of the ice-shelf cavities and at the ocean surface 
     170               DO_2D( 1, 1, 1, 1 ) 
    171171                  zwz(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb)   ! linear free surface  
    172172               END_2D 
    173             ELSE                             ! no cavities: only at the ocean surface 
    174                zwz(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kbb) 
     173            ELSE                                        ! no cavities: only at the ocean surface 
     174               DO_2D( 1, 1, 1, 1 ) 
     175                  zwz(ji,jj,1) = pW(ji,jj,1) * pt(ji,jj,1,jn,Kbb) 
     176               END_2D 
    175177            ENDIF 
    176178         ENDIF 
    177179         !                
    178          DO_3D_00_00( 1, jpkm1 ) 
    179             !                             ! total intermediate advective trends 
     180         DO_3D( 0, 0, 0, 0, 1, jpkm1 )   !* trend and after field with monotonic scheme 
     181            !                               ! total intermediate advective trends 
    180182            ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   & 
    181183               &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   & 
    182184               &      + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) * r1_e1e2t(ji,jj) 
    183             !                             ! update and guess with monotonic sheme 
     185            !                               ! update and guess with monotonic sheme 
    184186            pt(ji,jj,jk,jn,Krhs) =                   pt(ji,jj,jk,jn,Krhs) +       ztra   & 
    185187               &                                  / e3t(ji,jj,jk,Kmm ) * tmask(ji,jj,jk) 
     
    192194            ! 
    193195            ztw(:,:,1) = 0._wp ; ztw(:,:,jpk) = 0._wp ; 
    194             DO_3D_00_00( 2, jpkm1 ) 
     196            DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! Interior value ( multiplied by wmask) 
    195197               zfp_wk = wi(ji,jj,jk) + ABS( wi(ji,jj,jk) ) 
    196198               zfm_wk = wi(ji,jj,jk) - ABS( wi(ji,jj,jk) ) 
     
    198200               zwz(ji,jj,jk) = zwz(ji,jj,jk) + ztw(ji,jj,jk) ! update vertical fluxes 
    199201            END_3D 
    200             DO_3D_00_00( 1, jpkm1 ) 
     202            DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    201203               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) & 
    202204                  &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     
    216218         ! 
    217219         CASE(  2  )                   !- 2nd order centered 
    218             DO_3D_10_10( 1, jpkm1 ) 
     220            DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    219221               zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj,jk,jn,Kmm) ) - zwx(ji,jj,jk) 
    220222               zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj+1,jk,jn,Kmm) ) - zwy(ji,jj,jk) 
     
    225227            zltv(:,:,jpk) = 0._wp 
    226228            DO jk = 1, jpkm1                 ! Laplacian 
    227                DO_2D_10_10 
     229               DO_2D( 1, 0, 1, 0 )                 ! 1st derivative (gradient) 
    228230                  ztu(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * umask(ji,jj,jk) 
    229231                  ztv(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * vmask(ji,jj,jk) 
    230232               END_2D 
    231                DO_2D_00_00 
     233               DO_2D( 0, 0, 0, 0 )                 ! 2nd derivative * 1/ 6 
    232234                  zltu(ji,jj,jk) = (  ztu(ji,jj,jk) + ztu(ji-1,jj,jk)  ) * r1_6 
    233235                  zltv(ji,jj,jk) = (  ztv(ji,jj,jk) + ztv(ji,jj-1,jk)  ) * r1_6 
     
    236238            CALL lbc_lnk_multi( 'traadv_fct', zltu, 'T', 1.0_wp , zltv, 'T', 1.0_wp )   ! Lateral boundary cond. (unchanged sgn) 
    237239            ! 
    238             DO_3D_10_10( 1, jpkm1 ) 
     240            DO_3D( 1, 0, 1, 0, 1, jpkm1 )    ! Horizontal advective fluxes 
    239241               zC2t_u = pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj  ,jk,jn,Kmm)   ! 2 x C2 interpolation of T at u- & v-points 
    240242               zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm) 
    241                !                                                  ! C4 minus upstream advective fluxes  
     243               !                                                        ! C4 minus upstream advective fluxes  
    242244               zwx(ji,jj,jk) =  0.5_wp * pU(ji,jj,jk) * ( zC2t_u + zltu(ji,jj,jk) - zltu(ji+1,jj,jk) ) - zwx(ji,jj,jk) 
    243245               zwy(ji,jj,jk) =  0.5_wp * pV(ji,jj,jk) * ( zC2t_v + zltv(ji,jj,jk) - zltv(ji,jj+1,jk) ) - zwy(ji,jj,jk) 
     
    247249            ztu(:,:,jpk) = 0._wp             ! Bottom value : flux set to zero 
    248250            ztv(:,:,jpk) = 0._wp 
    249             DO_3D_10_10( 1, jpkm1 ) 
     251            DO_3D( 1, 0, 1, 0, 1, jpkm1 )    ! 1st derivative (gradient) 
    250252               ztu(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * umask(ji,jj,jk) 
    251253               ztv(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * vmask(ji,jj,jk) 
     
    253255            CALL lbc_lnk_multi( 'traadv_fct', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp )   ! Lateral boundary cond. (unchanged sgn) 
    254256            ! 
    255             DO_3D_00_00( 1, jpkm1 ) 
     257            DO_3D( 0, 0, 0, 0, 1, jpkm1 )    ! Horizontal advective fluxes 
    256258               zC2t_u = pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj  ,jk,jn,Kmm)   ! 2 x C2 interpolation of T at u- & v-points (x2) 
    257259               zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm) 
     
    269271         ! 
    270272         CASE(  2  )                   !- 2nd order centered 
    271             DO_3D_00_00( 2, jpkm1 ) 
     273            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    272274               zwz(ji,jj,jk) =  (  pW(ji,jj,jk) * 0.5_wp * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) )   & 
    273275                  &              - zwz(ji,jj,jk)  ) * wmask(ji,jj,jk) 
     
    276278         CASE(  4  )                   !- 4th order COMPACT 
    277279            CALL interp_4th_cpt( pt(:,:,:,jn,Kmm) , ztw )   ! zwt = COMPACT interpolation of T at w-point 
    278             DO_3D_00_00( 2, jpkm1 ) 
     280            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    279281               zwz(ji,jj,jk) = ( pW(ji,jj,jk) * ztw(ji,jj,jk) - zwz(ji,jj,jk) ) * wmask(ji,jj,jk) 
    280282            END_3D 
     
    286288         !          
    287289         IF ( ll_zAimp ) THEN 
    288             DO_3D_00_00( 1, jpkm1 ) 
    289                !                             ! total intermediate advective trends 
     290            DO_3D( 0, 0, 0, 0, 1, jpkm1 )    !* trend and after field with monotonic scheme 
     291               !                                                ! total intermediate advective trends 
    290292               ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   & 
    291293                  &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   & 
     
    296298            CALL tridia_solver( zwdia, zwsup, zwinf, ztw, ztw , 0 ) 
    297299            ! 
    298             DO_3D_00_00( 2, jpkm1 ) 
     300            DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! Interior value ( multiplied by wmask) 
    299301               zfp_wk = wi(ji,jj,jk) + ABS( wi(ji,jj,jk) ) 
    300302               zfm_wk = wi(ji,jj,jk) - ABS( wi(ji,jj,jk) ) 
     
    311313         !        !==  final trend with corrected fluxes  ==! 
    312314         ! 
    313          DO_3D_00_00( 1, jpkm1 ) 
     315         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    314316            ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   & 
    315317               &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   & 
     
    322324            ! 
    323325            ztw(:,:,1) = 0._wp ; ztw(:,:,jpk) = 0._wp 
    324             DO_3D_00_00( 2, jpkm1 ) 
     326            DO_3D( 0, 0, 0, 0, 2, jpkm1 )      ! Interior value ( multiplied by wmask) 
    325327               zfp_wk = wi(ji,jj,jk) + ABS( wi(ji,jj,jk) ) 
    326328               zfm_wk = wi(ji,jj,jk) - ABS( wi(ji,jj,jk) ) 
     
    328330               zwz(ji,jj,jk) = zwz(ji,jj,jk) + ztw(ji,jj,jk) ! Update vertical fluxes for trend diagnostic 
    329331            END_3D 
    330             DO_3D_00_00( 1, jpkm1 ) 
     332            DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    331333               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) & 
    332334                  &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     
    407409      DO jk = 1, jpkm1 
    408410         ikm1 = MAX(jk-1,1) 
    409          DO_2D_00_00 
     411         DO_2D( 0, 0, 0, 0 ) 
    410412 
    411413            ! search maximum in neighbourhood 
     
    441443      ! 3. monotonic flux in the i & j direction (paa & pbb) 
    442444      ! ---------------------------------------- 
    443       DO_3D_00_00( 1, jpkm1 ) 
     445      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    444446         zau = MIN( 1._wp, zbetdo(ji,jj,jk), zbetup(ji+1,jj,jk) ) 
    445447         zbu = MIN( 1._wp, zbetup(ji,jj,jk), zbetdo(ji+1,jj,jk) ) 
     
    452454         pbb(ji,jj,jk) = pbb(ji,jj,jk) * ( zcv * zav + ( 1._wp - zcv) * zbv ) 
    453455 
    454 ! monotonic flux in the k direction, i.e. pcc 
    455 ! ------------------------------------------- 
     456      ! monotonic flux in the k direction, i.e. pcc 
     457      ! ------------------------------------------- 
    456458         za = MIN( 1., zbetdo(ji,jj,jk+1), zbetup(ji,jj,jk) ) 
    457459         zb = MIN( 1., zbetup(ji,jj,jk+1), zbetdo(ji,jj,jk) ) 
     
    479481      !!---------------------------------------------------------------------- 
    480482       
    481       DO_3D_11_11( 3, jpkm1 ) 
     483      DO_3D( 1, 1, 1, 1, 3, jpkm1 )       !==  build the three diagonal matrix  ==! 
    482484         zwd (ji,jj,jk) = 4._wp 
    483485         zwi (ji,jj,jk) = 1._wp 
     
    493495      END_3D 
    494496      ! 
    495       jk = 2                                          ! Switch to second order centered at top 
    496       DO_2D_11_11 
     497      jk = 2                                    ! Switch to second order centered at top 
     498      DO_2D( 1, 1, 1, 1 ) 
    497499         zwd (ji,jj,jk) = 1._wp 
    498500         zwi (ji,jj,jk) = 0._wp 
     
    502504      ! 
    503505      !                       !==  tridiagonal solve  ==! 
    504       DO_2D_11_11 
     506      DO_2D( 1, 1, 1, 1 )           ! first recurrence 
    505507         zwt(ji,jj,2) = zwd(ji,jj,2) 
    506508      END_2D 
    507       DO_3D_11_11( 3, jpkm1 ) 
     509      DO_3D( 1, 1, 1, 1, 3, jpkm1 ) 
    508510         zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) /zwt(ji,jj,jk-1) 
    509511      END_3D 
    510512      ! 
    511       DO_2D_11_11 
     513      DO_2D( 1, 1, 1, 1 )           ! second recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    512514         pt_out(ji,jj,2) = zwrm(ji,jj,2) 
    513515      END_2D 
    514       DO_3D_11_11( 3, jpkm1 ) 
     516      DO_3D( 1, 1, 1, 1, 3, jpkm1 ) 
    515517         pt_out(ji,jj,jk) = zwrm(ji,jj,jk) - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *pt_out(ji,jj,jk-1)              
    516518      END_3D 
    517519 
    518       DO_2D_11_11 
     520      DO_2D( 1, 1, 1, 1 )           ! third recurrence: Xk = (Zk - Sk Xk+1 ) / Tk 
    519521         pt_out(ji,jj,jpkm1) = pt_out(ji,jj,jpkm1) / zwt(ji,jj,jpkm1) 
    520522      END_2D 
    521       DO_3DS_11_11( jpk-2, 2, -1 ) 
     523      DO_3DS( 1, 1, 1, 1, jpk-2, 2, -1 ) 
    522524         pt_out(ji,jj,jk) = ( pt_out(ji,jj,jk) - zws(ji,jj,jk) * pt_out(ji,jj,jk+1) ) / zwt(ji,jj,jk) 
    523525      END_3D 
     
    544546      !                      !==  build the three diagonal matrix & the RHS  ==! 
    545547      ! 
    546       DO_3D_00_00( 3, jpkm1 ) 
     548      DO_3D( 0, 0, 0, 0, 3, jpkm1 )    ! interior (from jk=3 to jpk-1) 
    547549         zwd (ji,jj,jk) = 3._wp * wmask(ji,jj,jk) + 1._wp                 !       diagonal 
    548550         zwi (ji,jj,jk) =         wmask(ji,jj,jk)                         ! lower diagonal 
     
    563565      END IF 
    564566      ! 
    565       DO_2D_00_00 
     567      DO_2D( 0, 0, 0, 0 )              ! 2nd order centered at top & bottom 
    566568         ikt = mikt(ji,jj) + 1            ! w-point below the 1st  wet point 
    567569         ikb = MAX(mbkt(ji,jj), 2)        !     -   above the last wet point 
     
    580582      !                       !==  tridiagonal solver  ==! 
    581583      ! 
    582       DO_2D_00_00 
     584      DO_2D( 0, 0, 0, 0 )           !* 1st recurrence:   Tk = Dk - Ik Sk-1 / Tk-1 
    583585         zwt(ji,jj,2) = zwd(ji,jj,2) 
    584586      END_2D 
    585       DO_3D_00_00( 3, jpkm1 ) 
     587      DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 
    586588         zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) /zwt(ji,jj,jk-1) 
    587589      END_3D 
    588590      ! 
    589       DO_2D_00_00 
     591      DO_2D( 0, 0, 0, 0 )           !* 2nd recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    590592         pt_out(ji,jj,2) = zwrm(ji,jj,2) 
    591593      END_2D 
    592       DO_3D_00_00( 3, jpkm1 ) 
     594      DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 
    593595         pt_out(ji,jj,jk) = zwrm(ji,jj,jk) - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *pt_out(ji,jj,jk-1)              
    594596      END_3D 
    595597 
    596       DO_2D_00_00 
     598      DO_2D( 0, 0, 0, 0 )           !* 3d recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk 
    597599         pt_out(ji,jj,jpkm1) = pt_out(ji,jj,jpkm1) / zwt(ji,jj,jpkm1) 
    598600      END_2D 
    599       DO_3DS_00_00( jpk-2, 2, -1 ) 
     601      DO_3DS( 0, 0, 0, 0, jpk-2, 2, -1 ) 
    600602         pt_out(ji,jj,jk) = ( pt_out(ji,jj,jk) - zws(ji,jj,jk) * pt_out(ji,jj,jk+1) ) / zwt(ji,jj,jk) 
    601603      END_3D 
     
    636638      kstart =  1  + klev 
    637639      ! 
    638       DO_2D_00_00 
     640      DO_2D( 0, 0, 0, 0 )                         !* 1st recurrence:   Tk = Dk - Ik Sk-1 / Tk-1 
    639641         zwt(ji,jj,kstart) = pD(ji,jj,kstart) 
    640642      END_2D 
    641       DO_3D_00_00( kstart+1, jpkm1 ) 
     643      DO_3D( 0, 0, 0, 0, kstart+1, jpkm1 ) 
    642644         zwt(ji,jj,jk) = pD(ji,jj,jk) - pL(ji,jj,jk) * pU(ji,jj,jk-1) /zwt(ji,jj,jk-1) 
    643645      END_3D 
    644646      ! 
    645       DO_2D_00_00 
     647      DO_2D( 0, 0, 0, 0 )                        !* 2nd recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    646648         pt_out(ji,jj,kstart) = pRHS(ji,jj,kstart) 
    647649      END_2D 
    648       DO_3D_00_00( kstart+1, jpkm1 ) 
     650      DO_3D( 0, 0, 0, 0, kstart+1, jpkm1 ) 
    649651         pt_out(ji,jj,jk) = pRHS(ji,jj,jk) - pL(ji,jj,jk) / zwt(ji,jj,jk-1) *pt_out(ji,jj,jk-1)              
    650652      END_3D 
    651653 
    652       DO_2D_00_00 
     654      DO_2D( 0, 0, 0, 0 )                       !* 3d recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk 
    653655         pt_out(ji,jj,jpkm1) = pt_out(ji,jj,jpkm1) / zwt(ji,jj,jpkm1) 
    654656      END_2D 
    655       DO_3DS_00_00( jpk-2, kstart, -1 ) 
     657      DO_3DS( 0, 0, 0, 0, jpk-2, kstart, -1 ) 
    656658         pt_out(ji,jj,jk) = ( pt_out(ji,jj,jk) - pU(ji,jj,jk) * pt_out(ji,jj,jk+1) ) / zwt(ji,jj,jk) 
    657659      END_3D 
Note: See TracChangeset for help on using the changeset viewer.