88 SUBROUTINE w3fldo ( INXOUT, IDFLD, NDS, NDST, NDSE, NX, NY, &
89 GTYPE, IERR, FEXT, FPRE, FHDR, TIDEFLAGIN )
211 INTEGER,
INTENT(IN) :: NDS, NDST, NDSE, NY
212 INTEGER,
INTENT(INOUT) :: NX
213 INTEGER,
INTENT(OUT) :: IERR
214 INTEGER,
INTENT(INOUT) :: GTYPE
215 CHARACTER(LEN=3),
INTENT(INOUT) :: IDFLD
216 CHARACTER,
INTENT(IN) :: INXOUT*(*)
217 CHARACTER,
INTENT(IN),
OPTIONAL :: FEXT*(*), FPRE*(*)
218 LOGICAL,
INTENT(IN),
OPTIONAL :: FHDR
219 INTEGER,
INTENT(INOUT),
OPTIONAL :: TIDEFLAGIN
224 INTEGER :: NXT, NYT, GTYPET, I
227 INTEGER,
SAVE :: IENT = 0
230 CHARACTER(LEN=3) :: TSFLD
231 CHARACTER(LEN=11) :: FORM =
'UNFORMATTED'
232 CHARACTER(LEN=13) :: TSSTR, IDSTR =
'WAVEWATCH III'
233 CHARACTER(LEN=20) :: TEMPXT
234 CHARACTER(LEN=30) :: FNAME
235 LOGICAL :: FDHDR = .true.
236 INTEGER :: TIDEFLAG = 0
237 LOGICAL :: TIDEOK = .false.
244 CALL strace (ient,
'W3FLDO')
248 WRITE (ndst,9000) inxout, idfld, nds, ndst, ndse, &
258 IF (
PRESENT(tideflagin) )
THEN
259 tideflag = tideflagin
264 IF (inxout.NE.
'READ' .AND. inxout.NE.
'WRITE')
GOTO 801
265 IF ( idfld.NE.
'IC1' .AND. idfld.NE.
'IC2' .AND. &
266 idfld.NE.
'IC3' .AND. idfld.NE.
'IC4' .AND. &
267 idfld.NE.
'IC5' .AND. idfld.NE.
'MDN' .AND. &
268 idfld.NE.
'MTH' .AND. idfld.NE.
'MVS' .AND. &
269 idfld.NE.
'LEV' .AND. idfld.NE.
'CUR' .AND. &
270 idfld.NE.
'WND' .AND. idfld.NE.
'WNS' .AND. &
271 idfld.NE.
'ICE' .AND. idfld.NE.
'TAU' .AND. &
272 idfld.NE.
'RHO' .AND. idfld.NE.
'DT0' .AND. &
273 idfld.NE.
'DT1' .AND. idfld.NE.
'DT2' .AND. &
274 idfld.NE.
'ISI' )
GOTO 802
276 IF (
PRESENT(fext) )
THEN
284 IF (
PRESENT(fhdr) )
THEN
290 IF ( idfld.EQ.
'LEV' )
THEN
291 fname =
'level.' // tempxt(:i)
293 ELSE IF ( idfld.EQ.
'CUR' )
THEN
294 fname =
'current.' // tempxt(:i)
296 ELSE IF ( idfld.EQ.
'WND' .OR. idfld.EQ.
'WNS' )
THEN
297 fname =
'wind.' // tempxt(:i)
299 ELSE IF ( idfld.EQ.
'ICE' .OR. idfld.EQ.
'ISI' )
THEN
300 fname =
'ice.' // tempxt(:i)
302 ELSE IF ( idfld.EQ.
'TAU' )
THEN
303 fname =
'momentum.' // tempxt(:i)
305 ELSE IF ( idfld.EQ.
'RHO' )
THEN
306 fname =
'density.' // tempxt(:i)
308 ELSE IF ( idfld.EQ.
'DT0' )
THEN
309 fname =
'data0.' // tempxt(:i)
311 ELSE IF ( idfld.EQ.
'DT1' )
THEN
312 fname =
'data1.' // tempxt(:i)
314 ELSE IF ( idfld.EQ.
'DT2' )
THEN
315 fname =
'data2.' // tempxt(:i)
317 ELSE IF ( idfld.EQ.
'MDN' )
THEN
318 fname =
'muddens.' // tempxt(:i)
320 ELSE IF ( idfld.EQ.
'MTH' )
THEN
321 fname =
'mudthk.' // tempxt(:i)
323 ELSE IF ( idfld.EQ.
'MVS' )
THEN
324 fname =
'mudvisc.' // tempxt(:i)
326 ELSE IF ( idfld.EQ.
'IC1' )
THEN
327 fname =
'ice1.' // tempxt(:i)
329 ELSE IF ( idfld.EQ.
'IC2' )
THEN
330 fname =
'ice2.' // tempxt(:i)
332 ELSE IF ( idfld.EQ.
'IC3' )
THEN
333 fname =
'ice3.' // tempxt(:i)
335 ELSE IF ( idfld.EQ.
'IC4' )
THEN
336 fname =
'ice4.' // tempxt(:i)
338 ELSE IF ( idfld.EQ.
'IC5' )
THEN
339 fname =
'ice5.' // tempxt(:i)
343 WRITE = inxout .EQ.
'WRITE'
346 WRITE (ndst,9001)
WRITE, fname(:i)
352 IF (
PRESENT(fpre) )
THEN
354 err=803, iostat=ierr)
360 IF (
PRESENT(fpre) )
THEN
362 status=
'OLD',err=803,iostat=ierr)
365 status=
'OLD',err=803,iostat=ierr)
373 IF ( form .EQ.
'UNFORMATTED' )
THEN
378 WRITE (nds,err=804,iostat=ierr) &
379 idstr, idfld, nx, ny, gtype, filler(1:2), tideflag
381 WRITE (nds,900,err=804,iostat=ierr) &
382 idstr, idfld, nx, ny, gtype, filler(1:2), tideflag
386 IF ( form .EQ.
'UNFORMATTED' )
THEN
387 READ (nds,
END=806,ERR=805,IOSTAT=IERR) &
388 tsstr, tsfld, nxt, nyt, gtypet, filler(1:2), tideflag
390 READ (nds,900,
END=806,ERR=805,IOSTAT=IERR) &
391 tsstr, tsfld, nxt, nyt, gtypet, filler(1:2), tideflag
393 IF ((filler(1).NE.0.OR.filler(2).NE.0).AND.tideflag.GE.0) tideflag=0
394 IF (tideflag.NE.0.AND.(.NOT.tideok))
THEN
398 IF ( idstr .NE. tsstr )
GOTO 807
399 IF (( idfld.EQ.
'WND' .AND. tsfld.EQ.
'WNS') .OR. &
400 ( idfld.EQ.
'ICE' .AND. tsfld.EQ.
'ISI') )
THEN
403 WRITE (ndst,9002) idfld
406 IF ( idfld .NE. tsfld )
GOTO 808
407 IF ( idfld(1:2) .NE.
'DT' )
THEN
408 IF ( nx.NE.nxt .OR. ny.NE.nyt )
THEN
412 IF (gtype.LE.4) gtype = gtypet
420 IF (
PRESENT(tideflagin) )
THEN
421 tideflagin = tideflag
429 IF ( ndse .GE. 0 )
WRITE (ndse,1001) inxout
434 IF ( ndse .GE. 0 )
WRITE (ndse,1002) idfld
439 IF ( ndse .GE. 0 )
WRITE (ndse,1003) idfld, ierr
444 IF ( ndse .GE. 0 )
WRITE (ndse,1004) idfld, ierr
449 IF ( ndse .GE. 0 )
WRITE (ndse,1005) idfld, ierr
454 IF ( ndse .GE. 0 )
WRITE (ndse,1006) idfld
459 IF ( ndse .GE. 0 )
WRITE (ndse,1007) tsstr, idstr
464 IF ( ndse .GE. 0 )
WRITE (ndse,1008) tsfld, idfld
469 IF ( ndse .GE. 0 )
WRITE (ndse,1009) &
476 IF ( ndse .GE. 0 )
WRITE (ndse,1010) &
483 900
FORMAT (1x,a13,1x,a3,6i12)
485 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
486 ' ILLEGAL INXOUT STRING : ',a/)
487 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
488 ' ILLEGAL FIELD ID STRING : ',a/)
489 1003
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
490 ' ERROR IN OPENING ',a,
' FILE, IOSTAT =',i6/)
491 1004
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
492 ' ERROR IN WRITING TO ',a,
' FILE, IOSTAT =',i6/)
493 1005
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
494 ' ERROR IN READING ',a,
' FILE, IOSTAT =',i6/)
496 1006
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
497 ' PREMATURE END OF ',a,
' FILE'/)
498 1007
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
499 ' ILLEGAL FILE ID STRING >',a,
'<'/ &
500 ' SHOULD BE >',a,
'<'/)
501 1008
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
502 ' ILLEGAL FIELD ID STRING >',a,
'<'/ &
503 ' SHOULD BE >',a,
'<'/)
504 1009
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
505 ' INCOMPATIBLE GRID DATA : ',3(1x,i10)/ &
506 ' SHOULD BE : ',3(1x,i10)/)
507 1010
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDO : '/ &
508 ' FILLER indicates use of tidal constituents',3i4, /&
509 ' For this the code should be compiled with TIDE switch'/)
512 9000
FORMAT (
' TEST W3FLDO : INXOUT : ',a/ &
517 ' NX, NY : ',i9,3x,i9/ &
520 9001
FORMAT (
' WRITE : ',l2/ &
522 9002
FORMAT (
' NEW IDFLD : ',a)
530 SUBROUTINE w3fldtide1 ( INXOUT, NDS, NDST, NDSE, NX, NY, IDFLD, IERR )
625 INTEGER,
INTENT(IN) :: NDS, NDST, NDSE, NX, NY
626 CHARACTER(LEN=3),
INTENT(INOUT) :: IDFLD
627 CHARACTER*(*),
INTENT(IN) :: INXOUT
628 INTEGER,
INTENT(OUT) :: IERR
634 INTEGER,
SAVE :: IENT = 0
643 CALL strace (ient,
'W3FLDTIDE1')
648 IF (inxout.NE.
'READ' .AND. inxout.NE.
'WRITE')
GOTO 801
649 IF ( idfld.NE.
'LEV' .AND. idfld.NE.
'CUR' .AND. &
650 idfld.NE.
'WND' .AND. idfld.NE.
'WNS' .AND. &
651 idfld.NE.
'ICE' .AND. idfld.NE.
'TAU' .AND. &
652 idfld.NE.
'RHO' .AND. idfld.NE.
'DT0' .AND. &
653 idfld.NE.
'DT1' .AND. idfld.NE.
'DT2' .AND. &
654 idfld.NE.
'ISI' )
GOTO 802
655 WRITE = inxout .EQ.
'WRITE'
659 WRITE (nds,err=804,iostat=ierr) &
662 READ (nds,
END=806,ERR=805,IOSTAT=IERR) &
677 IF ( ndse .GE. 0 )
WRITE (ndse,1001) inxout
682 IF ( ndse .GE. 0 )
WRITE (ndse,1002) idfld
687 IF ( ndse .GE. 0 )
WRITE (ndse,1004) idfld, ierr
692 IF ( ndse .GE. 0 )
WRITE (ndse,1005) idfld, ierr
697 IF ( ndse .GE. 0 )
WRITE (ndse,1006) idfld
703 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ &
704 ' ILLEGAL INXOUT STRING : ',a/)
705 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ &
706 ' ILLEGAL FIELD ID STRING : ',a/)
707 1004
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ &
708 ' ERROR IN WRITING TO ',a,
' FILE, IOSTAT =',i6/)
709 1005
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ &
710 ' ERROR IN READING ',a,
' FILE, IOSTAT =',i6/)
712 1006
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE1 : '/ &
713 ' PREMATURE END OF ',a,
' FILE'/)
721 SUBROUTINE w3fldtide2 ( INXOUT, NDS, NDST, NDSE, NX, NY, IDFLD, IDAT, IERR )
817 INTEGER,
INTENT(IN) :: NDS, NDST, NDSE, NX, NY, IDAT
818 CHARACTER(LEN=3),
INTENT(INOUT) :: IDFLD
819 CHARACTER*(*),
INTENT(IN) :: INXOUT
820 INTEGER,
INTENT(OUT) :: IERR
826 INTEGER,
SAVE :: IENT = 0
829 INTEGER :: I, IX, TIDE_MF1
830 CHARACTER(LEN=100) :: LIST(70)
835 CALL strace (ient,
'W3FLDTIDE2')
840 IF (inxout.NE.
'READ' .AND. inxout.NE.
'WRITE')
GOTO 801
841 IF ( idfld.NE.
'LEV' .AND. idfld.NE.
'CUR' .AND. &
842 idfld.NE.
'WND' .AND. idfld.NE.
'WNS' .AND. &
843 idfld.NE.
'ICE' .AND. idfld.NE.
'TAU' .AND. &
844 idfld.NE.
'RHO' .AND. idfld.NE.
'DT0' .AND. &
845 idfld.NE.
'DT1' .AND. idfld.NE.
'DT2' .AND. &
846 idfld.NE.
'ISI' )
GOTO 802
847 WRITE = inxout .EQ.
'WRITE'
851 WRITE (nds,err=804,iostat=ierr) &
857 READ (nds,
END=806,ERR=805,IOSTAT=IERR) &
858 tide_freqc,tidecon_namei(:),tidal_const(:,:,:,:,:)
862 list(i)=tidecon_namei(i)
864 CALL tide_find_indices_analysis(list)
865 IF (tide_mf1.NE.tide_mf)
GOTO 807
866 CALL tide_set_indices
867 IF(idfld.EQ.
'LEV')
THEN
868 IF (idat.EQ.1) wltide(:,:,:,:)=tidal_const(:,:,:,1,:)
870 IF (idat.EQ.1) cxtide(:,:,:,:)=tidal_const(:,:,:,1,:)
871 IF (idat.EQ.1) cytide(:,:,:,:)=tidal_const(:,:,:,2,:)
877 WRITE(ndst,*)
'Tidal constituents for IX = 1:', idfld,
' ',tidecon_name(i),tidal_const(1,1,i,1,1),tidal_const(1,1,i,1,2), &
878 '##',tidal_const(1,1,i,2,1),tidal_const(1,1,i,2,2)
881 WRITE(ndst,*)
'Tidal constituents for IX = 2:', idfld,
' ',tidecon_name(i),tidal_const(2,1,i,1,1),tidal_const(2,1,i,1,2), &
882 '##',tidal_const(2,1,i,2,1),tidal_const(2,1,i,2,2)
885 IF (idfld.EQ.
'CUR')
WRITE (989,
'(I10,X,176F10.3)') ix,cxtide(ix,1,:,1),cytide(ix,1,:,1), &
886 cxtide(ix,1,:,2),cytide(ix,1,:,2)
888 IF (idfld.EQ.
'CUR')
WRITE(988,
'(F10.3,/)') cxtide(:,1,15,1)
889 IF (idfld.EQ.
'CUR')
WRITE(988,
'(F10.3,/)') cxtide(:,1,15,2)
901 IF ( ndse .GE. 0 )
WRITE (ndse,1001) inxout
906 IF ( ndse .GE. 0 )
WRITE (ndse,1002) idfld
911 IF ( ndse .GE. 0 )
WRITE (ndse,1004) idfld, ierr
916 IF ( ndse .GE. 0 )
WRITE (ndse,1005) idfld, ierr
921 IF ( ndse .GE. 0 )
WRITE (ndse,1006) idfld
927 IF ( ndse .GE. 0 )
WRITE (ndse,1007) tidecon_namei(:)
934 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE2 : '/ &
935 ' ILLEGAL INXOUT STRING : ',a/)
936 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE2 : '/ &
937 ' ILLEGAL FIELD ID STRING : ',a/)
938 1004
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE2 : '/ &
939 ' ERROR IN WRITING TO ',a,
' FILE, IOSTAT =',i6/)
940 1005
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE2 : '/ &
941 ' ERROR IN READING ',a,
' FILE, IOSTAT =',i6/)
942 1006
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE2 : '/ &
943 ' PREMATURE END OF ',a,
' FILE'/)
945 1007
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDTIDE2 : '/ &
946 ' TIDAL CONSTITUENTS NOT RECOGNIZED ',a /)
954 SUBROUTINE w3fldg (INXOUT, IDFLD, NDS, NDST, NDSE, MX, MY, &
955 NX, NY, T0, TN, TF0, FX0, FY0, FA0, &
956 TFN, FXN, FYN, FAN, IERR, FLAGSC &
1094 INTEGER,
INTENT(IN) :: NDS, NDST, NDSE, MX, MY, &
1095 NX, NY, T0(2), TN(2)
1096 INTEGER,
INTENT(INOUT) :: TF0(2), TFN(2)
1097 INTEGER,
INTENT(OUT) :: IERR
1098 REAL,
INTENT(INOUT) :: FX0(MX,MY), FY0(MX,MY), &
1099 FXN(MX,MY), FYN(MX,MY), &
1100 FA0(MX,MY), FAN(MX,MY)
1101 CHARACTER,
INTENT(IN) :: INXOUT*(*)
1102 CHARACTER(LEN=3),
INTENT(IN) :: IDFLD
1103 LOGICAL,
INTENT(INOUT),
OPTIONAL :: FLAGSC
1105 INTEGER,
INTENT(IN),
OPTIONAL :: COUPL_COMM
1112 INTEGER :: IX, IY, J, ISTAT
1114 INTEGER,
SAVE :: IENT = 0
1117 LOGICAL :: WRITE, FL2D, FLFRST, FLBE, FLST, &
1119 LOGICAL,
PARAMETER :: FLAGSC_DEFAULT = .false.
1124 CALL strace (ient,
'W3FLDG')
1130 WRITE (ndst,9000) inxout, idfld, nds, ndst, ndse, mx, my, &
1131 nx, ny, tf0, tfn, ierr
1136 IF (inxout.NE.
'READ' .AND. inxout.NE.
'WRITE')
GOTO 801
1137 IF ( idfld.NE.
'IC1' .AND. idfld.NE.
'IC2' .AND. &
1138 idfld.NE.
'IC3' .AND. idfld.NE.
'IC4' .AND. &
1139 idfld.NE.
'IC5' .AND. idfld.NE.
'MDN' .AND. &
1140 idfld.NE.
'MTH' .AND. idfld.NE.
'MVS' .AND. &
1141 idfld.NE.
'LEV' .AND. idfld.NE.
'CUR' .AND. &
1142 idfld.NE.
'WND' .AND. idfld.NE.
'WNS' .AND. &
1143 idfld.NE.
'ICE' .AND. idfld.NE.
'ISI' .AND. &
1144 idfld.NE.
'TAU' .AND. idfld.NE.
'RHO' )
GOTO 802
1148 WRITE = inxout .EQ.
'WRITE'
1149 fl2d = idfld.EQ.
'CUR' .OR. idfld.EQ.
'WND' .OR. idfld.EQ.
'WNS' &
1150 .OR. idfld.EQ.
'ISI' .OR. idfld.EQ.
'TAU'
1151 flbe = idfld.EQ.
'ISI'
1152 flst = idfld.EQ.
'WNS'
1154 IF ( .NOT.
PRESENT(flagsc) )
THEN
1155 flcoupl=flagsc_default
1164 flinterp = idfld.EQ.
'CUR' .OR. idfld.EQ.
'WND' .OR. idfld.EQ.
'WNS' &
1165 .OR. idfld.EQ.
'TAU' .OR. idfld.EQ.
'RHO'
1168 IF (flcoupl) flinterp = .false.
1170 flfrst = tfn(1) .EQ. -1
1173 WRITE (ndst,9001)
WRITE, fl2d, flbe, flst, flfrst
1182 IF ( (.NOT.write) .AND. flinterp )
THEN
1191 IF ( tfn(1) .NE. -1 )
THEN
1194 fx0(ix,iy) = fxn(ix,iy)
1195 IF (fl2d) fy0(ix,iy) = fyn(ix,iy)
1197 IF( flst .OR. .NOT.fl2d )
THEN
1199 fa0(ix,iy) = fan(ix,iy)
1217 WRITE (ndst,9030) tf0
1219 WRITE (nds,err=803,iostat=istat) tf0
1220 IF ( .NOT. fl2d )
THEN
1222 WRITE (nds,err=804,iostat=istat) &
1223 ((fa0(ix,iy),ix=1,nx),iy=1,ny)
1226 WRITE (nds,err=804,iostat=istat) &
1227 ((fx0(ix,iy),ix=1,nx),iy=1,ny)
1229 WRITE (nds,err=804,iostat=istat) &
1230 ((fy0(ix,iy),ix=1,nx),iy=1,ny)
1232 IF ( flst )
WRITE (nds,err=804,iostat=istat) &
1233 ((fa0(ix,iy),ix=1,nx),iy=1,ny)
1253 idfld, fxn, fyn, fan)
1258 idfld, fxn, fyn, fan)
1263 idfld, fxn, fyn, fan)
1274 READ (nds,
END=800,ERR=805,IOSTAT=ISTAT) tfn
1276 WRITE (ndst,9031) tfn
1278 IF ( .NOT. fl2d )
THEN
1282 READ (nds,
END=806,ERR=807,IOSTAT=ISTAT) &
1283 ((fan(ix,iy),ix=1,nx),iy=1,ny)
1286 READ (nds,
END=806,ERR=807,IOSTAT=ISTAT) &
1287 ((fxn(ix,iy),ix=1,nx),iy=1,ny)
1289 READ (nds,
END=806,ERR=807,IOSTAT=ISTAT) &
1290 ((fyn(ix,iy),ix=1,nx),iy=1,ny)
1294 IF (flbe) fan(:,:) = fxn(:,:)
1299 IF ( flst )
READ (nds,
END=806,ERR=807,IOSTAT=ISTAT) &
1300 ((fan(ix,iy),ix=1,nx),iy=1,ny)
1308 dttst = dsec21( t0 , tfn )
1312 IF ( .NOT.flinterp .AND. flfrst .AND. dttst .EQ. 0. )
EXIT
1316 IF ( dttst .GT. 0. )
EXIT
1329 IF ( .NOT.
WRITE .AND. flinterp .AND. tf0(1) .EQ. -1 )
THEN
1339 fx0(ix,iy) = fxn(ix,iy)
1340 IF (fl2d) fy0(ix,iy) = fyn(ix,iy)
1342 IF( flst .OR. .NOT.fl2d )
THEN
1344 fa0(ix,iy) = fan(ix,iy)
1356 IF ( flinterp )
THEN
1357 WRITE (ndst,9041) tf0, tfn
1359 WRITE (ndst,9042) tfn
1372 IF ( flinterp )
THEN
1375 CALL tick21 ( tfn , 1. )
1378 WRITE (ndst,9032) tfn, ierr
1381 IF ( flinterp )
THEN
1391 IF ( ndse .GE. 0 )
WRITE (ndse,1001) inxout
1396 IF ( ndse .GE. 0 )
WRITE (ndse,1002) idfld
1401 IF ( ndse .GE. 0 )
WRITE (ndse,1003) istat
1406 IF ( ndse .GE. 0 )
WRITE (ndse,1004) j, istat
1411 IF ( ndse .GE. 0 )
WRITE (ndse,1005) istat
1416 IF ( ndse .GE. 0 )
WRITE (ndse,1006) j, istat
1421 IF ( ndse .GE. 0 )
WRITE (ndse,1007) j, istat
1427 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDG : '/ &
1428 ' ILLEGAL INXOUT STRING : ',a/)
1429 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDG : '/ &
1430 ' ILLEGAL FIELD ID STRING : ',a/)
1431 1003
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDG : '/ &
1432 ' ERROR IN WRITING TIME, IOSTAT =',i6/)
1433 1004
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDG : '/ &
1434 ' ERROR IN WRITING FIELD ',i1,
', IOSTAT =',i6/)
1435 1005
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDG : '/ &
1436 ' ERROR IN READING TIME, IOSTAT =',i6/)
1437 1006
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDG : '/ &
1438 ' PRMATURE EOF READING FIELD ',i1,
', IOSTAT =',i6/)
1439 1007
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDG : '/ &
1440 ' ERROR IN READING FIELD ',i1,
', IOSTAT =',i6/)
1443 9000
FORMAT (
' TEST W3FLDG : INXOUT : ',a/ &
1445 ' NDS(T/E) :',3i4/ &
1448 ' TF0 :',i9.8,i7.6/ &
1449 ' TFN :',i9.8,i7.6/ &
1451 9001
FORMAT (
' TEST W3FLDG : WRITE :',l4/ &
1456 9020
FORMAT (
' TEST W3FLDG : FIELD SHIFTED')
1457 9021
FORMAT (
' NO FIELD TO SHIFT')
1458 9030
FORMAT (
' TEST W3FLDG : WRITE TIME : ',i8,i7.6)
1459 9031
FORMAT (
' TEST W3FLDG : NEW TIME : ',i8,i7.6)
1460 9032
FORMAT (
' TEST W3FLDG : NEW TIME : ',i8,i7.6, &
1461 ' EOF (IERR =',i3,
')')
1462 9040
FORMAT (
' TEST W3FLDG : FILLING IN FIRST FIELD')
1463 9041
FORMAT (
' TEST W3FLDG : FINAL TIMES: ',i8,i7.6/ &
1465 9042
FORMAT (
' TEST W3FLDG : FINAL TIME : ',i8,i7.6)
1472 SUBROUTINE w3fldd (INXOUT, IDFLD, NDS, NDST, NDSE, TIME, TD, &
1473 NR, ND, NDOUT, DATA, IERR )
1576 INTEGER,
INTENT(IN) :: NDS, NDST, NDSE, TIME(2), NR, ND
1577 INTEGER,
INTENT(INOUT) :: TD(2), NDOUT
1578 INTEGER,
INTENT(OUT) :: IERR
1579 REAL,
INTENT(INOUT) :: DATA(NR,ND)
1580 CHARACTER,
INTENT(IN) :: INXOUT*(*)
1581 CHARACTER(LEN=3),
INTENT(IN) :: IDFLD
1586 INTEGER :: ISTAT, NRT
1588 INTEGER,
SAVE :: IENT = 0
1591 LOGICAL :: WRITE, SIZE
1596 CALL strace (ient,
'W3FLDD')
1602 WRITE (ndst,9000) inxout, idfld, nds, ndst, ndse, nr, nd, &
1608 IF ( inxout.NE.
'READ' .AND. inxout.NE.
'WRITE' .AND. &
1609 inxout.NE.
'SIZE' )
GOTO 801
1610 IF ( idfld.NE.
'DT0' .AND. idfld.NE.
'DT1' .AND. &
1611 idfld.NE.
'DT2' )
GOTO 802
1615 WRITE = inxout .EQ.
'WRITE'
1616 SIZE = inxout .EQ.
'SIZE'
1619 WRITE (ndst,9001)
WRITE,
SIZE
1627 WRITE (ndst,9020) td, nd
1629 WRITE (nds,err=803,iostat=istat) td, nd
1630 WRITE (nds,err=804,iostat=istat)
DATA
1634 ELSE IF (
SIZE )
THEN
1637 READ (nds,
END=800,ERR=805,IOSTAT=ISTAT) TD, ndout
1639 WRITE (ndst,9021) td, ndout
1644 dttst = dsec21( time , td )
1645 IF ( dttst.LT.0. .OR. ndout.EQ.0 )
THEN
1646 IF (ndout.GT.0)
READ (nds,
END=806,ERR=807,IOSTAT=ISTAT)
1654 READ (nds,
END=806,ERR=807,IOSTAT=ISTAT) data
1656 WRITE (ndst,9030) td
1673 IF ( ndse .GE. 0 )
WRITE (ndse,1001) inxout
1678 IF ( ndse .GE. 0 )
WRITE (ndse,1002) idfld
1683 IF ( ndse .GE. 0 )
WRITE (ndse,1003) istat
1688 IF ( ndse .GE. 0 )
WRITE (ndse,1004) istat
1693 IF ( ndse .GE. 0 )
WRITE (ndse,1005) istat
1698 IF ( ndse .GE. 0 )
WRITE (ndse,1006) istat
1703 IF ( ndse .GE. 0 )
WRITE (ndse,1007) istat
1709 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDD : '/ &
1710 ' ILLEGAL INXOUT STRING : ',a/)
1711 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDD : '/ &
1712 ' ILLEGAL FIELD ID STRING : ',a/)
1713 1003
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDD : '/ &
1714 ' ERROR IN WRITING TIME, IOSTAT =',i6/)
1715 1004
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDD : '/ &
1716 ' ERROR IN WRITING DATA, IOSTAT =',i6/)
1717 1005
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDD : '/ &
1718 ' ERROR IN READING TIME, IOSTAT =',i6/)
1719 1006
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDD : '/ &
1720 ' PRMATURE EOF READING DATA, IOSTAT =',i6/)
1721 1007
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDD : '/ &
1722 ' ERROR IN READING DATA, IOSTAT =',i6/)
1725 9000
FORMAT (
' TEST W3FLDD : INXOUT : ',a/ &
1727 ' NDS(T/E) :',3i4/ &
1729 ' TIME :',i8,i7.6/ &
1732 9001
FORMAT (
' TEST W3FLDD : WRITE :',l4/ &
1734 9020
FORMAT (
' TEST W3FLDD : WRITE TIME : ',i8,i7.6/ &
1736 9021
FORMAT (
' TEST W3FLDD : NEW TIME : ',i8,i7.6/ &
1738 9030
FORMAT (
' TEST W3FLDD : FINAL TIME : ',i8,i7.6)
1745 SUBROUTINE w3fldp ( NDSM, NDST, NDSE, IERR, FLAGLL, &
1747 TLAT, TLON, MAPOVR, ILAND, MXI, MYI, &
1748 NXI, NYI, CLOSED, ALAT, ALON, MASK, &
1749 RD11, RD21, RD12, RD22, IX1, IX2, IY1, IY2 )
1897 INTEGER,
INTENT(IN) :: NDSM, NDST, NDSE, MX, MY, NX, NY, &
1898 MXI, MYI, NXI, NYI, MASK(MXI,MYI)
1899 INTEGER,
INTENT(INOUT) :: MAPOVR(MX,MY), ILAND
1900 INTEGER,
INTENT(OUT) :: IERR, IX1(MX,MY), IX2(MX,MY), &
1901 IY1(MX,MY), IY2(MX,MY)
1902 REAL,
INTENT(IN) :: TLAT(MY,MX), TLON(MY,MX)
1903 REAL,
INTENT(IN) ,
TARGET :: ALAT(MXI,MYI)
1904 REAL,
INTENT(INOUT),
TARGET :: ALON(MXI,MYI)
1905 REAL,
INTENT(OUT) :: RD11(MX,MY), RD12(MX,MY), &
1906 RD21(MX,MY), RD22(MX,MY)
1907 LOGICAL,
INTENT(IN) :: FLAGLL, CLOSED
1913 INTEGER,
SAVE :: IENT = 0
1916 INTEGER :: IX, IY, I, J, NNBR, II(4), JJ(4), &
1917 MSKC, IFOUND, IMASK, ICOR1
1919 REAL,
POINTER :: PLAT(:,:), PLON(:,:)
1920 LOGICAL :: INGRID, LMSK(MXI,MYI)
1921 LOGICAL :: LDBG = .false.
1922 INTEGER,
PARAMETER :: NNBR_MAX = 2
1928 CALL strace (ient,
'W3FLDP')
1932 WRITE (ndst,9000) ndsm, ndst, ndse, mx, my, nx, ny, iland, &
1933 mxi, myi, nxi, nyi, closed
1947 IF ( flagll .AND. closed ) iclo =
iclo_smpl
1970 gsu = w3gsuc( .true., flagll, iclo, plon, plat )
1985 WRITE (ndst,9010) ix, iy, x, y
1990 IF ( mapovr(ix,iy) .NE. iland )
THEN
1995 ingrid = w3grmp( gsu, x, y, ii, jj, rr, &
1996 mask=lmsk, mskc=mskc, nnbr=nnbr, debug=ldbg )
2004 IF ( mskc.EQ.
mskc_part ) imask = imask + 1
2022 IF ( nnbr .GT. 0 )
THEN
2027 IF ( nnbr .GT. 1 )
THEN
2033 IF ( nnbr .EQ. 1 )
THEN
2035 ix1(ix,iy), iy1(ix,iy), rd11(ix,iy)
2038 ix1(ix,iy), iy1(ix,iy), rd11(ix,iy), &
2039 ix2(ix,iy), iy2(ix,iy), rd22(ix,iy)
2044 WRITE (ndse,910) ix, iy, x, y, &
2045 ii(1), ii(2), jj(1), jj(2)
2052 ix1(ix,iy), iy1(ix,iy), rd11(ix,iy), &
2053 ix2(ix,iy), iy1(ix,iy), rd21(ix,iy), &
2054 ix1(ix,iy), iy2(ix,iy), rd12(ix,iy), &
2055 ix2(ix,iy), iy2(ix,iy), rd22(ix,iy)
2060 mapovr(ix,iy) = mapovr(ix,iy) + 1
2070 WRITE (ndst,9020) ix, iy, x, y,
'LAND'
2082 IF (ndsm.NE.0)
WRITE (ndsm,900) ifound, imask, icor1, ierr
2092 900
FORMAT (/
' *** MESSAGE W3FLDP: FINAL SEA POINT COUNT :',i8/ &
2093 ' INTERPOLATION ACROSS SHORE:',i8/ &
2094 ' CORRECTED COASTAL POINTS :',i8/ &
2095 ' UNCORRECTABLE C. POINTS :',i8/)
2097 910
FORMAT (
' *** WARNING W3FLDP : SEA POINT ON LAND MASK ', &
2098 '(COULD NOT BE CORRECTED)'/ &
2099 ' COORDINATES IN OUTPUT GRID :',2i4,2f8.2/ &
2100 ' X-COUNTERS IN INPUT GRID :',2i4/ &
2101 ' Y-COUNTERS IN INPUT GRID :',2i4)
2104 9000
FORMAT (
' TEST W3FLDP : NDSM/T/E : ',3i8/ &
2108 ' MXI, MYI : ',2i8/ &
2109 ' NXI, NYI : ',2i8/ &
2111 9001
FORMAT (
' TEST W3FLDP : GRID SEARCH INFO -- OUTPUT FROM W3GSUP')
2115 9010
FORMAT (
' TEST W3FLDP : IX =',i4,
' IY =',i4, &
2116 ' LONGITUDE =',f8.2,
' LATITUDE =',f8.2, &
2117 ' ================================')
2118 9020
FORMAT (
' TEST W3FLDP : IX =',i4,
' IY =',i4, &
2119 ' LONGITUDE =',f8.2,
' LATITUDE =',f8.2, &
2121 9021
FORMAT (
' ***** OUT OF RANGE *****')
2125 9031
FORMAT (
' TEST W3FLDP : FINAL INTERPOLATION DATA (IX,IY,R)', &
2127 9043
FORMAT (
' TEST W3FLDP : CORRECTED INTERPOLATION '/ &
2128 ' POINT 1 : ',2i4,f6.2)
2129 9044
FORMAT (
' TEST W3FLDP : CORRECTED INTERPOLATION '/ &
2130 ' POINT 1 : ',2i4,f6.2/ &
2131 ' POINT 2 : ',2i4,f6.2)
2138 SUBROUTINE w3fldh (J, NDST, NDSE, MX, MY, NX, NY, T0, TN, &
2139 NH, NHM, THO, HA, HD, HS, TF0, FX0, FY0, FS0,&
2140 TFN, FXN, FYN, FSN, IERR)
2255 INTEGER,
INTENT(IN) :: J, NDST, NDSE, MX, MY, NX, NY, &
2257 INTEGER,
INTENT(INOUT) :: NH, THO(2,-7:10,NHM), TF0(2), TFN(2)
2258 INTEGER,
INTENT(OUT) :: IERR
2259 REAL,
INTENT(INOUT) :: HA(NHM,-7:10), HD(NHM,-7:10), HS(NHM,-7:10), &
2260 FX0(MX,MY), FY0(MX,MY), FS0(MX,MY), &
2261 FXN(MX,MY), FYN(MX,MY), FSN(MX,MY)
2266 INTEGER :: IX, IY, I
2268 INTEGER,
SAVE :: IENT = 0
2270 REAL :: X, Y, DIR, DTTST, DERA
2276 CALL strace (ient,
'W3FLDH')
2285 WRITE (ndst,9000) j, ndst, ndse, mx, my, nx, ny, t0, tn, &
2286 nh, nhm, tf0, tfn, ierr
2291 IF ( j.LT.-7 .OR. j .GT.10 )
GOTO 801
2292 flfrst = tfn(1) .EQ. -1
2295 WRITE (ndst,9001) flfrst
2306 IF ( tfn(1) .NE. -1 )
THEN
2307 IF ( (j .EQ. 2) .OR. (j .EQ. 5) )
THEN
2310 fx0(ix,iy) = fxn(ix,iy)
2311 fy0(ix,iy) = fyn(ix,iy)
2317 ELSE IF ( j .EQ. 3 )
THEN
2320 fx0(ix,iy) = fxn(ix,iy)
2321 fy0(ix,iy) = fyn(ix,iy)
2322 fs0(ix,iy) = fsn(ix,iy)
2331 IF ( j .NE. 1 )
WRITE (ndst,9021)
2337 IF ( nh .NE. 0. )
THEN
2341 IF ( (j.LE.1) .OR. (j.EQ.4) .OR. (j.EQ.6) )
THEN
2344 fsn(ix,iy) = ha(1,j)
2348 WRITE (ndst,9050) ha(1,j)
2352 IF ( (j .EQ. 2) .OR. (j .EQ. 5) )
THEN
2353 dir = ( 270. - hd(1,j) ) * dera
2354 x = ha(1,j) * cos(dir)
2355 y = ha(1,j) * sin(dir)
2363 WRITE (ndst,9050) x, y
2367 IF ( j .EQ. 3 )
THEN
2368 dir = ( 270. - hd(1,j) ) * dera
2369 x = ha(1,j) * cos(dir)
2370 y = ha(1,j) * sin(dir)
2375 fsn(ix,iy) = hs(1,j)
2379 WRITE (ndst,9050) x, y, hs(1,j)
2386 tho(1,j,i) = tho(1,j,i+1)
2387 tho(2,j,i) = tho(2,j,i+1)
2394 WRITE (ndst,9051) tfn
2404 WRITE (ndst,9052) tfn, ierr
2412 dttst =
dsec21( t0 , tfn )
2415 IF ( dttst .GT. 0. )
EXIT
2419 IF ( j.LE.(1).OR.(j.EQ.4).OR.(j.EQ.6) )
THEN
2420 IF (flfrst .AND. dttst.EQ.0. )
EXIT
2426 IF ( j.NE.1 .AND. tfn(1) .EQ. -1 )
THEN
2435 fx0(ix,iy) = fxn(ix,iy)
2436 fy0(ix,iy) = fyn(ix,iy)
2437 fs0(ix,iy) = fsn(ix,iy)
2443 IF ( j .GT. 1 )
THEN
2444 WRITE (ndst,9061) tf0, tfn
2446 WRITE (ndst,9062) tfn
2455 IF ( ndse .GE. 0 )
WRITE (ndse,1001) j
2461 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDH : '/ &
2462 ' ILLEGAL FIELD ID NR : ',i4/)
2465 9000
FORMAT (
' TEST W3FLDH : J, NDST/E : ',3i4/ &
2466 ' DIMENSIONS : ',4i4/ &
2470 ' TF0 : ',i8,i7.6/ &
2471 ' TFN, IERR : ',i8,i7.6,i4)
2472 9001
FORMAT (
' TEST W3FLDH : FIRST FIELD : ',l2)
2473 9020
FORMAT (
' TEST W3FLDH : FIELD SHIFTED')
2474 9021
FORMAT (
' NO FIELD TO SHIFT')
2475 9050
FORMAT (
' TEST W3FLDH : NEW VALUE(S) : ',3f8.2)
2476 9051
FORMAT (
' TEST W3FLDH : NEW TIME : ',i8,i7.6)
2477 9052
FORMAT (
' TEST W3FLDH : NEW TIME : ',i8,i7.6, &
2478 ' LAST FIELD (IERR =',i3,
')')
2479 9060
FORMAT (
' TEST W3FLDH : FILLING IN FIRST FIELD')
2480 9061
FORMAT (
' TEST W3FLDH : FINAL TIMES : ',i8,i7.6/ &
2482 9062
FORMAT (
' TEST W3FLDH : FINAL TIME : ',i8,i7.6)
2489 SUBROUTINE w3fldm (J, NDST, NDSE, T0, TN, NH, NHM, THO, HA, HD, &
2490 TF0, A0, D0, TFN, AN, DN, IERR)
2579 INTEGER,
INTENT(IN) :: J, NDST, NDSE, T0(2), TN(2), NHM
2580 INTEGER,
INTENT(INOUT) :: NH, THO(2,-7:10,NHM), TF0(2), TFN(2)
2581 INTEGER,
INTENT(OUT) :: IERR
2582 REAL,
INTENT(INOUT) :: HA(NHM,-7:10), HD(NHM,-7:10), A0, AN, D0, DN
2589 INTEGER,
SAVE :: IENT = 0
2597 CALL strace (ient,
'W3FLDM')
2604 WRITE (ndst,9000) j, ndst, ndse, t0, tn, nh, nhm, tf0, tfn, ierr
2609 IF ( j .NE. 4 )
GOTO 801
2610 flfrst = tfn(1) .EQ. -1
2613 WRITE (ndst,9001) flfrst
2624 IF ( tfn(1) .NE. -1 )
THEN
2636 IF ( nh .NE. 0. )
THEN
2640 dn = ( 90. - hd(1,j) ) * dera
2642 WRITE (ndst,9050) an, dn
2648 tho(1,j,i) = tho(1,j,i+1)
2649 tho(2,j,i) = tho(2,j,i+1)
2655 WRITE (ndst,9051) tfn
2665 WRITE (ndst,9052) tfn, ierr
2672 dttst =
dsec21( t0 , tfn )
2673 IF ( dttst .LE. 0. )
GOTO 100
2677 IF ( tf0(1).EQ.-1 )
THEN
2688 WRITE (ndst,9061) tf0, tfn
2696 IF ( ndse .GE. 0 )
WRITE (ndse,1001) j
2702 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3FLDM : '/ &
2703 ' ILLEGAL FIELD ID NR : ',i4/)
2706 9000
FORMAT (
' TEST W3FLDM : J, NDST/E : ',3i4/ &
2710 ' TF0 : ',i8,i7.6/ &
2711 ' TFN, IERR : ',i8,i7.6,i4)
2712 9001
FORMAT (
' TEST W3FLDM : FIRST FIELD : ',l2)
2713 9020
FORMAT (
' TEST W3FLDM : FIELD SHIFTED')
2714 9021
FORMAT (
' NO FIELD TO SHIFT')
2715 9050
FORMAT (
' TEST W3FLDM : NEW VALUE(S) : ',2f8.2)
2716 9051
FORMAT (
' TEST W3FLDM : NEW TIME : ',i8,i7.6)
2717 9052
FORMAT (
' TEST W3FLDM : NEW TIME : ',i8,i7.6, &
2718 ' LAST FIELD (IERR =',i3,
')')
2719 9060
FORMAT (
' TEST W3FLDM : FILLING IN FIRST FIELD')
2720 9061
FORMAT (
' TEST W3FLDM : FINAL TIMES : ',i8,i7.6/ &