Skip to content

Commit

Permalink
add a flag to stop at end of file for netcdf point read
Browse files Browse the repository at this point in the history
  • Loading branch information
JessicaMeixner-NOAA committed Apr 16, 2024
1 parent a5dad0b commit 8fdf76f
Showing 1 changed file with 148 additions and 137 deletions.
285 changes: 148 additions & 137 deletions model/src/w3iopomd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1151,8 +1151,8 @@ SUBROUTINE W3IOPON_READ(IOTST, IMOD, filename, ncerr)
integer, intent(inout) :: ncerr
INTEGER :: IGRD,MK,MTH
integer :: fh
integer :: d_nopts, d_nspec, d_vsize, d_namelen, d_grdidlen
integer :: d_nopts_len, d_nspec_len, d_vsize_len, d_namelen_len, d_grdidlen_len
integer :: d_nopts, d_nspec, d_vsize, d_namelen, d_grdidlen, d_time
integer :: d_nopts_len, d_nspec_len, d_vsize_len, d_namelen_len, d_grdidlen_len, d_time_len
integer :: v_idtst, v_vertst, v_nk, v_nth, v_ptloc, v_ptnme, v_time
integer :: v_iw, v_ii, v_il, v_dpo, v_wao, v_wdo, v_tauao
integer :: v_taido, v_dairo, v_zet_seto, v_aso, v_cao, v_cdo, v_iceo
Expand Down Expand Up @@ -1216,155 +1216,166 @@ SUBROUTINE W3IOPON_READ(IOTST, IMOD, filename, ncerr)
ncerr = nf90_inquire_dimension(fh, d_grdidlen, len = d_grdidlen_len)
if (ncerr .ne. 0) return

IF ( IPASS.EQ.1 ) THEN
! Read the dimention information from time

! Read scalar variables.
ncerr = nf90_inq_varid(fh, VNAME_NK, v_nk)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_nk, MK)
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_NTH, v_nth)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_nth, MTH)
if (ncerr .ne. 0) return

!read in written variables NK, NTH as MK and MTH
!and ensure they match
IF (NK.NE.MK .OR. NTH.NE.MTH) THEN
WRITE (NDSE,904) MK, MTH, NK, NTH
CALL EXTCDE ( 12 )
END IF
ncerr = nf90_inq_dimid(fh, DNAME_TIME, d_time)
if (ncerr .ne. 0) return
ncerr = nf90_inquire_dimension(fh, d_time, len = d_time_len)
if (ncerr .ne. 0) return

!JDM TO DO: Missing check and reading of IDSTR, VEROPT
write(*,*) 'd_time_len', d_time_len

!check reading:
write(*,*) 'MK,MTH', MK, MTH
write(*,*) 'dimensions:', d_nopts_len,d_grdidlen_len, d_namelen_len,d_vsize_len,d_nspec_len
IF ( IPASS < d_time_len ) THEN

! Allocate variables:
IF ( .NOT. O2INIT ) &
CALL W3DMO2 ( IGRD, NDSE, NDST, NOPTS )
IF ( IPASS.EQ.1 ) THEN

! Read vars with nopts as a dimension.
ncerr = nf90_inq_varid(fh, VNAME_PTLOC, v_ptloc)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_ptloc, PTLOC, start = (/ 1, 1/), &
count = (/ d_vsize_len, d_nopts_len /))
if (ncerr .ne. 0) return
write(*,*) 'PTLOC', PTLOC
ncerr = nf90_inq_varid(fh, VNAME_PTNME, v_ptnme)
! Read scalar variables.
ncerr = nf90_inq_varid(fh, VNAME_NK, v_nk)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_nk, MK)
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_NTH, v_nth)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_nth, MTH)
if (ncerr .ne. 0) return

!read in written variables NK, NTH as MK and MTH
!and ensure they match
IF (NK.NE.MK .OR. NTH.NE.MTH) THEN
WRITE (NDSE,904) MK, MTH, NK, NTH
CALL EXTCDE ( 12 )
END IF

!JDM TO DO: Missing check and reading of IDSTR, VEROPT


! Allocate variables:
IF ( .NOT. O2INIT ) &
CALL W3DMO2 ( IGRD, NDSE, NDST, NOPTS )

! Read vars with nopts as a dimension.
ncerr = nf90_inq_varid(fh, VNAME_PTLOC, v_ptloc)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_ptloc, PTLOC, start = (/ 1, 1/), &
count = (/ d_vsize_len, d_nopts_len /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_PTNME, v_ptnme)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_ptnme, PTNME)
if (ncerr .ne. 0) return
END IF
write(*,*) 'IPASS=', IPASS
!JDM TO DO missing variable TIME???
ncerr = nf90_inq_varid(fh, VNAME_TIME, v_time)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_ptnme, PTNME)
ncerr = nf90_get_var(fh, v_time, TIME, start = (/ 1, IPASS/), &
count = (/ d_vsize_len, 1 /))
if (ncerr .ne. 0) return
END IF
write(*,*) 'IPASS=', IPASS
!JDM TO DO missing variable TIME???
ncerr = nf90_inq_varid(fh, VNAME_TIME, v_time)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_time, TIME, start = (/ 1, IPASS/), &
count = (/ d_vsize_len, 1 /))
if (ncerr .ne. 0) return
write(*,*) 'TIME', TIME
!JDM TO DO!! need to find out if IPASS is a valid time value, if not set flag to -1
!and exit


! All of the below variables are missing the "time" dimension...
! the time dimension being read should be for "IPASS"
ncerr = nf90_inq_varid(fh, VNAME_IW, v_iw)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_iw, IW, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_II, v_ii)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_ii, II, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_IL, v_il)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_il, IL, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_DPO, v_dpo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_dpo, DPO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_WAO, v_wao)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_wao, WAO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_WDO, v_wdo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_wdo, WDO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
! All of the below variables are missing the "time" dimension...
! the time dimension being read should be for "IPASS"
ncerr = nf90_inq_varid(fh, VNAME_IW, v_iw)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_iw, IW, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_II, v_ii)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_ii, II, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_IL, v_il)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_il, IL, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_DPO, v_dpo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_dpo, DPO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_WAO, v_wao)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_wao, WAO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_WDO, v_wdo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_wdo, WDO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
#ifdef W3_FLX5
ncerr = nf90_inq_varid(fh, VNAME_TAUAO, v_tauao)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_tauao, TAUAO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_TAIDO, v_taido)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_taido, TAIDO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_DAIRO, v_dairo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_dairo, DAIRO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_TAUAO, v_tauao)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_tauao, TAUAO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_TAIDO, v_taido)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_taido, TAIDO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_DAIRO, v_dairo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_dairo, DAIRO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
#endif
#ifdef W3_SETUP
ncerr = nf90_inq_varid(fh, ZET_SETO, v_zet_seto)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_zet_seto, ZET_SETO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, ZET_SETO, v_zet_seto)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_zet_seto, ZET_SETO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
#endif
ncerr = nf90_inq_varid(fh, VNAME_ASO, v_aso)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_aso, ASO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_CAO, v_cao)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_cao, CAO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_CDO, v_cdo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_cdo, CDO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_ICEO, v_iceo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_iceo, ICEO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_ICEHO, v_iceho)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_iceho, ICEHO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_ICEFO, v_icefo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_icefo, ICEFO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_GRDID, v_grdid)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_grdid, GRDID, start = (/ 1, 1, IPASS/), &
count = (/ 13, nopts, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_SPCO, v_spco)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_spco, SPCO, start = (/ 1, 1, IPASS/), &
count = (/nspec, nopts, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_ASO, v_aso)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_aso, ASO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_CAO, v_cao)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_cao, CAO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_CDO, v_cdo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_cdo, CDO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_ICEO, v_iceo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_iceo, ICEO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_ICEHO, v_iceho)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_iceho, ICEHO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_ICEFO, v_icefo)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_icefo, ICEFO, start = (/ 1, IPASS/), &
count = (/ NOPTS, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_GRDID, v_grdid)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_grdid, GRDID, start = (/ 1, 1, IPASS/), &
count = (/ 13, nopts, 1 /))
if (ncerr .ne. 0) return
ncerr = nf90_inq_varid(fh, VNAME_SPCO, v_spco)
if (ncerr .ne. 0) return
ncerr = nf90_get_var(fh, v_spco, SPCO, start = (/ 1, 1, IPASS/), &
count = (/nspec, nopts, 1 /))
if (ncerr .ne. 0) return

ELSE
! Set flag to indicate IPASS > d_time_len
! and are at the end of the
IOTST = -1
END IF

! Close the file.
ncerr = nf90_close(fh)
Expand Down

0 comments on commit 8fdf76f

Please sign in to comment.