34 use netcdf, only: nf90_max_name, nf90_noerr, &
35 & nf90_inquire_variable, nf90_inquire_dimension, nf90_inq_varid
38 use dc_trace, only: beginsub, endsub, dbgmessage
39 implicit none
40 type(GD_NC_VARIABLE_SEARCH), intent(inout):: iter
41 character(len = *), intent(out):: url
42 logical, intent(out):: end
43 character(len = string):: filename
44 character(len = NF90_MAX_NAME):: varname
45 integer:: stat, varid_tmp
46 character(len = *), parameter:: subname = 'GDNcVarSearchNext'
47continue
48 call beginsub(subname)
49 if (iter%fileid <= 0) then
50 end = .TRUE.
51 url = ''
52 call endsub(subname, "bad file %d", i=(/iter%fileid/))
53 return
54 endif
55 if (iter%varid >= 0) then
56 iter%varid = iter%varid + 1
57 stat = nf90_inquire_variable(iter%fileid, iter%varid, name = varname)
58 if (stat == nf90_noerr) goto 900
59 iter%varid = -1
60 endif
61 do while (iter%dimid >= 0)
62 iter%dimid = iter%dimid + 1
63
64 stat = nf90_inquire_dimension(iter%fileid, iter%dimid, name = varname)
65 if (stat /= nf90_noerr) exit
66
67 stat = nf90_inq_varid(iter%fileid, varname, varid_tmp)
68 if (stat /= nf90_noerr) goto 900
69 enddo
70 end = .TRUE.
71 url = ""
73 iter%dimid = -1
74 call endsub(subname, "end file %d", i=(/iter%fileid/))
75 return
76
77900 continue
79 url =
urlmerge(file=trim(filename), var=trim(varname))
80 end = .FALSE.
81 call endsub(subname, "file=%d url=<%c>", &
82 & i=(/iter%fileid/), c1=trim(url))
83 return