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.
prepare_job.sh in trunk/NEMOGCM/SETTE – NEMO

source: trunk/NEMOGCM/SETTE/prepare_job.sh @ 4212

Last change on this file since 4212 was 4165, checked in by rfurner, 11 years ago

added Met Office batch script, changed name of AMM12 input files, and added extra unzip in prepare_job.sh to deal with AMM12 inputs

  • Property svn:executable set to *
File size: 9.0 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#
98export EXE_DIR
99#
100#
101echo "date: `date`" >> ${SETTE_DIR}/output.sette
102echo "" >> ${SETTE_DIR}/output.sette
103echo "running config: ${NEW_CONF}" >> ${SETTE_DIR}/output.sette
104echo "" >> ${SETTE_DIR}/output.sette
105echo "list of cpp_keys: " >> ${SETTE_DIR}/output.sette
106echo "`more ${SETTE_DIR}/../CONFIG/${NEW_CONF}/cpp_${NEW_CONF}.fcm`" >> ${SETTE_DIR}/output.sette
107echo "" >> ${SETTE_DIR}/output.sette
108echo "compiling with: ${CMP_NAM}" >> ${SETTE_DIR}/output.sette
109echo "" >> ${SETTE_DIR}/output.sette
110echo "executing script : \"fcm_job $@\" " >> ${SETTE_DIR}/output.sette
111echo "            " >> ${SETTE_DIR}/output.sette
112
113################################################################
114# SET INPUT
115# get the input tarfile if needed
116tar_file=$(sed -ne "1,1p" ${SETTE_DIR}/$INPUTARFILE)
117if [ "$(cat ${SETTE_DIR}/$INPUTARFILE | grep -c ".tar" )" -ne 0 ] ; then
118   echo "looking for tar file" >> ${SETTE_DIR}/output.sette
119   echo "            " >> ${SETTE_DIR}/output.sette
120   cp ${FORCING_DIR}/${tar_file} ${INPUT_DIR}/.
121   echo "file in ${INPUT_DIR}"
122   if [ ! -f ${INPUT_DIR}/${tar_file} ] ; then
123      echo "PROBLEM during copy of tar file" >> ${SETTE_DIR}/output.sette
124      echo "tar file IS NOT present in ${INPUT_DIR} directory " >> ${SETTE_DIR}/output.sette
125      echo "            " >> ${SETTE_DIR}/output.sette
126      echo "PROBLEM during copy of tar file" 
127      exit 1
128   else 
129      cd ${EXE_DIR} ; tar xvof ${INPUT_DIR}/*.tar ; gunzip -f *gz ; gunzip -f */*gz
130   fi
131fi
132
133if [ ! -f ${EXE_DIR}/namelist_ice ] ; then
134if [ -f ${EXE_DIR}/namelist_ice_lim2 ] ; then
135   echo "choosing for namelist ice " >> ${SETTE_DIR}/output.sette
136   echo "            " >> ${SETTE_DIR}/output.sette
137   cp ${EXE_DIR}/namelist_ice_lim2 ${EXE_DIR}/namelist_ice
138elif  [ -f ${EXE_DIR}/namelist_ice_lim3 ] ; then
139   cp ${EXE_DIR}/namelist_ice_lim3 ${EXE_DIR}/namelist_ice
140fi
141fi
142
143
144if [ "$(cat ${CONFIG_DIR}/${NEW_CONF}/cpp_${NEW_CONF}.fcm | grep -c "agrif" )" -ne 0 ] ; then
145   #- Namelist for ocean and ice (agrif fine grid)
146      echo "choosing for namelist for AGRIF" >> ${SETTE_DIR}/output.sette
147      echo "            " >> ${SETTE_DIR}/output.sette
148   cp ${EXE_DIR}/1_namelist_ice_lim2 ${EXE_DIR}/1_namelist_ice
149fi
150################################################################
151
152##########################################################################
153# COPY RESTART FILES (if needed; i.e. only for SHORT job in RESTART TESTS)
154# get the input tarfile if needed
155# SF : not ok for the moment because at this point is needed cn_exp variable,
156# SF : here it it not known.
157#\cd ${EXE_DIR}
158#if [ "$(echo ${TEST_NAME} | grep -c "SHORT" )" -ne 0 ] ; then
159#    for (( i=1; i<=${NB_PROC}; ${NB_PROC}++)) ; do
160#        L_NPROC=`printf "%04d\n" $i`
161#        ln -sf ../LONG/${NEW_CONF}_00000060_restart_${L_NPROC-1}.nc .
162#    done
163#fi
164## SF : other way
165##      for file in ../LONG/${NEW_CONF}_*restart_0*.nc ; do
166##              ncpu=`echo $file | awk -F '_' '{print $NF}' | cut -f 1 -d '.'`
167##              ln -sf ${file}  .
168##      done
169##fi
170##########################################################################
171
172################################################################
173# RUN OPA
174cd ${EXE_DIR}
175if [ ! -r ${EXE_DIR}/opa ]
176    then
177    echo "executable opa does not exist"
178    echo "executable opa does not exist, exit"  >> ${SETTE_DIR}/output.sette
179    exit 1
180fi
181
182# example for NOCS Altix system using PBS batch submission (requires ${SETTE_DIR}/sette_batch_template file)
183#
184  #  if [ ${MPI_FLAG} == "no" ] ; then
185      case ${COMPILER} in
186         ALTIX_NAUTILUS_MPT)
187                                NB_REM=$( echo $NB_PROC | awk '{print $1 % 4}')
188               if [ ${NB_REM} == 0 ] ; then
189               # number of processes required is an integer multiple of 4
190               #
191               NB_NODES=$( echo $NB_PROC | awk '{print $1 / 4}')
192            else
193               #
194               # number of processes required is not an integer multiple of 4
195               # round up the number of nodes required.
196               #
197               NB_NODES=$( echo $NB_PROC | awk '{printf("%d",$1 / 4 + 1 )}')
198                  fi
199            ;;
200                        ifort_MERCATOR_CLUSTER)
201                                echo NB_PROCS ${NB_PROC}
202                                echo NB_NODES ${NB_NODES}
203                                echo  NB_PROC ${NB_PROC}
204                                if [ ${NB_PROC} -eq 1 ] ; then
205                                   NB_NODES=1
206                                   QUEUE=monoproc
207                                   NB_PROC_NODE=${NB_PROC}
208                                else
209                                   if [ ${NB_PROC} -le 8 ] ; then
210                                      NB_NODES=1
211                                      QUEUE=mono
212                                      NB_PROC_NODE=${NB_PROC}
213                                   else
214                                      NB_NODES=$( echo $NB_PROC | awk '{print $1 - $1 % 8}'  | awk '{print $1 / 8 }')
215                                      QUEUE=multi
216                                      NB_PROC_NODE=8
217                                  fi
218                                fi
219                                echo NB_PROCS     ${NB_PROC}
220                                echo NB_NODES     ${NB_NODES}
221                                echo NB_PROC_NODE ${NB_PROC_NODE}
222                                ;;
223         *)
224            NB_NODES=${NB_PROC}
225            ;;
226
227      esac
228#
229# Pass settings into job file by using sed to edit predefined strings
230#
231        cat ${SETTE_DIR}/job_batch_template | sed -e"s/NODES/${NB_NODES}/" -e"s/NPROCS/${NB_PROC}/" \
232             -e"s:DEF_SETTE_DIR:${SETTE_DIR}:" -e"s:DEF_INPUT_DIR:${INPUT_DIR}:" \
233             -e"s:DEF_EXE_DIR:${EXE_DIR}:" \
234             -e"s:DEF_CONFIG_DIR:${CONFIG_DIR}:" \
235             -e"s:MPI_FLAG:${MPI_FLAG}:" \
236             -e"s:DEF_NEMO_VALIDATION:${NEMO_VALIDATION_DIR}:" -e"s:DEF_NEW_CONF:${NEW_CONF}:" \
237             -e"s:DEF_CMP_NAM:${CMP_NAM}:" -e"s:DEF_TEST_NAME:${TEST_NAME}:" > run_sette_test.job
238
239        case ${COMPILER} in
240              ifort_MERCATOR_CLUSTER)
241                    #cat run_sette_test.job | sed -e"s:QUEUE:${QUEUE}:" > run_sette_test1.job
242                    #cat run_sette_test.job | sed -e"s/NPROC_NODE/${NB_PROC_NODE}/" > run_sette_test1.job
243                                                 #-e"s/NPROC_NODE/${NB_PROC_NODE}/" > run_sette_test1.job
244                    cat run_sette_test.job | sed -e"s/NPROC_NODE/${NB_PROC_NODE}/" \
245                                                 -e"s:QUEUE:${QUEUE}:" > run_sette_test1.job
246                    mv run_sette_test1.job run_sette_test.job
247                    ;;
248   esac
249#
250# create the unique submission job script
251#
252   if [ ! -f $JOB_FILE ] ; then
253      mv run_sette_test.job $JOB_FILE
254   else
255       e=`grep -n "# END_BODY" ${JOB_FILE} | cut -d : -f 1`
256            e=$(($e - 1))
257       head -$e $JOB_FILE > ${JOB_FILE}_new
258       mv ${JOB_FILE}_new ${JOB_FILE}
259       l=`wc -l run_sette_test.job | sed -e "s:run_sette_test.job::"`
260       b=`grep -n "# BODY" run_sette_test.job | cut -d : -f 1`
261       t=$(($l - $b))
262       tail -$t run_sette_test.job >> $JOB_FILE
263   fi
264   
265   chmod a+x $JOB_FILE ; echo "$JOB_FILE is ready"
266
267#fi
Note: See TracBrowser for help on using the repository browser.