Go to the documentation of this file.
189 INTEGER :: mpi_comm = -99, ierr, ndst1, ndst2 = -1,&
190 nxw = -1, nyw = -1, tnext(2), told(2), &
195 INTEGER,
PARAMETER :: sleep1 = 10 , sleep2 = 10
196 INTEGER,
ALLOCATABLE :: tend(:,:)
199 CHARACTER(LEN=3) :: tsfld,
TYPE =
'WND'
200 CHARACTER(LEN=13) :: tsstr
209 CALL mpi_init ( ierr_mpi )
210 mpi_comm = mpi_comm_world
211 CALL mpi_comm_size ( mpi_comm,
nmproc, ierr_mpi )
212 CALL mpi_comm_rank ( mpi_comm,
improc, ierr_mpi )
239 CALL wminit ( 8, 9, 6, 10, 6,
'ww3_multi.inp', mpi_comm )
247 desc=
'times file for sbs driver' )
248 OPEN (ndst1,
file=
'times.inp',status=
'OLD',err=820,iostat=ierr)
265 IF ( nxw .EQ. -1 )
GOTO 825
266 IF ( ndst2 .EQ. -1 )
GOTO 825
270 WRITE (
mdst,9022) nxw, nyw, ndst2, i
277 ALLOCATE ( tend(2,
nrgrd) )
279 CALL rdtime ( ndst1, tnext )
286 CALL rdtime ( ndst1, tnext )
288 IF ( dttst .GT. 0. )
THEN
290 ELSE IF ( dttst .EQ. 0. )
THEN
302 CALL rdwind ( ndst2, tnext, nxw, nyw, .false. )
308 CALL rdtime ( ndst1, tnext )
310 CALL rdwind ( ndst2, tnext, nxw, nyw, .true. )
314 IF ( dttst .LT. 0. )
THEN
324 CALL mpi_barrier ( mpi_comm, ierr_mpi )
329 IF ( dttst .LE. 0 )
EXIT
346 CALL mpi_barrier ( mpi_comm, ierr_mpi )
347 CALL mpi_finalize ( ierr_mpi )
353 WRITE (
mdss,1020) ierr
357 WRITE (
mdss,1025) ndst2
364 900
FORMAT (/15x,
' *** WAVEWATCH III Multi-grid shell *** '/ &
365 15x,
'================================================='/&
366 15x,
' side-by-side version'/)
368 920
FORMAT (
' WIND DATA FILE USED IS wind.',a)
369 930
FORMAT (/
' WIND DATA FOUND AT TIME : ',i8.8,1x,i6.6)
372 999
FORMAT (//
' End of program '/ &
373 ' ========================================'/ &
374 ' WAVEWATCH III Multi-grid shell '/)
376 1020
FORMAT (/
' *** WAVEWATCH-III ERROR IN W3SBS1 : '/ &
377 ' ERROR IN OPENING TIMES FILE'/ &
380 1025
FORMAT (/
' *** WAVEWATCH-III ERROR IN W3SBS1 : '/ &
381 ' WIND FILE NOT FOUND, NDST2 = ',i8/)
384 9020
FORMAT (
' TEST W3SBS1: TIMES FILE SUCCESSFULLY OPENED')
385 9021
FORMAT (
' TEST W3SBS1: WINDS FILE SUCCESSFULLY OPENED')
386 9022
FORMAT (
' TEST DATA : ',2i8,2i4)
403 SUBROUTINE rdtime ( NDS, TIME )
433 INTEGER,
INTENT(IN) :: NDS
434 INTEGER,
INTENT(OUT) :: TIME(2)
440 CHARACTER(LEN=10) :: COMMAND
448 READ (nds,910,
END=110,ERR=810,IOSTAT=IERR) time
456 WRITE (command,
'(A5,1X,I4)')
'sleep ', sleep1
457 CALL system ( command )
467 WRITE (
mdss,1010) ierr
472 910
FORMAT (1x,i8,1x,i6)
474 911
FORMAT (/
' END OF TIMES FILE REACHED FOR WIND DATA '/ &
475 ' WAITING BEFORE CHECKING AGAIN')
477 1010
FORMAT (/
' *** WAVEWATCH-III ERROR IN W3SBS1/RDTIME : '/ &
478 ' ERROR IN OPENING TIMES FILE'/ &
499 SUBROUTINE rdwind ( NDS, TIME, NX, NY, REWIND )
531 INTEGER,
INTENT(IN) :: NDS, TIME(2), NX, NY
532 LOGICAL,
INTENT(IN) :: REWIND
537 INTEGER :: TTIME(2), IX, IY
538 INTEGER,
SAVE :: NREW = 0
539 REAL :: DTTST, XXX(NX,NY)
541 CHARACTER(LEN=10) :: COMMAND
554 READ (nds,
END=140,ERR=140) ttime
556 WRITE (mdst,9000) ttime
560 READ (nds,
END=130,ERR=130) ((XXX(IX,IY),IX=1,NX),IY=1,NY)
562 WRITE (mdst,9001)
'U'
566 READ (nds,
END=120,ERR=120) ((XXX(IX,IY),IX=1,NX),IY=1,NY)
568 WRITE (mdst,9001)
'V'
571 IF (
TYPE .EQ.
'WNS' ) then
573 READ (nds,
END=110,ERR=110) ((XXX(IX,IY),IX=1,NX),IY=1,NY)
575 WRITE (mdst,9001)
'DT'
594 IF ( improc .EQ. nmpscr )
WRITE (mdss,900)
597 WRITE (command,
'(A5,1X,I4)')
'sleep ', sleep2
598 CALL system ( command )
605 dttst = dsec21( time , ttime )
607 IF ( dttst .LT. 0. )
THEN
608 IF ( improc .EQ. nmpscr )
WRITE (mdss,901) ttime
609 ELSE IF ( dttst .EQ. 0. )
THEN
621 IF ( improc.EQ.nmpscr .AND. nrew.GT.4 )
WRITE (mdss,902) nrew
641 900
FORMAT (
' FILE NOT YET COMPLETE ... ')
642 901
FORMAT (
' SKIPPING FILE FOR ',i8.8,i7.6)
643 902
FORMAT (
' REWINDING FILE BY ',i4,
' RECORDS')
645 1010
FORMAT (/
' *** WAVEWATCH-III ERROR IN W3SBS1/RDWIND : '/ &
646 ' FILE READ PAST EXPECTED TIME '/)
649 9000
FORMAT (
' TEST RDWIND: TIME READ ',i8.8,1x,i6.6)
650 9001
FORMAT (
' FIELD READ ',a)
real function dsec21(TIME1, TIME2)
cmake src_list cmake include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_switches.cmake) check_switches("$
Finalization of the multi-grid wave model.
Initialization of the multi-grid wave model.
subroutine wmwave(TEND)
Run multi-grid version of WAVEWATCH III.
integer, dimension(2) stime
STIME.
subroutine rdtime(NDS, TIME)
Internal subroutine to get next time in time file.
subroutine wminit(IDSI, IDSO, IDSS, IDST, IDSE, IFNAME, MPI_COMM, PREAMB)
Initialize multi-grid version of WAVEWATCH III.
subroutine wmfinl
Initialize multi-grid version of WAVEWATCH III.
Running the multi-grid version of WAVEWATCH III up to a given ending time for each grid.
character(len=30), pointer gname
subroutine wmuset(NDSE, NDST, NDS, FLAG, TYPE, NAME, DESC)
Directly set information for a unit number in the data structure.
subroutine wmuget(NDSE, NDST, NDS, TYPE, NR)
Find a free unit number for a given file type.
subroutine w3setg(IMOD, NDSE, NDST)
subroutine rdwind(NDS, TIME, NX, NY, REWIND)
Internal subroutine to test readnext wind fields from the data file.
program w3sbs1
Program shell to run multi half-coupled.
subroutine w3seti(IMOD, NDSE, NDST)
Select one of the WAVEWATCH III grids / models.
file(STRINGS ${CMAKE_BINARY_DIR}/switch switch_strings) separate_arguments(switches UNIX_COMMAND $
Define data structures to set up wave model input data for several models simultaneously.
Define data structures to set up wave model dynamic data for several models simultaneously.
subroutine extcde(IEXIT, UNIT, MSG, FILE, LINE, COMM)
integer, dimension(:,:), allocatable mdsf
MDSF.
Dynamic assignement of unit numbers for the multi-grid wave model.
integer, dimension(2) etime
ETIME.
character(len=13), pointer filext