gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
gdncvarsearch.f90 File Reference

Search for variables in a netCDF file. More...

Go to the source code of this file.

Functions/Subroutines

subroutine gdncvarsearchinit (iter, urlbase)
subroutine gdncvarsearchnext (iter, url, end)

Detailed Description

Search for variables in a netCDF file.

Author
GFD Dennou Club

To enumerate all variables in a file:

  1. Call var_search(iter, urlbase) to initialize the iterator
  2. Call attr_next(iter, url, end) in a loop
  3. url gives each variable URL; end becomes true when all variables are enumerated

Definition in file gdncvarsearch.f90.

Function/Subroutine Documentation

◆ gdncvarsearchinit()

subroutine gdncvarsearchinit ( type(gd_nc_variable_search), intent(out) iter,
character(len = *), intent(in) urlbase )

Initialize variable search iterator

Parameters
[out]iterSearch iterator
[in]urlBaseBase URL for the file

Definition at line 38 of file gdncvarsearch.f90.

39 use dc_types, only: string
41 use dc_url, only: urlsplit
44 implicit none
45 type(GD_NC_VARIABLE_SEARCH), intent(out):: iter
46 character(len = *), intent(in):: urlBase
47 character(len = string):: file
48 logical:: err
49 character(len = *), parameter:: subname = 'GDNcVarSearchInit'
50
51 call beginsub(subname, 'urlbase=<%c>', c1=trim(urlbase))
52 call urlsplit(trim(urlbase), file=file)
53 call gdncfileopen(iter%fileid, filename=file, writable=.false., err=err)
54 if (err) iter%fileid = -1
55 iter%varid = 0
56 iter%dimid = 0
57 call endsub(subname, 'file=%d', i=(/iter%fileid/))
Debug tracing module.
Definition dc_trace.f90:150
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:680
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
Definition dc_trace.f90:476
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:599
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public string
Character length for string
Definition dc_types.f90:137
Variable URL string parser.
Definition dc_url.f90:61

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_trace::endsub(), and dc_types::string.

Here is the call graph for this function:

◆ gdncvarsearchnext()

subroutine gdncvarsearchnext ( type(gd_nc_variable_search), intent(inout) iter,
character(len = *), intent(out) url,
logical, intent(out) end )

Get next variable in search

Returns the URL of the next variable. Dimension-only variables (without corresponding coordinate variable) are also included.

Parameters
[in,out]iterSearch iterator
[out]urlVariable URL
[out]endTrue when all variables enumerated

Definition at line 80 of file gdncvarsearch.f90.

82 use dc_types, only: string
83 use netcdf, only: nf90_max_name, nf90_noerr, &
84 & nf90_inquire_variable, nf90_inquire_dimension, nf90_inq_varid
85 use dc_url, only: urlmerge
88 implicit none
89 type(GD_NC_VARIABLE_SEARCH), intent(inout):: iter
90 character(len = *), intent(out):: url
91 logical, intent(out):: end
92 character(len = string):: filename
93 character(len = NF90_MAX_NAME):: varname
94 integer:: stat, varid_tmp
95 character(len = *), parameter:: subname = 'GDNcVarSearchNext'
96continue
97 call beginsub(subname)
98 if (iter%fileid <= 0) then
99 end = .TRUE.
100 url = ''
101 call endsub(subname, "bad file %d", i=(/iter%fileid/))
102 return
103 endif
104 if (iter%varid >= 0) then
105 iter%varid = iter%varid + 1
106 stat = nf90_inquire_variable(iter%fileid, iter%varid, name = varname)
107 if (stat == nf90_noerr) goto 900
108 iter%varid = -1
109 endif
110 do while (iter%dimid >= 0)
111 iter%dimid = iter%dimid + 1
112 ! --- 指定番号の次元がなければエラー ---
113 stat = nf90_inquire_dimension(iter%fileid, iter%dimid, name = varname)
114 if (stat /= nf90_noerr) exit
115 ! --- 指定番号の次元と同名の変数があれば却下、次番号へ ---
116 stat = nf90_inq_varid(iter%fileid, varname, varid_tmp)
117 if (stat /= nf90_noerr) goto 900
118 enddo
119 end = .TRUE.
120 url = ""
121 call gdncfileclose(iter%fileid)
122 iter%dimid = -1
123 call endsub(subname, "end file %d", i=(/iter%fileid/))
124 return
125
126900 continue
127 call gdncfileinquire(iter%fileid, name=filename)
128 url = urlmerge(file=trim(filename), var=trim(varname))
129 end = .FALSE.
130 call endsub(subname, "file=%d url=<%c>", &
131 & i=(/iter%fileid/), c1=trim(url))
132 return
Not public, so not placed in gtdata_netcdf_generic

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_trace::endsub(), gdncfileclose(), and dc_types::string.

Here is the call graph for this function: