WAVEWATCH III  beta 0.0.1
gx_outf.F90
Go to the documentation of this file.
1 
9 #include "w3macros.h"
10 
11 !/ ------------------------------------------------------------------- /
35 PROGRAM gxoutf
36  !/
37  !/ +-----------------------------------+
38  !/ | WAVEWATCH III NOAA/NCEP |
39  !/ | H. L. Tolman |
40  !/ | A. Chawla |
41  !/ | J.H.G.M. Alves |
42  !/ | FORTRAN 90 |
43  !/ | Last update : 22-Mar-2021 |
44  !/ +-----------------------------------+
45  !/
46  !/ 30-Jun-1999 : Final FORTRAN 77 ( version 1.18 )
47  !/ 24-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 )
48  !/ 25-Jan-2001 : Cartesian grid version ( version 2.06 )
49  !/ 29-Jan-2001 : Add output fields 17-18 ( version 2.20 )
50  !/ 13-Nov-2002 : Add stress vector. ( version 3.00 )
51  !/ 24-Dec-2004 : Multiple grid version. ( version 3.06 )
52  !/ 27-Jun-2005 : Adding MAPST2. ( version 3.07 )
53  !/ 21-Jul-2005 : Add output fields 19-21. ( version 3.07 )
54  !/ 15-Dec-2005 : Updating MAPST2 for 2-way nest. ( version 3.08 )
55  !/ 13-Mar-2006 : MSOUT and MBOUT added. ( version 3.09 )
56  !/ 29-Jun-2006 : Adding file name preamble. ( version 3.09 )
57  !/ 05-Jul-2006 : Consolidate stress arrays. ( version 3.09 )
58  !/ 18-Jan-2007 : Update MSOUT/MBOUT treatment. ( version 3.10 )
59  !/ 28-Mar-2007 : Adding partitioned output. ( version 3.11 )
60  !/ Adding user slots for outputs.
61  !/ 29-May-2009 : Preparing distribution version. ( version 3.14 )
62  !/ 30-Oct-2009 : Implement run-time grid selection. ( version 3.14 )
63  !/ (W. E. Rogers & T. J. Campbell, NRL)
64  !/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to
65  !/ specify index closure for a grid. ( version 3.14 )
66  !/ (T. J. Campbell, NRL)
67  !/ 05-Oct-2011 : Updating to the 53 output parameter ( version 4.05 )
68  !/ (J-H Alves)
69  !/ 25-Feb-2013 : Adding double-index output fields ( version 4.11 )
70  !/ 27-Aug-2015 : ICEH and ICEF added as output ( version 5.10 )
71  !/ 25-Aug-2018 : Add WBT parameter ( version 6.06 )
72  !/ 22-Mar-2021 : RHOA and TAUA added as output ( version 7.13 )
73  !/
74  !/
75  !/ Copyright 2009 National Weather Service (NWS),
76  !/ National Oceanic and Atmospheric Administration. All rights
77  !/ reserved. WAVEWATCH III is a trademark of the NWS.
78  !/ No unauthorized use without permission.
79  !/
80  ! 1. Purpose :
81  !
82  ! Generate GrADS input files from raw WAVEWATCH data file.
83  !
84  ! 2. Method :
85  !
86  ! Data is read from the grid output file out_grd.ww3 (raw data)
87  ! and from the file gx_outf.inp ( NDSI, output requests ).
88  ! Model definition and raw data files are read using WAVEWATCH III
89  ! subroutines.
90  !
91  ! Output files are ww3.ctl and ww3.grads. the output files
92  ! contains a land-sea map, followed by requested fields. See the
93  ! control file for the names of the fields.
94  !
95  ! 3. Parameters :
96  !
97  ! 4. Subroutines used :
98  !
99  ! Name Type Module Description
100  ! ----------------------------------------------------------------
101  ! W3NMOD Subr. W3GDATMD Set number of model.
102  ! W3SETG Subr. Id. Point to selected model.
103  ! W3NDAT Subr. W3WDATMD Set number of model for wave data.
104  ! W3SETW Subr. Id. Point to selected model for wave data.
105  ! W3NAUX Subr. W3ADATMD Set number of model for aux data.
106  ! W3SETA Subr. Id. Point to selected model for aux data.
107  ! ITRACE Subr. W3SERVMD Subroutine tracing initialization.
108  ! STRACE Subr. Id. Subroutine tracing.
109  ! NEXTLN Subr. Id. Get next line from input filw
110  ! EXTCDE Subr. Id. Abort program as graceful as possible.
111  ! STME21 Subr. W3TIMEMD Convert time to string.
112  ! TICK21 Subr. Id. Advance time.
113  ! DSEC21 Func. Id. Difference between times.
114  ! W3IOGR Subr. W3IOGRMD Reading/writing model definition file.
115  ! W3IOGO Subr. W3IOGOMD Reading/writing raw gridded data file.
116  ! W3READFLGRD Subr. W3IOGOMD Reading output fields flags.
117  ! W3EXGO Subr. Internal Execute grid output.
118  ! ----------------------------------------------------------------
119  !
120  ! 5. Called by :
121  !
122  ! None, stand-alone program.
123  !
124  ! 6. Error messages :
125  !
126  ! Checks on input, checks in W3IOxx.
127  ! Check on grid type.
128  !
129  ! 7. Remarks :
130  !
131  ! - For the Cartesian grid version the X and Y increment are
132  ! artificially converted to long-lat by assuming the 1 degree
133  ! equals 100 km.
134  ! - Curvilinear grids currently not supported.
135  !
136  ! 8. Structure :
137  !
138  ! See source code.
139  !
140  ! 9. Switches :
141  !
142  ! !/S Enable subroutine tracing.
143  !
144  ! 10. Source code :
145  !
146  !/ ------------------------------------------------------------------- /
147  USE constants
148  !/
149  ! USE W3GDATMD, ONLY: W3NMOD, W3SETG
150  USE w3wdatmd, ONLY: w3ndat, w3setw
151  USE w3adatmd, ONLY: w3naux, w3seta
152  USE w3odatmd, ONLY: w3nout, w3seto
153  USE w3iogrmd, ONLY: w3iogr
154  USE w3iogomd, ONLY: w3readflgrd, w3iogo
155  USE w3servmd, ONLY : itrace, nextln, extcde
156 #ifdef W3_S
157  USE w3servmd, ONLY : strace
158 #endif
159  USE w3timemd, ONLY: stme21, tick21, dsec21
160  !/
161  USE w3gdatmd
162  USE w3wdatmd, ONLY: time, wlv, ice, iceh, icef, berg, &
163  ust, ustdir, rhoair
164  USE w3adatmd, ONLY: cflxymax, cflthmax, as, cx, cy, ua, ud, wn, &
165  dw, hs, wlm, t01, t0m1, t02, thm, ths, fp0, &
166  thp0, aba, abd, uba, ubd, fcut, &
167  sxx, syy, sxy, phs, ptp, plp, pdir, psi, pws,&
168  ptm1, pt1, pt2, pep, taua, tauadir, &
169  pthp0, pqp, psw, ppe, pgw, qp, &
170  pwst, pnr, usero, tauox, tauoy, tauwix, &
172  ussx, ussy, mssx, mssy, mscx, mscy, charn, &
173  tauwnx, tauwny, bhd, p2sms, dtdyn, &
177  USE w3odatmd, ONLY: ndse, ndst, ndso, nogrp, ngrpp, idout, undef,&
179  !
180  IMPLICIT NONE
181  !/
182  !/ ------------------------------------------------------------------- /
183  !/ Local parameters
184  !/
185  INTEGER :: ndsi, ndsm, ndsog, ndsdat, ndsctl, &
186  ndstrc, ntrace, ierr, i,j,k, ifi,ifj,&
187  tout(2), nout, tdum(2), nvar, iout, &
188  ix0, ixn, iy0, iyn, time0(2), ih0, &
189  im0, id0, iid, ij0, iotest, iinc, iu,&
190  timen(2), jlen
191 #ifdef W3_S
192  INTEGER, SAVE :: ient = 0
193 #endif
194  REAL :: dtreq, dtest
195  REAL :: fac, xymax
196  CHARACTER :: comstr*1, idtime*23, iddday*11, &
197  cinc*2
198  CHARACTER*3 :: mnth(12)
199  CHARACTER*5 :: parid
200  LOGICAL :: flone, fltwo, fldir, fltri, flprt
201  LOGICAL :: flreq(nogrp,ngrpp), flog(nogrp), &
202  msout, mbout, ltemp(ngrpp)
203  !/
204  !/ ------------------------------------------------------------------- /
205  !/
206  DATA time0 / -1, 0 /
207  DATA mnth / 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', &
208  'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC' /
209  !
210  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
211  ! 1. IO set-up.
212  !
213  CALL w3nmod ( 1, 6, 6 )
214  CALL w3setg ( 1, 6, 6 )
215  CALL w3ndat ( 6, 6 )
216  CALL w3setw ( 1, 6, 6 )
217  CALL w3naux ( 6, 6 )
218  CALL w3seta ( 1, 6, 6 )
219  CALL w3nout ( 6, 6 )
220  CALL w3seto ( 1, 6, 6 )
221  !
222  ndsi = 10
223  ndsm = 20
224  ndsog = 20
225  ndsdat = 50
226  ndsctl = 51
227  !
228  ndstrc = 6
229  ntrace = 10
230  !
231  WRITE (ndso,900)
232  !
233  CALL itrace ( ndstrc, ntrace )
234 #ifdef W3_S
235  CALL strace (ient, 'GXOUTF')
236 #endif
237  !
238  jlen = len_trim(fnmpre)
239  OPEN (ndsi,file=fnmpre(:jlen)//'gx_outf.inp',status='OLD', &
240  err=800,iostat=ierr)
241  READ (ndsi,'(A)',END=801,ERR=802) comstr
242  IF (comstr.EQ.' ') comstr = '$'
243  WRITE (ndso,901) comstr
244  !
245  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
246  ! 2. Read model definition file.
247  !
248  CALL w3iogr ( 'READ', ndsm )
249  WRITE (ndso,920) gname
250  IF ( gtype .EQ. clgtype ) THEN
251  WRITE(ndse,*)'PROGRAM GXOUTF: '// &
252  'GRADS OUTPUT NOT IMPLEMENTED FOR CURVILINEAR GRIDS. '// &
253  'NOW STOPPING.'
254  CALL extcde ( 1 )
255  END IF
256  IF ( iclose .EQ. iclose_trpl ) THEN
257  WRITE(ndse,*)'PROGRAM GXOUTF: '// &
258  'GRADS OUTPUT NOT IMPLEMENTED FOR TRIPOLE GRIDS. '// &
259  'NOW STOPPING.'
260  CALL extcde ( 1 )
261  END IF
262  !
263  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
264  ! 3. Read general data and first fields from file
265  !
266  CALL w3iogo ( 'READ', ndsog, iotest )
267  !
268  WRITE (ndso,930)
269  DO i=1, nogrp
270  DO j=1, ngrpp
271  IF ( flogrd(i,j) ) WRITE (ndso,931) idout(i,j)
272  END DO
273  END DO
274  !
275  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
276  ! 4. Read requests from input file.
277  ! Output times
278  !
279  CALL nextln ( comstr , ndsi , ndse )
280  READ (ndsi,*,END=801,ERR=802) TOUT, DTREQ, nout
281  dtreq = max( 0. , dtreq )
282  IF ( dtreq.EQ.0 ) nout = 1
283  nout = max( 1 , nout )
284  !
285  CALL stme21 ( tout , idtime )
286  WRITE (ndso,940) idtime
287  !
288  tdum = 0
289  CALL tick21 ( tdum , dtreq )
290  CALL stme21 ( tdum , idtime )
291  IF ( dtreq .GE. 86400. ) THEN
292  WRITE (iddday,'(I10,1X)') int(dtreq/86400.)
293  ELSE
294  iddday = ' '
295  END IF
296  idtime(1:11) = iddday
297  idtime(21:23) = ' '
298  WRITE (ndso,941) idtime, nout
299  !
300  IF ( mod(nint(dtreq),60) .NE. 0 ) GOTO 810
301  !
302  ! ... Output fields
303  !
304  flreq(:,:)=.false. ! Initialize FLGRD
305  CALL w3readflgrd ( ndsi, ndso, 9, ndse, comstr, flog, &
306  flreq, 1, 1, ierr )
307  !
308  !
309  ! Reset flags for variables not yet implemented in grads output interface
310  !
311  ! This needs to be reviewed whenever new parameters are added to the
312  ! grads ctl and data files
313  !
314  ifi = 3
315  DO ifj = 1,noge(ifi)
316  IF ( flreq(ifi,ifj) ) THEN
317  WRITE (ndso,946) idout(ifi,ifj), &
318  '*** NOT YET CODED INTO GXOUTF ***'
319  flreq(ifi,ifj) = .false.
320  END IF
321  END DO
322  ifi = 5
323  DO ifj = 7,10
324  IF ( flreq(ifi,ifj) ) THEN
325  WRITE (ndso,946) idout(ifi,ifj), &
326  '*** NOT YET CODED INTO GXOUTF ***'
327  flreq(ifi,ifj) = .false.
328  END IF
329  END DO
330  DO ifi = 6,8
331  DO ifj = 1,noge(ifi)
332  IF ( flreq(ifi,ifj) ) THEN
333  WRITE (ndso,946) idout(ifi,ifj), &
334  '*** NOT YET CODED INTO GXOUTF ***'
335  flreq(ifi,ifj) = .false.
336  END IF
337  END DO
338  END DO
339  ifi = 10
340  DO ifj = 1,noge(ifi)
341  IF ( flreq(ifi,ifj) ) THEN
342  WRITE (ndso,946) idout(ifi,ifj), &
343  '*** NOT YET CODED INTO GXOUTF ***'
344  flreq(ifi,ifj) = .false.
345  END IF
346  END DO
347  IF ( flreq(9,5) ) THEN
348  WRITE (ndso,946) idout(9,5),'*** NOT YET CODED INTO GXOUTF ***'
349  flreq(9,5) = .false.
350  END IF
351 
352  WRITE (ndso,945)
353  !
354  nvar = 1
355  DO ifi=1, nogrp
356  DO ifj=1, ngrpp
357  IF ( flreq(ifi,ifj) ) THEN
358  IF ( .NOT. flogrd(ifi,ifj) ) THEN
359  WRITE (ndso,946) idout(ifi,ifj),'*** DATA NOT AVAILABLE ***'
360  ELSE
361  WRITE (ndso,946) idout(ifi,ifj), ' '
362  END IF
363  END IF
364  flreq(ifi,ifj) = flreq(ifi,ifj) .AND. flogrd(ifi,ifj)
365  !
366  ! Note: Whenever number of output parameters change, this needs updating
367  !
368  ! The grads output type code does NOT cover all the output parameter space!!
369  !
370  IF ( ifi.EQ.6 .AND. ifj.EQ.1 ) THEN ! Radiation stresses needs 3D variable setting
371  IF ( flreq(ifi,ifj) ) nvar = nvar + 3
372  ELSE IF ( ifi.EQ.4 .AND. ifj.LE.noge(4) ) THEN
373  IF ( flreq(ifi,ifj) ) nvar = nvar + noswll + 1 ! Partitioned parameters
374  ELSE IF ( ifi.EQ.1 .AND. ifj .EQ. 2 ) THEN
375  IF ( flreq(ifi,ifj) ) nvar = nvar + 2 ! Current vector
376  ELSE IF ( ifi.EQ.1 .AND. ifj.EQ.3 ) THEN
377  IF ( flreq(ifi,ifj) ) nvar = nvar + 2 ! Wind vector
378  ELSE IF ( ifi.EQ.5 .AND. ifj.EQ.1 ) THEN
379  IF ( flreq(ifi,ifj) ) nvar = nvar + 2 ! USTAR vector
380  ELSE IF ( ifi.EQ.5 .AND. ifj.EQ.5 ) THEN
381  IF ( flreq(ifi,ifj) ) nvar = nvar + 2 ! TAUWI vector
382  ELSE IF ( ifi.EQ.5 .AND. ifj.EQ.6 ) THEN
383  IF ( flreq(ifi,ifj) ) nvar = nvar + 2 ! TAUWN vector
384  ! ELSE IF ( IFI.EQ.9 .AND. IFJ.EQ.5 ) THEN
385  ! IF ( FLREQ(IFI,IFJ) ) NVAR = NVAR + 2 ! Max angular CFL vector
386  ELSE
387  IF ( flreq(ifi,ifj) ) nvar = nvar + 1 ! scalars
388  END IF
389  END DO
390  END DO
391  !
392  ! ... Grid range
393  !
394  CALL nextln ( comstr , ndsi , ndse )
395  READ (ndsi,*,END=801,ERR=802) IX0, IXN, IY0, IYN, MSOUT, mbout
396  !
397  WRITE (ndso,947)
398  !
399  ix0 = max( 1, ix0 )
400  iy0 = max( 1, iy0 )
401  ixn = min( nx, ixn )
402  iyn = min( ny, iyn )
403  !
404  WRITE (ndso,948) ix0, ixn, iy0, iyn
405  !
406  IF ( msout ) THEN
407  WRITE (ndso,950) 'YES/--'
408  ELSE
409  WRITE (ndso,950) '---/NO'
410  END IF
411  !
412  IF ( .NOT. msout ) mbout = .false.
413  IF ( mbout ) THEN
414  WRITE (ndso,951) 'YES/--'
415  ELSE
416  WRITE (ndso,951) '---/NO'
417  END IF
418  !
419  msout = .NOT. msout
420  mbout = .NOT. mbout
421  !
422  OPEN (ndsdat,file=fnmpre(:jlen)//'ww3.grads',form='UNFORMATTED', convert=file_endian, &
423  err=811,iostat=ierr)
424  !
425  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
426  ! 5. Time management.
427  !
428  iout = 0
429  WRITE (ndso,970)
430  !
431  DO
432  dtest = dsec21( time , tout )
433  IF ( dtest .GT. 0. ) THEN
434  CALL w3iogo ( 'READ', ndsog, iotest )
435  IF ( iotest .EQ. -1 ) THEN
436  WRITE (ndso,942)
437  GOTO 600
438  END IF
439  cycle
440  END IF
441  IF ( dtest .LT. 0. ) THEN
442  CALL tick21 ( tout , dtreq )
443  cycle
444  END IF
445  !
446  iout = iout + 1
447  CALL stme21 ( tout , idtime )
448  WRITE (ndso,971) idtime
449  !
450  CALL gxexgo ( nx, ny, nsea )
451  timen = tout
452  !
453  IF ( time0(1) .EQ. -1 ) time0 = time
454  !
455  CALL tick21 ( tout , dtreq )
456  IF ( iout .GE. nout ) EXIT
457  END DO
458  !
459  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
460  ! 6. Close data file and write control file
461  !
462 600 CONTINUE
463  WRITE (ndso,980)
464  !
465  WRITE (ndso,981)
466  CLOSE (ndsdat)
467  WRITE (ndso,982)
468  OPEN (ndsctl,file=fnmpre(:jlen)//'ww3.ctl',err=812,iostat=ierr)
469  !
470  ih0 = time0(2)/10000
471  im0 = mod(time0(2)/100,100)
472  id0 = mod(time0(1),100)
473  iid = mod(time0(1)/100,100)
474  ij0 = time0(1)/10000
475  !
476  IF ( iout .GT. 1 ) dtreq = dsec21( time0, timen ) / real(iout-1)
477  IF ( iout .EQ. 1 ) dtreq = 3600.
478  IF ( dtreq .GT. 3599. ) THEN
479  cinc = 'HR'
480  iinc = nint(dtreq/3600.)
481  IF ( mod(nint(dtreq),3600) .NE. 0 ) GOTO 820
482  ELSE
483  cinc = 'MN'
484  iinc = nint(dtreq/60.)
485  END IF
486  !
487  WRITE (ndso,983) iout, ih0, im0, id0, mnth(iid), ij0, iinc, cinc
488  !
489  IF ( flagll ) THEN
490  fac = 1.
491  ELSE
492  xymax = max( abs(x0+real(ix0-1)*sx), &
493  abs(x0+real(ixn-1)*sx), &
494  abs(y0+real(iy0-1)*sy), &
495  abs(y0+real(iyn-1)*sy) )
496  IF ( xymax .LT. 1.e3 ) THEN
497  fac = 1.e-1
498  ELSE IF ( xymax .LT. 1.e4 ) THEN
499  fac = 1.e-2
500  ELSE IF ( xymax .LT. 1.e5 ) THEN
501  fac = 1.e-3
502  ELSE IF ( xymax .LT. 1.e6 ) THEN
503  fac = 1.e-4
504  ELSE
505  fac = 1.e-5
506  END IF
507  END IF !FLAGLL
508  !
509  WRITE (ndsctl,990) undef, &
510  (1+ixn-ix0), fac*(x0+real(ix0-1)*sx), fac*sx,&
511  (1+iyn-iy0), fac*(y0+real(iy0-1)*sy), fac*sy,&
512  1, 1000., 1., &
513  iout, ih0, im0, id0, mnth(iid), ij0, &
514  iinc, cinc, nvar
515  !
516  iu = 99
517  WRITE (ndsctl,991) 'MAP ', 0, iu, 'grid use map '
518  !
519  IF ( flreq(01,01) ) &
520  WRITE (ndsctl,991) 'dpt ', 0, iu, 'Water depth '
521  IF ( flreq(01,02) ) &
522  WRITE (ndsctl,991) 'ucur ', 0, iu, 'Current U (m/s)'
523  IF ( flreq(01,02) ) &
524  WRITE (ndsctl,991) 'vcur ', 0, iu, 'Current V (m/s)'
525  IF ( flreq(01,03) ) &
526  WRITE (ndsctl,991) 'uwnd ', 0, iu, 'Wind U (m/s) '
527  IF ( flreq(01,03) ) &
528  WRITE (ndsctl,991) 'vwnd ', 0, iu, 'Wind V (m/s) '
529  IF ( flreq(01,04) ) &
530  WRITE (ndsctl,991) 'ast ', 0, iu, 'AT-SST (degr) '
531  IF ( flreq(01,05) ) &
532  WRITE (ndsctl,991) 'wlv ', 0, iu, 'Water Level (m)'
533  IF ( flreq(01,06) ) &
534  WRITE (ndsctl,991) 'ice ', 0, iu, 'Ice Conc. (-) '
535 #ifdef W3_IS2
536  IF (flreq(01,09) ) &
537  WRITE (ndsctl,991) 'ic1 ', 0, iu, 'Ice thick. (m) '
538  IF (flreq(01,10) ) &
539  WRITE (ndsctl,991) 'ic5 ', 0, iu, 'Floe diam. (m) '
540 #endif
541  IF ( flreq(02,01) ) &
542  WRITE (ndsctl,991) 'hs ', 0, iu, 'Wave height (m)'
543  IF ( flreq(02,02) ) &
544  WRITE (ndsctl,991) 'lm ', 0, iu, 'Mean L (m) '
545  IF ( flreq(02,03) ) &
546  WRITE (ndsctl,991) 't02 ', 0, iu, 'Mean Per Tz (s)'
547  IF ( flreq(02,04) ) &
548  WRITE (ndsctl,991) 't01 ', 0, iu, 'Mean Per Tm (s) '
549  IF ( flreq(02,05) ) &
550  WRITE (ndsctl,991) 't0m1', 0, iu, 'Mean Per Te (s) '
551  IF ( flreq(02,06) ) &
552  WRITE (ndsctl,991) 'fp ', 0, iu, 'Peak Freq. (Hz)'
553  IF ( flreq(02,07) ) &
554  WRITE (ndsctl,991) 'dir ', 0, iu, 'Mean Dir. (rad)'
555  IF ( flreq(02,08) ) &
556  WRITE (ndsctl,991) 'spr ', 0, iu, 'Dir. spread '
557  IF ( flreq(02,09) ) &
558  WRITE (ndsctl,991) 'dp ', 0, iu, 'Peak Dir. (rad)'
559  IF ( flreq(04,01) ) THEN
560  parid = 'phs '
561  DO i=0, noswll
562  WRITE (parid(4:5),'(I2.2)') i
563  WRITE (ndsctl,991) parid , 0, iu, 'Part. Hs (m) '
564  END DO
565  END IF
566  IF ( flreq(04,02) ) THEN
567  parid = 'ptp '
568  DO i=0, noswll
569  WRITE (parid(4:5),'(I2.2)') i
570  WRITE (ndsctl,991) parid , 0, iu, 'Part. Tp (s) '
571  END DO
572  END IF
573  IF ( flreq(04,03) ) THEN
574  parid = 'plp '
575  DO i=0, noswll
576  WRITE (parid(4:5),'(I2.2)') i
577  WRITE (ndsctl,991) parid , 0, iu, 'Part. L (m) '
578  END DO
579  END IF
580  IF ( flreq(04,04) ) THEN
581  parid = 'pdir '
582  DO i=0, noswll
583  WRITE (parid(4:5),'(I2.2)') i
584  WRITE (ndsctl,991) parid , 0, iu, 'Part. Th (deg.)'
585  END DO
586  END IF
587  IF ( flreq(04,05) ) THEN
588  parid = 'pspr '
589  DO i=0, noswll
590  WRITE (parid(4:5),'(I2.2)') i
591  WRITE (ndsctl,991) parid , 0, iu, 'Part. si (deg.)'
592  END DO
593  END IF
594  IF ( flreq(04,06) ) THEN
595  parid = 'pws '
596  DO i=0, noswll
597  WRITE (parid(4:5),'(I2.2)') i
598  WRITE (ndsctl,991) parid , 0, iu, 'Part. ws frac. '
599  END DO
600  END IF
601  IF ( flreq(04,07) ) &
602  WRITE (ndsctl,991) 'tws ', 0, iu, 'Total ws frac. '
603  IF ( flreq(04,08) ) &
604  WRITE (ndsctl,991) 'pnr ', 0, iu, 'Number of part.'
605  IF ( flreq(05,01) ) &
606  WRITE (ndsctl,991) 'uust ', 0, iu, 'Fr.Vel. U(m/s) '
607  IF ( flreq(05,01) ) &
608  WRITE (ndsctl,991) 'vust ', 0, iu, 'Fr.Vel. V(m/s) '
609  IF ( flreq(05,02) ) &
610  WRITE (ndsctl,991) 'cha ', 0, iu, 'Charnock parameter'
611  IF ( flreq(05,03) ) &
612  WRITE (ndsctl,991) 'cge ', 0, iu, 'Energy Flux (W/m)'
613  IF ( flreq(05,04) ) &
614  WRITE (ndsctl,991) 'faw ', 0, iu, 'Air-sea energy flux'
615  IF ( flreq(05,05) ) &
616  WRITE (ndsctl,991) 'utaw ', 0, iu, 'Net wave supp str'
617  IF ( flreq(05,05) ) &
618  WRITE (ndsctl,991) 'vtaw ', 0, iu, 'Net wave supp str'
619  IF ( flreq(05,06) ) &
620  WRITE (ndsctl,991) 'utwa ', 0, iu, 'Neg wave supp str'
621  IF ( flreq(05,06) ) &
622  WRITE (ndsctl,991) 'vtwa ', 0, iu, 'Neg wave supp str'
623  IF ( flreq(09,01) ) &
624  WRITE (ndsctl,991) 'dtd ', 0, iu, 'DTAVG ST (min) '
625  IF ( flreq(09,02) ) &
626  WRITE (ndsctl,991) 'fc ', 0, iu, 'fcut (Hz) '
627  IF ( flreq(09,03) ) &
628  WRITE (ndsctl,991) 'cfx ', 0, iu, 'Max CFL XY Prop'
629  IF ( flreq(09,04) ) &
630  WRITE (ndsctl,991) 'cfd ', 0, iu, 'Max CFL TH Prop'
631  !
632  WRITE (ndsctl,992)
633  !
634  GOTO 888
635  !
636  ! Escape locations read errors :
637  !
638 800 CONTINUE
639  WRITE (ndse,1000) ierr
640  CALL extcde ( 1 )
641  !
642 801 CONTINUE
643  WRITE (ndse,1001)
644  CALL extcde ( 2 )
645  !
646 802 CONTINUE
647  WRITE (ndse,1002) ierr
648  CALL extcde ( 3 )
649  !
650 810 CONTINUE
651  WRITE (ndse,1010)
652  CALL extcde ( 10 )
653  !
654 811 CONTINUE
655  WRITE (ndse,1011)
656  CALL extcde ( 11 )
657  !
658 812 CONTINUE
659  WRITE (ndse,1012)
660  CALL extcde ( 12 )
661  !
662 820 CONTINUE
663  WRITE (ndse,1020) dtreq
664  CALL extcde ( 20 )
665  !
666 821 CONTINUE
667  WRITE (ndse,1021)
668  CALL extcde ( 21 )
669  !
670 888 CONTINUE
671  WRITE (ndso,999)
672  !
673  ! Formats
674  !
675 900 FORMAT (/12x,' *** WAVEWATCH III GrADS field output postp. *** '/ &
676  12x,'====================================================='/)
677 901 FORMAT ( ' Comment character is ''',a,''''/)
678  !
679 920 FORMAT ( ' Grid name : ',a/)
680  !
681 930 FORMAT ( ' Fields in file : '/ &
682  ' --------------------------')
683 931 FORMAT ( ' ',a)
684  !
685 940 FORMAT (/' Output time data : '/ &
686  ' -----------------------------------------------------'/ &
687  ' First time : ',a)
688 941 FORMAT ( ' Interval : ',a/ &
689  ' Number of requests : ',i4)
690 942 FORMAT (/' End of file reached '/)
691  !
692 945 FORMAT (/' Requested output fields : '/ &
693  ' -----------------------------------------------------')
694 946 FORMAT ( ' ',a,1x,a)
695  !
696 947 FORMAT (/' Requested discrete grid ranges : '/ &
697  ' -----------------------------------------------------')
698 948 FORMAT ( ' Longitudes : ',2i6/ &
699  ' lattidutes : ',2i6/ &
700  ' Opening file ww3.grads')
701 949 FORMAT ( ' Alternative definition is used ')
702 950 FORMAT ( ' Sea points in mask : ',a)
703 951 FORMAT ( ' Bound. pts. in mask: ',a)
704  !
705 970 FORMAT (//' Generating file '/ &
706  ' -----------------------------------------------------')
707 971 FORMAT ( ' Data for ',a)
708  !
709 980 FORMAT (//' Final file management '/ &
710  ' -----------------------------------------------------')
711 981 FORMAT ( ' Closing file ww3.grads')
712 982 FORMAT ( ' Opening file ww3.ctl')
713 983 FORMAT ( ' Number of times : ',i6/ &
714  ' Initial time ID : ',i2.2,':',i2.2,'Z',i2.2,a3,i4/ &
715  ' Time step ID : ',i2,a2)
716  !
717 990 FORMAT ('DSET ww3.grads'/ &
718  'TITLE WAVEWATCH III gridded data'/ &
719  'OPTIONS sequential'/ &
720  'OPTIONS big_endian'/ &
721  'UNDEF ',f8.1/ &
722  'XDEF ',i4,' LINEAR ',2f12.5/ &
723  'YDEF ',i4,' LINEAR ',2f12.5/ &
724  'ZDEF ',i4,' LINEAR ',2f12.5/ &
725  'TDEF ',i4,' LINEAR ',i6.2,':',i2.2,'Z',i2.2,a3,i4, &
726  2x,i2,a2/ &
727  'VARS ',i4)
728 991 FORMAT (a6,2i4,2x,a15)
729 992 FORMAT ('ENDVARS')
730  !
731 999 FORMAT (/' End of program '/ &
732  ' ========================================='/ &
733  ' WAVEWATCH III GrADS field output '/)
734  !
735 #ifdef W3_T
736 9050 FORMAT ( ' TEST GXOUTF : KPDS : ',13i4/ &
737  ' ',12i4)
738 9051 FORMAT ( ' TEST GXOUTF : KGDS : ',8i6/ &
739  ' ',8i6/ &
740  ' ',6i6)
741 #endif
742  !
743 1000 FORMAT (/' *** WAVEWATCH III ERROR IN GXOUTF : '/ &
744  ' ERROR IN OPENING INPUT FILE'/ &
745  ' IOSTAT =',i5/)
746  !
747 1001 FORMAT (/' *** WAVEWATCH III ERROR IN GXOUTF : '/ &
748  ' PREMATURE END OF INPUT FILE'/)
749  !
750 1002 FORMAT (/' *** WAVEWATCH III ERROR IN GXOUTF : '/ &
751  ' ERROR IN READING FROM INPUT FILE'/ &
752  ' IOSTAT =',i5/)
753  !
754 1010 FORMAT (/' *** WAVEWATCH III ERROR IN GXOUTF : '/ &
755  ' SMALLEST OUTPUT INCREMENT IS 60 SEC.'/)
756  !
757 1011 FORMAT (/' *** WAVEWATCH III ERROR IN GXOUTF : '/ &
758  ' ERROR IN OPENING OUTPUT FILE ww3.grads'/ &
759  ' IOSTAT =',i5/)
760  !
761 1012 FORMAT (/' *** WAVEWATCH III ERROR IN GXOUTF : '/ &
762  ' ERROR IN OPENING OUTPUT FILE ww3.ctl'/ &
763  ' IOSTAT =',i5/)
764  !
765 1020 FORMAT (/' *** WAVEWATCH III ERROR IN GXOUTF : '/ &
766  ' FIELD INCREMENT > 1HR BUT NOT MULTIPLE',f10.0/)
767  !
768 1021 FORMAT (/' *** WAVEWATCH III ERROR IN GXOUTF : '/ &
769  ' UPDATE PARS IN LOOP 610 !!!'/)
770  !/
771  !/ Internal subroutine GXEXGO ---------------------------------------- /
772  !/
773 CONTAINS
774  !/ ------------------------------------------------------------------- /
785  SUBROUTINE gxexgo ( NX, NY, NSEA )
786  !/
787  !/ +-----------------------------------+
788  !/ | WAVEWATCH III NOAA/NCEP |
789  !/ | H. L. Tolman |
790  !/ | FORTRAN 90 |
791  !/ | Last update : 22-Mar-2021 |
792  !/ +-----------------------------------+
793  !/
794  !/ 30-Jun-1999 : Final FORTRAN 77 ( version 1.18 )
795  !/ 24-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 )
796  !/ Massive changes to logistics.
797  !/ 29-Jan-2001 : Add output fields 17-18 ( version 2.20 )
798  !/ 24-Dec-2004 : Multiple grid version. ( version 3.06 )
799  !/ 27-Jun-2005 : Adding MAPST2. ( version 3.07 )
800  !/ 21-Jul-2005 : Add output fields 19-21. ( version 3.07 )
801  !/ 05-Jul-2006 : Consolidate stress arrays. ( version 3.09 )
802  !/ 18-Jan-2007 : Update MSOUT/MBOUT treatment. ( version 3.10 )
803  !/ 28-Mar-2007 : Adding partitioned output. ( version 3.11 )
804  !/ Adding user slots for outputs.
805  !/ 22-Mar-2021 : Add output fields RHOA and TAUA ( version 7.13 )
806  !/
807  ! 1. Purpose :
808  !
809  ! Perform actual output for GrADS postprocessing.
810  !
811  ! 3. Parameters :
812  !
813  ! Parameter list
814  ! ----------------------------------------------------------------
815  ! NX/Y Int. I Grid dimensions.
816  ! NSEA Int. I Number of sea points.
817  ! ----------------------------------------------------------------
818  !
819  ! Internal parameters
820  ! ----------------------------------------------------------------
821  ! X1, X2, XX
822  ! R.A. Output fields
823  ! ----------------------------------------------------------------
824  !
825  ! 4. Subroutines used :
826  !
827  ! Name Type Module Description
828  ! ----------------------------------------------------------------
829  ! STRACE Subr. W3SERVMD Subroutine tracing.
830  ! EXTCDE Subr. Id. Abort program as graceful as possible.
831  ! W3S2XY Subr. Id. Convert from storage to spatial grid.
832  ! ---------------------------------------------------------------
833  !
834  ! 5. Called by :
835  !
836  ! Main program in which it is contained.
837  !
838  ! 6. Error messages :
839  !
840  ! None.
841  !
842  ! 7. Remarks :
843  !
844  ! - Note that arrays CX and CY of the main program now contain
845  ! the absolute current speed and direction respectively.
846  ! - VALLND added to assure that map with only land plots in
847  ! GrADS.
848  !
849  ! 8. Structure :
850  !
851  ! See source code.
852  !
853  ! 9. Switches :
854  !
855  ! !/S Enable subroutine tracing.
856  ! !/T Enable test output.
857  !
858  ! 10. Source code :
859  !
860  !/ ------------------------------------------------------------------- /
861  USE w3servmd, ONLY: w3s2xy
862  !/
863  !/ ------------------------------------------------------------------- /
864  !/ Parameter list
865  !/
866  INTEGER, INTENT(IN) :: NX, NY, NSEA
867  !/
868  !/ ------------------------------------------------------------------- /
869  !/ Local parameters
870  !/
871  INTEGER :: IX, IY, J, ISEA, IXL, IXR
872  INTEGER :: MAPXCL(NY,NX), MAPDRY(NY,NX), &
873  MAPICE(NY,NX), MAPLND(NY,NX), &
874  MAPMSK(NY,NX)
875 #ifdef W3_S
876  INTEGER, SAVE :: IENT = 0
877 #endif
878  REAL :: X1(NX,NY), XX(NX,NY), XY(NX,NY), &
879  XA(NX,NY,0:NOSWLL)
880  REAL :: VALLND = 0.001
881  !/
882  !/ ------------------------------------------------------------------- /
883  !/
884 #ifdef W3_S
885  CALL strace (ient, 'GXEXGO')
886 #endif
887  !
888 #ifdef W3_T
889  WRITE (ndst,9000) ((flreq(j,k),j=1,nogrp), k=1,ngrpp)
890 #endif
891  !
892  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
893  ! 1. Preparations
894  ! 1.a Write map to file
895  !
896  mapxcl = mod(mapst2,2)
897  mapice = mod(mapst2,2)
898  mapdry = mod(mapst2/2,2)
899  maplnd = mod(mapst2/4,2)
900  mapmsk = mod(mapst2/8,2)
901  !
902  DO iy=1, ny
903  DO ix=1, nx
904  IF ( mapsta(iy,ix).EQ.0 ) THEN
905  IF ( mapxcl(iy,ix).EQ.1 ) THEN
906  x1(ix,iy) = undef
907  ELSE
908  x1(ix,iy) = vallnd
909  END IF
910  ELSE IF ( mapsta(iy,ix).LT.0 ) THEN
911  IF ( mapmsk(iy,ix).EQ.1 ) THEN
912  x1(ix,iy) = -4.
913  ELSE IF ( maplnd(iy,ix).EQ.1 ) THEN
914  x1(ix,iy) = vallnd
915  ELSE IF ( mapice(iy,ix).EQ.1 .AND. &
916  mapdry(iy,ix).EQ.1 ) THEN
917  x1(ix,iy) = -3.
918  ELSE IF ( mapdry(iy,ix).EQ.1 ) THEN
919  x1(ix,iy) = -2.
920  ELSE IF ( mapice(iy,ix).EQ.1 ) THEN
921  x1(ix,iy) = -1.
922  ELSE
923  x1(ix,iy) = -5.
924  END IF
925  ELSE
926  x1(ix,iy) = real(mapsta(iy,ix))
927  IF ( msout ) THEN
928  IF ( mapsta(iy,ix) .GT. 0 ) x1(ix,iy) = undef
929  ELSE IF ( mbout ) THEN
930  IF ( mapsta(iy,ix).EQ.2 .OR. &
931  iy.EQ.1 .OR. iy.EQ.ny .OR. &
932  ( iclose.NE.iclo_none .AND. &
933  (ix.EQ.1 .OR. ix.EQ.nx) ) ) THEN
934  x1(ix,iy) = undef
935  ELSE
936  ixl = 1 + mod(ix+nx-2,nx)
937  ixr = 1 + mod(ix,nx)
938  IF ( mapsta(iy+1,ixl).EQ.0 .AND. &
939  mapxcl(iy+1,ixl).EQ.1 ) x1(ix,iy) = undef
940  IF ( mapsta(iy+1,ix ).EQ.0 .AND. &
941  mapxcl(iy+1,ix ).EQ.1 ) x1(ix,iy) = undef
942  IF ( mapsta(iy+1,ixr).EQ.0 .AND. &
943  mapxcl(iy+1,ixr).EQ.1 ) x1(ix,iy) = undef
944  IF ( mapsta( iy ,ixr).EQ.0 .AND. &
945  mapxcl( iy ,ixr).EQ.1 ) x1(ix,iy) = undef
946  IF ( mapsta(iy-1,ixr).EQ.0 .AND. &
947  mapxcl(iy-1,ixr).EQ.1 ) x1(ix,iy) = undef
948  IF ( mapsta(iy-1,ix ).EQ.0 .AND. &
949  mapxcl(iy-1,ix ).EQ.1 ) x1(ix,iy) = undef
950  IF ( mapsta(iy-1,ixl).EQ.0 .AND. &
951  mapxcl(iy-1,ixl).EQ.1 ) x1(ix,iy) = undef
952  IF ( mapsta( iy ,ixl).EQ.0 .AND. &
953  mapxcl( iy ,ixl).EQ.1 ) x1(ix,iy) = undef
954  END IF
955  END IF
956  IF ( msout .AND. mapsta(iy,ix).EQ.1 ) x1(ix,iy) = undef
957  IF ( mbout .AND. mapsta(iy,ix).EQ.2 ) x1(ix,iy) = undef
958  END IF
959  vallnd = - vallnd
960  END DO
961  END DO
962  !
963  WRITE (ndsdat) ((x1(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
964  !
965  ! 1.b Initialize arrays
966  !
967  x1 = undef
968  xx = undef
969  xy = undef
970  xa = undef
971  !
972  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
973  ! 2. Loop over output fields.
974  !
975  DO j=1, nogrp
976  DO k=1, ngrpp
977  ! WRITE(*,*)J,K,FLREQ(J,K)
978  IF ( flreq(j,k) ) THEN
979  !
980  ! Set array dimension flags
981  flone = .false.
982  fltwo = .false.
983  fldir = .false.
984  fltri = .false.
985  flprt = .false.
986  !
987 #ifdef W3_T
988  WRITE (ndst,9020) idout(j,k)
989 #endif
990  !
991  ! 2.a Set output arrays and parameters
992  !
993  ! Water depth
994  !
995  IF ( j.EQ.1 .AND. k.EQ.1 ) THEN
996  flone = .true.
997  CALL w3s2xy ( nsea, nsea, nx, ny, dw(1:nsea) &
998  , mapsf, x1 )
999  !
1000  ! Current
1001  !
1002  ELSE IF ( j.EQ.1 .AND. k.EQ.2 ) THEN
1003  fltwo = .true.
1004  CALL w3s2xy ( nsea, nsea, nx, ny, cx(1:nsea) &
1005  , mapsf, xx )
1006  CALL w3s2xy ( nsea, nsea, nx, ny, cy(1:nsea) &
1007  , mapsf, xy )
1008  !
1009  ! Wind speed
1010  !
1011  ELSE IF ( j.EQ.1 .AND. k.EQ.3 ) THEN
1012  fltwo = .true.
1013  CALL w3s2xy ( nsea, nsea, nx, ny, ua(1:nsea) &
1014  , mapsf, xx )
1015  CALL w3s2xy ( nsea, nsea, nx, ny, ud(1:nsea) &
1016  , mapsf, xy )
1017  !
1018  ! Air-sea temp. dif.
1019  !
1020  ELSE IF ( j.EQ.1 .AND. k.EQ.4 ) THEN
1021  flone = .true.
1022  CALL w3s2xy ( nsea, nsea, nx, ny, as(1:nsea) &
1023  , mapsf, x1 )
1024  !
1025  ! Water level
1026  !
1027  ELSE IF ( j.EQ.1 .AND. k.EQ.5 ) THEN
1028  flone = .true.
1029  CALL w3s2xy ( nsea, nsea, nx, ny, wlv , mapsf, x1 )
1030  !
1031  ! Ice concentration
1032  !
1033  ELSE IF ( j.EQ.1 .AND. k.EQ.6 ) THEN
1034  flone = .true.
1035  CALL w3s2xy ( nsea, nsea, nx, ny, ice , mapsf, x1 )
1036  !
1037  ! Atmospheric momentum
1038  !
1039  ELSE IF ( j.EQ.1 .AND. k.EQ.8 ) THEN
1040  fltwo = .true.
1041  CALL w3s2xy ( nsea, nsea, nx, ny, taua(1:nsea) &
1042  , mapsf, xx )
1043  CALL w3s2xy ( nsea, nsea, nx, ny, tauadir(1:nsea) &
1044  , mapsf, xy )
1045  !
1046  ! Air density
1047  !
1048  ELSE IF ( j.EQ.1 .AND. k.EQ.9 ) THEN
1049  flone = .true.
1050  CALL w3s2xy ( nsea, nsea, nx, ny, rhoair, mapsf, x1 )
1051  !
1052  ! Ice thickness
1053  !
1054 #ifdef W3_IS2
1055  ELSE IF ( j.EQ.1 .AND. k.EQ.11 ) THEN
1056  flone = .true.
1057  CALL w3s2xy (nsea, nsea, nx, ny, iceh , mapsf, x1 )
1058 #endif
1059  !
1060  ! Average sea ice floe diameter
1061  !
1062 #ifdef W3_IS2
1063  ELSE IF ( j.EQ.1 .AND. k.EQ.12) THEN
1064  flone = .true.
1065  CALL w3s2xy (nsea, nsea, nx, ny, icef , mapsf, x1 )
1066 #endif
1067  !
1068  !
1069  ! Significant wave height
1070  !
1071  ELSE IF ( j.EQ.2 .AND. k.EQ.1 ) THEN
1072  flone = .true.
1073  CALL w3s2xy ( nsea, nsea, nx, ny, hs , mapsf, x1 )
1074  !
1075  ! Mean wave length
1076  !
1077  ELSE IF ( j.EQ.2 .AND. k.EQ.2 ) THEN
1078  flone = .true.
1079  CALL w3s2xy ( nsea, nsea, nx, ny, wlm , mapsf, x1 )
1080  !
1081  ! Mean zero-crossing wave period T02
1082  !
1083  ELSE IF ( j.EQ.2 .AND. k.EQ.3 ) THEN
1084  flone = .true.
1085  CALL w3s2xy ( nsea, nsea, nx, ny, t02 , mapsf, x1 )
1086  !
1087  ! Mean wave period Tm
1088  !
1089  ELSE IF ( j.EQ.2 .AND. k.EQ.4 ) THEN
1090  flone = .true.
1091  CALL w3s2xy ( nsea, nsea, nx, ny, t0m1 , mapsf, x1 )
1092  !
1093  ! Mean energy wave period Te
1094  !
1095  ELSE IF ( j.EQ.2 .AND. k.EQ.5 ) THEN
1096  flone = .true.
1097  CALL w3s2xy ( nsea, nsea, nx, ny, t01 , mapsf, x1 )
1098  !
1099  ! Peak period
1100  !
1101  ELSE IF ( j.EQ.2 .AND. k.EQ.6 ) THEN
1102  flone = .true.
1103  CALL w3s2xy ( nsea, nsea, nx, ny, fp0 , mapsf, x1 )
1104  !
1105  ! Mean wave direction
1106  !
1107  ELSE IF ( j.EQ.2 .AND. k.EQ.7 ) THEN
1108  flone = .true.
1109  CALL w3s2xy ( nsea, nsea, nx, ny, thm , mapsf, x1 )
1110  !
1111  ! Directional spread
1112  !
1113  ELSE IF ( j.EQ.2 .AND. k.EQ.8 ) THEN
1114  flone = .true.
1115  CALL w3s2xy ( nsea, nsea, nx, ny, ths , mapsf, x1 )
1116  !
1117  ! Peak direction
1118  !
1119  ELSE IF ( j.EQ.2 .AND. k.EQ.9 ) THEN
1120  flone = .true.
1121  CALL w3s2xy ( nsea, nsea, nx, ny, thp0 , mapsf, x1 )
1122  !
1123  ! Dominant wave breaking probability
1124  !
1125  ELSE IF ( j.EQ.2 .AND. k.EQ.17 ) THEN
1126  flone = .true.
1127  CALL w3s2xy ( nsea, nsea, nx, ny, wbt , mapsf, x1 )
1128  !
1129  ! Partitioned wave heights
1130  !
1131  ELSE IF ( j.EQ.4 .AND. k.EQ.1 ) THEN
1132  flprt = .true.
1133  DO i=0, noswll
1134  CALL w3s2xy ( nsea, nsea, nx, ny, phs(:,i), &
1135  mapsf, xa(:,:,i) )
1136  END DO
1137  !
1138  ! Partitioned peak period
1139  !
1140  ELSE IF ( j.EQ.4 .AND. k.EQ.2 ) THEN
1141  flprt = .true.
1142  DO i=0, noswll
1143  CALL w3s2xy ( nsea, nsea, nx, ny, ptp(:,i), &
1144  mapsf, xa(:,:,i) )
1145  END DO
1146  !
1147  ! Partitioned wave leangths (peak)
1148  !
1149  ELSE IF ( j.EQ.4 .AND. k.EQ.3 ) THEN
1150  flprt = .true.
1151  DO i=0, noswll
1152  CALL w3s2xy ( nsea, nsea, nx, ny, plp(:,i), &
1153  mapsf, xa(:,:,i) )
1154  END DO
1155  !
1156  ! Partitioned directions
1157  !
1158  ELSE IF ( j.EQ.4 .AND. k.EQ.4 ) THEN
1159  flprt = .true.
1160  DO i=0, noswll
1161  CALL w3s2xy ( nsea, nsea, nx, ny, pdir(:,i), &
1162  mapsf, xa(:,:,i) )
1163  END DO
1164  !
1165  ! Partitioned direstional spread
1166  !
1167  ELSE IF ( j.EQ.4 .AND. k.EQ.5 ) THEN
1168  flprt = .true.
1169  DO i=0, noswll
1170  CALL w3s2xy ( nsea, nsea, nx, ny, psi(:,i), &
1171  mapsf, xa(:,:,i) )
1172  END DO
1173  !
1174  ! Partitioned wind sea fraction
1175  !
1176  ELSE IF ( j.EQ.4 .AND. k.EQ.6 ) THEN
1177  flprt = .true.
1178  DO i=0, noswll
1179  CALL w3s2xy ( nsea, nsea, nx, ny, pws(:,i), &
1180  mapsf, xa(:,:,i) )
1181  END DO
1182  !
1183  ! Partitioned peak direction
1184  !
1185  ELSE IF ( j.EQ.4 .AND. k.EQ.7 ) THEN
1186  flprt = .true.
1187  DO i=0, noswll
1188  CALL w3s2xy ( nsea, nsea, nx, ny, pthp0(:,i), &
1189  mapsf, xa(:,:,i) )
1190  END DO
1191  !
1192  ! Partitioned peakedness
1193  !
1194  ELSE IF ( j.EQ.4 .AND. k.EQ.8 ) THEN
1195  flprt = .true.
1196  DO i=0, noswll
1197  CALL w3s2xy ( nsea, nsea, nx, ny, pqp(:,i), &
1198  mapsf, xa(:,:,i) )
1199  END DO
1200  !
1201  !
1202  ! Partitioned peak enhancement factor
1203  !
1204  ELSE IF ( j.EQ.4 .AND. k.EQ.9 ) THEN
1205  flprt = .true.
1206  DO i=0, noswll
1207  CALL w3s2xy ( nsea, nsea, nx, ny, ppe(:,i), &
1208  mapsf, xa(:,:,i) )
1209  END DO
1210  !
1211  !
1212  ! Partitioned gaussian frequency spread
1213  !
1214  ELSE IF ( j.EQ.4 .AND. k.EQ.10 ) THEN
1215  flprt = .true.
1216  DO i=0, noswll
1217  CALL w3s2xy ( nsea, nsea, nx, ny, pgw(:,i), &
1218  mapsf, xa(:,:,i) )
1219  END DO
1220  !
1221  !
1222  ! Partitioned spectral width
1223  !
1224  ELSE IF ( j.EQ.4 .AND. k.EQ.11 ) THEN
1225  flprt = .true.
1226  DO i=0, noswll
1227  CALL w3s2xy ( nsea, nsea, nx, ny, psw(:,i), &
1228  mapsf, xa(:,:,i) )
1229  END DO
1230  !
1231  !
1232  ! Partitioned mean energy period (-1)
1233  !
1234  ELSE IF ( j.EQ.4 .AND. k.EQ.12 ) THEN
1235  flprt = .true.
1236  DO i=0, noswll
1237  CALL w3s2xy ( nsea, nsea, nx, ny, ptm1(:,i), &
1238  mapsf, xa(:,:,i) )
1239  END DO
1240  !
1241  !
1242  ! Partitioned mean wave period (+1)
1243  !
1244  ELSE IF ( j.EQ.4 .AND. k.EQ.13 ) THEN
1245  flprt = .true.
1246  DO i=0, noswll
1247  CALL w3s2xy ( nsea, nsea, nx, ny, pt1(:,i), &
1248  mapsf, xa(:,:,i) )
1249  END DO
1250  !
1251  !
1252  ! Partitioned mean wave period (+2)
1253  !
1254  ELSE IF ( j.EQ.4 .AND. k.EQ.14 ) THEN
1255  flprt = .true.
1256  DO i=0, noswll
1257  CALL w3s2xy ( nsea, nsea, nx, ny, pt2(:,i), &
1258  mapsf, xa(:,:,i) )
1259  END DO
1260  !
1261  !
1262  ! Partitioned peak density
1263  !
1264  ELSE IF ( j.EQ.4 .AND. k.EQ.15 ) THEN
1265  flprt = .true.
1266  DO i=0, noswll
1267  CALL w3s2xy ( nsea, nsea, nx, ny, pep(:,i), &
1268  mapsf, xa(:,:,i) )
1269  END DO
1270  !
1271  ! Total wind sea fraction
1272  !
1273  ELSE IF ( j.EQ.4 .AND. k.EQ.16 ) THEN
1274  flone = .true.
1275  CALL w3s2xy ( nsea, nsea, nx, ny, pwst ,mapsf, x1 )
1276  !
1277  ! Number of partitions
1278  !
1279  ELSE IF ( j.EQ.4 .AND. k.EQ.17 ) THEN
1280  flone = .true.
1281  CALL w3s2xy ( nsea, nsea, nx, ny, pnr , mapsf, x1 )
1282  !
1283  ! Friction velocity
1284  !
1285  ELSE IF ( j.EQ.5 .AND. k.EQ.1 ) THEN
1286  fltwo = .true.
1287  CALL w3s2xy ( nsea, nsea, nx, ny, ust(1:nsea) &
1288  , mapsf, xx )
1289  CALL w3s2xy ( nsea, nsea, nx, ny, ustdir(1:nsea) &
1290  , mapsf, xy )
1291  !
1292  ! Charnock parameter
1293  !
1294  ELSE IF ( j.EQ.5 .AND. k.EQ.2 ) THEN
1295  flone = .true.
1296  CALL w3s2xy ( nsea, nsea, nx, ny, charn , mapsf, x1 )
1297  !
1298  ! Mean energy flux
1299  !
1300  ELSE IF ( j.EQ.5 .AND. k.EQ.3 ) THEN
1301  flone = .true.
1302  CALL w3s2xy ( nsea, nsea, nx, ny, cge , mapsf, x1 )
1303  !
1304  ! Air-sea energy flux
1305  !
1306  ELSE IF ( j.EQ.5 .AND. k.EQ.4 ) THEN
1307  flone = .true.
1308  CALL w3s2xy ( nsea, nsea, nx, ny, phiaw , mapsf, x1 )
1309  !
1310  ! Net supported wave stress
1311  !
1312  ELSE IF ( j.EQ.5 .AND. k.EQ.5 ) THEN
1313  fltwo = .true.
1314  CALL w3s2xy ( nsea, nsea, nx, ny, tauwix, mapsf, xx )
1315  CALL w3s2xy ( nsea, nsea, nx, ny, tauwiy, mapsf, xy )
1316  !
1317  ! Net supported wave stress
1318  !
1319  ELSE IF ( j.EQ.5 .AND. k.EQ.6 ) THEN
1320  fltwo = .true.
1321  CALL w3s2xy ( nsea, nsea, nx, ny, tauwnx, mapsf, xx )
1322  CALL w3s2xy ( nsea, nsea, nx, ny, tauwny, mapsf, xy )
1323  !
1324  ! Peakedness
1325  !
1326  ELSE IF ( j.EQ.8 .AND. k.EQ.5 ) THEN
1327  flone = .true.
1328  CALL w3s2xy ( nsea, nsea, nx, ny, qp , mapsf, x1 )
1329  !
1330  ! Average source term time step
1331  !
1332  ELSE IF ( j.EQ.9 .AND. k.EQ.1 ) THEN
1333  flone = .true.
1334  DO isea=1, nsea
1335  IF ( dtdyn(isea) .NE. undef ) &
1336  dtdyn(isea) = dtdyn(isea) / 60.
1337  END DO
1338  CALL w3s2xy ( nsea, nsea, nx, ny, dtdyn , mapsf, x1 )
1339  !
1340  ! Cut-off frequency
1341  !
1342  ELSE IF ( j.EQ.9 .AND. k.EQ.2 ) THEN
1343  flone = .true.
1344  CALL w3s2xy ( nsea, nsea, nx, ny, fcut , mapsf, x1 )
1345  !
1346  ! Max CFL step for XY propagation
1347  !
1348  ELSE IF ( j.EQ.9 .AND. k.EQ.3 ) THEN
1349  flone = .true.
1350  CALL w3s2xy ( nsea, nsea, nx, ny, cflxymax , mapsf, x1 )
1351  !
1352  ! Max CFL step for directional propagation
1353  !
1354  ELSE IF ( j.EQ.9 .AND. k.EQ.4 ) THEN
1355  flone = .true.
1356  CALL w3s2xy ( nsea, nsea, nx, ny, cflthmax , mapsf, x1 )
1357  !!
1358  !! Not yet coded onto control file list (section 6 above)
1359  !
1360  ! Near-bottom amplitude
1361  !
1362  ELSE IF ( j.EQ.7 .AND. k.EQ.1 ) THEN
1363  fltwo = .true.
1364  CALL w3s2xy ( nsea, nsea, nx, ny, aba , mapsf, xx )
1365  CALL w3s2xy ( nsea, nsea, nx, ny, abd , mapsf, xy )
1366  !
1367  ! Near-bottom velocity
1368  !
1369  ELSE IF ( j.EQ.7 .AND. k.EQ.2 ) THEN
1370  fltwo = .true.
1371  CALL w3s2xy ( nsea, nsea, nx, ny, uba , mapsf, xx )
1372  CALL w3s2xy ( nsea, nsea, nx, ny, ubd , mapsf, xy )
1373  !
1374  ! Radiation stresses
1375  !
1376  ELSE IF ( j.EQ.6 .AND. k.EQ.1 ) THEN
1377  fltwo = .true.
1378  CALL w3s2xy ( nsea, nsea, nx, ny, sxx , mapsf, x1 )
1379  CALL w3s2xy ( nsea, nsea, nx, ny, syy , mapsf, xx )
1380  CALL w3s2xy ( nsea, nsea, nx, ny, sxy , mapsf, xy )
1381  !
1382  ! User defined #1
1383  !
1384  ELSE IF ( j.EQ.10 .AND. k.EQ.1 ) THEN
1385  flone = .true.
1386  CALL w3s2xy ( nsea, nsea, nx, ny, usero(:,1) &
1387  , mapsf, x1 )
1388  !
1389  ! User defined #2
1390  !
1391  ELSE IF ( j.EQ.10 .AND. k.EQ.2 ) THEN
1392  flone = .true.
1393  CALL w3s2xy ( nsea, nsea, nx, ny, usero(:,2) &
1394  , mapsf, x1 )
1395  !
1396  ELSE
1397  WRITE (ndse,990) j, k
1398  WRITE (ndse,999)
1399  CALL extcde ( 1 )
1400  !
1401  END IF
1402  !
1403  ! 3 Perform output
1404  !
1405  ! 3D array fields
1406  !
1407  IF ( fltri ) THEN
1408  WRITE (ndsdat) &
1409  ((x1(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1410  WRITE (ndsdat) &
1411  ((xx(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1412  WRITE (ndsdat) &
1413  ((xy(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1414  !
1415  ! Partitions parameters
1416  !
1417  ELSE IF ( flprt ) THEN
1418  DO i=0, noswll
1419  WRITE (ndsdat) &
1420  ((xa(ix,iy,i),ix=ix0,ixn),iy=iy0,iyn)
1421  END DO
1422  !
1423  ! 2D array fields
1424  !
1425  ELSE IF ( fltwo ) THEN
1426  WRITE (ndsdat) &
1427  ((xx(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1428  WRITE (ndsdat) &
1429  ((xy(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1430  !
1431  ! Scalars
1432  !
1433  ELSE IF ( flone ) THEN
1434  WRITE (ndsdat) &
1435  ((x1(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1436  END IF
1437  !
1438  ! ... End of fields loop
1439  !
1440  END IF
1441  END DO
1442  END DO
1443  !
1444  RETURN
1445  !
1446  ! Error escape locations
1447  !
1448  ! Formats
1449  !
1450 940 FORMAT (1x,i8,3i3.2,2x,4e12.4)
1451 950 FORMAT (1x,a13,i9.8,i7.6,2(2f8.2,i4), &
1452  1x,a4,f8.4,1x,a10,2i2,1x,a11,i4)
1453 951 FORMAT (1x,2f10.5,2i8)
1454  !
1455 990 FORMAT (/' *** WAVEWATCH III ERROR IN W3EXGO :'/ &
1456  ' GROUP',i2,' PARAMETER',i3,' NOT LISTED ' )
1457 999 FORMAT (/' *** WAVEWATCH III ERROR IN GXEXGO :'/ &
1458  ' PLEASE UPDATE FIELDS !!! '/)
1459  !
1460 #ifdef W3_T
1461 9000 FORMAT (' TEST GXEXGO : FLAGS :',40l2)
1462 9020 FORMAT (' TEST GXEXGO : OUTPUT FIELD : ',a)
1463 #endif
1464  !/
1465  !/ End of GXEXGO ----------------------------------------------------- /
1466  !/
1467  END SUBROUTINE gxexgo
1468  !/
1469  !/ End of GXOUTF ----------------------------------------------------- /
1470  !/
1471 END PROGRAM gxoutf
w3adatmd::pt2
real, dimension(:,:), pointer pt2
Definition: w3adatmd.F90:597
w3adatmd::psw
real, dimension(:,:), pointer psw
Definition: w3adatmd.F90:597
w3adatmd::hcmaxe
real, dimension(:), pointer hcmaxe
Definition: w3adatmd.F90:587
w3timemd::dsec21
real function dsec21(TIME1, TIME2)
Definition: w3timemd.F90:333
w3servmd::nextln
subroutine nextln(CHCKC, NDSI, NDSE)
Definition: w3servmd.F90:222
w3wdatmd::iceh
real, dimension(:), pointer iceh
Definition: w3wdatmd.F90:183
w3adatmd::charn
real, dimension(:), pointer charn
Definition: w3adatmd.F90:603
w3adatmd::dtdyn
real, dimension(:), pointer dtdyn
Definition: w3adatmd.F90:620
w3adatmd::as
real, dimension(:), pointer as
Definition: w3adatmd.F90:584
w3adatmd
Define data structures to set up wave model auxiliary data for several models simultaneously.
Definition: w3adatmd.F90:26
w3adatmd::hcmaxd
real, dimension(:), pointer hcmaxd
Definition: w3adatmd.F90:587
w3adatmd::ussy
real, dimension(:), pointer ussy
Definition: w3adatmd.F90:607
w3adatmd::pep
real, dimension(:,:), pointer pep
Definition: w3adatmd.F90:597
w3adatmd::abd
real, dimension(:), pointer abd
Definition: w3adatmd.F90:614
w3wdatmd
Define data structures to set up wave model dynamic data for several models simultaneously.
Definition: w3wdatmd.F90:18
w3adatmd::stmaxe
real, dimension(:), pointer stmaxe
Definition: w3adatmd.F90:587
w3adatmd::t02
real, dimension(:), pointer t02
Definition: w3adatmd.F90:587
w3adatmd::us3d
real, dimension(:,:), pointer us3d
Definition: w3adatmd.F90:612
w3adatmd::cflxymax
real, dimension(:), pointer cflxymax
Definition: w3adatmd.F90:620
w3adatmd::tusx
real, dimension(:), pointer tusx
Definition: w3adatmd.F90:607
w3adatmd::fcut
real, dimension(:), pointer fcut
Definition: w3adatmd.F90:620
w3adatmd::tusy
real, dimension(:), pointer tusy
Definition: w3adatmd.F90:607
w3adatmd::ptp
real, dimension(:,:), pointer ptp
Definition: w3adatmd.F90:597
w3adatmd::dw
real, dimension(:), pointer dw
Definition: w3adatmd.F90:584
w3wdatmd::icef
real, dimension(:), pointer icef
Definition: w3wdatmd.F90:183
w3adatmd::t01
real, dimension(:), pointer t01
Definition: w3adatmd.F90:587
w3adatmd::cge
real, dimension(:), pointer cge
Definition: w3adatmd.F90:603
w3wdatmd::wlv
real, dimension(:), pointer wlv
Definition: w3wdatmd.F90:183
w3odatmd::ngrpp
integer, parameter ngrpp
Definition: w3odatmd.F90:324
w3adatmd::pdir
real, dimension(:,:), pointer pdir
Definition: w3adatmd.F90:597
w3wdatmd::time
integer, dimension(:), pointer time
Definition: w3wdatmd.F90:172
w3adatmd::thp0
real, dimension(:), pointer thp0
Definition: w3adatmd.F90:587
w3adatmd::phs
real, dimension(:,:), pointer phs
Definition: w3adatmd.F90:597
w3adatmd::hs
real, dimension(:), pointer hs
Definition: w3adatmd.F90:587
w3adatmd::uba
real, dimension(:), pointer uba
Definition: w3adatmd.F90:614
w3odatmd::fnmpre
character(len=80) fnmpre
Definition: w3odatmd.F90:330
w3adatmd::pqp
real, dimension(:,:), pointer pqp
Definition: w3adatmd.F90:597
w3adatmd::tauwix
real, dimension(:), pointer tauwix
Definition: w3adatmd.F90:603
w3adatmd::pthp0
real, dimension(:,:), pointer pthp0
Definition: w3adatmd.F90:597
w3gdatmd::w3setg
subroutine w3setg(IMOD, NDSE, NDST)
Definition: w3gdatmd.F90:2152
w3adatmd::tauwiy
real, dimension(:), pointer tauwiy
Definition: w3adatmd.F90:603
w3adatmd::taubbl
real, dimension(:,:), pointer taubbl
Definition: w3adatmd.F90:614
w3odatmd::ndse
integer, pointer ndse
Definition: w3odatmd.F90:456
w3wdatmd::berg
real, dimension(:), pointer berg
Definition: w3wdatmd.F90:183
w3adatmd::w3seta
subroutine w3seta(IMOD, NDSE, NDST)
Select one of the WAVEWATCH III grids / models.
Definition: w3adatmd.F90:2645
w3adatmd::tauwny
real, dimension(:), pointer tauwny
Definition: w3adatmd.F90:603
w3wdatmd::w3ndat
subroutine w3ndat(NDSE, NDST)
Set up the number of grids to be used.
Definition: w3wdatmd.F90:210
w3adatmd::phiaw
real, dimension(:), pointer phiaw
Definition: w3adatmd.F90:603
w3adatmd::pws
real, dimension(:,:), pointer pws
Definition: w3adatmd.F90:597
w3adatmd::plp
real, dimension(:,:), pointer plp
Definition: w3adatmd.F90:597
w3adatmd::phibbl
real, dimension(:), pointer phibbl
Definition: w3adatmd.F90:614
w3adatmd::cflthmax
real, dimension(:), pointer cflthmax
Definition: w3adatmd.F90:620
w3adatmd::psi
real, dimension(:,:), pointer psi
Definition: w3adatmd.F90:597
w3adatmd::tpms
real, dimension(:), pointer tpms
Definition: w3adatmd.F90:607
w3servmd
Definition: w3servmd.F90:3
w3odatmd::flogrd
logical, dimension(:,:), pointer flogrd
Definition: w3odatmd.F90:478
w3adatmd::ths
real, dimension(:), pointer ths
Definition: w3adatmd.F90:587
w3adatmd::bedforms
real, dimension(:,:), pointer bedforms
Definition: w3adatmd.F90:614
w3timemd::tick21
subroutine tick21(TIME, DTIME)
Definition: w3timemd.F90:84
w3adatmd::ud
real, dimension(:), pointer ud
Definition: w3adatmd.F90:584
w3adatmd::hmaxd
real, dimension(:), pointer hmaxd
Definition: w3adatmd.F90:587
w3adatmd::pwst
real, dimension(:), pointer pwst
Definition: w3adatmd.F90:597
w3wdatmd::w3setw
subroutine w3setw(IMOD, NDSE, NDST)
Select one of the WAVEWATCH III grids / models.
Definition: w3wdatmd.F90:660
w3odatmd::noge
integer, dimension(nogrp) noge
Definition: w3odatmd.F90:326
w3odatmd::w3seto
subroutine w3seto(IMOD, NDSERR, NDSTST)
Definition: w3odatmd.F90:1523
w3adatmd::sxy
real, dimension(:), pointer sxy
Definition: w3adatmd.F90:607
w3timemd::stme21
subroutine stme21(TIME, DTME21)
Definition: w3timemd.F90:682
w3adatmd::tauwnx
real, dimension(:), pointer tauwnx
Definition: w3adatmd.F90:603
w3odatmd
Definition: w3odatmd.F90:3
w3adatmd::wbt
real, dimension(:), pointer wbt
Definition: w3adatmd.F90:587
w3adatmd::bhd
real, dimension(:), pointer bhd
Definition: w3adatmd.F90:607
w3adatmd::w3naux
subroutine w3naux(NDSE, NDST)
Set up the number of grids to be used.
Definition: w3adatmd.F90:704
w3adatmd::cy
real, dimension(:), pointer cy
Definition: w3adatmd.F90:584
w3adatmd::pnr
real, dimension(:), pointer pnr
Definition: w3adatmd.F90:597
w3adatmd::taua
real, dimension(:), pointer taua
Definition: w3adatmd.F90:584
w3adatmd::hmaxe
real, dimension(:), pointer hmaxe
Definition: w3adatmd.F90:587
w3adatmd::pt1
real, dimension(:,:), pointer pt1
Definition: w3adatmd.F90:597
w3adatmd::wlm
real, dimension(:), pointer wlm
Definition: w3adatmd.F90:587
w3iogrmd::w3iogr
subroutine w3iogr(INXOUT, NDSM, IMOD, FEXT ifdef W3_ASCII
Reading and writing of the model definition file.
Definition: w3iogrmd.F90:117
w3adatmd::cflkmax
real, dimension(:), pointer cflkmax
Definition: w3adatmd.F90:620
w3iogomd::w3iogo
subroutine w3iogo(INXOUT, NDSOG, IOTST, IMOD ifdef W3_ASCII
Read/write gridded output.
Definition: w3iogomd.F90:2396
w3adatmd::phioc
real, dimension(:), pointer phioc
Definition: w3adatmd.F90:607
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
w3adatmd::wn
real, dimension(:,:), pointer wn
Definition: w3adatmd.F90:575
w3adatmd::qp
real, dimension(:), pointer qp
Definition: w3adatmd.F90:587
w3iogomd
Gridded output of mean wave parameters.
Definition: w3iogomd.F90:15
w3adatmd::stmaxd
real, dimension(:), pointer stmaxd
Definition: w3adatmd.F90:587
w3servmd::strace
subroutine strace(IENT, SNAME)
Definition: w3servmd.F90:148
w3odatmd::ndso
integer, pointer ndso
Definition: w3odatmd.F90:456
w3wdatmd::ice
real, dimension(:), pointer ice
Definition: w3wdatmd.F90:183
w3gdatmd::w3nmod
subroutine w3nmod(NUMBER, NDSE, NDST, NAUX)
Definition: w3gdatmd.F90:1433
w3adatmd::whitecap
real, dimension(:,:), pointer whitecap
Definition: w3adatmd.F90:603
w3adatmd::tauox
real, dimension(:), pointer tauox
Definition: w3adatmd.F90:607
w3adatmd::p2sms
real, dimension(:,:), pointer p2sms
Definition: w3adatmd.F90:612
w3odatmd::idout
character(len=20), dimension(nogrp, ngrpp) idout
Definition: w3odatmd.F90:329
w3adatmd::prms
real, dimension(:), pointer prms
Definition: w3adatmd.F90:607
w3adatmd::usero
real, dimension(:,:), pointer usero
Definition: w3adatmd.F90:623
w3iogomd::w3readflgrd
subroutine w3readflgrd(NDSI, NDSO, NDSS, NDSEN, COMSTR, FLG1D, FLG2D, IAPROC, NAPOUT, IERR)
Fills in FLG1D and FLG2D arrays from ASCII input file.
Definition: w3iogomd.F90:336
w3adatmd::mssy
real, dimension(:), pointer mssy
Definition: w3adatmd.F90:617
w3odatmd::ndst
integer, pointer ndst
Definition: w3odatmd.F90:456
w3wdatmd::ust
real, dimension(:), pointer ust
Definition: w3wdatmd.F90:183
constants
Define some much-used constants for global use (all defined as PARAMETER).
Definition: constants.F90:20
w3adatmd::ua
real, dimension(:), pointer ua
Definition: w3adatmd.F90:584
w3adatmd::tauoy
real, dimension(:), pointer tauoy
Definition: w3adatmd.F90:607
w3odatmd::nogrp
integer, parameter nogrp
Definition: w3odatmd.F90:323
gxexgo
subroutine gxexgo(NX, NY, NSEA)
Perform actual output for GrADS postprocessing.
Definition: gx_outf.F90:786
w3adatmd::fp0
real, dimension(:), pointer fp0
Definition: w3adatmd.F90:587
w3gdatmd
Definition: w3gdatmd.F90:16
w3adatmd::ussx
real, dimension(:), pointer ussx
Definition: w3adatmd.F90:607
w3adatmd::mssx
real, dimension(:), pointer mssx
Definition: w3adatmd.F90:617
w3adatmd::tauadir
real, dimension(:), pointer tauadir
Definition: w3adatmd.F90:584
w3servmd::extcde
subroutine extcde(IEXIT, UNIT, MSG, FILE, LINE, COMM)
Definition: w3servmd.F90:736
w3odatmd::w3nout
subroutine w3nout(NDSERR, NDSTST)
Definition: w3odatmd.F90:561
w3adatmd::mscy
real, dimension(:), pointer mscy
Definition: w3adatmd.F90:617
w3wdatmd::rhoair
real, dimension(:), pointer rhoair
Definition: w3wdatmd.F90:183
w3servmd::itrace
subroutine itrace(NDS, NMAX)
Definition: w3servmd.F90:91
w3wdatmd::ustdir
real, dimension(:), pointer ustdir
Definition: w3wdatmd.F90:183
w3adatmd::ptm1
real, dimension(:,:), pointer ptm1
Definition: w3adatmd.F90:597
w3odatmd::noswll
integer, pointer noswll
Definition: w3odatmd.F90:460
w3adatmd::thm
real, dimension(:), pointer thm
Definition: w3adatmd.F90:587
w3adatmd::mscx
real, dimension(:), pointer mscx
Definition: w3adatmd.F90:617
w3adatmd::ppe
real, dimension(:,:), pointer ppe
Definition: w3adatmd.F90:597
w3adatmd::cx
real, dimension(:), pointer cx
Definition: w3adatmd.F90:584
w3adatmd::pgw
real, dimension(:,:), pointer pgw
Definition: w3adatmd.F90:597
w3timemd
Definition: w3timemd.F90:3
constants::undef
real undef
UNDEF Value for undefined variable in output.
Definition: constants.F90:84
w3servmd::w3s2xy
subroutine w3s2xy(NSEA, MSEA, MX, MY, S, MAPSF, XY)
Definition: w3servmd.F90:337
w3adatmd::t0m1
real, dimension(:), pointer t0m1
Definition: w3adatmd.F90:587
w3adatmd::aba
real, dimension(:), pointer aba
Definition: w3adatmd.F90:614
w3adatmd::syy
real, dimension(:), pointer syy
Definition: w3adatmd.F90:607
gxoutf
program gxoutf
Generate GrADS input files from raw WAVEWATCH data file.
Definition: gx_outf.F90:35
w3adatmd::ubd
real, dimension(:), pointer ubd
Definition: w3adatmd.F90:614
w3adatmd::sxx
real, dimension(:), pointer sxx
Definition: w3adatmd.F90:607