263 INTEGER,
INTENT(IN) :: TEND(2,NRGRD)
268 INTEGER :: J, JJ, I, JO, TPRNT(2), TAUX(2), &
269 II, JJJ, IX, IY, UPNEXT(2), UPLAST(2)
270 INTEGER :: DUMMY2(35)=0
275 INTEGER,
SAVE :: IENT = 0
278 INTEGER :: IERR_MPI, NMPSCS
279 INTEGER,
ALLOCATABLE :: STATUS(:,:)
281 REAL :: DTTST, DTMAXI
283 REAL :: PRFT0, PRFTN, PRFTS
284 REAL(KIND=8) :: get_memory
286 CHARACTER(LEN=8) :: WTIME
287 CHARACTER(LEN=23) :: MTIME
288 LOGICAL :: DONE, TSTAMP, FLAGOK, DO_UPT, &
293 LOGICAL,
ALLOCATABLE :: FLSYNC(:), GRSYNC(:), TMSYNC(:), &
296 LOGICAL,
ALLOCATABLE :: PREGTB(:), PREGTH(:), PREGTE(:)
302 CALL strace (ient,
'WMWAVE')
306 CALL prtime ( prft0 )
310 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,900)
318 IF ( ( grstat(i).LT.0 .OR. grstat(i).GT.7 ) .AND. &
319 grstat(i).NE.99 )
GOTO 2000
323 IF ( tsync(1,i) .NE. -1 )
THEN
324 dttst =
dsec21( tsync(:,i), tend(:,i) )
325 IF ( dttst .LT. 0. )
GOTO 2001
333 IF (
dsec21(tsync(:,ingrp(j,1)),tsync(:,ingrp(j,jj))).NE.0. &
334 .OR.
dsec21(tend(:,ingrp(j,1)),tend(:,ingrp(j,jj))).NE.0. ) &
337 IF ( grank(ingrp(j,1)).EQ.1 .AND. tsync(1,0).EQ.-1 ) &
338 tsync(:,0) = tsync(:,ingrp(j,1))
343 IF ( .NOT.
ALLOCATED(flsync) )
THEN
344 ALLOCATE ( flsync(nrgrd), grsync(nrgrp), tmsync(nrgrd), &
347 ALLOCATE ( pregtb(nrgrd), pregth(nrgrd), pregte(nrgrd) )
363 CALL w3setw ( i, mdse, mdst )
365 IF ( grstat(i).EQ.99 .AND. dttst.GT.0. ) grstat(i) = 0
376 CALL w3seto ( 0, mdse, mdst )
388 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
389 CALL wmprnt ( mdso, nrgrd, tsync(:,0), grstat )
390 CALL stme21 ( tsync(:,0), mtime )
391 CALL wwtime ( wtime )
392 WRITE (mdss,901) mtime, wtime, minval(grstat), maxval(grstat)
398 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
402 CALL prtime ( prftn )
403 WRITE (
mdsp,990) prft0, prftn, get_memory()
414 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc .AND. &
415 dsec21(tprnt,tsync(:,0)).NE.0. )
THEN
416 IF ( .NOT. tstamp )
WRITE (mdss,*)
417 CALL wmprnt ( mdso, nrgrd, tsync(:,0), grstat )
418 CALL stme21 ( tsync(:,0), mtime )
419 CALL wwtime ( wtime )
420 WRITE (mdss,901) mtime, wtime, minval(grstat), maxval(grstat)
429 WRITE (mdst,9000) iloop, tsync(:,0)
431 CALL w3setw ( i, mdse, mdst )
432 WRITE (mdst,9001) i, grstat(i),
time, tsync(:,i), tend(:,i)
434 IF ( iloop .EQ. -1 )
CALL extcde ( 508 )
440 loop_j:
DO j=1, nrgrp
446 CALL wmsetm ( i, mdse, mdst )
447 grsync(j) = grsync(j) .OR. fbcast
451 loop_jj:
DO jj=1, ingrp(j,0)
453 CALL wmsetm ( i, mdse, mdst )
456 IF ( grstat(i).EQ.0 ) tmsync(i) = .NOT. fbcast
470 IF ( grstat(i) .EQ. 0 )
THEN
473 IF ( grstat(i).EQ.0 .AND. .NOT.flsync(i) )
THEN
477 WRITE (mdst,9002) i, grstat(i),
' '
480 IF ( tdata(1,i) .EQ. -1 )
THEN
483 CALL w3setw ( i, mdse, mdst )
487 WRITE (mdst,9020) dttst
490 IF ( dttst .GT. 0. )
THEN
493 WRITE (mdst,9003) i, grstat(i)
508 IF ( grstat(i) .EQ. 0 )
THEN
511 IF ( grstat(i).EQ.0 .AND. .NOT.flsync(i) .AND. &
512 mpi_comm_grd .NE. mpi_comm_null )
THEN
516 CALL prtime ( prft0 )
518 IF ( dttst .LE. 0 )
THEN
519 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
522 CALL wmupdt ( i, tdata(:,i) )
524 WRITE (mdst,9021)
time, tdata(:,i), tend(:,i)
536 IF ( .NOT. grsync(j) )
THEN
539 WRITE (mdst,9902) i, grstat(i), &
540 'NO SYNC FOR TDATA NEEDED'
549 CALL prtime ( prftn )
550 WRITE (
mdsp,991) prft0, prftn, get_memory(), &
564 IF ( grstat(i).EQ.0 .AND. grsync(j) )
THEN
569 IF ( flsync(i) )
THEN
572 WRITE (mdst,9902) i, grstat(i), &
576 IF (flsync(i))
CALL prtime ( prft0 )
579 IF ( fbcast )
CALL wmbcst &
580 ( tdata(1,i), 2, i, nrgrd, 1 )
583 IF (flsync(i))
CALL prtime ( prftn )
584 IF (flsync(i))
WRITE (
mdsp,991) &
585 prft0, prftn, get_memory(),
'BCST',i
588 WRITE (mdst,9902) i, grstat(i),
'SYNCING DONE'
593 IF ( grsync(j) ) cycle loop_jj
597 WRITE (mdst,9902) i, grstat(i), &
598 'CYCLE BEFORE SYNCING TDATA'
615 IF ( grstat(i) .EQ. 1 .AND. tsync(1,i) .NE. -1 )
THEN
617 WRITE (mdst,9002) i, grstat(i),
'FIRST PART'
619 CALL w3setw ( i, mdse, mdst )
621 IF ( dttst .EQ. 0. )
THEN
624 WRITE (mdst,9003) i, grstat(i)
633 IF ( grstat(i) .EQ. 1 )
THEN
635 WRITE (mdst,9002) i, grstat(i),
'SECOND PART'
638 CALL prtime ( prft0 )
644 CALL w3setw ( i, mdse, mdst )
646 DO jjj=1, grdlow(i,0)
647 CALL w3setw ( grdlow(i,jjj), mdse, mdst )
648 flagok = flagok .AND.
dsec21(taux,
time).GT.0. &
649 .AND. grstat(grdlow(i,jjj)).EQ.5
651 CALL w3setw ( i, mdse, mdst )
654 WRITE (mdst,9004) flagok
660 IF ( .NOT.flagok .AND. .NOT.pregtb(i) )
THEN
661 IF ( mpi_comm_grd.NE.mpi_comm_null ) &
672 IF ( mpi_comm_grd.NE.mpi_comm_null ) &
681 CALL prtime ( prftn )
682 WRITE (
mdsp,991) prft0, prftn, get_memory(), &
690 IF ( grstat(i) .EQ. 2 )
THEN
692 WRITE (mdst,9002) i, grstat(i),
' '
695 CALL prtime ( prft0 )
700 CALL w3setw ( i, mdse, mdst )
701 IF ( tmax(1,i) .EQ. -1 )
THEN
708 IF ( dttst .LE. 0 )
THEN
709 CALL w3setg ( i, mdse, mdst )
710 dtmaxi = real(nint(
dtmax+dtres(i)+0.0001))
711 dtres(i)= dtres(i)+
dtmax - dtmaxi
712 IF ( abs(dtres(i)) .LT. 0.001 ) dtres(i) = 0.
714 CALL tick21 ( tmax(:,i), dtmaxi )
716 IF ( tdata(1,i) .NE. -1 )
THEN
717 IF (
dsec21(tdata(:,i),tmax(:,i)) .GT. 0 ) &
718 tmax(:,i) = tdata(:,i)
720 IF ( toutp(1,i) .NE. -1 )
THEN
721 IF (
dsec21(toutp(:,i),tmax(:,i)) .GT. 0 ) &
722 tmax(:,i) = toutp(:,i)
725 IF (
dsec21(upnext,tmax(:,i)) .GT. 0 ) &
726 tmax(:,i) = upnext(:)
729 WRITE (mdst,9040) tmax(:,i), dtres(i), taux, &
730 tdata(:,i), toutp(:,i), upnext
736 WRITE (mdst,9041) tmax(:,i)
743 WRITE (mdst,9042) grank(i)
746 IF ( grank(i) .EQ. 1 )
THEN
754 CALL w3setw ( ii, mdse, mdst )
756 IF (
time(1) .NE. -1 )
THEN
759 IF (
time(1).NE.-1 .AND. &
760 mpi_comm_grd.NE.mpi_comm_null )
THEN
777 IF ( grank(ii) .EQ. 1 )
THEN
778 IF ( tmax(1,ii) .EQ. -1 )
THEN
782 IF (
dsec21(taux,tmax(:,ii)) .LT. 0. ) &
788 CALL w3setw ( i, mdse, mdst )
798 IF ( grank(ii) .EQ. 1 )
THEN
800 IF ( grstat(ii) .EQ. 2 ) grstat(ii) = 3
802 IF ( grstat(ii) .EQ. 3 ) &
803 WRITE (mdst,9003) ii, grstat(ii)
809 CALL prtime ( prfts )
810 WRITE (
mdsp,992) prfts, prfts, &
811 get_memory(),
'TIME', tsync(:,0)
817 WRITE (mdst,9043) tsync(:,0)
819 WRITE (mdst,9046) (ii,tsync(:,ii),ii=0,nrgrd)
826 CALL prtime ( prftn )
827 WRITE (
mdsp,991) prft0, prftn, &
828 get_memory(),
'ST02', i
831 IF ( ingrp(j,0) .GT. 1 )
WRITE (mdst,9006)
833 IF ( ingrp(j,0) .GT. 1 )
GOTO 1111
839 ELSE IF ( tsync(1,0) .NE. -1 )
THEN
849 IF ( tmax(1,ii) .EQ. -1 )
THEN
853 IF (
dsec21(taux,tmax(:,ii)) .LT. 0. ) &
860 DO jjj=1, grdlow(i,0)
862 IF ( tsync(1,ii) .EQ. -1 )
THEN
866 IF (
dsec21(taux,tsync(:,ii)) .LT. 0. ) &
876 CALL w3setw ( i, mdse, mdst )
886 IF ( grstat(ii) .EQ. 2 ) grstat(ii) = 3
888 IF ( grstat(ii) .EQ. 3 ) &
889 WRITE (mdst,9003) ii, grstat(ii)
896 WRITE (mdst,9044) tsync(:,i), taux
898 WRITE (mdst,9046) (ii,tsync(:,ii),ii=0,nrgrd)
905 CALL prtime ( prftn )
906 WRITE (
mdsp,991) prft0, prftn, &
907 get_memory(),
'ST02', i
910 IF ( ingrp(j,0) .GT. 1 )
WRITE (mdst,9006)
912 IF ( ingrp(j,0) .GT. 1 )
GOTO 1111
926 IF ( grstat(i) .EQ. 3 )
THEN
930 IF ( grstat(i).EQ.3 .AND. &
931 mpi_comm_grd .EQ. mpi_comm_null )
THEN
932 CALL w3setw ( i, mdse, mdst )
936 ELSE IF ( grstat(i).EQ.3 .AND. &
937 mpi_comm_grd .NE. mpi_comm_null )
THEN
941 WRITE (mdst,9002) i, grstat(i),
'RUNNING MODEL'
944 CALL prtime ( prft0 )
947 CALL wmsetm ( i, mdse, mdst )
948 CALL w3wave ( i, dummy2, tsync(:,i), .false., .true. )
966 CALL prtime ( prftn )
967 WRITE (
mdsp,991) prft0, prftn, get_memory(), &
982 IF ( grstat(i) .EQ. 4 )
THEN
984 CALL prtime ( prft0 )
994 WRITE (mdst,9002) i, grstat(i),
'FIRST PART'
995 WRITE (mdst,9005) fleqok(i)
1000 IF ( .NOT. fleqok(i) )
THEN
1003 CALL w3setw ( i, mdse, mdst )
1005 DO jjj=1, ingrp(j,0)
1006 CALL w3setw ( ingrp(j,jjj), mdse, mdst )
1007 flagok = flagok .AND.
dsec21(taux,
time).EQ.0. &
1008 .AND. grstat(ingrp(j,jjj)).EQ.4
1010 CALL w3setw ( i, mdse, mdst )
1012 WRITE (mdst,9004) flagok
1018 DO jjj=1, ingrp(j,0)
1019 fleqok(ingrp(j,jjj)) = .true.
1021 WRITE (mdst,9061) ingrp(j,jjj), &
1022 fleqok(ingrp(j,jjj))
1027 CALL prtime ( prftn )
1028 WRITE (
mdsp,991) prft0, prftn, &
1029 get_memory(),
'ST04', i
1033 IF ( ingrp(j,0) .GT. 1 )
WRITE (mdst,9006)
1035 IF ( ingrp(j,0) .GT. 1 )
GOTO 1111
1043 IF ( .NOT.fleqok(i) .AND. .NOT.pregte(i) )
THEN
1044 IF ( mpi_comm_grd.NE.mpi_comm_null ) &
1050 IF ( fleqok(i) )
THEN
1055 IF ( mpi_comm_grd.NE.mpi_comm_null ) &
1066 IF ( grstat(i) .EQ. 5 )
THEN
1069 WRITE (mdst,9002) i, grstat(i)-1,
'SECOND PART'
1077 IF ( mpi_comm_grd .NE. mpi_comm_null )
THEN
1084 CALL prtime ( prftn )
1085 WRITE (
mdsp,991) prft0, prftn, &
1086 get_memory(),
'ST04', i
1093 CALL prtime ( prftn )
1094 WRITE (
mdsp,991) prft0, prftn, &
1095 get_memory(),
'ST04', i
1108 IF ( grstat(i) .EQ. 5 )
THEN
1110 CALL prtime ( prft0 )
1113 WRITE (mdst,9002) i, grstat(i),
' '
1118 IF ( grdhgh(i,0) .EQ. 0 )
THEN
1124 CALL w3setw ( i, mdse, mdst )
1126 DO jjj=1, grdhgh(i,0)
1127 CALL w3setw ( grdhgh(i,jjj), mdse, mdst )
1129 ( grstat(grdhgh(i,jjj)).GE.7 .OR. &
1130 grstat(grdhgh(i,jjj)).LE.2 ) ) ) &
1133 CALL w3setw ( i, mdse, mdst )
1136 WRITE (mdst,9004) flagok
1142 IF ( .NOT.flagok .AND. .NOT.pregth(i) )
THEN
1143 IF ( mpi_comm_grd.NE.mpi_comm_null ) &
1151 CALL wmiohg ( i, flagok )
1154 IF ( mpi_comm_grd.NE.mpi_comm_null ) &
1168 IF ( grstat(i) .EQ. 6 )
CALL wmiohs ( i )
1172 IF ( grstat(i) .EQ. 6 .AND. &
1173 mpi_comm_grd .NE. mpi_comm_null )
THEN
1180 IF (grstat(i).EQ.6)
WRITE(mdst,9003) i, grstat(i)
1183 CALL prtime ( prftn )
1184 WRITE (
mdsp,991) prft0, prftn, get_memory(), &
1192 IF ( grstat(i) .EQ. 6 )
THEN
1194 CALL prtime ( prft0 )
1197 WRITE (mdst,9002) i, grstat(i),
' '
1201 CALL prtime ( prftn )
1202 WRITE (
mdsp,991) prft0, prftn, get_memory(), &
1215 IF ( grstat(i) .EQ. 7 )
THEN
1218 IF ( grstat(i).EQ.7 .AND. .NOT.flsync(i) )
THEN
1222 WRITE (mdst,9002) i, grstat(i),
' '
1225 IF ( toutp(1,i) .EQ. -1 )
THEN
1228 CALL w3setw ( i, mdse, mdst )
1232 WRITE (mdst,9090) dttst
1234 flg_o1 = dttst .EQ. 0.
1237 CALL w3setw ( i, mdse, mdst )
1239 flg_o2 = dttst .EQ. 0.
1244 IF ( .NOT.flg_o1 .AND. .NOT.flg_o2 )
THEN
1247 WRITE (mdst,9003) i, grstat(i)
1261 IF ( grstat(i) .EQ. 7 )
THEN
1263 IF ( mpi_comm_grd .NE. mpi_comm_null )
THEN
1267 CALL prtime ( prft0 )
1271 CALL w3setg ( i, mdse, mdst )
1272 CALL wmsetm ( i, mdse, mdst )
1273 IF ( flghg1 .AND. .NOT.flghg2 .AND. &
1274 grdhgh(i,0).GT.0 )
THEN
1279 IF (
mapst2(iy,ix) .GT. 0 ) &
1286 CALL w3wave ( i, dummy2, tsync(:,i), .false. )
1288 IF ( flghg1 .AND. .NOT.flghg2 .AND. &
1289 grdhgh(i,0).GT.0 )
THEN
1294 IF (
mapst2(iy,ix) .GT. 0 ) &
1300 IF ( fllstl )
inflags1(1) = .false.
1301 IF ( fllsti )
inflags1(4) = .false.
1302 IF ( fllstr )
inflags1(6) = .false.
1310 IF ( .NOT.flout(jo) ) cycle
1311 IF ( toutp(1,i) .EQ. -1 )
THEN
1312 toutp(:,i) = tonext(:,jo)
1314 dttst =
dsec21( toutp(:,i) , tonext(:,jo) )
1315 IF (dttst.LT.0.) toutp(:,i) = tonext(:,jo)
1320 IF ( .NOT.flout(jo) ) cycle
1321 IF ( toutp(1,i) .EQ. -1 )
THEN
1322 toutp(:,i) = tonext(:,jo)
1324 dttst =
dsec21( toutp(:,i) , tonext(:,jo) )
1325 IF (dttst.LT.0.) toutp(:,i) = tonext(:,jo)
1330 WRITE (mdst,9091) toutp(:,i)
1340 CALL w3seto ( i, mdse, mdst )
1343 IF (
nrqpo.NE.0 )
CALL mpi_startall &
1347 IF ( nopts.NE.0 .AND. iaproc.EQ.nappnt )
THEN
1348 CALL w3setg ( i, mdse, mdst )
1349 CALL w3seta ( i, mdse, mdst )
1354 IF (
nrqpo .NE. 0 )
THEN
1355 ALLOCATE ( status(mpi_status_size,
nrqpo) )
1358 DEALLOCATE ( status )
1363 WRITE (mdst,9092) nopts
1371 CALL prtime ( prftn )
1372 WRITE (
mdsp,991) prft0, prftn,get_memory(), &
1379 ELSE IF ( flg_o1 )
THEN
1383 CALL w3seto ( i, mdse, mdst )
1384 CALL w3setw ( i, mdse, mdst )
1398 IF ( flout(jo) )
THEN
1401 IF ( dttst .LE. 0. )
THEN
1402 CALL tick21 ( tonext(:,jo), dtout(jo) )
1403 dttst =
dsec21( tonext(:,jo), tolast(:,jo) )
1404 IF ( dttst .LT. 0. )
THEN
1416 IF ( .NOT.flout(jo) ) cycle
1417 IF ( toutp(1,i) .EQ. -1 )
THEN
1418 toutp(:,i) = tonext(:,jo)
1420 dttst =
dsec21( toutp(:,i) , tonext(:,jo) )
1421 IF (dttst.LT.0.) toutp(:,i) = tonext(:,jo)
1436 IF ( flout(jo) )
THEN
1439 IF ( dttst .LE. 0. )
THEN
1440 CALL tick21 ( tonext(:,jo), dtout(jo) )
1441 dttst =
dsec21( tonext(:,jo), tolast(:,jo) )
1442 IF ( dttst .LT. 0. )
THEN
1454 IF ( .NOT.flout(jo) ) cycle
1455 IF ( toutp(1,i) .EQ. -1 )
THEN
1456 toutp(:,i) = tonext(:,jo)
1458 dttst =
dsec21( toutp(:,i) , tonext(:,jo) )
1459 IF (dttst.LT.0.) toutp(:,i) = tonext(:,jo)
1466 WRITE (mdst,9991) toutp(:,i)
1483 IF ( grstat(i) .EQ. 8 )
THEN
1486 WRITE (mdst,9002) i, grstat(i),
' '
1491 IF ( unipts .AND. do_upt )
THEN
1492 CALL w3setw ( i, mdse, mdst )
1495 WRITE (mdst,9095) flagok
1504 CALL w3setw ( ii, mdse, mdst )
1505 flagok = flagok .AND. grstat(ii).EQ.8 .AND. &
1509 WRITE (mdst,9096) flagok
1515 CALL prtime ( prft0 )
1520 CALL w3seto ( 0, mdse, mdst )
1521 CALL tick21 ( upnext, dtout(2) )
1522 IF (
dsec21(upnext,uplast) .GE. 0. )
THEN
1523 tonext(:,2) = upnext
1531 CALL w3setw ( ii, mdse, mdst )
1533 IF ( dttst .GT. 0. )
THEN
1535 ELSE IF ( dttst .EQ. 0 )
THEN
1542 WRITE (mdst,9003) ii, grstat(ii)
1548 CALL prtime ( prftn )
1549 WRITE (
mdsp,991) prft0, prftn, &
1550 get_memory(),
'UPTS',i
1561 CALL w3setw ( i, mdse, mdst )
1563 IF ( dttst .GT. 0. )
THEN
1566 ELSE IF ( dttst .EQ. 0 )
THEN
1571 WRITE (mdst,9003) i, grstat(i)
1575 IF ( grstat(i).EQ.9 .OR. grstat(i).EQ.99 )
THEN
1593 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1594 CALL wmprnt ( mdso, nrgrd, tsync(:,0), grstat )
1597 IF ( grstat(i) .EQ. 9 ) grstat(i) = 0
1600 IF ( .NOT. done )
GOTO 2099
1601 IF ( minval(grstat) .EQ. 99 )
EXIT loop_outer
1606 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1607 CALL wwtime ( wtime )
1608 WRITE (mdss,902) wtime
1613 CALL wmsetm ( i, mdse, mdst )
1614 IF ( mpi_comm_grd .NE. mpi_comm_null )
THEN
1623 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,999)
1635 IF ( improc .EQ. nmperr )
WRITE (mdse,1000) i, grstat(i)
1636 CALL extcde ( 2000 )
1640 IF ( improc .EQ. nmperr )
WRITE (mdse,1001) i, tsync(:,i), &
1642 CALL extcde ( 2001 )
1646 IF ( improc .EQ. nmperr )
WRITE (mdse,1002) j, ingrp(j,1), &
1647 ingrp(j,jj), tsync(:,ingrp(j,1)), tsync(:,ingrp(j,jj)), &
1648 tend(:,ingrp(j,1)), tend(:,ingrp(j,jj))
1649 CALL extcde ( 2002 )
1653 IF ( improc .EQ. nmperr )
WRITE (mdse,1099)
1654 CALL extcde ( 2099 )
1659 900
FORMAT (
' ========== STARTING WAVE MODEL (WMWAVE) ==========', &
1660 '============================'/)
1661 901
FORMAT (
' MWW3 calculating for ',a,
' at ',a,
' status [', &
1663 902
FORMAT (
' MWW3 reached the end of the computation loop at ',a)
1665 990
FORMAT (1x,3f12.3,
' WMWAVE INIT')
1666 991
FORMAT (1x,3f12.3,
' WMWAVE ',a4,i6)
1667 992
FORMAT (1x,3f12.3,
' WMWAVE ',a4,i9.8,i7.6)
1669 999
FORMAT (/
' ========== END OF WAVE MODEL (WMWAVE) ============', &
1670 '============================'/)
1672 1000
FORMAT (/
' *** WAVEWATCH III ERROR IN WMWAVE : *** '/ &
1673 ' GRID',i3,
' HAS ILLEGAL GRSTAT :',i8/)
1675 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN WMWAVE : *** '/ &
1676 ' GRID',i3,
' HAS ILLEGAL TSYNC / TEND '/ &
1677 ' TSYNC :',i9.8,i7.6/ &
1678 ' TEND :',i9.8,i7.6/)
1680 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN WMWAVE : *** '/ &
1681 ' GROUP',i3,
' HAS INCOMPATIBLE TIMES ', &
1682 'IN GRIDS ',i3,
' AND ',i3/ &
1683 ' TSYNC :',i9.8,i7.6,1x,i9.8,i7.6/ &
1684 ' TEND :',i9.8,i7.6,1x,i9.8,i7.6/)
1688 1099
FORMAT (/
' *** WAVEWATCH III ERROR IN WMWAVE : *** '/ &
1689 ' ABORT FOR POSSIBLE ENDLESS LOOP '/)
1692 9000
FORMAT (
' TEST WMWAVE : LOOP',i8,
' ======================', &
1693 '===== (',i9.8,i7.6,
' ) =='/ &
1694 ' GRID, GRSTAT, TIME, TSYNC, TEND')
1695 9001
FORMAT (
' ',i3,i3,3(i10.8,i7.6))
1696 9002
FORMAT (
' TEST WMWAVE : PROCESSING GRID',i3, &
1700 9902
FORMAT (
' MPIT WMWAVE : PROCESSING GRID',i3, &
1704 9003
FORMAT (
' TEST WMWAVE : GRID',i3,
' STATUS RESET TO',i3)
1705 9004
FORMAT (
' TEST WMWAVE : FLAGOK = ',l1)
1706 9005
FORMAT (
' TEST WMWAVE : FLEQOK = ',l1)
1707 9006
FORMAT (
' TEST WMWAVE : CYCLE GROUP')
1711 9020
FORMAT (
' TEST WMWAVE : DTTST ',e10.3)
1712 9021
FORMAT (
' TEST WMWAVE : TIME :',i10.8,i7.6/ &
1713 ' TDATA :',i10.8,i7.6/ &
1714 ' TEND :',i10.8,i7.6)
1718 9040
FORMAT (
' TEST WMWAVE : TMAX :',i10.8,i7.6,f8.2/ &
1719 ' DTMAX :',i10.8,i7.6/ &
1720 ' TDATA :',i10.8,i7.6/ &
1721 ' TOUTP :',i10.8,i7.6/ &
1722 ' UPNEXT:',i10.8,i7.6)
1723 9041
FORMAT (
' TEST WMWAVE : TMAX :',i10.8,i7.6)
1726 9941
FORMAT (
' MPIT WMWAVE : TMAX :',i10.8,i7.6)
1729 9042
FORMAT (
' TEST WMWAVE : GRANK :',i4,
' FOR GRSTAT = 2')
1730 9043
FORMAT (
' TEST WMWAVE : GLOBAL TSYNC :',i10.8,i7.6)
1731 9044
FORMAT (
' TEST WMWAVE : LOCAL TSYNC :',i10.8,i7.6, &
1733 9045
FORMAT (
' TEST WMWAVE : GRID TSYNC')
1734 9046
FORMAT (
' ',i5,i10.8,i7.6)
1738 9061
FORMAT (
' GRID',i4,
', FLEQOK = ',l1)
1742 9090
FORMAT (
' TEST WMWAVE : DTTST ',e10.3)
1743 9091
FORMAT (
' TEST WMWAVE : NEXT TOUTP :',i10.8,i7.6)
1746 9991
FORMAT (
' MPIT WMWAVE : NEXT TOUTP :',i10.8,i7.6)
1749 9092
FORMAT (
' TEST WMWAVE : UNIFIED POINT OUTPUT PREP DONE',i6)
1753 9095
FORMAT (
' TEST WMWAVE : UNIFIED POINT OUTPUT, FLAGOK = ',l1)
1754 9096
FORMAT (
' ALL GRIDS, FLAGOK = ',l1)
1758 9100
FORMAT (
' TEST WMWAVE : LOOP DONE ======================', &
1759 '==============================')
1776 SUBROUTINE wmprnt ( MDSO, NRGRD, TSYNC, GRSTAT )
1845 INTEGER,
INTENT(IN) :: MDSO, NRGRD, TSYNC(2), GRSTAT(NRGRD)
1850 INTEGER,
PARAMETER :: IW = 15
1851 INTEGER :: I, I0, IN
1853 INTEGER,
SAVE :: IENT = 0
1855 INTEGER,
SAVE :: IDLAST(2)
1856 LOGICAL,
SAVE :: FIRST = .true.
1857 CHARACTER(LEN=23) :: IDTIME
1858 CHARACTER(LEN=3) :: STR(IW), LNE(IW)
1863 CALL strace (ient,
'WMPRNT')
1871 WRITE (mdso,900) nrgrd, lne,
'-+'
1879 CALL stme21 ( tsync, idtime )
1881 DO i=1, min(iw,nrgrd)
1882 WRITE (str(i),
'(I3)') grstat(i)
1884 DO i=1+min(iw,nrgrd), iw
1888 IF ( idlast(1).EQ.tsync(1) .AND. idlast(2).EQ.tsync(2) )
THEN
1890 WRITE (mdso,903) str,
' |'
1892 ELSE IF ( idlast(1) .EQ. tsync(1) )
THEN
1893 WRITE (mdso,902) idtime(12:19), str,
' |'
1895 WRITE (mdso,901) idtime(01:19), str,
' |'
1899 IF ( nrgrd .GT. iw )
THEN
1905 DO i=i0, min(in,nrgrd)
1906 WRITE (str(i-i0+1),
'(I3)') grstat(i)
1908 DO i=1+min(in,nrgrd), in
1911 WRITE (mdso,903) str,
' |'
1912 IF ( in .GE. nrgrd )
EXIT
1916 WRITE (mdso,904) lne,
'-+'
1922 900
FORMAT (1x,
' Time (sync rank 1) | Status for',i3,
' grids'/ &
1923 1x,
'---------------------+',16a)
1924 901
FORMAT (2x,a19,
' |',16a)
1925 902
FORMAT (2x,11x,a8,
' |',16a)
1926 903
FORMAT (21x,
' |',16a)
1927 904
FORMAT (1x,
'---------------------+',16a)
1951 SUBROUTINE wmbcst ( DATA, NR, IMOD, NMOD, ID )
2032 INTEGER,
INTENT(IN) :: NR, IMOD, NMOD, ID
2033 INTEGER,
INTENT(INOUT) :: DATA(NR)
2039 INTEGER :: ITAG, IP, IERR_MPI, &
2040 STATUS(MPI_STATUS_SIZE)
2043 INTEGER,
SAVE :: IENT = 0
2047 CALL strace (ient,
'WMBCST')
2054 itag =
mtagb + imod + id*nmod
2063 IF (
allprc(ip,imod) .EQ. 0 )
THEN
2066 CALL mpi_send (
DATA, nr, mpi_integer, ip-1, &
2079 CALL mpi_recv (
DATA, nr, mpi_integer,
croot-1, itag, &
2096 9000
FORMAT (
' TEST WMBCST : INPUTS :',4i4)
2097 9001
FORMAT (
' TEST WMBCST : IMPROC, NMPROC:',2i5,
' ALLPRC :')
2098 9002
FORMAT (14x,13i5)
2102 9010
FORMAT (
' TEST WMBCST : IAPROC =',i5,
' SENDING TO ',i5)
2106 9020
FORMAT (
' TEST WMBCST : IAPROC =',i5, &
2107 ' RECEIVING FROM ',i5)
2111 9030
FORMAT (
' TEST WMBCST : IAPROC =',i5,
' NO ACTION')
2133 SUBROUTINE wmwout ( IMOD, NMOD, ID )
2219 INTEGER,
INTENT(IN) :: IMOD, NMOD, ID
2225 INTEGER :: ITAG, IP, IERR_MPI, &
2226 STATUS(MPI_STATUS_SIZE)
2229 INTEGER,
SAVE :: IENT = 0
2232 REAL,
SAVE :: DUMMY = 999.
2236 CALL strace (ient,
'WMWOUT')
2245 itag =
mtagb + imod + id*nmod
2249 IF (
iaproc .LT. 1 )
THEN
2260 IF (
iaproc .EQ. 1 )
THEN
2264 CALL mpi_send ( dummy, 1, mpi_integer, ip-1, &
2276 CALL mpi_recv ( dummy, 1, mpi_integer, 0, itag, &
2292 9000
FORMAT (
' TEST WMWOUT : INPUTS :',4i4)
2293 9001
FORMAT (
' TEST WMWOUT : IAPROC, NAPROC, NTPROC :',3i5)
2294 9002
FORMAT (
' TEST WMWOUT : NOT IN COMMUNICATOR')
2298 9010
FORMAT (
' TEST WMWOUT : IAPROC =',i5,
' SENDING TO ',i5)
2302 9020
FORMAT (
' TEST WMWOUT : IAPROC =',i5, &
2303 ' RECEIVING FROM ',i5)
2307 9030
FORMAT (
' TEST WMWOUT : IAPROC =',i5,
' NO ACTION')