# $Id$ set -xv CONF=ZAGRIF # Variables changed by lance_batch.ksh script RUN=xxx NB_PROCS=xxx LAUNCH=xxx LEXE=xxx CPERF=xxx D_INPUT=xxx D_GET=xxx REF_TAG=xxx TSYMB=xxx # Variables changed by ins_valid.ksh script MAINDIR=/workdir/rech/eee/reee534/AUTRE WORK=/workdir/rech/eee/reee534/AUTRE/modipsl/config/ REF_OD=/u/rech/eee/reee831/NEMO_VALIDATION # Arguments # type = 'long' or '1_short' or '2_short' type=$1 case ${type} in 'long' ) DIROUT='LONG' ITERATIONS=210 NOUTPUT=75 ;; '1_short' ) DIROUT='1_SHORT' ITERATIONS=105 NOUTPUT=75 ;; '2_short' ) DIROUT='2_SHORT' ITERATIONS=105 NOUTPUT=75 ;; 'gtime' ) DIROUT='GTIME' ITERATIONS=5475 NOUTPUT=75 ;; esac # Working directory cd ${TMPDIR} ############################################################## ############################################################## ############################################################## ### Input files ############################################################## ############################################################## ############################################################## # Local function to copy namelists files get_namelist () { if [ -a $1/$2_$3 ] ; then cp $1/$2_$3 $4 else echo ' ###############################################################' echo ' ######################## W A R N I N G ########################' echo ' ######################## W A R N I N G ########################' echo ' ######################## W A R N I N G ########################' echo ' ###############################################################' echo " $2_$3 file doesn't exist, we use the standard $2" echo ' ###############################################################' echo ' ######################## W A R N I N G ########################' echo ' ######################## W A R N I N G ########################' echo ' ######################## W A R N I N G ########################' echo ' ###############################################################' cp $1/$2 $4 fi } # Local function to find namelists parameters supergrep () { grep "^ *$1 *=" $2 | sed -e "s% *\!.*%%" } # Ocean namelist LOC_NAM=${MAINDIR}/modipsl/config/${CONF}/EXP00 get_namelist ${LOC_NAM} namelist ${MYO_EXP} namelist get_namelist ${LOC_NAM} 1_namelist ${MYO_EXP} 1_namelist # Sea-Ice namelist get_namelist ${LOC_NAM} namelist_ice_lim2 ${MYO_EXP} namelist_ice get_namelist ${LOC_NAM} 1_namelist_ice_lim2 ${MYO_EXP} 1_namelist_ice # AGRIF file cp ${LOC_NAM}/AGRIF_FixedGrids.in AGRIF_FixedGrids.in # Local function to find namelists parameters supergrep () { grep "^ *$1 *=" $2 | sed -e "s% *\!.*%%" } for CHGFILE in `ls *namelist` do # namelist modifications PAT_NIT000=$( supergrep nit000 ${CHGFILE} ) PAT_NITEND=$( supergrep nitend ${CHGFILE} ) PAT_NSTOCK=$( supergrep nstock ${CHGFILE} ) PAT_NWRITE=$( supergrep nwrite ${CHGFILE} ) PAT_NRSTDT=$( supergrep nrstdt ${CHGFILE} ) PAT_NBITCM=$( supergrep nbit_cmp ${CHGFILE} ) PAT_TRACEN=$( supergrep ln_traadv_cen2 ${CHGFILE} ) PAT_TRATVD=$( supergrep ln_traadv_tvd ${CHGFILE} ) PAT_N_CLAA=$( supergrep n_cla ${CHGFILE} ) PAT_NSOLVV=$( supergrep nsolv ${CHGFILE} ) PAT_RESTAR=$( supergrep ln_rstart ${CHGFILE} ) PAT_RESMLD=$( supergrep ln_trdmld_restart ${CHGFILE} ) PAT_NAMECF=$( supergrep cexper ${CHGFILE} ) if [ ${CHGFILE} = 'namelist' ] ; then ORCA_NITEND=$(( $ITERATIONS )) ORCA_NSTOCK=$(( $NOUTPUT )) PAT_NAMECF_tmp=" cexper = \"${CONF}\"" else ORCA_NITEND=$(( $ITERATIONS*2 )) ORCA_NSTOCK=$(( $NOUTPUT*2 )) PAT_NAMECF_tmp="$PAT_NAMECF" fi sed -e "s%$PAT_RESTAR% ln_rstart = .false.%" \ -e "s%$PAT_NAMECF%$PAT_NAMECF_tmp%" \ -e "s%$PAT_NIT000% nit000 = 1 %" \ -e "s%$PAT_NITEND% nitend = ${ORCA_NITEND} %" \ -e "s%$PAT_NSTOCK% nstock = ${ORCA_NITEND} %" \ -e "s%$PAT_NWRITE% nwrite = ${ORCA_NSTOCK} %" \ -e "s%$PAT_NRSTDT% nrstdt = 0 %" \ -e "s%$PAT_NBITCM% nbit_cmp = 1%" \ -e "s%$PAT_TRACEN% ln_traadv_cen2 = .false.%" \ -e "s%$PAT_TRATVD% ln_traadv_tvd = .true.%" \ -e "s%$PAT_N_CLAA% n_cla = 0%" \ -e "s%$PAT_NSOLVV% nsolv = 2%" \ -e "s%$PAT_RESMLD% ln_trdmld_restart = .false.%" ${CHGFILE} > nam.$$ mv nam.$$ ${CHGFILE} && rm -f nam.$$ done # Get forcing files ${D_GET} ${D_INPUT}/ORCA2_LIM_nemo_v3.1.tar ORCA2_LIM_nemo_v3.1.tar tar xvf ORCA2_LIM_nemo_v3.1.tar rm -rf ORCA2_LIM_nemo_v3.1.tar # Get restarts files if needed if [ $type = '2_short' ] then if [ ${RUN} = 'mon' -o ${RUN} = 'omp' ] ; then cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/ZAGRI*_restart.nc restart.nc cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/1_*restart.nc 1_restart.nc cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/ZAGRI*restart_ice.nc restart_ice_in.nc cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/1_*restart_ice.nc 1_restart_ice_in.nc cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/*_restart_mld.nc restart_mld.nc fi if [ ${RUN} = 'mpi' ] ; then typeset -Z4 i=0 while [ $i -lt $NB_PROCS ] do cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/ZAGRI*_restart_${i}.nc restart_${i}.nc cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/1_*restart_${i}.nc 1_restart_${i}.nc cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/ZAGRI*_restart_ice_${i}.nc restart_ice_in_${i}.nc cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/1_*restart_ice_${i}.nc 1_restart_ice_in_${i}.nc cp ${WORK}/NEMO_VALID/W${CONF}/${RUN}/1_SHORT/${MYO_EXP}/*_restart_mld_${i}.nc restart_mld_${i}.nc let i=$i+1 done fi for CHGFILE in `ls *namelist` do # namelist modifications PAT_NIT000=$( supergrep nit000 ${CHGFILE} ) PAT_NITEND=$( supergrep nitend ${CHGFILE} ) PAT_NRSTDT=$( supergrep nrstdt ${CHGFILE} ) PAT_RESTAR=$( supergrep ln_rstart ${CHGFILE} ) PAT_RESMLD=$( supergrep ln_trdmld_restart ${CHGFILE} ) if [ ${CHGFILE} = 'namelist' ] ; then ORCA_NIT000=$(( $ITERATIONS + 1 )) ORCA_NITEND=$(( $ITERATIONS*2 )) else ORCA_NIT000=$(( $ITERATIONS*2 + 1 )) ORCA_NITEND=$(( $ITERATIONS*4 )) fi sed -e "s%$PAT_RESTAR% ln_rstart = .true.%" \ -e "s%$PAT_NIT000% nit000 = $ORCA_NIT000 %" \ -e "s%$PAT_NITEND% nitend = $ORCA_NITEND %" \ -e "s%$PAT_NRSTDT% nrstdt = 2%" \ -e "s%$PAT_RESMLD% ln_trdmld_restart = .true.%" ${CHGFILE} > nam.$$ mv nam.$$ ${CHGFILE} && rm -f nam.$$ done fi ############################################################## ############################################################## ############################################################## ### Launch run ############################################################## ############################################################## ############################################################## cp ${WORK}/NEMO_VALID/W${CONF}/opa_${CONF}_${RUN}_${MYO_EXP} opa_${CONF}_${RUN}_${MYO_EXP} cp ${WORK}/NEMO_VALID/W${CONF}/opa_${CONF}_memo_${MYO_EXP} opa_${CONF}_memo_${MYO_EXP} chmod 777 opa_${CONF}_${RUN}_${MYO_EXP} chmod 777 opa_${CONF}_memo_${MYO_EXP} # # Profiling & Executable memory size #################################### touch memory_size.txt case ${RUN} in 'mon' ) #-T- sx8brodie export F_PROGINF=detail #-T- sx8brodie echo "Stack memory: $( (size opa_${CONF}_${RUN}_${MYO_EXP}) )" >> memory_size.txt #-T- sx8brodie echo "Static memory: $( (size opa_${CONF}_memo_${MYO_EXP}) )" >> memory_size.txt ;; #-T- aix6 ;; #-T- ax6_mono echo "Stack memory: $( (size opa_${CONF}_memo_${MYO_EXP}) )" >> memory_size.txt #-T- ax6_mono echo "Static memory: $( (size opa_${CONF}_${RUN}_${MYO_EXP}) )" >> memory_size.txt ;; 'mpi' ) #-T- sx8brodie export MPIPROGINF=detail ;; #-T- aix6 ;; #-T- ax6_mono ;; 'omp' ) #-T- sx8brodie export F_PROGINF=detail #-T- sx8brodie export OMP_NUM_THREADS=${NB_PROCS} ;; #-T- aix6 ;; #-T- ax6_mono ;; esac # # >>>>>> EXECUTION < < < < ########################## case ${RUN} in 'mon' | 'omp' ) ${CPERF} ./opa_${CONF}_${RUN}_${MYO_EXP} ;; 'mpi' ) #-T- sx8brodie ${CPERF} ${LEXE} ./opa_${CONF}_${RUN}_${MYO_EXP} ;; #-T- aix6 ${CPERF} ${LEXE} ./opa_${CONF}_${RUN}_${MYO_EXP} ;; esac ls -l # ############################################################## ############################################################## ############################################################## ### Save output files ############################################################## ############################################################## ############################################################## case ${RUN} in 'mon' | 'omp' ) liste_files=' *abort* memory* *namelist* perfs* solver.stat ocean.output 1_Agulhas* layout* ZAGRIF* restart* mono*' ;; 'mpi' ) liste_files=' *abort* *namelist* solver.stat perfs* ocean.output* layout* 1_Agulhas* ZAGRIF* restart* mpp*' ;; esac # Ensure that all files saved are coming from the current run ind=1 for k in $liste_files do echo $k > temp var=$( ( awk '{printf("%-.4s", varin ) } ' varin=$k temp ) ) if [ ${ind} = 1 -a ${var} = 'perf' ] ; then kc='perf*' rm -f ${WORK}/NEMO_VALID/W${CONF}/${RUN}/${DIROUT}/${MYO_EXP}/${kc} ind=0 fi cp $k ${WORK}/NEMO_VALID/W${CONF}/${RUN}/${DIROUT}/${MYO_EXP}/$k done ############################################################## ############################################################## ############################################################## ### Retrieve some reference run files ############################################################## ############################################################## ############################################################## if [ ${REF_TAG} ] then STORE_DATA=${REF_OD}/${CONF}/${REF_TAG}/${RUN}/${DIROUT} LFILES="solver.stat memory_size.txt ocean.output ${RUN}${CONF}_err" for ref_file in ${LFILES} do ${D_GET} ${STORE_DATA}/${TSYMB}${ref_file} ${WORK}/NEMO_VALID/W${CONF}/${RUN}/${DIROUT}/REF/${ref_file} done fi ############################################################## ############################################################## ############################################################## ### Launch restart job ############################################################## ############################################################## ############################################################## if [ $type = '1_short' ] ; then cd ${WORK}/NEMO_VALID/W${CONF}/${RUN}/2_SHORT/${MYO_EXP} ${LAUNCH}job_${RUN}_2_short_${MYO_EXP}.ksh fi