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.
trcrst.F90 in trunk/NEMO/TOP_SRC – NEMO

source: trunk/NEMO/TOP_SRC/trcrst.F90 @ 494

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

nemo_v1_update_062:CE+RB: use IOM for passive tracers

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 18.9 KB
Line 
1MODULE trcrst
2   !!======================================================================
3   !!
4   !!                       *** MODULE trcrst ***
5   !!
6   !!   Read the restart files for passive tracers
7   !!
8   !!======================================================================
9   !!  TOP 1.0,  LOCEAN-IPSL (2005)
10   !! $Header$
11   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
12   !!----------------------------------------------------------------------
13#if defined key_passivetrc   
14   !!----------------------------------------------------------------------
15   !! * Modules used
16   !! ==============
17   USE oce_trc
18   USE trc
19   USE sms
20   USE trctrp_lec   
21   USE lib_mpp
22   
23   IMPLICIT NONE
24   PRIVATE
25   
26   !! * Accessibility
27   PUBLIC trc_rst
28   PUBLIC trc_wri
29   
30   !! * Module variables
31   CHARACTER (len=48) ::   &
32      trestart = 'initial.trc.nc'   ! restart file name
33
34   !! * Substitutions
35#  include "passivetrc_substitute.h90"
36   
37CONTAINS
38
39#if defined key_fdir
40   !!----------------------------------------------------------------------
41   !!   'key_fdir'                                       direct access file
42   !!----------------------------------------------------------------------
43#include "trcrst_fdir.h90"
44   
45#else
46
47   SUBROUTINE trc_rst 
48      !!===========================================================================================
49      !!
50      !!                       ROUTINE trc_rst
51      !!                     *******************
52      !!
53      !!  PURPOSE :
54      !!  ---------
55      !!     READ files for restart for passive tracer
56      !!
57      !!   METHOD :
58      !!   -------
59      !!      READ the previous fields on the FILE nutrst
60      !!      the first record indicates previous characterics
61      !!      after control with the present run, we READ :
62      !!      - prognostic variables on the second and more record
63      !!
64      !!   History:
65      !!   --------
66      !!  original  : 96-11
67      !!  00-05 (A. Estublier) TVD Limiter Scheme key_trc_tvd
68      !!  00-12 (O. Aumont, E. Kestenare) read restart file for sediments
69      !!  01-05 (O. Aumont, E. Kestenare) read restart file for calcite and silicate sediments
70      !!  05-03 (O. Aumont and A. El Moussaoui) F90           
71      !!------------------------------------------------------------------------
72      !! * Modules used
73      USE iom
74
75
76      !! local declarations
77      !! ==================
78
79      INTEGER :: &
80         ji, jj, jk, jn 
81      INTEGER  ::   &
82         inum, iarak0                 ! temporary logical unit
83      REAL(wp), DIMENSION(1, 1, 3)  ::   zinfo
84
85      CHARACTER (len=32) :: clname1,clname2,clname
86      REAL(wp) :: caralk,bicarb
87
88#if defined key_trc_pisces 
89#   if ! defined key_cfg_1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 )
90      REAL(wp) ::   zareatot, ztrasum
91#   endif
92#endif
93
94      !!---------------------------------------------------------------------
95      !!  OPA.9 03-2005 
96      !!---------------------------------------------------------------------
97      !! 0. initialisations
98      !!------------------
99
100
101      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN
102         iarak0 = 1
103      ELSE
104         iarak0 = 0
105      ENDIF
106
107
108      IF(lwp) WRITE(numout,*) ' '
109      IF(lwp) WRITE(numout,*) ' *** trc_rst beginning of restart for'
110      IF(lwp) WRITE(numout,*) ' passive tracer'
111      IF(lwp) WRITE(numout,*) ' the present run :'
112      IF(lwp) WRITE(numout,*) '   number job is  : ',no
113      IF(lwp) WRITE(numout,*) '   with the time nit000 : ',nit000
114      IF(lwp) THEN
115         IF( iarak0 == 1 ) THEN
116            WRITE(numout,*) '   and before fields for Arakawa sheme '
117         ENDIF
118         WRITE(numout,*) ' '
119      ENDIF
120
121      ! Time domain : restart
122      ! -------------------------
123
124      IF(lwp) WRITE(numout,*)
125      IF(lwp) WRITE(numout,*)
126      IF(lwp) WRITE(numout,*) ' *** passive tracer restart option'
127      SELECT CASE ( nrsttr )
128      CASE ( 0 )
129         IF(lwp) WRITE(numout,*) ' nrsttr = 0 no control of nit000'
130      CASE ( 1 )
131         IF(lwp) WRITE(numout,*) ' nrsttr = 1 we control the date of nit000'
132      CASE ( 2 )
133         IF(lwp) WRITE(numout,*) ' nrsttr = 2 the date adatrj is read in restart file'
134      CASE DEFAULT
135         IF(lwp) WRITE(numout,*) '  ===>>>> nrsttr not equal 0, 1 or 2 : no control of the date'
136         IF(lwp) WRITE(numout,*) ' =======                   ========='
137      END SELECT
138
139
140
141      CALL iom_open ( 'restart.trc', inum )
142
143      CALL iom_get ( inum, jpdom_unknown, 'info', zinfo )
144
145      IF(lwp) WRITE(numout,*)
146      IF(lwp) WRITE(numout,*) ' Info on the restart file read : '
147      IF(lwp) WRITE(numout,*) '   job number          : ', NINT( zinfo(1, 1, 1) )
148      IF(lwp) WRITE(numout,*) '   time-step           : ', NINT( zinfo(1, 1, 2) )
149      IF(lwp) WRITE(numout,*) '   arakawa option      : ', NINT( zinfo(1, 1, 3) )
150      IF(lwp) WRITE(numout,*)
151
152
153      !! control of date
154      !! -------------------
155
156      IF( nittrc000 - NINT( zinfo( 1, 1, 2 ) ) /= 1 .AND. nrsttr /= 0 )  &
157           & CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart', &
158           & ' verify the restart file or rerun with nrstdt = 0 (namelist)' )
159
160      !! Control of the scheme
161      !! ------------------------
162
163      IF( iarak0 /= NINT( zinfo(1, 1, 3 ) ) ) &
164           & CALL ctl_stop( ' ===>>>> : problem with advection scheme', &
165           & ' it must be the same type for both restart and previous run', &
166           & ' centered or euler '  )
167
168
169      !! ... READ prognostic variables and computes diagnostic variable
170      !! ---------------------------------------------------------------
171
172      DO jn = 1, jptra
173         clname = 'TRN'//ctrcnm(jn)
174         CALL iom_get( inum, jpdom_local, clname, trn(:,:,:,jn)   ) 
175      END DO
176
177      DO jn = 1, jptra
178         clname = 'TRB'//ctrcnm(jn)
179         CALL iom_get( inum, jpdom_local, clname, trb(:,:,:,jn)   ) 
180      END DO
181
182#if defined key_trc_lobster1
183      clname  = 'SEDB'//ctrcnm(jpdet)
184      clname1 = 'SEDN'//ctrcnm(jpdet)
185      CALL iom_get( inum, jpdom_local, clname , sedpocb(:,:) ) 
186      CALL iom_get( inum, jpdom_local, clname1, sedpocn(:,:) ) 
187
188#elif defined key_trc_pisces
189      clname = 'Silicalim'
190      CALL iom_get( inum, jpdom_local, clname, xksi(:,:) ) 
191      xksimax = xksi
192
193      clname  = 'SED'//ctrcnm(jppoc)
194      clname1 = 'SED'//ctrcnm(jpcal)
195      clname2 = 'SED'//ctrcnm(jpsil)
196
197      CALL iom_get( inum, jpdom_local, clname , sedpoc(:,:) ) 
198      CALL iom_get( inum, jpdom_local, clname1, sedcal(:,:) ) 
199      CALL iom_get( inum, jpdom_local, clname2, sedsil(:,:) ) 
200
201#elif defined key_cfc
202      clname  = 'qint'
203      clname1 = 'qtr'
204
205      CALL iom_get( inum, jpdom_local, clname , qint(:,:,:) ) 
206      CALL iom_get( inum, jpdom_local, clname1, qtr (:,:,:) )       
207#endif
208
209#if defined key_trc_pisces 
210
211#if ! defined key_cfg_1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 )
212
213      zareatot = 0.
214      DO jk = 1, jpk
215         DO jj = 1, jpj
216            DO ji = 1, jpi
217               zareatot = zareatot + tmask(ji,jj,jk) * tmask_i(ji,jj)  &
218#if defined key_off_degrad
219                  &                * facvol(ji,jj,jk)    &
220#endif
221
222                  &                * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
223            END DO
224         END DO
225      END DO
226
227      IF( lk_mpp ) THEN
228         CALL mpp_sum( zareatot )     ! sum over the global domain 
229      END IF
230
231      ztrasum = 0.
232      DO jk = 1, jpk
233         DO jj = 1, jpj
234            DO ji = 1, jpi
235               ztrasum = ztrasum + trn(ji,jj,jk,jptal) * tmask(ji,jj,jk) * tmask_i(ji,jj)    &
236#if defined key_off_degrad
237                  &              * facvol(ji,jj,jk)   &
238#endif
239
240                  &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
241            END DO
242         END DO
243      END DO
244
245      IF( lk_mpp ) THEN
246         CALL mpp_sum( ztrasum )     ! sum over the global domain 
247      END IF
248
249      WRITE(0,*) 'TALK moyen ', ztrasum/zareatot*1E6
250      ztrasum = ztrasum/zareatot*1E6
251      trn(:,:,:,jptal) = trn(:,:,:,jptal)*2391./ztrasum
252
253      ztrasum = 0.
254      DO jk = 1, jpk
255         DO jj = 1, jpj
256            DO ji = 1, jpi
257               ztrasum = ztrasum + trn(ji,jj,jk,jppo4) * tmask(ji,jj,jk) * tmask_i(ji,jj)  &
258#if defined key_off_degrad
259                  &              * facvol(ji,jj,jk)   &
260#endif
261
262                  &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
263            END DO
264         END DO
265      END DO
266
267      IF( lk_mpp ) THEN
268         CALL mpp_sum( ztrasum )     ! sum over the global domain 
269      END IF
270
271
272      WRITE(0,*) 'PO4 moyen ', ztrasum/zareatot*1E6/122.
273      ztrasum = ztrasum/zareatot*1E6/122.
274      trn(:,:,:,jppo4) = trn(:,:,:,jppo4)*2.165/ztrasum
275
276      ztrasum = 0.
277      DO jk = 1, jpk
278         DO jj = 1, jpj
279            DO ji = 1, jpi
280               ztrasum = ztrasum + trn(ji,jj,jk,jpno3) * tmask(ji,jj,jk) * tmask_i(ji,jj)  &
281#if defined key_off_degrad
282                  &              * facvol(ji,jj,jk)   &
283#endif
284
285                  &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
286            END DO
287         END DO
288      END DO
289
290      IF( lk_mpp ) THEN
291         CALL mpp_sum( ztrasum )     ! sum over the global domain 
292      END IF
293
294
295      WRITE(0,*) 'NO3 moyen ', ztrasum/zareatot*1E6/7.6
296      ztrasum = ztrasum/zareatot*1E6/7.6
297      trn(:,:,:,jpno3) = trn(:,:,:,jpno3)*30.9/ztrasum
298
299      ztrasum = 0.
300      DO jk = 1, jpk
301         DO jj = 1, jpj
302            DO ji = 1, jpi
303               ztrasum = ztrasum + trn(ji,jj,jk,jpsil) * tmask(ji,jj,jk) * tmask_i(ji,jj)   &
304#if defined key_off_degrad
305                  &              * facvol(ji,jj,jk)   &
306#endif
307
308                  &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
309            END DO
310         END DO
311      END DO
312
313      IF( lk_mpp ) THEN
314         CALL mpp_sum( ztrasum )     ! sum over the global domain 
315      END IF
316
317      WRITE(0,*) 'SiO3 moyen ', ztrasum/zareatot*1E6
318      ztrasum = ztrasum/zareatot*1E6
319      trn(:,:,:,jpsil) = MIN( 400E-6,trn(:,:,:,jpsil)*91.51/ztrasum) 
320
321#endif
322      !!  Initialization of chemical variables of the carbon cycle
323      !!  --------------------------------------------------------
324      DO jk = 1,jpk
325         DO jj = 1,jpj
326            DO ji = 1,jpi
327               caralk = trn(ji,jj,jk,jptal)-       &
328                  &        borat(ji,jj,jk)/(1.+1.E-8/(rtrn+akb3(ji,jj,jk)))
329               co3(ji,jj,jk)=(caralk-trn(ji,jj,jk,jpdic))*tmask(ji,jj,jk)   &
330                  &        +(1.-tmask(ji,jj,jk))*.5e-3
331               bicarb = (2.*trn(ji,jj,jk,jpdic)-caralk)
332               hi(ji,jj,jk) = (ak23(ji,jj,jk)*bicarb/co3(ji,jj,jk))     &
333                  &  *tmask(ji,jj,jk)+(1.-tmask(ji,jj,jk))*1.e-9
334               h2co3(ji,jj) = 1.e-5
335            ENDDO
336         ENDDO
337      ENDDO
338#endif
339      trb(:,:,:,:) = trn(:,:,:,:)
340
341      CALL iom_close( inum )
342
343
344   END SUBROUTINE trc_rst
345
346   SUBROUTINE trc_wri(kt)
347      !! ==================================================================================
348      !!
349      !!                       ROUTINE trc_wri
350      !!                     ******************
351      !!
352      !!  PURPOSE :
353      !!  ---------
354      !!     WRITE restart fields in nutwrs
355      !!   METHOD :
356      !!   -------
357      !!
358      !!   nutwrs FILE:
359      !!   each nstock time step , SAVE fields which are necessary for
360      !!   passive tracer restart
361      !!
362      !!
363      !!   INPUT :
364      !!   -----
365      !!      argument
366      !!              kt              : time step
367      !!      COMMON
368      !!            /cottrc/          : passive tracers fields (before,now
369      !!                                  ,after)
370      !!
371      !!   OUTPUT :
372      !!   ------
373      !!      FILE
374      !!           nutwrs          : standard restart fields OUTPUT
375      !!
376      !!   WORKSPACE :
377      !!   ---------
378      !!      ji,jj,jk,jl,ino0,it0,iarak0
379      !!
380      !!   History:
381      !!   --------
382      !!      original : 96-12
383      !!      addition : 99-12 (M.-A. Foujols) NetCDF FORMAT with ioipsl
384      !!      additions : 00-05 (A. Estublier)
385      !!                  TVD Limiter Scheme : key_trc_tvd
386      !!      additions : 01-01 (M.A Foujols, E. Kestenare) bug fix: restclo
387      !!      additions : 01-01 (O. Aumont, E. Kestenare)
388      !!                  write restart file for sediments
389      !!      additions : 01-05 (O. Aumont, E. Kestenare)
390      !!                  write restart file for calcite and silicate sediments
391      !!   05-03 (O. Aumont and A. El Moussaoui) F90
392      !!========================================================================================!
393      !! * Modules used
394      USE ioipsl
395
396      !! * Arguments
397      !! -----------
398      INTEGER, INTENT( in ) :: kt
399
400      !! * local declarations
401      !! ====================
402
403      LOGICAL :: clbon         !!!
404      CHARACTER (len=50) :: clname,clname1,clname2,cln
405
406      INTEGER :: jn,   &
407         ino0,it0,iarak0,     &
408         ic,jc,ji,jj,jk,      &
409         itime
410
411      REAL(wp) :: zdate0, zinfo(3),zdiag_var,    &
412         zdiag_varmin, zdiag_varmax, zdiag_tot, zder
413
414
415      !! 1. OUTPUT of restart fields (nutwrs)
416      !! ---------------------------
417
418      IF( kt == nittrc000 ) THEN
419         IF(lwp) WRITE(numout,*)
420         IF(lwp) WRITE(numout,*) 'trc_wri : write passive tracers restart.output NetCDF file'
421         IF(lwp) WRITE(numout,*) '~~~~~~~'
422       
423
424         areatot = 0.
425         DO jk = 1, jpk
426            DO jj = 1, jpj
427               DO ji = 1, jpi
428                  areatot = areatot + tmask(ji,jj,jk)*tmask_i(ji,jj)*e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) 
429               END DO
430            END DO
431         END DO
432
433         IF( lk_mpp ) THEN
434             CALL mpp_sum(areatot)     ! sum over the global domain 
435         END IF
436
437         trai = 0.
438         DO jn = 1, jptra
439            DO jk = 1,jpk
440               DO jj = 1, jpj
441                  DO ji = 1, jpi
442                     trai=trai+tmask(ji,jj,jk)*trn(ji,jj,jk,jn)*     &
443                        &    tmask_i(ji,jj)* e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
444                  END DO
445               END DO
446            END DO
447         END DO
448
449         IF( lk_mpp ) THEN
450             CALL mpp_sum(trai)         ! sum over the global domain 
451         END IF
452
453         IF (lwp) WRITE(numout,*) 'Integral of all tracers over the full domain at NIT000 =',trai
454
455      ENDIF
456
457
458      IF( MOD(kt,nstock) == 0 .OR. kt == nitend ) THEN
459
460         !! 0. initialisations
461         !! ------------------
462
463         IF(lwp) WRITE(numout,*) ' '
464         IF(lwp) WRITE(numout,*) 'trc_wri : write the passive tracer restart file in NetCDF format ',   &
465            'at it= ',kt,' date= ',ndastp
466         IF(lwp) WRITE(numout,*) '~~~~~~~~~'
467
468
469         ino0 =no
470         it0  =kt
471         IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN
472            iarak0 = 1
473         ELSE
474            iarak0=0
475         ENDIF
476
477         zinfo(1)=FLOAT(ino0)
478         zinfo(2)=FLOAT(it0)
479         zinfo(3)=FLOAT(iarak0)
480
481         !! 1. WRITE in nutwrs
482         !! ------------------
483         !!... first information
484
485         INQUIRE (FILE=trestart,EXIST=clbon)
486         IF(clbon) THEN
487            OPEN(UNIT=nutwrs,FILE=trestart,STATUS='old')
488            CLOSE(nutwrs,STATUS='delete')
489         ENDIF
490
491         ic=1
492         DO jc=1,16
493            IF(cexper(jc:jc) /= ' ') ic = jc
494         END DO
495         WRITE(cln,'("_",i4.4,i2.2,i2.2,"_restart.trc")') nyear, nmonth, nday
496         clname=cexper(1:ic)//cln
497         ic=1
498         DO jc=1,48
499            IF(clname(jc:jc) /= ' ') ic=jc
500         END DO
501         trestart=clname(1:ic)//".nc"
502         itime=0
503         CALL ymds2ju(nyear,nmonth,nday,0.0,zdate0)
504         CALL restini('NONE',jpi,jpj,glamt,gphit,jpk,gdept_0,clname           &
505            &        ,itime,zdate0,rdt*nstock,nutwrs,domain_id=nidom)
506
507         CALL restput(nutwrs,'info',1,1,3,0,zinfo)
508
509         ! prognostic variables
510         ! --------------------
511
512         IF (lwp) WRITE(numout,*) '----TRACER STAT----'
513         zdiag_tot=0.
514         DO jn=1,jptra
515            clname='TRN'//ctrcnm(jn)
516            CALL restput(nutwrs,clname,jpi,jpj,jpk,0,trn(:,:,:,jn))
517
518            zdiag_var=0.
519            zdiag_varmin=0.
520            zdiag_varmax=0.
521
522            DO ji=1, jpi
523               DO jj=1, jpj
524                  DO jk=1,jpk
525                    zdiag_var=zdiag_var+tmask(ji,jj,jk)*trn(ji,jj,jk,jn)*     &
526                               tmask_i(ji,jj)* e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
527
528                  END DO
529               END DO
530            END DO
531
532            zdiag_varmin=MINVAL(trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)))
533            zdiag_varmax=MAXVAL(trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)))
534
535            IF( lk_mpp ) THEN
536               CALL mpp_min(zdiag_varmin)      ! min over the global domain 
537               CALL mpp_max(zdiag_varmax)      ! max over the global domain 
538               CALL mpp_sum(zdiag_var)         ! sum over the global domain 
539            END IF
540
541            zdiag_tot=zdiag_tot+zdiag_var
542            zdiag_var=zdiag_var/areatot
543
544            IF (lwp) WRITE(numout,*) 'MEAN NO ',jn,ctrcnm(jn),' =',zdiag_var,'MIN= '  &
545               ,zdiag_varmin,'MAX= ',zdiag_varmax
546
547         END DO
548
549         zdiag_tot=zdiag_tot
550         zder=((zdiag_tot-trai)/trai)*100._wp
551         IF (lwp) WRITE(numout,*) 'Integral of all tracers over the full domain  =',zdiag_tot 
552         IF (lwp) WRITE(numout,*) 'Drift of the sum of all tracers =',zder, '%' 
553
554         DO jn=1,jptra
555            clname='TRB'//ctrcnm(jn)
556            CALL restput(nutwrs,clname,jpi,jpj,jpk,0,trb(:,:,:,jn))
557         END DO
558
559#if defined key_trc_lobster1
560         clname='SEDB'//ctrcnm(jpdet)
561         clname1='SEDN'//ctrcnm(jpdet)
562         CALL restput(nutwrs,clname,jpi,jpj,1,0,sedpocb(:,:))
563         CALL restput(nutwrs,clname1,jpi,jpj,1,0,sedpocn(:,:))
564#elif defined key_trc_pisces
565         clname='SED'//ctrcnm(jppoc)
566         clname1='SED'//ctrcnm(jpcal)
567         clname2='SED'//ctrcnm(jpsil)
568         CALL restput(nutwrs,clname1,jpi,jpj,1,0,sedcal(:,:))
569         CALL restput(nutwrs,clname2,jpi,jpj,1,0,sedsil(:,:))
570         CALL restput(nutwrs,clname,jpi,jpj,1,0,sedpoc(:,:))
571
572         clname='Silicalim'
573         CALL restput(nutwrs,clname,jpi,jpj,1,0,xksi(:,:))
574#elif defined key_cfc
575         clname='qint'
576         CALL restput(nutwrs,clname,jpi,jpj,jptra,0,qint(:,:,:))
577         clname1='qtr'
578         CALL restput(nutwrs,clname1,jpi,jpj,jptra,0,qtr(:,:,:))
579#endif
580
581
582         CALL restclo(nutwrs)
583
584      ENDIF
585
586   END SUBROUTINE trc_wri
587
588#endif
589
590#else
591   !!======================================================================
592   !!  Empty module : No passive tracer
593   !!======================================================================
594CONTAINS
595
596   SUBROUTINE trc_rst
597      !! no passive tracers
598   END SUBROUTINE trc_rst
599
600   SUBROUTINE trc_wri(kt)
601      !! no passive tracers
602      INTEGER, INTENT ( in ) :: kt
603      WRITE(*,*) 'trc_wri: You should not have seen this print! error?', kt
604   END SUBROUTINE trc_wri
605   
606#endif
607   
608END MODULE trcrst
Note: See TracBrowser for help on using the repository browser.