8 #define nf90_err(ncerr) nf90_err_check(ncerr, __LINE__)
119 CHARACTER(LEN=10),
PARAMETER,
PRIVATE :: VEROPT =
'2021-04-06'
120 CHARACTER(LEN=31),
PARAMETER,
PRIVATE :: &
121 IDSTR =
'WAVEWATCH III POINT OUTPUT FILE'
125 character(*),
parameter,
private :: DNAME_NOPTS =
'NOPTS'
128 character(*),
parameter,
private :: DNAME_NSPEC =
'NSPEC'
132 character(*),
parameter,
private :: DNAME_VSIZE =
'VSIZE'
137 character(*),
parameter,
private :: DNAME_NAMELEN =
'NAMELEN'
141 character(*),
parameter,
private :: DNAME_GRDIDLEN =
'GRDIDLEN'
144 character(*),
parameter,
private :: DNAME_TIME =
'TIME'
147 character(*),
parameter,
private :: DNAME_WW3TIME =
'WW3TIME'
150 character(*),
parameter,
private :: VNAME_NK =
'NK'
153 character(*),
parameter,
private :: VNAME_NTH =
'NTH'
156 character(*),
parameter,
private :: VNAME_PTLOC =
'PTLOC'
159 character(*),
parameter,
private :: VNAME_PTNME =
'PTNME'
162 character(*),
parameter,
private :: VNAME_TIME =
'TIME'
165 character(*),
parameter,
private :: VNAME_WW3TIME =
'WW3TIME'
168 character(*),
parameter,
private :: VNAME_DPO =
'DPO'
171 character(*),
parameter,
private :: VNAME_WAO =
'WAO'
174 character(*),
parameter,
private :: VNAME_WDO =
'WDO'
177 character(*),
parameter,
private :: VNAME_TAUAO =
'TAUAO'
180 character(*),
parameter,
private :: VNAME_TAUDO =
'TAUDO'
183 character(*),
parameter,
private :: VNAME_DAIRO =
'DAIRO'
186 character(*),
parameter,
private :: VNAME_ZET_SETO =
'ZET_SETO'
189 character(*),
parameter,
private :: VNAME_ASO =
'ASO'
192 character(*),
parameter,
private :: VNAME_CAO =
'CAO'
195 character(*),
parameter,
private :: VNAME_CDO =
'CDO'
198 character(*),
parameter,
private :: VNAME_ICEO =
'ICEO'
201 character(*),
parameter,
private :: VNAME_ICEHO =
'ICEHO'
204 character(*),
parameter,
private :: VNAME_ICEFO =
'ICEFO'
207 character(*),
parameter,
private :: VNAME_GRDID =
'GRDID'
210 character(*),
parameter,
private :: VNAME_SPCO =
'SPCO'
229 SUBROUTINE w3iopp ( NPT, XPT, YPT, PNAMES, IMOD )
333 USE w3gdatmd,
ONLY:
nth,
nk,
nspec,
nx,
ny,
x0,
y0,
sx,
gsu,&
357 INTEGER,
INTENT(IN) :: NPT, IMOD
358 REAL,
INTENT(INOUT) :: XPT(NPT), YPT(NPT)
359 CHARACTER(LEN=40),
INTENT(IN) :: PNAMES(NPT)
366 INTEGER :: IX1, IY1, IXS, IYS
368 INTEGER,
SAVE :: IENT = 0
370 INTEGER :: IX(4), IY(4)
372 REAL,
PARAMETER :: ACC = 0.05
376 INTEGER :: IX0, IXN, IY0, IYN, NNX, &
377 KX, KY, JX, IIX, IX2, IY2, IS1
378 REAL :: RD1, RD2, RDTOT, ZBOX(4), DEPTH
379 CHARACTER(LEN=1) :: SEA(5), LND(5), OUT(5)
380 CHARACTER(LEN=9) :: PARTS
381 CHARACTER(LEN=1),
ALLOCATABLE :: STRING(:), LINE1(:), LINE2(:)
383 DATA sea /
' ',
's',
'e',
'a',
' ' /
384 DATA lnd /
' ',
'l',
'n',
'd',
' ' /
385 DATA out /
' ',
'x',
'x',
'x',
' ' /
390 REAL,
ALLOCATABLE :: EquLon(:),EquLat(:),StdLon(:),StdLat(:),AnglPT(:)
396 CALL strace (ient,
'W3IOPP')
405 CALL w3dmo2 ( imod,
ndse,
ndst, npt )
412 ALLOCATE( equlon(npt), equlat(npt), &
413 & stdlon(npt), stdlat(npt), anglpt(npt) )
418 CALL w3lltoeq ( stdlat, stdlon, equlat, equlon, &
433 WRITE (
ndst,9010) ipt, xpt(ipt), ypt(ipt), pnames(ipt)
438 xpt(ipt) = mod( equlon(ipt)+360.0, 360.0 )
439 IF( xpt(ipt) .LT. x0 ) xpt(ipt) = xpt(ipt) + 360.0
444 IF (gtype .NE. ungtype)
THEN
445 ingrid = w3grmp( gsu, xpt(ipt), ypt(ipt), ix, iy, rd )
447 CALL is_in_ungrid(imod, dble(xpt(ipt)), dble(ypt(ipt)), itout, ix, iy, rd)
448 ingrid = (itout.GT.0)
451 IF ( .NOT.ingrid )
THEN
454 WRITE (
ndse,1000) xpt(ipt), ypt(ipt), pnames(ipt)
456 WRITE (
ndse,1001) xpt(ipt), ypt(ipt), pnames(ipt)
464 WRITE (
ndst,9012) ix(k), iy(k), rd(k)
470 IF ( mapsta(iy(1),ix(1)) .EQ. 0 .AND. &
471 mapsta(iy(2),ix(2)) .EQ. 0 .AND. &
472 mapsta(iy(3),ix(3)) .EQ. 0 .AND. &
473 mapsta(iy(4),ix(4)) .EQ. 0 )
THEN
476 WRITE (
ndse,1002) xpt(ipt), ypt(ipt), pnames(ipt)
478 WRITE (
ndse,1003) xpt(ipt), ypt(ipt), pnames(ipt)
508 DEALLOCATE( equlon, equlat, stdlon, stdlat, anglpt )
522 WRITE (
screen,942) (ix(k),iy(k),rd(k),k=1,4)
527 IF ( mapfs(iy(k),ix(k)) .GT. 0 )
THEN
529 rdtot = rdtot + rd(k)
532 rdtot = max( 1.e-7 , rdtot )
534 depth = - ( rd(1)*zbox(1) + &
537 rd(4)*zbox(4) ) / rdtot
542 IF ( rd1 .LT. 0.05 ) ix2 = ix1
543 IF ( rd1 .GT. 0.95 ) ix1 = ix2
544 IF ( rd2 .LT. 0.05 ) iy2 = iy1
545 IF ( rd2 .GT. 0.95 ) iy1 = iy2
548 iy0 = max( 1 , iy1 - 1 )
549 iyn = min( iy2 + 1 , ny )
550 nnx = 13 * ( ixn - ix0 + 1 )
552 ALLOCATE ( string(nnx), line1(nnx), line2(nnx) )
562 IF ( iclose.NE.iclose_none )
THEN
563 WRITE (
screen,945) (1+mod(kx+nx-1,nx),kx=ix0,ixn)
565 WRITE (
screen,945) (kx,kx=ix0,ixn)
573 IF ( iclose.NE.iclose_none .OR. (kx.GE.1 .AND. kx.LE.nx) )
THEN
574 iix = 1 + mod(kx-1+nx,nx)
576 IF ( mapsta(ky,iix) .NE. 0 )
THEN
577 WRITE (parts,
'(F8.1,1X)') -zb(is1)
578 nnx = 2 + (kx-ix0)*13
580 string(nnx+jx:nnx+jx) = parts(jx:jx)
589 nnx = 5 + (kx-ix0)*13
590 IF ( iclose.EQ.iclose_none .AND. (kx.LT.1.OR.kx.GT.nx) )
THEN
591 string(nnx:nnx+4) = out
593 iix = 1 + mod(kx-1+nx,nx)
594 IF ( mapsta(ky,iix) .EQ. 0 )
THEN
595 string(nnx:nnx+4) = lnd
597 string(nnx:nnx+4) = sea
601 WRITE (
screen,947) ky, string
605 IF ( iclose.NE.iclose_none .OR. (kx.GE.1 .AND. kx.LE.nx) )
THEN
607 iix = 1 + mod(kx-1+nx,nx)
608 IF ( mapsta(ky,iix) .NE. 0 )
THEN
609 WRITE (parts,
'(I4,1A,I4)') &
610 nint(1000.*trnx(ky,iix)), &
611 '|', nint(1000.*trny(ky,iix))
612 nnx = 2 + (kx-ix0)*13
614 string(nnx+jx:nnx+jx) = parts(jx:jx)
624 IF ( iclose.NE.iclose_none )
THEN
625 WRITE (
screen,945) (1+mod(kx+nx-1,nx),kx=ix0,ixn)
627 WRITE (
screen,945) (kx,kx=ix0,ixn)
629 DEALLOCATE ( string, line1, line2 )
642 940
FORMAT (/
' Diagnostic output for output points [',i3,
'] :'/&
643 '--------------------------------------------'/ &
644 ' Bottom level in m above grid point'/ &
645 ' X/Y transparency in thousands below')
646 941
FORMAT (/
' Point ',a,
' at ',2f8.2,
' (degr or km)'/ &
647 ' -------------------------------------------------')
648 942
FORMAT (
' Interp. cell :',4(
' (',2i5,f4.2,
')'))
649 943
FORMAT (
' Depth (water level = 0) :',f10.1,
' m'/)
650 945
FORMAT (
' IX = ',4i13)
651 946
FORMAT (
' ',52a1)
652 947
FORMAT (
' IY =',i5,2x,52a1)
655 1000
FORMAT (/
' *** WAVEWATCH-III WARNING :'/ &
656 ' OUTPUT POINT OUT OF GRID : ',2f10.3,2x,a/ &
658 1001
FORMAT (/
' *** WAVEWATCH-III WARNING :'/ &
659 ' OUTPUT POINT OUT OF GRID : ',2e10.3,2x,a/ &
662 1002
FORMAT (/
' *** WAVEWATCH-III WARNING :'/ &
663 ' OUTPUT POINT ON LAND : ',2f10.3,2x,a/ &
665 1003
FORMAT (/
' *** WAVEWATCH-III WARNING :'/ &
666 ' OUTPUT POINT ON LAND : ',2e10.3,2x,a/ &
670 9010
FORMAT (
' TEST W3IOPP : INPUT : ',i4,2f12.2,2x,a)
671 9011
FORMAT (
' CORR. : ',2f12.2)
672 9012
FORMAT (
' TEST W3IOPP : INT. DATA: ',2i6,1f8.2)
673 9013
FORMAT (
' TEST W3IOPP : INT. DATA B): ',4i4,2f8.2)
674 9020
FORMAT (
' TEST W3IOPP : PREPROCESSED DATA',i4,2x,a,2x,2f12.2, &
676 9021
FORMAT (
' TEST W3IOPP : PREPROCESSED DATA',i4,2x,a,2x,2f12.2, &
800 USE w3odatmd,
ONLY: tauao, taudo, dairo
826 REAL,
INTENT(IN) :: A(NTH,NK,0:NSEAL)
831 INTEGER :: I, IX1, IY1, IX(4), IY(4), J, IS(4), &
834 INTEGER :: IOFF, IERR_MPI
835 INTEGER :: STAT(MPI_STATUS_SIZE,4*NOPTS)
838 INTEGER,
SAVE :: IENT = 0
840 REAL :: RD(4), RDS, RDI, FACRD, &
841 WNDX, WNDY, CURX, CURY, FAC1(NK), &
842 FAC2(NK), FAC3(NK), FAC4(NK)
846 INTEGER :: JSEA, ISEA
848 REAL :: SPTEST(NK,NTH)
851 REAL :: Spectr(NSPEC), AnglDIS
858 CALL strace (ient,
'W3IOPE')
874 ix(:) = iptint(1,:,i)
875 iy(:) = iptint(2,:,i)
892 is(j) = mapfs(iy(j),ix(j))
893 im(j) = mapsta(iy(j),ix(j))
894 IF ( im(j).GT.0 )
THEN
901 IF ( im(j).LT.0 )
THEN
913 IF ( rds+rdi .GT. 1.e-7 )
THEN
914 facrd = 1. / (rds+rdi)
919 WRITE (ndst,9002) (is(j),j=1,4), (im(j),j=1,4), (rd(j),j=1,4)
927 isea = mapfs(iy(j),ix(j))
929 jsea = 1 + (isea-1)/naproc
934 icefo(i) = icefo(i) + rd(j)*icef(jsea)
937 icefo(i) = rd(1)*icef(is(1)) + rd(2)*icef(is(2)) + &
938 rd(3)*icef(is(3)) + rd(4)*icef(is(4))
941 iceo(i) = rd(1)*ice(is(1)) + rd(2)*ice(is(2)) + &
942 rd(3)*ice(is(3)) + rd(4)*ice(is(4))
944 iceho(i) = rd(1)*iceh(is(1)) + rd(2)*iceh(is(2)) + &
945 rd(3)*iceh(is(3)) + rd(4)*iceh(is(4))
947 dpo(i) = rd(1)*dw(is(1)) + rd(2)*dw(is(2)) + &
948 rd(3)*dw(is(3)) + rd(4)*dw(is(4))
957 dairo(i) = rd(1)*rhoair(is(1)) + rd(2)*rhoair(is(2)) + &
958 rd(3)*rhoair(is(3)) + rd(4)*rhoair(is(4))
961 wndx = rd(1) * ua(is(1)) * cos(ud(is(1))) + &
962 rd(2) * ua(is(2)) * cos(ud(is(2))) + &
963 rd(3) * ua(is(3)) * cos(ud(is(3))) + &
964 rd(4) * ua(is(4)) * cos(ud(is(4)))
965 wndy = rd(1) * ua(is(1)) * sin(ud(is(1))) + &
966 rd(2) * ua(is(2)) * sin(ud(is(2))) + &
967 rd(3) * ua(is(3)) * sin(ud(is(3))) + &
968 rd(4) * ua(is(4)) * sin(ud(is(4)))
970 wao(i) = sqrt( wndx**2 + wndy**2 )
971 IF ( wao(i).GT.1.e-7 )
THEN
972 wdo(i) = atan2(wndy,wndx)
981 taux = rd(1) *
taua(is(1)) * cos(
tauadir(is(1))) + &
985 tauy = rd(1) *
taua(is(1)) * sin(
tauadir(is(1))) + &
990 tauao(i) = sqrt( taux**2 + tauy**2 )
991 IF ( tauao(i).GT.1.e-7 )
THEN
992 taudo(i) = atan2(tauy,taux)
1001 aso(i) = rd(1)*as(is(1)) + rd(2)*as(is(2)) + &
1002 rd(3)*as(is(3)) + rd(4)*as(is(4))
1004 curx = rd(1)*cx(is(1)) + rd(2)*cx(is(2)) + &
1005 rd(3)*cx(is(3)) + rd(4)*cx(is(4))
1006 cury = rd(1)*cy(is(1)) + rd(2)*cy(is(2)) + &
1007 rd(3)*cy(is(3)) + rd(4)*cy(is(4))
1009 cao(i) = sqrt( curx**2 + cury**2 )
1010 IF ( cao(i).GT.1.e-7 )
THEN
1011 cdo(i) = atan2(cury,curx)
1021 IF ( rds .GT. 1.e-7 )
THEN
1022 facrd = (rds+rdi) / rds
1027 WRITE (ndst,9003) (rd(j),j=1,4)
1037 sp(ith,ik,j) = a(ith,ik,is(j))
1047 CALL mpi_startall ( 4,
irqpo2(ioff), ierr_mpi )
1048 CALL mpi_waitall ( 4,
irqpo2(ioff), stat, ierr_mpi )
1054 fac1(ik) =
tpi * sig(ik) / cg(ik,is(1))
1055 fac2(ik) =
tpi * sig(ik) / cg(ik,is(2))
1056 fac3(ik) =
tpi * sig(ik) / cg(ik,is(3))
1057 fac4(ik) =
tpi * sig(ik) / cg(ik,is(4))
1062 isp = ith + (ik-1)*nth
1063 spco(isp,i) = rd(1) * sp(ith,ik,1) * fac1(ik) &
1064 + rd(2) * sp(ith,ik,2) * fac2(ik) &
1065 + rd(3) * sp(ith,ik,3) * fac3(ik) &
1066 + rd(4) * sp(ith,ik,4) * fac4(ik)
1068 sptest(ik,ith) = spco(isp,i)
1080 angldis = -
angld(irot)
1081 CALL w3acturn( nth, nk, angldis, spectr )
1088 WRITE (ndst,9004) dpo(i), wao(i), wdo(i)*
rade, &
1107 9000
FORMAT (
' TEST W3IOPE : POINT NR.:',i3)
1108 9001
FORMAT (
' TEST W3IOPE :',2i8,
' (',i3,
')')
1109 9002
FORMAT (
' TEST W3IOPE :',4i7,2x,4i2,2x,4f5.2)
1110 9003
FORMAT (
' TEST W3IOPE :',40x,4f5.2)
1111 9004
FORMAT (
' TEST W3IOPE :',f8.1,2(f7.2,f7.1))
1129 integer,
intent(in) :: errcode, iline
1132 if(errcode /= nf90_noerr)
then
1133 WRITE(
ndse,*)
' *** WAVEWATCH III ERROR IN W3IOPO :'
1134 WRITE(
ndse,*)
' LINE NUMBER ', iline
1135 WRITE(
ndse,*)
' NETCDF ERROR MESSAGE: '
1136 WRITE(
ndse,*)
'Error: ', trim(nf90_strerror(errcode))
1151 SUBROUTINE w3iopon_read(IOTST, IMOD_IN, filename, ncerr)
1162 USE w3odatmd,
ONLY: tauao, taudo, dairo
1169 INTEGER,
INTENT(OUT) :: IOTST
1170 INTEGER,
INTENT(IN),
OPTIONAL :: IMOD_IN
1171 character(*),
intent(in) :: filename
1172 integer,
intent(inout) :: ncerr
1173 INTEGER :: IGRD,MK,MTH
1175 integer :: d_nopts, d_nspec, d_vsize, d_namelen, d_grdidlen, d_time, d_ww3time
1176 integer :: d_nopts_len, d_nspec_len, d_vsize_len, d_namelen_len, d_grdidlen_len, d_time_len, d_ww3time_len
1177 integer :: v_idtst, v_vertst, v_nk, v_nth, v_ptloc, v_ptnme, v_time, v_ww3time
1178 integer :: v_dpo, v_wao, v_wdo
1180 integer :: v_tauao,v_taudo, v_dairo
1183 integer :: v_zet_seto
1185 integer :: v_aso, v_cao, v_cdo, v_iceo
1186 integer :: v_iceho, v_icefo, v_grdid, v_spco
1187 integer :: v_title_len, v_version_len
1188 CHARACTER(LEN=31) :: IDTST
1189 CHARACTER(LEN=10) :: VERTST
1193 IF (
PRESENT(imod_in))
THEN
1200 ncerr = nf90_open(filename, nf90_nowrite, fh)
1201 if (nf90_err(ncerr) .ne. 0)
return
1204 ncerr = nf90_inquire_attribute(fh, nf90_global,
'title', len = v_title_len)
1205 if (nf90_err(ncerr) .ne. 0)
return
1206 ncerr = nf90_get_att(fh, nf90_global,
'title', idtst)
1207 if (nf90_err(ncerr) .ne. 0)
return
1208 ncerr = nf90_inquire_attribute(fh, nf90_global,
'version', len = v_version_len)
1209 if (nf90_err(ncerr) .ne. 0)
return
1210 ncerr = nf90_get_att(fh, nf90_global,
'version', vertst)
1211 if (nf90_err(ncerr) .ne. 0)
return
1213 IF ( idtst .NE. idstr )
THEN
1214 WRITE (ndse,902) idtst, idstr
1217 IF ( vertst .NE. veropt )
THEN
1218 WRITE (ndse,903) vertst, veropt
1223 ncerr = nf90_inq_dimid(fh, dname_nopts, d_nopts)
1224 if (nf90_err(ncerr) .ne. 0)
return
1225 ncerr = nf90_inquire_dimension(fh, d_nopts, len = d_nopts_len)
1226 if (nf90_err(ncerr) .ne. 0)
return
1230 ncerr = nf90_inq_dimid(fh, dname_nspec, d_nspec)
1231 if (nf90_err(ncerr) .ne. 0)
return
1232 ncerr = nf90_inquire_dimension(fh, d_nspec, len = d_nspec_len)
1233 if (nf90_err(ncerr) .ne. 0)
return
1236 ncerr = nf90_inq_dimid(fh, dname_vsize, d_vsize)
1237 if (nf90_err(ncerr) .ne. 0)
return
1238 ncerr = nf90_inquire_dimension(fh, d_vsize, len = d_vsize_len)
1239 if (nf90_err(ncerr) .ne. 0)
return
1242 ncerr = nf90_inq_dimid(fh, dname_namelen, d_namelen)
1243 if (nf90_err(ncerr) .ne. 0)
return
1244 ncerr = nf90_inquire_dimension(fh, d_namelen, len = d_namelen_len)
1245 if (nf90_err(ncerr) .ne. 0)
return
1248 ncerr = nf90_inq_dimid(fh, dname_grdidlen, d_grdidlen)
1249 if (nf90_err(ncerr) .ne. 0)
return
1250 ncerr = nf90_inquire_dimension(fh, d_grdidlen, len = d_grdidlen_len)
1251 if (nf90_err(ncerr) .ne. 0)
return
1254 ncerr = nf90_inq_dimid(fh, dname_time, d_time)
1255 if (nf90_err(ncerr) .ne. 0)
return
1256 ncerr = nf90_inquire_dimension(fh, d_time, len = d_time_len)
1257 if (nf90_err(ncerr) .ne. 0)
return
1259 IF ( ipass .LE. d_time_len )
THEN
1261 IF ( ipass.EQ.1 )
THEN
1264 ncerr = nf90_inq_varid(fh, vname_nk, v_nk)
1265 if (nf90_err(ncerr) .ne. 0)
return
1266 ncerr = nf90_get_var(fh, v_nk, mk)
1267 if (nf90_err(ncerr) .ne. 0)
return
1268 ncerr = nf90_inq_varid(fh, vname_nth, v_nth)
1269 if (nf90_err(ncerr) .ne. 0)
return
1270 ncerr = nf90_get_var(fh, v_nth, mth)
1271 if (nf90_err(ncerr) .ne. 0)
return
1275 IF (
nk.NE.mk .OR.
nth.NE.mth)
THEN
1276 WRITE (ndse,904) mk, mth,
nk,
nth
1281 IF ( .NOT. o2init ) &
1282 CALL w3dmo2 ( igrd, ndse, ndst, nopts )
1285 ncerr = nf90_inq_varid(fh, vname_ptloc, v_ptloc)
1286 if (nf90_err(ncerr) .ne. 0)
return
1287 ncerr = nf90_get_var(fh, v_ptloc, ptloc, start = (/ 1, 1/), &
1288 count = (/ d_vsize_len, d_nopts_len /))
1289 if (nf90_err(ncerr) .ne. 0)
return
1290 ncerr = nf90_inq_varid(fh, vname_ptnme, v_ptnme)
1291 if (nf90_err(ncerr) .ne. 0)
return
1292 ncerr = nf90_get_var(fh, v_ptnme, ptnme)
1293 if (nf90_err(ncerr) .ne. 0)
return
1298 ncerr = nf90_inq_varid(fh, vname_ww3time, v_ww3time)
1299 if (nf90_err(ncerr) .ne. 0)
return
1300 ncerr = nf90_get_var(fh, v_ww3time,
time, start = (/ 1, ipass/), &
1301 count = (/ d_vsize_len, 1 /))
1302 if (nf90_err(ncerr) .ne. 0)
return
1311 ncerr = nf90_inq_varid(fh, vname_dpo, v_dpo)
1312 if (nf90_err(ncerr) .ne. 0)
return
1313 ncerr = nf90_get_var(fh, v_dpo, dpo, start = (/ 1, ipass/), &
1314 count = (/ nopts, 1 /))
1315 if (nf90_err(ncerr) .ne. 0)
return
1316 ncerr = nf90_inq_varid(fh, vname_wao, v_wao)
1317 if (nf90_err(ncerr) .ne. 0)
return
1318 ncerr = nf90_get_var(fh, v_wao, wao, start = (/ 1, ipass/), &
1319 count = (/ nopts, 1 /))
1320 if (nf90_err(ncerr) .ne. 0)
return
1321 ncerr = nf90_inq_varid(fh, vname_wdo, v_wdo)
1322 if (nf90_err(ncerr) .ne. 0)
return
1323 ncerr = nf90_get_var(fh, v_wdo, wdo, start = (/ 1, ipass/), &
1324 count = (/ nopts, 1 /))
1325 if (nf90_err(ncerr) .ne. 0)
return
1327 ncerr = nf90_inq_varid(fh, vname_tauao, v_tauao)
1328 if (nf90_err(ncerr) .ne. 0)
return
1329 ncerr = nf90_get_var(fh, v_tauao, tauao, start = (/ 1, ipass/), &
1330 count = (/ nopts, 1 /))
1331 if (nf90_err(ncerr) .ne. 0)
return
1332 ncerr = nf90_inq_varid(fh, vname_taudo, v_taudo)
1333 if (nf90_err(ncerr) .ne. 0)
return
1334 ncerr = nf90_get_var(fh, v_taudo, taudo, start = (/ 1, ipass/), &
1335 count = (/ nopts, 1 /))
1336 if (nf90_err(ncerr) .ne. 0)
return
1337 ncerr = nf90_inq_varid(fh, vname_dairo, v_dairo)
1338 if (nf90_err(ncerr) .ne. 0)
return
1339 ncerr = nf90_get_var(fh, v_dairo, dairo, start = (/ 1, ipass/), &
1340 count = (/ nopts, 1 /))
1341 if (nf90_err(ncerr) .ne. 0)
return
1344 ncerr = nf90_inq_varid(fh,
zet_seto, v_zet_seto)
1345 if (nf90_err(ncerr) .ne. 0)
return
1346 ncerr = nf90_get_var(fh, v_zet_seto,
zet_seto, start = (/ 1, ipass/), &
1347 count = (/ nopts, 1 /))
1348 if (nf90_err(ncerr) .ne. 0)
return
1350 ncerr = nf90_inq_varid(fh, vname_aso, v_aso)
1351 if (nf90_err(ncerr) .ne. 0)
return
1352 ncerr = nf90_get_var(fh, v_aso, aso, start = (/ 1, ipass/), &
1353 count = (/ nopts, 1 /))
1354 if (nf90_err(ncerr) .ne. 0)
return
1355 ncerr = nf90_inq_varid(fh, vname_cao, v_cao)
1356 if (nf90_err(ncerr) .ne. 0)
return
1357 ncerr = nf90_get_var(fh, v_cao, cao, start = (/ 1, ipass/), &
1358 count = (/ nopts, 1 /))
1359 if (nf90_err(ncerr) .ne. 0)
return
1360 ncerr = nf90_inq_varid(fh, vname_cdo, v_cdo)
1361 if (nf90_err(ncerr) .ne. 0)
return
1362 ncerr = nf90_get_var(fh, v_cdo, cdo, start = (/ 1, ipass/), &
1363 count = (/ nopts, 1 /))
1364 if (nf90_err(ncerr) .ne. 0)
return
1365 ncerr = nf90_inq_varid(fh, vname_iceo, v_iceo)
1366 if (nf90_err(ncerr) .ne. 0)
return
1367 ncerr = nf90_get_var(fh, v_iceo, iceo, start = (/ 1, ipass/), &
1368 count = (/ nopts, 1 /))
1369 if (nf90_err(ncerr) .ne. 0)
return
1370 ncerr = nf90_inq_varid(fh, vname_iceho, v_iceho)
1371 if (nf90_err(ncerr) .ne. 0)
return
1372 ncerr = nf90_get_var(fh, v_iceho, iceho, start = (/ 1, ipass/), &
1373 count = (/ nopts, 1 /))
1374 if (nf90_err(ncerr) .ne. 0)
return
1375 ncerr = nf90_inq_varid(fh, vname_icefo, v_icefo)
1376 if (nf90_err(ncerr) .ne. 0)
return
1377 ncerr = nf90_get_var(fh, v_icefo, icefo, start = (/ 1, ipass/), &
1378 count = (/ nopts, 1 /))
1379 if (nf90_err(ncerr) .ne. 0)
return
1380 ncerr = nf90_inq_varid(fh, vname_grdid, v_grdid)
1381 if (nf90_err(ncerr) .ne. 0)
return
1382 ncerr = nf90_get_var(fh, v_grdid, grdid, start = (/ 1, 1, ipass/), &
1383 count = (/ 13, nopts, 1 /))
1384 if (nf90_err(ncerr) .ne. 0)
return
1385 ncerr = nf90_inq_varid(fh, vname_spco, v_spco)
1386 if (nf90_err(ncerr) .ne. 0)
return
1387 ncerr = nf90_get_var(fh, v_spco, spco, start = (/ 1, 1, ipass/), &
1388 count = (/
nspec, nopts, 1 /))
1389 if (nf90_err(ncerr) .ne. 0)
return
1398 ncerr = nf90_close(fh)
1399 if (nf90_err(ncerr) .ne. 0)
return
1401 902
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPON :'/ &
1402 ' ILEGAL IDSTR, READ : ',a/ &
1404 903
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPON :'/ &
1405 ' ILEGAL VEROPT, READ : ',a/ &
1407 904
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO :'/ &
1408 ' ERROR IN SPECTRA, MK, MTH : ',2i8/ &
1409 ' ARRAY DIMENSIONS : ',2i8/)
1433 grdid, iceo, iceho, icefo
1436 USE w3odatmd,
ONLY: tauao, taudo, dairo
1443 integer,
intent(in) :: timestep_only
1444 character(*),
intent(in) :: filename
1445 integer,
intent(inout) :: ncerr
1446 integer :: ndim, nvar, fmt, itime, fh
1447 integer :: d_nopts, d_nspec, d_vsize, d_namelen, d_grdidlen, d_time
1448 integer :: v_idtst, v_vertst, v_nk, v_nth, v_ptloc, v_ptnme, v_time, v_ww3time
1449 integer :: v_dpo, v_wao, v_wdo
1451 integer :: v_tauao, v_taudo, v_dairo
1454 integer :: v_zet_seto
1456 integer :: v_aso, v_cao, v_cdo, v_iceo
1457 integer :: v_iceho, v_icefo, v_grdid, v_spco
1458 integer :: curdate(8), refdate(8),ierr
1459 double precision :: outjulday
1462 IF ( ipass.EQ.1 .OR. timestep_only.EQ.1 )
THEN
1464 ncerr = nf90_create(filename, nf90_netcdf4, fh)
1465 if (nf90_err(ncerr) .ne. 0)
return
1468 ncerr = nf90_def_dim(fh, dname_nopts, nopts, d_nopts)
1469 if (nf90_err(ncerr) .ne. 0)
return
1470 ncerr = nf90_def_dim(fh, dname_nspec,
nspec, d_nspec)
1471 if (nf90_err(ncerr) .ne. 0)
return
1472 ncerr = nf90_def_dim(fh, dname_vsize, 2, d_vsize)
1473 if (nf90_err(ncerr) .ne. 0)
return
1474 ncerr = nf90_def_dim(fh, dname_namelen, 40, d_namelen)
1475 if (nf90_err(ncerr) .ne. 0)
return
1476 ncerr = nf90_def_dim(fh, dname_grdidlen, 13, d_grdidlen)
1477 if (nf90_err(ncerr) .ne. 0)
return
1478 ncerr = nf90_def_dim(fh, dname_time, nf90_unlimited, d_time)
1479 if (nf90_err(ncerr) .ne. 0)
return
1482 ncerr = nf90_put_att(fh, nf90_global,
'title', idstr)
1483 if (nf90_err(ncerr) .ne. 0)
return
1484 ncerr = nf90_put_att(fh, nf90_global,
'version', veropt)
1485 if (nf90_err(ncerr) .ne. 0)
return
1488 ncerr = nf90_def_var(fh, vname_nk, nf90_int, v_nk)
1489 if (nf90_err(ncerr) .ne. 0)
return
1490 ncerr = nf90_def_var(fh, vname_nth, nf90_int, v_nth)
1491 if (nf90_err(ncerr) .ne. 0)
return
1494 ncerr = nf90_def_var(fh, vname_ptloc, nf90_float, (/d_vsize, d_nopts/), v_ptloc)
1495 if (nf90_err(ncerr) .ne. 0)
return
1496 ncerr = nf90_def_var(fh, vname_ptnme, nf90_char, (/d_namelen, d_nopts/), v_ptnme)
1497 if (nf90_err(ncerr) .ne. 0)
return
1500 ncerr = nf90_def_var(fh, vname_ww3time, nf90_int, (/d_vsize, d_time/),v_ww3time)
1501 if (nf90_err(ncerr) .ne. 0)
return
1502 ncerr = nf90_def_var(fh, vname_time, nf90_double, (/d_time/),v_time)
1503 if (nf90_err(ncerr) .ne. 0)
return
1506 ncerr = nf90_put_att(fh, v_time,
'long_name',
'time in 360 day calendar')
1507 if (nf90_err(ncerr) .ne. 0)
return
1509 ncerr = nf90_put_att(fh, v_time,
'long_name',
'time in 365 day calendar')
1510 if (nf90_err(ncerr) .ne. 0)
return
1512 ncerr = nf90_put_att(fh, v_time,
'long_name',
'Julian day (UT)')
1513 if (nf90_err(ncerr) .ne. 0)
return
1515 ncerr = nf90_put_att(fh, v_time,
'standard_name',
'time')
1516 if (nf90_err(ncerr) .ne. 0)
return
1517 ncerr = nf90_put_att(fh, v_time,
'units',
'days since 1990-01-01 00:00:00')
1518 if (nf90_err(ncerr) .ne. 0)
return
1519 ncerr = nf90_put_att(fh, v_time,
'conventions',
'Relative Julian days with decimal part (as parts of the day)')
1520 if (nf90_err(ncerr) .ne. 0)
return
1521 ncerr = nf90_put_att(fh, v_time,
'axis',
'T')
1522 if (nf90_err(ncerr) .ne. 0)
return
1523 ncerr = nf90_put_att(fh, v_time,
'calendar', trim(
caltype))
1524 if (nf90_err(ncerr) .ne. 0)
return
1527 ncerr = nf90_def_var(fh, vname_dpo, nf90_float, (/d_nopts, d_time/), v_dpo)
1528 if (nf90_err(ncerr) .ne. 0)
return
1529 ncerr = nf90_def_var(fh, vname_wao, nf90_float, (/d_nopts, d_time/), v_wao)
1530 if (nf90_err(ncerr) .ne. 0)
return
1531 ncerr = nf90_def_var(fh, vname_wdo, nf90_float, (/d_nopts, d_time/), v_wdo)
1532 if (nf90_err(ncerr) .ne. 0)
return
1534 ncerr = nf90_def_var(fh, vname_tauao, nf90_float, (/d_nopts, d_time/), v_tauao)
1535 if (nf90_err(ncerr) .ne. 0)
return
1536 ncerr = nf90_def_var(fh, vname_taudo, nf90_float, (/d_nopts, d_time/), v_taudo)
1537 if (nf90_err(ncerr) .ne. 0)
return
1538 ncerr = nf90_def_var(fh, vname_dairo, nf90_float, (/d_nopts, d_time/), v_dairo)
1539 if (nf90_err(ncerr) .ne. 0)
return
1542 ncerr = nf90_def_var(fh, vname_zet_seto, nf90_float, (/d_nopts, d_time/), v_zet_seto)
1543 if (nf90_err(ncerr) .ne. 0)
return
1545 ncerr = nf90_def_var(fh, vname_aso, nf90_float, (/d_nopts, d_time/), v_aso)
1546 if (nf90_err(ncerr) .ne. 0)
return
1547 ncerr = nf90_def_var(fh, vname_cao, nf90_float, (/d_nopts, d_time/), v_cao)
1548 if (nf90_err(ncerr) .ne. 0)
return
1549 ncerr = nf90_def_var(fh, vname_cdo, nf90_float, (/d_nopts, d_time/), v_cdo)
1550 if (nf90_err(ncerr) .ne. 0)
return
1551 ncerr = nf90_def_var(fh, vname_iceo, nf90_float, (/d_nopts, d_time/), v_iceo)
1552 if (nf90_err(ncerr) .ne. 0)
return
1553 ncerr = nf90_def_var(fh, vname_iceho, nf90_float, (/d_nopts, d_time/), v_iceho)
1554 if (nf90_err(ncerr) .ne. 0)
return
1555 ncerr = nf90_def_var(fh, vname_icefo, nf90_float, (/d_nopts, d_time/), v_icefo)
1556 if (nf90_err(ncerr) .ne. 0)
return
1557 ncerr = nf90_def_var(fh, vname_grdid, nf90_char, (/d_grdidlen, d_nopts, d_time/), v_grdid)
1558 if (nf90_err(ncerr) .ne. 0)
return
1561 ncerr = nf90_def_var(fh, vname_spco, nf90_float, (/d_nspec, d_nopts, d_time/), v_spco)
1562 if (nf90_err(ncerr) .ne. 0)
return
1565 ncerr = nf90_enddef(fh)
1566 if (nf90_err(ncerr) .ne. 0)
return
1569 ncerr = nf90_put_var(fh, v_nk,
nk)
1570 if (nf90_err(ncerr) .ne. 0)
return
1571 ncerr = nf90_put_var(fh, v_nth,
nth)
1572 if (nf90_err(ncerr) .ne. 0)
return
1575 if (
associated(ptloc))
then
1576 ncerr = nf90_put_var(fh, v_ptloc, ptloc(:,1:nopts))
1577 if (nf90_err(ncerr) .ne. 0)
return
1579 if (
associated(ptnme))
then
1580 ncerr = nf90_put_var(fh, v_ptnme, ptnme(1:nopts))
1581 if (nf90_err(ncerr) .ne. 0)
return
1586 ncerr = nf90_open(filename, nf90_write, fh)
1587 if (nf90_err(ncerr) .ne. 0)
return
1591 IF ( timestep_only.EQ.1 )
THEN
1598 IF ( itime > 1 )
THEN
1599 ncerr = nf90_inq_varid(fh, vname_ww3time, v_ww3time)
1600 if (nf90_err(ncerr) .ne. 0)
return
1601 ncerr = nf90_inq_varid(fh, vname_time, v_time)
1602 if (nf90_err(ncerr) .ne. 0)
return
1604 ncerr = nf90_put_var(fh, v_ww3time,
time, start = (/ 1, itime/), &
1606 if (nf90_err(ncerr) .ne. 0)
return
1608 CALL u2d(
'days since 1990-01-01 00:00:00',refdate,ierr)
1610 outjulday=
tsub(refdate,curdate)
1612 ncerr = nf90_put_var(fh, v_time, outjulday, start = (/itime/))
1613 if (nf90_err(ncerr) .ne. 0)
return
1617 IF ( itime > 1 )
THEN
1618 ncerr = nf90_inq_varid(fh, vname_dpo, v_dpo)
1619 if (nf90_err(ncerr) .ne. 0)
return
1620 ncerr = nf90_inq_varid(fh, vname_wao, v_wao)
1621 if (nf90_err(ncerr) .ne. 0)
return
1622 ncerr = nf90_inq_varid(fh, vname_wdo, v_wdo)
1623 if (nf90_err(ncerr) .ne. 0)
return
1625 ncerr = nf90_inq_varid(fh, vname_tauao, v_tauao)
1626 if (nf90_err(ncerr) .ne. 0)
return
1627 ncerr = nf90_inq_varid(fh, vname_taudo, v_taudo)
1628 if (nf90_err(ncerr) .ne. 0)
return
1629 ncerr = nf90_inq_varid(fh, vname_dairo, v_dairo)
1630 if (nf90_err(ncerr) .ne. 0)
return
1633 ncerr = nf90_inq_varid(fh, vname_zet_seto, v_zet_seto)
1634 if (nf90_err(ncerr) .ne. 0)
return
1636 ncerr = nf90_inq_varid(fh, vname_aso, v_aso)
1637 if (nf90_err(ncerr) .ne. 0)
return
1638 ncerr = nf90_inq_varid(fh, vname_cao, v_cao)
1639 if (nf90_err(ncerr) .ne. 0)
return
1640 ncerr = nf90_inq_varid(fh, vname_cdo, v_cdo)
1641 if (nf90_err(ncerr) .ne. 0)
return
1642 ncerr = nf90_inq_varid(fh, vname_iceo, v_iceo)
1643 if (nf90_err(ncerr) .ne. 0)
return
1644 ncerr = nf90_inq_varid(fh, vname_iceho, v_iceho)
1645 if (nf90_err(ncerr) .ne. 0)
return
1646 ncerr = nf90_inq_varid(fh, vname_icefo, v_icefo)
1647 if (nf90_err(ncerr) .ne. 0)
return
1648 ncerr = nf90_inq_varid(fh, vname_grdid, v_grdid)
1649 if (nf90_err(ncerr) .ne. 0)
return
1650 ncerr = nf90_inq_varid(fh, vname_spco, v_spco)
1651 if (nf90_err(ncerr) .ne. 0)
return
1654 ncerr = nf90_put_var(fh, v_dpo, dpo, start = (/ 1, itime/), &
1655 count = (/ nopts, 1 /))
1656 if (nf90_err(ncerr) .ne. 0)
return
1658 ncerr = nf90_put_var(fh, v_wao, wao, start = (/ 1, itime/), &
1659 count = (/ nopts, 1 /))
1660 if (nf90_err(ncerr) .ne. 0)
return
1662 ncerr = nf90_put_var(fh, v_wdo, wdo, start = (/ 1, itime/), &
1663 count = (/ nopts, 1 /))
1664 if (nf90_err(ncerr) .ne. 0)
return
1667 ncerr = nf90_put_var(fh, v_tauao, tauao, start = (/ 1, itime/), &
1668 count = (/ nopts, 1 /))
1669 if (nf90_err(ncerr) .ne. 0)
return
1671 ncerr = nf90_put_var(fh, v_taudo, taudo, start = (/ 1, itime/), &
1672 count = (/ nopts, 1 /))
1673 if (nf90_err(ncerr) .ne. 0)
return
1675 ncerr = nf90_put_var(fh, v_dairo, dairo, start = (/ 1, itime/), &
1676 count = (/ nopts, 1 /))
1677 if (nf90_err(ncerr) .ne. 0)
return
1680 ncerr = nf90_put_var(fh, v_zet_seto,
zet_seto, start = (/ 1, itime/), &
1681 count = (/ nopts, 1 /))
1682 if (nf90_err(ncerr) .ne. 0)
return
1684 ncerr = nf90_put_var(fh, v_aso, aso, start = (/ 1, itime/), &
1685 count = (/ nopts, 1 /))
1686 if (nf90_err(ncerr) .ne. 0)
return
1688 ncerr = nf90_put_var(fh, v_cao, cao, start = (/ 1, itime/), &
1689 count = (/ nopts, 1 /))
1690 if (nf90_err(ncerr) .ne. 0)
return
1692 ncerr = nf90_put_var(fh, v_cdo, cdo, start = (/ 1, itime/), &
1693 count = (/ nopts, 1 /))
1694 if (nf90_err(ncerr) .ne. 0)
return
1696 ncerr = nf90_put_var(fh, v_iceo, iceo, start = (/ 1, itime/), &
1697 count = (/ nopts, 1 /))
1698 if (nf90_err(ncerr) .ne. 0)
return
1700 ncerr = nf90_put_var(fh, v_iceho, iceho, start = (/ 1, itime/), &
1701 count = (/ nopts, 1 /))
1702 if (nf90_err(ncerr) .ne. 0)
return
1704 ncerr = nf90_put_var(fh, v_icefo, icefo, start = (/ 1, itime/), &
1705 count = (/ nopts, 1 /))
1706 if (nf90_err(ncerr) .ne. 0)
return
1708 ncerr = nf90_put_var(fh, v_grdid, grdid, start = (/ 1, 1, itime/), &
1709 count = (/ 13, nopts, 1 /))
1710 if (nf90_err(ncerr) .ne. 0)
return
1713 ncerr = nf90_put_var(fh, v_spco, spco, start = (/ 1, 1, itime/), &
1714 count = (/
nspec, nopts, 1 /))
1715 if (nf90_err(ncerr) .ne. 0)
return
1718 ncerr = nf90_close(fh)
1719 if (nf90_err(ncerr) .ne. 0)
return
1746 SUBROUTINE w3iopon ( INXOUT, NDSOP, IOTST, IMOD)
1761 CHARACTER,
INTENT(IN) :: INXOUT*(*)
1762 INTEGER,
INTENT(IN) :: NDSOP
1763 INTEGER,
INTENT(OUT) :: IOTST
1764 INTEGER,
INTENT(IN),
OPTIONAL :: IMOD
1766 CHARACTER(LEN=15) :: TIMETAG
1768 character(len = 124) :: filename
1772 CALL strace (ient,
'W3IOPON')
1782 IF (
PRESENT(imod))
THEN
1788 CALL w3seto(igrd, ndse, ndst)
1789 CALL w3setg(igrd, ndse, ndst)
1790 CALL w3setw(igrd, ndse, ndst)
1793 IF (inxout .NE.
'READ' .AND. inxout .NE.
'WRITE')
THEN
1794 WRITE (ndse, 900) inxout
1799 IF (
ofiles(2) .EQ. 1 )
THEN
1801 WRITE(timetag,
"(i8.8,'.'i6.6)")
time(1),
time(2)
1802 filename = fnmpre(:len_trim(fnmpre))//timetag//
'.out_pnt.'//
filext(:len_trim(
filext))//
'.nc'
1804 filename = fnmpre(:len_trim(fnmpre))//
'out_pnt.'//
filext(:len_trim(
filext))//
'.nc'
1808 IF (inxout .EQ.
'READ')
THEN
1813 if (nf90_err(ncerr) .ne. 0)
then
1814 WRITE(ndse,*)
' *** WAVEWATCH III ERROR IN W3IOPO :'
1815 WRITE(ndse,*)
'Nonzero return at end of W3IOPON'
1816 WRITE(ndse,*)
'Error: ', trim(nf90_strerror(ncerr))
1824 900
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO :'/ &
1825 ' ILEGAL INXOUT VALUE: ',a/)
1905 SUBROUTINE w3iopo ( INXOUT, NDSOP, IOTST, IMOD &
1993 grdid, iceo, iceho, icefo
1995 USE w3odatmd,
ONLY: tauao, taudo, dairo
2015 INTEGER,
INTENT(IN) :: NDSOP
2017 INTEGER,
INTENT(IN),
OPTIONAL :: NDSOA
2019 INTEGER,
INTENT(OUT) :: IOTST
2020 INTEGER,
INTENT(IN),
OPTIONAL :: IMOD
2021 CHARACTER,
INTENT(IN) :: INXOUT*(*)
2026 INTEGER :: IGRD, IERR, MK, MTH, I, J
2028 INTEGER,
SAVE :: IENT = 0
2030 LOGICAL,
SAVE :: WRITE
2031 CHARACTER(LEN=31) :: IDTST
2032 CHARACTER(LEN=10) :: VERTST
2034 CHARACTER(LEN=15) :: TIMETAG
2039 CALL strace (ient,
'W3IOPO')
2046 IF (
PRESENT(imod) )
THEN
2052 CALL w3seto ( igrd, ndse, ndst )
2053 CALL w3setg ( igrd, ndse, ndst )
2054 CALL w3setw ( igrd, ndse, ndst )
2056 IF (inxout.NE.
'READ' .AND. inxout.NE.
'WRITE' )
THEN
2057 WRITE (ndse,900) inxout
2062 IF ( ipass.EQ.1 .AND. ofiles(2) .EQ. 0)
THEN
2063 WRITE = inxout.EQ.
'WRITE'
2065 IF (
WRITE .AND. inxout.EQ.
'READ' )
THEN
2066 WRITE (ndse,901) inxout
2073 IF ( ipass.EQ.1 .AND. ofiles(2) .EQ. 0 )
THEN
2076 j = len_trim(fnmpre)
2079 WRITE (ndst,9001) fnmpre(:j)//
'out_pnt.'//
filext(:i)
2082 OPEN (ndsop,
file=fnmpre(:j)//
'out_pnt.'//
filext(:i), &
2083 form=
'UNFORMATTED', convert=
file_endian,err=800,iostat=ierr)
2085 OPEN (ndsoa,
file=fnmpre(:j)//
'out_pnt.'//
filext(:i)//
'.txt', &
2086 form=
'FORMATTED', err=800,iostat=ierr)
2089 OPEN (ndsop,
file=fnmpre(:j)//
'out_pnt.'//
filext(:i), &
2090 form=
'UNFORMATTED', convert=
file_endian,err=800,iostat=ierr,status=
'OLD')
2100 idstr, veropt,
nk,
nth, nopts
2103 'IDSTR, VEROPT, NK, NTH, NOPTS:', &
2104 idstr, veropt,
nk,
nth, nopts
2107 READ (ndsop,
END=801,ERR=802,IOSTAT=IERR) &
2108 idtst, vertst, mk, mth, nopts
2110 IF ( idtst .NE. idstr )
THEN
2111 WRITE (ndse,902) idtst, idstr
2114 IF ( vertst .NE. veropt )
THEN
2115 WRITE (ndse,903) vertst, veropt
2118 IF (nk.NE.mk .OR. nth.NE.mth)
THEN
2119 WRITE (ndse,904) mk, mth, nk, nth
2122 IF ( .NOT. o2init ) &
2123 CALL w3dmo2 ( igrd, ndse, ndst, nopts )
2127 WRITE (ndst,9002) idstr, veropt, nk, nth, nopts
2135 ((ptloc(j,i),j=1,2),i=1,nopts), (ptnme(i),i=1,nopts)
2138 '((PTLOC(J,I),J=1,2),I=1,NOPTS), (PTNME(I),I=1,NOPTS):', &
2139 ((ptloc(j,i),j=1,2),i=1,nopts), (ptnme(i),i=1,nopts)
2142 READ (ndsop,
END=801,ERR=802,IOSTAT=IERR) &
2143 ((ptloc(j,i),j=1,2),i=1,nopts), (ptnme(i),i=1,nopts)
2149 WRITE (ndst,9004) i, ptloc(1,i), ptloc(2,i), ptnme(i)
2156 IF ( ipass.GE. 1 .AND. ofiles(2) .EQ. 1)
THEN
2157 WRITE = inxout.EQ.
'WRITE'
2159 IF (
WRITE .AND. inxout.EQ.
'READ' )
THEN
2160 WRITE (ndse,901) inxout
2167 IF ( ipass.GE.1 .AND. ofiles(2) .EQ. 1)
THEN
2169 i = len_trim(filext)
2170 j = len_trim(fnmpre)
2173 WRITE(timetag,
"(i8.8,'.'i6.6)")time(1),time(2)
2176 WRITE (ndst,9001) fnmpre(:j)//timetag//
'.out_pnt.'// &
2180 OPEN (ndsop,
file=fnmpre(:j)//timetag//
'.out_pnt.' &
2181 //filext(:i),form=
'UNFORMATTED', convert=file_endian,err=800,iostat=ierr)
2183 OPEN (ndsoa,
file=fnmpre(:j)//timetag//
'.out_pnt.' &
2184 //filext(:i)//
'.txt',form=
'FORMATTED', err=800,iostat=ierr)
2196 idstr, veropt, nk, nth, nopts
2199 'IDSTR, VEROPT, NK, NTH, NOPTS:', &
2200 idstr, veropt, nk, nth, nopts
2203 READ (ndsop,
END=801,ERR=802,IOSTAT=IERR) &
2204 idtst, vertst, mk, mth, nopts
2206 IF ( idtst .NE. idstr )
THEN
2207 WRITE (ndse,902) idtst, idstr
2210 IF ( vertst .NE. veropt )
THEN
2211 WRITE (ndse,903) vertst, veropt
2214 IF (nk.NE.mk .OR. nth.NE.mth)
THEN
2215 WRITE (ndse,904) mk, mth, nk, nth
2218 IF ( .NOT. o2init ) &
2219 CALL w3dmo2 ( igrd, ndse, ndst, nopts )
2223 WRITE (ndst,9002) idstr, veropt, nk, nth, nopts
2231 ((ptloc(j,i),j=1,2),i=1,nopts), (ptnme(i),i=1,nopts)
2234 '((PTLOC(J,I),J=1,2),I=1,NOPTS), (PTNME(I),I=1,NOPTS):', &
2235 ((ptloc(j,i),j=1,2),i=1,nopts), (ptnme(i),i=1,nopts)
2238 READ (ndsop,
END=801,ERR=802,IOSTAT=IERR) &
2239 ((ptloc(j,i),j=1,2),i=1,nopts), (ptnme(i),i=1,nopts)
2245 WRITE (ndst,9004) i, ptloc(1,i), ptloc(2,i), ptnme(i)
2257 WRITE (ndsoa,*)
'TIME:', time
2260 READ (ndsop,
END=803,ERR=802,IOSTAT=IERR) time
2264 WRITE (ndst,9010) time
2279 iw(i), ii(i), il(i), dpo(i), wao(i), wdo(i), &
2281 tauao(i), taudo(i), dairo(i), &
2286 aso(i), cao(i), cdo(i), iceo(i), iceho(i), &
2287 icefo(i), grdid(i), (spco(j,i),j=1,nspec)
2290 'IW(I), II(I), IL(I), DPO(I), WAO(I), WDO(I):', &
2291 iw(i), ii(i), il(i), dpo(i), wao(i), wdo(i), &
2293 'TAUAO(I), TAUDO(I), DAIRO(I):', &
2294 tauao(i), taudo(i), dairo(i), &
2300 'ASO(I), CAO(I), CDO(I), ICEO(I), ICEHO(I):', &
2301 aso(i), cao(i), cdo(i), iceo(i), iceho(i), &
2302 'ICEFO(I), GRDID(I), (SPCO(J,I),J=1,NSPEC):', &
2303 icefo(i), grdid(i), (spco(j,i),j=1,nspec)
2306 READ (ndsop,
END=801,ERR=802,IOSTAT=IERR) &
2307 iw(i), ii(i), il(i), dpo(i), wao(i), wdo(i), &
2309 tauao(i), taudo(i), dairo(i), &
2314 aso(i), cao(i), cdo(i), iceo(i), iceho(i), &
2315 icefo(i), grdid(i), (spco(j,i),j=1,nspec)
2319 IF (ofiles(2) .EQ. 1)
CLOSE (ndsop)
2326 WRITE (ndse,1000) ierr
2334 WRITE (ndse,1002) ierr
2346 900
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO :'/ &
2347 ' ILEGAL INXOUT VALUE: ',a/)
2348 901
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO :'/ &
2349 ' MIXED READ/WRITE, LAST REQUEST: ',a/)
2350 902
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO :'/ &
2351 ' ILEGAL IDSTR, READ : ',a/ &
2353 903
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO :'/ &
2354 ' ILEGAL VEROPT, READ : ',a/ &
2356 904
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO :'/ &
2357 ' ERROR IN SPECTRA, MK, MTH : ',2i8/ &
2358 ' ARRAY DIMENSIONS : ',2i8/)
2360 1000
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO : '/ &
2361 ' ERROR IN OPENING FILE'/ &
2363 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO : '/ &
2364 ' PREMATURE END OF FILE'/)
2365 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOPO : '/ &
2366 ' ERROR IN READING FROM FILE'/ &
2370 9000
FORMAT (
' TEST W3IOPO : IPASS =',i4,
' INXOUT = ',a, &
2371 ' WRITE = ',l1,
' UNIT =',i3/ &
2372 ' IGRD =',i3,
' FEXT = ',a)
2374 9001
FORMAT (
' TEST W3IOPO : OPENING NEW FILE [',a,
']')
2375 9002
FORMAT (
' TEST W3IOPO : TEST PARAMETERS:'/ &
2378 ' NK,NTH :',i5,i8/ &
2380 9003
FORMAT (
' TEST W3IOPO : POINT LOCATION AND ID')
2381 9004
FORMAT (3x,i4,2f10.2,2x,a)
2383 9010
FORMAT (
' TEST W3IOPO : TIME :',i9.8,i7.6)
2384 9011
FORMAT (
' TEST W3IOPO : END OF FILE REACHED')
2386 9020
FORMAT (
' TEST W3IOPO : POINT NR.:',i5)
2387 9021
FORMAT (
' TEST W3IOPO :',2i4,2f6.3)
2388 9022
FORMAT (
' TEST W3IOPO :',4i7,2x,4i2,2x,4f5.2)
2389 9030
FORMAT (
' TEST W3IOPO :',f8.1,2(f7.2,f7.1))