235 INTEGER :: ndsi, ndsm, ndsdat, ndstrc, ntrace, &
236 ierr, ifld, itype, j, ix, iy, nfcomp,&
237 time(2), nxi, nyi, nxj(2), nyj(2), &
238 ndsll, idlall, idfmll, ndsf(2), &
239 idlaf(2), idfmf(2), time2(2), &
240 mxm, mym, dattyp, recldt, idat, &
241 ndat, jj, is(4), js(4)
243 INTEGER :: iland = -999
247 INTEGER,
ALLOCATABLE :: ix21(:,:), ix22(:,:), &
248 iy21(:,:), iy22(:,:), &
249 jx21(:,:), jx22(:,:), &
250 jy21(:,:), jy22(:,:), mapovr(:,:)
251 INTEGER,
ALLOCATABLE :: mask(:,:)
254 INTEGER,
SAVE :: ient = 0
257 INTEGER :: ixp0, ixpn, ixpwdt = 60
260 INTEGER :: ix0, ixn, ixwdt = 60
261 INTEGER,
ALLOCATABLE :: mapout(:,:)
263 REAL :: x0i, xni, y0i, yni, sxi, syi, &
264 x, y, factor, efac, nodata, rw(4)
266 REAL,
ALLOCATABLE :: rd11(:,:), rd21(:,:), &
267 rd12(:,:), rd22(:,:), &
268 xd11(:,:), xd21(:,:), &
269 xd12(:,:), xd22(:,:), &
270 fx(:,:), fy(:,:), fa(:,:), &
271 a1(:,:), a2(:,:), a3(:,:)
272 REAL,
POINTER :: ala(:,:), alo(:,:)
273 REAL,
ALLOCATABLE :: xc(:,:), yc(:,:), ac(:,:), data(:,:)
275 LOGICAL :: flstab, flberg, clo(2), fltime, flhdr
280 CHARACTER :: comstr*1, idfld*3, idtype*2, &
281 idtime*23, fromll*4, formll*16, &
282 namell*65, fromf*4, namef*65
283 CHARACTER(LEN=12) :: idstr1(-7:7)
284 CHARACTER(LEN=15) :: idstr3(3)
285 CHARACTER(LEN=32) :: formt(2), formf(2)
286 CHARACTER(LEN=20) :: idstr2(5)
287 CHARACTER(LEN=13) :: tstr, idstr =
'WAVEWATCH III'
288 CHARACTER(LEN=3) :: tsfld
289 INTEGER :: gtypedum = 0
291 equivalence( nxi , nxj(1) ) , ( nyi , nyj(1) )
297 DATA idstr1 /
'ice param. 1' ,
'ice param. 2' , &
298 'ice param. 3' ,
'ice param. 4' , &
299 'ice param. 5' ,
'mud density ' , &
300 'mud thkness ' ,
'mud viscos. ' , &
301 'ice ' ,
'water levels' , &
302 'winds ' ,
'currents ' , &
303 'data ' ,
'momentum ' , &
305 DATA idstr2 /
'pre-processed file ' ,
'long.-lat. grid ' , &
306 'grid from file (1) ' ,
'grid from file (2) ' , &
307 'data (assimilation) ' /
308 DATA idstr3 /
'mean parameters',
'1D spectra ', &
326 CALL w3seto ( 1, 6, 6 )
342 CALL itrace ( ndstrc, ntrace )
361 CALL strace (ient,
'W3PREP')
365 OPEN (ndsi,
file=
fnmpre(:j)//
'ww3_prep.inp',status=
'OLD', &
368 READ (ndsi,
'(A)',
END=801,ERR=802,IOSTAT=IERR) comstr
369 IF (comstr.EQ.
' ') comstr =
'$'
370 WRITE (ndso,901) comstr
375 CALL w3iogr (
'READ', ndsm )
376 WRITE (ndso,902) gname
377 ALLOCATE ( ix21(nx,ny), ix22(nx,ny), iy21(nx,ny), iy22(nx,ny), &
378 jx21(nx,ny), jx22(nx,ny), jy21(nx,ny), jy22(nx,ny), &
380 ALLOCATE ( rd11(nx,ny), rd21(nx,ny), rd12(nx,ny), rd22(nx,ny), &
381 xd11(nx,ny), xd21(nx,ny), xd12(nx,ny), xd22(nx,ny), &
382 fx(nx,ny), fy(nx,ny), fa(nx,ny), &
383 a1(nx,ny), a2(nx,ny), a3(nx,ny) )
388 CALL nextln ( comstr , ndsi , ndse )
389 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) IDFLD, IDTYPE, FLTIME, &
394 flstab = idfld .EQ.
'WNS'
395 flberg = idfld .EQ.
'ISI'
396 IF ( idfld.EQ.
'IC1' )
THEN
398 ELSE IF ( idfld.EQ.
'IC2' )
THEN
400 ELSE IF ( idfld.EQ.
'IC3' )
THEN
402 ELSE IF ( idfld.EQ.
'IC4' )
THEN
404 ELSE IF ( idfld.EQ.
'IC5' )
THEN
406 ELSE IF ( idfld.EQ.
'MDN' )
THEN
408 ELSE IF ( idfld.EQ.
'MTH' )
THEN
410 ELSE IF ( idfld.EQ.
'MVS' )
THEN
412 ELSE IF ( idfld.EQ.
'ICE' .OR. flberg )
THEN
414 ELSE IF ( idfld.EQ.
'LEV' )
THEN
416 ELSE IF ( idfld.EQ.
'WND' .OR. flstab )
THEN
418 ELSE IF ( idfld.EQ.
'CUR' )
THEN
420 ELSE IF ( idfld.EQ.
'DAT' )
THEN
422 ELSE IF ( idfld.EQ.
'TAU' )
THEN
424 ELSE IF ( idfld.EQ.
'RHO' )
THEN
427 WRITE (ndse,1030) idfld
432 IF (idfld.EQ.
'DAT')
THEN
434 ELSE IF (idtype.EQ.
'AI')
THEN
436 ELSE IF (idtype.EQ.
'LL')
THEN
438 ELSE IF (idtype.EQ.
'F1')
THEN
440 ELSE IF (idtype.EQ.
'F2')
THEN
444 WRITE (ndse,1031) idtype
449 IF (itype.NE.1 .AND. itype.NE.5)
WRITE (ndst,9000) acc
452 WRITE (ndso,930) idstr1(ifld), idstr2(itype)
453 IF ( itype.NE.1 )
THEN
455 IF (ifld.EQ.3)
WRITE (ndso,1930)
458 IF (ifld.EQ.3)
WRITE (ndso,1930)
461 IF (ifld.EQ.3)
WRITE (ndso,2930)
464 IF (ifld.EQ.4)
WRITE (ndso,1930)
467 IF (ifld.EQ.4)
WRITE (ndso,2930)
470 IF (ifld.EQ.6)
WRITE (ndso,1930)
473 IF (ifld.EQ.6)
WRITE (ndso,1930)
476 IF (ifld.EQ.6)
WRITE (ndso,2930)
479 IF ( flberg )
WRITE (ndso,938)
480 IF ( flstab )
WRITE (ndso,939)
481 IF (itype.EQ.4 .AND. ifld.GT.2)
THEN
489 IF (.NOT. fltime)
THEN
490 CALL nextln ( comstr , ndsi , ndse )
491 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) time
492 IF (time(1).LT.10000000)
THEN
493 WRITE (ndse,1035) time
496 CALL stme21 ( time , idtime )
497 WRITE (ndso,931) idtime
513 ALLOCATE ( mask(nxi,nyi) )
515 IF(gtype .EQ. ungtype)
THEN
519 rw(1) = factor*x0 ; rw(2) = factor*maxx
520 rw(3) = factor*y0 ; rw(4) = factor*maxy
522 rw(1) = factor*xgrd(1,1) ; rw(2) = factor*xgrd(ny,nx)
523 rw(3) = factor*ygrd(1,1) ; rw(4) = factor*ygrd(ny,nx)
525 WRITE (ndso,932) nxi, nyi
527 WRITE (ndso,933) rw(1),rw(2),rw(3),rw(4)
529 WRITE (ndso,733) rw(1),rw(2),rw(3),rw(4)
534 ELSE IF (itype.EQ.2)
THEN
536 CALL nextln ( comstr , ndsi , ndse )
537 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
538 x0i, xni, nxi, y0i, yni, nyi
539 IF (nxi.LT.2 .OR. nyi.LT.2)
THEN
540 WRITE (ndse,1036) nxi, nyi
543 ALLOCATE ( mask(nxi,nyi) )
545 WRITE (ndso,932) nxi, nyi
548 WRITE (ndso,933) factor*x0i, factor*xni, &
549 factor*y0i, factor*yni
551 WRITE (ndso,733) factor*x0i, factor*xni, &
552 factor*y0i, factor*yni
557 ELSE IF (itype.EQ.5)
THEN
558 CALL nextln ( comstr , ndsi , ndse )
559 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
560 dattyp, recldt, nodata
561 IF (dattyp.LT.0 .OR. dattyp.GT.2)
THEN
562 WRITE (ndse,1033) dattyp
565 IF (recldt.LE.0)
THEN
566 WRITE (ndse,1034) recldt
569 WRITE (ndso,934) idstr3(dattyp+1), recldt, nodata
570 WRITE (idfld,935) dattyp
571 DEALLOCATE ( ix21, ix22, iy21, iy22, jx21, jx22, jy21, jy22, &
573 DEALLOCATE ( rd11, rd21, rd12, rd22, xd11, xd21, xd12, xd22, &
574 fx, fy, fa, a1, a2, a3 )
585 IF (itype.NE.1 .AND. itype.NE.5)
THEN
594 sxi = (xni-x0i)/real(nxi-1)
595 syi = (yni-y0i)/real(nyi-1)
598 IF ( abs(abs(real(nxi)*sxi)-360.) .LT. 0.1*abs(sxi) ) &
601 IF (
ASSOCIATED(ala) )
THEN
602 DEALLOCATE ( ala, alo )
605 ALLOCATE ( ala(nxi,nyi), alo(nxi,nyi) )
608 alo(ix,iy) = x0i + real(ix-1)*sxi
609 ala(ix,iy) = y0i + real(iy-1)*syi
615 gsi = w3gsuc( .true., flagll, iclo, alo, ala )
622 IF (gtype .NE. ungtype)
THEN
625 ingrid = w3grmp( gsi, real(xgrd(iy,ix)), real(ygrd(iy,ix)), &
628 IF ( .NOT.ingrid )
THEN
634 WRITE(ndso,1042) ix, iy, xgrd(iy,ix), ygrd(iy,ix)
661 WRITE (ndst,9046) ix, iy, &
662 ix21(ix,iy),ix22(ix,iy),iy21(ix,iy),iy22(ix,iy), &
663 rd11(ix,iy),rd12(ix,iy),rd21(ix,iy),rd22(ix,iy)
672 ix21(ix,1) = 1 + int(mod(360.+(x-x0i),360.)/sxi)
676 IF (iclo.EQ.iclose_none)
THEN
677 ix21(ix,1) = max( 1 , min(ix21(ix,1),nxi-1) )
678 ix22(ix,1) = ix21(ix,1) + 1
680 ix21(ix,1) = max( 1 , min(ix21(ix,1),nxi) )
681 ix22(ix,1) = mod(ix21(ix,1),nxi)+1
683 iy21(ix,1) = 1 + int((y-y0i)/syi)
684 iy21(ix,1) = max( 1 , min(iy21(ix,1),nyi-1) )
685 iy22(ix,1) = iy21(ix,1) + 1
687 rw(1) = mod(360.+(x-x0i),360.)/sxi - real(ix21(ix,1)-1)
688 rw(2) = (y-y0i)/syi - real(iy21(ix,1)-1)
690 IF (iy21(ix,1).EQ.1 .AND. rw(2).LT.acc)
THEN
691 IF (rw(2).LT.-acc)
THEN
693 ELSE IF (rw(2).LT.0.)
THEN
701 IF (iy21(ix,1).EQ.nyi .AND. rw(2).GT.1.-acc)
THEN
702 IF (rw(2).GT.1.+acc)
THEN
704 ELSE IF (rw(2).GT.1.)
THEN
712 efac = sqrt( max(0.,abs(rw(1)-0.5)-0.5)**2 + &
713 max(0.,abs(rw(2)-0.5)-0.5)**2 )
714 efac = 1. / ( 1. + 0.25*efac**2 )
717 rd11(ix,1) = efac * (1.-rw(1)) * (1.-rw(2))
718 rd21(ix,1) = efac * rw(1) * (1.-rw(2))
719 rd12(ix,1) = efac * (1.-rw(1)) * rw(2)
720 rd22(ix,1) = efac * rw(1) * rw(2)
725 DEALLOCATE ( ala, alo )
737 IF ( mapsta(iy,ix) .EQ. 0 )
THEN
738 mapovr(ix,iy) = iland
753 CALL nextln ( comstr , ndsi , ndse )
754 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
755 nxj(j), nyj(j), clo(j)
756 IF (nxj(j).LT.2 .OR. nyj(j).LT.2)
THEN
757 WRITE (ndse,1036) nxj(j), nyj(j)
760 IF (
ALLOCATED(mask) )
DEALLOCATE (mask)
761 ALLOCATE ( mask(nxj(j),nyj(j)) )
763 WRITE (ndso,944) nxj(j), nyj(j), clo(j)
765 CALL nextln ( comstr , ndsi , ndse )
766 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
767 fromll, idlall, idfmll, formll
768 IF (idlall.LT.1 .OR. idlall.GT.4) idlall = 1
769 IF (idfmll.LT.1 .OR. idfmll.GT.3) idfmll = 1
770 WRITE (ndso,945) idlall, idfmll
771 IF (idfmll.EQ.2)
WRITE (ndso,946) formll
773 CALL nextln ( comstr , ndsi , ndse )
774 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) NDSLL, namell
778 WRITE (ndso,947) ndsll
779 IF (fromll.EQ.
'NAME')
WRITE (ndso,948) namell
780 IF (ndsll.EQ.ndsi)
THEN
782 CALL nextln ( comstr , ndsi , ndse )
787 IF ( idfmll .EQ. 3 )
THEN
788 IF (fromll.EQ.
'NAME')
THEN
789 jj = len_trim(fnmpre)
790 OPEN (ndsll,
file=fnmpre(:jj)//namell, &
791 form=
'UNFORMATTED', convert=
file_endian,status=
'OLD', &
794 OPEN (ndsll, form=
'UNFORMATTED', convert=
file_endian, &
795 status=
'OLD',err=845,iostat=ierr)
798 IF (fromll.EQ.
'NAME')
THEN
799 jj = len_trim(fnmpre)
800 OPEN (ndsll,
file=fnmpre(:jj)//namell, &
801 status=
'OLD',err=845,iostat=ierr)
804 status=
'OLD',err=845,iostat=ierr)
812 IF (
ASSOCIATED(ala) )
THEN
813 DEALLOCATE ( ala, alo )
816 ALLOCATE ( ala(nxj(j),nyj(j)), alo(nxj(j),nyj(j)) )
817 CALL ina2r (ala, nxj(j), nyj(j), 1, nxj(j), 1, nyj(j),&
818 ndsll, ndst, ndse, idfmll, formll, idlall, 1., 0.)
819 CALL ina2r (alo, nxj(j), nyj(j), 1, nxj(j), 1, nyj(j),&
820 ndsll, ndst, ndse, idfmll, formll, idlall, 1., 0.)
821 IF ( ndsll .NE. ndsi )
CLOSE (ndsll)
827 CALL nextln ( comstr , ndsi , ndse )
828 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
829 fromll, idlall, idfmll, formll
830 IF (idlall.LT.1 .OR. idlall.GT.4) idlall = 1
831 IF (idfmll.LT.1 .OR. idfmll.GT.3) idfmll = 1
832 WRITE (ndso,945) idlall, idfmll
833 IF (idfmll.EQ.2)
WRITE (ndso,946) formll
835 CALL nextln ( comstr , ndsi , ndse )
836 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) NDSLL, namell
840 WRITE (ndso,947) ndsll
841 IF (fromll.EQ.
'NAME')
WRITE (ndso,948) namell
843 IF (ndsll.EQ.ndsi)
THEN
845 CALL nextln ( comstr , ndsi , ndse )
850 IF ( idfmll .EQ. 3 )
THEN
851 IF (fromll.EQ.
'NAME')
THEN
852 jj = len_trim(fnmpre)
853 OPEN (ndsll,
file=fnmpre(:jj)//namell, &
854 form=
'UNFORMATTED', convert=
file_endian,status=
'OLD', &
857 OPEN (ndsll,form=
'UNFORMATTED', convert=
file_endian, &
858 status=
'OLD',err=846,iostat=ierr)
861 IF (fromll.EQ.
'NAME')
THEN
862 jj = len_trim(fnmpre)
863 OPEN (ndsll,
file=fnmpre(:jj)//namell, &
864 status=
'OLD',err=846,iostat=ierr)
867 status=
'OLD',err=846,iostat=ierr)
875 CALL ina2i (mask, nxj(j), nyj(j), 1,nxj(j), 1,nyj(j), &
876 ndsll, ndst, ndse, idfmll, formll, idlall, 1, 0)
877 IF ( ndsll .NE. ndsi )
CLOSE (ndsll)
883 WRITE (ndst,9051) ix, iy, ala(ix,iy), &
884 alo(ix,iy), mask(ix,iy)
892 CALL w3fldp ( ndso, ndst, ndse, ierr, flagll, &
893 nx, ny, nx, ny, real(ygrd), real(xgrd), mapovr, iland, &
894 nxj(j), nyj(j), nxj(j), nyj(j), clo(j), ala, alo, &
895 mask, rd11, rd21, rd12, rd22, ix21, ix22, iy21, &
898 CALL w3fldp ( ndso, ndst, ndse, ierr, flagll, &
899 nx, ny, nx, ny, real(ygrd), real(xgrd), mapovr, iland, &
900 nxj(j), nyj(j), nxj(j), nyj(j), clo(j), ala, alo, &
901 mask, xd11, xd21, xd12, xd22, jx21, jx22, jy21, &
909 IF ( nfcomp .EQ. 2)
THEN
912 IF ( mapovr(ix,iy) .GE. 2)
THEN
913 factor = 1. / real(mapovr(ix,iy))
914 rd11(ix,iy) = factor * rd11(ix,iy)
915 rd12(ix,iy) = factor * rd12(ix,iy)
916 rd21(ix,iy) = factor * rd21(ix,iy)
917 rd22(ix,iy) = factor * rd22(ix,iy)
918 xd11(ix,iy) = factor * xd11(ix,iy)
919 xd12(ix,iy) = factor * xd12(ix,iy)
920 xd21(ix,iy) = factor * xd21(ix,iy)
921 xd22(ix,iy) = factor * xd22(ix,iy)
934 IF ( itype .GE. 5 )
THEN
938 WRITE (ndso,961) nxj(j), nyj(j)
940 WRITE (ndso,962) j, nxj(j), nyj(j)
944 CALL nextln ( comstr , ndsi , ndse )
945 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
946 fromf, idlaf(j), idfmf(j), formt(j), formf(j)
947 IF (idlaf(j).LT.1 .OR. idlaf(j).GT.4) idlaf(j) = 1
948 IF (idfmf(j).LT.1 .OR. idfmf(j).GT.3) idfmf(j) = 1
949 IF ( itype .NE. 5 )
WRITE (ndso,963) idlaf(j)
950 WRITE (ndso,964) idfmf(j)
951 IF (idfmf(j).EQ.2)
WRITE (ndso,965) formt(j), formf(j)
953 CALL nextln ( comstr , ndsi , ndse )
954 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) NDSF(J), namef
956 ndsf(j) = 24 + nfcomp
958 WRITE (ndso,966) ndsf(j)
959 IF (fromf.EQ.
'NAME')
WRITE (ndso,967) namef
967 IF ( idfmf(j) .EQ. 3 )
THEN
968 IF (ndsf(j).EQ.ndsi)
THEN
969 WRITE (ndse,1051) ndsi
972 IF (fromf.EQ.
'NAME')
THEN
973 jj = len_trim(fnmpre)
974 OPEN (ndsf(j),
file=fnmpre(:jj)//namef, &
975 form=
'UNFORMATTED', convert=
file_endian,status=
'OLD',err=850, &
978 OPEN (ndsf(j),form=
'UNFORMATTED', convert=
file_endian, &
979 status=
'OLD',err=850,iostat=ierr)
985 READ (ndsf(j),
END=888,IOSTAT=IERR) TSTR, &
987 IF (ierr .EQ. 0 .AND. tstr .EQ. idstr)
THEN
988 IF (tsfld .NE. idfld .OR. nxt .NE. nxi &
989 .OR. nyt .NE. nyi )
THEN
990 WRITE (ndse,1052) tsfld, nxt, nyt, idfld, &
999 IF (ndsf(j).EQ.ndsi)
THEN
1000 CALL nextln ( comstr , ndsi , ndse )
1002 IF (fromf.EQ.
'NAME')
THEN
1003 jj = len_trim(fnmpre)
1004 OPEN (ndsf(j),
file=fnmpre(:jj)//namef, &
1005 status=
'OLD',err=850,iostat=ierr)
1007 OPEN (ndsf(j),status=
'OLD',err=850,iostat=ierr)
1014 IF ( nfcomp .EQ. 1 )
THEN
1027 j = len_trim(fnmpre)
1028 IF ( itype .LE. 4 )
THEN
1029 CALL w3fldo (
'WRITE', idfld, ndsdat, ndst, ndse, &
1030 nx, ny, gtype, ierr, fpre=fnmpre(:j), &
1033 CALL w3fldo (
'WRITE', idfld, ndsdat, ndst, ndse, &
1034 recldt, 0, gtypedum, ierr, fpre=fnmpre(:j) )
1039 IF ( itype .NE. 5 )
THEN
1043 mxm = max( nxj(1), nxj(2) )
1044 mym = max( nyj(1), nyj(2) )
1045 ALLOCATE ( xc(mxm,mym), yc(mxm,mym), ac(mxm,mym) )
1055 j = len_trim(fnmpre)
1056 OPEN (ndstime,
file=fnmpre(:j)//
'times.'//idfld, &
1057 err=870,iostat=ierr )
1068 IF (idfmf(j).EQ.1)
THEN
1069 READ (ndsf(j), * ,
END=888,ERR=860,IOSTAT=IERR) time
1070 ELSE IF (idfmf(j).EQ.2)
THEN
1071 READ (ndsf(j),formt(j),
END=888,ERR=860,IOSTAT=IERR) time
1073 READ (ndsf(j),
END=888,ERR=860,IOSTAT=IERR) time
1076 IF (nfcomp.EQ.2)
THEN
1078 IF (idfmf(j).EQ.1)
THEN
1079 READ (ndsf(j), * ,
END=888,ERR=860,IOSTAT=IERR) time2
1080 ELSE IF (idfmf(j).EQ.2)
THEN
1081 READ (ndsf(j),formt(j),
END=888,ERR=860,IOSTAT=IERR) time2
1083 READ (ndsf(j),
END=888,ERR=860,IOSTAT=IERR) time2
1085 IF (time2(1).NE.time(1) .OR. time2(2).NE.time(2))
GOTO 861
1090 CALL stme21 ( time , idtime )
1091 WRITE (ndso,973) idtime
1093 WRITE (ndstime, 979, err=871,iostat=ierr) time
1102 IF ( itype .LE. 4 )
THEN
1103 CALL ina2r (xc, mxm, mym, 1, nxj(1), 1, nyj(1), &
1104 ndsf(1), ndst, ndse, idfmf(1), formf(1), idlaf(1), 1., 0.)
1109 ixpn = min( ixp0+ixpwdt-1 , nxj(1) )
1111 CALL prtblk ( ndst, nxj(1), nyj(1), mxm, xc, mask, 0, 0.,&
1112 ixp0, ixpn, 1, 1, nyj(1), 1,
'Field 1',
' ')
1113 IF (ixpn.NE.nxj(1))
THEN
1114 ixp0 = ixp0 + ixpwdt
1115 ixpn = min( ixpn+ixpwdt , nxj(1) )
1122 IF (nfcomp.EQ.2 .OR. ifld.GE.3 .OR. flberg)
THEN
1123 CALL ina2r (yc, mxm, mym, 1, nxj(2), 1, nyj(2), &
1124 ndsf(2), ndst, ndse, idfmf(2), formf(2), &
1130 ixpn = min( ixp0+ixpwdt-1 , nxj(2) )
1132 CALL prtblk ( ndst, nxj(2), nyj(2), mxm, yc, mask, 0, 0., &
1133 ixp0, ixpn, 1, 1, nyj(2), 1,
'Field 2',
' ')
1134 IF (ixpn.NE.nxj(2))
THEN
1135 ixp0 = ixp0 + ixpwdt
1136 ixpn = min( ixpn+ixpwdt , nxj(2) )
1144 CALL ina2r (ac, mxm, mym, 1, nxj(2), 1, nyj(2), &
1145 ndsf(2), ndst, ndse, idfmf(2), formf(2), &
1151 ixpn = min( ixp0+ixpwdt-1 , nxj(2) )
1153 CALL prtblk ( ndst, nxj(2), nyj(2), mxm, ac, mask, 0,&
1154 0., ixp0, ixpn, 1,1, nyj(2), 1,
'Field 3',
' ')
1155 IF (ixpn.NE.nxj(2))
THEN
1156 ixp0 = ixp0 + ixpwdt
1157 ixpn = min( ixpn+ixpwdt , nxj(2) )
1170 IF (idfmf(1).EQ.3)
THEN
1171 READ (ndsf(1),
END=862,ERR=862,IOSTAT=IERR) ndat
1173 READ (ndsf(1),*,
END=862,ERR=862,IOSTAT=IERR) ndat
1176 WRITE (ndso,975) ndat
1178 IF ( ndat.GT.0 )
THEN
1179 ALLOCATE (
DATA(recldt,ndat) )
1181 IF (idfmf(1).EQ.1)
THEN
1182 READ (ndsf(1), * ,
END=863,ERR=863, &
1183 iostat=ierr)
DATA(:,idat)
1184 ELSE IF (idfmf(1).EQ.2)
THEN
1185 READ (ndsf(1),formt(1),
END=863,ERR=863, &
1186 iostat=ierr)
DATA(:,idat)
1188 READ (ndsf(1),
END=863,ERR=863, &
1189 iostat=ierr)
DATA(:,idat)
1198 WRITE (ndst,9062) idat,
DATA(1:ix,idat)
1199 IF ( ix.LT.recldt )
WRITE (ndst,9063)
DATA(ix+1:,:)
1208 IF (itype.EQ.1)
THEN
1210 IF (( ifld.LE.2 ).AND.( .NOT. flberg ))
THEN
1213 fa(ix,iy) = xc(ix,iy)
1219 fx(ix,iy) = xc(ix,iy)
1220 fy(ix,iy) = yc(ix,iy)
1221 fa(ix,iy) = ac(ix,iy)
1226 ELSE IF (itype.NE.5)
THEN
1231 WRITE (ndso,976)
' '
1233 IF (( ifld.LE.2 ).AND.( .NOT. flberg ))
THEN
1238 = rd11(ix,iy) * xc(ix21(ix,iy),iy21(ix,iy)) &
1239 + rd21(ix,iy) * xc(ix22(ix,iy),iy21(ix,iy)) &
1240 + rd12(ix,iy) * xc(ix21(ix,iy),iy22(ix,iy)) &
1241 + rd22(ix,iy) * xc(ix22(ix,iy),iy22(ix,iy))
1245 IF (nfcomp.EQ.2)
THEN
1247 WRITE (ndso,976)
' (2) '
1251 fa(ix,iy) = fa(ix,iy) &
1252 + xd11(ix,iy) * yc(jx21(ix,iy),jy21(ix,iy)) &
1253 + xd21(ix,iy) * yc(jx22(ix,iy),jy21(ix,iy)) &
1254 + xd12(ix,iy) * yc(jx21(ix,iy),jy22(ix,iy)) &
1255 + xd22(ix,iy) * yc(jx22(ix,iy),jy22(ix,iy))
1266 IF (iy21(ix,iy).LT.1)
THEN
1271 IF (iy22(ix,iy).LT.1) iy22(ix,iy)=1
1272 IF (iy21(ix,iy).GT.mym) iy21(ix,iy)=mym
1273 IF (iy22(ix,iy).GT.mym)
THEN
1279 = rd11(ix,iy) * xc(ix21(ix,iy),iy21(ix,iy)) &
1280 + rd21(ix,iy) * xc(ix22(ix,iy),iy21(ix,iy)) &
1281 + rd12(ix,iy) * xc(ix21(ix,iy),iy22(ix,iy)) &
1282 + rd22(ix,iy) * xc(ix22(ix,iy),iy22(ix,iy))
1284 = rd11(ix,iy) * yc(ix21(ix,iy),iy21(ix,iy)) &
1285 + rd21(ix,iy) * yc(ix22(ix,iy),iy21(ix,iy)) &
1286 + rd12(ix,iy) * yc(ix21(ix,iy),iy22(ix,iy)) &
1287 + rd22(ix,iy) * yc(ix22(ix,iy),iy22(ix,iy))
1289 = rd11(ix,iy) * ac(ix21(ix,iy),iy21(ix,iy)) &
1290 + rd21(ix,iy) * ac(ix22(ix,iy),iy21(ix,iy)) &
1291 + rd12(ix,iy) * ac(ix21(ix,iy),iy22(ix,iy)) &
1292 + rd22(ix,iy) * ac(ix22(ix,iy),iy22(ix,iy))
1293 a1(ix,iy) = max( 1.e-10 , &
1294 sqrt( fx(ix,iy)**2 + fy(ix,iy)**2 ) )
1296 = rd11(ix,iy) * sqrt(xc(ix21(ix,iy),iy21(ix,iy))**2 &
1297 +yc(ix21(ix,iy),iy21(ix,iy))**2) &
1298 + rd21(ix,iy) * sqrt(xc(ix22(ix,iy),iy21(ix,iy))**2 &
1299 +yc(ix22(ix,iy),iy21(ix,iy))**2) &
1300 + rd12(ix,iy) * sqrt(xc(ix21(ix,iy),iy22(ix,iy))**2 &
1301 +yc(ix21(ix,iy),iy22(ix,iy))**2) &
1302 + rd22(ix,iy) * sqrt(xc(ix22(ix,iy),iy22(ix,iy))**2 &
1303 +yc(ix22(ix,iy),iy22(ix,iy))**2)
1305 rd11(ix,iy) * ( xc(ix21(ix,iy),iy21(ix,iy))**2 &
1306 + yc(ix21(ix,iy),iy21(ix,iy))**2 ) &
1307 + rd21(ix,iy) * ( xc(ix22(ix,iy),iy21(ix,iy))**2 &
1308 + yc(ix22(ix,iy),iy21(ix,iy))**2 ) &
1309 + rd12(ix,iy) * ( xc(ix21(ix,iy),iy22(ix,iy))**2 &
1310 + yc(ix21(ix,iy),iy22(ix,iy))**2 ) &
1311 + rd22(ix,iy) * ( xc(ix22(ix,iy),iy22(ix,iy))**2 &
1312 + yc(ix22(ix,iy),iy22(ix,iy))**2 ) )
1322 factor = min( 1.5 , a2(ix,iy)/a1(ix,iy) )
1323 fx(ix,iy) = factor * fx(ix,iy)
1324 fy(ix,iy) = factor * fy(ix,iy)
1334 factor = min( 1.5 , a3(ix,iy)/a1(ix,iy) )
1335 fx(ix,iy) = factor * fx(ix,iy)
1336 fy(ix,iy) = factor * fy(ix,iy)
1348 factor = min( 1.5 , a2(ix,iy)/a1(ix,iy) )
1349 fx(ix,iy) = factor * fx(ix,iy)
1350 fy(ix,iy) = factor * fy(ix,iy)
1360 factor = min( 1.5 , a3(ix,iy)/a1(ix,iy) )
1361 fx(ix,iy) = factor * fx(ix,iy)
1362 fy(ix,iy) = factor * fy(ix,iy)
1374 factor = min( 1.5 , a2(ix,iy)/a1(ix,iy) )
1375 fx(ix,iy) = factor * fx(ix,iy)
1376 fy(ix,iy) = factor * fy(ix,iy)
1386 factor = min( 1.5 , a3(ix,iy)/a1(ix,iy) )
1387 fx(ix,iy) = factor * fx(ix,iy)
1388 fy(ix,iy) = factor * fy(ix,iy)
1400 IF ( .NOT.
ALLOCATED(mapout) )
ALLOCATE ( mapout(nx,ny) )
1404 mapout(ix,iy) = mapsta(iy,ix)
1408 ixn = min( ix0+ixwdt-1 , nx )
1410 IF (ifld.EQ.-7)
THEN
1411 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1412 ix0, ixn, 1, 1, ny, 1,
'ice param 1',
'(-)')
1413 ELSE IF (ifld.EQ.-6)
THEN
1414 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1415 ix0, ixn, 1, 1, ny, 1,
'ice param 2',
'(-)')
1416 ELSE IF (ifld.EQ.-5)
THEN
1417 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1418 ix0, ixn, 1, 1, ny, 1,
'ice param 3',
'(-)')
1419 ELSE IF (ifld.EQ.-4)
THEN
1420 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1421 ix0, ixn, 1, 1, ny, 1,
'ice param 4',
'(-)')
1422 ELSE IF (ifld.EQ.-3)
THEN
1423 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1424 ix0, ixn, 1, 1, ny, 1,
'ice param 5',
'(-)')
1425 ELSE IF (ifld.EQ.-2)
THEN
1426 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1427 ix0, ixn, 1, 1, ny, 1,
'Mud Density',
'kg/m3')
1428 ELSE IF (ifld.EQ.-1)
THEN
1429 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1430 ix0, ixn, 1, 1, ny, 1,
'Mud Thkness',
'(-)')
1431 ELSE IF (ifld.EQ.0)
THEN
1432 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1433 ix0, ixn, 1, 1, ny, 1,
'Mud Kin.Visc',
'm2/s')
1434 ELSE IF (ifld.EQ.1)
THEN
1435 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1436 ix0, ixn, 1, 1, ny, 1,
'Fraction ice',
'(-)')
1438 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1439 ix0, ixn, 1, 1, ny, 1,
'Iceberg a',
'0.1/km')
1440 ELSE IF (ifld.EQ.2)
THEN
1441 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1442 ix0, ixn, 1, 1, ny, 1,
'Water level',
'm')
1444 CALL prtblk (ndso, nx, ny, nx, fx, mapout, 0, 0., &
1445 ix0, ixn, 1, 1, ny, 1,
'Cart. X-comp',
'm/s')
1446 CALL prtblk (ndso, nx, ny, nx, fy, mapout, 0, 0., &
1447 ix0, ixn, 1, 1, ny, 1,
'Cart. Y-comp',
'm/s')
1449 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
1450 ix0, ixn, 1, 1, ny, 1,
'Tair-Tsea',
'degr')
1454 ixn = min( ixn+ixwdt , nx )
1463 IF ( itype .LE. 4 )
THEN
1467 CALL w3fldg (
'WRITE', idfld, ndsdat, ndst, ndse, nx, ny, &
1468 nx, ny, time, time, time, fx, fy, fa, time, &
1470 ELSE IF ( itype .EQ. 5 )
THEN
1471 IF ( ndat .EQ. 0 )
THEN
1479 CALL w3fldd (
'WRITE', idfld, ndsdat, ndst, ndse, time,&
1480 time, recldt, ndat, idat,
DATA, ierr )
1484 IF (ierr.NE.0)
CALL extcde ( 30 )
1486 IF ( .NOT. fltime )
EXIT
1497 WRITE (ndse,1000) ierr
1505 WRITE (ndse,1002) ierr
1509 WRITE (ndse,1045) ierr
1513 WRITE (ndse,1046) ierr
1517 WRITE (ndse,1050) ierr, ndsf(j), namef
1521 WRITE (ndse,1060) j, ierr
1525 WRITE (ndse,1061) time, time2
1529 WRITE (ndse,1062) ierr
1533 WRITE (ndse,1063) idat, ierr
1538 WRITE (ndse,1070) idfld, ierr
1544 WRITE (ndse,1071) idtime, ierr
1557 900
FORMAT (/15x,
' *** WAVEWATCH III Input pre-processing *** '/ &
1558 15x,
'==============================================='/)
1559 901
FORMAT (
' Comment character is ''',a,
''''/)
1560 902
FORMAT (
' Grid name : ',a/)
1562 930
FORMAT (/
' Description of inputs'/ &
1563 ' --------------------------------------------------'/ &
1564 ' Input type : ',a/ &
1565 ' Format type : ',a)
1566 1930
FORMAT (
' Field conserves velocity.')
1567 2930
FORMAT (
' Field corrected for energy conservation.')
1568 931
FORMAT (/
' Single field, time: ',a)
1569 932
FORMAT (/
' Input grid dim. :',i5,3x,i5)
1570 933
FORMAT (
' Longitude range :',2f8.2,
' (deg)'/ &
1571 ' Latitude range :',2f8.2,
' (deg)')
1572 733
FORMAT (
' X range :',2f8.2,
' (km)'/ &
1573 ' Y range :',2f8.2,
' (km)')
1574 934
FORMAT (/
' Data type : ',a/ &
1575 ' Data record length:',i5/ &
1576 ' Missing values :',f8.2)
1577 935
FORMAT (
'DT',i1 )
1578 938
FORMAT (
' Icebergs included.')
1579 939
FORMAT (
' Air-sea temperature differences included.')
1581 940
FORMAT (//
' Preprocessing data'/ &
1582 ' --------------------------------------------------')
1583 941
FORMAT (
' Interpolation factors ..... '/ &
1584 ' (longitude-latitude grid)')
1585 942
FORMAT (
' Interpolation factors ..... '/ &
1586 ' (grid from file)')
1587 943
FORMAT (/
' Longitude-latitude file ',i1,
' :'/ &
1588 ' ---------------------------------------')
1589 944
FORMAT (
' Input grid dim. :',i5,3x,i5/ &
1590 ' Closed longitudes :',l5)
1591 945
FORMAT (
' Layout indicator :',i5/ &
1592 ' Format indicator :',i5)
1593 946
FORMAT (
' Format : ',a)
1594 947
FORMAT (
' Unit number :',i5)
1595 948
FORMAT (
' File name : ',a)
1596 949
FORMAT (/
' Corresponding map file '/ &
1597 ' ---------------------------------------')
1599 960
FORMAT (/
' Data file :'/ &
1600 ' ---------------------------------------')
1601 961
FORMAT (/
' Data file :'/ &
1602 ' ---------------------------------------'/ &
1603 ' Input grid dim. :',i5,3x,i5)
1604 962
FORMAT (/
' Data file (',i1,
') :'/ &
1605 ' ---------------------------------------'/ &
1606 ' Input grid dim. :',i5,3x,i5)
1607 963
FORMAT (
' Layout indicator :',i5)
1608 964
FORMAT (
' Format indicator :',i5)
1609 965
FORMAT (
' Format for time : ',a/ &
1610 ' Format for data : ',a)
1611 966
FORMAT (
' Unit number :',i5)
1612 967
FORMAT (
' File name : ',a)
1614 970
FORMAT (/
' Opening input data file .....')
1615 971
FORMAT (/
' Opening output data file .....')
1616 972
FORMAT (//
' Processing data'/ &
1617 ' --------------------------------------------------')
1618 973
FORMAT (
' Time : ',a)
1620 974
FORMAT (
' reading ....')
1621 975
FORMAT (
' number of data records :',i6)
1622 976
FORMAT (
' interpolating',a,
'....')
1623 977
FORMAT (
' writing ....')
1624 978
FORMAT (
' skipping ....')
1628 979
FORMAT (1x,i8.8,1x,i6.6)
1631 999
FORMAT(//
' End of program '/ &
1632 ' ========================================='/ &
1633 ' WAVEWATCH III Input preprocessing '/)
1635 1000
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1636 ' ERROR IN OPENING INPUT FILE'/ &
1639 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1640 ' PREMATURE END OF INPUT FILE'/)
1642 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1643 ' ERROR IN READING FROM INPUT FILE'/ &
1646 1030
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1647 ' ILLEGAL FIELD ID -->',a,
'<--'/)
1648 1031
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1649 ' ILLEGAL FORMAT ID -->',a,
'<--'/)
1650 1032
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1651 ' THIS FORMAT TYPE IS ALLOWED FOR ICE AND LEV ONLY'/)
1653 1033
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1654 ' ILLEGAL DATA RECORD LENGTH : ',i6/)
1655 1034
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1656 ' ILLEGAL DATA TYPE : ',i2/)
1658 1035
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1659 ' ILLEGAL TIME : ',i8.8,i7.6/)
1660 1036
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1661 ' ILLEGAL SIZE OF INPUT GRID : ',i5,1x,i5/)
1662 10381
FORMAT (/
' *** WAVEWATCH III WARNING IN W3PREP : '/ &
1663 ' LAT/LON DATA READ FROM INPUT FILE')
1664 10382
FORMAT (/
' *** WAVEWATCH III WARNING IN W3PREP : '/ &
1665 ' MASK DATA READ FROM INPUT FILE')
1667 1042
FORMAT (/
' *** WAVEWATCH-III WARNING W3PREP : '/ &
1668 ' GRID POINT ',2i6,2f7.2,/ &
1669 ' NOT COVERED BY INPUT GRID.'/)
1670 1044
FORMAT (/
' *** WAVEWATCH III WARNING W3PREP : '/ &
1671 ' Y = ',f10.1,
' NOT COVERED BY INPUT GRID.'/)
1675 1045
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1676 ' ERROR IN OPENING LAT-LONG DATA FILE'/ &
1679 1046
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1680 ' ERROR IN OPENING MASK FILE'/ &
1683 1050
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1684 ' ERROR IN OPENING INPUT DATA FILE'/ &
1688 1051
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1689 ' CANNOT READ UNFORMATTED FROM UNIT',i3/)
1691 1052
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1692 ' ERROR IN READING FROM INPUT DATA FILE'/ &
1693 ' IN FILE , VARIABLE ID = ',a/ &
1694 ' ARRAY DIMENSION = ',2i5/ &
1695 ' EXPECTING , VARIABLE ID = ',a/ &
1696 ' ARRAY DIMENSION = ',2i5/)
1698 1060
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1699 ' ERROR IN READING TIME FROM FILE (',i1,
')'/ &
1701 1061
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1702 ' INCOMPATIBLE FIELD TIMES '/ &
1703 ' FIELD #1 : ',i8.8,i7.6/ &
1704 ' FIELD #2 : ',i8.8,i7.6/)
1705 1062
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1706 ' ERROR IN READING NDAT FROM FILE'/ &
1708 1063
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1709 ' ERROR IN READING DATA RECORD',i6,
' FROM FILE'/ &
1712 1070
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1713 ' ERROR IN CREATING A TIMES FILE FOR ',a/ &
1715 1071
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
1716 ' ERROR IN WRITING TIME OUTPUT ',a/ &
1721 9000
FORMAT (
' TEST W3PREP : ACC : ',f6.3)
1725 9040
FORMAT (
' TEST W3PREP : INPUT GRID RANGES AND INCR. AFTER CORR.'/ &
1726 ' LON / X : ',3f10.2, &
1727 ' (GLOBAL=',l1,
')'/ &
1728 ' LAT / Y : ',3f10.2)
1729 9041
FORMAT (
' TEST W3PREP : INTERPOLATION DATA FOR ',a)
1730 9042
FORMAT (
' ',i4,f8.2,2i4,2f8.2,1x,f6.3,1x,a)
1731 9043
FORMAT (
' TEST W3PREP : GRID SHIFTED BY ',f5.0,
' DEGREES / M')
1734 9045
FORMAT (
' TEST W3PREP : IX, IY, IXI(2), IYI(2), RD(4)')
1735 9046
FORMAT (
' ',2i4,2x,4i4,2x,4f6.2)
1739 9050
FORMAT (
' TEST W3PREP : LAT-LONG OF INPUT FILE ')
1740 9051
FORMAT (
' ',2i4,2f8.2,i4)
1744 9060
FORMAT (
' TEST W3PREP : INPUT FIELD (',i1,
') :'/)
1745 9061
FORMAT (
' TEST W3PREP : INPUT DATA RECORDS :')
1746 9062
FORMAT (
' ',i6,
' : ',6e11.3)
1747 9063
FORMAT (
' ',6e11.3)
1750 9065
FORMAT (
' TEST W3PREP : OUTPUT FIELD(S) :'/)