WAVEWATCH III  beta 0.0.1
w3iorsmd.F90
Go to the documentation of this file.
1 
6 
7 #include "w3macros.h"
8 !/ ------------------------------------------------------------------- /
14 MODULE w3iorsmd
15  !/
16  !/ +-----------------------------------+
17  !/ | WAVEWATCH III NOAA/NCEP |
18  !/ | H. L. Tolman |
19  !/ | FORTRAN 2003 |
20  !/ | Last update : 22-Mar-2021 |
21  !/ +-----------------------------------+
22  !/
23  !/ See subroutine for update log.
24  !/
25  ! 1. Purpose :
26  !
27  ! Read/write restart files.
28  !
29  ! 2. Variables and types :
30  !
31  ! Name Type Scope Description
32  ! ----------------------------------------------------------------
33  ! VERINI C*10 Private Restart file version number.
34  ! IDSTR C*26 Private Restart file UD string.
35  ! ----------------------------------------------------------------
36  !
37  ! 3. Subroutines and functions :
38  !
39  ! Name Type Scope Description
40  ! ----------------------------------------------------------------
41  ! W3IORS Subr. Public Read/write restart files.
42  ! ----------------------------------------------------------------
43  !
44  ! 4. Subroutines and functions used :
45  !
46  ! Name Type Module Description
47  ! ----------------------------------------------------------------
48  ! W3SETO, W3SETG, W3SETW, W3DIMW
49  ! Subr. W3xDATMD Manage data structures.
50  ! STRACE Subr. W3SERVMD Subroutine tracing. (!/S)
51  ! EXTCDE Subr. W3SERVMD Abort program with exit code.
52  ! MPI_STARTALL, MPI_WAITALL (!/MPI)
53  ! Subr. MPI persistent communication routines
54  ! ----------------------------------------------------------------
55  !
56  ! 5. Remarks :
57  !
58  ! 6. Switches :
59  !
60  ! See also routine.
61  !
62  ! 7. Source code :
63  !
64  !/ ------------------------------------------------------------------- /
65  PUBLIC
66  !/
67  ! Add fields needed for OASIS coupling in restart
68  LOGICAL :: oarst
69  !/
70  !/ Private parameter statements (ID strings)
71  !/
72  CHARACTER(LEN=10), PARAMETER, PRIVATE :: verini = '2024-04-26'
73  CHARACTER(LEN=26), PARAMETER, PRIVATE :: &
74  idstr = 'WAVEWATCH III RESTART FILE'
75  !/
76 CONTAINS
77  !/ ------------------------------------------------------------------- /
112  SUBROUTINE w3iors ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT )
113  !/
114  !/ +-----------------------------------+
115  !/ | WAVEWATCH III NOAA/NCEP |
116  !/ | H. L. Tolman |
117  !/ | FORTRAN 90 |
118  !/ | Last update : 22-Mar-2021 |
119  !/ +-----------------------------------+
120  !/
121  !/ 12-Jan-1999 : Final FORTRAN 77 ( version 1.18 )
122  !/ 27-Dec-1999 : Upgrade to FORTRAN 90 ( version 2.00 )
123  !/ 30-Apr-2002 : Add ice for transparencies. ( version 2.20 )
124  !/ 13-Nov-2002 : Add stress as vector. ( version 3.00 )
125  !/ 19-Aug-2003 : Output server options added. ( version 3.04 )
126  !/ 09-Dec-2004 : Multiple grid version. ( version 3.06 )
127  !/ 24-Jun-2005 : Adding MAPST2. ( version 3.07 )
128  !/ 27-Jun-2006 : Adding file name preamble. ( version 3.09 )
129  !/ 05-Jul-2006 : Consolidate stress arrays. ( version 3.09 )
130  !/ 08-May-2007 : Starting from calm as an option. ( version 3.11 )
131  !/ 17-May-2007 : Adding NTPROC/NAPROC separation. ( version 3.11 )
132  !/ 22-Jun-2007 : Dedicated output processes. ( version 3.11 )
133  !/ 15-Apr-2008 : Clean up for distribution. ( version 3.14 )
134  !/ 21-Apr-2008 : Remove PGI bug internal files. ( version 3.14 )
135  !/ 29-May-2009 : Preparing distribution version. ( version 3.14 )
136  !/ 30-Oct-2009 : Output file name with 3 digit id. ( version 3.14 )
137  !/ (W. E. Rogers, NRL)
138  !/ 14-Nov-2013 : Remove cold start init. UST(DIR). ( version 4.13 )
139  !/ 31-May-2016 : Optimize restart file size for un- ( version 5.10 )
140  !/ structured grid and restart read.
141  !/ (M. Ward, NCI, S. Zieger, BOM)
142  !/ 10-Mar-2017 : File access mode changed to 'STREAM'( version 6.02 )
143  !/ (S. Zieger, BOM)
144  !/ 09-Aug-2017 : Bug fix for MPI restart read issue ( version 6.02 )
145  !/ (T. Campbell, NRL)
146  !/ 05-Jun-2018 : Add PDLIB/TIMINGS/DEBUGIO ( version 6.04 )
147  !/ DEBUGINIT/MPI
148  !/ 19-Dec-2019 : Optional second stream of ( version 7.00 )
149  !/ restart files
150  !/ (Roberto Padilla-Hernandez & J.H. Alves)
151  !/ 25-Sep-2020 : Extra fields for coupled restart ( version 7.10 )
152  !/ 22-Mar-2021 : Add new coupling fields in restart ( version 7.13 )
153  !/ 18-May-2021 : Read by default all extra restart ( version 7.13 )
154  !/
155  !/ Copyright 2009-2013 National Weather Service (NWS),
156  !/ National Oceanic and Atmospheric Administration. All rights
157  !/ reserved. WAVEWATCH III is a trademark of the NWS.
158  !/ No unauthorized use without permission.
159  !/
160  ! 1. Purpose :
161  !
162  ! Reads/writes restart files.
163  !
164  ! 2. Method :
165  !
166  ! The file is opened within the routine, the name is pre-defined
167  ! and the unit number is given in the parameter list. The restart
168  ! file is written using UNFORMATTED write statements. The routine
169  ! generates new names when called more than once. File names are :
170  !
171  ! restart000.FILEXT
172  ! restart001.FILEXT
173  ! restart002.FILEXT etc.
174  !
175  ! Optionally, a second stream of restart files is generated given
176  ! a secondary stride definad by an additional start/end time line
177  ! triggered by an optional argument added to the end of the stan-
178  ! dard restart request line (a sixth argument flag set to T). File
179  ! names include a time-tag prefix:
180  !
181  ! YYYYMMDD.HHMMSS.restart.FILEXT
182  !
183  ! The file to be read thus always is unnumbered, whereas all
184  ! written files are automatically numbered.
185  !
186  ! 3. Parameters :
187  !
188  ! Parameter list
189  ! ----------------------------------------------------------------
190  ! INXOUT C*(*) I Test string for read/write, valid are:
191  ! 'READ' Reading of a restart file.
192  ! 'HOT' Writing a full restart from the model.
193  ! 'COLD' Writing a cold start file.
194  ! 'WIND' Initialize fields using first wind
195  ! field.
196  ! 'CALM' Starting from calm conditions.
197  ! NDSR Int. I/O File unit number.
198  ! DUMFPI Real I Dummy values for FPIS for cold start.
199  ! RSTYPE Int. O Type of input field,
200  ! 0 : cold start,
201  ! 1 : cold start with fetch-limited spectra,
202  ! 2 : full restart,
203  ! 3 : for writing file.
204  ! 4 : starting from calm.
205  ! IMOD Int. I Optional grid number, defaults to 1.
206  ! FLRSTRT LOGIC I OTIONAL TRUE: A second request for restart files
207  ! ----------------------------------------------------------------
208  !
209  ! 4. Subroutines used :
210  !
211  ! See module documentation.
212  !
213  ! 5. Called by :
214  !
215  ! Name Type Module Description
216  ! ----------------------------------------------------------------
217  ! W3INIT Subr. W3INITMD Wave model initialization routine.
218  ! W3WAVE Subr. W3WAVEMD Actual wave model routine.
219  ! WW3_STRT Prog. N/A Initial conditions program.
220  ! ----------------------------------------------------------------
221  !
222  ! 6. Error messages :
223  !
224  ! Tests on INXOUT, file status and on array dimensions.
225  !
226  ! 7. Remarks :
227  !
228  ! - MAPSTA is dumped as it contains information on inactive points.
229  ! Note that the original MAPSTA is dumped in the model def. file
230  ! for use in the initial conditions (and output) programs.
231  ! - Note that MAPSTA and MAPST2 data is combinded in the file.
232  ! - The depth is recalculated in a write to avoid floating point
233  ! errors in W3STRT.
234  ! - Fields and field info read by all, written by las processor
235  ! only.
236  ! - The MPP version of the model will perform a gather here to
237  ! maximize hiding of communication with IO.
238  !
239  ! 8. Structure :
240  !
241  ! +---------------------------------------------------------------+
242  ! | initialisations |
243  ! | test INXOUT |
244  ! | open file |
245  ! +---------------------------------------------------------------|
246  ! | WRITE ? |
247  ! | Y N |
248  ! |-------------------------------|-------------------------------|
249  ! | Write identifiers and | Write identifiers and |
250  ! | dimensions. | dimensions. |
251  ! | | Check ident. and dimensions. |
252  ! +-------------------------------+-------------------------------|
253  ! | Full restart ? |
254  ! | Y N |
255  ! |-------------------------------|-------------------------------|
256  ! | read/write/test time | |
257  ! +-------------------------------+-------------------------------|
258  ! | WRITE ? |
259  ! | Y N |
260  ! |-------------------------------|-------------------------------|
261  ! | TYPE = 'WIND' ? | TYPE = 'WIND' ? |
262  ! | Y N | Y N |
263  ! |---------------|---------------|---------------|---------------|
264  ! | close file | write spectra | gen. fetch-l. | read spectra |
265  ! | RETURN | | spectra. | |
266  ! |---------------+---------------+---------------+---------------|
267  ! | WRITE ? |
268  ! | Y N |
269  ! |-------------------------------|-------------------------------|
270  ! | TYPE = 'FULL' ? | TYPE = 'FULL' ? |
271  ! | Y N | Y N |
272  ! |---------------|---------------|---------------|---------------|
273  ! | write level & | ( prep. level | read level & | initalize l.& |
274  ! | (ice) map & | for test | (ice) map.& | times |
275  ! | times | output ) | times | ( no ice ) |
276  ! +---------------+---------------+---------------+-------------- +
277  !
278  ! 9. Switches :
279  !
280  ! !/SEED Linear input / seeding option.
281  ! !/LNx
282  !
283  ! !/SHRD Switch for shared / distributed memory architecture.
284  ! !/DIST Id.
285  ! !/MPI Id.
286  !
287  ! !/S Enable subroutine tracing.
288  ! !/T Enable test output
289  !
290  ! 10. Source code :
291  !
292  !/ ------------------------------------------------------------------- /
293  USE w3gdatmd, ONLY: w3setg, w3setref, rstype
294  USE w3odatmd, ONLY: w3seto
295  USE w3adatmd, ONLY: w3seta, w3xeta, nsealm
296  USE w3adatmd, ONLY: cx, cy, hs, wlm, t0m1, t01, fp0, thm, charn,&
297  tauwix, tauwiy, tws, tauox, tauoy, bhd, &
298  phioc, tusx, tusy, ussx, ussy, tauice, &
299  uba, ubd, phibbl, taubbl, tauocx, tauocy, &
300  wnmean
301  !/
302  USE w3gdatmd, ONLY: nx, ny, nsea, nseal, nspec, mapsta, mapst2, &
304  USE w3triamd, ONLY: set_ug_iobp
305  USE w3wdatmd
306 #ifdef W3_WRST
307  USE w3idatmd, ONLY: wxn, wyn, w3seti
308  USE w3idatmd, ONLY: wxnwrst, wynwrst
309 #endif
310  USE w3odatmd, ONLY: ndse, ndst, iaproc, naproc, naperr, naprst, &
311  ifile => ifile4, fnmpre, ntproc, iostyp, &
313 #ifdef W3_MPI
314  USE w3odatmd, ONLY: nrqrs, nblkrs, rsblks, irqrs, irqrss, &
315  vaaux
316  USE w3adatmd, ONLY: mpi_comm_wcmp
317 #endif
318  !/
319  USE w3servmd, ONLY: extcde
320  USE constants, only: lpdlib, file_endian
322  USE w3gdatmd, ONLY: nk, nth
323 #ifdef W3_TIMINGS
324  USE w3parall, ONLY: print_my_time
325 #endif
326 #ifdef W3_PDLIB
327  USE pdlib_field_vec
328 #endif
329 #ifdef W3_S
330  USE w3servmd, ONLY: strace
331 #endif
332  !
333  IMPLICIT NONE
334  !
335 #ifdef W3_MPI
336  include "mpif.h"
337 #endif
338  !/
339  !/ ------------------------------------------------------------------- /
340  !/ Parameter list
341  !/
342  INTEGER :: NDSR
343  ! INTEGER, INTENT(IN) :: NDSR
344  INTEGER, INTENT(IN), OPTIONAL :: IMOD
345  REAL, INTENT(INOUT) :: DUMFPI
346  CHARACTER, INTENT(IN) :: INXOUT*(*)
347  LOGICAL, INTENT(IN),OPTIONAL :: FLRSTRT
348  !/
349  !/ ------------------------------------------------------------------- /
350  !/ Local parameters
351  !/
352  INTEGER, PARAMETER :: LRB = 4
353  !
354  INTEGER :: IGRD, I, J, LRECL, NSIZE, IERR, &
355  NSEAT, MSPEC, TTIME(2), ISEA, JSEA, &
356  NREC, NPART, IPART, IX, IY, IXL, IP, &
357  NPRTX2, NPRTY2, IYL, ITMP
358  INTEGER, ALLOCATABLE :: MAPTMP(:,:)
359 #ifdef W3_S
360  INTEGER, SAVE :: IENT = 0
361 #endif
362 #ifdef W3_MPI
363  INTEGER :: IERR_MPI, IH, IB, ISEA0, ISEAN, &
364  NRQ, NSEAL_MIN
365 #endif
366  INTEGER(KIND=8) :: RPOS
367 #ifdef W3_MPI
368  INTEGER, ALLOCATABLE :: STAT1(:,:), STAT2(:,:)
369  REAL, ALLOCATABLE :: VGBUFF(:), VLBUFF(:)
370 #endif
371  REAL(KIND=lrb), ALLOCATABLE :: writebuff(:), tmp(:), tmp2(:)
372 
373  LOGICAL :: WRITE, IOSFLG
374  LOGICAL :: FLOGOA(NOGRP,NGRPP)
375  LOGICAL :: NDSROPN
376  CHARACTER(LEN=4) :: TYPE
377  CHARACTER(LEN=10) :: VERTST
378  ! CHARACTER(LEN=21) :: FNAME
379  CHARACTER(LEN=40) :: FNAME
380  CHARACTER(LEN=26) :: IDTST
381  CHARACTER(LEN=30) :: TNAME
382  CHARACTER(LEN=15) :: TIMETAG
383  !/
384  !/ ------------------------------------------------------------------- /
385  !/
386 #ifdef W3_S
387  CALL strace (ient, 'W3IORS')
388 #endif
389  !
390  !
391  ! Constant NDSR for using mpiifort in ZEUS ... paralell runs crashing
392  ! because compiler doesn't accept reciclyng of UNIT for FORMATTED or
393  ! UNFORMATTED files in OPEN
394  !
395  ! NDSR = 525
396 
397  iosflg = iostyp .GT. 0
398  !
399  ! test parameter list input ------------------------------------------ *
400  !
401  IF ( PRESENT(imod) ) THEN
402  igrd = imod
403  ELSE
404  igrd = 1
405  END IF
406  !
407  CALL w3seto ( igrd, ndse, ndst )
408  CALL w3setg ( igrd, ndse, ndst )
409  CALL w3setw ( igrd, ndse, ndst )
410 #ifdef W3_WRST
411  CALL w3seti ( igrd, ndse, ndst )
412 #endif
413  !
414  IF (inxout.NE.'READ' .AND. inxout.NE.'HOT' .AND. &
415  inxout.NE.'COLD' .AND. inxout.NE.'WIND' .AND. &
416  inxout.NE.'CALM' ) THEN
417  IF ( iaproc .EQ. naperr ) WRITE (ndse,900) inxout
418  CALL extcde ( 1 )
419  END IF
420  !
421  WRITE = inxout .NE. 'READ'
422  IF ( inxout .EQ. 'HOT' ) THEN
423  TYPE = 'FULL'
424  ELSE
425  TYPE = inxout
426  END IF
427  !
428 #ifdef W3_T
429  WRITE (ndst,9000) inxout, WRITE, ntproc, naproc, iaproc, naprst
430 #endif
431  !
432  ! initializations ---------------------------------------------------- *
433  !
434  IF ( .NOT.dinit ) THEN
435  IF ( iaproc .LE. naproc ) THEN
436  CALL w3dimw ( imod, ndse, ndst )
437  ELSE
438  CALL w3dimw ( imod, ndse, ndst, .false. )
439  END IF
440  END IF
441  !
442  IF ( iaproc .LE. naproc ) va(:,0) = 0.
443  !
444  lrecl = max( lrb*nspec , &
445  lrb*(6+(25/lrb)+(9/lrb)+(29/lrb)+(3/lrb)) )
446  nsize = lrecl / lrb
447  ! --- Allocate buffer array with zeros (used to
448  ! fill bytes up to size LRECL). ---
449  ALLOCATE(writebuff(nsize))
450  writebuff(:) = 0.
451  !
452  ! Allocate memory to receive fields needed for coupling
453  IF (oarst) THEN
454  ALLOCATE(tmp(nsea))
455  ALLOCATE(tmp2(nsea))
456  ENDIF
457  !
458  ! open file ---------------------------------------------------------- *
459  !
460  i = len_trim(filext)
461  j = len_trim(fnmpre)
462  !
463  !CHECKPOINT RESTART FILE
464  itmp=0
465  IF ( PRESENT(flrstrt) ) THEN
466  IF (flrstrt) THEN
467  WRITE(timetag,"(i8.8,'.'i6.6)")time(1),time(2)
468  fname=timetag//'.restart.'//filext(:i)
469  itmp=1
470  END IF
471  END IF
472  IF(itmp.NE.1)THEN ! FNAME is not set above, so do it here
473  IF ( ifile.EQ.0 ) THEN
474  fname = 'restart.'//filext(:i)
475  ELSE
476  fname = 'restartNNN.'//filext(:i)
477  IF ( WRITE .AND. iaproc.EQ.naprst ) &
478  WRITE (fname(8:10),'(I3.3)') ifile
479  END IF
480  END IF
481 
482  ifile = ifile + 1
483  !
484 #ifdef W3_T
485  WRITE (ndst,9001) fname, lrecl
486 #endif
487  !
488 
489  IF(ndst.EQ.ndsr)THEN
490  IF ( iaproc .EQ. naperr ) &
491  WRITE(ndse,'(A,I8)')'UNIT NUMBERS OF RESTART FILE AND '&
492  //'TEST OUTPUT ARE THE SAME : ',ndst
493  CALL extcde ( 15 )
494  ENDIF
495 
496  IF ( WRITE ) THEN
497  IF ( .NOT.iosflg .OR. iaproc.EQ.naprst ) &
498  OPEN (ndsr,file=fnmpre(:j)//fname,form='UNFORMATTED', convert=file_endian, &
499  access='STREAM',err=800,iostat=ierr)
500  ELSE
501  OPEN (ndsr,file=fnmpre(:j)//fname,form='UNFORMATTED', convert=file_endian, &
502  access='STREAM',err=800,iostat=ierr, &
503  status='OLD',action='READ')
504  END IF
505  !
506  ! test info ---------------------------------------------------------- *
507  !
508  IF ( WRITE ) THEN
509  !
510  IF ( iaproc .EQ. naprst ) THEN
511  ! Because data has mixed data types we do not know how many
512  ! bytes remain to fill up to LRECL. ---
513  ! --- Make the entire record zero ---
514  writebuff(:) = 0.
515  WRITE (ndsr,pos=1) writebuff
516  ! --- Replace zeros with data ---
517  WRITE (ndsr,pos=1) idstr, verini, gname, TYPE, nsea, &
518  nspec, flogrr
519  END IF
520  rstype = 3
521  !
522  ELSE
523  READ (ndsr,pos=1,err=802,iostat=ierr) &
524  idtst, vertst, tname, TYPE, nseat, mspec, flogoa
525  !
526  IF ( idtst .NE. idstr ) THEN
527  IF ( iaproc .EQ. naperr ) &
528  WRITE (ndse,901) idtst, idstr
529  CALL extcde ( 10 )
530  END IF
531  IF ( vertst .NE. verini ) THEN
532  IF ( iaproc .EQ. naperr ) &
533  WRITE (ndse,902) vertst, verini
534  CALL extcde ( 11 )
535  END IF
536  IF ( tname .NE. gname ) THEN
537  IF ( iaproc .EQ. naperr ) &
538  WRITE (ndse,903) tname, gname
539  END IF
540  IF (type.NE.'FULL' .AND. type.NE.'COLD' .AND. &
541  type.NE.'WIND' .AND. type.NE.'CALM' ) THEN
542  IF ( iaproc .EQ. naperr ) &
543  WRITE (ndse,904) TYPE
544  CALL extcde ( 12 )
545  END IF
546  IF (nseat.NE.nsea .OR. nspec.NE.mspec) THEN
547  IF ( iaproc .EQ. naperr ) &
548  WRITE (ndse,905) mspec, nseat, nspec, nsea
549  CALL extcde ( 13 )
550  END IF
551  IF (type.EQ.'FULL') THEN
552  rstype = 2
553  ELSE IF (type.EQ.'WIND') THEN
554  rstype = 1
555  ELSE IF (type.EQ.'CALM') THEN
556  rstype = 4
557  ELSE
558  rstype = 0
559  END IF
560 
561  IF (.NOT. WRITE .AND. oarst .AND. iaproc .EQ. naproc) THEN
562  DO i=1, nogrp
563  DO j=1, ngrpp
564  IF (flogrr(i,j) .AND. .NOT. flogoa(i,j)) THEN
565  WRITE(screen,1000) i, j
566  ENDIF
567  ENDDO
568  ENDDO
569  ENDIF
570  !
571  END IF
572  !
573 100 CONTINUE
574  !
575 #ifdef W3_T
576  WRITE (ndst,9002) idstr, verini, gname, TYPE, &
577  nsea, nseal, nspec
578 #endif
579  !
580  ! TIME if required --------------------------------------------------- *
581  !
582  IF (type.EQ.'FULL') THEN
583  rpos = 1_8 + lrecl*(2-1_8)
584  IF ( WRITE ) THEN
585  IF ( iaproc .EQ. naprst ) THEN
586  writebuff(:) = 0.
587  WRITE (ndsr,pos=rpos) writebuff
588  WRITE (ndsr,pos=rpos) time
589  END IF
590  ELSE
591  READ (ndsr,pos=rpos,err=802,iostat=ierr) ttime
592  IF (time(1).NE.ttime(1) .OR. time(2).NE.ttime(2)) THEN
593  IF ( iaproc .EQ. naperr ) &
594  WRITE (ndse,906) ttime, time
595  CALL extcde ( 20 )
596  END IF
597  END IF
598  !
599 #ifdef W3_T
600  WRITE (ndst,9003) time
601  ELSE
602  WRITE (ndst,9004)
603 #endif
604  !
605  END IF
606  !
607  ! Spectra ------------------------------------------------------------ *
608  ! ( Bail out if write for TYPE.EQ.'WIND' )
609  !
610  IF ( WRITE ) THEN
611  IF ( type.EQ.'WIND' .OR. type.EQ.'CALM' ) THEN
612  IF ( .NOT.iosflg .OR. iaproc.EQ.naprst ) THEN
613  CLOSE ( ndsr )
614  END IF
615 #ifdef W3_T
616  WRITE (ndst,9005) TYPE
617 #endif
618  ! Clean up file handles and allocated arrays
619  INQUIRE (unit=ndsr, opened=ndsropn)
620  IF (ndsropn) CLOSE(ndsr)
621  IF (ALLOCATED(writebuff)) DEALLOCATE(writebuff)
622  IF (ALLOCATED(tmp)) DEALLOCATE(tmp)
623  IF (ALLOCATED(tmp2)) DEALLOCATE(tmp2)
624 
625  RETURN
626  ELSE IF ( iaproc.LE.naproc .OR. iaproc.EQ. naprst ) THEN
627  !
628  ! Original non-server version writing of spectra
629  !
630  IF ( .NOT.iosflg .OR. (naproc.EQ.1.AND.naprst.EQ.1) ) THEN
631 #ifdef W3_MPI
632  DO jsea=1, nseal
633  CALL init_get_isea(isea, jsea)
634  nrec = isea + 2
635  rpos = 1_8 + lrecl*(nrec-1_8)
636  writebuff(:) = 0.
637  writebuff(1:nspec) = va(1:nspec,jsea)
638  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
639  END DO
640 #else
641  DO jsea=1, nsea
642  isea = jsea
643  nrec = isea + 2
644  rpos = 1_8 + lrecl*(nrec-1_8)
645  writebuff(:) = 0.
646  writebuff(1:nspec) = va(1:nspec,jsea)
647  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
648  END DO
649 #endif
650  !
651  ! I/O server version writing of spectra ( !/MPI )
652  !
653 #ifdef W3_MPI
654  ELSE
655  !
656  IF (lpdlib) THEN
657 #endif
658 #ifdef W3_TIMINGS
659  CALL print_my_time("Before UNST_PDLIB_WRITE_TO_FILE")
660 #endif
661 #ifdef W3_PDLIB
662  CALL unst_pdlib_write_to_file(ndsr)
663 #endif
664 #ifdef W3_TIMINGS
665  CALL print_my_time("After UNST_PDLIB_WRITE_TO_FILE")
666 #endif
667 #ifdef W3_MPI
668  ELSE
669 
670  IF ( iaproc .NE. naprst ) THEN
671  nrq = 1
672  ELSE IF ( naprst .LE. naproc ) THEN
673  nrq = naproc - 1
674  ELSE
675  nrq = naproc
676  END IF
677  !
678  ALLOCATE ( stat1(mpi_status_size,nrq) )
679  IF ( iaproc .EQ. naprst ) CALL mpi_startall &
680  ( nrq, irqrss, ierr_mpi )
681  !
682  DO ib=1, nblkrs
683  isea0 = 1 + (ib-1)*rsblks*naproc
684  isean = min( nsea , ib*rsblks*naproc )
685  !
686  IF ( iaproc .EQ. naprst ) THEN
687  !
688  ih = 1 + nrq * (ib-1)
689  CALL mpi_waitall &
690  ( nrq, irqrss(ih), stat1, ierr_mpi )
691  IF ( ib .LT. nblkrs ) THEN
692  ih = 1 + nrq * ib
693  CALL mpi_startall &
694  ( nrq, irqrss(ih), ierr_mpi )
695  END IF
696  !
697  DO isea=isea0, isean
698  nrec = isea + 2
699  CALL init_get_jsea_isproc(isea, jsea, ip)
700  rpos = 1_8 + lrecl*(nrec-1_8)
701  writebuff(:) = 0.
702  IF ( ip .EQ. naprst ) THEN
703  writebuff(1:nspec) = va(1:nspec,jsea)
704  ELSE
705  jsea = jsea - 2*((ib-1)/2)*rsblks
706  writebuff(1:nspec) = vaaux(1:nspec,jsea,ip)
707  END IF
708  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
709  writebuff
710  END DO
711  !
712  ELSE
713  !
714  CALL mpi_startall &
715  ( 1, irqrss(ib), ierr_mpi )
716  CALL mpi_waitall &
717  ( 1, irqrss(ib), stat1, ierr_mpi )
718  !
719  END IF
720  END DO
721  !
722  DEALLOCATE ( stat1 )
723  END IF
724 #endif
725  !
726  END IF
727  !
728  END IF
729  ELSE
730  !
731  ! Reading spectra
732  !
733  IF ( type.EQ.'WIND' .OR. type.EQ.'CALM' ) THEN
734 #ifdef W3_T
735  WRITE (ndst,9020) TYPE
736 #endif
737  ELSE
738  IF (lpdlib) THEN
739 #ifdef W3_TIMINGS
740  CALL print_my_time("Before UNST_PDLIB_READ_FROM_FILE")
741 #endif
742 #ifdef W3_PDLIB
743  CALL unst_pdlib_read_from_file(ndsr)
744 #endif
745 #ifdef W3_TIMINGS
746  CALL print_my_time("After UNST_PDLIB_READ_FROM_FILE")
747 #endif
748  ELSE
749 #ifdef W3_MPI
750  nseal_min = 1 + (nsea-naproc)/naproc
751  IF ( naproc.GT.1 ) THEN
752  !/ ----------- Large number of small-sized record reads will tend ---- *
753  !/ to perform badly on most file systems. We read this part
754  !/ using streams and scatter the results using MPI.
755  !/ ( M. WARD, NCI )
756  !
757  ! Begin computational proc. only section ---------------- *
758  IF ( iaproc.LE.naproc ) THEN
759  !
760  ! Main loop --------------------------------------------- *
761  ALLOCATE( vgbuff( nsize * naproc ) )
762  ALLOCATE( vlbuff( nsize ) )
763  !
764  DO jsea = 1, nseal_min
765  ! Read NAPROC records into buffer VGBUFF. ------------- *
766  IF ( iaproc .EQ. naproc ) THEN
767  rpos = 1_8 + (2 + (jsea - 1_8) * naproc) * lrecl
768  READ(ndsr, pos=rpos,err=802,iostat=ierr) vgbuff(:)
769  ELSE
770  vgbuff(:) = 0.
771  END IF
772  ! Distribute one record to each rank.
773  CALL mpi_scatter(vgbuff, nsize, mpi_real, &
774  vlbuff, nsize, mpi_real, &
775  naproc-1, mpi_comm_wcmp, ierr )
776  ! Transfer the spectral content of VLBUFF to VA. ------ *
777  va(1:nspec,jsea) = vlbuff(1:nspec)
778  END DO
779  !
780  ! Include remainder values (switch to record format) ---- *
781  jsea = nseal_min + 1
782  IF ( jsea.EQ.nseal ) THEN
783  CALL init_get_isea(isea, jsea)
784  nrec = isea + 2
785  rpos = 1_8 + lrecl*(nrec-1_8)
786  READ (ndsr, pos=rpos, err=802, iostat=ierr) &
787  (va(i,jsea), i=1,nspec)
788  END IF
789  !
790  DEALLOCATE( vgbuff )
791  DEALLOCATE( vlbuff )
792  !
793  ! End computational proc. only section ------------------ *
794  END IF
795  !
796  ELSE
797 #endif
798  va = 0.
799  DO jsea=1, nsea
800  CALL init_get_isea(isea, jsea)
801  nrec = isea + 2
802  rpos = 1_8 + lrecl*(nrec-1_8)
803  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
804  (va(i,jsea),i=1,nspec)
805  ENDDO
806 #ifdef W3_MPI
807  END IF
808 #endif
809  END IF
810  END IF
811  END IF
812 
813  va = max(0.,va)
814  !
815 #ifdef W3_T
816  WRITE (ndst,9006)
817 #endif
818  !
819  ! Water level etc. if required --------------------------------------- *
820  ! ( For cold start write test output and cold start initialize
821  ! water levels. Note that MAPSTA overwrites the one read from the
822  ! model definition file, so that it need not be initialized. )
823  !
824  nrec = nsea + 3
825  npart = 1 + (nsea-1)/nsize
826  nprtx2 = 1 + (nx-1)/nsize
827  nprty2 = 1 + (ny-1)/nsize
828  !
829  IF ( WRITE ) THEN
830  !
831  IF (type.EQ.'FULL') THEN
832  !
833  IF ( iaproc .EQ. naprst ) THEN
834  !
835 #ifdef W3_MPI
836  if (associated(irqrs)) then
837  ALLOCATE ( stat2(mpi_status_size,nrqrs) )
838  CALL mpi_waitall &
839  ( nrqrs, irqrs , stat2, ierr_mpi )
840  DEALLOCATE ( stat2 )
841  end if
842 #endif
843  !
844  rpos = 1_8 + lrecl*(nrec-1_8)
845  writebuff(:) = 0.
846  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
847  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
848  tlev, tice, trho, tic1, tic5
849  DO ipart=1,npart
850  nrec = nrec + 1
851  rpos = 1_8 + lrecl*(nrec-1_8)
852  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
853  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
854  (wlv(isea),isea=1+(ipart-1)*nsize, &
855  min(nsea,ipart*nsize))
856  END DO
857  DO ipart=1,npart
858  nrec = nrec + 1
859  rpos = 1_8 + lrecl*(nrec-1_8)
860  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
861  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
862  (ice(isea),isea=1+(ipart-1)*nsize, &
863  min(nsea,ipart*nsize))
864  END DO
865 
866 #ifdef W3_WRST
867  ! The WRST switch saves the values of wind in the
868  ! restart file and then uses the wind for the first
869  ! time step here. This is needed when coupling with
870  ! an atm model that does not have 10m wind speeds at
871  ! initialization. If there is no restart, wind is zero
872 #endif
873 
874 #ifdef W3_WRST
875  DO ix=1, nx
876  DO ipart=1,nprty2
877  nrec = nrec + 1
878  rpos = 1_8 + lrecl*(nrec-1_8)
879  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
880  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
881  (wxn(ix,iyl),iyl=1+(ipart-1)*nsize, &
882  min(ny,ipart*nsize))
883  END DO
884  END DO
885  DO ix=1, nx
886  DO ipart=1,nprty2
887  nrec = nrec + 1
888  rpos = 1_8 + lrecl*(nrec-1_8)
889  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
890  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
891  (wyn(ix,iyl),iyl=1+(ipart-1)*nsize, &
892  min(ny,ipart*nsize))
893  END DO
894  END DO
895 #endif
896  ALLOCATE ( maptmp(ny,nx) )
897  maptmp = mapsta + 8*mapst2
898  DO iy=1, ny
899  DO ipart=1,nprtx2
900  nrec = nrec + 1
901  rpos = 1_8 + lrecl*(nrec-1_8)
902  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
903  writebuff
904  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
905  (maptmp(iy,ixl),ixl=1+(ipart-1)*nsize, &
906  min(nx,ipart*nsize))
907  END DO
908  END DO
909  DEALLOCATE ( maptmp )
910  DO ipart=1,npart
911  nrec = nrec + 1
912  rpos = 1_8 + lrecl*(nrec-1_8)
913  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
914  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
915  (ust(isea),isea=1+(ipart-1)*nsize, &
916  min(nsea,ipart*nsize))
917  END DO
918  DO ipart=1,npart
919  nrec = nrec + 1
920  rpos = 1_8 + lrecl*(nrec-1_8)
921  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
922  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
923  (ustdir(isea),isea=1+(ipart-1)*nsize, &
924  min(nsea,ipart*nsize))
925  END DO
926  DO ipart=1,npart
927  nrec = nrec + 1
928  rpos = 1_8 + lrecl*(nrec-1_8)
929  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
930  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
931  (asf(isea),isea=1+(ipart-1)*nsize, &
932  min(nsea,ipart*nsize))
933  END DO
934  DO ipart=1,npart
935  nrec = nrec + 1
936  rpos = 1_8 + lrecl*(nrec-1_8)
937  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) writebuff
938  WRITE (ndsr,pos=rpos,err=803,iostat=ierr) &
939  (fpis(isea),isea=1+(ipart-1)*nsize, &
940  min(nsea,ipart*nsize))
941  END DO
942  IF (oarst) THEN
943 #ifdef W3_MPI
944  CALL w3xeta ( igrd, ndse, ndst )
945 #endif
946  !
947  IF ( flogrr(1,2) ) THEN
948  WRITE(ndsr,err=803,iostat=ierr) cx(1:nsea)
949  WRITE(ndsr,err=803,iostat=ierr) cy(1:nsea)
950  ENDIF
951  IF ( flogrr(1,12) ) &
952  WRITE(ndsr,err=803,iostat=ierr) icef(1:nsea)
953  IF ( flogrr(2,1) ) &
954  WRITE(ndsr,err=803,iostat=ierr) hs(1:nsea)
955  IF ( flogrr(2,2) ) &
956  WRITE(ndsr,err=803,iostat=ierr) wlm(1:nsea)
957  IF ( flogrr(2,4) ) &
958  WRITE(ndsr,err=803,iostat=ierr) t0m1(1:nsea)
959  IF ( flogrr(2,5) ) &
960  WRITE(ndsr,err=803,iostat=ierr) t01(1:nsea)
961  IF ( flogrr(2,6) ) &
962  WRITE(ndsr,err=803,iostat=ierr) fp0(1:nsea)
963  IF ( flogrr(2,7) ) &
964  WRITE(ndsr,err=803,iostat=ierr) thm(1:nsea)
965  IF ( flogrr(2,19) ) &
966  WRITE(ndsr,err=803,iostat=ierr) wnmean(1:nsea)
967  IF ( flogrr(5,2) ) &
968  WRITE(ndsr,err=803,iostat=ierr) charn(1:nsea)
969  IF ( flogrr(5,5) ) THEN
970  WRITE(ndsr,err=803,iostat=ierr) tauwix(1:nsea)
971  WRITE(ndsr,err=803,iostat=ierr) tauwiy(1:nsea)
972  ENDIF
973  IF ( flogrr(5,11) ) &
974  WRITE(ndsr,err=803,iostat=ierr) tws(1:nsea)
975  IF ( flogrr(6,2) ) THEN
976  WRITE(ndsr,err=803,iostat=ierr) tauox(1:nsea)
977  WRITE(ndsr,err=803,iostat=ierr) tauoy(1:nsea)
978  ENDIF
979  IF ( flogrr(6,3) ) &
980  WRITE(ndsr,err=803,iostat=ierr) bhd(1:nsea)
981  IF ( flogrr(6,4) ) &
982  WRITE(ndsr,err=803,iostat=ierr) phioc(1:nsea)
983  IF ( flogrr(6,5) ) THEN
984  WRITE(ndsr,err=803,iostat=ierr) tusx(1:nsea)
985  WRITE(ndsr,err=803,iostat=ierr) tusy(1:nsea)
986  ENDIF
987  IF ( flogrr(6,6) ) THEN
988  WRITE(ndsr,err=803,iostat=ierr) ussx(1:nsea)
989  WRITE(ndsr,err=803,iostat=ierr) ussy(1:nsea)
990  ENDIF
991  IF ( flogrr(6,10) ) THEN
992  WRITE(ndsr,err=803,iostat=ierr) tauice(1:nsea,1)
993  WRITE(ndsr,err=803,iostat=ierr) tauice(1:nsea,2)
994  ENDIF
995  IF ( flogrr(6,13) ) THEN
996  WRITE(ndsr,err=803,iostat=ierr) tauocx(1:nsea)
997  WRITE(ndsr,err=803,iostat=ierr) tauocy(1:nsea)
998  ENDIF
999  IF ( flogrr(7,2) ) THEN
1000  WRITE(ndsr,err=803,iostat=ierr) uba(1:nsea)
1001  WRITE(ndsr,err=803,iostat=ierr) ubd(1:nsea)
1002  ENDIF
1003  IF ( flogrr(7,4) ) &
1004  WRITE(ndsr,err=803,iostat=ierr) phibbl(1:nsea)
1005  IF ( flogrr(7,5) ) THEN
1006  WRITE(ndsr,err=803,iostat=ierr) taubbl(1:nsea,1)
1007  WRITE(ndsr,err=803,iostat=ierr) taubbl(1:nsea,2)
1008  ENDIF
1009  !
1010 #ifdef W3_MPI
1011  CALL w3seta ( igrd, ndse, ndst )
1012 #endif
1013  ENDIF
1014 #ifdef W3_T
1015  WRITE (ndst,9007)
1016  ELSE
1017  DO isea=1, nsea
1018  wlv(isea) = 0.
1019  ice(isea) = 0.
1020  END DO
1021  WRITE (ndst,9008)
1022 #endif
1023  END IF
1024  END IF
1025  ELSE
1026  IF (type.EQ.'FULL') THEN
1027  rpos = 1_8 + lrecl*(nrec-1_8)
1028  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1029  tlev, tice, trho, tic1, tic5
1030  DO ipart=1,npart
1031  nrec = nrec + 1
1032  rpos = 1_8 + lrecl*(nrec-1_8)
1033  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1034  (wlv(isea),isea=1+(ipart-1)*nsize, &
1035  min(nsea,ipart*nsize))
1036  END DO
1037  DO ipart=1,npart
1038  nrec = nrec + 1
1039  rpos = 1_8 + lrecl*(nrec-1_8)
1040  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1041  (ice(isea),isea=1+(ipart-1)*nsize, &
1042  min(nsea,ipart*nsize))
1043  END DO
1044 #ifdef W3_WRST
1045  DO ix=1, nx
1046  DO ipart=1,nprty2
1047  nrec = nrec + 1
1048  rpos = 1_8 + lrecl*(nrec-1_8)
1049  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1050  (wxnwrst(ix,iyl),iyl=1+(ipart-1)*nsize, &
1051  min(ny,ipart*nsize))
1052  END DO
1053  END DO
1054  DO ix=1, nx
1055  DO ipart=1,nprty2
1056  nrec = nrec + 1
1057  rpos = 1_8 + lrecl*(nrec-1_8)
1058  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1059  (wynwrst(ix,iyl),iyl=1+(ipart-1)*nsize, &
1060  min(ny,ipart*nsize))
1061  END DO
1062  END DO
1063 #endif
1064  ALLOCATE ( maptmp(ny,nx) )
1065  DO iy=1, ny
1066  DO ipart=1,nprtx2
1067  nrec = nrec + 1
1068  rpos = 1_8 + lrecl*(nrec-1_8)
1069  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1070  (maptmp(iy,ixl),ixl=1+(ipart-1)*nsize, &
1071  min(nx,ipart*nsize))
1072  END DO
1073  END DO
1074  mapsta = mod(maptmp+2,8) - 2
1075  mapst2 = (maptmp-mapsta) / 8
1076  DEALLOCATE ( maptmp )
1077  !
1078  ! Updates reflections maps:
1079  !
1080  IF (gtype.EQ.ungtype) THEN
1081  !AR: not needed since already initialized on w3iogr CALL SET_UG_IOBP
1082 #ifdef W3_REF1
1083  ELSE
1084  CALL w3setref
1085 #endif
1086  ENDIF
1087  !
1088  DO ipart=1,npart
1089  nrec = nrec + 1
1090  rpos = 1_8 + lrecl*(nrec-1_8)
1091  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1092  (ust(isea),isea=1+(ipart-1)*nsize, &
1093  min(nsea,ipart*nsize))
1094  END DO
1095  DO ipart=1,npart
1096  nrec = nrec + 1
1097  rpos = 1_8 + lrecl*(nrec-1_8)
1098  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1099  (ustdir(isea),isea=1+(ipart-1)*nsize, &
1100  min(nsea,ipart*nsize))
1101  END DO
1102  DO ipart=1,npart
1103  nrec = nrec + 1
1104  rpos = 1_8 + lrecl*(nrec-1_8)
1105  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1106  (asf(isea),isea=1+(ipart-1)*nsize, &
1107  min(nsea,ipart*nsize))
1108  END DO
1109  DO ipart=1,npart
1110  nrec = nrec + 1
1111  rpos = 1_8 + lrecl*(nrec-1_8)
1112  READ (ndsr,pos=rpos,err=802,iostat=ierr) &
1113  (fpis(isea),isea=1+(ipart-1)*nsize, &
1114  min(nsea,ipart*nsize))
1115  END DO
1116  IF (oarst) THEN
1117  IF ( flogoa(1,2) ) THEN
1118  READ (ndsr,err=802,iostat=ierr) cx(1:nsea)
1119  READ (ndsr,err=802,iostat=ierr) cy(1:nsea)
1120  ENDIF
1121  IF ( flogoa(1,12) ) THEN
1122  READ (ndsr,err=802,iostat=ierr) icef(1:nsea)
1123  ENDIF
1124  IF ( flogoa(2,1) ) THEN
1125  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1126  DO i=1, nsealm
1127  j = iaproc + (i-1)*naproc
1128  IF (j .LE. nsea) hs(i) = tmp(j)
1129  ENDDO
1130  ENDIF
1131  IF ( flogoa(2,2) ) THEN
1132  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1133  DO i=1, nsealm
1134  j = iaproc + (i-1)*naproc
1135  IF (j .LE. nsea) wlm(i) = tmp(j)
1136  ENDDO
1137  ENDIF
1138  IF ( flogoa(2,4) ) THEN
1139  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1140  DO i=1, nsealm
1141  j = iaproc + (i-1)*naproc
1142  IF (j .LE. nsea) t0m1(i) = tmp(j)
1143  ENDDO
1144  ENDIF
1145  IF ( flogoa(2,5) ) THEN
1146  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1147  DO i=1, nsealm
1148  j = iaproc + (i-1)*naproc
1149  IF (j .LE. nsea) t01(i) = tmp(j)
1150  ENDDO
1151  ENDIF
1152  IF ( flogoa(2,6) ) THEN
1153  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1154  DO i=1, nsealm
1155  j = iaproc + (i-1)*naproc
1156  IF (j .LE. nsea) fp0(i) = tmp(j)
1157  ENDDO
1158  ENDIF
1159  IF ( flogoa(2,7) ) THEN
1160  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1161  DO i=1, nsealm
1162  j = iaproc + (i-1)*naproc
1163  IF (j .LE. nsea) thm(i) = tmp(j)
1164  ENDDO
1165  ENDIF
1166  IF ( flogoa(2,19) ) THEN
1167  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1168  DO i=1, nsealm
1169  j = iaproc + (i-1)*naproc
1170  IF (j .LE. nsea) wnmean(i) = tmp(j)
1171  ENDDO
1172  ENDIF
1173  IF ( flogoa(5,2) ) THEN
1174  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1175  DO i=1, nsealm
1176  j = iaproc + (i-1)*naproc
1177  IF (j .LE. nsea) charn(i) = tmp(j)
1178  ENDDO
1179  ENDIF
1180  IF ( flogoa(5,5) ) THEN
1181  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1182  READ (ndsr,err=802,iostat=ierr) tmp2(1:nsea)
1183  DO i=1, nsealm
1184  j = iaproc + (i-1)*naproc
1185  IF (j .LE. nsea) THEN
1186  tauwix(i) = tmp(j)
1187  tauwiy(i) = tmp2(j)
1188  ENDIF
1189  ENDDO
1190  ENDIF
1191  IF ( flogoa(5,11) ) THEN
1192  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1193  DO i=1, nsealm
1194  j = iaproc + (i-1)*naproc
1195  IF (j .LE. nsea) tws(i) = tmp(j)
1196  ENDDO
1197  ENDIF
1198  IF ( flogoa(6,2) ) THEN
1199  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1200  READ (ndsr,err=802,iostat=ierr) tmp2(1:nsea)
1201  DO i=1, nsealm
1202  j = iaproc + (i-1)*naproc
1203  IF (j .LE. nsea) THEN
1204  tauox(i) = tmp(j)
1205  tauoy(i) = tmp2(j)
1206  ENDIF
1207  ENDDO
1208  ENDIF
1209  IF ( flogoa(6,3) ) THEN
1210  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1211  DO i=1, nsealm
1212  j = iaproc + (i-1)*naproc
1213  IF (j .LE. nsea) bhd(i) = tmp(j)
1214  ENDDO
1215  ENDIF
1216  IF ( flogoa(6,4) ) THEN
1217  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1218  DO i=1, nsealm
1219  j = iaproc + (i-1)*naproc
1220  IF (j .LE. nsea) phioc(i) = tmp(j)
1221  ENDDO
1222  ENDIF
1223  IF ( flogoa(6,5) ) THEN
1224  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1225  READ (ndsr,err=802,iostat=ierr) tmp2(1:nsea)
1226  DO i=1, nsealm
1227  j = iaproc + (i-1)*naproc
1228  IF (j .LE. nsea) THEN
1229  tusx(i) = tmp(j)
1230  tusy(i) = tmp2(j)
1231  ENDIF
1232  ENDDO
1233  ENDIF
1234  IF ( flogoa(6,6) ) THEN
1235  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1236  READ (ndsr,err=802,iostat=ierr) tmp2(1:nsea)
1237  DO i=1, nsealm
1238  j = iaproc + (i-1)*naproc
1239  IF (j .LE. nsea) THEN
1240  ussx(i) = tmp(j)
1241  ussy(i) = tmp2(j)
1242  ENDIF
1243  ENDDO
1244  ENDIF
1245  IF ( flogoa(6,10) ) THEN
1246  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1247  READ (ndsr,err=802,iostat=ierr) tmp2(1:nsea)
1248  DO i=1, nsealm
1249  j = iaproc + (i-1)*naproc
1250  IF (j .LE. nsea) THEN
1251  tauice(i,1) = tmp(j)
1252  tauice(i,2) = tmp2(j)
1253  ENDIF
1254  ENDDO
1255  ENDIF
1256  IF ( flogoa(6,13) ) THEN
1257  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1258  READ (ndsr,err=802,iostat=ierr) tmp2(1:nsea)
1259  DO i=1, nsealm
1260  j = iaproc + (i-1)*naproc
1261  IF (j .LE. nsea) THEN
1262  tauocx(i) = tmp(j)
1263  tauocy(i) = tmp2(j)
1264  ENDIF
1265  ENDDO
1266  ENDIF
1267  IF ( flogoa(7,2) ) THEN
1268  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1269  READ (ndsr,err=802,iostat=ierr) tmp2(1:nsea)
1270  DO i=1, nsealm
1271  j = iaproc + (i-1)*naproc
1272  IF (j .LE. nsea) THEN
1273  uba(i) = tmp(j)
1274  ubd(i) = tmp2(j)
1275  ENDIF
1276  ENDDO
1277  ENDIF
1278  IF ( flogoa(7,4) ) THEN
1279  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1280  DO i=1, nsealm
1281  j = iaproc + (i-1)*naproc
1282  IF (j .LE. nsea) phibbl(i) = tmp(j)
1283  ENDDO
1284  ENDIF
1285  IF ( flogoa(7,5) ) THEN
1286  READ (ndsr,err=802,iostat=ierr) tmp(1:nsea)
1287  READ (ndsr,err=802,iostat=ierr) tmp2(1:nsea)
1288  DO i=1, nsealm
1289  j = iaproc + (i-1)*naproc
1290  IF (j .LE. nsea) THEN
1291  taubbl(i,1) = tmp(j)
1292  taubbl(i,2) = tmp2(j)
1293  ENDIF
1294  ENDDO
1295  ENDIF
1296  ENDIF
1297 #ifdef W3_T
1298  WRITE (ndst,9007)
1299 #endif
1300  ELSE
1301  tlev(1) = -1
1302  tlev(2) = 0
1303  tice(1) = -1
1304  tice(2) = 0
1305  trho(1) = -1
1306  tic1(1) = -1
1307  tic1(2) = 0
1308  tic5(1) = -1
1309  tic5(2) = 0
1310 #ifdef W3_WRST
1311  wxnwrst = 0.
1312  wynwrst = 0.
1313 #endif
1314  wlv = 0.
1315  ice = 0.
1316  asf = 1.
1317  fpis = dumfpi
1318 
1319  ! Initialize coupled fields if no restart is present
1320  IF (oarst) THEN
1321  cx = 0.
1322  cy = 0.
1323  icef = 0.
1324  hs = 0.
1325  wlm = 0.
1326  t0m1 = 0.
1327  t01 = 0.
1328  fp0 = 1.
1329  thm = 0.
1330  wnmean = 0.
1331  charn = 0.0185
1332  tauwix = 0.
1333  tauwiy = 0.
1334  tws = 0.
1335  tauox = 0.
1336  tauoy = 0.
1337  bhd = 0.
1338  phioc = 0.
1339  tusx = 0.
1340  tusy = 0.
1341  ussx = 0.
1342  ussy = 0.
1343  tauocx = 0.
1344  tauocy = 0.
1345  tauice = 0.
1346  uba = 0.
1347  ubd = 0.
1348  phibbl = 0.
1349  taubbl = 0.
1350  ENDIF
1351 #ifdef W3_T
1352  WRITE (ndst,9008)
1353 #endif
1354  END IF
1355  END IF
1356  !
1357  ! Close file --------------------------------------------------------- *
1358  !
1359  IF (write) THEN
1360  IF ( .NOT.iosflg .OR. iaproc.EQ.naprst ) THEN
1361  CLOSE ( ndsr )
1362  END IF
1363  ELSE
1364  CLOSE ( ndsr )
1365  END IF
1366  !
1367  IF (ALLOCATED(writebuff)) DEALLOCATE(writebuff)
1368  IF (ALLOCATED(tmp)) DEALLOCATE(tmp)
1369  IF (ALLOCATED(tmp2)) DEALLOCATE(tmp2)
1370  !
1371  RETURN
1372  !
1373  ! Escape locations read errors :
1374  !
1375 800 CONTINUE
1376 #ifdef W3_LN0
1377  TYPE = 'WIND'
1378  rstype = 1
1379 #endif
1380 #ifdef W3_SEED
1381  TYPE = 'CALM'
1382  rstype = 4
1383 #endif
1384 #ifdef W3_LN1
1385  TYPE = 'CALM'
1386  rstype = 4
1387 #endif
1388  IF ( iaproc .EQ. naperr ) WRITE (ndse,990) TYPE, ierr
1389  GOTO 100
1390  !
1391 801 CONTINUE
1392  IF ( iaproc .EQ. naperr ) WRITE (ndse,991)
1393  CALL extcde ( 30 )
1394  !
1395 802 CONTINUE
1396  IF ( iaproc .EQ. naperr ) WRITE (ndse,992) ierr
1397  CALL extcde ( 31 )
1398  !
1399 803 CONTINUE
1400  IF ( iaproc .EQ. naperr ) WRITE (ndse,993) ierr, rpos
1401  CALL extcde ( 31 )
1402  !
1403  !
1404  ! Formats
1405  !
1406 900 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS :'/ &
1407  ' ILLEGAL INXOUT VALUE: ',a/)
1408 901 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS :'/ &
1409  ' ILLEGAL IDSTR, READ : ',a/ &
1410  ' CHECK : ',a/)
1411 902 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS :'/ &
1412  ' ILLEGAL VERINI, READ : ',a/ &
1413  ' CHECK : ',a/)
1414 903 FORMAT (/' *** WAVEWATCH III WARNING IN W3IORS :'/ &
1415  ' ILLEGAL GNAME, READ : ',a/ &
1416  ' CHECK : ',a/)
1417 904 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS :'/ &
1418  ' ILLEGAL TYPE : ',a/)
1419 905 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS :'/ &
1420  ' CONFLICTING NSPEC, NSEA GRID : ',2i8/ &
1421  ' EXPECTED : ',2i8/)
1422 906 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS :'/ &
1423  ' CONFLICTING TIMES: FILE : ',i10.8,i8.6/ &
1424  ' MODEL : ',i10.8,i8.6/)
1425  !
1426 990 FORMAT (/' *** WAVEWATCH III WARNING IN W3IORS : '/ &
1427  ' NO READABLE RESTART FILE, ', &
1428  'INITIALIZE WITH ''',a,''' INSTEAD'/ &
1429  ' IOSTAT =',i5/)
1430 991 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS : '/ &
1431  ' PREMATURE END OF FILE'/)
1432 992 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS : '/ &
1433  ' ERROR IN READING FROM FILE'/ &
1434  ' IOSTAT =',i5/)
1435 993 FORMAT (/' *** WAVEWATCH III ERROR IN W3IORS : '/ &
1436  ' ERROR IN WRITING TO FILE'/ &
1437  ' IOSTAT =',i5,', POS =',i11 /)
1438 1000 FORMAT (/' *** WAVEWATCH III WARNING IN W3IORS : '/ &
1439  ' REQUESTED EXTRA RESTART GROUP',i2,' FIELD',i2, / &
1440  ' IS NOT PRESENT IN THE RESTART FILE.'/ &
1441  ' THIS MAY CAUSE INSTABILITIES IN COUPLED CONFIGURATIONS')
1442  !
1443  !
1444 #ifdef W3_T
1445 9000 FORMAT (' TEST W3IORS : TEST PARAMETERS :'/ &
1446  ' INXOUT : ',a,/ &
1447  ' WRITE : ',l10/ &
1448  ' NTPROC : ',i10/ &
1449  ' NAPROC : ',i10/ &
1450  ' IAPROC : ',i10/ &
1451  ' NAPRST : ',i10)
1452 9001 FORMAT (' FNAME : ',a/ &
1453  ' LRECL : ',i10)
1454 9002 FORMAT (' IDSTR : ',a/ &
1455  ' VERINI : ',a/ &
1456  ' GNAME : ',a/ &
1457  ' TYPE : ',a/ &
1458  ' NSEA : ',i10/ &
1459  ' NSEAL : ',i10/ &
1460  ' NSPEC : ',i10)
1461 9003 FORMAT (' TEST W3IORS :',i10.8,i8.6,' UTC')
1462 9004 FORMAT (' TEST W3IORS : TIME NOT AVAILABLE ')
1463 9005 FORMAT (' TEST W3IORS : NO SPECTRA, TYPE=''',a,''' ')
1464 9006 FORMAT (' TEST W3IORS : SPECTRA PROCESSED ')
1465 9007 FORMAT (' TEST W3IORS : WATER LEVELS ETC. PROCESSED ')
1466 9008 FORMAT (' TEST W3IORS : WATER LEVELS ETC. PROCESSED (DUMMY)')
1467  !
1468 9020 FORMAT (' TEST W3IORS : RSTYPE = ',a,', PERFORMED BY W3INIT')
1469 #endif
1470  !/
1471  !/ End of W3IORS ----------------------------------------------------- /
1472  !/
1473  END SUBROUTINE w3iors
1474  !/
1475  !/ End of module W3IORSMD -------------------------------------------- /
1476  !/
1477 END MODULE w3iorsmd
w3gdatmd::nk
integer, pointer nk
Definition: w3gdatmd.F90:1230
w3odatmd::iostyp
integer iostyp
Definition: w3odatmd.F90:321
pdlib_field_vec::unst_pdlib_write_to_file
subroutine unst_pdlib_write_to_file(NDWRITE)
Definition: pdlib_field_vec.F90:609
w3gdatmd::nseal
integer, pointer nseal
Definition: w3gdatmd.F90:1097
include
cmake src_list cmake include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_switches.cmake) check_switches("$
Definition: CMakeLists.txt:15
w3adatmd::charn
real, dimension(:), pointer charn
Definition: w3adatmd.F90:603
w3wdatmd::fpis
real, dimension(:), pointer fpis
Definition: w3wdatmd.F90:183
w3adatmd::nsealm
integer, pointer nsealm
Definition: w3adatmd.F90:686
w3triamd
Reads triangle and unstructured grid information.
Definition: w3triamd.F90:21
w3adatmd
Define data structures to set up wave model auxiliary data for several models simultaneously.
Definition: w3adatmd.F90:26
w3gdatmd::nspec
integer, pointer nspec
Definition: w3gdatmd.F90:1230
w3adatmd::ussy
real, dimension(:), pointer ussy
Definition: w3adatmd.F90:607
w3gdatmd::ungtype
integer, parameter ungtype
Definition: w3gdatmd.F90:626
w3wdatmd
Define data structures to set up wave model dynamic data for several models simultaneously.
Definition: w3wdatmd.F90:18
w3adatmd::tauice
real, dimension(:,:), pointer tauice
Definition: w3adatmd.F90:607
w3adatmd::tws
real, dimension(:), pointer tws
Definition: w3adatmd.F90:603
w3adatmd::tusx
real, dimension(:), pointer tusx
Definition: w3adatmd.F90:607
w3adatmd::tusy
real, dimension(:), pointer tusy
Definition: w3adatmd.F90:607
w3iorsmd::w3iors
subroutine w3iors(INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT)
Reads/writes restart files.
Definition: w3iorsmd.F90:113
w3odatmd::ntproc
integer, pointer ntproc
Definition: w3odatmd.F90:457
w3wdatmd::icef
real, dimension(:), pointer icef
Definition: w3wdatmd.F90:183
w3adatmd::t01
real, dimension(:), pointer t01
Definition: w3adatmd.F90:587
w3wdatmd::wlv
real, dimension(:), pointer wlv
Definition: w3wdatmd.F90:183
w3odatmd::iaproc
integer, pointer iaproc
Definition: w3odatmd.F90:457
w3odatmd::ngrpp
integer, parameter ngrpp
Definition: w3odatmd.F90:324
w3wdatmd::time
integer, dimension(:), pointer time
Definition: w3wdatmd.F90:172
w3adatmd::tauocy
real, dimension(:), pointer tauocy
Definition: w3adatmd.F90:607
w3odatmd::ifile4
integer, pointer ifile4
Definition: w3odatmd.F90:521
w3adatmd::hs
real, dimension(:), pointer hs
Definition: w3adatmd.F90:587
w3gdatmd::gname
character(len=30), pointer gname
Definition: w3gdatmd.F90:1223
w3gdatmd::ny
integer, pointer ny
Definition: w3gdatmd.F90:1097
w3adatmd::uba
real, dimension(:), pointer uba
Definition: w3adatmd.F90:614
w3odatmd::fnmpre
character(len=80) fnmpre
Definition: w3odatmd.F90:330
w3wdatmd::va
real, dimension(:,:), pointer va
Definition: w3wdatmd.F90:183
w3adatmd::tauwix
real, dimension(:), pointer tauwix
Definition: w3adatmd.F90:603
w3wdatmd::trho
integer, dimension(:), pointer trho
Definition: w3wdatmd.F90:172
w3wdatmd::tlev
integer, dimension(:), pointer tlev
Definition: w3wdatmd.F90:172
w3gdatmd::w3setg
subroutine w3setg(IMOD, NDSE, NDST)
Definition: w3gdatmd.F90:2152
w3adatmd::w3xeta
subroutine w3xeta(IMOD, NDSE, NDST)
Reduced version of W3SETA to point to expended output arrays.
Definition: w3adatmd.F90:3118
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
w3iorsmd::oarst
logical oarst
Definition: w3iorsmd.F90:68
w3adatmd::w3seta
subroutine w3seta(IMOD, NDSE, NDST)
Select one of the WAVEWATCH III grids / models.
Definition: w3adatmd.F90:2645
w3gdatmd::rstype
integer, pointer rstype
Definition: w3gdatmd.F90:1095
w3idatmd::wxn
real, dimension(:,:), pointer wxn
Definition: w3idatmd.F90:243
w3odatmd::naperr
integer, pointer naperr
Definition: w3odatmd.F90:457
w3odatmd::nblkrs
integer, pointer nblkrs
Definition: w3odatmd.F90:523
w3adatmd::phibbl
real, dimension(:), pointer phibbl
Definition: w3adatmd.F90:614
constants::lpdlib
logical lpdlib
LPDLIB Logical for using the PDLIB library.
Definition: constants.F90:101
w3odatmd::flogrr
logical, dimension(:,:), pointer flogrr
Definition: w3odatmd.F90:478
w3gdatmd::nsea
integer, pointer nsea
Definition: w3gdatmd.F90:1097
w3servmd
Definition: w3servmd.F90:3
pdlib_field_vec::unst_pdlib_read_from_file
subroutine unst_pdlib_read_from_file(NDREAD)
Definition: pdlib_field_vec.F90:396
w3wdatmd::tic1
integer, dimension(:), pointer tic1
Definition: w3wdatmd.F90:172
w3wdatmd::w3setw
subroutine w3setw(IMOD, NDSE, NDST)
Select one of the WAVEWATCH III grids / models.
Definition: w3wdatmd.F90:660
w3odatmd::w3seto
subroutine w3seto(IMOD, NDSERR, NDSTST)
Definition: w3odatmd.F90:1523
w3gdatmd::nth
integer, pointer nth
Definition: w3gdatmd.F90:1230
w3odatmd::vaaux
real, dimension(:,:,:), pointer vaaux
Definition: w3odatmd.F90:525
w3odatmd
Definition: w3odatmd.F90:3
w3odatmd::rsblks
integer, pointer rsblks
Definition: w3odatmd.F90:523
w3adatmd::bhd
real, dimension(:), pointer bhd
Definition: w3adatmd.F90:607
w3adatmd::cy
real, dimension(:), pointer cy
Definition: w3adatmd.F90:584
w3odatmd::screen
integer, pointer screen
Definition: w3odatmd.F90:456
w3adatmd::wlm
real, dimension(:), pointer wlm
Definition: w3adatmd.F90:587
w3odatmd::naproc
integer, pointer naproc
Definition: w3odatmd.F90:457
w3parall::print_my_time
subroutine print_my_time(string)
Print timings.
Definition: w3parall.F90:200
w3adatmd::wnmean
real, dimension(:), pointer wnmean
Definition: w3adatmd.F90:587
w3idatmd::w3seti
subroutine w3seti(IMOD, NDSE, NDST)
Select one of the WAVEWATCH III grids / models.
Definition: w3idatmd.F90:819
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
w3odatmd::nrqrs
integer, pointer nrqrs
Definition: w3odatmd.F90:523
w3gdatmd::w3setref
subroutine w3setref
Definition: w3gdatmd.F90:3294
w3wdatmd::w3dimw
subroutine w3dimw(IMOD, NDSE, NDST, F_ONLY)
Initialize an individual data grid at the proper dimensions.
Definition: w3wdatmd.F90:343
w3odatmd::irqrs
integer, dimension(:), pointer irqrs
Definition: w3odatmd.F90:524
w3servmd::strace
subroutine strace(IENT, SNAME)
Definition: w3servmd.F90:148
w3gdatmd::gtype
integer, pointer gtype
Definition: w3gdatmd.F90:1094
w3idatmd
Define data structures to set up wave model input data for several models simultaneously.
Definition: w3idatmd.F90:16
w3wdatmd::ice
real, dimension(:), pointer ice
Definition: w3wdatmd.F90:183
pdlib_field_vec
Definition: pdlib_field_vec.F90:1
w3adatmd::tauox
real, dimension(:), pointer tauox
Definition: w3adatmd.F90:607
w3parall::init_get_jsea_isproc
subroutine init_get_jsea_isproc(ISEA, JSEA, ISPROC)
Set JSEA for all schemes.
Definition: w3parall.F90:1163
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::tauoy
real, dimension(:), pointer tauoy
Definition: w3adatmd.F90:607
w3odatmd::nogrp
integer, parameter nogrp
Definition: w3odatmd.F90:323
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
constants::file_endian
character(*), parameter file_endian
FILE_ENDIAN Filled by preprocessor with 'big_endian', 'little_endian', or 'native'.
Definition: constants.F90:86
w3servmd::extcde
subroutine extcde(IEXIT, UNIT, MSG, FILE, LINE, COMM)
Definition: w3servmd.F90:736
w3odatmd::irqrss
integer, dimension(:), pointer irqrss
Definition: w3odatmd.F90:524
w3wdatmd::ustdir
real, dimension(:), pointer ustdir
Definition: w3wdatmd.F90:183
w3adatmd::thm
real, dimension(:), pointer thm
Definition: w3adatmd.F90:587
w3adatmd::cx
real, dimension(:), pointer cx
Definition: w3adatmd.F90:584
w3gdatmd::nx
integer, pointer nx
Definition: w3gdatmd.F90:1097
w3wdatmd::tic5
integer, dimension(:), pointer tic5
Definition: w3wdatmd.F90:172
w3triamd::set_ug_iobp
subroutine set_ug_iobp()
Redefines the values of the boundary points and angle pointers based on the MAPSTA array.
Definition: w3triamd.F90:2811
w3parall
Parallel routines for implicit solver.
Definition: w3parall.F90:22
w3odatmd::naprst
integer, pointer naprst
Definition: w3odatmd.F90:457
w3adatmd::t0m1
real, dimension(:), pointer t0m1
Definition: w3adatmd.F90:587
w3idatmd::wyn
real, dimension(:,:), pointer wyn
Definition: w3idatmd.F90:243
w3gdatmd::mapsta
integer, dimension(:,:), pointer mapsta
Definition: w3gdatmd.F90:1163
w3iorsmd
Read/write restart files.
Definition: w3iorsmd.F90:14
w3wdatmd::tice
integer, dimension(:), pointer tice
Definition: w3wdatmd.F90:172
w3adatmd::tauocx
real, dimension(:), pointer tauocx
Definition: w3adatmd.F90:607
w3gdatmd::mapst2
integer, dimension(:,:), pointer mapst2
Definition: w3gdatmd.F90:1163
w3parall::init_get_isea
subroutine init_get_isea(ISEA, JSEA)
Set ISEA for all schemes.
Definition: w3parall.F90:1398
w3adatmd::ubd
real, dimension(:), pointer ubd
Definition: w3adatmd.F90:614
w3wdatmd::dinit
logical, pointer dinit
Definition: w3wdatmd.F90:195
w3wdatmd::asf
real, dimension(:), pointer asf
Definition: w3wdatmd.F90:183
w3gdatmd::filext
character(len=13), pointer filext
Definition: w3gdatmd.F90:1224
w3adatmd::mpi_comm_wcmp
integer, pointer mpi_comm_wcmp
Definition: w3adatmd.F90:676