[2562] | 1 | ##################################################### |
---|
[2354] | 2 | # Author : Simona Flavoni for NEMO |
---|
| 3 | # Contact : sflod@locean-ipsl.upmc.fr |
---|
| 4 | # |
---|
[2359] | 5 | # Some scripts called by sette.sh |
---|
| 6 | # fcm_job.sh : simple job to run NEMO with fcm |
---|
[2354] | 7 | ###################################################### |
---|
| 8 | #set -x |
---|
| 9 | set -o posix |
---|
| 10 | #set -u |
---|
| 11 | #set -e |
---|
| 12 | #+ |
---|
| 13 | # |
---|
| 14 | # ================ |
---|
| 15 | # fcm_job.sh |
---|
| 16 | # ================ |
---|
| 17 | # |
---|
| 18 | # -------------------------- |
---|
| 19 | # Simple job for NEMO tests |
---|
| 20 | # -------------------------- |
---|
| 21 | # |
---|
| 22 | # SYNOPSIS |
---|
| 23 | # ======== |
---|
| 24 | # |
---|
| 25 | # :: |
---|
| 26 | # |
---|
[2657] | 27 | # $ ./fcm_job.sh INPUT_FILE_CONFIG_NAME NUMBER_PROC TEST_NAME |
---|
[2354] | 28 | # |
---|
| 29 | # |
---|
| 30 | # DESCRIPTION |
---|
| 31 | # =========== |
---|
| 32 | # |
---|
| 33 | # Simple job for SET TESTS for NEMO (SETTE) |
---|
[2665] | 34 | # |
---|
[3021] | 35 | # get input files (if needed) : tar file |
---|
| 36 | # (note this job needs to have an input_CONFIG.cfg in which can be found input tar file name) |
---|
[2665] | 37 | # |
---|
[3021] | 38 | # runs job in interactive or batch mode : all jobs using 1 process are run interactive, and all MPP jobs are |
---|
[2665] | 39 | # |
---|
[3021] | 40 | # run in batch (MPI_INTERACT="no") or interactive (MPI_INTERACT="yes") see sette.sh and BATCH_TEMPLATE directory |
---|
[2665] | 41 | # |
---|
[3021] | 42 | # and call post_test_tidyup function (that moves in NEMO_VALIDATION_DIR solver.stat, tracer.stat (for LOBSTER & PISCES) & ocean.output) |
---|
[2665] | 43 | # |
---|
[2354] | 44 | # EXAMPLES |
---|
| 45 | # ======== |
---|
| 46 | # |
---|
| 47 | # :: |
---|
| 48 | # |
---|
[2665] | 49 | # $ ./fcm_job.sh INPUT_FILE_CONFIG_NAME NUMBER_PROC TEST_NAME |
---|
[2354] | 50 | # |
---|
[3021] | 51 | # run a job of config GYRE with 1 processor SHORT test ( 5 days ) |
---|
[2665] | 52 | # $ ./fcm_job.sh input_GYRE.cfg 1 SHORT |
---|
[2354] | 53 | # |
---|
[2665] | 54 | # run a job of config ORCA2_LIM_PISCES with 8 processors test RESTARTABILITY |
---|
| 55 | # $ ./fcm_job.sh input_ORCA2_LIM_PISCES.cfg 8 LONG |
---|
[2507] | 56 | # |
---|
| 57 | # |
---|
[2354] | 58 | # TODO |
---|
| 59 | # ==== |
---|
| 60 | # |
---|
| 61 | # option debug |
---|
| 62 | # |
---|
| 63 | # |
---|
| 64 | # EVOLUTIONS |
---|
| 65 | # ========== |
---|
| 66 | # |
---|
[2507] | 67 | # $Id$ |
---|
[2354] | 68 | # |
---|
| 69 | # |
---|
| 70 | # |
---|
| 71 | # * creation |
---|
| 72 | # |
---|
| 73 | #- |
---|
| 74 | # |
---|
[2545] | 75 | |
---|
[2656] | 76 | usage=" Usage : ./fcm_job.sh input_CONFIG_NAME.cfg NUMBER_OF_PROCS TEST_NAME" |
---|
[3021] | 77 | usage=" example : ./fcm_job.sh input_ORCA2_LIM_PISCES.cfg 8 SHORT" |
---|
[2545] | 78 | |
---|
| 79 | |
---|
[2656] | 80 | minargcount=3 |
---|
[2545] | 81 | if [ ${#} -lt ${minargcount} ] |
---|
| 82 | then |
---|
| 83 | echo "not enought arguments for fcm_job.sh script" |
---|
| 84 | echo "control number of argument of fcm_job.sh in sette.sh" |
---|
| 85 | echo "${usage}" |
---|
| 86 | exit 1 |
---|
| 87 | fi |
---|
| 88 | unset minargcount |
---|
[2656] | 89 | if [ ! -f ${SETTE_DIR}/output.sette ] ; then |
---|
[2545] | 90 | touch ${SETTE_DIR}/output.sette |
---|
| 91 | fi |
---|
[2562] | 92 | |
---|
[3021] | 93 | # |
---|
| 94 | # set and export TEST_NAME. It will be used within the post_test_tidyup function |
---|
| 95 | # |
---|
| 96 | export TEST_NAME=$3 |
---|
| 97 | |
---|
| 98 | # export EXE_DIR. This directory is used to execute model |
---|
| 99 | # |
---|
| 100 | export EXE_DIR |
---|
| 101 | # |
---|
| 102 | # |
---|
[2562] | 103 | echo "date: `date`" >> ${SETTE_DIR}/output.sette |
---|
| 104 | echo "" >> ${SETTE_DIR}/output.sette |
---|
| 105 | echo "running config: ${NEW_CONF}" >> ${SETTE_DIR}/output.sette |
---|
| 106 | echo "" >> ${SETTE_DIR}/output.sette |
---|
| 107 | echo "list of cpp_keys: " >> ${SETTE_DIR}/output.sette |
---|
| 108 | echo "`more ../CONFIG/${NEW_CONF}/cpp_${NEW_CONF}.fcm`" >> ${SETTE_DIR}/output.sette |
---|
| 109 | echo "" >> ${SETTE_DIR}/output.sette |
---|
[2685] | 110 | echo "compiling with: ${CMP_NAM}" >> ${SETTE_DIR}/output.sette |
---|
| 111 | echo "" >> ${SETTE_DIR}/output.sette |
---|
[2656] | 112 | echo "executing script : \"fcm_job $@\" " >> ${SETTE_DIR}/output.sette |
---|
[2562] | 113 | echo " " >> ${SETTE_DIR}/output.sette |
---|
[2545] | 114 | |
---|
[2562] | 115 | ################################################################ |
---|
[2354] | 116 | # SET INPUT |
---|
[2507] | 117 | # get the input tarfile if needed |
---|
[2354] | 118 | tar_file=$(sed -ne "1,1p" $1) |
---|
| 119 | if [ "$(cat $1 | grep -c ".tar" )" -ne 0 ] ; then |
---|
[2545] | 120 | echo "looking for tar file" >> ${SETTE_DIR}/output.sette |
---|
| 121 | echo " " >> ${SETTE_DIR}/output.sette |
---|
[2354] | 122 | cp ${FORCING_DIR}/${tar_file} ${INPUT_DIR}/. |
---|
[3021] | 123 | echo "file in ${INPUT_DIR}" |
---|
[2656] | 124 | if [ ! -f ${INPUT_DIR}/${tar_file} ] ; then |
---|
| 125 | echo "PROBLEM during copy of tar file" >> ${SETTE_DIR}/output.sette |
---|
| 126 | echo "tar file IS NOT present in ${INPUT_DIR} directory " >> ${SETTE_DIR}/output.sette |
---|
| 127 | echo " " >> ${SETTE_DIR}/output.sette |
---|
| 128 | echo "PROBLEM during copy of tar file" |
---|
| 129 | exit 1 |
---|
| 130 | else |
---|
[3021] | 131 | cd ${EXE_DIR} ; tar xvof ${INPUT_DIR}/*.tar ; gunzip -f *gz |
---|
[2656] | 132 | fi |
---|
[2354] | 133 | fi |
---|
| 134 | |
---|
[3021] | 135 | if [ ! -f ${EXE_DIR}/namelist_ice ] ; then |
---|
| 136 | if [ -f ${EXE_DIR}/namelist_ice_lim2 ] ; then |
---|
[2545] | 137 | echo "choosing for namelist ice " >> ${SETTE_DIR}/output.sette |
---|
| 138 | echo " " >> ${SETTE_DIR}/output.sette |
---|
[3021] | 139 | cp ${EXE_DIR}/namelist_ice_lim2 ${EXE_DIR}/namelist_ice |
---|
| 140 | elif [ -f ${EXE_DIR}/namelist_ice_lim3 ] ; then |
---|
| 141 | cp ${EXE_DIR}/namelist_ice_lim3 ${EXE_DIR}/namelist_ice |
---|
[2354] | 142 | fi |
---|
[3021] | 143 | fi |
---|
[2354] | 144 | |
---|
| 145 | |
---|
| 146 | if [ "$(cat ${CONFIG_DIR}/${NEW_CONF}/cpp_${NEW_CONF}.fcm | grep -c "agrif" )" -ne 0 ] ; then |
---|
| 147 | #- Namelist for ocean and ice (agrif fine grid) |
---|
[2545] | 148 | echo "choosing for namelist for AGRIF" >> ${SETTE_DIR}/output.sette |
---|
| 149 | echo " " >> ${SETTE_DIR}/output.sette |
---|
[3021] | 150 | cp ${EXE_DIR}/1_namelist_ice_lim2 ${EXE_DIR}/1_namelist_ice |
---|
[2354] | 151 | fi |
---|
| 152 | ################################################################ |
---|
| 153 | |
---|
| 154 | ################################################################ |
---|
| 155 | # RUN OPA |
---|
[3021] | 156 | cd ${EXE_DIR} |
---|
[2354] | 157 | NB_PROC=$2 |
---|
[3021] | 158 | if [ ! -r ${EXE_DIR}/opa ] |
---|
[2549] | 159 | then |
---|
| 160 | echo "executable opa does not exist" |
---|
[2656] | 161 | echo "executable opa does not exist, exit" >> ${SETTE_DIR}/output.sette |
---|
[2549] | 162 | exit 1 |
---|
[2546] | 163 | fi |
---|
| 164 | if [ ${NB_PROC} == 1 ] ; then |
---|
[2549] | 165 | echo "running opa" >> ${SETTE_DIR}/output.sette |
---|
| 166 | echo " " >> ${SETTE_DIR}/output.sette |
---|
| 167 | ./opa |
---|
[3021] | 168 | # |
---|
| 169 | # Tidy out output from this test and populate the NEMO_VALIDATION_DIR tree |
---|
| 170 | # |
---|
| 171 | post_test_tidyup |
---|
[2354] | 172 | else |
---|
[2549] | 173 | echo "running opa in MPI" >> ${SETTE_DIR}/output.sette |
---|
| 174 | echo " " >> ${SETTE_DIR}/output.sette |
---|
[2354] | 175 | |
---|
[3021] | 176 | if [ ${MPI_INTERACT} == "yes" ] ; then |
---|
| 177 | # |
---|
| 178 | # example for brodie (NEC SX8) machine |
---|
| 179 | # mpirun -np ${NB_PROC} opa |
---|
| 180 | # example for dedale machine |
---|
| 181 | # mpirun --mca btl self,tcp -np ${NB_PROC} opa |
---|
| 182 | # example for vargas (IBM Power6) machine |
---|
| 183 | mpiexec -n ${NB_PROC} opa |
---|
| 184 | # |
---|
| 185 | post_test_tidyup |
---|
| 186 | fi |
---|
| 187 | # |
---|
| 188 | # example for NOCS Altix system using PBS batch submission (requires ${SETTE_DIR}/sette_batch_template file) |
---|
| 189 | # |
---|
| 190 | if [ ${MPI_INTERACT} == "no" ] ; then |
---|
| 191 | case ${COMPILER} in |
---|
| 192 | ALTIX_NAUTILUS_MPT) |
---|
[3050] | 193 | NB_REM=$( echo $NB_PROC | awk '{print $1 % 4}') |
---|
[3021] | 194 | if [ ${NB_REM} == 0 ] ; then |
---|
| 195 | # number of processes required is an integer multiple of 4 |
---|
| 196 | # |
---|
| 197 | NB_NODES=$( echo $NB_PROC | awk '{print $1 / 4}') |
---|
| 198 | else |
---|
| 199 | # |
---|
| 200 | # number of processes required is not an integer multiple of 4 |
---|
| 201 | # round up the number of nodes required. |
---|
| 202 | # |
---|
| 203 | NB_NODES=$( echo $NB_PROC | awk '{printf("%d",$1 / 4 + 1 )}') |
---|
| 204 | fi |
---|
| 205 | ;; |
---|
| 206 | *) |
---|
| 207 | NB_NODES=${NB_PROC} |
---|
| 208 | ;; |
---|
[2354] | 209 | |
---|
[3021] | 210 | esac |
---|
| 211 | # |
---|
| 212 | # Pass settings into job file by using sed to edit predefined strings |
---|
| 213 | # |
---|
| 214 | cat ${SETTE_DIR}/job_batch_template | sed -e"s/NODES/${NB_NODES}/" -e"s/NPROCS/${NB_PROC}/" \ |
---|
| 215 | -e"s:DEF_SETTE_DIR:${SETTE_DIR}:" -e"s:DEF_INPUT_DIR:${INPUT_DIR}:" \ |
---|
| 216 | -e"s:DEF_EXE_DIR:${EXE_DIR}:" \ |
---|
| 217 | -e"s:DEF_CONFIG_DIR:${CONFIG_DIR}:" \ |
---|
| 218 | -e"s:DEF_NEMO_VALIDATION:${NEMO_VALIDATION_DIR}:" -e"s:DEF_NEW_CONF:${NEW_CONF}:" \ |
---|
| 219 | -e"s:DEF_CMP_NAM:${CMP_NAM}:" -e"s:DEF_TEST_NAME:${TEST_NAME}:" > run_sette_test.job |
---|
| 220 | # |
---|
| 221 | # submit job to batch system |
---|
| 222 | ${BATCH_COMMAND} run_sette_test.job |
---|
| 223 | fi |
---|
| 224 | |
---|
[2656] | 225 | fi |
---|