From c471cdad9b6a28f4770cbfa4511e21c23c84b407 Mon Sep 17 00:00:00 2001 From: "Henrique.Alves" Date: Mon, 10 Jun 2019 15:17:50 +0000 Subject: [PATCH 01/49] Updating to latest upstream (NOAA-EMC/WW3). --- model/bin/comp.Intel | 4 ++-- model/bin/make_makefile.sh | 40 +++++++++++++++++++------------------- model/bin/w3_automake | 2 +- model/bin/w3_make | 10 +++++----- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/model/bin/comp.Intel b/model/bin/comp.Intel index 4a44a4f608..ebe8023b48 100755 --- a/model/bin/comp.Intel +++ b/model/bin/comp.Intel @@ -78,8 +78,8 @@ # Intel compiler on Linux ---------------------------------------------------- # 2.b.1 Build options and determine compiler name - opt="-c $list -O3 -assume byterecl -fPIC -module $path_m" -# opt="-c $list -O3 -assume byterecl -ip -module $path_m" +# opt="-c $list -O3 -assume byterecl -fPIC -module $path_m" + opt="-c $list -O3 -assume byterecl -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" # opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 2038dcb971..4d51117777 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -851,7 +851,7 @@ ww3_ounp ww3_gspl ww3_gint ww3_bound ww3_bounc ww3_systrk $tideprog" progs="$progs ww3_multi_esmf ww3_uprstr" progs="$progs libww3" - progs="$progs libww3.so" +# progs="$progs libww3.so" for prog in $progs do @@ -1060,13 +1060,13 @@ source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; - libww3.so) IDstring='Object file archive' - core='w3fldsmd w3initmd w3wavemd w3wdasmd w3updtmd' - data='wmmdatmd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' - prop="$pr" - source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" - IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' - aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; +# libww3.so) IDstring='Object file archive' +# core='w3fldsmd w3initmd w3wavemd w3wdasmd w3updtmd' +# data='wmmdatmd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' +# prop="$pr" +# source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" +# IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' +# aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; ww3_uprstr) IDstring='Update Restart File' core= data='wmmdatmd w3triamd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' @@ -1086,7 +1086,7 @@ filesl="$data $core $prop $source $IO $aux" # if program name is libww3, then # the target is compile and create archive - elif [ "$prog" = "libww3" ] || [ "$prog" = "libww3.so" ] + elif [ "$prog" = "libww3" ] # || [ "$prog" = "libww3.so" ] then d_string="$prog"' : $(aPo)/' files="$aux $core $data $prop $source $IO" @@ -1133,17 +1133,17 @@ echo ' ' >> makefile # if program name is libww3.so, then # the target is compile and create archive - elif [ "$prog" = "libww3.so" ] - then - lib=$prog - objs="" - for file in $filesl - do - objs="$objs $file.o" - done - echo " @cd \$(aPo); ld -o $lib -shared $objs" >> makefile - echo ' ' >> makefile - +# elif [ "$prog" = "libww3.so" ] +# then +# lib=$prog +# objs="" +# for file in $filesl +# do +# objs="$objs $file.o" +# done +# echo " @cd \$(aPo); ld -o $lib -shared $objs" >> makefile +# echo ' ' >> makefile +# else echo ' @$(aPb)/link '"$filesl" >> makefile echo ' ' >> makefile diff --git a/model/bin/w3_automake b/model/bin/w3_automake index b610d0f0cf..f46c5fe3da 100755 --- a/model/bin/w3_automake +++ b/model/bin/w3_automake @@ -132,7 +132,7 @@ reg_programs="$reg_programs gx_outp" reg_programs="$reg_programs ww3_uprstr" reg_programs="$reg_programs libww3" - reg_programs="$reg_programs libww3.so" +# reg_programs="$reg_programs libww3.so" # PRNC OUNF OUNP BOUNC TRNC cdf_programs="ww3_prnc" diff --git a/model/bin/w3_make b/model/bin/w3_make index f707dccd5d..99e446d19f 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -174,7 +174,7 @@ cdf_programs="$cdf_programs ww3_multi" cdf_programs="$cdf_programs ww3_sbs1" cdf_programs="$cdf_programs libww3" - cdf_programs="$cdf_programs libww3.so" +# cdf_programs="$cdf_programs libww3.so" if [ $ESMFMKFILE ] then cdf_programs="$cdf_programs ww3_multi_esmf" @@ -183,7 +183,7 @@ reg_programs="$reg_programs ww3_multi" reg_programs="$reg_programs ww3_sbs1" reg_programs="$reg_programs libww3" - reg_programs="$reg_programs libww3.so" +# reg_programs="$reg_programs libww3.so" if [ $ESMFMKFILE ] then reg_programs="$reg_programs ww3_multi_esmf" @@ -666,9 +666,9 @@ EOF elif [ "$prog" = "libww3" ] then target="$prog" - elif [ "$prog" = "libww3.so" ] - then - target="$prog" +# elif [ "$prog" = "libww3.so" ] +# then +# target="$prog" else target="$aPe/$prog" fi From 5acd9d2d044a0f02b7340d89a8fc4b3998717fa5 Mon Sep 17 00:00:00 2001 From: "Henrique.Alves" Date: Mon, 10 Jun 2019 15:46:51 +0000 Subject: [PATCH 02/49] Revert "Updating to latest upstream (NOAA-EMC/WW3)." This reverts commit c471cdad9b6a28f4770cbfa4511e21c23c84b407. --- model/bin/comp.Intel | 4 ++-- model/bin/make_makefile.sh | 40 +++++++++++++++++++------------------- model/bin/w3_automake | 2 +- model/bin/w3_make | 10 +++++----- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/model/bin/comp.Intel b/model/bin/comp.Intel index ebe8023b48..4a44a4f608 100755 --- a/model/bin/comp.Intel +++ b/model/bin/comp.Intel @@ -78,8 +78,8 @@ # Intel compiler on Linux ---------------------------------------------------- # 2.b.1 Build options and determine compiler name -# opt="-c $list -O3 -assume byterecl -fPIC -module $path_m" - opt="-c $list -O3 -assume byterecl -ip -module $path_m" + opt="-c $list -O3 -assume byterecl -fPIC -module $path_m" +# opt="-c $list -O3 -assume byterecl -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" # opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" diff --git a/model/bin/make_makefile.sh b/model/bin/make_makefile.sh index 4d51117777..2038dcb971 100755 --- a/model/bin/make_makefile.sh +++ b/model/bin/make_makefile.sh @@ -851,7 +851,7 @@ ww3_ounp ww3_gspl ww3_gint ww3_bound ww3_bounc ww3_systrk $tideprog" progs="$progs ww3_multi_esmf ww3_uprstr" progs="$progs libww3" -# progs="$progs libww3.so" + progs="$progs libww3.so" for prog in $progs do @@ -1060,13 +1060,13 @@ source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; -# libww3.so) IDstring='Object file archive' -# core='w3fldsmd w3initmd w3wavemd w3wdasmd w3updtmd' -# data='wmmdatmd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' -# prop="$pr" -# source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" -# IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' -# aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; + libww3.so) IDstring='Object file archive' + core='w3fldsmd w3initmd w3wavemd w3wdasmd w3updtmd' + data='wmmdatmd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' + prop="$pr" + source="w3triamd w3srcemd $dsx $flx $ln $st $nl $bt $ic $is $db $tr $bs $xx $refcode $igcode $uostmd" + IO='w3iogrmd w3iogomd w3iopomd w3iotrmd w3iorsmd w3iobcmd w3iosfmd w3partmd' + aux="constants w3servmd w3timemd $tidecode w3arrymd w3dispmd w3cspcmd w3gsrumd" ;; ww3_uprstr) IDstring='Update Restart File' core= data='wmmdatmd w3triamd w3gdatmd w3wdatmd w3adatmd w3idatmd w3odatmd' @@ -1086,7 +1086,7 @@ filesl="$data $core $prop $source $IO $aux" # if program name is libww3, then # the target is compile and create archive - elif [ "$prog" = "libww3" ] # || [ "$prog" = "libww3.so" ] + elif [ "$prog" = "libww3" ] || [ "$prog" = "libww3.so" ] then d_string="$prog"' : $(aPo)/' files="$aux $core $data $prop $source $IO" @@ -1133,17 +1133,17 @@ echo ' ' >> makefile # if program name is libww3.so, then # the target is compile and create archive -# elif [ "$prog" = "libww3.so" ] -# then -# lib=$prog -# objs="" -# for file in $filesl -# do -# objs="$objs $file.o" -# done -# echo " @cd \$(aPo); ld -o $lib -shared $objs" >> makefile -# echo ' ' >> makefile -# + elif [ "$prog" = "libww3.so" ] + then + lib=$prog + objs="" + for file in $filesl + do + objs="$objs $file.o" + done + echo " @cd \$(aPo); ld -o $lib -shared $objs" >> makefile + echo ' ' >> makefile + else echo ' @$(aPb)/link '"$filesl" >> makefile echo ' ' >> makefile diff --git a/model/bin/w3_automake b/model/bin/w3_automake index f46c5fe3da..b610d0f0cf 100755 --- a/model/bin/w3_automake +++ b/model/bin/w3_automake @@ -132,7 +132,7 @@ reg_programs="$reg_programs gx_outp" reg_programs="$reg_programs ww3_uprstr" reg_programs="$reg_programs libww3" -# reg_programs="$reg_programs libww3.so" + reg_programs="$reg_programs libww3.so" # PRNC OUNF OUNP BOUNC TRNC cdf_programs="ww3_prnc" diff --git a/model/bin/w3_make b/model/bin/w3_make index 99e446d19f..f707dccd5d 100755 --- a/model/bin/w3_make +++ b/model/bin/w3_make @@ -174,7 +174,7 @@ cdf_programs="$cdf_programs ww3_multi" cdf_programs="$cdf_programs ww3_sbs1" cdf_programs="$cdf_programs libww3" -# cdf_programs="$cdf_programs libww3.so" + cdf_programs="$cdf_programs libww3.so" if [ $ESMFMKFILE ] then cdf_programs="$cdf_programs ww3_multi_esmf" @@ -183,7 +183,7 @@ reg_programs="$reg_programs ww3_multi" reg_programs="$reg_programs ww3_sbs1" reg_programs="$reg_programs libww3" -# reg_programs="$reg_programs libww3.so" + reg_programs="$reg_programs libww3.so" if [ $ESMFMKFILE ] then reg_programs="$reg_programs ww3_multi_esmf" @@ -666,9 +666,9 @@ EOF elif [ "$prog" = "libww3" ] then target="$prog" -# elif [ "$prog" = "libww3.so" ] -# then -# target="$prog" + elif [ "$prog" = "libww3.so" ] + then + target="$prog" else target="$aPe/$prog" fi From 723913ac1b6ed0abc750be1f95e13713cd5d1f56 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Sat, 26 Oct 2019 18:49:30 -0400 Subject: [PATCH 03/49] Fb gefsv12 (#115) FB_gefsv12: Adding changes to adjust to NCEP operations. * Changed compile option for NCEP Dell Phase 3, * Removed empty line on w3iogomd, * Expanded output parameters to include Tz, depth, mean direction on ww3_grib, * Enforced NOSW=3 on ww3_grid for NCEP operations (NCO switch). * Added cmplr.env support to new NCEP Dell P3 comp/link * Changed opt in cmplr.env, comp/link.wcoss_dell_p3 following suggestion to consolidate compiler flags eliminating redundancies and generalizing blocks for several compiler/machine configurations. --- model/bin/cmplr.env | 17 +++++++++++++---- model/bin/comp.wcoss_dell_p3 | 10 +++++++++- model/bin/link.wcoss_dell_p3 | 6 +++++- model/ftn/w3iogomd.ftn | 1 - model/ftn/ww3_grib.ftn | 12 ++++-------- model/ftn/ww3_grid.ftn | 2 ++ 6 files changed, 33 insertions(+), 15 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index dab1a054c8..7d17635b9a 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -119,12 +119,21 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' + optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox' optl='-o $prog -p -g' - if [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then - optc="-c -fno-alias -auto -safe-cray-ptr -ftz -assume byterecl -nowarn -sox -align array64byte" - optc="$optc -xCORE-AVX2 -qno-opt-dynamic-align -ip -module $path_m" + if [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then + optc="$optc -xcore-avx2" + optl="$optl -xcore-avx2" + elif [ ! -z "$(echo $cmplr | grep wcoss_cray)" ] ; then + optc="$optc -xCORE-AVX2 -qno-opt-dynamic-align -auto -nowarn -align array64byte -safe-cray-ptr" + optl="$optl -xCORE-AVX2" + elif [ ! -z "$(echo $cmplr | grep wcoss_dell_p3)" ] ; then + optc="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" + optl="$optl -xHOST" + else + optc="$optc -xhost" + optl="$optl -xhost" fi diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 index afb5a60435..9e66d3766d 100755 --- a/model/bin/comp.wcoss_dell_p3 +++ b/model/bin/comp.wcoss_dell_p3 @@ -78,7 +78,15 @@ # Intel compiler on Linux ---------------------------------------------------- # 2.b.1 Build options and determine compiler name - opt="-c $list -O3 -assume byterecl -ip -module $path_m" +# opt="-c $list -O3 -assume byterecl -ip -module $path_m" + +opt='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox' +opt="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" + +### opt="-c $list -O2 -Wp,-w -fno-alias -auto -ftz -assume byterecl -nowarn -sox -align array64byte" +### opt="$opt -xHOST -qno-opt-dynamic-align -fp-model source -ip -module $path_m" +## opt="$opt -nowarn -sox -align array64byte -real-size 32 -xHOST -qno-opt-dynamic-align" +## opt="$opt -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3" # opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" # opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" # opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 index 57b258d95c..404e31bb9c 100755 --- a/model/bin/link.wcoss_dell_p3 +++ b/model/bin/link.wcoss_dell_p3 @@ -86,7 +86,11 @@ # linking options libs="" - opt="-O3 -ip -o $prog" +# opt="-O2 -ip -o $prog" +opt='-o $prog -p -g' +opt="$optl -xhost" + +# opt="-O3 -ip -o $prog" # opt="-O3 -xSSE4.2 -ip -o $prog" # opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" # opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index f5e8df06c9..06d57cdc41 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -1218,7 +1218,6 @@ USE W3ADATMD, ONLY: CG, WN, DW USE W3ADATMD, ONLY: HS, WLM, T02, T0M1, T01, FP0, & THM, THS, THP0 - USE W3ADATMD, ONLY: FP1, THP1, ABA, ABD, UBA, UBD, FCUT, SXX, & SYY, SXY, PHS, PTP, PLP, PDIR, PSI, PWS, & PWST, PNR, USERO, TUSX, TUSY, PRMS, TPMS, & diff --git a/model/ftn/ww3_grib.ftn b/model/ftn/ww3_grib.ftn index e00d1087c4..28a8eacaee 100644 --- a/model/ftn/ww3_grib.ftn +++ b/model/ftn/ww3_grib.ftn @@ -124,10 +124,6 @@ ! USE W3GDATMD USE W3WDATMD, ONLY: TIME, WLV, ICE, UST, USTDIR -! USE W3ADATMD, ONLY: DW, UA, UD, AS, CX, CY, HS, WLM, T0M1, THM, & -! THS, FP0, THP0, FP1, THP1, DTDYN, FCUT, & -! PHS, PTP, PLP, PDIR, PSI, PWS, PWST, PNR, & -! USERO USE W3ADATMD USE W3ODATMD, ONLY: NDSE, NDST, NDSO, NOGRP, NGRPP, IDOUT, UNDEF,& FLOGRD, FNMPRE, NOSWLL, NOGE, FLOGD @@ -310,11 +306,11 @@ ! ! Chage this as parameters become available in grib2 tables ! - ALLOCATE ( IFIA (16), IFJA(16) ) + ALLOCATE ( IFIA (13), IFJA(13) ) - IFIA = (/ 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 5, 9, 9, 9, 9 /) - IFJA = (/ 1, 4, 2 ,3, 5, 8, 3, 5, 6, 7, 8, 1, 1, 2, 3, 4 /) - DO I = 1, 16 + IFIA = (/ 1, 2, 2, 4, 4, 4, 4, 4, 5, 9, 9, 9, 9 /) + IFJA = (/ 4, 2, 8, 3, 5, 6, 7, 8, 1, 1, 2, 3, 4 /) + DO I = 1, 13 IF ( FLREQ(IFIA(I),IFJA(I)) ) THEN FLREQ(IFIA(I),IFJA(I)) = .FALSE. WRITE(NDSO,946) IDOUT(IFIA(I),IFJA(I)), & diff --git a/model/ftn/ww3_grid.ftn b/model/ftn/ww3_grid.ftn index 3624ce92e6..87248e1986 100644 --- a/model/ftn/ww3_grid.ftn +++ b/model/ftn/ww3_grid.ftn @@ -2190,6 +2190,8 @@ FLC = .TRUE. TRCKCMPR = .TRUE. NOSW = 5 +!/NCO/! NCEP operations retains first three swell systems. +!/NCO NOSW=3 PTM = 1 ! Default to standard WW3 partitioning. C. Bunney PTFC = 0.1 ! Part. method 5 cutoff freq default. C. Bunney FMICHE = 1.6 From 9a5f433965f92fe38b4bc65e4e23b6d202aebe72 Mon Sep 17 00:00:00 2001 From: Jessica Meixner Date: Sat, 26 Oct 2019 18:58:39 -0400 Subject: [PATCH 04/49] Fixing indices nx/ny for exporting ESMF grid in module /model/ftn/wmesmfmd.ftn --- model/ftn/wmesmfmd.ftn | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index 42ef128b80..a72c93509f 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -3175,7 +3175,7 @@ ! -------------------------------------------------------------------- / ! 4. Create ESMF grid with arbitrary domain decomposition to match ! the native domain decomposition of the non-excluded points -! Note that the native grid layout is dim1=Y, dim2=X +! Note that the native grid layout is dim1=X, dim2=Y ! Note that coordinates and mask are not needed since this ! grid is only used to define fields for a redist operation ! @@ -3200,9 +3200,9 @@ if (ipass.eq.2) then ix = mapsf(isea,1) iy = mapsf(isea,2) - ! native grid layout: dim1=Y, dim2=X - arbIndexList(arbIndexCount,1) = iy - arbIndexList(arbIndexCount,2) = ix + ! native grid layout: dim1=X, dim2=Y + arbIndexList(arbIndexCount,1) = ix + arbIndexList(arbIndexCount,2) = iy endif enddo endif @@ -3213,9 +3213,9 @@ if ( mapsta(iy,ix).ne.0 ) cycle ! skip non-excluded point arbIndexCount = arbIndexCount+1 if (ipass.eq.2) then - ! native grid layout: dim1=Y, dim2=X - arbIndexList(arbIndexCount,1) = iy - arbIndexList(arbIndexCount,2) = ix + ! native grid layout: dim1=X, dim2=Y + arbIndexList(arbIndexCount,1) = ix + arbIndexList(arbIndexCount,2) = iy endif enddo enddo @@ -3228,7 +3228,7 @@ case (iclose_none) natGrid = ESMF_GridCreateNoPeriDim( & minIndex=(/ 1, 1/), & - maxIndex=(/ny,nx/), & + maxIndex=(/nx,ny/), & coordDep1=(/ESMF_DIM_ARB,ESMF_DIM_ARB/), & coordDep2=(/ESMF_DIM_ARB,ESMF_DIM_ARB/), & arbIndexCount=arbIndexCount, & @@ -3239,11 +3239,11 @@ if (ESMF_LogFoundError(rc, PASSTHRU)) return case (iclose_smpl) natGrid = ESMF_GridCreate1PeriDim( & - periodicDim=2, & - poleDim=1, & + periodicDim=1, & + poleDim=2, & poleKindFlag=(/ESMF_POLEKIND_NONE,ESMF_POLEKIND_NONE/), & minIndex=(/ 1, 1/), & - maxIndex=(/ny,nx/), & + maxIndex=(/nx,ny/), & coordDep1=(/ESMF_DIM_ARB,ESMF_DIM_ARB/), & coordDep2=(/ESMF_DIM_ARB,ESMF_DIM_ARB/), & arbIndexCount=arbIndexCount, & From 25e7c4208d4771cbd9ba48eaaf4f8ec780393aab Mon Sep 17 00:00:00 2001 From: James Dykes <48799938+nacbrother@users.noreply.github.com> Date: Sat, 26 Oct 2019 18:00:55 -0500 Subject: [PATCH 05/49] Correcting the ABX2/ABY2 computation in w3iogomd.ftn On lines 1439 and 1440, the calculations for ABX2 and ABY2 were like that of ABX and ABY. This may have been an oversight when inserted. This PR fixes the issue and aligns the code with parameter definitions in the manual. --- model/ftn/w3iogomd.ftn | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 06d57cdc41..01cff23c7b 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -51,6 +51,8 @@ !/ processing code) !/ 05-Jun-2018 : Add DEBUGSTP/SETUP ( version 6.04 ) !/ 22-Aug-2018 : Add WBT output parameter ( version 6.06 ) +!/ 25-Sep-2019 : Corrected th2m and sth2m ( version 6.07 ) +!/ calculations. (J Dykes, NRL) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -1145,6 +1147,8 @@ !/ 01-Mar-2018 : Removed RTD code (now used in post ( version 6.02 ) !/ processing code) !/ 22-Aug-2018 : Add WBT parameter ( version 6.06 ) +!/ 25-Sep-2019 : Corrected th2m and sth2m ( version 6.07 ) +!/ calculations. (J Dykes, NRL) !/ ! 1. Purpose : ! @@ -1432,8 +1436,9 @@ AB (JSEA) = AB (JSEA) + A(ITH,IK,JSEA) ABX(JSEA) = ABX(JSEA) + A(ITH,IK,JSEA)*ECOS(ITH) ABY(JSEA) = ABY(JSEA) + A(ITH,IK,JSEA)*ESIN(ITH) - ABX2(JSEA) = ABX2(JSEA) + A(ITH,IK,JSEA)*EC2(ITH) - ABY2(JSEA) = ABY2(JSEA) + A(ITH,IK,JSEA)*ES2(ITH) +! Using trig identities to represent cos2theta and sin2theta. + ABX2(JSEA) = ABX2(JSEA) + A(ITH,IK,JSEA)*(2*EC2(ITH) - 1) + ABY2(JSEA) = ABY2(JSEA) + A(ITH,IK,JSEA)*(2*ESC(ITH)) ABYX(JSEA) = ABYX(JSEA) + A(ITH,IK,JSEA)*ESC(ITH) IF (ITH.LE.NTH/2) THEN ABST(JSEA) = ABST(JSEA) + & From da0942c27fa6a76fd296440982cb2fa37dcf1fd5 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Sun, 27 Oct 2019 00:33:26 +0000 Subject: [PATCH 06/49] Replacing single for double quotes to correct comp/link.wcoss_dell_p3 scripts. --- model/bin/comp.wcoss_dell_p3 | 2 +- model/bin/link.wcoss_dell_p3 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 index 9e66d3766d..8287fbde39 100755 --- a/model/bin/comp.wcoss_dell_p3 +++ b/model/bin/comp.wcoss_dell_p3 @@ -80,7 +80,7 @@ # opt="-c $list -O3 -assume byterecl -ip -module $path_m" -opt='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox' +opt="-c $list -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox" opt="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" ### opt="-c $list -O2 -Wp,-w -fno-alias -auto -ftz -assume byterecl -nowarn -sox -align array64byte" diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 index 404e31bb9c..bc10af18aa 100755 --- a/model/bin/link.wcoss_dell_p3 +++ b/model/bin/link.wcoss_dell_p3 @@ -87,8 +87,8 @@ # linking options libs="" # opt="-O2 -ip -o $prog" -opt='-o $prog -p -g' -opt="$optl -xhost" +opt="-o $prog -p -g" +opt="$opt -xhost" # opt="-O3 -ip -o $prog" # opt="-O3 -xSSE4.2 -ip -o $prog" From bb8c07dc82da49946a29a9f77087db3dbc9fd237 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Mon, 28 Oct 2019 19:05:36 -0400 Subject: [PATCH 07/49] Added output for fields in separated files every delta t for output --- model/ftn/w3initmd.ftn | 9 ++-- model/ftn/w3iogomd.ftn | 110 +++++++++++++++++++++++++++++++++++++++-- model/ftn/w3odatmd.ftn | 15 +++++- model/ftn/w3wavemd.ftn | 21 ++++++-- model/ftn/wminitmd.ftn | 70 ++++++++++++++++++++++---- model/ftn/ww3_shel.ftn | 32 ++++++++++-- 6 files changed, 232 insertions(+), 25 deletions(-) diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index fda6c3e80f..6725b44d00 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -117,9 +117,11 @@ !/ CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE W3INIT ( IMOD, IsMulti, FEXT, MDS, MTRACE, ODAT,FLGRD, & + SUBROUTINE W3INIT ( IMOD, IsMulti, FEXT, MDS, MTRACE, ODAT & + , FLGRD, & FLGR2, FLGD, FLG2, NPT, XPT, YPT, PNAMES, & - IPRT, PRTFRM, MPI_COMM, FLAGSTIDEIN ) + IPRT, PRTFRM, MPI_COMM, FLAGSTIDEIN) + !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -388,7 +390,8 @@ !/ Parameter list !/ INTEGER, INTENT(IN) :: IMOD, MDS(13), MTRACE(2), & - ODAT(35), NPT, IPRT(6), MPI_COMM + ODAT(35),NPT, IPRT(6),& + MPI_COMM LOGICAL, INTENT(IN) :: IsMulti REAL, INTENT(INOUT) :: XPT(NPT), YPT(NPT) LOGICAL, INTENT(INOUT) :: FLGRD(NOGRP,NGRPP), FLGD(NOGRP),& diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 787b7be708..977f76cd7f 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -51,6 +51,9 @@ !/ processing code) !/ 05-Jun-2018 : Add DEBUGSTP/SETUP ( version 6.04 ) !/ 22-Aug-2018 : Add WBT output parameter ( version 6.06 ) +!/ 04-Oct-2019 : Inline Output implementation ( version 6.07 ) +!/ (Roberto Padilla-Hernandez) +!/ !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -2339,7 +2342,8 @@ !/ END SUBROUTINE W3OUTG !/ ------------------------------------------------------------------- / - SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD ) +!XXX SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD ) + SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD,FCSTTIME ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -2395,6 +2399,7 @@ ! 0 : Fields read. ! -1 : Past end of file. ! IMOD Int. I Model number for W3GDAT etc. +!XXX FCSTTIME Real I Forecast time in hours from initial time ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -2448,6 +2453,8 @@ ! !/ ------------------------------------------------------------------- / USE CONSTANTS +!XXX INLINE +! USE W3INITMD USE W3GDATMD !/ USE W3WDATMD, ONLY: W3SETW, W3DIMW @@ -2479,6 +2486,8 @@ !/ USE W3SERVMD, ONLY: EXTCDE USE W3ODATMD, only : IAPROC +!XXX INLINE + USE W3ODATMD, ONLY : OFILES !/SETUP USE W3WDATMD, ONLY: ZETA_SETUP !/S USE W3SERVMD, ONLY: STRACE ! @@ -2491,12 +2500,20 @@ INTEGER, INTENT(IN) :: NDSOG INTEGER, INTENT(IN), OPTIONAL :: IMOD CHARACTER, INTENT(IN) :: INXOUT*(*) +!XXX + REAL, INTENT(IN), OPTIONAL :: FCSTTIME + CHARACTER(LEN=3) :: CO + CHARACTER(LEN=6) :: Hstr + CHARACTER(LEN=7) :: FCSTNAM +!XXX !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ INTEGER :: IGRD, IERR, I, J, IX, IY, MOGRP, & - MGRPP, ISEA, MOSWLL, IK, IFI, IFJ + MGRPP, ISEA, MOSWLL, IK, IFI, IFJ & +!XXX INLINE + ,IFILOUT INTEGER, ALLOCATABLE :: MAPTMP(:,:) !/S INTEGER, SAVE :: IENT = 0 REAL :: AUX1(NSEA), AUX2(NSEA), & @@ -2531,7 +2548,8 @@ CALL EXTCDE ( 1 ) END IF ! - IF ( IPASS.EQ.1 ) THEN +!INLINE IF ( IPASS.EQ.1 ) THEN + IF ( IPASS.GE.1 ) THEN WRITE = INXOUT.EQ.'WRITE' ELSE IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN @@ -2542,11 +2560,15 @@ ! !/T WRITE (NDST,9000) IPASS, INXOUT, WRITE, NDSOG, IGRD, FILEXT ! +!XXX INLINE + WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) +!XXX +! ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) ! - IF ( IPASS.EQ.1 ) THEN -! +!XXX INLINE IF ( IPASS.EQ.1 ) THEN + IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) ! @@ -2600,6 +2622,80 @@ ! END IF ! +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +! IN CASE OF GENERATION OF A NEW FILE OUTPUT EVERY DELTA OUTPUT +! open file ---------------------------------------------------------- * +! ( IPASS = 1 ) +! + IF ( IPASS.GE.1 .AND. OFILES(1) .EQ. 1) THEN + I = LEN_TRIM(FILEXT) + J = LEN_TRIM(FNMPRE) +! + write(*,*) '=============================================' + write(*,*) 'FCSTTIME: ',FCSTTIME + IF (FCSTTIME .LT. 10.) THEN + CO='00' + ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN + CO='0' + END IF + +! Convert integer FCSTTIME into a character Hstr with 3 columns + WRITE(Hstr,"(f6.2)") FCSTTIME + FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) + WRITE(*,*)'OUT FILE: ',FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I) +! +!/T WRITE (NDST,9001) FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I) + IF ( WRITE ) THEN + OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I), & + FORM='UNFORMATTED',ERR=800,IOSTAT=IERR) + ELSE + OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FILEXT(:I), & + FORM='UNFORMATTED',ERR=800,IOSTAT=IERR,STATUS='OLD') + END IF +! + REWIND ( NDSOG ) +! +! test info --------------------------------------------------------- * +! ( IPASS >= 1 & OFILES(1) = 1) +! + IF ( WRITE ) THEN + WRITE (NDSOG) & + IDSTR, VEROGR, GNAME, NOGRP, NGRPP, NSEA, NX, NY, & + UNDEF, NOSWLL + ELSE + READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) & + IDTST, VERTST, TNAME, MOGRP, MGRPP, NSEA, NX, NY, & + UNDEF, MOSWLL +! + IF ( IDTST .NE. IDSTR ) THEN + WRITE (NDSE,902) IDTST, IDSTR + CALL EXTCDE ( 20 ) + END IF + IF ( VERTST .NE. VEROGR ) THEN + WRITE (NDSE,903) VERTST, VEROGR + CALL EXTCDE ( 21 ) + END IF + IF ( NOGRP .NE. MOGRP .OR. NGRPP .NE. MGRPP ) THEN + WRITE (NDSE,904) MOGRP, MGRPP, NOGRP, NGRPP + CALL EXTCDE ( 22 ) + END IF + IF ( TNAME .NE. GNAME ) THEN + WRITE (NDSE,905) TNAME, GNAME + END IF + IF ( NOSWLL .NE. MOSWLL ) THEN + WRITE (NDSE,906) MOSWLL, NOSWLL + CALL EXTCDE ( 24 ) + END IF +! + END IF +! +!/T WRITE (NDST,9002) IDSTR, VEROGR, GNAME, NSEA, NX, NY, & +!/T UNDEF +! + END IF +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ! TIME and flags ----------------------------------------------------- * ! IF ( WRITE ) THEN @@ -3413,6 +3509,10 @@ ! Flush the buffers for write ! IF ( WRITE ) CALL FLUSH ( NDSOG ) +!XXX + IF(OFILES(1) .EQ. 1) CLOSE(NDSOG) +! IF (IFILOUT .EQ. 1) CLOSE(NDSOG) +!XXX ! !/MPI CALL W3SETA ( IGRD, NDSE, NDST ) ! diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 613b63ac07..6684c5140b 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -127,6 +127,7 @@ ! suppl. data for output type 5. ! OUT6 TYPE Public Data structure of type OTYPE6 with ! suppl. data for output type 6. +!INLINE OFILES I.A. Public Output in one or several files. ! ---------------------------------------------------------------- ! ! Elements of OUT1 are aliased to pointers with the same @@ -399,7 +400,9 @@ NAPTRK, NAPRST, NAPBPT, NAPPRT INTEGER :: NOSWLL INTEGER :: TOFRST(2), TONEXT(2,7), TOLAST(2,7), & - TBPI0(2), TBPIN(2), NDS(13) + TBPI0(2), TBPIN(2), NDS(13) & +!XXX INLINE + ,OFILES(7) REAL :: DTOUT(7) LOGICAL :: FLOUT(7) TYPE(OTYPE1) :: OUT1 @@ -423,6 +426,8 @@ INTEGER, POINTER :: NOSWLL INTEGER, POINTER :: TOFRST(:), TONEXT(:,:), TOLAST(:,:), & TBPI0(:), TBPIN(:), NDS(:) +!XXX INLINE + INTEGER, POINTER :: OFILES(:) REAL, POINTER :: DTOUT(:) LOGICAL, POINTER :: FLOUT(:) !/ @@ -1447,6 +1452,8 @@ !/ Local parameters !/ INTEGER :: NLOW +!XXX + INTEGER :: J !/S INTEGER, SAVE :: IENT = 0 !/ !/S CALL STRACE (IENT, 'W3SETO') @@ -1501,6 +1508,12 @@ TBPI0 => OUTPTS(IMOD)%TBPI0 TBPIN => OUTPTS(IMOD)%TBPIN NDS => OUTPTS(IMOD)%NDS +!XXX INLINE + OFILES => OUTPTS(IMOD)%OFILES + WRITE(*,*) 'W3SETO IMOD:', IMOD + WRITE(*,*) 'OFILES(J)', (OFILES(J),J=1,7) + WRITE(*,*) 'OUTPTS(I)%OFILES(:)', OUTPTS(1)%OFILES(:) +!XXX ! DTOUT => OUTPTS(IMOD)%DTOUT FLOUT => OUTPTS(IMOD)%FLOUT diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index a226a81012..27d37b64b3 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -425,7 +425,11 @@ IX, IY, ISPEC, J, TOUT(2), TLST(2), & REFLED(6), IK, ITH, IS, NKCFL INTEGER :: ISP, IP_glob - REAL :: ICEDAVE + REAL :: ICEDAVE & +!INLINE RPH + ,FCSTTIME +!XXX + !/OASIS INTEGER :: OASISED !/SEC1 INTEGER :: ISEC1 !/SBS INTEGER :: JJ, NDSOFLG @@ -902,7 +906,7 @@ !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE TIME LOOP 0' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) - +! ITIME = ITIME + 1 DTG = REAL(NINT(DTGA+DTRES+0.0001)) DTRES = DTRES + DTGA - DTG @@ -2168,6 +2172,7 @@ ! !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, step 6.21.2' !/DEBUGRUN FLUSH(740+IAPROC) +! IF ( TOFRST(1) .EQ. -1 ) THEN DTTST = 1. ELSE @@ -2354,8 +2359,17 @@ !/MPI IF ( FLGMPI(1) ) CALL MPI_WAITALL & !/MPI ( NRQGO2, IRQGO2, STATIO, IERR_MPI ) !/MPI FLGMPI(1) = .FALSE. +! +!XXX INLINE + write(*,*)'***GENERATING OUTPUT AT: ***' + FCSTTIME=ITIME*DTCFL/3600 + write(*,*) 'J, FCST HOUR IN W3WAVE: ',J, FCSTTIME + write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD + IF ( J .EQ. 1 ) CALL W3IOGO & - ( 'WRITE', NDS(7), ITEST, IMOD ) + ( 'WRITE', NDS(7), ITEST, IMOD,FCSTTIME ) +!XXX +! !/SBS ! !/SBS ! Generate output flag file for fields and SBS coupling. !/SBS ! @@ -2364,6 +2378,7 @@ !/SBS FOUTNAME = 'Field_done.' // IDTIME(1:4) & !/SBS // IDTIME(6:7) // IDTIME(9:10) & !/SBS // IDTIME(12:13) // '.' // FILEXT(1:JJ) +! !/SBS OPEN( UNIT=NDSOFLG, FILE=FOUTNAME) !/SBS CLOSE( NDSOFLG ) END IF diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 8b93efdb2b..afd14d8c85 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -377,6 +377,9 @@ !/MPI MPI_COMM_BCT, CROOT, FBCAST !/MPRF USE WMMDATMD, ONLY: MDSP USE W3INITMD, ONLY: WWVER +!XXX INLINE + USE W3ODATMD, ONLY: OFILES +! !/ IMPLICIT NONE ! @@ -407,8 +410,12 @@ INTEGER, ALLOCATABLE :: MDS(:,:), NTRACE(:,:), ODAT(:,:), & TMPRNK(:), TMPGRP(:), NINGRP(:), & TMOVE(:,:), LOADMP(:,:), IPRT(:,:), & - NDPOUT(:) + NDPOUT(:) & +!XXX + ,OUTFF(:,:) +!XXX REAL :: DTTST, XX, YY + !/MPRF REAL :: PRFT0, PRFTN !/MPRF REAL(KIND=8) :: get_memory REAL, ALLOCATABLE :: X(:), Y(:), AMOVE(:), DMOVE(:), & @@ -648,7 +655,8 @@ FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & - FLG2(NOGRP,NRGRD) ) + FLG2(NOGRP,NRGRD) & + ,OUTFF(7,0:NRGRD)) ! MDS = -1 MDSF = -1 @@ -1067,6 +1075,7 @@ ELSE READ (MDSI,*,END=2001,ERR=2002) STIME, ETIME END IF + write(*,*) STIME,ETIME CALL STME21 ( STIME , DTME21 ) IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) WRITE (MDSS,941) DTME21 CALL STME21 ( ETIME , DTME21 ) @@ -1110,9 +1119,23 @@ ! 5.b Process standard line ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) - READ (MDSI,*,END=2001,ERR=2002) (ODAT(I,1),I=5*(J-1)+1,5*J) +!XXX INLINE RP WORKING WITH +! READ (MDSI,*,END=2001,ERR=2002) (ODAT(I,1),I=5*(J-1)+1,5*J) + IF(J .LE. 2) THEN + READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J),OUTFF(J,1) + ELSE + READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) + OUTFF(J,1) = 0 + END IF +! + write(*,*) 'J; ', J + WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' + WRITE(*,*) (ODAT(I,1),I=5*(J-1)+1,5*J), OUTFF(J,1) + OUTPTS(1)%OFILES(J)=OUTFF(J,1) + WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) +!XXX ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) -! +! IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & WRITE (MDSS,951) J, IDOTYP(J) @@ -1283,10 +1306,14 @@ IF ( UNIPTS ) THEN ODAT(6:10,0) = ODAT(6:10,1) ODAT( 8 , 1) = 0 +!XXX + OUTPTS(1)%OFILES(1) = OUTFF(1,1) END IF ! DO I=2, NRGRD ODAT(:,I) = ODAT(:,1) +!XXX + OUTFF(:,I) = OUTFF(:,1) FLGD(:,I) = FLGD(:,1) FLGRD(:,:,I) = FLGRD(:,:,1) FLG2(:,I) = FLG2(:,1) @@ -1355,7 +1382,21 @@ ! 5.k Process standard line ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) - READ (MDSI,*,END=2001,ERR=2002) (ODAT(II,I),II=5*(J-1)+1,5*J) +!XXX ININE READ (MDSI,*,END=2001,ERR=2002) (ODAT(II,I),II=5*(J-1)+1,5*J) + IF(J .LE. 2) THEN + READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J),OUTFF(J,1) + ELSE + READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) + OUTFF(J,1) = 0 + END IF +! + write(*,*) 'endless loop ??????' + write(*,*) 'J; ', J + WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' + WRITE(*,*) (ODAT(I,1),I=5*(J-1)+1,5*J), OUTFF(J,1) + OUTPTS(1)%OFILES(J)=OUTFF(J,1) + WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) +!XXX ODAT(5*(J-1)+3,I) = MAX ( 0 , ODAT(5*(J-1)+3,I) ) ! IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN @@ -1514,6 +1555,8 @@ !/T DO I=1, NRGRD !/T WRITE (MDST,9050) I !/T WRITE (MDST,9051) ODAT(:,I) +!XXXINLINE +!/T WRITE (MDST,9051) OUTFF(:,I) !/T WRITE (MDST,9052) FLGRD(:,:,I) !/T END DO ! @@ -2047,10 +2090,11 @@ ! IF ( MDSS.NE.MDSO .AND. NMPSC2.EQ.IMPROC ) WRITE (MDSS,982) - CALL W3INIT ( I, .TRUE., MNAMES(I), MDS(:,I), NTRACE(:,I), ODAT(:,I), & + CALL W3INIT ( I, .TRUE., MNAMES(I), MDS(:,I), NTRACE(:,I), & + ODAT(:,I), & FLGRD(:,:,I),FLGR2(:,:,I),FLGD(:,I),FLG2(:,I), & OT2(I)%NPTS, OT2(I)%X, OT2(I)%Y, OT2(I)%PNAMES, & - IPRT(:,I), LPRT(I), MPI_COMM_LOC ) + IPRT(:,I), LPRT(I), MPI_COMM_LOC) ! ! ..... Finalize I/O file hook up ! @@ -2526,6 +2570,8 @@ OUTPTS(0)%DTOUT ( 2) = REAL ( ODAT( 8,0) ) OUTPTS(0)%TOLAST(1,2) = ODAT( 9,0) OUTPTS(0)%TOLAST(2,2) = ODAT(10,0) +!XXXINLINE + OUTPTS(0)%OFILES(:) = OUTFF(:,0) ! TOUT = OUTPTS(0)%TONEXT(:,2) TLST = OUTPTS(0)%TOLAST(:,2) @@ -2671,7 +2717,9 @@ IF ( TSTOUT ) CALL WMUDMP ( MDST, 0 ) ! DEALLOCATE ( MDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, FLG2, INAMES,& - MNAMES ) + MNAMES & +!XXX INLINE + ,OUTFF ) ! !/MPI CALL MPI_BARRIER ( MPI_COMM_MWAVE, IERR_MPI ) ! @@ -2983,6 +3031,8 @@ !/T 9050 FORMAT ( ' TEST WMINIT : GRID NUMBER',I3,' =================') !/T 9051 FORMAT ( ' TEST WMINIT : ODAT : ',I9.8,I7.6,I7,I9.8,I7.6, & !/T 5(/24X,I9.8,I7.6,I7,I9.8,I7.6) ) +!/T 9053 FORMAT ( ' TEST WMINITNML : OUTFF : ',I9.8 & +!/T 5(/24X,I9.8) ) !/T 9052 FORMAT ( ' TEST WMINIT : FLGRD : ',5(5L2,1X)/24X,5(5L2,1X)) ! !/T 9060 FORMAT ( ' TEST WMINIT : GRID MOVEMENT DATA') @@ -4358,7 +4408,7 @@ ! !/T DO I=1, NRGRD !/T WRITE (MDST,9050) I -!/T WRITE (MDST,9051) ODAT(:,I) +!/T WRITE (MDST,9053) ODAT(:,I) !/T WRITE (MDST,9052) FLGRD(:,:,I) !/T END DO ! @@ -4853,7 +4903,7 @@ ! ..... Model initialization ! IF ( MDSS.NE.MDSO .AND. NMPSC2.EQ.IMPROC ) WRITE (MDSS,982) - +! CALL W3INIT ( I, .TRUE., MNAMES(I), MDS(:,I), NTRACE(:,I), ODAT(:,I), & FLGRD(:,:,I),FLGR2(:,:,I),FLGD(:,I),FLG2(:,I), & OT2(I)%NPTS, OT2(I)%X, OT2(I)%Y, OT2(I)%PNAMES, & diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index c123ea7171..655ae07b2d 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -51,6 +51,8 @@ !/ 15-May-2018 : Update namelist ( version 6.05 ) !/ 06-Jun-2018 : Add PDLIB/MEMCHECK/NETCDF_QAD/DEBUGINIT ( version 6.04 ) !/ 14-Sep-2018 : Remove PALM implementation ( version 6.06 ) +!/ 04-Oct-2019 : Inline Output implementation ( version 6.07 ) +!/ (Roberto Padilla-Hernandez) !/ !/ Copyright 2009-2012 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -243,6 +245,8 @@ USE W3ODATMD, ONLY: W3NOUT, W3SETO USE W3ODATMD, ONLY: NAPROC, IAPROC, NAPOUT, NAPERR, NOGRP, & NGRPP, IDOUT, FNMPRE, IOSTYP, NOTYPE +!XXX INLINE + USE W3ODATMD, ONLY: OFILES !/ USE W3FLDSMD USE W3INITMD @@ -293,7 +297,8 @@ TIME0(2), TIMEN(2), TTIME(2), TTT(2), & NH(-7:8), THO(2,-7:8,NHMAX), RCLD(5:7), & NODATA(5:7), ODAT(35), IPRT(6) = 0, & - STARTDATE(8), STOPDATE(8), IHH(-7:8) + STARTDATE(8), STOPDATE(8), IHH(-7:8) +! !/OASIS INTEGER :: OASISED !/COU INTEGER :: OFL !/F90 INTEGER :: CLKDT1(8), CLKDT2(8), CLKDT3(8) @@ -1178,10 +1183,31 @@ !/DEBUGINIT write(740+IAPROC,*), 'J=', J, '/ NOTYPE=', NOTYPE CALL NEXTLN ( COMSTR , NDSI , NDSEN ) !/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 7' - READ (NDSI,*) (ODAT(I),I=5*(J-1)+1,5*J) +! +!INLINE NEW VARIABLE TO READ IF PRESENT OFILES(J), IF NOT ==0 +! READ (NDSI,*) (ODAT(I),I=5*(J-1)+1,5*J) +! READ (NDSI,*,IOSTAT=IERR) (ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) + IF(J .LE. 2) THEN + READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) + ELSE + OFILES(J)=0 + READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J) + END IF +! !/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 7' ODAT(5*(J-1)+3) = MAX ( 0 , ODAT(5*(J-1)+3) ) ! +!INLINE RP + IF (IERR.GT.0 .OR. OFILES(J).GT.1 .OR. OFILES(J).LT.0) THEN + WRITE(*,*)' OUTPUT OPTION IS NOT DECLARED OR' + WRITE(*,*)' DECLARED INCORRECTLY OPTION= ', OFILES(J) + WRITE(*,*)' OUTPUT OPTION FOR OUTPUT TYPE ',J, 'SET TO 0' + OFILES(J)=0 + WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' + WRITE(*,*) (ODAT(I),I=5*(J-1)+1,5*J), OFILES(J) + END IF +!XXX + !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL NOTTYPE', J !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) @@ -1624,7 +1650,7 @@ CALL W3INIT ( 1, .FALSE., 'ww3', NDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, & FLG2, NPTS, X, Y, PNAMES, IPRT, PRTFRM, MPI_COMM, & FLAGSTIDEIN=FLAGSTIDE ) - +! ! IF (MINVAL(VA) .LT. 0.) THEN ! WRITE(740+IAPROC,*) 'NEGATIVE ACTION SHELL 5', MINVAL(VA) ! CALL FLUSH(740+IAPROC) From fcd5a6d34f524e47a4931f452203296daa0cf694 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Tue, 29 Oct 2019 01:33:00 +0000 Subject: [PATCH 08/49] Moving profiling flag -p to optional block. Removing -p improves performance slightly, which can be welcome in operational applications. --- model/bin/cmplr.env | 70 +++++++++++++++++++++++------------- model/bin/comp.wcoss_dell_p3 | 5 +-- model/bin/link.wcoss_dell_p3 | 6 ++-- 3 files changed, 53 insertions(+), 28 deletions(-) diff --git a/model/bin/cmplr.env b/model/bin/cmplr.env index 7d17635b9a..c203f10600 100644 --- a/model/bin/cmplr.env +++ b/model/bin/cmplr.env @@ -38,8 +38,8 @@ list='no' # MPT # ############################### -if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ - [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] ; then +if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || [ "$cmplr" == "mpt_prof" ] || \ + [ "$cmplr" == "datarmor_mpt" ] || [ "$cmplr" == "datarmor_mpt_debug" ] || [ "$cmplr" == "datarmor_mpt_prof" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -53,12 +53,12 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ comp_mpi='ftn' fi - + # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' - optl='-o $prog -p -g' + optc='-c -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias' + optl='-o $prog -g' # list options if [ "$list" == 'yes' ] ; then optc="$optc -list"; fi @@ -72,6 +72,12 @@ if [ "$cmplr" == "mpt" ] || [ "$cmplr" == "mpt_debug" ] || \ optl="$optl -O3" fi + # profiling option + if [ -z "$(echo $cmplr | grep prof)" ] ; then + optc="$optc -p" + optl="$optl -p" + fi + # debugging options if [ ! -z "$(echo $cmplr | grep debug)" ] ; then optc="$optc -O0 -debug all -warn all -check all -check noarg_temp_created -fp-stack-check -heap-arrays -traceback -fpe0" @@ -94,13 +100,11 @@ fi # INTEL # ############################### -if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ - [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || \ - [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_phase2_intel_debug" ] || \ - [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_cray_intel_debug" ] || \ - [ "$cmplr" == "wcoss_dell_p3" ] || [ "$cmplr" == "wcoss_dell_p3_intel_debug" ] || \ - [ "$cmplr" == "theia" ] || [ "$cmplr" == "hera" ] || \ - [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] ; then +if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || [ "$cmplr" == "intel_prof" ] || \ + [ "$cmplr" == "so_intel" ] || [ "$cmplr" == "so_intel_debug" ] || [ "$cmplr" == "so_intel_prof" ] || \ + [ "$cmplr" == "datarmor_intel" ] || [ "$cmplr" == "datarmor_intel_debug" ] || [ "$cmplr" == "datarmor_intel_prof" ] || \ + [ "$cmplr" == "wcoss_phase2" ] || [ "$cmplr" == "wcoss_cray" ] || [ "$cmplr" == "wcoss_dell_p3" ] || \ + [ "$cmplr" == "theia" ] || [ "$cmplr" == "hera" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -119,8 +123,8 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox' - optl='-o $prog -p -g' + optc='-c -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox' + optl='-o $prog -g' if [ ! -z "$(echo $cmplr | grep datarmor)" ] ; then optc="$optc -xcore-avx2" @@ -157,6 +161,12 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ optl="$optl -O3" fi + # profiling option + if [ -z "$(echo $cmplr | grep prof)" ] ; then + optc="$optc -p" + optl="$optl -p" + fi + # debugging options if [ ! -z "$(echo $cmplr | grep debug)" ] ; then optc="$optc -O0 -debug all -warn all -check all -check noarg_temp_created -fp-stack-check -heap-arrays -traceback -fpe0" @@ -174,7 +184,7 @@ if [ "$cmplr" == "intel" ] || [ "$cmplr" == "intel_debug" ] || \ if [ ! -z "$(echo $cmplr | grep so)" ] ; then optc="$optc -fPIC" - optl='-o $prog -p -g' + optl='-o $prog -g' fi fi @@ -183,9 +193,9 @@ fi # GNU # ############################### -if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ - [ "$cmplr" == "so_gnu" ] || [ "$cmplr" == "so_gnu_debug" ] || \ - [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] ; then +if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || [ "$cmplr" == "gnu_prof" ] || \ + [ "$cmplr" == "so_gnu" ] || [ "$cmplr" == "so_gnu_debug" ] || [ "$cmplr" == "so_gnu_prof" ] || \ + [ "$cmplr" == "datarmor_gnu" ] || [ "$cmplr" == "datarmor_gnu_debug" ] || [ "$cmplr" == "datarmor_gnu_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -203,8 +213,8 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -J$path_m -p -g -fno-second-underscore -ffree-line-length-none -fconvert=big-endian' - optl='-o $prog -p -g' + optc='-c -J$path_m -g -fno-second-underscore -ffree-line-length-none -fconvert=big-endian' + optl='-o $prog -g' # omp options if [ "$omp_mod" == 'yes' ] ; then optc="$optc -fopenmp"; optl="$optl -fopenmp"; fi @@ -215,6 +225,12 @@ if [ "$cmplr" == "gnu" ] || [ "$cmplr" == "gnu_debug" ] || \ optl="$optl -O3" fi + # profiling option + if [ -z "$(echo $cmplr | grep prof)" ] ; then + optc="$optc -p" + optl="$optl -p" + fi + # debugging options if [ ! -z "$(echo $cmplr | grep debug)" ] ; then optc="$optc -O0 -Wall -fcheck=all -ffpe-trap=invalid,zero,overflow -frecursive -fbacktrace" @@ -239,8 +255,8 @@ fi # PGI # ############################### -if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ - [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then +if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || [ "$cmplr" == "pgi_prof" ] || \ + [ "$cmplr" == "datarmor_pgi" ] || [ "$cmplr" == "datarmor_pgi_debug" ] || [ "$cmplr" == "datarmor_pgi_debug" ] ; then # COMPILER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -258,8 +274,8 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ # OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # common options - optc='-c -module $path_m -p -g -i4 -r4 -Kieee -byteswapio' - optl='-o $prog -p -g' + optc='-c -module $path_m -g -i4 -r4 -Kieee -byteswapio' + optl='-o $prog -g' # list options if [ "$list" == 'yes' ] ; then optc="$optc -Mlist"; fi @@ -273,6 +289,12 @@ if [ "$cmplr" == "pgi" ] || [ "$cmplr" == "pgi_debug" ] || \ optl="$optl -O3" fi + # profiling option + if [ -z "$(echo $cmplr | grep prof)" ] ; then + optc="$optc -p" + optl="$optl -p" + fi + # debugging options if [ ! -z "$(echo $cmplr | grep debug)" ] ; then optc="$optc -O0 -Mbounds -Mchkfpstk -Mchkstk -Mdalign -Mdclchk -Mdepchk -Miomutex -Ktrap=fp -Mrecursive -traceback" diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 index 8287fbde39..604568a1fb 100755 --- a/model/bin/comp.wcoss_dell_p3 +++ b/model/bin/comp.wcoss_dell_p3 @@ -80,9 +80,10 @@ # opt="-c $list -O3 -assume byterecl -ip -module $path_m" -opt="-c $list -module $path_m -no-fma -ip -p -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox" +opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox" opt="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" - +# Add profiling +# opt="$opt -p" ### opt="-c $list -O2 -Wp,-w -fno-alias -auto -ftz -assume byterecl -nowarn -sox -align array64byte" ### opt="$opt -xHOST -qno-opt-dynamic-align -fp-model source -ip -module $path_m" ## opt="$opt -nowarn -sox -align array64byte -real-size 32 -xHOST -qno-opt-dynamic-align" diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 index bc10af18aa..16aa631d81 100755 --- a/model/bin/link.wcoss_dell_p3 +++ b/model/bin/link.wcoss_dell_p3 @@ -87,10 +87,12 @@ # linking options libs="" # opt="-O2 -ip -o $prog" -opt="-o $prog -p -g" +opt="-o $prog -g" opt="$opt -xhost" +# Add profiling +# opt="$opt -p" -# opt="-O3 -ip -o $prog" +# opt="-O3 -ip -o $prog" # opt="-O3 -xSSE4.2 -ip -o $prog" # opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" # opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" From 91bf936e6ccd5f01811abf84ecab8e046f1bc1d2 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Thu, 31 Oct 2019 15:31:45 -0400 Subject: [PATCH 09/49] working for field ouputs --- model/ftn/w3iogomd.ftn | 3 +-- model/ftn/w3odatmd.ftn | 13 +++++++++---- model/ftn/w3wavemd.ftn | 14 ++++++++++---- model/ftn/wminitmd.ftn | 14 ++++++++------ model/ftn/wmwavemd.ftn | 14 +++++++++++++- 5 files changed, 41 insertions(+), 17 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 977f76cd7f..63f0a63b64 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2632,8 +2632,7 @@ I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) ! - write(*,*) '=============================================' - write(*,*) 'FCSTTIME: ',FCSTTIME +!XXX write(*,*) 'FCSTTIME: ',FCSTTIME IF (FCSTTIME .LT. 10.) THEN CO='00' ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 6684c5140b..65f3e5d490 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -127,7 +127,7 @@ ! suppl. data for output type 5. ! OUT6 TYPE Public Data structure of type OTYPE6 with ! suppl. data for output type 6. -!INLINE OFILES I.A. Public Output in one or several files. +!XXXINLINE OFILES I.A. Public Output in one or several files. ! ---------------------------------------------------------------- ! ! Elements of OUT1 are aliased to pointers with the same @@ -403,6 +403,8 @@ TBPI0(2), TBPIN(2), NDS(13) & !XXX INLINE ,OFILES(7) + INTEGER :: ITCOUNTER +!XXX REAL :: DTOUT(7) LOGICAL :: FLOUT(7) TYPE(OTYPE1) :: OUT1 @@ -428,6 +430,8 @@ TBPI0(:), TBPIN(:), NDS(:) !XXX INLINE INTEGER, POINTER :: OFILES(:) + INTEGER, POINTER :: ITCOUNTER +!XXX REAL, POINTER :: DTOUT(:) LOGICAL, POINTER :: FLOUT(:) !/ @@ -1510,9 +1514,10 @@ NDS => OUTPTS(IMOD)%NDS !XXX INLINE OFILES => OUTPTS(IMOD)%OFILES - WRITE(*,*) 'W3SETO IMOD:', IMOD - WRITE(*,*) 'OFILES(J)', (OFILES(J),J=1,7) - WRITE(*,*) 'OUTPTS(I)%OFILES(:)', OUTPTS(1)%OFILES(:) + ITCOUNTER=>OUTPTS(IMOD)%ITCOUNTER +! WRITE(*,*) 'W3SETO IMOD:', IMOD +! WRITE(*,*) 'OFILES(J)', (OFILES(J),J=1,7) +! WRITE(*,*) 'OUTPTS(I)%OFILES(:)', OUTPTS(1)%OFILES(:) !XXX ! DTOUT => OUTPTS(IMOD)%DTOUT diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 27d37b64b3..d9ed94bcc1 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -908,6 +908,10 @@ !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! ITIME = ITIME + 1 +!XXX INLINE +! write(*,*) '-------ITCOUNTER: ', ITCOUNTER +!XXX +! DTG = REAL(NINT(DTGA+DTRES+0.0001)) DTRES = DTRES + DTGA - DTG IF ( ABS(DTRES) .LT. 0.001 ) DTRES = 0. @@ -2361,12 +2365,14 @@ !/MPI FLGMPI(1) = .FALSE. ! !XXX INLINE - write(*,*)'***GENERATING OUTPUT AT: ***' - FCSTTIME=ITIME*DTCFL/3600 - write(*,*) 'J, FCST HOUR IN W3WAVE: ',J, FCSTTIME - write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD + write(*,*)'*********************GENERATING OUTPUT AT: ******************' +! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME + FCSTTIME=ITCOUNTER*DTCFL/3600 +! write(*,*) 'J, FCSTTIME: ',J, FCSTTIME +! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD IF ( J .EQ. 1 ) CALL W3IOGO & +!replace ( 'WRITE', NDS(7), ITEST, IMOD ) ( 'WRITE', NDS(7), ITEST, IMOD,FCSTTIME ) !XXX ! diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index afd14d8c85..93ffa61e8b 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -1075,7 +1075,7 @@ ELSE READ (MDSI,*,END=2001,ERR=2002) STIME, ETIME END IF - write(*,*) STIME,ETIME +! CALL STME21 ( STIME , DTME21 ) IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) WRITE (MDSS,941) DTME21 CALL STME21 ( ETIME , DTME21 ) @@ -1127,12 +1127,14 @@ READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) OUTFF(J,1) = 0 END IF -! - write(*,*) 'J; ', J - WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' - WRITE(*,*) (ODAT(I,1),I=5*(J-1)+1,5*J), OUTFF(J,1) +! OUTPTS(1)%OFILES(J)=OUTFF(J,1) - WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) +! +! +! write(*,*) 'J; ', J +! WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' +! WRITE(*,*) (ODAT(I,1),I=5*(J-1)+1,5*J), OUTFF(J,1) +! WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) !XXX ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) ! diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index 65aaecf769..fa96c2361f 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -191,7 +191,9 @@ USE W3GDATMD, ONLY: W3SETG USE W3WDATMD, ONLY: W3SETW USE W3ADATMD, ONLY: W3SETA - USE W3ODATMD, ONLY: W3SETO, NOTYPE + USE W3ODATMD, ONLY: W3SETO, NOTYPE & +!XXX INLINE + ,ITCOUNTER USE W3IOPOMD, ONLY: W3IOPE USE W3WAVEMD, ONLY: W3WAVE USE W3SERVMD, ONLY: EXTCDE, WWTIME @@ -235,6 +237,9 @@ !/ INTEGER :: J, JJ, I, JO, TPRNT(2), TAUX(2), & II, JJJ, IX, IY, UPNEXT(2), UPLAST(2) +!XXX +! INTEGER :: ITCOUNTER +!XXX !/T INTEGER :: ILOOP !/S INTEGER, SAVE :: IENT = 0 !/MPI INTEGER :: IERR_MPI, NMPSCS @@ -355,8 +360,15 @@ CALL STME21 ( TSYNC(:,0), MTIME ) CALL WWTIME ( WTIME ) WRITE (MDSS,901) MTIME, WTIME, MINVAL(GRSTAT), MAXVAL(GRSTAT) + +! TPRNT = TSYNC(:,0) TSTAMP = .TRUE. +!XXX + ITCOUNTER=ITCOUNTER+1 +! write(*,*) '======ITCOUNTER: ', ITCOUNTER +!XXX + ENDIF ! !/T ILOOP = ILOOP + 1 From ebdea194560554e6a007cbaeaca8c357407c1d14 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Fri, 1 Nov 2019 13:38:58 -0400 Subject: [PATCH 10/49] multi and shel are working for inline field ouputs --- model/ftn/w3iogomd.ftn | 4 +++- model/ftn/w3odatmd.ftn | 2 +- model/ftn/w3wavemd.ftn | 19 +++++++++++++++++-- model/ftn/wmwavemd.ftn | 2 +- model/ftn/ww3_shel.ftn | 3 ++- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 63f0a63b64..7261a281ba 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2622,6 +2622,7 @@ ! END IF ! +!XXX INLINE POSPROC !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ! IN CASE OF GENERATION OF A NEW FILE OUTPUT EVERY DELTA OUTPUT @@ -2632,7 +2633,8 @@ I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) ! -!XXX write(*,*) 'FCSTTIME: ',FCSTTIME + + write(*,*) '===FCSTTIME: ',FCSTTIME IF (FCSTTIME .LT. 10.) THEN CO='00' ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 65f3e5d490..85e777d35f 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -403,7 +403,7 @@ TBPI0(2), TBPIN(2), NDS(13) & !XXX INLINE ,OFILES(7) - INTEGER :: ITCOUNTER + INTEGER :: ITCOUNTER=0 !XXX REAL :: DTOUT(7) LOGICAL :: FLOUT(7) diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index d9ed94bcc1..cd79a843dc 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -428,6 +428,7 @@ REAL :: ICEDAVE & !INLINE RPH ,FCSTTIME + INTEGER, SAVE :: ITCOUNTER2=0 !XXX !/OASIS INTEGER :: OASISED @@ -909,7 +910,11 @@ ! ITIME = ITIME + 1 !XXX INLINE -! write(*,*) '-------ITCOUNTER: ', ITCOUNTER + IF ( TSTAMP .AND. SCREEN.NE.NDSO .AND. IAPROC.EQ.NAPOUT & + .AND. ITCOUNTER2 .EQ. 0) THEN + ITCOUNTER= ITCOUNTER-1 + ITCOUNTER2=1 + END IF !XXX ! DTG = REAL(NINT(DTGA+DTRES+0.0001)) @@ -929,6 +934,9 @@ CALL WWTIME ( STTIME ) CALL STME21 ( TIME , IDTIME ) WRITE (SCREEN,950) IDTIME, STTIME +!XXX + ITCOUNTER=ITCOUNTER+1 +!XXX END IF !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE TIME LOOP 2' @@ -2154,6 +2162,13 @@ ! !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "end of time loop") !/TIMINGS CALL PRINT_MY_TIME("end of time loop") +! +!XXX +! IF ( TSTAMP .AND. SCREEN.NE.NDSO .AND. IAPROC.EQ.NAPOUT ) THEN +! ITCOUNTER=ITCOUNTER+1 +! write(*,*) '======W3WAVE ITCOUNTER: ', ITCOUNTER +! END IF +!XXX END DO !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, step 6.21.1' @@ -2368,7 +2383,7 @@ write(*,*)'*********************GENERATING OUTPUT AT: ******************' ! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME FCSTTIME=ITCOUNTER*DTCFL/3600 -! write(*,*) 'J, FCSTTIME: ',J, FCSTTIME + write(*,*) 'J, FCSTTIME: ',J, FCSTTIME ! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD IF ( J .EQ. 1 ) CALL W3IOGO & diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index fa96c2361f..050ab85861 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -366,7 +366,7 @@ TSTAMP = .TRUE. !XXX ITCOUNTER=ITCOUNTER+1 -! write(*,*) '======ITCOUNTER: ', ITCOUNTER + write(*,*) '======WMWAVE ITCOUNTER: ', ITCOUNTER !XXX ENDIF diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 655ae07b2d..42bcfdc285 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -1205,7 +1205,8 @@ OFILES(J)=0 WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' WRITE(*,*) (ODAT(I),I=5*(J-1)+1,5*J), OFILES(J) - END IF + END IF + WRITE(*,*) (ODAT(I),I=5*(J-1)+1,5*J), OFILES(J) !XXX !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL NOTTYPE', J From 1f03713e2f31686a716faa61fc13c1f658f86591 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Fri, 1 Nov 2019 20:33:47 -0400 Subject: [PATCH 11/49] progressing in inline point ouputs --- model/ftn/w3iogomd.ftn | 22 ++++++-- model/ftn/w3iopomd.ftn | 121 ++++++++++++++++++++++++++++++++++++++++- model/ftn/w3wavemd.ftn | 12 +++- model/ftn/wmwavemd.ftn | 2 +- 4 files changed, 145 insertions(+), 12 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 7261a281ba..15dc5ffc77 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2453,7 +2453,7 @@ ! !/ ------------------------------------------------------------------- / USE CONSTANTS -!XXX INLINE +!XXX INLINE DELETE THIS ! USE W3INITMD USE W3GDATMD !/ @@ -2512,7 +2512,7 @@ !/ INTEGER :: IGRD, IERR, I, J, IX, IY, MOGRP, & MGRPP, ISEA, MOSWLL, IK, IFI, IFJ & -!XXX INLINE +!XXX INLINE DELETE THIS ,IFILOUT INTEGER, ALLOCATABLE :: MAPTMP(:,:) !/S INTEGER, SAVE :: IENT = 0 @@ -2549,7 +2549,7 @@ END IF ! !INLINE IF ( IPASS.EQ.1 ) THEN - IF ( IPASS.GE.1 ) THEN + IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN WRITE = INXOUT.EQ.'WRITE' ELSE IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN @@ -2628,6 +2628,17 @@ ! IN CASE OF GENERATION OF A NEW FILE OUTPUT EVERY DELTA OUTPUT ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) + + + IF ( IPASS.GE.1 .AND. OFILES(1) .EQ. 1) THEN + WRITE = INXOUT.EQ.'WRITE' + ELSE + IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN + WRITE (NDSE,901) INXOUT + CALL EXTCDE ( 2 ) + END IF + END IF + ! IF ( IPASS.GE.1 .AND. OFILES(1) .EQ. 1) THEN I = LEN_TRIM(FILEXT) @@ -2644,12 +2655,11 @@ ! Convert integer FCSTTIME into a character Hstr with 3 columns WRITE(Hstr,"(f6.2)") FCSTTIME FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) - WRITE(*,*)'OUT FILE: ',FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I) ! !/T WRITE (NDST,9001) FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I) IF ( WRITE ) THEN - OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I), & - FORM='UNFORMATTED',ERR=800,IOSTAT=IERR) + OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FCSTNAM//'.' & + //FILEXT(:I),FORM='UNFORMATTED',ERR=800,IOSTAT=IERR) ELSE OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FILEXT(:I), & FORM='UNFORMATTED',ERR=800,IOSTAT=IERR,STATUS='OLD') diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index ec9f83e710..bf0a917741 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -856,7 +856,8 @@ !/ END SUBROUTINE W3IOPE !/ ------------------------------------------------------------------- / - SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD ) +!XXX SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD ) + SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD, FCSTTIME ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -888,6 +889,7 @@ ! 0 : Data read. ! -1 : Past end of file. ! IMOD I(O) I Model number for W3GDAT etc. +!XXX FCSTTIME Real I Forecast time in hours from initial time ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -939,6 +941,9 @@ IL, IW, II, PTLOC, PTIFAC, DPO, WAO, WDO, & ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, & GRDID, ICEO, ICEHO, ICEFO +!XXX INLINE + USE W3ODATMD, ONLY : OFILES +!XXX !/SETUP USE W3ODATMD, ONLY: ZET_SETO !/ USE W3SERVMD, ONLY: EXTCDE @@ -953,6 +958,9 @@ INTEGER, INTENT(OUT) :: IOTST INTEGER, INTENT(IN), OPTIONAL :: IMOD CHARACTER, INTENT(IN) :: INXOUT*(*) +!XXX + REAL, INTENT(IN), OPTIONAL :: FCSTTIME +!XXX !/ !/ ------------------------------------------------------------------- / !/ local parameters @@ -962,6 +970,12 @@ LOGICAL,SAVE :: WRITE CHARACTER(LEN=31) :: IDTST CHARACTER(LEN=10) :: VERTST +!XXX + CHARACTER(LEN=3) :: CO + CHARACTER(LEN=6) :: Hstr + CHARACTER(LEN=7) :: FCSTNAM +!XXX + !/ !/ ------------------------------------------------------------------- / !/ @@ -986,7 +1000,8 @@ CALL EXTCDE ( 1 ) END IF ! - IF ( IPASS.EQ.1 ) THEN +! IF ( IPASS.EQ.1 ) THEN + IF ( IPASS.EQ.1 .AND. OFILES(2) .EQ. 0) THEN WRITE = INXOUT.EQ.'WRITE' ELSE IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN @@ -994,10 +1009,14 @@ CALL EXTCDE ( 2 ) END IF END IF +!XXX INLINE + WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) + write(*,*) 'In iopomd IPASS, OFILES(2):',IPASS, OFILES(1) +!XXX ! ! open file ---------------------------------------------------------- * ! - IF ( IPASS.EQ.1 ) THEN + IF ( IPASS.EQ.1 .AND. OFILES(2) .EQ. 0 ) THEN ! I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) @@ -1059,6 +1078,101 @@ ! END IF ! +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +!XXX=================INLINE +! + IF ( IPASS.GE. 1 .AND. OFILES(2) .EQ. 1) THEN + WRITE = INXOUT.EQ.'WRITE' + ELSE + IF ( WRITE .AND. INXOUT.EQ.'READ' ) THEN + WRITE (NDSE,901) INXOUT + CALL EXTCDE ( 2 ) + END IF + END IF + +! open file ---------------------------------------------------------- * +! + IF ( IPASS.GE.1 .AND. OFILES(2) .EQ. 1) THEN +! + I = LEN_TRIM(FILEXT) + J = LEN_TRIM(FNMPRE) + + write(*,*) '===FCSTTIME: ',FCSTTIME + IF (FCSTTIME .LT. 10.) THEN + CO='00' + ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN + CO='0' + END IF + +! Convert integer FCSTTIME into a character Hstr with 3 columns + WRITE(Hstr,"(f6.2)") FCSTTIME + FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) + +! +!/T WRITE (NDST,9001) FNMPRE(:J)//'out_pnt.'//FCSTNAM//'.'// & +!/T FILEXT(:I) + IF ( WRITE ) THEN + OPEN (NDSOP,FILE=FNMPRE(:J)//'out_pnt.'//FCSTNAM//'.' & + //FILEXT(:I),FORM='UNFORMATTED',ERR=800,IOSTAT=IERR) +! ELSE +! OPEN (NDSOP,FILE=FNMPRE(:J)//'out_pnt.'//FILEXT(:I),& +! FORM='UNFORMATTED',ERR=800,IOSTAT=IERR,STATUS='OLD') + END IF +! + REWIND ( NDSOP ) +! +! +! test info ---------------------------------------------------------- * +! ( IPASS GE.1 .AND. OFILES(2) .EQ. 1) +! + IF ( WRITE ) THEN + WRITE (NDSOP) & + IDSTR, VEROPT, NK, NTH, NOPTS + ELSE + READ (NDSOP,END=801,ERR=802,IOSTAT=IERR) & + IDTST, VERTST, MK, MTH, NOPTS +! + IF ( IDTST .NE. IDSTR ) THEN + WRITE (NDSE,902) IDTST, IDSTR + CALL EXTCDE ( 10 ) + END IF + IF ( VERTST .NE. VEROPT ) THEN + WRITE (NDSE,903) VERTST, VEROPT + CALL EXTCDE ( 11 ) + END IF + IF (NK.NE.MK .OR. NTH.NE.MTH) THEN + WRITE (NDSE,904) MK, MTH, NK, NTH + CALL EXTCDE ( 12 ) + END IF + IF ( .NOT. O2INIT ) & + CALL W3DMO2 ( IGRD, NDSE, NDST, NOPTS ) + END IF +! +!/T WRITE (NDST,9002) IDSTR, VEROPT, NK, NTH, NOPTS +! +! Point specific info ------------------------------------------------ * +! ( IPASS GE.1 .AND. OFILES(2) .EQ. 1) +! + IF ( WRITE ) THEN + WRITE (NDSOP) & + ((PTLOC(J,I),J=1,2),I=1,NOPTS), (PTNME(I),I=1,NOPTS) + ELSE + READ (NDSOP,END=801,ERR=802,IOSTAT=IERR) & + ((PTLOC(J,I),J=1,2),I=1,NOPTS), (PTNME(I),I=1,NOPTS) + END IF +! +!/T WRITE (NDST,9003) +!/T DO I=1, NOPTS +!/T WRITE (NDST,9004) I, PTLOC(1,I), PTLOC(2,I), PTNME(I) +!/T END DO +! + END IF +! +! +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +! ! TIME --------------------------------------------------------------- * ! IF ( WRITE ) THEN @@ -1094,6 +1208,7 @@ END IF ! END DO + IF (OFILES(2) .EQ. 1) CLOSE (NDSOP) ! RETURN ! diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index cd79a843dc..2d870abc78 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -2380,7 +2380,7 @@ !/MPI FLGMPI(1) = .FALSE. ! !XXX INLINE - write(*,*)'*********************GENERATING OUTPUT AT: ******************' + write(*,*)'*********GENERATING FOR GRID: ******************' ! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME FCSTTIME=ITCOUNTER*DTCFL/3600 write(*,*) 'J, FCSTTIME: ',J, FCSTTIME @@ -2429,7 +2429,15 @@ ! Gets the necessary spectral data ! CALL W3IOPE ( VA ) - CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD ) +!XXX INLINE + write(*,*)'*********GENERATING OUTPUT FOR FOR POINTS: ******************' +! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME + FCSTTIME=ITCOUNTER*DTCFL/3600 + write(*,*) 'J, FCSTTIME: ',J, FCSTTIME +! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD + +!XXX CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD ) + CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD, FCSTTIME ) END IF ! ELSE IF ( J .EQ. 3 ) THEN diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index 050ab85861..54b353967d 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -366,7 +366,7 @@ TSTAMP = .TRUE. !XXX ITCOUNTER=ITCOUNTER+1 - write(*,*) '======WMWAVE ITCOUNTER: ', ITCOUNTER +! write(*,*) '======WMWAVE ITCOUNTER: ', ITCOUNTER !XXX ENDIF From dddb378d5f858cbb27b2ae4e4dad4507246b79d8 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Sat, 2 Nov 2019 20:30:17 +0000 Subject: [PATCH 12/49] Adding lower bound for frequency value equal to lowest discrete frequency FR1, temporarily provides fix for grib2 encoding failing due to unrealistically low peak frequency values --- model/ftn/w3iogomd.ftn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 01cff23c7b..4face6aad0 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2857,7 +2857,7 @@ ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 5 ) THEN WRITE ( NDSOG ) T01(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 6 ) THEN - WRITE ( NDSOG ) FP0(1:NSEA) + WRITE ( NDSOG ) MAX(FR1,FP0(1:NSEA)) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 7 ) THEN WRITE ( NDSOG ) THM(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 8 ) THEN From f7acb17888fc69ff1d5263eb6a30575b9fbd6dd1 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Sat, 2 Nov 2019 20:34:36 +0000 Subject: [PATCH 13/49] Adding to w3iogomd and ww3_grib lower bound for frequency value equal to lowest discrete frequency FR1, temporarily provides fix for grib2 encoding failing due to unrealistically low peak frequency values --- model/ftn/ww3_grib.ftn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/ftn/ww3_grib.ftn b/model/ftn/ww3_grib.ftn index 28a8eacaee..ae057ff801 100644 --- a/model/ftn/ww3_grib.ftn +++ b/model/ftn/ww3_grib.ftn @@ -1150,7 +1150,7 @@ !/NCEP2 KPDS(2) = 11 DO ISEA=1, NSEA IF ( FP0(ISEA) .NE. UNDEF .AND. FP0(ISEA) .NE. 0 ) THEN - FP0(ISEA) = 1. / FP0(ISEA) + FP0(ISEA) = 1. / MAX(FR1,FP0(ISEA)) ! Limit FP to lowest discrete frequency END IF END DO CALL W3S2XY ( NSEA, NSEA, NX, NY, FP0 , MAPSF, X1 ) From 0a220ffa42c9cb677f8fa657499ba113cc4425ab Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Sat, 2 Nov 2019 17:04:02 -0400 Subject: [PATCH 14/49] InlinePost ready for namelist as well --- model/ftn/w3nmlmultimd.ftn | 9 ++++++++ model/ftn/wminitmd.ftn | 42 +++++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index dbde2ce2c8..5932939e7e 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -151,6 +151,9 @@ CHARACTER(15) :: START CHARACTER(15) :: STRIDE CHARACTER(15) :: STOP +!XXX + CHARACTER(1) :: OUTFFILE +!XXX END TYPE NML_OUTPUT_TIME_T ! TYPE NML_OUTPUT_DATE_T @@ -1161,9 +1164,15 @@ ALLDATE%FIELD%START = '19680606 000000' ALLDATE%FIELD%STRIDE = '0' ALLDATE%FIELD%STOP = '19680607 000000' +!XXX + ALLDATE%FIELD%OUTFFILE = '0' +!XXX ALLDATE%POINT%START = '19680606 000000' ALLDATE%POINT%STRIDE = '0' ALLDATE%POINT%STOP = '19680607 000000' +!XXX + ALLDATE%POINT%OUTFFILE = '0' +!XXX ALLDATE%TRACK%START = '19680606 000000' ALLDATE%TRACK%STRIDE = '0' ALLDATE%TRACK%STOP = '19680607 000000' diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 93ffa61e8b..e8d322b36e 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -656,7 +656,9 @@ MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & FLG2(NOGRP,NRGRD) & +!XXX ,OUTFF(7,0:NRGRD)) +!XXX ! MDS = -1 MDSF = -1 @@ -1386,16 +1388,16 @@ CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) !XXX ININE READ (MDSI,*,END=2001,ERR=2002) (ODAT(II,I),II=5*(J-1)+1,5*J) IF(J .LE. 2) THEN - READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J),OUTFF(J,1) + READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,1),II=5*(J-1)+1,5*J),OUTFF(J,1) ELSE - READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) + READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,1),II=5*(J-1)+1,5*J) OUTFF(J,1) = 0 END IF ! write(*,*) 'endless loop ??????' write(*,*) 'J; ', J WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' - WRITE(*,*) (ODAT(I,1),I=5*(J-1)+1,5*J), OUTFF(J,1) + WRITE(*,*) (ODAT(II,1),II=5*(J-1)+1,5*J), OUTFF(J,1) OUTPTS(1)%OFILES(J)=OUTFF(J,1) WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) !XXX @@ -3304,6 +3306,9 @@ USE W3WDATMD, ONLY: W3NDAT, W3SETW USE W3ADATMD, ONLY: W3NAUX, W3SETA USE W3ODATMD, ONLY: W3NOUT, W3SETO +!XXX INLINE + USE W3ODATMD, ONLY: OFILES +!XXX USE W3IDATMD, ONLY: W3NINP, W3SETI, W3DIMI USE WMMDATMD, ONLY: WMNDAT, WMSETM, WMDIMD ! @@ -3399,7 +3404,10 @@ INTEGER, ALLOCATABLE :: MDS(:,:), NTRACE(:,:), ODAT(:,:), & TMPRNK(:), TMPGRP(:), NINGRP(:), & TMOVE(:,:), LOADMP(:,:), IPRT(:,:), & - NDPOUT(:) + NDPOUT(:) & +!XXX + ,OUTFF(:,:) +!XXX ! REAL :: DTTST, XX, YY !/MPRF REAL :: PRFT0, PRFTN @@ -3657,7 +3665,10 @@ FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & - FLG2(NOGRP,NRGRD) ) + FLG2(NOGRP,NRGRD) & +!XXX + ,OUTFF(7,0:NRGRD)) +!XXX ! MDS = -1 MDSF = -1 @@ -4152,9 +4163,18 @@ READ(NML_OUTPUT_DATE(I)%FIELD%START, *) ODAT(1,I), ODAT(2,I) READ(NML_OUTPUT_DATE(I)%FIELD%STRIDE, *) ODAT(3,I) READ(NML_OUTPUT_DATE(I)%FIELD%STOP, *) ODAT(4,I), ODAT(5,I) +!XXX + + READ(NML_OUTPUT_DATE(I)%FIELD%OUTFFILE, *) OUTFF(1,I) +!XXX READ(NML_OUTPUT_DATE(I)%POINT%START, *) ODAT(6,I), ODAT(7,I) READ(NML_OUTPUT_DATE(I)%POINT%STRIDE, *) ODAT(8,I) READ(NML_OUTPUT_DATE(I)%POINT%STOP, *) ODAT(9,I), ODAT(10,I) +!XXX + READ(NML_OUTPUT_DATE(I)%POINT%OUTFFILE, *) OUTFF(2,I) + WRITE(*,*) ' LOOP OVER NRGRD' + WRITE(*,*) 'I,OUTFF(1,I),OUTFF(2,I)=',I,OUTFF(1,I),OUTFF(2,I) +!XX READ(NML_OUTPUT_DATE(I)%TRACK%START, *) ODAT(11,I), ODAT(12,I) READ(NML_OUTPUT_DATE(I)%TRACK%STRIDE, *) ODAT(13,I) READ(NML_OUTPUT_DATE(I)%TRACK%STOP, *) ODAT(14,I), ODAT(15,I) @@ -4195,6 +4215,10 @@ ! ! 5.b Process standard line ! +!XXX + OUTPTS(I)%OFILES(J)=OUTFF(J,I) + WRITE(*,*) 'XXXX: ',OUTPTS(I)%OFILES(J), OUTFF(J,I) +!XXX IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & WRITE (MDSS,951) J, IDOTYP(J) @@ -4226,6 +4250,14 @@ WRITE (MDSS,954) DTME21(1:19) END IF +!xxxxxxxxxxxxxxx +!XXX +! OUTPTS(1)%OFILES(1) = OUTFF(J,1) +! OUTFF(:,I) = OUTFF(:,1) +!xxxxxxxxxxxxxxx + + + IF ( J .EQ. 1 ) THEN ! ! 5.c Type 1: fields of mean wave parameters From 6c4c82fbe6dae219e581bccd02406c069f367a42 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Tue, 5 Nov 2019 14:47:13 -0500 Subject: [PATCH 15/49] Working for shel and multi --- model/ftn/w3iogomd.ftn | 5 ++- model/ftn/w3iopomd.ftn | 4 +- model/ftn/w3odatmd.ftn | 11 ++--- model/ftn/w3wavemd.ftn | 35 ++++++++++------ model/ftn/wminitmd.ftn | 40 +++++++++++++++---- model/ftn/wmwavemd.ftn | 8 ++-- .../mww3_test_06/input/ww3_multi_grdset_d.inp | 4 +- regtests/ww3_tp1.1/input/ww3_shel.inp | 4 +- 8 files changed, 74 insertions(+), 37 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 15dc5ffc77..e3a6fdfb55 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2561,7 +2561,7 @@ !/T WRITE (NDST,9000) IPASS, INXOUT, WRITE, NDSOG, IGRD, FILEXT ! !XXX INLINE - WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) +! WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) !XXX ! ! open file ---------------------------------------------------------- * @@ -2650,11 +2650,14 @@ CO='00' ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN CO='0' + ELSE IF (FCSTTIME .GE. 100) THEN + CO='' END IF ! Convert integer FCSTTIME into a character Hstr with 3 columns WRITE(Hstr,"(f6.2)") FCSTTIME FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) + write(*,*)'w3iogo OutPut Filename: out_grd.', FCSTNAM,'.',FILEXT(:I) ! !/T WRITE (NDST,9001) FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I) IF ( WRITE ) THEN diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index bf0a917741..bfb29b1566 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -1010,7 +1010,7 @@ END IF END IF !XXX INLINE - WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) +! WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) write(*,*) 'In iopomd IPASS, OFILES(2):',IPASS, OFILES(1) !XXX ! @@ -1108,7 +1108,7 @@ ! Convert integer FCSTTIME into a character Hstr with 3 columns WRITE(Hstr,"(f6.2)") FCSTTIME FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) - + write(*,*)'w3iopo OutPut Filename: out_pnt.', FCSTNAM,'.',FILEXT(:I) ! !/T WRITE (NDST,9001) FNMPRE(:J)//'out_pnt.'//FCSTNAM//'.'// & !/T FILEXT(:I) diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 85e777d35f..c11cdc330e 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -402,8 +402,7 @@ INTEGER :: TOFRST(2), TONEXT(2,7), TOLAST(2,7), & TBPI0(2), TBPIN(2), NDS(13) & !XXX INLINE - ,OFILES(7) - INTEGER :: ITCOUNTER=0 + ,OFILES(7),OUTSTRIDE(7),ITCOUNTER(7) !XXX REAL :: DTOUT(7) LOGICAL :: FLOUT(7) @@ -429,8 +428,7 @@ INTEGER, POINTER :: TOFRST(:), TONEXT(:,:), TOLAST(:,:), & TBPI0(:), TBPIN(:), NDS(:) !XXX INLINE - INTEGER, POINTER :: OFILES(:) - INTEGER, POINTER :: ITCOUNTER + INTEGER, POINTER :: OFILES(:), OUTSTRIDE(:),ITCOUNTER(:) !XXX REAL, POINTER :: DTOUT(:) LOGICAL, POINTER :: FLOUT(:) @@ -1514,10 +1512,13 @@ NDS => OUTPTS(IMOD)%NDS !XXX INLINE OFILES => OUTPTS(IMOD)%OFILES + OUTSTRIDE => OUTPTS(IMOD)%OUTSTRIDE ITCOUNTER=>OUTPTS(IMOD)%ITCOUNTER ! WRITE(*,*) 'W3SETO IMOD:', IMOD ! WRITE(*,*) 'OFILES(J)', (OFILES(J),J=1,7) -! WRITE(*,*) 'OUTPTS(I)%OFILES(:)', OUTPTS(1)%OFILES(:) +! WRITE(*,*) 'OUTSTRIDE(J)', (OUTSTRIDE(J),J=1,7) +! WRITE(*,*) 'ITCOUNTER(J)', (ITCOUNTER(J),J=1,7) +! WRITE(*,*) 'OUTPTS(1)%OFILES(:)', OUTPTS(1)%OFILES(:) !XXX ! DTOUT => OUTPTS(IMOD)%DTOUT diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 2d870abc78..0055a8fac0 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -428,7 +428,8 @@ REAL :: ICEDAVE & !INLINE RPH ,FCSTTIME - INTEGER, SAVE :: ITCOUNTER2=0 +! INTEGER, SAVE :: ITCOUNTER2=0 +! INTEGER, SAVE ::OTHERCOUNTER=-1 !XXX !/OASIS INTEGER :: OASISED @@ -910,11 +911,11 @@ ! ITIME = ITIME + 1 !XXX INLINE - IF ( TSTAMP .AND. SCREEN.NE.NDSO .AND. IAPROC.EQ.NAPOUT & - .AND. ITCOUNTER2 .EQ. 0) THEN - ITCOUNTER= ITCOUNTER-1 - ITCOUNTER2=1 - END IF +! IF ( TSTAMP .AND. SCREEN.NE.NDSO .AND. IAPROC.EQ.NAPOUT & +! .AND. ITCOUNTER2 .EQ. 0) THEN +! ITCOUNTER= ITCOUNTER-1 +! ITCOUNTER2=1 +! END IF !XXX ! DTG = REAL(NINT(DTGA+DTRES+0.0001)) @@ -935,7 +936,7 @@ CALL STME21 ( TIME , IDTIME ) WRITE (SCREEN,950) IDTIME, STTIME !XXX - ITCOUNTER=ITCOUNTER+1 +! ITCOUNTER=ITCOUNTER+1 !XXX END IF @@ -2381,14 +2382,21 @@ ! !XXX INLINE write(*,*)'*********GENERATING FOR GRID: ******************' -! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME - FCSTTIME=ITCOUNTER*DTCFL/3600 - write(*,*) 'J, FCSTTIME: ',J, FCSTTIME -! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD + write(*,*) '11111 J, ITCOUNTER,OUTSTRIDE: ',J, ITCOUNTER(J),OUTSTRIDE(J) + FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. + IF ( J .EQ. 1 ) then + WRITE(*,*) 'J TIME ITCOUNTER(J), ITIME: ',J, TIME, ITCOUNTER(J), ITIME + WRITE(*,*) 'OUTSTRIDE(J): ', OUTSTRIDE(J) + write(*,*) ' FCSTTIME: ', FCSTTIME + write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD + end if IF ( J .EQ. 1 ) CALL W3IOGO & !replace ( 'WRITE', NDS(7), ITEST, IMOD ) ( 'WRITE', NDS(7), ITEST, IMOD,FCSTTIME ) + IF ( J .EQ. 1 ) ITCOUNTER(J)=ITCOUNTER(J)+1 + write(*,*) '22222 J, ITCOUNTER(J): ',J, ITCOUNTER(J) + write(*,*) '================================================' !XXX ! !/SBS ! @@ -2432,12 +2440,13 @@ !XXX INLINE write(*,*)'*********GENERATING OUTPUT FOR FOR POINTS: ******************' ! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME - FCSTTIME=ITCOUNTER*DTCFL/3600 - write(*,*) 'J, FCSTTIME: ',J, FCSTTIME + FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. + write(*,*) 'POINTS: J, FCSTTIME: ',J, FCSTTIME ! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD !XXX CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD ) CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD, FCSTTIME ) + ITCOUNTER(J)=ITCOUNTER(J)+1 END IF ! ELSE IF ( J .EQ. 3 ) THEN diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index e8d322b36e..033f21db6f 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -378,7 +378,7 @@ !/MPRF USE WMMDATMD, ONLY: MDSP USE W3INITMD, ONLY: WWVER !XXX INLINE - USE W3ODATMD, ONLY: OFILES + USE W3ODATMD, ONLY: OFILES, OUTSTRIDE ! !/ IMPLICIT NONE @@ -412,7 +412,7 @@ TMOVE(:,:), LOADMP(:,:), IPRT(:,:), & NDPOUT(:) & !XXX - ,OUTFF(:,:) + ,OUTFF(:,:),OUTDELTA(:,:) !XXX REAL :: DTTST, XX, YY @@ -657,7 +657,7 @@ FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & FLG2(NOGRP,NRGRD) & !XXX - ,OUTFF(7,0:NRGRD)) + ,OUTFF(7,0:NRGRD),OUTDELTA(7,NRGRD)) !XXX ! MDS = -1 @@ -1139,7 +1139,16 @@ ! WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) !XXX ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) -! +!XXX + OUTDELTA(J,1)=ODAT(5*(J-1)+3,1) + OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) + OUTPTS(2)%OUTSTRIDE(J)=OUTDELTA(J,1) + + WRITE(*,*)'J OUTDELTA(',J,',1): ',J,OUTDELTA(J,1) + WRITE(*,*)'OUTPTS(1)%OUTSTRIDE(J):',OUTPTS(1)%OUTSTRIDE(J) + WRITE(*,*)'OUTPTS(2)%OUTSTRIDE(J):',OUTPTS(2)%OUTSTRIDE(J) +!XXX +!! IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & WRITE (MDSS,951) J, IDOTYP(J) @@ -1312,12 +1321,17 @@ ODAT( 8 , 1) = 0 !XXX OUTPTS(1)%OFILES(1) = OUTFF(1,1) + OUTPTS(1)%OUTSTRIDE(1) = OUTDELTA(1,1) END IF ! DO I=2, NRGRD ODAT(:,I) = ODAT(:,1) !XXX OUTFF(:,I) = OUTFF(:,1) + OUTPTS(I)%OFILES(:)=OUTFF(:,1) + OUTPTS(I)%OUTSTRIDE(:)=OUTDELTA(:,1) + WRITE(*,*) 'OUTPTS(I)%OUTSTRIDE(:): ',OUTPTS(I)%OUTSTRIDE(:) +!XXX FLGD(:,I) = FLGD(:,1) FLGRD(:,:,I) = FLGRD(:,:,1) FLG2(:,I) = FLG2(:,1) @@ -1399,9 +1413,14 @@ WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' WRITE(*,*) (ODAT(II,1),II=5*(J-1)+1,5*J), OUTFF(J,1) OUTPTS(1)%OFILES(J)=OUTFF(J,1) - WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) + WRITE(*,*) '111OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) !XXX ODAT(5*(J-1)+3,I) = MAX ( 0 , ODAT(5*(J-1)+3,I) ) +!XXX + OUTSTRIDE(J)=ODAT(5*(J-1)+3,1) + OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) + WRITE(*,*)'11OUTSTRIDE(J): ',OUTSTRIDE(J) +!XXX ! IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN TTIME(1) = ODAT(5*(J-1)+1,I) @@ -2576,6 +2595,8 @@ OUTPTS(0)%TOLAST(2,2) = ODAT(10,0) !XXXINLINE OUTPTS(0)%OFILES(:) = OUTFF(:,0) + OUTPTS(0)%OUTSTRIDE(:) = OUTDELTA(:,0) +!XXX ! TOUT = OUTPTS(0)%TONEXT(:,2) TLST = OUTPTS(0)%TOLAST(:,2) @@ -2723,7 +2744,7 @@ DEALLOCATE ( MDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, FLG2, INAMES,& MNAMES & !XXX INLINE - ,OUTFF ) + ,OUTFF, OUTDELTA ) ! !/MPI CALL MPI_BARRIER ( MPI_COMM_MWAVE, IERR_MPI ) ! @@ -4164,14 +4185,15 @@ READ(NML_OUTPUT_DATE(I)%FIELD%STRIDE, *) ODAT(3,I) READ(NML_OUTPUT_DATE(I)%FIELD%STOP, *) ODAT(4,I), ODAT(5,I) !XXX - READ(NML_OUTPUT_DATE(I)%FIELD%OUTFFILE, *) OUTFF(1,I) + OUTPTS(I)%OUTSTRIDE(1)=ODAT(3,I) !XXX READ(NML_OUTPUT_DATE(I)%POINT%START, *) ODAT(6,I), ODAT(7,I) READ(NML_OUTPUT_DATE(I)%POINT%STRIDE, *) ODAT(8,I) READ(NML_OUTPUT_DATE(I)%POINT%STOP, *) ODAT(9,I), ODAT(10,I) !XXX READ(NML_OUTPUT_DATE(I)%POINT%OUTFFILE, *) OUTFF(2,I) + OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) WRITE(*,*) ' LOOP OVER NRGRD' WRITE(*,*) 'I,OUTFF(1,I),OUTFF(2,I)=',I,OUTFF(1,I),OUTFF(2,I) !XX @@ -4216,8 +4238,10 @@ ! 5.b Process standard line ! !XXX +! OUTPTS(I)%OUTSTRIDE(J)=ODAT(8,I) OUTPTS(I)%OFILES(J)=OUTFF(J,I) - WRITE(*,*) 'XXXX: ',OUTPTS(I)%OFILES(J), OUTFF(J,I) +! WRITE(*,*) 'XXXX: ',OUTPTS(I)%OFILES(J), OUTFF(J,I) + !XXX IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index 54b353967d..f2fd0d55cb 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -191,9 +191,9 @@ USE W3GDATMD, ONLY: W3SETG USE W3WDATMD, ONLY: W3SETW USE W3ADATMD, ONLY: W3SETA - USE W3ODATMD, ONLY: W3SETO, NOTYPE & + USE W3ODATMD, ONLY: W3SETO, NOTYPE !XXX INLINE - ,ITCOUNTER +! ,ITCOUNTER USE W3IOPOMD, ONLY: W3IOPE USE W3WAVEMD, ONLY: W3WAVE USE W3SERVMD, ONLY: EXTCDE, WWTIME @@ -365,8 +365,8 @@ TPRNT = TSYNC(:,0) TSTAMP = .TRUE. !XXX - ITCOUNTER=ITCOUNTER+1 -! write(*,*) '======WMWAVE ITCOUNTER: ', ITCOUNTER +! ITCOUNTER=ITCOUNTER+1 +!! write(*,*) '======WMWAVE ITCOUNTER: ', ITCOUNTER !XXX ENDIF diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp index 92037c4be3..1742200b6d 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp @@ -96,7 +96,7 @@ $ -------------------------------------------------------------------- $ $ Conventional output requests as in ww3_shel.inp. Will be applied $ to all grids. $ - 19680606 000000 3600 19680608 000000 + 19680606 000000 7200 19680608 000000 1 $ $ N @@ -105,7 +105,7 @@ $ $ NOTE: Ff UNIPTS = .TRUE. then the point output needs to be defined $ here and cannot be redefined below. $ - 19680606 000000 3600 19680608 000000 + 19680606 000000 1800 19680608 000000 1 15.50 73.50 'LFB1' 30.00 74.00 'LFB2' 28.5 71.5833 'Nordkyn' diff --git a/regtests/ww3_tp1.1/input/ww3_shel.inp b/regtests/ww3_tp1.1/input/ww3_shel.inp index 0f7f488b06..02cc111e28 100644 --- a/regtests/ww3_tp1.1/input/ww3_shel.inp +++ b/regtests/ww3_tp1.1/input/ww3_shel.inp @@ -13,12 +13,12 @@ $ $ 1 $ - 19680600 000000 86400 19680625 000000 + 19680600 000000 86400 19680625 000000 1 $ N HS $ - 19680600 000000 86400 19680625 000000 + 19680600 000000 86400 19680625 000000 1 -10.0 0.0 'Point_-10' -9.0 0.0 'Point_-9' -8.0 0.0 'Point_-8' From 713616882b7f36c586c65ba5ca43640cea0da173 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Wed, 6 Nov 2019 10:30:51 -0500 Subject: [PATCH 16/49] inline posproc ready for namelist as well --- model/ftn/w3iogomd.ftn | 3 +++ model/ftn/w3nmlmultimd.ftn | 4 ++++ model/ftn/wminitmd.ftn | 15 +++++++++++---- .../mww3_test_06/input/ww3_multi_grdset_d.inp | 4 ++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index e3a6fdfb55..ecc064ef95 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2528,6 +2528,7 @@ ! ! test input parameters ---------------------------------------------- * ! + write(*,*) ' aaaaaa w3iogo' IF ( PRESENT(IMOD) ) THEN IGRD = IMOD ELSE @@ -2543,10 +2544,12 @@ IPASS = IPASS + 1 IOTST = 0 ! + write(*,*) ' bbbbb w3iogo inxout: ', INXOUT IF (INXOUT.NE.'READ' .AND. INXOUT.NE.'WRITE' ) THEN WRITE (NDSE,900) INXOUT CALL EXTCDE ( 1 ) END IF + write(*,*) ' CCCC w3iogo OFILES(1): ', OFILES(1) ! !INLINE IF ( IPASS.EQ.1 ) THEN IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index 5932939e7e..f804651a95 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -1142,6 +1142,10 @@ IDATE(I)%FIELD%START = '19680606 000000' IDATE(I)%FIELD%STRIDE = '0' IDATE(I)%FIELD%STOP = '19680607 000000' +!XXX + IDATE(I)%FIELD%OUTFFILE = '0' + IDATE(I)%POINT%OUTFFILE = '0' +!XXX IDATE(I)%POINT%START = '19680606 000000' IDATE(I)%POINT%STRIDE = '0' IDATE(I)%POINT%STOP = '19680607 000000' diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 033f21db6f..eba5072d50 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -3416,7 +3416,8 @@ NPTS, JJ, IP1, IPN, MPI_COMM_LOC, & NMPSC2, JJJ, NCPROC, NPOUTT, NAPLOC, & NAPRES, NAPADD, NAPBCT, IFI, IFJ, IW, & - IFT, ILOOP + IFT, ILOOP +! INTEGER :: TTIME(2), TOUT(2), STMPT(2), ETMPT(2),& TLST(2) !/MPI INTEGER :: IERR_MPI, BGROUP, LGROUP, IROOT @@ -4193,8 +4194,12 @@ READ(NML_OUTPUT_DATE(I)%POINT%STOP, *) ODAT(9,I), ODAT(10,I) !XXX READ(NML_OUTPUT_DATE(I)%POINT%OUTFFILE, *) OUTFF(2,I) - OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) + OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) + + WRITE(*,*) ' LOOP OVER NRGRD' + write(*,*) ' STRIDE(1):', OUTPTS(I)%OUTSTRIDE(1) + write(*,*) ' STRIDE(2):', OUTPTS(I)%OUTSTRIDE(2) WRITE(*,*) 'I,OUTFF(1,I),OUTFF(2,I)=',I,OUTFF(1,I),OUTFF(2,I) !XX READ(NML_OUTPUT_DATE(I)%TRACK%START, *) ODAT(11,I), ODAT(12,I) @@ -4238,9 +4243,8 @@ ! 5.b Process standard line ! !XXX -! OUTPTS(I)%OUTSTRIDE(J)=ODAT(8,I) + OUTPTS(I)%OFILES(J)=OUTFF(J,I) -! WRITE(*,*) 'XXXX: ',OUTPTS(I)%OFILES(J), OUTFF(J,I) !XXX IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN @@ -4462,6 +4466,9 @@ ! ! ... End of loop I on NRGRD in 5.a ! +!XXX + WRITE(*,*) 'OUTPTS(1)%OUTSTRIDE:', (OUTPTS(1)%OUTSTRIDE(JJ),JJ=1,7) +!XXX END DO ! !/T DO I=1, NRGRD diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp index 1742200b6d..f3a3325bff 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp @@ -96,7 +96,7 @@ $ -------------------------------------------------------------------- $ $ Conventional output requests as in ww3_shel.inp. Will be applied $ to all grids. $ - 19680606 000000 7200 19680608 000000 1 + 19680606 000000 3600 19680608 000000 1 $ $ N @@ -105,7 +105,7 @@ $ $ NOTE: Ff UNIPTS = .TRUE. then the point output needs to be defined $ here and cannot be redefined below. $ - 19680606 000000 1800 19680608 000000 1 + 19680606 000000 3600 19680608 000000 1 15.50 73.50 'LFB1' 30.00 74.00 'LFB2' 28.5 71.5833 'Nordkyn' From 1b9c4484405ef1242df9753ce16f368f0ceb9480 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Wed, 6 Nov 2019 13:21:02 -0500 Subject: [PATCH 17/49] Cleaning the code --- model/ftn/w3iogomd.ftn | 10 ++-------- model/ftn/w3iopomd.ftn | 8 ++++---- model/ftn/w3wavemd.ftn | 39 +++++++++++++++++---------------------- model/ftn/wminitmd.ftn | 37 +++++++++++++++++-------------------- 4 files changed, 40 insertions(+), 54 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index ecc064ef95..35e9a0b99c 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2528,7 +2528,6 @@ ! ! test input parameters ---------------------------------------------- * ! - write(*,*) ' aaaaaa w3iogo' IF ( PRESENT(IMOD) ) THEN IGRD = IMOD ELSE @@ -2544,12 +2543,10 @@ IPASS = IPASS + 1 IOTST = 0 ! - write(*,*) ' bbbbb w3iogo inxout: ', INXOUT IF (INXOUT.NE.'READ' .AND. INXOUT.NE.'WRITE' ) THEN WRITE (NDSE,900) INXOUT CALL EXTCDE ( 1 ) END IF - write(*,*) ' CCCC w3iogo OFILES(1): ', OFILES(1) ! !INLINE IF ( IPASS.EQ.1 ) THEN IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN @@ -2563,9 +2560,6 @@ ! !/T WRITE (NDST,9000) IPASS, INXOUT, WRITE, NDSOG, IGRD, FILEXT ! -!XXX INLINE -! WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) -!XXX ! ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) @@ -2648,7 +2642,7 @@ J = LEN_TRIM(FNMPRE) ! - write(*,*) '===FCSTTIME: ',FCSTTIME +!! write(*,*) '===FCSTTIME: ',FCSTTIME IF (FCSTTIME .LT. 10.) THEN CO='00' ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN @@ -2660,7 +2654,7 @@ ! Convert integer FCSTTIME into a character Hstr with 3 columns WRITE(Hstr,"(f6.2)") FCSTTIME FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) - write(*,*)'w3iogo OutPut Filename: out_grd.', FCSTNAM,'.',FILEXT(:I) +!! write(*,*)'w3iogo OutPut Filename: out_grd.', FCSTNAM,'.',FILEXT(:I) ! !/T WRITE (NDST,9001) FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I) IF ( WRITE ) THEN diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index bfb29b1566..96d1cc7d6b 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -1010,8 +1010,8 @@ END IF END IF !XXX INLINE -! WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) - write(*,*) 'In iopomd IPASS, OFILES(2):',IPASS, OFILES(1) +!! WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) +!! write(*,*) 'In iopomd IPASS, OFILES(2):',IPASS, OFILES(1) !XXX ! ! open file ---------------------------------------------------------- * @@ -1098,7 +1098,7 @@ I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) - write(*,*) '===FCSTTIME: ',FCSTTIME +!! write(*,*) '===FCSTTIME: ',FCSTTIME IF (FCSTTIME .LT. 10.) THEN CO='00' ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN @@ -1108,7 +1108,7 @@ ! Convert integer FCSTTIME into a character Hstr with 3 columns WRITE(Hstr,"(f6.2)") FCSTTIME FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) - write(*,*)'w3iopo OutPut Filename: out_pnt.', FCSTNAM,'.',FILEXT(:I) +!! write(*,*)'w3iopo OutPut Filename: out_pnt.', FCSTNAM,'.',FILEXT(:I) ! !/T WRITE (NDST,9001) FNMPRE(:J)//'out_pnt.'//FCSTNAM//'.'// & !/T FILEXT(:I) diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 0055a8fac0..2dcc12a167 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -2164,12 +2164,7 @@ !/PDLIB!/DEBUGCOH CALL ALL_VA_INTEGRAL_PRINT(IMOD, "end of time loop") !/TIMINGS CALL PRINT_MY_TIME("end of time loop") ! -!XXX -! IF ( TSTAMP .AND. SCREEN.NE.NDSO .AND. IAPROC.EQ.NAPOUT ) THEN -! ITCOUNTER=ITCOUNTER+1 -! write(*,*) '======W3WAVE ITCOUNTER: ', ITCOUNTER -! END IF -!XXX +! END DO !/DEBUGRUN WRITE(740+IAPROC,*) 'W3WAVE, step 6.21.1' @@ -2381,22 +2376,22 @@ !/MPI FLGMPI(1) = .FALSE. ! !XXX INLINE - write(*,*)'*********GENERATING FOR GRID: ******************' - write(*,*) '11111 J, ITCOUNTER,OUTSTRIDE: ',J, ITCOUNTER(J),OUTSTRIDE(J) +!! write(*,*)'*********GENERATING FOR GRID: ******************' +!! write(*,*) '11111 J, ITCOUNTER,OUTSTRIDE: ',J, ITCOUNTER(J),OUTSTRIDE(J) FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. - IF ( J .EQ. 1 ) then - WRITE(*,*) 'J TIME ITCOUNTER(J), ITIME: ',J, TIME, ITCOUNTER(J), ITIME - WRITE(*,*) 'OUTSTRIDE(J): ', OUTSTRIDE(J) - write(*,*) ' FCSTTIME: ', FCSTTIME - write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD - end if - +!! IF ( J .EQ. 1 ) then +!! WRITE(*,*) 'J TIME ITCOUNTER(J), ITIME: ',J, TIME, ITCOUNTER(J), ITIME +!! WRITE(*,*) 'OUTSTRIDE(J): ', OUTSTRIDE(J) +!! write(*,*) ' FCSTTIME: ', FCSTTIME +!! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD +!! end if +! IF ( J .EQ. 1 ) CALL W3IOGO & !replace ( 'WRITE', NDS(7), ITEST, IMOD ) ( 'WRITE', NDS(7), ITEST, IMOD,FCSTTIME ) IF ( J .EQ. 1 ) ITCOUNTER(J)=ITCOUNTER(J)+1 - write(*,*) '22222 J, ITCOUNTER(J): ',J, ITCOUNTER(J) - write(*,*) '================================================' +!! write(*,*) '22222 J, ITCOUNTER(J): ',J, ITCOUNTER(J) +!! write(*,*) '================================================' !XXX ! !/SBS ! @@ -2438,12 +2433,12 @@ ! CALL W3IOPE ( VA ) !XXX INLINE - write(*,*)'*********GENERATING OUTPUT FOR FOR POINTS: ******************' -! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME +!! write(*,*)'*********GENERATING OUTPUT FOR FOR POINTS: ******************' +!! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. - write(*,*) 'POINTS: J, FCSTTIME: ',J, FCSTTIME -! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD - +!! write(*,*) 'POINTS: J, FCSTTIME: ',J, FCSTTIME +!! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD +! !XXX CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD ) CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD, FCSTTIME ) ITCOUNTER(J)=ITCOUNTER(J)+1 diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index eba5072d50..91a15ab443 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -1144,9 +1144,9 @@ OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) OUTPTS(2)%OUTSTRIDE(J)=OUTDELTA(J,1) - WRITE(*,*)'J OUTDELTA(',J,',1): ',J,OUTDELTA(J,1) - WRITE(*,*)'OUTPTS(1)%OUTSTRIDE(J):',OUTPTS(1)%OUTSTRIDE(J) - WRITE(*,*)'OUTPTS(2)%OUTSTRIDE(J):',OUTPTS(2)%OUTSTRIDE(J) +!! WRITE(*,*)'J OUTDELTA(',J,',1): ',J,OUTDELTA(J,1) +!! WRITE(*,*)'OUTPTS(1)%OUTSTRIDE(J):',OUTPTS(1)%OUTSTRIDE(J) +!! WRITE(*,*)'OUTPTS(2)%OUTSTRIDE(J):',OUTPTS(2)%OUTSTRIDE(J) !XXX !! IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN @@ -1330,7 +1330,7 @@ OUTFF(:,I) = OUTFF(:,1) OUTPTS(I)%OFILES(:)=OUTFF(:,1) OUTPTS(I)%OUTSTRIDE(:)=OUTDELTA(:,1) - WRITE(*,*) 'OUTPTS(I)%OUTSTRIDE(:): ',OUTPTS(I)%OUTSTRIDE(:) +! WRITE(*,*) 'OUTPTS(I)%OUTSTRIDE(:): ',OUTPTS(I)%OUTSTRIDE(:) !XXX FLGD(:,I) = FLGD(:,1) FLGRD(:,:,I) = FLGRD(:,:,1) @@ -1408,18 +1408,19 @@ OUTFF(J,1) = 0 END IF ! - write(*,*) 'endless loop ??????' - write(*,*) 'J; ', J - WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' - WRITE(*,*) (ODAT(II,1),II=5*(J-1)+1,5*J), OUTFF(J,1) +!! write(*,*) 'J; ', J +!! WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' +!! WRITE(*,*) (ODAT(II,1),II=5*(J-1)+1,5*J), OUTFF(J,1) +! OUTPTS(1)%OFILES(J)=OUTFF(J,1) - WRITE(*,*) '111OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) +! +!! WRITE(*,*) '111OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) !XXX ODAT(5*(J-1)+3,I) = MAX ( 0 , ODAT(5*(J-1)+3,I) ) !XXX OUTSTRIDE(J)=ODAT(5*(J-1)+3,1) OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) - WRITE(*,*)'11OUTSTRIDE(J): ',OUTSTRIDE(J) +!! WRITE(*,*)'OUTSTRIDE(J): ',OUTSTRIDE(J) !XXX ! IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN @@ -4194,13 +4195,11 @@ READ(NML_OUTPUT_DATE(I)%POINT%STOP, *) ODAT(9,I), ODAT(10,I) !XXX READ(NML_OUTPUT_DATE(I)%POINT%OUTFFILE, *) OUTFF(2,I) - OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) - - - WRITE(*,*) ' LOOP OVER NRGRD' - write(*,*) ' STRIDE(1):', OUTPTS(I)%OUTSTRIDE(1) - write(*,*) ' STRIDE(2):', OUTPTS(I)%OUTSTRIDE(2) - WRITE(*,*) 'I,OUTFF(1,I),OUTFF(2,I)=',I,OUTFF(1,I),OUTFF(2,I) + OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) +!! WRITE(*,*) ' LOOP OVER NRGRD' +!! write(*,*) ' STRIDE(1):', OUTPTS(I)%OUTSTRIDE(1) +!! write(*,*) ' STRIDE(2):', OUTPTS(I)%OUTSTRIDE(2) +!! WRITE(*,*) 'I,OUTFF(1,I),OUTFF(2,I)=',I,OUTFF(1,I),OUTFF(2,I) !XX READ(NML_OUTPUT_DATE(I)%TRACK%START, *) ODAT(11,I), ODAT(12,I) READ(NML_OUTPUT_DATE(I)%TRACK%STRIDE, *) ODAT(13,I) @@ -4243,9 +4242,7 @@ ! 5.b Process standard line ! !XXX - OUTPTS(I)%OFILES(J)=OUTFF(J,I) - !XXX IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & @@ -4467,7 +4464,7 @@ ! ... End of loop I on NRGRD in 5.a ! !XXX - WRITE(*,*) 'OUTPTS(1)%OUTSTRIDE:', (OUTPTS(1)%OUTSTRIDE(JJ),JJ=1,7) +!! WRITE(*,*) 'OUTPTS(1)%OUTSTRIDE:', (OUTPTS(1)%OUTSTRIDE(JJ),JJ=1,7) !XXX END DO ! From a5f4807844299598b976a5255b0fc0c06f6b6ebe Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Tue, 19 Nov 2019 16:11:52 -0500 Subject: [PATCH 18/49] Inline postproc working w/o the parameter --- model/ftn/w3iopomd.ftn | 2 + model/ftn/w3nmlshelmd.ftn | 9 ++++ model/ftn/w3wavemd.ftn | 20 +++++---- model/ftn/wminitmd.ftn | 89 ++++++++++++++++++++++++++++++++------- model/ftn/wmwavemd.ftn | 13 ++---- model/ftn/ww3_shel.ftn | 65 ++++++++++++++++++++++------ 6 files changed, 150 insertions(+), 48 deletions(-) diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index 96d1cc7d6b..2939c3ff97 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -1103,6 +1103,8 @@ CO='00' ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN CO='0' + ELSE IF (FCSTTIME .GE. 100) THEN + CO='' END IF ! Convert integer FCSTTIME into a character Hstr with 3 columns diff --git a/model/ftn/w3nmlshelmd.ftn b/model/ftn/w3nmlshelmd.ftn index 73fe38d577..c04c646123 100644 --- a/model/ftn/w3nmlshelmd.ftn +++ b/model/ftn/w3nmlshelmd.ftn @@ -28,6 +28,9 @@ INTEGER :: IOSTYP CHARACTER(15) :: START CHARACTER(15) :: STOP +!XXX + CHARACTER(1) :: OUTFFILE +!XXX END TYPE NML_DOMAIN_T @@ -102,6 +105,7 @@ CHARACTER(15) :: START CHARACTER(15) :: STRIDE CHARACTER(15) :: STOP + CHARACTER(15) :: OUTFFILE END TYPE NML_OUTPUT_TIME_T ! TYPE NML_OUTPUT_DATE_T @@ -732,6 +736,11 @@ DATE%FIELD%START = '19680606 000000' DATE%FIELD%STRIDE = '0' DATE%FIELD%STOP = '19680607 000000' +!XXX + DATE%FIELD%OUTFFILE = '0' + DATE%POINT%OUTFFILE = '0' +!XXX + DATE%POINT%START = '19680606 000000' DATE%POINT%STRIDE = '0' DATE%POINT%STOP = '19680607 000000' diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 2dcc12a167..3f2ef26193 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -175,7 +175,7 @@ !/ CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE W3WAVE ( IMOD, TEND, STAMP, NO_OUT & + SUBROUTINE W3WAVE ( IMOD, ODAT, TEND, STAMP, NO_OUT & !/OASIS ,ID_LCOMM & ) !/ @@ -410,7 +410,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ - INTEGER, INTENT(IN) :: IMOD, TEND(2) + INTEGER, INTENT(IN) :: IMOD, TEND(2),ODAT(35) LOGICAL, INTENT(IN), OPTIONAL :: STAMP, NO_OUT !/OASIS INTEGER, INTENT(IN), OPTIONAL :: ID_LCOMM !/ @@ -2377,11 +2377,14 @@ ! !XXX INLINE !! write(*,*)'*********GENERATING FOR GRID: ******************' -!! write(*,*) '11111 J, ITCOUNTER,OUTSTRIDE: ',J, ITCOUNTER(J),OUTSTRIDE(J) + IF (ODAT(3) .NE. 0) OUTSTRIDE(J)=ODAT(3) +! write(*,*) 'FIELDS J, ITCOUNTER,ODAT(3): ',J, ITCOUNTER(J),ODAT(3) +! write(*,*) ' OUTSTRIDE(J)', OUTSTRIDE(J) FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. +! write(*,*) 'FIELDS: J, FCSTTIME: ',J, FCSTTIME !! IF ( J .EQ. 1 ) then !! WRITE(*,*) 'J TIME ITCOUNTER(J), ITIME: ',J, TIME, ITCOUNTER(J), ITIME -!! WRITE(*,*) 'OUTSTRIDE(J): ', OUTSTRIDE(J) +! WRITE(*,*) 'OUTSTRIDE(J): ', OUTSTRIDE(J) !! write(*,*) ' FCSTTIME: ', FCSTTIME !! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD !! end if @@ -2390,8 +2393,6 @@ !replace ( 'WRITE', NDS(7), ITEST, IMOD ) ( 'WRITE', NDS(7), ITEST, IMOD,FCSTTIME ) IF ( J .EQ. 1 ) ITCOUNTER(J)=ITCOUNTER(J)+1 -!! write(*,*) '22222 J, ITCOUNTER(J): ',J, ITCOUNTER(J) -!! write(*,*) '================================================' !XXX ! !/SBS ! @@ -2434,10 +2435,11 @@ CALL W3IOPE ( VA ) !XXX INLINE !! write(*,*)'*********GENERATING OUTPUT FOR FOR POINTS: ******************' -!! WRITE(*,*) 'TIME ITCOUNTER, ITIME: ', TIME, ITCOUNTER, ITIME + IF (ODAT(8) .NE. 0) OUTSTRIDE(J)=ODAT(3) +! write(*,*) 'POINTS J, ITCOUNTER,ODAT(8): ',J, ITCOUNTER(J),ODAT(8) +! write(*,*) 'POINTS J, ITCOUNTER,OUTSTRIDE(J): ',J, ITCOUNTER(J),ODAT(8) FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. -!! write(*,*) 'POINTS: J, FCSTTIME: ',J, FCSTTIME -!! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD +! write(*,*) 'POINTS: J, FCSTTIME: ',J, FCSTTIME ! !XXX CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD ) CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD, FCSTTIME ) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 91a15ab443..a6a28acded 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -443,7 +443,11 @@ CHARACTER(LEN=30) :: IDOTYP(7) CHARACTER(LEN=80) :: TNAME CHARACTER(LEN=80) :: LINE -! +!XXX + CHARACTER(LEN=80) :: LINEIN + CHARACTER(LEN=8) :: WORDS(6) +!XXX + TYPE OT2TPE INTEGER :: NPTS REAL, POINTER :: X(:), Y(:) @@ -1124,7 +1128,37 @@ !XXX INLINE RP WORKING WITH ! READ (MDSI,*,END=2001,ERR=2002) (ODAT(I,1),I=5*(J-1)+1,5*J) IF(J .LE. 2) THEN - READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J),OUTFF(J,1) +! READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J),OUTFF(J,1) + READ (MDSI,'(A)') LINEIN + WRITE(*,*) 'LINEIN: ',LINEIN + READ(LINEIN,*,iostat=ierr) WORDS +! DO i=1,6 +! WRITE(*,*) WORDS(I) +! END DO +! + IF(J .LE. 1) THEN + READ(WORDS( 1 ), * ) ODAT(1,1) + READ(WORDS( 2 ), * ) ODAT(2,1) + READ(WORDS( 3 ), * ) ODAT(3,1) + READ(WORDS( 4 ), * ) ODAT(4,1) + READ(WORDS( 5 ), * ) ODAT(5,1) + ELSE + READ(WORDS( 1 ), * ) ODAT(6,1) + READ(WORDS( 2 ), * ) ODAT(7,1) + READ(WORDS( 3 ), * ) ODAT(8,1) + READ(WORDS( 4 ), * ) ODAT(9,1) + READ(WORDS( 5 ), * ) ODAT(10,1) + END IF + + IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN + OUTFF(J,1)=0 + print*,' Number of data: ', 5 + ELSE + READ(WORDS( 6 ), * ) OUTFF(J,1) +! print*,' Number of data: ', 6 + END IF +! WRITE(*,*) 'WMINITMD OUTFF(J,1)= ', OUTFF(J,1) + ELSE READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) OUTFF(J,1) = 0 @@ -1135,10 +1169,12 @@ ! ! write(*,*) 'J; ', J ! WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' -! WRITE(*,*) (ODAT(I,1),I=5*(J-1)+1,5*J), OUTFF(J,1) ! WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) -!XXX - ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) +!XXX + ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) +! +! WRITE(*,*) 'AFTER READ AND TRANSFORM' +! WRITE(*,*) (ODAT(I,1),I=5*(J-1)+1,5*J), OUTFF(J,1) !XXX OUTDELTA(J,1)=ODAT(5*(J-1)+3,1) OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) @@ -1330,7 +1366,6 @@ OUTFF(:,I) = OUTFF(:,1) OUTPTS(I)%OFILES(:)=OUTFF(:,1) OUTPTS(I)%OUTSTRIDE(:)=OUTDELTA(:,1) -! WRITE(*,*) 'OUTPTS(I)%OUTSTRIDE(:): ',OUTPTS(I)%OUTSTRIDE(:) !XXX FLGD(:,I) = FLGD(:,1) FLGRD(:,:,I) = FLGRD(:,:,1) @@ -1402,7 +1437,37 @@ CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) !XXX ININE READ (MDSI,*,END=2001,ERR=2002) (ODAT(II,I),II=5*(J-1)+1,5*J) IF(J .LE. 2) THEN - READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,1),II=5*(J-1)+1,5*J),OUTFF(J,1) +! READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,1),II=5*(J-1)+1,5*J),OUTFF(J,1) + READ (MDSI,'(A)') LINEIN + WRITE(*,*) 'LINEIN ', LINEIN + READ(LINEIN,*,iostat=ierr) WORDS +! DO i=1,6 +! WRITE(*,*) WORDS(I) +! END DO +! + IF(J .LE. 1) THEN + READ(WORDS( 1 ), * ) ODAT(1,1) + READ(WORDS( 2 ), * ) ODAT(2,1) + READ(WORDS( 3 ), * ) ODAT(3,1) + READ(WORDS( 4 ), * ) ODAT(4,1) + READ(WORDS( 5 ), * ) ODAT(5,1) + ELSE + READ(WORDS( 1 ), * ) ODAT(6,1) + READ(WORDS( 2 ), * ) ODAT(7,1) + READ(WORDS( 3 ), * ) ODAT(8,1) + READ(WORDS( 4 ), * ) ODAT(9,1) + READ(WORDS( 5 ), * ) ODAT(10,1) + END IF + + IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN + OUTFF(J,1)=0 +! WRITE(*,*) ' Number of data: ', 5 + ELSE + READ(WORDS( 6 ), * ) OUTFF(J,1) +! WRITE(*,*) ' Number of data: ', 6 + END IF +! WRITE(*,*) 'OUTFF(J,1)= ', OUTFF(J,1) +! ELSE READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,1),II=5*(J-1)+1,5*J) OUTFF(J,1) = 0 @@ -4274,15 +4339,7 @@ END DO WRITE (MDSS,954) DTME21(1:19) END IF - -!xxxxxxxxxxxxxxx -!XXX -! OUTPTS(1)%OFILES(1) = OUTFF(J,1) -! OUTFF(:,I) = OUTFF(:,1) -!xxxxxxxxxxxxxxx - - - +! IF ( J .EQ. 1 ) THEN ! ! 5.c Type 1: fields of mean wave parameters diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index f2fd0d55cb..2fccffbca5 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -237,9 +237,7 @@ !/ INTEGER :: J, JJ, I, JO, TPRNT(2), TAUX(2), & II, JJJ, IX, IY, UPNEXT(2), UPLAST(2) -!XXX -! INTEGER :: ITCOUNTER -!XXX + INTEGER :: DUMMY2(35)=0 !/T INTEGER :: ILOOP !/S INTEGER, SAVE :: IENT = 0 !/MPI INTEGER :: IERR_MPI, NMPSCS @@ -364,11 +362,6 @@ ! TPRNT = TSYNC(:,0) TSTAMP = .TRUE. -!XXX -! ITCOUNTER=ITCOUNTER+1 -!! write(*,*) '======WMWAVE ITCOUNTER: ', ITCOUNTER -!XXX - ENDIF ! !/T ILOOP = ILOOP + 1 @@ -762,7 +755,7 @@ !/MPRF CALL PRTIME ( PRFT0 ) ! CALL WMSETM ( I, MDSE, MDST ) - CALL W3WAVE ( I, TSYNC(:,I), .FALSE., .TRUE. ) + CALL W3WAVE ( I, DUMMY2, TSYNC(:,I), .FALSE., .TRUE. ) IF ( FLLSTL ) INFLAGS1(1) = .FALSE. IF ( FLLSTI ) INFLAGS1(4) = .FALSE. ! @@ -1023,7 +1016,7 @@ ! END IF ! - CALL W3WAVE ( I, TSYNC(:,I), .FALSE. ) + CALL W3WAVE ( I, DUMMY2, TSYNC(:,I), .FALSE. ) ! IF ( FLGHG1 .AND. .NOT.FLGHG2 .AND. & GRDHGH(I,0).GT.0 ) THEN diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 42bcfdc285..27aa0de5ca 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -326,6 +326,11 @@ CHARACTER(LEN=80) :: LINE CHARACTER(LEN=256) :: TMPLINE, TEST CHARACTER(LEN=1024) :: FLDIN +!XXX + CHARACTER(LEN=80) :: LINEIN + CHARACTER(LEN=8) :: WORDS(6)='' +!XXX + !/COU CHARACTER(LEN=30) :: OFILE ! LOGICAL :: FLLSTL, FLLSTI, FLFLG, FLHOM, TFLAGI, & @@ -744,9 +749,17 @@ READ(NML_OUTPUT_DATE%FIELD%START, *) ODAT(1), ODAT(2) READ(NML_OUTPUT_DATE%FIELD%STRIDE, *) ODAT(3) READ(NML_OUTPUT_DATE%FIELD%STOP, *) ODAT(4), ODAT(5) + + READ(NML_OUTPUT_DATE%FIELD%OUTFFILE, *) OFILES(1) +! OUTPTS(I)%OUTSTRIDE(1)=ODAT(3,I) + READ(NML_OUTPUT_DATE%POINT%START, *) ODAT(6), ODAT(7) READ(NML_OUTPUT_DATE%POINT%STRIDE, *) ODAT(8) READ(NML_OUTPUT_DATE%POINT%STOP, *) ODAT(9), ODAT(10) + + READ(NML_OUTPUT_DATE%POINT%OUTFFILE, *) OFILES(2) +! OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) + READ(NML_OUTPUT_DATE%TRACK%START, *) ODAT(11), ODAT(12) READ(NML_OUTPUT_DATE%TRACK%STRIDE, *) ODAT(13) READ(NML_OUTPUT_DATE%TRACK%STOP, *) ODAT(14), ODAT(15) @@ -778,6 +791,7 @@ NOTYPE = 6 !/COU NOTYPE = 7 DO J = 1, NOTYPE +! OUTPTS(I)%OFILES(J)=OFILES(J) IF ( ODAT(5*(J-1)+3) .NE. 0 ) THEN ! Type 1: fields of mean wave parameters @@ -1188,25 +1202,50 @@ ! READ (NDSI,*) (ODAT(I),I=5*(J-1)+1,5*J) ! READ (NDSI,*,IOSTAT=IERR) (ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) IF(J .LE. 2) THEN - READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) +! READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) + READ (NDSI,'(A)') LINEIN + WRITE(*,*) 'LINEIN: ', LINEIN + READ(LINEIN,*,iostat=ierr) WORDS + DO I=1,6 +! WRITE(*,*) I, WORDS(I) + END DO +! + IF(J .EQ. 1) THEN + READ(WORDS( 1 ), * ) ODAT(1) + READ(WORDS( 2 ), * ) ODAT(2) + READ(WORDS( 3 ), * ) ODAT(3) + READ(WORDS( 4 ), * ) ODAT(4) + READ(WORDS( 5 ), * ) ODAT(5) + ELSE + READ(WORDS( 1 ), * ) ODAT(6) + READ(WORDS( 2 ), * ) ODAT(7) + READ(WORDS( 3 ), * ) ODAT(8) + READ(WORDS( 4 ), * ) ODAT(9) + READ(WORDS( 5 ), * ) ODAT(10) + END IF + + IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN + OFILES(J)=0 + print*,' Number of data: ', 5 + ELSE + READ(WORDS( 6 ), * ) OFILES(J) + print*,' Number of data: ', 6 + END IF + + ELSE OFILES(J)=0 READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J) END IF +! WRITE(*,*) 'OFILES(J)= ', OFILES(J),J ! !/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 7' ODAT(5*(J-1)+3) = MAX ( 0 , ODAT(5*(J-1)+3) ) ! !INLINE RP - IF (IERR.GT.0 .OR. OFILES(J).GT.1 .OR. OFILES(J).LT.0) THEN - WRITE(*,*)' OUTPUT OPTION IS NOT DECLARED OR' - WRITE(*,*)' DECLARED INCORRECTLY OPTION= ', OFILES(J) - WRITE(*,*)' OUTPUT OPTION FOR OUTPUT TYPE ',J, 'SET TO 0' - OFILES(J)=0 - WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' - WRITE(*,*) (ODAT(I),I=5*(J-1)+1,5*J), OFILES(J) - END IF - WRITE(*,*) (ODAT(I),I=5*(J-1)+1,5*J), OFILES(J) +! WRITE(*,*) 'INIT-TIME TIMESTEP & +! END-TIME OPTION:' +! WRITE(*,*) (ODAT(I),I=5*(J-1)+1,5*J), OFILES(J) !XXX !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL NOTTYPE', J @@ -1717,7 +1756,7 @@ IF ( .NOT. FLFLG ) THEN ! IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,960) - CALL W3WAVE ( 1, TIMEN & + CALL W3WAVE ( 1, ODAT, TIMEN & !/OASIS ,.TRUE., .FALSE., MPI_COMM & ) ! @@ -2197,7 +2236,7 @@ ! TIME0 = TTIME ! - CALL W3WAVE ( 1, TIME0 & + CALL W3WAVE ( 1, ODAT, TIME0 & !/OASIS ,.TRUE., .FALSE., MPI_COMM & ) @@ -2239,7 +2278,7 @@ IF ( DTTST .EQ. 0. ) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,*) ' ' - CALL W3WAVE ( 1, TIME0 & + CALL W3WAVE ( 1, ODAT, TIME0 & !/OASIS , .TRUE., .FALSE., MPI_COMM & ) END IF From 65aca01f16545250d7190681d2161a5f7874f9d0 Mon Sep 17 00:00:00 2001 From: wx21rph Date: Mon, 25 Nov 2019 19:17:36 +0000 Subject: [PATCH 19/49] Changing the output file names --- model/ftn/w3iogomd.ftn | 1 + model/ftn/w3iopomd.ftn | 1 + 2 files changed, 2 insertions(+) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 5cb9a20eb8..fdef82d407 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2656,6 +2656,7 @@ ! Convert integer FCSTTIME into a character Hstr with 3 columns WRITE(Hstr,"(f6.2)") FCSTTIME + Hstr(4:4)='p' FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) !! write(*,*)'w3iogo OutPut Filename: out_grd.', FCSTNAM,'.',FILEXT(:I) ! diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index 2939c3ff97..3785b39640 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -1109,6 +1109,7 @@ ! Convert integer FCSTTIME into a character Hstr with 3 columns WRITE(Hstr,"(f6.2)") FCSTTIME + Hstr(4:4)='p' FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) !! write(*,*)'w3iopo OutPut Filename: out_pnt.', FCSTNAM,'.',FILEXT(:I) ! From e41efa0d1526ff97121c2f776e60be9568b8efc7 Mon Sep 17 00:00:00 2001 From: wx21rph Date: Mon, 2 Dec 2019 18:18:14 +0000 Subject: [PATCH 20/49] changing the naming of output files --- model/ftn/w3iogomd.ftn | 24 +++----------- model/ftn/w3iopomd.ftn | 22 ++----------- model/ftn/w3nmlmultimd.ftn | 9 +---- model/ftn/w3nmlshelmd.ftn | 9 ++--- model/ftn/w3odatmd.ftn | 14 +------- model/ftn/w3wavemd.ftn | 36 +------------------- model/ftn/wminitmd.ftn | 67 ++------------------------------------ model/ftn/wmwavemd.ftn | 2 -- model/ftn/ww3_shel.ftn | 9 ----- 9 files changed, 16 insertions(+), 176 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index fdef82d407..3aebfa9c12 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2345,7 +2345,7 @@ !/ END SUBROUTINE W3OUTG !/ ------------------------------------------------------------------- / -!XXX SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD ) +!/ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD,FCSTTIME ) !/ !/ +-----------------------------------+ @@ -2402,7 +2402,7 @@ ! 0 : Fields read. ! -1 : Past end of file. ! IMOD Int. I Model number for W3GDAT etc. -!XXX FCSTTIME Real I Forecast time in hours from initial time +! FCSTTIME Real I Forecast time in hours from initial time ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -2456,8 +2456,6 @@ ! !/ ------------------------------------------------------------------- / USE CONSTANTS -!XXX INLINE DELETE THIS -! USE W3INITMD USE W3GDATMD !/ USE W3WDATMD, ONLY: W3SETW, W3DIMW @@ -2489,7 +2487,6 @@ !/ USE W3SERVMD, ONLY: EXTCDE USE W3ODATMD, only : IAPROC -!XXX INLINE USE W3ODATMD, ONLY : OFILES !/SETUP USE W3WDATMD, ONLY: ZETA_SETUP !/S USE W3SERVMD, ONLY: STRACE @@ -2503,19 +2500,16 @@ INTEGER, INTENT(IN) :: NDSOG INTEGER, INTENT(IN), OPTIONAL :: IMOD CHARACTER, INTENT(IN) :: INXOUT*(*) -!XXX REAL, INTENT(IN), OPTIONAL :: FCSTTIME CHARACTER(LEN=3) :: CO CHARACTER(LEN=6) :: Hstr CHARACTER(LEN=7) :: FCSTNAM -!XXX !/ !/ ------------------------------------------------------------------- / !/ Local parameters !/ INTEGER :: IGRD, IERR, I, J, IX, IY, MOGRP, & MGRPP, ISEA, MOSWLL, IK, IFI, IFJ & -!XXX INLINE DELETE THIS ,IFILOUT INTEGER, ALLOCATABLE :: MAPTMP(:,:) !/S INTEGER, SAVE :: IENT = 0 @@ -2567,7 +2561,6 @@ ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) ! -!XXX INLINE IF ( IPASS.EQ.1 ) THEN IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) @@ -2622,14 +2615,10 @@ ! END IF ! -!XXX INLINE POSPROC -!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ! IN CASE OF GENERATION OF A NEW FILE OUTPUT EVERY DELTA OUTPUT ! open file ---------------------------------------------------------- * ! ( IPASS = 1 ) - - +! IF ( IPASS.GE.1 .AND. OFILES(1) .EQ. 1) THEN WRITE = INXOUT.EQ.'WRITE' ELSE @@ -2709,8 +2698,7 @@ !/T UNDEF ! END IF -!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +! ! TIME and flags ----------------------------------------------------- * ! IF ( WRITE ) THEN @@ -3524,10 +3512,8 @@ ! Flush the buffers for write ! IF ( WRITE ) CALL FLUSH ( NDSOG ) -!XXX +! IF(OFILES(1) .EQ. 1) CLOSE(NDSOG) -! IF (IFILOUT .EQ. 1) CLOSE(NDSOG) -!XXX ! !/MPI CALL W3SETA ( IGRD, NDSE, NDST ) ! diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index 3785b39640..70d6438bc8 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -856,7 +856,6 @@ !/ END SUBROUTINE W3IOPE !/ ------------------------------------------------------------------- / -!XXX SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD ) SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD, FCSTTIME ) !/ !/ +-----------------------------------+ @@ -889,7 +888,7 @@ ! 0 : Data read. ! -1 : Past end of file. ! IMOD I(O) I Model number for W3GDAT etc. -!XXX FCSTTIME Real I Forecast time in hours from initial time +! FCSTTIME Real I Forecast time in hours from initial time ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -941,9 +940,8 @@ IL, IW, II, PTLOC, PTIFAC, DPO, WAO, WDO, & ASO, CAO, CDO, SPCO, PTNME, O2INIT, FNMPRE, & GRDID, ICEO, ICEHO, ICEFO -!XXX INLINE USE W3ODATMD, ONLY : OFILES -!XXX +!/ !/SETUP USE W3ODATMD, ONLY: ZET_SETO !/ USE W3SERVMD, ONLY: EXTCDE @@ -958,9 +956,7 @@ INTEGER, INTENT(OUT) :: IOTST INTEGER, INTENT(IN), OPTIONAL :: IMOD CHARACTER, INTENT(IN) :: INXOUT*(*) -!XXX REAL, INTENT(IN), OPTIONAL :: FCSTTIME -!XXX !/ !/ ------------------------------------------------------------------- / !/ local parameters @@ -970,12 +966,10 @@ LOGICAL,SAVE :: WRITE CHARACTER(LEN=31) :: IDTST CHARACTER(LEN=10) :: VERTST -!XXX +!/ CHARACTER(LEN=3) :: CO CHARACTER(LEN=6) :: Hstr CHARACTER(LEN=7) :: FCSTNAM -!XXX - !/ !/ ------------------------------------------------------------------- / !/ @@ -1009,10 +1003,6 @@ CALL EXTCDE ( 2 ) END IF END IF -!XXX INLINE -!! WRITE(*,*) 'OFILES(J): ',(OFILES(i),i=1,7) -!! write(*,*) 'In iopomd IPASS, OFILES(2):',IPASS, OFILES(1) -!XXX ! ! open file ---------------------------------------------------------- * ! @@ -1078,9 +1068,6 @@ ! END IF ! -!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -!XXX=================INLINE ! IF ( IPASS.GE. 1 .AND. OFILES(2) .EQ. 1) THEN WRITE = INXOUT.EQ.'WRITE' @@ -1173,9 +1160,6 @@ END IF ! ! -!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -! ! TIME --------------------------------------------------------------- * ! IF ( WRITE ) THEN diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index f804651a95..67f7cfbd8f 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -151,9 +151,8 @@ CHARACTER(15) :: START CHARACTER(15) :: STRIDE CHARACTER(15) :: STOP -!XXX CHARACTER(1) :: OUTFFILE -!XXX +! END TYPE NML_OUTPUT_TIME_T ! TYPE NML_OUTPUT_DATE_T @@ -1142,10 +1141,8 @@ IDATE(I)%FIELD%START = '19680606 000000' IDATE(I)%FIELD%STRIDE = '0' IDATE(I)%FIELD%STOP = '19680607 000000' -!XXX IDATE(I)%FIELD%OUTFFILE = '0' IDATE(I)%POINT%OUTFFILE = '0' -!XXX IDATE(I)%POINT%START = '19680606 000000' IDATE(I)%POINT%STRIDE = '0' IDATE(I)%POINT%STOP = '19680607 000000' @@ -1168,15 +1165,11 @@ ALLDATE%FIELD%START = '19680606 000000' ALLDATE%FIELD%STRIDE = '0' ALLDATE%FIELD%STOP = '19680607 000000' -!XXX ALLDATE%FIELD%OUTFFILE = '0' -!XXX ALLDATE%POINT%START = '19680606 000000' ALLDATE%POINT%STRIDE = '0' ALLDATE%POINT%STOP = '19680607 000000' -!XXX ALLDATE%POINT%OUTFFILE = '0' -!XXX ALLDATE%TRACK%START = '19680606 000000' ALLDATE%TRACK%STRIDE = '0' ALLDATE%TRACK%STOP = '19680607 000000' diff --git a/model/ftn/w3nmlshelmd.ftn b/model/ftn/w3nmlshelmd.ftn index c04c646123..2dcb0aead1 100644 --- a/model/ftn/w3nmlshelmd.ftn +++ b/model/ftn/w3nmlshelmd.ftn @@ -28,9 +28,7 @@ INTEGER :: IOSTYP CHARACTER(15) :: START CHARACTER(15) :: STOP -!XXX CHARACTER(1) :: OUTFFILE -!XXX END TYPE NML_DOMAIN_T @@ -736,11 +734,8 @@ DATE%FIELD%START = '19680606 000000' DATE%FIELD%STRIDE = '0' DATE%FIELD%STOP = '19680607 000000' -!XXX - DATE%FIELD%OUTFFILE = '0' - DATE%POINT%OUTFFILE = '0' -!XXX - + DATE%FIELD%OUTFFILE = '0' + DATE%POINT%OUTFFILE = '0' DATE%POINT%START = '19680606 000000' DATE%POINT%STRIDE = '0' DATE%POINT%STOP = '19680607 000000' diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index c11cdc330e..62b3528e7f 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -127,7 +127,7 @@ ! suppl. data for output type 5. ! OUT6 TYPE Public Data structure of type OTYPE6 with ! suppl. data for output type 6. -!XXXINLINE OFILES I.A. Public Output in one or several files. +! OFILES I.A. Public Output in one or several files. ! ---------------------------------------------------------------- ! ! Elements of OUT1 are aliased to pointers with the same @@ -401,9 +401,7 @@ INTEGER :: NOSWLL INTEGER :: TOFRST(2), TONEXT(2,7), TOLAST(2,7), & TBPI0(2), TBPIN(2), NDS(13) & -!XXX INLINE ,OFILES(7),OUTSTRIDE(7),ITCOUNTER(7) -!XXX REAL :: DTOUT(7) LOGICAL :: FLOUT(7) TYPE(OTYPE1) :: OUT1 @@ -427,9 +425,7 @@ INTEGER, POINTER :: NOSWLL INTEGER, POINTER :: TOFRST(:), TONEXT(:,:), TOLAST(:,:), & TBPI0(:), TBPIN(:), NDS(:) -!XXX INLINE INTEGER, POINTER :: OFILES(:), OUTSTRIDE(:),ITCOUNTER(:) -!XXX REAL, POINTER :: DTOUT(:) LOGICAL, POINTER :: FLOUT(:) !/ @@ -1454,7 +1450,6 @@ !/ Local parameters !/ INTEGER :: NLOW -!XXX INTEGER :: J !/S INTEGER, SAVE :: IENT = 0 !/ @@ -1510,16 +1505,9 @@ TBPI0 => OUTPTS(IMOD)%TBPI0 TBPIN => OUTPTS(IMOD)%TBPIN NDS => OUTPTS(IMOD)%NDS -!XXX INLINE OFILES => OUTPTS(IMOD)%OFILES OUTSTRIDE => OUTPTS(IMOD)%OUTSTRIDE ITCOUNTER=>OUTPTS(IMOD)%ITCOUNTER -! WRITE(*,*) 'W3SETO IMOD:', IMOD -! WRITE(*,*) 'OFILES(J)', (OFILES(J),J=1,7) -! WRITE(*,*) 'OUTSTRIDE(J)', (OUTSTRIDE(J),J=1,7) -! WRITE(*,*) 'ITCOUNTER(J)', (ITCOUNTER(J),J=1,7) -! WRITE(*,*) 'OUTPTS(1)%OFILES(:)', OUTPTS(1)%OFILES(:) -!XXX ! DTOUT => OUTPTS(IMOD)%DTOUT FLOUT => OUTPTS(IMOD)%FLOUT diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 3f2ef26193..d9329cc6d2 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -426,12 +426,8 @@ REFLED(6), IK, ITH, IS, NKCFL INTEGER :: ISP, IP_glob REAL :: ICEDAVE & -!INLINE RPH ,FCSTTIME -! INTEGER, SAVE :: ITCOUNTER2=0 -! INTEGER, SAVE ::OTHERCOUNTER=-1 -!XXX - +! !/OASIS INTEGER :: OASISED !/SEC1 INTEGER :: ISEC1 !/SBS INTEGER :: JJ, NDSOFLG @@ -910,13 +906,6 @@ !/MEMCHECK call printMallInfo(IAPROC,mallInfos) ! ITIME = ITIME + 1 -!XXX INLINE -! IF ( TSTAMP .AND. SCREEN.NE.NDSO .AND. IAPROC.EQ.NAPOUT & -! .AND. ITCOUNTER2 .EQ. 0) THEN -! ITCOUNTER= ITCOUNTER-1 -! ITCOUNTER2=1 -! END IF -!XXX ! DTG = REAL(NINT(DTGA+DTRES+0.0001)) DTRES = DTRES + DTGA - DTG @@ -935,9 +924,6 @@ CALL WWTIME ( STTIME ) CALL STME21 ( TIME , IDTIME ) WRITE (SCREEN,950) IDTIME, STTIME -!XXX -! ITCOUNTER=ITCOUNTER+1 -!XXX END IF !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE TIME LOOP 2' @@ -2375,25 +2361,12 @@ !/MPI ( NRQGO2, IRQGO2, STATIO, IERR_MPI ) !/MPI FLGMPI(1) = .FALSE. ! -!XXX INLINE -!! write(*,*)'*********GENERATING FOR GRID: ******************' IF (ODAT(3) .NE. 0) OUTSTRIDE(J)=ODAT(3) -! write(*,*) 'FIELDS J, ITCOUNTER,ODAT(3): ',J, ITCOUNTER(J),ODAT(3) -! write(*,*) ' OUTSTRIDE(J)', OUTSTRIDE(J) FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. -! write(*,*) 'FIELDS: J, FCSTTIME: ',J, FCSTTIME -!! IF ( J .EQ. 1 ) then -!! WRITE(*,*) 'J TIME ITCOUNTER(J), ITIME: ',J, TIME, ITCOUNTER(J), ITIME -! WRITE(*,*) 'OUTSTRIDE(J): ', OUTSTRIDE(J) -!! write(*,*) ' FCSTTIME: ', FCSTTIME -!! write(*,*) 'NDS(7), ITEST, IMOD: ',NDS(7), ITEST, IMOD -!! end if ! IF ( J .EQ. 1 ) CALL W3IOGO & -!replace ( 'WRITE', NDS(7), ITEST, IMOD ) ( 'WRITE', NDS(7), ITEST, IMOD,FCSTTIME ) IF ( J .EQ. 1 ) ITCOUNTER(J)=ITCOUNTER(J)+1 -!XXX ! !/SBS ! !/SBS ! Generate output flag file for fields and SBS coupling. @@ -2433,15 +2406,8 @@ ! Gets the necessary spectral data ! CALL W3IOPE ( VA ) -!XXX INLINE -!! write(*,*)'*********GENERATING OUTPUT FOR FOR POINTS: ******************' IF (ODAT(8) .NE. 0) OUTSTRIDE(J)=ODAT(3) -! write(*,*) 'POINTS J, ITCOUNTER,ODAT(8): ',J, ITCOUNTER(J),ODAT(8) -! write(*,*) 'POINTS J, ITCOUNTER,OUTSTRIDE(J): ',J, ITCOUNTER(J),ODAT(8) FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. -! write(*,*) 'POINTS: J, FCSTTIME: ',J, FCSTTIME -! -!XXX CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD ) CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD, FCSTTIME ) ITCOUNTER(J)=ITCOUNTER(J)+1 END IF diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 0eee412178..192197284a 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -377,7 +377,6 @@ !/MPI MPI_COMM_BCT, CROOT, FBCAST !/MPRF USE WMMDATMD, ONLY: MDSP USE W3INITMD, ONLY: WWVER -!XXX INLINE USE W3ODATMD, ONLY: OFILES, OUTSTRIDE ! !/ @@ -411,9 +410,7 @@ TMPRNK(:), TMPGRP(:), NINGRP(:), & TMOVE(:,:), LOADMP(:,:), IPRT(:,:), & NDPOUT(:) & -!XXX ,OUTFF(:,:),OUTDELTA(:,:) -!XXX REAL :: DTTST, XX, YY !/MPRF REAL :: PRFT0, PRFTN @@ -443,10 +440,8 @@ CHARACTER(LEN=30) :: IDOTYP(7) CHARACTER(LEN=80) :: TNAME CHARACTER(LEN=80) :: LINE -!XXX CHARACTER(LEN=80) :: LINEIN CHARACTER(LEN=8) :: WORDS(6) -!XXX TYPE OT2TPE INTEGER :: NPTS @@ -660,9 +655,7 @@ MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & FLG2(NOGRP,NRGRD) & -!XXX ,OUTFF(7,0:NRGRD),OUTDELTA(7,NRGRD)) -!XXX ! MDS = -1 MDSF = -1 @@ -1125,16 +1118,11 @@ ! 5.b Process standard line ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) -!XXX INLINE RP WORKING WITH -! READ (MDSI,*,END=2001,ERR=2002) (ODAT(I,1),I=5*(J-1)+1,5*J) IF(J .LE. 2) THEN ! READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J),OUTFF(J,1) READ (MDSI,'(A)') LINEIN WRITE(*,*) 'LINEIN: ',LINEIN READ(LINEIN,*,iostat=ierr) WORDS -! DO i=1,6 -! WRITE(*,*) WORDS(I) -! END DO ! IF(J .LE. 1) THEN READ(WORDS( 1 ), * ) ODAT(1,1) @@ -1167,24 +1155,11 @@ OUTPTS(1)%OFILES(J)=OUTFF(J,1) ! ! -! write(*,*) 'J; ', J -! WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' -! WRITE(*,*) 'OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) -!XXX - ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) -! -! WRITE(*,*) 'AFTER READ AND TRANSFORM' -! WRITE(*,*) (ODAT(I,1),I=5*(J-1)+1,5*J), OUTFF(J,1) -!XXX + ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) OUTDELTA(J,1)=ODAT(5*(J-1)+3,1) OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) OUTPTS(2)%OUTSTRIDE(J)=OUTDELTA(J,1) - -!! WRITE(*,*)'J OUTDELTA(',J,',1): ',J,OUTDELTA(J,1) -!! WRITE(*,*)'OUTPTS(1)%OUTSTRIDE(J):',OUTPTS(1)%OUTSTRIDE(J) -!! WRITE(*,*)'OUTPTS(2)%OUTSTRIDE(J):',OUTPTS(2)%OUTSTRIDE(J) -!XXX -!! +! IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & WRITE (MDSS,951) J, IDOTYP(J) @@ -1355,18 +1330,15 @@ IF ( UNIPTS ) THEN ODAT(6:10,0) = ODAT(6:10,1) ODAT( 8 , 1) = 0 -!XXX OUTPTS(1)%OFILES(1) = OUTFF(1,1) OUTPTS(1)%OUTSTRIDE(1) = OUTDELTA(1,1) END IF ! DO I=2, NRGRD ODAT(:,I) = ODAT(:,1) -!XXX OUTFF(:,I) = OUTFF(:,1) OUTPTS(I)%OFILES(:)=OUTFF(:,1) OUTPTS(I)%OUTSTRIDE(:)=OUTDELTA(:,1) -!XXX FLGD(:,I) = FLGD(:,1) FLGRD(:,:,I) = FLGRD(:,:,1) FLG2(:,I) = FLG2(:,1) @@ -1435,15 +1407,10 @@ ! 5.k Process standard line ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) -!XXX ININE READ (MDSI,*,END=2001,ERR=2002) (ODAT(II,I),II=5*(J-1)+1,5*J) IF(J .LE. 2) THEN -! READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,1),II=5*(J-1)+1,5*J),OUTFF(J,1) READ (MDSI,'(A)') LINEIN WRITE(*,*) 'LINEIN ', LINEIN READ(LINEIN,*,iostat=ierr) WORDS -! DO i=1,6 -! WRITE(*,*) WORDS(I) -! END DO ! IF(J .LE. 1) THEN READ(WORDS( 1 ), * ) ODAT(1,1) @@ -1479,14 +1446,9 @@ ! OUTPTS(1)%OFILES(J)=OUTFF(J,1) ! -!! WRITE(*,*) '111OUTPTS(1)%OFILES(J)', OUTPTS(1)%OFILES(J) -!XXX ODAT(5*(J-1)+3,I) = MAX ( 0 , ODAT(5*(J-1)+3,I) ) -!XXX OUTSTRIDE(J)=ODAT(5*(J-1)+3,1) OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) -!! WRITE(*,*)'OUTSTRIDE(J): ',OUTSTRIDE(J) -!XXX ! IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN TTIME(1) = ODAT(5*(J-1)+1,I) @@ -1644,7 +1606,6 @@ !/T DO I=1, NRGRD !/T WRITE (MDST,9050) I !/T WRITE (MDST,9051) ODAT(:,I) -!XXXINLINE !/T WRITE (MDST,9051) OUTFF(:,I) !/T WRITE (MDST,9052) FLGRD(:,:,I) !/T END DO @@ -2659,10 +2620,8 @@ OUTPTS(0)%DTOUT ( 2) = REAL ( ODAT( 8,0) ) OUTPTS(0)%TOLAST(1,2) = ODAT( 9,0) OUTPTS(0)%TOLAST(2,2) = ODAT(10,0) -!XXXINLINE OUTPTS(0)%OFILES(:) = OUTFF(:,0) OUTPTS(0)%OUTSTRIDE(:) = OUTDELTA(:,0) -!XXX ! TOUT = OUTPTS(0)%TONEXT(:,2) TLST = OUTPTS(0)%TOLAST(:,2) @@ -2809,7 +2768,6 @@ ! DEALLOCATE ( MDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, FLG2, INAMES,& MNAMES & -!XXX INLINE ,OUTFF, OUTDELTA ) ! !/MPI CALL MPI_BARRIER ( MPI_COMM_MWAVE, IERR_MPI ) @@ -3393,9 +3351,7 @@ USE W3WDATMD, ONLY: W3NDAT, W3SETW USE W3ADATMD, ONLY: W3NAUX, W3SETA USE W3ODATMD, ONLY: W3NOUT, W3SETO -!XXX INLINE USE W3ODATMD, ONLY: OFILES -!XXX USE W3IDATMD, ONLY: W3NINP, W3SETI, W3DIMI USE WMMDATMD, ONLY: WMNDAT, WMSETM, WMDIMD ! @@ -3492,10 +3448,8 @@ INTEGER, ALLOCATABLE :: MDS(:,:), NTRACE(:,:), ODAT(:,:), & TMPRNK(:), TMPGRP(:), NINGRP(:), & TMOVE(:,:), LOADMP(:,:), IPRT(:,:), & - NDPOUT(:) & -!XXX + NDPOUT(:) & ,OUTFF(:,:) -!XXX ! REAL :: DTTST, XX, YY !/MPRF REAL :: PRFT0, PRFTN @@ -3754,9 +3708,7 @@ MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & FLG2(NOGRP,NRGRD) & -!XXX ,OUTFF(7,0:NRGRD)) -!XXX ! MDS = -1 MDSF = -1 @@ -4251,21 +4203,13 @@ READ(NML_OUTPUT_DATE(I)%FIELD%START, *) ODAT(1,I), ODAT(2,I) READ(NML_OUTPUT_DATE(I)%FIELD%STRIDE, *) ODAT(3,I) READ(NML_OUTPUT_DATE(I)%FIELD%STOP, *) ODAT(4,I), ODAT(5,I) -!XXX READ(NML_OUTPUT_DATE(I)%FIELD%OUTFFILE, *) OUTFF(1,I) OUTPTS(I)%OUTSTRIDE(1)=ODAT(3,I) -!XXX READ(NML_OUTPUT_DATE(I)%POINT%START, *) ODAT(6,I), ODAT(7,I) READ(NML_OUTPUT_DATE(I)%POINT%STRIDE, *) ODAT(8,I) READ(NML_OUTPUT_DATE(I)%POINT%STOP, *) ODAT(9,I), ODAT(10,I) -!XXX READ(NML_OUTPUT_DATE(I)%POINT%OUTFFILE, *) OUTFF(2,I) OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) -!! WRITE(*,*) ' LOOP OVER NRGRD' -!! write(*,*) ' STRIDE(1):', OUTPTS(I)%OUTSTRIDE(1) -!! write(*,*) ' STRIDE(2):', OUTPTS(I)%OUTSTRIDE(2) -!! WRITE(*,*) 'I,OUTFF(1,I),OUTFF(2,I)=',I,OUTFF(1,I),OUTFF(2,I) -!XX READ(NML_OUTPUT_DATE(I)%TRACK%START, *) ODAT(11,I), ODAT(12,I) READ(NML_OUTPUT_DATE(I)%TRACK%STRIDE, *) ODAT(13,I) READ(NML_OUTPUT_DATE(I)%TRACK%STOP, *) ODAT(14,I), ODAT(15,I) @@ -4306,9 +4250,7 @@ ! ! 5.b Process standard line ! -!XXX OUTPTS(I)%OFILES(J)=OUTFF(J,I) -!XXX IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & WRITE (MDSS,951) J, IDOTYP(J) @@ -4520,9 +4462,6 @@ ! ! ... End of loop I on NRGRD in 5.a ! -!XXX -!! WRITE(*,*) 'OUTPTS(1)%OUTSTRIDE:', (OUTPTS(1)%OUTSTRIDE(JJ),JJ=1,7) -!XXX END DO ! !/T DO I=1, NRGRD diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index 5710c9119d..df4fcc28e6 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -192,8 +192,6 @@ USE W3WDATMD, ONLY: W3SETW USE W3ADATMD, ONLY: W3SETA USE W3ODATMD, ONLY: W3SETO, NOTYPE -!XXX INLINE -! ,ITCOUNTER USE W3IOPOMD, ONLY: W3IOPE USE W3WAVEMD, ONLY: W3WAVE USE W3SERVMD, ONLY: EXTCDE, WWTIME diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 27aa0de5ca..9bdd8ed482 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -245,7 +245,6 @@ USE W3ODATMD, ONLY: W3NOUT, W3SETO USE W3ODATMD, ONLY: NAPROC, IAPROC, NAPOUT, NAPERR, NOGRP, & NGRPP, IDOUT, FNMPRE, IOSTYP, NOTYPE -!XXX INLINE USE W3ODATMD, ONLY: OFILES !/ USE W3FLDSMD @@ -326,10 +325,8 @@ CHARACTER(LEN=80) :: LINE CHARACTER(LEN=256) :: TMPLINE, TEST CHARACTER(LEN=1024) :: FLDIN -!XXX CHARACTER(LEN=80) :: LINEIN CHARACTER(LEN=8) :: WORDS(6)='' -!XXX !/COU CHARACTER(LEN=30) :: OFILE ! @@ -1242,12 +1239,6 @@ !/DEBUGINIT write(740+IAPROC,*), ' After read 2002, case 7' ODAT(5*(J-1)+3) = MAX ( 0 , ODAT(5*(J-1)+3) ) ! -!INLINE RP -! WRITE(*,*) 'INIT-TIME TIMESTEP & -! END-TIME OPTION:' -! WRITE(*,*) (ODAT(I),I=5*(J-1)+1,5*J), OFILES(J) -!XXX - !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL NOTTYPE', J !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) From d499cee8cd8b7c485a1c0b6eb04816251c33469b Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Wed, 4 Dec 2019 02:35:21 +0000 Subject: [PATCH 21/49] Reverting changes adding FCSTTIME counter for optional gridded and point output to single file per output stride. Cleaned up auxiliary parameters. Added single output file marker defined as YYYYMMDD.HHMMSS prefix. --- model/ftn/w3iogomd.ftn | 36 ++--- model/ftn/w3iopomd.ftn | 35 ++--- model/ftn/w3odatmd.ftn | 7 +- model/ftn/w3wavemd.ftn | 14 +- model/ftn/wminitmd.ftn | 19 +-- regtests/mww3_test_06/info | 3 +- regtests/mww3_test_06/input/grdset_d_h | 4 + .../mww3_test_06/input/ww3_multi_grdset_d.inp | 4 +- .../input/ww3_multi_grdset_d_h.inp | 145 ++++++++++++++++++ 9 files changed, 180 insertions(+), 87 deletions(-) create mode 100644 regtests/mww3_test_06/input/grdset_d_h create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index 3aebfa9c12..b7e8c04eb4 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -51,10 +51,10 @@ !/ processing code) !/ 05-Jun-2018 : Add DEBUGSTP/SETUP ( version 6.04 ) !/ 22-Aug-2018 : Add WBT output parameter ( version 6.06 ) -!/ 04-Oct-2019 : Inline Output implementation ( version 6.07 ) -!/ (Roberto Padilla-Hernandez) !/ 25-Sep-2019 : Corrected th2m and sth2m ( version 6.07 ) !/ calculations. (J Dykes, NRL) +!/ 04-Oct-2019 : Optional one file per output stride ( version 7.00 ) +!/ (Roberto Padilla-Hernandez & J.H. Alves) !/ !/ Copyright 2009-2014 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -2346,7 +2346,7 @@ END SUBROUTINE W3OUTG !/ ------------------------------------------------------------------- / !/ - SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD,FCSTTIME ) + SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -2402,7 +2402,6 @@ ! 0 : Fields read. ! -1 : Past end of file. ! IMOD Int. I Model number for W3GDAT etc. -! FCSTTIME Real I Forecast time in hours from initial time ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -2500,10 +2499,7 @@ INTEGER, INTENT(IN) :: NDSOG INTEGER, INTENT(IN), OPTIONAL :: IMOD CHARACTER, INTENT(IN) :: INXOUT*(*) - REAL, INTENT(IN), OPTIONAL :: FCSTTIME - CHARACTER(LEN=3) :: CO - CHARACTER(LEN=6) :: Hstr - CHARACTER(LEN=7) :: FCSTNAM + CHARACTER(LEN=15) :: TIMETAG !/ !/ ------------------------------------------------------------------- / !/ Local parameters @@ -2633,27 +2629,13 @@ I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) ! - -!! write(*,*) '===FCSTTIME: ',FCSTTIME - IF (FCSTTIME .LT. 10.) THEN - CO='00' - ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN - CO='0' - ELSE IF (FCSTTIME .GE. 100) THEN - CO='' - END IF - -! Convert integer FCSTTIME into a character Hstr with 3 columns - WRITE(Hstr,"(f6.2)") FCSTTIME - Hstr(4:4)='p' - FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) -!! write(*,*)'w3iogo OutPut Filename: out_grd.', FCSTNAM,'.',FILEXT(:I) -! -!/T WRITE (NDST,9001) FNMPRE(:J)//'out_grd.'//FCSTNAM//'.'//FILEXT(:I) +! Create TIMETAG for file name using YYYYMMDD.HHMMS prefix + WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) +!/T WRITE (NDST,9001) FNMPRE(:J)//TIMETAG//'.out_grd.'//FILEXT(:I) IF ( WRITE ) THEN - OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FCSTNAM//'.' & + OPEN (NDSOG,FILE=FNMPRE(:J)//TIMETAG//'.out_grd.' & //FILEXT(:I),FORM='UNFORMATTED',ERR=800,IOSTAT=IERR) - ELSE + ELSE OPEN (NDSOG,FILE=FNMPRE(:J)//'out_grd.'//FILEXT(:I), & FORM='UNFORMATTED',ERR=800,IOSTAT=IERR,STATUS='OLD') END IF diff --git a/model/ftn/w3iopomd.ftn b/model/ftn/w3iopomd.ftn index 70d6438bc8..6eb6295607 100644 --- a/model/ftn/w3iopomd.ftn +++ b/model/ftn/w3iopomd.ftn @@ -33,6 +33,8 @@ !/ 11-Nov-2013 : SMC and rotated grid incorporated in the main !/ trunk ( version 4.13 ) !/ 05-Jun-2018 : Add SETUP ( version 6.04 ) +!/ 04-Oct-2019 : Optional one file per output stride ( version 7.00 ) +!/ (R. Padilla-Hernandez & J.H. Alves) !/ !/ Copyright 2009 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -856,7 +858,7 @@ !/ END SUBROUTINE W3IOPE !/ ------------------------------------------------------------------- / - SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD, FCSTTIME ) + SUBROUTINE W3IOPO ( INXOUT, NDSOP, IOTST, IMOD ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -888,7 +890,6 @@ ! 0 : Data read. ! -1 : Past end of file. ! IMOD I(O) I Model number for W3GDAT etc. -! FCSTTIME Real I Forecast time in hours from initial time ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -956,7 +957,6 @@ INTEGER, INTENT(OUT) :: IOTST INTEGER, INTENT(IN), OPTIONAL :: IMOD CHARACTER, INTENT(IN) :: INXOUT*(*) - REAL, INTENT(IN), OPTIONAL :: FCSTTIME !/ !/ ------------------------------------------------------------------- / !/ local parameters @@ -967,9 +967,7 @@ CHARACTER(LEN=31) :: IDTST CHARACTER(LEN=10) :: VERTST !/ - CHARACTER(LEN=3) :: CO - CHARACTER(LEN=6) :: Hstr - CHARACTER(LEN=7) :: FCSTNAM + CHARACTER(LEN=15) :: TIMETAG !/ !/ ------------------------------------------------------------------- / !/ @@ -1085,29 +1083,14 @@ I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) -!! write(*,*) '===FCSTTIME: ',FCSTTIME - IF (FCSTTIME .LT. 10.) THEN - CO='00' - ELSE IF (FCSTTIME .GE. 10. .AND. FCSTTIME .LT. 100.) THEN - CO='0' - ELSE IF (FCSTTIME .GE. 100) THEN - CO='' - END IF - -! Convert integer FCSTTIME into a character Hstr with 3 columns - WRITE(Hstr,"(f6.2)") FCSTTIME - Hstr(4:4)='p' - FCSTNAM='f'//TRIM(ADJUSTL(CO))//TRIM(ADJUSTL(Hstr)) -!! write(*,*)'w3iopo OutPut Filename: out_pnt.', FCSTNAM,'.',FILEXT(:I) -! -!/T WRITE (NDST,9001) FNMPRE(:J)//'out_pnt.'//FCSTNAM//'.'// & +! Create TIMETAG for file name using YYYYMMDD.HHMMS prefix + WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) +! +!/T WRITE (NDST,9001) FNMPRE(:J)//TIMETAG//'.out_pnt.'// & !/T FILEXT(:I) IF ( WRITE ) THEN - OPEN (NDSOP,FILE=FNMPRE(:J)//'out_pnt.'//FCSTNAM//'.' & + OPEN (NDSOP,FILE=FNMPRE(:J)//TIMETAG//'.out_pnt.' & //FILEXT(:I),FORM='UNFORMATTED',ERR=800,IOSTAT=IERR) -! ELSE -! OPEN (NDSOP,FILE=FNMPRE(:J)//'out_pnt.'//FILEXT(:I),& -! FORM='UNFORMATTED',ERR=800,IOSTAT=IERR,STATUS='OLD') END IF ! REWIND ( NDSOP ) diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 62b3528e7f..80441682b9 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -400,8 +400,7 @@ NAPTRK, NAPRST, NAPBPT, NAPPRT INTEGER :: NOSWLL INTEGER :: TOFRST(2), TONEXT(2,7), TOLAST(2,7), & - TBPI0(2), TBPIN(2), NDS(13) & - ,OFILES(7),OUTSTRIDE(7),ITCOUNTER(7) + TBPI0(2), TBPIN(2), NDS(13), OFILES(7) REAL :: DTOUT(7) LOGICAL :: FLOUT(7) TYPE(OTYPE1) :: OUT1 @@ -425,7 +424,7 @@ INTEGER, POINTER :: NOSWLL INTEGER, POINTER :: TOFRST(:), TONEXT(:,:), TOLAST(:,:), & TBPI0(:), TBPIN(:), NDS(:) - INTEGER, POINTER :: OFILES(:), OUTSTRIDE(:),ITCOUNTER(:) + INTEGER, POINTER :: OFILES(:) REAL, POINTER :: DTOUT(:) LOGICAL, POINTER :: FLOUT(:) !/ @@ -1506,8 +1505,6 @@ TBPIN => OUTPTS(IMOD)%TBPIN NDS => OUTPTS(IMOD)%NDS OFILES => OUTPTS(IMOD)%OFILES - OUTSTRIDE => OUTPTS(IMOD)%OUTSTRIDE - ITCOUNTER=>OUTPTS(IMOD)%ITCOUNTER ! DTOUT => OUTPTS(IMOD)%DTOUT FLOUT => OUTPTS(IMOD)%FLOUT diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index d9329cc6d2..fe93640277 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -425,8 +425,7 @@ IX, IY, ISPEC, J, TOUT(2), TLST(2), & REFLED(6), IK, ITH, IS, NKCFL INTEGER :: ISP, IP_glob - REAL :: ICEDAVE & - ,FCSTTIME + REAL :: ICEDAVE ! !/OASIS INTEGER :: OASISED !/SEC1 INTEGER :: ISEC1 @@ -2360,13 +2359,9 @@ !/MPI IF ( FLGMPI(1) ) CALL MPI_WAITALL & !/MPI ( NRQGO2, IRQGO2, STATIO, IERR_MPI ) !/MPI FLGMPI(1) = .FALSE. -! - IF (ODAT(3) .NE. 0) OUTSTRIDE(J)=ODAT(3) - FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. ! IF ( J .EQ. 1 ) CALL W3IOGO & - ( 'WRITE', NDS(7), ITEST, IMOD,FCSTTIME ) - IF ( J .EQ. 1 ) ITCOUNTER(J)=ITCOUNTER(J)+1 + ( 'WRITE', NDS(7), ITEST, IMOD ) ! !/SBS ! !/SBS ! Generate output flag file for fields and SBS coupling. @@ -2406,10 +2401,7 @@ ! Gets the necessary spectral data ! CALL W3IOPE ( VA ) - IF (ODAT(8) .NE. 0) OUTSTRIDE(J)=ODAT(3) - FCSTTIME=REAL(ITCOUNTER(J)*OUTSTRIDE(J))/3600. - CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD, FCSTTIME ) - ITCOUNTER(J)=ITCOUNTER(J)+1 + CALL W3IOPO ( 'WRITE', NDS(8), ITEST, IMOD ) END IF ! ELSE IF ( J .EQ. 3 ) THEN diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 192197284a..268fcf8795 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -377,7 +377,7 @@ !/MPI MPI_COMM_BCT, CROOT, FBCAST !/MPRF USE WMMDATMD, ONLY: MDSP USE W3INITMD, ONLY: WWVER - USE W3ODATMD, ONLY: OFILES, OUTSTRIDE + USE W3ODATMD, ONLY: OFILES ! !/ IMPLICIT NONE @@ -409,8 +409,7 @@ INTEGER, ALLOCATABLE :: MDS(:,:), NTRACE(:,:), ODAT(:,:), & TMPRNK(:), TMPGRP(:), NINGRP(:), & TMOVE(:,:), LOADMP(:,:), IPRT(:,:), & - NDPOUT(:) & - ,OUTFF(:,:),OUTDELTA(:,:) + NDPOUT(:), OUTFF(:,:) REAL :: DTTST, XX, YY !/MPRF REAL :: PRFT0, PRFTN @@ -655,7 +654,7 @@ MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & FLG2(NOGRP,NRGRD) & - ,OUTFF(7,0:NRGRD),OUTDELTA(7,NRGRD)) + ,OUTFF(7,0:NRGRD)) ! MDS = -1 MDSF = -1 @@ -1156,9 +1155,6 @@ ! ! ODAT(5*(J-1)+3,1) = MAX ( 0 , ODAT(5*(J-1)+3,1) ) - OUTDELTA(J,1)=ODAT(5*(J-1)+3,1) - OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) - OUTPTS(2)%OUTSTRIDE(J)=OUTDELTA(J,1) ! IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & @@ -1331,14 +1327,12 @@ ODAT(6:10,0) = ODAT(6:10,1) ODAT( 8 , 1) = 0 OUTPTS(1)%OFILES(1) = OUTFF(1,1) - OUTPTS(1)%OUTSTRIDE(1) = OUTDELTA(1,1) END IF ! DO I=2, NRGRD ODAT(:,I) = ODAT(:,1) OUTFF(:,I) = OUTFF(:,1) OUTPTS(I)%OFILES(:)=OUTFF(:,1) - OUTPTS(I)%OUTSTRIDE(:)=OUTDELTA(:,1) FLGD(:,I) = FLGD(:,1) FLGRD(:,:,I) = FLGRD(:,:,1) FLG2(:,I) = FLG2(:,1) @@ -1447,8 +1441,6 @@ OUTPTS(1)%OFILES(J)=OUTFF(J,1) ! ODAT(5*(J-1)+3,I) = MAX ( 0 , ODAT(5*(J-1)+3,I) ) - OUTSTRIDE(J)=ODAT(5*(J-1)+3,1) - OUTPTS(1)%OUTSTRIDE(J)=OUTDELTA(J,1) ! IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN TTIME(1) = ODAT(5*(J-1)+1,I) @@ -2621,7 +2613,6 @@ OUTPTS(0)%TOLAST(1,2) = ODAT( 9,0) OUTPTS(0)%TOLAST(2,2) = ODAT(10,0) OUTPTS(0)%OFILES(:) = OUTFF(:,0) - OUTPTS(0)%OUTSTRIDE(:) = OUTDELTA(:,0) ! TOUT = OUTPTS(0)%TONEXT(:,2) TLST = OUTPTS(0)%TOLAST(:,2) @@ -2768,7 +2759,7 @@ ! DEALLOCATE ( MDS, NTRACE, ODAT, FLGRD, FLGR2, FLGD, FLG2, INAMES,& MNAMES & - ,OUTFF, OUTDELTA ) + ,OUTFF ) ! !/MPI CALL MPI_BARRIER ( MPI_COMM_MWAVE, IERR_MPI ) ! @@ -4204,12 +4195,10 @@ READ(NML_OUTPUT_DATE(I)%FIELD%STRIDE, *) ODAT(3,I) READ(NML_OUTPUT_DATE(I)%FIELD%STOP, *) ODAT(4,I), ODAT(5,I) READ(NML_OUTPUT_DATE(I)%FIELD%OUTFFILE, *) OUTFF(1,I) - OUTPTS(I)%OUTSTRIDE(1)=ODAT(3,I) READ(NML_OUTPUT_DATE(I)%POINT%START, *) ODAT(6,I), ODAT(7,I) READ(NML_OUTPUT_DATE(I)%POINT%STRIDE, *) ODAT(8,I) READ(NML_OUTPUT_DATE(I)%POINT%STOP, *) ODAT(9,I), ODAT(10,I) READ(NML_OUTPUT_DATE(I)%POINT%OUTFFILE, *) OUTFF(2,I) - OUTPTS(I)%OUTSTRIDE(2)=ODAT(8,I) READ(NML_OUTPUT_DATE(I)%TRACK%START, *) ODAT(11,I), ODAT(12,I) READ(NML_OUTPUT_DATE(I)%TRACK%STRIDE, *) ODAT(13,I) READ(NML_OUTPUT_DATE(I)%TRACK%STOP, *) ODAT(14,I), ODAT(15,I) diff --git a/regtests/mww3_test_06/info b/regtests/mww3_test_06/info index fd714f1e97..cc18a2dcce 100644 --- a/regtests/mww3_test_06/info +++ b/regtests/mww3_test_06/info @@ -30,7 +30,8 @@ # + Spectral grid: ntheta = 12, nf = 3, f1 = 0.0368, fgamma = 1.10 # # # # * Grid sets available : # -# + grdset_d : gbandd360 arcticsub # +# + grdset_d : gbandd360 arcticsub # +# + grdset_d_h : gbandd360 arcticsub with hourly binary output # # # # - switch options (mostly self-explanatory). # # + switch_PR3_UQ # diff --git a/regtests/mww3_test_06/input/grdset_d_h b/regtests/mww3_test_06/input/grdset_d_h new file mode 100644 index 0000000000..aa51e73294 --- /dev/null +++ b/regtests/mww3_test_06/input/grdset_d_h @@ -0,0 +1,4 @@ +MODEL: gbandd360 arcticsub +INPUT: +POINT: gbandd360 arcticsub +INTGL: glout diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp index f3a3325bff..3e9639df7e 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d.inp @@ -96,7 +96,7 @@ $ -------------------------------------------------------------------- $ $ Conventional output requests as in ww3_shel.inp. Will be applied $ to all grids. $ - 19680606 000000 3600 19680608 000000 1 + 19680606 000000 3600 19680608 000000 $ $ N @@ -105,7 +105,7 @@ $ $ NOTE: Ff UNIPTS = .TRUE. then the point output needs to be defined $ here and cannot be redefined below. $ - 19680606 000000 3600 19680608 000000 1 + 19680606 000000 3600 19680608 000000 15.50 73.50 'LFB1' 30.00 74.00 'LFB2' 28.5 71.5833 'Nordkyn' diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp new file mode 100644 index 0000000000..f3a3325bff --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp @@ -0,0 +1,145 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III multi-grid model driver input file $ +$ -------------------------------------------------------------------- $ +$ +$ The first input line sets up the general multi-grid model definition +$ by defining the follwing six parameters : +$ +$ 1) Number of wave model grids.i ( NRGRD ) +$ 2) Number of grids defining input fields. ( NRINP ) +$ 3) Flag for using unified point output file. ( UNIPTS ) +$ 4) Output server type as in ww3_shel.inp +$ 5) Flag for dedicated process for iunified point output. +$ 6) Flag for grids sharing dedicated output processes. +$ +$ 3 1 T 1 T T {example} + 2 0 F 1 F F +$ +$ -------------------------------------------------------------------- $ +$ If there are input data grids defined ( NRINP > 0 ), then these +$ grids are defined first. These grids are defined as if they are wave +$ model grids using the file mod_def.MODID. Each grid is defined on +$ a separate input line with MODID, and eight input flags identifying +$ the presentce of 1) water levels 2) currents 3) winds 4) ice and +$ 5-7) assimilation data as in the file ww3_shel.inp. +$ +$ 'input' F F T F F F F {example} +$ +$ In this example, we need the file mod_def.input to define the grid +$ and the file wind.input to provide the corresponding wind data. +$ +$ -------------------------------------------------------------------- $ +$ If all point output is gathered in a unified point output file +$ ( UNIPTS = .TRUE. ), then the output spectral grid needs to be +$ defined. Ths information is taken from a wave model grid, and only +$ the spectral definitions from this grid are relevant. Define the +$ name of this grid here +$ +$ 'points' {example} +$ +$ In this example, we need the file mod_def.points to define the +$ spectral output grid, and the point output will be written to the +$ file out_pnt.points +$ +$ -------------------------------------------------------------------- $ +$ Now each actual wave model grid is defined using 13 parameters to be +$ read fom a single line in the file. Each line contains the following +$ parameters +$ 1) Define the grid with the extension of the mod_def file. +$ 2-8) Define the inputs used by the grids with 8 keywords +$ corresponding to the 8 flags defining the input in the +$ input files. Valid keywords are: +$ 'no' : This input is not used. +$ 'native' : This grid has its own input files, e.g. grid +$ grdX (mod_def.grdX) uses ice.grdX. +$ 'MODID' : Take input from the grid identified by +$ MODID. In the example below, all grids get +$ their wind from wind.input (mod_def.input). +$ 9) Rank number of grid (internally sorted and reassigned). +$ 10) Group number (internally reassigned so that different +$ ranks result in different group numbers. +$ 11-12) Define fraction of communicator (processes) used for this +$ grid. +$ 13) Flag identifying dumping of boundary data used by this +$ grid. If true, the file nest.MODID is generated. +$ +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} +$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F +$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F +$ +$ +$ In this example three grids are used requiring the files +$ mod_def.grdN. All files get ther winds from the grid 'input' +$ defined by mod_def.input, and no other inputs are used. In the lines +$ that are commented out, each grid runs on a part of the pool of +$ processes assigned to the computation. +$ +$ -------------------------------------------------------------------- $ +$ Starting and ending times for the entire model run +$ + 19680606 000000 19680607 000000 +$ +$ -------------------------------------------------------------------- $ +$ Specific multi-scale model settings (single line). +$ Flag for masking computation in two-way nesting (except at +$ output times). +$ Flag for masking at printout time. +$ + T T +$ +$ +$ -------------------------------------------------------------------- $ +$ Conventional output requests as in ww3_shel.inp. Will be applied +$ to all grids. +$ + 19680606 000000 3600 19680608 000000 1 +$ +$ +N +DPT HS +$ +$ NOTE: Ff UNIPTS = .TRUE. then the point output needs to be defined +$ here and cannot be redefined below. +$ + 19680606 000000 3600 19680608 000000 1 + 15.50 73.50 'LFB1' + 30.00 74.00 'LFB2' + 28.5 71.5833 'Nordkyn' + 0.0 0.0 'STOPSTRING' + 19680606 000000 0 19680608 000000 + 19680606 000000 0 19680608 000000 + 19680606 000000 0 19680608 000000 + 19680606 000000 0 19680608 000000 +$ +$ -------------------------------------------------------------------- $ +$ Output requests per grid and type to overwrite general setup +$ as defined above. First record per set is the grid name MODID +$ and the output type number. Then follows the standard time string, +$ and conventional data as per output type. In mww3_test_05 this is +$ not used. Below, one example generating partitioning output for +$ the inner grid is included but commented out. +$ +$ 'grd3' 6 +$ 19680606 000000 900 19680608 000000 +$ 0 999 1 0 999 1 T +$ +$ -------------------------------------------------------------------- $ +$ Mandatory end of outpout requests per grid, identified by output +$ type set to 0. +$ + 'the_end' 0 +$ +$ +$ -------------------------------------------------------------------- $ +$ Moving grid data as in ww3_shel.inp. All grids will use same data. +$ +$ 'MOV' 19680606 000000 5. 90. {example} + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ From efe7f680134ef1fde7c5203fc5a3413c0e257d51 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Wed, 4 Dec 2019 16:25:55 +0000 Subject: [PATCH 22/49] Starting work to add restart files on separate stride for checkpointing --- model/ftn/w3iorsmd.ftn | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 4c7fa12c2c..40cc2219b9 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -118,6 +118,14 @@ ! restart001.FILEXT ! restart002.FILEXT etc. ! +! Optionally, a second stream of restart files is generated given +! a secondary stride definad by an additional start/end time line +! triggered by an optional argument added to the end of the stan- +! dard restart request line (a sixth argument flag set to T). File +! names include a time-tag prefix: +! +! YYYYMMDD.HHMMSS.restart.FILEXT +! ! The file to be read thus always is unnumbered, whereas all ! written files are automatically numbered. ! From ca7f680442c097024ee271f9280ceabad66ef4e4 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Thu, 5 Dec 2019 03:29:57 +0000 Subject: [PATCH 23/49] Correcting bug in unified output that prevented writing single files per output time step for unified point output case. Creating separate gridset for testing single-file per output time step --- model/ftn/wminitmd.ftn | 14 +++----------- regtests/mww3_test_06/input/grdset_d_h | 2 +- .../mww3_test_06/input/ww3_multi_grdset_d_h.inp | 4 ++-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 268fcf8795..5073769362 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -653,8 +653,7 @@ FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & - FLG2(NOGRP,NRGRD) & - ,OUTFF(7,0:NRGRD)) + FLG2(NOGRP,NRGRD),OUTFF(7,0:NRGRD)) ! MDS = -1 MDSF = -1 @@ -1118,7 +1117,6 @@ ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) IF(J .LE. 2) THEN -! READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J),OUTFF(J,1) READ (MDSI,'(A)') LINEIN WRITE(*,*) 'LINEIN: ',LINEIN READ(LINEIN,*,iostat=ierr) WORDS @@ -1422,22 +1420,15 @@ IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN OUTFF(J,1)=0 -! WRITE(*,*) ' Number of data: ', 5 ELSE READ(WORDS( 6 ), * ) OUTFF(J,1) -! WRITE(*,*) ' Number of data: ', 6 END IF -! WRITE(*,*) 'OUTFF(J,1)= ', OUTFF(J,1) ! ELSE READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,1),II=5*(J-1)+1,5*J) OUTFF(J,1) = 0 END IF ! -!! write(*,*) 'J; ', J -!! WRITE(*,*) 'INIT-TIME TIMESTEP END-TIME OPTION:' -!! WRITE(*,*) (ODAT(II,1),II=5*(J-1)+1,5*J), OUTFF(J,1) -! OUTPTS(1)%OFILES(J)=OUTFF(J,1) ! ODAT(5*(J-1)+3,I) = MAX ( 0 , ODAT(5*(J-1)+3,I) ) @@ -2612,7 +2603,8 @@ OUTPTS(0)%DTOUT ( 2) = REAL ( ODAT( 8,0) ) OUTPTS(0)%TOLAST(1,2) = ODAT( 9,0) OUTPTS(0)%TOLAST(2,2) = ODAT(10,0) - OUTPTS(0)%OFILES(:) = OUTFF(:,0) + OUTPTS(0)%OFILES(1) = OUTFF(1,1) + OUTPTS(0)%OFILES(2) = OUTFF(1,2) ! TOUT = OUTPTS(0)%TONEXT(:,2) TLST = OUTPTS(0)%TOLAST(:,2) diff --git a/regtests/mww3_test_06/input/grdset_d_h b/regtests/mww3_test_06/input/grdset_d_h index aa51e73294..72f21f6693 100644 --- a/regtests/mww3_test_06/input/grdset_d_h +++ b/regtests/mww3_test_06/input/grdset_d_h @@ -1,4 +1,4 @@ MODEL: gbandd360 arcticsub INPUT: -POINT: gbandd360 arcticsub +POINT: points INTGL: glout diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp index f3a3325bff..a73f4874a7 100644 --- a/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_h.inp @@ -13,7 +13,7 @@ $ 5) Flag for dedicated process for iunified point output. $ 6) Flag for grids sharing dedicated output processes. $ $ 3 1 T 1 T T {example} - 2 0 F 1 F F + 2 0 T 1 F F $ $ -------------------------------------------------------------------- $ $ If there are input data grids defined ( NRINP > 0 ), then these @@ -35,7 +35,7 @@ $ defined. Ths information is taken from a wave model grid, and only $ the spectral definitions from this grid are relevant. Define the $ name of this grid here $ -$ 'points' {example} + 'points' $ $ In this example, we need the file mod_def.points to define the $ spectral output grid, and the point output will be written to the From f8603ea9791b611bd75e784e7338c4158b013cb0 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Tue, 17 Dec 2019 03:49:04 +0000 Subject: [PATCH 24/49] Updating ww3_grib to most recent WMO grib2 tables, adding option to encode grib2 data from ensemble run, updating model/inp/ww3_grib.inp to indicate usage. In wminitmd.ftn and ww3_shel.ftn liminating annoying write statement left over from testing. --- model/ftn/wminitmd.ftn | 2 - model/ftn/ww3_grib.ftn | 100 ++++++++++++++++++++++++++++++++++++++--- model/ftn/ww3_shel.ftn | 1 - model/inp/ww3_grib.inp | 7 +++ 4 files changed, 101 insertions(+), 9 deletions(-) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 5073769362..a33afed1c7 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -1118,7 +1118,6 @@ CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) IF(J .LE. 2) THEN READ (MDSI,'(A)') LINEIN - WRITE(*,*) 'LINEIN: ',LINEIN READ(LINEIN,*,iostat=ierr) WORDS ! IF(J .LE. 1) THEN @@ -1401,7 +1400,6 @@ CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) IF(J .LE. 2) THEN READ (MDSI,'(A)') LINEIN - WRITE(*,*) 'LINEIN ', LINEIN READ(LINEIN,*,iostat=ierr) WORDS ! IF(J .LE. 1) THEN diff --git a/model/ftn/ww3_grib.ftn b/model/ftn/ww3_grib.ftn index ae057ff801..a4e88cceb2 100644 --- a/model/ftn/ww3_grib.ftn +++ b/model/ftn/ww3_grib.ftn @@ -157,6 +157,10 @@ REAL :: DTREQ, DTEST, RFTIME LOGICAL :: FLREQ(NOGRP,NGRPP), FLGRIB(NOGRP,NGRPP) CHARACTER :: COMSTR*1, IDTIME*23, IDDDAY*11 + CHARACTER(LEN=80) :: LINEIN + CHARACTER(LEN=8) :: WORDS(5) + INTEGER :: GEN_PRO + !/ !/ ------------------------------------------------------------------- / !/ @@ -221,7 +225,20 @@ ! Output times ! CALL NEXTLN ( COMSTR , NDSI , NDSE ) - READ (NDSI,*,END=801,ERR=802) TOUT, DTREQ, NOUT + READ (NDSI,'(A)') LINEIN + WRITE(NDSO,*)' LINEIN: ',LINEIN + READ(LINEIN,*,iostat=ierr) WORDS + WRITE (NDSO,*) WORDS + READ(WORDS( 1 ), * ) TOUT(1) + READ(WORDS( 2 ), * ) TOUT(2) + READ(WORDS( 3 ), * ) DTREQ + READ(WORDS( 4 ), * ) NOUT + IF (WORDS(5) .NE. '0' .AND. WORDS(5) .NE. '1') THEN + GEN_PRO=-99999 + ELSE + READ(WORDS( 5 ), * ) GEN_PRO + ENDIF + WRITE(NDSO,*) 'GEN_PRO ',GEN_PRO DTREQ = MAX ( 0. , DTREQ ) IF ( DTREQ.EQ.0 ) NOUT = 1 NOUT = MAX ( 1 , NOUT ) @@ -664,8 +681,17 @@ ! (14) Scaled factor of (13) ! (15) Scaled value of (13) ! +! +! KPDS(3)=4 ensemble forecast:ww3_grib.inp has gen_pro set to 1 +! =2 deterministic forecast: ww3_grib.inp gen_pro set to 0 +! =2 legacy :with no gen_pro set in ww3_grib.inp +! (in the case of legacy the params revert back to old names) !/NCEP2 KPDSNUM = 0 -!/NCEP2 KPDS( 3) = 2 +!/NCEP2 if ( gen_pro.eq.1 ) then +!/NCEP2 KPDS( 3) = 4 +!/NCEP2 else +!/NCEP2 KPDS(3)=2 +!/NCEP2 endif !/NCEP2 KPDS( 4) = 0 !/NCEP2 KPDS( 5) = PID !/NCEP2 KPDS( 8) = 1 @@ -955,7 +981,8 @@ !/S INTEGER, SAVE :: IENT = 0 REAL :: X1(NX*NY), X2(NX*NY), XX(NX*NY), & XY(NX*NY), CABS, UABS, & - YY(NX*NY,0:NOSWLL), KPDS5A, KPDS5B + YY(NX*NY,0:NOSWLL), KPDS5A, KPDS5B, & + KPDS5A1(3) LOGICAL*1 :: BITMAP(NX*NY) LOGICAL :: FLONE, FLTWO, FLDIR, FLTRI, FLPRT !/ @@ -1123,7 +1150,12 @@ ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 3 ) THEN FLONE = .TRUE. !/NCEP1 KPDS(5) = -1 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then !/NCEP2 KPDS(2) = 28 +!/NCEP2 else +!/NCEP2 KPDS(2) = 25 +!/NCEP2 endif + CALL W3S2XY ( NSEA, NSEA, NX, NY, T02 , MAPSF, X1 ) ! ! Mean wave period (based on first moment) @@ -1139,7 +1171,11 @@ ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 5 ) THEN FLONE = .TRUE. !/NCEP1 KPDS(5) = -1 -!/NCEP2 KPDS(2) = 25 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS(2) = 34 +!/NCEP2 else +!/NCEP2 KPDS(2) = 15 +!/NCEP2 endif CALL W3S2XY ( NSEA, NSEA, NX, NY, T01 , MAPSF, X1 ) ! ! Peak frequency @@ -1183,7 +1219,11 @@ ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 9 ) THEN FLONE = .TRUE. !/NCEP1 KPDS(5) = 107 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS(2) = 46 +!/NCEP2 else !/NCEP2 KPDS(2) = 10 +!/NCEP2 endif !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, THP0, AnglD, .FALSE.) DO ISEA=1, NSEA @@ -1201,6 +1241,13 @@ !/NCEP1 KPDS5B = 105 !/NCEP2 KPDS5A = 5 !/NCEP2 KPDS5B = 8 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS5A1(1) =47 +!/NCEP2 KPDS5A1(2) =48 +!/NCEP2 KPDS5A1(3) =49 +!/NCEP2 else +!/NCEP2 KPDS5B = 8 +!/NCEP2 endif CALL W3S2XY & ( NSEA, NSEA, NX, NY, PHS(:,0), MAPSF, YY(:,0) ) DO I=1, NOSWLL @@ -1215,7 +1262,14 @@ !/NCEP1 KPDS5A = 110 !/NCEP1 KPDS5B = 106 !/NCEP2 KPDS5A = 6 -!/NCEP2 KPDS5B = 9 +!/NCEP2 KPDS5B = 9 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS5A1(1) = 50 +!/NCEP2 KPDS5A1(2) = 51 +!/NCEP2 KPDS5A1(3) = 52 +!/NCEP2 else +!/NCEP2 KPDS5B = 9 +!/NCEP2 endif CALL W3S2XY & ( NSEA, NSEA, NX, NY, PTP(:,0), MAPSF, YY(:,0) ) DO I=1, NOSWLL @@ -1245,7 +1299,14 @@ !/NCEP1 KPDS5A = 109 !/NCEP1 KPDS5B = 104 !/NCEP2 KPDS5A = 4 -!/NCEP2 KPDS5B = 7 +!/NCEP2 KPDS5B = 7 +!/NCEP2 if ((gen_pro.eq.1) .or. (gen_pro.eq.0)) then +!/NCEP2 KPDS5A1(1) = 53 +!/NCEP2 KPDS5A1(2) = 54 +!/NCEP2 KPDS5A1(3) = 55 +!/NCEP2 else +!/NCEP2 KPDS5B = 7 +!/NCEP2 endif !/RTD DO I = 0,NOSWLL !/RTD ! Rotate direction back to standard pole !/RTD IF ( FLAGUNR ) CALL W3THRTN(NSEA, PDIR(:,I), AnglD, .FALSE.) @@ -1393,6 +1454,32 @@ !/NCEP2 IF (IO .NE. 0) GOTO 830 !/NCEP2 CALL WRYTE (NDSDAT, LENGRIB, CGRIB) ! +!/NCEP2 if ((gen_pro.eq.0) .or. (gen_pro.eq.1)) then +!/NCEP1 KPDS(5) = KPDS5B +!/NCEP1 KPDS(6) = 241 +!/NCEP2 KPDS(10) = 241 + DO I=1, NOSWLL +!/NCEP1 KPDS(7) = I +!/NCEP2 KPDS(2) = KPDS5A1(I) +!/NCEP2 KPDS(12) = I + DO IXY=1, NX*NY + BITMAP(IXY) = YY(IXY,I) .NE. UNDEF + END DO +!/NCEP1 CALL PUTGB (NDSDAT,NDATA,KPDS,KGDS,BITMAP,YY(:,I),IO) +!/NCEP2 CALL GRIBCREATE (CGRIB,LCGRIB,LISTSEC0,LISTSEC1,IO) +!/NCEP2 IF (IO .NE. 0) GOTO 810 +!/NCEP2 CALL ADDGRID (CGRIB,LCGRIB,IGDS,KGDS,200,IDEFLIST, & +!/NCEP2 IDEFNUM, IO) +!/NCEP2 IF (IO .NE. 0) GOTO 820 +!/NCEP2 CALL ADDFIELD (CGRIB,LCGRIB,KPDSNUM,KPDS,200, & +!/NCEP2 COORDLIST, NUMCOORD, IDRSNUM, IDRS, & +!/NCEP2 200,YY(:,I), NDATA, IBMP, BITMAP, IO) +!/NCEP2 IF (IO .NE. 0) GOTO 820 +!/NCEP2 CALL GRIBEND (CGRIB, LCGRIB, LENGRIB, IO) +!/NCEP2 IF (IO .NE. 0) GOTO 830 +!/NCEP2 CALL WRYTE (NDSDAT, LENGRIB, CGRIB) + END DO +!/NCEP2 ELSE !/NCEP1 KPDS(5) = KPDS5B !/NCEP1 KPDS(6) = 241 !/NCEP2 KPDS(2) = KPDS5B @@ -1417,6 +1504,7 @@ !/NCEP2 IF (IO .NE. 0) GOTO 830 !/NCEP2 CALL WRYTE (NDSDAT, LENGRIB, CGRIB) END DO +!/NCEP2 ENDIF !/NCEP1 KPDS(6) = 1 !/NCEP1 KPDS(7) = 1 !/NCEP2 KPDS(10) = 1 diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 9bdd8ed482..8d414ab077 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -1201,7 +1201,6 @@ IF(J .LE. 2) THEN ! READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) READ (NDSI,'(A)') LINEIN - WRITE(*,*) 'LINEIN: ', LINEIN READ(LINEIN,*,iostat=ierr) WORDS DO I=1,6 ! WRITE(*,*) I, WORDS(I) diff --git a/model/inp/ww3_grib.inp b/model/inp/ww3_grib.inp index 27f9c8101c..8519842ac4 100644 --- a/model/inp/ww3_grib.inp +++ b/model/inp/ww3_grib.inp @@ -5,6 +5,13 @@ $ Time, time increment and number of outputs. $ 19680606 000000 3600. 3 $ +$ Time, time increment and number of outputs. Option to encode grib2 +$ from ensemble runs (replace line above with commented line below). +$ Usage: include additional (optional) 5th parameter +$ 0 - deterministic (default) +$ 1 - ensemble run +$ 19680606 000000 3600. 3 1 +$ $ Output request flags identifying fields as in ww3_shel.inp. See that $ file for a full documentation of field output options. Namelist type $ selection is used here (for alternative F/T flags, see ww3_shel.inp). From c0559badd18caae5564dfa484552dc860b4931fb Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Fri, 20 Dec 2019 10:59:54 -0500 Subject: [PATCH 25/49] Checkpoint for multi completed --- model/ftn/w3initmd.ftn | 16 ++++++- model/ftn/w3iorsmd.ftn | 29 ++++++++++--- model/ftn/w3odatmd.ftn | 6 +-- model/ftn/w3wavemd.ftn | 52 +++++++++++++++++++++- model/ftn/wminitmd.ftn | 97 +++++++++++++++++++++++++++++++++++++----- 5 files changed, 178 insertions(+), 22 deletions(-) diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 6725b44d00..6c1e52d773 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -854,7 +854,7 @@ !/DEBUGINIT WRITE(740+IAPROC,*) ' After ALL_VA_INTEGRAL_PRINT' !/DEBUGINIT FLUSH(740+IAPROC) !/TIMINGS CALL PRINT_MY_TIME("Before W3IORS") - CALL W3IORS ( 'READ', NDS(6), SIG(NK), INTYPE, IMOD ) + CALL W3IORS ( 'READ', NDS(6), SIG(NK), INTYPE, IMOD) !/TIMINGS CALL PRINT_MY_TIME("After W3IORS") !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 3a' !/MEMCHECK call getMallocInfo(mallinfos) @@ -957,6 +957,20 @@ TOLAST(2,J) = ODAT(J0+5) END DO ! +! CKECKPOINT J=8, for second stream of restart files + J=8 + J0 = (J-1)*5 + IF(ODAT(J0+1) .NE. 0) THEN + TONEXT(1,J) = ODAT(J0+1) + TONEXT(2,J) = ODAT(J0+2) + DTOUT ( J) = REAL ( ODAT(J0+3) ) + TOLAST(1,J) = ODAT(J0+4) + TOLAST(2,J) = ODAT(J0+5) + FLOUT(8) = .TRUE. + ELSE + FLOUT(8) = .FALSE. + END IF +! ! 4.b Check if output available ! FLOUT(1) = .FALSE. diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 40cc2219b9..ddcbf0ddd7 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -61,7 +61,7 @@ !/ CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, INTYPE, IMOD ) + SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, INTYPE, IMOD, FLRSTRT ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -97,6 +97,10 @@ !/ (T. Campbell, NRL) !/ 05-Jun-2018 : Add PDLIB/TIMINGS/DEBUGIO ( version 6.04 ) !/ DEBUGINIT/MPI +!/ 19-Dec-2019 : Optional second stream of ( version 7.00 ) +!/ restart files +!/ (Roberto Padilla-Hernandez & J.H. Alves) + !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -149,6 +153,7 @@ ! 3 : for writing file. ! 4 : starting from calm. ! IMOD Int. I Optional grid number, defaults to 1. +! FLRSTRT LOGIC I OTIONAL TRUE: A second request for restart files ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -271,6 +276,7 @@ INTEGER, INTENT(OUT) :: INTYPE REAL, INTENT(INOUT) :: DUMFPI CHARACTER, INTENT(IN) :: INXOUT*(*) + LOGICAL, INTENT(IN),OPTIONAL :: FLRSTRT !/ !/ ------------------------------------------------------------------- / !/ Local parameters @@ -293,9 +299,11 @@ LOGICAL :: WRITE, IOSFLG CHARACTER(LEN=4) :: TYPE CHARACTER(LEN=10) :: VERTST - CHARACTER(LEN=21) :: FNAME +! CHARACTER(LEN=21) :: FNAME + CHARACTER(LEN=40) :: FNAME CHARACTER(LEN=26) :: IDTST CHARACTER(LEN=30) :: TNAME + CHARACTER(LEN=15) :: TIMETAG !/ !/ ------------------------------------------------------------------- / !/ @@ -373,13 +381,20 @@ I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) ! - IF ( IFILE.EQ.0 ) THEN - FNAME = 'restart.'//FILEXT(:I) - ELSE - FNAME = 'restartNNN.'//FILEXT(:I) - IF ( WRITE .AND. IAPROC.EQ.NAPRST ) & +!CHECKPOINT + IF ( PRESENT(FLRSTRT) .AND. FLRSTRT) THEN + WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) + FNAME=TIMETAG//'.restart.'//FILEXT(:I) + ELSE + IF ( IFILE.EQ.0 ) THEN + FNAME = 'restart.'//FILEXT(:I) + ELSE + FNAME = 'restartNNN.'//FILEXT(:I) + IF ( WRITE .AND. IAPROC.EQ.NAPRST ) & WRITE (FNAME(8:10),'(I3.3)') IFILE END IF + END IF + IFILE = IFILE + 1 ! !/T WRITE (NDST,9001) FNAME, LRECL diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 80441682b9..2d1e98c6e7 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -399,10 +399,10 @@ NAPOUT, NAPERR, NAPFLD, NAPPNT, & NAPTRK, NAPRST, NAPBPT, NAPPRT INTEGER :: NOSWLL - INTEGER :: TOFRST(2), TONEXT(2,7), TOLAST(2,7), & + INTEGER :: TOFRST(2), TONEXT(2,8), TOLAST(2,8), & TBPI0(2), TBPIN(2), NDS(13), OFILES(7) - REAL :: DTOUT(7) - LOGICAL :: FLOUT(7) + REAL :: DTOUT(8) + LOGICAL :: FLOUT(8) TYPE(OTYPE1) :: OUT1 TYPE(OTYPE2) :: OUT2 TYPE(OTYPE3) :: OUT3 diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index fe93640277..fa2bb0d109 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -2344,7 +2344,9 @@ DO J=1, NOTYPE !/DEBUGRUN WRITE(740+IAPROC,*) 'NOTYPE, J=', J !/DEBUGRUN FLUSH(740+IAPROC) + IF ( FLOUT(J) ) THEN +! !/DEBUGRUN WRITE(740+IAPROC,*) 'Matching FLOUT(J)' !/DEBUGRUN FLUSH(740+IAPROC) ! @@ -2410,7 +2412,8 @@ ! CALL W3IOTR ( NDS(11), NDS(12), VA, IMOD ) ELSE IF ( J .EQ. 4 ) THEN - CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD ) + CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD,& + FLOUT(8) ) ELSE IF ( J .EQ. 5 ) THEN IF ( IAPROC .EQ. NAPBPT ) THEN !/MPI IF (NRQBP2.NE.0) CALL MPI_WAITALL & @@ -2453,6 +2456,53 @@ END IF ! END DO + + +!/ CHECKPOINT +!/ IF THERE IS A SECOND STREAM OF RESTART FILES THEN J=8 AND FLOUT(8)=.TRUE. + J=8 + IF ( FLOUT(J) ) THEN +! +!/DEBUGRUN WRITE(740+IAPROC,*) 'Matching FLOUT(J)' +!/DEBUGRUN FLUSH(740+IAPROC) +! +! 4.d Perform output +! + TOUT(:) = TONEXT(:,J) + DTTST = DSEC21 ( TIME, TOUT ) + IF ( DTTST .EQ. 0. ) THEN + CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD, & + FLOUT(8) ) + CALL TICK21 ( TOUT, DTOUT(J) ) + TONEXT(:,J) = TOUT + TLST = TOLAST(:,J) + DTTST = DSEC21 ( TOUT , TLST ) + FLOUT(J) = DTTST.GE.0. + IF ( FLOUT(J) ) THEN + OUTID(2*J-1:2*J-1) = 'X' +!/OASIS IF ( (DTOUT(7).NE.0) .AND. & +!/OASIS (DSEC21(TIME,TIME00).EQ.0 .OR. & +!/OASIS DSEC21(TIME,TIMEEND).EQ.0) ) OUTID(13:13) = ' ' + ELSE + OUTID(2*J-1:2*J-1) = 'L' + END IF + END IF +! +! 4.e Update next output time +! + IF ( FLOUT(J) ) THEN + IF ( TOFRST(1).EQ.-1 ) THEN + TOFRST = TOUT + ELSE + DTTST = DSEC21 ( TOUT , TOFRST ) + IF ( DTTST.GT.0.) THEN + TOFRST = TOUT + END IF + END IF + END IF + END IF +! END OF CHECKPOINT +! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE AFTER TIME LOOP 3' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 5073769362..6cbaa5c2c6 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -436,11 +436,11 @@ CHARACTER(LEN=13) :: IDFLDS(-7:7) CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: TNAME CHARACTER(LEN=80) :: LINE CHARACTER(LEN=80) :: LINEIN - CHARACTER(LEN=8) :: WORDS(6) + CHARACTER(LEN=8) :: WORDS(6)=' ' TYPE OT2TPE INTEGER :: NPTS @@ -469,7 +469,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Separated wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ ! DATA IDSTR / 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', 'DT2' / ! @@ -649,7 +650,7 @@ ! ! 2.c Set up I/O for individual models (initial) ! - ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(35,0:NRGRD), & + ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(40,0:NRGRD), & FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & @@ -1116,9 +1117,11 @@ ! 5.b Process standard line ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) + + WRITE(*,*) 'FLOUT(',J,'):', FLOUT(J) IF(J .LE. 2) THEN READ (MDSI,'(A)') LINEIN - WRITE(*,*) 'LINEIN: ',LINEIN +! WRITE(*,*) 'LINEIN: ',LINEIN READ(LINEIN,*,iostat=ierr) WORDS ! IF(J .LE. 1) THEN @@ -1137,15 +1140,38 @@ IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN OUTFF(J,1)=0 - print*,' Number of data: ', 5 +! print*,' Number of data: ', 5 ELSE READ(WORDS( 6 ), * ) OUTFF(J,1) ! print*,' Number of data: ', 6 END IF -! WRITE(*,*) 'WMINITMD OUTFF(J,1)= ', OUTFF(J,1) +! WRITE(*,*) 'WMINITMD OUTFF(J,1)= ', OUTFF(J,1) +!!!!!!! ELSE +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +!XXX CHECKPOINT + ELSE IF(J .EQ. 4) THEN + READ (MDSI,'(A)') LINEIN +! WRITE(*,*) 'LINEIN: ',LINEIN + READ(LINEIN,*,iostat=ierr) WORDS +! + READ(WORDS( 1 ), * ) ODAT(16,1) + READ(WORDS( 2 ), * ) ODAT(17,1) + READ(WORDS( 3 ), * ) ODAT(18,1) + READ(WORDS( 4 ), * ) ODAT(19,1) + READ(WORDS( 5 ), * ) ODAT(20,1) + IF (WORDS(6) .EQ. 'T') THEN + READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(8-1)+1,5*8) + + WRITE(*,*) 'FLOUT(8):', FLOUT(8) +! WRITE(*,*)(ODAT(I,1),I=5*(8-1)+1,5*8) + ELSE +! FLOUT(8)=.FALSE. + END IF +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ELSE READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) +!xxx WRITE(*,*)(ODAT(I,1),I=5*(J-1)+1,5*J) OUTFF(J,1) = 0 END IF ! @@ -1183,6 +1209,7 @@ DTME21(I:I) = ' ' END DO WRITE (MDSS,954) DTME21(1:19) + END IF IF ( J .EQ. 1 ) THEN ! @@ -1318,6 +1345,40 @@ ! ... End of loop in 5.a ! END DO +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +! Checkpoint + IF (ODAT(38,1) .NE. 0) THEN + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,951) 8, IDOTYP(8) + TTIME(1) = ODAT(5*(8-1)+1,1) + TTIME(2) = ODAT(5*(8-1)+2,1) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,952) DTME21 + TTIME(1) = ODAT(5*(8-1)+4,1) + TTIME(2) = ODAT(5*(8-1)+5,1) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,953) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(8-1)+3,1) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(8-1)+1,1) .NE. ODAT(5*(8-1)+4,1) .OR. & + ODAT(5*(8-1)+2,1) .NE. ODAT(5*(8-1)+5,1) ) .AND. & + MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN + DO I=1, 18 + IF ( DTME21(I:I).NE.'0' .AND. & + DTME21(I:I).NE.'/' .AND. & + DTME21(I:I).NE.' ' .AND. & + DTME21(I:I).NE.':' ) EXIT + DTME21(I:I) = ' ' + END DO + WRITE (MDSS,954) DTME21(1:19) + END IF + END IF +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! ! 5.i Set all grids to unified output ! @@ -2055,6 +2116,7 @@ !/MPRF WRITE (MDSP,990) PRFT0, PRFTN, get_memory(), 'START Sec. 8.a' !/MPRF PRFT0 = PRFTN ! + WRITE(*,*) ' WMINIT NRGRD: ', NRGRD DO I=1, NRGRD J = LEN_TRIM(MNAMES(I)) DO NMPSC2=1, NMPROC @@ -2301,6 +2363,20 @@ ENDIF END IF END DO +! +!XXX CHECKPOINT + J=8 + WRITE(*,*) ' WMINIT J, FLOUT(J): ', J, FLOUT(J) + IF ( FLOUT(J) ) THEN + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,J) + ELSE + DTTST = DSEC21 ( TOUTP(:,I), TONEXT(:,J) ) + IF ( DTTST .LT. 0. ) TOUTP(:,I) = TONEXT(:,J) + ENDIF + END IF +!XXXXXXXXXXXXXXXXX + ! GRSTAT(I) = 0 TSYNC(:,I) = TIME(:) @@ -3464,7 +3540,7 @@ !/MPRF CHARACTER(LEN=18) :: PFILE CHARACTER(LEN=13) :: IDFLDS(-7:7) CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: TNAME, LINE CHARACTER(LEN=1024) :: FLDOUT ! @@ -3489,7 +3565,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Separated wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ ! DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', & 'MDN', 'MTH', 'MVS', 'LEV', 'CUR', & @@ -3686,7 +3763,7 @@ ! ! 2.c Set up I/O for individual models (initial) ! - ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(35,0:NRGRD), & + ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(40,0:NRGRD), & FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & From 0471b83f1e2b75304acfd500661df8b3407135bd Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Fri, 20 Dec 2019 18:15:42 -0500 Subject: [PATCH 26/49] Checkpoint in Shell with traditional input is working --- model/ftn/wminitmd.ftn | 1 - model/ftn/ww3_shel.ftn | 75 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 6cbaa5c2c6..9035faff1a 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -2116,7 +2116,6 @@ !/MPRF WRITE (MDSP,990) PRFT0, PRFTN, get_memory(), 'START Sec. 8.a' !/MPRF PRFT0 = PRFTN ! - WRITE(*,*) ' WMINIT NRGRD: ', NRGRD DO I=1, NRGRD J = LEN_TRIM(MNAMES(I)) DO NMPSC2=1, NMPROC diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 9bdd8ed482..0cf1a49ebd 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -295,7 +295,7 @@ INTEGER :: NDSF(-7:7), NDS(13), NTRACE(2), NDT(5:7), & TIME0(2), TIMEN(2), TTIME(2), TTT(2), & NH(-7:8), THO(2,-7:8,NHMAX), RCLD(5:7), & - NODATA(5:7), ODAT(35), IPRT(6) = 0, & + NODATA(5:7), ODAT(40), IPRT(6) = 0, & STARTDATE(8), STOPDATE(8), IHH(-7:8) ! !/OASIS INTEGER :: OASISED @@ -321,7 +321,7 @@ CHARACTER(LEN=13) :: IDFLDS(-7:8) CHARACTER(LEN=20) :: STRNG CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: LINE CHARACTER(LEN=256) :: TMPLINE, TEST CHARACTER(LEN=1024) :: FLDIN @@ -358,7 +358,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Partitioned wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', 'MDN', 'MTH', & 'MVS', 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', & 'DT2', 'MOV' / @@ -1194,6 +1195,25 @@ !/DEBUGINIT write(740+IAPROC,*), 'J=', J, '/ NOTYPE=', NOTYPE CALL NEXTLN ( COMSTR , NDSI , NDSEN ) !/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 7' +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +!XXX CHECKPOINT + IF(J .EQ. 4) THEN + ODAT(38)=0 + READ (NDSI,'(A)') LINEIN + WRITE(*,*) 'LINEIN: ',LINEIN + READ(LINEIN,*,iostat=ierr) WORDS + READ(WORDS( 1 ), * ) ODAT(16) + READ(WORDS( 2 ), * ) ODAT(17) + READ(WORDS( 3 ), * ) ODAT(18) + READ(WORDS( 4 ), * ) ODAT(19) + READ(WORDS( 5 ), * ) ODAT(20) + IF (WORDS(6) .EQ. 'T') THEN + READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(8-1)+1,5*8) + WRITE(*,*)(ODAT(I),I=5*(8-1)+1,5*8) + END IF + ELSE +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + ! !INLINE NEW VARIABLE TO READ IF PRESENT OFILES(J), IF NOT ==0 ! READ (NDSI,*) (ODAT(I),I=5*(J-1)+1,5*J) @@ -1379,6 +1399,7 @@ END IF ! J END IF ! ODAT + END IF ! IF J=4 END DO ! J ! force minimal allocation to avoid memory seg fault @@ -1633,6 +1654,37 @@ END IF END DO +!XXXXXXXXXXXX +!XXX CHECKPOINT + J=8 + IF (ODAT(38) .NE. 0) THEN + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,941) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1) + TTIME(2) = ODAT(5*(J-1)+2) + CALL STME21 ( TTIME , DTME21 ) + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,942) DTME21 + TTIME(1) = ODAT(5*(J-1)+4) + TTIME(2) = ODAT(5*(J-1)+5) + CALL STME21 ( TTIME , DTME21 ) + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,943) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1) .NE. ODAT(5*(J-1)+4) .OR. & + ODAT(5*(J-1)+2) .NE. ODAT(5*(J-1)+5) ) .AND. & + IAPROC .EQ. NAPOUT ) THEN + IF ( DTME21(9:9) .NE. '0' ) THEN + WRITE (NDSO,1944) DTME21( 9:19) + ELSE IF ( DTME21(10:10) .NE. '0' ) THEN + WRITE (NDSO,2944) DTME21(10:19) + ELSE + WRITE (NDSO,3944) DTME21(12:19) + END IF + END IF + END IF +!XXXXXXXXXXXX ! 2.5 Output types @@ -1661,7 +1713,22 @@ CONTINUE END IF END DO - +!XXXXXXXXXXXXXXX +!XXX CHECKPOINT + J = 8 + DTTST = DSEC21 ( TIME0 , ODAT(5*(J-1)+4:5*(J-1)+5) ) + IF ( DTTST .LT. 0 ) THEN + ODAT(5*(J-1)+3) = 0 + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) TRIM(IDOTYP(J)) + CONTINUE + END IF + DTTST = DSEC21 ( ODAT(5*(J-1)+1:5*(J-1)+2), TIMEN ) + IF ( DTTST .LT. 0 ) THEN + ODAT(5*(J-1)+3) = 0 + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) TRIM(IDOTYP(J)) + CONTINUE + END IF +!XXXXXXXXXXXXXXX !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL SECTION 5' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) From 1a282f8c319a529d2d78877986921e505b8d31c5 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Sun, 22 Dec 2019 17:36:14 +0000 Subject: [PATCH 27/49] Changed wmesmfmd to update the WW3 start time stime to the ESMF currTime. This allows starting the coupled system at a time offset for data assimilation different to startTime. --- model/ftn/wmesmfmd.ftn | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index a72c93509f..57eb056746 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -44,6 +44,7 @@ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | !/ | T. J. Campbell, NRL | +!/ | J. Meixner, NCEP | !/ | A. J. van der Westhuysen | !/ | FORTRAN 90 | !/ | Last update : 09-Aug-2017 | @@ -750,7 +751,10 @@ ! ! 1.e Set internal start/stop time from external start/stop time ! - call ESMF_ClockGet(extClock, startTime=ttmp, rc=rc) + +! call ESMF_ClockGet(extClock, startTime=ttmp, rc=rc) +! if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_ClockGet(extClock, currTime=ttmp, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return call ESMF_TimeGet(ttmp, yy=yy,mm=mm,dd=dd,h=h,m=m,s=s, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return @@ -1894,7 +1898,7 @@ type(ESMF_Clock) :: clock type(ESMF_Time) :: currTime, stopTime real :: delt - logical :: lerr +! logical :: lerr ! ! -------------------------------------------------------------------- / ! Prep @@ -1933,25 +1937,26 @@ if (ESMF_LogFoundError(rc, PASSTHRU)) return call ESMF_TimeGet(currTime, yy=yy,mm=mm,dd=dd,h=h,m=m,s=s, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return - lerr=.false. +! lerr=.false. do imod = 1,nrgrd tcur(1) = 10000*yy + 100*mm + dd tcur(2) = 10000*h + 100*m + s call w3setw ( imod, mdse, mdst ) delt = dsec21 ( time, tcur ) if ( abs(delt).gt.0 ) then - lerr=.true. +! lerr=.true. write(msg,'(a,i2,a,2(a,i8,a,i8,a))') & - 'Wave model grid ',imod,': ', & - 'Internal time (',time(1),'.',time(2),') /= ', & - 'Component time (',tcur(1),'.',tcur(2),')' - call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_ERROR) + 'Wave model grid ',imod,': ', & + 'Internal time (',time(1),'.',time(2),') /= ', & + 'Component time (',tcur(1),'.',tcur(2),')' +! call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_ERROR) + call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_WARNING) endif enddo - if (lerr) then - rc = ESMF_FAILURE - return - endif +! if (lerr) then +! rc = ESMF_FAILURE +! return +! endif ! ! 1.d Set end time of this advance ! From de7b983a77d0f2de58d5de86ba2f4dc3da2a19e8 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Mon, 23 Dec 2019 11:35:40 -0500 Subject: [PATCH 28/49] nml for checkout for multi is ready --- model/ftn/w3nmlmultimd.ftn | 12 +++- model/ftn/wminitmd.ftn | 138 +++++++++++++++++++++++++++++-------- 2 files changed, 119 insertions(+), 31 deletions(-) diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index 67f7cfbd8f..91400e4018 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -160,6 +160,7 @@ TYPE(NML_OUTPUT_TIME_T) :: POINT TYPE(NML_OUTPUT_TIME_T) :: TRACK TYPE(NML_OUTPUT_TIME_T) :: RESTART + TYPE(NML_OUTPUT_TIME_T) :: RESTART2 TYPE(NML_OUTPUT_TIME_T) :: BOUNDARY TYPE(NML_OUTPUT_TIME_T) :: PARTITION !/COU TYPE(NML_OUTPUT_TIME_T) :: COUPLING @@ -1152,6 +1153,9 @@ IDATE(I)%RESTART%START = '19680606 000000' IDATE(I)%RESTART%STRIDE = '0' IDATE(I)%RESTART%STOP = '19680607 000000' + IDATE(I)%RESTART2%START = '19680606 000000' + IDATE(I)%RESTART2%STRIDE = '0' + IDATE(I)%RESTART2%STOP = '19680607 000000' IDATE(I)%BOUNDARY%START = '19680606 000000' IDATE(I)%BOUNDARY%STRIDE = '0' IDATE(I)%BOUNDARY%STOP = '19680607 000000' @@ -1175,7 +1179,10 @@ ALLDATE%TRACK%STOP = '19680607 000000' ALLDATE%RESTART%START = '19680606 000000' ALLDATE%RESTART%STRIDE = '0' - ALLDATE%RESTART%STOP = '19680607 000000' + ALLDATE%RESTART%STOP = '19680607 000000' + ALLDATE%RESTART2%START = '19680606 000000' + ALLDATE%RESTART2%STRIDE = '0' + ALLDATE%RESTART2%STOP = '19680607 000000' ALLDATE%BOUNDARY%START = '19680606 000000' ALLDATE%BOUNDARY%STRIDE = '0' ALLDATE%BOUNDARY%STOP = '19680607 000000' @@ -1880,6 +1887,9 @@ WRITE (NDSN,10) TRIM(MSG),'RESTART % START = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%START) WRITE (NDSN,10) TRIM(MSG),'RESTART % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%STRIDE) WRITE (NDSN,10) TRIM(MSG),'RESTART % STOP = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%STOP) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % START = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%START) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STOP = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%STOP) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % START = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%START) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%STRIDE) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STOP = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%STOP) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 9035faff1a..769367ca62 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -1347,36 +1347,37 @@ END DO !xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! Checkpoint - IF (ODAT(38,1) .NE. 0) THEN - IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & - WRITE (MDSS,951) 8, IDOTYP(8) - TTIME(1) = ODAT(5*(8-1)+1,1) - TTIME(2) = ODAT(5*(8-1)+2,1) - CALL STME21 ( TTIME , DTME21 ) - IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & - WRITE (MDSS,952) DTME21 - TTIME(1) = ODAT(5*(8-1)+4,1) - TTIME(2) = ODAT(5*(8-1)+5,1) - CALL STME21 ( TTIME , DTME21 ) - IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & - WRITE (MDSS,953) DTME21 - TTIME(1) = 0 - TTIME(2) = 0 - DTTST = REAL ( ODAT(5*(8-1)+3,1) ) - CALL TICK21 ( TTIME , DTTST ) - CALL STME21 ( TTIME , DTME21 ) - IF ( ( ODAT(5*(8-1)+1,1) .NE. ODAT(5*(8-1)+4,1) .OR. & - ODAT(5*(8-1)+2,1) .NE. ODAT(5*(8-1)+5,1) ) .AND. & - MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN - DO I=1, 18 - IF ( DTME21(I:I).NE.'0' .AND. & - DTME21(I:I).NE.'/' .AND. & - DTME21(I:I).NE.' ' .AND. & - DTME21(I:I).NE.':' ) EXIT - DTME21(I:I) = ' ' - END DO - WRITE (MDSS,954) DTME21(1:19) - END IF + J=8 + IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,951) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1,1) + TTIME(2) = ODAT(5*(J-1)+2,1) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,952) DTME21 + TTIME(1) = ODAT(5*(J-1)+4,1) + TTIME(2) = ODAT(5*(J-1)+5,1) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,953) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3,1) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1,1) .NE. ODAT(5*(J-1)+4,1) .OR. & + ODAT(5*(J-1)+2,1) .NE. ODAT(5*(J-1)+5,1) ) .AND. & + MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN + DO I=1, 18 + IF ( DTME21(I:I).NE.'0' .AND. & + DTME21(I:I).NE.'/' .AND. & + DTME21(I:I).NE.' ' .AND. & + DTME21(I:I).NE.':' ) EXIT + DTME21(I:I) = ' ' + END DO + WRITE (MDSS,954) DTME21(1:19) + END IF END IF !xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! @@ -4273,6 +4274,9 @@ READ(NML_OUTPUT_DATE(I)%RESTART%START, *) ODAT(16,I), ODAT(17,I) READ(NML_OUTPUT_DATE(I)%RESTART%STRIDE, *) ODAT(18,I) READ(NML_OUTPUT_DATE(I)%RESTART%STOP, *) ODAT(19,I), ODAT(20,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%START, *) ODAT(36,I), ODAT(37,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%STRIDE, *) ODAT(38,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%STOP, *) ODAT(39,I), ODAT(40,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%START, *) ODAT(21,I), ODAT(22,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%STRIDE, *) ODAT(23,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%STOP, *) ODAT(24,I), ODAT(25,I) @@ -4292,6 +4296,7 @@ ODAT(23,I) = MAX ( 0 , ODAT(23,I) ) ODAT(28,I) = MAX ( 0 , ODAT(28,I) ) !!/COU ODAT(33,I) = MAX ( 0 , ODAT(33,I) ) + ODAT(38,I) = MAX ( 0 , ODAT(38,I) ) ! define the time of the output point grid (index 0) as the & ! time of the first grid which should be the larger one by convention @@ -4306,6 +4311,8 @@ DO J=1, NOTYPE ! ! 5.b Process standard line +!XXx + WRITE(*,*) '->J, ODAT(5*(J-1)+3,I)',J, ODAT(5*(J-1)+3,I) ! OUTPTS(I)%OFILES(J)=OUTFF(J,I) IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN @@ -4516,6 +4523,49 @@ ! ... End of loop J on NOTYPE in 5.a ! END DO +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +! Checkpoint + J=8 + WRITE(*,*) '1FLOUT(8)=', FLOUT(8) + WRITE(*,*) '1 ODAT(38,I)=', ODAT(38,I) + !OUTPTS(I)%FLOUT(8)=.FALSE. + IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN + !OUTPTS(I)%FLOUT(8)=.TRUE. + WRITE(*,*) 'ODAT(38) .NE. 0 !!' + WRITE(*,*) 'FLOUT(8)=', FLOUT(8) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,951) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1,I) + TTIME(2) = ODAT(5*(J-1)+2,I) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,952) DTME21 + TTIME(1) = ODAT(5*(J-1)+4,I) + TTIME(2) = ODAT(5*(J-1)+5,I) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,953) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3,I) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1,I) .NE. ODAT(5*(J-1)+4,I) .OR. & + ODAT(5*(J-1)+2,I) .NE. ODAT(5*(J-1)+5,I) ) .AND. & + MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN + DO II=1, 18 + IF ( DTME21(II:II).NE.'0' .AND. & + DTME21(II:II).NE.'/' .AND. & + DTME21(II:II).NE.' ' .AND. & + DTME21(II:II).NE.':' ) EXIT + DTME21(II:II) = ' ' + END DO + WRITE (MDSS,954) DTME21(1:19) + END IF + ELSE + !OUTPTS(I)%FLOUT(8) = .FALSE. + END IF +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! ! ... End of loop I on NRGRD in 5.a ! @@ -4632,6 +4682,10 @@ IF ( ODAT( 3,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( ODAT(13,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( ODAT(28,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 +!xxx +! Checkpoint + IF ( ODAT(38,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 +!xxx IF ( ODAT( 8,I) .GT. 0 .OR. ODAT(18,I) .GT. 0 .OR. & ODAT(23,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( IOSTYP .EQ. 2 ) NDPOUT(I) = MIN ( 1 , NDPOUT(I) ) @@ -5187,6 +5241,7 @@ ! 8.a.3 Status indicator and model times ! DO J=1, NOTYPE + WRITE(*,*) ' WMININML FLOUT(',J,')', FLOUT(J) IF ( FLOUT(J) ) THEN IF ( TOUTP(1,I) .EQ. -1 ) THEN TOUTP(:,I) = TONEXT(:,J) @@ -5196,6 +5251,29 @@ ENDIF END IF END DO +!xxxxxxxxxxxxxxxxxxxxxxx +!x Checkpoint + J=8 + WRITE(*,*) '2FLOUT(8)=', FLOUT(8) + WRITE(*,*) '2 ODAT(38,I)=', ODAT(38,I) + OUTPTS(I)%FLOUT(8)=.FALSE. + IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN + OUTPTS(I)%FLOUT(8)=.TRUE. + ELSE + OUTPTS(I)%FLOUT(8)=.FALSE. + ENDIF + WRITE(*,*) '3FLOUT(8)=', FLOUT(8) + + IF ( FLOUT(J) ) THEN + WRITE(*,*) ' WMININML FLOUT(',J,')', FLOUT(J) + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,J) + ELSE + DTTST = DSEC21 ( TOUTP(:,I), TONEXT(:,J) ) + IF ( DTTST .LT. 0. ) TOUTP(:,I) = TONEXT(:,J) + ENDIF + END IF +!xxxxxxxxxxxxxxxxxxxxxxx ! GRSTAT(I) = 0 TSYNC(:,I) = TIME(:) From d1a2a127c49981264a025f2bfa2c61d33efe4f14 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Mon, 23 Dec 2019 12:37:06 -0500 Subject: [PATCH 29/49] Checkoutpoint for WW3 is ready --- model/ftn/w3nmlshelmd.ftn | 7 +++++++ model/ftn/ww3_shel.ftn | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/model/ftn/w3nmlshelmd.ftn b/model/ftn/w3nmlshelmd.ftn index 2dcb0aead1..1d048b555b 100644 --- a/model/ftn/w3nmlshelmd.ftn +++ b/model/ftn/w3nmlshelmd.ftn @@ -111,6 +111,7 @@ TYPE(NML_OUTPUT_TIME_T) :: POINT TYPE(NML_OUTPUT_TIME_T) :: TRACK TYPE(NML_OUTPUT_TIME_T) :: RESTART + TYPE(NML_OUTPUT_TIME_T) :: RESTART2 TYPE(NML_OUTPUT_TIME_T) :: BOUNDARY TYPE(NML_OUTPUT_TIME_T) :: PARTITION TYPE(NML_OUTPUT_TIME_T) :: COUPLING @@ -745,6 +746,9 @@ DATE%RESTART%START = '19680606 000000' DATE%RESTART%STRIDE = '0' DATE%RESTART%STOP = '19680607 000000' + DATE%RESTART2%START = '19680606 000000' + DATE%RESTART2%STRIDE = '0' + DATE%RESTART2%STOP = '19680607 000000' DATE%BOUNDARY%START = '19680606 000000' DATE%BOUNDARY%STRIDE = '0' DATE%BOUNDARY%STOP = '19680607 000000' @@ -1301,6 +1305,9 @@ WRITE (NDSN,10) TRIM(MSG),'RESTART % START = ', TRIM(NML_OUTPUT_DATE%RESTART%START) WRITE (NDSN,10) TRIM(MSG),'RESTART % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART%STRIDE) WRITE (NDSN,10) TRIM(MSG),'RESTART % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART%STOP) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % START = ', TRIM(NML_OUTPUT_DATE%RESTART2%START) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART2%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART2%STOP) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % START = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%START) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STRIDE = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STRIDE) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STOP = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STOP) diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 0cf1a49ebd..895184f1df 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -764,6 +764,9 @@ READ(NML_OUTPUT_DATE%RESTART%START, *) ODAT(16), ODAT(17) READ(NML_OUTPUT_DATE%RESTART%STRIDE, *) ODAT(18) READ(NML_OUTPUT_DATE%RESTART%STOP, *) ODAT(19), ODAT(20) + READ(NML_OUTPUT_DATE%RESTART2%START, *) ODAT(36), ODAT(37) + READ(NML_OUTPUT_DATE%RESTART2%STRIDE, *) ODAT(38) + READ(NML_OUTPUT_DATE%RESTART2%STOP, *) ODAT(39), ODAT(40) READ(NML_OUTPUT_DATE%BOUNDARY%START, *) ODAT(21), ODAT(22) READ(NML_OUTPUT_DATE%BOUNDARY%STRIDE, *) ODAT(23) READ(NML_OUTPUT_DATE%BOUNDARY%STOP, *) ODAT(24), ODAT(25) @@ -782,7 +785,7 @@ ODAT(23) = MAX ( 0 , ODAT(23) ) ODAT(28) = MAX ( 0 , ODAT(28) ) ODAT(33) = MAX ( 0 , ODAT(33) ) - + ODAT(38) = MAX ( 0 , ODAT(38) ) ! 2.5 Output types NPTS = 0 From 106449b5a40e113addbe1a5fd6112f915e8759a1 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Mon, 23 Dec 2019 14:25:24 -0500 Subject: [PATCH 30/49] Checkoutpoint for WW3 clean and ready --- model/ftn/w3initmd.ftn | 51 ++++++++++++++++++++++++++++++++++++++++++ model/ftn/wminitmd.ftn | 43 ++++++++--------------------------- model/ftn/wmwavemd.ftn | 40 +++++++++++++++++++++++++++++++++ model/ftn/ww3_shel.ftn | 14 +++++------- 4 files changed, 106 insertions(+), 42 deletions(-) diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 6c1e52d773..481b196b32 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -1077,6 +1077,57 @@ ! END DO ! +! FOR CHECKPOINT (J=8): Second stream of restart files +! + J=8 +! +! ... check time step +! + DTOUT(J) = MAX ( 0. , DTOUT(J) ) + FLOUT(J) = FLOUT(J) .AND. ( DTOUT(J) .GT. 0.5 ) +! +! ... get first time +! + IF ( FLOUT(J) ) THEN + TOUT = TONEXT(:,J) + TLST = TOLAST(:,J) +! + DO + DTTST = DSEC21 ( TIME , TOUT ) + IF ( ( J.NE.4 .AND. DTTST.LT.0. ) .OR. & + ( J.EQ.4 .AND. DTTST.LE.0. ) ) THEN + CALL TICK21 ( TOUT, DTOUT(J) ) + ELSE + EXIT + END IF + END DO +! +! ... reset first time +! + TONEXT(:,J) = TOUT +! +! ... check last time +! + DTTST = DSEC21 ( TOUT , TLST ) + IF ( DTTST.LT.0.) FLOUT(J) = .FALSE. +! +! ... check overall first time +! + IF ( FLOUT(J) ) THEN + IF ( TOFRST(1).EQ.-1 ) THEN + TOFRST = TOUT + ELSE + DTTST = DSEC21 ( TOUT , TOFRST ) + IF ( DTTST.GT.0.) THEN + TOFRST = TOUT + END IF + END IF + END IF +! + END IF +! END J=8 +! +! !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 5' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 769367ca62..38ccc5d428 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -1118,10 +1118,8 @@ ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) - WRITE(*,*) 'FLOUT(',J,'):', FLOUT(J) IF(J .LE. 2) THEN READ (MDSI,'(A)') LINEIN -! WRITE(*,*) 'LINEIN: ',LINEIN READ(LINEIN,*,iostat=ierr) WORDS ! IF(J .LE. 1) THEN @@ -1145,13 +1143,11 @@ READ(WORDS( 6 ), * ) OUTFF(J,1) ! print*,' Number of data: ', 6 END IF -! WRITE(*,*) 'WMINITMD OUTFF(J,1)= ', OUTFF(J,1) !!!!!!! ELSE -!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -!XXX CHECKPOINT +! +! CHECKPOINT ELSE IF(J .EQ. 4) THEN READ (MDSI,'(A)') LINEIN -! WRITE(*,*) 'LINEIN: ',LINEIN READ(LINEIN,*,iostat=ierr) WORDS ! READ(WORDS( 1 ), * ) ODAT(16,1) @@ -1161,17 +1157,10 @@ READ(WORDS( 5 ), * ) ODAT(20,1) IF (WORDS(6) .EQ. 'T') THEN READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(8-1)+1,5*8) - - WRITE(*,*) 'FLOUT(8):', FLOUT(8) - -! WRITE(*,*)(ODAT(I,1),I=5*(8-1)+1,5*8) - ELSE -! FLOUT(8)=.FALSE. END IF -!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +! ELSE READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) -!xxx WRITE(*,*)(ODAT(I,1),I=5*(J-1)+1,5*J) OUTFF(J,1) = 0 END IF ! @@ -1463,7 +1452,6 @@ CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) IF(J .LE. 2) THEN READ (MDSI,'(A)') LINEIN - WRITE(*,*) 'LINEIN ', LINEIN READ(LINEIN,*,iostat=ierr) WORDS ! IF(J .LE. 1) THEN @@ -2364,9 +2352,8 @@ END IF END DO ! -!XXX CHECKPOINT +! CHECKPOINT J=8 - WRITE(*,*) ' WMINIT J, FLOUT(J): ', J, FLOUT(J) IF ( FLOUT(J) ) THEN IF ( TOUTP(1,I) .EQ. -1 ) THEN TOUTP(:,I) = TONEXT(:,J) @@ -2375,8 +2362,7 @@ IF ( DTTST .LT. 0. ) TOUTP(:,I) = TONEXT(:,J) ENDIF END IF -!XXXXXXXXXXXXXXXXX - +! ! GRSTAT(I) = 0 TSYNC(:,I) = TIME(:) @@ -4311,8 +4297,6 @@ DO J=1, NOTYPE ! ! 5.b Process standard line -!XXx - WRITE(*,*) '->J, ODAT(5*(J-1)+3,I)',J, ODAT(5*(J-1)+3,I) ! OUTPTS(I)%OFILES(J)=OUTFF(J,I) IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN @@ -4526,13 +4510,9 @@ !xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! Checkpoint J=8 - WRITE(*,*) '1FLOUT(8)=', FLOUT(8) - WRITE(*,*) '1 ODAT(38,I)=', ODAT(38,I) !OUTPTS(I)%FLOUT(8)=.FALSE. IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN !OUTPTS(I)%FLOUT(8)=.TRUE. - WRITE(*,*) 'ODAT(38) .NE. 0 !!' - WRITE(*,*) 'FLOUT(8)=', FLOUT(8) IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & WRITE (MDSS,951) J, IDOTYP(J) TTIME(1) = ODAT(5*(J-1)+1,I) @@ -4562,7 +4542,7 @@ END DO WRITE (MDSS,954) DTME21(1:19) END IF - ELSE + !ELSE !OUTPTS(I)%FLOUT(8) = .FALSE. END IF !xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -5241,7 +5221,6 @@ ! 8.a.3 Status indicator and model times ! DO J=1, NOTYPE - WRITE(*,*) ' WMININML FLOUT(',J,')', FLOUT(J) IF ( FLOUT(J) ) THEN IF ( TOUTP(1,I) .EQ. -1 ) THEN TOUTP(:,I) = TONEXT(:,J) @@ -5251,21 +5230,17 @@ ENDIF END IF END DO -!xxxxxxxxxxxxxxxxxxxxxxx -!x Checkpoint +! +! Checkpoint J=8 - WRITE(*,*) '2FLOUT(8)=', FLOUT(8) - WRITE(*,*) '2 ODAT(38,I)=', ODAT(38,I) OUTPTS(I)%FLOUT(8)=.FALSE. IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN OUTPTS(I)%FLOUT(8)=.TRUE. ELSE OUTPTS(I)%FLOUT(8)=.FALSE. ENDIF - WRITE(*,*) '3FLOUT(8)=', FLOUT(8) IF ( FLOUT(J) ) THEN - WRITE(*,*) ' WMININML FLOUT(',J,')', FLOUT(J) IF ( TOUTP(1,I) .EQ. -1 ) THEN TOUTP(:,I) = TONEXT(:,J) ELSE @@ -5273,7 +5248,7 @@ IF ( DTTST .LT. 0. ) TOUTP(:,I) = TONEXT(:,J) ENDIF END IF -!xxxxxxxxxxxxxxxxxxxxxxx +! ! GRSTAT(I) = 0 TSYNC(:,I) = TIME(:) diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index df4fcc28e6..3a5d5d8e42 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -1047,6 +1047,16 @@ IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) ENDIF END DO +! CHECKPOINT + JO=8 + IF ( .NOT.FLOUT(JO) ) CYCLE + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,JO) + ELSE + DTTST = DSEC21 ( TOUTP(:,I) , TONEXT(:,JO) ) + IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) + ENDIF +! END CHECKPOINT ! !/T WRITE (MDST,9091) TOUTP(:,I) ! @@ -1124,6 +1134,36 @@ ! !/MPI END DO ! +! Checkpoint +! +!/MPI JO=8 +! +!/MPI IF ( FLOUT(JO) ) THEN +!/MPI DO +!/MPI DTTST = DSEC21 ( TIME, TONEXT(:,JO) ) +!/MPI IF ( DTTST .LE. 0. ) THEN +!/MPI CALL TICK21 ( TONEXT(:,JO), DTOUT(JO) ) +!/MPI DTTST = DSEC21 ( TONEXT(:,JO), TOLAST(:,JO) ) +!/MPI IF ( DTTST .LT. 0. ) THEN +!/MPI FLOUT(JO) = .FALSE. +!/MPI EXIT +!/MPI END IF +!/MPI ELSE +!/MPI EXIT +!/MPI END IF +!/MPI END DO +!/MPI END IF +! +!/MPI IF ( .NOT.FLOUT(JO) ) CYCLE +!/MPI IF ( TOUTP(1,I) .EQ. -1 ) THEN +!/MPI TOUTP(:,I) = TONEXT(:,JO) +!/MPI ELSE +!/MPI DTTST = DSEC21 ( TOUTP(:,I) , TONEXT(:,JO) ) +!/MPI IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) +!/MPI ENDIF +! + +! End Checkpoint !/MPIT WRITE (MDST,9991) TOUTP(:,I) !/MPI END IF ! diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 895184f1df..7ec769d068 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -1656,9 +1656,8 @@ END IF END IF END DO - -!XXXXXXXXXXXX -!XXX CHECKPOINT +! +! CHECKPOINT J=8 IF (ODAT(38) .NE. 0) THEN IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,941) J, IDOTYP(J) @@ -1687,8 +1686,7 @@ END IF END IF END IF -!XXXXXXXXXXXX - +! ! 2.5 Output types !/T WRITE (NDST,9040) ODAT @@ -1716,8 +1714,8 @@ CONTINUE END IF END DO -!XXXXXXXXXXXXXXX -!XXX CHECKPOINT +! +! CHECKPOINT J = 8 DTTST = DSEC21 ( TIME0 , ODAT(5*(J-1)+4:5*(J-1)+5) ) IF ( DTTST .LT. 0 ) THEN @@ -1731,7 +1729,7 @@ IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) TRIM(IDOTYP(J)) CONTINUE END IF -!XXXXXXXXXXXXXXX +! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL SECTION 5' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) From 8382865e648ec06c73aaf9133d27c11f88e8d706 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Thu, 2 Jan 2020 16:14:37 -0500 Subject: [PATCH 31/49] adding in the regtest mww3_test_06 the set _r for checkpoint --- regtests/mww3_test_06/input/grdset_d_r | 4 + .../input/ww3_multi_grdset_d_r.inp | 146 +++++++++++ .../input/ww3_multi_grdset_d_r.nml | 242 ++++++++++++++++++ 3 files changed, 392 insertions(+) create mode 100644 regtests/mww3_test_06/input/grdset_d_r create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml diff --git a/regtests/mww3_test_06/input/grdset_d_r b/regtests/mww3_test_06/input/grdset_d_r new file mode 100644 index 0000000000..aa51e73294 --- /dev/null +++ b/regtests/mww3_test_06/input/grdset_d_r @@ -0,0 +1,4 @@ +MODEL: gbandd360 arcticsub +INPUT: +POINT: gbandd360 arcticsub +INTGL: glout diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp new file mode 100644 index 0000000000..5a7094f3ad --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp @@ -0,0 +1,146 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III multi-grid model driver input file $ +$ -------------------------------------------------------------------- $ +$ +$ The first input line sets up the general multi-grid model definition +$ by defining the follwing six parameters : +$ +$ 1) Number of wave model grids.i ( NRGRD ) +$ 2) Number of grids defining input fields. ( NRINP ) +$ 3) Flag for using unified point output file. ( UNIPTS ) +$ 4) Output server type as in ww3_shel.inp +$ 5) Flag for dedicated process for iunified point output. +$ 6) Flag for grids sharing dedicated output processes. +$ +$ 3 1 T 1 T T {example} + 2 0 F 1 F F +$ +$ -------------------------------------------------------------------- $ +$ If there are input data grids defined ( NRINP > 0 ), then these +$ grids are defined first. These grids are defined as if they are wave +$ model grids using the file mod_def.MODID. Each grid is defined on +$ a separate input line with MODID, and eight input flags identifying +$ the presentce of 1) water levels 2) currents 3) winds 4) ice and +$ 5-7) assimilation data as in the file ww3_shel.inp. +$ +$ 'input' F F T F F F F {example} +$ +$ In this example, we need the file mod_def.input to define the grid +$ and the file wind.input to provide the corresponding wind data. +$ +$ -------------------------------------------------------------------- $ +$ If all point output is gathered in a unified point output file +$ ( UNIPTS = .TRUE. ), then the output spectral grid needs to be +$ defined. Ths information is taken from a wave model grid, and only +$ the spectral definitions from this grid are relevant. Define the +$ name of this grid here +$ +$ 'points' {example} +$ +$ In this example, we need the file mod_def.points to define the +$ spectral output grid, and the point output will be written to the +$ file out_pnt.points +$ +$ -------------------------------------------------------------------- $ +$ Now each actual wave model grid is defined using 13 parameters to be +$ read fom a single line in the file. Each line contains the following +$ parameters +$ 1) Define the grid with the extension of the mod_def file. +$ 2-8) Define the inputs used by the grids with 8 keywords +$ corresponding to the 8 flags defining the input in the +$ input files. Valid keywords are: +$ 'no' : This input is not used. +$ 'native' : This grid has its own input files, e.g. grid +$ grdX (mod_def.grdX) uses ice.grdX. +$ 'MODID' : Take input from the grid identified by +$ MODID. In the example below, all grids get +$ their wind from wind.input (mod_def.input). +$ 9) Rank number of grid (internally sorted and reassigned). +$ 10) Group number (internally reassigned so that different +$ ranks result in different group numbers. +$ 11-12) Define fraction of communicator (processes) used for this +$ grid. +$ 13) Flag identifying dumping of boundary data used by this +$ grid. If true, the file nest.MODID is generated. +$ +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} +$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F +$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F +$ +$ +$ In this example three grids are used requiring the files +$ mod_def.grdN. All files get ther winds from the grid 'input' +$ defined by mod_def.input, and no other inputs are used. In the lines +$ that are commented out, each grid runs on a part of the pool of +$ processes assigned to the computation. +$ +$ -------------------------------------------------------------------- $ +$ Starting and ending times for the entire model run +$ + 19680606 000000 19680608 000000 +$ +$ -------------------------------------------------------------------- $ +$ Specific multi-scale model settings (single line). +$ Flag for masking computation in two-way nesting (except at +$ output times). +$ Flag for masking at printout time. +$ + T T +$ +$ +$ -------------------------------------------------------------------- $ +$ Conventional output requests as in ww3_shel.inp. Will be applied +$ to all grids. +$ + 19680606 000000 3600 19680608 000000 +$ +$ +N +DPT HS +$ +$ NOTE: Ff UNIPTS = .TRUE. then the point output needs to be defined +$ here and cannot be redefined below. +$ + 19680606 000000 7200 19680607 000000 + 15.50 73.50 'LFB1' + 30.00 74.00 'LFB2' + 28.5 71.5833 'Nordkyn' + 0.0 0.0 'STOPSTRING' + 19680606 000000 0 19680607 000000 + 19680606 060000 10800 19680606 060000 T + 19680607 000000 86400 19680608 000000 + 19680606 000000 0 19680607 000000 + 19680606 000000 0 19680607 000000 +$ +$ -------------------------------------------------------------------- $ +$ Output requests per grid and type to overwrite general setup +$ as defined above. First record per set is the grid name MODID +$ and the output type number. Then follows the standard time string, +$ and conventional data as per output type. In mww3_test_05 this is +$ not used. Below, one example generating partitioning output for +$ the inner grid is included but commented out. +$ +$ 'grd3' 6 +$ 19680606 000000 900 19680608 000000 +$ 0 999 1 0 999 1 T +$ +$ -------------------------------------------------------------------- $ +$ Mandatory end of outpout requests per grid, identified by output +$ type set to 0. +$ + 'the_end' 0 +$ +$ +$ -------------------------------------------------------------------- $ +$ Moving grid data as in ww3_shel.inp. All grids will use same data. +$ +$ 'MOV' 19680606 000000 5. 90. {example} + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml new file mode 100644 index 0000000000..21e323eb5c --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml @@ -0,0 +1,242 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_multi.nml - multi-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%NRINP = 0 ! Number of grids defining input fields. +! DOMAIN%NRGRD = 1 ! Number of wave model grids. +! DOMAIN%UNIPTS = F ! Flag for using unified point output file. +! DOMAIN%IOSTYP = 1 ! Output server type as in ww3_shel.nml +! DOMAIN%UPPROC = F ! Flag for dedicated process for unified point output. +! DOMAIN%PSHARE = F ! Flag for grids sharing dedicated output processes. +! DOMAIN%FLGHG1 = F ! Flag for masking computation in two-way nesting +! DOMAIN%FLGHG2 = F ! Flag for masking at printout time +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680608 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '19680606 000000' ! Start date for the entire model + DOMAIN%STOP = '19680608 000000' ! Stop date for the entire model + DOMAIN%NRGRD = 2 + DOMAIN%FLGHG1 = T + DOMAIN%FLGHG2 = T +/ + +! -------------------------------------------------------------------- ! +! Define each input grid via the INPUT_GRID_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRINP +! * INPUT(I)%NAME must be set for each active input grid I +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT(I)%NAME = 'unset' +! INPUT(I)%FORCING%WATER_LEVELS = F +! INPUT(I)%FORCING%CURRENTS = F +! INPUT(I)%FORCING%WINDS = F +! INPUT(I)%FORCING%ICE_CONC = F +! INPUT(I)%FORCING%ICE_PARAM1 = F +! INPUT(I)%FORCING%ICE_PARAM2 = F +! INPUT(I)%FORCING%ICE_PARAM3 = F +! INPUT(I)%FORCING%ICE_PARAM4 = F +! INPUT(I)%FORCING%ICE_PARAM5 = F +! INPUT(I)%FORCING%MUD_DENSITY = F +! INPUT(I)%FORCING%MUD_THICKNESS = F +! INPUT(I)%FORCING%MUD_VISCOSITY = F +! INPUT(I)%ASSIM%MEAN = F +! INPUT(I)%ASSIM%SPEC1D = F +! INPUT(I)%ASSIM%SPEC2D = F +! -------------------------------------------------------------------- ! +&INPUT_GRID_NML +/ + +! -------------------------------------------------------------------- ! +! Define each model grid via the MODEL_GRID_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! * MODEL(I)%NAME must be set for each active model grid I +! * FORCING can be set as : +! - 'no' : This input is not used. +! - 'native' : This grid has its own input files, e.g. grid +! grdX (mod_def.grdX) uses ice.grdX. +! - 'INPUT%NAME' : Take input from the grid identified by +! INPUT%NAME. +! * RESOURCE%RANK_ID : Rank number of grid (internally sorted and reassigned). +! * RESOURCE%GROUP_ID : Group number (internally reassigned so that different +! ranks result in different group numbers). +! * RESOURCE%COMM_FRAC : Fraction of communicator (processes) used for this grid. +! * RESOURCE%BOUND_FLAG : Flag identifying dumping of boundary data used by this +! grid. If true, the file nest.MODID is generated. +! +! * Limitations relevant to irregular (curvilinear) grids: +! 1) Equal rank is not supported when one or more is an irregular +! grid. Use non-equal rank instead. (see wmgridmd.ftn) +! 2) Non-native input grids: feature is not supported when either +! an input grid or computational grids is irregular. +! (see wmupdtmd.ftn) +! 3) Irregular grids with unified point output: This is supported +! but the feature has not been verified for accuracy. +! (see wmiopomd.ftn) +! +! * namelist must be terminated with / +! * definitions & defaults: +! MODEL(I)%NAME = 'unset' +! MODEL(I)%FORCING%WATER_LEVELS = 'no' +! MODEL(I)%FORCING%CURRENTS = 'no' +! MODEL(I)%FORCING%WINDS = 'no' +! MODEL(I)%FORCING%ICE_CONC = 'no' +! MODEL(I)%FORCING%ICE_PARAM1 = 'no' +! MODEL(I)%FORCING%ICE_PARAM2 = 'no' +! MODEL(I)%FORCING%ICE_PARAM3 = 'no' +! MODEL(I)%FORCING%ICE_PARAM4 = 'no' +! MODEL(I)%FORCING%ICE_PARAM5 = 'no' +! MODEL(I)%FORCING%MUD_DENSITY = 'no' +! MODEL(I)%FORCING%MUD_THICKNESS = 'no' +! MODEL(I)%FORCING%MUD_VISCOSITY = 'no' +! MODEL(I)%ASSIM%MEAN = 'no' +! MODEL(I)%ASSIM%SPEC1d = 'no' +! MODEL(I)%ASSIM%SPEC2d = 'no' +! MODEL(I)%RESOURCE%RANK_ID = I +! MODEL(I)%RESOURCE%GROUP_ID = 1 +! MODEL(I)%RESOURCE%COMM_FRAC = 0.00,1.00 +! MODEL(I)%RESOURCE%BOUND_FLAG = F +! +! MODEL(4)%FORCING = 'no' 'no' 'no' 'no' 'no' 'no' +! +! MODEL(2)%RESOURCE = 1 1 0.00 1.00 F +! -------------------------------------------------------------------- ! +&MODEL_GRID_NML + MODEL(1)%NAME = 'gbandd360' + MODEL(2)%NAME = 'arcticsub' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! +! * ALLTYPE will apply the output types for all the model grids +! +! * ITYPE(I) will apply the output types for the model grid number I +! +! * need DOMAIN%UNIPTS equal true to use a unified point output file +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the detailed list of field names is given in model/nml/ww3_shel.nml : +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * output track file formatted (T) or unformated (F) +! +! * namelist must be terminated with / +! * definitions & defaults: +! ALLTYPE%FIELD%LIST = 'unset' +! ALLTYPE%POINT%NAME = 'unset' +! ALLTYPE%POINT%FILE = 'points.list' +! ALLTYPE%TRACK%FORMAT = T +! ALLTYPE%PARTITION%X0 = 0 +! ALLTYPE%PARTITION%XN = 0 +! ALLTYPE%PARTITION%NX = 0 +! ALLTYPE%PARTITION%Y0 = 0 +! ALLTYPE%PARTITION%YN = 0 +! ALLTYPE%PARTITION%NY = 0 +! ALLTYPE%PARTITION%FORMAT = T +! +! ITYPE(3)%TRACK%FORMAT = F +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + ALLTYPE%FIELD%LIST = 'DPT HS' + ALLTYPE%POINT%FILE = '../input/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! * ALLDATE will apply the output dates for all the model grids +! * IDATE(I) will apply the output dates for the model grid number i +! * 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 +! * it is possible to overwrite a global output date for a given grid +! +! * namelist must be terminated with / +! * definitions & defaults: +! ALLDATE%FIELD%START = '19680606 000000' +! ALLDATE%FIELD%STRIDE = '0' +! ALLDATE%FIELD%STOP = '19680607 000000' +! ALLDATE%POINT%START = '19680606 000000' +! ALLDATE%POINT%STRIDE = '0' +! ALLDATE%POINT%STOP = '19680607 000000' +! ALLDATE%TRACK%START = '19680606 000000' +! ALLDATE%TRACK%STRIDE = '0' +! ALLDATE%TRACK%STOP = '19680607 000000' +! ALLDATE%RESTART%START = '19680606 000000' +! ALLDATE%RESTART%STRIDE = '0' +! ALLDATE%RESTART%STOP = '19680607 000000' +! ALLDATE%RESTART2%START = '19680606 000000' +! ALLDATE%RESTART2%STRIDE = '0' +! ALLDATE%RESTART2%STOP = '19680607 000000' +! ALLDATE%BOUNDARY%START = '19680606 000000' +! ALLDATE%BOUNDARY%STRIDE = '0' +! ALLDATE%BOUNDARY%STOP = '19680607 000000' +! ALLDATE%PARTITION%START = '19680606 000000' +! ALLDATE%PARTITION%STRIDE = '0' +! ALLDATE%PARTITION%STOP = '19680607 000000' +! +! ALLDATE%RESTART = '19680606 000000' '0' '19680607 000000' +! +! IDATE(3)%PARTITION%START = '19680606 000000' +! ALLDATE%RESTART2 = '19680606 000000' '86400' '19680608 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + ALLDATE%FIELD = '19680606 000000' '3600' '19680608 000000' + ALLDATE%POINT = '19680606 000000' '3600' '19680608 000000' + ALLDATE%RESTART = '19680606 060000' '21600' '19680606 060000' + ALLDATE%RESTART2 = '19680606 000000' '86400' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! 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 only be MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! 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 af36248f0ad01231b990b5d9c997de81b4baba40 Mon Sep 17 00:00:00 2001 From: Roberto Padilla Date: Thu, 2 Jan 2020 16:28:06 -0500 Subject: [PATCH 32/49] adding info for mww3_test_06 the set _r for checkpoint --- regtests/mww3_test_06/info | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/regtests/mww3_test_06/info b/regtests/mww3_test_06/info index cc18a2dcce..2d5b94604c 100644 --- a/regtests/mww3_test_06/info +++ b/regtests/mww3_test_06/info @@ -32,6 +32,7 @@ # * Grid sets available : # # + grdset_d : gbandd360 arcticsub # # + grdset_d_h : gbandd360 arcticsub with hourly binary output # +# + grdset_d_r : gbandd360 arcticsub with check point output # # # # - switch options (mostly self-explanatory). # # + switch_PR3_UQ # @@ -66,8 +67,11 @@ # ../model mww3_test_06 # # ./bin/run_test -m grdset_d -n 3 -p mpirun -s PR3_UQ_MPI_SCRIP_T38 \ # # ../model mww3_test_06 # +# ./bin/run_test -m grdset_d_r -n 3 -p mpirun -s PR3_UQ_SCRIP\ # +# ../model mww3_test_06 # # # -# Erick Rogers, Nov 2013 # +# Erick Rogers, Nov 2013 # +# Roberto Padilla, Jan 2019 # # # # Copyright 2009-2013 National Weather Service (NWS), # # National Oceanic and Atmospheric Administration. All rights # From d77fae9171c076378f18e71bf4535967eee0c663 Mon Sep 17 00:00:00 2001 From: RobertoPadilla-NOAA <49441900+RobertoPadilla-NOAA@users.noreply.github.com> Date: Fri, 3 Jan 2020 12:53:53 -0500 Subject: [PATCH 33/49] Fb checkpoint (#137) Adding an optional second thread for output of restart files following a different stride than the original (now first) restart cycling. This feature assists in checkpointing and staggered coupled model restarting applications. When optional thread is used, restart file names are YYYYMMDD.HHMMSS.restart.$grdID. --- model/ftn/w3initmd.ftn | 67 ++++- model/ftn/w3iorsmd.ftn | 29 ++- model/ftn/w3nmlmultimd.ftn | 12 +- model/ftn/w3nmlshelmd.ftn | 7 + model/ftn/w3odatmd.ftn | 6 +- model/ftn/w3wavemd.ftn | 52 +++- model/ftn/wminitmd.ftn | 145 ++++++++++- model/ftn/wmwavemd.ftn | 40 +++ model/ftn/ww3_shel.ftn | 80 +++++- regtests/mww3_test_06/info | 6 +- regtests/mww3_test_06/input/grdset_d_r | 4 + .../input/ww3_multi_grdset_d_r.inp | 146 +++++++++++ .../input/ww3_multi_grdset_d_r.nml | 242 ++++++++++++++++++ 13 files changed, 806 insertions(+), 30 deletions(-) create mode 100644 regtests/mww3_test_06/input/grdset_d_r create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp create mode 100644 regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 6725b44d00..481b196b32 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -854,7 +854,7 @@ !/DEBUGINIT WRITE(740+IAPROC,*) ' After ALL_VA_INTEGRAL_PRINT' !/DEBUGINIT FLUSH(740+IAPROC) !/TIMINGS CALL PRINT_MY_TIME("Before W3IORS") - CALL W3IORS ( 'READ', NDS(6), SIG(NK), INTYPE, IMOD ) + CALL W3IORS ( 'READ', NDS(6), SIG(NK), INTYPE, IMOD) !/TIMINGS CALL PRINT_MY_TIME("After W3IORS") !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 3a' !/MEMCHECK call getMallocInfo(mallinfos) @@ -957,6 +957,20 @@ TOLAST(2,J) = ODAT(J0+5) END DO ! +! CKECKPOINT J=8, for second stream of restart files + J=8 + J0 = (J-1)*5 + IF(ODAT(J0+1) .NE. 0) THEN + TONEXT(1,J) = ODAT(J0+1) + TONEXT(2,J) = ODAT(J0+2) + DTOUT ( J) = REAL ( ODAT(J0+3) ) + TOLAST(1,J) = ODAT(J0+4) + TOLAST(2,J) = ODAT(J0+5) + FLOUT(8) = .TRUE. + ELSE + FLOUT(8) = .FALSE. + END IF +! ! 4.b Check if output available ! FLOUT(1) = .FALSE. @@ -1063,6 +1077,57 @@ ! END DO ! +! FOR CHECKPOINT (J=8): Second stream of restart files +! + J=8 +! +! ... check time step +! + DTOUT(J) = MAX ( 0. , DTOUT(J) ) + FLOUT(J) = FLOUT(J) .AND. ( DTOUT(J) .GT. 0.5 ) +! +! ... get first time +! + IF ( FLOUT(J) ) THEN + TOUT = TONEXT(:,J) + TLST = TOLAST(:,J) +! + DO + DTTST = DSEC21 ( TIME , TOUT ) + IF ( ( J.NE.4 .AND. DTTST.LT.0. ) .OR. & + ( J.EQ.4 .AND. DTTST.LE.0. ) ) THEN + CALL TICK21 ( TOUT, DTOUT(J) ) + ELSE + EXIT + END IF + END DO +! +! ... reset first time +! + TONEXT(:,J) = TOUT +! +! ... check last time +! + DTTST = DSEC21 ( TOUT , TLST ) + IF ( DTTST.LT.0.) FLOUT(J) = .FALSE. +! +! ... check overall first time +! + IF ( FLOUT(J) ) THEN + IF ( TOFRST(1).EQ.-1 ) THEN + TOFRST = TOUT + ELSE + DTTST = DSEC21 ( TOUT , TOFRST ) + IF ( DTTST.GT.0.) THEN + TOFRST = TOUT + END IF + END IF + END IF +! + END IF +! END J=8 +! +! !/MEMCHECK WRITE(740+IAPROC,*) 'memcheck_____:', 'WW3_INIT SECTION 5' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index 40cc2219b9..ddcbf0ddd7 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -61,7 +61,7 @@ !/ CONTAINS !/ ------------------------------------------------------------------- / - SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, INTYPE, IMOD ) + SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, INTYPE, IMOD, FLRSTRT ) !/ !/ +-----------------------------------+ !/ | WAVEWATCH III NOAA/NCEP | @@ -97,6 +97,10 @@ !/ (T. Campbell, NRL) !/ 05-Jun-2018 : Add PDLIB/TIMINGS/DEBUGIO ( version 6.04 ) !/ DEBUGINIT/MPI +!/ 19-Dec-2019 : Optional second stream of ( version 7.00 ) +!/ restart files +!/ (Roberto Padilla-Hernandez & J.H. Alves) + !/ !/ Copyright 2009-2013 National Weather Service (NWS), !/ National Oceanic and Atmospheric Administration. All rights @@ -149,6 +153,7 @@ ! 3 : for writing file. ! 4 : starting from calm. ! IMOD Int. I Optional grid number, defaults to 1. +! FLRSTRT LOGIC I OTIONAL TRUE: A second request for restart files ! ---------------------------------------------------------------- ! ! 4. Subroutines used : @@ -271,6 +276,7 @@ INTEGER, INTENT(OUT) :: INTYPE REAL, INTENT(INOUT) :: DUMFPI CHARACTER, INTENT(IN) :: INXOUT*(*) + LOGICAL, INTENT(IN),OPTIONAL :: FLRSTRT !/ !/ ------------------------------------------------------------------- / !/ Local parameters @@ -293,9 +299,11 @@ LOGICAL :: WRITE, IOSFLG CHARACTER(LEN=4) :: TYPE CHARACTER(LEN=10) :: VERTST - CHARACTER(LEN=21) :: FNAME +! CHARACTER(LEN=21) :: FNAME + CHARACTER(LEN=40) :: FNAME CHARACTER(LEN=26) :: IDTST CHARACTER(LEN=30) :: TNAME + CHARACTER(LEN=15) :: TIMETAG !/ !/ ------------------------------------------------------------------- / !/ @@ -373,13 +381,20 @@ I = LEN_TRIM(FILEXT) J = LEN_TRIM(FNMPRE) ! - IF ( IFILE.EQ.0 ) THEN - FNAME = 'restart.'//FILEXT(:I) - ELSE - FNAME = 'restartNNN.'//FILEXT(:I) - IF ( WRITE .AND. IAPROC.EQ.NAPRST ) & +!CHECKPOINT + IF ( PRESENT(FLRSTRT) .AND. FLRSTRT) THEN + WRITE(TIMETAG,"(i8.8,'.'i6.6)")TIME(1),TIME(2) + FNAME=TIMETAG//'.restart.'//FILEXT(:I) + ELSE + IF ( IFILE.EQ.0 ) THEN + FNAME = 'restart.'//FILEXT(:I) + ELSE + FNAME = 'restartNNN.'//FILEXT(:I) + IF ( WRITE .AND. IAPROC.EQ.NAPRST ) & WRITE (FNAME(8:10),'(I3.3)') IFILE END IF + END IF + IFILE = IFILE + 1 ! !/T WRITE (NDST,9001) FNAME, LRECL diff --git a/model/ftn/w3nmlmultimd.ftn b/model/ftn/w3nmlmultimd.ftn index 67f7cfbd8f..91400e4018 100644 --- a/model/ftn/w3nmlmultimd.ftn +++ b/model/ftn/w3nmlmultimd.ftn @@ -160,6 +160,7 @@ TYPE(NML_OUTPUT_TIME_T) :: POINT TYPE(NML_OUTPUT_TIME_T) :: TRACK TYPE(NML_OUTPUT_TIME_T) :: RESTART + TYPE(NML_OUTPUT_TIME_T) :: RESTART2 TYPE(NML_OUTPUT_TIME_T) :: BOUNDARY TYPE(NML_OUTPUT_TIME_T) :: PARTITION !/COU TYPE(NML_OUTPUT_TIME_T) :: COUPLING @@ -1152,6 +1153,9 @@ IDATE(I)%RESTART%START = '19680606 000000' IDATE(I)%RESTART%STRIDE = '0' IDATE(I)%RESTART%STOP = '19680607 000000' + IDATE(I)%RESTART2%START = '19680606 000000' + IDATE(I)%RESTART2%STRIDE = '0' + IDATE(I)%RESTART2%STOP = '19680607 000000' IDATE(I)%BOUNDARY%START = '19680606 000000' IDATE(I)%BOUNDARY%STRIDE = '0' IDATE(I)%BOUNDARY%STOP = '19680607 000000' @@ -1175,7 +1179,10 @@ ALLDATE%TRACK%STOP = '19680607 000000' ALLDATE%RESTART%START = '19680606 000000' ALLDATE%RESTART%STRIDE = '0' - ALLDATE%RESTART%STOP = '19680607 000000' + ALLDATE%RESTART%STOP = '19680607 000000' + ALLDATE%RESTART2%START = '19680606 000000' + ALLDATE%RESTART2%STRIDE = '0' + ALLDATE%RESTART2%STOP = '19680607 000000' ALLDATE%BOUNDARY%START = '19680606 000000' ALLDATE%BOUNDARY%STRIDE = '0' ALLDATE%BOUNDARY%STOP = '19680607 000000' @@ -1880,6 +1887,9 @@ WRITE (NDSN,10) TRIM(MSG),'RESTART % START = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%START) WRITE (NDSN,10) TRIM(MSG),'RESTART % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%STRIDE) WRITE (NDSN,10) TRIM(MSG),'RESTART % STOP = ', TRIM(NML_OUTPUT_DATE(I)%RESTART%STOP) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % START = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%START) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STOP = ', TRIM(NML_OUTPUT_DATE(I)%RESTART2%STOP) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % START = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%START) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STRIDE = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%STRIDE) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STOP = ', TRIM(NML_OUTPUT_DATE(I)%BOUNDARY%STOP) diff --git a/model/ftn/w3nmlshelmd.ftn b/model/ftn/w3nmlshelmd.ftn index 2dcb0aead1..1d048b555b 100644 --- a/model/ftn/w3nmlshelmd.ftn +++ b/model/ftn/w3nmlshelmd.ftn @@ -111,6 +111,7 @@ TYPE(NML_OUTPUT_TIME_T) :: POINT TYPE(NML_OUTPUT_TIME_T) :: TRACK TYPE(NML_OUTPUT_TIME_T) :: RESTART + TYPE(NML_OUTPUT_TIME_T) :: RESTART2 TYPE(NML_OUTPUT_TIME_T) :: BOUNDARY TYPE(NML_OUTPUT_TIME_T) :: PARTITION TYPE(NML_OUTPUT_TIME_T) :: COUPLING @@ -745,6 +746,9 @@ DATE%RESTART%START = '19680606 000000' DATE%RESTART%STRIDE = '0' DATE%RESTART%STOP = '19680607 000000' + DATE%RESTART2%START = '19680606 000000' + DATE%RESTART2%STRIDE = '0' + DATE%RESTART2%STOP = '19680607 000000' DATE%BOUNDARY%START = '19680606 000000' DATE%BOUNDARY%STRIDE = '0' DATE%BOUNDARY%STOP = '19680607 000000' @@ -1301,6 +1305,9 @@ WRITE (NDSN,10) TRIM(MSG),'RESTART % START = ', TRIM(NML_OUTPUT_DATE%RESTART%START) WRITE (NDSN,10) TRIM(MSG),'RESTART % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART%STRIDE) WRITE (NDSN,10) TRIM(MSG),'RESTART % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART%STOP) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % START = ', TRIM(NML_OUTPUT_DATE%RESTART2%START) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STRIDE = ', TRIM(NML_OUTPUT_DATE%RESTART2%STRIDE) + WRITE (NDSN,10) TRIM(MSG),'RESTART2 % STOP = ', TRIM(NML_OUTPUT_DATE%RESTART2%STOP) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % START = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%START) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STRIDE = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STRIDE) WRITE (NDSN,10) TRIM(MSG),'BOUNDARY % STOP = ', TRIM(NML_OUTPUT_DATE%BOUNDARY%STOP) diff --git a/model/ftn/w3odatmd.ftn b/model/ftn/w3odatmd.ftn index 80441682b9..2d1e98c6e7 100644 --- a/model/ftn/w3odatmd.ftn +++ b/model/ftn/w3odatmd.ftn @@ -399,10 +399,10 @@ NAPOUT, NAPERR, NAPFLD, NAPPNT, & NAPTRK, NAPRST, NAPBPT, NAPPRT INTEGER :: NOSWLL - INTEGER :: TOFRST(2), TONEXT(2,7), TOLAST(2,7), & + INTEGER :: TOFRST(2), TONEXT(2,8), TOLAST(2,8), & TBPI0(2), TBPIN(2), NDS(13), OFILES(7) - REAL :: DTOUT(7) - LOGICAL :: FLOUT(7) + REAL :: DTOUT(8) + LOGICAL :: FLOUT(8) TYPE(OTYPE1) :: OUT1 TYPE(OTYPE2) :: OUT2 TYPE(OTYPE3) :: OUT3 diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index fe93640277..fa2bb0d109 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -2344,7 +2344,9 @@ DO J=1, NOTYPE !/DEBUGRUN WRITE(740+IAPROC,*) 'NOTYPE, J=', J !/DEBUGRUN FLUSH(740+IAPROC) + IF ( FLOUT(J) ) THEN +! !/DEBUGRUN WRITE(740+IAPROC,*) 'Matching FLOUT(J)' !/DEBUGRUN FLUSH(740+IAPROC) ! @@ -2410,7 +2412,8 @@ ! CALL W3IOTR ( NDS(11), NDS(12), VA, IMOD ) ELSE IF ( J .EQ. 4 ) THEN - CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD ) + CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD,& + FLOUT(8) ) ELSE IF ( J .EQ. 5 ) THEN IF ( IAPROC .EQ. NAPBPT ) THEN !/MPI IF (NRQBP2.NE.0) CALL MPI_WAITALL & @@ -2453,6 +2456,53 @@ END IF ! END DO + + +!/ CHECKPOINT +!/ IF THERE IS A SECOND STREAM OF RESTART FILES THEN J=8 AND FLOUT(8)=.TRUE. + J=8 + IF ( FLOUT(J) ) THEN +! +!/DEBUGRUN WRITE(740+IAPROC,*) 'Matching FLOUT(J)' +!/DEBUGRUN FLUSH(740+IAPROC) +! +! 4.d Perform output +! + TOUT(:) = TONEXT(:,J) + DTTST = DSEC21 ( TIME, TOUT ) + IF ( DTTST .EQ. 0. ) THEN + CALL W3IORS ('HOT', NDS(6), XXX, ITEST, IMOD, & + FLOUT(8) ) + CALL TICK21 ( TOUT, DTOUT(J) ) + TONEXT(:,J) = TOUT + TLST = TOLAST(:,J) + DTTST = DSEC21 ( TOUT , TLST ) + FLOUT(J) = DTTST.GE.0. + IF ( FLOUT(J) ) THEN + OUTID(2*J-1:2*J-1) = 'X' +!/OASIS IF ( (DTOUT(7).NE.0) .AND. & +!/OASIS (DSEC21(TIME,TIME00).EQ.0 .OR. & +!/OASIS DSEC21(TIME,TIMEEND).EQ.0) ) OUTID(13:13) = ' ' + ELSE + OUTID(2*J-1:2*J-1) = 'L' + END IF + END IF +! +! 4.e Update next output time +! + IF ( FLOUT(J) ) THEN + IF ( TOFRST(1).EQ.-1 ) THEN + TOFRST = TOUT + ELSE + DTTST = DSEC21 ( TOUT , TOFRST ) + IF ( DTTST.GT.0.) THEN + TOFRST = TOUT + END IF + END IF + END IF + END IF +! END OF CHECKPOINT +! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_WAVE AFTER TIME LOOP 3' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index a33afed1c7..57c6b1361a 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -436,7 +436,7 @@ CHARACTER(LEN=13) :: IDFLDS(-7:7) CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: TNAME CHARACTER(LEN=80) :: LINE CHARACTER(LEN=80) :: LINEIN @@ -469,7 +469,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Separated wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ ! DATA IDSTR / 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', 'DT2' / ! @@ -649,7 +650,7 @@ ! ! 2.c Set up I/O for individual models (initial) ! - ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(35,0:NRGRD), & + ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(40,0:NRGRD), & FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & @@ -1116,6 +1117,7 @@ ! 5.b Process standard line ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) +! IF(J .LE. 2) THEN READ (MDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS @@ -1136,13 +1138,23 @@ IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN OUTFF(J,1)=0 - print*,' Number of data: ', 5 ELSE READ(WORDS( 6 ), * ) OUTFF(J,1) ! print*,' Number of data: ', 6 END IF -! WRITE(*,*) 'WMINITMD OUTFF(J,1)= ', OUTFF(J,1) - +! CHECKPOINT + ELSE IF(J .EQ. 4) THEN + READ (MDSI,'(A)') LINEIN + READ(LINEIN,*,iostat=ierr) WORDS +! + READ(WORDS( 1 ), * ) ODAT(16,1) + READ(WORDS( 2 ), * ) ODAT(17,1) + READ(WORDS( 3 ), * ) ODAT(18,1) + READ(WORDS( 4 ), * ) ODAT(19,1) + READ(WORDS( 5 ), * ) ODAT(20,1) + IF (WORDS(6) .EQ. 'T') THEN + READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(8-1)+1,5*8) + END IF ELSE READ (MDSI,*,END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J) OUTFF(J,1) = 0 @@ -1182,6 +1194,7 @@ DTME21(I:I) = ' ' END DO WRITE (MDSS,954) DTME21(1:19) + END IF IF ( J .EQ. 1 ) THEN ! @@ -1317,6 +1330,41 @@ ! ... End of loop in 5.a ! END DO +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +! Checkpoint + J=8 + IF ( ODAT(5*(J-1)+3,1) .NE. 0 ) THEN + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,951) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1,1) + TTIME(2) = ODAT(5*(J-1)+2,1) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,952) DTME21 + TTIME(1) = ODAT(5*(J-1)+4,1) + TTIME(2) = ODAT(5*(J-1)+5,1) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,953) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3,1) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1,1) .NE. ODAT(5*(J-1)+4,1) .OR. & + ODAT(5*(J-1)+2,1) .NE. ODAT(5*(J-1)+5,1) ) .AND. & + MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN + DO I=1, 18 + IF ( DTME21(I:I).NE.'0' .AND. & + DTME21(I:I).NE.'/' .AND. & + DTME21(I:I).NE.' ' .AND. & + DTME21(I:I).NE.':' ) EXIT + DTME21(I:I) = ' ' + END DO + WRITE (MDSS,954) DTME21(1:19) + END IF + END IF +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! ! 5.i Set all grids to unified output ! @@ -2299,6 +2347,18 @@ ENDIF END IF END DO +! +! CHECKPOINT + J=8 + IF ( FLOUT(J) ) THEN + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,J) + ELSE + DTTST = DSEC21 ( TOUTP(:,I), TONEXT(:,J) ) + IF ( DTTST .LT. 0. ) TOUTP(:,I) = TONEXT(:,J) + ENDIF + END IF +! ! GRSTAT(I) = 0 TSYNC(:,I) = TIME(:) @@ -3462,7 +3522,7 @@ !/MPRF CHARACTER(LEN=18) :: PFILE CHARACTER(LEN=13) :: IDFLDS(-7:7) CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: TNAME, LINE CHARACTER(LEN=1024) :: FLDOUT ! @@ -3487,7 +3547,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Separated wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ ! DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', & 'MDN', 'MTH', 'MVS', 'LEV', 'CUR', & @@ -3684,7 +3745,7 @@ ! ! 2.c Set up I/O for individual models (initial) ! - ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(35,0:NRGRD), & + ALLOCATE ( MDS(13,NRGRD), NTRACE(2,NRGRD), ODAT(40,0:NRGRD), & FLGRD(NOGRP,NGRPP,NRGRD), OT2(0:NRGRD), FLGD(NOGRP,NRGRD), & MDSF(-NRINP:NRGRD,JFIRST:7), IPRT(6,NRGRD), LPRT(NRGRD), & FLGR2(NOGRP,NGRPP,NRGRD),FLG2D(NOGRP,NGRPP), FLG1D(NOGRP), & @@ -4195,6 +4256,9 @@ READ(NML_OUTPUT_DATE(I)%RESTART%START, *) ODAT(16,I), ODAT(17,I) READ(NML_OUTPUT_DATE(I)%RESTART%STRIDE, *) ODAT(18,I) READ(NML_OUTPUT_DATE(I)%RESTART%STOP, *) ODAT(19,I), ODAT(20,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%START, *) ODAT(36,I), ODAT(37,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%STRIDE, *) ODAT(38,I) + READ(NML_OUTPUT_DATE(I)%RESTART2%STOP, *) ODAT(39,I), ODAT(40,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%START, *) ODAT(21,I), ODAT(22,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%STRIDE, *) ODAT(23,I) READ(NML_OUTPUT_DATE(I)%BOUNDARY%STOP, *) ODAT(24,I), ODAT(25,I) @@ -4214,6 +4278,7 @@ ODAT(23,I) = MAX ( 0 , ODAT(23,I) ) ODAT(28,I) = MAX ( 0 , ODAT(28,I) ) !!/COU ODAT(33,I) = MAX ( 0 , ODAT(33,I) ) + ODAT(38,I) = MAX ( 0 , ODAT(38,I) ) ! define the time of the output point grid (index 0) as the & ! time of the first grid which should be the larger one by convention @@ -4438,6 +4503,45 @@ ! ... End of loop J on NOTYPE in 5.a ! END DO +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +! Checkpoint + J=8 + !OUTPTS(I)%FLOUT(8)=.FALSE. + IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN + !OUTPTS(I)%FLOUT(8)=.TRUE. + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,951) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1,I) + TTIME(2) = ODAT(5*(J-1)+2,I) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,952) DTME21 + TTIME(1) = ODAT(5*(J-1)+4,I) + TTIME(2) = ODAT(5*(J-1)+5,I) + CALL STME21 ( TTIME , DTME21 ) + IF ( MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) & + WRITE (MDSS,953) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3,I) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1,I) .NE. ODAT(5*(J-1)+4,I) .OR. & + ODAT(5*(J-1)+2,I) .NE. ODAT(5*(J-1)+5,I) ) .AND. & + MDSS.NE.MDSO .AND. NMPSCR.EQ.IMPROC ) THEN + DO II=1, 18 + IF ( DTME21(II:II).NE.'0' .AND. & + DTME21(II:II).NE.'/' .AND. & + DTME21(II:II).NE.' ' .AND. & + DTME21(II:II).NE.':' ) EXIT + DTME21(II:II) = ' ' + END DO + WRITE (MDSS,954) DTME21(1:19) + END IF + !ELSE + !OUTPTS(I)%FLOUT(8) = .FALSE. + END IF +!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ! ! ... End of loop I on NRGRD in 5.a ! @@ -4554,6 +4658,10 @@ IF ( ODAT( 3,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( ODAT(13,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( ODAT(28,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 +!xxx +! Checkpoint + IF ( ODAT(38,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 +!xxx IF ( ODAT( 8,I) .GT. 0 .OR. ODAT(18,I) .GT. 0 .OR. & ODAT(23,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( IOSTYP .EQ. 2 ) NDPOUT(I) = MIN ( 1 , NDPOUT(I) ) @@ -5118,6 +5226,25 @@ ENDIF END IF END DO +! +! Checkpoint + J=8 + OUTPTS(I)%FLOUT(8)=.FALSE. + IF ( ODAT(5*(J-1)+3,I) .NE. 0 ) THEN + OUTPTS(I)%FLOUT(8)=.TRUE. + ELSE + OUTPTS(I)%FLOUT(8)=.FALSE. + ENDIF + + IF ( FLOUT(J) ) THEN + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,J) + ELSE + DTTST = DSEC21 ( TOUTP(:,I), TONEXT(:,J) ) + IF ( DTTST .LT. 0. ) TOUTP(:,I) = TONEXT(:,J) + ENDIF + END IF +! ! GRSTAT(I) = 0 TSYNC(:,I) = TIME(:) diff --git a/model/ftn/wmwavemd.ftn b/model/ftn/wmwavemd.ftn index df4fcc28e6..3a5d5d8e42 100644 --- a/model/ftn/wmwavemd.ftn +++ b/model/ftn/wmwavemd.ftn @@ -1047,6 +1047,16 @@ IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) ENDIF END DO +! CHECKPOINT + JO=8 + IF ( .NOT.FLOUT(JO) ) CYCLE + IF ( TOUTP(1,I) .EQ. -1 ) THEN + TOUTP(:,I) = TONEXT(:,JO) + ELSE + DTTST = DSEC21 ( TOUTP(:,I) , TONEXT(:,JO) ) + IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) + ENDIF +! END CHECKPOINT ! !/T WRITE (MDST,9091) TOUTP(:,I) ! @@ -1124,6 +1134,36 @@ ! !/MPI END DO ! +! Checkpoint +! +!/MPI JO=8 +! +!/MPI IF ( FLOUT(JO) ) THEN +!/MPI DO +!/MPI DTTST = DSEC21 ( TIME, TONEXT(:,JO) ) +!/MPI IF ( DTTST .LE. 0. ) THEN +!/MPI CALL TICK21 ( TONEXT(:,JO), DTOUT(JO) ) +!/MPI DTTST = DSEC21 ( TONEXT(:,JO), TOLAST(:,JO) ) +!/MPI IF ( DTTST .LT. 0. ) THEN +!/MPI FLOUT(JO) = .FALSE. +!/MPI EXIT +!/MPI END IF +!/MPI ELSE +!/MPI EXIT +!/MPI END IF +!/MPI END DO +!/MPI END IF +! +!/MPI IF ( .NOT.FLOUT(JO) ) CYCLE +!/MPI IF ( TOUTP(1,I) .EQ. -1 ) THEN +!/MPI TOUTP(:,I) = TONEXT(:,JO) +!/MPI ELSE +!/MPI DTTST = DSEC21 ( TOUTP(:,I) , TONEXT(:,JO) ) +!/MPI IF (DTTST.LT.0.) TOUTP(:,I) = TONEXT(:,JO) +!/MPI ENDIF +! + +! End Checkpoint !/MPIT WRITE (MDST,9991) TOUTP(:,I) !/MPI END IF ! diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 8d414ab077..8565305fd1 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -295,7 +295,7 @@ INTEGER :: NDSF(-7:7), NDS(13), NTRACE(2), NDT(5:7), & TIME0(2), TIMEN(2), TTIME(2), TTT(2), & NH(-7:8), THO(2,-7:8,NHMAX), RCLD(5:7), & - NODATA(5:7), ODAT(35), IPRT(6) = 0, & + NODATA(5:7), ODAT(40), IPRT(6) = 0, & STARTDATE(8), STOPDATE(8), IHH(-7:8) ! !/OASIS INTEGER :: OASISED @@ -321,7 +321,7 @@ CHARACTER(LEN=13) :: IDFLDS(-7:8) CHARACTER(LEN=20) :: STRNG CHARACTER(LEN=23) :: DTME21 - CHARACTER(LEN=30) :: IDOTYP(7) + CHARACTER(LEN=30) :: IDOTYP(8) CHARACTER(LEN=80) :: LINE CHARACTER(LEN=256) :: TMPLINE, TEST CHARACTER(LEN=1024) :: FLDIN @@ -358,7 +358,8 @@ 'Restart files ' , & 'Nesting data ' , & 'Partitioned wave field data ' , & - 'Fields for coupling ' / + 'Fields for coupling ' , & + 'Restart files second request '/ DATA IDSTR / 'IC1', 'IC2', 'IC3', 'IC4', 'IC5', 'MDN', 'MTH', & 'MVS', 'LEV', 'CUR', 'WND', 'ICE', 'DT0', 'DT1', & 'DT2', 'MOV' / @@ -763,6 +764,9 @@ READ(NML_OUTPUT_DATE%RESTART%START, *) ODAT(16), ODAT(17) READ(NML_OUTPUT_DATE%RESTART%STRIDE, *) ODAT(18) READ(NML_OUTPUT_DATE%RESTART%STOP, *) ODAT(19), ODAT(20) + READ(NML_OUTPUT_DATE%RESTART2%START, *) ODAT(36), ODAT(37) + READ(NML_OUTPUT_DATE%RESTART2%STRIDE, *) ODAT(38) + READ(NML_OUTPUT_DATE%RESTART2%STOP, *) ODAT(39), ODAT(40) READ(NML_OUTPUT_DATE%BOUNDARY%START, *) ODAT(21), ODAT(22) READ(NML_OUTPUT_DATE%BOUNDARY%STRIDE, *) ODAT(23) READ(NML_OUTPUT_DATE%BOUNDARY%STOP, *) ODAT(24), ODAT(25) @@ -781,7 +785,7 @@ ODAT(23) = MAX ( 0 , ODAT(23) ) ODAT(28) = MAX ( 0 , ODAT(28) ) ODAT(33) = MAX ( 0 , ODAT(33) ) - + ODAT(38) = MAX ( 0 , ODAT(38) ) ! 2.5 Output types NPTS = 0 @@ -1195,6 +1199,23 @@ CALL NEXTLN ( COMSTR , NDSI , NDSEN ) !/DEBUGINIT write(740+IAPROC,*), 'Before read 2002, case 7' ! +! CHECKPOINT + IF(J .EQ. 4) THEN + ODAT(38)=0 + READ (NDSI,'(A)') LINEIN + WRITE(*,*) 'LINEIN: ',LINEIN + READ(LINEIN,*,iostat=ierr) WORDS + READ(WORDS( 1 ), * ) ODAT(16) + READ(WORDS( 2 ), * ) ODAT(17) + READ(WORDS( 3 ), * ) ODAT(18) + READ(WORDS( 4 ), * ) ODAT(19) + READ(WORDS( 5 ), * ) ODAT(20) + IF (WORDS(6) .EQ. 'T') THEN + READ (NDSI,*,END=2001,ERR=2002)(ODAT(I),I=5*(8-1)+1,5*8) + WRITE(*,*)(ODAT(I),I=5*(8-1)+1,5*8) + END IF + ELSE +! !INLINE NEW VARIABLE TO READ IF PRESENT OFILES(J), IF NOT ==0 ! READ (NDSI,*) (ODAT(I),I=5*(J-1)+1,5*J) ! READ (NDSI,*,IOSTAT=IERR) (ODAT(I),I=5*(J-1)+1,5*J),OFILES(J) @@ -1378,6 +1399,7 @@ END IF ! J END IF ! ODAT + END IF ! IF J=4 END DO ! J ! force minimal allocation to avoid memory seg fault @@ -1631,8 +1653,37 @@ END IF END IF END DO - - +! +! CHECKPOINT + J=8 + IF (ODAT(38) .NE. 0) THEN + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,941) J, IDOTYP(J) + TTIME(1) = ODAT(5*(J-1)+1) + TTIME(2) = ODAT(5*(J-1)+2) + CALL STME21 ( TTIME , DTME21 ) + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,942) DTME21 + TTIME(1) = ODAT(5*(J-1)+4) + TTIME(2) = ODAT(5*(J-1)+5) + CALL STME21 ( TTIME , DTME21 ) + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,943) DTME21 + TTIME(1) = 0 + TTIME(2) = 0 + DTTST = REAL ( ODAT(5*(J-1)+3) ) + CALL TICK21 ( TTIME , DTTST ) + CALL STME21 ( TTIME , DTME21 ) + IF ( ( ODAT(5*(J-1)+1) .NE. ODAT(5*(J-1)+4) .OR. & + ODAT(5*(J-1)+2) .NE. ODAT(5*(J-1)+5) ) .AND. & + IAPROC .EQ. NAPOUT ) THEN + IF ( DTME21(9:9) .NE. '0' ) THEN + WRITE (NDSO,1944) DTME21( 9:19) + ELSE IF ( DTME21(10:10) .NE. '0' ) THEN + WRITE (NDSO,2944) DTME21(10:19) + ELSE + WRITE (NDSO,3944) DTME21(12:19) + END IF + END IF + END IF +! ! 2.5 Output types !/T WRITE (NDST,9040) ODAT @@ -1660,7 +1711,22 @@ CONTINUE END IF END DO - +! +! CHECKPOINT + J = 8 + DTTST = DSEC21 ( TIME0 , ODAT(5*(J-1)+4:5*(J-1)+5) ) + IF ( DTTST .LT. 0 ) THEN + ODAT(5*(J-1)+3) = 0 + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) TRIM(IDOTYP(J)) + CONTINUE + END IF + DTTST = DSEC21 ( ODAT(5*(J-1)+1:5*(J-1)+2), TIMEN ) + IF ( DTTST .LT. 0 ) THEN + ODAT(5*(J-1)+3) = 0 + IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,8945) TRIM(IDOTYP(J)) + CONTINUE + END IF +! !/MEMCHECK write(740+IAPROC,*) 'memcheck_____:', 'WW3_SHEL SECTION 5' !/MEMCHECK call getMallocInfo(mallinfos) !/MEMCHECK call printMallInfo(IAPROC,mallInfos) diff --git a/regtests/mww3_test_06/info b/regtests/mww3_test_06/info index cc18a2dcce..2d5b94604c 100644 --- a/regtests/mww3_test_06/info +++ b/regtests/mww3_test_06/info @@ -32,6 +32,7 @@ # * Grid sets available : # # + grdset_d : gbandd360 arcticsub # # + grdset_d_h : gbandd360 arcticsub with hourly binary output # +# + grdset_d_r : gbandd360 arcticsub with check point output # # # # - switch options (mostly self-explanatory). # # + switch_PR3_UQ # @@ -66,8 +67,11 @@ # ../model mww3_test_06 # # ./bin/run_test -m grdset_d -n 3 -p mpirun -s PR3_UQ_MPI_SCRIP_T38 \ # # ../model mww3_test_06 # +# ./bin/run_test -m grdset_d_r -n 3 -p mpirun -s PR3_UQ_SCRIP\ # +# ../model mww3_test_06 # # # -# Erick Rogers, Nov 2013 # +# Erick Rogers, Nov 2013 # +# Roberto Padilla, Jan 2019 # # # # Copyright 2009-2013 National Weather Service (NWS), # # National Oceanic and Atmospheric Administration. All rights # diff --git a/regtests/mww3_test_06/input/grdset_d_r b/regtests/mww3_test_06/input/grdset_d_r new file mode 100644 index 0000000000..aa51e73294 --- /dev/null +++ b/regtests/mww3_test_06/input/grdset_d_r @@ -0,0 +1,4 @@ +MODEL: gbandd360 arcticsub +INPUT: +POINT: gbandd360 arcticsub +INTGL: glout diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp new file mode 100644 index 0000000000..5a7094f3ad --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.inp @@ -0,0 +1,146 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III multi-grid model driver input file $ +$ -------------------------------------------------------------------- $ +$ +$ The first input line sets up the general multi-grid model definition +$ by defining the follwing six parameters : +$ +$ 1) Number of wave model grids.i ( NRGRD ) +$ 2) Number of grids defining input fields. ( NRINP ) +$ 3) Flag for using unified point output file. ( UNIPTS ) +$ 4) Output server type as in ww3_shel.inp +$ 5) Flag for dedicated process for iunified point output. +$ 6) Flag for grids sharing dedicated output processes. +$ +$ 3 1 T 1 T T {example} + 2 0 F 1 F F +$ +$ -------------------------------------------------------------------- $ +$ If there are input data grids defined ( NRINP > 0 ), then these +$ grids are defined first. These grids are defined as if they are wave +$ model grids using the file mod_def.MODID. Each grid is defined on +$ a separate input line with MODID, and eight input flags identifying +$ the presentce of 1) water levels 2) currents 3) winds 4) ice and +$ 5-7) assimilation data as in the file ww3_shel.inp. +$ +$ 'input' F F T F F F F {example} +$ +$ In this example, we need the file mod_def.input to define the grid +$ and the file wind.input to provide the corresponding wind data. +$ +$ -------------------------------------------------------------------- $ +$ If all point output is gathered in a unified point output file +$ ( UNIPTS = .TRUE. ), then the output spectral grid needs to be +$ defined. Ths information is taken from a wave model grid, and only +$ the spectral definitions from this grid are relevant. Define the +$ name of this grid here +$ +$ 'points' {example} +$ +$ In this example, we need the file mod_def.points to define the +$ spectral output grid, and the point output will be written to the +$ file out_pnt.points +$ +$ -------------------------------------------------------------------- $ +$ Now each actual wave model grid is defined using 13 parameters to be +$ read fom a single line in the file. Each line contains the following +$ parameters +$ 1) Define the grid with the extension of the mod_def file. +$ 2-8) Define the inputs used by the grids with 8 keywords +$ corresponding to the 8 flags defining the input in the +$ input files. Valid keywords are: +$ 'no' : This input is not used. +$ 'native' : This grid has its own input files, e.g. grid +$ grdX (mod_def.grdX) uses ice.grdX. +$ 'MODID' : Take input from the grid identified by +$ MODID. In the example below, all grids get +$ their wind from wind.input (mod_def.input). +$ 9) Rank number of grid (internally sorted and reassigned). +$ 10) Group number (internally reassigned so that different +$ ranks result in different group numbers. +$ 11-12) Define fraction of communicator (processes) used for this +$ grid. +$ 13) Flag identifying dumping of boundary data used by this +$ grid. If true, the file nest.MODID is generated. +$ +$ 'grd1' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F {example} +$ 'grd2' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F {example} +$ 'grd3' 'no' 'no' 'input' 'no' 'no' 'no' 'no' 3 1 0.00 1.00 F {example} +$ 'gband' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F +$ 'arcticreg' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F + 'gbandd360' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 1 1 0.00 1.00 F + 'arcticsub' 'no' 'no' 'no' 'no' 'no' 'no' 'no' 2 1 0.00 1.00 F +$ +$ +$ In this example three grids are used requiring the files +$ mod_def.grdN. All files get ther winds from the grid 'input' +$ defined by mod_def.input, and no other inputs are used. In the lines +$ that are commented out, each grid runs on a part of the pool of +$ processes assigned to the computation. +$ +$ -------------------------------------------------------------------- $ +$ Starting and ending times for the entire model run +$ + 19680606 000000 19680608 000000 +$ +$ -------------------------------------------------------------------- $ +$ Specific multi-scale model settings (single line). +$ Flag for masking computation in two-way nesting (except at +$ output times). +$ Flag for masking at printout time. +$ + T T +$ +$ +$ -------------------------------------------------------------------- $ +$ Conventional output requests as in ww3_shel.inp. Will be applied +$ to all grids. +$ + 19680606 000000 3600 19680608 000000 +$ +$ +N +DPT HS +$ +$ NOTE: Ff UNIPTS = .TRUE. then the point output needs to be defined +$ here and cannot be redefined below. +$ + 19680606 000000 7200 19680607 000000 + 15.50 73.50 'LFB1' + 30.00 74.00 'LFB2' + 28.5 71.5833 'Nordkyn' + 0.0 0.0 'STOPSTRING' + 19680606 000000 0 19680607 000000 + 19680606 060000 10800 19680606 060000 T + 19680607 000000 86400 19680608 000000 + 19680606 000000 0 19680607 000000 + 19680606 000000 0 19680607 000000 +$ +$ -------------------------------------------------------------------- $ +$ Output requests per grid and type to overwrite general setup +$ as defined above. First record per set is the grid name MODID +$ and the output type number. Then follows the standard time string, +$ and conventional data as per output type. In mww3_test_05 this is +$ not used. Below, one example generating partitioning output for +$ the inner grid is included but commented out. +$ +$ 'grd3' 6 +$ 19680606 000000 900 19680608 000000 +$ 0 999 1 0 999 1 T +$ +$ -------------------------------------------------------------------- $ +$ Mandatory end of outpout requests per grid, identified by output +$ type set to 0. +$ + 'the_end' 0 +$ +$ +$ -------------------------------------------------------------------- $ +$ Moving grid data as in ww3_shel.inp. All grids will use same data. +$ +$ 'MOV' 19680606 000000 5. 90. {example} + 'STP' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml new file mode 100644 index 0000000000..21e323eb5c --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_multi_grdset_d_r.nml @@ -0,0 +1,242 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III ww3_multi.nml - multi-grid model ! +! -------------------------------------------------------------------- ! + + +! -------------------------------------------------------------------- ! +! Define top-level model parameters via DOMAIN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! DOMAIN%NRINP = 0 ! Number of grids defining input fields. +! DOMAIN%NRGRD = 1 ! Number of wave model grids. +! DOMAIN%UNIPTS = F ! Flag for using unified point output file. +! DOMAIN%IOSTYP = 1 ! Output server type as in ww3_shel.nml +! DOMAIN%UPPROC = F ! Flag for dedicated process for unified point output. +! DOMAIN%PSHARE = F ! Flag for grids sharing dedicated output processes. +! DOMAIN%FLGHG1 = F ! Flag for masking computation in two-way nesting +! DOMAIN%FLGHG2 = F ! Flag for masking at printout time +! DOMAIN%START = '19680606 000000' ! Start date for the entire model +! DOMAIN%STOP = '19680608 000000' ! Stop date for the entire model +! -------------------------------------------------------------------- ! +&DOMAIN_NML + DOMAIN%START = '19680606 000000' ! Start date for the entire model + DOMAIN%STOP = '19680608 000000' ! Stop date for the entire model + DOMAIN%NRGRD = 2 + DOMAIN%FLGHG1 = T + DOMAIN%FLGHG2 = T +/ + +! -------------------------------------------------------------------- ! +! Define each input grid via the INPUT_GRID_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRINP +! * INPUT(I)%NAME must be set for each active input grid I +! +! * namelist must be terminated with / +! * definitions & defaults: +! INPUT(I)%NAME = 'unset' +! INPUT(I)%FORCING%WATER_LEVELS = F +! INPUT(I)%FORCING%CURRENTS = F +! INPUT(I)%FORCING%WINDS = F +! INPUT(I)%FORCING%ICE_CONC = F +! INPUT(I)%FORCING%ICE_PARAM1 = F +! INPUT(I)%FORCING%ICE_PARAM2 = F +! INPUT(I)%FORCING%ICE_PARAM3 = F +! INPUT(I)%FORCING%ICE_PARAM4 = F +! INPUT(I)%FORCING%ICE_PARAM5 = F +! INPUT(I)%FORCING%MUD_DENSITY = F +! INPUT(I)%FORCING%MUD_THICKNESS = F +! INPUT(I)%FORCING%MUD_VISCOSITY = F +! INPUT(I)%ASSIM%MEAN = F +! INPUT(I)%ASSIM%SPEC1D = F +! INPUT(I)%ASSIM%SPEC2D = F +! -------------------------------------------------------------------- ! +&INPUT_GRID_NML +/ + +! -------------------------------------------------------------------- ! +! Define each model grid via the MODEL_GRID_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! * MODEL(I)%NAME must be set for each active model grid I +! * FORCING can be set as : +! - 'no' : This input is not used. +! - 'native' : This grid has its own input files, e.g. grid +! grdX (mod_def.grdX) uses ice.grdX. +! - 'INPUT%NAME' : Take input from the grid identified by +! INPUT%NAME. +! * RESOURCE%RANK_ID : Rank number of grid (internally sorted and reassigned). +! * RESOURCE%GROUP_ID : Group number (internally reassigned so that different +! ranks result in different group numbers). +! * RESOURCE%COMM_FRAC : Fraction of communicator (processes) used for this grid. +! * RESOURCE%BOUND_FLAG : Flag identifying dumping of boundary data used by this +! grid. If true, the file nest.MODID is generated. +! +! * Limitations relevant to irregular (curvilinear) grids: +! 1) Equal rank is not supported when one or more is an irregular +! grid. Use non-equal rank instead. (see wmgridmd.ftn) +! 2) Non-native input grids: feature is not supported when either +! an input grid or computational grids is irregular. +! (see wmupdtmd.ftn) +! 3) Irregular grids with unified point output: This is supported +! but the feature has not been verified for accuracy. +! (see wmiopomd.ftn) +! +! * namelist must be terminated with / +! * definitions & defaults: +! MODEL(I)%NAME = 'unset' +! MODEL(I)%FORCING%WATER_LEVELS = 'no' +! MODEL(I)%FORCING%CURRENTS = 'no' +! MODEL(I)%FORCING%WINDS = 'no' +! MODEL(I)%FORCING%ICE_CONC = 'no' +! MODEL(I)%FORCING%ICE_PARAM1 = 'no' +! MODEL(I)%FORCING%ICE_PARAM2 = 'no' +! MODEL(I)%FORCING%ICE_PARAM3 = 'no' +! MODEL(I)%FORCING%ICE_PARAM4 = 'no' +! MODEL(I)%FORCING%ICE_PARAM5 = 'no' +! MODEL(I)%FORCING%MUD_DENSITY = 'no' +! MODEL(I)%FORCING%MUD_THICKNESS = 'no' +! MODEL(I)%FORCING%MUD_VISCOSITY = 'no' +! MODEL(I)%ASSIM%MEAN = 'no' +! MODEL(I)%ASSIM%SPEC1d = 'no' +! MODEL(I)%ASSIM%SPEC2d = 'no' +! MODEL(I)%RESOURCE%RANK_ID = I +! MODEL(I)%RESOURCE%GROUP_ID = 1 +! MODEL(I)%RESOURCE%COMM_FRAC = 0.00,1.00 +! MODEL(I)%RESOURCE%BOUND_FLAG = F +! +! MODEL(4)%FORCING = 'no' 'no' 'no' 'no' 'no' 'no' +! +! MODEL(2)%RESOURCE = 1 1 0.00 1.00 F +! -------------------------------------------------------------------- ! +&MODEL_GRID_NML + MODEL(1)%NAME = 'gbandd360' + MODEL(2)%NAME = 'arcticsub' +/ + +! -------------------------------------------------------------------- ! +! Define the output types point parameters via OUTPUT_TYPE_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! +! * ALLTYPE will apply the output types for all the model grids +! +! * ITYPE(I) will apply the output types for the model grid number I +! +! * need DOMAIN%UNIPTS equal true to use a unified point output file +! +! * the point file is a space separated values per line : lon lat 'name' +! +! * the detailed list of field names is given in model/nml/ww3_shel.nml : +! DPT CUR WND AST WLV ICE IBG D50 IC1 IC5 +! HS LM T02 T0M1 T01 FP DIR SPR DP HIG +! EF TH1M STH1M TH2M STH2M WN +! PHS PTP PLP PDIR PSPR PWS PDP PQP PPE PGW PSW PTM10 PT01 PT02 PEP TWS PNR +! UST CHA CGE FAW TAW TWA WCC WCF WCH WCM FWS +! SXY TWO BHD FOC TUS USS P2S USF P2L TWI FIC +! ABR UBR BED FBB TBB +! MSS MSC WL02 AXT AYT AXY +! DTD FC CFX CFD CFK +! U1 U2 +! +! * output track file formatted (T) or unformated (F) +! +! * namelist must be terminated with / +! * definitions & defaults: +! ALLTYPE%FIELD%LIST = 'unset' +! ALLTYPE%POINT%NAME = 'unset' +! ALLTYPE%POINT%FILE = 'points.list' +! ALLTYPE%TRACK%FORMAT = T +! ALLTYPE%PARTITION%X0 = 0 +! ALLTYPE%PARTITION%XN = 0 +! ALLTYPE%PARTITION%NX = 0 +! ALLTYPE%PARTITION%Y0 = 0 +! ALLTYPE%PARTITION%YN = 0 +! ALLTYPE%PARTITION%NY = 0 +! ALLTYPE%PARTITION%FORMAT = T +! +! ITYPE(3)%TRACK%FORMAT = F +! -------------------------------------------------------------------- ! +&OUTPUT_TYPE_NML + ALLTYPE%FIELD%LIST = 'DPT HS' + ALLTYPE%POINT%FILE = '../input/points.list' +/ + +! -------------------------------------------------------------------- ! +! Define output dates via OUTPUT_DATE_NML namelist +! +! * index I must match indexes from 1 to DOMAIN%NRGRD +! * ALLDATE will apply the output dates for all the model grids +! * IDATE(I) will apply the output dates for the model grid number i +! * 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 +! * it is possible to overwrite a global output date for a given grid +! +! * namelist must be terminated with / +! * definitions & defaults: +! ALLDATE%FIELD%START = '19680606 000000' +! ALLDATE%FIELD%STRIDE = '0' +! ALLDATE%FIELD%STOP = '19680607 000000' +! ALLDATE%POINT%START = '19680606 000000' +! ALLDATE%POINT%STRIDE = '0' +! ALLDATE%POINT%STOP = '19680607 000000' +! ALLDATE%TRACK%START = '19680606 000000' +! ALLDATE%TRACK%STRIDE = '0' +! ALLDATE%TRACK%STOP = '19680607 000000' +! ALLDATE%RESTART%START = '19680606 000000' +! ALLDATE%RESTART%STRIDE = '0' +! ALLDATE%RESTART%STOP = '19680607 000000' +! ALLDATE%RESTART2%START = '19680606 000000' +! ALLDATE%RESTART2%STRIDE = '0' +! ALLDATE%RESTART2%STOP = '19680607 000000' +! ALLDATE%BOUNDARY%START = '19680606 000000' +! ALLDATE%BOUNDARY%STRIDE = '0' +! ALLDATE%BOUNDARY%STOP = '19680607 000000' +! ALLDATE%PARTITION%START = '19680606 000000' +! ALLDATE%PARTITION%STRIDE = '0' +! ALLDATE%PARTITION%STOP = '19680607 000000' +! +! ALLDATE%RESTART = '19680606 000000' '0' '19680607 000000' +! +! IDATE(3)%PARTITION%START = '19680606 000000' +! ALLDATE%RESTART2 = '19680606 000000' '86400' '19680608 000000' +! -------------------------------------------------------------------- ! +&OUTPUT_DATE_NML + ALLDATE%FIELD = '19680606 000000' '3600' '19680608 000000' + ALLDATE%POINT = '19680606 000000' '3600' '19680608 000000' + ALLDATE%RESTART = '19680606 060000' '21600' '19680606 060000' + ALLDATE%RESTART2 = '19680606 000000' '86400' '19680608 000000' +/ + +! -------------------------------------------------------------------- ! +! 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 only be MOV +! * each homogeneous input is defined over a maximum of 3 values detailled below : +! - MOV is defined by speed and direction +! +! * namelist must be terminated with / +! * definitions & defaults: +! 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 45d1e493cdd44ee264102ef18054d741d3eeb5b0 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Sun, 5 Jan 2020 17:04:53 +0000 Subject: [PATCH 34/49] Corrected MPI bug for second restart file cycling: expanded size of FLGMPI and MPI_BCAST calls, added missing MPI_STARTALL/WAITALL blocks. --- model/ftn/w3initmd.ftn | 3 ++- model/ftn/w3iorsmd.ftn | 3 ++- model/ftn/w3wavemd.ftn | 21 +++++++++++++++++---- model/ftn/wminitmd.ftn | 23 ++++++++++------------- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 481b196b32..a97fec188d 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -215,6 +215,7 @@ ! 16-20 Id. for OTYPE = 4; restart files. ! 21-25 Id. for OTYPE = 5; boundary data. ! 31-35 Id. for OTYPE = 7; coupling data. +! 36-40 Id. for OTYPE = 8; second restart file ! FLGRD L.A. I Flags for gridded output. ! FLGR2 L.A. I Flags for coupling output. ! NPT Int. I Number of output points @@ -390,7 +391,7 @@ !/ Parameter list !/ INTEGER, INTENT(IN) :: IMOD, MDS(13), MTRACE(2), & - ODAT(35),NPT, IPRT(6),& + ODAT(40),NPT, IPRT(6),& MPI_COMM LOGICAL, INTENT(IN) :: IsMulti REAL, INTENT(INOUT) :: XPT(NPT), YPT(NPT) diff --git a/model/ftn/w3iorsmd.ftn b/model/ftn/w3iorsmd.ftn index ddcbf0ddd7..f8fe6ae3c8 100644 --- a/model/ftn/w3iorsmd.ftn +++ b/model/ftn/w3iorsmd.ftn @@ -251,7 +251,8 @@ !/WRST USE W3IDATMD, ONLY: WXNwrst, WYNwrst USE W3ODATMD, ONLY: NDSE, NDST, IAPROC, NAPROC, NAPERR, NAPRST, & IFILE => IFILE4, FNMPRE, NTPROC, IOSTYP -!/MPI USE W3ODATMD, ONLY: NRQRS, NBLKRS, RSBLKS, IRQRS, IRQRSS, VAAUX +!/MPI USE W3ODATMD, ONLY: NRQRS, NBLKRS, RSBLKS, IRQRS, IRQRSS, & +!/MPI VAAUX !/MPI USE W3ADATMD, ONLY: MPI_COMM_WCMP !/ USE W3SERVMD, ONLY: EXTCDE diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index fa2bb0d109..7fd1c28741 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -462,13 +462,13 @@ !AR SMC option is in conflict with lofical variables for regular grid ... chicken ... egg ... stuff LOGICAL :: RGLGRD = .TRUE., ARCTIC = .FALSE. !!Li -!/MPI LOGICAL :: FLGMPI(0:6) +!/MPI LOGICAL :: FLGMPI(0:8) !/IC3 REAL :: FIXEDVISC,FIXEDDENS,FIXEDELAS !/IC3 REAL :: USE_CHENG, USE_CGICE, HICE LOGICAL :: UGDTUPDATE ! true if time step should be updated for UG schemes CHARACTER(LEN=8) :: STTIME CHARACTER(LEN=17) :: IDACT - CHARACTER(LEN=13) :: OUTID + CHARACTER(LEN=15) :: OUTID CHARACTER(LEN=23) :: IDTIME INTEGER eIOBP INTEGER ITH_F @@ -557,7 +557,7 @@ ! IPASS = IPASS + 1 IDACT = ' ' - OUTID = ' ' + OUTID = ' ' FLACT = ITIME .EQ. 0 FLMAP = ITIME .EQ. 0 FLDDIR = ITIME .EQ. 0 .AND. ( FLCTH .OR. FSREFRACTION & @@ -2293,6 +2293,17 @@ !/MPI END IF !/MPI END IF ! +! !/DEBUGRUN WRITE(740+IAPROC,*) 'After DO_OUTPUT_EXCHANGES, step 2' +! !/DEBUGRUN FLUSH(740+IAPROC) +! !/MPI IF ( FLOUT(8) .AND. NRQRS.NE.0 ) THEN +! !/MPI IF ( DSEC21(TIME,TONEXT(:,8)).EQ.0. ) THEN +! !/MPI CALL MPI_STARTALL ( NRQRS, IRQRS , IERR_MPI ) +! !/MPI FLGMPI(8) = .TRUE. +! !/MPI NRQMAX = MAX ( NRQMAX , NRQRS ) +! !/MPIT WRITE (NDST,9043) '8 ', NRQRS, NRQMAX, NAPRST +! !/MPI END IF +! !/MPI END IF +! !/DEBUGRUN WRITE(740+IAPROC,*) 'After DO_OUTPUT_EXCHANGES, step 3' !/DEBUGRUN FLUSH(740+IAPROC) !/MPI IF ( FLOUT(5) .AND. NRQBP.NE.0 ) THEN @@ -2514,6 +2525,8 @@ !/MPI ( NRQPO, IRQPO1, STATIO, IERR_MPI ) !/MPI IF ( FLGMPI(4) ) CALL MPI_WAITALL & !/MPI ( NRQRS, IRQRS , STATIO, IERR_MPI ) +!/MPI IF ( FLGMPI(8) ) CALL MPI_WAITALL & +!/MPI ( NRQRS2, IRQRS2 , STATIO, IERR_MPI ) !/MPI IF ( FLGMPI(5) ) CALL MPI_WAITALL & !/MPI ( NRQBP, IRQBP1, STATIO, IERR_MPI ) !/MPI IF ( NRQMAX .NE. 0 ) DEALLOCATE ( STATIO ) @@ -2569,7 +2582,7 @@ END IF ! IDACT = ' ' - OUTID = ' ' + OUTID = ' ' FLACT = .FALSE. ! ! 6. If time is not ending time, branch back to 2 ------------------- / diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index 57c6b1361a..c190346e1f 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -2458,13 +2458,13 @@ !/MPI CALL MPI_BCAST ( NBI , 1, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) ! -!/MPI CALL MPI_BCAST ( FLOUT, 7, MPI_LOGICAL, 0, & +!/MPI CALL MPI_BCAST ( FLOUT, 8, MPI_LOGICAL, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( DTOUT , 7, MPI_REAL, 0, & +!/MPI CALL MPI_BCAST ( DTOUT , 8, MPI_REAL, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( TONEXT,14, MPI_INTEGER, 0, & +!/MPI CALL MPI_BCAST ( TONEXT,16, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( TOLAST,14, MPI_INTEGER, 0, & +!/MPI CALL MPI_BCAST ( TOLAST,16, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) ! !/MPI END IF @@ -4658,12 +4658,9 @@ IF ( ODAT( 3,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( ODAT(13,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 IF ( ODAT(28,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 -!xxx -! Checkpoint - IF ( ODAT(38,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 -!xxx IF ( ODAT( 8,I) .GT. 0 .OR. ODAT(18,I) .GT. 0 .OR. & - ODAT(23,I) .GT. 0 ) NDPOUT(I) = NDPOUT(I) + 1 + ODAT(23,I) .GT. 0 ) & + NDPOUT(I) = NDPOUT(I) + 1 IF ( IOSTYP .EQ. 2 ) NDPOUT(I) = MIN ( 1 , NDPOUT(I) ) END DO END IF @@ -5344,13 +5341,13 @@ !/MPI CALL MPI_BCAST ( NBI , 1, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) ! -!/MPI CALL MPI_BCAST ( FLOUT, 7, MPI_LOGICAL, 0, & +!/MPI CALL MPI_BCAST ( FLOUT, 8, MPI_LOGICAL, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( DTOUT , 7, MPI_REAL, 0, & +!/MPI CALL MPI_BCAST ( DTOUT , 8, MPI_REAL, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( TONEXT,14, MPI_INTEGER, 0, & +!/MPI CALL MPI_BCAST ( TONEXT,16, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) -!/MPI CALL MPI_BCAST ( TOLAST,14, MPI_INTEGER, 0, & +!/MPI CALL MPI_BCAST ( TOLAST,16, MPI_INTEGER, 0, & !/MPI MPI_COMM_BCT, IERR_MPI ) ! !/MPI END IF From 1895f14273fe24a353d946c2dd513041c0e96cbc Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Sun, 5 Jan 2020 18:25:41 +0000 Subject: [PATCH 35/49] Eliminating leftover NRQRS2, IRQRS2 --- model/ftn/w3wavemd.ftn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 7fd1c28741..0e39a92b8e 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -2526,7 +2526,7 @@ !/MPI IF ( FLGMPI(4) ) CALL MPI_WAITALL & !/MPI ( NRQRS, IRQRS , STATIO, IERR_MPI ) !/MPI IF ( FLGMPI(8) ) CALL MPI_WAITALL & -!/MPI ( NRQRS2, IRQRS2 , STATIO, IERR_MPI ) +!/MPI ( NRQRS, IRQRS , STATIO, IERR_MPI ) !/MPI IF ( FLGMPI(5) ) CALL MPI_WAITALL & !/MPI ( NRQBP, IRQBP1, STATIO, IERR_MPI ) !/MPI IF ( NRQMAX .NE. 0 ) DEALLOCATE ( STATIO ) From e7f9bb2f4d77fa2b6bf06ea29e85c57e953cd83d Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Mon, 6 Jan 2020 14:51:13 +0000 Subject: [PATCH 36/49] Adding FLOUT(8) to MPI array allocation: this additional output is now not an actual output type but an add-on to output type 4. --- model/ftn/w3initmd.ftn | 2 +- model/ftn/w3wavemd.ftn | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index a97fec188d..9608360581 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -3660,7 +3660,7 @@ !/MPI IH = 0 !/MPI IROOT = NAPRST - 1 ! -!/MPI IF ( FLOUT(4) ) THEN +!/MPI IF ( FLOUT(4) .OR. FLOUT(8) ) THEN !/MPI ALLOCATE ( OUTPTS(IMOD)%OUT4%IRQRS(3*NAPROC) ) !/MPI IRQRS => OUTPTS(IMOD)%OUT4%IRQRS ! diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 0e39a92b8e..ff90c460fd 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -2293,16 +2293,16 @@ !/MPI END IF !/MPI END IF ! -! !/DEBUGRUN WRITE(740+IAPROC,*) 'After DO_OUTPUT_EXCHANGES, step 2' -! !/DEBUGRUN FLUSH(740+IAPROC) -! !/MPI IF ( FLOUT(8) .AND. NRQRS.NE.0 ) THEN -! !/MPI IF ( DSEC21(TIME,TONEXT(:,8)).EQ.0. ) THEN -! !/MPI CALL MPI_STARTALL ( NRQRS, IRQRS , IERR_MPI ) -! !/MPI FLGMPI(8) = .TRUE. -! !/MPI NRQMAX = MAX ( NRQMAX , NRQRS ) -! !/MPIT WRITE (NDST,9043) '8 ', NRQRS, NRQMAX, NAPRST -! !/MPI END IF -! !/MPI END IF +!/DEBUGRUN WRITE(740+IAPROC,*) 'After DO_OUTPUT_EXCHANGES, step 2' +!/DEBUGRUN FLUSH(740+IAPROC) +!/MPI IF ( FLOUT(8) .AND. NRQRS.NE.0 ) THEN +!/MPI IF ( DSEC21(TIME,TONEXT(:,8)).EQ.0. ) THEN +!/MPI CALL MPI_STARTALL ( NRQRS, IRQRS , IERR_MPI ) +!/MPI FLGMPI(8) = .TRUE. +!/MPI NRQMAX = MAX ( NRQMAX , NRQRS ) +!/MPIT WRITE (NDST,9043) '8 ', NRQRS, NRQMAX, NAPRST +!/MPI END IF +!/MPI END IF ! !/DEBUGRUN WRITE(740+IAPROC,*) 'After DO_OUTPUT_EXCHANGES, step 3' !/DEBUGRUN FLUSH(740+IAPROC) From e65115945fb525787842694e2ee1e96d66477cf2 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Wed, 8 Jan 2020 15:41:01 +0000 Subject: [PATCH 37/49] Changes to comp/link flags to attempt b4b replicating results from cmplr.env intel option (which are b4b). Adjustments to w3wavemd to correct log file column width changed by mistake. --- model/bin/comp.wcoss_dell_p3 | 10 +--------- model/bin/link.wcoss_dell_p3 | 11 +++-------- model/bin/switch_NCEP_gwm | 3 ++- model/ftn/w3wavemd.ftn | 4 ++-- 4 files changed, 8 insertions(+), 20 deletions(-) diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 index 604568a1fb..f9a47b278a 100755 --- a/model/bin/comp.wcoss_dell_p3 +++ b/model/bin/comp.wcoss_dell_p3 @@ -80,17 +80,9 @@ # opt="-c $list -O3 -assume byterecl -ip -module $path_m" -opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -fno-fnalias -sox" -opt="$opt -xHOST -qno-opt-dynamic-align -auto -nowarn -align array64byte -Wp,-w" + opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -sox -xhost -O3 -p" # Add profiling # opt="$opt -p" -### opt="-c $list -O2 -Wp,-w -fno-alias -auto -ftz -assume byterecl -nowarn -sox -align array64byte" -### opt="$opt -xHOST -qno-opt-dynamic-align -fp-model source -ip -module $path_m" -## opt="$opt -nowarn -sox -align array64byte -real-size 32 -xHOST -qno-opt-dynamic-align" -## opt="$opt -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3" -# opt="-c $list -O3 -assume byterecl -xSSE4.2 -ip -module $path_m" -# opt="-c $list -O3 -assume byterecl -prec-div -prec-sqrt -xHost -align array128byte -ip -module $path_m" -# opt="-c $list -O0 -assume byterecl -g -traceback -check all -fpe0 -ftrapuv -module $path_m" if [ "$name" != 'ww3_gspl' ] then diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 index 16aa631d81..76a5132a5f 100755 --- a/model/bin/link.wcoss_dell_p3 +++ b/model/bin/link.wcoss_dell_p3 @@ -86,17 +86,12 @@ # linking options libs="" -# opt="-O2 -ip -o $prog" -opt="-o $prog -g" -opt="$opt -xhost" + + opt="-o $prog -g -xhost -O3 -p" + # Add profiling # opt="$opt -p" -# opt="-O3 -ip -o $prog" -# opt="-O3 -xSSE4.2 -ip -o $prog" -# opt="-O3 -prec-div -prec-sqrt -xHost -align array128byte -ip -o $prog" -# opt="-O0 -g -traceback -check all -fpe0 -ftrapuv -o $prog" - # mpi implementation if [ "$mpi_mod" = 'yes' ] then diff --git a/model/bin/switch_NCEP_gwm b/model/bin/switch_NCEP_gwm index 402cc54a13..350fb6f708 100755 --- a/model/bin/switch_NCEP_gwm +++ b/model/bin/switch_NCEP_gwm @@ -1 +1,2 @@ -F90 NCO NOPA LRB4 NOGRB DIST MPI OMPH OMPG SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC4 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 +F90 NCO NOPA LRB4 NOGRB SHRD SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC0 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 +# F90 NCO NOPA LRB4 NOGRB DIST MPI OMPH OMPG SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC0 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index ff90c460fd..29e2f19a5b 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -410,7 +410,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ - INTEGER, INTENT(IN) :: IMOD, TEND(2),ODAT(35) + INTEGER, INTENT(IN) :: IMOD, TEND(2),ODAT(40) LOGICAL, INTENT(IN), OPTIONAL :: STAMP, NO_OUT !/OASIS INTEGER, INTENT(IN), OPTIONAL :: ID_LCOMM !/ @@ -557,7 +557,7 @@ ! IPASS = IPASS + 1 IDACT = ' ' - OUTID = ' ' + OUTID = ' ' FLACT = ITIME .EQ. 0 FLMAP = ITIME .EQ. 0 FLDDIR = ITIME .EQ. 0 .AND. ( FLCTH .OR. FSREFRACTION & From 5b0057cb37592d3807896594a9b23159af6560fe Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Wed, 8 Jan 2020 15:57:10 +0000 Subject: [PATCH 38/49] Changing back ODAT size to 35 as this was mistakenly changed to 40 and caused compile error in the coupled system. --- model/ftn/w3wavemd.ftn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index 29e2f19a5b..b6361f0dd7 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -410,7 +410,7 @@ !/ ------------------------------------------------------------------- / !/ Parameter list !/ - INTEGER, INTENT(IN) :: IMOD, TEND(2),ODAT(40) + INTEGER, INTENT(IN) :: IMOD, TEND(2),ODAT(35) LOGICAL, INTENT(IN), OPTIONAL :: STAMP, NO_OUT !/OASIS INTEGER, INTENT(IN), OPTIONAL :: ID_LCOMM !/ From ba922c322c17ddbd79c9e155ebffd8efde6d1831 Mon Sep 17 00:00:00 2001 From: RobertoPadilla-NOAA <49441900+RobertoPadilla-NOAA@users.noreply.github.com> Date: Thu, 9 Jan 2020 06:35:53 -0500 Subject: [PATCH 39/49] Bugfix to second restart file generation Issue with infinite loop reading individual grid output settings in multi.inp solved (#138) --- model/ftn/wminitmd.ftn | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/model/ftn/wminitmd.ftn b/model/ftn/wminitmd.ftn index ea50bfd5fa..3360ee843d 100644 --- a/model/ftn/wminitmd.ftn +++ b/model/ftn/wminitmd.ftn @@ -1121,7 +1121,7 @@ IF(J .LE. 2) THEN READ (MDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS -! +! IF(J .LE. 1) THEN READ(WORDS( 1 ), * ) ODAT(1,1) READ(WORDS( 2 ), * ) ODAT(2,1) @@ -1447,35 +1447,35 @@ ! CALL NEXTLN ( COMSTR , MDSI , MDSE2 ) IF(J .LE. 2) THEN + OUTFF(J,I)=0 + WORDS(6) ='' READ (MDSI,'(A)') LINEIN READ(LINEIN,*,iostat=ierr) WORDS -! - IF(J .LE. 1) THEN - READ(WORDS( 1 ), * ) ODAT(1,1) - READ(WORDS( 2 ), * ) ODAT(2,1) - READ(WORDS( 3 ), * ) ODAT(3,1) - READ(WORDS( 4 ), * ) ODAT(4,1) - READ(WORDS( 5 ), * ) ODAT(5,1) + IF(J .EQ. 1) THEN + READ(WORDS( 1 ), * ) ODAT(1,I) + READ(WORDS( 2 ), * ) ODAT(2,I) + READ(WORDS( 3 ), * ) ODAT(3,I) + READ(WORDS( 4 ), * ) ODAT(4,I) + READ(WORDS( 5 ), * ) ODAT(5,I) ELSE - READ(WORDS( 1 ), * ) ODAT(6,1) - READ(WORDS( 2 ), * ) ODAT(7,1) - READ(WORDS( 3 ), * ) ODAT(8,1) - READ(WORDS( 4 ), * ) ODAT(9,1) - READ(WORDS( 5 ), * ) ODAT(10,1) + READ(WORDS( 1 ), * ) ODAT(6,I) + READ(WORDS( 2 ), * ) ODAT(7,I) + READ(WORDS( 3 ), * ) ODAT(8,I) + READ(WORDS( 4 ), * ) ODAT(9,I) + READ(WORDS( 5 ), * ) ODAT(10,I) END IF - IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN - OUTFF(J,1)=0 + OUTFF(J,I)=0 ELSE - READ(WORDS( 6 ), * ) OUTFF(J,1) + READ(WORDS( 6 ), * ) OUTFF(J,I) END IF ! ELSE - READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,1),II=5*(J-1)+1,5*J) - OUTFF(J,1) = 0 + READ (MDSI,*,END=2001,ERR=2002)(ODAT(II,I),II=5*(J-1)+1,5*J) + OUTFF(J,I) = 0 END IF ! - OUTPTS(1)%OFILES(J)=OUTFF(J,1) + OUTPTS(I)%OFILES(J)=OUTFF(J,I) ! ODAT(5*(J-1)+3,I) = MAX ( 0 , ODAT(5*(J-1)+3,I) ) ! @@ -2662,7 +2662,7 @@ OUTPTS(0)%TOLAST(1,2) = ODAT( 9,0) OUTPTS(0)%TOLAST(2,2) = ODAT(10,0) OUTPTS(0)%OFILES(1) = OUTFF(1,1) - OUTPTS(0)%OFILES(2) = OUTFF(1,2) + OUTPTS(0)%OFILES(2) = OUTFF(2,1) ! TOUT = OUTPTS(0)%TONEXT(:,2) TLST = OUTPTS(0)%TOLAST(:,2) From f2b739c555a35af496649cb4b6bbd224a00df989 Mon Sep 17 00:00:00 2001 From: "henrique.alves" Date: Thu, 9 Jan 2020 13:48:47 +0000 Subject: [PATCH 40/49] Changing shel.inp to previous version: testing of new inline output should not be active in this regtest (only in mww3_test_04) --- regtests/ww3_tp1.1/input/ww3_shel.inp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regtests/ww3_tp1.1/input/ww3_shel.inp b/regtests/ww3_tp1.1/input/ww3_shel.inp index 02cc111e28..0f7f488b06 100644 --- a/regtests/ww3_tp1.1/input/ww3_shel.inp +++ b/regtests/ww3_tp1.1/input/ww3_shel.inp @@ -13,12 +13,12 @@ $ $ 1 $ - 19680600 000000 86400 19680625 000000 1 + 19680600 000000 86400 19680625 000000 $ N HS $ - 19680600 000000 86400 19680625 000000 1 + 19680600 000000 86400 19680625 000000 -10.0 0.0 'Point_-10' -9.0 0.0 'Point_-9' -8.0 0.0 'Point_-8' From d6bc44bd7f03617758af75b79ae07e00dca58844 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Fri, 10 Jan 2020 19:35:07 +0000 Subject: [PATCH 41/49] Changing optimization level to avoid memalloc crash in coupled system at NCEP wcoss dell. --- model/bin/comp.wcoss_dell_p3 | 2 +- model/bin/link.wcoss_dell_p3 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 index f9a47b278a..f4f72f63d7 100755 --- a/model/bin/comp.wcoss_dell_p3 +++ b/model/bin/comp.wcoss_dell_p3 @@ -80,7 +80,7 @@ # opt="-c $list -O3 -assume byterecl -ip -module $path_m" - opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -sox -xhost -O3 -p" + opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -sox -xhost -O2 -p" # Add profiling # opt="$opt -p" diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 index 76a5132a5f..c639f4bbad 100755 --- a/model/bin/link.wcoss_dell_p3 +++ b/model/bin/link.wcoss_dell_p3 @@ -87,7 +87,7 @@ # linking options libs="" - opt="-o $prog -g -xhost -O3 -p" + opt="-o $prog -g -xhost -O2 -p" # Add profiling # opt="$opt -p" From 97dd0e3025747b531ede049667e567728f102fb0 Mon Sep 17 00:00:00 2001 From: "henrique.alves" Date: Fri, 10 Jan 2020 19:55:18 +0000 Subject: [PATCH 42/49] Cleaning up unnecessary messages, removing lower FP bound constraint, reinstating log.mww3 column width as new restart stream will be reported jointly with first restart file productio. --- model/ftn/w3iogomd.ftn | 2 +- model/ftn/w3wavemd.ftn | 6 +++--- model/ftn/ww3_shel.ftn | 3 --- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index c4c889a291..b7e8c04eb4 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2934,7 +2934,7 @@ ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 5 ) THEN WRITE ( NDSOG ) T01(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 6 ) THEN - WRITE ( NDSOG ) MAX(FR1,FP0(1:NSEA)) + WRITE ( NDSOG ) FP0(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 7 ) THEN WRITE ( NDSOG ) THM(1:NSEA) ELSE IF ( IFI .EQ. 2 .AND. IFJ .EQ. 8 ) THEN diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index b6361f0dd7..e100382d07 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -468,7 +468,7 @@ LOGICAL :: UGDTUPDATE ! true if time step should be updated for UG schemes CHARACTER(LEN=8) :: STTIME CHARACTER(LEN=17) :: IDACT - CHARACTER(LEN=15) :: OUTID + CHARACTER(LEN=13) :: OUTID CHARACTER(LEN=23) :: IDTIME INTEGER eIOBP INTEGER ITH_F @@ -557,7 +557,7 @@ ! IPASS = IPASS + 1 IDACT = ' ' - OUTID = ' ' + OUTID = ' ' FLACT = ITIME .EQ. 0 FLMAP = ITIME .EQ. 0 FLDDIR = ITIME .EQ. 0 .AND. ( FLCTH .OR. FSREFRACTION & @@ -2582,7 +2582,7 @@ END IF ! IDACT = ' ' - OUTID = ' ' + OUTID = ' ' FLACT = .FALSE. ! ! 6. If time is not ending time, branch back to 2 ------------------- / diff --git a/model/ftn/ww3_shel.ftn b/model/ftn/ww3_shel.ftn index 8565305fd1..c8ab524d84 100644 --- a/model/ftn/ww3_shel.ftn +++ b/model/ftn/ww3_shel.ftn @@ -1203,7 +1203,6 @@ IF(J .EQ. 4) THEN ODAT(38)=0 READ (NDSI,'(A)') LINEIN - WRITE(*,*) 'LINEIN: ',LINEIN READ(LINEIN,*,iostat=ierr) WORDS READ(WORDS( 1 ), * ) ODAT(16) READ(WORDS( 2 ), * ) ODAT(17) @@ -1243,10 +1242,8 @@ IF (WORDS(6) .NE. '0' .AND. WORDS(6) .NE. '1') THEN OFILES(J)=0 - print*,' Number of data: ', 5 ELSE READ(WORDS( 6 ), * ) OFILES(J) - print*,' Number of data: ', 6 END IF From 1b18c422809241d51090ac97dd99e61de7e169f8 Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Fri, 10 Jan 2020 17:10:53 -0500 Subject: [PATCH 43/49] Update switch_NCEP_gwm --- model/bin/switch_NCEP_gwm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/model/bin/switch_NCEP_gwm b/model/bin/switch_NCEP_gwm index 350fb6f708..2f3effce6a 100755 --- a/model/bin/switch_NCEP_gwm +++ b/model/bin/switch_NCEP_gwm @@ -1,2 +1 @@ -F90 NCO NOPA LRB4 NOGRB SHRD SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC0 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 -# F90 NCO NOPA LRB4 NOGRB DIST MPI OMPH OMPG SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC0 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 +F90 NCO NOPA NOGRB SHRD SCRIP SCRIPNC NC4 PR3 UQ ST4 STAB0 FLX0 LN1 NL1 BT1 DB1 IC0 IS0 REF0 TR0 BS0 XX0 WNX1 WNT1 CRX1 CRT1 RWND O0 O1 O2 O4 O5 O6 O7 O14 O15 From 027aba2bc1fb7a8a84bcc6b6f1269b0826298faf Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Fri, 10 Jan 2020 17:16:06 -0500 Subject: [PATCH 44/49] Update w3initmd.ftn --- model/ftn/w3initmd.ftn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/model/ftn/w3initmd.ftn b/model/ftn/w3initmd.ftn index 9608360581..81cd23cf61 100644 --- a/model/ftn/w3initmd.ftn +++ b/model/ftn/w3initmd.ftn @@ -958,7 +958,7 @@ TOLAST(2,J) = ODAT(J0+5) END DO ! -! CKECKPOINT J=8, for second stream of restart files +! J=8, second stream of restart files J=8 J0 = (J-1)*5 IF(ODAT(J0+1) .NE. 0) THEN @@ -1078,7 +1078,7 @@ ! END DO ! -! FOR CHECKPOINT (J=8): Second stream of restart files +! J=8, second stream of restart files ! J=8 ! From 56f889f2f50a92addca323083311608595e1001e Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Fri, 10 Jan 2020 17:17:03 -0500 Subject: [PATCH 45/49] Update w3iogomd.ftn --- model/ftn/w3iogomd.ftn | 1 - 1 file changed, 1 deletion(-) diff --git a/model/ftn/w3iogomd.ftn b/model/ftn/w3iogomd.ftn index b7e8c04eb4..6e04ada229 100644 --- a/model/ftn/w3iogomd.ftn +++ b/model/ftn/w3iogomd.ftn @@ -2541,7 +2541,6 @@ CALL EXTCDE ( 1 ) END IF ! -!INLINE IF ( IPASS.EQ.1 ) THEN IF ( IPASS.EQ.1 .AND. OFILES(1) .EQ. 0) THEN WRITE = INXOUT.EQ.'WRITE' ELSE From 3e600b46245052a6c38896d1f3a6f1f6df20774d Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Fri, 10 Jan 2020 17:20:29 -0500 Subject: [PATCH 46/49] Update w3wavemd.ftn --- model/ftn/w3wavemd.ftn | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/model/ftn/w3wavemd.ftn b/model/ftn/w3wavemd.ftn index e100382d07..92783b73d7 100644 --- a/model/ftn/w3wavemd.ftn +++ b/model/ftn/w3wavemd.ftn @@ -2469,8 +2469,7 @@ END DO -!/ CHECKPOINT -!/ IF THERE IS A SECOND STREAM OF RESTART FILES THEN J=8 AND FLOUT(8)=.TRUE. +! If there is a second stream of restart files then J=8 and FLOUT(8)=.TRUE. J=8 IF ( FLOUT(J) ) THEN ! From dfcf146c504f275ac0d76fb1a145fcf118d8467e Mon Sep 17 00:00:00 2001 From: Jose-Henrique Alves <47567389+ajhenrique@users.noreply.github.com> Date: Fri, 10 Jan 2020 17:24:16 -0500 Subject: [PATCH 47/49] Update wmesmfmd.ftn Reinstated error block for time checking in subroutine ModelAdvance --- model/ftn/wmesmfmd.ftn | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index 57eb056746..c164440b24 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -1937,26 +1937,25 @@ if (ESMF_LogFoundError(rc, PASSTHRU)) return call ESMF_TimeGet(currTime, yy=yy,mm=mm,dd=dd,h=h,m=m,s=s, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return -! lerr=.false. + lerr=.false. do imod = 1,nrgrd tcur(1) = 10000*yy + 100*mm + dd tcur(2) = 10000*h + 100*m + s call w3setw ( imod, mdse, mdst ) delt = dsec21 ( time, tcur ) if ( abs(delt).gt.0 ) then -! lerr=.true. + lerr=.true. write(msg,'(a,i2,a,2(a,i8,a,i8,a))') & 'Wave model grid ',imod,': ', & 'Internal time (',time(1),'.',time(2),') /= ', & 'Component time (',tcur(1),'.',tcur(2),')' -! call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_ERROR) - call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_WARNING) + call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_ERROR) endif enddo -! if (lerr) then -! rc = ESMF_FAILURE -! return -! endif + if (lerr) then + rc = ESMF_FAILURE + return + endif ! ! 1.d Set end time of this advance ! From b1d780b6e7359a95ddac95d2f66ce74dbe8840c3 Mon Sep 17 00:00:00 2001 From: Henrique Alves Date: Sun, 12 Jan 2020 18:31:27 +0000 Subject: [PATCH 48/49] Uploading changes to wmesmfmd and updating comp/link options for Dell --- model/bin/comp.wcoss_dell_p3 | 2 +- model/bin/link.wcoss_dell_p3 | 2 +- model/ftn/wmesmfmd.ftn | 14 +++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/model/bin/comp.wcoss_dell_p3 b/model/bin/comp.wcoss_dell_p3 index f4f72f63d7..15fe28f112 100755 --- a/model/bin/comp.wcoss_dell_p3 +++ b/model/bin/comp.wcoss_dell_p3 @@ -80,7 +80,7 @@ # opt="-c $list -O3 -assume byterecl -ip -module $path_m" - opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -sox -xhost -O2 -p" + opt="-c $list -module $path_m -no-fma -ip -g -i4 -real-size 32 -fp-model precise -assume byterecl -convert big_endian -fno-alias -sox -xhost -O2" # Add profiling # opt="$opt -p" diff --git a/model/bin/link.wcoss_dell_p3 b/model/bin/link.wcoss_dell_p3 index c639f4bbad..25aa081aff 100755 --- a/model/bin/link.wcoss_dell_p3 +++ b/model/bin/link.wcoss_dell_p3 @@ -87,7 +87,7 @@ # linking options libs="" - opt="-o $prog -g -xhost -O2 -p" + opt="-o $prog -g -xhost -O2" # Add profiling # opt="$opt -p" diff --git a/model/ftn/wmesmfmd.ftn b/model/ftn/wmesmfmd.ftn index c164440b24..a072a3cd19 100644 --- a/model/ftn/wmesmfmd.ftn +++ b/model/ftn/wmesmfmd.ftn @@ -635,7 +635,7 @@ logical :: lsep_se = .true. character(ESMF_MAXSTR) :: attstr integer(ESMF_KIND_I4) :: yy,mm,dd,h,m,s - type(ESMF_Time) :: ttmp + type(ESMF_Time) :: ttmp, cttmp type(ESMF_TimeInterval) :: tstep, etstep integer :: i, j, n, istep, imod, jmod integer, allocatable :: cplmap(:,:) @@ -752,10 +752,14 @@ ! 1.e Set internal start/stop time from external start/stop time ! -! call ESMF_ClockGet(extClock, startTime=ttmp, rc=rc) -! if (ESMF_LogFoundError(rc, PASSTHRU)) return - call ESMF_ClockGet(extClock, currTime=ttmp, rc=rc) + call ESMF_ClockGet(extClock, startTime=ttmp, rc=rc) + if (ESMF_LogFoundError(rc, PASSTHRU)) return + call ESMF_ClockGet(extClock, currTime=cttmp, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return +! +! Adjust internal start time to currTime in case of delayed start +! + if ( cttmp.gt.ttmp ) ttmp=cttmp call ESMF_TimeGet(ttmp, yy=yy,mm=mm,dd=dd,h=h,m=m,s=s, rc=rc) if (ESMF_LogFoundError(rc, PASSTHRU)) return stime(1) = 10000*yy + 100*mm + dd @@ -1898,7 +1902,7 @@ type(ESMF_Clock) :: clock type(ESMF_Time) :: currTime, stopTime real :: delt -! logical :: lerr + logical :: lerr ! ! -------------------------------------------------------------------- / ! Prep From 081a8c7d2c2c5b7e1c6cdd04d4ce5ac6ec570cce Mon Sep 17 00:00:00 2001 From: "henrique.alves" Date: Mon, 13 Jan 2020 03:41:18 +0000 Subject: [PATCH 49/49] Expanding info file to provide examples on how to run regtests with new features output files at every output time step and second stream of restart files. --- regtests/mww3_test_06/info | 10 +- .../mww3_test_06/input/ww3_grid_points.inp | 29 +++ .../mww3_test_06/input/ww3_grid_points.nml | 226 ++++++++++++++++++ 3 files changed, 263 insertions(+), 2 deletions(-) create mode 100644 regtests/mww3_test_06/input/ww3_grid_points.inp create mode 100644 regtests/mww3_test_06/input/ww3_grid_points.nml diff --git a/regtests/mww3_test_06/info b/regtests/mww3_test_06/info index 2d5b94604c..254671b943 100644 --- a/regtests/mww3_test_06/info +++ b/regtests/mww3_test_06/info @@ -30,8 +30,8 @@ # + Spectral grid: ntheta = 12, nf = 3, f1 = 0.0368, fgamma = 1.10 # # # # * Grid sets available : # -# + grdset_d : gbandd360 arcticsub # -# + grdset_d_h : gbandd360 arcticsub with hourly binary output # +# + grdset_d : gbandd360 arcticsub # +# + grdset_d_h : gbandd360 arcticsub with hourly binary output # # + grdset_d_r : gbandd360 arcticsub with check point output # # # # - switch options (mostly self-explanatory). # @@ -70,6 +70,12 @@ # ./bin/run_test -m grdset_d_r -n 3 -p mpirun -s PR3_UQ_SCRIP\ # # ../model mww3_test_06 # # # +# For testing output file generation per output time step use: # +# ./bin/run_test -m grdset_d_h -s PR3_UQ_SCRIP ../model mww3_test_06 # +# # +# For testing generation of second stream of restart files use: # +# ./bin/run_test -m grdset_d_r -s PR3_UQ_SCRIP ../model mww3_test_06 # +# # # Erick Rogers, Nov 2013 # # Roberto Padilla, Jan 2019 # # # diff --git a/regtests/mww3_test_06/input/ww3_grid_points.inp b/regtests/mww3_test_06/input/ww3_grid_points.inp new file mode 100644 index 0000000000..4e2037ddee --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_grid_points.inp @@ -0,0 +1,29 @@ +$ WAVEWATCH III Grid preprocessor input file +$ ------------------------------------------ + 'Point output mww3_test_04 ' +$ + 1.03 0.075 20 24 0. +$ + F T T T T F + 720. 720. 720. 15. +$ +END OF NAMELISTS +$ + 'RECT' T 'NONE' + 3 3 + 5.E3 5.E3 1. + -5.E3 -5.E3 1. +$ + -0.1 0.25 10 -100. 3 1 '(....)' 'UNIT' 'dummy' +$ + 1 1 1 + 1 1 1 + 1 1 1 +$ + 10 3 1 '(....)' 'PART' 'dummy' + 0 0 F + 0 0 F + 0 0 +$ + 0. 0. 0. 0. 0 +$ diff --git a/regtests/mww3_test_06/input/ww3_grid_points.nml b/regtests/mww3_test_06/input/ww3_grid_points.nml new file mode 100644 index 0000000000..d9f307d817 --- /dev/null +++ b/regtests/mww3_test_06/input/ww3_grid_points.nml @@ -0,0 +1,226 @@ +! -------------------------------------------------------------------- ! +! WAVEWATCH III - ww3_grid.nml - Grid pre-processing ! +! -------------------------------------------------------------------- ! + +! -------------------------------------------------------------------- ! +! Define the spectrum parameterization via SPECTRUM_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! SPECTRUM%XFR = 0. ! frequency increment +! SPECTRUM%FREQ1 = 0. ! first frequency (Hz) +! SPECTRUM%NK = 0 ! number of frequencies (wavenumbers) +! SPECTRUM%NTH = 0 ! number of direction bins +! SPECTRUM%THOFF = 0. ! relative offset of first direction [-0.5,0.5] +! -------------------------------------------------------------------- ! +&SPECTRUM_NML + SPECTRUM%XFR = 1.03 + SPECTRUM%FREQ1 = 0.075 + SPECTRUM%NK = 20 + SPECTRUM%NTH = 24 +/ + +! -------------------------------------------------------------------- ! +! Define the run parameterization via RUN_NML namelist +! +! * namelist must be terminated with / +! * definitions & defaults: +! RUN%FLDRY = F ! dry run (I/O only, no calculation) +! RUN%FLCX = F ! x-component of propagation +! RUN%FLCY = F ! y-component of propagation +! RUN%FLCTH = F ! direction shift +! RUN%FLCK = F ! wavenumber shift +! RUN%FLSOU = F ! source terms +! -------------------------------------------------------------------- ! +&RUN_NML + RUN%FLCX = T + RUN%FLCY = T + RUN%FLCTH = T + RUN%FLCK = T +/ + +! -------------------------------------------------------------------- ! +! Define the timesteps parameterization via TIMESTEPS_NML namelist +! +! * It is highly recommended to set up time steps which are multiple +! between them. +! +! * The first time step to calculate is the maximum CFL time step +! which depend on the lowest frequency FREQ1 previously set up and the +! lowest spatial grid resolution in meters DXY. +! reminder : 1 degree=60minutes // 1minute=1mile // 1mile=1.852km +! The formula for the CFL time is : +! Tcfl = DXY / (G / (FREQ1*4*Pi) ) with the constants Pi=3,14 and G=9.8m/s²; +! DTXY ~= 90% Tcfl +! DTMAX ~= 3 * DTXY (maximum global time step limit) +! +! * The refraction time step depends on how strong can be the current velocities +! on your grid : +! DTKTH ~= DTMAX / 2 ! in case of no or light current velocities +! DTKTH ~= DTMAX / 10 ! in case of strong current velocities +! +! * The source terms time step is usually defined between 5s and 60s. +! A common value is 10s. +! DTMIN ~= 10 +! +! * namelist must be terminated with / +! * definitions & defaults: +! TIMESTEPS%DTMAX = 0. ! maximum global time step (s) +! TIMESTEPS%DTXY = 0. ! maximum CFL time step for x-y (s) +! TIMESTEPS%DTKTH = 0. ! maximum CFL time step for k-th (s) +! TIMESTEPS%DTMIN = 0. ! minimum source term time step (s) +! -------------------------------------------------------------------- ! +&TIMESTEPS_NML + TIMESTEPS%DTMAX = 720. + TIMESTEPS%DTXY = 720. + TIMESTEPS%DTKTH = 720. + TIMESTEPS%DTMIN = 15. +/ + +! -------------------------------------------------------------------- ! +! Define the grid to preprocess via GRID_NML namelist +! +! * the tunable parameters for source terms, propagation schemes, and +! numerics are read using namelists. +! * Any namelist found in the folowing sections is temporarily written +! to param.scratch, and read from there if necessary. +! * The order of the namelists is immaterial. +! * Namelists not needed for the given switch settings will be skipped +! automatically +! +! * grid type can be : +! 'RECT' : rectilinear +! 'CURV' : curvilinear +! 'UNST' : unstructured (triangle-based) +! +! * coordinate system can be : +! 'SPHE' : Spherical (degrees) +! 'CART' : Cartesian (meters) +! +! * grid closure can only be applied in spherical coordinates +! +! * grid closure can be : +! 'NONE' : No closure is applied +! 'SMPL' : Simple grid closure. Grid is periodic in the +! : i-index and wraps at i=NX+1. In other words, +! : (NX+1,J) => (1,J). A grid with simple closure +! : may be rectilinear or curvilinear. +! 'TRPL' : Tripole grid closure : Grid is periodic in the +! : i-index and wraps at i=NX+1 and has closure at +! : j=NY+1. In other words, (NX+1,J<=NY) => (1,J) +! : and (I,NY+1) => (NX-I+1,NY). Tripole +! : grid closure requires that NX be even. A grid +! : with tripole closure must be curvilinear. +! +! * The coastline limit depth is the value which distinguish the sea +! points to the land points. All the points with depth values (ZBIN) +! greater than this limit (ZLIM) will be considered as excluded points +! and will never be wet points, even if the water level grows over. +! It can only overwrite the status of a sea point to a land point. +! The value must have a negative value under the mean sea level +! +! * The minimum water depth allowed to compute the model is the absolute +! depth value (DMIN) used in the model if the input depth is lower to +! avoid the model to blow up. +! +! * namelist must be terminated with / +! * definitions & defaults: +! GRID%NAME = 'unset' ! grid name (30 char) +! GRID%NML = 'namelists.nml' ! namelists filename +! GRID%TYPE = 'unset' ! grid type +! GRID%COORD = 'unset' ! coordinate system +! GRID%CLOS = 'unset' ! grid closure +! +! GRID%ZLIM = 0. ! coastline limit depth (m) +! GRID%DMIN = 0. ! abs. minimum water depth (m) +! -------------------------------------------------------------------- ! +&GRID_NML + GRID%NAME = 'Point output mww3_test_04' + GRID%NML = '../input/namelists_points.nml' + GRID%TYPE = 'RECT' + GRID%COORD = 'SPHE' + GRID%CLOS = 'NONE' + GRID%ZLIM = -0.1 + GRID%DMIN = 0.25 +/ + +! -------------------------------------------------------------------- ! +! Define the rectilinear grid type via RECT_NML namelist +! - only for RECT grids - +! +! * The minimum grid size is 3x3. +! +! * If the grid increments SX and SY are given in minutes of arc, the scaling +! factor SF must be set to 60. to provide an increment factor in degree. +! +! * If CSTRG='SMPL', then SX is forced to 360/NX. +! +! * value <= value_read / scale_fac +! +! * namelist must be terminated with / +! * definitions & defaults: +! RECT%NX = 0 ! number of points along x-axis +! RECT%NY = 0 ! number of points along y-axis +! +! RECT%SX = 0. ! grid increment along x-axis +! RECT%SY = 0. ! grid increment along y-axis +! RECT%SF = 1. ! scaling division factor for x-y axis +! +! RECT%X0 = 0. ! x-coordinate of lower-left corner (deg) +! RECT%Y0 = 0. ! y-coordinate of lower-left corner (deg) +! RECT%SF0 = 1. ! scaling division factor for x0,y0 coord +! -------------------------------------------------------------------- ! +&RECT_NML + RECT%NX = 3 + RECT%NY = 3 + RECT%SX = 5.E3 + RECT%SY = 5.E3 + RECT%X0 = -5.E3 + RECT%Y0 = -5.E3 +/ + +! -------------------------------------------------------------------- ! +! Define the depth to preprocess via DEPTH_NML namelist +! - for RECT and CURV grids - +! +! * if no obstruction subgrid, need to set &MISC FLAGTR = 0 +! +! * The depth value must have negative values under the mean sea level +! +! * value <= value_read * scale_fac +! +! * IDLA : Layout indicator : +! 1 : Read line-by-line bottom to top. (default) +! 2 : Like 1, single read statement. +! 3 : Read line-by-line top to bottom. +! 4 : Like 3, single read statement. +! * IDFM : format indicator : +! 1 : Free format. (default) +! 2 : Fixed format. +! 3 : Unformatted. +! * FORMAT : element format to read : +! '(....)' : auto detected (default) +! '(f10.6)' : float type +! +! * Example : +! IDF SF IDLA IDFM FORMAT FILENAME +! 50 0.001 1 1 '(....)' 'GLOB-30M.bot' +! +! * namelist must be terminated with / +! * definitions & defaults: +! DEPTH%SF = 1. ! scale factor +! DEPTH%FILENAME = 'unset' ! filename +! DEPTH%IDF = 50 ! file unit number +! DEPTH%IDLA = 1 ! layout indicator +! DEPTH%IDFM = 1 ! format indicator +! DEPTH%FORMAT = '(....)' ! formatted read format +! -------------------------------------------------------------------- ! +&DEPTH_NML + DEPTH%SF = -100. + DEPTH%FILENAME = '../input/points.depth' + DEPTH%IDLA = 3 +/ + +! -------------------------------------------------------------------- ! +! WAVEWATCH III - end of namelist ! +! -------------------------------------------------------------------- !