108 INTEGER,
PRIVATE :: NTRMAX = 1000
129 SUBROUTINE wminit ( IDSI, IDSO, IDSS, IDST, IDSE, IFNAME, &
446 INTEGER,
INTENT(IN) :: IDSI, IDSO, IDSS, IDST, IDSE, &
448 CHARACTER*(*),
INTENT(IN) :: IFNAME
449 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: PREAMB
454 INTEGER :: MDSE2, IERR, I, J, NMOVE, TTIME(2), &
455 ILOOP, MDSI2, SCRATCH, RNKMIN, &
456 RNKMAX, RNKTMP, GRPMIN, GRPMAX, II, &
457 NDSREC, NDSFND, NPTS, JJ, IP1, IPN, &
458 MPI_COMM_LOC, NMPSC2, JJJ, TOUT(2), &
459 TLST(2), NCPROC, NPOUTT, NAPLOC, &
460 NAPRES, NAPADD, NAPBCT, IFI, IFJ, IW,&
462 INTEGER :: STMPT(2), ETMPT(2)
464 INTEGER :: IERR_MPI, BGROUP, LGROUP, IROOT
467 INTEGER,
SAVE :: IENT = 0
469 INTEGER,
ALLOCATABLE :: MDS(:,:), NTRACE(:,:), ODAT(:,:), &
470 TMPRNK(:), TMPGRP(:), NINGRP(:), &
471 TMOVE(:,:), LOADMP(:,:), IPRT(:,:), &
472 NDPOUT(:), OUTFF(:,:)
473 REAL :: DTTST, XX, YY
477 REAL(KIND=8) :: get_memory
479 REAL,
ALLOCATABLE :: X(:), Y(:), AMOVE(:), DMOVE(:), &
481 LOGICAL :: FLT, TFLAGI, TFLAGS(-7:14), PSHARE
482 LOGICAL,
ALLOCATABLE :: FLGRD(:,:,:), FLRBPI(:), BCDTMP(:), &
483 USEINP(:), LPRT(:), FLGR2(:,:,:), &
484 FLGD(:,:), FLG2(:,:), FLG2D(:,:), &
486 CHARACTER(LEN=1) :: COMSTR
487 CHARACTER(LEN=3) :: IDSTR(9), IDTST
488 CHARACTER(LEN=5) :: STOUT, OUTSTR(6)
489 CHARACTER(LEN=6) :: ACTION(11), YESXX, XXXNO
490 CHARACTER(LEN=8) :: LFILE, STTIME
492 CHARACTER(LEN=9) :: TFILE
494 CHARACTER(LEN=13) :: STDATE, MN, TNAMES(9)
495 CHARACTER(LEN=40) :: PN
497 ALLOCATABLE :: INAMES(:,:), MNAMES(:)
499 ALLOCATABLE :: PNAMES(:)
500 CHARACTER(LEN=12) :: FORMAT
502 CHARACTER(LEN=18) :: TFILE
505 CHARACTER(LEN=18) :: PFILE
508 CHARACTER(LEN=13) :: IDFLDS(-7:9)
509 CHARACTER(LEN=23) :: DTME21
510 CHARACTER(LEN=30) :: IDOTYP(8)
511 CHARACTER(LEN=80) :: TNAME
512 CHARACTER(LEN=80) :: LINE
513 CHARACTER(LEN=80) :: LINEIN
514 CHARACTER(LEN=8) :: WORDS(6)
518 REAL,
POINTER :: X(:), Y(:)
519 CHARACTER(LEN=40),
POINTER :: PNAMES(:)
522 TYPE(ot2tpe),
ALLOCATABLE :: OT2(:)
527 DATA idflds /
'ice param. 1 ' ,
'ice param. 2 ' , &
528 'ice param. 3 ' ,
'ice param. 4 ' , &
530 'mud density ' ,
'mud thkness ' , &
532 'water levels ' ,
'currents ' , &
533 'winds ' ,
'ice fields ' , &
534 'momentum ' ,
'air density ' , &
535 'mean param. ' ,
'1D spectra ' , &
538 DATA idotyp /
'Fields of mean wave parameters' , &
540 'Track point output ' , &
543 'Separated wave field data ' , &
544 'Fields for coupling ' , &
545 'Restart files second request '/
547 DATA idstr /
'LEV',
'CUR',
'WND',
'ICE',
'TAU',
'RHO', &
548 'DT0',
'DT1',
'DT2' /
550 DATA yesxx /
'YES/--' /
551 DATA xxxno /
'---/NO' /
555 CALL prtime ( prft0 )
558 CALL date_and_time ( values=clkdt1 )
560 mpi_comm_loc = mpi_comm
562 mpi_comm_mwave = mpi_comm
563 CALL mpi_comm_size ( mpi_comm_mwave, nmproc, ierr_mpi )
564 CALL mpi_comm_rank ( mpi_comm_mwave, improc, ierr_mpi )
568 IF (
PRESENT(preamb) ) fnmpre = preamb
579 CALL wmuset ( 6,6, 5, .true.,
'SYS',
'stdin',
'Standart input' )
580 CALL wmuset ( 6,6, 6, .true.,
'SYS',
'stdout',
'Standart output')
583 CALL wmuset (6,6,103, .true.,
'FIX', desc=
'Reserved SNL2' )
584 CALL wmuset (6,6,104, .true.,
'FIX', desc=
'Reserved SNL2' )
585 CALL wmuset (6,6,105, .true.,
'FIX', desc=
'Reserved SNL2' )
586 CALL wmuset (6,6,106, .true.,
'FIX', desc=
'Reserved SNL2' )
587 CALL wmuset (6,6,107, .true.,
'FIX', desc=
'Reserved SNL2' )
588 CALL wmuset (6,6,108, .true.,
'FIX', desc=
'Reserved SNL2' )
589 CALL wmuset (6,6,109, .true.,
'FIX', desc=
'Reserved SNL2' )
590 CALL wmuset (6,6,110, .true.,
'FIX', desc=
'Reserved SNL2' )
591 CALL wmuset (6,6,111, .true.,
'FIX', desc=
'Reserved SNL2' )
592 CALL wmuset (6,6,112, .true.,
'FIX', desc=
'Reserved SNL2' )
593 CALL wmuset (6,6,113, .true.,
'FIX', desc=
'Reserved SNL2' )
594 CALL wmuset (6,6,114, .true.,
'FIX', desc=
'Reserved SNL2' )
595 CALL wmuset (6,6,117, .true.,
'FIX', desc=
'Reserved SNL2' )
607 IF ( improc .EQ. nmperr )
THEN
615 CALL itrace ( mdst, ntrmax )
618 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,900)
623 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
624 WRITE (mdss,910) ifname, mdsi
626 OPEN (mdsi,
file=trim(fnmpre)//ifname,status=
'OLD',err=2000, &
629 READ (mdsi,
'(A)',
END=2001,ERR=2002) comstr
630 IF (comstr.EQ.
' ') comstr =
'$'
631 CALL wmuset ( mdss, mdss, mdsi, .true.,
'INP', &
632 trim(fnmpre)//ifname,
'Model control input file')
637 iw = 1 + int( log10( real(nmproc) + 0.5 ) )
638 iw = max( 3 , min( 9 , iw ) )
639 WRITE (
FORMAT,
'(A5,I1.1,A1,I1.1,A4)')
'(A4,I',iw,
'.',iw,
',A5)'
644 WRITE (tfile,format)
'test', improc,
'.mww3'
647 WRITE (pfile,format)
'prf.', improc,
'.mww3'
650 IF ( improc .EQ. nmplog )
THEN
651 OPEN (mdso,
file=trim(fnmpre)//lfile,err=2010,iostat=ierr)
652 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
653 WRITE (mdss,911) lfile, mdso
654 CALL wmuset ( mdss, mdss, mdso, .true.,
'OUT', &
655 trim(fnmpre)//lfile,
'Log file')
657 CALL wmuset ( mdss, mdss, mdso, .true.,
'XXX', &
658 'Log file on other processors')
661 IF ( mdst.NE.mdso .AND. mdst.NE.mdss .AND.
tstout )
THEN
662 ift = len_trim(tfile)
663 OPEN (mdst,
file=trim(fnmpre)//tfile(:ift),err=2011,iostat=ierr)
664 CALL wmuset ( mdss, mdst, mdst, .true.,
'OUT', &
665 trim(fnmpre)//tfile(:ift),
'Test output file')
669 ift = len_trim(pfile)
670 CALL wmuget ( mdss, mdst, mdsp,
'OUT' )
671 CALL wmuset ( mdss, mdst, mdsp, .true.,
'OUT', &
672 trim(fnmpre)//pfile(:ift),
'Profiling file')
673 OPEN (mdsp,
file=trim(fnmpre)//pfile(:ift),err=2011,iostat=ierr)
679 CALL strace (ient,
'WMINIT')
682 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,912) comstr
684 IF ( improc .EQ. nmplog )
THEN
685 CALL wwdate ( stdate )
686 CALL wwtime ( sttime )
687 WRITE (mdso,901) wwver, stdate, sttime
691 WRITE(mdst,9000) idsi, idso, idss, idst, idse, ifname
699 CALL nextln ( comstr , mdsi , mdse2 )
700 READ (mdsi,*,
END=2001,ERR=2002) NRGRD, NRINP, UNIPTS, &
701 iostyp, upproc, pshare
702 iostyp = max( 0 , min( 3 , iostyp ) )
704 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
705 WRITE (mdss,920) nrgrd
706 IF ( nrinp .EQ. 0 )
THEN
709 WRITE (mdss,922) nrinp
712 WRITE (mdss,923) yesxx
714 WRITE (mdss,923) xxxno
716 WRITE (mdss,1923) iostyp
719 WRITE (mdss,2923) yesxx
721 WRITE (mdss,2923) xxxno
724 IF ( iostyp.GT.1 .AND. pshare )
THEN
725 WRITE (mdss,3923) yesxx
726 ELSE IF ( iostyp.GT. 1 )
THEN
727 WRITE (mdss,3923) xxxno
731 IF ( nrgrd .LT. 1 )
GOTO 2020
732 IF ( nrinp .LT. 0 )
GOTO 2021
733 IF ( nrinp.EQ.0 .AND. .NOT.unipts ) nrinp = -1
737 CALL w3nmod ( nrgrd, mdse2, mdst, nrinp )
738 CALL w3ndat ( mdse2, mdst )
739 CALL w3naux ( mdse2, mdst )
740 CALL w3nout ( mdse2, mdst )
741 CALL w3ninp ( mdse2, mdst )
742 CALL wmndat ( mdse2, mdst )
746 ALLOCATE ( mds(15,nrgrd), ntrace(2,nrgrd), odat(40,0:nrgrd), &
747 flgrd(nogrp,ngrpp,nrgrd), ot2(0:nrgrd), flgd(nogrp,nrgrd), &
748 mdsf(-nrinp:nrgrd,jfirst:9), iprt(6,nrgrd), lprt(nrgrd), &
749 flgr2(nogrp,ngrpp,nrgrd),flg2d(nogrp,ngrpp), flg1d(nogrp), &
750 flg2(nogrp,nrgrd),outff(7,0:nrgrd))
761 CALL wmuget ( mdse, mdst, ndsrec,
'INP' )
762 CALL wmuset ( mdse, mdst, ndsrec, .true.,
'I/O', name=
'...', &
763 desc=
'Recyclable I/O (mod_def etc.)' )
764 CALL wmuget ( mdse, mdst, scratch,
'SCR' )
765 CALL wmuset ( mdse, mdst, scratch, .true., desc=
'Scratch file', &
766 name=trim(fnmpre)//
'ww3_multi.scratch' )
768 IF(mdst.EQ.ndsrec)
THEN
769 IF ( improc .EQ. nmperr ) &
770 WRITE(mdse,
'(A,I8)')
'RECYCLABLE UNIT NUMBERS AND '&
771 //
'TEST OUTPUT UNIT NUMBER ARE THE SAME : ',mdst
782 ntrace( 2,i) = ntrmax
786 WRITE (mdst,9020)
'INITIAL'
788 WRITE (mdst,9021) i, mds(:,i), ntrace(:,i)
800 ALLOCATE ( inames(2*nrgrd,jfirst:9), mnames(-nrinp:2*nrgrd), &
801 tmprnk(2*nrgrd), tmpgrp(2*nrgrd), ningrp(2*nrgrd), &
802 rp1(2*nrgrd), rpn(2*nrgrd), bcdtmp(nrgrd+1:2*nrgrd) )
803 ALLOCATE ( grank(nrgrd), grgrp(nrgrd), useinp(nrinp) )
804 ALLOCATE ( cplinp(nrinp) )
820 CALL nextln ( comstr , mdsi , mdse2 )
821 CALL w3seti ( -i, mdse, mdst )
823 READ (mdsi,*,
END=2001,ERR=2002) MNAMES(-I), INFLAGS1(JFIRST:9)
831 CALL w3seti ( 0, mdse, mdst )
832 CALL w3seto ( 0, mdse, mdst )
837 CALL nextln ( comstr , mdsi , mdse2 )
838 READ (mdsi,*,
END=2001,ERR=2002) MNAMES(0)
840 IF ( iostyp .LE. 1 )
THEN
841 nmpupt = max(1,nmproc-2)
850 DO i=nrgrd+1, 2*nrgrd
851 CALL nextln ( comstr , mdsi , mdse2 )
852 READ (mdsi,*,
END=2001,ERR=2002) MNAMES(I), TNAMES(:), &
853 tmprnk(i), tmpgrp(i), rp1(i), rpn(i), bcdtmp(i)
854 inames(i,:) = tnames(:)
855 rp1(i) = max( 0. , min( 1. , rp1(i) ) )
856 rpn(i) = max( rp1(i) , min( 1. , rpn(i) ) )
861 rnktmp = minval( tmprnk(nrgrd+1:2*nrgrd) )
865 DO j=nrgrd+1, 2*nrgrd
866 IF ( tmprnk(j) .EQ. rnktmp )
THEN
868 CALL w3seti ( i, mdse, mdst )
871 inflags1(10) = .true.
874 inflags1(10) = .true.
876 inames(i,:)= inames(j,:)
877 mnames(i) = mnames(j)
878 tmprnk(i) = tmprnk(j)
879 tmpgrp(i) = tmpgrp(j)
882 bcdump(i) = bcdtmp(j)
884 WRITE (mdst,9031) i, mnames(i), inflags1, tmprnk(i), &
885 tmpgrp(i), rp1(i), rpn(i)
889 IF ( i .EQ. nrgrd )
EXIT
895 ALLOCATE ( inpmap(nrgrd,jfirst:10), idinp(-nrinp:nrgrd,jfirst:10) )
900 CALL w3seti ( i, mdse, mdst )
902 IF ( inames(i,j) .EQ.
'native' )
THEN
906 inflags1(j) = .false.
907 IF ( inames(i,j)(1:4) .EQ.
'CPL:' )
THEN
908 IF ( inames(i,j)(5:) .EQ.
'native' )
THEN
915 IF ( mnames(-jj) .EQ. inames(i,j)(5:) )
THEN
920 IF ( inpmap(i,j) .EQ. 0 )
GOTO 2030
921 IF ( .NOT. inputs(inpmap(i,j))%INFLAGS1(j) )
GOTO 2031
922 useinp(-inpmap(i,j)) = .true.
923 cplinp(-inpmap(i,j)) = .true.
925 ELSE IF ( inames(i,j) .NE.
'no' )
THEN
928 IF ( mnames(-jj) .EQ. inames(i,j) )
THEN
934 IF ( inpmap(i,j) .EQ. 0 )
GOTO 2030
935 IF ( .NOT. inputs(-inpmap(i,j))%INFLAGS1(j) )
GOTO 2031
936 useinp(inpmap(i,j)) = .true.
941 IF(.NOT. inflags2(j)) inflags2(j)=inflags1(j)
946 IF ( .NOT.useinp(i) .AND. &
947 mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
948 ii = len_trim(mnames(-i))
949 WRITE (mdse,1032) mnames(-i)(1:ii)
956 IF ( i .EQ. 0 ) cycle
957 CALL w3seti ( i, mdse, mdst )
960 IF ( inpmap(i,j) .LT. 0 ) cycle
962 IF ( inflags1(j) )
THEN
963 CALL wmuget ( mdse, mdst, ndsfnd,
'INP' )
964 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
965 desc=
'Input data file' )
974 IF ( i .EQ. 0 ) cycle
975 WRITE (mdst,9021) i, mdsf(i,jfirst:9)
985 rnkmax = maxval( tmprnk(1:nrgrd) ) + 1
989 rnkmin = minval( tmprnk(1:nrgrd) )
990 IF ( rnkmin .EQ. rnkmax )
EXIT
993 IF ( tmprnk(i) .EQ. rnkmin )
THEN
1002 WRITE (mdst,9033) i, mnames(i), grank(i)
1007 grpmax = maxval( tmpgrp(1:nrgrd) ) + 1
1015 IF ( grank(i) .EQ. rnktmp ) &
1016 grpmin = min( grpmin , tmpgrp(i) )
1018 IF ( grpmin .EQ. grpmax )
EXIT
1021 IF ( grank(i).EQ.rnktmp .AND. grpmin.EQ.tmpgrp(i) )
THEN
1024 ningrp(nrgrp) = ningrp(nrgrp) + 1
1031 WRITE (mdst,9034) nrgrp
1033 WRITE (mdst,9033) i, mnames(i), grgrp(i)
1035 WRITE (mdst,9035) ningrp(1:nrgrp)
1038 ALLOCATE ( ingrp(nrgrp,0:maxval(ningrp(:nrgrp))) )
1039 DEALLOCATE ( tmprnk, tmpgrp, ningrp, bcdtmp )
1043 ingrp(grgrp(i),0) = ingrp(grgrp(i),0) + 1
1044 ingrp(grgrp(i),ingrp(grgrp(i),0)) = i
1050 WRITE (mdst,9037) j, ingrp(j,:ingrp(j,0))
1058 CALL prtime ( prftn )
1059 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8.b'
1065 j = len_trim(mnames(0))
1066 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1067 WRITE (mdss,986) mnames(0)(1:j)
1071 CALL w3iogr (
'GRID', ndsrec, 0, mnames(0)(1:j) )
1077 IF ( nrinp .GT. 0 )
THEN
1078 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,924)
1079 IF ( nmplog .EQ. improc )
WRITE (mdso,924)
1081 IF ( .NOT. useinp(i) ) cycle
1082 CALL w3seti ( -i, mdse, mdst )
1083 action(1:6) =
'--- '
1085 IF ( inflags1(j) ) action(j) =
' X '
1088 IF ( inflags1(7) ) action(7) =
'1 '
1089 IF ( inflags1(8) ) action(8) =
'2 '
1090 IF ( inflags1(9) ) action(9) =
'3 '
1091 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1092 WRITE (mdss,925) i, mnames(-i), action(jfirst:9)
1093 IF ( nmplog .EQ. improc ) &
1094 WRITE (mdso,925) i, mnames(-i), action(jfirst:9)
1096 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,926)
1097 IF ( nmplog .EQ. improc )
WRITE (mdso,926)
1101 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,927)
1102 IF ( nmplog .EQ. improc )
WRITE (mdso,927)
1103 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1104 WRITE (mdss,928) mnames(0)
1105 IF ( nmplog .EQ. improc ) &
1106 WRITE (mdso,928) mnames(0)
1107 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,929)
1108 IF ( nmplog .EQ. improc )
WRITE (mdso,929)
1111 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,930)
1112 IF ( nmplog .EQ. improc )
WRITE (mdso,930)
1114 CALL w3seti ( i, mdse, mdst )
1115 action(1:6) =
'--- '
1117 IF ( inflags1(j) .AND. inpmap(i,j) .EQ. 0 )
THEN
1118 action(j) =
'native'
1119 ELSE IF ( inflags1(j) .AND. inpmap(i,j) .EQ. -999 )
THEN
1120 action(j) =
'native'
1121 ELSE IF ( inpmap(i,j) .GT. 0 )
THEN
1122 action(j) = mnames(-inpmap(i,j))
1123 ELSE IF ( inpmap(i,j) .LT. 0 )
THEN
1124 action(j) = mnames( inpmap(i,j))
1128 IF ( inflags1(7) ) action(7) =
'1 '
1129 IF ( inflags1(8) ) action(8) =
'2 '
1130 IF ( inflags1(9) ) action(9) =
'3 '
1131 IF ( inflags1(10) )
THEN
1136 IF ( bcdump(i) ) action(11) =
'y '
1137 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1138 WRITE (mdss,931) i, mnames(i), action(1:10), grank(i), &
1139 grgrp(i), action(11)
1140 IF ( nmplog .EQ. improc ) &
1141 WRITE (mdso,931) i, mnames(i), action(1:10), grank(i), &
1142 grgrp(i), action(11)
1144 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,932)
1145 IF ( nmplog .EQ. improc )
WRITE (mdso,932)
1147 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1148 WRITE (mdss,933)
'Group information'
1149 IF ( nmplog .EQ. improc ) &
1150 WRITE (mdso,933)
'Group information'
1152 WRITE (line(1:6),
'(1X,I3,2X)') j
1155 IF ( jjj .GT. 60 )
THEN
1156 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1157 WRITE (mdss,934) line(1:jjj)
1158 IF ( nmplog .EQ. improc )
WRITE (mdso,934) line(1:jjj)
1162 WRITE (line(jjj+1:jjj+3),
'(I3)') ingrp(j,jj)
1164 line(jjj+4:jjj+5) =
' ('
1165 WRITE (line(jjj+6:jjj+11),
'(F6.4)') rp1(ingrp(j,jj))
1166 line(jjj+12:jjj+12) =
'-'
1167 WRITE (line(jjj+13:jjj+18),
'(F6.4)') rpn(ingrp(j,jj))
1168 line(jjj+19:jjj+19) =
')'
1172 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1173 WRITE (mdss,934) line(1:jjj)
1174 IF ( nmplog .EQ. improc )
WRITE (mdso,934) line(1:jjj)
1176 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,935)
1177 IF ( nmplog .EQ. improc )
WRITE (mdso,935)
1185 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,940)
1187 CALL nextln ( comstr , mdsi , mdse2 )
1189 READ (mdsi,*,
END=2001,ERR=2002) STMPT, etmpt
1191 READ (mdsi,*,
END=2001,ERR=2002) STIME, etime
1194 CALL stme21 ( stime , dtme21 )
1195 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,941) dtme21
1196 CALL stme21 ( etime , dtme21 )
1197 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,942) dtme21
1200 CALL w3setw ( i, mdse, mdst )
1204 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,943)
1206 CALL nextln ( comstr , mdsi , mdse2 )
1207 READ (mdsi,*,
END=2001,ERR=2002) FLGHG1, flghg2
1208 flghg2 = flghg1 .AND. flghg2
1210 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1212 WRITE (mdss,944) yesxx
1214 WRITE (mdss,944) xxxno
1217 WRITE (mdss,945) yesxx
1219 WRITE (mdss,945) xxxno
1225 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,950)
1235 CALL nextln ( comstr , mdsi , mdse2 )
1239 READ (mdsi,
'(A)') linein
1240 READ(linein,*,iostat=ierr) words
1243 READ(words( 1 ), * ) odat(1,1)
1244 READ(words( 2 ), * ) odat(2,1)
1245 READ(words( 3 ), * ) odat(3,1)
1246 READ(words( 4 ), * ) odat(4,1)
1247 READ(words( 5 ), * ) odat(5,1)
1249 READ(words( 1 ), * ) odat(6,1)
1250 READ(words( 2 ), * ) odat(7,1)
1251 READ(words( 3 ), * ) odat(8,1)
1252 READ(words( 4 ), * ) odat(9,1)
1253 READ(words( 5 ), * ) odat(10,1)
1256 IF (words(6) .NE.
'0' .AND. words(6) .NE.
'1')
THEN
1259 READ(words( 6 ), * ) outff(j,1)
1263 ELSE IF(j .EQ. 4)
THEN
1265 READ (mdsi,
'(A)') linein
1266 READ(linein,*,iostat=ierr) words
1268 READ(words( 1 ), * ) odat(16,1)
1269 READ(words( 2 ), * ) odat(17,1)
1270 READ(words( 3 ), * ) odat(18,1)
1271 READ(words( 4 ), * ) odat(19,1)
1272 READ(words( 5 ), * ) odat(20,1)
1273 IF (words(6) .EQ.
'T')
THEN
1274 CALL nextln ( comstr , mdsi , mdse2 )
1275 READ (mdsi,*,
END=2001,ERR=2002)(ODAT(I,1),I=5*(8-1)+1,5*8)
1284 READ (mdsi,*,
END=2001,ERR=2002)(ODAT(I,1),I=5*(J-1)+1,5*J)
1288 outpts(1)%OFILES(j)=outff(j,1)
1291 odat(5*(j-1)+3,1) = max( 0 , odat(5*(j-1)+3,1) )
1293 IF ( odat(5*(j-1)+3,1) .NE. 0 )
THEN
1294 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1295 WRITE (mdss,951) j, idotyp(j)
1296 ttime(1) = odat(5*(j-1)+1,1)
1297 ttime(2) = odat(5*(j-1)+2,1)
1298 CALL stme21 ( ttime , dtme21 )
1299 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1300 WRITE (mdss,952) dtme21
1301 ttime(1) = odat(5*(j-1)+4,1)
1302 ttime(2) = odat(5*(j-1)+5,1)
1303 CALL stme21 ( ttime , dtme21 )
1304 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1305 WRITE (mdss,953) dtme21
1308 dttst = real( odat(5*(j-1)+3,1) )
1309 CALL tick21 ( ttime , dttst )
1310 CALL stme21 ( ttime , dtme21 )
1311 IF ( ( odat(5*(j-1)+1,1) .NE. odat(5*(j-1)+4,1) .OR. &
1312 odat(5*(j-1)+2,1) .NE. odat(5*(j-1)+5,1) ) .AND. &
1313 mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1315 IF ( dtme21(i:i).NE.
'0' .AND. &
1316 dtme21(i:i).NE.
'/' .AND. &
1317 dtme21(i:i).NE.
' ' .AND. &
1318 dtme21(i:i).NE.
':' )
EXIT
1321 WRITE (mdss,954) dtme21(1:19)
1324 IF ( j .EQ. 1 )
THEN
1328 flgrd(:,:,:)=.false.
1329 CALL w3readflgrd ( mdsi, mdss, mdso, mdse2, comstr, flg1d, &
1330 flg2d, improc, nmpscr, ierr )
1334 ELSE IF ( j .EQ. 2 )
THEN
1339 IF ( iloop .EQ. 1 )
THEN
1341 IF ( improc .EQ. 1 )
OPEN &
1342 (scratch,
file=trim(fnmpre)//
'ww3_multi.scratch')
1346 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
1349 (scratch,
file=trim(fnmpre)//
'ww3_multi.scratch')
1352 ALLOCATE ( x(npts), y(npts), pnames(npts) )
1360 CALL nextln ( comstr , mdsi2 , mdse2 )
1361 READ (mdsi2,*,
END=2001,ERR=2002) XX, YY, pn
1363 IF ( iloop.EQ.1 .AND. improc.EQ.1 )
THEN
1365 READ (mdsi,
'(A)') line
1366 WRITE (scratch,
'(A)') line
1369 IF ( pn .EQ.
'STOPSTRING' )
EXIT
1372 IF ( iloop .EQ. 1 ) cycle
1377 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1378 IF ( npts .EQ. 1 )
THEN
1379 WRITE (mdss,957) xx, yy, pn
1381 WRITE (mdss,958) npts, xx, yy, pn
1387 IF ( improc.EQ.1 .AND. iloop.EQ.1 )
CLOSE (scratch)
1390 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc .AND. &
1391 npts.EQ.0 )
WRITE (mdss,959)
1392 IF ( improc .EQ. 1 )
THEN
1394 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
1396 CLOSE (scratch,status=
'DELETE')
1400 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
1404 ELSE IF ( j .EQ. 3 )
THEN
1408 CALL nextln ( comstr , mdsi , mdse2 )
1409 READ (mdsi,*,
END=2001,ERR=2002) tflagi
1410 IF ( .NOT. tflagi ) mds(11,:) = -mds(11,:)
1411 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1412 IF ( .NOT. tflagi )
THEN
1413 WRITE (mdss,960)
'input',
'UNFORMATTED'
1415 WRITE (mdss,960)
'input',
'FORMATTED'
1419 ELSE IF ( j .EQ. 4 )
THEN
1423 ELSE IF ( j .EQ. 5 )
THEN
1427 ELSE IF ( j .EQ. 6 )
THEN
1431 CALL nextln ( comstr , mdsi , mdse2 )
1432 READ (mdsi,*,
END=2001,ERR=2002) IPRT(:,1), LPRT(1)
1433 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1434 WRITE (mdss,961) iprt(:,1)
1435 IF ( .NOT. lprt(1) )
THEN
1436 WRITE (mdss,960)
'output',
'UNFORMATTED'
1438 WRITE (mdss,960)
'output',
'FORMATTED'
1456 IF ( odat(5*(j-1)+3,1) .NE. 0 )
THEN
1457 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1458 WRITE (mdss,951) j, idotyp(j)
1459 ttime(1) = odat(5*(j-1)+1,1)
1460 ttime(2) = odat(5*(j-1)+2,1)
1461 CALL stme21 ( ttime , dtme21 )
1462 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1463 WRITE (mdss,952) dtme21
1464 ttime(1) = odat(5*(j-1)+4,1)
1465 ttime(2) = odat(5*(j-1)+5,1)
1466 CALL stme21 ( ttime , dtme21 )
1467 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1468 WRITE (mdss,953) dtme21
1471 dttst = real( odat(5*(j-1)+3,1) )
1472 CALL tick21 ( ttime , dttst )
1473 CALL stme21 ( ttime , dtme21 )
1474 IF ( ( odat(5*(j-1)+1,1) .NE. odat(5*(j-1)+4,1) .OR. &
1475 odat(5*(j-1)+2,1) .NE. odat(5*(j-1)+5,1) ) .AND. &
1476 mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1478 IF ( dtme21(i:i).NE.
'0' .AND. &
1479 dtme21(i:i).NE.
'/' .AND. &
1480 dtme21(i:i).NE.
' ' .AND. &
1481 dtme21(i:i).NE.
':' )
EXIT
1484 WRITE (mdss,954) dtme21(1:19)
1492 odat(6:10,0) = odat(6:10,1)
1494 outpts(1)%OFILES(1) = outff(1,1)
1498 odat(:,i) = odat(:,1)
1499 outff(:,i) = outff(:,1)
1500 outpts(i)%OFILES(:)=outff(:,1)
1501 flgd(:,i) = flgd(:,1)
1502 flgrd(:,:,i) = flgrd(:,:,1)
1503 flg2(:,i) = flg2(:,1)
1504 flgr2(:,:,i) = flgr2(:,:,1)
1505 iprt(:,i) = iprt(:,1)
1509 IF ( npts.EQ.0 .OR. odat(8,0).EQ.0 ) unipts = .false.
1511 IF ( ( npts.EQ.0 .OR. odat(8,0).EQ.0 ) .AND. &
1512 improc.EQ.nmperr )
WRITE (mdse,1050)
1513 IF ( npts.EQ.0 .OR. odat(8,0).EQ.0 ) unipts = .false.
1515 ALLOCATE (ot2(0)%X(npts),ot2(0)%Y(npts),ot2(0)%PNAMES(npts))
1518 ot2(0)%PNAMES = pnames
1521 ALLOCATE (ot2(i)%X(1),ot2(i)%Y(1),ot2(i)%PNAMES(1))
1526 IF ( npts .EQ. 0 )
THEN
1527 ALLOCATE (ot2(i)%X(1),ot2(i)%Y(1),ot2(i)%PNAMES(1))
1529 ALLOCATE (ot2(i)%X(npts),ot2(i)%Y(npts), &
1530 ot2(i)%PNAMES(npts))
1533 ot2(i)%PNAMES = pnames
1541 CALL nextln ( comstr , mdsi , mdse2 )
1542 READ (mdsi,*,
END=2001,ERR=2002) MN, j
1546 IF ( j .EQ. 0 )
EXIT
1552 IF ( mn(:ii) .EQ. mnames(i)(1:ii) )
EXIT
1555 IF ( i .GT. nrgrd )
GOTO 2051
1556 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1557 WRITE (mdss,962) mn(1:ii), i
1561 IF ( j.LT.0 .OR. j.GT. notype )
GOTO 2052
1562 IF ( j.EQ.2 .AND. unipts )
GOTO 2053
1563 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1564 WRITE (mdss,951) j, idotyp(j)
1568 CALL nextln ( comstr , mdsi , mdse2 )
1572 READ (mdsi,
'(A)') linein
1573 READ(linein,*,iostat=ierr) words
1575 READ(words( 1 ), * ) odat(1,i)
1576 READ(words( 2 ), * ) odat(2,i)
1577 READ(words( 3 ), * ) odat(3,i)
1578 READ(words( 4 ), * ) odat(4,i)
1579 READ(words( 5 ), * ) odat(5,i)
1581 READ(words( 1 ), * ) odat(6,i)
1582 READ(words( 2 ), * ) odat(7,i)
1583 READ(words( 3 ), * ) odat(8,i)
1584 READ(words( 4 ), * ) odat(9,i)
1585 READ(words( 5 ), * ) odat(10,i)
1587 IF (words(6) .NE.
'0' .AND. words(6) .NE.
'1')
THEN
1590 READ(words( 6 ), * ) outff(j,i)
1594 READ (mdsi,*,
END=2001,ERR=2002)(ODAT(II,I),II=5*(J-1)+1,5*J)
1598 outpts(i)%OFILES(j)=outff(j,i)
1600 odat(5*(j-1)+3,i) = max( 0 , odat(5*(j-1)+3,i) )
1602 IF ( odat(5*(j-1)+3,i) .NE. 0 )
THEN
1603 ttime(1) = odat(5*(j-1)+1,i)
1604 ttime(2) = odat(5*(j-1)+2,i)
1605 CALL stme21 ( ttime , dtme21 )
1606 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1607 WRITE (mdss,952) dtme21
1608 ttime(1) = odat(5*(j-1)+4,i)
1609 ttime(2) = odat(5*(j-1)+5,i)
1610 CALL stme21 ( ttime , dtme21 )
1611 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1612 WRITE (mdss,953) dtme21
1615 dttst = real( odat(5*(j-1)+3,i) )
1616 CALL tick21 ( ttime , dttst )
1617 CALL stme21 ( ttime , dtme21 )
1618 IF ( ( odat(5*(j-1)+1,i) .NE. odat(5*(j-1)+4,i) .OR. &
1619 odat(5*(j-1)+2,i) .NE. odat(5*(j-1)+5,i) ) .AND. &
1620 mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1622 IF ( dtme21(ii:ii).NE.
'0' .AND. &
1623 dtme21(ii:ii).NE.
'/' .AND. &
1624 dtme21(ii:ii).NE.
' ' .AND. &
1625 dtme21(ii:ii).NE.
':' )
EXIT
1628 WRITE (mdss,954) dtme21(1:19)
1631 IF ( j .EQ. 1 )
THEN
1635 CALL w3readflgrd ( mdsi, mdss, mdso, mdse2, comstr, &
1636 flg1d, flg2d, improc, nmpscr, ierr )
1638 flgrd(:,:,i) = flg2d
1640 ELSE IF ( j .EQ. 2 )
THEN
1645 IF ( iloop .EQ. 1 )
THEN
1647 IF ( improc .EQ. 1 )
OPEN &
1648 (scratch,
file=trim(fnmpre)//
'ww3_multi.scratch')
1652 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
1655 (scratch,
file=trim(fnmpre)//
'ww3_multi.scratch')
1657 DEALLOCATE ( ot2(i)%X, ot2(i)%Y, ot2(i)%PNAMES )
1658 ALLOCATE ( ot2(i)%X(ot2(i)%NPTS), &
1659 ot2(i)%Y(ot2(i)%NPTS), &
1660 ot2(i)%PNAMES(ot2(i)%NPTS) )
1665 CALL nextln ( comstr , mdsi2 , mdse2 )
1666 READ (mdsi2,*,
END=2001,ERR=2002) XX, YY, pn
1668 IF ( iloop.EQ.1 .AND. improc.EQ.1 )
THEN
1670 READ (mdsi,
'(A)') line
1671 WRITE (scratch,
'(A)') line
1674 IF ( pn .EQ.
'STOPSTRING' )
EXIT
1676 ot2(i)%NPTS = ot2(i)%NPTS + 1
1677 IF ( iloop .EQ. 1 ) cycle
1679 ot2(i)%X(ot2(i)%NPTS) = xx
1680 ot2(i)%Y(ot2(i)%NPTS) = yy
1681 ot2(i)%PNAMES(ot2(i)%NPTS) = pn
1682 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1683 IF ( ot2(i)%NPTS .EQ. 1 )
THEN
1684 WRITE (mdss,957) xx, yy, pn
1686 WRITE (mdss,958) ot2(i)%NPTS, xx, yy, pn
1692 IF ( improc.EQ.1 .AND. iloop.EQ.1 )
CLOSE (scratch)
1695 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc .AND. &
1696 ot2(i)%NPTS.EQ.0 )
WRITE (mdss,959)
1697 IF ( improc .EQ. 1 )
THEN
1699 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
1701 CLOSE (scratch,status=
'DELETE')
1705 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
1709 ELSE IF ( j .EQ. 3 )
THEN
1713 CALL nextln ( comstr , mdsi , mdse2 )
1714 READ (mdsi,*,
END=2001,ERR=2002) tflagi
1716 mds(11,i) = abs(mds(11,i))
1718 mds(11,i) = -abs(mds(11,i))
1720 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1721 IF ( .NOT. tflagi )
THEN
1722 WRITE (mdss,960)
'input',
'UNFORMATTED'
1724 WRITE (mdss,960)
'input',
'FORMATTED'
1728 ELSE IF ( j .EQ. 6 )
THEN
1732 CALL nextln ( comstr , mdsi , mdse2 )
1733 READ (mdsi,*,
END=2001,ERR=2002) IPRT(:,I), LPRT(I)
1734 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1735 WRITE (mdss,961) iprt(:,i)
1736 IF ( .NOT. lprt(i) )
THEN
1737 WRITE (mdss,960)
'output',
'UNFORMATTED'
1739 WRITE (mdss,960)
'output',
'FORMATTED'
1744 ELSE IF ( j .EQ. 7 )
THEN
1748 CALL w3readflgrd ( mdsi, mdss, mdso, mdse2, comstr, &
1749 flg1d, flg2d, improc, nmpscr, ierr )
1751 flgr2(:,:,i) = flg2d
1754 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,963)
1764 WRITE (mdst,9051) odat(:,i)
1765 WRITE (mdst,9051) outff(:,i)
1766 WRITE (mdst,9052) flgrd(:,:,i)
1776 IF ( inflags1(10) )
THEN
1778 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1780 WRITE (mdss,966)
'Continuous grid movement data'
1784 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
1787 IF ( iloop .EQ. 1 )
THEN
1789 IF ( improc .EQ. 1 ) &
1790 OPEN (scratch,
file=trim(fnmpre)//
'ww3_shel.scratch')
1794 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
1796 OPEN (scratch,
file=trim(fnmpre)//
'ww3_shel.scratch')
1798 ALLOCATE ( tmove(2,nmove), amove(nmove), dmove(nmove) )
1799 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1800 WRITE (mdss,967) nmove,
'MOV'
1805 CALL nextln ( comstr , mdsi2 , mdse2 )
1806 READ (mdsi2,*,
END=2001,ERR=2002) idtst
1808 IF ( iloop.EQ.1 .AND. improc.EQ.1 )
THEN
1810 READ (mdsi,
'(A)') line
1811 WRITE (scratch,
'(A)') line
1814 IF ( idtst .EQ.
'STP' )
EXIT
1815 IF ( idtst .NE.
'MOV' ) cycle
1818 IF ( iloop .EQ. 1 ) cycle
1821 READ (mdsi2,*,
END=2001,ERR=2002) IDTST, TTIME, XX, yy
1822 tmove(:,nmove) = ttime
1825 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1826 WRITE (mdss,968) nmove, tmove(:,nmove), &
1827 amove(nmove), dmove(nmove)
1831 IF ( improc.EQ.1 .AND. iloop.EQ.1 )
CLOSE (scratch)
1834 IF ( improc .EQ. 1 )
THEN
1836 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
1838 CLOSE (scratch,status=
'DELETE')
1842 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
1849 WRITE (mdst,9061) i, tmove(:,i), amove(i), dmove(i)
1853 IF ( nmove .EQ. 0 )
GOTO 2060
1857 CALL w3setg ( i, mdse, mdst )
1858 CALL wmsetm ( i, mdse, mdst )
1860 CALL wmdimd ( i, mdse, mdst, 0 )
1862 tmv(:,4,ii) = tmove(:,ii)
1863 amv(ii,4) = amove(ii)
1864 dmv(ii,4) = dmove(ii)
1878 ALLOCATE ( allprc(nmproc,nrgrd) , modmap(nmproc,nrgrp) , &
1879 loadmp(nmproc,nrgrp) )
1887 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,970)
1890 upproc = upproc .AND. unipts .AND. iostyp.GT.1
1895 IF ( nmproc.GE.10 .AND. upproc )
THEN
1898 IF ( upproc .AND. mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1899 WRITE (mdss,971)
'Separate process for point' // &
1903 IF ( nmpupt .EQ. improc )
THEN
1904 ii = len_trim(mnames(0))
1905 CALL wmuget ( mdss, mdst, mdsup,
'OUT' )
1906 CALL wmuset ( mdss, mdst, mdsup, .true.,
'OUT', &
1907 trim(fnmpre)//
'out_pnt.'//mnames(0)(1:ii), &
1908 'Unified point output')
1910 CALL wmuget ( mdss, mdst, mdsupa,
'OUA' )
1911 CALL wmuset ( mdss, mdst, mdsupa, .true.,
'OUA', &
1912 trim(fnmpre)//
'out_pnt.'//mnames(0)(1:ii)//
'.txt', &
1913 'Unified point output ascii')
1918 IF ( upproc .AND. mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1919 WRITE (mdss,972) nmpupt
1923 ALLOCATE ( ndpout(nrgrd) )
1926 IF ( iostyp .GT. 1 )
THEN
1928 IF ( odat( 3,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
1929 IF ( odat(13,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
1930 IF ( odat(28,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
1931 IF ( odat( 8,i) .GT. 0 .OR. odat(18,i) .GT. 0 .OR. &
1932 odat(23,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
1933 IF ( iostyp .EQ. 2 ) ndpout(i) = min( 1 , ndpout(i) )
1939 IF ( iostyp.EQ.3 .AND. &
1940 ( ( .NOT.pshare .AND. 4*sum(ndpout).GT.ncproc ) &
1941 .OR.( pshare .AND. 4*maxval(ndpout).GT.ncproc ) ) )
THEN
1943 ndpout(i) = min( 1 , ndpout(i) )
1946 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1947 WRITE (mdss,971)
'Separate processes for output' // &
1953 IF ( iostyp.GT.1 .AND. .NOT.pshare .AND. &
1954 4*sum(ndpout).GT.ncproc )
THEN
1956 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1957 WRITE (mdss,971)
'Grids sharing output processes.'
1962 IF ( iostyp.GT.1 .AND. 4*maxval(ndpout).GT.ncproc )
THEN
1965 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
1966 WRITE (mdss,971)
'Separate processes for output' // &
1973 IF ( iostyp .GT. 1 )
THEN
1975 npoutt = maxval(ndpout)
1977 npoutt = sum(ndpout)
1980 ncproc = ncproc - npoutt
1981 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
1982 IF ( npoutt .EQ. 0 )
THEN
1983 WRITE (mdss,971)
'No (other) dedicated output processes.'
1985 WRITE (mdss,973) ncproc+1, ncproc+npoutt, npoutt
1994 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,974)
1995 IF ( nmplog.EQ.improc )
WRITE (mdso,1974)
1998 CALL mpi_comm_group ( mpi_comm_mwave, bgroup, ierr_mpi )
2000 ALLOCATE ( tmprnk(nmproc) )
2005 ip1 = max( 1 , min( ncproc , 1+nint(real(ncproc)*rp1(i)) ) )
2006 ipn = max( ip1 , min( ncproc , nint(real(ncproc)*rpn(i)) ) )
2009 CALL wmsetm ( i, mdse, mdst )
2010 naploc = 1 + ipn - ip1
2014 fbcast = naploc .NE. ncproc
2015 fbcast = naploc .NE. ncproc .OR. &
2016 ( iostyp.GT.1 .AND. .NOT.pshare )
2019 tmprnk(1+j-ip1) = j - 1
2022 IF ( iostyp .GT. 1 )
THEN
2023 IF ( pshare ) napres = ncproc
2026 tmprnk(napadd) = napres
2033 tmprnk(napadd) = nmproc - 1
2037 CALL mpi_group_incl ( bgroup, napadd, tmprnk, lgroup, &
2039 CALL mpi_comm_create ( mpi_comm_mwave, lgroup, &
2040 mpi_comm_grd, ierr_mpi )
2041 CALL mpi_group_free ( lgroup, ierr_mpi )
2045 allprc(ii,i) = 1 + ii - ip1
2049 IF ( pshare .OR. i.EQ.1 )
THEN
2052 napadd = ncproc + sum(ndpout(1:i-1))
2054 IF ( iostyp .GT. 1 )
THEN
2058 allprc(napadd,i) = ii
2064 allprc(nmproc,i) = ii
2068 WRITE (mdst,9071) i, allprc(:,i)
2074 IF ( iostyp .LE. 1 )
THEN
2076 IF ( odat( 3,i) .GT. 0 )
THEN
2077 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-1))+1
2080 IF ( odat( 8,i) .GT. 0 .OR. unipts )
THEN
2081 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-2))+1
2084 IF ( odat(13,i) .GT. 0 )
THEN
2085 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-5))+1
2088 IF ( odat(18,i) .GT. 0 )
THEN
2089 WRITE (stout,
'(I5.5)') tmprnk(naploc)+1
2092 IF ( odat(23,i) .GT. 0 )
THEN
2093 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-3))+1
2096 IF ( odat(28,i) .GT. 0 )
THEN
2097 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-4))+1
2104 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
2106 IF ( upproc ) ii = ii - 1
2109 IF ( iostyp .EQ. 2 )
THEN
2111 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
2112 IF ( odat( 3,i) .GT. 0 ) outstr(1) = stout
2113 IF ( odat( 8,i) .GT. 0 .OR. &
2114 ( unipts .AND. .NOT.upproc ) ) &
2116 IF ( odat(13,i) .GT. 0 ) outstr(3) = stout
2117 IF ( odat(18,i) .GT. 0 ) outstr(4) = stout
2118 IF ( odat(23,i) .GT. 0 ) outstr(5) = stout
2119 IF ( odat(28,i) .GT. 0 ) outstr(6) = stout
2121 ELSE IF ( iostyp .EQ. 3 )
THEN
2123 IF ( odat( 3,i).GT.0 )
THEN
2124 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
2128 IF ( odat(13,i).GT.0 )
THEN
2129 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
2133 IF ( odat(28,i).GT.0 )
THEN
2134 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
2138 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
2139 IF ( odat( 8,i) .GT. 0 ) outstr(2) = stout
2140 IF ( odat(18,i) .GT. 0 ) outstr(4) = stout
2141 IF ( odat(23,i) .GT. 0 ) outstr(5) = stout
2147 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
2148 WRITE (mdss,975) mnames(i), ip1, ipn, outstr
2149 IF ( nmplog .EQ. improc ) &
2150 WRITE (mdso,1975)mnames(i), ip1, ipn, outstr
2157 IF ( allprc(j,i) .EQ. 0 )
THEN
2159 tmprnk(napbct) = j - 1
2162 CALL mpi_group_incl ( bgroup, napbct, tmprnk, &
2164 CALL mpi_comm_create ( mpi_comm_mwave, lgroup, &
2165 mpi_comm_bct, ierr_mpi )
2166 CALL mpi_group_free ( lgroup, ierr_mpi )
2172 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
2174 IF ( unipts )
WRITE (mdss,977) nmpupt
2178 IF ( nmplog .EQ. improc )
THEN
2180 IF ( unipts )
WRITE (mdso,1977) nmpupt
2184 DEALLOCATE ( tmprnk, ndpout )
2189 DO ii=1, ingrp(jj,0)
2192 IF ( allprc(j,i) .NE. 0 )
THEN
2193 loadmp(j,jj) = loadmp(j,jj) + 1
2194 IF ( loadmp(j,jj) .EQ. 1 )
THEN
2207 WRITE (mdst,8044) j, modmap(:,j)
2211 WRITE (mdst,8044) j, loadmp(:,j)
2217 IF ( nmproc .GT. 1 )
THEN
2219 ip1 = minval( loadmp(:ncproc,i) )
2220 ipn = maxval( loadmp(:ncproc,i) )
2221 IF ( ip1.NE.ipn .AND. improc.EQ.nmperr ) &
2222 WRITE (mdse,1040) i, ip1, ipn
2226 DEALLOCATE ( rp1, rpn, loadmp )
2231 CALL wmsetm ( ingrp(1,1), mdse, mdst )
2236 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
2242 CALL prtime ( prftn )
2243 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8'
2247 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,980)
2248 ALLOCATE ( tsync(2,0:nrgrd), tmax(2,nrgrd), toutp(2,0:nrgrd), &
2249 tdata(2,nrgrd), grstat(nrgrd), dtres(nrgrd) )
2267 CALL prtime ( prftn )
2268 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8.a'
2273 j = len_trim(mnames(i))
2275 IF ( allprc(nmpsc2,i) .EQ. 1 )
EXIT
2277 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
2278 WRITE (mdss,981) i, mnames(i)(1:j)
2281 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
2287 CALL wmsetm ( i, mdse, mdst )
2289 mpi_comm_loc = mpi_comm_grd
2290 IF ( mpi_comm_loc .EQ. mpi_comm_null ) cycle
2293 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT' )
2294 CALL wmuset ( mdse, mdst, ndsfnd, .true., desc=
'Log file' )
2304 IF ( j.EQ.4 .OR. j.EQ.5 ) cycle
2305 IF ( odat(5*(j-1)+3,i) .GT. 0 )
THEN
2306 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT' )
2307 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
2308 desc=
'Raw output file' )
2313 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT' )
2314 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
2315 desc=
'ASCII output file' )
2321 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT' )
2322 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
2323 desc=
'ASCII output file' )
2328 CALL wmuget ( mdse, mdst, ndsfnd,
'INP' )
2329 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
2330 desc=
'Input data file' )
2338 CALL wmuget ( mdse, mdst, ndsfnd,
'INP' )
2339 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
2340 desc=
'Input data file' )
2343 IF ( odat(5*(5-1)+3,i) .GT. 0 )
THEN
2344 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT', 9 )
2347 CALL wmuset ( mdse, mdst, ndsfnd+ii, .true., &
2348 desc=
'Raw output file' )
2354 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
WRITE (mdss,982)
2356 CALL w3init ( i, .true., mnames(i), mds(:,i), ntrace(:,i), &
2358 flgrd(:,:,i),flgr2(:,:,i),flgd(:,i),flg2(:,i), &
2359 ot2(i)%NPTS, ot2(i)%X, ot2(i)%Y, ot2(i)%PNAMES, &
2360 iprt(:,i), lprt(i), mpi_comm_loc)
2364 ii = len_trim(filext)
2365 jj = len_trim(fnmpre)
2366 CALL wmuinq ( mdse, mdst, mds(1,i) )
2367 IF ( mds(3,i) .NE. mdst )
CALL wmuinq ( mdse, mdst, mds(3,i) )
2369 IF ( mds(7,i) .NE. -1 )
THEN
2370 IF ( iaproc .EQ. napfld )
THEN
2371 tname = trim(fnmpre)//
'out_grd.' // filext(:ii)
2372 CALL wmuset ( mdse,mdst, mds(7,i), .true., name=tname )
2374 CALL wmuset ( mdse,mdst, mds(7,i), .false. )
2379 IF ( mds(8,i) .NE. -1 )
THEN
2380 IF ( iaproc .EQ. nappnt )
THEN
2381 tname = trim(fnmpre)//
'out_pnt.' // filext(:ii)
2382 CALL wmuset ( mdse,mdst, mds(8,i), .true., name=tname )
2384 CALL wmuset ( mdse,mdst, mds(8,i), .false. )
2389 IF ( mds(9,i) .NE. -1 )
THEN
2391 tname = trim(fnmpre)//
'nest.' // filext(:ii)
2392 CALL wmuset ( mdse, mdst, mds(9,i), .true., name=tname )
2394 CALL wmuset ( mdse, mdst, mds(9,i), .false. )
2399 IF ( mds(10,i) .NE. -1 )
THEN
2400 IF ( flbpo .AND. iaproc.EQ.napbpt )
THEN
2401 tname = trim(fnmpre)//
'nestN.' // filext(:ii)
2403 WRITE (tname(jj+5:jj+5),
'(I1)') j + 1
2404 CALL wmuset ( mdse, mdst, mds(10,i)+j, .true., &
2408 CALL wmuset ( mdse,mdst, mds(10,i)+j, .false. )
2412 CALL wmuset ( mdse,mdst, mds(10,i)+j, .false. )
2418 IF ( mds(11,i) .NE. -1 )
THEN
2419 tname = trim(fnmpre)//
'track_i.' // filext(:ii)
2420 CALL wmuset ( mdse,mdst, mds(11,i), .true., name=tname )
2423 IF ( mds(12,i) .NE. -1 )
THEN
2424 IF ( iaproc .EQ. naptrk )
THEN
2425 tname = trim(fnmpre)//
'track_o.' // filext(:ii)
2426 CALL wmuset ( mdse,mdst, mds(12,i), .true., name=tname )
2428 CALL wmuset ( mdse,mdst, mds(12,i), .false. )
2433 IF ( mds(13,i) .NE. -1 )
THEN
2434 IF ( iaproc .EQ. napprt )
THEN
2435 tname = trim(fnmpre)//
'partition.' // filext(:ii)
2436 CALL wmuset ( mdse,mdst, mds(13,i), .true., name=tname )
2438 CALL wmuset ( mdse,mdst, mds(13,i), .false. )
2444 IF ( mds(14,i) .NE. -1 )
THEN
2445 IF ( iaproc .EQ. napfld )
THEN
2446 tname = trim(fnmpre)//
'out_grd.' // filext(:ii) //
'.txt'
2447 CALL wmuset ( mdse,mdst, mds(14,i), .true., name=tname )
2449 CALL wmuset ( mdse,mdst, mds(14,i), .false. )
2454 IF ( mds(15,i) .NE. -1 )
THEN
2455 IF ( iaproc .EQ. nappnt )
THEN
2456 tname = trim(fnmpre)//
'out_pnt.' // filext(:ii) //
'.txt'
2457 CALL wmuset ( mdse,mdst, mds(15,i), .true., name=tname )
2459 CALL wmuset ( mdse,mdst, mds(15,i), .false. )
2466 WRITE (mdst,9081) i, time
2471 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
WRITE (mdss,983)
2472 CALL w3seti ( i, mdse, mdst )
2480 IF ( inflags1(j) )
THEN
2481 idinp(i,j) = idstr(j)
2482 IF ( inpmap(i,j) .LT. 0 ) cycle
2483 CALL w3fldo (
'READ', idinp(i,j), mdsf(i,j), mdst, mdse2,&
2485 nx, ny, jjj, ierr, mnames(i), &
2487 IF ( ierr .NE. 0 )
GOTO 2080
2490 IF ( (jjj .NE. gtype) .AND. (improc .EQ. nmpsc2) ) &
2491 WRITE (mdse, *)
' *** Warning: grid', i,
' GTYPE=', &
2492 gtype,
' not matching field', j,
' grid type', jjj
2494 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
2495 WRITE (mdss,985) idflds(j)
2497 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
2498 WRITE (mdss,984) idflds(j)
2509 IF ( mdsf(i,j) .NE. -1 )
CALL wmuinq ( mdse, mdst, mdsf(i,j) )
2515 IF (
SIZE(inflags1) .NE.
SIZE(tflags) )
THEN
2516 WRITE (mdse,
'(/2A)')
' *** ERROR WMINIT: ', &
2517 .NE.
'SIZE(INFLAGS1)SIZE(TFLAGS) ***'
2520 IF (
SIZE(inflags2) .NE.
SIZE(tflags) )
THEN
2521 WRITE (mdse,
'(/2A)')
' *** ERROR WMINIT: ', &
2522 .NE.
'SIZE(INFLAGS2)SIZE(TFLAGS) ***'
2529 IF ( inpmap(i,j) .NE. 0 )
THEN
2533 inflags1(j) = .true.
2535 CALL w3dimi ( i, mdse, mdst )
2537 IF ( j.EQ.2 )
ALLOCATE ( wadats(i)%CA0(nsea) , &
2538 wadats(i)%CAI(nsea) , &
2539 wadats(i)%CD0(nsea) , &
2540 wadats(i)%CDI(nsea) )
2542 IF ( j.EQ.3 )
ALLOCATE ( wadats(i)%UA0(nsea) , &
2543 wadats(i)%UAI(nsea) , &
2544 wadats(i)%UD0(nsea) , &
2545 wadats(i)%UDI(nsea) , &
2546 wadats(i)%AS0(nsea) , &
2547 wadats(i)%ASI(nsea) )
2549 IF ( j.EQ.5 )
ALLOCATE ( wadats(i)%MA0(nsea) , &
2550 wadats(i)%MAI(nsea) , &
2551 wadats(i)%MD0(nsea) , &
2552 wadats(i)%MDI(nsea) )
2554 IF ( j.EQ.6 )
ALLOCATE ( wadats(i)%RA0(nsea) , &
2555 wadats(i)%RAI(nsea) )
2561 CALL w3seti ( i, mdse, mdst )
2562 CALL w3seta ( i, mdse, mdst )
2567 IF ( flout(j) )
THEN
2568 IF ( toutp(1,i) .EQ. -1 )
THEN
2569 toutp(:,i) = tonext(:,j)
2571 dttst = dsec21( toutp(:,i), tonext(:,j) )
2572 IF ( dttst .LT. 0. ) toutp(:,i) = tonext(:,j)
2579 IF ( flout(j) )
THEN
2580 IF ( toutp(1,i) .EQ. -1 )
THEN
2581 toutp(:,i) = tonext(:,j)
2583 dttst = dsec21( toutp(:,i), tonext(:,j) )
2584 IF ( dttst .LT. 0. ) toutp(:,i) = tonext(:,j)
2590 tsync(:,i) = time(:)
2594 IF ( improc .EQ. nmperr )
WRITE(mdse,*)
"GRID IMPROC GTYPE", &
2595 i, improc, grids(i)%GTYPE
2599 WRITE (mdst,9082) grstat(i), toutp(:,i), tsync(:,i)
2605 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
2607 CALL wmsetm ( i, mdse, mdst )
2608 CALL w3setg ( i, mdse, mdst )
2609 CALL w3seto ( i, mdse, mdst )
2610 IF ( fbcast .AND. mpi_comm_bct.NE.mpi_comm_null )
THEN
2611 CALL mpi_bcast ( toutp(1,i), 2, mpi_integer, 0, &
2612 mpi_comm_bct, ierr_mpi )
2613 CALL mpi_bcast ( tsync(1,i), 2, mpi_integer, 0, &
2614 mpi_comm_bct, ierr_mpi )
2615 CALL mpi_bcast ( grstat(i), 1, mpi_integer, 0, &
2616 mpi_comm_bct, ierr_mpi )
2622 CALL mpi_bcast ( flagll,1, mpi_logical, 0, &
2623 mpi_comm_bct, ierr_mpi )
2624 CALL mpi_bcast ( gtype, 1, mpi_integer, 0, &
2625 mpi_comm_bct, ierr_mpi )
2626 CALL mpi_bcast ( iclose,1, mpi_integer, 0, &
2627 mpi_comm_bct, ierr_mpi )
2628 CALL mpi_bcast ( nx , 1, mpi_integer, 0, &
2629 mpi_comm_bct, ierr_mpi )
2630 CALL mpi_bcast ( ny , 1, mpi_integer, 0, &
2631 mpi_comm_bct, ierr_mpi )
2632 CALL mpi_bcast ( x0 , 1, mpi_real , 0, &
2633 mpi_comm_bct, ierr_mpi )
2634 CALL mpi_bcast ( sx , 1, mpi_real , 0, &
2635 mpi_comm_bct, ierr_mpi )
2636 CALL mpi_bcast ( y0 , 1, mpi_real , 0, &
2637 mpi_comm_bct, ierr_mpi )
2638 CALL mpi_bcast ( sy , 1, mpi_real , 0, &
2639 mpi_comm_bct, ierr_mpi )
2640 CALL mpi_bcast ( nsea , 1, mpi_integer, 0, &
2641 mpi_comm_bct, ierr_mpi )
2642 CALL mpi_bcast ( nseal, 1, mpi_integer, 0, &
2643 mpi_comm_bct, ierr_mpi )
2644 CALL mpi_bcast ( dtmax, 1, mpi_real, 0, &
2645 mpi_comm_bct, ierr_mpi )
2646 CALL mpi_bcast ( dtcfl, 1, mpi_real, 0, &
2647 mpi_comm_bct, ierr_mpi )
2648 CALL mpi_bcast ( filext, 10, mpi_character, 0, &
2649 mpi_comm_bct, ierr_mpi )
2650 IF ( mpi_comm_grd .EQ. mpi_comm_null ) &
2651 CALL w3dimx ( i, nx, ny, nsea, mdse, mdst &
2661 , 1, 1, 1, 1, 1, 1, 1, 1 &
2664 CALL mpi_bcast ( hqfac, nx*ny, mpi_real, 0, &
2665 mpi_comm_bct, ierr_mpi )
2666 CALL mpi_bcast ( hpfac, nx*ny, mpi_real, 0, &
2667 mpi_comm_bct, ierr_mpi )
2668 CALL mpi_bcast ( xgrd, nx*ny, mpi_double_precision, 0, &
2669 mpi_comm_bct, ierr_mpi )
2670 CALL mpi_bcast ( ygrd, nx*ny, mpi_double_precision, 0, &
2671 mpi_comm_bct, ierr_mpi )
2672 IF ( mpi_comm_grd .EQ. mpi_comm_null ) &
2673 gsu = w3gsuc( .false., flagll, iclose, &
2675 CALL mpi_bcast ( dxdp, nx*ny, mpi_real, 0, &
2676 mpi_comm_bct, ierr_mpi )
2677 CALL mpi_bcast ( dxdq, nx*ny, mpi_real, 0, &
2678 mpi_comm_bct, ierr_mpi )
2679 CALL mpi_bcast ( dydp, nx*ny, mpi_real, 0, &
2680 mpi_comm_bct, ierr_mpi )
2681 CALL mpi_bcast ( dydq, nx*ny, mpi_real, 0, &
2682 mpi_comm_bct, ierr_mpi )
2683 CALL mpi_bcast ( mapsta, nx*ny, mpi_integer, 0, &
2684 mpi_comm_bct, ierr_mpi )
2685 CALL mpi_bcast ( mapst2, nx*ny, mpi_integer, 0, &
2686 mpi_comm_bct, ierr_mpi )
2687 CALL mpi_bcast ( gridshift, 1, mpi_double_precision, 0, &
2688 mpi_comm_bct, ierr_mpi )
2692 CALL mpi_bcast ( nk , 1, mpi_integer, 0, &
2693 mpi_comm_bct, ierr_mpi )
2694 CALL mpi_bcast ( nth , 1, mpi_integer, 0, &
2695 mpi_comm_bct, ierr_mpi )
2696 CALL mpi_bcast ( xfr , 1, mpi_real , 0, &
2697 mpi_comm_bct, ierr_mpi )
2698 CALL mpi_bcast ( fr1 , 1, mpi_real , 0, &
2699 mpi_comm_bct, ierr_mpi )
2700 IF ( mpi_comm_grd .EQ. mpi_comm_null ) &
2701 CALL w3dims ( i, nk, nth, mdse, mdst )
2702 CALL mpi_bcast ( th , nth, mpi_real , 0, &
2703 mpi_comm_bct, ierr_mpi )
2707 CALL mpi_bcast ( naproc,1, mpi_integer, 0, &
2708 mpi_comm_bct, ierr_mpi )
2709 CALL mpi_bcast ( nappnt,1, mpi_integer, 0, &
2710 mpi_comm_bct, ierr_mpi )
2711 CALL mpi_bcast ( nbi , 1, mpi_integer, 0, &
2712 mpi_comm_bct, ierr_mpi )
2716 CALL mpi_bcast ( flout, 8, mpi_logical, 0, &
2717 mpi_comm_bct, ierr_mpi )
2718 CALL mpi_bcast ( dtout , 8, mpi_real, 0, &
2719 mpi_comm_bct, ierr_mpi )
2720 CALL mpi_bcast ( tonext,16, mpi_integer, 0, &
2721 mpi_comm_bct, ierr_mpi )
2722 CALL mpi_bcast ( tolast,16, mpi_integer, 0, &
2723 mpi_comm_bct, ierr_mpi )
2729 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
2733 IF ( allprc(improc,i) .EQ. 0 )
THEN
2734 CALL w3seto ( i, mdse, mdst )
2742 WRITE (mdst,9020)
'AFTER SETUP'
2744 WRITE (mdst,9021) i, mds(:,i), ntrace(:,i)
2751 IF ( grids(i)%FLAGLL .NEQV. grids(i+1)%FLAGLL )
GOTO 2070
2757 CALL prtime ( prftn )
2758 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8.c'
2764 IF ( .NOT. useinp(i) ) cycle
2766 j = len_trim(mnames(-i))
2767 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
THEN
2768 WRITE (mdss,988) i, mnames(-i)(1:j)
2772 CALL w3iogr (
'GRID', ndsrec, -i, mnames(-i)(1:j) )
2773 CALL w3dimi ( -i, mdse, mdst )
2775 IF ( cplinp(i) ) cycle
2778 IF ( inflags1(j) )
THEN
2779 idinp(-i,j) = idstr(j)
2780 CALL w3fldo (
'READ', idinp(-i,j), mdsf(-i,j), mdst, &
2781 mdse2, nx, ny, gtype, ierr, &
2782 mnames(-i), trim(fnmpre) )
2783 IF ( ierr .NE. 0 )
GOTO 2080
2784 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
2785 WRITE (mdss,985) idflds(j)
2787 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
2788 WRITE (mdss,984) idflds(j)
2795 IF ( mdsf(-i,j) .NE. -1 )
CALL wmuinq &
2796 ( mdse, mdst, mdsf(-i,j) )
2803 IF ( inpmap(i,j).LT.0 .AND. inpmap(i,j).NE.-999) idinp(i,j) = idinp( inpmap(i,j),j)
2805 IF ( inpmap(i,j) .GT. 0 ) idinp(i,j) = idinp(-inpmap(i,j),j)
2809 DEALLOCATE ( useinp )
2810 DEALLOCATE ( cplinp )
2815 CALL prtime ( prftn )
2816 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8.d'
2825 CALL w3setg ( i, mdse, mdst )
2832 ALLOCATE ( flrbpi(nrgrd) )
2833 CALL wmglow ( flrbpi )
2840 CALL wmsetm ( i, mdse, mdst )
2841 CALL w3setg ( i, mdse, mdst )
2856 CALL w3setg ( i, mdse, mdst )
2857 CALL w3seto ( i, mdse, mdst )
2859 IF ( bcdump(i) .AND. flrbpi(i) )
THEN
2860 IF ( improc .EQ. nmperr )
WRITE (mdse,1080) i
2861 IF ( improc .EQ. nmplog )
WRITE (mdso,1082) i
2865 IF ( bcdump(i) .AND. nbi.EQ.0 )
THEN
2866 IF ( improc .EQ. nmperr )
WRITE (mdse,1081) i
2867 IF ( improc .EQ. nmplog )
WRITE (mdso,1082) i
2872 IF ( .NOT. flrbpi(i) .AND. flbpi )
THEN
2875 IF ( .NOT. flrbpi(i) .AND. flbpi .AND. &
2876 mpi_comm_grd .NE. mpi_comm_null)
THEN
2878 CALL wmuset ( mdse, mdst, nds(9), .false. )
2879 IF ( bcdump(i) .AND. iaproc.EQ.napbpt )
THEN
2880 j = len_trim(filext)
2881 tname(1:5) =
'nest.'
2882 tname(6:5+j) = filext(1:j)
2884 CALL wmuget ( mdse, mdst, nds(9),
'OUT' )
2885 CALL wmuset ( mdse, mdst, nds(9), .true., &
2886 name=trim(fnmpre)//tname(1:j), &
2887 desc=
'Output data file (nest dump)' )
2905 CALL wmsetm ( i, mdse, mdst )
2906 IF ( mpi_comm_grd .NE. mpi_comm_null )
CALL wmiobs ( i )
2915 CALL wmsetm ( i, mdse, mdst )
2916 IF ( mpi_comm_grd .NE. mpi_comm_null )
CALL wmiobg ( i )
2925 CALL wmsetm ( i, mdse, mdst )
2926 IF ( mpi_comm_grd .NE. mpi_comm_null )
CALL wmiobf ( i )
2937 DO ii=1, ingrp(jj,0)
2939 IF( grids(i)%GTYPE .EQ. smctype ) j = j + 1
2941 IF( j .GT. 1 ) ngrpsmc = jj
2943 IF( improc.EQ.nmperr )
WRITE (mdse,*)
" NGRPSMC =", ngrpsmc
2946 IF( ngrpsmc .GT. 0 )
THEN
2959 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
WRITE (mdss,938) &
2960 'Computing relation to higher ranked grids'
2962 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
WRITE (mdss,938) &
2963 'Finished computing relation to higher ranked grids'
2969 outpts(0)%TONEXT(1,2) = odat( 6,0)
2970 outpts(0)%TONEXT(2,2) = odat( 7,0)
2971 outpts(0)%DTOUT ( 2) = real( odat( 8,0) )
2972 outpts(0)%TOLAST(1,2) = odat( 9,0)
2973 outpts(0)%TOLAST(2,2) = odat(10,0)
2974 outpts(0)%OFILES(1) = outff(1,1)
2975 outpts(0)%OFILES(2) = outff(2,1)
2977 tout = outpts(0)%TONEXT(:,2)
2978 tlst = outpts(0)%TOLAST(:,2)
2981 dttst = dsec21( stime , tout )
2982 IF ( dttst .LT. 0 )
THEN
2983 CALL tick21 ( tout, outpts(0)%DTOUT(2) )
2989 outpts(0)%TONEXT(:,2) = tout
2991 dttst = dsec21( tout , tlst )
2992 IF ( dttst .LT. 0. )
THEN
2995 CALL wmiopp ( ot2(0)%NPTS, ot2(0)%X, ot2(0)%Y, &
3001 CALL wmsetm ( i, mdse, mdst )
3002 CALL w3setg ( i, mdse, mdst )
3003 CALL w3seto ( i, mdse, mdst )
3004 IF ( fbcast .AND. mpi_comm_bct.NE.mpi_comm_null )
THEN
3005 CALL mpi_bcast ( nopts, 1, mpi_integer, 0, &
3006 mpi_comm_bct, ierr_mpi )
3015 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3016 WRITE (mdss,938)
'Additional group information'
3018 IF ( maxval(grdlow(:,0)) .GT. 0 )
THEN
3019 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3020 WRITE (mdss,933)
'Lower rank grid dependence'
3021 IF ( nmplog .EQ. improc ) &
3022 WRITE (mdso,933)
'Lower rank grid dependence'
3024 WRITE (line(1:6),
'(1X,I3,2X)') i
3026 IF ( grdlow(i,0) .NE. 0 )
THEN
3028 WRITE (line(jjj+1:jjj+3),
'(I3)') grdlow(i,j)
3031 ELSE IF ( flrbpi(i) )
THEN
3033 line(7:jjj) =
' Data from file'
3036 line(7:jjj) =
' No dependencies'
3038 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3039 WRITE(mdss,934) line(1:jjj)
3040 IF ( nmplog .EQ. improc )
WRITE(mdso,934) line(1:jjj)
3042 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,935)
3043 IF ( nmplog .EQ. improc )
WRITE (mdso,935)
3045 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3046 WRITE (mdss,937)
'No lower rank grid dependencies'
3047 IF ( nmplog .EQ. improc ) &
3048 WRITE (mdso,937)
'No lower rank grid dependencies'
3050 DEALLOCATE ( flrbpi )
3052 IF ( maxval(grdeql(:,0)) .GT. 0 )
THEN
3053 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3054 WRITE (mdss,933)
'Same rank grid dependence'
3055 IF ( nmplog .EQ. improc ) &
3056 WRITE (mdso,933)
'Same rank grid dependence'
3058 WRITE (line(1:6),
'(1X,I3,2X)') i
3060 IF ( grdeql(i,0) .NE. 0 )
THEN
3062 WRITE (line(jjj+1:jjj+3),
'(I3)') grdeql(i,j)
3067 line(7:jjj) =
' No dependencies'
3069 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3070 WRITE(mdss,934) line(1:jjj)
3071 IF ( nmplog .EQ. improc )
WRITE(mdso,934) line(1:jjj)
3073 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,935)
3074 IF ( nmplog .EQ. improc )
WRITE (mdso,935)
3076 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3077 WRITE (mdss,937)
'No same rank grid dependencies'
3078 IF ( nmplog .EQ. improc ) &
3079 WRITE (mdso,937)
'No same rank grid dependencies'
3082 IF ( maxval(grdhgh(:,0)) .GT. 0 )
THEN
3083 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3084 WRITE (mdss,933)
'Higher rank grid dependence'
3085 IF ( nmplog .EQ. improc ) &
3086 WRITE (mdso,933)
'Higher rank grid dependence'
3088 WRITE (line(1:6),
'(1X,I3,2X)') i
3090 IF ( grdhgh(i,0) .NE. 0 )
THEN
3092 WRITE (line(jjj+1:jjj+3),
'(I3)') grdhgh(i,j)
3097 line(7:jjj) =
' No dependencies'
3099 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3100 WRITE(mdss,934) line(1:jjj)
3101 IF ( nmplog .EQ. improc )
WRITE(mdso,934) line(1:jjj)
3103 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,935)
3104 IF ( nmplog .EQ. improc )
WRITE (mdso,935)
3106 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
3107 WRITE (mdss,937)
'No higher rank grid dependencies'
3108 IF ( nmplog .EQ. improc ) &
3109 WRITE (mdso,937)
'No higher rank grid dependencies'
3115 WRITE (mdst,9084) i, idinp(i,:)
3121 CALL wmuset ( mdse, mdst, scratch, .false. )
3122 IF (
tstout )
CALL wmudmp ( mdst, 0 )
3124 DEALLOCATE ( mds, ntrace, odat, flgrd, flgr2, flgd, flg2, inames,&
3129 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
3132 CALL date_and_time ( values=clkdt2 )
3133 clkfin = tdiff( clkdt1,clkdt2 )
3136 CALL prtime ( prftn )
3137 WRITE (mdsp,990) prft0, prftn, get_memory(),
'END'
3140 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,998)
3142 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,999)
3150 IF ( improc .EQ. nmperr )
WRITE (mdse,1000) ifname, ierr
3151 CALL extcde ( 2000 )
3155 IF ( improc .EQ. nmperr )
WRITE (mdse,1001)
3156 CALL extcde ( 2001 )
3160 IF ( improc .EQ. nmperr )
WRITE (mdse,1002) ierr
3161 CALL extcde ( 2002 )
3165 IF ( improc .EQ. nmperr )
WRITE (mdse,1010) ierr
3166 CALL extcde ( 2010 )
3171 WRITE (mdse,1011) ierr
3172 CALL extcde ( 2011 )
3176 IF ( improc .EQ. nmperr )
WRITE (mdse,1020)
3177 CALL extcde ( 2020 )
3181 IF ( improc .EQ. nmperr )
WRITE (mdse,1021)
3182 CALL extcde ( 2021 )
3186 IF ( improc .EQ. nmperr )
WRITE (mdse,1030) mnames(i), inames(i,j)
3187 CALL extcde ( 2030 )
3191 IF ( improc .EQ. nmperr )
WRITE (mdse,1031) inames(i,j), j
3192 CALL extcde ( 2031 )
3201 IF ( improc .EQ. nmperr )
WRITE (mdse,1051) mn(:ii)
3202 CALL extcde ( 2051 )
3206 IF ( improc .EQ. nmperr )
WRITE (mdse,1052) j
3207 CALL extcde ( 2052 )
3211 IF ( improc .EQ. nmperr )
WRITE (mdse,1053)
3212 CALL extcde ( 2053 )
3216 IF ( improc .EQ. nmperr )
WRITE (mdse,1054)
3217 CALL extcde ( 2054 )
3221 IF ( improc .EQ. nmperr )
WRITE (mdse,1060)
3222 CALL extcde ( 2060 )
3226 IF ( improc .EQ. nmperr )
WRITE (mdse,1070)
3227 CALL extcde ( 2070 )
3231 CALL extcde ( 2080 )
3236 900
FORMAT (
' ========== STARTING MWW3 INITIALIZATION (WMINIT) =', &
3237 '============================'/)
3238 901
FORMAT (
' WAVEWATCH III log file ', &
3240 ' ==================================', &
3241 '==================================='/ &
3242 ' multi-grid model driver ', &
3243 'date : ',a10/50x,
'time : ',a8)
3245 910
FORMAT (
' Opening input file ',a,
' (unit number',i3,
')')
3246 911
FORMAT (
' Opening output file ',a,
' (unit number',i3,
')')
3247 912
FORMAT (/
' Comment character : ''',a,
'''')
3249 920
FORMAT (/
' Number of grids :',i3)
3250 921
FORMAT (
' No input data grids.')
3251 922
FORMAT (
' Input data grids :',i3)
3252 923
FORMAT (
' Single point output file : ',a)
3253 1923
FORMAT (/
' Output server type :',i3)
3254 2923
FORMAT (
' Single point output proc : ',a)
3255 3923
FORMAT (
' Grids share output procs : ',a)
3257 924
FORMAT (/
' Input grid information : '/ &
3258 ' nr extension lev. cur. wind ice tau', &
3260 ' ----------------------------------------------', &
3262 925
FORMAT (1x,i3,1x,a10,6(1x,a6),3(1x,a1))
3263 926
FORMAT (
' ----------------------------------------------', &
3266 927
FORMAT (/
' Grid for point output : '/ &
3267 ' nr extension '/
' ---------------')
3269 929
FORMAT (
' ---------------')
3271 930
FORMAT (/
' Wave grid information : '/ &
3272 ' nr extension lev. cur. wind ice tau', &
3273 ' rho data move1 rnk grp dmp'/ &
3274 ' ----------------------------------------------', &
3275 '-----------------------------------')
3276 931
FORMAT (1x,i3,1x,a10,6(1x,a6),3(1x,a1),2x,a4,2i4,3x,a1)
3277 932
FORMAT (
' -----------------------------------------------', &
3278 '-----------------------------------'/)
3279 933
FORMAT (
' ',a,
' : '/ &
3280 ' nr grids (part of comm.)'/ &
3281 ' -----------------------------------------------', &
3282 '---------------------')
3284 935
FORMAT (
' -----------------------------------------------', &
3285 '---------------------'/)
3286 936
FORMAT (/
' ',a,
' : '/ &
3287 ' nr Depends on '/ &
3288 ' -----------------------------------------------', &
3289 '---------------------')
3290 937
FORMAT (
' ',a/)
3291 938
FORMAT (/
' ',a/)
3293 940
FORMAT (/
' Time interval : '/ &
3294 ' --------------------------------------------------')
3295 941
FORMAT (
' Starting time : ',a)
3296 942
FORMAT (
' Ending time : ',a/)
3297 943
FORMAT (/
' Model settings : '/ &
3298 ' --------------------------------------------------')
3299 944
FORMAT (
' Masking computation in nesting : ',a)
3300 945
FORMAT (
' Masking output in nesting : ',a/)
3302 950
FORMAT (/
' Output requests : (ALL GRIDS) '/ &
3303 ' ==================================================')
3304 951
FORMAT (/
' Type',i2,
' : ',a/ &
3305 ' -----------------------------------------')
3306 952
FORMAT (
' From : ',a)
3307 953
FORMAT (
' To : ',a)
3308 954
FORMAT (
' Interval : ',a/)
3309 955
FORMAT (
' Fields : ',a)
3311 957
FORMAT (
' Point 1 : ',2e14.6,2x,a)
3312 958
FORMAT (
' ',i6,
' : ',2e14.6,2x,a)
3313 959
FORMAT (
' No points defined')
3314 960
FORMAT (
' The file with ',a,
' data is ',a,
'.')
3315 961
FORMAT (
' IX fls : ',3i6/ &
3317 962
FORMAT (/
' Output request for model ',a,
' (nr',i3,
') '/ &
3318 ' ==================================================')
3319 963
FORMAT (
' Output disabled')
3321 965
FORMAT (/
' Grid movement data (!/MGP, !/MGW): '/ &
3322 ' --------------------------------------------------')
3324 967
FORMAT (
' ',i6,2x,a)
3325 968
FORMAT (
' ',i6,i11.8,i7.6,2f8.2)
3327 970
FORMAT(//
' Assigning resources : '/ &
3328 ' --------------------------------------------------')
3330 972
FORMAT (
' Process ',i5.5,
' reserved for all point output.')
3331 973
FORMAT (
' Processes ',i5.5,
' through ',i5.5,
' [',i3,
']', &
3332 ' reserved for output.')
3334 5x,
' grid comp. grd pnt trk rst bpt prt'/ &
3335 5x,
' ------------------------------------------------------', &
3337 975
FORMAT (5x,
' ',a10,2x,i5.5,
'-',i5.5,6(2x,a5))
3338 976
FORMAT(5x,
' -------------------------------------------------', &
3339 '------------------')
3340 977
FORMAT (5x,
' Unified point output at ',i5.5)
3341 1974
FORMAT (
' Resource assignement (processes) : '/ &
3342 ' grid comp. grd pnt trk rst bpt prt'/ &
3343 ' ------------------------------------------------------', &
3345 1975
FORMAT (
' ',a10,2x,i5.5,
'-',i5.5,6(2x,a5))
3346 1976
FORMAT (
' ---------------------------------------------------', &
3348 1977
FORMAT (
' Unified point output at ',i5.5)
3350 980
FORMAT(//
' Initializations :'/ &
3351 ' --------------------------------------------------')
3352 981
FORMAT (
' Model number',i3,
' [',a,
']')
3353 982
FORMAT (
' Initializing wave model ...')
3354 983
FORMAT (
' Initializing model input ...')
3355 984
FORMAT (
' ',a,
': file not needed')
3356 985
FORMAT (
' ',a,
': file OK')
3357 986
FORMAT (
' Unified point output [',a,
']')
3358 987
FORMAT (
' Initializing grids ...')
3359 988
FORMAT (
' Input data grid',i3,
' [',a,
']')
3362 990
FORMAT (1x,3f12.3,
' WMINIT',1x,a)
3365 998
FORMAT (
' Running the model :'/ &
3366 ' --------------------------------------------------'/)
3367 999
FORMAT (
' ========== END OF MWW3 INITIALIZATION (WMINIT) ===', &
3368 '============================'/)
3370 1000
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3371 ' ERROR IN OPENING INPUT FILE ',a/ &
3374 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3375 ' PREMATURE END OF INPUT FILE'/)
3377 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3378 ' ERROR IN READING FROM INPUT FILE'/ &
3380 1010
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3381 ' ERROR IN OPENING LOG FILE'/ &
3383 1011
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3384 ' ERROR IN OPENING TEST FILE'/ &
3386 1020
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3387 ' ILLEGAL NUMBER OF GRIDS ( < 1 ) '/)
3388 1021
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3389 ' ILLEGAL NUMBER OF INPUT GRIDS ( < 0 ) '/)
3390 1030
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3391 ' INPUT GRID NAME NOT FOUND '/ &
3392 ' WAVE GRID : ',a/ &
3393 ' INPUT NAME : ',a/)
3394 1031
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : *** '/ &
3395 ' REQUESTED INPUT TYPE NOT FOUND IN INPUT GRID '/ &
3396 ' INPUT GRID : ',a/ &
3397 ' INPUT TYPE : ',i8/)
3398 1032
FORMAT (/
' *** WAVEWATCH III WARNING IN WMINIT : *** '/ &
3399 ' INPUT GRID ',a,
' NOT USED '/)
3400 1040
FORMAT (
' *** WAVEWATCH III WARNING IN W3MLTI : ***'/ &
3401 ' POSSIBLE LOAD IMBALANCE GROUP',i3,
' :',2i6/)
3404 1050
FORMAT (/
' *** WAVEWATCH III WARNING IN W3MLTI : ***'/ &
3405 ' UNIFIED POINT OUTPUT BUT NO OUTPUT'/ &
3406 ' UNIFIED POINT OUTPUT DISABLED'/)
3407 1051
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
3408 ' ILLEGAL MODEL ID [',a,
']'/)
3409 1052
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
3410 ' ILLEGAL OUTPUT TYPE',i10/)
3411 1053
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
3412 ' OUTPUT POINTS FOR INDIVIDUAL GRIDS CANNOT BE DEFINED'/ &
3413 ' WHEN UNIFIED POINT OUTPUT IS REQUESTED'/)
3414 1054
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
3415 ' POINT OUTPUT ACTIVATED, BUT NO POINTS DEFINED'/)
3416 1060
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
3417 ' NO MOVING GRID DATA PRESENT'/)
3418 1070
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINIT : ***'/ &
3419 ' ALL GRIDS ARE NOT USING THE SAME COORDINATE SYSTEM'/)
3420 1080
FORMAT (/
' *** BOUNDARY DATA READ, WILL NOT DUMP, GRID :',i4, &
3422 1081
FORMAT (/
' *** NO BOUNDARY DATA TO DUMP, GRID :',i4,
' ***')
3423 1082
FORMAT (
' No boundary data dump for grid',i3/)
3426 9000
FORMAT (
' TEST WMINIT : UNIT NUMBERS : ',5i6/ &
3427 ' INPUT FILE NAME : ',a)
3431 9020
FORMAT (
' TEST WMINIT : UNIT NUMBERS FOR GRIDS (',a,
')'/ &
3432 15x,
'GRID MDS(1-15)',43x,
'NTRACE')
3433 9021
FORMAT (14x,16i4)
3434 9022
FORMAT (
' TEST WMINIT : UNIT NUMBERS FOR INTPUT FILES'/ &
3435 15x,
'GRID MDSF(JFIRST-9)')
3436 9030
FORMAT (
' TEST WMINIT : FILE EXTENSIONS, INPUT FLAGS,', &
3437 ' RANK AND GROUP, PROC RANGE')
3438 9031
FORMAT (
' ',i3,1x,a,20l2,2i4,2f6.2)
3439 9032
FORMAT (
' TEST WMINIT : PROCESSED RANK NUMBERS')
3440 9033
FORMAT (
' ',i3,1x,a,1x,i4)
3441 9034
FORMAT (
' TEST WMINIT : NUMBER OF GROUPS :',i4)
3442 9035
FORMAT (
' TEST WMINIT : SIZE OF GROUPS :',20i3)
3443 9036
FORMAT (
' TEST WMINIT : GROUP SIZE AND COMPONENTS :')
3444 9037
FORMAT (
' ',2i3,
':',20i3)
3448 9050
FORMAT (
' TEST WMINIT : GRID NUMBER',i3,
' =================')
3449 9051
FORMAT (
' TEST WMINIT : ODAT : ',i9.8,i7.6,i7,i9.8,i7.6, &
3450 5(/24x,i9.8,i7.6,i7,i9.8,i7.6) )
3451 9052
FORMAT (
' TEST WMINIT : FLGRD : ',5(5l2,1x)/24x,5(5l2,1x))
3455 9060
FORMAT (
' TEST WMINIT : GRID MOVEMENT DATA')
3456 9061
FORMAT (
' ',i8.8,i7,1x,2f8.2)
3460 9070
FORMAT (
' TEST WMINIT : ALLPRC ')
3461 9071
FORMAT (
' ',i3,
' : ',250i3)
3462 8042
FORMAT (
' TEST WMINIT : MODMAP ')
3463 8043
FORMAT (
' TEST WMINIT : LOADMP ')
3464 8044
FORMAT (
' ',i3,
' : ',250i2)
3468 9080
FORMAT (
' TEST WMINIT : MODEL INITIALIZATION')
3469 9081
FORMAT (
' MODEL AND TIME :',i4,i10.8,i8.6)
3470 9082
FORMAT (
' STATUS AND TIMES :',i4,3(i10.8,i8.6))
3471 9083
FORMAT (
' TEST WMINIT : IDINP AFTER INITIALIZATION :')
3472 9084
FORMAT (
' ',i4,17(2x,a3))
3500 SUBROUTINE wminitnml ( IDSI, IDSO, IDSS, IDST, IDSE, IFNAME, &
3818 INTEGER,
INTENT(IN) :: IDSI, IDSO, IDSS, IDST, IDSE, &
3820 CHARACTER*(*),
INTENT(IN) :: IFNAME
3821 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: PREAMB
3836 REAL,
POINTER :: X(:), Y(:)
3837 CHARACTER(LEN=40),
POINTER :: PNAMES(:)
3840 TYPE(ot2tpe),
ALLOCATABLE :: OT2(:)
3842 INTEGER :: MDSE2, IERR, I,J,K, N_MOV, N_TOT, &
3843 SCRATCH, RNKMIN, RNKMAX, RNKTMP, &
3844 GRPMIN, GRPMAX, II, NDSREC, NDSFND, &
3845 NPTS, JJ, IP1, IPN, MPI_COMM_LOC, &
3846 NMPSC2, JJJ, NCPROC, NPOUTT, NAPLOC, &
3847 NAPRES, NAPADD, NAPBCT, IFI, IFJ, IW, &
3850 INTEGER :: TTIME(2), TOUT(2), STMPT(2), ETMPT(2),&
3853 INTEGER :: IERR_MPI, BGROUP, LGROUP, IROOT
3856 INTEGER,
SAVE :: IENT = 0
3859 INTEGER,
ALLOCATABLE :: MDS(:,:), NTRACE(:,:), ODAT(:,:), &
3860 TMPRNK(:), TMPGRP(:), NINGRP(:), &
3861 TMOVE(:,:), LOADMP(:,:), IPRT(:,:), &
3865 REAL :: DTTST, XX, YY
3867 REAL :: PRFT0, PRFTN
3868 REAL(KIND=8) :: get_memory
3871 REAL,
ALLOCATABLE :: X(:), Y(:), AMOVE(:), DMOVE(:), &
3874 LOGICAL :: FLT, TFLAGI, TFLAGS(-7:14), PSHARE
3875 LOGICAL,
ALLOCATABLE :: FLGRD(:,:,:), FLRBPI(:), BCDTMP(:), &
3876 USEINP(:), LPRT(:), FLGR2(:,:,:), &
3877 FLGD(:,:), FLG2(:,:), FLG2D(:,:), &
3880 CHARACTER(LEN=1) :: COMSTR
3881 CHARACTER(LEN=256) :: TMPLINE, TEST
3882 CHARACTER(LEN=3) :: IDSTR(-7:9), IDTST
3883 CHARACTER(LEN=5) :: STOUT, OUTSTR(6)
3884 CHARACTER(LEN=6) :: YESXX, XXXNO
3886 ALLOCATABLE :: ACTION(:)
3887 CHARACTER(LEN=8) :: LFILE, STTIME
3889 CHARACTER(LEN=9) :: TFILE
3891 CHARACTER(LEN=13) :: STDATE, MN, TNAMES(9)
3892 CHARACTER(LEN=40) :: PN
3893 CHARACTER(LEN=13), &
3894 ALLOCATABLE :: INAMES(:,:), MNAMES(:)
3895 CHARACTER(LEN=40), &
3896 ALLOCATABLE :: PNAMES(:)
3897 CHARACTER(LEN=12) :: FORMAT
3899 CHARACTER(LEN=18) :: TFILE
3902 CHARACTER(LEN=18) :: PFILE
3904 CHARACTER(LEN=13) :: IDFLDS(-7:9)
3905 CHARACTER(LEN=23) :: DTME21
3906 CHARACTER(LEN=30) :: IDOTYP(8)
3907 CHARACTER(LEN=80) :: TNAME, LINE
3908 CHARACTER(LEN=1024) :: FLDOUT
3915 DATA idflds /
'ice param. 1 ' ,
'ice param. 2 ' , &
3916 'ice param. 3 ' ,
'ice param. 4 ' , &
3918 'mud density ' ,
'mud thkness ' , &
3920 'water levels ' ,
'currents ' , &
3921 'winds ' ,
'ice fields ' , &
3922 'momentum ' ,
'air density ' , &
3923 'mean param. ' ,
'1D spectra ' , &
3926 DATA idotyp /
'Fields of mean wave parameters' , &
3928 'Track point output ' , &
3929 'Restart files ' , &
3931 'Separated wave field data ' , &
3932 'Fields for coupling ' , &
3933 'Restart files second request '/
3935 DATA idstr /
'IC1',
'IC2',
'IC3',
'IC4',
'IC5', &
3936 'MDN',
'MTH',
'MVS',
'LEV',
'CUR', &
3937 'WND',
'ICE',
'TAU',
'RHO',
'DT0', &
3940 DATA yesxx /
'YES/--' /
3941 DATA xxxno /
'---/NO' /
3945 CALL prtime ( prft0 )
3948 CALL date_and_time ( values=clkdt1 )
3950 mpi_comm_loc = mpi_comm
3952 mpi_comm_mwave = mpi_comm
3953 CALL mpi_comm_size ( mpi_comm_mwave, nmproc, ierr_mpi )
3954 CALL mpi_comm_rank ( mpi_comm_mwave, improc, ierr_mpi )
3958 IF (
PRESENT(preamb) )
fnmpre = preamb
3969 CALL wmuset ( 6,6, 5, .true.,
'SYS',
'stdin',
'Standart input' )
3970 CALL wmuset ( 6,6, 6, .true.,
'SYS',
'stdout',
'Standart output')
3973 CALL wmuset (6,6,103, .true.,
'FIX', desc=
'Reserved SNL2' )
3974 CALL wmuset (6,6,104, .true.,
'FIX', desc=
'Reserved SNL2' )
3975 CALL wmuset (6,6,105, .true.,
'FIX', desc=
'Reserved SNL2' )
3976 CALL wmuset (6,6,106, .true.,
'FIX', desc=
'Reserved SNL2' )
3977 CALL wmuset (6,6,107, .true.,
'FIX', desc=
'Reserved SNL2' )
3978 CALL wmuset (6,6,108, .true.,
'FIX', desc=
'Reserved SNL2' )
3979 CALL wmuset (6,6,109, .true.,
'FIX', desc=
'Reserved SNL2' )
3980 CALL wmuset (6,6,110, .true.,
'FIX', desc=
'Reserved SNL2' )
3981 CALL wmuset (6,6,111, .true.,
'FIX', desc=
'Reserved SNL2' )
3982 CALL wmuset (6,6,112, .true.,
'FIX', desc=
'Reserved SNL2' )
3983 CALL wmuset (6,6,113, .true.,
'FIX', desc=
'Reserved SNL2' )
3984 CALL wmuset (6,6,114, .true.,
'FIX', desc=
'Reserved SNL2' )
3985 CALL wmuset (6,6,117, .true.,
'FIX', desc=
'Reserved SNL2' )
3999 IF ( improc .EQ. nmperr )
THEN
4007 CALL itrace ( mdst, ntrmax )
4010 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,900)
4015 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4016 WRITE (mdss,910) ifname, mdsi
4020 ALLOCATE(nml_input_grid(nml_domain%NRINP))
4021 ALLOCATE(nml_model_grid(nml_domain%NRGRD))
4022 ALLOCATE(nml_output_type(nml_domain%NRGRD))
4023 ALLOCATE(nml_output_date(nml_domain%NRGRD))
4026 nml_domain, nml_input_grid, nml_model_grid, nml_output_type, &
4027 nml_output_date, nml_homog_count, nml_homog_input, ierr)
4029 WRITE (*,
'(2A)')
'ERROR: error occured while processing ', ifname
4034 CALL wmuset ( mdss, mdss, mdsi, .true.,
'INP', &
4035 trim(
fnmpre)//ifname,
'Model control input file')
4040 iw = 1 + int( log10( real(nmproc) + 0.5 ) )
4041 iw = max( 3 , min( 9 , iw ) )
4042 WRITE (
FORMAT,
'(A5,I1.1,A1,I1.1,A4)')
'(A4,I',iw,
'.',iw,
',A5)'
4047 WRITE (tfile,format)
'test', improc,
'.mww3'
4050 WRITE (pfile,format)
'prf.', improc,
'.mww3'
4053 IF ( improc .EQ. nmplog )
THEN
4054 OPEN (mdso,
file=trim(
fnmpre)//lfile,err=2010,iostat=ierr)
4055 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4056 WRITE (mdss,911) lfile, mdso
4057 CALL wmuset ( mdss, mdss, mdso, .true.,
'OUT', &
4058 trim(
fnmpre)//lfile,
'Log file')
4060 CALL wmuset ( mdss, mdss, mdso, .true.,
'XXX', &
4061 'Log file on other processors')
4064 IF ( mdst.NE.mdso .AND. mdst.NE.mdss .AND.
tstout )
THEN
4065 ift = len_trim(tfile)
4066 OPEN (mdst,
file=trim(
fnmpre)//tfile(:ift),err=2011,iostat=ierr)
4067 CALL wmuset ( mdss, mdst, mdst, .true.,
'OUT', &
4068 trim(
fnmpre)//tfile(:ift),
'Test output file')
4072 ift = len_trim(pfile)
4073 CALL wmuget ( mdss, mdst, mdsp,
'OUT' )
4074 CALL wmuset ( mdss, mdst, mdsp, .true.,
'OUT', &
4075 trim(
fnmpre)//pfile(:ift),
'Profiling file')
4076 OPEN (mdsp,
file=trim(
fnmpre)//pfile(:ift),err=2011,iostat=ierr)
4082 CALL strace (ient,
'WMINITNML')
4085 IF ( improc .EQ. nmplog )
THEN
4086 CALL wwdate ( stdate )
4087 CALL wwtime ( sttime )
4088 WRITE (mdso,901)
wwver, stdate, sttime
4092 WRITE(mdst,9000) idsi, idso, idss, idst, idse, ifname
4100 nrinp = nml_domain%NRINP
4101 nrgrd = nml_domain%NRGRD
4102 unipts = nml_domain%UNIPTS
4103 iostyp = nml_domain%IOSTYP
4104 upproc = nml_domain%UPPROC
4105 pshare = nml_domain%PSHARE
4109 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4110 WRITE (mdss,920) nrgrd
4111 IF ( nrinp .EQ. 0 )
THEN
4114 WRITE (mdss,922) nrinp
4117 WRITE (mdss,923) yesxx
4119 WRITE (mdss,923) xxxno
4124 WRITE (mdss,2923) yesxx
4126 WRITE (mdss,2923) xxxno
4129 IF (
iostyp.GT.1 .AND. pshare )
THEN
4130 WRITE (mdss,3923) yesxx
4131 ELSE IF (
iostyp.GT. 1 )
THEN
4132 WRITE (mdss,3923) xxxno
4136 IF ( nrgrd .LT. 1 )
GOTO 2020
4137 IF ( nrinp .LT. 0 )
GOTO 2021
4138 IF ( nrinp.EQ.0 .AND. .NOT.
unipts ) nrinp = -1
4142 CALL w3nmod ( nrgrd, mdse2, mdst, nrinp )
4143 CALL w3ndat ( mdse2, mdst )
4144 CALL w3naux ( mdse2, mdst )
4145 CALL w3nout ( mdse2, mdst )
4146 CALL w3ninp ( mdse2, mdst )
4147 CALL wmndat ( mdse2, mdst )
4151 ALLOCATE ( mds(15,nrgrd), ntrace(2,nrgrd), odat(40,0:nrgrd), &
4153 mdsf(-nrinp:nrgrd,
jfirst:9), iprt(6,nrgrd), lprt(nrgrd), &
4155 flg2(
nogrp,nrgrd),outff(7,0:nrgrd))
4166 CALL wmuget ( mdse, mdst, ndsrec,
'INP' )
4167 CALL wmuset ( mdse, mdst, ndsrec, .true.,
'I/O', name=
'...', &
4168 desc=
'Recyclable I/O (mod_def etc.)' )
4169 CALL wmuget ( mdse, mdst, scratch,
'SCR' )
4170 CALL wmuset ( mdse, mdst, scratch, .true., desc=
'Scratch file', &
4171 name=trim(
fnmpre)//
'ww3_multi.scratch' )
4173 IF(mdst.EQ.ndsrec)
THEN
4174 IF ( improc .EQ. nmperr ) &
4175 WRITE(mdse,
'(A,I8)')
'RECYCLABLE UNIT NUMBERS AND '&
4176 //
'TEST OUTPUT UNIT NUMBER ARE THE SAME : ',mdst
4187 ntrace( 2,i) = ntrmax
4191 WRITE (mdst,9020)
'INITIAL'
4193 WRITE (mdst,9021) i, mds(:,i), ntrace(:,i)
4205 ALLOCATE ( inames(2*nrgrd,-7:9), mnames(-nrinp:2*nrgrd), &
4206 tmprnk(2*nrgrd), tmpgrp(2*nrgrd), ningrp(2*nrgrd), &
4207 rp1(2*nrgrd), rpn(2*nrgrd), bcdtmp(nrgrd+1:2*nrgrd) )
4208 ALLOCATE ( grank(nrgrd), grgrp(nrgrd), useinp(nrinp) )
4209 ALLOCATE ( cplinp(nrinp) )
4225 CALL w3seti ( -i, mdse, mdst )
4227 mnames(-i) = nml_input_grid(i)%NAME
4228 inflags1(-7) = nml_input_grid(i)%FORCING%ICE_PARAM1
4229 inflags1(-6) = nml_input_grid(i)%FORCING%ICE_PARAM2
4230 inflags1(-5) = nml_input_grid(i)%FORCING%ICE_PARAM3
4231 inflags1(-4) = nml_input_grid(i)%FORCING%ICE_PARAM4
4232 inflags1(-3) = nml_input_grid(i)%FORCING%ICE_PARAM5
4233 inflags1(-2) = nml_input_grid(i)%FORCING%MUD_DENSITY
4234 inflags1(-1) = nml_input_grid(i)%FORCING%MUD_THICKNESS
4235 inflags1(0) = nml_input_grid(i)%FORCING%MUD_VISCOSITY
4236 inflags1(1) = nml_input_grid(i)%FORCING%WATER_LEVELS
4237 inflags1(2) = nml_input_grid(i)%FORCING%CURRENTS
4238 inflags1(3) = nml_input_grid(i)%FORCING%WINDS
4239 inflags1(4) = nml_input_grid(i)%FORCING%ICE_CONC
4240 inflags1(5) = nml_input_grid(i)%FORCING%ATM_MOMENTUM
4241 inflags1(6) = nml_input_grid(i)%FORCING%AIR_DENSITY
4242 inflags1(7) = nml_input_grid(i)%ASSIM%MEAN
4243 inflags1(8) = nml_input_grid(i)%ASSIM%SPEC1D
4244 inflags1(9) = nml_input_grid(i)%ASSIM%SPEC2D
4251 CALL w3seti ( 0, mdse, mdst )
4252 CALL w3seto ( 0, mdse, mdst )
4257 mnames(0) = nml_output_type(1)%POINT%NAME
4259 IF (
iostyp .LE. 1 )
THEN
4260 nmpupt = max(1,nmproc-2)
4270 mnames(nrgrd+i) = nml_model_grid(i)%NAME
4271 inames(nrgrd+i,-7) = nml_model_grid(i)%FORCING%ICE_PARAM1
4272 inames(nrgrd+i,-6) = nml_model_grid(i)%FORCING%ICE_PARAM2
4273 inames(nrgrd+i,-5) = nml_model_grid(i)%FORCING%ICE_PARAM3
4274 inames(nrgrd+i,-4) = nml_model_grid(i)%FORCING%ICE_PARAM4
4275 inames(nrgrd+i,-3) = nml_model_grid(i)%FORCING%ICE_PARAM5
4276 inames(nrgrd+i,-2) = nml_model_grid(i)%FORCING%MUD_DENSITY
4277 inames(nrgrd+i,-1) = nml_model_grid(i)%FORCING%MUD_THICKNESS
4278 inames(nrgrd+i,0) = nml_model_grid(i)%FORCING%MUD_VISCOSITY
4279 inames(nrgrd+i,1) = nml_model_grid(i)%FORCING%WATER_LEVELS
4280 inames(nrgrd+i,2) = nml_model_grid(i)%FORCING%CURRENTS
4281 inames(nrgrd+i,3) = nml_model_grid(i)%FORCING%WINDS
4282 inames(nrgrd+i,4) = nml_model_grid(i)%FORCING%ICE_CONC
4283 inames(nrgrd+i,5) = nml_model_grid(i)%FORCING%ATM_MOMENTUM
4284 inames(nrgrd+i,6) = nml_model_grid(i)%FORCING%AIR_DENSITY
4285 inames(nrgrd+i,7) = nml_model_grid(i)%ASSIM%MEAN
4286 inames(nrgrd+i,8) = nml_model_grid(i)%ASSIM%SPEC1D
4287 inames(nrgrd+i,9) = nml_model_grid(i)%ASSIM%SPEC2D
4288 tmprnk(nrgrd+i) = nml_model_grid(i)%RESOURCE%RANK_ID
4289 tmpgrp(nrgrd+i) = nml_model_grid(i)%RESOURCE%GROUP_ID
4290 rp1(nrgrd+i) = nml_model_grid(i)%RESOURCE%COMM_FRAC(1)
4291 rpn(nrgrd+i) = nml_model_grid(i)%RESOURCE%COMM_FRAC(2)
4292 bcdtmp(nrgrd+i) = nml_model_grid(i)%RESOURCE%BOUND_FLAG
4294 rp1(nrgrd+i) = max( 0. , min( 1. , rp1(nrgrd+i) ) )
4295 rpn(nrgrd+i) = max( rp1(nrgrd+i) , min( 1. , rpn(nrgrd+i) ) )
4300 rnktmp = minval( tmprnk(nrgrd+1:2*nrgrd) )
4304 DO j=nrgrd+1, 2*nrgrd
4305 IF ( tmprnk(j) .EQ. rnktmp )
THEN
4307 CALL w3seti ( i, mdse, mdst )
4315 inames(i,:)= inames(j,:)
4316 mnames(i) = mnames(j)
4317 tmprnk(i) = tmprnk(j)
4318 tmpgrp(i) = tmpgrp(j)
4321 bcdump(i) = bcdtmp(j)
4323 WRITE (mdst,9031) i, mnames(i),
inflags1, tmprnk(i), &
4324 tmpgrp(i), rp1(i), rpn(i)
4328 IF ( i .EQ. nrgrd )
EXIT
4334 ALLOCATE ( inpmap(nrgrd,
jfirst:10), idinp(-nrinp:nrgrd,
jfirst:10) )
4339 CALL w3seti ( i, mdse, mdst )
4341 IF ( inames(i,j) .EQ.
'native' )
THEN
4346 IF ( inames(i,j)(1:4) .EQ.
'CPL:' )
THEN
4347 IF ( inames(i,j)(5:) .EQ.
'native' )
THEN
4354 IF ( mnames(-jj) .EQ. inames(i,j)(5:) )
THEN
4359 IF ( inpmap(i,j) .EQ. 0 )
GOTO 2030
4360 IF ( .NOT.
inputs(inpmap(i,j))%INFLAGS1(j) )
GOTO 2031
4361 useinp(-inpmap(i,j)) = .true.
4362 cplinp(-inpmap(i,j)) = .true.
4364 ELSE IF ( inames(i,j) .NE.
'no' )
THEN
4367 IF ( mnames(-jj) .EQ. inames(i,j) )
THEN
4373 IF ( inpmap(i,j) .EQ. 0 )
GOTO 2030
4374 IF ( .NOT.
inputs(-inpmap(i,j))%INFLAGS1(j) )
GOTO 2031
4375 useinp(inpmap(i,j)) = .true.
4385 IF ( .NOT.useinp(i) .AND. &
4386 mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4387 ii = len_trim(mnames(-i))
4388 WRITE (mdse,1032) mnames(-i)(1:ii)
4395 IF ( i .EQ. 0 ) cycle
4396 CALL w3seti ( i, mdse, mdst )
4398 IF ( i .GE. 1 )
THEN
4399 IF ( inpmap(i,j) .LT. 0 ) cycle
4402 CALL wmuget ( mdse, mdst, ndsfnd,
'INP' )
4403 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
4404 desc=
'Input data file' )
4413 IF ( i .EQ. 0 ) cycle
4414 WRITE (mdst,9021) i, mdsf(i,
jfirst:9)
4424 rnkmax = maxval( tmprnk(1:nrgrd) ) + 1
4428 rnkmin = minval( tmprnk(1:nrgrd) )
4429 IF ( rnkmin .EQ. rnkmax )
EXIT
4432 IF ( tmprnk(i) .EQ. rnkmin )
THEN
4441 WRITE (mdst,9033) i, mnames(i), grank(i)
4446 grpmax = maxval( tmpgrp(1:nrgrd) ) + 1
4454 IF ( grank(i) .EQ. rnktmp ) &
4455 grpmin = min( grpmin , tmpgrp(i) )
4457 IF ( grpmin .EQ. grpmax )
EXIT
4460 IF ( grank(i).EQ.rnktmp .AND. grpmin.EQ.tmpgrp(i) )
THEN
4463 ningrp(nrgrp) = ningrp(nrgrp) + 1
4470 WRITE (mdst,9034) nrgrp
4472 WRITE (mdst,9033) i, mnames(i), grgrp(i)
4474 WRITE (mdst,9035) ningrp(1:nrgrp)
4477 ALLOCATE ( action(
jfirst:11) )
4478 ALLOCATE ( ingrp(nrgrp,0:maxval(ningrp(:nrgrp))) )
4479 DEALLOCATE ( tmprnk, tmpgrp, ningrp, bcdtmp )
4483 ingrp(grgrp(i),0) = ingrp(grgrp(i),0) + 1
4484 ingrp(grgrp(i),ingrp(grgrp(i),0)) = i
4490 WRITE (mdst,9037) j, ingrp(j,:ingrp(j,0))
4498 CALL prtime ( prftn )
4499 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8.b'
4505 j = len_trim(mnames(0))
4506 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4507 WRITE (mdss,986) mnames(0)(1:j)
4511 CALL w3iogr (
'GRID', ndsrec, 0, mnames(0)(1:j) )
4517 IF ( nrinp .GT. 0 )
THEN
4518 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,924)
4519 IF ( nmplog .EQ. improc )
WRITE (mdso,924)
4521 IF ( .NOT. useinp(i) ) cycle
4522 CALL w3seti ( -i, mdse, mdst )
4523 action(1:6) =
'--- '
4525 IF (
inflags1(j) ) action(j) =
' X '
4528 IF (
inflags1(7) ) action(7) =
'1 '
4529 IF (
inflags1(8) ) action(8) =
'2 '
4530 IF (
inflags1(9) ) action(9) =
'3 '
4531 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4532 WRITE (mdss,925) i, mnames(-i), action(
jfirst:9)
4533 IF ( nmplog .EQ. improc ) &
4534 WRITE (mdso,925) i, mnames(-i), action(
jfirst:9)
4536 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,926)
4537 IF ( nmplog .EQ. improc )
WRITE (mdso,926)
4541 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,927)
4542 IF ( nmplog .EQ. improc )
WRITE (mdso,927)
4543 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4544 WRITE (mdss,928) mnames(0)
4545 IF ( nmplog .EQ. improc ) &
4546 WRITE (mdso,928) mnames(0)
4547 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,929)
4548 IF ( nmplog .EQ. improc )
WRITE (mdso,929)
4551 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,930)
4552 IF ( nmplog .EQ. improc )
WRITE (mdso,930)
4554 CALL w3seti ( i, mdse, mdst )
4555 action(1:6) =
'--- '
4557 IF (
inflags1(j) .AND. inpmap(i,j) .EQ. 0 )
THEN
4558 action(j) =
'native'
4559 ELSE IF (
inflags1(j) .AND. inpmap(i,j) .EQ. -999 )
THEN
4560 action(j) =
'native'
4561 ELSE IF ( inpmap(i,j) .GT. 0 )
THEN
4562 action(j) = mnames(-inpmap(i,j))
4563 ELSE IF ( inpmap(i,j) .LT. 0 )
THEN
4564 action(j) = mnames( inpmap(i,j))
4568 IF (
inflags1(7) ) action(7) =
'1 '
4569 IF (
inflags1(8) ) action(8) =
'2 '
4570 IF (
inflags1(9) ) action(9) =
'3 '
4576 IF ( bcdump(i) ) action(11) =
'y '
4577 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4578 WRITE (mdss,931) i, mnames(i), action(1:10), grank(i), &
4579 grgrp(i), action(11)
4580 IF ( nmplog .EQ. improc ) &
4581 WRITE (mdso,931) i, mnames(i), action(1:10), grank(i), &
4582 grgrp(i), action(11)
4584 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,932)
4585 IF ( nmplog .EQ. improc )
WRITE (mdso,932)
4587 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4588 WRITE (mdss,933)
'Group information'
4589 IF ( nmplog .EQ. improc ) &
4590 WRITE (mdso,933)
'Group information'
4592 WRITE (line(1:6),
'(1X,I3,2X)') j
4595 IF ( jjj .GT. 60 )
THEN
4596 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4597 WRITE (mdss,934) line(1:jjj)
4598 IF ( nmplog .EQ. improc )
WRITE (mdso,934) line(1:jjj)
4602 WRITE (line(jjj+1:jjj+3),
'(I3)') ingrp(j,jj)
4604 line(jjj+4:jjj+5) =
' ('
4605 WRITE (line(jjj+6:jjj+11),
'(F6.4)') rp1(ingrp(j,jj))
4606 line(jjj+12:jjj+12) =
'-'
4607 WRITE (line(jjj+13:jjj+18),
'(F6.4)') rpn(ingrp(j,jj))
4608 line(jjj+19:jjj+19) =
')'
4612 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4613 WRITE (mdss,934) line(1:jjj)
4614 IF ( nmplog .EQ. improc )
WRITE (mdso,934) line(1:jjj)
4616 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,935)
4617 IF ( nmplog .EQ. improc )
WRITE (mdso,935)
4625 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,940)
4628 READ(nml_domain%START, *) stmpt
4629 READ(nml_domain%STOP, *) etmpt
4631 READ(nml_domain%START, *) stime
4632 READ(nml_domain%STOP, *) etime
4634 CALL stme21 ( stime , dtme21 )
4635 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,941) dtme21
4636 CALL stme21 ( etime , dtme21 )
4637 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,942) dtme21
4640 CALL w3setw ( i, mdse, mdst )
4644 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,943)
4646 flghg1 = nml_domain%FLGHG1
4647 flghg2 = nml_domain%FLGHG2
4648 flghg2 = flghg1 .AND. flghg2
4650 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4652 WRITE (mdss,944) yesxx
4654 WRITE (mdss,944) xxxno
4657 WRITE (mdss,945) yesxx
4659 WRITE (mdss,945) xxxno
4671 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,950) trim(mnames(nrgrd+i))
4674 READ(nml_output_date(i)%FIELD%START, *) odat(1,i), odat(2,i)
4675 READ(nml_output_date(i)%FIELD%STRIDE, *) odat(3,i)
4676 READ(nml_output_date(i)%FIELD%STOP, *) odat(4,i), odat(5,i)
4677 READ(nml_output_date(i)%FIELD%OUTFFILE, *) outff(1,i)
4679 READ(nml_output_date(i)%POINT%START, *) odat(6,i), odat(7,i)
4680 READ(nml_output_date(i)%POINT%STRIDE, *) odat(8,i)
4681 READ(nml_output_date(i)%POINT%STOP, *) odat(9,i), odat(10,i)
4682 READ(nml_output_date(i)%POINT%OUTFFILE, *) outff(2,i)
4684 READ(nml_output_date(i)%TRACK%START, *) odat(11,i), odat(12,i)
4685 READ(nml_output_date(i)%TRACK%STRIDE, *) odat(13,i)
4686 READ(nml_output_date(i)%TRACK%STOP, *) odat(14,i), odat(15,i)
4688 READ(nml_output_date(i)%RESTART%START, *) odat(16,i), odat(17,i)
4689 READ(nml_output_date(i)%RESTART%STRIDE, *) odat(18,i)
4690 READ(nml_output_date(i)%RESTART%STOP, *) odat(19,i), odat(20,i)
4692 READ(nml_output_date(i)%BOUNDARY%START, *) odat(21,i), odat(22,i)
4693 READ(nml_output_date(i)%BOUNDARY%STRIDE, *) odat(23,i)
4694 READ(nml_output_date(i)%BOUNDARY%STOP, *) odat(24,i), odat(25,i)
4696 READ(nml_output_date(i)%PARTITION%START, *) odat(26,i), odat(27,i)
4697 READ(nml_output_date(i)%PARTITION%STRIDE, *) odat(28,i)
4698 READ(nml_output_date(i)%PARTITION%STOP, *) odat(29,i), odat(30,i)
4702 READ(nml_output_date(i)%RESTART2%START, *) odat(36,i), odat(37,i)
4703 READ(nml_output_date(i)%RESTART2%STRIDE, *) odat(38,i)
4704 READ(nml_output_date(i)%RESTART2%STOP, *) odat(39,i), odat(40,i)
4707 odat(3,i) = max( 0 , odat(3,i) )
4708 odat(8,i) = max( 0 , odat(8,i) )
4709 odat(13,i) = max( 0 , odat(13,i) )
4710 odat(18,i) = max( 0 , odat(18,i) )
4711 odat(23,i) = max( 0 , odat(23,i) )
4712 odat(28,i) = max( 0 , odat(28,i) )
4713 odat(38,i) = max( 0 , odat(38,i) )
4717 odat(6:10,0) = odat(6:10,1)
4720 IF ( odat(8,i) .EQ. 0 )
THEN
4721 ALLOCATE ( ot2(i)%X(1), ot2(i)%Y(1), ot2(i)%PNAMES(1) )
4729 outpts(i)%OFILES(j)=outff(j,i)
4730 IF ( odat(5*(j-1)+3,i) .NE. 0 )
THEN
4731 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4732 WRITE (mdss,951) j, idotyp(j)
4733 ttime(1) = odat(5*(j-1)+1,i)
4734 ttime(2) = odat(5*(j-1)+2,i)
4735 CALL stme21 ( ttime , dtme21 )
4736 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4737 WRITE (mdss,952) dtme21
4738 ttime(1) = odat(5*(j-1)+4,i)
4739 ttime(2) = odat(5*(j-1)+5,i)
4740 CALL stme21 ( ttime , dtme21 )
4741 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4742 WRITE (mdss,953) dtme21
4745 dttst = real( odat(5*(j-1)+3,i) )
4746 CALL tick21 ( ttime , dttst )
4747 CALL stme21 ( ttime , dtme21 )
4748 IF ( ( odat(5*(j-1)+1,i) .NE. odat(5*(j-1)+4,i) .OR. &
4749 odat(5*(j-1)+2,i) .NE. odat(5*(j-1)+5,i) ) .AND. &
4750 mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4752 IF ( dtme21(ii:ii).NE.
'0' .AND. &
4753 dtme21(ii:ii).NE.
'/' .AND. &
4754 dtme21(ii:ii).NE.
' ' .AND. &
4755 dtme21(ii:ii).NE.
':' )
EXIT
4758 WRITE (mdss,954) dtme21(1:19)
4761 IF ( j .EQ. 1 )
THEN
4765 flgrd(:,:,i)=.false.
4766 fldout = nml_output_type(i)%FIELD%LIST
4767 CALL w3flgrdflag ( mdss, mdso, mdse2, fldout, flg1d, &
4768 flg2d, improc, nmpscr, ierr )
4772 ELSE IF ( j .EQ. 2 )
THEN
4778 IF ( odat(8,0).EQ.0 .AND. improc.EQ.nmperr )
WRITE (mdse,1050)
4779 IF ( odat(8,0).EQ.0 )
unipts = .false.
4783 IF ( trim(nml_output_type(i)%POINT%FILE).EQ.
'unset' )
THEN
4785 IF ( odat(8,i).EQ.0 )
THEN
4786 ALLOCATE ( ot2(i)%X(1), ot2(i)%Y(1), ot2(i)%PNAMES(1) )
4795 IF (
unipts .AND. iloop.NE.0 ) cycle
4797 IF (
unipts .AND. i.GE.2 )
THEN
4799 IF ( nml_output_type(k)%POINT%FILE.NE.nml_output_type(i)%POINT%FILE )
GOTO 2053
4802 OPEN (mdsi,
file=trim(
fnmpre)//trim(nml_output_type(i)%POINT%FILE), &
4803 form=
'FORMATTED', status=
'OLD', err=2104, iostat=ierr)
4811 IF ( iloop.EQ.2)
THEN
4812 IF ( ot2(i)%NPTS.GT.0 )
THEN
4813 ALLOCATE ( ot2(i)%X(ot2(i)%NPTS), &
4814 ot2(i)%Y(ot2(i)%NPTS), &
4815 ot2(i)%PNAMES(ot2(i)%NPTS) )
4818 ALLOCATE ( ot2(i)%X(1), ot2(i)%Y(1), ot2(i)%PNAMES(1) )
4824 READ (mdsi,*,err=2004,iostat=ierr) tmpline
4826 IF ( ierr.NE.0 .OR. index(tmpline,
"STOPSTRING").NE.0 )
EXIT
4828 test = adjustl( tmpline )
4829 IF ( test(1:1).EQ.comstr .OR. len_trim(test).EQ.0 )
THEN
4834 backspace( mdsi, err=2004, iostat=ierr)
4835 READ (mdsi,*,err=2004,iostat=ierr) xx, yy, pn
4837 ot2(i)%NPTS = ot2(i)%NPTS + 1
4838 IF ( iloop .EQ. 1 ) cycle
4839 IF ( iloop .EQ. 2 )
THEN
4840 ot2(i)%X(ot2(i)%NPTS) = xx
4841 ot2(i)%Y(ot2(i)%NPTS) = yy
4842 ot2(i)%PNAMES(ot2(i)%NPTS) = pn
4843 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4844 IF ( ot2(i)%NPTS .EQ. 1 )
THEN
4845 WRITE (mdss,957) xx, yy, pn
4847 WRITE (mdss,958) ot2(i)%NPTS, xx, yy, pn
4855 IF (
unipts .AND. ot2(0)%NPTS.EQ.0 .AND. ot2(i)%NPTS.GT.0 )
THEN
4857 ot2(0)%NPTS = ot2(i)%NPTS
4858 ALLOCATE (ot2(0)%X(ot2(0)%NPTS), ot2(0)%Y(ot2(0)%NPTS), ot2(0)%PNAMES(ot2(0)%NPTS))
4859 ot2(0)%X(:) = ot2(i)%X(:)
4860 ot2(0)%Y(:) = ot2(i)%Y(:)
4861 ot2(0)%PNAMES(:) = ot2(i)%PNAMES(:)
4865 ALLOCATE (ot2(k)%X(1),ot2(k)%Y(1),ot2(k)%PNAMES(1))
4869 ELSE IF ( j .EQ. 3 )
THEN
4873 tflagi = nml_output_type(i)%TRACK%FORMAT
4875 mds(11,i) = abs(mds(11,i))
4877 mds(11,i) = -abs(mds(11,i))
4879 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4880 IF ( .NOT. tflagi )
THEN
4881 WRITE (mdss,960)
'input',
'UNFORMATTED'
4883 WRITE (mdss,960)
'input',
'FORMATTED'
4887 ELSE IF ( j .EQ. 4 )
THEN
4891 ELSE IF ( j .EQ. 5 )
THEN
4895 ELSE IF ( j .EQ. 6 )
THEN
4899 iprt(1,i) = nml_output_type(i)%PARTITION%X0
4900 iprt(2,i) = nml_output_type(i)%PARTITION%XN
4901 iprt(3,i) = nml_output_type(i)%PARTITION%NX
4902 iprt(4,i) = nml_output_type(i)%PARTITION%Y0
4903 iprt(5,i) = nml_output_type(i)%PARTITION%YN
4904 iprt(6,i) = nml_output_type(i)%PARTITION%NY
4905 lprt(i) = nml_output_type(i)%PARTITION%FORMAT
4906 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4907 WRITE (mdss,961) iprt(:,i)
4908 IF ( .NOT. lprt(i) )
THEN
4909 WRITE (mdss,960)
'output',
'UNFORMATTED'
4911 WRITE (mdss,960)
'output',
'FORMATTED'
4917 ELSE IF ( j .EQ. 8 )
THEN
4938 WRITE (mdst,9053) odat(:,i)
4939 WRITE (mdst,9052) flgrd(:,:,i)
4951 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
4953 WRITE (mdss,966)
'Continuous grid movement data'
4956 n_mov = nml_homog_count%N_MOV
4957 n_tot = nml_homog_count%N_TOT
4959 IF ( n_mov .EQ. 0 )
GOTO 2060
4960 IF ( n_mov .GT. 99 )
GOTO 2061
4962 ALLOCATE ( tmove(2,n_mov), amove(n_mov), dmove(n_mov) )
4965 READ(nml_homog_input(i)%NAME,*) idtst
4968 READ(nml_homog_input(i)%DATE,*) tmove(:,i)
4969 amove(i) = nml_homog_input(i)%VALUE1
4970 dmove(i) = nml_homog_input(i)%VALUE2
4971 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
4972 WRITE (mdss,968) i, tmove(:,i), amove(i), dmove(i)
4980 CALL w3setg ( i, mdse, mdst )
4981 CALL wmsetm ( i, mdse, mdst )
4983 CALL wmdimd ( i, mdse, mdst, 0 )
4985 tmv(:,4,ii) = tmove(:,ii)
4986 amv(ii,4) = amove(ii)
4987 dmv(ii,4) = dmove(ii)
5001 ALLOCATE ( allprc(nmproc,nrgrd) , modmap(nmproc,nrgrp) , &
5002 loadmp(nmproc,nrgrp) )
5010 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,970)
5018 IF ( nmproc.GE.10 .AND.
upproc )
THEN
5021 IF (
upproc .AND. mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
5022 WRITE (mdss,971)
'Separate process for point' // &
5026 IF ( nmpupt .EQ. improc )
THEN
5027 ii = len_trim(mnames(0))
5028 CALL wmuget ( mdss, mdst, mdsup,
'OUT' )
5029 CALL wmuset ( mdss, mdst, mdsup, .true.,
'OUT', &
5030 trim(
fnmpre)//
'out_pnt.'//mnames(0)(1:ii), &
5031 'Unified point output')
5035 trim(
fnmpre)//
'out_pnt.'//mnames(0)(1:ii)//
'.txt', &
5036 'Unified point output ascii')
5041 IF (
upproc .AND. mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
5042 WRITE (mdss,972) nmpupt
5046 ALLOCATE ( ndpout(nrgrd) )
5049 IF (
iostyp .GT. 1 )
THEN
5052 IF ( odat( 3,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
5054 IF ( odat(13,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
5056 IF ( odat(28,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
5058 IF ( odat( 8,i) .GT. 0 .OR. odat(18,i) .GT. 0 .OR. &
5059 odat(23,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
5061 IF ( odat(38,i) .GT. 0 ) ndpout(i) = ndpout(i) + 1
5062 IF (
iostyp .EQ. 2 ) ndpout(i) = min( 1 , ndpout(i) )
5069 ( ( .NOT.pshare .AND. 4*sum(ndpout).GT.ncproc ) &
5070 .OR.( pshare .AND. 4*maxval(ndpout).GT.ncproc ) ) )
THEN
5072 ndpout(i) = min( 1 , ndpout(i) )
5075 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
5076 WRITE (mdss,971)
'Separate processes for output' // &
5082 IF (
iostyp.GT.1 .AND. .NOT.pshare .AND. &
5083 4*sum(ndpout).GT.ncproc )
THEN
5085 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
5086 WRITE (mdss,971)
'Grids sharing output processes.'
5091 IF (
iostyp.GT.1 .AND. 4*maxval(ndpout).GT.ncproc )
THEN
5094 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
5095 WRITE (mdss,971)
'Separate processes for output' // &
5102 IF (
iostyp .GT. 1 )
THEN
5104 npoutt = maxval(ndpout)
5106 npoutt = sum(ndpout)
5109 ncproc = ncproc - npoutt
5110 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
5111 IF ( npoutt .EQ. 0 )
THEN
5112 WRITE (mdss,971)
'No (other) dedicated output processes.'
5114 WRITE (mdss,973) ncproc+1, ncproc+npoutt, npoutt
5123 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,974)
5124 IF ( nmplog.EQ.improc )
WRITE (mdso,1974)
5127 CALL mpi_comm_group ( mpi_comm_mwave, bgroup, ierr_mpi )
5129 ALLOCATE ( tmprnk(nmproc) )
5134 ip1 = max( 1 , min( ncproc , 1+nint(real(ncproc)*rp1(i)) ) )
5135 ipn = max( ip1 , min( ncproc , nint(real(ncproc)*rpn(i)) ) )
5138 CALL wmsetm ( i, mdse, mdst )
5139 naploc = 1 + ipn - ip1
5143 fbcast = naploc .NE. ncproc
5144 fbcast = naploc .NE. ncproc .OR. &
5145 (
iostyp.GT.1 .AND. .NOT.pshare )
5148 tmprnk(1+j-ip1) = j - 1
5151 IF (
iostyp .GT. 1 )
THEN
5152 IF ( pshare ) napres = ncproc
5155 tmprnk(napadd) = napres
5162 tmprnk(napadd) = nmproc - 1
5166 CALL mpi_group_incl ( bgroup, napadd, tmprnk, lgroup, &
5168 CALL mpi_comm_create ( mpi_comm_mwave, lgroup, &
5169 mpi_comm_grd, ierr_mpi )
5170 CALL mpi_group_free ( lgroup, ierr_mpi )
5174 allprc(ii,i) = 1 + ii - ip1
5178 IF ( pshare .OR. i.EQ.1 )
THEN
5181 napadd = ncproc + sum(ndpout(1:i-1))
5183 IF (
iostyp .GT. 1 )
THEN
5187 allprc(napadd,i) = ii
5193 allprc(nmproc,i) = ii
5197 WRITE (mdst,9071) i, allprc(:,i)
5203 IF (
iostyp .LE. 1 )
THEN
5205 IF ( odat( 3,i) .GT. 0 )
THEN
5206 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-1))+1
5209 IF ( odat( 8,i) .GT. 0 .OR.
unipts )
THEN
5210 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-2))+1
5213 IF ( odat(13,i) .GT. 0 )
THEN
5214 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-5))+1
5217 IF ( odat(18,i) .GT. 0 )
THEN
5218 WRITE (stout,
'(I5.5)') tmprnk(naploc)+1
5221 IF ( odat(23,i) .GT. 0 )
THEN
5222 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-3))+1
5225 IF ( odat(28,i) .GT. 0 )
THEN
5226 WRITE (stout,
'(I5.5)') tmprnk(max(1,naploc-4))+1
5234 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
5237 IF (
upproc ) ii = ii - 1
5240 IF (
iostyp .EQ. 2 )
THEN
5242 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
5243 IF ( odat( 3,i) .GT. 0 ) outstr(1) = stout
5244 IF ( odat( 8,i) .GT. 0 .OR. &
5247 IF ( odat(13,i) .GT. 0 ) outstr(3) = stout
5248 IF ( odat(18,i) .GT. 0 ) outstr(4) = stout
5249 IF ( odat(23,i) .GT. 0 ) outstr(5) = stout
5250 IF ( odat(28,i) .GT. 0 ) outstr(6) = stout
5252 ELSE IF (
iostyp .EQ. 3 )
THEN
5254 IF ( odat( 3,i).GT.0 )
THEN
5255 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
5259 IF ( odat(13,i).GT.0 )
THEN
5260 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
5264 IF ( odat(28,i).GT.0 )
THEN
5265 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
5269 WRITE (stout,
'(I5.5)') tmprnk(ii) + 1
5270 IF ( odat( 8,i) .GT. 0 ) outstr(2) = stout
5271 IF ( odat(18,i) .GT. 0 ) outstr(4) = stout
5272 IF ( odat(23,i) .GT. 0 ) outstr(5) = stout
5278 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
5279 WRITE (mdss,975) mnames(i), ip1, ipn, outstr
5280 IF ( nmplog .EQ. improc ) &
5281 WRITE (mdso,1975)mnames(i), ip1, ipn, outstr
5288 IF ( allprc(j,i) .EQ. 0 )
THEN
5290 tmprnk(napbct) = j - 1
5293 CALL mpi_group_incl ( bgroup, napbct, tmprnk, &
5295 CALL mpi_comm_create ( mpi_comm_mwave, lgroup, &
5296 mpi_comm_bct, ierr_mpi )
5297 CALL mpi_group_free ( lgroup, ierr_mpi )
5303 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
THEN
5305 IF (
unipts )
WRITE (mdss,977) nmpupt
5309 IF ( nmplog .EQ. improc )
THEN
5311 IF (
unipts )
WRITE (mdso,1977) nmpupt
5315 DEALLOCATE ( tmprnk, ndpout )
5320 DO ii=1, ingrp(jj,0)
5323 IF ( allprc(j,i) .NE. 0 )
THEN
5324 loadmp(j,jj) = loadmp(j,jj) + 1
5325 IF ( loadmp(j,jj) .EQ. 1 )
THEN
5338 WRITE (mdst,8044) j, modmap(:,j)
5342 WRITE (mdst,8044) j, loadmp(:,j)
5348 IF ( nmproc .GT. 1 )
THEN
5350 ip1 = minval( loadmp(:ncproc,i) )
5351 ipn = maxval( loadmp(:ncproc,i) )
5352 IF ( ip1.NE.ipn .AND. improc.EQ.nmperr ) &
5353 WRITE (mdse,1040) i, ip1, ipn
5357 DEALLOCATE ( rp1, rpn, loadmp )
5362 CALL wmsetm ( ingrp(1,1), mdse, mdst )
5367 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
5373 CALL prtime ( prftn )
5374 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8'
5378 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,980)
5379 ALLOCATE ( tsync(2,0:nrgrd), tmax(2,nrgrd), toutp(2,0:nrgrd), &
5380 tdata(2,nrgrd), grstat(nrgrd), dtres(nrgrd) )
5398 CALL prtime ( prftn )
5399 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8.a'
5404 j = len_trim(mnames(i))
5406 IF ( allprc(nmpsc2,i) .EQ. 1 )
EXIT
5408 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
5409 WRITE (mdss,981) i, mnames(i)(1:j)
5412 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
5418 CALL wmsetm ( i, mdse, mdst )
5420 mpi_comm_loc = mpi_comm_grd
5421 IF ( mpi_comm_loc .EQ. mpi_comm_null ) cycle
5424 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT' )
5425 CALL wmuset ( mdse, mdst, ndsfnd, .true., desc=
'Log file' )
5435 IF ( j.EQ.4 .OR. j.EQ.5 ) cycle
5436 IF ( odat(5*(j-1)+3,i) .GT. 0 )
THEN
5437 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT' )
5438 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
5439 desc=
'Raw output file' )
5444 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT' )
5445 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
5446 desc=
'ASCII output file' )
5452 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT' )
5453 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
5454 desc=
'ASCII output file' )
5459 CALL wmuget ( mdse, mdst, ndsfnd,
'INP' )
5460 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
5461 desc=
'Input data file' )
5469 CALL wmuget ( mdse, mdst, ndsfnd,
'INP' )
5470 CALL wmuset ( mdse, mdst, ndsfnd, .true., &
5471 desc=
'Input data file' )
5474 IF ( odat(5*(5-1)+3,i) .GT. 0 )
THEN
5475 CALL wmuget ( mdse, mdst, ndsfnd,
'OUT', 9 )
5478 CALL wmuset ( mdse, mdst, ndsfnd+ii, .true., &
5479 desc=
'Raw output file' )
5485 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
WRITE (mdss,982)
5487 CALL w3init ( i, .true., mnames(i), mds(:,i), ntrace(:,i), &
5489 flgrd(:,:,i),flgr2(:,:,i),flgd(:,i),flg2(:,i), &
5490 ot2(i)%NPTS, ot2(i)%X, ot2(i)%Y, ot2(i)%PNAMES, &
5491 iprt(:,i), lprt(i), mpi_comm_loc)
5495 ii = len_trim(filext)
5497 CALL wmuinq ( mdse, mdst, mds(1,i) )
5498 IF ( mds(3,i) .NE. mdst )
CALL wmuinq ( mdse, mdst, mds(3,i) )
5500 IF ( mds(7,i) .NE. -1 )
THEN
5502 tname = trim(
fnmpre)//
'out_grd.' // filext(:ii)
5503 CALL wmuset ( mdse,mdst, mds(7,i), .true., name=tname )
5505 CALL wmuset ( mdse,mdst, mds(7,i), .false. )
5510 IF ( mds(8,i) .NE. -1 )
THEN
5512 tname = trim(
fnmpre)//
'out_pnt.' // filext(:ii)
5513 CALL wmuset ( mdse,mdst, mds(8,i), .true., name=tname )
5515 CALL wmuset ( mdse,mdst, mds(8,i), .false. )
5520 IF ( mds(9,i) .NE. -1 )
THEN
5522 tname = trim(
fnmpre)//
'nest.' // filext(:ii)
5523 CALL wmuset ( mdse, mdst, mds(9,i), .true., name=tname )
5525 CALL wmuset ( mdse, mdst, mds(9,i), .false. )
5530 IF ( mds(10,i) .NE. -1 )
THEN
5532 tname = trim(
fnmpre)//
'nestN.' // filext(:ii)
5534 WRITE (tname(jj+5:jj+5),
'(I1)') j + 1
5535 CALL wmuset ( mdse, mdst, mds(10,i)+j, .true., &
5539 CALL wmuset ( mdse,mdst, mds(10,i)+j, .false. )
5543 CALL wmuset ( mdse,mdst, mds(10,i)+j, .false. )
5549 IF ( mds(11,i) .NE. -1 )
THEN
5550 tname = trim(
fnmpre)//
'track_i.' // filext(:ii)
5551 CALL wmuset ( mdse,mdst, mds(11,i), .true., name=tname )
5554 IF ( mds(12,i) .NE. -1 )
THEN
5556 tname = trim(
fnmpre)//
'track_o.' // filext(:ii)
5557 CALL wmuset ( mdse,mdst, mds(12,i), .true., name=tname )
5559 CALL wmuset ( mdse,mdst, mds(12,i), .false. )
5564 IF ( mds(13,i) .NE. -1 )
THEN
5566 tname = trim(
fnmpre)//
'partition.' // filext(:ii)
5567 CALL wmuset ( mdse,mdst, mds(13,i), .true., name=tname )
5569 CALL wmuset ( mdse,mdst, mds(13,i), .false. )
5575 IF ( mds(14,i) .NE. -1 )
THEN
5577 tname = trim(
fnmpre)//
'out_grd.' // filext(:ii) //
'.txt'
5578 CALL wmuset ( mdse,mdst, mds(14,i), .true., name=tname )
5580 CALL wmuset ( mdse,mdst, mds(14,i), .false. )
5585 IF ( mds(15,i) .NE. -1 )
THEN
5587 tname = trim(
fnmpre)//
'out_pnt.' // filext(:ii) //
'.txt'
5588 CALL wmuset ( mdse,mdst, mds(15,i), .true., name=tname )
5590 CALL wmuset ( mdse,mdst, mds(15,i), .false. )
5597 WRITE (mdst,9081) i,
time
5602 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
WRITE (mdss,983)
5603 CALL w3seti ( i, mdse, mdst )
5612 idinp(i,j) = idstr(j)
5613 IF ( inpmap(i,j) .LT. 0 ) cycle
5614 CALL w3fldo (
'READ', idinp(i,j), mdsf(i,j), mdst, mdse2,&
5616 nx, ny, jjj, ierr, mnames(i), &
5618 IF ( ierr .NE. 0 )
GOTO 2080
5621 IF ( (jjj .NE. gtype) .AND. (improc .EQ. nmpsc2) ) &
5622 WRITE (mdse, *)
' *** Warning: grid', i,
' GTYPE=', &
5623 gtype,
' not matching field', j,
' grid type', jjj
5625 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
5626 WRITE (mdss,985) idflds(j)
5628 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
5629 WRITE (mdss,984) idflds(j)
5640 IF ( mdsf(i,j) .NE. -1 )
CALL wmuinq ( mdse, mdst, mdsf(i,j) )
5646 IF (
SIZE(
inflags1) .NE.
SIZE(tflags) )
THEN
5647 WRITE (mdse,
'(/2A)')
' *** ERROR WMINITNML: ', &
5648 .NE.
'SIZE(INFLAGS1)SIZE(TFLAGS) ***'
5651 IF (
SIZE(
inflags2) .NE.
SIZE(tflags) )
THEN
5652 WRITE (mdse,
'(/2A)')
' *** ERROR WMINITNML: ', &
5653 .NE.
'SIZE(INFLAGS2)SIZE(TFLAGS) ***'
5660 IF ( inpmap(i,j) .NE. 0 )
THEN
5666 CALL w3dimi ( i, mdse, mdst )
5668 IF ( j.EQ.2 )
ALLOCATE (
wadats(i)%CA0(nsea) , &
5673 IF ( j.EQ.3 )
ALLOCATE (
wadats(i)%UA0(nsea) , &
5680 IF ( j.EQ.5 )
ALLOCATE (
wadats(i)%MA0(nsea) , &
5685 IF ( j.EQ.6 )
ALLOCATE (
wadats(i)%RA0(nsea) , &
5692 CALL w3seti ( i, mdse, mdst )
5693 CALL w3seta ( i, mdse, mdst )
5698 IF (
flout(j) )
THEN
5699 IF ( toutp(1,i) .EQ. -1 )
THEN
5703 IF ( dttst .LT. 0. ) toutp(:,i) =
tonext(:,j)
5709 tsync(:,i) =
time(:)
5713 IF ( improc .EQ. nmperr )
WRITE(mdse,*)
"GRID IMPROC GTYPE", &
5714 i, improc, grids(i)%GTYPE
5718 WRITE (mdst,9082) grstat(i), toutp(:,i), tsync(:,i)
5724 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
5726 CALL wmsetm ( i, mdse, mdst )
5727 CALL w3setg ( i, mdse, mdst )
5728 CALL w3seto ( i, mdse, mdst )
5729 IF ( fbcast .AND. mpi_comm_bct.NE.mpi_comm_null )
THEN
5730 CALL mpi_bcast ( toutp(1,i), 2, mpi_integer, 0, &
5731 mpi_comm_bct, ierr_mpi )
5732 CALL mpi_bcast ( tsync(1,i), 2, mpi_integer, 0, &
5733 mpi_comm_bct, ierr_mpi )
5734 CALL mpi_bcast ( grstat(i), 1, mpi_integer, 0, &
5735 mpi_comm_bct, ierr_mpi )
5741 CALL mpi_bcast (
flagll,1, mpi_logical, 0, &
5742 mpi_comm_bct, ierr_mpi )
5743 CALL mpi_bcast ( gtype, 1, mpi_integer, 0, &
5744 mpi_comm_bct, ierr_mpi )
5745 CALL mpi_bcast (
iclose,1, mpi_integer, 0, &
5746 mpi_comm_bct, ierr_mpi )
5747 CALL mpi_bcast ( nx , 1, mpi_integer, 0, &
5748 mpi_comm_bct, ierr_mpi )
5749 CALL mpi_bcast ( ny , 1, mpi_integer, 0, &
5750 mpi_comm_bct, ierr_mpi )
5751 CALL mpi_bcast (
x0 , 1, mpi_real , 0, &
5752 mpi_comm_bct, ierr_mpi )
5753 CALL mpi_bcast (
sx , 1, mpi_real , 0, &
5754 mpi_comm_bct, ierr_mpi )
5755 CALL mpi_bcast (
y0 , 1, mpi_real , 0, &
5756 mpi_comm_bct, ierr_mpi )
5757 CALL mpi_bcast (
sy , 1, mpi_real , 0, &
5758 mpi_comm_bct, ierr_mpi )
5759 CALL mpi_bcast ( nsea , 1, mpi_integer, 0, &
5760 mpi_comm_bct, ierr_mpi )
5761 CALL mpi_bcast (
nseal, 1, mpi_integer, 0, &
5762 mpi_comm_bct, ierr_mpi )
5763 CALL mpi_bcast (
dtmax, 1, mpi_real, 0, &
5764 mpi_comm_bct, ierr_mpi )
5765 CALL mpi_bcast (
dtcfl, 1, mpi_real, 0, &
5766 mpi_comm_bct, ierr_mpi )
5767 CALL mpi_bcast ( filext, 10, mpi_character, 0, &
5768 mpi_comm_bct, ierr_mpi )
5769 IF ( mpi_comm_grd .EQ. mpi_comm_null ) &
5770 CALL w3dimx ( i, nx, ny, nsea, mdse, mdst &
5780 , 1, 1, 1, 1, 1, 1, 1, 1 &
5783 CALL mpi_bcast (
hqfac, nx*ny, mpi_real, 0, &
5784 mpi_comm_bct, ierr_mpi )
5785 CALL mpi_bcast (
hpfac, nx*ny, mpi_real, 0, &
5786 mpi_comm_bct, ierr_mpi )
5787 CALL mpi_bcast (
xgrd, nx*ny, mpi_double_precision, 0, &
5788 mpi_comm_bct, ierr_mpi )
5789 CALL mpi_bcast (
ygrd, nx*ny, mpi_double_precision, 0, &
5790 mpi_comm_bct, ierr_mpi )
5791 IF ( mpi_comm_grd .EQ. mpi_comm_null ) &
5794 CALL mpi_bcast (
dxdp, nx*ny, mpi_real, 0, &
5795 mpi_comm_bct, ierr_mpi )
5796 CALL mpi_bcast (
dxdq, nx*ny, mpi_real, 0, &
5797 mpi_comm_bct, ierr_mpi )
5798 CALL mpi_bcast (
dydp, nx*ny, mpi_real, 0, &
5799 mpi_comm_bct, ierr_mpi )
5800 CALL mpi_bcast (
dydq, nx*ny, mpi_real, 0, &
5801 mpi_comm_bct, ierr_mpi )
5802 CALL mpi_bcast (
mapsta, nx*ny, mpi_integer, 0, &
5803 mpi_comm_bct, ierr_mpi )
5804 CALL mpi_bcast (
mapst2, nx*ny, mpi_integer, 0, &
5805 mpi_comm_bct, ierr_mpi )
5806 CALL mpi_bcast (
gridshift, 1, mpi_double_precision, 0, &
5807 mpi_comm_bct, ierr_mpi )
5811 CALL mpi_bcast (
nk , 1, mpi_integer, 0, &
5812 mpi_comm_bct, ierr_mpi )
5813 CALL mpi_bcast (
nth , 1, mpi_integer, 0, &
5814 mpi_comm_bct, ierr_mpi )
5815 CALL mpi_bcast (
xfr , 1, mpi_real , 0, &
5816 mpi_comm_bct, ierr_mpi )
5817 CALL mpi_bcast (
fr1 , 1, mpi_real , 0, &
5818 mpi_comm_bct, ierr_mpi )
5819 IF ( mpi_comm_grd .EQ. mpi_comm_null ) &
5820 CALL w3dims ( i,
nk,
nth, mdse, mdst )
5821 CALL mpi_bcast (
th ,
nth, mpi_real , 0, &
5822 mpi_comm_bct, ierr_mpi )
5826 CALL mpi_bcast (
naproc,1, mpi_integer, 0, &
5827 mpi_comm_bct, ierr_mpi )
5828 CALL mpi_bcast (
nappnt,1, mpi_integer, 0, &
5829 mpi_comm_bct, ierr_mpi )
5830 CALL mpi_bcast (
nbi , 1, mpi_integer, 0, &
5831 mpi_comm_bct, ierr_mpi )
5835 CALL mpi_bcast (
flout, 8, mpi_logical, 0, &
5836 mpi_comm_bct, ierr_mpi )
5837 CALL mpi_bcast (
dtout , 8, mpi_real, 0, &
5838 mpi_comm_bct, ierr_mpi )
5839 CALL mpi_bcast (
tonext,16, mpi_integer, 0, &
5840 mpi_comm_bct, ierr_mpi )
5841 CALL mpi_bcast (
tolast,16, mpi_integer, 0, &
5842 mpi_comm_bct, ierr_mpi )
5848 CALL mpi_barrier (mpi_comm_mwave,ierr_mpi)
5852 IF ( allprc(improc,i) .EQ. 0 )
THEN
5853 CALL w3seto ( i, mdse, mdst )
5861 WRITE (mdst,9020)
'AFTER SETUP'
5863 WRITE (mdst,9021) i, mds(:,i), ntrace(:,i)
5870 IF ( grids(i)%FLAGLL .NEQV. grids(i+1)%FLAGLL )
GOTO 2070
5876 CALL prtime ( prftn )
5877 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8.c'
5883 IF ( .NOT. useinp(i) ) cycle
5885 j = len_trim(mnames(-i))
5886 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
THEN
5887 WRITE (mdss,988) i, mnames(-i)(1:j)
5891 CALL w3iogr (
'GRID', ndsrec, -i, mnames(-i)(1:j) )
5892 CALL w3dimi ( -i, mdse, mdst )
5894 IF ( cplinp(i) ) cycle
5898 idinp(-i,j) = idstr(j)
5899 CALL w3fldo (
'READ', idinp(-i,j), mdsf(-i,j), mdst, &
5900 mdse2, nx, ny, gtype, ierr, &
5901 mnames(-i), trim(
fnmpre) )
5902 IF ( ierr .NE. 0 )
GOTO 2080
5903 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
5904 WRITE (mdss,985) idflds(j)
5906 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc ) &
5907 WRITE (mdss,984) idflds(j)
5914 IF ( mdsf(-i,j) .NE. -1 )
CALL wmuinq &
5915 ( mdse, mdst, mdsf(-i,j) )
5922 IF ( inpmap(i,j).LT.0 .AND. inpmap(i,j).NE.-999) idinp(i,j) = idinp( inpmap(i,j),j)
5924 IF ( inpmap(i,j) .GT. 0 ) idinp(i,j) = idinp(-inpmap(i,j),j)
5928 DEALLOCATE ( useinp )
5929 DEALLOCATE ( cplinp )
5934 CALL prtime ( prftn )
5935 WRITE (mdsp,990) prft0, prftn, get_memory(),
'START Sec. 8.d'
5944 CALL w3setg ( i, mdse, mdst )
5951 ALLOCATE ( flrbpi(nrgrd) )
5959 CALL wmsetm ( i, mdse, mdst )
5960 CALL w3setg ( i, mdse, mdst )
5975 CALL w3setg ( i, mdse, mdst )
5976 CALL w3seto ( i, mdse, mdst )
5978 IF ( bcdump(i) .AND. flrbpi(i) )
THEN
5979 IF ( improc .EQ. nmperr )
WRITE (mdse,1080) i
5980 IF ( improc .EQ. nmplog )
WRITE (mdso,1082) i
5984 IF ( bcdump(i) .AND.
nbi.EQ.0 )
THEN
5985 IF ( improc .EQ. nmperr )
WRITE (mdse,1081) i
5986 IF ( improc .EQ. nmplog )
WRITE (mdso,1082) i
5991 IF ( .NOT. flrbpi(i) .AND.
flbpi )
THEN
5994 IF ( .NOT. flrbpi(i) .AND.
flbpi .AND. &
5995 mpi_comm_grd .NE. mpi_comm_null)
THEN
5997 CALL wmuset ( mdse, mdst,
nds(9), .false. )
5999 j = len_trim(filext)
6000 tname(1:5) =
'nest.'
6001 tname(6:5+j) = filext(1:j)
6003 CALL wmuget ( mdse, mdst,
nds(9),
'OUT' )
6004 CALL wmuset ( mdse, mdst,
nds(9), .true., &
6005 name=trim(
fnmpre)//tname(1:j), &
6006 desc=
'Output data file (nest dump)' )
6024 CALL wmsetm ( i, mdse, mdst )
6025 IF ( mpi_comm_grd .NE. mpi_comm_null )
CALL wmiobs ( i )
6034 CALL wmsetm ( i, mdse, mdst )
6035 IF ( mpi_comm_grd .NE. mpi_comm_null )
CALL wmiobg ( i )
6044 CALL wmsetm ( i, mdse, mdst )
6045 IF ( mpi_comm_grd .NE. mpi_comm_null )
CALL wmiobf ( i )
6056 DO ii=1, ingrp(jj,0)
6058 IF( grids(i)%GTYPE .EQ. smctype ) j = j + 1
6060 IF( j .GT. 1 ) ngrpsmc = jj
6062 IF( improc.EQ.nmperr )
WRITE (mdse,*)
" NGRPSMC =", ngrpsmc
6065 IF( ngrpsmc .GT. 0 )
THEN
6078 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
WRITE (mdss,938) &
6079 'Computing relation to higher ranked grids'
6081 IF ( mdss.NE.mdso .AND. nmpsc2.EQ.improc )
WRITE (mdss,938) &
6082 'Finished computing relation to higher ranked grids'
6088 outpts(0)%TONEXT(1,2) = odat( 6,0)
6089 outpts(0)%TONEXT(2,2) = odat( 7,0)
6090 outpts(0)%DTOUT ( 2) = real( odat( 8,0) )
6091 outpts(0)%TOLAST(1,2) = odat( 9,0)
6092 outpts(0)%TOLAST(2,2) = odat(10,0)
6094 tout =
outpts(0)%TONEXT(:,2)
6095 tlst =
outpts(0)%TOLAST(:,2)
6098 dttst =
dsec21( stime , tout )
6099 IF ( dttst .LT. 0 )
THEN
6106 outpts(0)%TONEXT(:,2) = tout
6108 dttst =
dsec21( tout , tlst )
6109 IF (( dttst .LT. 0. ) .OR. ( odat(8,0) .EQ. 0 ))
THEN
6112 CALL wmiopp ( ot2(0)%NPTS, ot2(0)%X, ot2(0)%Y, &
6118 CALL wmsetm ( i, mdse, mdst )
6119 CALL w3setg ( i, mdse, mdst )
6120 CALL w3seto ( i, mdse, mdst )
6121 IF ( fbcast .AND. mpi_comm_bct.NE.mpi_comm_null )
THEN
6122 CALL mpi_bcast (
nopts, 1, mpi_integer, 0, &
6123 mpi_comm_bct, ierr_mpi )
6132 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6133 WRITE (mdss,938)
'Additional group information'
6135 IF ( maxval(grdlow(:,0)) .GT. 0 )
THEN
6136 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6137 WRITE (mdss,933)
'Lower rank grid dependence'
6138 IF ( nmplog .EQ. improc ) &
6139 WRITE (mdso,933)
'Lower rank grid dependence'
6141 WRITE (line(1:6),
'(1X,I3,2X)') i
6143 IF ( grdlow(i,0) .NE. 0 )
THEN
6145 WRITE (line(jjj+1:jjj+3),
'(I3)') grdlow(i,j)
6148 ELSE IF ( flrbpi(i) )
THEN
6150 line(7:jjj) =
' Data from file'
6153 line(7:jjj) =
' No dependencies'
6155 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6156 WRITE(mdss,934) line(1:jjj)
6157 IF ( nmplog .EQ. improc )
WRITE(mdso,934) line(1:jjj)
6159 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,935)
6160 IF ( nmplog .EQ. improc )
WRITE (mdso,935)
6162 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6163 WRITE (mdss,937)
'No lower rank grid dependencies'
6164 IF ( nmplog .EQ. improc ) &
6165 WRITE (mdso,937)
'No lower rank grid dependencies'
6167 DEALLOCATE ( flrbpi )
6169 IF ( maxval(grdeql(:,0)) .GT. 0 )
THEN
6170 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6171 WRITE (mdss,933)
'Same rank grid dependence'
6172 IF ( nmplog .EQ. improc ) &
6173 WRITE (mdso,933)
'Same rank grid dependence'
6175 WRITE (line(1:6),
'(1X,I3,2X)') i
6177 IF ( grdeql(i,0) .NE. 0 )
THEN
6179 WRITE (line(jjj+1:jjj+3),
'(I3)') grdeql(i,j)
6184 line(7:jjj) =
' No dependencies'
6186 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6187 WRITE(mdss,934) line(1:jjj)
6188 IF ( nmplog .EQ. improc )
WRITE(mdso,934) line(1:jjj)
6190 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,935)
6191 IF ( nmplog .EQ. improc )
WRITE (mdso,935)
6193 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6194 WRITE (mdss,937)
'No same rank grid dependencies'
6195 IF ( nmplog .EQ. improc ) &
6196 WRITE (mdso,937)
'No same rank grid dependencies'
6199 IF ( maxval(grdhgh(:,0)) .GT. 0 )
THEN
6200 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6201 WRITE (mdss,933)
'Higher rank grid dependence'
6202 IF ( nmplog .EQ. improc ) &
6203 WRITE (mdso,933)
'Higher rank grid dependence'
6205 WRITE (line(1:6),
'(1X,I3,2X)') i
6207 IF ( grdhgh(i,0) .NE. 0 )
THEN
6209 WRITE (line(jjj+1:jjj+3),
'(I3)') grdhgh(i,j)
6214 line(7:jjj) =
' No dependencies'
6216 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6217 WRITE(mdss,934) line(1:jjj)
6218 IF ( nmplog .EQ. improc )
WRITE(mdso,934) line(1:jjj)
6220 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,935)
6221 IF ( nmplog .EQ. improc )
WRITE (mdso,935)
6223 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc ) &
6224 WRITE (mdss,937)
'No higher rank grid dependencies'
6225 IF ( nmplog .EQ. improc ) &
6226 WRITE (mdso,937)
'No higher rank grid dependencies'
6232 WRITE (mdst,9084) i, idinp(i,:)
6238 CALL wmuset ( mdse, mdst, scratch, .false. )
6241 DEALLOCATE ( mds, ntrace, odat, flgrd, flgr2, flgd, flg2, inames,&
6246 CALL mpi_barrier ( mpi_comm_mwave, ierr_mpi )
6249 CALL date_and_time ( values=clkdt2 )
6250 clkfin =
tdiff( clkdt1,clkdt2 )
6253 CALL prtime ( prftn )
6254 WRITE (mdsp,990) prft0, prftn, get_memory(),
'END'
6257 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,998)
6259 IF ( mdss.NE.mdso .AND. nmpscr.EQ.improc )
WRITE (mdss,999)
6267 IF ( improc .EQ. nmperr )
WRITE (mdse,1003)
6268 CALL extcde ( 2003 )
6272 IF ( improc .EQ. nmperr )
WRITE (mdse,1104) ierr
6273 CALL extcde ( 1104 )
6277 IF ( improc .EQ. nmperr )
WRITE (mdse,1004) ierr
6278 CALL extcde ( 2004 )
6282 IF ( improc .EQ. nmperr )
WRITE (mdse,1010) ierr
6283 CALL extcde ( 2010 )
6288 WRITE (mdse,1011) ierr
6289 CALL extcde ( 2011 )
6293 IF ( improc .EQ. nmperr )
WRITE (mdse,1020)
6294 CALL extcde ( 2020 )
6298 IF ( improc .EQ. nmperr )
WRITE (mdse,1021)
6299 CALL extcde ( 2021 )
6303 IF ( improc .EQ. nmperr )
WRITE (mdse,1030) mnames(i), inames(i,j)
6304 CALL extcde ( 2030 )
6308 IF ( improc .EQ. nmperr )
WRITE (mdse,1031) inames(i,j), j
6309 CALL extcde ( 2031 )
6318 IF ( improc .EQ. nmperr )
WRITE (mdse,1051) mn(:ii)
6319 CALL extcde ( 2051 )
6323 IF ( improc .EQ. nmperr )
WRITE (mdse,1052) j
6324 CALL extcde ( 2052 )
6328 IF ( improc .EQ. nmperr )
WRITE (mdse,1053)
6329 CALL extcde ( 2053 )
6333 IF ( improc .EQ. nmperr )
WRITE (mdse,1054)
6334 CALL extcde ( 2054 )
6338 IF ( improc .EQ. nmperr )
WRITE (mdse,1055)
6339 CALL extcde ( 2055 )
6343 IF ( improc .EQ. nmperr )
WRITE (mdse,1060)
6344 CALL extcde ( 2060 )
6348 IF ( improc .EQ. nmperr )
WRITE (mdse,1061) idtst, n_mov
6349 CALL extcde ( 2061 )
6353 IF ( improc .EQ. nmperr )
WRITE (mdse,1062) idtst
6354 CALL extcde ( 2062 )
6358 IF ( improc .EQ. nmperr )
WRITE (mdse,1070)
6359 CALL extcde ( 2070 )
6363 CALL extcde ( 2080 )
6368 900
FORMAT (
' ========== STARTING MWW3 INITIALIZATION (WMINITNML) =', &
6369 '============================'/)
6370 901
FORMAT (
' WAVEWATCH III log file ', &
6372 ' ==================================', &
6373 '==================================='/ &
6374 ' multi-grid model driver ', &
6375 'date : ',a10/50x,
'time : ',a8)
6377 910
FORMAT (
' Opening input file ',a,
' (unit number',i3,
')')
6378 911
FORMAT (
' Opening output file ',a,
' (unit number',i3,
')')
6379 912
FORMAT (/
' Comment character : ''',a,
'''')
6381 920
FORMAT (/
' Number of grids :',i3)
6382 921
FORMAT (
' No input data grids.')
6383 922
FORMAT (
' Input data grids :',i3)
6384 923
FORMAT (
' Single point output file : ',a)
6385 1923
FORMAT (/
' Output server type :',i3)
6386 2923
FORMAT (
' Single point output proc : ',a)
6387 3923
FORMAT (
' Grids share output procs : ',a)
6389 924
FORMAT (/
' Input grid information : '/ &
6390 ' nr extension lev. cur. wind ice tau', &
6392 ' ----------------------------------------------', &
6394 925
FORMAT (1x,i3,1x,a10,6(1x,a6),3(1x,a1))
6395 926
FORMAT (
' ----------------------------------------------', &
6398 927
FORMAT (/
' Grid for point output : '/ &
6399 ' nr extension '/
' ---------------')
6401 929
FORMAT (
' ---------------')
6403 930
FORMAT (/
' Wave grid information : '/ &
6404 ' nr extension lev. cur. wind ice tau', &
6405 ' rho data move1 rnk grp dmp'/ &
6406 ' -----------------------------------------------', &
6407 '-----------------------------------')
6408 931
FORMAT (1x,i3,1x,a10,6(1x,a6),3(1x,a1),2x,a4,2i4,3x,a1)
6409 932
FORMAT (
' -----------------------------------------------', &
6410 '-----------------------------------'/)
6411 933
FORMAT (
' ',a,
' : '/ &
6412 ' nr grids (part of comm.)'/ &
6413 ' -----------------------------------------------', &
6414 '---------------------')
6416 935
FORMAT (
' -----------------------------------------------', &
6417 '---------------------'/)
6418 936
FORMAT (/
' ',a,
' : '/ &
6419 ' nr Depends on '/ &
6420 ' -----------------------------------------------', &
6421 '---------------------')
6422 937
FORMAT (
' ',a/)
6423 938
FORMAT (/
' ',a/)
6425 940
FORMAT (/
' Time interval : '/ &
6426 ' --------------------------------------------------')
6427 941
FORMAT (
' Starting time : ',a)
6428 942
FORMAT (
' Ending time : ',a/)
6429 943
FORMAT (/
' Model settings : '/ &
6430 ' --------------------------------------------------')
6431 944
FORMAT (
' Masking computation in nesting : ',a)
6432 945
FORMAT (
' Masking output in nesting : ',a/)
6434 950
FORMAT (/
' Output requests : (',a,
') '/ &
6435 ' ==================================================')
6436 951
FORMAT (/
' Type',i2,
' : ',a/ &
6437 ' -----------------------------------------')
6438 952
FORMAT (
' From : ',a)
6439 953
FORMAT (
' To : ',a)
6440 954
FORMAT (
' Interval : ',a/)
6441 955
FORMAT (
' Fields : ',a)
6443 957
FORMAT (
' Point 1 : ',2e14.6,2x,a)
6444 958
FORMAT (
' ',i6,
' : ',2e14.6,2x,a)
6445 959
FORMAT (
' No points defined')
6446 960
FORMAT (
' The file with ',a,
' data is ',a,
'.')
6447 961
FORMAT (
' IX fls : ',3i6/ &
6449 962
FORMAT (/
' Output request for model ',a,
' (nr',i3,
') '/ &
6450 ' ==================================================')
6451 963
FORMAT (
' Output disabled')
6453 965
FORMAT (/
' Grid movement data (!/MGP, !/MGW): '/ &
6454 ' --------------------------------------------------')
6456 967
FORMAT (
' ',i6,2x,a)
6457 968
FORMAT (
' ',i6,i11.8,i7.6,2f8.2)
6459 970
FORMAT(//
' Assigning resources : '/ &
6460 ' --------------------------------------------------')
6462 972
FORMAT (
' Process ',i5.5,
' reserved for all point output.')
6463 973
FORMAT (
' Processes ',i5.5,
' through ',i5.5,
' [',i3,
']', &
6464 ' reserved for output.')
6466 5x,
' grid comp. grd pnt trk rst bpt prt'/ &
6467 5x,
' ------------------------------------------------------', &
6469 975
FORMAT (5x,
' ',a10,2x,i5.5,
'-',i5.5,6(2x,a5))
6470 976
FORMAT(5x,
' -------------------------------------------------', &
6471 '------------------')
6472 977
FORMAT (5x,
' Unified point output at ',i5.5)
6473 1974
FORMAT (
' Resource assignement (processes) : '/ &
6474 ' grid comp. grd pnt trk rst bpt prt'/ &
6475 ' ------------------------------------------------------', &
6477 1975
FORMAT (
' ',a10,2x,i5.5,
'-',i5.5,6(2x,a5))
6478 1976
FORMAT (
' ---------------------------------------------------', &
6480 1977
FORMAT (
' Unified point output at ',i5.5)
6482 980
FORMAT(//
' Initializations :'/ &
6483 ' --------------------------------------------------')
6484 981
FORMAT (
' Model number',i3,
' [',a,
']')
6485 982
FORMAT (
' Initializing wave model ...')
6486 983
FORMAT (
' Initializing model input ...')
6487 984
FORMAT (
' ',a,
': file not needed')
6488 985
FORMAT (
' ',a,
': file OK')
6489 986
FORMAT (
' Unified point output [',a,
']')
6490 987
FORMAT (
' Initializing grids ...')
6491 988
FORMAT (
' Input data grid',i3,
' [',a,
']')
6494 990
FORMAT (1x,3f12.3,
' WMINITNML',1x,a)
6497 998
FORMAT (
' Running the model :'/ &
6498 ' --------------------------------------------------'/)
6499 999
FORMAT (
' ========== END OF MWW3 INITIALIZATION (WMINITNML) ===', &
6500 '============================'/)
6502 1003
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6503 ' PREMATURE END OF POINT FILE'/)
6505 1104
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6506 ' ERROR IN OPENING POINT FILE'/ &
6509 1004
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6510 ' ERROR IN READING FROM POINT FILE'/ &
6512 1010
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6513 ' ERROR IN OPENING LOG FILE'/ &
6515 1011
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6516 ' ERROR IN OPENING TEST FILE'/ &
6518 1020
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6519 ' ILLEGAL NUMBER OF GRIDS ( < 1 ) '/)
6520 1021
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6521 ' ILLEGAL NUMBER OF INPUT GRIDS ( < 0 ) '/)
6522 1030
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6523 ' INPUT GRID NAME NOT FOUND '/ &
6524 ' WAVE GRID : ',a/ &
6525 ' INPUT NAME : ',a/)
6526 1031
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : *** '/ &
6527 ' REQUESTED INPUT TYPE NOT FOUND IN INPUT GRID '/ &
6528 ' INPUT GRID : ',a/ &
6529 ' INPUT TYPE : ',i8/)
6530 1032
FORMAT (/
' *** WAVEWATCH III WARNING IN WMINITNML : *** '/ &
6531 ' INPUT GRID ',a,
' NOT USED '/)
6532 1040
FORMAT (
' *** WAVEWATCH III WARNING IN W3MLTI : ***'/ &
6533 ' POSSIBLE LOAD IMBALANCE GROUP',i3,
' :',2i6/)
6536 1050
FORMAT (/
' *** WAVEWATCH III WARNING IN W3MLTI : ***'/ &
6537 ' UNIFIED POINT OUTPUT BUT NO OUTPUT'/ &
6538 ' UNIFIED POINT OUTPUT DISABLED'/)
6539 1051
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
6540 ' ILLEGAL MODEL ID [',a,
']'/)
6541 1052
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
6542 ' ILLEGAL OUTPUT TYPE',i10/)
6543 1053
FORMAT (/
' *** WAVEWATCH III WARNING IN W3MLTI : ***'/ &
6544 ' OUTPUT POINTS FOR INDIVIDUAL GRIDS CANNOT BE DEFINED'/ &
6545 ' WHEN UNIFIED POINT OUTPUT IS REQUESTED'/)
6546 1054
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
6547 ' POINT OUTPUT ACTIVATED, BUT NO POINTS DEFINED'/)
6548 1055
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
6549 ' POINT OUTPUT ACTIVATED, BUT NO FILE DEFINED'/)
6550 1060
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
6551 ' NO MOVING GRID DATA PRESENT'/)
6552 1061
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
6553 ' TOO MANY HOMOGENEOUS FIELDS : ',a,1x,i4/)
6554 1062
FORMAT (/
' *** WAVEWATCH III ERROR IN W3MLTI : ***'/ &
6555 ' HOMOGENEOUS NAME NOT RECOGNIZED : ', a/)
6556 1070
FORMAT (/
' *** WAVEWATCH III ERROR IN WMINITNML : ***'/ &
6557 ' ALL GRIDS ARE NOT USING THE SAME COORDINATE SYSTEM'/)
6558 1080
FORMAT (/
' *** BOUNDARY DATA READ, WILL NOT DUMP, GRID :',i4, &
6560 1081
FORMAT (/
' *** NO BOUNDARY DATA TO DUMP, GRID :',i4,
' ***')
6561 1082
FORMAT (
' No boundary data dump for grid',i3/)
6564 9000
FORMAT (
' TEST WMINITNML : UNIT NUMBERS : ',5i6/ &
6565 ' INPUT FILE NAME : ',a)
6569 9020
FORMAT (
' TEST WMINITNML : UNIT NUMBERS FOR GRIDS (',a,
')'/ &
6570 15x,
'GRID MDS(1-15)',43x,
'NTRACE')
6571 9021
FORMAT (14x,16i4)
6572 9022
FORMAT (
' TEST WMINITNML : UNIT NUMBERS FOR INTPUT FILES'/ &
6573 15x,
'GRID MDSF(JFIRST-9)')
6574 9030
FORMAT (
' TEST WMINITNML : FILE EXTENSIONS, INPUT FLAGS,', &
6575 ' RANK AND GROUP, PROC RANGE')
6576 9031
FORMAT (
' ',i3,1x,a,20l2,2i4,2f6.2)
6577 9032
FORMAT (
' TEST WMINITNML : PROCESSED RANK NUMBERS')
6578 9033
FORMAT (
' ',i3,1x,a,1x,i4)
6579 9034
FORMAT (
' TEST WMINITNML : NUMBER OF GROUPS :',i4)
6580 9035
FORMAT (
' TEST WMINITNML : SIZE OF GROUPS :',20i3)
6581 9036
FORMAT (
' TEST WMINITNML : GROUP SIZE AND COMPONENTS :')
6582 9037
FORMAT (
' ',2i3,
':',20i3)
6586 9050
FORMAT (
' TEST WMINITNML : GRID NUMBER',i3,
' =================')
6587 9051
FORMAT (
' TEST WMINITNML : ODAT : ',i9.8,i7.6,i7,i9.8,i7.6, &
6588 5(/24x,i9.8,i7.6,i7,i9.8,i7.6) )
6589 9052
FORMAT (
' TEST WMINITNML : FLGRD : ',5(5l2,1x)/24x,5(5l2,1x))
6590 9053
FORMAT (
' TEST WMINITNML : OUTFF : ',i9.8 &
6595 9060
FORMAT (
' TEST WMINITNML : GRID MOVEMENT DATA')
6596 9061
FORMAT (
' ',i8.8,i7,1x,2f8.2)
6600 9070
FORMAT (
' TEST WMINITNML : ALLPRC ')
6601 9071
FORMAT (
' ',i3,
' : ',250i3)
6602 8042
FORMAT (
' TEST WMINITNML : MODMAP ')
6603 8043
FORMAT (
' TEST WMINITNML : LOADMP ')
6604 8044
FORMAT (
' ',i3,
' : ',250i2)
6608 9080
FORMAT (
' TEST WMINITNML : MODEL INITIALIZATION')
6609 9081
FORMAT (
' MODEL AND TIME :',i4,i10.8,i8.6)
6610 9082
FORMAT (
' STATUS AND TIMES :',i4,3(i10.8,i8.6))
6611 9083
FORMAT (
' TEST WMINITNML : IDINP AFTER INITIALIZATION :')
6612 9084
FORMAT (
' ',i4,17(2x,a3))