From 07473b07b27745a7aaebc57a935a179de0b371c2 Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Tue, 14 Jul 2020 11:26:08 +0100 Subject: [PATCH 01/13] First set of changes - code is ready but regtests still to be completed --- model/bin/comp.cray_xc.GNU | 201 +++++++++++++++++++++++++++++++ model/bin/comp.cray_xc.GNU_debug | 201 +++++++++++++++++++++++++++++++ model/bin/link.cray_xc.GNU | 197 ++++++++++++++++++++++++++++++ model/bin/link.cray_xc.GNU_debug | 197 ++++++++++++++++++++++++++++++ model/ftn/ww3_shel.ftn | 33 +++-- regtests/bin/matrix.base | 12 +- regtests/bin/matrix_datarmor | 1 + regtests/bin/matrix_ncep | 1 + regtests/bin/matrix_ukmo_cray | 1 + regtests/bin/matrix_zeus_HLT | 1 + 10 files changed, 831 insertions(+), 14 deletions(-) create mode 100755 model/bin/comp.cray_xc.GNU create mode 100755 model/bin/comp.cray_xc.GNU_debug create mode 100755 model/bin/link.cray_xc.GNU create mode 100755 model/bin/link.cray_xc.GNU_debug diff --git a/model/bin/comp.cray_xc.GNU b/model/bin/comp.cray_xc.GNU new file mode 100755 index 0000000000..087f43c5b8 --- /dev/null +++ b/model/bin/comp.cray_xc.GNU @@ -0,0 +1,201 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# comp : Compiler script for use in ad3 (customized for hardware and # +# optimization). Note that this script will not be replaced if part # +# of WAVEWATCH III is re-installed. Used by ad3. # +# # +# use : comp name # +# name: name of source code file without the extension. # +# # +# error codes : 1 : input error # +# 2 : no environment file $ww3_env found. # +# 3 : error in creating scratch directory. # +# 4 : w3adc error. # +# 5 : compiler error. # +# # +# remarks : # +# # +# - This script runs from the scratch directory, where it should remain. # +# # +# - For this script to interact with ad3, it needs to generate / leave # +# following files : # +# $name.f90 : Source code (generated by ad3). # +# $name.o : Object module. # +# $name.l : Listing file. # +# comp.stat.$name : status file of compiler, containing number of errors # +# and number of warnings (generated by comp). # +# # +# - Upon (first) installation of WAVEWATCH III the user needs to check the # +# following parts of this script : # +# sec. 2.b : Provide correct compiler/options. # +# sec. 3.a : Provide correct error capturing. # +# sec. 3.d : Remove unnecessary files. # +# # +# - This version is made for the GNU compilers on any architecture. # +# # +# Timothy J. Campbell # +# October 2009 # +# --------------------------------------------------------------------------- # +# 1. Preparations # +# --------------------------------------------------------------------------- # +# 1.a Check and process input + + if [ "$#" != '1' ] + then + echo "usage: comp name" ; exit 1 + fi + name="$1" + +# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + rm -f $name.l + rm -f $name.o + rm -f comp.stat.$name + +# --------------------------------------------------------------------------- # +# 2. Compile # +# --------------------------------------------------------------------------- # +# Add here the correct compiler call including command line options +# Note: - do not invoke a link step +# - if possible, generate a listing $name.l +# - make sure the compiler point to the proper directory where the +# modules are stored ($m_path), see examples below. + +# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - +# .f90 assumes free format, .f assumes fixed format, change if necessary +# *** file extension (fext) is set and exported by calling program (ad3) *** + +# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - +# Save compiler exit code in $OK +# +# Gnu compiler on Linux ------------------------------------------------------ +# 2.b.1 Build options and determine compiler name +# Note that all but GrADS output is forced to big endian data + +# Notes re: changing compilers (important) +# ...1) run cleaner scrip to get rid of old .mod and .o files +# ...2) change switch or remove makefile to force creation of new makefile +# ...3) use -c {compiler name} in run_test + +# Gnu: +# -Idir : where to search for .mod files +# -Jdir or -Mdir : where to put .mod files + + # compilation options + opt="-c -O3 -fno-second-underscore -ffree-line-length-none -fconvert=big-endian -J$path_m" +# opt="$opt -I$HOME/g2lib -I/opt/local/include" + + # mpi implementation + if [ "$mpi_mod" = 'yes' ] + then + comp=mpif90 + else + comp=gfortran + fi + + # open mpi implementation + if [ "$omp_mod" = 'yes' ] + then + opt="$opt -fopenmp" + fi + + # oasis coupler include dir + if [ "$oasis_mod" = 'yes' ] + then + opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" + fi + + # netcdf include dir + if [ "$netcdf_compile" = 'yes' ] + then + case $WWATCH3_NETCDF in + NC3) opt="$opt -I$NETCDF_INCDIR" ;; + NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi + opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; + esac + fi + + # ftn include dir + opt="$opt -I$path_i" + opt="$opt $ESMF_F90COMPILEPATHS" + opt="$opt $EXTRA_COMP_OPTIONS" + +# 2.b.2 Compile + + $comp $opt $name.$fext > $name.out 2> $name.err + OK="$?" + +# 2.b.2 Process listing + + if [ -s $name.lst ] + then + mv $name.lst $name.l + fi + +# 2.b.3 Add test output to listing for later viewing + + if [ -s $name.l ] + then + echo '------------' >> $name.l + echo "$comp $opt" >> $name.l + echo '------------' >> $name.l + cat $name.out >> $name.l 2> /dev/null + echo '------------' >> $name.l + cat $name.err >> $name.l 2> /dev/null + echo '------------' >> $name.l + fi + +# --------------------------------------------------------------------------- # +# 3. Postprocessing # +# --------------------------------------------------------------------------- # +# 3.a Capture errors +# nr_err : number of errors. +# nr_war : number of errors. + + nr_err='0' + nr_war='0' + + if [ -s $name.err ] + then + nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` + nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` + else + if [ "$OK" != '0' ] + then + nr_err='1' + fi + fi + +# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - + + echo "ERROR $nr_err" > comp.stat.$name + echo "WARNING $nr_war" >> comp.stat.$name + +# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# if compiler does not provide listing, make listing from source code +# and compiler messages. Second input line for w3list identifies if +# comment lines are to be numbered. + + if [ ! -f $name.l ] + then + echo "$name.$fext" > w3list.inp + echo "T" >> w3list.inp + w3list < w3list.inp 2> /dev/null + rm -f w3list.inp + mv w3list.out $name.l + echo '------------' >> $name.l + echo "$comp $opt" >> $name.l + echo '------------' >> $name.l + cat $name.out >> $name.l #2> /dev/null + echo '------------' >> $name.l + cat $name.err >> $name.l #2> /dev/null + echo '------------' >> $name.l + fi + +# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - +# include here unwanted files generated by the compiler + +# rm -f $name.out +# rm -f $name.err + +# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.cray_xc.GNU_debug b/model/bin/comp.cray_xc.GNU_debug new file mode 100755 index 0000000000..3e8eb2c749 --- /dev/null +++ b/model/bin/comp.cray_xc.GNU_debug @@ -0,0 +1,201 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# comp : Compiler script for use in ad3 (customized for hardware and # +# optimization). Note that this script will not be replaced if part # +# of WAVEWATCH III is re-installed. Used by ad3. # +# # +# use : comp name # +# name: name of source code file without the extension. # +# # +# error codes : 1 : input error # +# 2 : no environment file $ww3_env found. # +# 3 : error in creating scratch directory. # +# 4 : w3adc error. # +# 5 : compiler error. # +# # +# remarks : # +# # +# - This script runs from the scratch directory, where it should remain. # +# # +# - For this script to interact with ad3, it needs to generate / leave # +# following files : # +# $name.f90 : Source code (generated by ad3). # +# $name.o : Object module. # +# $name.l : Listing file. # +# comp.stat.$name : status file of compiler, containing number of errors # +# and number of warnings (generated by comp). # +# # +# - Upon (first) installation of WAVEWATCH III the user needs to check the # +# following parts of this script : # +# sec. 2.b : Provide correct compiler/options. # +# sec. 3.a : Provide correct error capturing. # +# sec. 3.d : Remove unnecessary files. # +# # +# - This version is made for the GNU compilers on any architecture. # +# # +# Timothy J. Campbell # +# October 2009 # +# --------------------------------------------------------------------------- # +# 1. Preparations # +# --------------------------------------------------------------------------- # +# 1.a Check and process input + + if [ "$#" != '1' ] + then + echo "usage: comp name" ; exit 1 + fi + name="$1" + +# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + rm -f $name.l + rm -f $name.o + rm -f comp.stat.$name + +# --------------------------------------------------------------------------- # +# 2. Compile # +# --------------------------------------------------------------------------- # +# Add here the correct compiler call including command line options +# Note: - do not invoke a link step +# - if possible, generate a listing $name.l +# - make sure the compiler point to the proper directory where the +# modules are stored ($m_path), see examples below. + +# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - +# .f90 assumes free format, .f assumes fixed format, change if necessary +# *** file extension (fext) is set and exported by calling program (ad3) *** + +# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - +# Save compiler exit code in $OK +# +# Gnu compiler on Linux ------------------------------------------------------ +# 2.b.1 Build options and determine compiler name +# Note that all but GrADS output is forced to big endian data + +# Notes re: changing compilers (important) +# ...1) run cleaner scrip to get rid of old .mod and .o files +# ...2) change switch or remove makefile to force creation of new makefile +# ...3) use -c {compiler name} in run_test + +# Gnu: +# -Idir : where to search for .mod files +# -Jdir or -Mdir : where to put .mod files + + # compilation options + opt="-c -g -O0 -fbounds-check -fbacktrace -fno-second-underscore -ffree-line-length-none -fconvert=big-endian -J$path_m" +# opt="$opt -I$HOME/g2lib -I/opt/local/include" + + # mpi implementation + if [ "$mpi_mod" = 'yes' ] + then + comp=mpif90 + else + comp=gfortran + fi + + # open mpi implementation + if [ "$omp_mod" = 'yes' ] + then + opt="$opt -fopenmp" + fi + + # oasis coupler include dir + if [ "$oasis_mod" = 'yes' ] + then + opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" + fi + + # netcdf include dir + if [ "$netcdf_compile" = 'yes' ] + then + case $WWATCH3_NETCDF in + NC3) opt="$opt -I$NETCDF_INCDIR" ;; + NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi + opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; + esac + fi + + # ftn include dir + opt="$opt -I$path_i" + opt="$opt $ESMF_F90COMPILEPATHS" + opt="$opt $EXTRA_COMP_OPTIONS" + +# 2.b.2 Compile + + $comp $opt $name.$fext > $name.out 2> $name.err + OK="$?" + +# 2.b.2 Process listing + + if [ -s $name.lst ] + then + mv $name.lst $name.l + fi + +# 2.b.3 Add test output to listing for later viewing + + if [ -s $name.l ] + then + echo '------------' >> $name.l + echo "$comp $opt" >> $name.l + echo '------------' >> $name.l + cat $name.out >> $name.l 2> /dev/null + echo '------------' >> $name.l + cat $name.err >> $name.l 2> /dev/null + echo '------------' >> $name.l + fi + +# --------------------------------------------------------------------------- # +# 3. Postprocessing # +# --------------------------------------------------------------------------- # +# 3.a Capture errors +# nr_err : number of errors. +# nr_war : number of errors. + + nr_err='0' + nr_war='0' + + if [ -s $name.err ] + then + nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` + nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` + else + if [ "$OK" != '0' ] + then + nr_err='1' + fi + fi + +# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - + + echo "ERROR $nr_err" > comp.stat.$name + echo "WARNING $nr_war" >> comp.stat.$name + +# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# if compiler does not provide listing, make listing from source code +# and compiler messages. Second input line for w3list identifies if +# comment lines are to be numbered. + + if [ ! -f $name.l ] + then + echo "$name.$fext" > w3list.inp + echo "T" >> w3list.inp + w3list < w3list.inp 2> /dev/null + rm -f w3list.inp + mv w3list.out $name.l + echo '------------' >> $name.l + echo "$comp $opt" >> $name.l + echo '------------' >> $name.l + cat $name.out >> $name.l #2> /dev/null + echo '------------' >> $name.l + cat $name.err >> $name.l #2> /dev/null + echo '------------' >> $name.l + fi + +# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - +# include here unwanted files generated by the compiler + +# rm -f $name.out +# rm -f $name.err + +# end of comp --------------------------------------------------------------- # diff --git a/model/bin/link.cray_xc.GNU b/model/bin/link.cray_xc.GNU new file mode 100755 index 0000000000..6f496a65e3 --- /dev/null +++ b/model/bin/link.cray_xc.GNU @@ -0,0 +1,197 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# link : Linker script for use in make (customized for hardware and # +# optimization. Note that this script will not be replaced if part # +# of WAVEWATCH III is re-installed. # +# # +# use : link name [name ... ] # +# name: name of source code file without the extension. # +# the first name will become the program name. # +# # +# error codes : all error output directly to screen. # +# # +# remarks : # +# # +# - Upon (first) installation of WAVEWATCH III the user needs to check the # +# following parts of this scripts : # +# sec. 3 : Provide correct link command # +# # +# - This version is made for the GNU compilers on any architecture. # +# # +# Timothy J. Campbell # +# October 2009 # +# --------------------------------------------------------------------------- # +# 1. Preparations # +# --------------------------------------------------------------------------- # +# 1.a Check and process input + + if [ "$#" -lt '1' ] + then + echo "usage: link name [name]" ; exit 1 + fi + + prog=$1 + echo " Linking $prog" + input="$*" + +# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - + + source $(dirname $0)/w3_setenv + main_dir=$WWATCH3_DIR + temp_dir=$WWATCH3_TMP + source=$WWATCH3_SOURCE + list=$WWATCH3_LIST + + +# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + rm -f $main_dir/exe/$prog + +# --------------------------------------------------------------------------- # +# 2. Check objects # +# --------------------------------------------------------------------------- # + + cd $main_dir/obj + objects=$NULL + error='n' + set $input + + while [ "$#" -gt '0' ] + do + file=$1.o + if [ -f "$file" ] + then + objects="$objects $file" + else + echo " *** file $file not found ***" + error='y' + fi + shift + done + if [ "$error" = 'y' ] + then + echo "*** Missing object files ***" + exit 3 + fi + +# --------------------------------------------------------------------------- # +# 3. Link all things # +# --------------------------------------------------------------------------- # +# Add here the correct linker call including switches + +# 3.a Build options and determine compiler name +# No GRIB libraries for this one + + # linking options + libs="" +# libs="-L/opt/local/lib -L$HOME/g2lib -lg2 -lw3 -lpng -ljasper" + opt="-o $prog" + + # mpi implementation + if [ "$mpi_mod" = 'yes' ] + then + comp=mpif90 + else + comp=gfortran + fi + + # open mpi implementation + if [ "$omp_mod" = 'yes' ] + then + opt="$opt -fopenmp" + fi + + # oasis coupler archive + if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ + [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ + [ "$prog" = 'ww3_gspl' ] + then + if [ "$oasis_mod" = 'yes' ] + then + if [ -z "$(env | grep OASISDIR)" ] + then + echo '' + echo "[ERROR] OASISDIR is not defined" + exit 1 + fi + echo "link with oasis" + libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" + fi + fi + + # netcdf library dir + if [ "$netcdf_compile" = 'yes' ] + then + case $WWATCH3_NETCDF in + NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; + NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi + libs="$libs `$NETCDF_CONFIG --flibs`" ;; + esac + fi + + # parmetis library + if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] + then + if [ "$pdlib_mod" = 'yes' ] + then + if [ -z "$(env | grep METIS_PATH)" ] + then + echo '' + echo "[ERROR] METIS_PATH is not defined" + exit 1 + fi + echo "link with parmetis" + libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" + fi + fi + + opt="$opt $EXTRA_LINK_OPTIONS" + +# 3.b Link + + rprfx="-Wl,-rpath," + rpath= + for path in $libs + do + if [ "${path:0:2}" = '-L' ] + then + rpath="$rpath ${rprfx}${path//-L/}" + fi + done + + $comp $opt $objects $libs $rpath > link.out 2> link.err + OK="$?" + +# --------------------------------------------------------------------------- # +# 4. Postprocessing # +# --------------------------------------------------------------------------- # + + if [ "$OK" != '0' ] + then + echo " *** error in linking ***" + echo ' ' + cat link.out + echo ' ' + cat link.err + echo ' ' + rm -f link.??? + rm -f $prog + exit $OK + else + if [ ! -f $prog ] + then + echo " *** program $prog not found ***" + echo ' ' + cat link.out + echo ' ' + cat link.err + echo ' ' + rm -f link.??? + exit 1 + else + mv $prog $main_dir/exe/. + rm -f link.??? + fi + fi + +# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.cray_xc.GNU_debug b/model/bin/link.cray_xc.GNU_debug new file mode 100755 index 0000000000..6f496a65e3 --- /dev/null +++ b/model/bin/link.cray_xc.GNU_debug @@ -0,0 +1,197 @@ +#!/bin/bash +# --------------------------------------------------------------------------- # +# link : Linker script for use in make (customized for hardware and # +# optimization. Note that this script will not be replaced if part # +# of WAVEWATCH III is re-installed. # +# # +# use : link name [name ... ] # +# name: name of source code file without the extension. # +# the first name will become the program name. # +# # +# error codes : all error output directly to screen. # +# # +# remarks : # +# # +# - Upon (first) installation of WAVEWATCH III the user needs to check the # +# following parts of this scripts : # +# sec. 3 : Provide correct link command # +# # +# - This version is made for the GNU compilers on any architecture. # +# # +# Timothy J. Campbell # +# October 2009 # +# --------------------------------------------------------------------------- # +# 1. Preparations # +# --------------------------------------------------------------------------- # +# 1.a Check and process input + + if [ "$#" -lt '1' ] + then + echo "usage: link name [name]" ; exit 1 + fi + + prog=$1 + echo " Linking $prog" + input="$*" + +# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - + + source $(dirname $0)/w3_setenv + main_dir=$WWATCH3_DIR + temp_dir=$WWATCH3_TMP + source=$WWATCH3_SOURCE + list=$WWATCH3_LIST + + +# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + rm -f $main_dir/exe/$prog + +# --------------------------------------------------------------------------- # +# 2. Check objects # +# --------------------------------------------------------------------------- # + + cd $main_dir/obj + objects=$NULL + error='n' + set $input + + while [ "$#" -gt '0' ] + do + file=$1.o + if [ -f "$file" ] + then + objects="$objects $file" + else + echo " *** file $file not found ***" + error='y' + fi + shift + done + if [ "$error" = 'y' ] + then + echo "*** Missing object files ***" + exit 3 + fi + +# --------------------------------------------------------------------------- # +# 3. Link all things # +# --------------------------------------------------------------------------- # +# Add here the correct linker call including switches + +# 3.a Build options and determine compiler name +# No GRIB libraries for this one + + # linking options + libs="" +# libs="-L/opt/local/lib -L$HOME/g2lib -lg2 -lw3 -lpng -ljasper" + opt="-o $prog" + + # mpi implementation + if [ "$mpi_mod" = 'yes' ] + then + comp=mpif90 + else + comp=gfortran + fi + + # open mpi implementation + if [ "$omp_mod" = 'yes' ] + then + opt="$opt -fopenmp" + fi + + # oasis coupler archive + if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ + [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ + [ "$prog" = 'ww3_gspl' ] + then + if [ "$oasis_mod" = 'yes' ] + then + if [ -z "$(env | grep OASISDIR)" ] + then + echo '' + echo "[ERROR] OASISDIR is not defined" + exit 1 + fi + echo "link with oasis" + libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" + fi + fi + + # netcdf library dir + if [ "$netcdf_compile" = 'yes' ] + then + case $WWATCH3_NETCDF in + NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; + NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi + libs="$libs `$NETCDF_CONFIG --flibs`" ;; + esac + fi + + # parmetis library + if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] + then + if [ "$pdlib_mod" = 'yes' ] + then + if [ -z "$(env | grep METIS_PATH)" ] + then + echo '' + echo "[ERROR] METIS_PATH is not defined" + exit 1 + fi + echo "link with parmetis" + libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" + fi + fi + + opt="$opt $EXTRA_LINK_OPTIONS" + +# 3.b Link + + rprfx="-Wl,-rpath," + rpath= + for path in $libs + do + if [ "${path:0:2}" = '-L' ] + then + rpath="$rpath ${rprfx}${path//-L/}" + fi + done + + $comp $opt $objects $libs $rpath > link.out 2> link.err + OK="$?" + +# --------------------------------------------------------------------------- # +# 4. Postprocessing # +# --------------------------------------------------------------------------- # + + if [ "$OK" != '0' ] + then + echo " *** error in linking ***" + echo ' ' + cat link.out + echo ' ' + cat link.err + echo ' ' + rm -f link.??? + rm -f $prog + exit $OK + else + if [ ! -f $prog ] + then + echo " *** program $prog not found ***" + echo ' ' + cat link.out + echo ' ' + cat link.err + echo ' ' + rm -f link.??? + exit 1 + else + mv $prog $main_dir/exe/. + rm -f link.??? + fi + fi + +# end of link --------------------------------------------------------------- # diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 62f33b3118..7cf2af4b0a 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -797,6 +797,17 @@ ODAT(28) = MAX ( 0 , ODAT(28) ) ODAT(33) = MAX ( 0 , ODAT(33) ) ODAT(38) = MAX ( 0 , ODAT(38) ) +! +!/COU ! Test the validity of the coupling time step +!/COU IF (ODAT(33) == 0) THEN +!/COU IF ( IAPROC .EQ. NAPOUT ) THEN +!/COU WRITE(NDSO,1010) ODAT(33), INT(DTMAX) +!/COU END IF +!/COU ODAT(33) = INT(DTMAX) +!/COU ELSE IF (MOD(ODAT(33),INT(DTMAX)) .NE. 0) THEN +!/COU GOTO 2009 +!/COU END IF +! ! 2.5 Output types NPTS = 0 @@ -1638,14 +1649,6 @@ TTIME(1) = 0 TTIME(2) = 0 DTTST = REAL ( ODAT(5*(J-1)+3) ) -!/COU ! Force coupling time step to model time step -!/COU IF ( J .EQ. 7 .AND. DTTST.NE.DTMAX ) THEN -!/COU IF ( IAPROC .EQ. NAPOUT ) THEN -!/COU WRITE (NDSO,1009) DTTST, DTMAX -!/COU END IF -!/COU ODAT(5*(J-1)+3) = INT(DTMAX) -!/COU DTTST = DTMAX -!/COU END IF CALL TICK21 ( TTIME , DTTST ) CALL STME21 ( TTIME , DTME21 ) IF ( ( ODAT(5*(J-1)+1) .NE. ODAT(5*(J-1)+4) .OR. & @@ -2411,6 +2414,9 @@ 2008 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1008) IERR CALL EXTCDE ( 1008 ) +!/COU 2009 CONTINUE +!/COU IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1009) ODAT(33), NINT(DTMAX) +!/COU CALL EXTCDE ( 1009 ) ! 2054 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1054) @@ -2550,10 +2556,13 @@ 1008 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & ' ERROR IN OPENING OUTPUT FILE'/ & ' IOSTAT =',I5/) - 1009 FORMAT (/' *** WAVEWATCH III WARNING IN W3SHEL : *** '/ & - ' COUPLING AND MODEL TIME STEPS NOT CONSISTENT'/ & - ' IT WILL OVERWRITE COUPLING TIME STEP'/ & - ' FROM ',F4.1, ' TO ',F4.1/) +!/COU 1009 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & +!/COU ' COUPLING TIME STEP NOT MULTIPLE OF'/ & +!/COU ' MODEL TIME STEP: ',I6, I6/) +!/COU 1010 FORMAT (/' *** WAVEWATCH III WARNING IN W3SHEL : *** '/ & +!/COU ' COUPLING TIME STEP NOT DEFINED, '/ & +!/COU ' IT WILL BE OVERRIDEN TO DEFAULT VALUE'/ & +!/COU ' FROM ',I6, ' TO ',I6/) 1054 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & ' POINT OUTPUT ACTIVATED BUT NO POINTS DEFINED'/) ! diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index f424e85b0b..af5039f392 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -31,7 +31,7 @@ prop1D prop2D time fetch hur1mg \ multi01 multi02 multi03 multi04 multi05 \ hybd shwtr unstr pdlib smcgr mudice infgrv \ - uost assim multi06 multi07 multi08 + uost assim coup multi06 multi07 multi08 do eval " value=\$$par" # echo "$par = $value" @@ -84,7 +84,8 @@ echo " echo ' Multi 06 (curv. + reg. grds) : $multi06'" >> matrix.head echo " echo ' Multi 07 (unstr. + reg. grds) : $multi07'" >> matrix.head echo " echo ' Multi 08 (with ice) : $multi08'" >> matrix.head - echo " echo ' Assim Update of the restart file : $assim'" >> matrix.head + echo " echo ' Assim Update of the restart file : $assim'" >> matrix.head + echo " echo ' Atmosphere, ocean, and ice coupling: $coup'" >> matrix.head echo " echo ' '" >> matrix.head if [ -n "$filter" ] then @@ -2002,6 +2003,13 @@ echo "$rtst -s ST4 -w work_UPD6_U_cap -i input_UPD6_U_cap $ww3 ww3_ta1" >> matrix.body fi + #Test of atmosphere, ocean, and ice coupling + if [ "$coup" = 'y' ] + then + echo ' ' >> matrix.body + echo "$rtst -s OASACM -w work_OASACM -C OASIS -i input_OASACM $ww3 ww3_tp2.14" >> matrix.body + fi + # --------------------------------------------------------------------------- # # 3. End of script output # # --------------------------------------------------------------------------- # diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index f8b68daf65..e3134fa563 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -138,6 +138,7 @@ export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export coup='y' # Atmosphere, ocean, and ice coupling export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index ab7d649132..dea0a7da6b 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -154,6 +154,7 @@ fi export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export coup='y' # Atmosphere, ocean, and ice coupling export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray index f40eec1178..848afa9377 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -122,6 +122,7 @@ fi export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export coup='y' # Atmosphere, ocean, and ice coupling export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) diff --git a/regtests/bin/matrix_zeus_HLT b/regtests/bin/matrix_zeus_HLT index 0949b201f0..b86adae919 100755 --- a/regtests/bin/matrix_zeus_HLT +++ b/regtests/bin/matrix_zeus_HLT @@ -99,6 +99,7 @@ export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update + export coup='y' # Atmosphere, ocean, and ice coupling export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) From b085a1a0dabe9374da311faea4cf8ce496caf602 Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Wed, 15 Jul 2020 19:09:16 +0100 Subject: [PATCH 02/13] Regtests for non-default oasis time step added, tested in ukmo_cray; minor bug fixes to coupled regtests --- model/bin/comp.cray_xc.GNU | 201 ----------- model/bin/comp.cray_xc.GNU_debug | 201 ----------- model/bin/link.cray_xc.GNU | 197 ---------- model/bin/link.cray_xc.GNU_debug | 197 ---------- model/ftn/ww3_shel.ftn | 4 + regtests/bin/matrix.base | 5 +- regtests/bin/matrix_ukmo_cray | 7 + .../ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 | 14 + .../ww3_tp2.14/input/TOYNAMELIST.nam.OASICM | 2 +- regtests/ww3_tp2.14/input/namcouple.OASACM2 | 135 +++++++ regtests/ww3_tp2.14/input/prep_env.sh | 6 +- regtests/ww3_tp2.14/input/switch_OASACM2 | 1 + .../ww3_tp2.14/input/ww3_shel_OASACM2.inp | 152 ++++++++ .../ww3_tp2.14/input/ww3_shel_OASACM2.nml | 337 ++++++++++++++++++ 14 files changed, 659 insertions(+), 800 deletions(-) delete mode 100755 model/bin/comp.cray_xc.GNU delete mode 100755 model/bin/comp.cray_xc.GNU_debug delete mode 100755 model/bin/link.cray_xc.GNU delete mode 100755 model/bin/link.cray_xc.GNU_debug create mode 100755 regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 create mode 100755 regtests/ww3_tp2.14/input/namcouple.OASACM2 create mode 100755 regtests/ww3_tp2.14/input/switch_OASACM2 create mode 100755 regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp create mode 100644 regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml diff --git a/model/bin/comp.cray_xc.GNU b/model/bin/comp.cray_xc.GNU deleted file mode 100755 index 087f43c5b8..0000000000 --- a/model/bin/comp.cray_xc.GNU +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the GNU compilers on any architecture. # -# # -# Timothy J. Campbell # -# October 2009 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Gnu compiler on Linux ------------------------------------------------------ -# 2.b.1 Build options and determine compiler name -# Note that all but GrADS output is forced to big endian data - -# Notes re: changing compilers (important) -# ...1) run cleaner scrip to get rid of old .mod and .o files -# ...2) change switch or remove makefile to force creation of new makefile -# ...3) use -c {compiler name} in run_test - -# Gnu: -# -Idir : where to search for .mod files -# -Jdir or -Mdir : where to put .mod files - - # compilation options - opt="-c -O3 -fno-second-underscore -ffree-line-length-none -fconvert=big-endian -J$path_m" -# opt="$opt -I$HOME/g2lib -I/opt/local/include" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=gfortran - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -fopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/comp.cray_xc.GNU_debug b/model/bin/comp.cray_xc.GNU_debug deleted file mode 100755 index 3e8eb2c749..0000000000 --- a/model/bin/comp.cray_xc.GNU_debug +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# comp : Compiler script for use in ad3 (customized for hardware and # -# optimization). Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. Used by ad3. # -# # -# use : comp name # -# name: name of source code file without the extension. # -# # -# error codes : 1 : input error # -# 2 : no environment file $ww3_env found. # -# 3 : error in creating scratch directory. # -# 4 : w3adc error. # -# 5 : compiler error. # -# # -# remarks : # -# # -# - This script runs from the scratch directory, where it should remain. # -# # -# - For this script to interact with ad3, it needs to generate / leave # -# following files : # -# $name.f90 : Source code (generated by ad3). # -# $name.o : Object module. # -# $name.l : Listing file. # -# comp.stat.$name : status file of compiler, containing number of errors # -# and number of warnings (generated by comp). # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this script : # -# sec. 2.b : Provide correct compiler/options. # -# sec. 3.a : Provide correct error capturing. # -# sec. 3.d : Remove unnecessary files. # -# # -# - This version is made for the GNU compilers on any architecture. # -# # -# Timothy J. Campbell # -# October 2009 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" != '1' ] - then - echo "usage: comp name" ; exit 1 - fi - name="$1" - -# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $name.l - rm -f $name.o - rm -f comp.stat.$name - -# --------------------------------------------------------------------------- # -# 2. Compile # -# --------------------------------------------------------------------------- # -# Add here the correct compiler call including command line options -# Note: - do not invoke a link step -# - if possible, generate a listing $name.l -# - make sure the compiler point to the proper directory where the -# modules are stored ($m_path), see examples below. - -# 2.a Determine file extension - - - - - - - - - - - - - - - - - - - - - - - - -# .f90 assumes free format, .f assumes fixed format, change if necessary -# *** file extension (fext) is set and exported by calling program (ad3) *** - -# 2.b Perform compilation - - - - - - - - - - - - - - - - - - - - - - - - - - -# Save compiler exit code in $OK -# -# Gnu compiler on Linux ------------------------------------------------------ -# 2.b.1 Build options and determine compiler name -# Note that all but GrADS output is forced to big endian data - -# Notes re: changing compilers (important) -# ...1) run cleaner scrip to get rid of old .mod and .o files -# ...2) change switch or remove makefile to force creation of new makefile -# ...3) use -c {compiler name} in run_test - -# Gnu: -# -Idir : where to search for .mod files -# -Jdir or -Mdir : where to put .mod files - - # compilation options - opt="-c -g -O0 -fbounds-check -fbacktrace -fno-second-underscore -ffree-line-length-none -fconvert=big-endian -J$path_m" -# opt="$opt -I$HOME/g2lib -I/opt/local/include" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=gfortran - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -fopenmp" - fi - - # oasis coupler include dir - if [ "$oasis_mod" = 'yes' ] - then - opt="$opt -I$OASISDIR/build/lib/psmile.MPI1" - fi - - # netcdf include dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) opt="$opt -I$NETCDF_INCDIR" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - opt="$opt -I`$NETCDF_CONFIG --includedir`" ;; - esac - fi - - # ftn include dir - opt="$opt -I$path_i" - opt="$opt $ESMF_F90COMPILEPATHS" - opt="$opt $EXTRA_COMP_OPTIONS" - -# 2.b.2 Compile - - $comp $opt $name.$fext > $name.out 2> $name.err - OK="$?" - -# 2.b.2 Process listing - - if [ -s $name.lst ] - then - mv $name.lst $name.l - fi - -# 2.b.3 Add test output to listing for later viewing - - if [ -s $name.l ] - then - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l 2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l 2> /dev/null - echo '------------' >> $name.l - fi - -# --------------------------------------------------------------------------- # -# 3. Postprocessing # -# --------------------------------------------------------------------------- # -# 3.a Capture errors -# nr_err : number of errors. -# nr_war : number of errors. - - nr_err='0' - nr_war='0' - - if [ -s $name.err ] - then - nr_err=`grep 'error' $name.err | wc -l | awk '{ print $1 }'` - nr_war=`grep 'warning' $name.err | wc -l | awk '{ print $1 }'` - else - if [ "$OK" != '0' ] - then - nr_err='1' - fi - fi - -# 3.b Make file comp.stat.$name - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "ERROR $nr_err" > comp.stat.$name - echo "WARNING $nr_war" >> comp.stat.$name - -# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# if compiler does not provide listing, make listing from source code -# and compiler messages. Second input line for w3list identifies if -# comment lines are to be numbered. - - if [ ! -f $name.l ] - then - echo "$name.$fext" > w3list.inp - echo "T" >> w3list.inp - w3list < w3list.inp 2> /dev/null - rm -f w3list.inp - mv w3list.out $name.l - echo '------------' >> $name.l - echo "$comp $opt" >> $name.l - echo '------------' >> $name.l - cat $name.out >> $name.l #2> /dev/null - echo '------------' >> $name.l - cat $name.err >> $name.l #2> /dev/null - echo '------------' >> $name.l - fi - -# 3.d Remove unwanted files - - - - - - - - - - - - - - - - - - - - - - - - - -# include here unwanted files generated by the compiler - -# rm -f $name.out -# rm -f $name.err - -# end of comp --------------------------------------------------------------- # diff --git a/model/bin/link.cray_xc.GNU b/model/bin/link.cray_xc.GNU deleted file mode 100755 index 6f496a65e3..0000000000 --- a/model/bin/link.cray_xc.GNU +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the GNU compilers on any architecture. # -# # -# Timothy J. Campbell # -# October 2009 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" -# libs="-L/opt/local/lib -L$HOME/g2lib -lg2 -lw3 -lpng -ljasper" - opt="-o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=gfortran - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -fopenmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/bin/link.cray_xc.GNU_debug b/model/bin/link.cray_xc.GNU_debug deleted file mode 100755 index 6f496a65e3..0000000000 --- a/model/bin/link.cray_xc.GNU_debug +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- # -# link : Linker script for use in make (customized for hardware and # -# optimization. Note that this script will not be replaced if part # -# of WAVEWATCH III is re-installed. # -# # -# use : link name [name ... ] # -# name: name of source code file without the extension. # -# the first name will become the program name. # -# # -# error codes : all error output directly to screen. # -# # -# remarks : # -# # -# - Upon (first) installation of WAVEWATCH III the user needs to check the # -# following parts of this scripts : # -# sec. 3 : Provide correct link command # -# # -# - This version is made for the GNU compilers on any architecture. # -# # -# Timothy J. Campbell # -# October 2009 # -# --------------------------------------------------------------------------- # -# 1. Preparations # -# --------------------------------------------------------------------------- # -# 1.a Check and process input - - if [ "$#" -lt '1' ] - then - echo "usage: link name [name]" ; exit 1 - fi - - prog=$1 - echo " Linking $prog" - input="$*" - -# 1.b Get data from setup file - - - - - - - - - - - - - - - - - - - - - - - - - - source $(dirname $0)/w3_setenv - main_dir=$WWATCH3_DIR - temp_dir=$WWATCH3_TMP - source=$WWATCH3_SOURCE - list=$WWATCH3_LIST - - -# 1.c Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f $main_dir/exe/$prog - -# --------------------------------------------------------------------------- # -# 2. Check objects # -# --------------------------------------------------------------------------- # - - cd $main_dir/obj - objects=$NULL - error='n' - set $input - - while [ "$#" -gt '0' ] - do - file=$1.o - if [ -f "$file" ] - then - objects="$objects $file" - else - echo " *** file $file not found ***" - error='y' - fi - shift - done - if [ "$error" = 'y' ] - then - echo "*** Missing object files ***" - exit 3 - fi - -# --------------------------------------------------------------------------- # -# 3. Link all things # -# --------------------------------------------------------------------------- # -# Add here the correct linker call including switches - -# 3.a Build options and determine compiler name -# No GRIB libraries for this one - - # linking options - libs="" -# libs="-L/opt/local/lib -L$HOME/g2lib -lg2 -lw3 -lpng -ljasper" - opt="-o $prog" - - # mpi implementation - if [ "$mpi_mod" = 'yes' ] - then - comp=mpif90 - else - comp=gfortran - fi - - # open mpi implementation - if [ "$omp_mod" = 'yes' ] - then - opt="$opt -fopenmp" - fi - - # oasis coupler archive - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] || \ - [ "$prog" = 'ww3_prnc' ] || [ "$prog" = 'ww3_prep' ] || [ "$prog" = 'ww3_prtide' ] || \ - [ "$prog" = 'ww3_gspl' ] - then - if [ "$oasis_mod" = 'yes' ] - then - if [ -z "$(env | grep OASISDIR)" ] - then - echo '' - echo "[ERROR] OASISDIR is not defined" - exit 1 - fi - echo "link with oasis" - libs="$libs $OASISDIR/lib/libpsmile.MPI1.a $OASISDIR/lib/libmct.a $OASISDIR/lib/libmpeu.a $OASISDIR/lib/libscrip.a" - fi - fi - - # netcdf library dir - if [ "$netcdf_compile" = 'yes' ] - then - case $WWATCH3_NETCDF in - NC3) libs="$libs -L$NETCDF_LIBDIR -lnetcdf" ;; - NC4) if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi - libs="$libs `$NETCDF_CONFIG --flibs`" ;; - esac - fi - - # parmetis library - if [ "$prog" = 'ww3_shel' ] || [ "$prog" = 'ww3_multi' ] || [ "$prog" = 'ww3_sbs1' ] - then - if [ "$pdlib_mod" = 'yes' ] - then - if [ -z "$(env | grep METIS_PATH)" ] - then - echo '' - echo "[ERROR] METIS_PATH is not defined" - exit 1 - fi - echo "link with parmetis" - libs="$libs $METIS_PATH/lib/libparmetis.a $METIS_PATH/lib/libmetis.a" - fi - fi - - opt="$opt $EXTRA_LINK_OPTIONS" - -# 3.b Link - - rprfx="-Wl,-rpath," - rpath= - for path in $libs - do - if [ "${path:0:2}" = '-L' ] - then - rpath="$rpath ${rprfx}${path//-L/}" - fi - done - - $comp $opt $objects $libs $rpath > link.out 2> link.err - OK="$?" - -# --------------------------------------------------------------------------- # -# 4. Postprocessing # -# --------------------------------------------------------------------------- # - - if [ "$OK" != '0' ] - then - echo " *** error in linking ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - rm -f $prog - exit $OK - else - if [ ! -f $prog ] - then - echo " *** program $prog not found ***" - echo ' ' - cat link.out - echo ' ' - cat link.err - echo ' ' - rm -f link.??? - exit 1 - else - mv $prog $main_dir/exe/. - rm -f link.??? - fi - fi - -# end of link --------------------------------------------------------------- # diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 7cf2af4b0a..f113ee81d7 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -2414,6 +2414,7 @@ 2008 CONTINUE IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1008) IERR CALL EXTCDE ( 1008 ) +! !/COU 2009 CONTINUE !/COU IF ( IAPROC .EQ. NAPERR ) WRITE (NDSE,1009) ODAT(33), NINT(DTMAX) !/COU CALL EXTCDE ( 1009 ) @@ -2556,13 +2557,16 @@ 1008 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & ' ERROR IN OPENING OUTPUT FILE'/ & ' IOSTAT =',I5/) +! !/COU 1009 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & !/COU ' COUPLING TIME STEP NOT MULTIPLE OF'/ & !/COU ' MODEL TIME STEP: ',I6, I6/) +! !/COU 1010 FORMAT (/' *** WAVEWATCH III WARNING IN W3SHEL : *** '/ & !/COU ' COUPLING TIME STEP NOT DEFINED, '/ & !/COU ' IT WILL BE OVERRIDEN TO DEFAULT VALUE'/ & !/COU ' FROM ',I6, ' TO ',I6/) +! 1054 FORMAT (/' *** WAVEWATCH III ERROR IN W3SHEL : *** '/ & ' POINT OUTPUT ACTIVATED BUT NO POINTS DEFINED'/) ! diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index af5039f392..65f1d4c7af 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -2007,7 +2007,10 @@ if [ "$coup" = 'y' ] then echo ' ' >> matrix.body - echo "$rtst -s OASACM -w work_OASACM -C OASIS -i input_OASACM $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASACM -w work_OASACM -c $cmplr -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASACM2 -w work_OASACM2 -c $cmplr -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASOCM -w work_OASOCM -c $cmplr -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASICM -w work_OASICM -c $cmplr -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body fi # --------------------------------------------------------------------------- # diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray index 848afa9377..bf8edd2011 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -142,6 +142,13 @@ fi # 2. Execute matrix.base ... # # --------------------------------------------------------------------------- # +# Compiler configuration, required for coupling + if [ "$comp" == "GNU" ] ; then + export cmplr="ukmo_cray_gnu" + elif [ "$comp" == "CCE" ] ; then + export cmplr="ukmo_cray" + fi + $main_dir/../regtests/bin/matrix.base # --------------------------------------------------------------------------- # diff --git a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 new file mode 100755 index 0000000000..9b4b994b55 --- /dev/null +++ b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASACM2 @@ -0,0 +1,14 @@ +&NAM_OASIS IL_NB_TIME_STEPS=10, + DELTA_T=360, + DATA_FILENAME='grid_toy_model.nc' / + +&NAM_FCT_SEND CTYPE_FCT='FILES', + CNAME_FILE='toy_coupled_field.nc', + VALUE=10 / + +&NAM_RECV_FIELDS NB_RECV_FIELDS=1, + CRCVFIELDS(1)='TOY__CHA' / + +&NAM_SEND_FIELDS NB_SEND_FIELDS=2, + CSNDFIELDS(1)='TOY_U10M', + CSNDFIELDS(2)='TOY_V10M' / diff --git a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASICM b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASICM index 8913fbfcb3..278837a7b2 100755 --- a/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASICM +++ b/regtests/ww3_tp2.14/input/TOYNAMELIST.nam.OASICM @@ -10,6 +10,6 @@ CRCVFIELDS(1)='TOY_ICEF' / &NAM_SEND_FIELDS NB_SEND_FIELDS=3, - CSNDFIELDS(1)='TOY__IC1, + CSNDFIELDS(1)='TOY__IC1', CSNDFIELDS(2)='TOY__IC5', CSNDFIELDS(3)='TOY__ICE' / diff --git a/regtests/ww3_tp2.14/input/namcouple.OASACM2 b/regtests/ww3_tp2.14/input/namcouple.OASACM2 new file mode 100755 index 0000000000..e71c2ef85c --- /dev/null +++ b/regtests/ww3_tp2.14/input/namcouple.OASACM2 @@ -0,0 +1,135 @@ +# This is a typical input file for OASIS3-MCT. +# Keywords used in previous versions of OASIS3 +# but now obsolete are marked "Not used" +# Don't hesitate to ask precisions or make suggestions (oasishelp@cerfacs.fr). +# +# Any line beginning with # is ignored. Blank lines are not allowed. +# +######################################################################### + $NFIELDS +# The number of fields described in the second part of the namcouple. +# + 3 + $END +######################################################################### + $NBMODEL +# The number of models in this experiment + their names (6 characters) +# + 2 toyexe wwatch + $END +########################################################################### + $RUNTIME +# The total simulated time for this run in seconds +# + 3600 + $END +########################################################################### + $NLOGPRT +# The first (0 to 30) and second (0 to 3) numbers refer to the ammount of +# debug and time statistic information written by OASIS3-MCT for each model +# and processor (see user manual for more details) +# + 1 + $END +########################################################################### + $STRINGS +# +# The above variables are the general parameters for the experiment. +# Everything below has to do with the fields being exchanged. +# +# line 1: field in ww3 model, field in target model, unused, coupling +# period, number of transformation, restart file, field status +# line 2: nb of pts for ww3 grid without halo first dim, and second dim, +# for target grid first dim, and second dim (optionals, default=0), +# ww3 grid name, target grid name, lag index +# line 3: ww3 grid periodical (P) or regional (R), and nb of overlapping +# points, target grid periodical (P) or regional (R), and number of +# overlapping points +# line 4: list of transformations performed +# line 5: parameters for each transformation +# +# See the correspondances between WW3 and OASIS fields below: +# +# |--------------------------------------------------------------| +# | received fields by ww3 from Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_OWDH WW3_OWDU WW3_OWDV | +# | SSH | WW3__SSH | +# | CUR | WW3_OSSU WW3_OSSV | +# |--------------------------------------------------------------| +# | received fields by ww3 from Atmospheric model : WW3 | OASIS | +# --------------------------------------------------------------| +# | WND | WW3__U10 WW3__V10 | +# |--------------------------------------------------------------| +# | received fields by ww3 from Ice model : WW3 | OASIS | +# --------------------------------------------------------------| +# | ICE | WW3__ICE | +# | IC1 | WW3__IC1 | +# | IC5 | WW3__IC5 | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ocean model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | not defined | WW3_ODRY | +# | T0M1 | WW3_T0M1 | +# | HS | WW3__OHS | +# | DIR | WW3_CDIR WW3_SDIR | +# | BHD | WW3__BHD | +# | TWO | WW3_TWOX WW3_TWOY | +# | UBR | WW3__UBR | +# | FOC | WW3__FOC | +# | TAW | WW3_TAWX WW3_TAWY | +# | LM | WW3___LM | +# | OCHA | WW3_OCHA | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Atmospheric model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | CUR | WW3_WSSU WW3_WSSV | +# | ACHA | WW3_ACHA | +# | HS | WW3__AHS | +# | FP | WW3___FP | +# | FWS | WW3__FWS | +# |--------------------------------------------------------------| +# | sent fields by ww3 to Ice model : WW3 | OASIS | +# |--------------------------------------------------------------| +# | TWI | WW3_TWIX WW3_TWIY | +# | IC5 | WW3_ICEF | +# |--------------------------------------------------------------| +# +# +# +# ------------------------------------------ +# TOY (toyexe) ==> WW3 (wwatch) +# ------------------------------------------ +# +#~~~~~~~~~~~ +# Field 1 : +#~~~~~~~~~~~ +TOY_U10M WW3__U10 1 360 1 r-toy.nc EXPOUT +80 80 103 119 toyt ww3t LAG=+360 +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# +#~~~~~~~~~~~ +# Field 2 : +#~~~~~~~~~~~ +TOY_V10M WW3__V10 1 360 1 r-toy.nc EXPOUT +80 80 103 119 toyt ww3t LAG=+360 +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# +# ----------------------------------------- +# WW3 (wwatch) ==> TOY (toyexe) +# ----------------------------------------- +# +#~~~~~~~~~~~ +# Field 3 : +#~~~~~~~~~~~ +WW3_ACHA TOY__CHA 1 360 1 r-ww3.nc EXPOUT +103 119 80 80 ww3t toyt LAG=+360 +R 0 R 0 +SCRIPR +DISTWGT LR SCALAR LATLON 1 4 +# + $END diff --git a/regtests/ww3_tp2.14/input/prep_env.sh b/regtests/ww3_tp2.14/input/prep_env.sh index 6ec529958f..2fb8090070 100755 --- a/regtests/ww3_tp2.14/input/prep_env.sh +++ b/regtests/ww3_tp2.14/input/prep_env.sh @@ -36,7 +36,8 @@ then [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || \ [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ [ "$cmplr" == "zeus_pgi" ] || [ "$cmplr" == "zeus_pgi_debug" ] || \ - [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then + [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || \ + [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ] ; then source $WWATCH3_DIR/bin/cmplr.env # shortlist optl alloptl=( $optl ) @@ -52,9 +53,10 @@ then comp_mpi_exe="$(echo $comp_mpi | awk -F' ' '{print $1}')" # sed cmplr.tmpl sed -e "s//$optcs/" -e "s//$optls/" -e "s//$comp_mpi/" -e "s//$comp_mpi_exe/" cmplr.tmpl > cmplr + sed -i "s/icc/gcc/g" cmplr echo " sed cmplr.tmpl => cmplr" else - errmsg "cmplr.$cmplr not found" + echo "ERROR: cmplr.$cmplr not found" 2>&1 exit 1 fi chmod 775 cmplr diff --git a/regtests/ww3_tp2.14/input/switch_OASACM2 b/regtests/ww3_tp2.14/input/switch_OASACM2 new file mode 100755 index 0000000000..9fff33b21f --- /dev/null +++ b/regtests/ww3_tp2.14/input/switch_OASACM2 @@ -0,0 +1 @@ +F90 NOGRB NC4 TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT4 DB1 MLIM TR0 BS0 IC2 IS0 REF1 XX0 WNT0 WNX1 RWND CRT1 CRX1 COU OASIS OASACM O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp new file mode 100755 index 0000000000..262a905635 --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.inp @@ -0,0 +1,152 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shell input file $ +$ -------------------------------------------------------------------- $ +$ Define input to be used with F/T/C flag for use or nor or coupling and +$ T/F flag for definition as a homogeneous field. +$ +$ Include ice and mud parameters only if IC1/2/3/4 used : + F F Ice parameter 1 + F F Ice parameter 2 + F F Ice parameter 3 + F F Ice parameter 4 + F F Ice parameter 5 + F F Mud parameter 1 + F F Mud parameter 2 + F F Mud parameter 3 + F F Water levels + F F Currents + C F Winds + F Ice concentrations + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ +$ Time frame of calculations ----------------------------------------- $ +$ - Starting time in yyyymmdd hhmmss format. +$ - Ending time in yyyymmdd hhmmss format. +$ + 20110902 000000 + 20110902 010000 +$ +$ Define output data ------------------------------------------------- $ +$ +$ Define output server mode. This is used only in the parallel version +$ of the model. To keep the input file consistent, it is always needed. +$ IOSTYP = 1 is generally recommended. IOSTYP > 2 may be more efficient +$ for massively parallel computations. Only IOSTYP = 0 requires a true +$ parallel file system like GPFS. +$ +$ IOSTYP = 0 : No data server processes, direct access output from +$ each process (requires true parallel file system). +$ 1 : No data server process. All output for each type +$ performed by process that performs computations too. +$ 2 : Last process is reserved for all output, and does no +$ computing. +$ 3 : Multiple dedicated output processes. +$ + 1 +$ +$ Five output types are available (see below). All output types share +$ a similar format for the first input line: +$ - first time in yyyymmdd hhmmss format, output interval (s), and +$ last time in yyyymmdd hhmmss format (all integers). +$ Output is disabled by setting the output interval to 0. +$ +$ ------------------------------------------------------------------- $ +$ +$ Type 1 : Fields of mean wave parameters +$ Standard line and line with logical flags to activate output +$ fields as defined in section 2.4 of the manual. The logical +$ flags are not supplied if no output is requested. The logical +$ flags can be placed on multiple consecutive lines. However, +$ the total number and order of the logical flags is fixed. +$ The raw data file is out_grd.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 180 20110902 010000 +$---------------------------------------------------------------- +$ Output request flags identifying fields. +$ +N +$ +HS FP DIR DP CHA UST DPT CUR WND +$ +$---------------------------------------------------------------- +$ +$ Type 2 : Point output +$ Standard line and a number of lines identifying the +$ longitude, latitude and name (C*10) of output points. +$ The list is closed by defining a point with the name +$ 'STOPSTRING'. No point info read if no point output is +$ requested (i.e., no 'STOPSTRING' needed). +$ The raw data file is out_pnt.ww3, +$ see w3iogo.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ -4.97 48.29 '62069' +$ -6.00 48.29 'Boundary' +$ 0.0 0.0 'STOPSTRING' +$ +$ +$ Type 3 : Output along track. +$ Flag for formatted input file. +$ The data files are track_i.ww3 and +$ track_o.ww3, see w3iotr.ftn for ad. doc. +$ + 20110902 000000 0 20110902 020000 +$ T +$ +$ Type 4 : Restart files (no additional data required). +$ The data file is restartN.ww3, see +$ w3iors.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ +$ Type 5 : Boundary data (no additional data required). +$ The data file is nestN.ww3, see +$ w3iobcmd.ftn for additional doc. +$ + 20110902 000000 0 20110902 020000 +$ +$ Type 6 : Separated wave field data (dummy for now). +$ First, last step IX and IY, flag for formatted file +$ + 20110902 000000 0 20110902 020000 +$ 0 999 1 0 999 1 T +$ +$ Type 7 : Coupling. (must be fully commented if not used with switch COU) +$ Namelist type selection is used here. +$ Diagnostic fields to exchange. (see namcouple for more information) +$ + 20110902 000000 360 20110902 010000 + N +$ +$ - Sent fields by ww3: +$ - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +$ - Atmospheric model : ACHA AHS TP (or FP) FWS +$ - Ice model : IC5 TWI +$ + ACHA +$ +$ - Received fields by ww3: +$ - Ocean model : SSH CUR +$ - Atmospheric model : WND +$ - Ice model : ICE IC1 IC5 +$ + WND +$ +$ Homogeneous field data --------------------------------------------- $ +$ Homogeneous fields can be defined by a list of lines containing an ID +$ string 'LEV' 'CUR' 'WND', date and time information (yyyymmdd +$ hhmmss), value (S.I. units), direction (current and wind, oceanogr. +$ convention degrees)) and air-sea temperature difference (degrees C). +$ 'STP' is mandatory stop string. +$ Also defined here are the speed with which the grid is moved +$ continuously, ID string 'MOV', parameters as for 'CUR'. +$ +$ 'CUR' 20110902 000000 2.0 25. + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml new file mode 100644 index 0000000000..c4cbbe6e9d --- /dev/null +++ b/regtests/ww3_tp2.14/input/ww3_shel_OASACM2.nml @@ -0,0 +1,337 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_shel.nml - single-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * IOSTYP defines the output server mode for parallel implementation. +! 0 : No data server processes, direct access output from +! each process (requires true parallel file system). +! 1 : No data server process. All output for each type +! performed by process that performs computations too. +! 2 : Last process is reserved for all output, and does no +! computing. +! 3 : Multiple dedicated output processes. +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%IOSTYP = 1 ! Output server type +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680607 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '20110902 000000' + DOMAIN%STOP = '20110902 010000' +/ + +! -------------------------------------------------------------------- ! +! Define each forcing via the INPUT_NML namelist +! +! * The FORCING flag can be : 'F' for "no forcing" +! 'T' for "external forcing file" +! 'H' for "homogeneous forcing input" +! 'C' for "coupled forcing field" +! +! * homogeneous forcing is not available for ICE_CONC +! +! * The ASSIM flag can : 'F' for "no forcing" +! 'T' for "external forcing file" +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT%FORCING%WATER_LEVELS = 'F' +! INPUT%FORCING%CURRENTS = 'F' +! INPUT%FORCING%WINDS = 'F' +! INPUT%FORCING%ICE_CONC = 'F' +! INPUT%FORCING%ICE_PARAM1 = 'F' +! INPUT%FORCING%ICE_PARAM2 = 'F' +! INPUT%FORCING%ICE_PARAM3 = 'F' +! INPUT%FORCING%ICE_PARAM4 = 'F' +! INPUT%FORCING%ICE_PARAM5 = 'F' +! INPUT%FORCING%MUD_DENSITY = 'F' +! INPUT%FORCING%MUD_THICKNESS = 'F' +! INPUT%FORCING%MUD_VISCOSITY = 'F' +! INPUT%ASSIM%MEAN = 'F' +! INPUT%ASSIM%SPEC1D = 'F' +! INPUT%ASSIM%SPEC2D = 'F' +! -------------------------------------------------------------------- ! +&INPUT_NML + INPUT%FORCING%WINDS = 'C' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the full list of field names is : +! All parameters listed below are available in output file of the types +! ASCII and NetCDF. If selected output file types are grads or grib, +! some parameters may not be available. The first two columns in the +! table below identify such cases by flags, cols 1 (GRB) and 2 (GXO) +! refer to grib (ww3_grib) and grads (gx_outf), respectively. +! +! Columns 3 and 4 provide group and parameter numbers per group. +! Columns 5, 6 and 7 provide: +! 5 - code name (internal) +! 6 - output tags (names used is ASCII file extensions, NetCDF +! variable names and namelist-based selection +! 7 - Long parameter name/definition +! +! G G +! R X Grp Param Code Output Parameter/Group +! B O Numb Numbr Name Tag Definition +! -------------------------------------------------- +! 1 Forcing Fields +! ------------------------------------------------- +! T T 1 1 DW DPT Water depth. +! T T 1 2 C[X,Y] CUR Current velocity. +! T T 1 3 UA WND Wind speed. +! T T 1 4 AS AST Air-sea temperature difference. +! T T 1 5 WLV WLV Water levels. +! T T 1 6 ICE ICE Ice concentration. +! T T 1 7 IBG IBG Iceberg-induced damping. +! T T 1 8 D50 D50 Median sediment grain size. +! T T 1 9 IC1 IC1 Ice thickness. +! T T 1 10 IC5 IC5 Ice flow diameter. +! ------------------------------------------------- +! 2 Standard mean wave Parameters +! ------------------------------------------------- +! T T 2 1 HS HS Wave height. +! T T 2 2 WLM LM Mean wave length. +! T T 2 3 T02 T02 Mean wave period (Tm0,2). +! T T 2 4 TM10 TM10 Mean wave period (Tm-1,0). +! T T 2 5 T01 T01 Mean wave period (Tm0,1). +! T T 2 6 FP0 FP Peak frequency. +! T T 2 7 THM DIR Mean wave direction. +! T T 2 8 THS SPR Mean directional spread. +! T T 2 9 THP0 DP Peak direction. +! T T 2 10 HIG HIG Infragravity height +! T T 2 11 STMAXE MXE Max surface elev (STE) +! T T 2 12 STMAXD MXES St Dev of max surface elev (STE) +! T T 2 13 HMAXE MXH Max wave height (STE) +! T T 2 14 HCMAXE MXHC Max wave height from crest (STE) +! T T 2 15 HMAXD SDMH St Dev of MXC (STE) +! T T 2 16 HCMAXD SDMHC St Dev of MXHC (STE) +! F T 2 17 WBT WBT Domiant wave breaking probability bT +! ------------------------------------------------- +! 3 Spectral Parameters (first 5) +! ------------------------------------------------- +! F F 3 1 EF EF Wave frequency spectrum +! F F 3 2 TH1M TH1M Mean wave direction from a1,b2 +! F F 3 3 STH1M STH1M Directional spreading from a1,b2 +! F F 3 4 TH2M TH2M Mean wave direction from a2,b2 +! F F 3 5 STH2M STH2M Directional spreading from a2,b2 +! F F 3 6 WN WN Wavenumber array +! ------------------------------------------------- +! 4 Spectral Partition Parameters +! ------------------------------------------------- +! T T 4 1 PHS PHS Partitioned wave heights. +! T T 4 2 PTP PTP Partitioned peak period. +! T T 4 3 PLP PLP Partitioned peak wave length. +! T T 4 4 PDIR PDIR Partitioned mean direction. +! T T 4 5 PSI PSPR Partitioned mean directional spread. +! T T 4 6 PWS PWS Partitioned wind sea fraction. +! T T 4 7 PTHP0 PDP Peak wave direction of partition. +! T T 4 8 PQP PQP Goda peakdedness parameter of partition. +! T T 4 9 PPE PPE JONSWAP peak enhancement factor of partition. +! T T 4 10 PGW PGW Gaussian frequency width of partition. +! T T 4 11 PSW PSW Spectral width of partition. +! T T 4 12 PTM1 PTM10 Mean wave period (Tm-1,0) of partition. +! T T 4 13 PT1 PT01 Mean wave period (Tm0,1) of partition. +! T T 4 14 PT2 PT02 Mean wave period (Tm0,2) of partition. +! T T 4 15 PEP PEP Peak spectral density of partition. +! T T 4 16 PWST TWS Total wind sea fraction. +! T T 4 17 PNR PNR Number of partitions. +! ------------------------------------------------- +! 5 Atmosphere-waves layer +! ------------------------------------------------- +! T T 5 1 UST UST Friction velocity. +! F T 5 2 CHARN CHA Charnock parameter +! F T 5 3 CGE CGE Energy flux +! F T 5 4 PHIAW FAW Air-sea energy flux +! F T 5 5 TAUWI[X,Y] TAW Net wave-supported stress +! F T 5 6 TAUWN[X,Y] TWA Negative part of the wave-supported stress +! F F 5 7 WHITECAP WCC Whitecap coverage +! F F 5 8 WHITECAP WCF Whitecap thickness +! F F 5 9 WHITECAP WCH Mean breaking height +! F F 5 10 WHITECAP WCM Whitecap moment +! F F 5 11 FWS FWS Wind sea mean period +! ------------------------------------------------- +! 6 Wave-ocean layer +! ------------------------------------------------- +! F F 6 1 S[XX,YY,XY] SXY Radiation stresses. +! F F 6 2 TAUO[X,Y] TWO Wave to ocean momentum flux +! F F 6 3 BHD BHD Bernoulli head (J term) +! F F 6 4 PHIOC FOC Wave to ocean energy flux +! F F 6 5 TUS[X,Y] TUS Stokes transport +! F F 6 6 USS[X,Y] USS Surface Stokes drift +! F F 6 7 [PR,TP]MS P2S Second-order sum pressure +! F F 6 8 US3D USF Spectrum of surface Stokes drift +! F F 6 9 P2SMS P2L Micro seism source term +! F F 6 10 TAUICE TWI Wave to sea ice stress +! F F 6 11 PHICE FIC Wave to sea ice energy flux +! ------------------------------------------------- +! 7 Wave-bottom layer +! ------------------------------------------------- +! F F 7 1 ABA ABR Near bottom rms amplitides. +! F F 7 2 UBA UBR Near bottom rms velocities. +! F F 7 3 BEDFORMS BED Bedforms +! F F 7 4 PHIBBL FBB Energy flux due to bottom friction +! F F 7 5 TAUBBL TBB Momentum flux due to bottom friction +! ------------------------------------------------- +! 8 Spectrum parameters +! ------------------------------------------------- +! F F 8 1 MSS[X,Y] MSS Mean square slopes +! F F 8 2 MSC[X,Y] MSC Spectral level at high frequency tail +! F F 8 3 WL02[X,Y] WL02 East/X North/Y mean wavelength compon +! F F 8 4 ALPXT AXT Correl sea surface gradients (x,t) +! F F 8 5 ALPYT AYT Correl sea surface gradients (y,t) +! F F 8 6 ALPXY AXY Correl sea surface gradients (x,y) +! ------------------------------------------------- +! 9 Numerical diagnostics +! ------------------------------------------------- +! T T 9 1 DTDYN DTD Average time step in integration. +! T T 9 2 FCUT FC Cut-off frequency. +! T T 9 3 CFLXYMAX CFX Max. CFL number for spatial advection. +! T T 9 4 CFLTHMAX CFD Max. CFL number for theta-advection. +! F F 9 5 CFLKMAX CFK Max. CFL number for k-advection. +! ------------------------------------------------- +! 10 User defined +! ------------------------------------------------- +! F F 10 1 U1 User defined #1. (requires coding ...) +! F F 10 2 U2 User defined #1. (requires coding ...) +! ------------------------------------------------- +! +! Section 4 consist of a set of fields, index 0 = wind sea, index +! 1:NOSWLL are first NOSWLL swell fields. +! +! +! * output track file formatted (T) or unformated (F) +! +! * coupling fields exchanged list is : +! - Sent fields by ww3: +! - Ocean model : T0M1 OCHA OHS DIR BHD TWO UBR FOC TAW TUS USS LM DRY +! - Atmospheric model : ACHA AHS TP (or FP) FWS +! - Ice model : IC5 TWI +! - Received fields by ww3: +! - Ocean model : SSH CUR +! - Atmospheric model : WND +! - Ice model : ICE IC1 IC5 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TYPE%FIELD%LIST = 'unset' +! TYPE%POINT%FILE = 'points.list' +! TYPE%TRACK%FORMAT = T +! TYPE%PARTITION%X0 = 0 +! TYPE%PARTITION%XN = 0 +! TYPE%PARTITION%NX = 0 +! TYPE%PARTITION%Y0 = 0 +! TYPE%PARTITION%YN = 0 +! TYPE%PARTITION%NY = 0 +! TYPE%PARTITION%FORMAT = T +! TYPE%COUPLING%SENT = 'unset' +! TYPE%COUPLING%RECEIVED = 'unset' +! +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + TYPE%FIELD%LIST = 'HS FP DIR DP CHA UST DPT CUR WND' + TYPE%COUPLING%SENT = 'ACHA' + TYPE%COUPLING%RECEIVED = 'WND' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * start and stop times are with format 'yyyymmdd hhmmss' +! * if time stride is equal '0', then output is disabled +! * time stride is given in seconds +! +! * namelist must be terminated with / +! * definitions & defaults: +! DATE%FIELD%START = '19680606 000000' +! DATE%FIELD%STRIDE = '0' +! DATE%FIELD%STOP = '19680607 000000' +! DATE%POINT%START = '19680606 000000' +! DATE%POINT%STRIDE = '0' +! DATE%POINT%STOP = '19680607 000000' +! DATE%TRACK%START = '19680606 000000' +! DATE%TRACK%STRIDE = '0' +! DATE%TRACK%STOP = '19680607 000000' +! DATE%RESTART%START = '19680606 000000' +! DATE%RESTART%STRIDE = '0' +! DATE%RESTART%STOP = '19680607 000000' +! DATE%BOUNDARY%START = '19680606 000000' +! DATE%BOUNDARY%STRIDE = '0' +! DATE%BOUNDARY%STOP = '19680607 000000' +! DATE%PARTITION%START = '19680606 000000' +! DATE%PARTITION%STRIDE = '0' +! DATE%PARTITION%STOP = '19680607 000000' +! DATE%COUPLING%START = '19680606 000000' +! DATE%COUPLING%STRIDE = '0' +! DATE%COUPLING%STOP = '19680607 000000' +! +! DATE%RESTART = '19680606 000000' '0' '19680607 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + DATE%FIELD = '20110902 000000' '180' '20110902 010000' + DATE%COUPLING = '20110902 000000' '360' '20110902 010000' +/ + +! -------------------------------------------------------------------- ! +! Define homogeneous input via HOMOG_COUNT_NML and HOMOG_INPUT_NML namelist +! +! * the number of each homogeneous input is defined by HOMOG_COUNT +! * the total number of homogeneous input is automatically calculated +! * the homogeneous input must start from index 1 to N +! * if VALUE1 is equal 0, then the homogeneous input is desactivated +! * NAME can be IC1, IC2, IC3, IC4, IC5, MDN, MTH, MVS, LEV, CUR, WND, ICE, MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - IC1 is defined by thickness +! - IC2 is defined by viscosity +! - IC3 is defined by density +! - IC4 is defined by modulus +! - IC5 is defined by floe diameter +! - MDN is defined by density +! - MTH is defined by thickness +! - MVS is defined by viscosity +! - LEV is defined by height +! - CUR is defined by speed and direction +! - WND is defined by speed, direction and airseatemp +! - ICE is defined by concentration +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! HOMOG_COUNT%N_IC1 = 0 +! HOMOG_COUNT%N_IC2 = 0 +! HOMOG_COUNT%N_IC3 = 0 +! HOMOG_COUNT%N_IC4 = 0 +! HOMOG_COUNT%N_IC5 = 0 +! HOMOG_COUNT%N_MDN = 0 +! HOMOG_COUNT%N_MTH = 0 +! HOMOG_COUNT%N_MVS = 0 +! HOMOG_COUNT%N_LEV = 0 +! HOMOG_COUNT%N_CUR = 0 +! HOMOG_COUNT%N_WND = 0 +! HOMOG_COUNT%N_ICE = 0 +! HOMOG_COUNT%N_MOV = 0 +! +! HOMOG_INPUT(I)%NAME = 'unset' +! HOMOG_INPUT(I)%DATE = '19680606 000000' +! HOMOG_INPUT(I)%VALUE1 = 0 +! HOMOG_INPUT(I)%VALUE2 = 0 +! HOMOG_INPUT(I)%VALUE3 = 0 +! -------------------------------------------------------------------- ! +&HOMOG_COUNT_NML +/ + +&HOMOG_INPUT_NML +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- ! From 439de49924818adae2b2668fcfa2bb9469b57e73 Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Thu, 16 Jul 2020 18:01:43 +0100 Subject: [PATCH 03/13] The Met Office reviewers' comments have been addressed --- model/ftn/ww3_shel.ftn | 1 + regtests/bin/matrix_ukmo_cray | 12 +++--------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index f113ee81d7..65a971191f 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -53,6 +53,7 @@ !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) !/ 04-Oct-2019 : Inline Output implementation ( version 6.07 ) !/ (Roberto Padilla-Hernandez) +!/ 16-Jul-2020 : Variable coupling time step ( version 7.08 ) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray index bf8edd2011..6b930bdd79 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -63,6 +63,7 @@ if [[ $comp == "CCE" ]]; then # Load targetted versions of Cray Development Tools (bug in Fortran StreamIO # for older versions) and netCDF/HDF5 modules: + export cmplr="ukmo_cray" echo " module load cdt/18.12" >> matrix.head echo " module load cray-netcdf/4.6.1.3" >> matrix.head echo " module load cray-hdf5/1.10.2.0" >> matrix.head @@ -70,6 +71,7 @@ if [[ $comp == "CCE" ]]; then elif [[ $comp == "GNU" ]]; then # ParMETIS library not currently working with Cray compiler. # Use GNU compiler for programs that use PDLIB. + export cmplr="ukmo_cray_gnu" echo " module switch PrgEnv-cray PrgEnv-gnu/5.2.82" >> matrix.head echo " module load cray-netcdf" >> matrix.head echo " export METIS_PATH=/home/d02/frey/WW3/ParMETIS_GNU" >> matrix.head @@ -81,10 +83,9 @@ fi echo " export WWATCH3_NETCDF=NC4" >> matrix.head echo " export NETCDF_CONFIG=\$(which nc-config)" >> matrix.head -# Compiler option. Choose appropriate compiler and set cmplOption to +# Compiler option. Set cmplOption to # y if using for the first time or using a different compiler - cmplr=cray_xc.${comp} export cmplOption='n' export mpi='mpiexec' @@ -142,13 +143,6 @@ fi # 2. Execute matrix.base ... # # --------------------------------------------------------------------------- # -# Compiler configuration, required for coupling - if [ "$comp" == "GNU" ] ; then - export cmplr="ukmo_cray_gnu" - elif [ "$comp" == "CCE" ] ; then - export cmplr="ukmo_cray" - fi - $main_dir/../regtests/bin/matrix.base # --------------------------------------------------------------------------- # From e17931abcdd62b870dad70e9a7cc8a7e144ed276 Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Tue, 21 Jul 2020 13:07:51 +0100 Subject: [PATCH 04/13] Updated the script that copies the data necessary for running the new regtests --- model/bin/ww3_from_ftp.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/model/bin/ww3_from_ftp.sh b/model/bin/ww3_from_ftp.sh index f17d3c6e00..1a2e8a27e7 100755 --- a/model/bin/ww3_from_ftp.sh +++ b/model/bin/ww3_from_ftp.sh @@ -36,12 +36,15 @@ cp -r data_regtests/ww3_tp2.12/input/* regtests/ww3_tp2.12/input/ cp -r data_regtests/ww3_tp2.12/input_be/* regtests/ww3_tp2.12/input_be/ cp -r data_regtests/ww3_tp2.12/input_le/* regtests/ww3_tp2.12/input_le/ cp -r data_regtests/ww3_tp2.14/input/r-ww3.nc.OAS*CM regtests/ww3_tp2.14/input/ +cp -r data_regtests/ww3_tp2.14/input/r-ww3.nc.OASACM regtests/ww3_tp2.14/input/OASACM2 if [ ! -d regtests/ww3_tp2.14/input/oasis3-mct/doc ] then mkdir regtests/ww3_tp2.14/input/oasis3-mct/doc fi cp -r data_regtests/ww3_tp2.14/input/oasis3-mct/doc/* regtests/ww3_tp2.14/input/oasis3-mct/doc/ cp -r data_regtests/ww3_tp2.14/input/toy/*.nc.OAS*CM regtests/ww3_tp2.14/input/toy/ +cp -r data_regtests/ww3_tp2.14/input/toy/r-toy.nc.OASACM regtests/ww3_tp2.14/input/toy/r-toy.nc.OASACM2 +cp -r data_regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM regtests/ww3_tp2.14/input/toy/toy_coupled_field.nc.OASACM2 cp -r data_regtests/ww3_tp2.14/input/toy/*.nc regtests/ww3_tp2.14/input/toy/ cp -r data_regtests/ww3_tp2.17/input/* regtests/ww3_tp2.17/input/ From 58c5ee74644bb876161094a93f3c99d74a96ad7f Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Wed, 22 Jul 2020 12:05:55 +0100 Subject: [PATCH 05/13] Changes to ukmo_cray regtests as suggested by reviewer --- regtests/bin/matrix.base | 8 ++++---- regtests/bin/matrix_ukmo_cray | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 65f1d4c7af..5fb9401cd6 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -2007,10 +2007,10 @@ if [ "$coup" = 'y' ] then echo ' ' >> matrix.body - echo "$rtst -s OASACM -w work_OASACM -c $cmplr -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body - echo "$rtst -s OASACM2 -w work_OASACM2 -c $cmplr -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body - echo "$rtst -s OASOCM -w work_OASOCM -c $cmplr -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body - echo "$rtst -s OASICM -w work_OASICM -c $cmplr -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASACM -w work_OASACM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASACM2 -w work_OASACM2 -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASOCM -w work_OASOCM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body + echo "$rtst -s OASICM -w work_OASICM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body fi # --------------------------------------------------------------------------- # diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray index 6b930bdd79..726352e5a8 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -63,7 +63,7 @@ if [[ $comp == "CCE" ]]; then # Load targetted versions of Cray Development Tools (bug in Fortran StreamIO # for older versions) and netCDF/HDF5 modules: - export cmplr="ukmo_cray" + cmplr="ukmo_cray" echo " module load cdt/18.12" >> matrix.head echo " module load cray-netcdf/4.6.1.3" >> matrix.head echo " module load cray-hdf5/1.10.2.0" >> matrix.head @@ -71,7 +71,7 @@ if [[ $comp == "CCE" ]]; then elif [[ $comp == "GNU" ]]; then # ParMETIS library not currently working with Cray compiler. # Use GNU compiler for programs that use PDLIB. - export cmplr="ukmo_cray_gnu" + cmplr="ukmo_cray_gnu" echo " module switch PrgEnv-cray PrgEnv-gnu/5.2.82" >> matrix.head echo " module load cray-netcdf" >> matrix.head echo " export METIS_PATH=/home/d02/frey/WW3/ParMETIS_GNU" >> matrix.head @@ -86,7 +86,7 @@ fi # Compiler option. Set cmplOption to # y if using for the first time or using a different compiler - export cmplOption='n' + export cmplOption='y' export mpi='mpiexec' export np='16' From f0a663c5a74e26f774302de00234182f26fe2b8e Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Wed, 22 Jul 2020 16:42:32 +0100 Subject: [PATCH 06/13] Updates to the coupling regtests as suggested by reviewer --- regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl | 2 +- regtests/ww3_tp2.14/input/prep_env.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl b/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl index d8d37ae247..e4f3ea561e 100644 --- a/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl +++ b/regtests/ww3_tp2.14/input/oasis3-mct/util/make_dir/cmplr.tmpl @@ -39,7 +39,7 @@ F90 = F = $(F90) f90 = $(F90) f = $(F90) -CC = icc +CC = AR = ar ARFLAGS = -ruv F90COMP = diff --git a/regtests/ww3_tp2.14/input/prep_env.sh b/regtests/ww3_tp2.14/input/prep_env.sh index 2fb8090070..dd08727b49 100755 --- a/regtests/ww3_tp2.14/input/prep_env.sh +++ b/regtests/ww3_tp2.14/input/prep_env.sh @@ -18,6 +18,7 @@ swtstr=$4 echo '' echo ' setup coupling environment' export WWATCH3_DIR=`grep WWATCH3_DIR $WWATCH3_ENV | awk -F' ' '{print $2}' ` +export WWATCH3_CC=`grep WWATCH3_CC $WWATCH3_ENV | awk -F' ' '{print $2}' ` echo ' compile oasis coupler' cd $path_i/oasis3-mct/util/make_dir @@ -52,8 +53,7 @@ then # shorten comp_mpi comp_mpi_exe="$(echo $comp_mpi | awk -F' ' '{print $1}')" # sed cmplr.tmpl - sed -e "s//$optcs/" -e "s//$optls/" -e "s//$comp_mpi/" -e "s//$comp_mpi_exe/" cmplr.tmpl > cmplr - sed -i "s/icc/gcc/g" cmplr + sed -e "s//$optcs/" -e "s//$optls/" -e "s//$comp_mpi/" -e "s//$WWATCH3_CC/" -e "s//$comp_mpi_exe/" cmplr.tmpl > cmplr echo " sed cmplr.tmpl => cmplr" else echo "ERROR: cmplr.$cmplr not found" 2>&1 From f0edfabf5073a74784981bc493c550191adb2261 Mon Sep 17 00:00:00 2001 From: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Date: Thu, 23 Jul 2020 13:23:45 +0100 Subject: [PATCH 07/13] Update matrix.base Fixed after error pointed out by reviewer --- regtests/bin/matrix.base | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 78a6e2eaba..993a441673 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -86,7 +86,7 @@ echo " echo ' Multi 08 (with ice) : $multi08'" >> matrix.head echo " echo ' Assim Update of the restart file : $assim'" >> matrix.head echo " echo ' Atmosphere, ocean, and ice coupling: $coup'" >> matrix.head - echo " echo ' Calendar type : $calendar'" >> matri + echo " echo ' Calendar type : $calendar'" >> matrix.head echo " echo ' '" >> matrix.head if [ -n "$filter" ] then From ad62a6a7d1b6c6e3320a5c94ccde4e4911f3cd30 Mon Sep 17 00:00:00 2001 From: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Date: Thu, 23 Jul 2020 13:58:50 +0100 Subject: [PATCH 08/13] Update matrix_datarmor --- regtests/bin/matrix_datarmor | 1 + 1 file changed, 1 insertion(+) diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index e3134fa563..d224dc884a 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -139,6 +139,7 @@ export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update export coup='y' # Atmosphere, ocean, and ice coupling + export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) From 98ba9e73e8a7b4cffee2be940f0827bf58bfef3d Mon Sep 17 00:00:00 2001 From: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Date: Thu, 23 Jul 2020 13:59:48 +0100 Subject: [PATCH 09/13] Update matrix_ncep --- regtests/bin/matrix_ncep | 1 + 1 file changed, 1 insertion(+) diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index dea0a7da6b..9abdd48d75 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -155,6 +155,7 @@ fi export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update export coup='y' # Atmosphere, ocean, and ice coupling + export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) From b51cf9139a5e383bcc1b99e3473859f9140c30be Mon Sep 17 00:00:00 2001 From: Juan Manuel Castillo Sanchez <48921434+ukmo-juan-castillo@users.noreply.github.com> Date: Thu, 23 Jul 2020 14:00:18 +0100 Subject: [PATCH 10/13] Update matrix_zeus_HLT --- regtests/bin/matrix_zeus_HLT | 1 + 1 file changed, 1 insertion(+) diff --git a/regtests/bin/matrix_zeus_HLT b/regtests/bin/matrix_zeus_HLT index b86adae919..0a0ecbc873 100755 --- a/regtests/bin/matrix_zeus_HLT +++ b/regtests/bin/matrix_zeus_HLT @@ -100,6 +100,7 @@ export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update export coup='y' # Atmosphere, ocean, and ice coupling + export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) export multi02='y' # mww3_test_02 (basic two-way nesting test)) From baa95b09a0c78c0b39ef8274cef89aad37a65715 Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Fri, 24 Jul 2020 12:29:24 +0100 Subject: [PATCH 11/13] Fix non-reproducible toy output in coupled regtests --- regtests/bin/matrix.comp | 10 +- .../ww3_tp2.14/input/toy/function_sent.F90 | 8 +- .../ww3_tp2.14/input/toy/read_dimgrid.F90 | 14 ++- regtests/ww3_tp2.14/input/toy/read_grid.F90 | 46 +++++--- .../ww3_tp2.14/input/toy/read_namelist.F90 | 40 ++++--- regtests/ww3_tp2.14/input/toy/toy_model.F90 | 108 +++++++++++------- 6 files changed, 137 insertions(+), 89 deletions(-) diff --git a/regtests/bin/matrix.comp b/regtests/bin/matrix.comp index ae780fef6e..67eb75c6da 100755 --- a/regtests/bin/matrix.comp +++ b/regtests/bin/matrix.comp @@ -111,7 +111,7 @@ # 3. Looping over work directories # # --------------------------------------------------------------------------- # - cases=$(find . -maxdepth 1 -type d -name "work*") + cases=$(find . -maxdepth 1 -type d -name "work*" | grep -v work_oasis) # skip to next tst if no work directory echo 'run : ' $cases if [ -z "$cases" ] ; then @@ -159,7 +159,7 @@ binaryfiles=`grep . -r * | grep 'Binary file' | sed -e "s/^Binary file //" -e "s/ matches$//"` #Generate list of files to skip - skipfiles="ww3_shel.out ww3_multi.out prf.*.mww3 finished ww3_systrk.out gmon.out time_count.txt" + skipfiles="ww3_shel.out ww3_multi.out prf.*.mww3 finished ww3_systrk.out gmon.out time_count.txt oasis_make.out oasis_clean.out toy_make.out toy_clean.out" nf_1=`echo $files_1 | wc -w | awk '{print $1}'` echo " found $nf_1 files in base directory" >> $home_dir/fulldiff.tmp @@ -192,7 +192,7 @@ if [[ $skipfiles =~ (^|[[:space:]])"$file"($|[[:space:]]) ]] then filetype="skip" - elif [[ $file == log.* ]] + elif [[ $file == log.* ]] || [[ $file == "output.ww3" ]] then filetype="log" elif [[ $binaryfiles =~ (^|[[:space:]])"$file"($|[[:space:]]) ]] @@ -232,7 +232,9 @@ sed -n '/version/!p' | \ sed -n '/date :/!p' | \ sed -n '/time :/!p' | \ - sed -n '/Elapsed/!p' > diff_tempfile + sed -n '/Elapsed/!p' | \ + sed -n '/calculating for/!p' | \ + sed -n '/computation loop at/!p' > diff_tempfile else diff $file $return_comp/$run/$file > diff_tempfile fi diff --git a/regtests/ww3_tp2.14/input/toy/function_sent.F90 b/regtests/ww3_tp2.14/input/toy/function_sent.F90 index 4dc6cad86c..6c3826b97b 100755 --- a/regtests/ww3_tp2.14/input/toy/function_sent.F90 +++ b/regtests/ww3_tp2.14/input/toy/function_sent.F90 @@ -1,4 +1,4 @@ -SUBROUTINE FUNCTION_SENT(IOUTDIAG_UNIT,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & +SUBROUTINE FUNCTION_SENT(IOUTDIAG_UNIT,KRANK,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & NI,NJ, NBFIELDS, & COORDS_1,COORDS_2, & FNC_ANA, IB, CTYPE_FCT, VALUE, CNAME_FILE, CSNDFIELDS) @@ -19,7 +19,7 @@ SUBROUTINE FUNCTION_SENT(IOUTDIAG_UNIT,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & REAL (KIND=WP), PARAMETER :: DP_CONV = DP_PI/180. ! INTEGER, INTENT(IN) :: NI,NJ,IB, NBFIELDS - INTEGER, INTENT(IN) :: IOUTDIAG_UNIT + INTEGER, INTENT(IN) :: IOUTDIAG_UNIT,KRANK INTEGER, INTENT(IN) :: INDI_BEG,INDI_END,INDJ_BEG,INDJ_END ! INTEGER :: I,J @@ -50,7 +50,9 @@ SUBROUTINE FUNCTION_SENT(IOUTDIAG_UNIT,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & ELSE IF (CTYPE_FCT .EQ. 'FILES') THEN CALL READ_FORCING(IOUTDIAG_UNIT,NBFIELDS,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END,IB,CNAME_FILE,CSNDFIELDS,NI,NJ,COORDS_1,COORDS_2,FNC_ANA) ELSE - WRITE(IOUTDIAG_UNIT,*) 'PROBLEM DURING DEFINITION OF THE FUNCTION ANALYTIC : ', CTYPE_FCT + IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'PROBLEM DURING DEFINITION OF THE FUNCTION ANALYTIC : ', CTYPE_FCT + ENDIF CALL ABORT END IF ! diff --git a/regtests/ww3_tp2.14/input/toy/read_dimgrid.F90 b/regtests/ww3_tp2.14/input/toy/read_dimgrid.F90 index 25ba7894bf..d8bc821f42 100755 --- a/regtests/ww3_tp2.14/input/toy/read_dimgrid.F90 +++ b/regtests/ww3_tp2.14/input/toy/read_dimgrid.F90 @@ -1,10 +1,10 @@ !**************************************************************************************** -SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit) +SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit,krank) !************************************************************************************** USE netcdf IMPLICIT NONE ! - INTEGER :: i,w_unit + INTEGER :: i,w_unit,krank ! INTEGER :: il_file_id,il_lon_id, & il_lat_id,il_indice_id, & @@ -45,10 +45,12 @@ SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit) ENDDO ! IF ( (lat_dims_len(1) .NE. lon_dims_len(1)).OR.(lat_dims_len(2) .NE. lon_dims_len(2)) ) THEN + IF(krank.EQ.0) THEN WRITE(w_unit,*) 'Problem model1 in read_dimgrid' WRITE(w_unit,*) 'Dimensions of the latitude are not the same as the ones of the longitude' CALL flush(w_unit) STOP + ENDIF ENDIF !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! @@ -61,9 +63,11 @@ SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit) ! CALL hdlerr(NF90_CLOSE(il_file_id), __LINE__,__FILE__ ) ! - WRITE(w_unit,*) 'Reading input file ',data_filename - WRITE(w_unit,*) 'Global dimensions nlon=',nlon,' nlat=',nlat - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Reading input file ',data_filename + WRITE(w_unit,*) 'Global dimensions nlon=',nlon,' nlat=',nlat + CALL flush(w_unit) + ENDIF ! ! END SUBROUTINE read_dimgrid diff --git a/regtests/ww3_tp2.14/input/toy/read_grid.F90 b/regtests/ww3_tp2.14/input/toy/read_grid.F90 index 28433bec8a..a902f2d633 100755 --- a/regtests/ww3_tp2.14/input/toy/read_grid.F90 +++ b/regtests/ww3_tp2.14/input/toy/read_grid.F90 @@ -1,6 +1,6 @@ !**************************************************************************************** SUBROUTINE read_grid (nlon,nlat,corners_ij_lus, & - data_filename, w_unit, & + data_filename, w_unit, krank, & gridlon,gridlat, & gridclo,gridcla, & gridsrf, & @@ -10,7 +10,7 @@ SUBROUTINE read_grid (nlon,nlat,corners_ij_lus, & USE netcdf IMPLICIT NONE ! - INTEGER :: w_unit + INTEGER :: w_unit, krank ! INTEGER :: il_file_id,il_lon_id, & il_lat_id,il_clo_id,il_cla_id,il_srf_id,il_indice_id @@ -55,37 +55,51 @@ SUBROUTINE read_grid (nlon,nlat,corners_ij_lus, & ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_lon_id, gridlon, & ila_what(1:2), ila_dim(1:2)), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid longitudes reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid longitudes reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_lat_id, gridlat, & ila_what(1:2), ila_dim(1:2)), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid latitudes reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid latitudes reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR(il_file_id, il_clo_id, gridclo, & ila_what, ila_corners), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid longitude corners reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid longitude corners reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_cla_id, gridcla, & ila_what, ila_corners), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid latitude corners reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid latitude corners reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_srf_id, gridsrf, & ila_what(1:2), ila_dim(1:2)), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid surfaces reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid surfaces reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_GET_VAR (il_file_id, il_indice_id, indice_mask, & ila_what, ila_dim), __LINE__,__FILE__ ) - WRITE(w_unit,*) 'Global grid mask reading done' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'Global grid mask reading done' + CALL flush(w_unit) + ENDIF ! CALL hdlerr( NF90_CLOSE(il_file_id), __LINE__,__FILE__ ) ! - WRITE(w_unit,*) 'End of routine read_grid' - CALL flush(w_unit) + IF(krank.EQ.0) THEN + WRITE(w_unit,*) 'End of routine read_grid' + CALL flush(w_unit) + ENDIF ! END SUBROUTINE read_grid diff --git a/regtests/ww3_tp2.14/input/toy/read_namelist.F90 b/regtests/ww3_tp2.14/input/toy/read_namelist.F90 index 447b88f1df..041caf7f57 100755 --- a/regtests/ww3_tp2.14/input/toy/read_namelist.F90 +++ b/regtests/ww3_tp2.14/input/toy/read_namelist.F90 @@ -1,5 +1,5 @@ !###################################################################################### -SUBROUTINE READ_NAMELIST(IOUTDIAG_UNIT,IL_NB_TIME_STEPS, DELTA_T, & +SUBROUTINE READ_NAMELIST(IOUTDIAG_UNIT,KRANK,IL_NB_TIME_STEPS, DELTA_T, & DATA_FILENAME, & CTYPE_FCT, VALUE, CNAME_FILE, & NB_RECV_FIELDS, CRCVFIELDS, & @@ -9,7 +9,7 @@ SUBROUTINE READ_NAMELIST(IOUTDIAG_UNIT,IL_NB_TIME_STEPS, DELTA_T, & IMPLICIT NONE ! ! -INTEGER :: IOUTDIAG_UNIT +INTEGER :: IOUTDIAG_UNIT, KRANK INTEGER :: IND ! !-- NAM_OASIS @@ -45,22 +45,24 @@ SUBROUTINE READ_NAMELIST(IOUTDIAG_UNIT,IL_NB_TIME_STEPS, DELTA_T, & CLOSE(UNIT=10) ! ! VERIFICATION -WRITE(IOUTDIAG_UNIT,*) 'IL_NB_TIME_STEPS=', IL_NB_TIME_STEPS -WRITE(IOUTDIAG_UNIT,*) 'DELTA_T=', DELTA_T -WRITE(IOUTDIAG_UNIT,*) 'DATA_FILENAME=', DATA_FILENAME -! -WRITE(IOUTDIAG_UNIT,*) 'CTYPE_FCT=', CTYPE_FCT -WRITE(IOUTDIAG_UNIT,*) 'VALUE=', VALUE -WRITE(IOUTDIAG_UNIT,*) 'CNAME_FILE=', CNAME_FILE -! -WRITE(IOUTDIAG_UNIT,*) 'NB_RECV_FIELDS=', NB_RECV_FIELDS -DO IND=1, NB_RECV_FIELDS - WRITE(IOUTDIAG_UNIT,*) 'CRCVFIELDS(',IND,')=', CRCVFIELDS(IND) -END DO -! -WRITE(IOUTDIAG_UNIT,*) 'NB_SEND_FIELDS=', NB_SEND_FIELDS -DO IND=1, NB_SEND_FIELDS - WRITE(IOUTDIAG_UNIT,*) 'CSNDFIELDS(',IND,')=', CSNDFIELDS(IND) -END DO +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'IL_NB_TIME_STEPS=', IL_NB_TIME_STEPS + WRITE(IOUTDIAG_UNIT,*) 'DELTA_T=', DELTA_T + WRITE(IOUTDIAG_UNIT,*) 'DATA_FILENAME=', DATA_FILENAME + ! + WRITE(IOUTDIAG_UNIT,*) 'CTYPE_FCT=', CTYPE_FCT + WRITE(IOUTDIAG_UNIT,*) 'VALUE=', VALUE + WRITE(IOUTDIAG_UNIT,*) 'CNAME_FILE=', CNAME_FILE + ! + WRITE(IOUTDIAG_UNIT,*) 'NB_RECV_FIELDS=', NB_RECV_FIELDS + DO IND=1, NB_RECV_FIELDS + WRITE(IOUTDIAG_UNIT,*) 'CRCVFIELDS(',IND,')=', CRCVFIELDS(IND) + END DO + ! + WRITE(IOUTDIAG_UNIT,*) 'NB_SEND_FIELDS=', NB_SEND_FIELDS + DO IND=1, NB_SEND_FIELDS + WRITE(IOUTDIAG_UNIT,*) 'CSNDFIELDS(',IND,')=', CSNDFIELDS(IND) + END DO +ENDIF ! END SUBROUTINE READ_NAMELIST diff --git a/regtests/ww3_tp2.14/input/toy/toy_model.F90 b/regtests/ww3_tp2.14/input/toy/toy_model.F90 index 55794117dc..f4787944c9 100755 --- a/regtests/ww3_tp2.14/input/toy/toy_model.F90 +++ b/regtests/ww3_tp2.14/input/toy/toy_model.F90 @@ -130,42 +130,46 @@ PROGRAM TOY_MODEL CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'PROBLEM DURING MPI_COMM_RANK') ENDIF ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' READING THE NAMELIST' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK .EQ. 0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' READING THE NAMELIST' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! -CALL READ_NAMELIST(IOUTDIAG_UNIT,IL_NB_TIME_STEPS,DELTA_T, & +CALL READ_NAMELIST(IOUTDIAG_UNIT,KRANK,IL_NB_TIME_STEPS,DELTA_T, & DATA_FILENAME, & CTYPE_FCT, VALUE, CNAME_FILE, & NB_RECV_FIELDS, CRCVFIELDS, & NB_SEND_FIELDS, CSNDFIELDS) ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' GRID DEFINITION' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK .EQ. 0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' GRID DEFINITION' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! ! Reading netcdf file with pre-defined variable names ! --------------------------------------------------- ! Reading dimensions of the grid -CALL READ_DIMGRID(NLON,NLAT,DATA_FILENAME,IOUTDIAG_UNIT) +CALL READ_DIMGRID(NLON,NLAT,DATA_FILENAME,IOUTDIAG_UNIT,KRANK) NC=4 ! ! Allocation ALLOCATE(GLOBALGRID_LON(NLON,NLAT), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_LON' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_LON' ALLOCATE(GLOBALGRID_LAT(NLON,NLAT), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_LAT' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_LAT' ALLOCATE(GLOBALGRID_CLO(NLON,NLAT,nc), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_CLO' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_CLO' ALLOCATE(GLOBALGRID_CLA(NLON,NLAT,nc), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_CLA' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_CLA' ALLOCATE(GLOBALGRID_SRF(NLON,NLAT), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_SRF' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating GLOBALGRID_SRF' ALLOCATE(INDICE_MASK(NLON,NLAT), STAT=IERR ) -IF ( IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating INDICE_MASK' +IF ( IERR /= 0 .AND. KRANK .EQ. 0 ) WRITE(IOUTDIAG_UNIT,*) 'Error allocating INDICE_MASK' ! ! Reading of the longitudes, latitudes, longitude and latitudes of the corners, mask of the grid -CALL READ_GRID(NLON,NLAT,NC,DATA_FILENAME,IOUTDIAG_UNIT, & +CALL READ_GRID(NLON,NLAT,NC,DATA_FILENAME,IOUTDIAG_UNIT, KRANK, & GLOBALGRID_LON,GLOBALGRID_LAT, & GLOBALGRID_CLO,GLOBALGRID_CLA, & GLOBALGRID_SRF, & @@ -191,9 +195,11 @@ PROGRAM TOY_MODEL CALL OASIS_TERMINATE_GRIDS_WRITING() ENDIF ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' PARTITION DEFINITION' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' PARTITION DEFINITION' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! ! Definition of the partition of the grid (calling oasis_def_partition) NTOT=NLON*NLAT @@ -205,16 +211,18 @@ PROGRAM TOY_MODEL #endif ! ALLOCATE(IL_PARAL(IL_SIZE)) -WRITE(IOUTDIAG_UNIT,*) 'After allocate il_paral, il_size', IL_SIZE +IF(KRANK.EQ.0) WRITE(IOUTDIAG_UNIT,*) 'After allocate il_paral, il_size', IL_SIZE ! CALL DECOMP_DEF(IL_PARAL,IL_SIZE,NLON,NLAT,KRANK,KSIZE,IOUTDIAG_UNIT) -WRITE(IOUTDIAG_UNIT,*) 'After decomp_def, il_paral = ', IL_PARAL(:) +IF(KRANK.EQ.0) WRITE(IOUTDIAG_UNIT,*) 'After decomp_def, il_paral = ', IL_PARAL(:) ! CALL OASIS_DEF_PARTITION(PART_ID, IL_PARAL, IERR) ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' DEFINITION OF THE LOCAL FIELDS' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' DEFINITION OF THE LOCAL FIELDS' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! ! Define transient variables ! @@ -245,22 +253,26 @@ PROGRAM TOY_MODEL IF (IERR /= 0) CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'ERROR DURING DEFINITION OF SEND VAR') ENDDO ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' TERMINATION OF DEFINITION PHASE' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' TERMINATION OF DEFINITION PHASE' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! CALL OASIS_ENDDEF(IERR) IF(IERR /= 0) CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'ERROR') ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' SEND AND RECEIVE ARRAYS' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' SEND AND RECEIVE ARRAYS' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' +ENDIF ! ALLOCATE(FIELD_RECV(VAR_ACTUAL_SHAPE(2), VAR_ACTUAL_SHAPE(4)), STAT=IERR) -IF (IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'ERROR ALLOCATING FIELD_RECV' +IF(KRANK.EQ.0 .AND. IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'ERROR ALLOCATING FIELD_RECV' ! ALLOCATE(FIELD_SEND(VAR_ACTUAL_SHAPE(2), VAR_ACTUAL_SHAPE(4),NB_SEND_FIELDS),STAT=IERR) -IF (IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'ERROR ALLOCATING FIELD_SEND' +IF(KRANK.EQ.0 .AND. IERR /= 0 ) WRITE(IOUTDIAG_UNIT,*) 'ERROR ALLOCATING FIELD_SEND' ! DEALLOCATE(IL_PARAL) ! @@ -279,16 +291,22 @@ PROGRAM TOY_MODEL ! ITAP_SEC = DELTA_T * (IB-1) ! Time ! - WRITE(IOUTDIAG_UNIT,*) 'CURRENT TIME : ', ITAP_SEC + IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'CURRENT TIME : ', ITAP_SEC + ENDIF ! ! Get the field from coupled model (atmosphere/wave/ocean) ! ------------------------------------------------------- DO IND=1, NB_RECV_FIELDS FIELD_RECV=FIELD_INI CALL OASIS_GET(VAR_ID(IND),ITAP_SEC, FIELD_RECV, IERR) - WRITE(IOUTDIAG_UNIT,*) 'RECEIVE FIELD : ', CRCVFIELDS(IND) , ' => ', ITAP_SEC, MINVAL(FIELD_RECV), MAXVAL(FIELD_RECV) + IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'RECEIVE FIELD : ', CRCVFIELDS(IND) , ' => ', ITAP_SEC, MINVAL(FIELD_RECV), MAXVAL(FIELD_RECV) + ENDIF IF ( IERR .NE. OASIS_Ok .AND. IERR .LT. OASIS_Recvd) THEN - WRITE (IOUTDIAG_UNIT,*) 'OASIS_GET ABORT BY TOY MODEL COMPID ',ICOMP_ID + IF(KRANK.EQ.0) THEN + WRITE (IOUTDIAG_UNIT,*) 'OASIS_GET ABORT BY TOY MODEL COMPID ',ICOMP_ID + ENDIF CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'PROBLEM DURING OASIS_GET') ENDIF ENDDO @@ -296,7 +314,7 @@ PROGRAM TOY_MODEL ! Send the field to coupled model (atmosphere/wave/ocean) ! ------------------------------------------------------- ! - CALL FUNCTION_SENT(IOUTDIAG_UNIT,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & + CALL FUNCTION_SENT(IOUTDIAG_UNIT,KRANK,INDI_BEG,INDI_END,INDJ_BEG,INDJ_END, & VAR_ACTUAL_SHAPE(2), VAR_ACTUAL_SHAPE(4), NB_SEND_FIELDS, & RESHAPE(GLOBALGRID_LON(INDI_BEG:INDI_END,INDJ_BEG:INDJ_END),& (/ VAR_ACTUAL_SHAPE(2), VAR_ACTUAL_SHAPE(4) /)), & @@ -306,21 +324,27 @@ PROGRAM TOY_MODEL CTYPE_FCT, VALUE, CNAME_FILE, CSNDFIELDS) ! DO IND=1, NB_SEND_FIELDS - WRITE(IOUTDIAG_UNIT,*) 'SEND FIELD : ', CSNDFIELDS(IND), ' => ', ITAP_SEC, MINVAL(FIELD_SEND), MAXVAL(FIELD_SEND) + IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) 'SEND FIELD : ', CSNDFIELDS(IND), ' => ', ITAP_SEC, MINVAL(FIELD_SEND), MAXVAL(FIELD_SEND) + ENDIF CALL OASIS_PUT(VAR_ID(IND+NB_RECV_FIELDS),ITAP_SEC, FIELD_SEND(:,:,IND), IERR) IF ( IERR .NE. OASIS_Ok .AND. IERR .LT. OASIS_Sent) THEN - WRITE (IOUTDIAG_UNIT,*) 'OASIS_PUT ABORT BY TOY MODEL COMPID ',ICOMP_ID + IF(KRANK.EQ.0) THEN + WRITE (IOUTDIAG_UNIT,*) 'OASIS_PUT ABORT BY TOY MODEL COMPID ',ICOMP_ID + ENDIF CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'PROBLEM DURING OASIS_PUT') ENDIF ENDDO ! ENDDO ! -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -WRITE(IOUTDIAG_UNIT,*) ' TERMINATION' -WRITE(IOUTDIAG_UNIT,*) '===========================================================================' -! -WRITE(IOUTDIAG_UNIT,*) '----- CALL OASIS_TERMINATE' +IF(KRANK.EQ.0) THEN + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + WRITE(IOUTDIAG_UNIT,*) ' TERMINATION' + WRITE(IOUTDIAG_UNIT,*) '===========================================================================' + ! + WRITE(IOUTDIAG_UNIT,*) '----- CALL OASIS_TERMINATE' +ENDIF CALL OASIS_TERMINATE(IERR) IF(IERR /= 0) THEN CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'ERROR DURING OASIS_TERMINATE') From 47ffc4b79268158a4446bc39ef49ed142c48f5c9 Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Mon, 27 Jul 2020 15:57:00 +0100 Subject: [PATCH 12/13] Specify that the new coupled regtests are for OASIS coupling, and run them only wi mpi mode --- regtests/bin/matrix.base | 8 ++++---- regtests/bin/matrix_datarmor | 2 +- regtests/bin/matrix_ncep | 2 +- regtests/bin/matrix_ukmo_cray | 2 +- regtests/bin/matrix_zeus_HLT | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 993a441673..1d081f3fac 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -31,7 +31,7 @@ prop1D prop2D time fetch hur1mg \ multi01 multi02 multi03 multi04 multi05 \ hybd shwtr unstr pdlib smcgr mudice infgrv \ - uost assim calendar coup multi06 multi07 multi08 + uost assim calendar oasis multi06 multi07 multi08 do eval " value=\$$par" # echo "$par = $value" @@ -85,7 +85,7 @@ echo " echo ' Multi 07 (unstr. + reg. grds) : $multi07'" >> matrix.head echo " echo ' Multi 08 (with ice) : $multi08'" >> matrix.head echo " echo ' Assim Update of the restart file : $assim'" >> matrix.head - echo " echo ' Atmosphere, ocean, and ice coupling: $coup'" >> matrix.head + echo " echo ' OASIS coupling : $oasis'" >> matrix.head echo " echo ' Calendar type : $calendar'" >> matrix.head echo " echo ' '" >> matrix.head if [ -n "$filter" ] @@ -2004,8 +2004,8 @@ echo "$rtst -s ST4 -w work_UPD6_U_cap -i input_UPD6_U_cap $ww3 ww3_ta1" >> matrix.body fi - #Test of atmosphere, ocean, and ice coupling - if [ "$coup" = 'y' ] + #Test of atmosphere, ocean, and ice coupling using OASIS + if [ "$oasis" = 'y' ] && [ "$dist" = 'y' ] then echo ' ' >> matrix.body echo "$rtst -s OASACM -w work_OASACM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body diff --git a/regtests/bin/matrix_datarmor b/regtests/bin/matrix_datarmor index d224dc884a..a789dbdcf3 100755 --- a/regtests/bin/matrix_datarmor +++ b/regtests/bin/matrix_datarmor @@ -138,7 +138,7 @@ export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update - export coup='y' # Atmosphere, ocean, and ice coupling + export oasis='y' # Atmosphere, ocean, and ice coupling using oasis export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) diff --git a/regtests/bin/matrix_ncep b/regtests/bin/matrix_ncep index 9abdd48d75..6c7880090e 100755 --- a/regtests/bin/matrix_ncep +++ b/regtests/bin/matrix_ncep @@ -154,7 +154,7 @@ fi export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update - export coup='y' # Atmosphere, ocean, and ice coupling + export oasis='y' # Atmosphere, ocean, and ice coupling using OASIS export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) diff --git a/regtests/bin/matrix_ukmo_cray b/regtests/bin/matrix_ukmo_cray index 849b45ac77..33639e5cb9 100755 --- a/regtests/bin/matrix_ukmo_cray +++ b/regtests/bin/matrix_ukmo_cray @@ -123,7 +123,7 @@ fi export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update - export coup='y' # Atmosphere, ocean, and ice coupling + export oasis='y' # Atmosphere, ocean, and ice coupling using oasis export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) diff --git a/regtests/bin/matrix_zeus_HLT b/regtests/bin/matrix_zeus_HLT index 0a0ecbc873..b8da49cd34 100755 --- a/regtests/bin/matrix_zeus_HLT +++ b/regtests/bin/matrix_zeus_HLT @@ -99,7 +99,7 @@ export infgrv='y' # Second harmonic generation tests export uost='y' # ww3_ts4 Unresolved Obstacles Source Term (UOST) export assim='y' # Restart spectra update - export coup='y' # Atmosphere, ocean, and ice coupling + export oasis='y' # Atmosphere, ocean, and ice coupling using oasis export calendar='y' # Calendar type export multi01='y' # mww3_test_01 (wetting and drying) From e3d4a23140c7b06292f2616872e995d7104d6700 Mon Sep 17 00:00:00 2001 From: "ukmo-juan.castillo" Date: Wed, 29 Jul 2020 13:30:46 +0100 Subject: [PATCH 13/13] Minor changes to add the ukmo_cray compiler to the coupling test, and to remove reduntant condition in matrix.base for calendar tests --- regtests/bin/matrix.base | 5 ++--- regtests/ww3_tp2.14/input/prep_env.sh | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/regtests/bin/matrix.base b/regtests/bin/matrix.base index 1d081f3fac..2f3e0dc5f5 100755 --- a/regtests/bin/matrix.base +++ b/regtests/bin/matrix.base @@ -2014,9 +2014,8 @@ echo "$rtst -s OASICM -w work_OASICM -C OASIS -f -p $mpi -n $np -o netcdf $ww3 ww3_tp2.14" >> matrix.body fi -# 365_day and 360_day calendars, no switch sharing here - - if [ "$calendar" = 'y' ] && [ "$shrd" = 'y' ] + # 365_day and 360_day calendars, no switch sharing here + if [ "$calendar" = 'y' ] then echo ' ' >> matrix.body echo "$rtst -g STD -w work_STD -o netcdf $ww3 ww3_tc1" >> matrix.body diff --git a/regtests/ww3_tp2.14/input/prep_env.sh b/regtests/ww3_tp2.14/input/prep_env.sh index dd08727b49..333d3c30ed 100755 --- a/regtests/ww3_tp2.14/input/prep_env.sh +++ b/regtests/ww3_tp2.14/input/prep_env.sh @@ -38,6 +38,7 @@ then [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ [ "$cmplr" == "zeus_pgi" ] || [ "$cmplr" == "zeus_pgi_debug" ] || \ [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || \ + [ "$cmplr" == "ukmo_cray" ] || [ "$cmplr" == "ukmo_cray_debug" ] || \ [ "$cmplr" == "ukmo_cray_gnu" ] || [ "$cmplr" == "ukmo_cray_gnu_debug" ] ; then source $WWATCH3_DIR/bin/cmplr.env # shortlist optl