WAVEWATCH III v. 1.18 errata, problems and fixes
The content provided on this page supports model
development. These are not official NWS products and
should not be relied upon for operational purposes. This
web site is not subject to 24/7 support, and thus may be
unavailable during system outages.
Operationally generated graphics of the wave fields (no
spectra or source terms) are available from
Model Analyses and Guidance.
Bulletin files are available from the
Production FTP/HTTPS server.
Look for gfs.YYYYMMDD/CC/wave/station/bulls.tCCz/gfswave.stationID.bull
This page presents errata to the WAVEWATCH III v. 1.18 manuals, and a list of identified problems and fixes. It will be updated as needed. Please let us know if you find any errors or problems so that we can add them to this page.
Errata
- Page 8, Eq. (2.14): U sub phi should be U sub lambda
- Page 10, Eq. (2.20): should be multiplied by -1
- Page 13, Eq. (2.35): omega should be sigma
- Page 17, below Eq. (2.58): a sub 3 should be a sub 2
- Page 17, below Eq. (2.62): phi sub min should be f sub p,i,min
- Page 35, 2nd line from bottom: "where 'Delta phi' is the directional
increment ," should be "where 'Delta theta' is the directional
increment ,"
- Page 44, first line: "nestnnn.ww3" should be "test nnn.ww3"
- Page 67, third bullet from bottom: "yyyyddmm" should be "yyyymmdd"
- Page 72, line 9: "the part the of the makefile" should be
"the part of the makefile"
- Page 77, middle: "main.cmn" should be "dimx.cmn"
- Page 78, line 3: "OUTPn" should be "PNTn"
- Page 78, line 6 containing "GRDn" : remove line
- Page 78, line 13: "number of input boundary points"
should be "number of output boundary points."
- Page 81, lines 12-13 from bottom: "the script" should be
"the subroutine"
Index of Problems and Fixes
Boundary data transfer :
Problem: WAVEWATCH does not read input
boundary data correctly.
Fix: In the subroutine W3IOBC in the file
w3iobc.ftn, the read statement on lines 273 through 276
READ (NDSB,ERR=803,IOSTAT=IERR)
(XBP(I),I=1,NB(0)), (YBP(I),I=1,NB(0)),
((IPBP(I,1),I=1,NB(0)),J=1,4),
((RDBP(I,1),I=1,NB(0)),J=1,4)
with
READ (NDSB,ERR=803,IOSTAT=IERR)
(XBP(I),I=1,NB(0)), (YBP(I),I=1,NB(0)),
((IPBP(I,J),I=1,NB(0)),J=1,4),
((RDBP(I,J),I=1,NB(0)),J=1,4)
The actual changes have been color coded, red for old, green for new.
June 2 1999
Back to
index.
Problem: In the conversion to a distributed
memory designs, which was the main change in version 1.18, IMPLICIT NONE
statements have been added to many routines for debugging purposes. These
statements conflict with compiler directives, and possibly with declarations
for previous model options. For instance, using the switches PR2 for the third
order propagation scheme and YMP for Cray compiler directives will result in
compiler errors in w3wave.ftn.
Fix: Disabling the IMPLICIT NONE statement
will solve this problems You can also add dummy declarations for the offending
arrays in the compiler directives, but you should then make sure to activate
the declarations only for the switches considered. Removing the arrays from
the compiler directives is a bad idea as it may result in failures if other
options are chosen.
May 5 1999, Identified by Paul Wittmann.
Back to
index
NCAR graphics issues :
Problem: The NCAR graphics post-processor has
been used only on Cray systems with NCAR version 3.1.3. Some problems might
occur when using more recent version of NCAR or when these programs are run on
other platforms.
Fix 1: With NCAR 4.0.1 on IBM RS 6000 or Linux
platforms remove or comment out the line
CALL SETUSV ('LW',200)
in section 3 of the subroutine W3PLSP on line 1159 of the file w3ncar.ftn
to assure that polar spectral plots work properly.
May 14 1999
Fix 2: On systems with 32 bit word lengths
changes the lines
FAC = 1.E-6
to
FAC = 1.E-4
in the subroutines MXF and MYF on lines 115 and 145 in the file w3ncar.ftn,
to assure that vector and barb plots display properly.
May 14 1999
Back to
index
Test cases :
Problem: The test case ww3_tp2.2 will give an
error on the input file when trying to print-plot spectra.
Fix: Replace line 315 in the script ww3_tp2.2
1 -1. 0. 33
with
1 -1. 0. 33 F
July 19 1999, identified by Nick Graham.
Back to
index
Problem: When compiled on a DEC Alpha and
requesting point output, the model might crash randomly.
Fix?: Nick Graham thinks that this problem
might be related to unsaved variables between routine calls. He was able to
get the model to run properly by using the '-static' compiler option, that
forces saving of scratch variables within the code. We are not sure that this
actually is the reasons, as the model is run at NCEP on an IBM with the
'nosave' option in xlf without any problems. The 'nosave' option releases all
variables between calls. If anyone has a more satisfactory expiation or fix,
please let us know. In the mean time, use Nick's fix.
August 23 1999, identified by Nick Graham.
Back to
index
Y2K testing and errors :
Problem: The entire wave model has been Y2K
tested in the NCEP operational environment. All main wave model codes
performed without problems. Only in the supplemental GRIB packing program a
Y2K error was found, in that the year 2000 was not properly identified as year
100 of century 20.
Fix: In the program W3GRIB in the file
ww3_grib.ftn, replace the lines 290 and 303
KPDS(21) = (FTIME(1)/10000-1)/100
with
KPDS(21) = 1 + (FTIME(1)/10000-1)/100
Replace line 378
KPDS( 8) = MOD(TIME(1),1000000) / 10000
with
KPDS( 8) = 1 + MOD(TIME(1),1000000) / 10000
Replace line 386
KPDS( 8) = MOD(FTIME(1),1000000) / 10000
with
KPDS( 8) = 1 + MOD(FTIME(1),1000000) / 10000
November 1, 1999
Back to
index
Problem: The program ww3_grid presently does
not accept unformatted bathymetry files.
Fix: Ad-hoc changes to the source code are be
simple. The next release of the model will have both options availale.
December 2, 1999, identified by several.
Back to
index
Problem: There is no error trapping on the
parameter NPMAX, the maximum number of peaks to be found in the spectrum.
Fix: Will be fixed in the following release.
December 2, 1999, identified by several.
Back to
index
Problem: In cases with prolonged low wind
conditions, the model will (correctly) remove all wind sea related wave
energy. If the wind picks up again, the sseding algorithm puts in some initial
wave energy at high frequencies, after which the source terms can take care of
proper wave growth. A bug in the implementation of this algorithm prevented it
from working in some conditions, resulting in prolonged "flatlining"
of the model.
Fix: The loop with label number 640 in the
subroutine W3SRCE (w3srce.ftn) should be modified. Replace the start of this loop
DO 640, IK=NKH, NK
with
DO 640, IK=MIN(NK,NKH), NK
See
presentation for impact of thus fix on
the operational models at NCEP.
May 10, 2000, identified by several.
Back to
index
As described in the manual, care has to be taken with the restart files if
the code is run on an MPP platform. The restart file needs to be visible by
all processors, and needs to be treated as a single file. Paul Wittmann had
some problems running the code on under MPI on an SGI Origin 2000, and needed
the following embedded assign in the code to generate proper restart files.
ASSIGN (NDSR,'-F global',IERR)
Beware for similar necessities / problems when running under MPI on other platforms.
July 11, 2000, identified by Paul Wittmann.
Back to
index
On line 140 of the subroutine W3IOBC (w3iobc.ftn), the array MAPSTA is
declared as.
MAPSTA(MY,MY)
which should be.
MAPSTA(MY,MX)
Because this is a parameter list declaration, it has no impact on the model
behavior. I can however, be a source of spurious error messages if the model
is compiled with array bound checking activated..
November 13, 2000, identified by Valdir Innocentini.
Back to
index
Problem: Due to a renormalization of the year
in the routine DSEC21, the leap year is not properly dealt with in calculation
of time differences. In the wave model this shows up with time management
errors at the end of the year, including endless loops, and very large log files.
Fix: In the routine DSEC21 in the file
dsec21.ftn, replace the lines 67 and 72
NY1 = TIME1(1) / 10000 - 1900
NY2 = TIME2(1) / 10000 - 1900
with
NY1 = TIME1(1) / 10000
NY2 = TIME2(1) / 10000
December 28, 2000.
Back to
index
In the subroutine W3IOGR in the file w3iogr.ftn, the arrays IPBPO and ISBPO
are declared as REAL, but should be declared as integer. Due to the way these
arrays are used here, there should be no problem, unless the compiler uses a
different number of bytes for REAL and INTEGER data.
September 25, 2001, Identified by Yiquan Qi and others .
Back to
index
In the subroutine W3EXGO in the file w3exgo.ftn., an initialization error
in a map array may result in inconsisted vector maps with indifined x
components yet defined y components. The loop 290 starting at line 392
DO 290, IY=1, NY
IF ( MAPSTA(IY,IX) .EQ. 0 ) THEN
X1(IX,IY) = UNDEF
X2(IX,IY) = UNDEF
XX(IX,IY) = UNDEF
XX(IX,IY) = UNDEF
ENDIF
should be
DO 290, IY=1, NY
IF ( MAPSTA(IY,IX) .EQ. 0 ) THEN
X1(IX,IY) = UNDEF
X2(IX,IY) = UNDEF
XX(IX,IY) = UNDEF
XY(IX,IY) = UNDEF
ENDIF
April 23, 2002, Delft University of Techn.
Back to
index
In the subroutine W3IOGO in the file w3iogo.ftn., current vactors are
written improperly. Lines 303 through 305
ELSE IF ( IO .EQ. 2 ) THEN
CALL W3WRTS ( NDSOG, CX(1), NSEA )
CALL W3WRTS ( NDSOG, CX(1), NSEA )
should be
ELSE IF ( IO .EQ. 2 ) THEN
CALL W3WRTS ( NDSOG, CX(1), NSEA )
CALL W3WRTS ( NDSOG, CY(1), NSEA )
April 23, 2002, Identified by Fabrice Ardhuin.
Back to
index
In the subroutine W3SDS2 in the file w3sds2.ftn, the loop labeled 200
DO 200, IK=1, NK
FILT = MIN ( 1., MAX ( 0. , AFILT + BFILT*SIG(IK) ))
POW = MIN ( 25. , SDSA1 / ( CDISP*SIG(IK) )**SDSA2 )
D(1,IK) = (1.-FILT) * CDIST * K(IK)**2
& - FILT * SDSA0 * CDISH * SIG(IK)**3
& * (ALFA(IK)/SDSALN)**POW
200 CONTINUE
has the potential to generate a floating point errors on some
hardware/compiler combinations in the red piece of the code. A simple work
around is to replace this loop with
DO 200, IK=1, NK
FILT = MIN ( 1., MAX ( 0. , AFILT + BFILT*SIG(IK) ))
POW = MIN ( 25. , SDSA1 / ( CDISP*SIG(IK) )**SDSA2 )
IF ( FILT .GT. 0. ) THEN
D(1,IK) = (1.-FILT) * CDIST * K(IK)**2
& - FILT * SDSA0 * CDISH * SIG(IK)**3
& * (ALFA(IK)/SDSALN)**POW
ELSE
D(1,IK) = (1.-FILT) * CDIST * K(IK)**2
ENDIF
200 CONTINUE
where the part of the code marked green is replaced.
April 23, 2002, Identified by Erick Rogers and Roop Lalbeharry.
Solution by Erick Rogers.
Back to
index
Problem: When provessing ice or water level
fields with ww3_prep using the 'AI' option for the format of the data, no data
gets transferred to the wave model.
Fix: For now, use the 'LL' option with the
input grid set identical to the wave model grid. Will be fixed properly in the
next release of the model.
April 30, 2002, identified by Fabrice Ardhuin.
Back to
index
In the subroutine W3ULEV in the file w3ulev.ftn, the dimensions of the
input water level are in reverse order from the array definitons internal to
the wave model. Therefore the following fixes are needed if a water level
field is to be read in. Declarations, starting at line 105
REAL A(NTH,NK,0:MSEAL), VA(NSPEC,0:MSEAL),
& WN(0:NK+1,0:MSEA), CG(0:NK+1,0:MSEA),
& ZB(MSEA), DW(MSEA), WLV(MSEA), WLEV(MXI*MYI),
DMIN
C/
C/ -------------------------------------------------------------- /
C/
INTEGER ISEA, JSEA, IXY, IK, I1, I2, ISPEC, IK0, ITH
should become
REAL A(NTH,NK,0:MSEAL), VA(NSPEC,0:MSEAL),
& WN(0:NK+1,0:MSEA), CG(0:NK+1,0:MSEA),
& ZB(MSEA), DW(MSEA), WLV(MSEA), WLEV(MXI,MYI),
DMIN
C/
C/ -------------------------------------------------------------- /
C/
INTEGER ISEA, JSEA, IX, IY, IXY,
Loop 100, starting at line 149
DO 100, ISEA=1, NSEA
IXY = MAPSF(ISEA,3)
DWO(ISEA) = DW(ISEA)
WLV(ISEA) = WLEV(IXY)
DW (ISEA) = MAX ( DMIN , WLV(ISEA)-ZB(ISEA) )
100 CONTINUE
should become
DO 100, ISEA=1, NSEA
IX = MAPSF(ISEA,1)
IY = MAPSF(ISEA,2)
DWO(ISEA) = DW(ISEA)
WLV(ISEA) = WLEV(IX,IY)
DW (ISEA) = MAX ( DMIN , WLV(ISEA)-ZB(ISEA) )
100 CONTINUE
April 30, 2002, Identified by Fabrice Ardhuin.
Back to
index
If the switch RWND is used to define wind speeds relative to the current
velocity, the flag FLCUR needs to be transfered from the routine W3WAVE in
w3wave.ftn to W3UWND in w3uwnd.ftn. In W3WAVE this requires that lines 646
through 648
CALL W3UWND ( MXI, MYI, NSEA, FLFRST, TIME, MAPSF, CX, CY,
& TW0, WX0, WY0, DT0, TWN, WXN, WYN, DTN,
& UA, UD, AS, ASF, U10, U10D, UST, DW )
should become
CALL W3UWND ( MXI, MYI, NSEA, FLFRST, TIME, MAPSF, CX, CY,
& TW0, WX0, WY0, DT0, TWN, WXN, WYN, DTN,
& UA, UD, AS, ASF, U10, U10D, UST, DW, FLCUR )
Furthermore, FLCU has to be added to the subroutine call in W3UWND in
w3uwnd.ftn, and line 120
LOGICAL FLFRST
should become
LOGICAL FLFRST, FLCUR
July 8, 2002, Identified by Bechara Toulany.
Back to
index