source: trunk/libIGCM/AA_job @ 120

Last change on this file since 120 was 120, checked in by mmaipsl, 15 years ago

Change main loop syntaxe to be abble to change PeriodNb? with libIGCM.card

  • 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 Date Author Revision
File size: 17.4 KB
Line 
1#-Q- platine #!/usr/bin/ksh
2#-Q- platine ##################
3#-Q- platine ## PLATINE   CEA ##
4#-Q- platine ##################
5#-Q- platine #BSUB -J ::Jobname::       # nom de la requete
6#-Q- platine #BSUB -N                   # message a la fin du job
7#-Q- platine #BSUB -o Script_Output_::Jobname::.000001    # nom du fichier de sortie
8#-Q- platine #BSUB -n ::JobNumProcTot::             # reservation des processeurs pour le job
9#-Q- platine #BSUB -W 1:00           # Limite temps
10#-Q- platine BATCH_NUM_PROC_TOT=$SLURM_NPROCS
11#-Q- sx8brodie #######################
12#-Q- sx8brodie ## SX8BRODIE   IDRIS ##
13#-Q- sx8brodie #######################
14#-Q- sx8brodie #PBS -N ::Jobname::         # nom de la requete
15#-Q- sx8brodie #PBS -m a                   # message a la fin du job
16#-Q- sx8brodie #PBS -j o                   # regroupement des sorties du job : standard error et output
17#-Q- sx8brodie #PBS -o Script_Output_::Jobname::.000001  # nom du fichier de sortie
18#-Q- sx8brodie #PBS -S /usr/bin/ksh        # shell de soumission
19#-Q- sx8brodie #PBS -v BATCH_NUM_PROC_TOT=::JobNumProcTot::
20#-Q- sx8brodie #PBS -q ::JobClass::                # classe multi pour BATCH_NUM_PROC_TOT superieur a 2, mono sinon
21#-Q- sx8brodie #PBS -l cpunum_job=${BATCH_NUM_PROC_TOT}  # reservation des processeurs pour le job
22#-Q- sx8brodie #PBS -l memsz_job=8.0gb     # Limite memoire
23#-Q- sx8brodie #PBS -l cputim_job=1:00:00  # Limite temps
24#-Q- aix6 #!/usr/bin/ksh
25#-Q- aix6 # ######################
26#-Q- aix6 # ##   VARGAS IDRIS   ##
27#-Q- aix6 # ######################
28#-Q- aix6 # Nom de la requete
29#-Q- aix6 # @ job_name = ::Jobname::
30#-Q- aix6 # Type de travail
31#-Q- aix6 # @ job_type = parallel
32#-Q- aix6 # Fichier de sortie standard
33#-Q- aix6 # @ output = $(job_name).$(jobid)
34#-Q- aix6 # Fichier de sortie erreur (le meme)
35#-Q- aix6 # @ error =  $(job_name).$(jobid)
36#-Q- aix6 # Nombre de processus demandes
37#-Q- aix6 # @ total_tasks = ::JobNumProcTot::
38#-Q- aix6 # @ environment = "BATCH_NUM_PROC_TOT=::JobNumProcTot::"
39#-Q- aix6 # Temps CPU max. par processus MPI hh:mm:ss
40#-Q- aix6 # @ wall_clock_limit = 1:00:00
41#-Q- aix6 # Memoire max. utilisee par processus
42#-Q- aix6 # @ data_limit = 3.2gb
43#-Q- aix6 # Memoire stack demandee
44#-Q- aix6 # @ stack_limit = 0.3gb,0.3gb
45#-Q- aix6 # Pas d OpenMP
46#-Q- aix6 # @ resources = ConsumableCpus(1)
47#-Q- aix6 # Fin de l entete
48#-Q- aix6 # @ queue
49#-Q- sx8mercure #!/bin/ksh
50#-Q- sx8mercure ######################
51#-Q- sx8mercure ## SX8MERCURE   CEA ##
52#-Q- sx8mercure ######################
53#-Q- sx8mercure #PBS -N ::Jobname::           # nom de la requete
54#-Q- sx8mercure #PBS -m a                     # message a la fin du job
55#-Q- sx8mercure #PBS -j o                     # regroupement des sorties du job : standard error et output
56#-Q- sx8mercure #PBS -o Script_Output_::Jobname::.000001   # nom du fichier de sortie
57#-Q- sx8mercure #PBS -S /usr/bin/ksh          # shell de soumission
58#-Q- sx8mercure #PBS -v BATCH_NUM_PROC_TOT=::JobNumProcTot::
59#-Q- sx8mercure #PBS -l cpunum_job=${BATCH_NUM_PROC_TOT}          # reservation des processeurs pour le job
60#-Q- sx8mercure #PBS -l memsz_job=8.0gb       # limite memoire
61#-Q- sx8mercure #PBS -l elapstim_req=01:00:00 # limite en temps elapsed
62#-Q- default #!/bin/ksh
63#-Q- default ##################
64#-Q- default ## DEFAULT HOST ##
65#-Q- default ##################
66#-Q- default #For MPI use, uncomment next line :
67#-Q- default #BATCH_NUM_PROC_TOT=::JobNumProcTot::
68
69# $Date$
70# $Author$
71# $Revision$
72# IPSL (2006)
73#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
74
75#set -eu
76#set -vx
77
78date
79echo
80echo "#######################################"
81echo "#       ANOTHER GREAT SIMULATION      #"
82echo "#######################################"
83echo
84
85#D--------------------------------------------------------------------==
86#D--------------------------------------------------------------------==
87#D-
88#D-                      Job to launch IGCM models
89#D-
90#D--------------------------------------------------------------------==
91#D--------------------------------------------------------------------==
92#D-
93
94MODIPSL=::modipsl::
95libIGCM=${MODIPSL}/libIGCM
96
97#D--------------------------------------------------------------------==
98#D-                   -1. User modification place
99#D-                      - Job Verbosity
100#D-                      - PeriodNb
101#D--------------------------------------------------------------------==
102
103#D- Increased verbosity (1, 2, 3)
104Verbosity=3
105#D- Number of execution in one job
106PeriodNb=1
107
108#D-
109# --------------------------------------------------------------------
110#D- ! Optionnal features /!\ Use with care !
111# --------------------------------------------------------------------
112
113#D- Low level debug : to bypass lib test checks and stack construction
114#D- Default=true
115DEBUG_debug=false
116
117#D- Set DEBUG_sys to false to disable output calls of function
118#D- Default=true
119#DEBUG_sys=false
120
121#D- Define running directory
122#D- Default=${TMPDIR} ie temporary batch directory
123#RUN_DIR_PATH=/workdir/of/this/machine
124
125#D- Define submit directory
126#D- Default= where you launch qsub (variable from scheduler)
127#SUBMIT_DIR=$( pwd )
128
129#D- Turn in dry run mode ? (0,1,2,3)
130#D- Default=0
131#DRYRUN=3
132# YOU MUST COMPILE YOUR EXE FILES FOR DRYRUN MODE !
133# -------------------------------------------------------------------------------------
134# | DRYRUN=  |  Date computations, | sys_Get    |  Exe    | sys_Put_Out; sys_Put_Rest |
135# |          |  Cp/Exe param files |            |  Chmod  |                           |
136# |          |      Qsub           |            |         |                           |
137# -------------------------------------------------------------------------------------
138# |    0     |       yes           |    yes     |  yes    |      yes                  |
139# -------------------------------------------------------------------------------------
140# |    1     |       yes           |    yes     |  yes    |      no                   |
141# -------------------------------------------------------------------------------------
142# |    2     |       yes           |    yes     |  no     |      no                   |
143# -------------------------------------------------------------------------------------
144# |    3     |       yes           |    no      |  no     |      no                   |
145# -------------------------------------------------------------------------------------
146
147#D- Define input file root directory
148#D- Default=/IGCMG/common/account/of/this/machine
149#R_IN=/u/rech/por/rpor111/DATA
150
151#D-
152#D--------------------------------------------------------------------==
153#D-                   0. System Environment
154#D-                      - Define variables for Number of processors
155#D-                      - Define MPI variables
156#D-                      - Define batch scheduler variables
157#D-                      - Source IGCM Library
158#D-                      - Get RESOLution in .resol file (temporary)
159#D--------------------------------------------------------------------==
160
161#D--------------------------------------------------------------------==
162
163. ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
164       ( ${DEBUG_debug} ) && IGCM_debug_Check
165. ${libIGCM}/libIGCM_card/libIGCM_card.ksh
166       ( ${DEBUG_debug} ) && IGCM_card_Check
167. ${libIGCM}/libIGCM_date/libIGCM_date.ksh
168       ( ${DEBUG_debug} ) && IGCM_date_Check
169#-------
170. ${libIGCM}/libIGCM_sys/libIGCM_sys.ksh
171. ${libIGCM}/libIGCM_config/libIGCM_config.ksh
172. ${libIGCM}/libIGCM_comp/libIGCM_comp.ksh
173. ${libIGCM}/libIGCM_post/libIGCM_post.ksh
174
175#D--------------------------------------------------------------------==
176
177#-- Resolution FLAG for oasis input
178[ -f ${SUBMIT_DIR}/../.resol ] && RESOL=$(cat ${SUBMIT_DIR}/../.resol)
179#RESOL="ORCA2xLMD9671"
180
181#D-
182#D--------------------------------------------------------------------==
183#D-           1. INITIALIZE CONFIGURATION AND THEN COMPONENTS
184#D--------------------------------------------------------------------==
185
186# --------------------------------------------------------------------==
187#D- Initialize configuration :
188#D-              - Simulation configuration
189#D-              - Simulation parameters
190#D-              - Execution parameter
191#D-              - Define input files directory
192#D-              - Read or initialize CumulPeriod
193#D-              - run.card
194#D-
195# --------------------------------------------------------------------==
196IGCM_config_Initialize
197
198# --------------------------------------------------------------------==
199#D- Define, create and cd RUN_DIR
200#D- 
201# --------------------------------------------------------------------==
202RUN_DIR=${RUN_DIR_PATH}/${config_UserChoices_TagName}/${config_UserChoices_JobName}
203IGCM_sys_MkdirWork ${RUN_DIR}
204IGCM_sys_Cd ${RUN_DIR}
205
206# --------------------------------------------------------------------==
207#D- Define REBUILD_DIR :
208#D- where we store files needing rebuild process
209#D- 
210# --------------------------------------------------------------------==
211if [ X${config_Post_RebuildFromArchive} = Xtrue ] ; then
212    REBUILD_DIR=${R_SAVE}/TMP
213    IGCM_sys_MkdirArchive ${REBUILD_DIR}
214else
215    REBUILD_DIR=${RUN_DIR}
216fi
217
218# --------------------------------------------------------------------==
219#D- Initialize each components taking part
220#D- into simulation configuration :
221#D-         - Define component executable
222#D-         - Define Write Frequency by component "1M" "1D" ...
223#D-         - Source ${comp}.driver
224#D-         - Define Storage Places by component
225#D-         - ${comp}_Initialize :
226#D-         - Patterns to sed
227#D-         - Variables from namelist
228#D-
229# --------------------------------------------------------------------==
230IGCM_comp_Initialize
231
232# --------------------------------------------------------------------==
233#D- Verify compatibility of period length, write frequencies, ...
234#D- Verify compatibility of rebuild choices and post-process choices
235#D- Will stop here if something is wrong
236# --------------------------------------------------------------------==
237#IGCM_config_Check
238
239#D--------------------------------------------------------------------==
240#D-                  2. ENTER THE DEEP EXECUTION LOOP
241#D-                  !!!! FASTEN YOUR SEAT BELTS !!!!
242#D-                  !!!!!      PLEASE.          !!!!
243#D-                  !! WE WILL CROSS TURBULENCES. !!
244#D--------------------------------------------------------------------==
245
246Period=1
247
248PeriodContinue=false
249if [ ${Period} -le ${PeriodNb} ]; then
250    PeriodContinue=true
251fi
252while ( ${PeriodContinue} ) ; do
253
254    echo
255    echo "Starting iteration ${Period} / ${PeriodNb}"
256
257    #D-
258    # ------------------------------------------------------------------
259    #D- COMPUTE AND DEFINE DATE STUFF.
260    # ------------------------------------------------------------------
261    IGCM_config_PeriodStart
262    #D- => ${PeriodDateBegin}
263    #D- => ${PeriodDateEnd}
264    #D- => ${CumulPeriod}
265    #D- => ${DatesPeriod}=${PeriodDateBegin}_${PeriodDateEnd}
266    #D- => ${PeriodLength} => JOURS=31 , 28, 29, 30 ; MOIS=0 ; ANS=0
267    #D- => update run.card value
268   
269    #D-
270    # ------------------------------------------------------------------
271    #D- Get parameters text files updated by job (.def, namelist ...)
272    #D- READ AND USE BY GCM AT EACH EXECUTION.
273    # ------------------------------------------------------------------
274    IGCM_comp_GetInputParametersFiles
275
276    #D-
277    # ------------------------------------------------------------------
278    #D- Get initial state (Etat0, carteveg,relief...)
279    #D- NECESSARY ONLY IF CumulPeriod= (=> NUMERO) == 1
280    #D- AND ???_Restart=NO
281    #D- READ AND USE BY GCM FOR ONLY ONE EXECUTION.
282    # ------------------------------------------------------------------
283    IGCM_comp_GetInputInitialStateFiles
284
285    #D-
286    # ------------------------------------------------------------------
287    #D- Get Boundaries Conditions (SST, WIND[X,Y,Z], LAI ...)
288    #D- READ AND USE BY GCM AT EACH EXECUTION.
289    # ------------------------------------------------------------------
290    IGCM_comp_GetInputBoundaryFiles
291
292    #D-
293    # ------------------------------------------------------------------
294    #D- Get restart files (restartphy.nc, orca_restart.nc ...)
295    #D- READ AND USE BY GCM AT EACH EXECUTION.
296    #D-
297    #D- IF A COMPONENT DO NOT RESTART FROM PREVIOULSY COMPUTED RESTART
298    #D- ONLY IF CumulPeriod= (=> NUMERO) == 1
299    #D- MUST EXECUTE CREATE ETAT0_LIMIT (TYPICALLY LMDZ AND ./create_etat0_limit.e)
300    #D-
301    #D- IF CumulPeriod == 1
302    #D- AND A COMPONENT RESTART FROM PREVIOULSY COMPUTED RESTART
303    #D- MUST BRING THIS RESTART IN ${RUN_DIR_PATH}
304    #D-
305    #D- ELSE BRING RESTART FROM ${JobName} IN ${RUN_DIR_PATH}
306    # ------------------------------------------------------------------
307    IGCM_comp_GetInputRestartFiles
308   
309    #D-
310    # ------------------------------------------------------------------
311    #D- Test if all was right before Update
312    # ------------------------------------------------------------------
313    IGCM_debug_Verif_Exit
314
315    # ------------------------------------------------------------------
316    #D- Activate running environnement variables
317    # ------------------------------------------------------------------
318    IGCM_sys_activ_variables
319
320    #D-
321    # ------------------------------------------------------------------
322    #D- UPDATE ParametersFiles (.def, namelist ...) with
323    #D- current value of (ORCA_NIT00, ORCA_LRSTAR, RAZ_DATE, ...)
324    # ------------------------------------------------------------------
325    IGCM_comp_Update
326
327    #D-
328    # ------------------------------------------------------------------
329    #D- Test if all was right before execution
330    # ------------------------------------------------------------------
331    IGCM_debug_Verif_Exit
332
333    #D-
334    #D----------------------------------------------------------------==
335    #D-                          3. Execution
336    #D----------------------------------------------------------------==
337
338    echo
339    echo "#######################################"
340    echo "#      DIR BEFORE RUN EXECUTION       #"
341    echo "#######################################"
342    echo
343    ls -lrt
344
345    echo "========================================================================"
346    if ( [ X${BATCH_NUM_PROC_TOT} != X ] && [ "${BATCH_NUM_PROC_TOT}" -gt 1 ] ) ; then
347        MPIRUN_COMMAND=${HOST_MPIRUN_COMMAND}
348        eval MPIRUN_OPTIONS=${config_UserChoices_JobRunOptions}
349    else
350        MPIRUN_COMMAND=${MPIRUN_COMMAND:="time "}
351        MPIRUN_OPTIONS=${MPIRUN_OPTIONS:=""}
352    fi
353
354    if [ ${DRYRUN} -le 1 ] ; then
355        REAL_DATE_INIT=$( date )
356        echo "EXECUTION of : ${MPIRUN_COMMAND} ${MPIRUN_OPTIONS} ./${config_Executable_Name} > ${Exe_Output} 2>&1"
357        typeset RET
358        RUN_DATE_BEGIN=$( date '+%Y-%m-%dT%H:%M:%S' )
359        ${MPIRUN_COMMAND} ${MPIRUN_OPTIONS} ./${config_Executable_Name} > ${Exe_Output} 2>&1
360        RET=$?
361        RUN_DATE_END=$( date '+%Y-%m-%dT%H:%M:%S' )
362        if [ ${RET} -gt 0 ] ; then
363            echo "Return code of executable :" ${RET}
364            IGCM_debug_Exit "EXECUTABLE"
365            IGCM_sys_Cp ${Exe_Output} ${SUBMIT_DIR}/${PREFIX}_${Exe_Output}_error
366        fi
367        echo "libIGCM RunDateBegin=${RUN_DATE_BEGIN}"  >> ${Exe_Output}
368        echo "libIGCM RunDateEnd=${RUN_DATE_END}" >> ${Exe_Output}
369    else
370        echo "EXECUTION of : ${MPIRUN_COMMAND} ${MPIRUN_OPTIONS} ./${config_Executable_Name} simulated for DRYRUN = " $DRYRUN
371        if ( $DEBUG_debug ) ; then
372            echo "FOR EXECUTION DRYRUN mode = " $DRYRUN >> stack
373        fi
374    fi
375    echo "========================================================================"
376
377    echo
378    echo "#######################################"
379    echo "#       DIR AFTER RUN EXECUTION       #"
380    echo "#######################################"
381    echo
382    ls -lrt
383
384    #D-
385    # ------------------------------------------------------------------
386    #D- Desactivate running environnement variables
387    # ------------------------------------------------------------------
388    IGCM_sys_desactiv_variables
389
390    #D-
391    #D----------------------------------------------------------------==
392    #D-                    4. Post execution operations
393    #D----------------------------------------------------------------==
394
395    #D-
396    # ------------------------------------------------------------------
397    #D- Save on archive machine netcdf outputs, restarts
398    #D- and text files of models
399    # ------------------------------------------------------------------
400    IGCM_comp_Finalize
401
402    #D-
403    # ------------------------------------------------------------------
404    #D- Test if all was right after Finalize
405    # ------------------------------------------------------------------
406    IGCM_debug_Verif_Exit
407
408    #D-
409    # ------------------------------------------------------------------
410    #D- Launch remote rebuild or/and post-treatment process if necessary
411    # ------------------------------------------------------------------
412    IGCM_post_Configure
413
414    #D-
415    # ------------------------------------------------------------------
416    #D- Save job output
417    #D- Manage executable size to save only different binary
418    #D- Write in run.card user, system and elapse time
419    #D- Check that everything went well ! No ? then we stop.
420    #D- Determine next computed period
421    # ------------------------------------------------------------------
422    IGCM_config_PeriodEnd
423
424    echo "Ending iteration ${Period}"
425    (( Period = Period + 1 ))
426
427    # End loop if date end is reached
428    if [ ${SimulationLengthInDays} -ge ${ExperienceLengthInDays} ] ; then
429        break ;
430    fi
431
432    PeriodContinue=false
433    if [ ${Period} -le ${PeriodNb} ]; then
434        PeriodContinue=true
435    fi
436done 
437
438#D-
439#D--------------------------------------------------------------------==
440#D-     5. Submit next job or send mail if simulation over.
441#D--------------------------------------------------------------------==
442IGCM_config_Finalize
443
444date
Note: See TracBrowser for help on using the repository browser.