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.
domrea.F90 in trunk/NEMO/OFF_SRC/DOM – NEMO

source: trunk/NEMO/OFF_SRC/DOM/domrea.F90 @ 382

Last change on this file since 382 was 382, checked in by opalod, 18 years ago

nemo_v1_bugfix_021:CE+RB: bug in the definition of the vertical grid (partial step)

bad read of the time step

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.8 KB
Line 
1MODULE domrea
2   !!======================================================================
3   !!                       ***  MODULE domrea  ***
4   !! Ocean initialization : read the ocean domain meshmask file(s)
5   !!======================================================================
6
7   !!----------------------------------------------------------------------
8   !!   dom_rea        : read mesh and mask file(s)
9   !!                    nmsh = 1  :   mesh_mask file
10   !!                         = 2  :   mesh and mask file
11   !!                         = 3  :   mesh_hgr, mesh_zgr and mask
12   !!----------------------------------------------------------------------
13   !! * Modules used
14   USE dom_oce         ! ocean space and time domain
15   USE in_out_manager
16
17   IMPLICIT NONE
18   PRIVATE
19
20   !! * Accessibility
21   PUBLIC dom_rea        ! routine called by inidom.F90
22   !!----------------------------------------------------------------------
23   !!   OPA 9.0 , LOCEAN-IPSL  (2005)
24   !!   $Header$
25   !!   This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
26   !!----------------------------------------------------------------------
27
28CONTAINS
29
30#if defined key_fdir
31   !!----------------------------------------------------------------------
32   !!   'key_fdir' :                                     direct access file
33   !!----------------------------------------------------------------------
34#  include "domrea_fdir.h90"
35
36#elif ( defined key_mpp_mpi || defined key_mpp_shmem ) && defined key_dimgout
37   !!----------------------------------------------------------------------
38   !!   'key_mpp_mpi'     OR
39   !!   'key_mpp_shmem'
40   !!   'key_dimgout' :         each processor makes its own direct access file
41   !!                      use build_nc_meshmask off line to retrieve
42   !!                      a ioipsl compliant meshmask file
43   !!----------------------------------------------------------------------
44#  include "domrea_dimg.h90"
45
46
47#else
48   !!----------------------------------------------------------------------
49   !!   Default option :                                        NetCDF file
50   !!----------------------------------------------------------------------
51
52   SUBROUTINE dom_rea
53      !!----------------------------------------------------------------------
54      !!                  ***  ROUTINE dom_rea  ***
55      !!                   
56      !! ** Purpose :  Read the NetCDF file(s) which contain(s) all the
57      !!      ocean domain informations (mesh and mask arrays). This (these)
58      !!      file(s) is (are) used for visualisation (SAXO software) and
59      !!      diagnostic computation.
60      !!
61      !! ** Method  :   Read in a file all the arrays generated in routines
62      !!      domhgr, domzgr, and dommsk. Note: the file contain depends on
63      !!      the vertical coord. used (z-coord, partial steps, s-coord)
64      !!                    nmsh = 1  :   'mesh_mask.nc' file
65      !!                         = 2  :   'mesh.nc' and mask.nc' files
66      !!                         = 3  :   'mesh_hgr.nc', 'mesh_zgr.nc' and
67      !!                                  'mask.nc' files
68      !!      For huge size domain, use option 2 or 3 depending on your
69      !!      vertical coordinate.
70      !!
71      !! ** input file :
72      !!      meshmask.nc  : domain size, horizontal grid-point position,
73      !!                     masks, depth and vertical scale factors
74      !!
75      !! History :
76      !!        !  97-02  (G. Madec)  Original code
77      !!        !  99-11  (M. Imbard)  NetCDF FORMAT with IOIPSL
78      !!   9.0  !  02-08  (G. Madec)  F90 and several file
79      !!----------------------------------------------------------------------
80      !! * Modules used
81      USE ioipsl
82
83      !! * Local declarations
84      LOGICAL ::   llog
85      INTEGER  ::   ji, jj, jk, ik
86      INTEGER  ::                & !!! * temprary units for :
87         inum0 ,                 &  ! 'mesh_mask.nc' file
88         inum1 ,                 &  ! 'mesh.nc'      file
89         inum2 ,                 &  ! 'mask.nc'      file
90         inum3 ,                 &  ! 'mesh_hgr.nc'  file
91         inum4                      ! 'mesh_zgr.nc'  file
92      INTEGER  ::   itime           !  output from restini ???
93      REAL(wp) ::   zdate0, zdt
94      REAL(wp), DIMENSION(jpidta,jpjdta) ::   &
95         zta       ! dummy array for bathymetry
96      REAL(wp) , DIMENSION(jpidta,jpjdta,jpk) :: &
97         zt3a      ! dummy array for bathymetry
98      REAL(wp), DIMENSION(jpi,jpj) :: &
99         zprt = 0.
100
101      CHARACTER (len=21) ::      &
102         clnam0 = 'mesh_mask',   &  ! filename (mesh and mask informations)
103         clnam1 = 'mesh'     ,   &  ! filename (mesh informations)
104         clnam2 = 'mask'     ,   &  ! filename (mask informations)
105         clnam3 = 'mesh_hgr' ,   &  ! filename (horizontal mesh informations)
106         clnam4 = 'mesh_zgr'        ! filename (vertical   mesh informations)
107      !!----------------------------------------------------------------------
108
109       IF(lwp) WRITE(numout,*)
110       IF(lwp) WRITE(numout,*) 'dom_rea : read NetCDF mesh and mask information file(s)'
111       IF(lwp) WRITE(numout,*) '~~~~~~~'
112
113      llog  = .FALSE.
114
115      CALL ymds2ju( 0, 1, 1, 0.e0, zdate0 )    ! calendar initialization
116
117!       note that mbathy has been modified in dommsk or in solver.
118!       it is the number of non-zero "w" levels in the water, and the minimum
119!       value (on land) is 2. We define zprt as the number of "T" points in the ocean
120!       at any location, and zero on land.
121!
122
123      SELECT CASE (nmsh)
124         !                                     ! ============================
125         CASE ( 1 )                            !  create 'mesh_mask.nc' file
126            !                                  ! ============================
127
128            IF(lwp) WRITE(numout,*) '          one file in "mesh_mask.nc" '
129            CALL restini( clnam0, jpidta   , jpjdta   , glamt, gphit,  &   ! create 'mesh_mask.nc' file
130            &             jpk   , gdept , trim(clnam0)        ,  &   ! in unit inum0
131            &             itime , zdate0, zdt   , inum0, domain_id=nidom )
132            inum2 = inum0                                            ! put all the informations
133            inum3 = inum0                                            ! in unit inum0
134            inum4 = inum0
135
136            !                                  ! ============================
137         CASE ( 2 )                            !  create 'mesh.nc' and
138            !                                  !         'mask.nc' files
139            !                                  ! ============================
140
141            IF(lwp) WRITE(numout,*) '          two files in "mesh.nc" and "mask.nc" '
142            CALL restini( clnam1, jpidta   , jpjdta   , glamt, gphit,  &   ! create 'mesh.nc' file
143            &             jpk   , gdept , trim(clnam1)        ,  &   ! in unit inum1
144            &             itime , zdate0, zdt   , inum1, domain_id=nidom )
145            CALL restini( clnam2, jpidta   , jpjdta   , glamt, gphit,  &   ! create 'mask.nc' file
146            &             jpk   , gdept , trim(clnam2)        ,  &   ! in unit inum2
147            &             itime , zdate0, zdt   , inum2, domain_id=nidom )
148            inum3 = inum1                                            ! put mesh informations
149            inum4 = inum1                                            ! in unit inum1
150
151            !                                  ! ============================
152         CASE ( 3 )                            !  create 'mesh_hgr.nc'
153            !                                  !         'mesh_zgr.nc' and
154            !                                  !         'mask.nc'     files
155            !                                  ! ============================
156
157            IF(lwp) WRITE(numout,*) '          three files in "mesh_hgr.nc" , mesh_zgr.nc" and "mask.nc" '
158            CALL restini( clnam3, jpidta   , jpjdta   , glamt, gphit,  &   ! create 'mesh_hgr.nc' file
159            &             jpk   , gdept , trim(clnam3)        ,  &   ! in unit inum3
160            &             itime , zdate0, zdt   , inum3, domain_id=nidom )
161            CALL restini( clnam4, jpidta   , jpjdta   , glamt, gphit,  &   ! create 'mesh_zgr.nc' file
162            &             jpk   , gdept , trim(clnam4)        ,  &   ! in unit inum4
163            &             itime , zdate0, zdt   , inum4, domain_id=nidom )
164            CALL restini( clnam2, jpidta   , jpjdta   , glamt, gphit,  &   ! create 'mask.nc' file
165            &             jpk   , gdept , trim(clnam2)        ,  &   ! in unit inum2
166            &             itime , zdate0, zdt   , inum2, domain_id=nidom )
167
168         END SELECT
169
170         !                                                         ! masks (inum2)
171         CALL restget( inum2, 'tmask', jpidta, jpjdta, jpk, 0, llog, zt3a ) 
172         DO jk = 1, jpk
173           DO jj = 1, nlcj
174             DO ji = 1, nlci
175               tmask(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
176             END DO
177           END DO
178         END DO
179         CALL restget( inum2, 'umask', jpidta, jpjdta, jpk, 0, llog, zt3a )
180         DO jk = 1, jpk
181           DO jj = 1, nlcj
182             DO ji = 1, nlci
183               umask(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
184             END DO
185           END DO
186         END DO
187         CALL restget( inum2, 'vmask', jpidta, jpjdta, jpk, 0, llog, zt3a )
188         DO jk = 1, jpk
189           DO jj = 1, nlcj
190             DO ji = 1, nlci
191               vmask(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
192             END DO
193           END DO
194         END DO
195         CALL restget( inum2, 'fmask', jpidta, jpjdta, jpk, 0, llog, zt3a )
196         DO jk = 1, jpk
197           DO jj = 1, nlcj
198             DO ji = 1, nlci
199               fmask(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
200             END DO
201           END DO
202         END DO
203
204#if defined key_off_degrad
205         CALL restget( inum2, 'facvolt', jpidta, jpjdta, jpk, 0, llog, zt3a )
206         DO jk = 1, jpk
207           DO jj = 1, nlcj
208             DO ji = 1, nlci
209               facvol(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
210             END DO
211           END DO
212         END DO
213#endif
214
215         !                                                         ! horizontal mesh (inum3)
216         CALL restget( inum3, 'glamt', jpidta, jpjdta, 1, 0, llog, zta )     !    ! latitude
217           DO jj = 1, nlcj
218             DO ji = 1, nlci
219               glamt(ji,jj) = zta(mig(ji),mjg(jj))
220             END DO
221           END DO
222         CALL restget( inum3, 'glamu', jpidta, jpjdta, 1, 0, llog, zta )
223           DO jj = 1, nlcj
224             DO ji = 1, nlci
225               glamu(ji,jj) = zta(mig(ji),mjg(jj))
226             END DO
227           END DO
228         CALL restget( inum3, 'glamv', jpidta, jpjdta, 1, 0, llog, zta )
229           DO jj = 1, nlcj
230             DO ji = 1, nlci
231               glamv(ji,jj) = zta(mig(ji),mjg(jj))
232             END DO
233           END DO
234         CALL restget( inum3, 'glamf', jpidta, jpjdta, 1, 0, llog, zta )
235           DO jj = 1, nlcj
236             DO ji = 1, nlci
237               glamf(ji,jj) = zta(mig(ji),mjg(jj))
238             END DO
239           END DO
240
241         CALL restget( inum3, 'gphit', jpidta, jpjdta, 1, 0, llog, zta )     !    ! longitude
242           DO jj = 1, nlcj
243             DO ji = 1, nlci
244               gphit(ji,jj) = zta(mig(ji),mjg(jj))
245             END DO
246           END DO
247         CALL restget( inum3, 'gphiu', jpidta, jpjdta, 1, 0, llog, zta )
248           DO jj = 1, nlcj
249             DO ji = 1, nlci
250               gphiu(ji,jj) = zta(mig(ji),mjg(jj))
251             END DO
252           END DO
253         CALL restget( inum3, 'gphiv', jpidta, jpjdta, 1, 0, llog, zta )
254           DO jj = 1, nlcj
255             DO ji = 1, nlci
256               gphiv(ji,jj) = zta(mig(ji),mjg(jj))
257             END DO
258           END DO
259         CALL restget( inum3, 'gphif', jpidta, jpjdta, 1, 0, llog, zta )
260           DO jj = 1, nlcj
261             DO ji = 1, nlci
262               gphif(ji,jj) = zta(mig(ji),mjg(jj))
263             END DO
264           END DO
265
266         CALL restget( inum3, 'e1t', jpidta, jpjdta, 1, 0, llog, zta )         !    ! e1 scale factors
267           DO jj = 1, nlcj
268             DO ji = 1, nlci
269               e1t(ji,jj) = zta(mig(ji),mjg(jj))
270             END DO
271           END DO
272         CALL restget( inum3, 'e1u', jpidta, jpjdta, 1, 0, llog, zta )
273           DO jj = 1, nlcj
274             DO ji = 1, nlci
275               e1u(ji,jj) = zta(mig(ji),mjg(jj))
276             END DO
277           END DO
278         CALL restget( inum3, 'e1v', jpidta, jpjdta, 1, 0, llog, zta )
279           DO jj = 1, nlcj
280             DO ji = 1, nlci
281               e1v(ji,jj) = zta(mig(ji),mjg(jj))
282             END DO
283           END DO
284         CALL restget( inum3, 'e2t', jpidta, jpjdta, 1, 0, llog, zta )         !    ! e2 scale factors
285           DO jj = 1, nlcj
286             DO ji = 1, nlci
287               e2t(ji,jj) = zta(mig(ji),mjg(jj))
288             END DO
289           END DO
290         CALL restget( inum3, 'e2u', jpidta, jpjdta, 1, 0, llog, zta )
291           DO jj = 1, nlcj
292             DO ji = 1, nlci
293               e2u(ji,jj) = zta(mig(ji),mjg(jj))
294             END DO
295           END DO
296         CALL restget( inum3, 'e2v', jpidta, jpjdta, 1, 0, llog, zta )
297           DO jj = 1, nlcj
298             DO ji = 1, nlci
299               e2v(ji,jj) = zta(mig(ji),mjg(jj))
300             END DO
301           END DO
302         CALL restget( inum3, 'ff', jpidta, jpjdta, 1, 0, llog, zta )           !    ! coriolis factor
303           DO jj = 1, nlcj
304             DO ji = 1, nlci
305               ff(ji,jj) = zta(mig(ji),mjg(jj))
306             END DO
307           END DO
308
309         CALL restget( inum4, 'mbathy', jpidta, jpjdta, 1, 0, llog, zta )
310! Bathymetry
311           DO jj = 1, nlcj
312             DO ji = 1, nlci
313               zprt(ji,jj) = zta(mig(ji),mjg(jj))
314             END DO
315           END DO
316
317         mbathy(:,:)=zprt(:,:)*tmask(:,:,1)+1
318
319# if defined key_s_coord
320         !                                                         ! s-coordinate
321         CALL restget( inum4, 'hbatt', jpidta, jpjdta, 1, 0, llog, zta )      !    ! depth
322           DO jj = 1, nlcj
323             DO ji = 1, nlci
324               hbatt(ji,jj) = zta(mig(ji),mjg(jj))
325             END DO
326           END DO
327         CALL restget( inum4, 'hbatu', jpidta, jpjdta, 1, 0, llog, zta ) 
328           DO jj = 1, nlcj
329             DO ji = 1, nlci
330               hbatu(ji,jj) = zta(mig(ji),mjg(jj))
331             END DO
332           END DO
333         CALL restget( inum4, 'hbatv', jpidta, jpjdta, 1, 0, llog, zta )
334           DO jj = 1, nlcj
335             DO ji = 1, nlci
336               hbatv(ji,jj) = zta(mig(ji),mjg(jj))
337             END DO
338           END DO
339         CALL restget( inum4, 'hbatf', jpidta, jpjdta, 1, 0, llog, zta )
340           DO jj = 1, nlcj
341             DO ji = 1, nlci
342               hbatf(ji,jj) = zta(mig(ji),mjg(jj))
343             END DO
344           END DO
345
346         CALL restget( inum4, 'gsigt', 1, 1, jpk, 0, llog, gsigt )        !    ! scaling coef.
347         CALL restget( inum4, 'gsigw', 1, 1, jpk, 0, llog, gsigw ) 
348         CALL restget( inum4, 'gsi3w', 1, 1, jpk, 0, llog, gsi3w )
349         CALL restget( inum4, 'esigt', 1, 1, jpk, 0, llog, esigt )
350         CALL restget( inum4, 'esigw', 1, 1, jpk, 0, llog, esigw )
351
352# elif defined key_partial_steps
353         !                                                          ! z-coordinate with partial steps
354         CALL restget( inum4, 'hdept' , jpidta, jpjdta, 1, 0, llog, zta  )    !    ! depth
355           DO jj = 1, nlcj
356             DO ji = 1, nlci
357               hdept(ji,jj) = zta(mig(ji),mjg(jj))
358             END DO
359           END DO
360         CALL restget( inum4, 'hdepw' , jpidta, jpjdta, 1, 0, llog, zta  ) 
361           DO jj = 1, nlcj
362             DO ji = 1, nlci
363               hdepw(ji,jj) = zta(mig(ji),mjg(jj))
364             END DO
365           END DO
366
367         CALL restget( inum4, 'e3t_ps', jpidta, jpjdta, jpk, 0, llog, zt3a )  !    ! scale factors
368         DO jk = 1, jpk
369           DO jj = 1, nlcj
370             DO ji = 1, nlci
371               e3t_ps(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
372             END DO
373           END DO
374         END DO
375         CALL restget( inum4, 'e3u_ps', jpidta, jpjdta, jpk, 0, llog, zt3a )
376         DO jk = 1, jpk
377           DO jj = 1, nlcj
378             DO ji = 1, nlci
379               e3u_ps(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
380             END DO
381           END DO
382         END DO
383         CALL restget( inum4, 'e3v_ps', jpidta, jpjdta, jpk, 0, llog, zt3a )
384         DO jk = 1, jpk
385           DO jj = 1, nlcj
386             DO ji = 1, nlci
387               e3v_ps(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
388             END DO
389           END DO
390         END DO
391         CALL restget( inum4, 'e3w_ps', jpidta, jpjdta, jpk, 0, llog, zt3a )
392         DO jk = 1, jpk
393           DO jj = 1, nlcj
394             DO ji = 1, nlci
395               e3w_ps(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk)
396             END DO
397           END DO
398         END DO
399
400         CALL restget( inum4, 'gdept' , 1, 1, jpk, 0, llog, gdept )       !    ! reference z-coord.
401         CALL restget( inum4, 'gdepw' , 1, 1, jpk, 0, llog, gdepw )
402         CALL restget( inum4, 'e3t'   , 1, 1, jpk, 0, llog, e3t   )
403         CALL restget( inum4, 'e3w'   , 1, 1, jpk, 0, llog, e3w   )
404
405         DO jk=1,jpk
406            gdept_ps(:,:,jk) = gdept(jk)
407            gdepw_ps(:,:,jk) = gdepw(jk)
408         END DO
409
410         DO jj = 1, jpj
411            DO ji = 1, jpi
412               ik = mbathy(ji,jj) - 1
413               ! ocean point only
414               IF( ik > 0 ) THEN
415                  ! max ocean level case
416                  gdepw_ps(ji,jj,ik+1) = hdepw(ji,jj)
417                  gdept_ps(ji,jj,ik  ) = hdept(ji,jj)
418                  gdept_ps(ji,jj,ik+1) = gdept_ps(ji,jj,ik) + e3t_ps(ji,jj,ik)
419               ENDIF
420            END DO
421         END DO
422         
423
424# else
425         !                                                          ! z-coordinate
426         CALL restget( inum4, 'gdept', 1, 1, jpk, 0, llog, gdept )        !    ! depth
427         CALL restget( inum4, 'gdepw', 1, 1, jpk, 0, llog, gdepw )
428         CALL restget( inum4, 'e3t'  , 1, 1, jpk, 0, llog, e3t   )        !    ! scale factors
429         CALL restget( inum4, 'e3w'  , 1, 1, jpk, 0, llog, e3w   )
430# endif
431
432      ! Control printing : Grid informations (if not restart)
433      ! ----------------
434
435      IF(lwp .AND. .NOT.ln_rstart ) THEN
436         WRITE(numout,*)
437         WRITE(numout,*) '          longitude and e1 scale factors'
438         WRITE(numout,*) '          ------------------------------'
439         WRITE(numout,9300) ( ji, glamt(ji,1), glamu(ji,1),   &
440            glamv(ji,1), glamf(ji,1),   &
441            e1t(ji,1), e1u(ji,1),   &
442            e1v(ji,1), ji = 1, jpi,10)
4439300     FORMAT( 1x, i4, f8.2,1x, f8.2,1x, f8.2,1x, f8.2, 1x,    &
444            f19.10, 1x, f19.10, 1x, f19.10 )
445
446         WRITE(numout,*)
447         WRITE(numout,*) '          latitude and e2 scale factors'
448         WRITE(numout,*) '          -----------------------------'
449         WRITE(numout,9300) ( jj, gphit(1,jj), gphiu(1,jj),   &
450            &                     gphiv(1,jj), gphif(1,jj),   &
451            &                     e2t  (1,jj), e2u  (1,jj),   &
452            &                     e2v  (1,jj), jj = 1, jpj, 10 )
453      ENDIF
454
455
456      IF( nprint == 1 .AND. lwp ) THEN
457         WRITE(numout,*) '          e1u e2u '
458         CALL prihre( e1u,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )
459         CALL prihre( e2u,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )
460         WRITE(numout,*) '          e1v e2v  '
461         CALL prihre( e1v,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )
462         CALL prihre( e2v,jpi,jpj,jpi-5,jpi,1,jpj-5,jpj,1,0.,numout )
463      ENDIF
464
465      IF(lwp) THEN
466         WRITE(numout,*)
467         WRITE(numout,*) '              Reference z-coordinate depth and scale factors:'
468         WRITE(numout, "(9x,' level   gdept    gdepw     e3t      e3w  ')" )
469         WRITE(numout, "(10x, i4, 4f9.2)" ) ( jk, gdept(jk), gdepw(jk), e3t(jk), e3w(jk), jk = 1, jpk )
470      ENDIF
471
472      DO jk = 1, jpk
473         IF( e3w(jk) <= 0. .OR. e3t(jk) <= 0. ) THEN
474            IF(lwp) WRITE(numout,cform_err)
475            IF(lwp) WRITE(numout,*) ' e3w or e3t =< 0 '
476            nstop = nstop + 1
477         ENDIF
478         IF( gdepw(jk) < 0. .OR. gdept(jk) < 0.) THEN
479            IF(lwp) WRITE(numout,cform_err)
480            IF(lwp) WRITE(numout,*) ' gdepw or gdept < 0 '
481            nstop = nstop + 1
482         ENDIF
483      END DO
484
485         !                                     ! ============================
486         !                                     !        close the files
487         !                                     ! ============================
488         SELECT CASE ( nmsh )
489            CASE ( 1 )               
490               CALL restclo( inum0 )
491            CASE ( 2 )
492               CALL restclo( inum1 )
493               CALL restclo( inum2 )
494            CASE ( 3 )
495               CALL restclo( inum2 )
496               CALL restclo( inum3 )
497               CALL restclo( inum4 )
498         END SELECT
499
500   END SUBROUTINE dom_rea
501
502#endif
503
504   !!======================================================================
505END MODULE domrea
Note: See TracBrowser for help on using the repository browser.