gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
gdncvarsearch.f90
Go to the documentation of this file.
1!> @file gdncvarsearch.f90
2!>
3!> @author GFD Dennou Club
4!> @copyright Copyright (C) GFD Dennou Club, 2000-2026. All rights reserved. <br/>
5!> License is BSD-2-Clause. See [COPYRIGHT](@ref COPYRIGHT) in detail
6!>
7!> @en
8!> @brief Search for variables in a netCDF file
9!>
10!> To enumerate all variables in a file:
11!> 1. Call var_search(iter, urlbase) to initialize the iterator
12!> 2. Call attr_next(iter, url, end) in a loop
13!> 3. url gives each variable URL; end becomes true when all variables are enumerated
14!> @enden
15!>
16!> @ja
17!> @brief netCDF ファイル内の変数を検索
18!>
19!> ファイル内の全変数を列挙するには:
20!> 1. var_search(iter, urlbase) を呼び出してイテレータを初期化
21!> 2. ループ内で attr_next(iter, url, end) を呼び出す
22!> 3. url が各変数の URL を返し、全変数列挙完了時に end が真になる
23!> @endja
24!>
25
26!>
27!> @en
28!> @brief Initialize variable search iterator
29!> @enden
30!>
31!> @ja
32!> @brief 変数検索イテレータを初期化
33!> @endja
34!>
35!> @param[out] iter @en Search iterator @enden @ja 検索イテレータ @endja
36!> @param[in] urlBase @en Base URL for the file @enden @ja ファイルのベース URL @endja
37!>
38subroutine gdncvarsearchinit(iter, urlBase)
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/))
58end subroutine gdncvarsearchinit
59
60!>
61!> @en
62!> @brief Get next variable in search
63!>
64!> Returns the URL of the next variable. Dimension-only variables
65!> (without corresponding coordinate variable) are also included.
66!> @enden
67!>
68!> @ja
69!> @brief 検索の次の変数を取得
70!>
71!> 次の変数の URL を返します。次元のみの変数
72!> (対応する座標変数がないもの) も含まれます。
73!> @endja
74!>
75!> @param[inout] iter @en Search iterator @enden @ja 検索イテレータ @endja
76!> @param[out] url @en Variable URL @enden @ja 変数 URL @endja
77!> @param[out] end @en True when all variables enumerated @enden
78!> @ja 全変数列挙完了時に真 @endja
79!>
80subroutine gdncvarsearchnext(iter, url, end)
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
133end subroutine gdncvarsearchnext
subroutine gdncfileclose(fileid, err)
subroutine gdncvarsearchnext(iter, url, end)
subroutine gdncvarsearchinit(iter, urlbase)
Not public, so not placed in gtdata_netcdf_generic
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