source: branches/2013/dev_r3853_CNRS9_ConfSetting/NEMOGCM/SETTE/prepare_job.sh @ 4049

Last change on this file since 4049 was 4049, checked in by clevy, 8 years ago

Configuration setting/bugfixes for SETTE see ticket:#1074

  • Property svn:executable set to *
File size: 9.3 KB
Line 
1#####################################################
2# Author : Simona Flavoni for NEMO
3# Contact : sflod@locean-ipsl.upmc.fr
4#
5# ----------------------------------------------------------------------
6# NEMO/SETTE , NEMO Consortium (2010)
7# Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
8# ----------------------------------------------------------------------
9#
10# Some scripts called by sette.sh
11# prepare_job.sh   : creates the job script for running job
12######################################################
13#set -vx
14set -o posix
15#set -u
16#set -e
17#+
18#
19# ================
20# prepare_job.sh
21# ================
22#
23# -------------------------------------------------
24# script that creates the job script for NEMO tests
25# -------------------------------------------------
26#
27# SYNOPSIS
28# ========
29#
30# ::
31#
32#  $ ./prepare_job.sh INPUT_FILE_CONFIG_NAME NUMBER_PROC TEST_NAME MPI_FLAG JOB_FILE
33#
34#
35# DESCRIPTION
36# ===========
37#
38# Part of the SETTE package to run tests for NEMO
39#
40# prepare the script $JOB_FILE to run the tests
41#
42# EXAMPLES
43# ========
44#
45# ::
46#
47#  $ ./prepare_job.sh INPUT_FILE_CONFIG_NAME NUMBER_PROC TEST_NAME MPI_FLAG $JOB_FILE
48#
49# prepare the $JOB_FILE for execution
50#
51#
52# TODO
53# ====
54#
55# option debug
56#
57#
58# EVOLUTIONS
59# ==========
60#
61# $Id: prepare_job.sh 3050 2011-11-07 14:11:34Z acc $
62#
63#
64#
65#   * creation
66#
67#-
68#
69
70usage=" Usage : ./prepare_job.sh INPUT_FILE_CONFIG_NAME NUMBER_PROC TEST_NAME MPI_FLAG JOB_FILE"
71usage=" example : ./prepare_job.sh input_ORCA2_LIM_PISCES.cfg 8 SHORT no/yes $JOB_FILE"
72
73
74minargcount=5
75        if [ ${#} -lt ${minargcount} ]
76        then
77                echo "not enough arguments for prepare_job.sh script"
78                echo "control number of argument of prepare_job.sh in sette.sh"
79                echo "${usage}"
80        exit 1
81        fi
82        unset minargcount
83   if [ ! -f ${SETTE_DIR}/output.sette ] ; then
84           touch ${SETTE_DIR}/output.sette
85   fi
86       
87#
88# set and export TEST_NAME. It will be used within the post_test_tidyup function
89#
90INPUTARFILE=$1
91NB_PROC=$2
92TEST_NAME=$3
93MPI_FLAG=$4
94JOB_FILE=$5
95
96# export EXE_DIR. This directory is used to execute model
97#
98#
99#
100echo "date: `date`" >> ${SETTE_DIR}/output.sette
101echo "" >> ${SETTE_DIR}/output.sette
102echo "running config: ${NEW_CONF}" >> ${SETTE_DIR}/output.sette
103echo "" >> ${SETTE_DIR}/output.sette
104echo "list of cpp_keys: " >> ${SETTE_DIR}/output.sette
105echo "`more ${SETTE_DIR}/../CONFIG/${NEW_CONF}/cpp_${NEW_CONF}.fcm`" >> ${SETTE_DIR}/output.sette
106echo "" >> ${SETTE_DIR}/output.sette
107echo "compiling with: ${CMP_NAM}" >> ${SETTE_DIR}/output.sette
108echo "" >> ${SETTE_DIR}/output.sette
109echo "executing script : \"fcm_job $@\" " >> ${SETTE_DIR}/output.sette
110echo "            " >> ${SETTE_DIR}/output.sette
111
112################################################################
113# SET INPUT
114# get the input tarfile if needed
115if [ "$(cat ${SETTE_DIR}/$INPUTARFILE | wc -w)" -ne 0 ] ; then
116   echo "looking for input files in ${SETTE_DIR}/$INPUTARFILE " >> ${SETTE_DIR}/output.sette
117# number of tarfiles: NBTAR
118   NBTAR=`cat ${SETTE_DIR}/$INPUTARFILE |wc -l` 
119   echo "NB of tarfiles ${NBTAR} " >> ${SETTE_DIR}/output.sette
120# loop on tarfiles
121# read file name and directory
122while read tar_file dir_conf_forc
123do
124      echo looking for tarfile ${tar_file} and directory ${FORCING_DIR}/${dir_conf_forc} ; echo looking for tarfile ${tar_file} and directory ${FORCING_DIR}/${dir_conf_forc} >> ${SETTE_DIR}/output.sette
125      if [ -f ${FORCING_DIR}/${tar_file} ] && [ -d ${FORCING_DIR}/${dir_conf_forc} ] ; then
126# Tarfile and input dir ar there, only check the links
127         echo "Tarfile and input dir ar there, only check the links" >> ${SETTE_DIR}/output.sette
128# extract tarfile
129      else
130
131if [ ! -f ${FORCING_DIR}/${tar_file} ] ; then 
132     echo "tarfile  ${FORCING_DIR}/${tar_file} cannot be found we stop " ; exit 2 ; fi
133
134echo "mkdir ${FORCING_DIR}/${dir_conf_forc}" >> ${SETTE_DIR}/output.sette
135         mkdir ${FORCING_DIR}/${dir_conf_forc} 
136         cd    ${FORCING_DIR}/${dir_conf_forc}
137echo " extract from tarfile ${FORCING_DIR}/${tar_file} in  ${FORCING_DIR}/${dir_conf_forc}" >> ${SETTE_DIR}/output.sette
138         tar xvof ${FORCING_DIR}/${tar_file} ; gunzip -f `find . -name "*.gz"` 
139      fi
140# Tarfile and input dir ar there, only check the links
141      cd ${FORCING_DIR}/${dir_conf_forc}
142      for fida in *
143         do
144           [ -f ${EXE_DIR}/${fida} ] || ln -s ${FORCING_DIR}/${dir_conf_forc}/${fida} ${EXE_DIR}/${fida}
145         done
146    done < ${SETTE_DIR}/$INPUTARFILE
147
148else
149  echo "no input file to be searched "
150fi
151################################################################
152
153##########################################################################
154# COPY RESTART FILES (if needed; i.e. only for SHORT job in RESTART TESTS)
155# get the input tarfile if needed
156# SF : not ok for the moment because at this point is needed cn_exp variable,
157# SF : here it it not known.
158#\cd ${EXE_DIR}
159#if [ "$(echo ${TEST_NAME} | grep -c "SHORT" )" -ne 0 ] ; then
160#    for (( i=1; i<=${NB_PROC}; ${NB_PROC}++)) ; do
161#        L_NPROC=`printf "%04d\n" $i`
162#        ln -sf ../LONG/${NEW_CONF}_00000060_restart_${L_NPROC-1}.nc .
163#    done
164#fi
165## SF : other way
166##      for file in ../LONG/${NEW_CONF}_*restart_0*.nc ; do
167##              ncpu=`echo $file | awk -F '_' '{print $NF}' | cut -f 1 -d '.'`
168##              ln -sf ${file}  .
169##      done
170##fi
171##########################################################################
172
173################################################################
174# RUN OPA
175cd ${EXE_DIR}
176if [ ! -r ${EXE_DIR}/opa ]
177    then
178    echo "executable opa does not exist"
179    echo "executable opa does not exist, exit"  >> ${SETTE_DIR}/output.sette
180    exit 1
181fi
182
183# example for NOCS Altix system using PBS batch submission (requires ${SETTE_DIR}/sette_batch_template file)
184#
185  #  if [ ${MPI_FLAG} == "no" ] ; then
186      case ${COMPILER} in
187         ALTIX_NAUTILUS_MPT)
188                                NB_REM=$( echo $NB_PROC | awk '{print $1 % 4}')
189               if [ ${NB_REM} == 0 ] ; then
190               # number of processes required is an integer multiple of 4
191               #
192               NB_NODES=$( echo $NB_PROC | awk '{print $1 / 4}')
193            else
194               #
195               # number of processes required is not an integer multiple of 4
196               # round up the number of nodes required.
197               #
198               NB_NODES=$( echo $NB_PROC | awk '{printf("%d",$1 / 4 + 1 )}')
199                  fi
200            ;;
201                        ifort_MERCATOR_CLUSTER)
202                                echo NB_PROCS ${NB_PROC}
203                                echo NB_NODES ${NB_NODES}
204                                echo  NB_PROC ${NB_PROC}
205                                if [ ${NB_PROC} -eq 1 ] ; then
206                                   NB_NODES=1
207                                   QUEUE=monoproc
208                                   NB_PROC_NODE=${NB_PROC}
209                                else
210                                   if [ ${NB_PROC} -le 8 ] ; then
211                                      NB_NODES=1
212                                      QUEUE=mono
213                                      NB_PROC_NODE=${NB_PROC}
214                                   else
215                                      NB_NODES=$( echo $NB_PROC | awk '{print $1 - $1 % 8}'  | awk '{print $1 / 8 }')
216                                      QUEUE=multi
217                                      NB_PROC_NODE=8
218                                  fi
219                                fi
220                                echo NB_PROCS     ${NB_PROC}
221                                echo NB_NODES     ${NB_NODES}
222                                echo NB_PROC_NODE ${NB_PROC_NODE}
223                                ;;
224         *)
225            NB_NODES=${NB_PROC}
226            ;;
227
228      esac
229#
230# Pass settings into job file by using sed to edit predefined strings
231#
232        cat ${SETTE_DIR}/job_batch_template | sed -e"s/NODES/${NB_NODES}/" -e"s/NPROCS/${NB_PROC}/" \
233             -e"s:DEF_SETTE_DIR:${SETTE_DIR}:" -e"s:DEF_INPUT_DIR:${INPUT_DIR}:" \
234             -e"s:DEF_EXE_DIR:${EXE_DIR}:" \
235             -e"s:DEF_CONFIG_DIR:${CONFIG_DIR}:" \
236             -e"s:MPI_FLAG:${MPI_FLAG}:" \
237             -e"s:DEF_NEMO_VALIDATION:${NEMO_VALIDATION_DIR}:" -e"s:DEF_NEW_CONF:${NEW_CONF}:" \
238             -e"s:DEF_CMP_NAM:${CMP_NAM}:" -e"s:DEF_TEST_NAME:${TEST_NAME}:" > run_sette_test.job
239
240        case ${COMPILER} in
241              ifort_MERCATOR_CLUSTER)
242                    #cat run_sette_test.job | sed -e"s:QUEUE:${QUEUE}:" > run_sette_test1.job
243                    #cat run_sette_test.job | sed -e"s/NPROC_NODE/${NB_PROC_NODE}/" > run_sette_test1.job
244                                                 #-e"s/NPROC_NODE/${NB_PROC_NODE}/" > run_sette_test1.job
245                    cat run_sette_test.job | sed -e"s/NPROC_NODE/${NB_PROC_NODE}/" \
246                                                 -e"s:QUEUE:${QUEUE}:" > run_sette_test1.job
247                    mv run_sette_test1.job run_sette_test.job
248                    ;;
249   esac
250#
251# create the unique submission job script
252#
253   if [ ! -f $JOB_FILE ] ; then
254      mv run_sette_test.job $JOB_FILE
255   else
256       e=`grep -n "# END_BODY" ${JOB_FILE} | cut -d : -f 1`
257            e=$(($e - 1))
258       head -$e $JOB_FILE > ${JOB_FILE}_new
259       mv ${JOB_FILE}_new ${JOB_FILE}
260       l=`wc -l run_sette_test.job | sed -e "s:run_sette_test.job::"`
261       b=`grep -n "# BODY" run_sette_test.job | cut -d : -f 1`
262       t=$(($l - $b))
263       tail -$t run_sette_test.job >> $JOB_FILE
264   fi
265   
266   chmod a+x $JOB_FILE ; echo "$JOB_FILE is ready"
267
268#fi
Note: See TracBrowser for help on using the repository browser.