#!/bin/sh ############################################################################# # # # mww3_case_01 : Test case for north Atlantic focussing on the Norwegian # # coast using a set of telescoping nests. # # # # Model is compiled inline using provided switch options (serial and MPI) # # # # Grids generated in this test : # # # # grd1 : North Atlantic at 1x1 degree resolution. # # grd2 : North-East Atlantic at 20x20 min. resolution. # # grd3 : Norwegian coast at 10x5 min. resolution. # # grd3 : Norwegian coast at 4x2 min. resolution. # # grd5 : Birgitte Furevik's 500m resolution grid. # # # # Remarks: # # # # - In order to run this case, the following directories need to be # # unpacked in the test directory # # mww3_data_00 : General input data for all realistic test cases. # # mww3_data_01 : Grid setup for this test case. # # After installation of WAVEWATCH III these directories are provided # # as compressed tar files, but are not unpacked to save disk space. # # - Restart files are saved in the mww3_data_01 directory for use in other # # runs. CLeaned up by arc_wwatch3 only. # # - Script set up for parallel running : # # a) For cluster with mpirun activate mpirun command lines and set # # environment with valiables MPI and proc in section 0. # # b) For IBM with poe, activate poe command lines and set environment # # variables in poe jobcards at the top of the scripts. # # # # Origination: Hendrik Tolman, Aug 2006 # # Update to v4.18: J-H. ALves, Mar 2014 # # Update to v5.16: J. Meixner, Sep 2016 # # Last Mod : Sep 2016 # # # # Copyright 2009-2014 National Weather Service (NWS), # # National Oceanic and Atmospheric Administration. All rights # # reserved. WAVEWATCH III is a trademark of the NWS. # # No unauthorized use without permission. # # # # Copyright does not cover fifth grid. # # # ############################################################################# # Sample PBS queue options for NCEP's Zeus R&D machine # Runs using command line sentence: # >> qsub mww3_case_01 #PBS -l procs=24 #PBS -q batch #PBS -l walltime=01:00:00 #PBS -A omd #PBS -N mww3_case_01 #PBS -j oe #PBS -o mww3_case_01.out # For batch run in mpi environment, set this to the location of your # cases WW3 directory cd /scratch1/portfolios/NCEPDEV/ocean/noscrub/Henrique.Alves/WW3_CASES/cases # Load modules if system requires # Options for NCEP Zeus R&D machine module load intel mpt grads # 0. Preparations ----------------------------------------------------------- set -e # User must specify compiler string (as per in ww3_dir/bin options) here: compstr="Intel" # 0.a Define model input wind='gfs_1d' # 1 degree GFS wind data to be used by all grids # wind='no' # run models without wind # ice='icean_5m' # 5 min ice analyses to be used by all grids ice='icean_30m' # 30 min ice analyses to be used by all grids # ice='no' # run models without ice # 0.b Define model grids mods='grd1 grd2 grd3 grd4 grd5' # mods='grd1 grd2 grd3 grd4' NR=`echo $mods | wc -w | awk '{print $1}'` # 0.c Set initial conditions # itype=1 ; Hini='10.0' # Set initial swell # itype=3 # Initialize by wind itype=5 # Start from calm conditions # 0.d Set output FIELDS='DPT ICE WND HS FP DP' # 0.e Set run times # undefined t_rst will give no restart file t_beg='20060101 000000' ; t_end='20060102 000000' ; t_rst= dt='3600' ; tn='25' # t_beg='20060101 000000' ; t_end='20060108 000000' ; t_rst=$t_end # dt='3600' ; tn='169' # t_beg='20060108 000000' ; t_end='20060115 000000' ; t_rst=$t_end # dt='3600' ; tn='169' # t_beg='20060115 000000' ; t_end='20060122 000000' ; t_rst=$t_end # dt='3600' ; tn='169' # t_beg='20060122 000000' ; t_end='20060129 000000' ; t_rst=$t_end # dt='3600' ; tn='169' # t_beg='20060129 000000' ; t_end='20060201 000000' ; t_rst= # dt='3600' ; tn='73' # t_beg='20060101 000000' ; t_end='20060116 000000' ; t_rst=$t_end # dt='10800' ; tn='121' # t_beg='20060116 000000' ; t_end='20060201 000000' ; t_rst= # dt='10800' ; tn='129' if [ -z "$t_rst" ] then dte=' 0' t_rst=$t_end else dte=' 1' fi fstID=`echo $t_beg | sed 's/ /\./g'` rstID=`echo $t_rst | sed 's/ /\./g'` # 0.f Parallel environment MPI='yes' # run ww3_multi in MPI mode proc=24 # 0.g Set-up variables case_dir=`pwd` ww3_dir=`echo $case_dir | sed 's/\/cases\/*//g'` temp_dir="$case_dir/tmp_case_01" mkdir -p ${temp_dir} # WAVEWATCH directories export WWATCH3_ENV=${ww3_dir}/wwatch3.env # Code compilation options case_switch_ser="F90 NOGRB NOPA LRB4 SHRD PR3 UQ FLX2 LN1 ST2 STAB2 NL1 BT1 DB1 MLIM TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 O0 O1 O2 O3 O4 O5 O6 O7 O11 O14" case_switch_mpi="F90 NOGRB NOPA LRB4 MPI DIST PR3 UQ FLX2 LN1 ST2 STAB2 NL1 BT1 DB1 MLIM TR0 BS0 IC0 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 O0 O1 O2 O3 O4 O5 O6 O7 O11 O14" # Compiler headings cp ${ww3_dir}/bin/comp.${compstr} ${ww3_dir}/bin/comp cp ${ww3_dir}/bin/link.${compstr} ${ww3_dir}/bin/link path_c="$case_dir" path_w="$temp_dir" # work directory path_e="$ww3_dir/exe" # path for executables path_b="$ww3_dir/bin" # path for binaries path_a="$ww3_dir/aux" # path for aux files and scripts path_d="$path_c/mww3_data_01" # path for data directory path_i="$path_c/mww3_data_00" # path for data directory path_o="$path_c/work_case_01" # path for output files # 0.h Clean-up rm -rf $path_w rm -rf $path_o mkdir -p $path_w mkdir -p $path_o cd $path_w echo ' ' ; echo ' ' echo ' ======> TEST RUN WAVEWATCH III <====== ' echo ' ================================== ' echo ' North Atlantic test case (Norway)' echo ' ' # 1. Grid pre-processor ----------------------------------------------------- echo ' ' echo '+--------------------+' echo '| Grid preprocessor |' echo '+--------------------+' echo ' ' # Compile appropriate code ${path_b}/w3_clean all ${path_b}/w3_new echo $case_switch_ser > ${path_b}/switch ${path_b}/w3_make ww3_grid rm -f mod_def.* cp $path_d/ww3_grid.inp.* . cp $path_d/*.bot . cp $path_d/*.obs . cp $path_d/*.mask . cp $path_i/ww3_grid.inp.* . cp $path_i/*.mask . for mod in $mods $wind $ice do if [ "$mod" != 'no' ] then mv ww3_grid.inp.$mod ww3_grid.inp echo " Screen ouput routed to $path_o/ww3_grid.$mod.out" $path_e/ww3_grid > $path_o/ww3_grid.$mod.out rm -f ww3_grid.inp mapsta.ww3 mask.ww3 mv mod_def.ww3 mod_def.$mod fi done rm -f *.bot *.obs *.mask ww3_grid.inp.* # 2. Initial conditions ----------------------------------------------------- echo ' ' echo '+--------------------+' echo '| Initial conditions |' echo '+--------------------+' echo ' ' # Compile appropriate code echo $case_switch_ser > ${path_b}/switch ${path_b}/w3_make ww3_strt cat > ww3_strt.inp << EOF $ WAVEWATCH III Initial conditions input file $ ------------------------------------------- $itype 0.07 0.01 245. 5 -40. 20. 50. 10. $Hini EOF for grid in $mods do if [ -f $path_d/restart.$grid.$fstID ] then echo " initial conditions from $path_d/restart.$grid.$fstID" ln -sf $path_d/restart.$grid.$fstID restart.$grid else rm -f mod_def.ww3 ln -s mod_def.$grid mod_def.ww3 echo " Running ww3_strt for initial conditions" echo " Screen ouput routed to $path_o/ww3_strt.$grid.out" $path_e/ww3_strt > $path_o/ww3_strt.$grid.out mv restart.ww3 restart.$grid fi done rm -f ww3_strt.inp mod_def.ww3 # 3. Input fields ----------------------------------------------------------- echo ' ' echo '+--------------------+' echo '| Input data |' echo '+--------------------+' echo ' ' # Compile appropriate code echo $case_switch_ser > ${path_b}/switch ${path_b}/w3_make ww3_prep NRI='0' if [ "$wind" != 'no' ] then NRI=`expr $NRI + 1` if [ -f $path_i/wind.$wind ] then echo " Wind file $path_i/wind.$wind" ln -sf $path_i/wind.$wind . else echo ' Copy raw wind file ...' cp $path_i/$wind.wind.gz wind.raw.gz gunzip wind.raw.gz cat > ww3_prep.inp.$wind << EOF $ WAVEWATCH III Field preprocessor input file $ ------------------------------------------- 'WND' 'LL' T T 0. 359. 360 -90. 90. 181 'NAME' 4 2 '(I8,I7)' '(16F5.2)' 20 'wind.raw' $ $ End of input file EOF rm -f mod_def.ww3 ln -s mod_def.$wind mod_def.ww3 cp ww3_prep.inp.$wind ww3_prep.inp echo " Screen ouput routed to $path_o/ww3_prep.$wind.out" $path_e/ww3_prep > $path_o/ww3_prep.$wind.out mv wind.ww3 wind.$wind echo " Copy wind.$wind to $path_i" cp wind.$wind $path_i/. rm -f wind.raw ww3_prep.inp.$wind ww3_prep.inp mod_def.ww3 echo ' ' fi fi if [ "$ice" != 'no' ] then NRI=`expr $NRI + 1` if [ -f $path_i/ice.$ice ] then echo " Ice file $path_i/ice.$ice" ln -sf $path_i/ice.$ice . else echo ' Copy raw ice file ...' cp $path_i/$ice.ice.gz ice.raw.gz gunzip ice.raw.gz cat > ww3_prep.inp.$ice << EOF $ WAVEWATCH III ice preprocessor input file $ ----------------------------------------- 'ICE' 'LL' T T 0. 359.5 720 -90. 90. 361 'NAME' 1 1 '(...)' '(...)' 51 'ice.raw' $ $ end of input fil EOF rm -f mod_def.ww3 ln -s mod_def.$ice mod_def.ww3 cp ww3_prep.inp.$ice ww3_prep.inp echo " Screen ouput routed to $path_o/ww3_prep.$ice.out" $path_e/ww3_prep > $path_o/ww3_prep.$ice.out mv ice.ww3 ice.$ice echo " Copy ice.$ice to $path_i" cp ice.$ice $path_i/. rm -f ice.raw ww3_prep.inp.$ice ww3_prep.inp mod_def.ww3 echo ' ' fi fi rm -f wind.raw ice.raw ww3_prep.inp* mod_def.ww3 # 4. Main program ----------------------------------------------------------- echo ' ' echo '+--------------------+' echo '| Main program |' echo '+--------------------+' echo ' ' # Compile appropriate code if [ "$MPI" = "yes" ] then echo $case_switch_mpi > ${path_b}/switch ${path_b}/w3_make ww3_multi else echo $case_switch_ser > ${path_b}/switch ${path_b}/w3_make ww3_multi fi cat > ww3_multi.inp << EOF $ WAVEWATCH III multi-grid input file $ ------------------------------------ $NR $NRI F 1 T T $ EOF if [ "$wind" != 'no' ] ; then echo " '$wind' F F T F F F F" >> ww3_multi.inp ; fi if [ "$ice" != 'no' ] ; then echo " '$ice' F F F T F F F" >> ww3_multi.inp ; fi flags="'no' 'no' '$wind' '$ice' 'no' 'no' 'no'" for grid in $mods do case $grid in 'grd1') echo " 'grd1' $flags 1 1 0.00 1.00 F" >> ww3_multi.inp ;; 'grd2') echo " 'grd2' $flags 2 1 0.00 1.00 F" >> ww3_multi.inp ;; 'grd3') echo " 'grd3' $flags 3 1 0.00 1.00 F" >> ww3_multi.inp ;; 'grd4') echo " 'grd4' $flags 4 1 0.00 1.00 F" >> ww3_multi.inp ;; 'grd5') echo " 'grd5' $flags 5 1 0.00 1.00 F" >> ww3_multi.inp ;; * ) echo " *** HELP *** " ; exit 99 ;; esac done cat >> ww3_multi.inp << EOF $ $t_beg $t_end $ T T $ $t_beg $dt $t_end N $FIELDS $t_beg 0 $t_end $t_beg 0 $t_end $t_rst $dte $t_rst $t_beg 0 $t_end $t_beg 0 $t_end $ 'the_end' 0 $ 'STP' $ $ End of input file EOF echo " Running multi-grid model ..." # echo " Screen output routed to $path_o/ww3_multi.out" if [ "$MPI" = 'yes' ] then mpirun -np $proc $path_e/ww3_multi # > $path_o/ww3_multi.out # poe hpmcount $path_e/ww3_multi # > $path_o/ww3_multi.out # poe $path_e/ww3_multi # > $path_o/ww3_multi.out else # hpmcount $path_e/ww3_multi # > $path_o/ww3_multi.out $path_e/ww3_multi # > $path_o/ww3_multi.out fi for grid in $mods do if [ -f restart1.$grid ] then echo " Output file restart1.$grid routed to" echo " $path_d/restart.$grid.$rstID" mv restart1.$grid $path_d/restart.$grid.$rstID fi done echo " Log files routed to $path_o" mv log.* $path_o/. rm -f ww3_multi.inp rm -f restart.* rm -f wind.* rm -f ice.* set +e nr_test=`ls test* 2> /dev/null | wc -w | awk '{ print $1}'` if [ "$nr_test" != '0' ] then for file in `ls test* 2> /dev/null` do size=`wc -w $file | awk '{print $1}'` if [ "$size" = 0 ] ; then rm -f $file ; fi done fi nr_test=`ls test* 2> /dev/null | wc -w | awk '{ print $1}'` if [ "$nr_test" != '0' ] then echo " Output file test[nnn].[m]ww3 routed to $path_o" mv test* $path_o/. fi nr_prof=`ls prf*.mww3 2> /dev/null | wc -w | awk '{ print $1}'` if [ "$nr_prof" != '0' ] then echo " Profiling file prf.*.mww3 routed to $path_o" mv prf*.mww3 $path_o/. 2> /dev/null fi rm -f prf*.mww3 echo ' ' set -e # exit 99 # 4. Gridded output --------------------------------------------------------- echo ' ' echo '+--------------------+' echo '| Gridded output |' echo '+--------------------+' echo ' ' # Compile appropriate code echo $case_switch_ser > ${path_b}/switch ${path_b}/w3_make gx_outf cat > gx_outf.inp << EOF $ WAVEWATCH III Grid output post-processing $ ----------------------------------------- $t_beg $dt $tn $ N $FIELDS $ 0 999 0 999 T F $ $ End of input file EOF rm -f mod_def.ww3 out_grd.ww3 for mod in $mods do echo " GrADS data for $mod ..." echo " Screen ouput routed to $path_o/gx_outf.$mod.out" ln -s mod_def.$mod mod_def.ww3 ln -s out_grd.$mod out_grd.ww3 $path_e/gx_outf > $path_o/gx_outf.$mod.out echo " ww3.ctl routed to $path_o/$mod.ctl" sed "s/ww3\.grads/ww3\.$mod/g" ww3.ctl > $path_o/$mod.ctl rm -f ww3.ctl echo " ww3.grads routed to $path_o/ww3.$mod" mv ww3.grads $path_o/ww3.$mod rm -f mod_def.ww3 out_grd.ww3 done rm -f gx_outf.inp out_grd.* # 5. Point output ----------------------------------------------------------- echo ' ' echo '+--------------------+' echo '| Point output |' echo '+--------------------+' echo ' ' echo ' Not wanted here' # 6. End, cleaning up ------------------------------------------------------- echo ' ' ; echo "Cleaning-up `pwd`" rm -f mod_def.* log.* rm -rf $temp_dir echo ' ' ; echo ' ' echo ' ======> END OF WAVEWATCH III <====== ' echo ' ================================== ' echo ' ' # End of mww3_case_01 -------------------------------------------------------