WAVEWATCH III  beta 0.0.1
ww3_ounp.F90
Go to the documentation of this file.
1 
7 
8 #include "w3macros.h"
9 !/ ------------------------------------------------------------------- /
10 
22 PROGRAM w3ounp
23  !/
24  !/ +-----------------------------------+
25  !/ | WAVEWATCH III NOAA/NCEP |
26  !/ | F. Ardhuin |
27  !/ | M. Accensi |
28  !/ | FORTRAN 90 |
29  !/ | Last update : 06-Sep-2021 |
30  !/ +-----------------------------------+
31  !/
32  !/ 14-Jan-1999 : Final FORTRAN 77 ( version 1.18 )
33  !/ 21-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 )
34  !/ 14-Feb-2000 : Exact nonlinear interactions ( version 2.01 )
35  !/ 09-Jan-2001 : U* bug fix in tabular output ( version 2.05 )
36  !/ 25-Jan-2001 : Flat grid version ( version 2.06 )
37  !/ 02-Feb-2001 : Xnl version 3.0 ( version 2.07 )
38  !/ 11-Jun-2001 : Clean up ( version 2.11 )
39  !/ 11-Oct-2001 : Clean up, X*, Y* in tables ( version 2.14 )
40  !/ 13-Nov-2002 : Add stress vector ( version 3.00 )
41  !/ 27-Nov-2002 : First version of VDIA and MDIA ( version 3.01 )
42  !/ 24-Dec-2004 : Multiple grid version. ( version 3.06 )
43  !/ 17-Apr-2006 : Filter for directional spread. ( version 3.09 )
44  !/ 23-Jun-2006 : Linear input added. ( version 3.09 )
45  !/ 28-Jun-2006 : Adding file name preamble. ( version 3.09 )
46  !/ 03-Jul-2006 : Separate flux modules. ( version 3.09 )
47  !/ 28-Oct-2006 : Add partitioning option. ( version 3.10 )
48  !/ 24-Mar-2007 : Add pars for entire spectrum. ( version 3.11 )
49  !/ 25-Apr-2007 : Battjes-Janssen Sdb added. ( version 3.11 )
50  !/ (J. H. Alves)
51  !/ 08-Aug-2007 : Creation of buoy log file added ( version 3.12 )
52  !/ (switch O14 -- A. Chawla)
53  !/ 09-Oct-2007 : WAM 4+ Sin and Sds added. ( version 3.13 )
54  !/ (F. Ardhuin)
55  !/ 09-Oct-2007 : Experimental Sbs (BS1) added. ( version 3.13 )
56  !/ (F. Ardhuin)
57  !/ 09-Apr-2008 : Adding an additional output for ( version 3.12 )
58  !/ WMO standard (A. Chawla)
59  !/ 29-Apr-2008 : Adjust format partition output. ( version 3.14 )
60  !/ 29-May-2009 : Preparing distribution version. ( version 3.14 )
61  !/ 30-Oct-2009 : Implement run-time grid selection. ( version 3.14 )
62  !/ (W. E. Rogers & T. J. Campbell, NRL)
63  !/ 24-Mar-2011 : Adaptation to NetCDF (M. Accensi) ( version 4.04 )
64  !/ 16-Jul-2011 : NC3 / NC4 switch (M. Accensi) ( version 4.05 )
65  !/ 14-Mar-2013 : Writing optimization (M. Accensi) ( version 4.09 )
66  !/ 04-Jun-2014 : Correct bug TOGETHER (M. Accensi) ( version 5.00 )
67  !/ 04-Jun-2014 : Update use of date (M. Accensi) ( version 5.00 )
68  !/ 13-Jun-2014 : Dimension order opt. (M. Accensi) ( version 5.00 )
69  !/ 18-Jun-2014 : add mpi implementat. (M. Accensi) ( version 5.00 )
70  !/ 27-Aug-2015 : Sice add as additional output ( version 5.10 )
71  !/ (in source terms)
72  !/ 15-May-2018 : Add namelist feature ( version 6.05 )
73  !/ 18-Aug-2018 : S_{ice} IC5 (Q. Liu) ( version 6.06 )
74  !/ 18-Jun-2020 : Support for 360-day calendar. ( version 7.08 )
75  !/ 19-Jul-2021 : Momentum and air density support ( version 7.14 )
76  !/ 06-Sep-2021 : scale factor on spectra output ( version 7.12 )
77  !/ 05-Jan-2022 : Added TIMESPLIT=0 (nodate) support ( version 7.14 )
78  !/ 21-Jul-2022 : Correct FP0 calc for peak energy in ( version 7.14 )
79  !/ min/max freq band (B. Pouliot, CMC)
80  !/
81  !/ Copyright 2009 National Weather Service (NWS),
82  !/ National Oceanic and Atmospheric Administration. All rights
83  !/ reserved. WAVEWATCH III is a trademark of the NWS.
84  !/ No unauthorized use without permission.
85  !/
86  ! 1. Purpose :
87  !
88  ! Post-processing of point output.
89  !
90  ! 2. Method :
91  !
92  ! Data is read from the grid output file out_pnt.ww3 (raw data)
93  ! and from the file ww3_ounp.nml or ww3_ounp.inp ( NDSI).
94  ! Model definition and raw data files are read using WAVEWATCH III
95  ! subroutines.
96  !
97  !
98  ! 3. Parameters :
99  !
100  ! 4. Subroutines used :
101  !
102  ! Name Type Module Description
103  ! ----------------------------------------------------------------
104  ! W3NMOD Subr. W3GDATMD Set number of model.
105  ! W3SETG Subr. Id. Point to selected model.
106  ! W3NDAT Subr. W3WDATMD Set number of model for wave data.
107  ! W3SETW Subr. Id. Point to selected model for wave data.
108  ! W3NAUX Subr. W3ADATMD Set number of model for aux data.
109  ! W3SETA Subr. Id. Point to selected model for aux data.
110  ! W3NOUT Subr. W3ODATMD Set number of model for output.
111  ! W3SETO Subr. Id. Point to selected model for output.
112  ! ITRACE Subr. W3SERVMD Subroutine tracing initialization.
113  ! STRACE Subr. Id. Subroutine tracing.
114  ! NEXTLN Subr. Id. Get next line from input filw
115  ! EXTCDE Subr. Id. Abort program as graceful as possible.
116  ! STME21 Subr. W3TIMEMD Convert time to string.
117  ! TICK21 Subr. Id. Advance time.
118  ! DSEC21 Func. Id. Difference between times.
119  ! W3IOGR Subr. W3IOGRMD Reading/writing model definition file.
120  ! W3IOPO Subr. W3IOPOMD Reading/writing raw point output file.
121  ! W3EXNC Subr. Internal Execute point output.
122  ! ----------------------------------------------------------------
123  !
124  ! 5. Called by :
125  !
126  ! None, stand-alone program.
127  !
128  ! 6. Error messages :
129  !
130  ! Checks on input, checks in W3IOxx.
131  !
132  ! 7. Remarks :
133  !
134  ! - Tables written to file 'tabNN.ww3', where NN is the
135  ! unit umber (NDSTAB).
136  ! - Transfer file written to ww3.yymmddhh.spc with multiple
137  ! spectra and times in file. yymmddhh relates to first
138  ! output (NDSTAB).
139  ! - !/IC1 !/IC2 !/IC3 !/IC5 are not included in dissipation term
140  ! FIXME: ICE is a dummy variable at the moment
141  ! Include ice parameters in point output file out_pnt.ww3
142  ! Ice coupling to SIN, SDS and SIC similar to w3srcemd.ftn
143  !
144  ! 8. Structure :
145  !
146  ! See source code.
147  !
148  ! TOUT is the time defined in the input file
149  ! TIME is the time read from the out_pnt.ww3 file
150  ! DTREQ is the stride used for the time steps
151  ! at the beginning, if TOUT is after TIME, the program will read
152  ! out_pnt.ww3 DTREQ by DTREQ until TIME is equal to TOUT
153  ! /!\ if DTREQ is too big, it's possible to never have TIME=TOUT /!\
154  !
155  ! PASTDATE is the date of the last time step
156  ! DATE is the date of the current time step
157  ! IOUT is the counter of time iteration of a same file
158  !
159  ! MFL is the number of stations processed in the 'time' loop
160  ! NOPTS is the total number of stations defined in out_pnt.ww3
161  ! NFL is the number of bunch of MFL stations to loop on to
162  ! process all the NOPTS stations
163  ! NREQ is the number of valid stations to process, unvalid stations
164  ! are duplicata or stations not specified in the input file
165  !
166  ! 9. Switches :
167  !
168  ! !/S Enable subroutine tracing.
169  !
170  ! !/NCO NCEP NCO modifications for operational implementation.
171  !
172  ! !/O14 Buoy log file generation.
173  !
174  ! 10. Source code :
175  !
176  !/ ------------------------------------------------------------------- /
177  USE constants
178  !/
179  ! USE W3GDATMD, ONLY: W3NMOD, W3SETG
180  USE w3wdatmd, ONLY: w3setw, w3ndat
181 #ifdef W3_NL1
182  USE w3adatmd, ONLY: w3seta, w3naux
183 #endif
184  USE w3odatmd, ONLY: w3seto, w3nout
185  USE w3odatmd, ONLY: iaproc, naproc, naperr, napout, dimp
186  USE w3iogrmd, ONLY: w3iogr
187  USE w3iopomd
188  USE w3servmd, ONLY : itrace, nextln, extcde, strsplit
189 #ifdef W3_S
190  USE w3servmd, ONLY : strace
191 #endif
192  USE w3timemd, ONLY: caltype, stme21, tick21, dsec21, t2d, tsub, u2d
193  !/
194  USE w3gdatmd
195  USE w3wdatmd, ONLY: time
196  USE w3odatmd, ONLY: ndse, ndso, nopts, ptloc, ptnme, &
197  dpo, wao, wdo, aso, cao, cdo, spco, fnmpre,&
198  ipass => ipass2, icefo, iceo, iceho
199 #ifdef W3_FLX5
200  USE w3odatmd, ONLY: tauao, taudo, dairo
201 #endif
202 #ifdef W3_T
203  USE w3odatmd, ONLY: ndst
204 #endif
205 #ifdef W3_SETUP
206  USE w3odatmd, ONLY: zet_seto
207 #endif
208  !
209 #ifdef W3_O14
210  USE w3odatmd, ONLY: grdid
211 #endif
212  !
213  USE w3nmlounpmd
214  USE netcdf
215  !
216  IMPLICIT NONE
217  !
218 #ifdef W3_MPI
219  include "mpif.h"
220 #endif
221  !/
222  !/ ------------------------------------------------------------------- /
223  !/ Local parameters
224  !/
225  TYPE(nml_point_t) :: nml_point
226  TYPE(nml_file_t) :: nml_file
227  TYPE(nml_spectra_t) :: nml_spectra
228  TYPE(nml_param_t) :: nml_param
229  TYPE(nml_source_t) :: nml_source
230  !
231  INTEGER :: ndsi, ndsm, ndsop, ndstrc, ntrace, &
232  ierr, i, nout, nreq, itype, otype, &
233  ipoint, iotest, ith, iout, j, dimxp, &
234  icode, strl, strl2, flww3, nbfileout,&
235  s5, s3, nbstation, nctype, &
236  ncflush, nfl, mfl, ifl, nreql, noutl,&
237  ndsen, one, two, iret, ip, ncvartype
238  INTEGER :: iscale = 0
239  INTEGER :: dimid(7), dimln(5), varid(28), &
240  startdate(8), stopdate(8), &
241  tout(2), tdum(2), toutl(2)
242 #ifdef W3_MPI
243  INTEGER :: ierr_mpi
244 #endif
245 #ifdef W3_O14
246  INTEGER :: ndbo
247 #endif
248 #ifdef W3_S
249  INTEGER, SAVE :: ient = 0
250 #endif
251 #ifdef W3_NCO
252  INTEGER :: ndstab
253 #endif
254 #if defined W3_NCO && !defined W3_T
255  INTEGER :: ndst
256 #endif
257  !
258  INTEGER, ALLOCATABLE :: indreq(:), indreqtmp(:)
259  INTEGER,ALLOCATABLE :: ncid(:)
260  !
261  REAL :: dtreq, scale1, scale2, dtest
262  REAL :: m2km
263  REAL :: dthd,rth0
264  !
265  REAL,ALLOCATABLE :: thd(:)
266  REAL, ALLOCATABLE :: xpart(:,:)
267  !
268  CHARACTER(LEN=16) :: date, pastdate
269  CHARACTER(LEN=30) :: fileprefix, strstartdate, strstopdate
270  CHARACTER :: comstr*1, idtime*23, iddday*11, &
271  filetime*16, globalatt*120, &
272  attname*120, attval*120
273  CHARACTER(LEN=20) :: format1
274  CHARACTER(LEN=8) :: ext
275  CHARACTER(LEN=128) :: ncname
276  CHARACTER(LEN=25) :: idsrce(7)
277  CHARACTER :: sep
278  !
279  CHARACTER(LEN=100),ALLOCATABLE :: pointlist(:)
280  CHARACTER(LEN=128),ALLOCATABLE :: ncfile(:)
281  !
282  LOGICAL :: flsrce(7)
283  LOGICAL :: together, order, flgnml
284  LOGICAL, ALLOCATABLE :: flreq(:)
285  !
286  !/
287  !/ ------------------------------------------------------------------- /
288  !/
289  DATA idsrce / 'Spectrum ' , &
290  'Wind-wave interactions ' , &
291  'Nonlinear interactions ' , &
292  'Dissipation ' , &
293  'Wave-bottom interactions ' , &
294  'Wave-ice interactions ' , &
295  'Sum of selected sources ' /
296  flsrce = .false.
297  !
298 #ifdef W3_NCO
299  ! CALL W3TAGB('WAVESPEC',1998,0007,0050,'NP21 ')
300 #endif
301  !
302  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
303  ! 1.a IO set-up.
304  !
305  CALL w3nmod ( 1, 6, 6 )
306  CALL w3setg ( 1, 6, 6 )
307  CALL w3ndat ( 6, 6 )
308  CALL w3setw ( 1, 6, 6 )
309 #ifdef W3_NL1
310  CALL w3naux ( 6, 6 )
311  CALL w3seta ( 1, 6, 6 )
312 #endif
313  CALL w3nout ( 6, 6 )
314  CALL w3seto ( 1, 6, 6 )
315  !
316  ndsi = 10
317  ndsm = 20
318  ndsop = 20
319  !
320  ndstrc = 6
321  ntrace = 10
322  CALL itrace ( ndstrc, ntrace )
323  !
324 #ifdef W3_S
325  CALL strace (ient, 'W3OUNP')
326 #endif
327  !
328 #ifdef W3_NCO
329  !
330  ! Redo according to NCO
331  !
332  ndsi = 11
333  ndso = 6
334  ndse = ndso
335 # ifndef W3_T
336  ndst = ndso
337 # endif
338  ndsm = 12
339  ndsop = 13
340 #endif
341 #ifdef W3_O14
342  ndbo = 14
343 #endif
344 #ifdef W3_NCO
345  ndstrc = ndso
346 #endif
347  !
348  !
349  ! 1.b MPP initializations
350  !
351 #ifdef W3_SHRD
352  naproc = 1
353  iaproc = 1
354 #endif
355  !
356 #ifdef W3_MPI
357  CALL mpi_init ( ierr_mpi )
358  CALL mpi_comm_size ( mpi_comm_world, naproc, ierr_mpi )
359  CALL mpi_comm_rank ( mpi_comm_world, iaproc, ierr_mpi )
360  iaproc = iaproc + 1 ! this is to have IAPROC between 1 and NAPROC
361 #endif
362  !
363  IF ( iaproc .EQ. naperr ) THEN
364  ndsen = ndse
365  ELSE
366  ndsen = -1
367  END IF
368  !
369  IF ( iaproc .EQ. napout ) WRITE (ndso,900)
370  !
371  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
372  ! 2. Read model definition file.
373  !
374  CALL w3iogr ( 'READ', ndsm )
375  IF ( iaproc .EQ. napout ) WRITE (ndso,920) gname
376  !
377  IF ( flagll ) THEN
378  m2km = 1.
379  ELSE
380  m2km = 1.e-3
381  END IF
382  !
383  dimxp = ((nk+1)/2) * ((nth-1)/2)
384  ALLOCATE ( xpart(dimp,0:dimxp) )
385  xpart = undef
386  !
387  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
388  ! 3. Read general data and first fields from file
389  !
390 #if W3_BIN2NC
391  CALL w3iopon ( 'READ', ndsop, iotest )
392 #else
393  CALL w3iopo ( 'READ', ndsop, iotest )
394 #endif
395  !
396  IF ( iaproc .EQ. napout ) WRITE (ndso,930)
397  DO i=1, nopts
398  IF ( flagll ) THEN
399  IF ( iaproc .EQ. napout ) WRITE (ndso,931) ptnme(i), m2km*ptloc(1,i), m2km*ptloc(2,i)
400  ELSE
401  IF ( iaproc .EQ. napout ) WRITE (ndso,932) ptnme(i), m2km*ptloc(1,i), m2km*ptloc(2,i)
402  END IF
403  END DO
404  !
405  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
406  ! 4. Read requests from input file.
407  !
408 
409  !
410  ! process ww3_ounp namelist
411  !
412  INQUIRE(file=trim(fnmpre)//"ww3_ounp.nml", exist=flgnml)
413  IF (flgnml) THEN
414  ! Read namelist
415  CALL w3nmlounp (ndsi, trim(fnmpre)//'ww3_ounp.nml', nml_point, nml_file, &
416  nml_spectra, nml_param, nml_source, ierr)
417 
418  ! 4.1 Time setup IDTIME, DTREQ, NOUT
419  READ(nml_point%TIMESTRIDE, *) dtreq
420  READ(nml_point%TIMECOUNT, *) nout
421  READ(nml_point%TIMESTART, *) tout(1), tout(2)
422 
423  ! 4.2 Output points NOPTS
424  ALLOCATE(pointlist(nopts+1))
425  pointlist(:)=''
426  CALL strsplit(nml_point%LIST,pointlist)
427  !
428  ALLOCATE ( flreq(nopts) )
429  ALLOCATE ( indreqtmp(nopts) )
430  flreq = .false.
431  nreq = 0
432  ALLOCATE (ncfile(nopts))
433  ALLOCATE (ncid(nopts))
434  nbstation = 1
435  ! full list of point indexes
436  IF (trim(pointlist(1)).EQ.'all') THEN
437  flreq = .true.
438  nreq = nopts
439  indreqtmp=(/(j,j=1,nreq)/)
440  ! user defined list of point indexes
441  ELSE
442  ip=0
443  DO WHILE (len_trim(pointlist(ip+1)).NE.0)
444  ip=ip+1
445  READ(pointlist(ip),*) ipoint
446  ! existing index in out_pnt.ww3
447  IF ((ipoint .LE. nopts) .AND. (nreq .LT. nopts)) THEN
448  IF ( .NOT. flreq(ipoint) ) THEN
449  nreq = nreq + 1
450  indreqtmp(nreq)=ipoint
451  END IF
452  flreq(ipoint) = .true.
453  END IF
454  END DO
455  END IF
456 
457  ! 4.3 Output type
458  flww3 = 0
459  fileprefix = nml_file%PREFIX
460  nctype = nml_file%NETCDF
461  s3 = nml_point%TIMESPLIT
462  together = nml_point%SAMEFILE
463  mfl = nml_point%BUFFER
464  itype = nml_point%TYPE
465  order = nml_point%DIMORDER
466  !
467  IF (itype .EQ. 1) THEN
468  otype = nml_spectra%OUTPUT
469  scale1 = nml_spectra%SCALE_FAC
470  scale2 = nml_spectra%OUTPUT_FAC
471  ncvartype = nml_spectra%TYPE
472  ELSE IF (itype .EQ. 2) THEN
473  otype = nml_param%OUTPUT
474  ELSE IF (itype .EQ. 3) THEN
475  otype = nml_source%OUTPUT
476  scale1 = nml_source%SCALE_FAC
477  scale2 = nml_source%OUTPUT_FAC
478  flsrce(1) = nml_source%SPECTRUM
479  flsrce(2) = nml_source%INPUT
480  flsrce(3) = nml_source%INTERACTIONS
481  flsrce(4) = nml_source%DISSIPATION
482  flsrce(5) = nml_source%BOTTOM
483  flsrce(6) = nml_source%ICE
484  flsrce(7) = nml_source%TOTAL
485  iscale = nml_source%TABLE_FAC
486  END IF
487 
488 
489  END IF ! FLGNML
490 
491  !
492  ! process old ww3_ounp.inp format
493  !
494  IF (.NOT. flgnml) THEN
495  OPEN (ndsi,file=trim(fnmpre)//'ww3_ounp.inp',status='OLD',err=800,iostat=ierr)
496  rewind(ndsi)
497 
498  READ (ndsi,'(A)',END=801,ERR=802,IOSTAT=IERR) comstr
499  IF (comstr.EQ.' ') comstr = '$'
500  IF ( iaproc .EQ. napout ) WRITE (ndso,901) comstr
501  CALL nextln ( comstr , ndsi , ndse )
502 
503  ! 4.1 Time setup IDTIME, DTREQ, NOUT
504  READ (ndsi,*,END=801,ERR=802) TOUT, DTREQ, nout
505 
506  ! 4.2 Output points NOPTS
507  ALLOCATE ( flreq(nopts) )
508  ALLOCATE ( indreqtmp(nopts) )
509  flreq = .false.
510  nreq = 0
511  ALLOCATE (ncfile(nopts))
512  ALLOCATE (ncid(nopts))
513  nbstation = 1
514  !
515  DO i=1, nopts
516  ! reads point index
517  CALL nextln ( comstr , ndsi , ndse )
518  READ (ndsi,*,END=801,ERR=802) ipoint
519  ! last index
520  IF (ipoint .LT. 0) THEN
521  IF (i.EQ.1) THEN
522  flreq = .true.
523  nreq = nopts
524  indreqtmp=(/(j,j=1,nreq)/)
525  END IF
526  EXIT
527  END IF
528  ! existing index in out_pnt.ww3
529  IF ( (ipoint .GT. 0) .AND. (ipoint .LE. nopts) ) THEN
530  IF ( .NOT. flreq(ipoint) ) THEN
531  nreq = nreq + 1
532  indreqtmp(nreq)=ipoint
533  END IF
534  flreq(ipoint) = .true.
535  END IF
536  ! read the 'end of list' if nopts reached before it
537  IF ( (ipoint .GT. 0) .AND. (nreq .EQ. nopts) ) THEN
538  CALL nextln ( comstr , ndsi , ndse )
539  READ (ndsi,*,END=801,ERR=802) ipoint
540  END IF
541  END DO
542  ! check if last point index is -1
543  IF (ipoint .NE. -1) THEN
544  WRITE (ndse,1007)
545  CALL extcde ( 47 )
546  END IF
547 
548  ! 4.3 Output type
549  fileprefix= 'ww3.'
550  CALL nextln ( comstr , ndsi , ndse )
551  READ (ndsi,*,END=801,ERR=802) fileprefix
552  CALL nextln ( comstr , ndsi , ndse )
553  READ (ndsi,*,END=801,ERR=802) s3
554  CALL nextln ( comstr , ndsi , ndse )
555  READ (ndsi,*,END=801,ERR=802) nctype
556  CALL nextln ( comstr , ndsi , ndse )
557  READ (ndsi,*,END=801,ERR=802) TOGETHER, mfl
558  CALL nextln ( comstr , ndsi , ndse )
559  READ (ndsi,*,END=801,ERR=802) itype
560  CALL nextln ( comstr , ndsi , ndse )
561  READ (ndsi,*,END=801,ERR=802) flww3
562  CALL nextln ( comstr , ndsi , ndse )
563  READ (ndsi,*,END=801,ERR=802) order
564  CALL nextln ( comstr , ndsi , ndse )
565  !
566  IF (itype .EQ. 1) READ (ndsi,*,END=801,ERR=802) OTYPE, SCALE1, SCALE2, ncvartype
567  IF (itype .EQ. 2) READ (ndsi,*,END=801,ERR=802) otype
568  IF (itype .EQ. 3) READ (ndsi,*,END=801,ERR=802) OTYPE, SCALE1, SCALE2, FLSRCE, iscale
569 
570  CLOSE(ndsi,err=800,iostat=ierr)
571 
572  END IF ! .NOT. FLGNML
573 
574  !
575 
576  ! 4.1 Time setup IDTIME, DTREQ, NOUT
577  dtreq = max( 0. , dtreq )
578  IF ( dtreq.EQ.0 ) nout = 1
579  nout = max( 1 , nout )
580  noutl = nout
581  toutl = tout
582  CALL stme21 ( tout , idtime )
583  IF ( iaproc .EQ. napout ) WRITE (ndso,940) idtime
584  tdum = 0
585  CALL tick21 ( tdum , dtreq )
586  CALL stme21 ( tdum , idtime )
587  IF ( dtreq .GE. 86400. ) THEN
588  WRITE (iddday,'(I10,1X)') int(dtreq/86400.)
589  ELSE
590  iddday = ' '
591  END IF
592  idtime(1:11) = iddday
593  idtime(21:23) = ' '
594  IF ( iaproc .EQ. napout ) WRITE (ndso,941) idtime, nout
595 
596 
597  ! 4.1.2 Selects first time FILETIME between out_pnt.ww3 and ww3_ounp.nml
598  IF (tout(1).GT.time(1) .OR. (tout(1).EQ.time(1) .AND. tout(2).GT.time(2))) THEN
599  WRITE(date,'(I8.8,I6.6)') tout(1), tout(2)
600  ELSE
601  WRITE(date,'(I8.8,I6.6)') time(1), time(2)
602  END IF
603  WRITE(filetime,'(8A)') date(1:4), date(5:6), date(7:8), 'T', date(9:10), 'Z'
604 
605 
606  ! 4.1.3 Loops on TIME from out_pnt file to reach the first time PASTDATE
607  dtest = dsec21( time , tout )
608  DO WHILE (dtest.NE.0)
609  dtest = dsec21( time , tout )
610  IF ( dtest .GT. 0. ) THEN
611 #ifdef W3_BIN2NC
612  CALL w3iopon ( 'READ', ndsop, iotest )
613 #else
614  CALL w3iopo ( 'READ', ndsop, iotest )
615 #endif
616  IF ( iotest .EQ. -1 ) THEN
617  IF ( iaproc .EQ. napout ) WRITE (ndso,949)
618  GOTO 888
619  END IF
620  cycle
621  END IF
622  IF ( dtest .LT. 0. ) THEN
623  CALL tick21 ( tout , dtreq )
624  cycle
625  END IF
626  END DO
627  WRITE(pastdate,'(I8.8,I6.6)') time(1), time(2)
628 
629 
630  ! 4.2 Output points NOPTS
631  ALLOCATE ( indreq(nreq) )
632  indreq(:)=indreqtmp(1:nreq)
633  DEALLOCATE(indreqtmp)
634 
635 
636  ! 4.3 Output type
637  !
638  ! S3 defines the number of characters in the date for the filename
639  ! S3=0 -> empty, S3=4 -> YYYY, S3=6 -> YYYYMM, S3=10 -> YYYYMMDDHH
640  !
641  ! Setups min and max date format
642  IF (s3.GT.0 .AND. s3.LT.4) s3=4
643  IF (s3.GT.10) s3=10
644  !
645  ! Defines the format of FILETIME as ISO8601 convention
646  s5=s3-8
647  ! if S3=>YYYYMMDDHH then filetime='YYYYMMDDTHHMMSSZ'
648  IF (s3.EQ.0) THEN
649  filetime = ''
650  ELSE IF (s3.EQ.10) THEN
651  WRITE(format1,'(A,I1,A,I1,A)') '(I8.8,A1,I',s5,'.',s5,',A1)'
652  WRITE (filetime,format1) time(1), 'T', &
653  floor(real(time(2))/nint(10.**(6-s5))), 'Z'
654  ! if S3=>YYYYMMDD then filetime='YYYYMMDD'
655  ELSE IF (s3.EQ.8) THEN
656  WRITE(format1,'(A,I1,A,I1,A)') '(I',s3,'.',s3,')'
657  WRITE (filetime,format1) time(1)
658  ! if S3=>YYYYMM then filetime='YYYYMM'
659  ! or S3=>YYYY then filetime='YYYY'
660  ELSE
661  WRITE(format1,'(A,I1,A,I1,A)') '(I',s3,'.',s3,')'
662  WRITE (filetime,format1) floor(real(time(1))/nint(10.**(8-s3)))
663  END IF
664  !
665  ! order time,station
666  IF (order) THEN
667  one=1
668  two=2
669  ! order station,time
670  ELSE
671  one=2
672  two=1
673  END IF
674  !
675  IF ((nctype.EQ.3) .AND. (.NOT.order)) GOTO 803
676  IF ((nctype.EQ.4) .AND. index(nf90_inq_libvers(),'"3.').NE.0) GOTO 804
677 
678 
679  ! 4.4 Converts direction unit in degree
680  ALLOCATE(thd(nth))
681  dthd=360./nth
682  rth0=th(1)/dth
683  DO ith=1, nth
684  thd(ith)=dthd*(rth0+real(ith-1))
685  END DO
686  !
687  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
688  ! 5. Now creates files
689  ! If too many (memory problem) then makes several reads
690  !
691 
692 
693  ! 5.1 Defines number of files/stations per file NFL
694  IF (together) THEN
695  nfl=1
696  ELSE
697  nfl=1+nopts/mfl
698  END IF
699 
700 
701  ! 5.2 Creates filename listing
702  sep = '_'
703  IF(s3 .EQ. 0) sep = '' ! No "_" separator if no datetime string.
704  WRITE(ext,'(A)') ''
705  IF ((itype .EQ. 1) .AND. (otype.EQ.2)) WRITE(ext,'(A,A)') trim(sep), 'tab.nc'
706  IF ((itype .EQ. 1) .AND. (otype.EQ.3)) WRITE(ext,'(A,A)') trim(sep), 'spec.nc'
707  IF ((itype .EQ. 1) .AND. (otype.EQ.4)) WRITE(ext,'(A,A)') trim(sep), 'tab.nc'
708  IF (itype .EQ. 2) WRITE(ext,'(A,A)') trim(sep), 'tab.nc'
709  IF ((itype .EQ. 3) .AND. (otype.EQ.2)) WRITE(ext,'(A,A)') trim(sep), 'tab.nc'
710  IF ((itype .EQ. 3) .AND. (otype.EQ.3)) WRITE(ext,'(A,A)') trim(sep), 'tab.nc'
711  IF ((itype .EQ. 3) .AND. (otype.EQ.4)) WRITE(ext,'(A,A)') trim(sep), 'src.nc'
712  ! checks if extension exists
713  IF (len_trim(ext).EQ.0) THEN
714  WRITE (ndse,1006)
715  CALL extcde ( 46 )
716  END IF
717 
718  ! 5.3 Redefines netCDF type
719  IF((nctype.EQ.4).AND.(.NOT.together).AND.(nfl.GT.300).AND.(nreq.GT.9000)) THEN
720  WRITE(ndso,'(A)') ' WARNING : Files will be generated in netCDF3 with NF90_share mode'
721  WRITE(ndso,'(A)') ' WARNING : this is due to NF90_sync memory problem with netCDF4 library'
722  WRITE(ndso,'(A)') ' WARNING : to convert in netCDF4, use ncks -h -a -4 -L 9 file.nc3 file.nc4'
723  WRITE(ndso,'(A)') ' WARNING : or use option "Points in same file" with value TRUE in .inp file'
724  WRITE(ndso,'(A)') ' WARNING : or limit the output points list to less than 300'
725  nctype=3
726  END IF
727 
728 
729 
730  ! 5.4 Defines periodic flushing of buffer (only available for netCDF3)
731  ncflush=floor(15e7/(float(nk)*float(nth)*float(nreq)/nfl))
732  IF (nctype.EQ.3.AND.nreq.GT.10.AND.(.NOT.together)) WRITE(ndso,5940) ncflush
733 
734 
735  ! 5.5 Removes the duplicata if "ONE file per station" mode
736  IF (.NOT.together) THEN
737  ! defines a file name per station (NOT TOGETHER)
738  DO i=1,nopts
739  IF (flreq(i)) THEN
740  j = len_trim(fnmpre)
741  WRITE (ncname, '(5A)') trim(fileprefix), trim(ptnme(i)),'_', trim(filetime), trim(ext)
742  WRITE(ncfile(i),'(2A)') trim(fnmpre(:j)), trim(ncname) ! filename
743  IF( sum(index(ncfile(:),ncfile(i))).GT.1 ) THEN
744  flreq(i)=.false.
745  WRITE(ndso,5950) trim(ptnme(i))
746  cycle
747  END IF
748  END IF ! FLREQ(I)
749  END DO ! I=1,NOPTS
750  END IF ! .NOT.TOGETHER
751 
752 
753  ! 5.6 Loops on bunch of stations NFL
754  DO ifl=iaproc,nfl,naproc
755  !
756  ! new file, so the time counter is initialized
757 560 CONTINUE
758  iout=0
759 
760 
761  ! 5.6.1 Redefines the filetime when it's a new date defined by the date division S3
762  ! if S3=>YYYYMMDDHH then filetime='YYYYMMDDTHHMMSSZ'
763  IF (s3.EQ.0) THEN
764  filetime = ''
765  ELSE IF (s3.EQ.10) THEN
766  WRITE(format1,'(A,I1,A,I1,A)') '(I8.8,A1,I',s5,'.',s5,',A1)'
767  WRITE (filetime,format1) time(1), 'T', &
768  nint(real(time(2))/nint(10.**(6-s5))), 'Z'
769  ! if S3=>YYYYMMDD then filetime='YYYYMMDD'
770  ELSE IF (s3.EQ.8) THEN
771  WRITE(format1,'(A,I1,A,I1,A)') '(I',s3,'.',s3,')'
772  WRITE (filetime,format1) time(1)
773  ! if S3=>YYYYMM then filetime='YYYYMM'
774  ! or S3=>YYYY then filetime='YYYY'
775  ELSE
776  WRITE(format1,'(A,I1,A,I1,A)') '(I',s3,'.',s3,')'
777  WRITE (filetime,format1) nint(real(time(1))/nint(10.**(8-s3)))
778  END IF
779 
780 
781  ! 5.6.2 Defines the file names
782  ! defines unique file name (TOGETHER)
783  IF (together) THEN
784  WRITE (ncname, '(3A)') trim(fileprefix), trim(filetime), trim(ext)
785  !IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,1947) TRIM(NCNAME)
786  j = len_trim(fnmpre)
787  WRITE(ncfile(1),'(2A)') trim(fnmpre(:j)), trim(ncname) ! filename
788  ELSE
789  ! defines a file name per station (NOT TOGETHER)
790  DO i=1,nopts
791  IF (flreq(i)) THEN
792  WRITE (ncname, '(5A)') trim(fileprefix), trim(ptnme(i)),'_', trim(filetime), trim(ext)
793  !IF ( IAPROC .EQ. NAPOUT ) WRITE (NDSO,1947) TRIM(NCNAME)
794  j = len_trim(fnmpre)
795  WRITE(ncfile(i),'(2A)') trim(fnmpre(:j)), trim(ncname) ! filename
796  END IF ! FLREQ(I)
797  END DO ! I=1,NOPTS
798  END IF ! TOGETHER
799 
800 
801  ! 5.6.3 Defines number of stations and files to CREATE
802  ! together
803  IF (together) THEN
804  nbfileout = 1
805  nbstation = nreq
806  nreql=nbfileout
807  ! not together
808  ELSE
809  nbfileout=min(mfl,nopts-(ifl-1)*mfl)
810  nbstation = 1
811  nreql=0
812  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
813  IF ( flreq(i) ) THEN
814  nreql = nreql + 1
815  END IF
816  END DO
817  END IF
818  ! cycle if no file to CREATE
819  IF (nreql.EQ.0) cycle
820 
821 
822  ! 5.6.4 Creates netcdf file
823 
824  ! ... ITYPE = 1
825  IF (itype .EQ. 1) THEN
826  IF ( iaproc .EQ. napout ) WRITE (ndso,942) itype, '1-D and/or 2-D spectra, pass #',ifl
827 
828  ! ... OTYPE = 1
829  IF (otype .EQ. 1) THEN
830  IF ( iaproc .EQ. napout ) WRITE (ndso,943) 'print plots'
831  IF ( scale1 .LT. 0. ) THEN
832  IF ( iaproc .EQ. napout ) WRITE (ndso,1940) '1-D'
833  ELSE IF ( scale1 .EQ. 0. ) THEN
834  IF ( iaproc .EQ. napout ) WRITE (ndso,1941) '1-D'
835  ELSE
836  IF ( iaproc .EQ. napout ) WRITE (ndso,1942) '1-D', scale1
837  END IF
838  IF ( scale2 .LT. 0. ) THEN
839  IF ( iaproc .EQ. napout ) WRITE (ndso,1940) '2-D'
840  ELSE IF ( scale2 .EQ. 0. ) THEN
841  IF ( iaproc .EQ. napout ) WRITE (ndso,1941) '2-D'
842  ELSE
843  IF ( iaproc .EQ. napout ) WRITE (ndso,1942) '2-D', scale2
844  END IF
845 
846  ! ... OTYPE = 2
847  ELSE IF ( otype .EQ. 2 ) THEN
848  IF ( iaproc .EQ. napout ) WRITE (ndso,943) 'Table of 1-D spectral data'
849  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
850  IF (flreq(i) .OR. together) THEN
851  ! Create the netCDF file
852  dimln(1)=nf90_unlimited ! time
853  dimln(2)=nbstation ! station
854  dimln(3)=40 ! string station name length
855  dimln(4)=nk ! FREQ
856  CALL w3crnc(itype,otype,nctype,ncfile(i),ncid(i),dimid,dimln,varid,one,two)
857  END IF
858  END DO
859 
860  ! ... OTYPE = 3
861  ELSE IF ( otype .EQ. 3 ) THEN
862  IF ( iaproc .EQ. napout ) WRITE (ndso,943) 'Transfer file'
863  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
864  IF (flreq(i) .OR. together) THEN
865  ! Create the netCDF file
866  dimln(1)=nf90_unlimited !time
867  dimln(2)=nbstation ! station
868  dimln(3)=40 ! string station name length
869  dimln(4)=nk ! FREQ
870  dimln(5)=nth ! DIR
871  CALL w3crnc(itype,otype,nctype,ncfile(i),ncid(i),dimid,dimln,varid,one,two,ncvartype=ncvartype)
872  END IF
873  END DO
874 
875  ! ... OTYPE = 4
876  ELSE IF ( otype .EQ. 4 ) THEN
877  IF ( iaproc .EQ. napout ) WRITE (ndso,943) 'Partitioning of spectra'
878  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
879  IF (flreq(i) .OR. together) THEN
880  ! Create the netCDF file
881  dimln(1)=nf90_unlimited !time
882  dimln(2)=nbstation ! station
883  dimln(3)=40 ! string station name length
884  dimln(4)=dimxp ! npart
885  CALL w3crnc(itype,otype,nctype,ncfile(i),ncid(i),dimid,dimln,varid,one,two)
886  END IF
887  END DO
888  ELSE
889  WRITE (ndse,1011) otype
890  CALL extcde ( 10 )
891  END IF
892 
893 
894 
895  ! ... ITYPE = 2
896  ELSE IF (itype .EQ. 2) THEN
897  IF ( iaproc .EQ. napout ) WRITE (ndso,942) itype, 'Table of mean wave parameters'
898  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
899  IF (flreq(i) .OR. together) THEN
900  ! Create the netCDF file
901  dimln(1)=nf90_unlimited !time
902  dimln(2)=nbstation ! station
903  dimln(3)=40 ! string station name length
904  CALL w3crnc(itype,otype,nctype,ncfile(i),ncid(i),dimid,dimln,varid,one,two)
905  END IF
906  END DO
907 
908  ! ... OTYPE = 1
909  IF ( otype .EQ. 1 ) THEN
910  IF ( iaproc .EQ. napout ) WRITE (ndso,2940) 'depth, current and wind', ncname
911 
912  ! ... OTYPE = 2
913  ELSE IF ( otype .EQ. 2 ) THEN
914  IF ( iaproc .EQ. napout ) WRITE (ndso,2940) 'Mean wave parameters', ncname
915 
916  ! ... OTYPE = 3
917  ELSE IF ( otype .EQ. 3 ) THEN
918  IF ( iaproc .EQ. napout ) WRITE (ndso,2940) 'Nondimensional parameters (U*)', ncname
919 
920  ! ... OTYPE = 4
921  ELSE IF ( otype .EQ. 4 ) THEN
922  IF ( iaproc .EQ. napout ) WRITE (ndso,2940) 'Nondimensional parameters (U10)', ncname
923 
924  ! ... OTYPE = 5
925  ELSE IF ( otype .EQ. 5 ) THEN
926  IF ( iaproc .EQ. napout ) WRITE (ndso,2940) 'Validation parameters', ncname
927 
928  ! ... OTYPE = 6
929  ELSE IF ( otype .EQ. 6 ) THEN
930  IF ( iaproc .EQ. napout ) WRITE (ndso,2940) 'WMO standard mean parameters', ncname
931  ! ... OTYPE = ILLEGAL
932  ELSE
933  WRITE (ndse,1011) otype
934  CALL extcde ( 30 )
935  END IF
936  !
937  DO i=1,6
938  IF ( flsrce(i) .AND. iaproc .EQ. napout ) WRITE (ndso,3940) idsrce(i)
939  END DO
940  IF ( iaproc .EQ. napout ) WRITE (ndso,*) ' '
941 
942 
943  ! ... ITYPE = 3
944  ELSE IF (itype .EQ. 3) THEN
945  IF ( iaproc .EQ. napout ) WRITE (ndso,942) itype, 'Source terms'
946 #ifdef W3_NCO
947  ndstab = 51
948 #endif
949  iscale = max( 0 , min( 5 , iscale ) )
950 
951  ! ... OTYPE = 1
952  IF ( otype .EQ. 1 ) THEN
953  IF ( iaproc .EQ. napout ) WRITE (ndso,943) 'Print plots'
954  IF ( scale1 .LT. 0. ) THEN
955  IF ( iaproc .EQ. napout ) WRITE (ndso,1940) '1-D'
956  ELSE IF ( scale1 .EQ. 0. ) THEN
957  IF ( iaproc .EQ. napout ) WRITE (ndso,1941) '1-D'
958  ELSE
959  IF ( iaproc .EQ. napout ) WRITE (ndso,1942) '1-D', scale1
960  END IF
961  IF ( scale2 .LT. 0. ) THEN
962  IF ( iaproc .EQ. napout ) WRITE (ndso,1940) '2-D'
963  ELSE IF ( scale2 .EQ. 0. ) THEN
964  IF ( iaproc .EQ. napout ) WRITE (ndso,1941) '2-D'
965  ELSE
966  IF ( iaproc .EQ. napout ) WRITE (ndso,1942) '2-D', scale2
967  END IF
968 
969  ! ... OTYPE = 2
970  ! or OTYPE = 3
971  ELSE IF (( otype .EQ. 2 ) .OR. ( otype .EQ. 3 )) THEN
972  IF ( iscale .LE. 2) THEN
973  IF ( iaproc .EQ. napout ) WRITE (ndso,943) 'Tables as a function of freq.'
974  ELSE
975  IF ( iaproc .EQ. napout ) WRITE (ndso,943) 'Tables as a function of f/fp.'
976  END IF
977  IF ( mod(iscale,3) .EQ. 1 ) THEN
978  IF ( iaproc .EQ. napout ) WRITE (ndso,944) '(nondimensional based on U10)'
979  ELSE IF ( mod(iscale,3) .EQ. 2) THEN
980  IF ( iaproc .EQ. napout ) WRITE (ndso,944) '(nondimensional based on U*)'
981  END IF
982 
983  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
984  IF (flreq(i) .OR. together) THEN
985  ! Create the netCDF file
986  dimln(1)=nf90_unlimited !time
987  dimln(2)=nbstation ! station
988  dimln(3)=40 ! string station name length
989  dimln(4)=nk ! freq
990  CALL w3crnc(itype,otype,nctype,ncfile(i),ncid(i),dimid,dimln,varid,one,two)
991  END IF
992  END DO
993 
994  ! ... OTYPE = 4
995  ELSE IF ( otype .EQ. 4 ) THEN
996  IF ( iaproc .EQ. napout ) WRITE (ndso,943) 'Transfer file'
997  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
998  IF (flreq(i) .OR. together) THEN
999  ! Create the netCDF file
1000  dimln(1)=nf90_unlimited !time
1001  dimln(2)=nbstation ! station
1002  dimln(3)=40 ! string station name length
1003  dimln(4)=nk ! freq
1004  dimln(5)=nth ! dir
1005  CALL w3crnc(itype,otype,nctype,ncfile(i),ncid(i),dimid,dimln,varid,one,two,flsrce=flsrce)
1006  END IF
1007  END DO
1008 
1009  ! ... OTYPE = ILLEGAL
1010  ELSE
1011  WRITE (ndse,1011) otype
1012  CALL extcde ( 20 )
1013  END IF
1014 
1015 
1016  ! ... ITYPE = ILLEGAL
1017  ELSE
1018  WRITE (ndse,1010) itype
1019  CALL extcde ( 1 )
1020  END IF
1021 
1022 
1023  ! 5.6.5 Output of output points
1024  IF ( iaproc .EQ. napout ) WRITE (ndso,950) nreq
1025  ! together
1026  IF (together) THEN
1027  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbstation
1028  IF (flreq(i)) THEN
1029  IF ( flagll ) THEN
1030  IF ( iaproc .EQ. napout ) WRITE (ndso,951) ptnme(i), m2km*ptloc(1,i), &
1031  m2km*ptloc(2,i)
1032  ELSE
1033  IF ( iaproc .EQ. napout ) WRITE (ndso,953) ptnme(i), m2km*ptloc(1,i), &
1034  m2km*ptloc(2,i)
1035  END IF
1036  END IF
1037  END DO
1038  ! not together
1039  ELSE
1040  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
1041  IF (flreq(i)) THEN
1042  IF ( flagll ) THEN
1043  IF ( iaproc .EQ. napout ) WRITE (ndso,951) ptnme(i), m2km*ptloc(1,i), &
1044  m2km*ptloc(2,i)
1045  ELSE
1046  IF ( iaproc .EQ. napout ) WRITE (ndso,953) ptnme(i), m2km*ptloc(1,i), &
1047  m2km*ptloc(2,i)
1048  END IF
1049  END IF
1050  END DO
1051  END IF
1052  !
1053  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1054  ! 6. Time management.
1055  !
1056 #ifdef W3_IC1
1057  WRITE(ndso,3960)
1058 #endif
1059 #ifdef W3_IC2
1060  WRITE(ndso,3960)
1061 #endif
1062 #ifdef W3_IC3
1063  WRITE(ndso,3960)
1064 #endif
1065 #ifdef W3_IC5
1066  WRITE(ndso,3960)
1067 #endif
1068 #ifdef W3_NL5
1069  WRITE(ndso,3961)
1070 #endif
1071  !
1072  CALL t2d(time,startdate,ierr)
1073  WRITE(strstartdate,'(I4.4,A,4(I2.2,A),I2.2)') startdate(1),'-',startdate(2), &
1074  '-',startdate(3),' ',startdate(5),':',startdate(6),':',startdate(7)
1075 
1076  ! loops on TIME from out_pnt.ww3 till not reach TOUT from inp file
1077  DO
1078  dtest = dsec21( time , tout )
1079  IF ( dtest .GT. 0. ) THEN
1080  ! reads TIME from out_pnt.ww3
1081 #ifdef W3_BIN2NC
1082  CALL w3iopon ( 'READ', ndsop, iotest )
1083 #else
1084  CALL w3iopo ( 'READ', ndsop, iotest )
1085 #endif
1086  IF ( iotest .EQ. -1 ) THEN
1087  IF ( iaproc .EQ. napout ) WRITE (ndso,949)
1088  GOTO 700
1089  END IF
1090  cycle
1091  END IF
1092  IF ( dtest .LT. 0. ) THEN
1093  CALL tick21 ( tout , dtreq )
1094  cycle
1095  END IF
1096  ! increment the time counter IOUT
1097  iout = iout + 1
1098  CALL stme21 ( tout , idtime )
1099  WRITE(date,'(I8.8,I6.6)') tout(1), tout(2)
1100 
1101 
1102  ! 6.1 Creates a new file if it is a new date defined by the date division S3
1103  IF ( (iout.GT.1) .AND. (index(pastdate(1:s3),date(1:s3)).EQ.0) ) THEN
1104  WRITE(ndso,954) trim(date(1:s3))
1105  ! decrements timesteps already processed
1106  nout=nout-(iout-1)
1107  GOTO 700
1108  END IF
1109 
1110 
1111  ! 6.2 Writes out a progress message
1112  IF (nreq.GT.10.OR.nbfileout.GT.10) WRITE(ndso,955) time, &
1113  nbfileout, iout, nout, ifl
1114  j=0
1115 
1116  ! 6.3 Calls subroutine w3exnc for each file
1117  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
1118  IF (flreq(i) .OR. together) THEN
1119  ! together
1120  IF ( together ) THEN
1121  CALL w3exnc(i,ncid(i),nreq,indreq,order)
1122  ! not together
1123  ELSE
1124  j=j+1
1125  CALL w3exnc(i,ncid(i),1,(/ i /),order)
1126  ! flush buffer (only available in netcdf3)
1127  IF (mod(iout,ncflush).EQ.0) THEN
1128  iret=nf90_sync(ncid(i))
1129  END IF
1130  END IF ! TOGETHER
1131  END IF ! (FLREQ(I) .OR. TOGETHER)
1132  END DO ! I=1+ ...
1133  !
1134  WRITE(pastdate,'(I8.8,I6.6)') tout(1), tout(2)
1135  CALL tick21 ( tout , dtreq )
1136  IF ( iout .GE. nout ) GOTO 700
1137  !
1138  END DO
1139  !
1140  GOTO 888
1141 
1142 
1143  !
1144  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1145  ! 7. Finalize file
1146  !
1147 700 CONTINUE
1148  !
1149  CALL t2d(time,stopdate,ierr)
1150  WRITE(strstopdate,'(I4.4,A,4(I2.2,A),I2.2)') stopdate(1),'-',stopdate(2), &
1151  '-',stopdate(3),' ',stopdate(5),':',stopdate(6),':',stopdate(7)
1152 
1153 
1154  ! 7.1 Writes the global attributes to netCDF file
1155  DO i=1+(ifl-1)*mfl,(ifl-1)*mfl+nbfileout
1156  IF ( flreq(i) .OR. together ) THEN
1157  iret=nf90_redef(ncid(i))
1158  CALL check_err(iret,0)
1159  IF (flww3.EQ.0) &
1160  OPEN(unit=994,file='NC_globatt.inp',status='old',iostat=icode)
1161  rewind(994)
1162  IF (icode.EQ.0) THEN
1163  DO WHILE (icode.EQ.0)
1164  READ(994,'(a)',iostat=icode) attname
1165  READ(994,'(a)',iostat=icode) attval
1166  IF (icode.EQ.0) THEN
1167  strl=len_trim(attname)
1168  strl2=len_trim(attval)
1169  iret=nf90_put_att(ncid(i),nf90_global,attname(1:strl),attval(1:strl2))
1170  CALL check_err(iret,1)
1171  END IF
1172  END DO
1173  END IF
1174  CLOSE(994)
1175  !
1176  WRITE(globalatt,'(A)') trim(ncfile(i))
1177  iret=nf90_put_att(ncid(i),nf90_global,'product_name' ,globalatt(3:))
1178  iret=nf90_put_att(ncid(i),nf90_global,'area',trim(gname))
1179  iret=nf90_put_att(ncid(i),nf90_global,'data_type','OCO spectra 2D')
1180  iret=nf90_put_att(ncid(i),nf90_global,'format_version','1.1')
1181  iret=nf90_put_att(ncid(i),nf90_global,'southernmost_latitude','n/a')
1182  iret=nf90_put_att(ncid(i),nf90_global,'northernmost_latitude','n/a')
1183  iret=nf90_put_att(ncid(i),nf90_global,'latitude_resolution','n/a')
1184  iret=nf90_put_att(ncid(i),nf90_global,'westernmost_longitude','n/a')
1185  iret=nf90_put_att(ncid(i),nf90_global,'easternmost_longitude','n/a')
1186  iret=nf90_put_att(ncid(i),nf90_global,'longitude_resolution','n/a')
1187  iret=nf90_put_att(ncid(i),nf90_global,'minimum_altitude','n/a')
1188  iret=nf90_put_att(ncid(i),nf90_global,'maximum_altitude','n/a')
1189  iret=nf90_put_att(ncid(i),nf90_global,'altitude_resolution','n/a')
1190  iret=nf90_put_att(ncid(i),nf90_global,'start_date',strstartdate)
1191  iret=nf90_put_att(ncid(i),nf90_global,'stop_date',strstopdate)
1192  IF (dtreq.EQ.3600) THEN
1193  iret=nf90_put_att(ncid(i),nf90_global,'field_type','hourly')
1194  ELSE IF (dtreq.EQ.7200) THEN
1195  iret=nf90_put_att(ncid(i),nf90_global,'field_type','2-hourly')
1196  ELSE IF (dtreq.EQ.10800) THEN
1197  iret=nf90_put_att(ncid(i),nf90_global,'field_type','3-hourly')
1198  ELSE IF (dtreq.EQ.21600) THEN
1199  iret=nf90_put_att(ncid(i),nf90_global,'field_type','6-hourly')
1200  ELSE IF (dtreq.EQ.32400) THEN
1201  iret=nf90_put_att(ncid(i),nf90_global,'field_type','9-hourly')
1202  ELSE IF (dtreq.EQ.43200) THEN
1203  iret=nf90_put_att(ncid(i),nf90_global,'field_type','12-hourly')
1204  ELSE IF (dtreq.EQ.86400) THEN
1205  iret=nf90_put_att(ncid(i),nf90_global,'field_type','daily')
1206  ELSE
1207  iret=nf90_put_att(ncid(i),nf90_global,'field_type','n/a')
1208  END IF
1209  !
1210  ! Close netCDF file
1211  iret=nf90_enddef(ncid(i))
1212  CALL check_err(iret,2)
1213  iret=nf90_close(ncid(i))
1214  CALL check_err(iret,3)
1215  !
1216  END IF ! FLREQ(I) .OR. TOGETHER
1217  END DO ! I=1+(IFL-1)*MFL,(IFL-1)*MFL+NBFILEOUT
1218 
1219 
1220  ! 7.2 Goes back to the start of the loop with the same points
1221  ! but with a new date defined by the date division S3
1222  IF ( (iout.GT.1) .AND. (index(pastdate(1:s3),date(1:s3)).EQ.0) ) THEN
1223  GOTO 560
1224  END IF
1225 
1226 
1227  ! 7.3 Reinitiazes TIME (close open out_pnt.ww3) and TOUT to process a new bunch of stations
1228  CLOSE(ndsop) ! closes binary file out_pnt*
1229  ipass = 0 ! resets time counter for binary file out_pnt*
1230 #ifdef W3_BIN2NC
1231  CALL w3iopon ( 'READ', ndsop, iotest )
1232 #else
1233  CALL w3iopo ( 'READ', ndsop, iotest )
1234 #endif
1235 #ifdef W3_T
1236  WRITE(ndse,*) 'out_pnt* closed and reopened'
1237 #endif
1238  tout=toutl
1239  nout=noutl
1240 
1241 
1242  ! 7.4 Loops on TIME till it is equal to TOUT
1243  dtest = dsec21( time , tout )
1244  DO WHILE (dtest.NE.0)
1245  dtest = dsec21( time , tout )
1246  IF ( dtest .GT. 0. ) THEN
1247 #ifdef W3_BIN2NC
1248  CALL w3iopon ( 'READ', ndsop, iotest )
1249 #else
1250  CALL w3iopo ( 'READ', ndsop, iotest )
1251 #endif
1252  IF ( iotest .EQ. -1 ) THEN
1253  IF ( iaproc .EQ. napout ) WRITE (ndso,949)
1254  GOTO 700
1255  END IF
1256  cycle
1257  END IF
1258  IF ( dtest .LT. 0. ) THEN
1259  CALL tick21 ( tout , dtreq )
1260  cycle
1261  END IF
1262  END DO
1263  !
1264  END DO ! IFL=1,NFL
1265  !
1266  GOTO 888
1267  !
1268  ! Escape locations read errors :
1269  !
1270 800 CONTINUE
1271  WRITE (ndse,1000) ierr
1272  CALL extcde ( 40 )
1273  !
1274 801 CONTINUE
1275  WRITE (ndse,1001)
1276  CALL extcde ( 41 )
1277  !
1278 802 CONTINUE
1279  WRITE (ndse,1002) ierr
1280  CALL extcde ( 42 )
1281  !
1282 803 CONTINUE
1283  WRITE (ndse,1003)
1284  CALL extcde ( 43 )
1285  !
1286 804 CONTINUE
1287  WRITE (ndse,1004) nf90_inq_libvers()
1288  CALL extcde ( 44 )
1289  !
1290 #ifdef W3_O14
1291 805 CONTINUE
1292  WRITE (ndse,1005) ierr
1293  CALL extcde ( 45 )
1294 #endif
1295  !
1296  !
1297 888 CONTINUE
1298  !
1299  IF(ALLOCATED(thd)) DEALLOCATE(thd)
1300  IF(ALLOCATED(ncid)) DEALLOCATE(ncid)
1301  IF(ALLOCATED(ncfile)) DEALLOCATE(ncfile)
1302  IF(ALLOCATED(indreq)) DEALLOCATE(indreq)
1303  !
1304  IF ( iaproc .EQ. napout ) WRITE (ndso,999)
1305 #ifdef W3_MPI
1306  CALL mpi_finalize ( ierr_mpi )
1307 #endif
1308  !
1309 #ifdef W3_NCO
1310  ! CALL W3TAGE('WAVESPEC')
1311 #endif
1312  !
1313  ! Formats
1314  !
1315 900 FORMAT (/15x,' *** WAVEWATCH III Point output post.*** '/ &
1316  15x,'==============================================='/)
1317 901 FORMAT ( ' Comment character is ''',a,''''/)
1318  !
1319 920 FORMAT ( ' Grid name : ',a/)
1320  !
1321 930 FORMAT ( ' Points in file : '/ &
1322  ' ------------------------------------')
1323 931 FORMAT ( ' ',a,2f10.2)
1324 932 FORMAT ( ' ',a,2(f8.1,'E3'))
1325  !
1326 940 FORMAT (/' Output time data : '/ &
1327  ' --------------------------------------------------'/ &
1328  ' First time : ',a)
1329 941 FORMAT ( ' Interval : ',a/ &
1330  ' Number of requests : ',i8)
1331 942 FORMAT (/' Output type ',i2,' :'/ &
1332  ' --------------------------------------------------'/ &
1333  ' ',a, i3 /)
1334 943 FORMAT ( ' Subtype : ',a)
1335 944 FORMAT ( ' ',a)
1336 #ifdef W3_O14
1337 945 FORMAT ( ' ',i5,3x,a,2f10.2,3x,a)
1338 #endif
1339 949 FORMAT (/' End of file reached '/)
1340  !
1341 950 FORMAT (/' Requested output for ',i6,' points : '/ &
1342  ' --------------------------------------------------')
1343 951 FORMAT ( ' ',a,2f10.2)
1344 953 FORMAT ( ' ',a,2(f8.1,'E3'))
1345 954 FORMAT (/' New time step : ',a)
1346 955 FORMAT ( ' Processing time : ', 2i8, ' in ', i8, 'files. Step '&
1347  i10, 'out of ', i10, ' pass ', i4)
1348  !
1349 1940 FORMAT ( ' ',a,' print plots not requested.')
1350 1941 FORMAT ( ' ',a,' print plots normalized.')
1351 1942 FORMAT ( ' Scale factor ',a,' spectrum : ',e10.3)
1352  ! 1947 FORMAT ( ' File name : ',A)
1353  !
1354 2940 FORMAT ( ' Table output : ',a/ &
1355  ' File name : ',a)
1356  !
1357 3940 FORMAT ( ' ',a)
1358 5940 FORMAT ( ' Buffer will be flushed every ',i6,' steps.')
1359 5950 FORMAT ( ' Point already exists, it will be skipped : ', a)
1360  !
1361 999 FORMAT (/' End of program '/ &
1362  ' ========================================='/ &
1363  ' WAVEWATCH III Point output '/)
1364  !
1365 1000 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1366  ' ERROR IN OPENING INPUT FILE'/ &
1367  ' IOSTAT =',i5/)
1368  !
1369 1001 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1370  ' PREMATURE END OF INPUT FILE'/)
1371  !
1372 1002 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1373  ' ERROR IN READING FROM INPUT FILE'/ &
1374  ' IOSTAT =',i5/)
1375  !
1376 1003 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1377  ' NCTYPE=3 IS INCOMPATIBLE WITH'/ &
1378  ' THE OPTIMIZED DIMENSION ORDER'/)
1379  !
1380 1004 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1381  ' NCTYPE=4 IS INCOMPATIBLE WITH'/ &
1382  ' NETCDF LIBRARY USED :',a/)
1383  !
1384 #ifdef W3_O14
1385 1005 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1386  ' ERROR IN OPENING BUOY LOG FILE'/ &
1387  ' IOSTAT =',i5/)
1388 #endif
1389  !
1390 1006 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1391  ' ITYPE AND OTYPE COMBINATION NOT RECOGNIZED'/)
1392  !
1393 1007 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1394  ' ERROR IN READING FROM INPUT FILE'/ &
1395  ' LAST POINT INDEX IS NOT -1'/ &
1396  ' OR TOO MANY POINT INDEXES DEFINED'/)
1397  !
1398 1010 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1399  ' ILLEGAL TYPE, ITYPE =',i4/)
1400  !
1401 1011 FORMAT (/' *** WAVEWATCH III ERROR IN W3OUNP : '/ &
1402  ' ILLEGAL TYPE, OTYPE =',i4/)
1403  !
1404 #ifdef W3_IC1
1405 3960 FORMAT (/' *** WAVEWATCH-III WARNING IN W3OUNP :'/ &
1406  ' Ice source terms !/IC1 skipped'/ &
1407  ' in dissipation term.'/)
1408 #endif
1409 #ifdef W3_IC2
1410 3960 FORMAT (/' *** WAVEWATCH-III WARNING IN W3OUNP :'/ &
1411  ' Ice source terms !/IC2 skipped'/ &
1412  ' in dissipation term.'/)
1413 #endif
1414 #ifdef W3_IC3
1415 3960 FORMAT (/' *** WAVEWATCH-III WARNING IN W3OUNP :'/ &
1416  ' Ice source terms !/IC3 skipped'/ &
1417  ' in dissipation term.'/)
1418 #endif
1419 #ifdef W3_IC5
1420 3960 FORMAT (/' *** WAVEWATCH-III WARNING IN W3OUNP :'/ &
1421  ' Ice source terms !/IC5 skipped'/ &
1422  ' in dissipation term.'/)
1423 #endif
1424 #ifdef W3_NL5
1425 3961 FORMAT (/' *** WAVEWATCH-III WARNING IN W3OUNP :'/ &
1426  ' Snl source terms !/NL5 skipped'/ &
1427  ' in interaction term.'/)
1428 #endif
1429  !/
1430  !/ Internal subroutine W3EXNC ---------------------------------------- /
1431  !/
1432 CONTAINS
1433  !/ ------------------------------------------------------------------- /
1451  SUBROUTINE w3exnc(I,NCID,NREQ,INDREQ,ORDER)
1452  !/
1453  !/ +-----------------------------------+
1454  !/ | WAVEWATCH III NOAA/NCEP |
1455  !/ | F. Ardhuin |
1456  !/ | M. Accensi |
1457  !/ | FORTRAN 90 |
1458  !/ | Last update : 14-Mar-2013 |
1459  !/ +-----------------------------------+
1460  !/
1461  !/ 01-Apr-2011 : Creation ( version 3.14 )
1462  !/ 14-Mar-2013 : Optimization and cleanup ( version 4.10 )
1463  !/
1464  ! 1. Purpose :
1465  !
1466  ! Perform actual point output.
1467  !
1468  ! 3. Parameters :
1469  !
1470  ! 4. Subroutines used :
1471  !
1472  ! Name Type Module Description
1473  ! ----------------------------------------------------------------
1474  ! W3SPRn Subr. W3SRCnMD Mean wave parameters for use in
1475  ! source terms.
1476  ! W3FLXn Subr. W3FLXnMD Flux/stress computation.
1477  ! W3SLNn Subr. W3SLNnMD Linear input.
1478  ! W3SINn Subr. W3SRCnMD Input source term.
1479  ! W3SDSn Subr. W3SRCnMD Whitecapping source term
1480  ! W3SNLn Subr. W3SNLnMD Nonlinear interactions.
1481  ! W3SBTn Subr. W3SBTnMD Bottom friction source term.
1482  ! W3SDBn Subr. W3SBTnMD Depth induced breaking source term.
1483  ! W3STRn Subr. W3STRnMD Triad interaction source term.
1484  ! W3SBSn Subr. W3SBSnMD Bottom scattering source term.
1485  ! W3SXXn Subr. W3SXXnMD Unclassified source term.
1486  ! W3PART Sunr. W3PARTMD Spectral partitioning routine.
1487  ! STRACE Subr. W3SERVMD Subroutine tracing.
1488  ! STME21 Subr. W3TIMEMD Convert time to string.
1489  ! PRT1DS Subr. W3ARRYMD Print plot of 1-D spectrum.
1490  ! PRT1DM Subr. Id. Print plot of several 1-D spectra.
1491  ! PRT2DS Subr. Id. Print plot of 2-D spectrum.
1492  ! WAVNU1 Subr. W3DISPMD Solve dispersion relation.
1493  ! ----------------------------------------------------------------
1494  !
1495  ! 5. Called by :
1496  !
1497  ! Main program in which it is contained,
1498  !
1499  ! 6. Error messages :
1500  !
1501  ! None.
1502  !
1503  ! 7. Remarks :
1504  !
1505  ! - Spectra are relative frequency energy spectra.
1506  ! - Note that arrays CX and CY of the main program now contain
1507  ! the absolute sea water speed and direction respectively.
1508  !
1509  ! 8. Structure :
1510  !
1511  ! See source code.
1512  !
1513  ! 9. Switches :
1514  !
1515  ! !/S Enable subroutine tracing.
1516  ! !/T Enable test output.
1517  !
1518  ! !/FLXx Flux/stress computation.
1519  ! !/LNx Linear input package
1520  ! !/STx Source term package
1521  ! !/NLx Nonlinear interaction package
1522  ! !/BTx Bottom friction package
1523  ! !/ICx S_ice source term package
1524  ! !/DBx Depth-induced breaking package
1525  ! !/TRx Triad interaction package
1526  ! !/BSx Bottom scattering package
1527  !
1528  ! !/STAB2 Stability correction for !/ST2
1529  !
1530  ! 10. Source code :
1531  !
1532  !/ ------------------------------------------------------------------- /
1533 #ifdef W3_FLX1
1534  USE w3flx1md
1535 #endif
1536 #ifdef W3_FLX2
1537  USE w3flx2md
1538 #endif
1539 #ifdef W3_FLX3
1540  USE w3flx3md
1541 #endif
1542 #ifdef W3_FLX4
1543  USE w3flx4md
1544 #endif
1545 #ifdef W3_FLX5
1546  USE w3flx5md
1547 #endif
1548 #ifdef W3_LN1
1549  USE w3sln1md
1550 #endif
1551 #ifdef W3_ST1
1552  USE w3src1md
1553 #endif
1554 #ifdef W3_ST2
1555  USE w3src2md
1556 #endif
1557 #ifdef W3_ST3
1558  USE w3src3md
1559 #endif
1560 #ifdef W3_ST4
1561  USE w3src4md, ONLY : w3spr4, w3sin4, w3sds4
1562 #endif
1563 #ifdef W3_ST6
1564  USE w3src6md
1565  USE w3swldmd, ONLY : w3swl6
1566  USE w3gdatmd, ONLY : swl6s6
1567 #endif
1568 #ifdef W3_NL1
1569  USE w3snl1md
1570  USE w3gdatmd, ONLY: iqtpe
1571 #endif
1572 #ifdef W3_NL2
1573  USE w3snl2md
1574 #endif
1575 #ifdef W3_NL3
1576  USE w3snl3md
1577 #endif
1578 #ifdef W3_NL4
1579  USE w3snl4md
1580 #endif
1581 #ifdef W3_BT1
1582  USE w3sbt1md
1583 #endif
1584 #ifdef W3_BT4
1585  USE w3sbt4md
1586 #endif
1587 #ifdef W3_BT8
1588  USE w3sbt8md
1589 #endif
1590 #ifdef W3_BT9
1591  USE w3sbt9md
1592 #endif
1593 #ifdef W3_DB1
1594  USE w3sdb1md
1595 #endif
1596 #ifdef W3_BS1
1597  USE w3sbs1md
1598 #endif
1599 #ifdef W3_IS2
1600  USE w3sis2md
1601 #endif
1602  USE w3partmd, ONLY: w3part
1604  USE w3gdatmd, ONLY: iicedisp
1605  !/
1606  USE w3arrymd, ONLY: prt1ds, prt2ds, prt1dm
1607  USE w3dispmd, ONLY: nar1d, dfac, n1max, ecg1, ewn1, dsie
1608  USE netcdf
1609 #ifdef W3_IG1
1610  USE w3gig1md, ONLY: w3addig
1611  USE w3canomd, ONLY: w3add2ndorder
1612 #endif
1613 
1614  IMPLICIT NONE
1615 
1616  !/
1617  !/ ------------------------------------------------------------------- /
1618 
1619  INTEGER, INTENT(IN) :: I, NCID, NREQ, INDREQ(NREQ)
1620  LOGICAL, INTENT(IN) :: ORDER
1621 
1622 
1623 
1624  !/ Local parameters
1625  !/
1626  INTEGER :: J, J1, I1, I2, ISP, IKM, &
1627  ITH, IK, ITT, NPART, IX, IY, ISEA
1628  INTEGER :: CURDATE(8), REFDATE(8)
1629 #ifdef W3_S
1630  INTEGER, SAVE :: IENT = 0
1631 #endif
1632  !
1633  REAL :: DEPTH, SQRTH, CDIR, SIX, R1, R2, &
1634  UDIR, UDIRR, UABS, XL, XH, XL2, XH2, &
1635  ET, EWN, ETR, ETX, ETY, EBND, EBX, &
1636  EBY, HSIG, WLEN, TMEAN, THMEAN, &
1637  THSPRD, EMAX, EL, EH, DENOM, FP, THP, &
1638  SPP, CD, USTAR, FACTOR, UNORM, ESTAR, &
1639  FPSTAR, FACF, FACE, FACS, HMAT, WNA, &
1640  XYZ, AGE1, AFR, AGE2, FACT, XSTAR, &
1641  YSTAR, FHIGH, ZWND, Z0, USTD, EMEAN, &
1642  FMEAN, WNMEAN, UDIRCA, CHARN, M2KM, &
1643  ICETHICK, ICECON
1644 #ifdef W3_FLX5
1645  REAL :: TAUA, TAUADIR, RHOAIR
1646 #endif
1647  REAL :: WN_R(NK),CG_ICE(NK), ALPHA_LIU(NK), &
1648  R(NK), WN(NK), CG(NK), APM(NK), &
1649  E3(NTH,NK,NREQ), E(NK,NTH), E1(NK), &
1650  THBND(NK), SPBND(NK), A(NTH,NK), &
1651  WN2(NTH,NK), &
1652  STT(NK,NTH), SWN(NK,NTH), SNL(NK,NTH),&
1653  SDS(NK,NTH), SBT(NK,NTH), SIS(NK,NTH),&
1654  XIN(NTH,NK), XNL(NTH,NK), XTR(NTH,NK),&
1655  XDS(NTH,NK), XDB(NTH,NK), XBT(NTH,NK),&
1656  XBS(NTH,NK), XXX(NTH,NK), DIA(NTH,NK),&
1657  XLN(NTH,NK), XWL(NTH,NK), XIS(NTH,NK),&
1658  SIN1(NK), SNL1(NK), SDS1(NK), &
1659  SBT1(NK), SIS1(NK), STT1(NK), &
1660  E1ALL(NK,6), UDIR1(NREQ), CDIR1(NREQ)
1661 #ifdef W3_FLX5
1662  REAL :: TAUDIR1(NREQ)
1663 #endif
1664  REAL, SAVE :: HSMIN = 0.05
1665 #ifdef W3_IS2
1666  REAL :: ICEF, ICEDMAX, DIA2(NTH,NK)
1667 #endif
1668 #ifdef W3_ST1
1669  REAL :: AMAX, FH1, FH2
1670 #endif
1671 #ifdef W3_ST2
1672  REAL :: AMAX, ALPHA(NK), FPI
1673 #endif
1674 #ifdef W3_ST3
1675  REAL :: AMAX, FMEANS, FMEANWS, TAUWX, TAUWY, &
1676  TAUWNX, TAUWNY
1677 #endif
1678 #ifdef W3_ST4
1679  REAL :: AMAX, FMEANS, FMEANWS, TAUWX, TAUWY, &
1680  TAUWNX, TAUWNY, FMEAN1, WHITECAP(1:4)
1681  REAL :: LAMBDA(NSPEC), DLWMEAN
1682 #endif
1683 #ifdef W3_ST6
1684  REAL :: AMAX, TAUWX, TAUWY, TAUWNX, TAUWNY
1685 #endif
1686 #ifdef W3_BS1
1687  REAL :: TAUSCX, TAUSCY
1688 #endif
1689 #ifdef W3_BT4
1690  REAL :: D50, PSIC, BEDFORM(3), TAUBBL(2)
1691 #endif
1692  REAL :: ICE
1693 #ifdef W3_STAB2
1694  REAL :: STAB0, STAB, COR1, COR2, ASFAC, &
1695  THARG1, THARG2
1696 #endif
1697  !
1698  DOUBLE PRECISION :: OUTJULDAY
1699  !
1700  CHARACTER*4 :: VAR1(6)
1701  !
1702  LOGICAL :: LASTSTATION=.false.
1703  LOGICAL :: SHORT=.true.
1704  LOGICAL :: LBREAK
1705 #ifdef W3_ST3
1706  LOGICAL :: LLWS(NSPEC)
1707 #endif
1708 #ifdef W3_ST4
1709  LOGICAL :: LLWS(NSPEC)
1710 #endif
1711  !
1712  DATA var1 / 'Sin ' , 'Snl ', 'Sds ' , 'Sbt ' , 'Sice', 'Stot' /
1713 
1714 
1715 
1716  !/
1717  !/ ------------------------------------------------------------------- /
1718  !/
1719  ! 1. Initialisations
1720  !
1721 #ifdef W3_S
1722  CALL strace (ient, 'W3EXNC')
1723 #endif
1724  !
1725  IF ( flagll ) THEN
1726  m2km = 1.
1727  ELSE
1728  m2km = 1.e-3
1729  END IF
1730  !
1731  xl = 1./xfr - 1.
1732  xh = xfr - 1.
1733  xl2 = xl**2
1734  xh2 = xh**2
1735  !
1736  IF ( itype .EQ. 3 ) THEN
1737  xln = 0.
1738  xin = 0.
1739  xnl = 0.
1740  xtr = 0.
1741  xds = 0.
1742  xdb = 0.
1743  xbt = 0.
1744  xbs = 0.
1745  xwl = 0.
1746  xis = 0.
1747  xxx = 0.
1748  END IF
1749  !
1750  CALL u2d('days since 1990-01-01 00:00:00',refdate,ierr)
1751  !
1752 #ifdef W3_T
1753  WRITE (ndst,9000) (flreq(j),j=1,nopts)
1754  WRITE (ndst,9001) itype, otype, nreq, scale1, scale2, flsrce
1755 #endif
1756 
1757  !
1758  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1759  ! Loop over output points.
1760  !
1761 
1762 
1763 
1764  !
1765  ! Selects first station index
1766  !
1767  IF (together) THEN
1768  j=1
1769  ELSE
1770  j=i
1771  END IF
1772  !
1773  ! Short version of the ww3_ounp code for ITYPE = 1
1774  ! and OTYPE = 3
1775  !
1776  IF (short.AND.itype.EQ.1.AND.otype.EQ.3) THEN
1777 
1778  depth = max( dmin, dpo(j) )
1779  sqrth = sqrt( depth )
1780  DO ik=1, nk
1781  six = sig(ik) * sqrth
1782  i1 = int(six/dsie)
1783  IF (i1.LE.n1max) THEN
1784  i2 = i1 + 1
1785  r1 = six/dsie - real(i1)
1786  r2 = 1. - r1
1787  wn(ik) = ( r2*ewn1(i1) + r1*ewn1(i2) ) / depth
1788  cg(ik) = ( r2*ecg1(i1) + r1*ecg1(i2) ) * sqrth
1789  ELSE
1790  wn(ik) = sig(ik)*sig(ik)/grav
1791  cg(ik) = 0.5 * grav / sig(ik)
1792  END IF
1793 #ifdef W3_T
1794  WRITE (ndst,9011) ik, tpi/sig(ik), wn(ik), cg(ik)
1795 #endif
1796  !
1797  END DO
1798 
1799  !
1800  ! Computes 2nd order spectrum
1801  !
1802 #ifdef W3_IG1
1803  IF (igpars(2).EQ.1) THEN
1804  IF(igpars(1).EQ.1) THEN
1805  CALL w3addig(spco(:,j),dpo(j),wn,cg,0)
1806  ELSE
1807  CALL w3add2ndorder(spco(:,j),dpo(j),wn,cg,0)
1808  END IF
1809  END IF
1810 #endif
1811  !
1812 
1813  DO j1=1, nreq
1814  DO ik=1, nk
1815  DO ith=1, nth
1816  isp = ith + (ik-1)*nth
1817  e3(ith,ik,j1) = spco(isp,indreq(j1))
1818  END DO
1819  END DO
1820  END DO
1821 
1822  CALL t2d(time,curdate,ierr)
1823  outjulday=tsub(refdate,curdate)
1824  iret=nf90_put_var(ncid,varid(1),outjulday,(/iout/))
1825  CALL check_err(iret,4)
1826  !
1827  IF (iout.EQ.1) THEN
1828  DO j1=1, nreq
1829  iret=nf90_put_var(ncid,varid(27),indreq(j1),(/j1/))
1830  CALL check_err(iret,5)
1831  iret=nf90_put_var(ncid,varid(2),ptnme(indreq(j1)), &
1832  start=(/1,j1/),count=(/len_trim(ptnme(indreq(j1))) ,1/))
1833  CALL check_err(iret,6)
1834  END DO
1835  END IF
1836  !
1837  DO j1=1, nreq
1838  IF ((flww3.NE.0).AND.(order)) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
1839  IF ((flww3.NE.0).AND.(.NOT.order)) iret=nf90_put_var(ncid,varid(3),flww3,(/iout,j1/))
1840  CALL check_err(iret,7)
1841  END DO
1842  !
1843  IF(order) iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,indreq(1:nreq)),(/1,iout/))
1844  IF(.NOT.order) iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,indreq(1:nreq)),(/iout,1/))
1845  CALL check_err(iret,8)
1846  IF(order) iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,indreq(1:nreq)),(/1,iout/))
1847  IF(.NOT.order) iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,indreq(1:nreq)),(/iout,1/))
1848  CALL check_err(iret,9)
1849  !
1850  DO j1=1,nreq
1851  udir1(j1) = mod( 270. - wdo(indreq(j1))*rade , 360. )
1852  cdir1(j1) = mod( 270. - cdo(indreq(j1))*rade , 360. )
1853 #ifdef W3_FLX5
1854  taudir1(j1) = mod( 270. - taudo(indreq(j1))*rade , 360. )
1855 #endif
1856  END DO
1857  !
1858  IF (ncvartype.LE.3) THEN
1859  IF(order) iret=nf90_put_var(ncid,varid(11),nint(dpo(indreq(1:nreq))/0.5),(/1,iout/))
1860  IF(.NOT.order) iret=nf90_put_var(ncid,varid(11),nint(dpo(indreq(1:nreq))/0.5),(/iout,1/))
1861  CALL check_err(iret,10)
1862  IF(order) iret=nf90_put_var(ncid,varid(12),nint(wao(indreq(1:nreq))/0.1),(/1,iout/))
1863  IF(.NOT.order) iret=nf90_put_var(ncid,varid(12),nint(wao(indreq(1:nreq))/0.1),(/iout,1/))
1864  CALL check_err(iret,11)
1865  IF(order) iret=nf90_put_var(ncid,varid(13),nint(udir1/0.1),(/1,iout/))
1866  IF(.NOT.order) iret=nf90_put_var(ncid,varid(13),nint(udir1/0.1),(/iout,1/))
1867  CALL check_err(iret,12)
1868  IF(order) iret=nf90_put_var(ncid,varid(14),nint(cao(indreq(1:nreq))/0.1),(/1,iout/))
1869  IF(.NOT.order) iret=nf90_put_var(ncid,varid(14),nint(cao(indreq(1:nreq))/0.1),(/iout,1/))
1870  CALL check_err(iret,13)
1871  IF(order) iret=nf90_put_var(ncid,varid(15),nint(cdir1/0.1),(/1,iout/))
1872  IF(.NOT.order) iret=nf90_put_var(ncid,varid(15),nint(cdir1/0.1),(/iout,1/))
1873  CALL check_err(iret,14)
1874  ELSE
1875  IF(order) iret=nf90_put_var(ncid,varid(11),dpo(indreq(1:nreq)),(/1,iout/))
1876  IF(.NOT.order) iret=nf90_put_var(ncid,varid(11),dpo(indreq(1:nreq)),(/iout,1/))
1877  CALL check_err(iret,10)
1878  IF(order) iret=nf90_put_var(ncid,varid(12),wao(indreq(1:nreq)),(/1,iout/))
1879  IF(.NOT.order) iret=nf90_put_var(ncid,varid(12),wao(indreq(1:nreq)),(/iout,1/))
1880  CALL check_err(iret,11)
1881  IF(order) iret=nf90_put_var(ncid,varid(13),udir1,(/1,iout/))
1882  IF(.NOT.order) iret=nf90_put_var(ncid,varid(13),udir1,(/iout,1/))
1883  CALL check_err(iret,12)
1884  IF(order) iret=nf90_put_var(ncid,varid(14),cao(indreq(1:nreq)),(/1,iout/))
1885  IF(.NOT.order) iret=nf90_put_var(ncid,varid(14),cao(indreq(1:nreq)),(/iout,1/))
1886  CALL check_err(iret,13)
1887  IF(order) iret=nf90_put_var(ncid,varid(15),cdir1,(/1,iout/))
1888  IF(.NOT.order) iret=nf90_put_var(ncid,varid(15),cdir1,(/iout,1/))
1889  CALL check_err(iret,14)
1890  END IF
1891  !
1892  IF (ncvartype.LE.3) THEN
1893  WHERE(e3(:,:,:).GE.0) e3(:,:,:)=nint(alog10(e3(:,:,:)+1e-12)/0.0004)
1894  END IF
1895  IF(order) iret=nf90_put_var(ncid,varid(10),e3(1:nth,1:nk,:), &
1896  start=(/1,1,1,iout/),count=(/nth,nk,nreq,1/))
1897  IF(.NOT.order) iret=nf90_put_var(ncid,varid(10),e3(1:nth,1:nk,1:nreq), &
1898  start=(/1,1,iout,1/),count=(/nth,nk,1,nreq/))
1899  CALL check_err(iret,15)
1900  !
1901  ! End of short version
1902  !
1903  ELSE
1904  !
1905  ! And here is the full thing with all options ITYPE and OTYPE ...
1906  !
1907  j1=1
1908  laststation=.false.
1909  !
1910  DO WHILE (.NOT.laststation)
1911  !
1912  IF ( flreq(j) ) THEN
1913  !
1914  ! Open netCDF file
1915  !
1916 #ifdef W3_T
1917  WRITE (ndst,9002) ptnme(j)
1918 #endif
1919  !
1920  ! 2. Calculate grid parameters using and inlined version of WAVNU1.
1921  !
1922  depth = max( dmin, dpo(j) )
1923  sqrth = sqrt( depth )
1924  udir = mod( 270. - wdo(j)*rade , 360. )
1925  udirca = wdo(j)*rade
1926  udirr = wdo(j)
1927  uabs = max( 0.001 , wao(j) )
1928  cdir = mod( 270. - cdo(j)*rade , 360. )
1929 #ifdef W3_FLX5
1930  taua = max( 0.001 , tauao(j))
1931  tauadir = mod( 270. - taudo(j)*rade , 360. )
1932  rhoair = max( 0. , dairo(j))
1933 #endif
1934 #ifdef W3_IS2
1935  icedmax = max( 0., icefo(j))
1936  icef = icedmax
1937 #endif
1938  icethick = max(0., iceho(j))
1939  icecon = max(0., iceo(j))
1940  !
1941 #ifdef W3_STAB2
1942  stab0 = zwind * grav / 273.
1943  stab = stab0 * aso(j) / max(5.,wao(j))**2
1944  stab = max( -1. , min( 1. , stab ) )
1945  tharg1 = max( 0. , ffng*(stab-ofstab))
1946  tharg2 = max( 0. , ffps*(stab-ofstab))
1947  cor1 = ccng * tanh(tharg1)
1948  cor2 = ccps * tanh(tharg2)
1949  asfac = sqrt( (1.+cor1+cor2)/shstab )
1950 #endif
1951  !
1952 #ifdef W3_T
1953  WRITE (ndst,9010) depth
1954 #endif
1955  DO ik=1, nk
1956  six = sig(ik) * sqrth
1957  i1 = int(six/dsie)
1958  IF (i1.LE.n1max) THEN
1959  i2 = i1 + 1
1960  r1 = six/dsie - real(i1)
1961  r2 = 1. - r1
1962  wn(ik) = ( r2*ewn1(i1) + r1*ewn1(i2) ) / depth
1963  cg(ik) = ( r2*ecg1(i1) + r1*ecg1(i2) ) * sqrth
1964  ELSE
1965  wn(ik) = sig(ik)*sig(ik)/grav
1966  cg(ik) = 0.5 * grav / sig(ik)
1967  END IF
1968 #ifdef W3_T
1969  WRITE (ndst,9011) ik, tpi/sig(ik), wn(ik), cg(ik)
1970 #endif
1971  !
1972  END DO
1973  !
1974  ! Computes 2nd order spectrum
1975  !
1976 #ifdef W3_IG1
1977  IF (igpars(2).EQ.1) THEN
1978  IF(igpars(1).EQ.1) THEN
1979  CALL w3addig(spco(:,j),dpo(j),wn,cg,0)
1980  ELSE
1981  CALL w3add2ndorder(spco(:,j),dpo(j),wn,cg,0)
1982  END IF
1983  END IF
1984 #endif
1985  !
1986  !
1987  ! 3. Prepare spectra etc.
1988  ! 3.a Mean wave parameters.
1989  !
1990  et = 0.
1991  ewn = 0.
1992  etr = 0.
1993  etx = 0.
1994  ety = 0.
1995  DO ik=1, nk
1996  ebnd = 0.
1997  ebx = 0.
1998  eby = 0.
1999  DO ith=1, nth
2000  isp = ith + (ik-1)*nth
2001  e(ik,ith) = spco(isp,j)
2002  ebnd = ebnd + spco(isp,j)
2003  ebx = ebx + spco(isp,j)*ecos(ith)
2004  eby = eby + spco(isp,j)*esin(ith)
2005  END DO
2006  e1(ik) = ebnd * dth
2007  apm(ik)= e1(ik) / ( tpi * grav**2 / sig(ik)**5 )
2008  IF ( e1(ik) .GT. 1.e-5) THEN
2009  thbnd(ik) = mod(630.- rade*atan2(eby,ebx),360.)
2010  spbnd(ik) = rade * sqrt( max( 0. , 2.*( 1. - &
2011  sqrt( max(0.,(ebx**2+eby**2)/ebnd**2) ) ) ) )
2012  ELSE
2013  thbnd(ik) = -999.9
2014  spbnd(ik) = -999.9
2015  END IF
2016  ebnd = e1(ik) * dsii(ik) * tpiinv
2017  et = et + ebnd
2018  ewn = ewn + ebnd / wn(ik)
2019  etr = etr + ebnd / sig(ik)
2020  etx = etx + ebx * dsii(ik)
2021  ety = ety + eby * dsii(ik)
2022  END DO
2023  !
2024  ! tail factors for radian action etc ...!
2025  !
2026  ebnd = e1(nk) * tpiinv / ( sig(nk) * dth )
2027  et = et + fte *ebnd
2028  ewn = ewn + ftwl*ebnd
2029  etr = etr + fttr*ebnd
2030  etx = dth*etx*tpiinv + fte*ebx*tpiinv/sig(nk)
2031  ety = dth*ety*tpiinv + fte*eby*tpiinv/sig(nk)
2032  !
2033  hsig = 4. * sqrt( et )
2034  IF ( hsig .GT. hsmin ) THEN
2035  wlen = ewn / et * tpi
2036  tmean = etr / et * tpi
2037  thmean = mod( 630. - rade*atan2(ety,etx) , 360. )
2038  thsprd = rade * sqrt( max( 0. , 2.*( 1. - sqrt( &
2039  max(0.,(etx**2+ety**2)/et**2) ) ) ) )
2040  IF ( thsprd .LT. 0.01*rade*dth ) thsprd = 0.
2041  ELSE
2042  wlen = 0.
2043  tmean = 0.
2044  thmean = 0.
2045  thsprd = 0.
2046  e1(1:nk) = 0.
2047  e(1:nk,1:nth) = 0.
2048  END IF
2049  !
2050  ! 3.b peak frequency
2051  !
2052  emax = e1(nk)
2053  ikm = nk
2054  !
2055  DO ik=nk-1, 1, -1
2056  IF ( e1(ik) .GT. emax ) THEN
2057  emax = e1(ik)
2058  ikm = ik
2059  END IF
2060  END DO
2061  !
2062  IF ( hsig .GE. hsmin .AND. ikm .NE. nk ) THEN
2063  IF ( ikm .EQ. 1 ) THEN
2064  el = - e1(ikm)
2065  ELSE
2066  el = e1(ikm-1) - e1(ikm)
2067  END IF
2068 
2069  eh = e1(ikm+1) - e1(ikm)
2070 
2071  denom = xl*eh - xh*el
2072  !
2073  fp = sig(ikm) * ( 1. + 0.5 * ( xl2*eh - xh2*el ) &
2074  / sign( max(abs(denom),1.e-15) , denom ) )
2075  thp = thbnd(ikm)
2076  spp = spbnd(ikm)
2077  IF ( spp .LT. 0.01*rade*dth ) spp = 0.
2078  ELSE
2079  fp = 0.
2080  thp = 0.
2081  spp = 0.
2082  END IF
2083  !
2084  ! 3.c spectral partitioning
2085  !
2086  IF ( itype.EQ.1 .AND. otype.EQ.4 ) THEN
2087  CALL w3part( e, uabs, udirca, depth, wn, npart, xpart, &
2088  dimxp )
2089  END IF
2090  !
2091  ! 3.d nondimensional parameters
2092  !
2093  IF ( ( itype.EQ.2 .AND. (otype.EQ.3.OR.otype.EQ.4) ) .OR. &
2094  ( itype.EQ.1 .AND. (otype.EQ.2) ) ) THEN
2095  !
2096  DO ik=1, nk
2097  factor = tpiinv * cg(ik) / sig(ik)
2098  DO ith=1, nth
2099  isp = ith + (ik-1)*nth
2100  a(ith,ik) = factor * spco(isp,j)
2101  wn2(ith,ik) = wn(ik)
2102  END DO
2103  END DO
2104  !
2105 #ifdef W3_STAB2
2106  uabs = uabs / asfac
2107 #endif
2108  !
2109 #ifdef W3_ST0
2110  zwnd = 10.
2111 #endif
2112 #ifdef W3_ST1
2113  zwnd = 10.
2114 #endif
2115 #ifdef W3_ST2
2116  zwnd = zwind
2117 #endif
2118 #ifdef W3_ST3
2119  zwnd = zzwnd
2120  tauwx = 0.
2121  tauwy = 0.
2122  llws(:) = .true.
2123 #endif
2124 #ifdef W3_ST4
2125  llws(:) = .true.
2126  zwnd = zzwnd
2127  tauwx = 0.
2128  tauwy = 0.
2129 #endif
2130 #ifdef W3_ST6
2131  zwnd = 10.
2132 #endif
2133 
2134  !
2135 #ifdef W3_ST1
2136  CALL w3spr1 (a, cg, wn, emean, fmean, wnmean, amax)
2137  fp = 0.85 * fmean
2138 #endif
2139 #ifdef W3_ST2
2140  CALL w3spr2 (a, cg, wn, depth, fp , uabs, ustar, &
2141  emean, fmean, wnmean, amax, alpha, fp )
2142 #endif
2143 #ifdef W3_ST3
2144  CALL w3spr3 (a, cg, wn, emean, fmean, fmeans, &
2145  wnmean, amax, uabs, udirr, ustar, ustd,&
2146  tauwx, tauwy, cd, z0, charn, llws, fmeanws )
2147 #endif
2148 #ifdef W3_ST4
2149  CALL w3spr4 (a, cg, wn, emean, fmean, fmean1, &
2150  wnmean, amax, uabs, udirr, &
2151 #ifdef W3_FLX5
2152  taua, tauadir, rhoair, &
2153 #endif
2154  ustar, ustd, tauwx, tauwy, cd, z0, &
2155  charn, llws, fmeanws, dlwmean )
2156 #endif
2157 #ifdef W3_ST6
2158  CALL w3spr6 (a, cg, wn, emean, fmean, wnmean, amax, fp)
2159 #endif
2160  !
2161 #ifdef W3_FLX1
2162  CALL w3flx1 ( zwnd, uabs, udirr, &
2163  ustar, ustd, z0, cd )
2164 #endif
2165 #ifdef W3_FLX2
2166  CALL w3flx2 ( zwnd, depth, fp, uabs, udirr, &
2167  ustar, ustd, z0, cd )
2168 #endif
2169 #ifdef W3_FLX3
2170  CALL w3flx3 ( zwnd, depth, fp, uabs, udirr, &
2171  ustar, ustd, z0, cd )
2172 #endif
2173 #ifdef W3_FLX4
2174  CALL w3flx4 ( zwnd, uabs, udirr, ustar, ustd, z0, cd )
2175 #endif
2176 #ifdef W3_FLX5
2177  CALL w3flx5 ( zwnd, uabs, udirr, taua, tauadir, &
2178  rhoair, ustar, ustd, z0, cd, charn )
2179 #endif
2180  !
2181  DO itt=1, 4
2182 #ifdef W3_ST2
2183  CALL w3sin2 (a, cg, wn2, uabs, udirr, cd, z0, &
2184  fpi, xin, dia )
2185  CALL w3spr2 (a, cg, wn, depth, fpi, uabs, ustar, &
2186  emean, fmean, wnmean, amax, alpha, fp )
2187 #endif
2188 #ifdef W3_ST3
2189  ix=1
2190  iy=1
2191  CALL w3sin3 ( a, cg, wn2, uabs, ustar, dair/dwat,&
2192  aso(j), udirr, z0, cd, tauwx, tauwy,&
2193  tauwnx, tauwny, ice, xin, dia, llws, ix, iy )
2194  CALL w3spr3 (a, cg, wn, emean, fmean, fmeans, &
2195  wnmean, amax, uabs, udirr, ustar, ustd,&
2196  tauwx, tauwy, cd, z0, charn, llws, fmeanws )
2197 #endif
2198 #ifdef W3_ST4
2199  ix=1
2200  iy=1
2201  CALL w3spr4 (a, cg, wn, emean, fmean, fmean1, &
2202  wnmean, amax, uabs, udirr, &
2203 #ifdef W3_FLX5
2204  taua, tauadir, rhoair, &
2205 #endif
2206  ustar, ustd, tauwx, tauwy, cd, z0, &
2207  charn, llws, fmeanws,dlwmean )
2208  CALL w3sds4 ( a, wn, cg, ustar, ustd, depth, dair, xds, &
2209  dia, ix, iy, lambda, whitecap, dlwmean )
2210  CALL w3sin4 (a, cg, wn2, uabs, ustar, dair/dwat, &
2211  aso(j), udirr, z0, cd, tauwx, tauwy, tauwnx, &
2212  tauwny, xin, dia, llws, ix, iy, lambda )
2213 #endif
2214 #ifdef W3_FLX2
2215  CALL w3flx2 ( zwnd, depth, fp, uabs, udirr, &
2216  ustar, ustd, z0, cd )
2217 #endif
2218 #ifdef W3_FLX3
2219  CALL w3flx3 ( zwnd, depth, fp, uabs, udirr, &
2220  ustar, ustd, z0, cd )
2221 #endif
2222  END DO
2223  !
2224  ! Add alternative flux calculations here as part of !/ST2 option ....
2225  ! Also add before actual source term calculation !!!
2226  !
2227 #ifdef W3_STAB2
2228  uabs = uabs * asfac
2229 #endif
2230  !
2231  IF ( wao(j) .LT. 0.01 ) THEN
2232  unorm = 0.
2233  estar = 0.
2234  fpstar = 0.
2235  ELSE
2236  IF ( otype.EQ.3 ) THEN
2237  unorm = ustar
2238  ELSE
2239  unorm = wao(j)
2240  END IF
2241  estar = et * grav**2 / unorm**4
2242  fpstar = fp * tpiinv * unorm / grav
2243  xstar = ptloc(1,j) * grav / unorm**2
2244  ystar = ptloc(2,j) * grav / unorm**2
2245  IF ( flagll ) THEN
2246  xstar = xstar * dera * radius &
2247  * cos(ptloc(2,j)*dera)
2248  ystar = ystar * dera * radius
2249  END IF
2250  END IF
2251  !
2252  END IF ! 3.d
2253 
2254  !
2255  ! 3.e source terms
2256  !
2257  IF ( itype.EQ.3 ) THEN
2258  !
2259  DO ik=1, nk
2260  factor = tpiinv * cg(ik) / sig(ik)
2261  DO ith=1, nth
2262  a(ith,ik) = factor * spco(ith+(ik-1)*nth,j)
2263  wn2(ith,ik) = wn(ik)
2264  END DO
2265  END DO
2266  !
2267 #ifdef W3_STAB2
2268  uabs = uabs / asfac
2269 #endif
2270  !
2271 #ifdef W3_ST0
2272  zwnd = 10.
2273 #endif
2274 #ifdef W3_ST1
2275  zwnd = 10.
2276 #endif
2277 #ifdef W3_ST2
2278  zwnd = zwind
2279 #endif
2280 #ifdef W3_ST3
2281  zwnd = zzwnd
2282 #endif
2283 #ifdef W3_ST0
2284  ustar = 1.
2285 #endif
2286 #ifdef W3_ST1
2287  ustar = 1.
2288 #endif
2289 #ifdef W3_ST2
2290  ustar = 1.
2291 #endif
2292 #ifdef W3_ST3
2293  ustar = 0.
2294  ustd = 0.
2295  tauwx = 0.
2296  tauwy = 0.
2297 #endif
2298 #ifdef W3_ST4
2299  zwnd = zzwnd
2300  ustar = 0.
2301  ustd = 0.
2302  tauwx = 0.
2303  tauwy = 0.
2304 #endif
2305 #ifdef W3_ST6
2306  zwnd = 10.
2307 #endif
2308  !
2309 #ifdef W3_ST0
2310  fhigh = sig(nk)
2311 #endif
2312 #ifdef W3_ST1
2313  CALL w3spr1 (a, cg, wn, emean, fmean, wnmean, amax)
2314  fp = 0.85 * fmean
2315  fh1 = fxfm * fmean
2316  fh2 = fxpm / ustar
2317  fhigh = max( fh1 , fh2 )
2318 #endif
2319 #ifdef W3_ST2
2320  CALL w3spr2 (a, cg, wn, depth, fp , uabs, ustar, &
2321  emean, fmean, wnmean, amax, alpha, fp )
2322 #endif
2323 #ifdef W3_ST3
2324  CALL w3spr3 (a, cg, wn, emean, fmean, fmeans, &
2325  wnmean, amax, uabs, udirr, ustar, ustd,&
2326  tauwx, tauwy, cd, z0, charn, llws, fmeanws )
2327 #endif
2328 #ifdef W3_ST4
2329  CALL w3spr4 (a, cg, wn, emean, fmean, fmean1, &
2330  wnmean, amax, uabs, udirr, &
2331 #ifdef W3_FLX5
2332  taua, tauadir, rhoair, &
2333 #endif
2334  ustar, ustd, tauwx, tauwy, cd, z0, &
2335  charn, llws, fmeanws, dlwmean )
2336  CALL w3sds4 ( a, wn, cg, ustar, ustd, depth, dair, xds, &
2337  dia, ix, iy, lambda, whitecap, dlwmean )
2338 #endif
2339 #ifdef W3_ST6
2340  CALL w3spr6 (a, cg, wn, emean, fmean, wnmean, amax, fp)
2341  fhigh = sig(nk)
2342 #endif
2343  !
2344 #ifdef W3_FLX1
2345  CALL w3flx1 ( zwnd, uabs, udirr, &
2346  ustar, ustd, z0, cd )
2347 #endif
2348 #ifdef W3_FLX2
2349  CALL w3flx2 ( zwnd, depth, fp, uabs, udirr, &
2350  ustar, ustd, z0, cd )
2351 #endif
2352 #ifdef W3_FLX3
2353  CALL w3flx3 ( zwnd, depth, fp, uabs, udirr, &
2354  ustar, ustd, z0, cd )
2355 #endif
2356 #ifdef W3_FLX4
2357  CALL w3flx4 ( zwnd, uabs, udirr, ustar, ustd, z0, cd )
2358 #endif
2359 #ifdef W3_FLX5
2360  CALL w3flx5 ( zwnd, uabs, udirr, taua, tauadir, &
2361  rhoair, ustar, ustd, z0, cd, charn )
2362 #endif
2363  !
2364  DO itt=1, 3
2365 #ifdef W3_ST2
2366  CALL w3sin2 (a, cg, wn2, uabs, udirr, cd, z0, &
2367  fpi, xin, dia )
2368  CALL w3spr2 (a, cg, wn, depth, fpi, uabs, ustar, &
2369  emean, fmean, wnmean, amax, alpha, fp )
2370 #endif
2371 #ifdef W3_ST3
2372  CALL w3spr3 (a, cg, wn, emean, fmean, fmeans, &
2373  wnmean, amax, uabs, udirr, ustar, ustd,&
2374  tauwx, tauwy, cd, z0, charn, llws, fmeanws )
2375  CALL w3sin3 ( a, cg, wn2, uabs, ustar, dair/dwat,&
2376  aso(j), udirr, z0, cd,tauwx, tauwy, &
2377  tauwnx, tauwny, ice, xin, dia, llws, ix, iy )
2378 #endif
2379 #ifdef W3_ST4
2380  CALL w3spr4 (a, cg, wn, emean, fmean, fmean1, &
2381  wnmean, amax, uabs, udirr, &
2382 #ifdef W3_FLX5
2383  taua, tauadir, rhoair, &
2384 #endif
2385  ustar, ustd, tauwx, tauwy, cd, z0, &
2386  charn, llws, fmeanws, dlwmean )
2387  CALL w3sin4 (a, cg, wn2, uabs, ustar, dair/dwat, &
2388  aso(j), udirr, z0, cd, tauwx, tauwy,tauwnx,&
2389  tauwny, xin, dia, llws, ix, iy, lambda )
2390 #endif
2391 #ifdef W3_FLX2
2392  CALL w3flx2 ( zwnd, depth, fp, uabs, udirr, &
2393  ustar, ustd, z0, cd )
2394 #endif
2395 #ifdef W3_FLX3
2396  CALL w3flx3 ( zwnd, depth, fp, uabs, udirr, &
2397  ustar, ustd, z0, cd )
2398 #endif
2399  END DO
2400  !
2401 #ifdef W3_ST2
2402  fhigh = xfc * fpi
2403 #endif
2404  !
2405  IF ( flsrce(2) ) THEN
2406 #ifdef W3_LN1
2407  CALL w3sln1 (wn, fhigh, ustar, udirr, xln )
2408 #endif
2409  !
2410 #ifdef W3_ST1
2411  CALL w3sin1 (a, wn2, ustar, udirr, xin, dia )
2412 #endif
2413 #ifdef W3_ST2
2414  CALL w3sin2 (a, cg, wn2, uabs, udirr, cd, z0,&
2415  fpi, xin, dia )
2416 #endif
2417 #ifdef W3_ST3
2418  CALL w3sin3 ( a, cg, wn2, uabs, ustar, &
2419  dair/dwat, aso(j), udirr, &
2420  z0, cd, tauwx, tauwy,tauwnx, tauwny, &
2421  ice, xin, dia, llws, ix, iy )
2422 #endif
2423  !
2424 #ifdef W3_ST4
2425  CALL w3spr4 (a, cg, wn, emean, fmean, fmean1, &
2426  wnmean, amax, uabs, udirr, &
2427 #ifdef W3_FLX5
2428  taua, tauadir, rhoair, &
2429 #endif
2430  ustar, ustd, tauwx, tauwy, cd, z0, &
2431  charn, llws, fmeanws, dlwmean )
2432  CALL w3sds4 ( a, wn, cg, ustar, ustd, depth, dair, xds, &
2433  dia, ix, iy, lambda, whitecap, dlwmean )
2434  CALL w3sin4 (a, cg, wn2, uabs, ustar, dair/dwat, &
2435  aso(j), udirr, z0, cd, tauwx, tauwy, tauwnx, &
2436  tauwny, xin, dia, llws, ix, iy, lambda )
2437 #endif
2438 #ifdef W3_ST6
2439  CALL w3sin6 (a, cg, wn2, uabs, ustar, udirr, cd, dair, &
2440  tauwx, tauwy, tauwnx, tauwny, xin, dia )
2441 #endif
2442  END IF
2443  IF ( flsrce(3) ) THEN
2444 #ifdef W3_NL1
2445  IF (iqtpe.GT.0) THEN
2446  CALL w3snl1 ( a, cg, wnmean*depth, xnl, dia )
2447  ELSE
2448  CALL w3snlgqm ( a, cg, wn, depth, xnl, dia )
2449  END IF
2450 #endif
2451 #ifdef W3_NL2
2452  CALL w3snl2 ( a, cg, depth, xnl, dia )
2453 #endif
2454 #ifdef W3_NL3
2455  CALL w3snl3 ( a, cg, wn, depth, xnl, dia )
2456 #endif
2457 #ifdef W3_NL4
2458  CALL w3snl4 ( a, cg, wn, depth, xnl, dia )
2459 #endif
2460  END IF
2461  IF ( flsrce(4) ) THEN
2462 #ifdef W3_ST1
2463  CALL w3sds1 ( a, wn2, emean, fmean, wnmean, &
2464  xds, dia )
2465 #endif
2466 #ifdef W3_ST2
2467  CALL w3sds2 ( a, cg, wn, fpi, ustar, &
2468  alpha, xds, dia )
2469 #endif
2470 #ifdef W3_ST3
2471  CALL w3sds3 ( a, wn, cg, emean, fmeans, wnmean, &
2472  ustar, ustd, depth, xds, dia, ix, iy )
2473 #endif
2474 #ifdef W3_ST4
2475  CALL w3spr4 (a, cg, wn, emean, fmean, fmean1, &
2476  wnmean, amax, uabs, udirr, &
2477 #ifdef W3_FLX5
2478  taua, tauadir, rhoair, &
2479 #endif
2480  ustar, ustd, tauwx, tauwy, cd, z0, &
2481  charn, llws, fmeanws, dlwmean )
2482  CALL w3sds4 ( a, wn, cg, ustar, ustd, depth, dair, xds, &
2483  dia, ix, iy, lambda, whitecap , dlwmean)
2484 #endif
2485 #ifdef W3_ST6
2486  CALL w3sds6 ( a, cg, wn, xds, dia )
2487  IF (swl6s6) CALL w3swl6 ( a, cg, wn, xwl, dia )
2488 #endif
2489  !
2490 #ifdef W3_DB1
2491  CALL w3sdb1 ( i, a, depth, emean, fmean, &
2492  wnmean, cg, lbreak, xdb, dia )
2493 #endif
2494  END IF
2495  IF ( flsrce(5) ) THEN
2496 #ifdef W3_BT1
2497  CALL w3sbt1 ( a, cg, wn, depth, xbt, dia )
2498 #endif
2499 #ifdef W3_BT4
2500  ix=1 ! to be fixed later
2501  iy=1 ! to be fixed later
2502  isea=1 ! to be fixed later
2503  d50 = sed_d50(isea)
2504  psic= sed_psic(isea)
2505  CALL w3sbt4 ( a, cg, wn, depth, d50, psic, taubbl, &
2506  bedform, xbt, dia, ix, iy )
2507 #endif
2508 
2509  ! see remarks about BT8 and BT9 in ww3_outp.ftn
2510  !....broken....!/BT8 CALL W3SBT8 ( SPEC, DEPTH, VSBT, VDBT, IX, IY )
2511  !....broken....!/BT9 CALL W3SBT9 ( SPEC, DEPTH, VSBT, VDBT, IX, IY )
2512 
2513  !
2514 #ifdef W3_BS1
2515  CALL w3sbs1 ( a, cg, wn, depth, &
2516  cao(j)*cos(cdo(j)), cao(j)*sin(cdo(j)), &
2517  tauscx, tauscy, xbs, dia )
2518 #endif
2519  !
2520  END IF
2521  IF ( flsrce(6) ) THEN
2522  IF (iicedisp) THEN
2523  CALL liu_forward_dispersion (icethick,0.,depth, &
2524  sig,wn_r,cg_ice,alpha_liu)
2525  ELSE
2526  wn_r=wn
2527  cg_ice=cg
2528  END IF
2529  !
2530 #ifdef W3_IS2
2531  CALL w3sis2(a, depth, icecon, icethick, icef, icedmax, &
2532  ix, iy, xis, dia, dia2, wn, cg, wn_r, cg_ice, r)
2533 #endif
2534  END IF
2535  !
2536 #ifdef W3_STAB2
2537  uabs = uabs * asfac
2538 #endif
2539  !
2540  IF ( iscale.EQ.0 .OR. iscale.EQ.3 ) THEN
2541  facf = tpiinv
2542  face = 1.
2543  facs = 1.
2544  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.4 ) THEN
2545  facf = tpiinv * uabs / grav
2546  face = grav**3 / uabs**5
2547  facs = grav**2 / uabs**4
2548  ELSE IF ( iscale.EQ.2 .OR. iscale.EQ.5 ) THEN
2549  facf = tpiinv * ustar / grav
2550  face = grav**3 / ustar**5
2551  facs = grav**2 / ustar**4
2552  END IF
2553  !
2554  DO ik=1, nk
2555  factor = tpi / cg(ik) * sig(ik)
2556  e1(ik) = 0.
2557  sin1(ik) = 0.
2558  snl1(ik) = 0.
2559  sds1(ik) = 0.
2560  sbt1(ik) = 0.
2561  sis1(ik) = 0.
2562  stt1(ik) = 0.
2563  DO ith=1, nth
2564  isp = ith + (ik-1)*nth
2565  e(ik,ith) = spco(isp,j)
2566  swn(ik,ith) = ( xln(ith,ik) + xin(ith,ik) ) * factor
2567  snl(ik,ith) = ( xnl(ith,ik) + xtr(ith,ik) ) * factor
2568  sds(ik,ith) = ( xds(ith,ik) + xdb(ith,ik) ) * factor
2569 #ifdef W3_ST6
2570  sds(ik,ith) = sds(ik,ith) +(xwl(ith,ik) * factor)
2571 #endif
2572  sbt(ik,ith) = ( xbt(ith,ik) + xbs(ith,ik) ) * factor
2573  sis(ik,ith) = xis(ith,ik) * factor
2574  stt(ik,ith) = swn(ik,ith) + snl(ik,ith) + sds(ik,ith) + &
2575  sbt(ik,ith) + sis(ik,ith) + xxx(ith,ik) * factor
2576  e1(ik) = e1(ik) + e(ik,ith)
2577  sin1(ik) = sin1(ik) + swn(ik,ith)
2578  snl1(ik) = snl1(ik) + snl(ik,ith)
2579  sds1(ik) = sds1(ik) + sds(ik,ith)
2580  sbt1(ik) = sbt1(ik) + sbt(ik,ith)
2581  sis1(ik) = sis1(ik) + sis(ik,ith)
2582  END DO
2583  e1(ik) = e1(ik) * dth * face
2584  sin1(ik) = sin1(ik) * dth * facs
2585  snl1(ik) = snl1(ik) * dth * facs
2586  sds1(ik) = sds1(ik) * dth * facs
2587  sbt1(ik) = sbt1(ik) * dth * facs
2588  sis1(ik) = sis1(ik) * dth * facs
2589  END DO
2590  !
2591  stt1 = sin1 + snl1 + sds1 + sbt1 + sis1
2592  e1all(:,1) = sin1
2593  e1all(:,2) = snl1
2594  e1all(:,3) = sds1
2595  e1all(:,4) = sbt1
2596  e1all(:,5) = sis1
2597  e1all(:,6) = stt1
2598  !
2599  END IF ! 3.e
2600 
2601  !
2602  ! 4.a Perform output type 1 ( print plots / tables / file )
2603  !
2604  IF ( itype .EQ. 1 ) THEN
2605  !
2606  ! Format Time
2607  !
2608  IF ( otype .NE. 1 ) THEN
2609 
2610  CALL t2d(time,curdate,ierr)
2611  outjulday=tsub(refdate,curdate)
2612  iret=nf90_put_var(ncid,varid(1),outjulday,(/iout/))
2613  CALL check_err(iret,16)
2614  END IF
2615 
2616 
2617  !
2618  ! Performs subtype 1
2619  !
2620  IF ( otype .EQ. 1 ) THEN
2621  !
2622  IF ( scale1 .GE. 0. ) &
2623  CALL prt1ds (ndso, nk, e1, sig(1:nk), 'RAD/S',&
2624  17, scale1, 'E(f)', 'm^2s', ptnme(j) )
2625  IF ( scale2 .GE. 0. ) &
2626  CALL prt2ds (ndso, nk, nk, nth, e, sig(1:nk), &
2627  'RAD/S', 1., scale2, 0.0001, 'E(f,th)', &
2628  'm^2s', ptnme(j) )
2629  IF ( iaproc .EQ. napout ) WRITE (ndso,910) dpo(j), uabs
2630  IF ( (wao(j) .GT. 0.) .AND. (iaproc .EQ. napout) ) WRITE (ndso,911) udir
2631  IF ( iaproc .EQ. napout ) WRITE (ndso,912) aso(j), cao(j)
2632  IF ( (cao(j) .GT. 0.) .AND. (iaproc .EQ. napout) ) WRITE (ndso,913) cdir
2633  IF ( iaproc .EQ. napout ) WRITE (ndso,914) hsig, wlen, tmean, thmean, thsprd
2634 
2635 
2636  !
2637  ! Performs subtype 2
2638  !
2639  ELSE IF ( otype .EQ. 2 ) THEN
2640 
2641  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2642  CALL check_err(iret,17)
2643  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2644  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2645  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2646  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2647  iret=nf90_put_var(ncid,varid(7),dpo(j),(/j1,iout/))
2648  iret=nf90_put_var(ncid,varid(8),ustar,(/j1,iout/))
2649  iret=nf90_put_var(ncid,varid(9),wao(j),(/j1,iout/))
2650  iret=nf90_put_var(ncid,varid(10),udir,(/j1,iout/))
2651 
2652  IF ( fp .EQ. 0. ) fp = sig(nk)
2653  iret=nf90_put_var(ncid,varid(11),sig(1:nk)/fp,start=(/1,j1,iout /),count=(/nk,1,1/))
2654  iret=nf90_put_var(ncid,varid(12),e1(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2655  iret=nf90_put_var(ncid,varid(13),thbnd(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2656  iret=nf90_put_var(ncid,varid(14),spbnd(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2657  iret=nf90_put_var(ncid,varid(15),apm(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2658 
2659 
2660  !
2661  ! Performs subtype 3
2662  !
2663  ELSE IF ( otype .EQ. 3 ) THEN
2664  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2665  CALL check_err(iret,18)
2666  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2667  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2668  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2669  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2670  IF (ncvartype.LE.3) THEN
2671  iret=nf90_put_var(ncid,varid(11),nint(dpo(j)/0.5),(/j1,iout/))
2672  iret=nf90_put_var(ncid,varid(12),nint(wao(j)/0.1),(/j1,iout/))
2673  iret=nf90_put_var(ncid,varid(13),nint(udir/0.1),(/j1,iout/))
2674  iret=nf90_put_var(ncid,varid(14),nint(cao(j)/0.1),(/j1,iout/))
2675  iret=nf90_put_var(ncid,varid(15),nint(cdir/0.1),(/j1,iout/))
2676  ELSE
2677  iret=nf90_put_var(ncid,varid(11),dpo(j),(/j1,iout/))
2678  iret=nf90_put_var(ncid,varid(12),wao(j),(/j1,iout/))
2679  iret=nf90_put_var(ncid,varid(13),udir,(/j1,iout/))
2680  iret=nf90_put_var(ncid,varid(14),cao(j),(/j1,iout/))
2681  iret=nf90_put_var(ncid,varid(15),cdir,(/j1,iout/))
2682  END IF
2683  IF (ncvartype.LE.3) THEN
2684  WHERE(e.GE.0) e=nint(alog10(e+1e-12)/0.0004)
2685  END IF
2686  iret=nf90_put_var(ncid,varid(10),transpose(e(1:nk,1:nth)), &
2687  start=(/1,1,j1,iout/),count=(/nth,nk,1,1/))
2688  !
2689  ! Performs subtype 4
2690  !
2691  ELSE IF ( otype .EQ. 4 ) THEN
2692  !
2693  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2694  CALL check_err(iret,19)
2695  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2696  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2697  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2698  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2699  iret=nf90_put_var(ncid,varid(6),npart,(/j1,iout/))
2700  iret=nf90_put_var(ncid,varid(7),depth,(/j1,iout/))
2701  iret=nf90_put_var(ncid,varid(8),wao(j),(/j1,iout/))
2702  iret=nf90_put_var(ncid,varid(9),udir,(/j1,iout/))
2703  iret=nf90_put_var(ncid,varid(10),cao(j),(/j1,iout/))
2704  iret=nf90_put_var(ncid,varid(11),cdir,(/j1,iout/))
2705  ! XPART infos - see w3partmd.ftn - SUBROUTINE PTMEAN
2706  iret=nf90_put_var(ncid,varid(12),xpart(1,0:npart), &
2707  start=(/1,j1,iout/),count=(/npart,1,1/))
2708  iret=nf90_put_var(ncid,varid(13),xpart(2,0:npart), &
2709  start=(/1,j1,iout/),count=(/npart,1,1/))
2710  iret=nf90_put_var(ncid,varid(14),xpart(3,0:npart),start=(/1,j1,iout/),count=(/npart,1,1/))
2711  iret=nf90_put_var(ncid,varid(15),xpart(4,0:npart),start=(/1,j1,iout/),count=(/npart,1,1/))
2712  iret=nf90_put_var(ncid,varid(16),xpart(5,0:npart),start=(/1,j1,iout/),count=(/npart,1,1/))
2713  iret=nf90_put_var(ncid,varid(17),xpart(6,0:npart),start=(/1,j1,iout/),count=(/npart,1,1/))
2714  iret=nf90_put_var(ncid,varid(18),xpart(12,0:npart),start=(/1,j1,iout/),count=(/npart,1,1/))
2715  iret=nf90_put_var(ncid,varid(19),xpart(13,0:npart),start=(/1,j1,iout/),count=(/npart,1,1/))
2716  iret=nf90_put_var(ncid,varid(20),xpart(14,0:npart),start=(/1,j1,iout/),count=(/npart,1,1/))
2717  !
2718  END IF
2719 
2720  !
2721  ! 4.b Perform output type 2 ( tables )
2722  !
2723  ELSE IF ( itype .EQ. 2 ) THEN
2724 
2725  ! Format Time
2726  CALL t2d(time,curdate,ierr)
2727  outjulday=tsub(refdate,curdate)
2728  iret=nf90_put_var(ncid,varid(1),outjulday,(/iout/))
2729 
2730  !
2731  ! Performs subtype 1
2732  !
2733  IF ( otype .EQ. 1 ) THEN
2734 
2735  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2736  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2737  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2738  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2739  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2740  iret=nf90_put_var(ncid,varid(6),dpo(j),(/ j1,iout /))
2741  iret=nf90_put_var(ncid,varid(7),cao(j),(/ j1,iout /))
2742  iret=nf90_put_var(ncid,varid(8),cdir,(/ j1,iout /))
2743  iret=nf90_put_var(ncid,varid(9),wao(j),(/ j1,iout /))
2744  iret=nf90_put_var(ncid,varid(10),udir,(/ j1,iout /))
2745 #ifdef W3_SETUP
2746  iret=nf90_put_var(ncid,varid(11),zet_seto,(/ j1,iout /))
2747 #endif
2748 
2749  !
2750  ! Performs subtype 2
2751  !
2752  ELSE IF ( otype .EQ. 2 ) THEN
2753 
2754  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2755  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2756  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2757  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2758  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2759  iret=nf90_put_var(ncid,varid(6),hsig,(/ j1,iout /))
2760  iret=nf90_put_var(ncid,varid(7),wlen,(/ j1,iout /))
2761  iret=nf90_put_var(ncid,varid(8),tmean,(/ j1,iout /))
2762  iret=nf90_put_var(ncid,varid(9),thp,(/ j1,iout /))
2763  iret=nf90_put_var(ncid,varid(10),spp,(/ j1,iout /))
2764  iret=nf90_put_var(ncid,varid(11),fp*tpiinv,(/ j1,iout /))
2765  iret=nf90_put_var(ncid,varid(12),thmean,(/ j1,iout /))
2766  iret=nf90_put_var(ncid,varid(13),thsprd,(/ j1,iout /))
2767 
2768  !
2769  ! Performs subtype 3
2770  !
2771  ELSE IF ( otype .EQ. 3 ) THEN
2772 
2773  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2774  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2775  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2776  iret=nf90_put_var(ncid,varid(4),1.e-4*xstar,(/j1,iout/))
2777  iret=nf90_put_var(ncid,varid(5),1.e-4*ystar,(/j1,iout/))
2778  iret=nf90_put_var(ncid,varid(6),unorm,(/ j1,iout /))
2779  iret=nf90_put_var(ncid,varid(7),estar,(/ j1,iout /))
2780  iret=nf90_put_var(ncid,varid(8),fpstar,(/ j1,iout /))
2781  iret=nf90_put_var(ncid,varid(9),cd*1000.,(/ j1,iout /))
2782  iret=nf90_put_var(ncid,varid(10),apm(nk)*100.,(/ j1,iout /))
2783 
2784  !
2785  ! Performs subtype 4
2786  !
2787  ELSE IF ( otype .EQ. 4 ) THEN
2788 
2789  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2790  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2791  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2792  iret=nf90_put_var(ncid,varid(4),xstar,(/j1,iout/))
2793  iret=nf90_put_var(ncid,varid(5),ystar,(/j1,iout/))
2794  iret=nf90_put_var(ncid,varid(6),unorm,(/ j1,iout /))
2795  iret=nf90_put_var(ncid,varid(7),estar,(/ j1,iout /))
2796  iret=nf90_put_var(ncid,varid(8),fpstar,(/ j1,iout /))
2797  iret=nf90_put_var(ncid,varid(9),cd*1000.,(/ j1,iout /))
2798  iret=nf90_put_var(ncid,varid(10),apm(nk)*100.,(/ j1,iout /))
2799 
2800  !
2801  ! Performs subtype 5
2802  !
2803  ELSE IF ( otype .EQ. 5 ) THEN
2804  hmat = min( 100. , 3.33*grav*hsig/uabs**2 )
2805  IF ( hsig .GE. hsmin ) THEN
2806  CALL wavnu1 ( fp, dpo(j), wna, xyz )
2807  age1 = min( 100. , fp / wna / uabs )
2808  afr = tpi / tmean
2809  CALL wavnu1 ( afr, dpo(j), wna, xyz )
2810  age2 = min( 100. , afr / wna / uabs )
2811  ELSE
2812  age1 = nf90_fill_float
2813  age2 = nf90_fill_float
2814  END IF
2815 
2816  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2817  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2818  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2819  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2820  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2821  iret=nf90_put_var(ncid,varid(6),wao(j),(/ j1,iout /))
2822  iret=nf90_put_var(ncid,varid(7),udir,(/ j1,iout /))
2823  iret=nf90_put_var(ncid,varid(8),hsig,(/ j1,iout /))
2824  iret=nf90_put_var(ncid,varid(9),hmat,(/ j1,iout /))
2825  iret=nf90_put_var(ncid,varid(10),age1,(/ j1,iout /))
2826  iret=nf90_put_var(ncid,varid(11),age2,(/ j1,iout /))
2827  iret=nf90_put_var(ncid,varid(12),aso(j),(/ j1,iout /))
2828 
2829  !
2830  ! Performs subtype 6
2831  !
2832  ELSE IF ( otype .EQ. 6 ) THEN
2833 
2834  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2835  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2836  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2837  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2838  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2839  iret=nf90_put_var(ncid,varid(6),wao(j),(/ j1,iout /))
2840  iret=nf90_put_var(ncid,varid(7),udir,(/ j1,iout /))
2841  iret=nf90_put_var(ncid,varid(8),hsig,(/ j1,iout /))
2842 
2843  IF ( hsig .GE. hsmin ) THEN
2844  iret=nf90_put_var(ncid,varid(9),tpi/fp,(/ j1,iout /))
2845  ELSE
2846  iret=nf90_put_var(ncid,varid(9),0.0,(/ j1,iout /))
2847  END IF
2848  END IF ! OTYPE
2849 
2850  !
2851  ! 4.c Perform output type 3 ( source terms )
2852  !
2853  ELSE IF ( itype .EQ. 3 ) THEN
2854  !
2855  ! Format Time
2856  !
2857  IF ( otype .NE. 1 ) THEN
2858 
2859  CALL t2d(time,curdate,ierr)
2860  outjulday=tsub(refdate,curdate)
2861  iret=nf90_put_var(ncid,varid(1),outjulday,(/iout/))
2862  END IF
2863  !
2864  ! Performs subtype 1
2865  !
2866  IF ( otype .EQ. 1 ) THEN
2867  !
2868  IF ( scale1 .GE. 0. ) THEN
2869  IF ( flsrce(1) ) &
2870  CALL prt1ds (ndso, nk, e1, sig(1:nk), &
2871  'RAD/S', 17, 0., 'E(f)', 'm^2s', &
2872  ptnme(j) )
2873  IF (flsrce(2) .OR. flsrce(3) .OR. &
2874  flsrce(4) .OR. flsrce(5) .OR. &
2875  flsrce(6) .OR. flsrce(7) ) &
2876  CALL prt1dm (ndso, nk, 6, e1all, sig(1:nk),&
2877  'RAD/S', 17, scale1, var1, 'M2', &
2878  ptnme(j) )
2879  END IF
2880  IF ( scale2 .GE. 0. ) THEN
2881  IF ( flsrce(1) ) &
2882  CALL prt2ds (ndso, nk, nk, nth, e, &
2883  sig(1:nk), 'RAD/S', 1., 0., 0.0001, &
2884  'E(f,th)', 'm^2s', ptnme(j) )
2885  IF ( flsrce(2) ) &
2886  CALL prt2ds (ndso, nk, nk, nth, swn, &
2887  sig(1:nk), 'RAD/S', 1., scale2, 0.0001,&
2888  'Sin(f,th)', 'm^2', ptnme(j) )
2889  IF ( flsrce(3) ) &
2890  CALL prt2ds (ndso, nk, nk, nth, snl, &
2891  sig(1:nk), 'RAD/S', 1., scale2, 0.0001,&
2892  'Snl(f,th)', 'm^2', ptnme(j) )
2893  IF ( flsrce(4) ) &
2894  CALL prt2ds (ndso, nk, nk, nth, sds, &
2895  sig(1:nk), 'RAD/S', 1., scale2, 0.0001,&
2896  'Sds(f,th)', 'm^2', ptnme(j) )
2897  IF ( flsrce(5) ) &
2898  CALL prt2ds (ndso, nk, nk, nth, sbt, &
2899  sig(1:nk), 'RAD/S', 1., scale2, 0.0001,&
2900  'Sbt(f,th)', 'm^2', ptnme(j) )
2901  IF ( flsrce(6) ) &
2902  CALL prt2ds (ndso, nk, nk, nth, sis, &
2903  sig(1:nk), 'RAD/S', 1., scale2, 0.0001,&
2904  'Sice(f,th)', 'm^2', ptnme(j) )
2905  IF ( flsrce(7) ) &
2906  CALL prt2ds (ndso, nk, nk, nth, stt, &
2907  sig(1:nk), 'RAD/S', 1., scale2, 0.0001,&
2908  'Stot(f,th)', 'm^2', ptnme(j) )
2909  END IF
2910  !
2911  ! Performs subtype 2
2912  !
2913  ELSE IF ( otype .EQ. 2 ) THEN
2914  !
2915  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2916  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2917  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2918  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2919  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2920  iret=nf90_put_var(ncid,varid(7),dpo(j),(/j1,iout/))
2921  iret=nf90_put_var(ncid,varid(8),ustar,(/j1,iout/))
2922  iret=nf90_put_var(ncid,varid(9),wao(j),(/j1,iout/))
2923  IF ( iscale.GE.3 ) facf = 1. / fp
2924  iret=nf90_put_var(ncid,varid(6),facf*sig(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2925  iret=nf90_put_var(ncid,varid(10),e1(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2926  iret=nf90_put_var(ncid,varid(11),sin1(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2927  iret=nf90_put_var(ncid,varid(12),snl1(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2928  iret=nf90_put_var(ncid,varid(13),sds1(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2929  iret=nf90_put_var(ncid,varid(14),sbt1(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2930  iret=nf90_put_var(ncid,varid(15),sis1(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2931  iret=nf90_put_var(ncid,varid(16),stt1(1:nk),start=(/1,j1,iout /),count=(/nk,1,1/))
2932 
2933  !
2934  ! Performs subtype 3
2935  !
2936  ELSE IF ( otype .EQ. 3 ) THEN
2937  !
2938  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2939  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2940  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2941  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2942  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2943  iret=nf90_put_var(ncid,varid(7),dpo(j),(/j1,iout/))
2944  iret=nf90_put_var(ncid,varid(8),ustar,(/j1,iout/))
2945  iret=nf90_put_var(ncid,varid(9),wao(j),(/j1,iout/))
2946  IF ( iscale.GE.3 ) facf = 1. / fp
2947  DO ik=1, nk
2948  fact = 1. / max( 1.e-10 , e1(ik) )
2949  iret=nf90_put_var(ncid,varid(6),facf*sig(ik),(/ ik,j1,iout /))
2950  iret=nf90_put_var(ncid,varid(10),e1(ik),(/ ik,j1,iout /))
2951  IF ( e1(ik) .GT. 1.e-10 ) THEN
2952  iret=nf90_put_var(ncid,varid(11),fact*sin1(ik),(/ ik,j1,iout /))
2953  iret=nf90_put_var(ncid,varid(12),fact*snl1(ik),(/ ik,j1,iout /))
2954  iret=nf90_put_var(ncid,varid(13),fact*sds1(ik),(/ ik,j1,iout /))
2955  iret=nf90_put_var(ncid,varid(14),fact*sbt1(ik),(/ ik,j1,iout /))
2956  iret=nf90_put_var(ncid,varid(15),fact*sis1(ik),(/ ik,j1,iout /))
2957  iret=nf90_put_var(ncid,varid(16),fact*stt1(ik),(/ ik,j1,iout /))
2958  ELSE
2959  iret=nf90_put_var(ncid,varid(11),nf90_fill_float,(/ ik,j1,iout /))
2960  iret=nf90_put_var(ncid,varid(12),nf90_fill_float,(/ ik,j1,iout /))
2961  iret=nf90_put_var(ncid,varid(13),nf90_fill_float,(/ ik,j1,iout /))
2962  iret=nf90_put_var(ncid,varid(14),nf90_fill_float,(/ ik,j1,iout /))
2963  iret=nf90_put_var(ncid,varid(15),nf90_fill_float,(/ ik,j1,iout /))
2964  iret=nf90_put_var(ncid,varid(16),nf90_fill_float,(/ ik,j1,iout /))
2965  END IF
2966  END DO
2967 
2968  !
2969  ! Performs subtype 4
2970  !
2971  ELSE IF ( otype .EQ. 4 ) THEN
2972  !
2973  iret=nf90_put_var(ncid,varid(27),j,(/j1/))
2974  iret=nf90_put_var(ncid,varid(2),ptnme(j),start=(/1,j1/),count=(/len_trim(ptnme(j)) ,1/))
2975  IF (flww3.NE.0) iret=nf90_put_var(ncid,varid(3),flww3,(/j1,iout/))
2976  iret=nf90_put_var(ncid,varid(4),m2km*ptloc(1,j),(/j1,iout/))
2977  iret=nf90_put_var(ncid,varid(5),m2km*ptloc(2,j),(/j1,iout/))
2978  iret=nf90_put_var(ncid,varid(10),dpo(j),(/j1,iout/))
2979  iret=nf90_put_var(ncid,varid(11),wao(j),(/j1,iout/))
2980  iret=nf90_put_var(ncid,varid(12),udir,(/j1,iout/))
2981  iret=nf90_put_var(ncid,varid(13),cao(j),(/j1,iout/))
2982  iret=nf90_put_var(ncid,varid(14),cdir,(/j1,iout/))
2983  iret=nf90_put_var(ncid,varid(15),ustar,(/j1,iout/))
2984 
2985  IF ( flsrce(1) ) iret=nf90_put_var(ncid,varid(16), &
2986  transpose(e(1:nk,1:nth)), start=(/1,1,j1,iout/), &
2987  count=(/nth,nk,1,1/) )
2988  IF ( flsrce(2) ) iret=nf90_put_var(ncid,varid(17), &
2989  transpose(swn(1:nk,1:nth)), start=(/1,1,j1,iout/), &
2990  count=(/nth,nk,1,1/) )
2991  IF ( flsrce(3) ) iret=nf90_put_var(ncid,varid(18), &
2992  transpose(snl(1:nk,1:nth)), start=(/1,1,j1,iout/), &
2993  count=(/nth,nk,1,1/) )
2994  IF ( flsrce(4) ) iret=nf90_put_var(ncid,varid(19), &
2995  transpose(sds(1:nk,1:nth)), start=(/1,1,j1,iout/), &
2996  count=(/nth,nk,1,1/) )
2997  IF ( flsrce(5) ) iret=nf90_put_var(ncid,varid(20), &
2998  transpose(sbt(1:nk,1:nth)), start=(/1,1,j1,iout/), &
2999  count=(/nth,nk,1,1/) )
3000  IF ( flsrce(6) ) iret=nf90_put_var(ncid,varid(21), &
3001  transpose(sis(1:nk,1:nth)), start=(/1,1,j1,iout/), &
3002  count=(/nth,nk,1,1/) )
3003  IF ( flsrce(7) ) iret=nf90_put_var(ncid,varid(22), &
3004  transpose(stt(1:nk,1:nth)), start=(/1,1,j1,iout/), &
3005  count=(/nth,nk,1,1/) )
3006  !
3007  END IF
3008  !
3009  END IF ! ITYPE
3010 
3011  !
3012  ! ... End of fields loop
3013  !
3014  IF (together) j1=j1+1
3015 
3016  END IF ! FLREQ(J)
3017  !
3018  ! Selects next station index or end up if not together
3019  !
3020  IF (together) THEN
3021  j=j+1
3022  IF (j.GT.nopts) laststation=.true.
3023  ELSE
3024  laststation=.true.
3025  END IF
3026 
3027  END DO ! DO WHILE (.NOT. LASTSTATION)
3028 
3029  END IF ! NOT SHORT ...
3030  !
3031  RETURN
3032  !
3033  ! Formats
3034  !
3035 910 FORMAT (/15x,' Water depth :',f7.1,' (m)'/ &
3036  15x,' Wind speed :',f8.2,' (m/s)')
3037 911 FORMAT ( 15x,' Wind direction :',f7.1,' (degr)')
3038 912 FORMAT ( 15x,' Air-sea temp. dif.:',f7.1,' (degr)'/ &
3039  15x,' sea water speed :',f8.2,' (m/s)')
3040 913 FORMAT ( 15x,' direction of current (from) :',f7.1,' (degr)')
3041 914 FORMAT ( 15x,' Wave height :',f8.2,' (m)'/ &
3042  15x,' Mean wave length :',f6.0,' (m)'/ &
3043  15x,' Mean wave period :',f7.1,' (s)'/ &
3044  15x,' Mean wave direct. :',f7.1,' (degr)'/ &
3045  15x,' Direct. spread :',f7.1,' (degr)'/)
3046  !
3047 #ifdef W3_T
3048 9000 FORMAT (' TEST W3EXNC : FLAGS :',40l2)
3049 9001 FORMAT (' TEST W3EXNC : ITPYE :',i4/ &
3050  ' OTPYE :',i4/ &
3051  ' NREQ :',i4/ &
3052  ' SCALE1 :',e10.3/ &
3053  ' SCALE2 :',e10.3/ &
3054  ' FLSRCE :',6l2)
3055 9002 FORMAT (' TEST W3EXNC : OUTPUT POINT : ',a)
3056 9010 FORMAT (' TEST W3EXNC : DEPTH =',f7.1,' IK, T, K, CG :')
3057 9011 FORMAT (' ',i3,f8.2,f8.4,f8.2)
3058 #endif
3059  !/
3060  !/ End of W3EXNC ----------------------------------------------------- /
3061  !/
3062  END SUBROUTINE w3exnc
3063 
3064 
3065 
3066 
3067 
3068  !--------------------------------------------------------------------------
3085  SUBROUTINE w3crnc (ITYPE, OTYPE, NCTYPE, NCFILE, NCID, DIMID, DIMLN, VARID, ONE, TWO, FLSRCE, NCVARTYPE)
3087 
3088  USE w3gdatmd
3089  USE netcdf
3090 
3091  implicit none
3092 
3093 
3094  INTEGER, INTENT(IN) :: ITYPE,OTYPE,NCTYPE, ONE, TWO
3095  CHARACTER*(128), INTENT(IN) :: NCFILE
3096  INTEGER, INTENT(IN) :: DIMLN(5)
3097  INTEGER, INTENT(OUT) :: DIMID(7), VARID(28),NCID
3098  LOGICAL, INTENT(IN), OPTIONAL :: FLSRCE(7)
3099  INTEGER, INTENT(IN), OPTIONAL :: NCVARTYPE
3100 
3101  ! local parameters
3102  INTEGER :: IRET
3103  INTEGER :: DEFLATE=1
3104  !
3105  REAL(kind=4) :: freq(nk), freq1(nk),freq2(nk), dir(nth)
3106 
3107 
3108  !
3109  ! Creation in netCDF3 or netCDF4
3110  !
3111  IF(nctype.EQ.3) iret = nf90_create(trim(ncfile), nf90_clobber, ncid)
3112  IF(nctype.EQ.4) iret = nf90_create(trim(ncfile), nf90_netcdf4, ncid)
3113  CALL check_err(iret,20)
3114 
3115  !
3116  ! Define generals dimensions
3117  !
3118  iret = nf90_def_dim(ncid, 'time', dimln(1), dimid(1))
3119  CALL check_err(iret,21)
3120  iret = nf90_def_dim(ncid, 'station', dimln(2), dimid(2))
3121  CALL check_err(iret,22)
3122  iret = nf90_def_dim(ncid, 'string40', dimln(3), dimid(3))
3123  CALL check_err(iret,23)
3124 
3125  !
3126  ! define generals variables
3127  !
3128 
3129  ! time
3130  iret=nf90_def_var(ncid, 'time', nf90_double, dimid(1), varid(1))
3131  CALL check_err(iret,24)
3132  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(1), 1, 1, deflate)
3133  SELECT CASE (trim(caltype))
3134  CASE ('360_day')
3135  iret=nf90_put_att(ncid,varid(1),'long_name','time in 360 day calendar')
3136  CASE ('365_day')
3137  iret=nf90_put_att(ncid,varid(1),'long_name','time in 365 day calendar')
3138  CASE ('standard')
3139  iret=nf90_put_att(ncid,varid(1),'long_name','julian day (UT)')
3140  END SELECT
3141  iret=nf90_put_att(ncid,varid(1),'standard_name','time')
3142  iret=nf90_put_att(ncid,varid(1),'units','days since 1990-01-01 00:00:00')
3143  iret=nf90_put_att(ncid,varid(1),'conventions','Relative julian days with decimal part (as parts of the day)')
3144  iret=nf90_put_att(ncid,varid(1),'axis','T')
3145  iret=nf90_put_att(ncid,varid(1),'calendar',trim(caltype))
3146 
3147  ! station
3148  iret=nf90_def_var(ncid, 'station', nf90_int, (/dimid(2)/), varid(27))
3149  CALL check_err(iret,25)
3150  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(27), 1, 1, deflate)
3151  iret=nf90_put_att(ncid,varid(27),'long_name','station id')
3152  iret=nf90_put_att(ncid,varid(27),'_FillValue',nf90_fill_int)
3153  iret=nf90_put_att(ncid,varid(27),'axis','X')
3154 
3155  ! string40
3156  iret=nf90_def_var(ncid, 'string40', nf90_int, (/dimid(3)/), varid(28))
3157  CALL check_err(iret,26)
3158  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(28), 1, 1, deflate)
3159  iret=nf90_put_att(ncid,varid(28),'long_name','station_name number of characters')
3160  iret=nf90_put_att(ncid,varid(28),'_FillValue',nf90_fill_int)
3161  iret=nf90_put_att(ncid,varid(28),'axis','W')
3162 
3163  ! station_name
3164  iret=nf90_def_var(ncid, 'station_name', nf90_char, (/dimid(3),dimid(2)/), varid(2))
3165  CALL check_err(iret,27)
3166  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(2), 1, 1, deflate)
3167  iret=nf90_put_att(ncid,varid(2),'long_name','station name')
3168  iret=nf90_put_att(ncid,varid(2),'content','XW')
3169  iret=nf90_put_att(ncid,varid(2),'associates','station string40')
3170 
3171  IF (flww3.NE.0) THEN
3172  ! wwIII param version
3173  iret=nf90_def_var(ncid, 'WWIII_param_version', nf90_short, (/dimid(two),dimid(one)/), varid(3))
3174  CALL check_err(iret,28)
3175  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(3), 1, 1, deflate)
3176  iret=nf90_put_att(ncid,varid(3),'long_name','WaveWatch III parameters version')
3177  iret=nf90_put_att(ncid,varid(3),'standard_name','WWIII_param_version')
3178  iret=nf90_put_att(ncid,varid(3),'globwave_name','WWIII_param_version')
3179  iret=nf90_put_att(ncid,varid(3),'units','-')
3180  iret=nf90_put_att(ncid,varid(3),'scale_factor',1)
3181  iret=nf90_put_att(ncid,varid(3),'add_offset',0)
3182  iret=nf90_put_att(ncid,varid(3),'valid_min',1)
3183  iret=nf90_put_att(ncid,varid(3),'valid_max',999)
3184  iret=nf90_put_att(ncid,varid(3),'_FillValue',nf90_fill_short)
3185  iret=nf90_put_att(ncid,varid(3),'content','TX')
3186  iret=nf90_put_att(ncid,varid(3),'associates','time station')
3187  END IF
3188 
3189  IF (flagll) THEN
3190  ! longitude
3191  iret=nf90_def_var(ncid, 'longitude', nf90_float, (/dimid(two),dimid(one)/), varid(4))
3192  CALL check_err(iret,29)
3193  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(4), 1, 1, deflate)
3194  iret=nf90_put_att(ncid,varid(4),'long_name','longitude')
3195  iret=nf90_put_att(ncid,varid(4),'standard_name','longitude')
3196  iret=nf90_put_att(ncid,varid(4),'globwave_name','longitude')
3197  iret=nf90_put_att(ncid,varid(4),'units','degree_east')
3198  iret=nf90_put_att(ncid,varid(4),'scale_factor',1.)
3199  iret=nf90_put_att(ncid,varid(4),'add_offset',0.)
3200  iret=nf90_put_att(ncid,varid(4),'valid_min',-180.0)
3201  iret=nf90_put_att(ncid,varid(4),'valid_max',360.)
3202  iret=nf90_put_att(ncid,varid(4),'_FillValue',nf90_fill_float)
3203  iret=nf90_put_att(ncid,varid(4),'content','TX')
3204  iret=nf90_put_att(ncid,varid(4),'associates','time station')
3205 
3206  ! latitude
3207  iret=nf90_def_var(ncid, 'latitude', nf90_float, (/dimid(two),dimid(one)/), varid(5))
3208  CALL check_err(iret,30)
3209  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(5), 1, 1, deflate)
3210  iret=nf90_put_att(ncid,varid(5),'long_name','latitude')
3211  iret=nf90_put_att(ncid,varid(5),'standard_name','latitude')
3212  iret=nf90_put_att(ncid,varid(5),'globwave_name','latitude')
3213  iret=nf90_put_att(ncid,varid(5),'units','degree_north')
3214  iret=nf90_put_att(ncid,varid(5),'scale_factor',1.)
3215  iret=nf90_put_att(ncid,varid(5),'add_offset',0.)
3216  iret=nf90_put_att(ncid,varid(5),'valid_min',-90.0)
3217  iret=nf90_put_att(ncid,varid(5),'valid_max',180.)
3218  iret=nf90_put_att(ncid,varid(5),'_FillValue',nf90_fill_float)
3219  iret=nf90_put_att(ncid,varid(5),'content','TX')
3220  iret=nf90_put_att(ncid,varid(5),'associates','time station')
3221 
3222 
3223  ELSE
3224  ! longitude
3225  iret=nf90_def_var(ncid, 'x', nf90_float, (/dimid(two),dimid(one)/), varid(4))
3226  CALL check_err(iret,31)
3227  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(4), 1, 1, deflate)
3228  iret=nf90_put_att(ncid,varid(4),'long_name','x')
3229  iret=nf90_put_att(ncid,varid(4),'standard_name','x')
3230  iret=nf90_put_att(ncid,varid(4),'globwave_name','x')
3231  iret=nf90_put_att(ncid,varid(4),'units','km')
3232  iret=nf90_put_att(ncid,varid(4),'scale_factor',1.)
3233  iret=nf90_put_att(ncid,varid(4),'add_offset',0.)
3234  iret=nf90_put_att(ncid,varid(4),'valid_min',0.)
3235  iret=nf90_put_att(ncid,varid(4),'valid_max',10000.)
3236  iret=nf90_put_att(ncid,varid(4),'_FillValue',nf90_fill_float)
3237  iret=nf90_put_att(ncid,varid(4),'content','TX')
3238  iret=nf90_put_att(ncid,varid(4),'associates','time station')
3239 
3240 
3241  ! latitude
3242  iret=nf90_def_var(ncid, 'y', nf90_float, (/dimid(two),dimid(one)/), varid(5))
3243  CALL check_err(iret,32)
3244  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(5), 1, 1, deflate)
3245  iret=nf90_put_att(ncid,varid(5),'long_name','y')
3246  iret=nf90_put_att(ncid,varid(5),'standard_name','y')
3247  iret=nf90_put_att(ncid,varid(5),'globwave_name','y')
3248  iret=nf90_put_att(ncid,varid(5),'units','km')
3249  iret=nf90_put_att(ncid,varid(5),'scale_factor',1.)
3250  iret=nf90_put_att(ncid,varid(5),'add_offset',0.)
3251  iret=nf90_put_att(ncid,varid(5),'valid_min',0.)
3252  iret=nf90_put_att(ncid,varid(5),'valid_max',10000.)
3253  iret=nf90_put_att(ncid,varid(5),'_FillValue',nf90_fill_float)
3254  iret=nf90_put_att(ncid,varid(5),'content','TX')
3255  iret=nf90_put_att(ncid,varid(5),'associates','time station')
3256 
3257  END IF
3258 
3259  ! Process FREQ and DIR dimension values
3260  freq(1:nk)=sig(1:nk)*tpiinv
3261  freq1(1:nk)=freq(1:nk)-0.5*(freq(1:nk)-(freq(1:nk)/xfr))
3262  freq2(1:nk)=freq(1:nk)+0.5*(-freq(1:nk)+(freq(1:nk)*xfr))
3263  freq1(1)=sig(1)*tpiinv
3264  freq2(nk)=sig(nk)*tpiinv
3265  dir(1:nth)=mod(450-thd(1:nth),360.)
3266 
3267  !
3268  ! ... ITYPE = 1 AND OTYPE = 2
3269  !
3270 
3271  IF (itype.EQ.1 .AND. otype.EQ.2) THEN
3272  !
3273  ! Define specifics dimensions
3274  !
3275  iret = nf90_def_dim(ncid, 'frequency', dimln(4), dimid(4))
3276  CALL check_err(iret,33)
3277 
3278  !
3279  ! define specifics variables
3280  !
3281 
3282  ! frequency
3283  iret=nf90_def_var(ncid, 'frequency', nf90_float, dimid(4), varid(6))
3284  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
3285  iret=nf90_put_att(ncid,varid(6),'long_name','frequency of center band')
3286  iret=nf90_put_att(ncid,varid(6),'standard_name','sea_surface_wave_frequency')
3287  iret=nf90_put_att(ncid,varid(6),'globwave_name','frequency')
3288  iret=nf90_put_att(ncid,varid(6),'units','s-1')
3289  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
3290  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
3291  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
3292  iret=nf90_put_att(ncid,varid(6),'valid_max',10.)
3293  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
3294  iret=nf90_put_att(ncid,varid(6),'axis','Y')
3295  !d
3296  iret=nf90_def_var(ncid, 'dpt', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
3297  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
3298  iret=nf90_put_att(ncid,varid(7),'long_name','depth')
3299  iret=nf90_put_att(ncid,varid(7),'standard_name','depth')
3300  iret=nf90_put_att(ncid,varid(7),'globwave_name','depth')
3301  iret=nf90_put_att(ncid,varid(7),'units','m')
3302  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
3303  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
3304  iret=nf90_put_att(ncid,varid(7),'valid_min',-100.)
3305  iret=nf90_put_att(ncid,varid(7),'valid_max',10000.)
3306  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
3307  iret=nf90_put_att(ncid,varid(7),'content','TX')
3308  iret=nf90_put_att(ncid,varid(7),'associates','time station')
3309  !Ust
3310  iret=nf90_def_var(ncid, 'ust', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
3311  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
3312  iret=nf90_put_att(ncid,varid(8),'long_name','friction velocity')
3313  iret=nf90_put_att(ncid,varid(8),'standard_name','friction_velocity')
3314  iret=nf90_put_att(ncid,varid(8),'globwave_name','friction_velocity')
3315  iret=nf90_put_att(ncid,varid(8),'units','m s-1')
3316  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
3317  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
3318  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
3319  iret=nf90_put_att(ncid,varid(8),'valid_max',100.)
3320  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
3321  iret=nf90_put_att(ncid,varid(8),'content','TX')
3322  iret=nf90_put_att(ncid,varid(8),'associates','time station')
3323  !U10
3324  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
3325  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
3326  iret=nf90_put_att(ncid,varid(9),'long_name','wind speed at 10m')
3327  iret=nf90_put_att(ncid,varid(9),'standard_name','wind_speed')
3328  iret=nf90_put_att(ncid,varid(9),'globwave_name','wind_speed')
3329  iret=nf90_put_att(ncid,varid(9),'units','m s-1')
3330  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
3331  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
3332  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
3333  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
3334  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
3335  iret=nf90_put_att(ncid,varid(9),'content','TX')
3336  iret=nf90_put_att(ncid,varid(9),'associates','time station')
3337  !Dir
3338  iret=nf90_def_var(ncid, 'wnddir', nf90_float, (/ dimid(two),dimid(one) /), varid(10))
3339  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
3340  iret=nf90_put_att(ncid,varid(10),'long_name','wind direction')
3341  iret=nf90_put_att(ncid,varid(10),'standard_name','wind_from_direction')
3342  iret=nf90_put_att(ncid,varid(10),'globwave_name','wind_from_direction')
3343  iret=nf90_put_att(ncid,varid(10),'units','degree')
3344  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
3345  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
3346  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
3347  iret=nf90_put_att(ncid,varid(10),'valid_max',360.)
3348  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
3349  iret=nf90_put_att(ncid,varid(10),'content','TX')
3350  iret=nf90_put_att(ncid,varid(10),'associates','time station')
3351 #ifdef W3_RTD
3352  IF ( flagunr ) THEN
3353  iret=nf90_put_att(ncid,varid(10),'direction_reference','True North')
3354  ELSE
3355  iret=nf90_put_att(ncid,varid(10),'direction_reference','Rotated Pole Grid North')
3356  END IF
3357 #endif
3358 
3359 
3360  !f/fp
3361  iret=nf90_def_var(ncid, 'ffp', nf90_float, (/ dimid(4),dimid(two),dimid(one) /), varid(11))
3362  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
3363  iret=nf90_put_att(ncid,varid(11),'long_name','ffp')
3364  iret=nf90_put_att(ncid,varid(11),'standard_name','ffp')
3365  iret=nf90_put_att(ncid,varid(11),'globwave_name','ffp')
3366  iret=nf90_put_att(ncid,varid(11),'units','1')
3367  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
3368  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
3369  iret=nf90_put_att(ncid,varid(11),'valid_min',0.)
3370  iret=nf90_put_att(ncid,varid(11),'valid_max',100.)
3371  iret=nf90_put_att(ncid,varid(11),'_FillValue',nf90_fill_float)
3372  iret=nf90_put_att(ncid,varid(11),'content','TXY')
3373  iret=nf90_put_att(ncid,varid(11),'associates','time station frequency')
3374  !F
3375  iret=nf90_def_var(ncid, 'f', nf90_float, (/ dimid(4),dimid(two),dimid(one) /), varid(12))
3376  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(22), 1, 1, deflate)
3377  iret=nf90_put_att(ncid,varid(12),'long_name','f')
3378  iret=nf90_put_att(ncid,varid(12),'standard_name','f')
3379  iret=nf90_put_att(ncid,varid(12),'globwave_name','f')
3380  iret=nf90_put_att(ncid,varid(12),'units','-')
3381  iret=nf90_put_att(ncid,varid(12),'scale_factor',1.)
3382  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
3383  iret=nf90_put_att(ncid,varid(12),'valid_min',0.)
3384  iret=nf90_put_att(ncid,varid(12),'valid_max',1000.)
3385  iret=nf90_put_att(ncid,varid(12),'_FillValue',nf90_fill_float)
3386  iret=nf90_put_att(ncid,varid(12),'content','TXY')
3387  iret=nf90_put_att(ncid,varid(12),'associates','time station frequency')
3388  !th1m
3389  iret=nf90_def_var(ncid, 'th1m', nf90_float, (/ dimid(4),dimid(two),dimid(one) /), varid(13))
3390  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(13), 1, 1, deflate)
3391  iret=nf90_put_att(ncid,varid(13),'long_name','mean wave direction from spectral moments')
3392  iret=nf90_put_att(ncid,varid(13),'standard_name','mean_wave_direction')
3393  iret=nf90_put_att(ncid,varid(13),'globwave_name','mean_wave_direction')
3394  iret=nf90_put_att(ncid,varid(13),'units','degree')
3395  iret=nf90_put_att(ncid,varid(13),'scale_factor',1.)
3396  iret=nf90_put_att(ncid,varid(13),'add_offset',0.)
3397  iret=nf90_put_att(ncid,varid(13),'valid_min',0.)
3398  iret=nf90_put_att(ncid,varid(13),'valid_max',360.)
3399  iret=nf90_put_att(ncid,varid(13),'_FillValue',nf90_fill_float)
3400  iret=nf90_put_att(ncid,varid(13),'content','TXY')
3401  iret=nf90_put_att(ncid,varid(13),'associates','time station frequency')
3402 #ifdef W3_RTD
3403  IF ( flagunr ) THEN
3404  iret=nf90_put_att(ncid,varid(13),'direction_reference','True North')
3405  ELSE
3406  iret=nf90_put_att(ncid,varid(13),'direction_reference','Rotated Pole Grid North')
3407  END IF
3408 #endif
3409 
3410  !sth1m
3411  iret=nf90_def_var(ncid, 'sth1m', nf90_float,(/ dimid(4),dimid(two),dimid(one) /), varid(14))
3412  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(14), 1, 1, deflate)
3413  iret=nf90_put_att(ncid,varid(14),'long_name','directional spread from spectral moments')
3414  iret=nf90_put_att(ncid,varid(14),'standard_name','mean_wave_spreading')
3415  iret=nf90_put_att(ncid,varid(14),'globwave_name','mean_wave_spreading')
3416  iret=nf90_put_att(ncid,varid(14),'units','degree')
3417  iret=nf90_put_att(ncid,varid(14),'scale_factor',1.)
3418  iret=nf90_put_att(ncid,varid(14),'add_offset',0.)
3419  iret=nf90_put_att(ncid,varid(14),'valid_min',0.)
3420  iret=nf90_put_att(ncid,varid(14),'valid_max',360.)
3421  iret=nf90_put_att(ncid,varid(14),'_FillValue',nf90_fill_float)
3422  iret=nf90_put_att(ncid,varid(14),'content','TXY')
3423  iret=nf90_put_att(ncid,varid(14),'associates','time station frequency')
3424  !alpha
3425  iret=nf90_def_var(ncid, 'alpha', nf90_float, (/ dimid(4),dimid(two),dimid(one) /), varid(15))
3426  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(15), 1, 1, deflate)
3427  iret=nf90_put_att(ncid,varid(15),'long_name','spectral intensity coefficient')
3428  iret=nf90_put_att(ncid,varid(15),'standard_name','spectral_intensity_coefficient')
3429  iret=nf90_put_att(ncid,varid(15),'globwave_name','spectral_intensity_coefficient')
3430  iret=nf90_put_att(ncid,varid(15),'units','-')
3431  iret=nf90_put_att(ncid,varid(15),'scale_factor',1.)
3432  iret=nf90_put_att(ncid,varid(15),'add_offset',0.)
3433  iret=nf90_put_att(ncid,varid(15),'valid_min',0.)
3434  iret=nf90_put_att(ncid,varid(15),'valid_max',100.)
3435  iret=nf90_put_att(ncid,varid(15),'_FillValue',nf90_fill_float)
3436  iret=nf90_put_att(ncid,varid(15),'content','TXY')
3437  iret=nf90_put_att(ncid,varid(15),'associates','time station frequency')
3438 
3439 
3440  ! Add values in netCDF file
3441  iret=nf90_enddef(ncid)
3442  CALL check_err(iret,34)
3443  iret=nf90_put_var(ncid,varid(6),freq(1:nk))
3444  CALL check_err(iret,35)
3445 
3446 
3447  !
3448  ! ... ITYPE = 1 AND OTYPE = 3
3449  !
3450 
3451  ELSE IF (itype.EQ.1 .AND. otype.EQ.3) THEN
3452  !
3453  ! Define specifics dimensions
3454  !
3455  iret = nf90_def_dim(ncid, 'frequency', dimln(4), dimid(4))
3456  CALL check_err(iret,36)
3457  iret = nf90_def_dim(ncid, 'direction', dimln(5), dimid(5))
3458  CALL check_err(iret,37)
3459 
3460  !
3461  ! define specifics variables
3462  !
3463 
3464  !frequency
3465  iret=nf90_def_var(ncid, 'frequency', nf90_float, (/dimid(4)/), varid(6))
3466  CALL check_err(iret,38)
3467  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
3468  iret=nf90_put_att(ncid,varid(6),'long_name','frequency of center band')
3469  iret=nf90_put_att(ncid,varid(6),'standard_name','sea_surface_wave_frequency')
3470  iret=nf90_put_att(ncid,varid(6),'globwave_name','frequency')
3471  iret=nf90_put_att(ncid,varid(6),'units','s-1')
3472  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
3473  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
3474  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
3475  iret=nf90_put_att(ncid,varid(6),'valid_max',10.)
3476  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
3477  iret=nf90_put_att(ncid,varid(6),'axis','Y')
3478 
3479  !frequency1
3480  iret=nf90_def_var(ncid, 'frequency1', nf90_float, (/dimid(4)/), varid(7))
3481  CALL check_err(iret,39)
3482  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
3483  iret=nf90_put_att(ncid,varid(7),'long_name','frequency of lower band')
3484  iret=nf90_put_att(ncid,varid(7),'standard_name','frequency_of_lower_band')
3485  iret=nf90_put_att(ncid,varid(7),'globwave_name','frequency_lower_band')
3486  iret=nf90_put_att(ncid,varid(7),'units','s-1')
3487  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
3488  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
3489  iret=nf90_put_att(ncid,varid(7),'valid_min',0.)
3490  iret=nf90_put_att(ncid,varid(7),'valid_max',10.)
3491  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
3492  iret=nf90_put_att(ncid,varid(7),'content','Y')
3493  iret=nf90_put_att(ncid,varid(7),'associates','frequency')
3494 
3495  !frequency2
3496  iret=nf90_def_var(ncid, 'frequency2', nf90_float, (/dimid(4)/), varid(8))
3497  CALL check_err(iret,40)
3498  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
3499  iret=nf90_put_att(ncid,varid(8),'long_name','frequency of upper band')
3500  iret=nf90_put_att(ncid,varid(8),'standard_name','frequency_of_upper_band')
3501  iret=nf90_put_att(ncid,varid(8),'globwave_name','frequency_upper_band')
3502  iret=nf90_put_att(ncid,varid(8),'units','s-1')
3503  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
3504  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
3505  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
3506  iret=nf90_put_att(ncid,varid(8),'valid_max',10.)
3507  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
3508  iret=nf90_put_att(ncid,varid(8),'content','Y')
3509  iret=nf90_put_att(ncid,varid(8),'associates','frequency')
3510 
3511  !direction
3512  iret=nf90_def_var(ncid, 'direction', nf90_float, (/dimid(5)/), varid(9))
3513  CALL check_err(iret,41)
3514  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
3515  iret=nf90_put_att(ncid,varid(9),'long_name','sea surface wave to direction')
3516  iret=nf90_put_att(ncid,varid(9),'standard_name','sea_surface_wave_to_direction')
3517  iret=nf90_put_att(ncid,varid(9),'globwave_name','direction')
3518  iret=nf90_put_att(ncid,varid(9),'units','degree')
3519  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
3520  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
3521  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
3522  iret=nf90_put_att(ncid,varid(9),'valid_max',360.)
3523  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
3524  iret=nf90_put_att(ncid,varid(9),'axis','Z')
3525 #ifdef W3_RTD
3526  IF ( flagunr ) THEN
3527  iret=nf90_put_att(ncid,varid(9),'direction_reference','True North')
3528  ELSE
3529  iret=nf90_put_att(ncid,varid(9),'direction_reference','Rotated Pole Grid North')
3530  END IF
3531 #endif
3532 
3533  !Efth
3534  IF (ncvartype.LE.3) THEN
3535  iret=nf90_def_var(ncid,'efth',nf90_short,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(10))
3536  ELSE
3537  iret=nf90_def_var(ncid,'efth',nf90_float,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(10))
3538  END IF
3539  CALL check_err(iret,42)
3540  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
3541  iret=nf90_put_att(ncid,varid(10),'long_name',&
3542  'sea surface wave directional variance spectral density')
3543  IF (ncvartype.LE.3) THEN
3544  iret=nf90_put_att(ncid,varid(10),'standard_name',&
3545  'base_ten_logarithm_of_sea_surface_wave_directional_variance_spectral_density')
3546  iret=nf90_put_att(ncid,varid(10),'globwave_name','directional_variance_spectral_density')
3547  iret=nf90_put_att(ncid,varid(10),'units','log10(m2 s rad-1 +1E-12)')
3548  iret=nf90_put_att(ncid,varid(10),'scale_factor',0.0004)
3549  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
3550  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
3551  iret=nf90_put_att(ncid,varid(10),'valid_max',1.e20)
3552  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_short)
3553  ELSE
3554  iret=nf90_put_att(ncid,varid(10),'standard_name',&
3555  'sea_surface_wave_directional_variance_spectral_density')
3556  iret=nf90_put_att(ncid,varid(10),'globwave_name','directional_variance_spectral_density')
3557  iret=nf90_put_att(ncid,varid(10),'units','m2 s rad-1')
3558  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
3559  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
3560  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
3561  iret=nf90_put_att(ncid,varid(10),'valid_max',1.e20)
3562  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
3563  END IF
3564  iret=nf90_put_att(ncid,varid(10),'content','TXYZ')
3565  iret=nf90_put_att(ncid,varid(10),'associates','time station frequency direction')
3566 #ifdef W3_RTD
3567  IF ( flagunr ) THEN
3568  iret=nf90_put_att(ncid,varid(10),'direction_reference','True North')
3569  ELSE
3570  iret=nf90_put_att(ncid,varid(10),'direction_reference','Rotated Pole Grid North')
3571  END IF
3572 #endif
3573 
3574  !d
3575  IF (ncvartype.LE.3) THEN
3576  iret=nf90_def_var(ncid, 'dpt', nf90_short, (/ dimid(two),dimid(one) /), varid(11))
3577  ELSE
3578  iret=nf90_def_var(ncid, 'dpt', nf90_float, (/ dimid(two),dimid(one) /), varid(11))
3579  END IF
3580  CALL check_err(iret,43)
3581  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
3582  iret=nf90_put_att(ncid,varid(11),'long_name','depth')
3583  iret=nf90_put_att(ncid,varid(11),'standard_name','depth')
3584  iret=nf90_put_att(ncid,varid(11),'globwave_name','depth')
3585  iret=nf90_put_att(ncid,varid(11),'units','m')
3586  IF (ncvartype.LE.3) THEN
3587  iret=nf90_put_att(ncid,varid(11),'scale_factor',0.5)
3588  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
3589  iret=nf90_put_att(ncid,varid(11),'valid_min',-200)
3590  iret=nf90_put_att(ncid,varid(11),'valid_max',200000)
3591  iret=nf90_put_att(ncid,varid(11),'_FillValue',nf90_fill_short)
3592  ELSE
3593  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
3594  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
3595  iret=nf90_put_att(ncid,varid(11),'valid_min',-100.)
3596  iret=nf90_put_att(ncid,varid(11),'valid_max',10000.)
3597  iret=nf90_put_att(ncid,varid(11),'_FillValue',nf90_fill_float)
3598  END IF
3599  iret=nf90_put_att(ncid,varid(11),'content','TX')
3600  iret=nf90_put_att(ncid,varid(11),'associates','time station')
3601 
3602  !U10
3603  IF (ncvartype.LE.3) THEN
3604  iret=nf90_def_var(ncid, 'wnd', nf90_short, (/ dimid(two),dimid(one) /), varid(12))
3605  ELSE
3606  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(12))
3607  END IF
3608  CALL check_err(iret,44)
3609  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(12), 1, 1, deflate)
3610  iret=nf90_put_att(ncid,varid(12),'long_name','wind speed at 10m')
3611  iret=nf90_put_att(ncid,varid(12),'standard_name','wind_speed')
3612  iret=nf90_put_att(ncid,varid(12),'globwave_name','wind_speed')
3613  iret=nf90_put_att(ncid,varid(12),'units','m s-1')
3614  IF (ncvartype.LE.3) THEN
3615  iret=nf90_put_att(ncid,varid(12),'scale_factor',0.1)
3616  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
3617  iret=nf90_put_att(ncid,varid(12),'valid_min',0)
3618  iret=nf90_put_att(ncid,varid(12),'valid_max',1000)
3619  iret=nf90_put_att(ncid,varid(12),'_FillValue',nf90_fill_short)
3620  ELSE
3621  iret=nf90_put_att(ncid,varid(12),'scale_factor',1.)
3622  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
3623  iret=nf90_put_att(ncid,varid(12),'valid_min',0.)
3624  iret=nf90_put_att(ncid,varid(12),'valid_max',100.)
3625  iret=nf90_put_att(ncid,varid(12),'_FillValue',nf90_fill_float)
3626  END IF
3627  iret=nf90_put_att(ncid,varid(12),'content','TX')
3628  iret=nf90_put_att(ncid,varid(12),'associates','time station')
3629  !Dir
3630  IF (ncvartype.LE.3) THEN
3631  iret=nf90_def_var(ncid, 'wnddir', nf90_short, (/ dimid(two),dimid(one) /), varid(13))
3632  ELSE
3633  iret=nf90_def_var(ncid, 'wnddir', nf90_float, (/ dimid(two),dimid(one) /), varid(13))
3634  END IF
3635  CALL check_err(iret,45)
3636  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(13), 1, 1, deflate)
3637  iret=nf90_put_att(ncid,varid(13),'long_name','wind direction')
3638  iret=nf90_put_att(ncid,varid(13),'standard_name','wind_from_direction')
3639  iret=nf90_put_att(ncid,varid(13),'globwave_name','wind_from_direction')
3640  iret=nf90_put_att(ncid,varid(13),'units','degree')
3641  IF (ncvartype.LE.3) THEN
3642  iret=nf90_put_att(ncid,varid(13),'scale_factor',0.1)
3643  iret=nf90_put_att(ncid,varid(13),'add_offset',0.)
3644  iret=nf90_put_att(ncid,varid(13),'valid_min',0)
3645  iret=nf90_put_att(ncid,varid(13),'valid_max',3600)
3646  iret=nf90_put_att(ncid,varid(13),'_FillValue',nf90_fill_short)
3647  ELSE
3648  iret=nf90_put_att(ncid,varid(13),'scale_factor',1.)
3649  iret=nf90_put_att(ncid,varid(13),'add_offset',0.)
3650  iret=nf90_put_att(ncid,varid(13),'valid_min',0.)
3651  iret=nf90_put_att(ncid,varid(13),'valid_max',360.)
3652  iret=nf90_put_att(ncid,varid(13),'_FillValue',nf90_fill_float)
3653  END IF
3654  iret=nf90_put_att(ncid,varid(13),'content','TX')
3655  iret=nf90_put_att(ncid,varid(13),'associates','time station')
3656 #ifdef W3_RTD
3657  IF ( flagunr ) THEN
3658  iret=nf90_put_att(ncid,varid(13),'direction_reference','True North')
3659  ELSE
3660  iret=nf90_put_att(ncid,varid(13),'direction_reference','Rotated Pole Grid North')
3661  END IF
3662 #endif
3663 
3664  !Uc
3665  IF (ncvartype.LE.3) THEN
3666  iret=nf90_def_var(ncid, 'cur', nf90_short, (/ dimid(two),dimid(one) /), varid(14))
3667  ELSE
3668  iret=nf90_def_var(ncid, 'cur', nf90_float, (/ dimid(two),dimid(one) /), varid(14))
3669  END IF
3670  CALL check_err(iret,46)
3671  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(14), 1, 1, deflate)
3672  iret=nf90_put_att(ncid,varid(14),'long_name','sea water speed')
3673  iret=nf90_put_att(ncid,varid(14),'standard_name','sea_water_speed')
3674  iret=nf90_put_att(ncid,varid(14),'globwave_name','sea_water_speed')
3675  iret=nf90_put_att(ncid,varid(14),'units','m s-1')
3676  IF (ncvartype.LE.3) THEN
3677  iret=nf90_put_att(ncid,varid(14),'scale_factor',0.1)
3678  iret=nf90_put_att(ncid,varid(14),'add_offset',0.)
3679  iret=nf90_put_att(ncid,varid(14),'valid_min',0)
3680  iret=nf90_put_att(ncid,varid(14),'valid_max',1000)
3681  iret=nf90_put_att(ncid,varid(14),'_FillValue',nf90_fill_short)
3682  ELSE
3683  iret=nf90_put_att(ncid,varid(14),'scale_factor',1.)
3684  iret=nf90_put_att(ncid,varid(14),'add_offset',0.)
3685  iret=nf90_put_att(ncid,varid(14),'valid_min',0.)
3686  iret=nf90_put_att(ncid,varid(14),'valid_max',100.)
3687  iret=nf90_put_att(ncid,varid(14),'_FillValue',nf90_fill_float)
3688  END IF
3689  iret=nf90_put_att(ncid,varid(14),'content','TX')
3690  iret=nf90_put_att(ncid,varid(14),'associates','time station')
3691 
3692  !Dir
3693  IF (ncvartype.LE.3) THEN
3694  iret=nf90_def_var(ncid, 'curdir', nf90_short, (/ dimid(two),dimid(one) /), varid(15))
3695  ELSE
3696  iret=nf90_def_var(ncid, 'curdir', nf90_float, (/ dimid(two),dimid(one) /), varid(15))
3697  END IF
3698  CALL check_err(iret,47)
3699  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(15), 1, 1, deflate)
3700  iret=nf90_put_att(ncid,varid(15),'long_name','direction from of sea water velocity')
3701  iret=nf90_put_att(ncid,varid(15),'standard_name','direction_of_sea_water_velocity')
3702  iret=nf90_put_att(ncid,varid(15),'globwave_name','direction_of_sea_water_velocity')
3703  iret=nf90_put_att(ncid,varid(15),'units','degree')
3704  IF (ncvartype.LE.3) THEN
3705  iret=nf90_put_att(ncid,varid(15),'scale_factor',0.1)
3706  iret=nf90_put_att(ncid,varid(15),'add_offset',0.)
3707  iret=nf90_put_att(ncid,varid(15),'valid_min',0)
3708  iret=nf90_put_att(ncid,varid(15),'valid_max',3600)
3709  iret=nf90_put_att(ncid,varid(15),'_FillValue',nf90_fill_short)
3710  ELSE
3711  iret=nf90_put_att(ncid,varid(15),'scale_factor',1.)
3712  iret=nf90_put_att(ncid,varid(15),'add_offset',0.)
3713  iret=nf90_put_att(ncid,varid(15),'valid_min',0.)
3714  iret=nf90_put_att(ncid,varid(15),'valid_max',360.)
3715  iret=nf90_put_att(ncid,varid(15),'_FillValue',nf90_fill_float)
3716  END IF
3717  iret=nf90_put_att(ncid,varid(15),'content','TX')
3718  iret=nf90_put_att(ncid,varid(15),'associates','time station')
3719 #ifdef W3_RTD
3720  IF ( flagunr ) THEN
3721  iret=nf90_put_att(ncid,varid(15),'direction_reference','True North')
3722  ELSE
3723  iret=nf90_put_att(ncid,varid(15),'direction_reference','Rotated Pole Grid North')
3724  END IF
3725 #endif
3726 
3727 
3728  ! Add values in netCDF file
3729  iret=nf90_enddef(ncid)
3730  CALL check_err(iret,48)
3731  iret=nf90_put_var(ncid,varid(6),freq(1:nk))
3732  CALL check_err(iret,49)
3733  iret=nf90_put_var(ncid,varid(7),freq1(1:nk))
3734  CALL check_err(iret,50)
3735  iret=nf90_put_var(ncid,varid(8),freq2(1:nk))
3736  CALL check_err(iret,51)
3737  iret=nf90_put_var(ncid,varid(9),dir(1:nth))
3738  CALL check_err(iret,52)
3739 
3740 
3741 
3742 
3743  !
3744  ! ... ITYPE = 1 AND OTYPE = 4
3745  !
3746 
3747  ELSE IF (itype.EQ.1 .AND. otype.EQ.4) THEN
3748  !
3749  ! Define specifics dimensions
3750  !
3751  iret = nf90_def_dim(ncid, 'npart', dimln(4), dimid(4))
3752  CALL check_err(iret,53)
3753 
3754  !
3755  ! define specifics variables
3756  !
3757 
3758  !npart
3759  iret=nf90_def_var(ncid, 'npart', nf90_int, (/ dimid(two),dimid(one) /), varid(6))
3760  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
3761  iret=nf90_put_att(ncid,varid(6),'long_name','npart')
3762  iret=nf90_put_att(ncid,varid(6),'standard_name','npart')
3763  iret=nf90_put_att(ncid,varid(6),'globwave_name','npart')
3764  iret=nf90_put_att(ncid,varid(6),'units','1')
3765  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
3766  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
3767  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
3768  iret=nf90_put_att(ncid,varid(6),'valid_max',100.)
3769  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_int)
3770  iret=nf90_put_att(ncid,varid(6),'axis','Y')
3771  !d
3772  iret=nf90_def_var(ncid, 'dpt', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
3773  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
3774  iret=nf90_put_att(ncid,varid(7),'long_name','depth')
3775  iret=nf90_put_att(ncid,varid(7),'standard_name','depth')
3776  iret=nf90_put_att(ncid,varid(7),'globwave_name','depth')
3777  iret=nf90_put_att(ncid,varid(7),'units','m')
3778  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
3779  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
3780  iret=nf90_put_att(ncid,varid(7),'valid_min',-100.)
3781  iret=nf90_put_att(ncid,varid(7),'valid_max',10000.)
3782  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
3783  iret=nf90_put_att(ncid,varid(7),'content','TX')
3784  iret=nf90_put_att(ncid,varid(7),'associates','time station')
3785  !U10
3786  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
3787  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
3788  iret=nf90_put_att(ncid,varid(8),'long_name','wind speed at 10m')
3789  iret=nf90_put_att(ncid,varid(8),'standard_name','wind_speed')
3790  iret=nf90_put_att(ncid,varid(8),'globwave_name','wind_speed')
3791  iret=nf90_put_att(ncid,varid(8),'units','m s-1')
3792  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
3793  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
3794  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
3795  iret=nf90_put_att(ncid,varid(8),'valid_max',100.)
3796  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
3797  iret=nf90_put_att(ncid,varid(8),'content','TX')
3798  iret=nf90_put_att(ncid,varid(8),'associates','time station')
3799  !Dir
3800  iret=nf90_def_var(ncid, 'wnddir', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
3801  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
3802  iret=nf90_put_att(ncid,varid(9),'long_name','wind direction')
3803  iret=nf90_put_att(ncid,varid(9),'standard_name','wind_from_direction')
3804  iret=nf90_put_att(ncid,varid(9),'globwave_name','wind_from_direction')
3805  iret=nf90_put_att(ncid,varid(9),'units','degree')
3806  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
3807  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
3808  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
3809  iret=nf90_put_att(ncid,varid(9),'valid_max',360.)
3810  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
3811  iret=nf90_put_att(ncid,varid(9),'content','TX')
3812  iret=nf90_put_att(ncid,varid(9),'associates','time station')
3813 #ifdef W3_RTD
3814  IF ( flagunr ) THEN
3815  iret=nf90_put_att(ncid,varid(9),'direction_reference','True North')
3816  ELSE
3817  iret=nf90_put_att(ncid,varid(9),'direction_reference','Rotated Pole Grid North')
3818  END IF
3819 #endif
3820 
3821  !Uc
3822  iret=nf90_def_var(ncid, 'cur', nf90_float, (/ dimid(two),dimid(one) /), varid(10))
3823  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
3824  iret=nf90_put_att(ncid,varid(10),'long_name','sea water speed')
3825  iret=nf90_put_att(ncid,varid(10),'standard_name','sea_water_speed')
3826  iret=nf90_put_att(ncid,varid(10),'globwave_name','sea_water_speed')
3827  iret=nf90_put_att(ncid,varid(10),'units','m s-1')
3828  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
3829  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
3830  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
3831  iret=nf90_put_att(ncid,varid(10),'valid_max',100.)
3832  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
3833  iret=nf90_put_att(ncid,varid(10),'content','TX')
3834  iret=nf90_put_att(ncid,varid(10),'associates','time station')
3835  !Dir
3836  iret=nf90_def_var(ncid, 'curdir', nf90_float, (/ dimid(two),dimid(one) /), varid(11))
3837  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
3838  iret=nf90_put_att(ncid,varid(11),'long_name',' direction from of sea water velocity')
3839  iret=nf90_put_att(ncid,varid(11),'standard_name','direction_of_sea_water_velocity')
3840  iret=nf90_put_att(ncid,varid(11),'globwave_name','direction_of_sea_water_velocity')
3841  iret=nf90_put_att(ncid,varid(11),'units','degree')
3842  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
3843  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
3844  iret=nf90_put_att(ncid,varid(11),'valid_min',0.)
3845  iret=nf90_put_att(ncid,varid(11),'valid_max',360.)
3846  iret=nf90_put_att(ncid,varid(11),'_FillValue',nf90_fill_float)
3847  iret=nf90_put_att(ncid,varid(11),'content','TX')
3848  iret=nf90_put_att(ncid,varid(11),'associates','time station')
3849 #ifdef W3_RTD
3850  IF ( flagunr ) THEN
3851  iret=nf90_put_att(ncid,varid(11),'direction_reference','True North')
3852  ELSE
3853  iret=nf90_put_att(ncid,varid(11),'direction_reference','Rotated Pole Grid North')
3854  END IF
3855 #endif
3856 
3857  !Hs
3858  iret=nf90_def_var(ncid, 'hs', nf90_float, (/dimid(4),dimid(two),dimid(one)/),varid(12))
3859  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(12), 1, 1, deflate)
3860  iret=nf90_put_att(ncid,varid(12),'long_name','spectral estimate of significant wave height')
3861  iret=nf90_put_att(ncid,varid(12),'standard_name','sea_surface_wave_significant_height')
3862  iret=nf90_put_att(ncid,varid(12),'globwave_name','significant_wave_height')
3863  iret=nf90_put_att(ncid,varid(12),'units','m')
3864  iret=nf90_put_att(ncid,varid(12),'scale_factor',1.)
3865  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
3866  iret=nf90_put_att(ncid,varid(12),'valid_min',0.)
3867  iret=nf90_put_att(ncid,varid(12),'valid_max',100.)
3868  iret=nf90_put_att(ncid,varid(12),'_FillValue',nf90_fill_float)
3869  iret=nf90_put_att(ncid,varid(12),'content','TXY')
3870  iret=nf90_put_att(ncid,varid(12),'associates','time station npart')
3871  !Tp
3872  iret=nf90_def_var(ncid, 'tp', nf90_float,(/dimid(4),dimid(two),dimid(one)/),varid(13))
3873  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(13), 1, 1, deflate)
3874  iret=nf90_put_att(ncid,varid(13),'long_name','dominant_wave_period')
3875  iret=nf90_put_att(ncid,varid(13),'standard_name','dominant_wave_period')
3876  iret=nf90_put_att(ncid,varid(13),'globwave_name','dominant_wave_period')
3877  iret=nf90_put_att(ncid,varid(13),'units','s')
3878  iret=nf90_put_att(ncid,varid(13),'scale_factor',1.)
3879  iret=nf90_put_att(ncid,varid(13),'add_offset',0.)
3880  iret=nf90_put_att(ncid,varid(13),'valid_min',0.)
3881  iret=nf90_put_att(ncid,varid(13),'valid_max',100.)
3882  iret=nf90_put_att(ncid,varid(13),'_FillValue',nf90_fill_float)
3883  iret=nf90_put_att(ncid,varid(13),'content','TXY')
3884  iret=nf90_put_att(ncid,varid(13),'associates','time station npart')
3885  !L
3886  iret=nf90_def_var(ncid, 'lp', nf90_float, (/dimid(4),dimid(two),dimid(one)/),varid(14))
3887  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(14), 1, 1, deflate)
3888  iret=nf90_put_att(ncid,varid(14),'long_name','peak wave length')
3889  iret=nf90_put_att(ncid,varid(14),'standard_name','peak_wave_length')
3890  iret=nf90_put_att(ncid,varid(14),'globwave_name','peak_wave_length')
3891  iret=nf90_put_att(ncid,varid(14),'units','m')
3892  iret=nf90_put_att(ncid,varid(14),'scale_factor',1.)
3893  iret=nf90_put_att(ncid,varid(14),'add_offset',0.)
3894  iret=nf90_put_att(ncid,varid(14),'valid_min',0.)
3895  iret=nf90_put_att(ncid,varid(14),'valid_max',100.)
3896  iret=nf90_put_att(ncid,varid(14),'_FillValue',nf90_fill_float)
3897  iret=nf90_put_att(ncid,varid(14),'content','TXY')
3898  iret=nf90_put_att(ncid,varid(14),'associates','time station npart')
3899  !th1m
3900  iret=nf90_def_var(ncid, 'th1m', nf90_float, (/dimid(4),dimid(two),dimid(one)/),varid(15))
3901  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(15), 1, 1, deflate)
3902  iret=nf90_put_att(ncid,varid(15),'long_name','mean wave direction from spectral moments')
3903  iret=nf90_put_att(ncid,varid(15),'standard_name','mean_wave_direction')
3904  iret=nf90_put_att(ncid,varid(15),'globwave_name','mean_wave_direction')
3905  iret=nf90_put_att(ncid,varid(15),'units','degree')
3906  iret=nf90_put_att(ncid,varid(15),'scale_factor',1.)
3907  iret=nf90_put_att(ncid,varid(15),'add_offset',0.)
3908  iret=nf90_put_att(ncid,varid(15),'valid_min',0.)
3909  iret=nf90_put_att(ncid,varid(15),'valid_max',360.)
3910  iret=nf90_put_att(ncid,varid(15),'_FillValue',nf90_fill_float)
3911  iret=nf90_put_att(ncid,varid(15),'content','TXY')
3912  iret=nf90_put_att(ncid,varid(15),'associates','time station npart')
3913 #ifdef W3_RTD
3914  IF ( flagunr ) THEN
3915  iret=nf90_put_att(ncid,varid(15),'direction_reference','True North')
3916  ELSE
3917  iret=nf90_put_att(ncid,varid(15),'direction_reference','Rotated Pole Grid North')
3918  END IF
3919 #endif
3920 
3921  !sth1m
3922  iret=nf90_def_var(ncid, 'sth1m', nf90_float,(/dimid(4),dimid(two),dimid(one)/),varid(16))
3923  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(16), 1, 1, deflate)
3924  iret=nf90_put_att(ncid,varid(16),'long_name','directional spread from spectral moments')
3925  iret=nf90_put_att(ncid,varid(16),'standard_name','mean_wave_spreading')
3926  iret=nf90_put_att(ncid,varid(16),'globwave_name','mean_wave_spreading')
3927  iret=nf90_put_att(ncid,varid(16),'units','degree')
3928  iret=nf90_put_att(ncid,varid(16),'scale_factor',1.)
3929  iret=nf90_put_att(ncid,varid(16),'add_offset',0.)
3930  iret=nf90_put_att(ncid,varid(16),'valid_min',0.)
3931  iret=nf90_put_att(ncid,varid(16),'valid_max',360.)
3932  iret=nf90_put_att(ncid,varid(16),'_FillValue',nf90_fill_float)
3933  iret=nf90_put_att(ncid,varid(16),'content','TXY')
3934  iret=nf90_put_att(ncid,varid(16),'associates','time station npart')
3935  !ws
3936  iret=nf90_def_var(ncid, 'ws', nf90_float,(/dimid(4),dimid(two),dimid(one)/),varid(17))
3937  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(17), 1, 1, deflate)
3938  iret=nf90_put_att(ncid,varid(17),'long_name','wind sea fraction')
3939  iret=nf90_put_att(ncid,varid(17),'standard_name','wind_sea_fraction')
3940  iret=nf90_put_att(ncid,varid(17),'globwave_name','wind_sea_fraction')
3941  iret=nf90_put_att(ncid,varid(17),'units','%')
3942  iret=nf90_put_att(ncid,varid(17),'scale_factor',1.)
3943  iret=nf90_put_att(ncid,varid(17),'add_offset',0.)
3944  iret=nf90_put_att(ncid,varid(17),'valid_min',0.)
3945  iret=nf90_put_att(ncid,varid(17),'valid_max',100.)
3946  iret=nf90_put_att(ncid,varid(17),'_FillValue',nf90_fill_float)
3947  iret=nf90_put_att(ncid,varid(17),'content','TXY')
3948  iret=nf90_put_att(ncid,varid(17),'associates','time station npart')
3949  !TM10
3950  iret=nf90_def_var(ncid, 'tm10', nf90_float,(/dimid(4),dimid(2),dimid(1)/),varid(18))
3951  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(18), 1, 1, deflate)
3952  iret=nf90_put_att(ncid,varid(18),'long_name','mean wave period from spectral moments (-1,0)')
3953  iret=nf90_put_att(ncid,varid(18),'standard_name','mean_wave_period_tm10')
3954  iret=nf90_put_att(ncid,varid(18),'globwave_name','mean_wave_period_tm10')
3955  iret=nf90_put_att(ncid,varid(18),'units','seconds')
3956  iret=nf90_put_att(ncid,varid(18),'scale_factor',1.)
3957  iret=nf90_put_att(ncid,varid(18),'add_offset',0.)
3958  iret=nf90_put_att(ncid,varid(18),'valid_min',0.)
3959  iret=nf90_put_att(ncid,varid(18),'valid_max',30.)
3960  iret=nf90_put_att(ncid,varid(18),'_FillValue',nf90_fill_float)
3961  iret=nf90_put_att(ncid,varid(18),'content','TXY')
3962  iret=nf90_put_att(ncid,varid(18),'associates','time station npart')
3963  !T01
3964  iret=nf90_def_var(ncid, 't01', nf90_float,(/dimid(4),dimid(2),dimid(1)/),varid(19))
3965  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(19), 1, 1, deflate)
3966  iret=nf90_put_att(ncid,varid(19),'long_name','mean wave period from spectral moments (0,1)')
3967  iret=nf90_put_att(ncid,varid(19),'standard_name','mean_wave_period_t01')
3968  iret=nf90_put_att(ncid,varid(19),'globwave_name','mean_wave_period_t01')
3969  iret=nf90_put_att(ncid,varid(19),'units','seconds')
3970  iret=nf90_put_att(ncid,varid(19),'scale_factor',1.)
3971  iret=nf90_put_att(ncid,varid(19),'add_offset',0.)
3972  iret=nf90_put_att(ncid,varid(19),'valid_min',0.)
3973  iret=nf90_put_att(ncid,varid(19),'valid_max',30.)
3974  iret=nf90_put_att(ncid,varid(19),'_FillValue',nf90_fill_float)
3975  iret=nf90_put_att(ncid,varid(19),'content','TXY')
3976  iret=nf90_put_att(ncid,varid(19),'associates','time station npart')
3977  !T02
3978  iret=nf90_def_var(ncid, 't02', nf90_float,(/dimid(4),dimid(2),dimid(1)/),varid(20))
3979  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(20), 1, 1, deflate)
3980  iret=nf90_put_att(ncid,varid(20),'long_name','mean wave period from spectral moments (0,2)')
3981  iret=nf90_put_att(ncid,varid(20),'standard_name','mean_wave_period_t02')
3982  iret=nf90_put_att(ncid,varid(20),'globwave_name','mean_wave_period_t02')
3983  iret=nf90_put_att(ncid,varid(20),'units','seconds')
3984  iret=nf90_put_att(ncid,varid(20),'scale_factor',1.)
3985  iret=nf90_put_att(ncid,varid(20),'add_offset',0.)
3986  iret=nf90_put_att(ncid,varid(20),'valid_min',0.)
3987  iret=nf90_put_att(ncid,varid(20),'valid_max',30.)
3988  iret=nf90_put_att(ncid,varid(20),'_FillValue',nf90_fill_float)
3989  iret=nf90_put_att(ncid,varid(20),'content','TXY')
3990  iret=nf90_put_att(ncid,varid(20),'associates','time station npart')
3991 
3992  ! NF90_ENDDEF function
3993  iret=nf90_enddef(ncid)
3994  CALL check_err(iret,54)
3995 
3996  !
3997  ! ... ITYPE = 2 AND OTYPE = 1
3998  !
3999 
4000 
4001  ELSE IF (itype.EQ.2 .AND. otype.EQ.1) THEN
4002  !d
4003  iret=nf90_def_var(ncid, 'dpt', nf90_float, (/ dimid(two),dimid(one) /), varid(6))
4004  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
4005  iret=nf90_put_att(ncid,varid(6),'long_name','depth')
4006  iret=nf90_put_att(ncid,varid(6),'standard_name','depth')
4007  iret=nf90_put_att(ncid,varid(6),'globwave_name','depth')
4008  iret=nf90_put_att(ncid,varid(6),'units','m')
4009  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
4010  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
4011  iret=nf90_put_att(ncid,varid(6),'valid_min',-100.)
4012  iret=nf90_put_att(ncid,varid(6),'valid_max',10000.)
4013  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
4014  iret=nf90_put_att(ncid,varid(6),'content','TX')
4015  iret=nf90_put_att(ncid,varid(6),'associates','time station')
4016 
4017  !Uc
4018  iret=nf90_def_var(ncid, 'cur', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
4019  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
4020  iret=nf90_put_att(ncid,varid(7),'long_name','sea water speed')
4021  iret=nf90_put_att(ncid,varid(7),'standard_name','sea_water_speed')
4022  iret=nf90_put_att(ncid,varid(7),'globwave_name','sea_water_speed')
4023  iret=nf90_put_att(ncid,varid(7),'units','m s-1')
4024  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
4025  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
4026  iret=nf90_put_att(ncid,varid(7),'valid_min',0.)
4027  iret=nf90_put_att(ncid,varid(7),'valid_max',100.)
4028  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
4029  iret=nf90_put_att(ncid,varid(7),'content','TX')
4030  iret=nf90_put_att(ncid,varid(7),'associates','time station')
4031  !Dir
4032  iret=nf90_def_var(ncid, 'curdir', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
4033  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
4034  iret=nf90_put_att(ncid,varid(8),'long_name','direction from of sea water velocity')
4035  iret=nf90_put_att(ncid,varid(8),'standard_name','direction_of_sea_water_velocity')
4036  iret=nf90_put_att(ncid,varid(8),'globwave_name','direction_of_sea_water_velocity')
4037  iret=nf90_put_att(ncid,varid(8),'units','degree')
4038  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
4039  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
4040  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
4041  iret=nf90_put_att(ncid,varid(8),'valid_max',360.)
4042  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
4043  iret=nf90_put_att(ncid,varid(8),'content','TX')
4044  iret=nf90_put_att(ncid,varid(8),'associates','time station')
4045 #ifdef W3_RTD
4046  IF ( flagunr ) THEN
4047  iret=nf90_put_att(ncid,varid(8),'direction_reference','True North')
4048  ELSE
4049  iret=nf90_put_att(ncid,varid(8),'direction_reference','Rotated Pole Grid North')
4050  END IF
4051 #endif
4052 
4053  !U10
4054  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
4055  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
4056  iret=nf90_put_att(ncid,varid(9),'long_name','wind speed at 10m')
4057  iret=nf90_put_att(ncid,varid(9),'standard_name','wind_speed')
4058  iret=nf90_put_att(ncid,varid(9),'globwave_name','wind_speed')
4059  iret=nf90_put_att(ncid,varid(9),'units','m s-1')
4060  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4061  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4062  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4063  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
4064  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
4065  iret=nf90_put_att(ncid,varid(9),'content','TX')
4066  iret=nf90_put_att(ncid,varid(9),'associates','time station')
4067  !Dir
4068  iret=nf90_def_var(ncid, 'wnddir', nf90_float, (/ dimid(two),dimid(one) /), varid(10))
4069  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
4070  iret=nf90_put_att(ncid,varid(10),'long_name','wind direction')
4071  iret=nf90_put_att(ncid,varid(10),'standard_name','wind_from_direction')
4072  iret=nf90_put_att(ncid,varid(10),'globwave_name','wind_from_direction')
4073  iret=nf90_put_att(ncid,varid(10),'units','degree')
4074  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
4075  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
4076  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
4077  iret=nf90_put_att(ncid,varid(10),'valid_max',360.)
4078  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
4079  iret=nf90_put_att(ncid,varid(10),'content','TX')
4080  iret=nf90_put_att(ncid,varid(10),'associates','time station')
4081 #ifdef W3_RTD
4082  IF ( flagunr ) THEN
4083  iret=nf90_put_att(ncid,varid(10),'direction_reference','True North')
4084  ELSE
4085  iret=nf90_put_att(ncid,varid(10),'direction_reference','Rotated Pole Grid North')
4086  END IF
4087 #endif
4088 
4089  !zeta_setup
4090 #ifdef W3_SETUP
4091  iret=nf90_def_var(ncid, 'wave_setup', nf90_float, (/ dimid(two),dimid(one) /), varid(11))
4092  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
4093  iret=nf90_put_att(ncid,varid(11),'long_name','wave setup')
4094  iret=nf90_put_att(ncid,varid(11),'standard_name','wave_induced_setup')
4095  iret=nf90_put_att(ncid,varid(11),'globwave_name','wave_induced_setup')
4096  iret=nf90_put_att(ncid,varid(11),'units','m')
4097  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
4098  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
4099  iret=nf90_put_att(ncid,varid(11),'valid_min',-100.)
4100  iret=nf90_put_att(ncid,varid(11),'valid_max',100.)
4101  iret=nf90_put_att(ncid,varid(11),'_FillValue',nf90_fill_float)
4102  iret=nf90_put_att(ncid,varid(11),'content','TX')
4103  iret=nf90_put_att(ncid,varid(11),'associates','time station')
4104 #endif
4105 
4106  ! NF90_ENDDEF function
4107  iret=nf90_enddef(ncid)
4108  CALL check_err(iret,55)
4109 
4110  !
4111  ! ... ITYPE = 2 AND OTYPE = 2
4112  !
4113 
4114  ELSE IF (itype.EQ.2 .AND. otype.EQ.2) THEN
4115  !Hs
4116  iret=nf90_def_var(ncid, 'hs', nf90_float, (/ dimid(two),dimid(one) /), varid(6))
4117  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
4118  iret=nf90_put_att(ncid,varid(6),'long_name','spectral estimate of significant wave height')
4119  iret=nf90_put_att(ncid,varid(6),'standard_name','sea_surface_wave_significant_height')
4120  iret=nf90_put_att(ncid,varid(6),'globwave_name','significant_wave_height')
4121  iret=nf90_put_att(ncid,varid(6),'units','m')
4122  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
4123  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
4124  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
4125  iret=nf90_put_att(ncid,varid(6),'valid_max',100.)
4126  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
4127  iret=nf90_put_att(ncid,varid(6),'content','TX')
4128  iret=nf90_put_att(ncid,varid(6),'associates','time station')
4129  !L
4130  iret=nf90_def_var(ncid, 'lm', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
4131  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
4132  iret=nf90_put_att(ncid,varid(7),'long_name','mean wave length')
4133  iret=nf90_put_att(ncid,varid(7),'standard_name','mean_wave_length')
4134  iret=nf90_put_att(ncid,varid(7),'globwave_name','mean_wave_length')
4135  iret=nf90_put_att(ncid,varid(7),'units','m')
4136  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
4137  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
4138  iret=nf90_put_att(ncid,varid(7),'valid_min',0.)
4139  iret=nf90_put_att(ncid,varid(7),'valid_max',100.)
4140  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
4141  iret=nf90_put_att(ncid,varid(7),'content','TX')
4142  iret=nf90_put_att(ncid,varid(7),'associates','time station')
4143  !Tr
4144  iret=nf90_def_var(ncid, 'tr', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
4145  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
4146  iret=nf90_put_att(ncid,varid(8),'long_name','mean period normalised by the relative frequency')
4147  iret=nf90_put_att(ncid,varid(8),'standard_name','mean_period_normalised_by_the_relative_frequency')
4148  iret=nf90_put_att(ncid,varid(8),'globwave_name','mean period normalised by the relative frequency')
4149  iret=nf90_put_att(ncid,varid(8),'units','s')
4150  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
4151  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
4152  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
4153  iret=nf90_put_att(ncid,varid(8),'valid_max',100.)
4154  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
4155  iret=nf90_put_att(ncid,varid(8),'content','TX')
4156  iret=nf90_put_att(ncid,varid(8),'associates','time station')
4157  !th1p
4158  iret=nf90_def_var(ncid, 'th1p', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
4159  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
4160  iret=nf90_put_att(ncid,varid(9),'long_name','mean wave direction from spectral moments at spectral peak')
4161  iret=nf90_put_att(ncid,varid(9),'standard_name','dominant_wave_direction')
4162  iret=nf90_put_att(ncid,varid(9),'globwave_name','dominant_wave_direction')
4163  iret=nf90_put_att(ncid,varid(9),'units','degree')
4164  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4165  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4166  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4167  iret=nf90_put_att(ncid,varid(9),'valid_max',360.)
4168  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
4169  iret=nf90_put_att(ncid,varid(9),'content','TX')
4170  iret=nf90_put_att(ncid,varid(9),'associates','time station')
4171 #ifdef W3_RTD
4172  IF ( flagunr ) THEN
4173  iret=nf90_put_att(ncid,varid(9),'direction_reference','True North')
4174  ELSE
4175  iret=nf90_put_att(ncid,varid(9),'direction_reference','Rotated Pole Grid North')
4176  END IF
4177 #endif
4178 
4179  !sth1p
4180  iret=nf90_def_var(ncid, 'sth1p', nf90_float, (/ dimid(two),dimid(one) /), varid(10))
4181  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
4182  iret=nf90_put_att(ncid,varid(10),'long_name','directional spread at spectral peak')
4183  iret=nf90_put_att(ncid,varid(10),'standard_name','dominant_wave_spreading')
4184  iret=nf90_put_att(ncid,varid(10),'globwave_name','dominant_wave_spreading')
4185  iret=nf90_put_att(ncid,varid(10),'units','degree')
4186  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
4187  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
4188  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
4189  iret=nf90_put_att(ncid,varid(10),'valid_max',360.)
4190  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
4191  iret=nf90_put_att(ncid,varid(10),'content','TX')
4192  iret=nf90_put_att(ncid,varid(10),'associates','time station')
4193  !fp
4194  iret=nf90_def_var(ncid, 'fp', nf90_float, (/ dimid(two),dimid(one) /), varid(11))
4195  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
4196  iret=nf90_put_att(ncid,varid(11),'long_name',' peak frequency (Fp=1/Tp)')
4197  iret=nf90_put_att(ncid,varid(11),'standard_name','dominant_wave_frequency')
4198  iret=nf90_put_att(ncid,varid(11),'globwave_name','dominant_wave_frequency')
4199  iret=nf90_put_att(ncid,varid(11),'units','s-1')
4200  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
4201  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
4202  iret=nf90_put_att(ncid,varid(11),'valid_min',0.)
4203  iret=nf90_put_att(ncid,varid(11),'valid_max',100.)
4204  iret=nf90_put_att(ncid,varid(11),'_FillValue',nf90_fill_float)
4205  iret=nf90_put_att(ncid,varid(11),'content','TX')
4206  iret=nf90_put_att(ncid,varid(11),'associates','time station')
4207  !th1m
4208  iret=nf90_def_var(ncid, 'th1m', nf90_float, (/ dimid(two),dimid(one) /), varid(12))
4209  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(12), 1, 1, deflate)
4210  iret=nf90_put_att(ncid,varid(12),'standard_name','mean wave direction from spectral moments')
4211  iret=nf90_put_att(ncid,varid(12),'standard_name','mean_wave_direction')
4212  iret=nf90_put_att(ncid,varid(12),'globwave_name','mean_wave_direction')
4213  iret=nf90_put_att(ncid,varid(12),'units','degree')
4214  iret=nf90_put_att(ncid,varid(12),'scale_factor',1.)
4215  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
4216  iret=nf90_put_att(ncid,varid(12),'valid_min',0.)
4217  iret=nf90_put_att(ncid,varid(12),'valid_max',360.)
4218  iret=nf90_put_att(ncid,varid(12),'_FillValue',nf90_fill_float)
4219  iret=nf90_put_att(ncid,varid(12),'content','TX')
4220  iret=nf90_put_att(ncid,varid(12),'associates','time station')
4221 #ifdef W3_RTD
4222  IF ( flagunr ) THEN
4223  iret=nf90_put_att(ncid,varid(12),'direction_reference','True North')
4224  ELSE
4225  iret=nf90_put_att(ncid,varid(12),'direction_reference','Rotated Pole Grid North')
4226  END IF
4227 #endif
4228 
4229  !sth1m
4230  iret=nf90_def_var(ncid, 'sth1m', nf90_float, (/ dimid(two),dimid(one) /), varid(13))
4231  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(13), 1, 1, deflate)
4232  iret=nf90_put_att(ncid,varid(13),'long_name','directional spread from spectral moments')
4233  iret=nf90_put_att(ncid,varid(13),'standard_name','mean_wave_spreading')
4234  iret=nf90_put_att(ncid,varid(13),'globwave_name','mean_wave_spreading')
4235  iret=nf90_put_att(ncid,varid(13),'units','degree')
4236  iret=nf90_put_att(ncid,varid(13),'scale_factor',1.)
4237  iret=nf90_put_att(ncid,varid(13),'add_offset',0.)
4238  iret=nf90_put_att(ncid,varid(13),'valid_min',0.)
4239  iret=nf90_put_att(ncid,varid(13),'valid_max',360.)
4240  iret=nf90_put_att(ncid,varid(13),'_FillValue',nf90_fill_float)
4241  iret=nf90_put_att(ncid,varid(13),'content','TX')
4242  iret=nf90_put_att(ncid,varid(13),'associates','time station')
4243 
4244  ! NF90_ENDDEF function
4245  iret=nf90_enddef(ncid)
4246  CALL check_err(iret,56)
4247 
4248 
4249  !
4250  ! ... ITYPE = 2 AND OTYPE = 3
4251  !
4252 
4253  ELSE IF (itype.EQ.2 .AND. otype.EQ.3) THEN
4254  !Ust
4255  iret=nf90_def_var(ncid, 'ust', nf90_float, (/ dimid(two),dimid(one) /), varid(6))
4256  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
4257  iret=nf90_put_att(ncid,varid(6),'long_name','friction velocity')
4258  iret=nf90_put_att(ncid,varid(6),'standard_name','friction_velocity')
4259  iret=nf90_put_att(ncid,varid(6),'globwave_name','friction_velocity')
4260  iret=nf90_put_att(ncid,varid(6),'units','m s-1')
4261  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
4262  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
4263  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
4264  iret=nf90_put_att(ncid,varid(6),'valid_max',100.)
4265  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
4266  iret=nf90_put_att(ncid,varid(6),'content','TX')
4267  iret=nf90_put_att(ncid,varid(6),'associates','time station')
4268  !Efst
4269  iret=nf90_def_var(ncid, 'efst', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
4270  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
4271  iret=nf90_put_att(ncid,varid(7),'long_name', &
4272  'nondimensionalized using surface elevation variance spectrum')
4273  iret=nf90_put_att(ncid,varid(7),'standard_name','sea_surface_wave_variance_spectral_density')
4274  iret=nf90_put_att(ncid,varid(7),'globwave_name','variance_spectral_density')
4275  iret=nf90_put_att(ncid,varid(7),'units','-')
4276  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
4277  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
4278  iret=nf90_put_att(ncid,varid(7),'valid_min',0.)
4279  iret=nf90_put_att(ncid,varid(7),'valid_max',100.)
4280  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
4281  iret=nf90_put_att(ncid,varid(7),'content','TX')
4282  iret=nf90_put_att(ncid,varid(7),'associates','time station')
4283 #ifdef W3_RTD
4284  IF ( flagunr ) THEN
4285  iret=nf90_put_att(ncid,varid(7),'direction_reference','True North')
4286  ELSE
4287  iret=nf90_put_att(ncid,varid(7),'direction_reference','Rotated Pole Grid North')
4288  END IF
4289 #endif
4290 
4291  !fpst
4292  iret=nf90_def_var(ncid, 'fpst', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
4293  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
4294  iret=nf90_put_att(ncid,varid(8),'long_name','nondimensionalized using peak frequency (Fp=1/Tp)')
4295  iret=nf90_put_att(ncid,varid(8),'standard_name','dominant_wave_frequency')
4296  iret=nf90_put_att(ncid,varid(8),'globwave_name','dominant_wave_frequency')
4297  iret=nf90_put_att(ncid,varid(8),'units','-')
4298  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4299  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4300  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4301  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
4302  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
4303  iret=nf90_put_att(ncid,varid(8),'content','TX')
4304  iret=nf90_put_att(ncid,varid(8),'associates','time station')
4305  !Cd
4306  iret=nf90_def_var(ncid, 'cd', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
4307  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
4308  iret=nf90_put_att(ncid,varid(9),'long_name','drag coefficient')
4309  iret=nf90_put_att(ncid,varid(9),'standard_name','drag_coefficient')
4310  iret=nf90_put_att(ncid,varid(9),'globwave_name','drag_coefficient')
4311  iret=nf90_put_att(ncid,varid(9),'units','*1000')
4312  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4313  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4314  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4315  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
4316  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
4317  iret=nf90_put_att(ncid,varid(9),'content','TX')
4318  iret=nf90_put_att(ncid,varid(9),'associates','time station')
4319  !alpha
4320  iret=nf90_def_var(ncid, 'alpha', nf90_float, (/ dimid(two),dimid(one) /), varid(10))
4321  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
4322  iret=nf90_put_att(ncid,varid(10),'long_name','alpha')
4323  iret=nf90_put_att(ncid,varid(10),'standard_name','alpha')
4324  iret=nf90_put_att(ncid,varid(10),'globwave_name','alpha')
4325  iret=nf90_put_att(ncid,varid(10),'units','*100')
4326  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
4327  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
4328  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
4329  iret=nf90_put_att(ncid,varid(10),'valid_max',100.)
4330  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
4331  iret=nf90_put_att(ncid,varid(10),'content','TX')
4332  iret=nf90_put_att(ncid,varid(10),'associates','time station')
4333 
4334 
4335  ! NF90_ENDDEF function
4336  iret=nf90_enddef(ncid)
4337  CALL check_err(iret,57)
4338 
4339 
4340  !
4341  ! ... ITYPE = 2 AND OTYPE = 4
4342  !
4343 
4344  ELSE IF (itype.EQ.2 .AND. otype.EQ.4) THEN
4345  !U10
4346  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(6))
4347  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
4348  iret=nf90_put_att(ncid,varid(6),'long_name','wind speed at 10m')
4349  iret=nf90_put_att(ncid,varid(6),'standard_name','wind_speed')
4350  iret=nf90_put_att(ncid,varid(6),'globwave_name','wind_speed')
4351  iret=nf90_put_att(ncid,varid(6),'units','m s-1')
4352  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
4353  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
4354  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
4355  iret=nf90_put_att(ncid,varid(6),'valid_max',100.)
4356  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
4357  iret=nf90_put_att(ncid,varid(6),'content','TX')
4358  iret=nf90_put_att(ncid,varid(6),'associates','time station')
4359  !Efst
4360  iret=nf90_def_var(ncid, 'efst', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
4361  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
4362  iret=nf90_put_att(ncid,varid(7),'long_name', &
4363  'nondimensionalized using surface elevation variance spectrum')
4364  iret=nf90_put_att(ncid,varid(7),'standard_name','sea_surface_wave_variance_spectral_density')
4365  iret=nf90_put_att(ncid,varid(7),'globwave_name','variance_spectral_density')
4366  iret=nf90_put_att(ncid,varid(7),'units','-')
4367  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
4368  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
4369  iret=nf90_put_att(ncid,varid(7),'valid_min',0.)
4370  iret=nf90_put_att(ncid,varid(7),'valid_max',10.)
4371  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
4372  iret=nf90_put_att(ncid,varid(7),'content','TX')
4373  iret=nf90_put_att(ncid,varid(7),'associates','time station')
4374 #ifdef W3_RTD
4375  IF ( flagunr ) THEN
4376  iret=nf90_put_att(ncid,varid(7),'direction_reference','True North')
4377  ELSE
4378  iret=nf90_put_att(ncid,varid(7),'direction_reference','Rotated Pole Grid North')
4379  END IF
4380 #endif
4381 
4382  !fpst
4383  iret=nf90_def_var(ncid, 'fpst', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
4384  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
4385  iret=nf90_put_att(ncid,varid(8),'long_name', &
4386  'nondimensionalized using peak frequency (Fp=1/Tp)')
4387  iret=nf90_put_att(ncid,varid(8),'standard_name','dominant_wave_frequency')
4388  iret=nf90_put_att(ncid,varid(8),'globwave_name','dominant_wave_frequency')
4389  iret=nf90_put_att(ncid,varid(8),'units','-')
4390  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
4391  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
4392  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
4393  iret=nf90_put_att(ncid,varid(8),'valid_max',100.)
4394  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
4395  iret=nf90_put_att(ncid,varid(8),'content','TX')
4396  iret=nf90_put_att(ncid,varid(8),'associates','time station')
4397  !Cd
4398  iret=nf90_def_var(ncid, 'cd', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
4399  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
4400  iret=nf90_put_att(ncid,varid(9),'long_name','drag coefficient')
4401  iret=nf90_put_att(ncid,varid(9),'standard_name','drag_coefficient')
4402  iret=nf90_put_att(ncid,varid(9),'globwave_name','drag_coefficient')
4403  iret=nf90_put_att(ncid,varid(9),'units','*1000')
4404  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4405  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4406  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4407  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
4408  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
4409  iret=nf90_put_att(ncid,varid(9),'content','TX')
4410  iret=nf90_put_att(ncid,varid(9),'associates','time station')
4411  !alpha
4412  iret=nf90_def_var(ncid, 'alpha', nf90_float, (/ dimid(two),dimid(one) /), varid(10))
4413  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
4414  iret=nf90_put_att(ncid,varid(10),'long_name','spectral intensity coefficient')
4415  iret=nf90_put_att(ncid,varid(10),'standard_name','spectral_intensity_coefficient')
4416  iret=nf90_put_att(ncid,varid(10),'globwave_name','spectral_intensity_coefficient')
4417  iret=nf90_put_att(ncid,varid(10),'units','*100')
4418  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
4419  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
4420  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
4421  iret=nf90_put_att(ncid,varid(10),'valid_max',100.)
4422  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
4423  iret=nf90_put_att(ncid,varid(10),'content','TX')
4424  iret=nf90_put_att(ncid,varid(10),'associates','time station')
4425 
4426  ! NF90_ENDDEF function
4427  iret=nf90_enddef(ncid)
4428  CALL check_err(iret,58)
4429 
4430 
4431  !
4432  ! ... ITYPE = 2 AND OTYPE = 5
4433  !
4434 
4435  ELSE IF (itype.EQ.2 .AND. otype.EQ.5) THEN
4436  !U10
4437  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(6))
4438  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
4439  iret=nf90_put_att(ncid,varid(6),'long_name','wind speed at 10m')
4440  iret=nf90_put_att(ncid,varid(6),'standard_name','wind_speed')
4441  iret=nf90_put_att(ncid,varid(6),'globwave_name','wind_speed')
4442  iret=nf90_put_att(ncid,varid(6),'units','m s-1')
4443  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
4444  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
4445  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
4446  iret=nf90_put_att(ncid,varid(6),'valid_max',100.)
4447  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
4448  iret=nf90_put_att(ncid,varid(6),'content','TX')
4449  iret=nf90_put_att(ncid,varid(6),'associates','time station')
4450  !Dir
4451  iret=nf90_def_var(ncid, 'wnddir', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
4452  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
4453  iret=nf90_put_att(ncid,varid(7),'long_name','wind direction')
4454  iret=nf90_put_att(ncid,varid(7),'standard_name','wind_from_direction')
4455  iret=nf90_put_att(ncid,varid(7),'globwave_name','wind_from_direction')
4456  iret=nf90_put_att(ncid,varid(7),'units','degree')
4457  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
4458  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
4459  iret=nf90_put_att(ncid,varid(7),'valid_min',0.)
4460  iret=nf90_put_att(ncid,varid(7),'valid_max',360.)
4461  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
4462  iret=nf90_put_att(ncid,varid(7),'content','TX')
4463  iret=nf90_put_att(ncid,varid(7),'associates','time station')
4464 #ifdef W3_RTD
4465  IF ( flagunr ) THEN
4466  iret=nf90_put_att(ncid,varid(7),'direction_reference','True North')
4467  ELSE
4468  iret=nf90_put_att(ncid,varid(7),'direction_reference','Rotated Pole Grid North')
4469  END IF
4470 #endif
4471 
4472  !Hs
4473  iret=nf90_def_var(ncid, 'hs', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
4474  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
4475  iret=nf90_put_att(ncid,varid(8),'long_name','spectral estimate of significant wave height')
4476  iret=nf90_put_att(ncid,varid(8),'standard_name','sea_surface_wave_significant_height')
4477  iret=nf90_put_att(ncid,varid(8),'globwave_name','significant_wave_height')
4478  iret=nf90_put_att(ncid,varid(8),'units','m')
4479  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
4480  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
4481  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
4482  iret=nf90_put_att(ncid,varid(8),'valid_max',100.)
4483  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
4484  iret=nf90_put_att(ncid,varid(8),'content','TX')
4485  iret=nf90_put_att(ncid,varid(8),'associates','time station')
4486  !Hsst
4487  iret=nf90_def_var(ncid, 'hsst', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
4488  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
4489  iret=nf90_put_att(ncid,varid(9),'long_name', &
4490  'nondimensionalized using spectral estimate of significant wave height')
4491  iret=nf90_put_att(ncid,varid(9),'standard_name','sea_surface_wave_significant_height')
4492  iret=nf90_put_att(ncid,varid(9),'globwave_name','significant_wave_height')
4493  iret=nf90_put_att(ncid,varid(9),'units','-')
4494  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4495  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4496  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4497  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
4498  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
4499  iret=nf90_put_att(ncid,varid(9),'content','TX')
4500  iret=nf90_put_att(ncid,varid(9),'associates','time station')
4501  !cp/U
4502  iret=nf90_def_var(ncid, 'cpu', nf90_float, (/ dimid(two),dimid(one) /), varid(10))
4503  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
4504  iret=nf90_put_att(ncid,varid(10),'long_name','phase speed at peak frequency on friction velocity')
4505  iret=nf90_put_att(ncid,varid(10),'standard_name','peak_wave_age')
4506  iret=nf90_put_att(ncid,varid(10),'globwave_name','peak_wave_age')
4507  iret=nf90_put_att(ncid,varid(10),'units','-')
4508  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
4509  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
4510  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
4511  iret=nf90_put_att(ncid,varid(10),'valid_max',100.)
4512  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
4513  iret=nf90_put_att(ncid,varid(10),'content','TX')
4514  iret=nf90_put_att(ncid,varid(10),'associates','time station')
4515  !cm/U
4516  iret=nf90_def_var(ncid, 'cmu', nf90_float, (/ dimid(two),dimid(one) /), varid(11))
4517  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
4518  iret=nf90_put_att(ncid,varid(11),'long_name','phase speed at mean frequency on friction velocity')
4519  iret=nf90_put_att(ncid,varid(11),'standard_name','mean_wave_age')
4520  iret=nf90_put_att(ncid,varid(11),'globwave_name','mean_wave_age')
4521  iret=nf90_put_att(ncid,varid(11),'units','-')
4522  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
4523  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
4524  iret=nf90_put_att(ncid,varid(11),'valid_min',0.)
4525  iret=nf90_put_att(ncid,varid(11),'valid_max',100.)
4526  iret=nf90_put_att(ncid,varid(11),'_FillValue',nf90_fill_float)
4527  iret=nf90_put_att(ncid,varid(11),'content','TX')
4528  iret=nf90_put_att(ncid,varid(11),'associates','time station')
4529  !Dt
4530  iret=nf90_def_var(ncid, 'ast', nf90_float, (/ dimid(two),dimid(one) /), varid(12))
4531  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(12), 1, 1, deflate)
4532  iret=nf90_put_att(ncid,varid(12),'long_name','air sea temperature difference')
4533  iret=nf90_put_att(ncid,varid(12),'standard_name','air_sea_temperature_difference')
4534  iret=nf90_put_att(ncid,varid(12),'globwave_name','air_sea_temperature_difference')
4535  iret=nf90_put_att(ncid,varid(12),'units','degree')
4536  iret=nf90_put_att(ncid,varid(12),'scale_factor',1.)
4537  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
4538  iret=nf90_put_att(ncid,varid(12),'valid_min',0.)
4539  iret=nf90_put_att(ncid,varid(12),'valid_max',100.)
4540  iret=nf90_put_att(ncid,varid(12),'_FillValue',nf90_fill_float)
4541  iret=nf90_put_att(ncid,varid(12),'content','TX')
4542  iret=nf90_put_att(ncid,varid(12),'associates','time station')
4543 
4544 
4545  ! NF90_ENDDEF function
4546  iret=nf90_enddef(ncid)
4547  CALL check_err(iret,59)
4548 
4549 
4550  !
4551  ! ... ITYPE = 2 AND OTYPE = 6
4552  !
4553 
4554  ELSE IF (itype.EQ.2 .AND. otype.EQ.6) THEN
4555  !U10
4556  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(6))
4557  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
4558  iret=nf90_put_att(ncid,varid(6),'long_name','wind speed at 10m')
4559  iret=nf90_put_att(ncid,varid(6),'standard_name','wind_speed')
4560  iret=nf90_put_att(ncid,varid(6),'globwave_name','wind_speed')
4561  iret=nf90_put_att(ncid,varid(6),'units','m s-1')
4562  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
4563  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
4564  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
4565  iret=nf90_put_att(ncid,varid(6),'valid_max',100.)
4566  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
4567  iret=nf90_put_att(ncid,varid(6),'content','TX')
4568  iret=nf90_put_att(ncid,varid(6),'associates','time station')
4569  !Dir
4570  iret=nf90_def_var(ncid, 'wnddir', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
4571  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
4572  iret=nf90_put_att(ncid,varid(7),'long_name','wind direction')
4573  iret=nf90_put_att(ncid,varid(7),'standard_name','wind_from_direction')
4574  iret=nf90_put_att(ncid,varid(7),'globwave_name','wind_from_direction')
4575  iret=nf90_put_att(ncid,varid(7),'units','degree')
4576  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
4577  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
4578  iret=nf90_put_att(ncid,varid(7),'valid_min',0.)
4579  iret=nf90_put_att(ncid,varid(7),'valid_max',360.)
4580  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
4581  iret=nf90_put_att(ncid,varid(7),'content','TX')
4582  iret=nf90_put_att(ncid,varid(7),'associates','time station')
4583 #ifdef W3_RTD
4584  IF ( flagunr ) THEN
4585  iret=nf90_put_att(ncid,varid(7),'direction_reference','True North')
4586  ELSE
4587  iret=nf90_put_att(ncid,varid(7),'direction_reference','Rotated Pole Grid North')
4588  END IF
4589 #endif
4590 
4591  !Hs
4592  iret=nf90_def_var(ncid, 'hs', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
4593  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
4594  iret=nf90_put_att(ncid,varid(8),'long_name','spectral estimate of significant wave height')
4595  iret=nf90_put_att(ncid,varid(8),'standard_name','sea_surface_wave_significant_height')
4596  iret=nf90_put_att(ncid,varid(8),'globwave_name','significant_wave_height')
4597  iret=nf90_put_att(ncid,varid(8),'units','m')
4598  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
4599  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
4600  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
4601  iret=nf90_put_att(ncid,varid(8),'valid_max',100.)
4602  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
4603  iret=nf90_put_att(ncid,varid(8),'content','TX')
4604  iret=nf90_put_att(ncid,varid(8),'associates','time station')
4605  !Tp
4606  iret=nf90_def_var(ncid, 'tp', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
4607  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
4608  iret=nf90_put_att(ncid,varid(9),'long_name','dominant wave period')
4609  iret=nf90_put_att(ncid,varid(9),'standard_name','dominant_wave_period')
4610  iret=nf90_put_att(ncid,varid(9),'globwave_name','dominant_wave_period')
4611  iret=nf90_put_att(ncid,varid(9),'units','s')
4612  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4613  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4614  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4615  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
4616  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
4617  iret=nf90_put_att(ncid,varid(9),'content','TX')
4618  iret=nf90_put_att(ncid,varid(9),'associates','time station')
4619 
4620  ! NF90_ENDDEF function
4621  iret=nf90_enddef(ncid)
4622  CALL check_err(iret,60)
4623 
4624  !
4625  ! ... ITYPE = 3 AND OTYPE = 2
4626  !
4627  ELSE IF (itype.EQ.3 .AND. otype.EQ.2) THEN
4628  !
4629  ! Define specifics dimensions
4630  !
4631  iret = nf90_def_dim(ncid, 'frequency', dimln(4), dimid(4))
4632  CALL check_err(iret,61)
4633 
4634  !
4635  ! define specifics variables
4636  !
4637 
4638  ! frequency / frequencyst / ffp
4639  IF (iscale.EQ.0) THEN
4640  iret=nf90_def_var(ncid, 'frequency', nf90_float, dimid(4), varid(6))
4641  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4642  iret=nf90_def_var(ncid, 'frequencyst', nf90_float, dimid(4), varid(6))
4643  ELSE
4644  iret=nf90_def_var(ncid, 'ffp', nf90_float, dimid(4), varid(6))
4645  END IF
4646  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
4647  iret=nf90_put_att(ncid,varid(6),'long_name','frequency of center band')
4648  iret=nf90_put_att(ncid,varid(6),'standard_name','sea_surface_wave_frequency')
4649  iret=nf90_put_att(ncid,varid(6),'globwave_name','frequency')
4650  iret=nf90_put_att(ncid,varid(6),'units','s-1')
4651  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
4652  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
4653  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
4654  iret=nf90_put_att(ncid,varid(6),'valid_max',10.)
4655  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
4656  iret=nf90_put_att(ncid,varid(6),'axis','Y')
4657 
4658  !d
4659  iret=nf90_def_var(ncid, 'dpt', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
4660  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
4661  iret=nf90_put_att(ncid,varid(7),'long_name','depth')
4662  iret=nf90_put_att(ncid,varid(7),'standard_name','depth')
4663  iret=nf90_put_att(ncid,varid(7),'globwave_name','depth')
4664  iret=nf90_put_att(ncid,varid(7),'units','m')
4665  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
4666  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
4667  iret=nf90_put_att(ncid,varid(7),'valid_min',-100.)
4668  iret=nf90_put_att(ncid,varid(7),'valid_max',10000.)
4669  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
4670  iret=nf90_put_att(ncid,varid(7),'content','TX')
4671  iret=nf90_put_att(ncid,varid(7),'associates','time station')
4672 
4673  !Ust
4674  iret=nf90_def_var(ncid, 'ust', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
4675  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
4676  iret=nf90_put_att(ncid,varid(8),'long_name','friction velocity')
4677  iret=nf90_put_att(ncid,varid(8),'standard_name','friction_velocity')
4678  iret=nf90_put_att(ncid,varid(8),'globwave_name','friction_velocity')
4679  iret=nf90_put_att(ncid,varid(8),'units','m s-1')
4680  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
4681  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
4682  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
4683  iret=nf90_put_att(ncid,varid(8),'valid_max',100.)
4684  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
4685  iret=nf90_put_att(ncid,varid(8),'content','TX')
4686  iret=nf90_put_att(ncid,varid(8),'associates','time station')
4687 
4688  !U10
4689  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
4690  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
4691  iret=nf90_put_att(ncid,varid(9),'long_name','wind speed at 10m')
4692  iret=nf90_put_att(ncid,varid(9),'standard_name','wind_speed')
4693  iret=nf90_put_att(ncid,varid(9),'globwave_name','wind_speed')
4694  iret=nf90_put_att(ncid,varid(9),'units','m s-1')
4695  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4696  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4697  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4698  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
4699  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
4700  iret=nf90_put_att(ncid,varid(9),'content','TX')
4701  iret=nf90_put_att(ncid,varid(9),'associates','time station')
4702 
4703  !Ef / Efst
4704  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
4705  iret=nf90_def_var(ncid, 'ef', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(10))
4706  iret=nf90_put_att(ncid,varid(10),'long_name','surface elevation variance spectrum')
4707  iret=nf90_put_att(ncid,varid(10),'standard_name','sea_surface_wave_variance_spectral_density')
4708  iret=nf90_put_att(ncid,varid(10),'globwave_name','variance_spectral_density')
4709  iret=nf90_put_att(ncid,varid(10),'units','m2 s')
4710  ELSE
4711  iret=nf90_def_var(ncid, 'efst', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(10))
4712  iret=nf90_put_att(ncid,varid(10),'long_name', &
4713  'nondimensionalized using surface elevation variance spectrum')
4714  iret=nf90_put_att(ncid,varid(10),'standard_name','sea_surface_wave_variance_spectral_density')
4715  iret=nf90_put_att(ncid,varid(10),'globwave_name','variance_spectral_density')
4716  iret=nf90_put_att(ncid,varid(10),'units','-')
4717  END IF
4718  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
4719  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
4720  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
4721  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
4722  iret=nf90_put_att(ncid,varid(10),'valid_max',10.)
4723  iret=nf90_put_att(ncid,varid(10),'_FillValue', nf90_fill_float)
4724  iret=nf90_put_att(ncid,varid(10),'content','TXY')
4725  IF (iscale.EQ.0) THEN
4726  iret=nf90_put_att(ncid,varid(10),'associates','time station frequency')
4727  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4728  iret=nf90_put_att(ncid,varid(10),'associates','time station frequencyst')
4729  ELSE
4730  iret=nf90_put_att(ncid,varid(10),'associates','time station ffp')
4731  END IF
4732 
4733  !Sin / Sinst
4734  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
4735  iret=nf90_def_var(ncid, 'sin', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(11))
4736  iret=nf90_put_att(ncid,varid(11),'long_name','wind input source term')
4737  iret=nf90_put_att(ncid,varid(11),'standard_name','wind_input_source_term')
4738  iret=nf90_put_att(ncid,varid(11),'globwave_name','wind_input_source_term')
4739  iret=nf90_put_att(ncid,varid(11),'units','m2')
4740  ELSE
4741  iret=nf90_def_var(ncid, 'sinst', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(11))
4742  iret=nf90_put_att(ncid,varid(11),'long_name', &
4743  'nondimensionalized using wind input source term')
4744  iret=nf90_put_att(ncid,varid(11),'standard_name','wind_input_source_term')
4745  iret=nf90_put_att(ncid,varid(11),'globwave_name','wind_input_source_term')
4746  iret=nf90_put_att(ncid,varid(11),'units','-')
4747  END IF
4748  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
4749  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
4750  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
4751  iret=nf90_put_att(ncid,varid(11),'valid_min',-1.)
4752  iret=nf90_put_att(ncid,varid(11),'valid_max',1.)
4753  iret=nf90_put_att(ncid,varid(11),'_FillValue', nf90_fill_float)
4754  iret=nf90_put_att(ncid,varid(11),'content','TXY')
4755  IF (iscale.EQ.0) THEN
4756  iret=nf90_put_att(ncid,varid(11),'associates','time station frequency')
4757  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4758  iret=nf90_put_att(ncid,varid(11),'associates','time station frequencyst')
4759  ELSE
4760  iret=nf90_put_att(ncid,varid(11),'associates','time station ffp')
4761  END IF
4762 
4763  !Snl / Snlst
4764  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
4765  iret=nf90_def_var(ncid, 'snl', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(12))
4766  iret=nf90_put_att(ncid,varid(12),'long_name','nonlinear 4 wave source term')
4767  iret=nf90_put_att(ncid,varid(12),'standard_name','nonlinear_4_wave_source_term')
4768  iret=nf90_put_att(ncid,varid(12),'globwave_name','nonlinear_4_wave_source_term')
4769  iret=nf90_put_att(ncid,varid(12),'units','m2')
4770  ELSE
4771  iret=nf90_def_var(ncid, 'snlst', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(12))
4772  iret=nf90_put_att(ncid,varid(12),'long_name', &
4773  'nondimensionalized using nonlinear 4 wave source term')
4774  iret=nf90_put_att(ncid,varid(12),'standard_name','nonlinear_4_wave_source_term')
4775  iret=nf90_put_att(ncid,varid(12),'globwave_name','nonlinear_4_wave_source_term')
4776  iret=nf90_put_att(ncid,varid(12),'units','-')
4777  END IF
4778  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(12), 1, 1, deflate)
4779  iret=nf90_put_att(ncid,varid(12),'scale_factor',1.)
4780  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
4781  iret=nf90_put_att(ncid,varid(12),'valid_min',-1.)
4782  iret=nf90_put_att(ncid,varid(12),'valid_max',1.)
4783  iret=nf90_put_att(ncid,varid(12),'_FillValue', nf90_fill_float)
4784  iret=nf90_put_att(ncid,varid(12),'content','TXY')
4785  IF (iscale.EQ.0) THEN
4786  iret=nf90_put_att(ncid,varid(12),'associates','time station frequency')
4787  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4788  iret=nf90_put_att(ncid,varid(12),'associates','time station frequencyst')
4789  ELSE
4790  iret=nf90_put_att(ncid,varid(12),'associates','time station ffp')
4791  END IF
4792 
4793  !Sds / Sdsst
4794  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
4795  iret=nf90_def_var(ncid, 'sds', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(13))
4796  iret=nf90_put_att(ncid,varid(13),'long_name','wave breaking source term')
4797  iret=nf90_put_att(ncid,varid(13),'standard_name','wave_breaking_source_term')
4798  iret=nf90_put_att(ncid,varid(13),'globwave_name','wave_breaking_source_term')
4799  iret=nf90_put_att(ncid,varid(13),'units','m2')
4800  ELSE
4801  iret=nf90_def_var(ncid, 'sdsst', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(13))
4802  iret=nf90_put_att(ncid,varid(13),'long_name', &
4803  'nondimensionalized using wave breaking source term')
4804  iret=nf90_put_att(ncid,varid(13),'standard_name','wave_breaking_source_term')
4805  iret=nf90_put_att(ncid,varid(13),'globwave_name','wave_breaking_source_term')
4806  iret=nf90_put_att(ncid,varid(13),'units','-')
4807  END IF
4808  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(13), 1, 1, deflate)
4809  iret=nf90_put_att(ncid,varid(13),'scale_factor',1.)
4810  iret=nf90_put_att(ncid,varid(13),'add_offset',0.)
4811  iret=nf90_put_att(ncid,varid(13),'valid_min',-1.)
4812  iret=nf90_put_att(ncid,varid(13),'valid_max',1.)
4813  iret=nf90_put_att(ncid,varid(13),'_FillValue', nf90_fill_float)
4814  iret=nf90_put_att(ncid,varid(13),'content','TXY')
4815  IF (iscale.EQ.0) THEN
4816  iret=nf90_put_att(ncid,varid(13),'associates','time station frequency')
4817  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4818  iret=nf90_put_att(ncid,varid(13),'associates','time station frequencyst')
4819  ELSE
4820  iret=nf90_put_att(ncid,varid(13),'associates','time station ffp')
4821  END IF
4822 
4823  !Sbt / Sbtst
4824  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
4825  iret=nf90_def_var(ncid, 'sbt', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(14))
4826  iret=nf90_put_att(ncid,varid(14),'long_name','depth induced breaking source term')
4827  iret=nf90_put_att(ncid,varid(14),'standard_name','depth_induced_breaking_source_term')
4828  iret=nf90_put_att(ncid,varid(14),'globwave_name','depth_induced_breaking_source_term')
4829  iret=nf90_put_att(ncid,varid(14),'units','m2')
4830  ELSE
4831  iret=nf90_def_var(ncid, 'sbtst', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(14))
4832  iret=nf90_put_att(ncid,varid(14),'long_name', &
4833  'nondimensionalized using depth induced breaking source term')
4834  iret=nf90_put_att(ncid,varid(14),'standard_name','depth_induced_breaking_source_term')
4835  iret=nf90_put_att(ncid,varid(14),'globwave_name','depth_induced_breaking_source_term')
4836  iret=nf90_put_att(ncid,varid(14),'units','-')
4837  END IF
4838  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(14), 1, 1, deflate)
4839  iret=nf90_put_att(ncid,varid(14),'scale_factor',1.)
4840  iret=nf90_put_att(ncid,varid(14),'add_offset',0.)
4841  iret=nf90_put_att(ncid,varid(14),'valid_min',-1.)
4842  iret=nf90_put_att(ncid,varid(14),'valid_max',1.)
4843  iret=nf90_put_att(ncid,varid(14),'_FillValue', nf90_fill_float)
4844  iret=nf90_put_att(ncid,varid(14),'content','TXY')
4845  IF (iscale.EQ.0) THEN
4846  iret=nf90_put_att(ncid,varid(14),'associates','time station frequency')
4847  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4848  iret=nf90_put_att(ncid,varid(14),'associates','time station frequencyst')
4849  ELSE
4850  iret=nf90_put_att(ncid,varid(14),'associates','time station ffp')
4851  END IF
4852 
4853  !Sice / Sicest
4854  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
4855  iret=nf90_def_var(ncid, 'sice', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(15))
4856  iret=nf90_put_att(ncid,varid(15),'long_name','wave-ice interactions source term')
4857  iret=nf90_put_att(ncid,varid(15),'standard_name','wave_ice_interactions_source_term')
4858  iret=nf90_put_att(ncid,varid(15),'globwave_name','wave_ice_interactions_source_term')
4859  iret=nf90_put_att(ncid,varid(15),'units','m2')
4860  ELSE
4861  iret=nf90_def_var(ncid, 'sicest', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(15))
4862  iret=nf90_put_att(ncid,varid(15),'long_name','nondimensionalized using wave-ice interactions source term')
4863  iret=nf90_put_att(ncid,varid(15),'standard_name','wave_ice_interactions_source_term')
4864  iret=nf90_put_att(ncid,varid(15),'globwave_name','wave_ice_interactions_source_term')
4865  iret=nf90_put_att(ncid,varid(15),'units','-')
4866  END IF
4867  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(15), 1, 1, deflate)
4868  iret=nf90_put_att(ncid,varid(15),'scale_factor',1.)
4869  iret=nf90_put_att(ncid,varid(15),'add_offset',0.)
4870  iret=nf90_put_att(ncid,varid(15),'valid_min',-1.)
4871  iret=nf90_put_att(ncid,varid(15),'valid_max',1.)
4872  iret=nf90_put_att(ncid,varid(15),'_FillValue', nf90_fill_float)
4873  iret=nf90_put_att(ncid,varid(15),'content','TXY')
4874  IF (iscale.EQ.0) THEN
4875  iret=nf90_put_att(ncid,varid(15),'associates','time station frequency')
4876  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4877  iret=nf90_put_att(ncid,varid(15),'associates','time station frequencyst')
4878  ELSE
4879  iret=nf90_put_att(ncid,varid(15),'associates','time station ffp')
4880  END IF
4881 
4882  !Stot / Stotst
4883  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
4884  iret=nf90_def_var(ncid, 'stot', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(16))
4885  iret=nf90_put_att(ncid,varid(16),'long_name','total source term')
4886  iret=nf90_put_att(ncid,varid(16),'standard_name','total_source_term')
4887  iret=nf90_put_att(ncid,varid(16),'globwave_name','total_source_term')
4888  iret=nf90_put_att(ncid,varid(16),'units','m2')
4889  ELSE
4890  iret=nf90_def_var(ncid, 'stotst', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(16))
4891  iret=nf90_put_att(ncid,varid(16),'long_name','nondimensionalized using total source term')
4892  iret=nf90_put_att(ncid,varid(16),'standard_name','total_source_term')
4893  iret=nf90_put_att(ncid,varid(16),'globwave_name','total_source_term')
4894  iret=nf90_put_att(ncid,varid(16),'units','-')
4895  END IF
4896  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(16), 1, 1, deflate)
4897  iret=nf90_put_att(ncid,varid(16),'scale_factor',1.)
4898  iret=nf90_put_att(ncid,varid(16),'add_offset',0.)
4899  iret=nf90_put_att(ncid,varid(16),'valid_min',-1.)
4900  iret=nf90_put_att(ncid,varid(16),'valid_max',1.)
4901  iret=nf90_put_att(ncid,varid(16),'_FillValue', nf90_fill_float)
4902  iret=nf90_put_att(ncid,varid(16),'content','TXY')
4903  IF (iscale.EQ.0) THEN
4904  iret=nf90_put_att(ncid,varid(16),'associates','time station frequency')
4905  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4906  iret=nf90_put_att(ncid,varid(16),'associates','time station frequencyst')
4907  ELSE
4908  iret=nf90_put_att(ncid,varid(16),'associates','time station ffp')
4909  END IF
4910 
4911  ! Add values in netCDF file
4912  iret=nf90_enddef(ncid)
4913  CALL check_err(iret,62)
4914  iret=nf90_put_var(ncid,varid(6),freq(1:nk))
4915  CALL check_err(iret,63)
4916 
4917 
4918  !
4919  ! ... ITYPE = 3 AND OTYPE = 3
4920  !
4921  ELSE IF (itype.EQ.3 .AND. otype.EQ.3) THEN
4922  !
4923  ! Define specifics dimensions
4924  !
4925  iret = nf90_def_dim(ncid, 'frequency', dimln(4), dimid(4))
4926  CALL check_err(iret,64)
4927 
4928  !
4929  ! define specifics variables
4930  !
4931 
4932  ! frequency / frequencyst / ffp
4933  IF (iscale.EQ.0) THEN
4934  iret=nf90_def_var(ncid, 'frequency', nf90_float, dimid(4), varid(6))
4935  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
4936  iret=nf90_def_var(ncid, 'frequencyst', nf90_float, dimid(4), varid(6))
4937  ELSE
4938  iret=nf90_def_var(ncid, 'ffp', nf90_float, dimid(4), varid(6))
4939  END IF
4940  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
4941  iret=nf90_put_att(ncid,varid(6),'long_name','frequency of center band')
4942  iret=nf90_put_att(ncid,varid(6),'standard_name','sea_surface_wave_frequency')
4943  iret=nf90_put_att(ncid,varid(6),'globwave_name','frequency')
4944  iret=nf90_put_att(ncid,varid(6),'units','s-1')
4945  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
4946  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
4947  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
4948  iret=nf90_put_att(ncid,varid(6),'valid_max',10.)
4949  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
4950  iret=nf90_put_att(ncid,varid(6),'axis','Y')
4951 
4952  !d
4953  iret=nf90_def_var(ncid, 'dpt', nf90_float, (/ dimid(two),dimid(one) /), varid(7))
4954  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
4955  iret=nf90_put_att(ncid,varid(7),'long_name','depth')
4956  iret=nf90_put_att(ncid,varid(7),'standard_name','depth')
4957  iret=nf90_put_att(ncid,varid(7),'globwave_name','depth')
4958  iret=nf90_put_att(ncid,varid(7),'units','m')
4959  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
4960  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
4961  iret=nf90_put_att(ncid,varid(7),'valid_min',-100.)
4962  iret=nf90_put_att(ncid,varid(7),'valid_max',10000.)
4963  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
4964  iret=nf90_put_att(ncid,varid(7),'content','TX')
4965  iret=nf90_put_att(ncid,varid(7),'associates','time station')
4966 
4967  !Ust
4968  iret=nf90_def_var(ncid, 'ust', nf90_float, (/ dimid(two),dimid(one) /), varid(8))
4969  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
4970  iret=nf90_put_att(ncid,varid(8),'long_name','friction velocity')
4971  iret=nf90_put_att(ncid,varid(8),'standard_name','friction_velocity')
4972  iret=nf90_put_att(ncid,varid(8),'globwave_name','friction_velocity')
4973  iret=nf90_put_att(ncid,varid(8),'units','m s-1')
4974  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
4975  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
4976  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
4977  iret=nf90_put_att(ncid,varid(8),'valid_max',100.)
4978  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
4979  iret=nf90_put_att(ncid,varid(8),'content','TX')
4980  iret=nf90_put_att(ncid,varid(8),'associates','time station')
4981 
4982  !U10
4983  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(9))
4984  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
4985  iret=nf90_put_att(ncid,varid(9),'long_name','wind speed at 10m')
4986  iret=nf90_put_att(ncid,varid(9),'standard_name','wind_speed')
4987  iret=nf90_put_att(ncid,varid(9),'globwave_name','wind_speed')
4988  iret=nf90_put_att(ncid,varid(9),'units','m s-1')
4989  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
4990  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
4991  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
4992  iret=nf90_put_att(ncid,varid(9),'valid_max',100.)
4993  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
4994  iret=nf90_put_att(ncid,varid(9),'content','TX')
4995  iret=nf90_put_att(ncid,varid(9),'associates','time station')
4996 
4997  !Ef / Efst
4998  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
4999  iret=nf90_def_var(ncid, 'ef', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(10))
5000  iret=nf90_put_att(ncid,varid(10),'long_name','surface elevation variance spectrum')
5001  iret=nf90_put_att(ncid,varid(10),'standard_name','sea_surface_wave_variance_spectral_density')
5002  iret=nf90_put_att(ncid,varid(10),'globwave_name','variance_spectral_density')
5003  iret=nf90_put_att(ncid,varid(10),'units','m2 s')
5004  ELSE
5005  iret=nf90_def_var(ncid, 'efst', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(10))
5006  iret=nf90_put_att(ncid,varid(10),'long_name', &
5007  'nondimensionalized using surface elevation variance spectrum')
5008  iret=nf90_put_att(ncid,varid(10),'standard_name','sea_surface_wave_variance_spectral_density')
5009  iret=nf90_put_att(ncid,varid(10),'globwave_name','variance_spectral_density')
5010  iret=nf90_put_att(ncid,varid(10),'units','-')
5011  END IF
5012  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
5013  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
5014  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
5015  iret=nf90_put_att(ncid,varid(10),'valid_min',0.)
5016  iret=nf90_put_att(ncid,varid(10),'valid_max',10.)
5017  iret=nf90_put_att(ncid,varid(10),'_FillValue', nf90_fill_float)
5018  iret=nf90_put_att(ncid,varid(10),'content','TXY')
5019  IF (iscale.EQ.0) THEN
5020  iret=nf90_put_att(ncid,varid(10),'associates','time station frequency')
5021  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
5022  iret=nf90_put_att(ncid,varid(10),'associates','time station frequencyst')
5023  ELSE
5024  iret=nf90_put_att(ncid,varid(10),'associates','time station ffp')
5025  END IF
5026 
5027  !Tini / Tinist
5028  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
5029  iret=nf90_def_var(ncid, 'tini', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(11))
5030  iret=nf90_put_att(ncid,varid(11),'long_name','wind input source term normalised by Ef')
5031  iret=nf90_put_att(ncid,varid(11),'standard_name','inverse_time_scales_wind_input_source_term')
5032  iret=nf90_put_att(ncid,varid(11),'globwave_name','inverse_time_scales_wind_input_source_term')
5033  iret=nf90_put_att(ncid,varid(11),'units','m2')
5034  ELSE
5035  iret=nf90_def_var(ncid, 'tinist', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(11))
5036  iret=nf90_put_att(ncid,varid(11),'long_name','nondimensionalized using wind input source term normalised by Ef')
5037  iret=nf90_put_att(ncid,varid(11),'standard_name','inverse_time_scales_wind_input_source_term')
5038  iret=nf90_put_att(ncid,varid(11),'globwave_name','inverse_time_scales_wind_input_source_term')
5039  iret=nf90_put_att(ncid,varid(11),'units','-')
5040  END IF
5041  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
5042  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
5043  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
5044  iret=nf90_put_att(ncid,varid(11),'valid_min',-1.)
5045  iret=nf90_put_att(ncid,varid(11),'valid_max',1.)
5046  iret=nf90_put_att(ncid,varid(11),'_FillValue', nf90_fill_float)
5047  iret=nf90_put_att(ncid,varid(11),'content','TXY')
5048  IF (iscale.EQ.0) THEN
5049  iret=nf90_put_att(ncid,varid(11),'associates','time station frequency')
5050  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
5051  iret=nf90_put_att(ncid,varid(11),'associates','time station frequencyst')
5052  ELSE
5053  iret=nf90_put_att(ncid,varid(11),'associates','time station ffp')
5054  END IF
5055 
5056 
5057  !Tnli / Tnlist
5058  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
5059  iret=nf90_def_var(ncid, 'tnli', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(12))
5060  iret=nf90_put_att(ncid,varid(12),'long_name','nonlinear 4 wave source term normalised by Ef')
5061  iret=nf90_put_att(ncid,varid(12),'standard_name','inverse_time_scales_nonlinear_4_wave_source_term')
5062  iret=nf90_put_att(ncid,varid(12),'globwave_name','inverse_time_scales_nonlinear_4_wave_source_term')
5063  iret=nf90_put_att(ncid,varid(12),'units','m2')
5064  ELSE
5065  iret=nf90_def_var(ncid, 'tnlist', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(12))
5066  iret=nf90_put_att(ncid,varid(12),'long_name','nondimensionalized using nonlinear 4 wave source term normalised by Ef')
5067  iret=nf90_put_att(ncid,varid(12),'standard_name','inverse_time_scales_nonlinear_4_wave_source_term')
5068  iret=nf90_put_att(ncid,varid(12),'globwave_name','inverse_time_scales_nonlinear_4_wave_source_term')
5069  iret=nf90_put_att(ncid,varid(12),'units','-')
5070  END IF
5071  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(12), 1, 1, deflate)
5072  iret=nf90_put_att(ncid,varid(12),'scale_factor',1.)
5073  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
5074  iret=nf90_put_att(ncid,varid(12),'valid_min',-1.)
5075  iret=nf90_put_att(ncid,varid(12),'valid_max',1.)
5076  iret=nf90_put_att(ncid,varid(12),'_FillValue', nf90_fill_float)
5077  iret=nf90_put_att(ncid,varid(12),'content','TXY')
5078  IF (iscale.EQ.0) THEN
5079  iret=nf90_put_att(ncid,varid(12),'associates','time station frequency')
5080  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
5081  iret=nf90_put_att(ncid,varid(12),'associates','time station frequencyst')
5082  ELSE
5083  iret=nf90_put_att(ncid,varid(12),'associates','time station ffp')
5084  END IF
5085 
5086 
5087  !Tdsi / Tdsist
5088  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
5089  iret=nf90_def_var(ncid, 'tdsi', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(13))
5090  iret=nf90_put_att(ncid,varid(13),'long_name','wave breaking source term normalised by Ef')
5091  iret=nf90_put_att(ncid,varid(13),'standard_name','inverse_time_scales_wave_breaking_source_term')
5092  iret=nf90_put_att(ncid,varid(13),'globwave_name','inverse_time_scales_wave_breaking_source_term')
5093  iret=nf90_put_att(ncid,varid(13),'units','m2')
5094  ELSE
5095  iret=nf90_def_var(ncid, 'tdsist', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(13))
5096  iret=nf90_put_att(ncid,varid(13),'long_name','nondimensionalized using wave breaking source term normalised by Ef')
5097  iret=nf90_put_att(ncid,varid(13),'standard_name','inverse_time_scales_wave_breaking_source_term')
5098  iret=nf90_put_att(ncid,varid(13),'globwave_name','inverse_time_scales_wave_breaking_source_term')
5099  iret=nf90_put_att(ncid,varid(13),'units','-')
5100  END IF
5101  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(13), 1, 1, deflate)
5102  iret=nf90_put_att(ncid,varid(13),'scale_factor',1.)
5103  iret=nf90_put_att(ncid,varid(13),'add_offset',0.)
5104  iret=nf90_put_att(ncid,varid(13),'valid_min',-1.)
5105  iret=nf90_put_att(ncid,varid(13),'valid_max',1.)
5106  iret=nf90_put_att(ncid,varid(13),'_FillValue', nf90_fill_float)
5107  iret=nf90_put_att(ncid,varid(13),'content','TXY')
5108  IF (iscale.EQ.0) THEN
5109  iret=nf90_put_att(ncid,varid(13),'associates','time station frequency')
5110  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
5111  iret=nf90_put_att(ncid,varid(13),'associates','time station frequencyst')
5112  ELSE
5113  iret=nf90_put_att(ncid,varid(13),'associates','time station ffp')
5114  END IF
5115 
5116  !Tbti / Tbtist
5117  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
5118  iret=nf90_def_var(ncid, 'tbti', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(14))
5119  iret=nf90_put_att(ncid,varid(14),'long_name','depth induced breaking source term normalised by Ef')
5120  iret=nf90_put_att(ncid,varid(14),'standard_name','inverse_time_scales_depth_induced_breaking_source_term')
5121  iret=nf90_put_att(ncid,varid(14),'globwave_name','inverse_time_scales_depth_induced_breaking_source_term')
5122  iret=nf90_put_att(ncid,varid(14),'units','m2')
5123  ELSE
5124  iret=nf90_def_var(ncid, 'tbtist', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(14))
5125  iret=nf90_put_att(ncid,varid(14),'long_name','nondimensionalized using depth induced breaking source term &
5126  normalised by Ef')
5127  iret=nf90_put_att(ncid,varid(14),'standard_name','inverse_time_scales_depth_induced_breaking_source_term')
5128  iret=nf90_put_att(ncid,varid(14),'globwave_name','inverse_time_scales_depth_induced_breaking_source_term')
5129  iret=nf90_put_att(ncid,varid(14),'units','-')
5130  END IF
5131  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(14), 1, 1, deflate)
5132  iret=nf90_put_att(ncid,varid(14),'scale_factor',1.)
5133  iret=nf90_put_att(ncid,varid(14),'add_offset',0.)
5134  iret=nf90_put_att(ncid,varid(14),'valid_min',-1.)
5135  iret=nf90_put_att(ncid,varid(14),'valid_max',1.)
5136  iret=nf90_put_att(ncid,varid(14),'_FillValue', nf90_fill_float)
5137  iret=nf90_put_att(ncid,varid(14),'content','TXY')
5138  IF (iscale.EQ.0) THEN
5139  iret=nf90_put_att(ncid,varid(14),'associates','time station frequency')
5140  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
5141  iret=nf90_put_att(ncid,varid(14),'associates','time station frequencyst')
5142  ELSE
5143  iret=nf90_put_att(ncid,varid(14),'associates','time station ffp')
5144  END IF
5145 
5146  !Ticei / Ticeist
5147  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
5148  iret=nf90_def_var(ncid, 'ticei', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(15))
5149  iret=nf90_put_att(ncid,varid(15),'long_name','wave ice interactions source term normalised by Ef')
5150  iret=nf90_put_att(ncid,varid(15),'standard_name','inverse_time_scales_wave_ice_interactions_source_term')
5151  iret=nf90_put_att(ncid,varid(15),'globwave_name','inverse_time_scales_wave_ice_interactions_source_term')
5152  iret=nf90_put_att(ncid,varid(15),'units','m2')
5153  ELSE
5154  iret=nf90_def_var(ncid, 'ticeist', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(15))
5155  iret=nf90_put_att(ncid,varid(15),'long_name','nondimensionalized using wave ice interactions source term &
5156  normalised by Ef')
5157  iret=nf90_put_att(ncid,varid(15),'standard_name','inverse_time_scales_wave_ice_interactions_source_term')
5158  iret=nf90_put_att(ncid,varid(15),'globwave_name','inverse_time_scales_wave_ice_interactions_source_term')
5159  iret=nf90_put_att(ncid,varid(15),'units','-')
5160  END IF
5161  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(15), 1, 1, deflate)
5162  iret=nf90_put_att(ncid,varid(15),'scale_factor',1.)
5163  iret=nf90_put_att(ncid,varid(15),'add_offset',0.)
5164  iret=nf90_put_att(ncid,varid(15),'valid_min',-1.)
5165  iret=nf90_put_att(ncid,varid(15),'valid_max',1.)
5166  iret=nf90_put_att(ncid,varid(15),'_FillValue', nf90_fill_float)
5167  iret=nf90_put_att(ncid,varid(15),'content','TXY')
5168  IF (iscale.EQ.0) THEN
5169  iret=nf90_put_att(ncid,varid(15),'associates','time station frequency')
5170  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
5171  iret=nf90_put_att(ncid,varid(15),'associates','time station frequencyst')
5172  ELSE
5173  iret=nf90_put_att(ncid,varid(15),'associates','time station ffp')
5174  END IF
5175 
5176  !Ttoti / Ttotist
5177  IF (iscale.EQ.0 .OR. iscale.EQ.3) THEN
5178  iret=nf90_def_var(ncid, 'ttoti', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(16))
5179  iret=nf90_put_att(ncid,varid(16),'long_name','total source term normalised by Ef')
5180  iret=nf90_put_att(ncid,varid(16),'standard_name','inverse_time_scales_total_source_term')
5181  iret=nf90_put_att(ncid,varid(16),'globwave_name','inverse_time_scales_total_source_term')
5182  iret=nf90_put_att(ncid,varid(16),'units','m2')
5183  ELSE
5184  iret=nf90_def_var(ncid, 'ttotist', nf90_float,(/dimid(4),dimid(two),dimid(one)/), varid(16))
5185  iret=nf90_put_att(ncid,varid(16),'long_name','nondimensionalized using total source term normalised by Ef')
5186  iret=nf90_put_att(ncid,varid(16),'standard_name','inverse_time_scales_total_source_term')
5187  iret=nf90_put_att(ncid,varid(16),'globwave_name','inverse_time_scales_total_source_term')
5188  iret=nf90_put_att(ncid,varid(16),'units','-')
5189  END IF
5190  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(16), 1, 1, deflate)
5191  iret=nf90_put_att(ncid,varid(16),'scale_factor',1.)
5192  iret=nf90_put_att(ncid,varid(16),'add_offset',0.)
5193  iret=nf90_put_att(ncid,varid(16),'valid_min',-1.)
5194  iret=nf90_put_att(ncid,varid(16),'valid_max',1.)
5195  iret=nf90_put_att(ncid,varid(16),'_FillValue', nf90_fill_float)
5196  iret=nf90_put_att(ncid,varid(16),'content','TXY')
5197  IF (iscale.EQ.0) THEN
5198  iret=nf90_put_att(ncid,varid(16),'associates','time station frequency')
5199  ELSE IF ( iscale.EQ.1 .OR. iscale.EQ.2 ) THEN
5200  iret=nf90_put_att(ncid,varid(16),'associates','time station frequencyst')
5201  ELSE
5202  iret=nf90_put_att(ncid,varid(16),'associates','time station ffp')
5203  END IF
5204 
5205  ! Add values in netCDF file
5206  iret=nf90_enddef(ncid)
5207  CALL check_err(iret,65)
5208  iret=nf90_put_var(ncid,varid(6),freq(1:nk))
5209  CALL check_err(iret,66)
5210 
5211 
5212  !
5213  ! ... ITYPE = 3 AND OTYPE = 4
5214  !
5215  ELSE IF (itype.EQ.3 .AND. otype.EQ.4) THEN
5216  !
5217  ! Define specifics dimensions
5218  !
5219  iret = nf90_def_dim(ncid, 'frequency', dimln(4), dimid(4))
5220  iret = nf90_def_dim(ncid, 'direction', dimln(5), dimid(5))
5221  CALL check_err(iret,67)
5222 
5223  !
5224  ! define specifics variables
5225  !
5226 
5227  !frequency
5228  iret=nf90_def_var(ncid, 'frequency', nf90_float, (/dimid(4)/), varid(6))
5229  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(6), 1, 1, deflate)
5230  iret=nf90_put_att(ncid,varid(6),'long_name','frequency of center band')
5231  iret=nf90_put_att(ncid,varid(6),'standard_name','sea_surface_wave_frequency')
5232  iret=nf90_put_att(ncid,varid(6),'globwave_name','frequency')
5233  iret=nf90_put_att(ncid,varid(6),'units','s-1')
5234  iret=nf90_put_att(ncid,varid(6),'scale_factor',1.)
5235  iret=nf90_put_att(ncid,varid(6),'add_offset',0.)
5236  iret=nf90_put_att(ncid,varid(6),'valid_min',0.)
5237  iret=nf90_put_att(ncid,varid(6),'valid_max',10.)
5238  iret=nf90_put_att(ncid,varid(6),'_FillValue',nf90_fill_float)
5239  iret=nf90_put_att(ncid,varid(6),'axis','Y')
5240 
5241  !frequency1
5242  iret=nf90_def_var(ncid, 'frequency1', nf90_float, (/dimid(4)/), varid(7))
5243  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(7), 1, 1, deflate)
5244  iret=nf90_put_att(ncid,varid(7),'long_name','frequency of lower band')
5245  iret=nf90_put_att(ncid,varid(7),'standard_name','frequency_of_lower_band')
5246  iret=nf90_put_att(ncid,varid(7),'globwave_name','frequency_lower_band')
5247  iret=nf90_put_att(ncid,varid(7),'units','s-1')
5248  iret=nf90_put_att(ncid,varid(7),'scale_factor',1.)
5249  iret=nf90_put_att(ncid,varid(7),'add_offset',0.)
5250  iret=nf90_put_att(ncid,varid(7),'valid_min',0.)
5251  iret=nf90_put_att(ncid,varid(7),'valid_max',10.)
5252  iret=nf90_put_att(ncid,varid(7),'_FillValue',nf90_fill_float)
5253  iret=nf90_put_att(ncid,varid(7),'content','Y')
5254  iret=nf90_put_att(ncid,varid(7),'associates','frequency')
5255 
5256  !frequency2
5257  iret=nf90_def_var(ncid, 'frequency2', nf90_float, (/dimid(4)/), varid(8))
5258  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(8), 1, 1, deflate)
5259  iret=nf90_put_att(ncid,varid(8),'long_name','frequency of upper band')
5260  iret=nf90_put_att(ncid,varid(8),'standard_name','frequency_of_upper_band')
5261  iret=nf90_put_att(ncid,varid(8),'globwave_name','frequency_upper_band')
5262  iret=nf90_put_att(ncid,varid(8),'units','s-1')
5263  iret=nf90_put_att(ncid,varid(8),'scale_factor',1.)
5264  iret=nf90_put_att(ncid,varid(8),'add_offset',0.)
5265  iret=nf90_put_att(ncid,varid(8),'valid_min',0.)
5266  iret=nf90_put_att(ncid,varid(8),'valid_max',10.)
5267  iret=nf90_put_att(ncid,varid(8),'_FillValue',nf90_fill_float)
5268  iret=nf90_put_att(ncid,varid(8),'content','Y')
5269  iret=nf90_put_att(ncid,varid(8),'associates','frequency')
5270 
5271 
5272  !direction
5273  iret=nf90_def_var(ncid, 'direction', nf90_float, (/dimid(5)/), varid(9))
5274  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(9), 1, 1, deflate)
5275  iret=nf90_put_att(ncid,varid(9),'long_name','sea surface wave to direction')
5276  iret=nf90_put_att(ncid,varid(9),'standard_name','sea_surface_wave_to_direction')
5277  iret=nf90_put_att(ncid,varid(9),'globwave_name','direction')
5278  iret=nf90_put_att(ncid,varid(9),'units','degree')
5279  iret=nf90_put_att(ncid,varid(9),'scale_factor',1.)
5280  iret=nf90_put_att(ncid,varid(9),'add_offset',0.)
5281  iret=nf90_put_att(ncid,varid(9),'valid_min',0.)
5282  iret=nf90_put_att(ncid,varid(9),'valid_max',360.)
5283  iret=nf90_put_att(ncid,varid(9),'_FillValue',nf90_fill_float)
5284  iret=nf90_put_att(ncid,varid(9),'axis','Z')
5285 #ifdef W3_RTD
5286  IF ( flagunr ) THEN
5287  iret=nf90_put_att(ncid,varid(9),'direction_reference','True North')
5288  ELSE
5289  iret=nf90_put_att(ncid,varid(9),'direction_reference','Rotated Pole Grid North')
5290  END IF
5291 #endif
5292 
5293  !d
5294  iret=nf90_def_var(ncid, 'dpt', nf90_float, (/ dimid(two),dimid(one) /), varid(10))
5295  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(10), 1, 1, deflate)
5296  iret=nf90_put_att(ncid,varid(10),'long_name','depth')
5297  iret=nf90_put_att(ncid,varid(10),'standard_name','depth')
5298  iret=nf90_put_att(ncid,varid(10),'globwave_name','depth')
5299  iret=nf90_put_att(ncid,varid(10),'units','m')
5300  iret=nf90_put_att(ncid,varid(10),'scale_factor',1.)
5301  iret=nf90_put_att(ncid,varid(10),'add_offset',0.)
5302  iret=nf90_put_att(ncid,varid(10),'valid_min',-100.)
5303  iret=nf90_put_att(ncid,varid(10),'valid_max',10000.)
5304  iret=nf90_put_att(ncid,varid(10),'_FillValue',nf90_fill_float)
5305  iret=nf90_put_att(ncid,varid(10),'content','TX')
5306  iret=nf90_put_att(ncid,varid(10),'associates','time station')
5307 
5308  !U10
5309  iret=nf90_def_var(ncid, 'wnd', nf90_float, (/ dimid(two),dimid(one) /), varid(11))
5310  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(11), 1, 1, deflate)
5311  iret=nf90_put_att(ncid,varid(11),'long_name','wind speed at 10m')
5312  iret=nf90_put_att(ncid,varid(11),'standard_name','wind_speed')
5313  iret=nf90_put_att(ncid,varid(11),'globwave_name','wind_speed')
5314  iret=nf90_put_att(ncid,varid(11),'units','m s-1')
5315  iret=nf90_put_att(ncid,varid(11),'scale_factor',1.)
5316  iret=nf90_put_att(ncid,varid(11),'add_offset',0.)
5317  iret=nf90_put_att(ncid,varid(11),'valid_min',0.)
5318  iret=nf90_put_att(ncid,varid(11),'valid_max',100.)
5319  iret=nf90_put_att(ncid,varid(11),'_FillValue',nf90_fill_float)
5320  iret=nf90_put_att(ncid,varid(11),'content','TX')
5321  iret=nf90_put_att(ncid,varid(11),'associates','time station')
5322  !Dir
5323  iret=nf90_def_var(ncid, 'wnddir', nf90_float, (/ dimid(two),dimid(one) /), varid(12))
5324  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(12), 1, 1, deflate)
5325  iret=nf90_put_att(ncid,varid(12),'long_name','wind direction')
5326  iret=nf90_put_att(ncid,varid(12),'standard_name','wind_from_direction')
5327  iret=nf90_put_att(ncid,varid(12),'standard_name','wind_from_direction')
5328  iret=nf90_put_att(ncid,varid(12),'units','degree')
5329  iret=nf90_put_att(ncid,varid(12),'scale_factor',1.)
5330  iret=nf90_put_att(ncid,varid(12),'add_offset',0.)
5331  iret=nf90_put_att(ncid,varid(12),'valid_min',0.)
5332  iret=nf90_put_att(ncid,varid(12),'valid_max',360.)
5333  iret=nf90_put_att(ncid,varid(12),'_FillValue',nf90_fill_float)
5334  iret=nf90_put_att(ncid,varid(12),'content','TX')
5335  iret=nf90_put_att(ncid,varid(12),'associates','time station')
5336 #ifdef W3_RTD
5337  IF ( flagunr ) THEN
5338  iret=nf90_put_att(ncid,varid(12),'direction_reference','True North')
5339  ELSE
5340  iret=nf90_put_att(ncid,varid(12),'direction_reference','Rotated Pole Grid North')
5341  END IF
5342 #endif
5343 
5344  !Uc
5345  iret=nf90_def_var(ncid, 'cur', nf90_float, (/ dimid(two),dimid(one) /), varid(13))
5346  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(13), 1, 1, deflate)
5347  iret=nf90_put_att(ncid,varid(13),'long_name','sea water speed')
5348  iret=nf90_put_att(ncid,varid(13),'standard_name','sea_water_speed')
5349  iret=nf90_put_att(ncid,varid(13),'globwave_name','sea_water_speed')
5350  iret=nf90_put_att(ncid,varid(13),'units','m s-1')
5351  iret=nf90_put_att(ncid,varid(13),'scale_factor',1.)
5352  iret=nf90_put_att(ncid,varid(13),'add_offset',0.)
5353  iret=nf90_put_att(ncid,varid(13),'valid_min',0.)
5354  iret=nf90_put_att(ncid,varid(13),'valid_max',100.)
5355  iret=nf90_put_att(ncid,varid(13),'_FillValue',nf90_fill_float)
5356  iret=nf90_put_att(ncid,varid(13),'content','TX')
5357  iret=nf90_put_att(ncid,varid(13),'associates','time station')
5358 
5359  !Dir
5360  iret=nf90_def_var(ncid, 'curdir', nf90_float, (/ dimid(two),dimid(one) /), varid(14))
5361  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(14), 1, 1, deflate)
5362  iret=nf90_put_att(ncid,varid(14),'long_name','direction from of sea water velocity')
5363  iret=nf90_put_att(ncid,varid(14),'standard_name','direction_of_sea_water_velocity')
5364  iret=nf90_put_att(ncid,varid(14),'globwave_name','direction_of_sea_water_velocity')
5365  iret=nf90_put_att(ncid,varid(14),'units','degree')
5366  iret=nf90_put_att(ncid,varid(14),'scale_factor',1.)
5367  iret=nf90_put_att(ncid,varid(14),'add_offset',0.)
5368  iret=nf90_put_att(ncid,varid(14),'valid_min',0.)
5369  iret=nf90_put_att(ncid,varid(14),'valid_max',360.)
5370  iret=nf90_put_att(ncid,varid(14),'_FillValue',nf90_fill_float)
5371  iret=nf90_put_att(ncid,varid(14),'content','TX')
5372  iret=nf90_put_att(ncid,varid(14),'associates','time station')
5373 #ifdef W3_RTD
5374  IF ( flagunr ) THEN
5375  iret=nf90_put_att(ncid,varid(14),'direction_reference','True North')
5376  ELSE
5377  iret=nf90_put_att(ncid,varid(14),'direction_reference','Rotated Pole Grid North')
5378  END IF
5379 #endif
5380 
5381  !Ust
5382  iret=nf90_def_var(ncid, 'ust', nf90_float, (/ dimid(two),dimid(one) /), varid(15))
5383  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(15), 1, 1, deflate)
5384  iret=nf90_put_att(ncid,varid(15),'long_name','friction velocity')
5385  iret=nf90_put_att(ncid,varid(15),'standard_name','friction_velocity')
5386  iret=nf90_put_att(ncid,varid(15),'globwave_name','friction_velocity')
5387  iret=nf90_put_att(ncid,varid(15),'units','m s-1')
5388  iret=nf90_put_att(ncid,varid(15),'scale_factor',1.)
5389  iret=nf90_put_att(ncid,varid(15),'add_offset',0.)
5390  iret=nf90_put_att(ncid,varid(15),'valid_min',0.)
5391  iret=nf90_put_att(ncid,varid(15),'valid_max',100.)
5392  iret=nf90_put_att(ncid,varid(15),'_FillValue',nf90_fill_float)
5393  iret=nf90_put_att(ncid,varid(15),'content','TX')
5394  iret=nf90_put_att(ncid,varid(15),'associates','time station')
5395 
5396  !Efth
5397  IF ( PRESENT(flsrce) ) THEN
5398  IF ( flsrce(1) ) THEN
5399  iret=nf90_def_var(ncid,'efth',nf90_float,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(16))
5400  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(16), 1, 1, deflate)
5401  iret=nf90_put_att(ncid,varid(16),'long_name',&
5402  'sea surface wave directional variance spectral density')
5403  iret=nf90_put_att(ncid,varid(16),'standard_name',&
5404  'sea_surface_wave_directional_variance_spectral_density')
5405  iret=nf90_put_att(ncid,varid(16),'globwave_name','directional_variance_spectral_density')
5406  iret=nf90_put_att(ncid,varid(16),'units','m2 s rad-1')
5407  iret=nf90_put_att(ncid,varid(16),'scale_factor',1.)
5408  iret=nf90_put_att(ncid,varid(16),'add_offset',0.)
5409  iret=nf90_put_att(ncid,varid(16),'valid_min',0.)
5410  iret=nf90_put_att(ncid,varid(16),'valid_max',1.e20)
5411  iret=nf90_put_att(ncid,varid(16),'_FillValue',nf90_fill_float)
5412  iret=nf90_put_att(ncid,varid(16),'content','TXYZ')
5413  iret=nf90_put_att(ncid,varid(16),'associates','time station frequency direction')
5414 #ifdef W3_RTD
5415  IF ( flagunr ) THEN
5416  iret=nf90_put_att(ncid,varid(16),'direction_reference','True North')
5417  ELSE
5418  iret=nf90_put_att(ncid,varid(16),'direction_reference','Rotated Pole Grid North')
5419  END IF
5420 #endif
5421  ENDIF
5422 
5423  !Swn
5424  IF ( flsrce(2) ) THEN
5425  iret=nf90_def_var(ncid,'sin',nf90_float,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(17))
5426  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(17), 1, 1, deflate)
5427  iret=nf90_put_att(ncid,varid(17),'long_name','wind input source term')
5428  iret=nf90_put_att(ncid,varid(17),'standard_name','wind_input_source_term')
5429  iret=nf90_put_att(ncid,varid(17),'globwave_name','wind_input_source_term')
5430  iret=nf90_put_att(ncid,varid(17),'units','m2 rad-1')
5431  iret=nf90_put_att(ncid,varid(17),'scale_factor',1.)
5432  iret=nf90_put_att(ncid,varid(17),'add_offset',0.)
5433  iret=nf90_put_att(ncid,varid(17),'valid_min',-1.)
5434  iret=nf90_put_att(ncid,varid(17),'valid_max',1.)
5435  iret=nf90_put_att(ncid,varid(17),'_FillValue',nf90_fill_float)
5436  iret=nf90_put_att(ncid,varid(17),'content','TXYZ')
5437  iret=nf90_put_att(ncid,varid(17),'associates','time station frequency direction')
5438 #ifdef W3_RTD
5439  iret=nf90_put_att(ncid,varid(17),'direction_reference','Rotated Pole Grid North')
5440 #endif
5441  ENDIF
5442 
5443  !Snl
5444  IF ( flsrce(3) ) THEN
5445  iret=nf90_def_var(ncid,'snl',nf90_float,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(18))
5446  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(18), 1, 1, deflate)
5447  iret=nf90_put_att(ncid,varid(18),'long_name','nonlinear 4 wave source term')
5448  iret=nf90_put_att(ncid,varid(18),'standard_name','nonlinear_4_wave_source_term')
5449  iret=nf90_put_att(ncid,varid(18),'globwave_name','nonlinear_4_wave_source_term')
5450  iret=nf90_put_att(ncid,varid(18),'units','m2 rad-1')
5451  iret=nf90_put_att(ncid,varid(18),'scale_factor',1.)
5452  iret=nf90_put_att(ncid,varid(18),'add_offset',0.)
5453  iret=nf90_put_att(ncid,varid(18),'valid_min',-1.)
5454  iret=nf90_put_att(ncid,varid(18),'valid_max',1.)
5455  iret=nf90_put_att(ncid,varid(18),'_FillValue',nf90_fill_float)
5456  iret=nf90_put_att(ncid,varid(18),'content','TXYZ')
5457  iret=nf90_put_att(ncid,varid(18),'associates','time station frequency direction')
5458 #ifdef W3_RTD
5459  iret=nf90_put_att(ncid,varid(18),'direction_reference','Rotated Pole Grid North')
5460 #endif
5461  ENDIF
5462 
5463  !Sds
5464  IF ( flsrce(4) ) THEN
5465  iret=nf90_def_var(ncid,'sds',nf90_float,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(19))
5466  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(19), 1, 1, deflate)
5467  iret=nf90_put_att(ncid,varid(19),'long_name','wave breaking source term')
5468  iret=nf90_put_att(ncid,varid(19),'standard_name','wave_breaking_source_term')
5469  iret=nf90_put_att(ncid,varid(19),'globwave_name','wave_breaking_source_term')
5470  iret=nf90_put_att(ncid,varid(19),'units','m2 rad-1')
5471  iret=nf90_put_att(ncid,varid(19),'scale_factor',1.)
5472  iret=nf90_put_att(ncid,varid(19),'add_offset',0.)
5473  iret=nf90_put_att(ncid,varid(19),'valid_min',-1.)
5474  iret=nf90_put_att(ncid,varid(19),'valid_max',1.)
5475  iret=nf90_put_att(ncid,varid(19),'_FillValue',nf90_fill_float)
5476  iret=nf90_put_att(ncid,varid(19),'content','TXYZ')
5477  iret=nf90_put_att(ncid,varid(19),'associates','time station frequency direction')
5478 #ifdef W3_RTD
5479  iret=nf90_put_att(ncid,varid(19),'direction_reference','Rotated Pole Grid North')
5480 #endif
5481  ENDIF
5482 
5483  !Sbt
5484  IF ( flsrce(5) ) THEN
5485  iret=nf90_def_var(ncid,'sbt',nf90_float,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(20))
5486  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(20), 1, 1, deflate)
5487  iret=nf90_put_att(ncid,varid(20),'long_name','depth induced breaking source term')
5488  iret=nf90_put_att(ncid,varid(20),'standard_name','depth_induced_breaking_source_term')
5489  iret=nf90_put_att(ncid,varid(20),'globwave_name','depth_induced_breaking_source_term')
5490  iret=nf90_put_att(ncid,varid(20),'units','m2 rad-1')
5491  iret=nf90_put_att(ncid,varid(20),'scale_factor',1.)
5492  iret=nf90_put_att(ncid,varid(20),'add_offset',0.)
5493  iret=nf90_put_att(ncid,varid(20),'valid_min',-1.)
5494  iret=nf90_put_att(ncid,varid(20),'valid_max',1.)
5495  iret=nf90_put_att(ncid,varid(20),'_FillValue',nf90_fill_float)
5496  iret=nf90_put_att(ncid,varid(20),'content','TXYZ')
5497  iret=nf90_put_att(ncid,varid(20),'associates','time station frequency direction')
5498 #ifdef W3_RTD
5499  iret=nf90_put_att(ncid,varid(20),'direction_reference','Rotated Pole Grid North')
5500 #endif
5501  ENDIF
5502 
5503  !Sice
5504  IF ( flsrce(6) ) THEN
5505  iret=nf90_def_var(ncid,'sice',nf90_float,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(21))
5506  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(21), 1, 1, deflate)
5507  iret=nf90_put_att(ncid,varid(21),'long_name','wave-ice interactions source term')
5508  iret=nf90_put_att(ncid,varid(21),'standard_name','wave_ice_intercations_source_term')
5509  iret=nf90_put_att(ncid,varid(21),'globwave_name','wave_ice_intercations_source_term')
5510  iret=nf90_put_att(ncid,varid(21),'units','m2 rad-1')
5511  iret=nf90_put_att(ncid,varid(21),'scale_factor',1.)
5512  iret=nf90_put_att(ncid,varid(21),'add_offset',0.)
5513  iret=nf90_put_att(ncid,varid(21),'valid_min',-1.)
5514  iret=nf90_put_att(ncid,varid(21),'valid_max',1.)
5515  iret=nf90_put_att(ncid,varid(21),'_FillValue',nf90_fill_float)
5516  iret=nf90_put_att(ncid,varid(21),'content','TXYZ')
5517  iret=nf90_put_att(ncid,varid(21),'associates','time station frequency direction')
5518 #ifdef W3_RTD
5519  iret=nf90_put_att(ncid,varid(21),'direction_reference','Rotated Pole Grid North')
5520 #endif
5521  ENDIF
5522 
5523  !Stt
5524  IF ( flsrce(7) ) THEN
5525  iret=nf90_def_var(ncid,'stt',nf90_float,(/dimid(5),dimid(4),dimid(two),dimid(one)/),varid(22))
5526  IF (nctype.EQ.4) iret=nf90_def_var_deflate(ncid, varid(22), 1, 1, deflate)
5527  iret=nf90_put_att(ncid,varid(22),'long_name','total source term')
5528  iret=nf90_put_att(ncid,varid(22),'standard_name','total_source_term')
5529  iret=nf90_put_att(ncid,varid(22),'globwave_name','total_source_term')
5530  iret=nf90_put_att(ncid,varid(22),'units','m2 rad-1')
5531  iret=nf90_put_att(ncid,varid(22),'scale_factor',1.)
5532  iret=nf90_put_att(ncid,varid(22),'add_offset',0.)
5533  iret=nf90_put_att(ncid,varid(22),'valid_min',-1.)
5534  iret=nf90_put_att(ncid,varid(22),'valid_max',1.)
5535  iret=nf90_put_att(ncid,varid(22),'_FillValue',nf90_fill_float)
5536  iret=nf90_put_att(ncid,varid(22),'content','TXYZ')
5537  iret=nf90_put_att(ncid,varid(22),'associates','time station frequency direction')
5538 #ifdef W3_RTD
5539  iret=nf90_put_att(ncid,varid(22),'direction_reference','Rotated Pole Grid North')
5540 #endif
5541  ENDIF
5542  ENDIF
5543 
5544  ! Add values in netCDF file
5545  iret=nf90_enddef(ncid)
5546  CALL check_err(iret,68)
5547  iret=nf90_put_var(ncid,varid(6),freq(1:nk))
5548  CALL check_err(iret,69)
5549  iret=nf90_put_var(ncid,varid(7),freq1(1:nk))
5550  CALL check_err(iret,70)
5551  iret=nf90_put_var(ncid,varid(8),freq2(1:nk))
5552  CALL check_err(iret,71)
5553  iret=nf90_put_var(ncid,varid(9),dir(1:nth))
5554  CALL check_err(iret,72)
5555  !
5556  END IF
5557  !
5558  RETURN
5559 
5560  END SUBROUTINE w3crnc
5561 
5562  !==============================================================================
5569  SUBROUTINE check_err(IRET,ICODE)
5571  USE netcdf
5572  USE w3odatmd, ONLY: ndse
5573  USE w3servmd, ONLY: extcde
5574 
5575  IMPLICIT NONE
5576 
5577  INTEGER IRET, ICODE
5578 
5579  IF (iret .NE. nf90_noerr) THEN
5580  WRITE(ndse,*) ' *** WAVEWATCH III ERROR IN OUNP :'
5581  WRITE(ndse,*) ' NETCDF ERROR MESSAGE: '
5582  WRITE(ndse,*) nf90_strerror(iret)
5583  WRITE(ndse,*) ' ICODE: '
5584  WRITE(ndse,*) icode
5585  CALL extcde ( icode )
5586  END IF
5587  RETURN
5588 
5589  END SUBROUTINE check_err
5590 
5591  !==============================================================================
5592 
5593 
5594  !/
5595  !/ End of W3OUNP ----------------------------------------------------- /
5596  !/
5597 END PROGRAM w3ounp
w3dispmd::dfac
real, parameter dfac
Definition: w3dispmd.F90:75
w3gdatmd::nk
integer, pointer nk
Definition: w3gdatmd.F90:1230
w3timemd::dsec21
real function dsec21(TIME1, TIME2)
Definition: w3timemd.F90:333
w3servmd::nextln
subroutine nextln(CHCKC, NDSI, NDSE)
Definition: w3servmd.F90:222
include
cmake src_list cmake include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_switches.cmake) check_switches("$
Definition: CMakeLists.txt:15
w3sln1md
Definition: w3sln1md.F90:3
w3sln1md::w3sln1
subroutine w3sln1(K, FHIGH, USTAR, USDIR, S)
Definition: w3sln1md.F90:57
w3src3md::w3sin3
subroutine w3sin3(A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, TAUWX, TAUWY, TAUWNX, TAUWNY, ICE, S, D, LLWS, IX, IY)
Calculate diagonal and input source term for WAM4+ approach.
Definition: w3src3md.F90:386
w3arrymd::prt1dm
subroutine prt1dm(NDS, NFR, NE, E, FR, UFR, NLINES, FTOPI, PRVAR, PRUNIT, PNTNME)
Definition: w3arrymd.F90:1627
w3gdatmd::swl6s6
logical, pointer swl6s6
Definition: w3gdatmd.F90:1338
w3adatmd
Define data structures to set up wave model auxiliary data for several models simultaneously.
Definition: w3adatmd.F90:26
w3timemd::t2d
subroutine t2d(TIME, DAT, IERR)
Definition: w3timemd.F90:1072
w3gdatmd::flagunr
logical, pointer flagunr
Definition: w3gdatmd.F90:1193
w3swldmd
Source term module for swell dissipation.
Definition: w3swldmd.F90:18
w3flx5md::w3flx5
subroutine w3flx5(ZWND, U10, U10D, TAUA, TAUADIR, RHOAIR, UST, USTD, Z0, CD, CHARN)
Unified process to obtain friction velocity and drag when stresses are an input (from atmospheric mod...
Definition: w3flx5md.F90:119
constants::dair
real, parameter dair
DAIR Density of air (kg/m3).
Definition: constants.F90:63
constants::dera
real, parameter dera
DERA Conversion factor from degrees to radians.
Definition: constants.F90:77
w3snl1md::w3snl1
subroutine w3snl1(A, CG, KDMEAN, S, D)
Calculate nonlinear interactions and the diagonal term of its derivative.
Definition: w3snl1md.F90:115
w3partmd
Spectral partitioning according to the watershed method.
Definition: w3partmd.F90:18
w3wdatmd
Define data structures to set up wave model dynamic data for several models simultaneously.
Definition: w3wdatmd.F90:18
w3flx4md::w3flx4
subroutine w3flx4(ZWND, U10, U10D, UST, USTD, Z0, CD)
Flux/stress computations according to Hwang (JTECH, 2011).
Definition: w3flx4md.F90:106
w3odatmd::nopts
integer, pointer nopts
Definition: w3odatmd.F90:484
w3nmlounpmd::w3nmlounp
subroutine w3nmlounp(NDSI, INFILE, NML_POINT, NML_FILE, NML_SPECTRA, NML_PARAM, NML_SOURCE, IERR)
Definition: w3nmlounpmd.F90:85
w3nmlounpmd::nml_file_t
Definition: w3nmlounpmd.F90:40
w3gdatmd::sig
real, dimension(:), pointer sig
Definition: w3gdatmd.F90:1234
w3sbt1md::w3sbt1
subroutine w3sbt1(A, CG, WN, DEPTH, S, D)
Bottom friction source term according to the empirical JONSWAP formulation.
Definition: w3sbt1md.F90:89
w3src2md::w3sds2
subroutine w3sds2(A, CG, K, FPI, USTAR, ALFA, S, D)
Calculate whitecapping source term and diagonal term of derivative.
Definition: w3src2md.F90:583
w3sdb1md
Dummy slot for bottom friction source term.
Definition: w3sdb1md.F90:24
w3nmlounpmd::nml_point_t
Definition: w3nmlounpmd.F90:27
w3odatmd::iaproc
integer, pointer iaproc
Definition: w3odatmd.F90:457
w3odatmd::grdid
character(len=13), dimension(:), pointer grdid
Definition: w3odatmd.F90:502
w3wdatmd::time
integer, dimension(:), pointer time
Definition: w3wdatmd.F90:172
w3flx2md::w3flx2
subroutine w3flx2(ZWIND, DEPTH, FP, U, UDIR, UST, USTD, Z0, CD)
FLux/stress computations according Tolman and Chalikov (1996).
Definition: w3flx2md.F90:91
constants::rade
real, parameter rade
RADE Conversion factor from radians to degrees.
Definition: constants.F90:76
w3gdatmd::gname
character(len=30), pointer gname
Definition: w3gdatmd.F90:1223
w3odatmd::fnmpre
character(len=80) fnmpre
Definition: w3odatmd.F90:330
w3sbt4md::w3sbt4
subroutine w3sbt4(A, CG, WN, DEPTH, D50, PSIC, TAUBBL, BEDFORM, S, D, IX, IY)
Computes the SHOWEX bottom friction with movable bed effects.
Definition: w3sbt4md.F90:341
w3servmd::strsplit
subroutine strsplit(STRING, TAB)
Definition: w3servmd.F90:1440
w3nmlounpmd::nml_source_t
Definition: w3nmlounpmd.F90:59
w3odatmd::dpo
real, dimension(:), pointer dpo
Definition: w3odatmd.F90:492
w3odatmd::zet_seto
real, dimension(:), pointer zet_seto
Definition: w3odatmd.F90:499
w3src4md::w3sds4
subroutine w3sds4(A, K, CG, USTAR, USDIR, DEPTH, DAIR, SRHS, DDIAG, IX, IY, BRLAMBDA, WHITECAP, DLWMEAN)
Calculate whitecapping source term and diagonal term of derivative.
Definition: w3src4md.F90:2034
w3odatmd::wdo
real, dimension(:), pointer wdo
Definition: w3odatmd.F90:492
w3nmlounpmd
Definition: w3nmlounpmd.F90:3
w3src6md::w3sin6
subroutine, public w3sin6(A, CG, WN2, UABS, USTAR, USDIR, CD, DAIR, TAUWX, TAUWY, TAUNWX, TAUNWY, S, D)
Observation-based source term for wind input.
Definition: w3src6md.F90:292
w3snl4md::w3snl4
subroutine w3snl4(A, CG, WN, DEPTH, S, D)
Interface module for TSA type nonlinear interactions.
Definition: w3snl4md.F90:611
w3src2md::w3sin2
subroutine w3sin2(A, CG, K, U, UDIR, CD, Z0, FPI, S, D)
Calculate input source term.
Definition: w3src2md.F90:309
w3gdatmd::w3setg
subroutine w3setg(IMOD, NDSE, NDST)
Definition: w3gdatmd.F90:2152
w3odatmd::ipass2
integer, pointer ipass2
Definition: w3odatmd.F90:484
w3odatmd::ndse
integer, pointer ndse
Definition: w3odatmd.F90:456
w3flx3md
FLux/stress computations according Tolman and Chalikov (1996).
Definition: w3flx3md.F90:23
w3flx4md
Flux/stress computations according to Hwang ( 2011).
Definition: w3flx4md.F90:27
w3flx5md
Unified process to obtain friction velocity and drag when stresses are an input (from atmospheric mod...
Definition: w3flx5md.F90:28
w3dispmd::ewn1
real, dimension(0:nar1d) ewn1
Definition: w3dispmd.F90:78
w3flx1md
Flux/stress computations according to Wu (1980).
Definition: w3flx1md.F90:21
w3adatmd::w3seta
subroutine w3seta(IMOD, NDSE, NDST)
Select one of the WAVEWATCH III grids / models.
Definition: w3adatmd.F90:2645
w3odatmd::ptloc
real, dimension(:,:), pointer ptloc
Definition: w3odatmd.F90:492
w3flx2md
FLux/stress computations according Tolman and Chalikov (1996).
Definition: w3flx2md.F90:21
w3src4md::w3sin4
subroutine w3sin4(A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, TAUWX, TAUWY, TAUWNX, TAUWNY, S, D, LLWS, IX, IY, BRLAMBDA)
Calculate diagonal and input source term for WAM4+ approach.
Definition: w3src4md.F90:426
w3sdb1md::w3sdb1
subroutine w3sdb1(IX, A, DEPTH, EMEAN, FMEAN, WNMEAN, CG, LBREAK, S, D)
Compute depth-induced breaking using Battjes and Janssen bore model approach.
Definition: w3sdb1md.F90:97
w3wdatmd::w3ndat
subroutine w3ndat(NDSE, NDST)
Set up the number of grids to be used.
Definition: w3wdatmd.F90:210
w3nmlounpmd::nml_param_t
Definition: w3nmlounpmd.F90:54
w3odatmd::naperr
integer, pointer naperr
Definition: w3odatmd.F90:457
w3exnc
subroutine w3exnc(NX, NY, IX1, IXN, IY1, IYN, NSEA, FILEPREFIX, E3DF, P2MSF, US3DF, USSPF, NCTYPE, TOGETHER, NCVARTYPEI, FLG2D, NCIDS, S3, STRSTOPDATE)
Perform actual grid output in NetCDF file.
Definition: ww3_ounf.F90:863
w3canomd
Calculation of the second order correction to the surface gravity wave spectrum.
Definition: w3canomd.F90:23
w3servmd
Definition: w3servmd.F90:3
w3timemd::tick21
subroutine tick21(TIME, DTIME)
Definition: w3timemd.F90:84
w3timemd::caltype
character, public caltype
Definition: w3timemd.F90:79
w3wdatmd::w3setw
subroutine w3setw(IMOD, NDSE, NDST)
Select one of the WAVEWATCH III grids / models.
Definition: w3wdatmd.F90:660
w3odatmd::wao
real, dimension(:), pointer wao
Definition: w3odatmd.F90:492
constants::tpiinv
real, parameter tpiinv
TPIINV Inverse of 2*Pi.
Definition: constants.F90:74
w3odatmd::w3seto
subroutine w3seto(IMOD, NDSERR, NDSTST)
Definition: w3odatmd.F90:1523
w3timemd::stme21
subroutine stme21(TIME, DTME21)
Definition: w3timemd.F90:682
w3gig1md
Definition: w3gig1md.F90:3
w3gdatmd::nth
integer, pointer nth
Definition: w3gdatmd.F90:1230
w3dispmd::liu_forward_dispersion
subroutine liu_forward_dispersion(H_ICE, VISC, H_WDEPTH, SIGMA, K_SOLUTION, CG, ALPHA)
Definition: w3dispmd.F90:688
w3odatmd
Definition: w3odatmd.F90:3
w3dispmd::ecg1
real, dimension(0:nar1d) ecg1
Definition: w3dispmd.F90:78
w3adatmd::w3naux
subroutine w3naux(NDSE, NDST)
Set up the number of grids to be used.
Definition: w3adatmd.F90:704
w3ounp
program w3ounp
Post-processing of point output.
Definition: ww3_ounp.F90:22
w3timemd::tsub
double precision function tsub(T1, T2)
Definition: w3timemd.F90:1527
w3gdatmd::iicedisp
logical, pointer iicedisp
Definition: w3gdatmd.F90:1217
constants::dwat
real, parameter dwat
DWAT Density of water (kg/m3).
Definition: constants.F90:62
w3odatmd::naproc
integer, pointer naproc
Definition: w3odatmd.F90:457
w3sbs1md::w3sbs1
subroutine w3sbs1(A, CG, WN, DEPTH, CX1, CY1, TAUSCX, TAUSCY, S, D)
Bottom scattering source term.
Definition: w3sbs1md.F90:114
w3iogrmd::w3iogr
subroutine w3iogr(INXOUT, NDSM, IMOD, FEXT ifdef W3_ASCII
Reading and writing of the model definition file.
Definition: w3iogrmd.F90:117
w3gig1md::w3addig
subroutine w3addig(E, DEPTH, WN, CG, IACTION)
Definition: w3gig1md.F90:147
file
file(STRINGS ${CMAKE_BINARY_DIR}/switch switch_strings) separate_arguments(switches UNIX_COMMAND $
Definition: CMakeLists.txt:3
w3iogrmd
Reading/writing of model definition file.
Definition: w3iogrmd.F90:20
w3crnc
subroutine w3crnc(NCFILE, NCID, DIMID, DIMLN, VARID, EXTRADIM, NCTYPE, MAPSTAOUT)
Desc not available.
Definition: ww3_ounf.F90:3290
constants::radius
real, parameter radius
RADIUS Radius of the earth (m).
Definition: constants.F90:79
w3iopomd::w3iopon
subroutine w3iopon(INXOUT, NDSOP, IOTST, IMOD)
Read or write the netCDF point output file, depending on the value of the first parameter.
Definition: w3iopomd.F90:1747
w3odatmd::ptnme
character(len=40), dimension(:), pointer ptnme
Definition: w3odatmd.F90:501
check_err
subroutine check_err(IRET)
Check input return status for error value.
Definition: ww3_bounc.F90:856
w3arrymd::prt1ds
subroutine prt1ds(NDS, NFR, E, FR, UFR, NLINES, FTOPI, PRVAR, PRUNIT, PNTNME)
Definition: w3arrymd.F90:1366
constants::tpi
real, parameter tpi
TPI 2*Pi.
Definition: constants.F90:72
w3src1md::w3sin1
subroutine w3sin1(A, K, USTAR, USDIR, S, D)
Calculate diagonal of input source (actual source term put together in W3SRCE).
Definition: w3src1md.F90:256
w3servmd::strace
subroutine strace(IENT, SNAME)
Definition: w3servmd.F90:148
w3src6md::w3spr6
subroutine, public w3spr6(A, CG, WN, EMEAN, FMEAN, WNMEAN, AMAX, FP)
Calculate mean wave parameters.
Definition: w3src6md.F90:122
w3snl2md::w3snl2
subroutine w3snl2(A, CG, DEPTH, S, D)
Interface to exact interactions.
Definition: w3snl2md.F90:96
w3odatmd::ndso
integer, pointer ndso
Definition: w3odatmd.F90:456
w3gdatmd::w3nmod
subroutine w3nmod(NUMBER, NDSE, NDST, NAUX)
Definition: w3gdatmd.F90:1433
w3arrymd
Definition: w3arrymd.F90:3
w3gdatmd::xfr
real, pointer xfr
Definition: w3gdatmd.F90:1232
w3sis2md
Floe-size dependant scattering of waves in the marginal ice zone.
Definition: w3sis2md.F90:33
w3odatmd::napout
integer, pointer napout
Definition: w3odatmd.F90:457
w3odatmd::dimp
integer, parameter dimp
Definition: w3odatmd.F90:325
w3timemd::u2d
subroutine u2d(UNITS, DAT, IERR)
Definition: w3timemd.F90:1728
w3sbt8md
Contains routines for computing dissipation by viscous fluid mud using Dalrymple and Liu (1978) "Thin...
Definition: w3sbt8md.F90:25
w3src3md::w3spr3
subroutine w3spr3(A, CG, WN, EMEAN, FMEAN, FMEANS, WNMEAN, AMAX, U, UDIR, USTAR, USDIR, TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS)
Calculate mean wave parameters for the use in the source term routines.
Definition: w3src3md.F90:137
w3odatmd::ndst
integer, pointer ndst
Definition: w3odatmd.F90:456
w3sbt9md
Contains routines for computing dissipation by viscous fluid mud using Ng (2000).
Definition: w3sbt9md.F90:25
w3src2md::w3spr2
subroutine w3spr2(A, CG, WN, DEPTH, FPI, U, USTAR, EMEAN, FMEAN, WNMEAN, AMAX, ALFA, FP)
Calculate mean wave parameters for the use in the source term routines (Tolman and Chalikov).
Definition: w3src2md.F90:127
w3sbt4md
SHOWEX bottom friction source term (Ardhuin et al.
Definition: w3sbt4md.F90:25
w3sbt1md
JONSWAP bottom friction routine.
Definition: w3sbt1md.F90:21
w3src3md::w3sds3
subroutine w3sds3(A, K, CG, EMEAN, FMEAN, WNMEAN, USTAR, USDIR, DEPTH, S, D, IX, IY)
Calculate whitecapping source term and diagonal term of derivative.
Definition: w3src3md.F90:1255
constants
Define some much-used constants for global use (all defined as PARAMETER).
Definition: constants.F90:20
w3gdatmd
Definition: w3gdatmd.F90:16
w3swldmd::w3swl6
subroutine, public w3swl6(A, CG, WN, S, D)
Turbulent dissipation of narrow-banded swell.
Definition: w3swldmd.F90:252
w3dispmd::nar1d
integer, parameter nar1d
Definition: w3dispmd.F90:74
w3sbs1md
This module computes a scattering term based on the theory by Ardhuin and Magne (JFM 2007).
Definition: w3sbs1md.F90:22
w3dispmd::wavnu1
subroutine wavnu1(SI, H, K, CG)
Definition: w3dispmd.F90:85
w3sis2md::w3sis2
subroutine, public w3sis2(A, DEPTH, CICE, ICEH, ICEF, ICEDMAX, IX, IY, S, D, DISSIP, WN, CG, WN_R, CG_ICE, R)
Wave scattering in the MIZ, adapted from Dumont et al.
Definition: w3sis2md.F90:654
w3servmd::extcde
subroutine extcde(IEXIT, UNIT, MSG, FILE, LINE, COMM)
Definition: w3servmd.F90:736
w3odatmd::w3nout
subroutine w3nout(NDSERR, NDSTST)
Definition: w3odatmd.F90:561
w3canomd::w3add2ndorder
subroutine w3add2ndorder(E, DEPTH, WN, CG, IACTION)
Adds second order spectrum on top of first order spectrum.
Definition: w3canomd.F90:153
w3src6md::w3sds6
subroutine, public w3sds6(A, CG, WN, S, D)
Observation-based source term for dissipation.
Definition: w3src6md.F90:547
w3arrymd::prt2ds
subroutine prt2ds(NDS, NFR0, NFR, NTH, E, FR, UFR, FACSP, FSC, RRCUT, PRVAR, PRUNIT, PNTNME)
Definition: w3arrymd.F90:1943
w3snl3md
Generalized and optimized multiple DIA implementation.
Definition: w3snl3md.F90:24
w3snl4md
Generic shallow-water Boltzmann integral (FBI or TSA).
Definition: w3snl4md.F90:25
w3src3md
The 'WAM4+' source terms based on P.A.E.M.
Definition: w3src3md.F90:30
w3src4md
The 'SHOM/Ifremer' source terms based on P.A.E.M.
Definition: w3src4md.F90:28
w3servmd::itrace
subroutine itrace(NDS, NMAX)
Definition: w3servmd.F90:91
w3snl1md
Bundles routines to calculate nonlinear wave-wave interactions according to the Discrete Interaction ...
Definition: w3snl1md.F90:25
w3src6md
Observation-based wind input and dissipation after Donelan et al (2006), and Babanin et al.
Definition: w3src6md.F90:27
w3snl2md
Interface module to exact nonlinear interactions.
Definition: w3snl2md.F90:23
w3partmd::w3part
subroutine w3part(SPEC, UABS, UDIR, DEPTH, WN, NP, XP, DIMXP)
Interface to watershed partitioning routines.
Definition: w3partmd.F90:139
w3src1md
Bundle WAM cycle 3 input and dissipation source terms with their defining parameters.
Definition: w3src1md.F90:15
w3src2md
Tolman and Chalikov (1996) input and dissipation source terms.
Definition: w3src2md.F90:16
w3snl3md::w3snl3
subroutine w3snl3(A, CG, WN, DEPTH, S, D)
Multiple Discrete Interaction Parameterization for arbitrary depths with generalized quadruplet layou...
Definition: w3snl3md.F90:181
w3snl1md::w3snlgqm
subroutine w3snlgqm(A, CG, WN, DEPTH, TSTOTn, TSDERn)
Definition: w3snl1md.F90:789
w3flx3md::w3flx3
subroutine w3flx3(ZWIND, DEPTH, FP, U, UDIR, UST, USTD, Z0, CD)
FLux/stress computations according Tolman and Chalikov (1996).
Definition: w3flx3md.F90:96
w3gdatmd::iqtpe
integer, pointer iqtpe
Definition: w3gdatmd.F90:1345
w3timemd
Definition: w3timemd.F90:3
constants::undef
real undef
UNDEF Value for undefined variable in output.
Definition: constants.F90:84
w3src4md::w3spr4
subroutine w3spr4(A, CG, WN, EMEAN, FMEAN, FMEAN1, WNMEAN, AMAX, U, UDIR, ifdef W3_FLX5
Calculate mean wave parameters for the use in the source term routines.
Definition: w3src4md.F90:145
w3flx1md::w3flx1
subroutine w3flx1(ZWND, U10, U10D, UST, USTD, Z0, CD)
FLux/stress computations according to Wu (1980).
Definition: w3flx1md.F90:89
w3odatmd::aso
real, dimension(:), pointer aso
Definition: w3odatmd.F90:492
w3iopomd::w3iopo
subroutine w3iopo(INXOUT, NDSOP, IOTST, IMOD ifdef W3_ASCII
Read or write point output.
Definition: w3iopomd.F90:1907
w3dispmd
Definition: w3dispmd.F90:3
w3dispmd::n1max
integer n1max
Definition: w3dispmd.F90:77
w3nmlounpmd::nml_spectra_t
Definition: w3nmlounpmd.F90:46
w3src1md::w3sds1
subroutine w3sds1(A, K, EMEAN, FMEAN, WNMEAN, S, D)
Calculate whitecapping source term and diagonal term of derivative.
Definition: w3src1md.F90:433
constants::grav
real, parameter grav
GRAV Acc.
Definition: constants.F90:61
w3iopomd
Process point output.
Definition: w3iopomd.F90:19
w3src1md::w3spr1
subroutine w3spr1(A, CG, WN, EMEAN, FMEAN, WNMEAN, AMAX)
Definition: w3src1md.F90:88
w3dispmd::dsie
real dsie
Definition: w3dispmd.F90:78
w3gdatmd::flagll
logical, pointer flagll
Definition: w3gdatmd.F90:1219