gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
Functions/Subroutines
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

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: