source: tags/libIGCM_v2.5/AA_job @ 1456

Last change on this file since 1456 was 1149, checked in by sdipsl, 9 years ago

adressing #236

  • Property licence set to
    The following licence information concerns ONLY the libIGCM tools
    ==================================================================

    Copyright © Centre National de la Recherche Scientifique CNRS
    Commissariat à l'Énergie Atomique CEA

    libIGCM : Library for Portable Models Computation of IGCM Group.

    IGCM Group is the french IPSL Global Climate Model Group.

    This library is a set of shell scripts and functions whose purpose is
    the management of the initialization, the launch, the transfer of
    output files, the post-processing and the monitoring of datas produce
    by any numerical program on any plateforme.

    This software is governed by the CeCILL license under French law and
    abiding by the rules of distribution of free software. You can use,
    modify and/ or redistribute the software under the terms of the CeCILL
    license as circulated by CEA, CNRS and INRIA at the following URL
    "http://www.cecill.info".

    As a counterpart to the access to the source code and rights to copy,
    modify and redistribute granted by the license, users are provided only
    with a limited warranty and the software's author, the holder of the
    economic rights, and the successive licensors have only limited
    liability.

    In this respect, the user's attention is drawn to the risks associated
    with loading, using, modifying and/or developing or reproducing the
    software by the user in light of its specific status of free software,
    that may mean that it is complicated to manipulate, and that also
    therefore means that it is reserved for developers and experienced
    professionals having in-depth computer knowledge. Users are therefore
    encouraged to load and test the software's suitability as regards their
    requirements in conditions enabling the security of their systems and/or
    data to be ensured and, more generally, to use and operate it in the
    same conditions as regards security.

    The fact that you are presently reading this means that you have had
    knowledge of the CeCILL license and that you accept its terms.
  • Property svn:keywords set to Revision Author Date
File size: 20.4 KB
Line 
1#-Q- curie #!/bin/ksh
2#-Q- curie ######################
3#-Q- curie ## CURIE   TGCC/CEA ##
4#-Q- curie ######################
5#-Q- curie #MSUB -r ::Jobname::        # Job Name
6#-Q- curie #MSUB -o Script_Output_::Jobname::.000001    # standard output
7#-Q- curie #MSUB -e Script_Output_::Jobname::.000001    # error output
8#-Q- curie #MSUB -eo
9#-Q- curie #MSUB -n ::JobNumProcTot::  # Number of MPI tasks (SPMD case) or cores (MPMD case)
10#-Q- curie #MSUB -T 86400              # Wall clock limit (seconds)
11#-Q- curie #MSUB -q standard           # thin nodes
12#-Q- curie #MSUB -A ::default_project::
13#-Q- curie
14#-Q- curie # Below specific options that can be activated
15#-Q- curie ##MSUB -q ivybridge         # Option for Airain
16#-Q- curie ##MSUB -N 8                 # Number of nodes (16 cores per node)
17#-Q- curie ##MSUB -c 8                 # Number of openMP threads. To specify only for SMPD
18#-Q- curie ##MSUB -x                   # exclusive node. To specify only for MPMD together with the one below
19#-Q- curie ##MSUB -E '--cpu_bind=none'
20#-Q- curie
21#-Q- curie BATCH_NUM_PROC_TOT=$BRIDGE_MSUB_NPROC
22#-Q- curie set +x
23#-Q- ada #!/bin/ksh
24#-Q- ada # ######################
25#-Q- ada # ##  ADA       IDRIS ##
26#-Q- ada # ######################
27#-Q- ada # Job name
28#-Q- ada # @ job_name = ::Jobname::
29#-Q- ada # Job type
30#-Q- ada # @ job_type = parallel
31#-Q- ada # Standard output file name
32#-Q- ada # @ output = Script_Output_::Jobname::.000001
33#-Q- ada # Error output file name
34#-Q- ada # @ error = Script_Output_::Jobname::.000001
35#-Q- ada # Total number of tasks
36#-Q- ada # @ total_tasks = ::JobNumProcTot::
37#-Q- ada # @ environment = "BATCH_NUM_PROC_TOT=::JobNumProcTot::"
38#-Q- ada # Maximum CPU time per task hh:mm:ss
39#-Q- ada # @ wall_clock_limit = 1:00:00
40#-Q- ada # Specific option for OpenMP parallelization: Number of OpenMP threads per MPI task
41#-Q- ada ### @ parallel_threads = 4
42#-Q- ada # End of the header options
43#-Q- ada # @ queue
44#-Q- lxiv8 ######################
45#-Q- lxiv8 ## OBELIX      LSCE ##
46#-Q- lxiv8 ######################
47#-Q- lxiv8 #PBS -N ::Jobname::
48#-Q- lxiv8 #PBS -m a
49#-Q- lxiv8 #PBS -j oe
50#-Q- lxiv8 #PBS -q mediump
51#-Q- lxiv8 #PBS -o Script_Output_::Jobname::.000001
52#-Q- lxiv8 #PBS -S /bin/ksh
53#-Q- lxiv8 #PBS -v BATCH_NUM_PROC_TOT=::JobNumProcTot::
54#-Q- lxiv8 #PBS -l nodes=1:ppn=::JobNumProcTot::
55#-Q- default #!/bin/ksh
56#-Q- default ##################
57#-Q- default ## DEFAULT HOST ##
58#-Q- default ##################
59#-Q- default #For MPI use, uncomment next line :
60#-Q- default #BATCH_NUM_PROC_TOT=::JobNumProcTot::
61
62#**************************************************************
63# Author: Sebastien Denvil
64# Contact: Sebastien.Denvil__at__ipsl.jussieu.fr
65# $Revision::                                          $ Revision of last commit
66# $Author::                                            $ Author of last commit
67# $Date::                                              $ Date of last commit
68# IPSL (2006)
69#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
70#
71#**************************************************************
72
73#set -eu
74#set -vx
75
76date
77echo
78echo "#######################################"
79echo "#       ANOTHER GREAT SIMULATION      #"
80echo "#######################################"
81echo
82
83#D--------------------------------------------------------------------==
84#D-
85#D-                      Job to launch IGCM models
86#D-
87#D--------------------------------------------------------------------==
88#D-
89
90MODIPSL=::modipsl::
91libIGCM=${MODIPSL}/libIGCM
92
93#D--------------------------------------------------------------------==
94#D- -1. PLACE FOR USER MODIFICATION
95#D-     - Job Verbosity
96#D-     - PeriodNb
97#D-     - Experience type : DEB(ug), DEV(elopment), RUN
98#D--------------------------------------------------------------------==
99
100#D- Task type (computing or post-processing)
101TaskType=computing
102#D- Increased verbosity (1, 2, 3)
103Verbosity=3
104#D- Experience type : DEB(ug), DEV(elopment), RUN (default)
105JobType=RUN
106#D- Number of execution in one job
107PeriodNb=1
108#-Q- sx9mercure PeriodNb=60
109
110#D-
111#D- --------------------------------------------------------------------------------------------------#
112#D-                          ! OPTIONNAL FEATURES /!\ USE WITH CARE !                                 #
113#D- --------------------------------------------------------------------------------------------------#
114
115
116#D- Low level debug : to perform lib test checks, stack construction and IO functions instrumentation
117#D- Default=true
118#D-
119DEBUG_debug=true
120
121#D- Messaging : all activities and call stacks will be sent to ipsl servers
122#D- If true will imply DEBUG_debug=true
123#D- Default=false
124#D-
125BigBrother=true
126
127#D- Set DEBUG_sys to false to disable output calls of function
128#D- true when JobType=DEB # means DEB(ug)
129#D-
130#DEBUG_sys=false
131
132#D- Define running directory
133#D- Default=${TMPDIR} ie temporary batch directory
134#D-
135#RUN_DIR_PATH=/workdir/or/scratchdir/of/this/machine
136
137#D- Define submit directory
138#D- Default= where you launch qsub (variable from scheduler)
139#D-
140#SUBMIT_DIR=$( pwd )
141
142#D- Define input file root directory
143#D- Default=/IGCMG/common/account/of/this/machine
144#D-
145#R_IN=/u/rech/por/rpor111/DATA
146
147#D- Turn in dry run mode ? (0,1,2,3)
148#D- Default=0
149#D-
150#DRYRUN=3
151#D-# YOU HAVE TO COMPILE YOUR EXE FILES to USE DRYRUN MODE !
152#D-# -------------------------------------------------------------------------------------
153#D-# | DRYRUN=  |  Date computations, | sys_Get    |  Exe    | sys_Put_Out; sys_Put_Rest |
154#D-# |          |  Cp/Exe/param/files |            |         |                           |
155#D-# |          |  Chmod Qsub         |            |         |                           |
156#D-# -------------------------------------------------------------------------------------
157#D-# |    0     |       yes           |    yes     |  yes    |      yes                  |
158#D-# -------------------------------------------------------------------------------------
159#D-# |    1     |       yes           |    yes     |  yes    |      no                   |
160#D-# -------------------------------------------------------------------------------------
161#D-# |    2     |       yes           |    yes     |  no     |      no                   |
162#D-# -------------------------------------------------------------------------------------
163#D-# |    3     |       yes           |    no      |  no     |      no                   |
164#D-# -------------------------------------------------------------------------------------
165
166#D-
167# --------------------------------------------------------------------------------------------------#
168#D- ! END OF OPTIONNAL FEATURES /!\ DO NOT MODIFY ANYTHING BELOW UNLESS YOU KNOW WHAT YOU ARE DOING #
169# --------------------------------------------------------------------------------------------------#
170
171#D-
172#D--------------------------------------------------------------------==
173#D- 0.0 SYSTEM ENVIRONMENT
174#D-     - Define variables for Number of processors
175#D-     - Define MPI variables
176#D-     - Define batch scheduler variables
177#D-     - Source IGCM Library
178#D-     - Get RESOLution in .resol file (temporary)
179#D--------------------------------------------------------------------==
180
181#---------------------------------------------------------------------==
182
183. ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
184. ${libIGCM}/libIGCM_card/libIGCM_card.ksh
185. ${libIGCM}/libIGCM_date/libIGCM_date.ksh
186#-------
187. ${libIGCM}/libIGCM_sys/libIGCM_sys.ksh
188. ${libIGCM}/libIGCM_config/libIGCM_config.ksh
189. ${libIGCM}/libIGCM_comp/libIGCM_comp.ksh
190. ${libIGCM}/libIGCM_post/libIGCM_post.ksh
191#-------
192( ${DEBUG_debug} ) && IGCM_debug_Check
193( ${DEBUG_debug} ) && IGCM_card_Check
194( ${DEBUG_debug} ) && IGCM_date_Check
195
196#--------------------------------------------------------------------==
197
198#-- Resolution FLAG for oasis input
199#RESOL="ORCA2xLMD9671"
200[ -f ${SUBMIT_DIR}/../.resol ] && RESOL=$(head -1 ${SUBMIT_DIR}/../.resol)
201#-- Chemistrie FLAG to ease chemistries configurations management
202#CHEM="AER"
203[ -f ${SUBMIT_DIR}/../.chimie ] && eval $(grep CHEM ${SUBMIT_DIR}/../.chimie)
204
205#D-
206#D--------------------------------------------------------------------==
207#D- 0.1 COMMON ENVIRONMENT
208#D-     - Read libIGCM compatibility version in config.card
209#D-     - Read UserChoices section
210#D-     - Read Ensemble section
211#D-     - Read Post section
212#D-     - Define all netcdf output directories
213#D--------------------------------------------------------------------==
214IGCM_config_CommonConfiguration ${SUBMIT_DIR}/config.card
215
216if [ ! -r ${SUBMIT_DIR}/run.card ] ; then
217  #================================================#
218  #         The file run.card doesn't exist        #
219  #================================================#
220  FirstInitialize=true
221  #copy initial run.card
222  IGCM_sys_Cp ${SUBMIT_DIR}/run.card.init ${SUBMIT_DIR}/run.card
223  IGCM_debug_Print 2 "run.card copied from run.card.init"
224else
225  FirstInitialize=false
226  IGCM_debug_Print 2 "run.card exists"
227fi
228
229# ------------------------------------------------------------------
230# Activate BigBrother so as to supervise this simulation
231# ------------------------------------------------------------------
232IGCM_debug_ActivateBigBro
233
234#D-
235#D--------------------------------------------------------------------==
236#D- 1. INITIALIZE CONFIGURATION
237#D-    - Simulation configuration
238#D-    - Simulation parameters
239#D-    - Execution parameter
240#D-    - Define input files directory
241#D-    - Read or initialize CumulPeriod
242#D-    - run.card
243#D--------------------------------------------------------------------==
244IGCM_config_Initialize
245
246# --------------------------------------------------------------------==
247# Define, create and cd RUN_DIR
248# --------------------------------------------------------------------==
249RUN_DIR=${RUN_DIR_PATH}/${config_UserChoices_JobName}.${$}
250IGCM_sys_MkdirWork ${RUN_DIR}
251IGCM_sys_Cd ${RUN_DIR}
252
253# ------------------------------------------------------------------
254# Test if all was right before proceeding further
255# ------------------------------------------------------------------
256IGCM_debug_Verif_Exit
257
258#D-
259#D---------------------------------------------------------------------==
260#D- 2. INITIALIZE ALL COMPONENT OF THE CONFIGURATION
261#D-    - Define component executable
262#D-    - Define Write Frequency by component "1M" "1D" ...
263#D-    - Source ${comp}.driver
264#D-    - Define Storage Places by component
265#D-    - ${comp}_Initialize :
266#D-    - Patterns to sed
267#D-    - Variables from namelist
268#D---------------------------------------------------------------------==
269IGCM_comp_Initialize
270
271#D-
272#D---------------------------------------------------------------------==
273#D- 3. PERFORM GENERAL VERIFICATION
274#D-    - Verify compatibility of period length, write frequencies, ...
275#D-    - Verify compatibility of rebuild choices and post-process choices
276#D-    - Will stop here if something is wrong
277#D---------------------------------------------------------------------==
278IGCM_config_Check
279
280# ------------------------------------------------------------------
281# Test if all was right before entering the period loop
282# ------------------------------------------------------------------
283IGCM_debug_Verif_Exit
284
285#D-
286#D---------------------------------------------------------------------==
287#D- 4. ENTER THE DEEP EXECUTION LOOP
288#D-    ! FASTEN YOUR SEAT BELTS PLEASE. !
289#D-    !   WE WILL CROSS TURBULENCES.   !
290#D---------------------------------------------------------------------==
291
292Period=1
293
294PeriodContinue=false
295if [ ${Period} -le ${PeriodNb} ]; then
296  PeriodContinue=true
297fi
298while ( ${PeriodContinue} ) ; do
299
300  echo
301  echo "Starting iteration ${Period} / ${PeriodNb}"
302
303  #D-
304  # ------------------------------------------------------------------
305  #D-   4.1 COMPUTE AND DEFINE DATE INFORMATION.
306  #D-       - ${PeriodDateBegin}
307  #D-       - ${PeriodDateEnd}
308  #D-       - ${CumulPeriod}
309  #D-       - ${DatesPeriod}=${PeriodDateBegin}_${PeriodDateEnd}
310  #D-       - ${PeriodLength} => JOURS=31 , 28, 29, 30 ; MOIS=0 ; ANS=0
311  #D-       - update run.card value
312  # ------------------------------------------------------------------
313  IGCM_config_PeriodStart
314
315  #D-
316  # ------------------------------------------------------------------
317  #D-   4.2 BEGIN COMPUTATION ONLY IF NEEDED
318  # ------------------------------------------------------------------
319  if [ ${SimulationLengthInDays} -gt ${ExperienceLengthInDays} ] ; then
320    IGCM_debug_Print 1 "break because '${SimulationLengthInDays} -gt ${ExperienceLengthInDays}' : ${SimulationLengthInDays} -gt ${ExperienceLengthInDays}"
321    break ;
322  fi
323
324  #D-
325  # ------------------------------------------------------------------
326  #D-   4.3 CALL OPTIONNAL FUNCTION WITHIN DRIVER
327  #D-       - to set special variables used in lists (Param, Init or Bc).
328  # ------------------------------------------------------------------
329  IGCM_comp_PeriodStart
330
331  #D-
332  # ------------------------------------------------------------------
333  #D-   4.4 GET PARAMETERS TEXT FILES UPDATED BY JOB
334  #D-       - (.def, namelist ...)
335  #D-       - READ AND USE BY GCM AT EACH EXECUTION.
336  # ------------------------------------------------------------------
337  IGCM_comp_GetInputParametersFiles
338
339  #D-
340  # ------------------------------------------------------------------
341  #D-   4.5 GET INITIAL STATE
342  #D-       - (Etat0, carteveg,relief...)
343  #D-       - NECESSARY ONLY IF CumulPeriod= (=> NUMERO) == 1
344  #D-       - AND ???_Restart=NO
345  #D-       - READ AND USE BY GCM FOR ONLY ONE EXECUTION.
346  # ------------------------------------------------------------------
347  IGCM_comp_GetInputInitialStateFiles
348
349  #D-
350  # ------------------------------------------------------------------
351  #D-   4.6 GET BOUNDARIES CONDITIONS
352  #D-       - (SST, WIND[X,Y,Z], LAI ...)
353  #D-       - READ AND USE BY GCM AT EACH EXECUTION.
354  # ------------------------------------------------------------------
355  IGCM_comp_GetInputBoundaryFiles
356
357  #D-
358  # ------------------------------------------------------------------
359  #D-   4.7 GET SmoothFiles CONDITIONS
360  #D-       - (SST, WIND[X,Y,Z], LAI ...)
361  #D-       - READ AND USE BY GCM AT EACH EXECUTION
362  #D-       - Do not change at each ${Period}
363  # ------------------------------------------------------------------
364  IGCM_comp_GetInputSmoothFiles
365
366  #D-
367  # ------------------------------------------------------------------
368  #D-   4.8 GET RESTART FILES
369  #D-       - (restartphy.nc, orca_restart.nc ...)
370  #D-       - READ AND USE BY GCM AT EACH EXECUTION.
371  #D-
372  #D-       - IF A COMPONENT DO NOT RESTART FROM PREVIOULSY COMPUTED RESTART
373  #D-       - ONLY IF CumulPeriod= (=> NUMERO) == 1
374  #D-       - MUST EXECUTE CREATE ETAT0_LIMIT (TYPICALLY LMDZ AND ./create_etat0_limit.e)
375  #D-
376  #D-       - IF CumulPeriod == 1
377  #D-       - AND A COMPONENT RESTART FROM PREVIOULSY COMPUTED RESTART
378  #D-       - MUST BRING THIS RESTART IN ${RUN_DIR_PATH}
379  #D-
380  #D-       - ELSE BRING RESTART FROM ${JobName} IN ${RUN_DIR_PATH}
381  # ------------------------------------------------------------------
382  IGCM_comp_GetInputRestartFiles
383
384  # ------------------------------------------------------------------
385  # Test if all was right before Update
386  # ------------------------------------------------------------------
387  IGCM_debug_Verif_Exit
388
389  #D-
390  # ------------------------------------------------------------------
391  #D-   4.9 ACTIVATE RUNNING ENVIRONNEMENT VARIABLES
392  # ------------------------------------------------------------------
393  IGCM_sys_activ_variables
394
395  #D-
396  # ------------------------------------------------------------------
397  #D-   4.10 UPDATE ParametersFiles
398  #D-        - (.def, namelist ...)
399  #D-        - with current value of (ORCA_NIT00, ORCA_LRSTAR, RAZ_DATE, ...)
400  # ------------------------------------------------------------------
401  IGCM_comp_Update
402
403  # ------------------------------------------------------------------
404  # Test if all was right before execution
405  # ------------------------------------------------------------------
406  IGCM_debug_Verif_Exit
407
408  #D-
409  #D---------------------------------------------------------------------==
410  #D- 5. EXECUTION
411  #D---------------------------------------------------------------------==
412
413  echo
414  echo "#######################################"
415  echo "#      DIR BEFORE RUN EXECUTION       #"
416  echo "#######################################"
417  echo
418  ls -lrt
419
420  echo "========================================================================"
421  if [ ${DRYRUN} -le 1 ] ; then
422    REAL_DATE_INIT=$( date )
423    echo                                                                                   > ${Exe_Output}
424    echo "#######################################"                                        >> ${Exe_Output}
425    echo "EXECUTION of : ${EXECUTION}"
426    echo "EXECUTION of : ${EXECUTION}"                                                    >> ${Exe_Output}
427    echo                                                                                  >> ${Exe_Output}
428    typeset RET
429    RUN_DATE_BEGIN=$( date '+%Y-%m-%dT%H:%M:%S' )
430    ${EXECUTION}  >> ${Exe_Output} 2>&1
431    RET=$?
432    RUN_DATE_END=$( date '+%Y-%m-%dT%H:%M:%S' )
433    if [ ${RET} -gt 0 ] ; then
434      echo "Return code of executable :" ${RET}
435      IGCM_debug_Exit "EXECUTABLE"
436      IGCM_sys_Mkdir ${SUBMIT_DIR}/Debug
437      IGCM_sys_Cp ${Exe_Output} ${SUBMIT_DIR}/Debug/${PREFIX}_${Exe_Output}_error
438      ExecutionFail=true
439    fi
440    echo                                            >> ${Exe_Output}
441    echo "#######################################"  >> ${Exe_Output}
442    echo "libIGCM RunDateBegin=${RUN_DATE_BEGIN}"   >> ${Exe_Output}
443    echo "libIGCM RunDateEnd=${RUN_DATE_END}"       >> ${Exe_Output}
444    echo                                            >> ${Exe_Output}
445  else
446    echo "EXECUTION of : ${EXECUTION} simulated for DRYRUN = " $DRYRUN
447    echo "EXECUTION of : ${EXECUTION} simulated for DRYRUN = " $DRYRUN > ${Exe_Output}
448    if ( $DEBUG_debug ) ; then
449      echo "FOR EXECUTION DRYRUN mode = " $DRYRUN >> stack
450    fi
451  fi
452  echo "========================================================================"
453
454  echo
455  echo "#######################################"
456  echo "#       DIR AFTER RUN EXECUTION       #"
457  echo "#######################################"
458  echo
459  ls -lrt
460
461  #D-
462  #D---------------------------------------------------------------------==
463  #D- 6. POST EXECUTION OPERATIONS
464  #D---------------------------------------------------------------------==
465
466  #D-
467  # ------------------------------------------------------------------
468  #D-   6.1. DESACTIVATE RUNNING ENVIRONNEMENT VARIABLES
469  # ------------------------------------------------------------------
470  IGCM_sys_desactiv_variables
471
472  #D-
473  # ------------------------------------------------------------------
474  #D-   6.2. SAVE OUTPUTS
475  #D-        - On archive/storage machine
476  #D-        - netcdf outputs, restarts and text files of models
477  # ------------------------------------------------------------------
478  IGCM_comp_Finalize
479
480  # ------------------------------------------------------------------
481  # Test if all was right after Finalize
482  # ------------------------------------------------------------------
483  IGCM_debug_Verif_Exit
484
485  #D-
486  # ------------------------------------------------------------------
487  #D-   6.3. CONFIGURE POST-PROCESSING
488  #D-        - asynchronous post-treatment (Level 0) when necessary (rebuild/pack)
489  #D-        - classic post-treatment      (Level 1) when necessary (TimeSeries/Seasonal)
490  # ------------------------------------------------------------------
491  IGCM_post_Configure
492
493  #D-
494  # ------------------------------------------------------------------
495  #D-   6.4. SUBMIT POST-PROCESSING
496  #D-        - remote rebuild or/and post-treatment process if necessary
497  # ------------------------------------------------------------------
498  IGCM_post_Submit
499
500  #D-
501  # ------------------------------------------------------------------
502  #D-   6.5. FINALYZE CURRENT LOOP AND PREPARE NEXT ONE
503  #D-        - Manage executable size to save only different binary
504  #D-        - Write in run.card user, system and elapse time
505  #D-        - Check that everything went well ! No ? then we stop.
506  #D-        - Determine next computed period
507  # ------------------------------------------------------------------
508  IGCM_config_PeriodEnd
509
510  echo "Ending iteration ${Period}"
511  (( Period = Period + 1 ))
512
513  # End loop if date end is reached
514  if [ ${SimulationLengthInDays} -ge ${ExperienceLengthInDays} ] ; then
515    break ;
516  fi
517
518  PeriodContinue=false
519  if [ ${Period} -le ${PeriodNb} ]; then
520    PeriodContinue=true
521  fi
522done
523
524#D-
525#D---------------------------------------------------------------------==
526#D- 7. SUBMIT NEXT JOB OR SEND MAIL IF SIMULATION IS OVER.
527#D---------------------------------------------------------------------==
528IGCM_config_Finalize
529
530date
Note: See TracBrowser for help on using the repository browser.