9 #define CHECK_ERR(I) CHECK_ERROR(I, __LINE__)
241 INTEGER :: nti, ndsen, nidims, nfields, iclo, &
242 ndsi, ndsm, ndsdat, ndstrc, ntrace, &
243 ierr, ifld, itype, j, nfcomp, &
244 ix, iy, jx, nxi, nyi, ndat, jj, &
245 ndsll, idlall, idfmll, ncid, iret, &
246 mxm, mym, dattyp, recldt, idat, &
247 ndimsgrid, ndimsvar, varidtmp, &
249 INTEGER :: iland = -999
250 INTEGER :: gtypedum = 0
253 INTEGER :: time(2), timestart(2), timestop(2), &
254 timeshift(2), nxj(2), nyj(2), &
255 ndsf(2), idlaf(2), idfmf(2), &
256 is(4), js(4), varidf(50), dimsvar(4),&
257 dimln(5), refdate(8),curdate(8), &
258 startdate(8),stpdate(8)
260 INTEGER :: ierr_mpi, ind, rest, slice
266 INTEGER,
SAVE :: ient = 0
269 INTEGER :: ixp0, ixpn, ixpwdt = 60
272 INTEGER :: ix0, ixn, ixwdt = 60
275 INTEGER,
ALLOCATABLE :: ix21(:,:), ix22(:,:), &
276 iy21(:,:), iy22(:,:), &
277 jx21(:,:), jx22(:,:), &
278 jy21(:,:), jy22(:,:), &
279 mapovr(:,:), mask(:,:), &
282 INTEGER,
ALLOCATABLE :: mapout(:,:)
285 REAL :: x0i, xni, y0i, yni, sxi, syi, &
286 x, y, factor, efac, nodata, &
287 xcfac, xcoff, ycfac, ycoff, &
291 REAL :: scfac(2), addoff(2), rw(4)
293 REAL,
ALLOCATABLE :: rd11(:,:), rd21(:,:), &
294 rd12(:,:), rd22(:,:), &
295 xd11(:,:), xd21(:,:), &
296 xd12(:,:), xd22(:,:), &
297 fx(:,:), fy(:,:), fa(:,:), &
298 a1(:,:), a2(:,:), a3(:,:)
299 REAL,
ALLOCATABLE :: xc(:,:), yc(:,:), ac(:,:), &
300 data(:,:), xtemp(:,:)
302 REAL,
ALLOCATABLE,
TARGET :: ala(:,:), alo(:,:)
303 REAL,
POINTER :: ptr_ala(:,:), ptr_alo(:,:)
305 DOUBLE PRECISION :: refjulday, curjulday, startjulday, stpjulday
307 CHARACTER*1024 :: strfieldsname
308 CHARACTER*100 :: fieldsname(4)
309 CHARACTER*1024 :: strdimsname
310 CHARACTER*100 :: dimsname(2)
311 CHARACTER :: comstr*1, idfld*3, idtype*2, &
312 idtime*23, fromll*4, formll*16, &
313 namell*80, namef*80, idtime2*23
314 CHARACTER*14 :: idstr1(-7:7)
315 CHARACTER*15 :: idstr3(3)
316 CHARACTER*32 :: formt(2), formf(2)
317 CHARACTER*20 :: idstr2(6)
318 CHARACTER*20 :: dimname(5)
319 CHARACTER*50 :: timeunits, calendar
321 LOGICAL :: ingrid, flgnml
322 LOGICAL :: flstab, flberg, clo(2), fltime, flhdr
332 INTEGER :: k, l, tideflag, &
333 tide_ndef, tide_itrend
335 INTEGER,
PARAMETER :: lrb = 4
336 INTEGER(KIND=8) :: rpos
337 INTEGER :: lrecl, nrec
340 INTEGER,
ALLOCATABLE :: imax(:)
344 REAL,
ALLOCATABLE :: tide_data_all(:,:,:), &
347 REAL,
ALLOCATABLE :: tide1dl(:), tide1d(:)
350 REAL(kind=lrb),
ALLOCATABLE :: nullbuff(:)
353 DOUBLE PRECISION,
ALLOCATABLE :: alltimes(:), &
354 sdev0(:), sdev(:), rmsr(:), &
355 rmsr0(:), rmsrp(:), resmax(:)
357 CHARACTER*256 :: tideconstnames
358 CHARACTER*100 :: list(70)
360 LOGICAL,
ALLOCATABLE :: tidalcomp(:,:)
363 CHARACTER*21 :: fnametxt
366 equivalence( nxi , nxj(1) ) , ( nyi , nyj(1) )
370 DATA idstr1 /
'ice thickness ' ,
'ice viscosity' , &
371 'ice density ' ,
'ice modulus ' , &
372 'ice flow diam.' ,
'mud density ' , &
373 'mud thickness ' ,
'mud viscosity ', &
374 'ice conc. ' ,
'water levels ' , &
375 'winds ' ,
'currents ' , &
376 'data ' ,
'momentum ' , &
378 DATA idstr2 /
'pre-processed file ' ,
'long.-lat. grid ' , &
379 'grid from file (1) ' ,
'grid from file (2) ' , &
380 'data (assimilation) ' ,
'pre-pro. file + tide' /
381 DATA idstr3 /
'mean parameters',
'1D spectra ', &
398 CALL w3seto ( 1, 6, 6 )
414 CALL itrace ( ndstrc, ntrace )
430 CALL strace (ient,
'W3PRNC')
442 CALL mpi_init ( ierr_mpi )
443 CALL mpi_comm_size ( mpi_comm_world, naproc, ierr_mpi )
444 CALL mpi_comm_rank ( mpi_comm_world, iaproc, ierr_mpi )
448 IF ( iaproc .EQ. naperr )
THEN
454 IF ( iaproc .EQ. napout )
WRITE (
ndso,900)
461 CALL w3iogr (
'READ', ndsm )
462 IF ( iaproc .EQ. napout )
WRITE (
ndso,902)
gname
480 INQUIRE(
file=trim(
fnmpre)//
"ww3_prnc.nml", exist=flgnml)
483 CALL w3nmlprnc (ndsi, trim(
fnmpre)//
'ww3_prnc.nml', nml_forcing, nml_file, ierr)
485 IF (nml_forcing%FIELD%ICE_PARAM1)
THEN
489 ELSE IF (nml_forcing%FIELD%ICE_PARAM2)
THEN
493 ELSE IF (nml_forcing%FIELD%ICE_PARAM3)
THEN
497 ELSE IF (nml_forcing%FIELD%ICE_PARAM4)
THEN
501 ELSE IF (nml_forcing%FIELD%ICE_PARAM5)
THEN
505 ELSE IF (nml_forcing%FIELD%MUD_DENSITY)
THEN
509 ELSE IF (nml_forcing%FIELD%MUD_THICKNESS)
THEN
513 ELSE IF (nml_forcing%FIELD%MUD_VISCOSITY)
THEN
517 ELSE IF (nml_forcing%FIELD%ICE_CONC)
THEN
521 ELSE IF (nml_forcing%FIELD%ICE_BERG)
THEN
526 ELSE IF (nml_forcing%FIELD%WATER_LEVELS)
THEN
530 ELSE IF (nml_forcing%FIELD%WINDS)
THEN
534 ELSE IF (nml_forcing%FIELD%WINDS_AST)
THEN
539 ELSE IF (nml_forcing%FIELD%CURRENTS)
THEN
543 ELSE IF (nml_forcing%FIELD%DATA_ASSIM)
THEN
548 ELSE IF (nml_forcing%FIELD%ATM_MOMENTUM)
THEN
552 ELSE IF (nml_forcing%FIELD%AIR_DENSITY)
THEN
561 IF (nml_forcing%GRID%ASIS)
THEN
563 ELSE IF (nml_forcing%GRID%LATLON)
THEN
571 IF (trim(nml_forcing%TIDAL).NE.
'unset' .AND. &
572 trim(nml_forcing%TIDAL).NE.
'UNSET')
THEN
576 CALL strsplit(trim(nml_forcing%TIDAL),list)
581 namef=trim(nml_file%FILENAME)
582 dimsname(1)=nml_file%LONGITUDE
583 dimsname(2)=nml_file%LATITUDE
585 fieldsname(i)=nml_file%VAR(i)
590 IF (len_trim(dimsname(i)).NE.0) nidims=nidims+1
595 READ(nml_forcing%TIMESTART,*) timestart
596 CALL t2d(timestart,startdate,ierr)
597 CALL d2j(startdate,startjulday,ierr)
598 READ(nml_forcing%TIMESTOP,*) timestop
599 CALL t2d(timestop,stpdate,ierr)
600 CALL d2j(stpdate,stpjulday,ierr)
605 READ(nml_file%TIMESHIFT,*) timeshift
606 IF(timeshift(1).NE.0 .OR. timeshift(2).NE.0) fltime = .false.
613 IF (.NOT. flgnml)
THEN
614 OPEN (ndsi,
file=trim(
fnmpre)//
'ww3_prnc.inp',status=
'OLD',err=800,iostat=ierr)
617 READ (ndsi,
'(A)',
END=801,ERR=802,IOSTAT=IERR) comstr
618 IF (comstr.EQ.
' ') comstr =
'$'
619 IF ( iaproc .EQ. napout )
WRITE (ndso,901) comstr
620 CALL nextln ( comstr , ndsi , ndse )
621 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) IDFLD, IDTYPE, FLTIME, flhdr
624 flstab = idfld .EQ.
'WNS'
625 flberg = idfld .EQ.
'ISI'
626 IF ( idfld.EQ.
'IC1' )
THEN
628 ELSE IF ( idfld.EQ.
'IC2' )
THEN
630 ELSE IF ( idfld.EQ.
'IC3' )
THEN
632 ELSE IF ( idfld.EQ.
'IC4' )
THEN
634 ELSE IF ( idfld.EQ.
'IC5' )
THEN
636 ELSE IF ( idfld.EQ.
'MDN' )
THEN
638 ELSE IF ( idfld.EQ.
'MTH' )
THEN
640 ELSE IF ( idfld.EQ.
'MVS' )
THEN
642 ELSE IF ( idfld.EQ.
'ICE' .OR. flberg )
THEN
644 ELSE IF ( idfld.EQ.
'LEV' )
THEN
646 ELSE IF ( idfld.EQ.
'WND' .OR. flstab )
THEN
648 ELSE IF ( idfld.EQ.
'CUR' )
THEN
650 ELSE IF ( idfld.EQ.
'DAT' )
THEN
652 ELSE IF ( idfld.EQ.
'TAU' )
THEN
654 ELSE IF ( idfld.EQ.
'RHO' )
THEN
657 WRITE (ndse,1030) idfld
664 IF (idfld.EQ.
'DAT')
THEN
666 ELSE IF (idtype.EQ.
'AI')
THEN
668 ELSE IF (idtype.EQ.
'AT')
THEN
671 CALL nextln ( comstr , ndsi , ndse )
672 READ (ndsi,
'(A)',
END=801,ERR=803,IOSTAT=IERR) tideconstnames
674 CALL strsplit(tideconstnames,list)
675 ELSE IF (idtype.EQ.
'LL')
THEN
677 ELSE IF (idtype.EQ.
'F1')
THEN
679 ELSE IF (idtype.EQ.
'F2')
THEN
683 WRITE (ndse,1031) idtype
687 CALL nextln ( comstr , ndsi , ndse )
688 READ (ndsi,
'(A)',
END=801,ERR=802,IOSTAT=IERR) strdimsname
692 CALL strsplit(strdimsname,dimsname)
696 IF (len_trim(dimsname(i)).NE.0) nidims=nidims+1
699 CALL nextln ( comstr , ndsi , ndse )
700 READ (ndsi,
'(A)',
END=801,ERR=802,IOSTAT=IERR) strfieldsname
703 CALL strsplit(strfieldsname,fieldsname)
706 DO WHILE (len_trim(fieldsname(nfields+1)).NE.0)
710 IF (.NOT. fltime)
THEN
711 CALL nextln ( comstr , ndsi , ndse )
712 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) timeshift
713 IF (timeshift(1).LT.10000000)
THEN
714 WRITE (ndse,1035) time
719 CALL nextln ( comstr , ndsi , ndse )
720 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) namef
733 IF ( iaproc .EQ. napout )
WRITE (ndso,930) idstr1(ifld), idstr2(itype)
734 IF ( itype.NE.1 .AND. itype.NE.6 )
THEN
736 IF ( iaproc .EQ. napout .AND.ifld.EQ.3)
WRITE (ndso,1930)
739 IF ( iaproc .EQ. napout .AND.ifld.EQ.3)
WRITE (ndso,1930)
742 IF ( iaproc .EQ. napout .AND.ifld.EQ.3)
WRITE (ndso,2930)
745 IF ( iaproc .EQ. napout .AND.ifld.EQ.4)
WRITE (ndso,1930)
748 IF ( iaproc .EQ. napout .AND.ifld.EQ.4)
WRITE (ndso,2930)
751 IF ( iaproc .EQ. napout .AND.ifld.EQ.6)
WRITE (ndso,1930)
754 IF ( iaproc .EQ. napout .AND.ifld.EQ.6)
WRITE (ndso,1930)
757 IF ( iaproc .EQ. napout .AND.ifld.EQ.6)
WRITE (ndso,2930)
761 IF(timestart(1).NE.19000101 .OR. timestart(2).NE.0)
THEN
762 CALL stme21 ( timestart , idtime )
763 IF ( iaproc .EQ. napout )
WRITE (ndso,1931) idtime
765 IF(timestop(1).NE.29001231 .OR. timestop(2).NE.0)
THEN
766 CALL stme21 ( timestop , idtime )
767 IF ( iaproc .EQ. napout )
WRITE (ndso,2931) idtime
769 IF(caltype .NE.
'standard')
THEN
770 IF ( iaproc .EQ. napout )
WRITE (ndso,2932) caltype
773 IF (.NOT. fltime)
THEN
774 CALL stme21 ( timeshift , idtime )
775 IF ( iaproc .EQ. napout )
WRITE (ndso,3931) idtime
777 IF ( iaproc .EQ. napout .AND.flberg )
WRITE (ndso,938)
778 IF ( iaproc .EQ. napout .AND.flstab )
WRITE (ndso,939)
780 IF ( iaproc .EQ. napout )
WRITE (ndso,967) namef
781 IF ( iaproc .EQ. napout )
WRITE (ndso,968) trim(dimsname(1)), trim(dimsname(2))
783 IF ( iaproc .EQ. napout )
WRITE (ndso,969) i, trim(fieldsname(i))
793 iret=nf90_open(path=trim(fnmpre)//namef,mode=nf90_nowrite,ncid=ncid)
798 iret=nf90_inq_varid(ncid,
"time",varidtmp)
799 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"MT",varidtmp)
801 iret=nf90_get_att(ncid,varidtmp,
"calendar",calendar)
802 IF ( iret/=nf90_noerr )
THEN
805 calendar =
"standard"
806 ELSE IF ((index(calendar,
"standard") .GT. 0) .OR. &
807 (index(calendar,
"gregorian") .GT. 0))
THEN
808 calendar =
"standard"
809 ELSE IF (index(calendar,
"360_day") .GT. 0)
THEN
813 WRITE(ndse,1029) calendar
818 IF(calendar .NE. caltype)
THEN
819 WRITE(ndse,1027) caltype, calendar
823 iret=nf90_get_att(ncid,varidtmp,
"units",timeunits)
825 CALL u2d(timeunits,refdate,ierr)
826 CALL d2j(refdate,refjulday,ierr)
830 iret = nf90_inq_varid(ncid,trim(fieldsname(i)),varidf(i))
832 iret = nf90_inquire_variable(ncid, varidf(i), ndims=ndimsvar)
834 iret = nf90_inquire_variable(ncid, varidf(i), dimids=dimsvar(:ndimsvar))
837 iret=nf90_inquire_dimension(ncid,dimsvar(j),name=dimname(j), len=dimln(j))
840 iret=nf90_get_att(ncid,varidf(i),
"_FillValue", fillvalue)
841 IF ( iret/=nf90_noerr )
THEN
842 WRITE(ndse,1026) trim(fieldsname(i))
852 IF (dimname(i) .EQ.
"time".OR.dimname(i) .EQ.
"MT") nti = dimln(i)
853 IF (dimname(i) .EQ. dimsname(1)) nxi = dimln(i)
854 IF (dimname(i) .EQ. dimsname(1).AND.nidims.EQ.1)
THEN
858 IF (nidims.GE.2)
THEN
859 IF (dimname(i) .EQ. dimsname(2)) nyi = dimln(i)
862 IF (nxi*nyi.EQ.0)
GOTO 864
872 IF (itype.NE.1.AND.itype.NE.6)
THEN
873 ALLOCATE (ala(nxi,nyi))
874 ALLOCATE (alo(nxi,nyi))
876 iret=nf90_inq_varid(ncid,
"longitude",varidtmp)
877 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"lon",varidtmp)
878 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"Longitude",varidtmp)
879 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"x",varidtmp)
880 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"X",varidtmp)
881 iret = nf90_inquire_variable(ncid, varidtmp, ndims = numdims)
883 IF (numdims.EQ.1)
THEN
884 iret=nf90_get_var(ncid,varidtmp,x0i,start=(/1/))
886 iret=nf90_get_var(ncid,varidtmp,xni,start=(/nxi/))
888 iret=nf90_get_var(ncid,varidtmp,alo(:,1))
894 iret=nf90_get_var(ncid,varidtmp,x0i,start=(/1,1/))
896 iret=nf90_get_var(ncid,varidtmp,xni,start=(/nxi,1/))
898 iret=nf90_get_var(ncid,varidtmp,alo(:,:))
902 iret=nf90_inq_varid(ncid,
"latitude",varidtmp)
903 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"lat",varidtmp)
904 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"Latitude",varidtmp)
905 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"y",varidtmp)
906 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"Y",varidtmp)
907 iret = nf90_inquire_variable(ncid, varidtmp, ndims = numdims)
909 iret=nf90_get_var(ncid,varidtmp,y0i, start=(/1/))
911 IF (numdims.EQ.1)
THEN
912 iret=nf90_get_var(ncid,varidtmp,ala(1,:))
919 iret=nf90_get_var(ncid,varidtmp,ala(:,:))
930 IF (itype.EQ.1.OR.itype.EQ.6)
THEN
934 ALLOCATE ( mask(nxi,nyi) )
936 IF(gtype .EQ. ungtype)
THEN
940 rw(1) = factor*x0 ; rw(2) = factor*maxx
941 rw(3) = factor*y0 ; rw(4) = factor*maxy
943 rw(1) = factor*xgrd(1,1) ; rw(2) = factor*xgrd(ny,nx)
944 rw(3) = factor*ygrd(1,1) ; rw(4) = factor*ygrd(ny,nx)
946 IF ( iaproc .EQ. napout )
WRITE (ndso,932) nxi, nyi
948 IF ( iaproc .EQ. napout )
WRITE (ndso,1933) rw(1),rw(2),rw(3),rw(4)
950 IF ( iaproc .EQ. napout )
WRITE (ndso,2933) rw(1),rw(2),rw(3),rw(4)
955 ELSE IF (itype.EQ.2)
THEN
958 IF ((gtype .EQ. rlgtype) .AND. (y0i.GT.yni))
THEN
963 IF (nxi.LT.2 .OR. nyi.LT.2)
THEN
964 WRITE (ndse,1036) nxi, nyi
967 ALLOCATE ( mask(nxi,nyi) )
969 IF ( iaproc .EQ. napout )
WRITE (ndso,932) nxi, nyi
972 IF ( iaproc .EQ. napout )
WRITE (ndso,1933) factor*x0i, factor*xni, &
973 factor*y0i, factor*yni
975 IF ( iaproc .EQ. napout )
WRITE (ndso,2933) factor*x0i, factor*xni, &
976 factor*y0i, factor*yni
981 ELSE IF (itype.EQ.5)
THEN
982 CALL nextln ( comstr , ndsi , ndse )
983 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
984 dattyp, recldt, nodata
985 IF (dattyp.LT.0 .OR. dattyp.GT.2)
THEN
986 WRITE (ndse,1033) dattyp
989 IF (recldt.LE.0)
THEN
990 WRITE (ndse,1034) recldt
993 IF ( iaproc .EQ. napout )
WRITE (ndso,934) idstr3(dattyp+1), recldt, nodata
994 WRITE (idfld,935) dattyp
995 DEALLOCATE ( ix21, ix22, iy21, iy22, jx21, jx22, jy21, jy22, &
997 DEALLOCATE ( rd11, rd21, rd12, rd22, xd11, xd21, xd12, xd22, &
998 fx, fy, fa, a1, a2, a3 )
1007 IF ( iaproc .EQ. napout )
WRITE (ndso,940)
1009 IF (itype.NE.1 .AND. itype.NE.5 .AND. itype.NE.6 )
THEN
1013 IF (itype.EQ.2)
THEN
1014 IF ( iaproc .EQ. napout )
WRITE (ndso,941)
1018 sxi = (xni-x0i)/real(nxi-1)
1019 syi = (yni-y0i)/real(nyi-1)
1022 IF ( abs(abs(real(nxi)*sxi)-360.) .LT. 0.1*abs(sxi) )
THEN
1031 gsi = w3gsuc( .true., flagll, iclo, ptr_alo, ptr_ala )
1038 IF (gtype .NE. ungtype)
THEN
1041 ingrid = w3grmp( gsi, real(xgrd(iy,ix)), real(ygrd(iy,ix)), &
1043 IF ( .NOT.ingrid )
THEN
1044 IF ( iaproc .EQ. napout )
WRITE(ndso,1042) ix, iy, xgrd(iy,ix), ygrd(iy,ix)
1065 WRITE (ndst,9046) ix, iy, &
1066 ix21(ix,iy),ix22(ix,iy),iy21(ix,iy),iy22(ix,iy), &
1067 rd11(ix,iy),rd12(ix,iy),rd21(ix,iy),rd22(ix,iy)
1075 ix21(ix,1) = 1 + int(mod(360.+(x-x0i),360.)/sxi)
1079 IF (iclo.EQ.iclose_none)
THEN
1080 IF (ix21(ix,1).LT.1.OR.ix21(ix,1).GT.nxi-1)
WRITE(ndso,1041) ix, x, y
1081 ix21(ix,1) = max( 1 , min(ix21(ix,1),nxi-1) )
1082 ix22(ix,1) = ix21(ix,1) + 1
1084 ix21(ix,1) = max( 1 , min(ix21(ix,1),nxi) )
1085 ix22(ix,1) = mod(ix21(ix,1),nxi)+1
1087 iy21(ix,1) = 1 + int((y-y0i)/syi)
1088 IF (iy21(ix,1).LT.1.OR.iy21(ix,1).GT.nyi-1)
WRITE(ndso,1041) ix, x, y
1089 iy21(ix,1) = max( 1 , min(iy21(ix,1),nyi-1) )
1090 iy22(ix,1) = iy21(ix,1) + 1
1092 rw(1) = mod(360.+(x-x0i),360.)/sxi - real(ix21(ix,1)-1)
1093 rw(2) = (y-y0i)/syi - real(iy21(ix,1)-1)
1095 IF (ix21(ix,1).LE.1 .AND. rw(1).LT.acc)
THEN
1096 IF (rw(1).LT.0.)
THEN
1098 IF ( iaproc .EQ. napout )
WRITE (ndso,1043) x
1105 IF (ix21(ix,1).GE.(nxi-1) .AND. rw(1).GT.1.-acc)
THEN
1106 IF (rw(1).GT.1.)
THEN
1107 IF ( iaproc .EQ. napout )
WRITE (ndso,1043) x
1115 IF (iy21(ix,1).LE.1 .AND. rw(2).LT.acc)
THEN
1116 IF (rw(2).LT.0.)
THEN
1117 IF ( iaproc .EQ. napout )
WRITE (ndso,1044) y
1125 IF (iy21(ix,1).GE.nyi .AND. rw(2).GT.1.-acc)
THEN
1126 IF (rw(2).GT.1)
THEN
1127 IF ( iaproc .EQ. napout )
WRITE (ndso,1044) y
1135 efac = sqrt( max(0.,abs(rw(1)-0.5)-0.5)**2 + &
1136 max(0.,abs(rw(2)-0.5)-0.5)**2 )
1137 efac = 1. / ( 1. + 0.25*efac**2 )
1139 rd11(ix,1) = efac * (1.-rw(1)) * (1.-rw(2))
1140 rd21(ix,1) = efac * rw(1) * (1.-rw(2))
1141 rd12(ix,1) = efac * (1.-rw(1)) * rw(2)
1142 rd22(ix,1) = efac * rw(1) * rw(2)
1153 IF ( iaproc .EQ. napout )
WRITE (ndso,942)
1159 IF ( mapsta(iy,ix) .EQ. 0 )
THEN
1160 mapovr(ix,iy) = iland
1171 IF ( iaproc .EQ. napout )
WRITE (ndso,943) j
1175 CALL nextln ( comstr , ndsi , ndse )
1176 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
1177 nxj(j), nyj(j), clo(j)
1178 IF (nxj(j).LT.2 .OR. nyj(j).LT.2)
THEN
1179 WRITE (ndse,1036) nxj(j), nyj(j)
1182 IF (
ALLOCATED(mask) )
DEALLOCATE (mask)
1183 ALLOCATE ( mask(nxj(j),nyj(j)) )
1185 IF ( iaproc .EQ. napout )
WRITE (ndso,944) nxj(j), nyj(j), clo(j)
1187 CALL nextln ( comstr , ndsi , ndse )
1188 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
1189 fromll, idlall, idfmll, formll
1190 IF (idlall.LT.1 .OR. idlall.GT.4) idlall = 1
1191 IF (idfmll.LT.1 .OR. idfmll.GT.3) idfmll = 1
1192 IF ( iaproc .EQ. napout )
WRITE (ndso,945) idlall, idfmll
1193 IF (idfmll.EQ.2)
WRITE (ndso,946) formll
1195 CALL nextln ( comstr , ndsi , ndse )
1196 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) NDSLL, namell
1200 IF ( iaproc .EQ. napout )
WRITE (ndso,947) ndsll
1201 IF ( iaproc .EQ. napout.AND.fromll.EQ.
'NAME')
WRITE (ndso,948) namell
1202 IF (ndsll.EQ.ndsi)
THEN
1204 CALL nextln ( comstr , ndsi , ndse )
1209 IF ( idfmll .EQ. 3 )
THEN
1210 IF (fromll.EQ.
'NAME')
THEN
1211 jj = len_trim(fnmpre)
1212 OPEN (ndsll,
file=fnmpre(:jj)//namell, &
1213 form=
'UNFORMATTED', convert=
file_endian,status=
'OLD', &
1214 err=845,iostat=ierr)
1216 OPEN (ndsll, form=
'UNFORMATTED', convert=
file_endian, &
1217 status=
'OLD',err=845,iostat=ierr)
1220 IF (fromll.EQ.
'NAME')
THEN
1221 jj = len_trim(fnmpre)
1222 OPEN (ndsll,
file=fnmpre(:jj)//namell, &
1223 status=
'OLD',err=845,iostat=ierr)
1226 status=
'OLD',err=845,iostat=ierr)
1234 IF (
ALLOCATED(ala) )
THEN
1235 DEALLOCATE ( ala, alo )
1236 NULLIFY ( ptr_ala, ptr_alo )
1238 ALLOCATE ( ala(nxj(j),nyj(j)), alo(nxj(j),nyj(j)) )
1239 CALL ina2r (ala, nxj(j), nyj(j), 1, nxj(j), 1, nyj(j),&
1240 ndsll, ndst, ndse, idfmll, formll, idlall, 1., 0.)
1241 CALL ina2r (alo, nxj(j), nyj(j), 1, nxj(j), 1, nyj(j),&
1242 ndsll, ndst, ndse, idfmll, formll, idlall, 1., 0.)
1244 IF ( ndsll .NE. ndsi )
CLOSE (ndsll)
1248 IF ( iaproc .EQ. napout )
WRITE (ndso,949)
1250 CALL nextln ( comstr , ndsi , ndse )
1251 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) &
1252 fromll, idlall, idfmll, formll
1253 IF (idlall.LT.1 .OR. idlall.GT.4) idlall = 1
1254 IF (idfmll.LT.1 .OR. idfmll.GT.3) idfmll = 1
1255 IF ( iaproc .EQ. napout )
WRITE (ndso,945) idlall, idfmll
1256 IF (idfmll.EQ.2)
WRITE (ndso,946) formll
1258 CALL nextln ( comstr , ndsi , ndse )
1259 READ (ndsi,*,
END=801,ERR=802,IOSTAT=IERR) NDSLL, namell
1263 IF ( iaproc .EQ. napout )
WRITE (ndso,947) ndsll
1264 IF (fromll.EQ.
'NAME')
WRITE (ndso,948) namell
1265 IF ( iaproc .EQ. napout )
WRITE (ndso,*)
' '
1266 IF (ndsll.EQ.ndsi)
THEN
1268 CALL nextln ( comstr , ndsi , ndse )
1273 IF ( idfmll .EQ. 3 )
THEN
1274 IF (fromll.EQ.
'NAME')
THEN
1275 jj = len_trim(fnmpre)
1276 OPEN (ndsll,
file=fnmpre(:jj)//namell, &
1277 form=
'UNFORMATTED', convert=
file_endian,status=
'OLD', &
1278 err=846,iostat=ierr)
1280 OPEN (ndsll,form=
'UNFORMATTED', convert=
file_endian, &
1281 status=
'OLD',err=846,iostat=ierr)
1284 IF (fromll.EQ.
'NAME')
THEN
1285 jj = len_trim(fnmpre)
1286 OPEN (ndsll,
file=fnmpre(:jj)//namell, &
1287 status=
'OLD',err=846,iostat=ierr)
1290 status=
'OLD',err=846,iostat=ierr)
1298 CALL ina2i (mask, nxj(j), nyj(j), 1,nxj(j), 1,nyj(j), &
1299 ndsll, ndst, ndse, idfmll, formll, idlall, 1, 0)
1300 IF ( ndsll .NE. ndsi )
CLOSE (ndsll)
1306 WRITE (ndst,9051) ix, iy, ala(ix,iy), &
1307 alo(ix,iy), mask(ix,iy)
1314 IF ( j .EQ. 1 )
THEN
1315 CALL w3fldp ( ndso, ndst, ndse, ierr, flagll, &
1316 nx, ny, nx, ny, real(ygrd), real(xgrd), mapovr, iland, &
1317 nxj(j), nyj(j), nxj(j), nyj(j), clo(j), ala, alo, &
1318 mask, rd11, rd21, rd12, rd22, ix21, ix22, iy21, &
1321 CALL w3fldp ( ndso, ndst, ndse, ierr, flagll, &
1322 nx, ny, nx, ny, real(ygrd), real(xgrd), mapovr, iland, &
1323 nxj(j), nyj(j), nxj(j), nyj(j), clo(j), ala, alo, &
1324 mask, xd11, xd21, xd12, xd22, jx21, jx22, jy21, &
1332 IF ( nfcomp .EQ. 2)
THEN
1335 IF ( mapovr(ix,iy) .GE. 2)
THEN
1336 factor = 1. / real(mapovr(ix,iy))
1337 rd11(ix,iy) = factor * rd11(ix,iy)
1338 rd12(ix,iy) = factor * rd12(ix,iy)
1339 rd21(ix,iy) = factor * rd21(ix,iy)
1340 rd22(ix,iy) = factor * rd22(ix,iy)
1341 xd11(ix,iy) = factor * xd11(ix,iy)
1342 xd12(ix,iy) = factor * xd12(ix,iy)
1343 xd21(ix,iy) = factor * xd21(ix,iy)
1344 xd22(ix,iy) = factor * xd22(ix,iy)
1357 IF ( itype .EQ. 5 )
THEN
1358 IF ( iaproc .EQ. napout )
WRITE (ndso,960)
1360 IF (itype.LE.3)
THEN
1361 IF ( iaproc .EQ. napout )
WRITE (ndso,961) nxj(j), nyj(j)
1363 IF ( iaproc .EQ. napout )
WRITE (ndso,962) j, nxj(j), nyj(j)
1372 IF ( nfcomp .EQ. 1 )
THEN
1384 IF ( iaproc .EQ. napout )
WRITE (ndso,971)
1385 j = len_trim(fnmpre)
1388 IF (itype.EQ.6)
THEN
1389 CALL vuf_set_parameters
1391 IF (trim(list(1)).EQ.
'ALL')
THEN
1392 WRITE(ndse,
'(A)')
'Tidal constituent ALL not available anymore'
1395 CALL tide_find_indices_analysis(list)
1399 IF ( itype .LE. 4 .OR. itype.EQ.6 )
THEN
1400 IF ( iaproc .EQ. napout ) &
1401 CALL w3fldo (
'WRITE', idfld, ndsdat, ndst, ndse, &
1402 nx, ny, gtype, ierr, fpre=fnmpre(:j), &
1403 fhdr=flhdr, tideflagin=tideflag)
1405 IF ( iaproc .EQ. napout ) &
1406 CALL w3fldo (
'WRITE', idfld, ndsdat, ndst, ndse, &
1407 recldt, 0, gtypedum, ierr, fpre=fnmpre(:j) )
1411 IF (tideflag.GT.0)
THEN
1412 lrecl = tide_mf*lrb*nfields*2
1414 ALLOCATE(nullbuff(nrec))
1415 nullbuff(1:nrec) = 0.
1416 OPEN (990,
file=
'tidana.dat',form=
'UNFORMATTED', convert=
file_endian, access=
'STREAM')
1417 fnametxt =
'tidanaNNN.txt'
1418 WRITE (fnametxt(7:9),
'(I3.3)') iaproc
1419 OPEN (989,
file=fnametxt,status=
'unknown')
1426 IF ( itype .NE. 5 )
THEN
1430 mxm = max( nxj(1), nxj(2) )
1431 mym = max( nyj(1), nyj(2) )
1432 IF (itype.EQ.1.AND.gtype.EQ.ungtype)
THEN
1433 ALLOCATE ( xc(mxm,1), yc(mxm,1), ac(mxm,1), xtemp(mxm,1) )
1435 ALLOCATE ( xc(mxm,mym), yc(mxm,mym), ac(mxm,mym), xtemp(mxm,mym) )
1451 IF (itype.GE.6.AND.tideflag.GT.0)
THEN
1455 IF (nx*ny.GT.4000)
THEN
1457 IF ((nx*ny)/naproc.LT.4000)
THEN
1458 IF (iaproc.EQ.napout)
WRITE(ndse,*)
'Starting tidal analysis ... '
1460 IF (iaproc.EQ.napout)
WRITE(ndse,*)
'Starting tidal analysis for ',nx*ny, &
1461 ' points. This can take hours ...'
1463 IF (nx*ny.LT.4000)
THEN
1465 WRITE(ndse,
'(A,I8,A)')
'Starting tidal analysis for ',nx*ny,
' points.'
1466 IF (naproc.EQ.1)
WRITE(ndse,
'(A)')
'This can take hours ...Consider running this with MPI '
1471 iret=nf90_inq_varid(ncid,
"time",varidtmp)
1472 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"MT",varidtmp)
1474 ALLOCATE(alltimes(nti))
1475 iret=nf90_get_var(ncid,varidtmp,alltimes,start=(/1/))
1477 IF (index(timeunits,
"seconds").NE.0) alltimes=alltimes/86400.
1478 IF (index(timeunits,
"minutes").NE.0) alltimes=alltimes/1440.
1479 IF (index(timeunits,
"hours").NE.0) alltimes=alltimes/24.
1480 alltimes=refjulday+alltimes
1487 ALLOCATE(sdev0(tide_ndef),sdev(tide_ndef), rmsr(tide_ndef), &
1488 res(tide_ndef), ssq(tide_ndef),rmsr0(tide_ndef), &
1489 rmsrp(tide_ndef), imax(tide_ndef), resmax(tide_ndef))
1491 ALLOCATE( tide_data(tide_nti,tide_ndef) )
1492 ALLOCATE( tide_days(tide_nti), tide_secs(tide_nti), tide_hours(tide_nti) )
1493 ALLOCATE(v_arg(170,tide_nti),f_arg(170,tide_nti),u_arg(170,tide_nti))
1496 ALLOCATE(tidal_const(nx,ny,tide_mf,2,2))
1497 tidal_const(:,:,:,:,:)=0.
1499 iret=nf90_inq_varid(ncid,fieldsname(i),varidf(i))
1502 iret=nf90_get_att(ncid,varidf(1),
"_FillValue", fillvalue)
1504 iret = nf90_get_att(ncid,varidf(1),
'scale_factor',scfac(1))
1505 IF (iret .NE. 0) scfac(1) = 1.0
1506 iret = nf90_get_att(ncid,varidf(1),
'add_offset',addoff(1))
1507 IF (iret .NE. 0) addoff(1) = 0.0
1508 IF ( nfcomp.EQ.2 .OR. (ifld.GE.3 .AND. ifld.NE.7) .OR. flberg )
THEN
1509 iret = nf90_get_att(ncid,varidf(2),
'scale_factor',scfac(2))
1510 IF (iret .NE. 0) scfac(2) = 1.0
1511 iret = nf90_get_att(ncid,varidf(2),
'add_offset',addoff(2))
1512 IF (iret .NE. 0) addoff(2) = 0.0
1519 IF (nx .LT. naproc)
THEN
1520 WRITE(ndse,
'(A)')
'NUMBER OF NX POINTS LESS THAN NUMBER OF PROC'
1527 IF(rest.GE.iaproc) slice=slice+1
1532 ALLOCATE (tide1d(nx * tide_mf * nfields * 2))
1538 ALLOCATE(tide1dl(slice * tide_mf * nfields * 2))
1543 ALLOCATE(cumul(naproc))
1544 ALLOCATE(nelem(naproc))
1546 nelem(1) = nx / naproc
1548 IF (rest .GT. 0) nelem(1) = nelem(1) + 1
1550 cumul(i)=cumul(i-1)+nelem(i-1)
1551 nelem(i) = nx / naproc
1552 IF (rest .GT. i-1) nelem(i) = nelem(i) + 1
1558 WRITE(100+iaproc,*)
"Number of points for this processor ", iaproc,
" : ", nelem(iaproc),
' / ', nx
1559 WRITE(100+iaproc,*)
"Cumul of points for this processor ", iaproc,
" : ", cumul(iaproc),
' / ', nx
1560 WRITE(100+iaproc,*)
"Slice of values per processor ", slice
1563 ALLOCATE(tide_data_all(nelem(iaproc),nti,nfields))
1572 ALLOCATE(tidalcomp(nx,ny))
1580 IF (ndimsgrid.EQ.1)
THEN
1582 iret=nf90_get_var(ncid,varidf(i),tide_data_all(:,:,i), &
1583 start=(/cumul(iaproc)+1,1/),count=(/nelem(iaproc),nti/))
1585 WHERE (tide_data_all(:,:,i).NE.fillvalue) tide_data_all(:,:,i)=tide_data_all(:,:,i)*scfac(i)+addoff(i)
1587 ELSE IF (ndimsgrid.EQ.2)
THEN
1588 IF (ndimsvar.EQ.3)
THEN
1590 iret=nf90_get_var(ncid,varidf(i),tide_data_all(:,:,i), &
1591 start=(/cumul(iaproc)+1,iy,1/),count=(/nelem(iaproc),1,nti/))
1593 WHERE (tide_data_all(:,:,i).NE.fillvalue) tide_data_all(:,:,i)=tide_data_all(:,:,i)*scfac(i)+addoff(i)
1595 ELSE IF (ndimsvar.EQ.4)
THEN
1597 iret=nf90_get_var(ncid,varidf(i),tide_data_all(:,:,i), &
1598 start=(/cumul(iaproc)+1,iy,1,1/),count=(/nelem(iaproc),1,1,nti/))
1600 WHERE (tide_data_all(:,:,i).NE.fillvalue) tide_data_all(:,:,i)=tide_data_all(:,:,i)*scfac(i)+addoff(i)
1607 DO jx=1,nelem(iaproc)
1623 IF (tide_data_all(jx,i,1).NE.fillvalue &
1624 .AND.tide_data_all(jx,i,nfields).NE.fillvalue &
1625 .AND.tide_data_all(jx,i,1).NE.0.0)
THEN
1627 tide_data(tide_nti,:)=tide_data_all(jx,i,:)
1628 tide_days(tide_nti)=int(alltimes(i))
1629 tide_secs(tide_nti)=(alltimes(i)-tide_days(tide_nti))*86400
1633 tide_hours(1:tide_nti)=24.d0*dfloat(tide_days(1:tide_nti)) &
1634 +dfloat(tide_secs(1:tide_nti))/3600.d0
1639 IF (tide_nti.GT.(tide_mf*3))
THEN
1640 tide_lat= ygrd(iy,ix)
1641 IF (abs(tide_lat).LT.5.) tide_lat=sign(5.,tide_lat)
1643 CALL setvuf(tide_hours(i),tide_lat,i)
1646 CALL flex_tidana_webpage(ix,iy,real(xgrd(iy,ix)),tide_lat,tide_days(1),tide_days(tide_nti), &
1647 tide_ndef, tide_itrend, res, ssq, rmsr0, &
1648 sdev0, rmsr, resmax, imax, 0)
1651 WRITE (989,
'(2I10,X,176F10.3)'),ix,tide_nti,tide_ampc(1:tide_mf,1:nfields)
1652 WRITE (989,
'(2I10,X,176F10.3)'),ix,tide_nti,tide_phg(1:tide_mf,1:nfields)
1653 rpos = 1_8 + lrecl*(ix-1_8)
1654 WRITE (990,pos=rpos),nullbuff(1:nrec)
1655 WRITE (990,pos=rpos),tide_ampc(1:tide_mf,1:nfields),tide_phg(1:tide_mf,1:nfields)
1659 tidalcomp(ix,iy)=.false.
1660 tide_ampc(1:tide_mf,1:nfields)=0.
1661 tide_phg(1:tide_mf,1:nfields)=0.
1670 IF (iaproc.EQ.napout)
WRITE(ndso,
'(A,I6,A,I6,A,I6)')
'IY, JX = ', &
1671 iy,
',',jx,
' out of ', nelem(iaproc)
1677 tide1dl(ind)=tide_ampc(j,k)
1679 tide1dl(ind)=tide_phg(j,k)
1685 tidal_const(ix,iy,1:tide_mf,1:nfields,1)=tide_ampc(1:tide_mf,1:nfields)
1686 tidal_const(ix,iy,1:tide_mf,1:nfields,2)=tide_phg(1:tide_mf,1:nfields)
1696 IF (naproc.GT.1)
THEN
1697 CALL mpi_gatherv(tide1dl, slice * tide_mf * nfields * 2, mpi_real, &
1698 tide1d, nelem * tide_mf * nfields * 2, cumul * tide_mf * nfields * 2, &
1699 mpi_real, napout-1, mpi_comm_world, ierr_mpi)
1703 IF (iaproc.EQ.napout)
THEN
1704 CALL mpi_gatherv(mpi_in_place,nelem(iaproc), &
1705 mpi_logical, tidalcomp(:,iy), nelem, cumul, mpi_logical, napout-1, &
1706 mpi_comm_world, ierr_mpi)
1708 CALL mpi_gatherv(tidalcomp(cumul(iaproc)+1:cumul(iaproc)+nelem(iaproc),iy),nelem(iaproc), &
1709 mpi_logical, tidalcomp(:,iy), nelem, cumul, mpi_logical, napout-1, &
1710 mpi_comm_world, ierr_mpi)
1724 IF (iaproc .EQ. napout)
THEN
1731 tidal_const(ix,iy,j,k,l)=tide1d(ind)
1745 IF (idfld.EQ.
'CUR')
WRITE(986,
'(F10.3,/)') tidal_const(:,1,15,1,1)
1746 IF (idfld.EQ.
'CUR')
WRITE(986,
'(F10.3,/)') tidal_const(:,1,15,2,1)
1750 IF (iaproc .NE. napout )
THEN
1755 WRITE(ndso,
'(A)')
"parallelization done"
1765 IF ( iaproc .EQ. napout)
THEN
1768 IF(tidalcomp(ix,iy).EQV..false.)
THEN
1769 WRITE(ndso,1047) ix, iy
1778 IF ( iaproc .EQ. napout.AND.tideflag.GE.1) &
1779 CALL w3fldtide1 (
'WRITE', ndsdat, ndst, ndse, nx, ny, idfld, ierr )
1780 CALL w3fldtide2 (
'WRITE', ndsdat, ndst, ndse, nx, ny, idfld, 0, ierr )
1796 IF ( itype .LE. 4 .OR. itype.EQ.6 )
THEN
1797 iret = nf90_get_att(ncid,varidf(1),
'scale_factor',xcfac)
1798 IF (iret.NE.0 ) xcfac = 1.0
1799 iret = nf90_get_att(ncid,varidf(1),
'add_offset',xcoff)
1800 IF (iret.NE.0 ) xcoff = 0.0
1801 IF ( nfcomp.EQ.2 .OR. (ifld.GE.3 .AND. ifld.NE.7) .OR. flberg )
THEN
1802 iret = nf90_get_att(ncid,varidf(2),
'scale_factor',ycfac)
1803 IF (iret.NE.0 ) ycfac = 1.0
1804 iret = nf90_get_att(ncid,varidf(2),
'add_offset',ycoff)
1805 IF (iret.NE.0 ) ycoff = 0.0
1810 j = len_trim(fnmpre)
1811 OPEN (ndstime,
file=fnmpre(:j)//
'times.'//idfld, &
1812 err=870,iostat=ierr )
1815 IF ( iaproc .EQ. napout )
WRITE (ndso,972)
1821 iret=nf90_inq_varid(ncid,
"time",varidtmp)
1822 IF ( iret/=nf90_noerr ) iret=nf90_inq_varid(ncid,
"MT",varidtmp)
1824 iret=nf90_get_var(ncid,varidtmp,curjulday,start=(/itime/))
1826 IF (index(timeunits,
"seconds").NE.0) curjulday=curjulday/86400.
1827 IF (index(timeunits,
"minutes").NE.0) curjulday=curjulday/1440.
1828 IF (index(timeunits,
"hours").NE.0) curjulday=curjulday/24.
1829 curjulday=refjulday+curjulday
1832 IF (startjulday.GT.curjulday) cycle
1835 IF (stpjulday.LT.curjulday)
EXIT
1838 CALL j2d(curjulday,curdate,ierr)
1839 CALL d2t(curdate,time,ierr)
1840 CALL stme21 (time,idtime)
1843 IF (.NOT.fltime.AND.timedelay.EQ.0)
THEN
1844 timedelay = dsec21(time,timeshift)
1848 IF (timedelay.NE.0)
THEN
1849 CALL tick21 (time,timedelay)
1850 CALL stme21 (time,idtime2)
1851 IF ( iaproc .EQ. napout )
WRITE (ndso,1973) idtime2, idtime
1853 IF ( iaproc .EQ. napout )
WRITE (ndso,2973) idtime
1856 WRITE (ndstime, 979, err=871,iostat=ierr) time
1859 IF ( iaproc .EQ. napout )
WRITE (ndso,974)
1864 IF ( itype .LE. 4 .OR. itype.EQ.6 )
THEN
1865 IF (ndimsgrid.EQ.1)
THEN
1866 iret=nf90_get_var(ncid,varidf(1),xc(:,1),start=(/1,itime/),count=(/mxm,1/))
1868 IF (ndimsvar.EQ.3)
THEN
1869 iret=nf90_get_var(ncid,varidf(1),xc,start=(/1,1,itime/),count=(/mxm,mym,1/))
1871 iret=nf90_get_var(ncid,varidf(1),xc,start=(/1,1,1,itime/),count=(/mxm,mym,1,1/))
1876 WHERE(xc.NE.xc) xc = fillvalue
1877 WHERE (xc.NE.fillvalue) xc=xc*xcfac+xcoff
1883 ixpn = min( ixp0+ixpwdt-1 , nxj(1) )
1885 CALL prtblk ( ndst, nxj(1), nyj(1), mxm, xc, mask, 0, 0.,&
1886 ixp0, ixpn, 1, 1, nyj(1), 1,
'Field 1',
' ')
1887 IF (ixpn.NE.nxj(1))
THEN
1888 ixp0 = ixp0 + ixpwdt
1889 ixpn = min( ixpn+ixpwdt , nxj(1) )
1896 IF (nfcomp.EQ.2 .OR. (ifld.GE.3 .AND. ifld.NE.7) .OR. flberg)
THEN
1900 IF (ndimsgrid.EQ.1)
THEN
1901 iret=nf90_get_var(ncid,varidf(2),yc(:,1),start=(/1,itime/),count=(/mxm,1/))
1903 IF (ndimsvar.EQ.3)
THEN
1904 iret=nf90_get_var(ncid,varidf(2),yc,start=(/1,1,itime/),count=(/mxm,mym,1/))
1906 iret=nf90_get_var(ncid,varidf(2),yc,start=(/1,1,1,itime/),count=(/mxm,mym,1,1/))
1911 WHERE(yc.NE.yc) yc = fillvalue
1912 WHERE (yc.NE.fillvalue) yc=yc*ycfac+ycoff
1917 ixpn = min( ixp0+ixpwdt-1 , nxj(2) )
1919 CALL prtblk ( ndst, nxj(2), nyj(2), mxm, yc, mask, 0, 0., &
1920 ixp0, ixpn, 1, 1, nyj(2), 1,
'Field 2',
' ')
1921 IF (ixpn.NE.nxj(2))
THEN
1922 ixp0 = ixp0 + ixpwdt
1923 ixpn = min( ixpn+ixpwdt , nxj(2) )
1933 IF (ndimsgrid.EQ.1)
THEN
1934 iret=nf90_get_var(ncid,varidf(3),ac(:,1),start=(/1,itime/),count=(/mxm,1/))
1936 IF (ndimsvar.EQ.3)
THEN
1937 iret=nf90_get_var(ncid,varidf(3),ac,start=(/1,1,itime/),count=(/mxm,mym,1/))
1939 iret=nf90_get_var(ncid,varidf(3),ac,start=(/1,1,1,itime/),count=(/mxm,mym,1,1/))
1948 ixpn = min( ixp0+ixpwdt-1 , nxj(2) )
1950 CALL prtblk ( ndst, nxj(2), nyj(2), mxm, ac, mask, 0,&
1951 0., ixp0, ixpn, 1,1, nyj(2), 1,
'Field 3',
' ')
1952 IF (ixpn.NE.nxj(2))
THEN
1953 ixp0 = ixp0 + ixpwdt
1954 ixpn = min( ixpn+ixpwdt , nxj(2) )
1967 IF ( iaproc .EQ. napout )
WRITE(ndso,*)
"ITYPE5 TO DO"
1968 IF (idfmf(1).EQ.3)
THEN
1969 READ (ndsf(1),
END=862,ERR=862,IOSTAT=IERR) ndat
1971 READ (ndsf(1),*,
END=862,ERR=862,IOSTAT=IERR) ndat
1974 IF ( iaproc .EQ. napout )
WRITE (ndso,975) ndat
1976 IF ( ndat.GT.0 )
THEN
1977 ALLOCATE (
DATA(recldt,ndat) )
1979 IF (idfmf(1).EQ.1)
THEN
1980 READ (ndsf(1), * ,
END=863,ERR=863, &
1981 iostat=ierr)
DATA(:,idat)
1982 ELSE IF (idfmf(1).EQ.2)
THEN
1983 READ (ndsf(1),formt(1),
END=863,ERR=863, &
1984 iostat=ierr)
DATA(:,idat)
1986 READ (ndsf(1),
END=863,ERR=863, &
1987 iostat=ierr)
DATA(:,idat)
1996 WRITE (ndst,9062) idat,
DATA(1:ix,idat)
1997 IF ( ix.LT.recldt )
WRITE (ndst,9063)
DATA(ix+1:,:)
2006 IF (itype.EQ.1.OR.itype.EQ.6)
THEN
2011 IF (xc(ix,iy) .EQ. fillvalue) xc(ix,iy)=0
2012 IF (yc(ix,iy) .EQ. fillvalue) yc(ix,iy)=0
2016 IF (( ifld.LE.2 .OR. ifld.EQ.7 ).AND.( .NOT. flberg ))
THEN
2019 fa(ix,iy) = xc(ix,iy)
2025 fx(ix,iy) = xc(ix,iy)
2026 fy(ix,iy) = yc(ix,iy)
2027 fa(ix,iy) = ac(ix,iy)
2032 ELSE IF (itype.NE.5)
THEN
2037 IF ( iaproc .EQ. napout )
WRITE (ndso,976)
' '
2039 IF (( ifld.LE.2 .OR. ifld.EQ.7 ).AND.( .NOT. flberg ))
THEN
2041 CALL interp(mxm, mym, xc, ix21, ix22, iy21, iy22, &
2042 rd11, rd12, rd21, rd22, fillvalue, fa)
2044 IF (nfcomp.EQ.2)
THEN
2046 IF ( iaproc .EQ. napout )
WRITE (ndso,976)
' (2) '
2048 CALL interp(mxm, mym, yc, jx21, jx22, jy21, jy22, &
2049 xd11, xd12, xd21, xd22, fillvalue, fa)
2056 CALL interp(mxm, mym, xc, ix21, ix22, iy21, iy22, &
2057 rd11, rd12, rd21, rd22, fillvalue, fx)
2059 CALL interp(mxm, mym, yc, ix21, ix22, iy21, iy22, &
2060 rd11, rd12, rd21, rd22, fillvalue, fy)
2064 CALL interp(mxm, mym, ac, ix21, ix22, iy21, iy22, &
2065 rd11, rd12, rd21, rd22, fillvalue, fa)
2068 WHERE ( xc.NE.fillvalue .AND. yc.NE.fillvalue)
2069 xtemp = xc*xc + yc*yc
2073 CALL interp(mxm, mym, xtemp, ix21, ix22, iy21, iy22, &
2074 rd11, rd12, rd21, rd22, fillvalue, a3)
2076 WHERE ( xtemp.NE.fillvalue )
2079 CALL interp(mxm, mym, xtemp, ix21, ix22, iy21, iy22, &
2080 rd11, rd12, rd21, rd22, fillvalue, a2)
2084 a1(ix,iy) = max( 1.e-10 , &
2085 sqrt( fx(ix,iy)**2 + fy(ix,iy)**2 ) )
2087 a3(ix,iy) = sqrt( a3(ix,iy) )
2097 factor = min( 1.5 , a2(ix,iy)/a1(ix,iy) )
2098 fx(ix,iy) = factor * fx(ix,iy)
2099 fy(ix,iy) = factor * fy(ix,iy)
2109 factor = min( 1.5 , a3(ix,iy)/a1(ix,iy) )
2110 fx(ix,iy) = factor * fx(ix,iy)
2111 fy(ix,iy) = factor * fy(ix,iy)
2123 factor = min( 1.5 , a2(ix,iy)/a1(ix,iy) )
2124 fx(ix,iy) = factor * fx(ix,iy)
2125 fy(ix,iy) = factor * fy(ix,iy)
2135 factor = min( 1.5 , a3(ix,iy)/a1(ix,iy) )
2136 fx(ix,iy) = factor * fx(ix,iy)
2137 fy(ix,iy) = factor * fy(ix,iy)
2149 factor = min( 1.5 , a2(ix,iy)/a1(ix,iy) )
2150 fx(ix,iy) = factor * fx(ix,iy)
2151 fy(ix,iy) = factor * fy(ix,iy)
2161 factor = min( 1.5 , a3(ix,iy)/a1(ix,iy) )
2162 fx(ix,iy) = factor * fx(ix,iy)
2163 fy(ix,iy) = factor * fy(ix,iy)
2176 IF ( .NOT.
ALLOCATED(mapout) )
ALLOCATE ( mapout(nx,ny) )
2180 mapout(ix,iy) = mapsta(iy,ix)
2184 ixn = min( ix0+ixwdt-1 , nx )
2187 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
2188 ix0, ixn, 1, 1, ny, 1,
'Fraction ice',
'(-)')
2190 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
2191 ix0, ixn, 1, 1, ny, 1,
'Iceberg a',
'0.1/km')
2192 ELSE IF (ifld.EQ.2)
THEN
2193 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
2194 ix0, ixn, 1, 1, ny, 1,
'Water level',
'm')
2195 ELSE IF (ifld.EQ.7)
THEN
2196 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
2197 ix0, ixn, 1, 1, ny, 1,
'Air density',
'kg/m3')
2199 CALL prtblk (ndso, nx, ny, nx, fx, mapout, 0, 0., &
2200 ix0, ixn, 1, 1, ny, 1,
'Cart. X-comp',
'm/s')
2201 CALL prtblk (ndso, nx, ny, nx, fy, mapout, 0, 0., &
2202 ix0, ixn, 1, 1, ny, 1,
'Cart. Y-comp',
'm/s')
2204 CALL prtblk (ndso, nx, ny, nx, fa, mapout, 0, 0., &
2205 ix0, ixn, 1, 1, ny, 1,
'Tair-Tsea',
'degr')
2209 ixn = min( ixn+ixwdt , nx )
2218 IF ( itype .LE. 4 .OR. itype.EQ.6 )
THEN
2220 IF ( iaproc .EQ. napout )
WRITE (ndso,977)
2222 IF ( iaproc .EQ. napout )
CALL w3fldg (
'WRITE', idfld, ndsdat, ndst, ndse, nx, ny, &
2223 nx, ny, time, time, time, fx, fy, fa, time, &
2226 ELSE IF ( itype .EQ. 5 )
THEN
2227 IF ( ndat .EQ. 0 )
THEN
2229 IF ( iaproc .EQ. napout )
WRITE (ndso,978)
2233 IF ( iaproc .EQ. napout )
WRITE (ndso,977)
2235 IF ( iaproc .EQ. napout )
CALL w3fldd (
'WRITE', idfld, ndsdat, ndst, ndse, time,&
2236 time, recldt, ndat, idat,
DATA, ierr )
2240 IF (ierr.NE.0)
CALL extcde ( 30 )
2244 DEALLOCATE(xc,yc,ac,xtemp)
2245 IF (
ALLOCATED(ala))
DEALLOCATE(ala,alo)
2256 WRITE (ndse,1000) ierr
2264 WRITE (ndse,1002) ierr
2268 WRITE (ndse,1003) ierr
2273 CALL extcde ( 1010 )
2277 CALL extcde ( 1011 )
2280 WRITE (ndse,1045) ierr
2284 WRITE (ndse,1046) ierr
2288 WRITE (ndse,1062) ierr
2292 WRITE (ndse,1063) idat, ierr
2295 WRITE (ndse,1064) trim(strdimsname)
2300 WRITE (ndse,1070) idfld, ierr
2306 WRITE (ndse,1071) idtime, ierr
2311 IF ( iaproc .EQ. napout )
WRITE (ndso,999)
2313 CALL mpi_finalize ( ierr_mpi )
2325 900
FORMAT (/15x,
' *** WAVEWATCH III Input pre-processing *** '/ &
2326 15x,
'==============================================='/)
2327 901
FORMAT (
' Comment character is ''',a,
''''/)
2328 902
FORMAT (
' Grid name : ',a/)
2330 930
FORMAT (/
' Description of inputs'/ &
2331 ' --------------------------------------------------'/ &
2332 ' Input type : ',a/ &
2333 ' Format type : ',a)
2334 1930
FORMAT (
' Field conserves velocity.')
2335 2930
FORMAT (
' Field corrected for energy conservation.')
2336 1931
FORMAT (
' Start time : ',a)
2337 2931
FORMAT (
' Stop time : ',a)
2338 2932
FORMAT (
' Calendar : ',a)
2339 3931
FORMAT (
' Shifted time : ',a)
2340 932
FORMAT (/
' Input grid dim. :',i9,3x,i5)
2341 1933
FORMAT (
' Longitude range :',2f8.2,
' (deg)'/ &
2342 ' Latitude range :',2f8.2,
' (deg)')
2343 2933
FORMAT (
' X range :',2f8.2,
' (km)'/ &
2344 ' Y range :',2f8.2,
' (km)')
2345 934
FORMAT (/
' Data type : ',a/ &
2346 ' Data record length:',i5/ &
2347 ' Missing values :',f8.2)
2348 935
FORMAT (
'DT',i1 )
2349 938
FORMAT (
' Icebergs included.')
2350 939
FORMAT (
' Air-sea temperature differences included.')
2352 940
FORMAT (//
' Preprocessing data'/ &
2353 ' --------------------------------------------------')
2354 941
FORMAT (
' Interpolation factors ..... '/ &
2355 ' (longitude-latitude grid)')
2356 942
FORMAT (
' Interpolation factors ..... '/ &
2357 ' (grid from file)')
2358 943
FORMAT (/
' Longitude-latitude file ',i1,
' :'/ &
2359 ' ---------------------------------------')
2360 944
FORMAT (
' Input grid dim. :',i9,3x,i5/ &
2361 ' Closed longitudes :',l5)
2362 945
FORMAT (
' Layout indicator :',i5/ &
2363 ' Format indicator :',i5)
2364 946
FORMAT (
' Format : ',a)
2365 947
FORMAT (
' Unit number :',i5)
2366 948
FORMAT (
' File name : ',a)
2367 949
FORMAT (/
' Corresponding map file '/ &
2368 ' ---------------------------------------')
2370 960
FORMAT (/
' Data file :'/ &
2371 ' ---------------------------------------')
2372 961
FORMAT (/
' Data file :'/ &
2373 ' ---------------------------------------'/ &
2374 ' Input grid dim. :',i9,3x,i5)
2375 962
FORMAT (/
' Data file (',i1,
') :'/ &
2376 ' ---------------------------------------'/ &
2377 ' Input grid dim. :',i9,3x,i5)
2378 967
FORMAT (/
' File name : ',a)
2379 968
FORMAT (
' Dimension along x : ',a/ &
2380 ' Dimension along y : ',a)
2381 969
FORMAT (
' Field component ',i1,
' : ',a)
2383 971
FORMAT (/
' Opening output data file .....')
2384 972
FORMAT (//
' Processing data'/ &
2385 ' --------------------------------------------------')
2386 1973
FORMAT (
' Shifted Time : ',a,
' (File time : ',a,
')')
2387 2973
FORMAT (
' Time : ',a)
2390 974
FORMAT (
' reading ....')
2391 975
FORMAT (
' number of data records :',i6)
2392 976
FORMAT (
' interpolating',a,
'....')
2393 977
FORMAT (
' writing ....')
2394 978
FORMAT (
' skipping ....')
2398 979
FORMAT (1x,i8.8,1x,i6.6)
2401 999
FORMAT(//
' End of program '/ &
2402 ' ========================================='/ &
2403 ' WAVEWATCH III Input preprocessing '/)
2405 1000
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2406 ' ERROR IN OPENING INPUT FILE'/ &
2409 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2410 ' PREMATURE END OF INPUT FILE'/)
2412 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2413 ' ERROR IN READING FROM INPUT FILE'/ &
2416 1003
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2417 ' ERROR IN READING FROM INPUT FILE'/ &
2418 ' EXPECTING LIST OF TIDAL CONST. OR FAST OR VFAST'/&
2421 1010
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2422 ' NO FIELD SELECTED'/)
2423 1011
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2424 ' NO GRID SELECTED'/)
2426 1026
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2427 ' _FillValue ATTRIBUTE NOT DEFINED FOR : ',a/)
2429 1027
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2430 ' INCOMPATIBLE CALENDARS:' / &
2431 ' MODEL CALENDAR : ', a / &
2432 ' INPUT FILE CALENDAR : ', a /)
2433 1028
FORMAT (/
' *** WAVEWATCH III WARNING IN W3PRNC : '/ &
2434 ' calendar ATTRIBUTE NOT DEFINED'/ &
2435 ' DEFAULTING TO "standard" CALENDAR'/ &
2436 ' INPUT FILE MUST RESPECT STANDARD/GREGORIAN CALENDAR')
2437 1029
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2438 ' UNKNOWN CALENDAR TYPE: ', a / &
2439 ' "calendar" ATTRIBUTE MUST BE ONE OF: '/ &
2443 1030
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2444 ' ILLEGAL FIELD ID -->',a,
'<--'/)
2445 1031
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2446 ' ILLEGAL FORMAT ID -->',a,
'<--'/)
2447 1032
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2448 ' LATITUDE VALUES MUST BE REVERSED'/ &
2449 ' EXAMPLE: ncpdq -h -O -a -lat file.nc'/ )
2451 1033
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2452 ' ILLEGAL DATA RECORD LENGTH : ',i6/)
2453 1034
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2454 ' ILLEGAL DATA TYPE : ',i2/)
2456 1035
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2457 ' ILLEGAL TIME : ',i8.8,i7.6/)
2458 1036
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2459 ' ILLEGAL SIZE OF INPUT GRID : ',i5,1x,i5/)
2460 1038
FORMAT (/
' *** WAVEWATCH III WARNING IN W3PRNC : '/ &
2461 ' DATA READ FROM INPUT FILE')
2462 1039
FORMAT (/
' *** WAVEWATCH III WARNING IN W3PRNC : '/ &
2463 ' NAN VALUES IN HARMONICS '/ &
2464 ' REMOVE NON-LINEAR TIDAL COMPONENTS '/ &
2465 ' 2MS2 2MN2 2NK2 MNS2 MSN2 2SM2 3MSN2 ' &
2466 ' M4 MS4 MN4 M6 2MS6 2MN6'/)
2468 1041
FORMAT (/
' *** WAVEWATCH-III WARNING W3PRNC : '/ &
2469 ' GRID POINT ',i6,2f7.2,/ &
2470 ' NOT COVERED BY INPUT GRID.'/)
2471 1042
FORMAT (/
' *** WAVEWATCH-III WARNING W3PRNC : '/ &
2472 ' GRID POINT ',2i6,2f7.2,/ &
2473 ' NOT COVERED BY INPUT GRID.'/)
2474 1043
FORMAT (/
' *** WAVEWATCH III WARNING W3PRNC : '/ &
2475 ' X = ',f10.1,
' NOT COVERED BY INPUT GRID.'/)
2476 1044
FORMAT (/
' *** WAVEWATCH III WARNING W3PRNC : '/ &
2477 ' Y = ',f10.1,
' NOT COVERED BY INPUT GRID.'/)
2481 1045
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2482 ' ERROR IN OPENING LAT-LONG DATA FILE'/ &
2485 1046
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2486 ' ERROR IN OPENING MASK FILE'/ &
2489 1047
FORMAT (/
' *** WAVEWATCH III WARNING IN W3PRNC : '/ &
2490 ' NO TIDAL COMPUTATION AT NODE [',i8,
',',i8,
']'/)
2492 1062
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PREP : '/ &
2493 ' ERROR IN READING NDAT FROM FILE'/ &
2495 1063
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2496 ' ERROR IN READING DATA RECORD',i6,
' FROM FILE'/ &
2498 1064
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2499 ' GRID DIMENSIONS ', a,
' NOT FOUND... CHECK DIMENSION NAMES')
2502 1070
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2503 ' ERROR IN CREATING A TIMES FILE FOR ',a/ &
2505 1071
FORMAT (/
' *** WAVEWATCH III ERROR IN W3PRNC : '/ &
2506 ' ERROR IN WRITING TIME OUTPUT ',a/ &
2511 9040
FORMAT (
' TEST W3PRNC : INPUT GRID RANGES AND INCR. AFTER CORR.'/ &
2512 ' LON / X : ',3f10.2, &
2513 ' (GLOBAL=',l1,
')'/ &
2514 ' LAT / Y : ',3f10.2)
2515 9041
FORMAT (
' TEST W3PRNC : INTERPOLATION DATA FOR ',a)
2516 9042
FORMAT (
' ',i4,f8.2,2i4,2f8.2,1x,f6.3,1x,a)
2517 9043
FORMAT (
' TEST W3PRNC : GRID SHIFTED BY ',f5.0,
' DEGREES / M')
2520 9045
FORMAT (
' TEST W3PRNC : IX, IY, IXI(2), IYI(2), RD(4)')
2521 9046
FORMAT (
' ',2i4,2x,4i4,2x,4f6.2)
2525 9050
FORMAT (
' TEST W3PRNC : LAT-LONG OF INPUT FILE ')
2526 9051
FORMAT (
' ',2i4,2f8.2,i4)
2530 9060
FORMAT (
' TEST W3PRNC : INPUT FIELD (',i1,
') :'/)
2531 9061
FORMAT (
' TEST W3PRNC : INPUT DATA RECORDS :')
2532 9062
FORMAT (
' ',i6,
' : ',6e11.3)
2533 9063
FORMAT (
' ',6e11.3)
2536 9065
FORMAT (
' TEST W3PRNC : OUTPUT FIELD(S) :'/)
2578 SUBROUTINE interp(MXM, MYM, XC, IX21, IX22, IY21, IY22, &
2579 RD11, RD12, RD21, RD22, FILLVALUE, FA)
2655 INTEGER,
INTENT(IN) :: MXM, MYM
2656 REAL,
DIMENSION(MXM,MYM),
INTENT(IN) :: XC
2657 INTEGER,
DIMENSION(NX,NY),
INTENT(IN) :: IX21, IX22, IY21, IY22
2658 REAL,
DIMENSION(NX,NY),
INTENT(IN) :: RD11, RD12, RD21, RD22
2659 REAL,
INTENT(IN) :: FILLVALUE
2660 REAL,
DIMENSION(NX,NY),
INTENT(OUT) :: FA
2674 IF(xc(ix21(ix,iy),iy21(ix,iy)).NE.fillvalue)
THEN
2675 factor = factor + rd11(ix,iy)
2676 fa(ix,iy) = rd11(ix,iy) * xc(ix21(ix,iy),iy21(ix,iy))
2678 IF(xc(ix22(ix,iy),iy21(ix,iy)).NE.fillvalue)
THEN
2679 factor = factor + rd21(ix,iy)
2680 fa(ix,iy) = fa(ix,iy) + rd21(ix,iy) * xc(ix22(ix,iy),iy21(ix,iy))
2682 IF(xc(ix21(ix,iy),iy22(ix,iy)).NE.fillvalue)
THEN
2683 factor = factor + rd12(ix,iy)
2684 fa(ix,iy) = fa(ix,iy) + rd12(ix,iy) * xc(ix21(ix,iy),iy22(ix,iy))
2686 IF(xc(ix22(ix,iy),iy22(ix,iy)).NE.fillvalue)
THEN
2687 factor = factor + rd22(ix,iy)
2688 fa(ix,iy) = fa(ix,iy) + rd22(ix,iy) * xc(ix22(ix,iy),iy22(ix,iy))
2691 IF(factor.GT.0.0)
THEN
2692 fa(ix,iy) = fa(ix,iy) / factor
2697 IF( xc(ix21(ix,iy),iy21(ix,iy)) .NE. fillvalue)
THEN
2698 fa(ix,iy) = xc(ix21(ix,iy),iy21(ix,iy))
2699 ELSE IF( xc(ix22(ix,iy),iy21(ix,iy)) .NE. fillvalue)
THEN
2700 fa(ix,iy) = xc(ix22(ix,iy),iy21(ix,iy))
2701 ELSE IF( xc(ix21(ix,iy),iy22(ix,iy)) .NE. fillvalue)
THEN
2702 fa(ix,iy) = xc(ix21(ix,iy),iy22(ix,iy))
2703 ELSE IF( xc(ix22(ix,iy),iy22(ix,iy)) .NE. fillvalue)
THEN
2704 fa(ix,iy) = xc(ix22(ix,iy),iy22(ix,iy))
2731 IF (iret .NE. nf90_noerr)
THEN
2732 WRITE(
ndse,*)
' *** WAVEWATCH III ERROR IN PRNC :'
2733 WRITE(
ndse,*)
' LINE NUMBER ', iline
2734 WRITE(
ndse,*)
' NETCDF ERROR MESSAGE: '
2735 WRITE(
ndse,*) nf90_strerror(iret)