183 INTEGER,
SAVE :: ient = 0
186 INTEGER,
ALLOCATABLE :: ipbpi(:,:)
187 INTEGER,
ALLOCATABLE :: ipbpo(:,:)
201 REAL,
ALLOCATABLE :: lats(:)
202 REAL,
ALLOCATABLE :: lons(:)
203 REAL,
ALLOCATABLE :: spec2d(:,:)
204 REAL,
ALLOCATABLE :: freq(:)
205 REAL,
ALLOCATABLE :: theta(:)
206 REAL,
ALLOCATABLE :: xbpi(:)
207 REAL,
ALLOCATABLE :: ybpi(:)
208 REAL,
ALLOCATABLE :: rdbpi(:,:)
209 REAL,
ALLOCATABLE :: xbpo(:)
210 REAL,
ALLOCATABLE :: ybpo(:)
211 REAL,
ALLOCATABLE :: rdbpo(:,:)
212 REAL,
ALLOCATABLE :: abpin(:,:)
214 REAL,
ALLOCATABLE :: xtmp(:)
215 REAL,
ALLOCATABLE :: ytmp(:)
216 REAL,
ALLOCATABLE :: angtmp(:)
220 CHARACTER(LEN=80) :: line
221 CHARACTER(LEN=128) :: bndfile
222 CHARACTER(LEN=5) :: inxout
223 CHARACTER(LEN=10) :: vertest
224 CHARACTER(LEN=32) :: idtst
225 CHARACTER(LEN=120) :: filename
226 CHARACTER(LEN=120) :: string1
227 CHARACTER(LEN=120) :: buoyname
230 CHARACTER(LEN=120),
ALLOCATABLE :: specfiles(:)
240 CALL w3nmod ( 1, 6, 6 )
241 CALL w3setg ( 1, 6, 6 )
247 CALL w3seto ( 1, 6, 6 )
257 CALL itrace ( ndstrc, ntrace )
260 CALL strace (ient,
'W3BOUND')
268 CALL w3iogr (
'READ', ndsm )
269 WRITE (
ndso,920) gname
272 isrtd =
polat .LT. 90.0
280 INQUIRE(
file=trim(
fnmpre)//
"ww3_bound.nml", exist=flgnml)
285 inxout = nml_bound%MODE
287 verbose = nml_bound%VERBOSE
288 bndfile = nml_bound%FILE
291 OPEN(ndsl,
file=trim(bndfile),status=
'OLD',err=809,iostat=ierr)
294 READ (ndsl,*,
END=400,ERR=802)
298 ALLOCATE(specfiles(nbo2))
301 READ (ndsl,
'(A120)',
END=801,ERR=802) SPECFILES(I)
310 IF (.NOT. flgnml)
THEN
311 OPEN (ndsi,
file=trim(fnmpre)//
'ww3_bound.inp',status=
'OLD',err=803,iostat=ierr)
314 READ (ndsi,
'(A)',
END=801,ERR=802) comstr
315 IF (comstr.EQ.
' ') comstr =
'$'
318 CALL nextln ( comstr , ndsi , ndse )
320 CALL nextln ( comstr , ndsi , ndse )
322 CALL nextln ( comstr , ndsi , ndse )
323 READ (ndsi,*) verbose
324 CALL nextln ( comstr , ndsi , ndse )
332 OPEN (ndss,
file=
'ww3_bound.scratch',form=
'FORMATTED', &
334 IF ( iloop .EQ. 1 )
THEN
338 ALLOCATE(specfiles(nbo2))
345 CALL nextln ( comstr , ndsi2 , ndse )
346 READ (ndsi2,
'(A120)') filename
347 jj = len_trim(filename)
348 IF ( iloop .EQ. 1 )
THEN
350 READ (ndsi,
'(A)') line
351 WRITE (ndss,
'(A)') line
353 IF (filename(:jj).EQ.
"'STOPSTRING'")
EXIT
355 IF (iloop.EQ.1) cycle
356 specfiles(nbo2)=filename
359 IF ( iloop .EQ. 1 )
CLOSE ( ndss)
361 IF ( iloop .EQ. 2 )
CLOSE ( ndss, status=
'DELETE' )
371 IF ( inxout.EQ.
'READ')
THEN
372 OPEN(ndsb,
file=
'nest.ww3',form=
'UNFORMATTED', convert=
file_endian,status=
'old')
373 READ(ndsb) idtst, vertest, nk1, nth1, xfr, fr1i, th1i, nbi
375 IF ( idtst .NE. idstrbc )
THEN
376 WRITE (ndso,901) idtst, idstrbc
378 WRITE(ndso,*)
"FORMAT VERSION: '",vertest,
"'"
379 WRITE(ndso,*)
"FILE TYPE: '",idtst,
"'"
380 IF (verbose.EQ.1)
WRITE(ndso,
'(A,2I5,3F12.6,I5)')
'NK,NTH,XFR, FR1I, TH1I, NBI :', &
381 nk1,nth1,xfr, fr1i, th1i, nbi
382 ALLOCATE (xbpi(nbi),ybpi(nbi))
383 ALLOCATE (ipbpi(nbi,4),rdbpi(nbi,4))
384 READ(ndsb) (xbpi(i),i=1,nbi), &
386 ((ipbpi(i,j),i=1,nbi),j=1,4), &
387 ((rdbpi(i,j),i=1,nbi),j=1,4)
388 IF (verbose.EQ.1)
WRITE(ndso,*)
'XBPI:',xbpi
389 IF (verbose.EQ.1)
WRITE(ndso,*)
'YBPI:',ybpi
390 IF (verbose.EQ.1)
WRITE(ndso,*)
'IPBPI:'
392 IF (verbose.EQ.1)
WRITE(ndso,*) i,
' interpolated from:',ipbpi(i,1:4)
393 IF (verbose.EQ.1)
WRITE(ndso,*) i,
' with coefficient :',rdbpi(i,1:4)
396 READ (ndsb) time2, nbi2
398 ALLOCATE (abpin(nspec1,nbi2))
401 READ (ndsb,iostat=ierr) time2, nbi2
403 IF (verbose.EQ.1)
WRITE(ndso,*)
'TIME2,NBI2:',time2, nbi2,ierr
405 READ (ndsb,iostat=ierr) abpin(:,ip)
413 IF ( inxout.EQ.
'WRITE')
THEN
422 IF (mapsta(iy,ix).EQ.2)
THEN
426 ALLOCATE(xbpo(nbo),ybpo(nbo))
428 IF (isrtd)
ALLOCATE(xtmp(nbo), ytmp(nbo), angtmp(nbo))
430 ALLOCATE (ipbpo(nbo,4),rdbpo(nbo,4))
435 IF (mapsta(iy,ix).EQ.2)
THEN
437 SELECT CASE ( gtype )
439 xbpo(ibo)=x0+sx*(ix-1)
440 ybpo(ibo)=y0+sy*(iy-1)
442 xbpo(ibo)= xgrd(iy,ix)
443 ybpo(ibo)= ygrd(iy,ix)
445 xbpo(ibo)= xgrd(1,ix)
446 ybpo(ibo)= ygrd(1,ix)
455 CALL w3eqtoll(ytmp, xtmp, ybpo, xbpo, angtmp, polat, polon, nbo)
456 DEALLOCATE(xtmp, ytmp, angtmp)
459 OPEN(ndsb,
file=
'nest.ww3',form=
'UNFORMATTED', convert=
file_endian,status=
'unknown')
460 ALLOCATE(lats(nbo2),lons(nbo2))
462 OPEN(200+ip,
file=specfiles(ip),status=
'old',iostat=ierr)
463 IF (verbose.EQ.1)
WRITE(ndso,
'(A,I5,3A,I5)') &
464 'IP, file, I/O stat:',ip,
', ', &
465 trim(specfiles(ip)),
', ',ierr
466 IF (ierr.NE.0)
GOTO 810
467 READ(200+ip,
'(A1,A22,A1,X,2I6)',iostat=ierr) &
468 space,string1,space,nki,nthi
469 IF (verbose.EQ.1)
WRITE(ndso,
'(A,3I5)')
'IP and spectral dimensions:',ip, nki,nthi
474 ALLOCATE (freq(nk1),theta(nth1))
475 ALLOCATE (spec2d(nk1,nth1))
476 ALLOCATE (abpin(nk*nth1,nbo2))
481 IF (nk1.NE.nki.OR.nth1.NE.nthi)
THEN
482 WRITE(ndse,
'(A,A,4I5)')
'ERROR, SPECTRAL GRID IN FILE:', &
483 trim(specfiles(ip)),nk1,nki,nth1,nthi
488 READ(200+ip,*) freq(1:nk1)
489 READ(200+ip,*) theta(1:nth1)
497 IF (nki.GT.nk)
GOTO 808
509 IF (abs((freq(ifmin+1)/freq(ifmin))-xfr).GT.0.005)
GOTO 806
516 IF (nthi.NE.nth)
GOTO 807
518 IF ((fr1-freq(1))/fr1.GT. 0.03)
THEN
520 IF (abs(freq(j)-fr1) .LT. abs(freq(ifmin)-fr1))
THEN
526 IF ((freq(1)-fr1)/fr1.GT. 0.03)
THEN
528 IF (abs(freq(j)-fr1*xfr**(j-1)) .LT. abs(freq(ifmin2)-fr1))
THEN
534 IF ((freq(nk1)-fr1*xfr**(nk-1))/freq(nk1) .GT.0.03)
THEN
536 IF (abs(freq(j)-fr1*xfr**(nk1-1)) .LT. abs(freq(ifmax)-fr1*xfr**(nk1-1)))
THEN
549 READ(200+ip,*,iostat=ierr) time2
555 IF (time1(1).NE.time2(1).OR.time1(2).NE.time2(2))
THEN
556 WRITE(ndse,*)
'AT POINT ',ip,
', BAD TIMES:',time1, time2
560 READ(200+ip,
'(A1,A10,A1,2F7.2,F10.1,F7.2,F6.1,F7.2,F6.1)') &
561 space,buoyname,space,lats(ip),lons(ip),depth,u10,udir,curr,currdir
565 IF(lons(ip) .LT. 0) lons(ip) = lons(ip) + 360.0
566 IF(lons(ip) .GT. 360) lons(ip) = lons(ip) - 360.0
569 READ(200+ip,*,iostat=ierr) spec2d
570 IF (ifmin2.GT.1)
THEN
574 abpin(1:(ifmin2-1)*nth,ip)=0.
578 abpin((i-ifmin+(ifmin2-1))*nth+j,ip)=spec2d(i,j)*
tpiinv
581 IF (ifmax-ifmin+ifmin2.LT.nk1)
THEN
583 abpin((ifmax-ifmin+ifmin2)*nth+1:nk1*nth,ip)=0.
593 IF (abs(theta(1)-0.5*
pi).LT.0.01) theta(1)=0.5*
pi
595 WRITE(ndsb) idstrbc, verbptbc, nk1, nth, xfr, freq(1), &
596 mod(2.5*
pi-theta(1),
tpi), nbo
608 dist=sqrt((lons(ip)-xbpo(ip1))**2+(lats(ip)-ybpo(ip1))**2)
609 IF (dmin.EQ.(360.+180.))
THEN
610 IF(dist.LT.dmin)
THEN
615 IF(dist.LT.dmin2)
THEN
616 IF(dist.LT.dmin)
THEN
617 ipbpo(ip1,2)=ipbpo(ip1,1)
634 IF (
interp.GT.1.AND.nbo2.GT.1)
THEN
635 dist=sqrt((lons(ipbpo(ip1,1))-lons(ipbpo(ip1,2)))**2 &
636 +(lats(ipbpo(ip1,1))-lats(ipbpo(ip1,2)))**2)
637 cos1=( (xbpo(ip1)-lons(ipbpo(ip1,1))) &
638 *(lons(ipbpo(ip1,2))-lons(ipbpo(ip1,1))) &
639 + (ybpo(ip1)-lats(ipbpo(ip1,1))) &
640 *(lats(ipbpo(ip1,2))-lats(ipbpo(ip1,1))))/(dist**2)
645 rdbpo(ip1,1)=1-min(1.,max(0.,cos1))
646 rdbpo(ip1,2)=min(1.,max(0.,cos1))
649 IF (verbose.EQ.1)
WRITE(ndso,*)
'IPBP:',ip1,(ipbpo(ip1,j),j=1,4)
650 IF (verbose.EQ.1)
WRITE(ndso,*)
'RDBP:',ip1,(rdbpo(ip1,j),j=1,4)
653 WRITE(ndsb) (xbpo(i),i=1,nbo), &
655 ((ipbpo(i,j),i=1,nbo),j=1,4),&
656 ((rdbpo(i,j),i=1,nbo),j=1,4)
659 WRITE(ndso,*)
'Writing boundary data for time:', time2, nbo2
660 WRITE(ndsb,iostat=ierr) time2, nbo2
662 WRITE (ndsb) abpin(:,ip)
681 WRITE (ndse,1002) ierr
689 WRITE (ndse,1006) xfr
693 WRITE (ndse,1007) nth, nthi
697 WRITE (ndse,1008) nk, nki
701 WRITE (ndse,1009) bndfile, ierr
705 WRITE (ndse,1010) specfiles(ip)
711 901
FORMAT (/
' *** WAVEWATCH-III ERROR IN W3IOBC :'/ &
712 ' ILEGAL IDSTR, READ : ',a/ &
715 920
FORMAT (
' Grid name : ',a/)
717 1001
FORMAT (/
' *** WAVEWATCH-III ERROR IN W3BOUND : '/ &
718 ' PREMATURE END OF INPUT FILE'/)
720 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3BOUND: '/ &
721 ' ERROR IN READING ',a,
' FROM INPUT FILE'/ &
724 1003
FORMAT (/
' *** WAVEWATCH III ERROR IN W3BOUNC : '/ &
725 ' ERROR IN OPENING INPUT FILE: ', a/ &
728 1006
FORMAT (/
' *** WAVEWATCH III ERROR IN W3BOUND: '/ &
729 ' ILLEGAL XFR, XFR =',f12.6/)
731 1007
FORMAT (/
' *** WAVEWATCH III ERROR IN W3BOUND: '/ &
732 ' ILLEGAL NTH, NTH =',i3,
' DIFFERS FROM NTHI =',i3/)
734 1008
FORMAT (/
' *** WAVEWATCH III ERROR IN W3BOUND: '/ &
735 ' ILLEGAL NK, NK =',i3,
' DIFFERS FROM NKI =',i3/ &
736 ' IT WILL BE MANAGED SOON BY SPCONV')
738 1009
FORMAT (/
' *** WAVEWATCH III ERROR IN W3BOUND : '/ &
739 ' ERROR IN OPENING SPEC FILE: ', a/ &
742 1010
FORMAT (/
' *** WAVEWATCH III ERROR IN W3BOUND : '/ &
743 ' SPEC FILE NOT EXISTING: ', a/)