gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
gtvarinquire.f90 File Reference

変数または属性に関する問い合わせ More...

Go to the source code of this file.

Functions/Subroutines

subroutine gtvarinquire (var, growable, rank, alldims, allcount, size, xtype, name, url, err)
integer function internal_get_alldims (var)
subroutine gtvarinquire2 (var, allcount)
subroutine gtvarinquirea (var, attrname, xtype)
subroutine gtvarinquired (var, dimord, url, allcount, err)

Detailed Description

変数または属性に関する問い合わせ

Author
Eizi TOYODA, Yasuhiro MORIKAWA

これらのサブルーチンは gtdata_generic から gtdata_generic#Inquire として提供されます。

Definition in file gtvarinquire.f90.

Function/Subroutine Documentation

◆ gtvarinquire()

subroutine gtvarinquire ( type(gt_variable), intent(in) var,
logical, intent(out), optional growable,
integer, intent(out), optional rank,
integer, intent(out), optional alldims,
integer, intent(out), optional allcount,
integer, intent(out), optional size,
character(len=*), intent(out), optional xtype,
character(len=*), intent(out), optional name,
character(len=*), intent(out), optional url,
logical, intent(out), optional err )

変数の属性に関する問い合わせ

変数 var に関する問い合わせを行います。 このサブルーチンは INQUIRE 文を模して作られたものです。

返り値となる引数の文字型の実引数の長さが足りないと、 結果が損なわれます。引数の文字列の長さとして dc_types#STRING を用いることを推奨します。

Inquire は複数のサブルーチンの総称名であり、 問い合わせ方法は複数用意されています。 Get_Slice, Dimname_to_Dimord も参照してください。

Parameters
[in]var変数ハンドル
[out]growable自動拡張可能か否か (省略可能)
[out]rankコンパクト次元を数えない次元の数 (省略可能)
[out]alldims縮退次元を含む全次元数 (省略可能)
[out]allcount次元変数の総数 (省略可能)
[out]size入出力領域の大きさ (省略可能)
[out]xtype外部型の名前 (省略可能)
[out]name変数名 (省略可能)
[out]url変数のフルURL (省略可能)
[out]errエラーフラグ (省略可能)

Definition at line 72 of file gtvarinquire.f90.

74 use gtdata_types, only: gt_variable
75 use gtdata_internal_map, only: var_class, vtb_class_netcdf
79 implicit none
80 type(GT_VARIABLE), intent(in):: var
81 character(len=*), intent(out), optional:: xtype
82 ! 外部型の名前
83 character(len=*), intent(out), optional:: name
84 ! name は変数名の最小の単位を返します。
85 ! ファイル名を含まないため
86 ! プログラム内での一意性は
87 ! 保証されません。
88 !
89 character(len=*), intent(out), optional:: url
90 ! url はファイル名のついた変数名
91 ! を返します。
92 ! プログラム内で一意です。
93 !
94 integer, intent(out), optional:: rank
95 ! コンパクト(縮退)次元を数えない、
96 ! 次元の数
97 !
98 integer, intent(out), optional:: alldims
99 ! 縮退次元を含む全次元数。
100 ! dimord には基本的にこちらを
101 ! 使います。
102 !
103 integer, intent(out), optional:: allcount
104 ! 変数が次元変数である場合、
105 ! 総数を返します。
106 ! エラーの場合はゼロを返します。
107 !
108 integer, intent(out), optional:: size
109 ! 変数の入出力領域の大きさ。
110 ! (変数が依存する各次元の長
111 ! [格子点数]の積)
112 !
113 logical, intent(out), optional:: growable
114 ! 変数が次元変数である場合、
115 ! 自動拡張可能か否かを返します。
116 ! 次元変数でない場合は不定となります。
117 !
118 logical, intent(out), optional:: err
119 ! 例外処理用フラグ.
120 ! デフォルトでは, この手続き内でエラーが
121 ! 生じた場合, プログラムは強制終了します.
122 ! 引数 *err* が与えられる場合,
123 ! プログラムは強制終了せず, 代わりに
124 ! *err* に .true. が代入されます.
125 !
126 ! Exception handling flag.
127 ! By default, when error occur in
128 ! this procedure, the program aborts.
129 ! If this *err* argument is given,
130 ! .true. is substituted to *err* and
131 ! the program does not abort.
132 integer:: class, cid
133continue
134 if (present(err)) err = .false.
135 call beginsub('gtvarinquire', 'var.mapid=%d', i=(/var%mapid/))
136 call var_class(var, class, cid)
137 select case(class)
138 case(vtb_class_netcdf)
139 if (present(xtype) .or. present(name) .or. present(url)) then
140 call inquire(gd_nc_variable(cid), xtype=xtype, name=name, url=url)
141 if (present(xtype)) call dbgmessage('xtype=%c', c1=trim(xtype))
142 if (present(name)) call dbgmessage('name=%c', c1=trim(name))
143 if (present(url)) call dbgmessage('url=%c', c1=trim(url))
144 endif
145 if (present(growable)) then
146 call inquire(gd_nc_variable(cid), growable=growable)
147 call dbgmessage('growable=%y', l=(/growable/))
148 endif
149 end select
150 if (present(alldims)) alldims = internal_get_alldims(var)
151 if (present(allcount)) allcount = internal_get_allcount(var)
152 if (present(size)) size = internal_get_size(var)
153 if (present(rank)) rank = internal_get_rank(var)
154 call endsub('gtvarinquire')
155 return
156contains
157
158 integer function internal_get_alldims(var) result(result)
160 implicit none
161 type(GT_VARIABLE), intent(in):: var
162 call map_lookup(var, ndims=result)
163 call dbgmessage('alldims=%d', i=(/result/))
164 end function internal_get_alldims
165
166 integer function internal_get_allcount(var) result(result)
168 implicit none
169 type(GT_VARIABLE), intent(in):: var
170 type(gt_dimmap), allocatable:: map(:)
171 integer:: nd
172 call map_lookup(var, ndims=nd)
173 if (nd <= 0) then
174 call dbgmessage('internal_get_allcount: no map')
175 result = 1
176 return
177 endif
178 allocate(map(nd))
179 call map_lookup(var, map=map)
180 result = product(map(1:nd)%allcount)
181 call dbgmessage('internal_get_allcount: %d map.size=%d', &
182 & i=(/result, nd/))
183 deallocate(map)
184 end function internal_get_allcount
185
186 integer function internal_get_size(var) result(result)
188 implicit none
189 type(GT_VARIABLE), intent(in):: var
190 type(gt_dimmap), allocatable:: map(:)
191 integer:: nd
192 call map_lookup(var, ndims=nd)
193 if (nd <= 0) then
194 call dbgmessage('internal_get_size: no map')
195 result = 1
196 return
197 endif
198 allocate(map(nd))
199 call map_lookup(var, map=map)
200 result = product(map(1:nd)%count)
201 call dbgmessage('internal_get_size: %d map.size=%d', &
202 & i=(/result, nd/))
203 deallocate(map)
204 end function internal_get_size
205
206 integer function internal_get_rank(var) result(result)
208 implicit none
209 type(GT_VARIABLE), intent(in):: var
210 type(gt_dimmap), allocatable:: map(:)
211 integer:: nd
212
213 call map_lookup(var, ndims=nd)
214 if (nd <= 0) then
215 call dbgmessage('internal_get_rank: no map')
216 result = 0
217 return
218 endif
219 allocate(map(nd))
220 call map_lookup(var, map=map)
221 result = count(map(1:nd)%count > 1)
222 call dbgmessage('internal_get_rank: %d', i=(/result/))
223 deallocate(map)
224 end function internal_get_rank
225
integer function internal_get_alldims(var)
デバッグ時の追跡用モジュール
Definition dc_trace.f90:150
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:661
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
Definition dc_trace.f90:457
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:580
subroutine, public map_lookup(var, vid, map, ndims)
subroutine, public var_class(var, class, cid)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_trace::endsub(), internal_get_alldims(), and gtdata_internal_map::var_class().

Here is the call graph for this function:

◆ gtvarinquire2()

subroutine gtvarinquire2 ( type(gt_variable), intent(in) var,
integer, dimension(:), intent(out) allcount )

変数の依存する次元 (複数) の総数の問い合わせ

変数 var が依存する各次元の総数を返します。 allcount の配列のサイズは依存する次元の数だけ必要です。 依存する次元の数は Inquire の alldims で調べることができます。

Parameters
[in]var変数ハンドル
[out]allcount各次元の総数

Definition at line 246 of file gtvarinquire.f90.

247 use gtdata_types, only: gt_variable
248 use gtdata_generic, only: inquire, open, close
249 use dc_trace, only: beginsub, endsub
250 type(GT_VARIABLE), intent(in):: var
251 integer, intent(out):: allcount(:) ! alldims 個必要
252 integer:: i, n
253 type(GT_VARIABLE):: v
254 call beginsub('gtvarinquire2')
255 call inquire(var, alldims=n)
256 do, i = 1, n
257 call open(v, var, i, count_compact=.true.)
258 call inquire(var, allcount=allcount(i))
259 call close(v)
260 enddo
261 call endsub('gtvarinquire2')

References dc_trace::beginsub(), and dc_trace::endsub().

Here is the call graph for this function:

◆ gtvarinquirea()

subroutine gtvarinquirea ( type(gt_variable), intent(in) var,
character(len=*), intent(in) attrname,
character(len=*), intent(out), optional xtype )

変数の属性の型の問い合わせ

変数 var の属性 attrname の値の型を xtype に返します。

Parameters
[in]var変数ハンドル
[in]attrname属性名
[out]xtype属性の型 (省略可能)

Definition at line 280 of file gtvarinquire.f90.

281 use gtdata_types, only: gt_variable
282 use gtdata_internal_map, only: var_class, vtb_class_netcdf
283 use dc_trace, only: beginsub, endsub
286 type(GT_VARIABLE), intent(in):: var
287 character(len=*), intent(in):: attrname
288 character(len=*), intent(out), optional:: xtype
289 integer:: class, cid
290 character(len = *), parameter:: subnam = "gtvarinquireA"
291continue
292 call beginsub(subnam, "%c", c1=trim(attrname))
293 call var_class(var, class, cid)
294 select case(class)
295 case(vtb_class_netcdf)
296 call inquire(gd_nc_variable(cid), attrname=attrname, xtype=xtype)
297 end select
298 call endsub(subnam)

References dc_trace::beginsub(), dc_trace::endsub(), and gtdata_internal_map::var_class().

Here is the call graph for this function:

◆ gtvarinquired()

subroutine gtvarinquired ( type(gt_variable), intent(in) var,
integer, intent(in) dimord,
character(len=*), intent(out), optional url,
integer, intent(out), optional allcount,
logical, intent(out), optional err )

変数の次元に関する問い合わせ

変数 var の次元順序番号 dimord に対応する次元の URL url と総数 allcount を返します。

Parameters
[in]var変数ハンドル
[in]dimord次元順序番号
[out]url次元URL (省略可能)
[out]allcount総数 (省略可能)
[out]errエラーフラグ (省略可能)

Definition at line 323 of file gtvarinquire.f90.

324 use gtdata_types, only: gt_variable
325 use gtdata_generic, only: open, close, inquire
326 use dc_trace, only: beginsub, endsub
327 implicit none
328 type(GT_VARIABLE), intent(in):: var
329 integer, intent(in):: dimord
330 character(len=*), intent(out), optional:: url
331 integer, intent(out), optional:: allcount
332 logical, intent(out), optional:: err
333 type(GT_VARIABLE):: dimvar
334 character(len = *), parameter:: subnam = "gtvarinquireD"
335continue
336 call beginsub(subnam, "%d", i=(/dimord/))
337 call open(dimvar, source_var=var, dimord=dimord, err=err)
338 if (present(url)) call inquire(dimvar, url=url)
339 if (present(allcount)) call inquire(dimvar, allcount=allcount)
340 call close(dimvar)
341 call endsub(subnam)

References dc_trace::beginsub(), and dc_trace::endsub().

Here is the call graph for this function:

◆ internal_get_alldims()

integer function gtvarinquire::internal_get_alldims ( type(gt_variable), intent(in) var)

Definition at line 158 of file gtvarinquire.f90.

160 implicit none
161 type(GT_VARIABLE), intent(in):: var
162 call map_lookup(var, ndims=result)
163 call dbgmessage('alldims=%d', i=(/result/))

References dc_trace::dbgmessage(), and gtdata_internal_map::map_lookup().

Here is the call graph for this function: