gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
gtvargetattr.f90
Go to the documentation of this file.
1!> @file gtvargetattr.f90
2!>
3!> @author Eizi TOYODA, Yasuhiro MORIKAWA
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 Numeric attribute input
9!>
10!> These subroutines are provided through gtdata_generic.
11!> Various type variants exist but use the same underlying structure.
12!> @enden
13!>
14!> @ja
15!> @brief 数値型属性の入力
16!>
17!> これらのサブルーチンは gtdata_generic から提供されます。
18!> 引数の型に応じて様々なバリアントがありますが、下部構造では同じものを使用しています。
19!> @endja
20!>
21
22!>
23!> @en
24!> @brief Get attribute value (integer scalar)
25!>
26!> Returns the value of attribute attrname attached to variable var.
27!> Get_Attr is a generic name for multiple subroutines, so value
28!> can accept various types of variables (including pointers).
29!>
30!> If the attribute value cannot be retrieved normally and default
31!> is provided, that value is returned. Default values when default
32!> is not provided are:
33!> - character: "" (empty string)
34!> - real: NF90_FILL_REAL
35!> - real(DP): NF90_FILL_DOUBLE
36!> - integer: NF90_FILL_INT
37!>
38!> When value is a pointer, it is automatically allocated according
39!> to the attribute value. Always pass it in a null state.
40!>
41!> When value is a fixed-length array, default is required because
42!> Fortran language specifications require different interfaces
43!> for pointer and non-pointer forms.
44!> @param[in] var Variable handle
45!> @param[in] attrname Attribute name
46!> @param[out] value Attribute value (integer)
47!> @param[in] default Default value (optional)
48!> @enden
49!>
50!> @ja
51!> @brief 属性値の取得 (整数スカラ)
52!>
53!> 変数 var に付加されている属性 attrname の値を返します。
54!> Get_Attr は複数のサブルーチンの総称名なので、
55!> value には様々な型の変数 (ポインタも可能) を与えることが可能です。
56!>
57!> 属性の値が正常に取得できず、且つ default が与えられていた場合、
58!> その値が返ります。default が与えられない場合のデフォルトの値は
59!> それぞれ以下の通りです。
60!> - character: "" (空文字)
61!> - real: NF90_FILL_REAL
62!> - real(DP): NF90_FILL_DOUBLE
63!> - integer: NF90_FILL_INT
64!>
65!> value にポインタを与えた場合、属性の値に応じて自動的に
66!> 割り付けが行われます。そのため、必ず空状態にしてから与えてください。
67!>
68!> value に固定長配列を用意する場合 default が必須になりますが、
69!> これは Fortran の言語仕様上ポインタ方式と引用仕様が同じであってはならないためです。
70!> @param[in] var 変数ハンドル
71!> @param[in] attrname 属性名
72!> @param[out] value 属性値 (整数)
73!> @param[in] default デフォルト値 (省略可能)
74!> @endja
75!>
76subroutine gtvargetattri(var, attrname, value, default)
77 use gtdata_types, only: gt_variable
78 use gtdata_internal_map, only: var_class, vtb_class_netcdf
81 use netcdf, only: nf90_fill_int
83 implicit none
84 type(gt_variable), intent(in):: var
85 character(len = *), intent(in):: attrname
86 integer, intent(out):: value
87 integer, intent(in), optional:: default
88 integer:: stat, buffer(1), class, cid
89continue
90 call var_class(var, class, cid)
91 if (class == vtb_class_netcdf) then
92 call get_attr(gd_nc_variable(cid), attrname, buffer, stat, default)
93 if (stat >= 1) then
94 value = buffer(1)
95 return
96 end if
97 else
98 call storeerror(gt_enotvar, "GTVarGetAttrI")
99 endif
100 value = nf90_fill_int
101 if (present(default)) value = default
102end subroutine gtvargetattri
103
104!> @en
105!> @brief Get attribute value (real scalar)
106!> @param[in] var Variable handle
107!> @param[in] attrname Attribute name
108!> @param[out] value Attribute value (real)
109!> @param[in] default Default value (optional)
110!> @enden
111!> @ja
112!> @brief 属性値の取得 (実数スカラ)
113!> @param[in] var 変数ハンドル
114!> @param[in] attrname 属性名
115!> @param[out] value 属性値 (実数)
116!> @param[in] default デフォルト値 (省略可能)
117!> @endja
118subroutine gtvargetattrr(var, attrname, value, default)
119 use gtdata_types, only: gt_variable
122 use gtdata_internal_map, only: var_class, vtb_class_netcdf
123 use dc_error, only: gt_ebadvar, storeerror
124 use netcdf, only: nf90_fill_float
125 implicit none
126 type(gt_variable), intent(in):: var
127 character(len = *), intent(in):: attrname
128 real, intent(out):: value
129 real, intent(in), optional:: default
130 integer:: stat
131 real:: buffer(1)
132 integer:: class, cid
133continue
134 call var_class(var, class, cid)
135 if (class == vtb_class_netcdf) then
136 call get_attr(gd_nc_variable(cid), attrname, value=buffer, &
137 & stat=stat, default=default)
138 if (stat >= 1) then
139 value = buffer(1)
140 return
141 endif
142 else
143 call storeerror(gt_ebadvar, "GTVarGetAttrR")
144 endif
145 if (present(default)) then
146 value = default
147 else
148 value = nf90_fill_float
149 endif
150end subroutine gtvargetattrr
151
152!> @en
153!> @brief Get attribute value (double precision scalar)
154!> @param[in] var Variable handle
155!> @param[in] attrname Attribute name
156!> @param[out] value Attribute value (double precision)
157!> @param[in] default Default value (optional)
158!> @enden
159!> @ja
160!> @brief 属性値の取得 (倍精度実数スカラ)
161!> @param[in] var 変数ハンドル
162!> @param[in] attrname 属性名
163!> @param[out] value 属性値 (倍精度実数)
164!> @param[in] default デフォルト値 (省略可能)
165!> @endja
166subroutine gtvargetattrd(var, attrname, value, default)
167 use gtdata_types, only: gt_variable
168 use gtdata_internal_map, only: var_class, vtb_class_netcdf
171 use dc_error, only: gt_enotvar, storeerror
172 use dc_types, only: dp
173 use netcdf, only: nf90_fill_double
174 implicit none
175 type(gt_variable), intent(in):: var
176 character(len = *), intent(in):: attrname
177 real(DP), intent(out):: value
178 real(DP), intent(in), optional:: default
179 integer:: stat
180 real(DP):: buffer(1)
181 integer:: class, cid
182continue
183 call var_class(var, class, cid)
184 select case(class)
185 case (vtb_class_netcdf)
186 call get_attr(gd_nc_variable(cid), attrname, value=buffer, &
187 & stat=stat, default=default)
188 if (stat >= 1) then
189 value = buffer(1)
190 return
191 end if
192 case default
193 call storeerror(gt_enotvar, "GTVarGetAttrR")
194 end select
195 value = nf90_fill_double
196 if (present(default)) value = default
197end subroutine
198
199!> @en
200!> @brief Get attribute value (integer pointer array)
201!>
202!> When receiving with a pointer array, entities are allocated
203!> for as many interpretable values as exist.
204!> @param[in] var Variable handle
205!> @param[in] name Attribute name
206!> @param[out] value Attribute value (integer pointer)
207!> @enden
208!> @ja
209!> @brief 属性値の取得 (整数ポインタ配列)
210!>
211!> ポインタ配列を使って受け取る場合は解釈可能な数だけ実体が割り付けられます。
212!> @param[in] var 変数ハンドル
213!> @param[in] name 属性名
214!> @param[out] value 属性値 (整数ポインタ)
215!> @endja
216subroutine gtvargetattrip(var, name, value)
217 use gtdata_types, only: gt_variable
218 use gtdata_internal_map, only: var_class, vtb_class_netcdf
221 use dc_error, only: gt_enotvar, storeerror
222 implicit none
223 type(gt_variable), intent(in):: var
224 character(len = *), intent(in):: name
225 integer, pointer:: value(:) !(out)
226 integer:: stat, class, cid
227continue
228 call var_class(var, class, cid)
229 if (class == vtb_class_netcdf) then
230 allocate(value(1))
231 call get_attr(gd_nc_variable(cid), name, value(1:0), stat)
232 deallocate(value)
233 if (stat < 1) return
234 allocate(value(stat))
235 call get_attr(gd_nc_variable(cid), name, value, stat)
236 if (stat < 1) deallocate(value)
237 else
238 call storeerror(gt_enotvar, "GTVarGetAttrIP")
239 endif
240end subroutine gtvargetattrip
241
242!> @en
243!> @brief Get attribute value (real pointer array)
244!> @param[in] var Variable handle
245!> @param[in] name Attribute name
246!> @param[out] value Attribute value (real pointer)
247!> @enden
248!> @ja
249!> @brief 属性値の取得 (実数ポインタ配列)
250!> @param[in] var 変数ハンドル
251!> @param[in] name 属性名
252!> @param[out] value 属性値 (実数ポインタ)
253!> @endja
254subroutine gtvargetattrrp(var, name, value)
255 use gtdata_types, only: gt_variable
256 use gtdata_internal_map, only: var_class, vtb_class_netcdf
259 use dc_error, only: gt_enotvar, storeerror
260 implicit none
261 type(gt_variable), intent(in):: var
262 character(len = *), intent(in):: name
263 real, pointer:: value(:) !(out)
264 integer:: stat, class, cid
265continue
266 call var_class(var, class, cid)
267 if (class == vtb_class_netcdf) then
268 allocate(value(1))
269 call get_attr(gd_nc_variable(cid), name, value(1:0), stat)
270 deallocate(value)
271 if (stat < 1) return
272 allocate(value(stat))
273 call get_attr(gd_nc_variable(cid), name, value, stat)
274 if (stat < 1) deallocate(value)
275 else
276 nullify(value)
277 call storeerror(gt_enotvar, "GTVarGetAttrRP")
278 endif
279end subroutine gtvargetattrrp
280
281!> @en
282!> @brief Get attribute value (double precision pointer array)
283!> @param[in] var Variable handle
284!> @param[in] name Attribute name
285!> @param[out] value Attribute value (double precision pointer)
286!> @enden
287!> @ja
288!> @brief 属性値の取得 (倍精度実数ポインタ配列)
289!> @param[in] var 変数ハンドル
290!> @param[in] name 属性名
291!> @param[out] value 属性値 (倍精度実数ポインタ)
292!> @endja
293subroutine gtvargetattrdp(var, name, value)
294 use gtdata_types, only: gt_variable
295 use gtdata_internal_map, only: var_class, vtb_class_netcdf
298 use dc_types, only: dp
299 use dc_error, only: gt_enotvar, storeerror
300 implicit none
301 type(gt_variable), intent(in):: var
302 character(len = *), intent(in):: name
303 real(DP), pointer:: value(:) !(out)
304 integer:: stat, class, cid
305continue
306 call var_class(var, class, cid)
307 if (class == vtb_class_netcdf) then
308 allocate(value(1))
309 call get_attr(gd_nc_variable(cid), name, value(1:0), stat)
310 deallocate(value)
311 if (stat < 1) return
312 allocate(value(stat))
313 call get_attr(gd_nc_variable(cid), name, value, stat)
314 if (stat < 1) deallocate(value)
315 else
316 call storeerror(gt_enotvar, "GTVarGetAttrRP")
317 endif
318end subroutine gtvargetattrdp
319
320!> @en
321!> @brief Get attribute value (integer fixed-length array)
322!>
323!> When receiving as a fixed-length array, excess attribute values
324!> are truncated. When attribute length is insufficient, default
325!> values fill the remainder (default is required unlike pointer form).
326!> @param[in] var Variable handle
327!> @param[in] name Attribute name
328!> @param[out] value Attribute value (integer array)
329!> @param[in] default Default fill value
330!> @enden
331!> @ja
332!> @brief 属性値の取得 (整数固定長配列)
333!>
334!> 固定長配列として受け取る場合は属性長があまっている場合には切り捨てられ、
335!> 属性長が足りない場合は default 値 (ポインタと違い必須) を埋めます。
336!> @param[in] var 変数ハンドル
337!> @param[in] name 属性名
338!> @param[out] value 属性値 (整数配列)
339!> @param[in] default デフォルト充填値
340!> @endja
341subroutine gtvargetattria(var, name, value, default)
342 use gtdata_types, only: gt_variable
343 use gtdata_generic, only: friend => get_attr
344 use gtdata_internal_map, only: var_class, vtb_class_netcdf
347 use dc_error, only: gt_enotvar, storeerror
348 implicit none
349 type(gt_variable), intent(in):: var
350 character(len = *), intent(in):: name
351 integer, intent(out):: value(:)
352 integer, intent(in):: default
353 integer:: stat, class, cid
354continue
355 call var_class(var, class, cid)
356 if (class == vtb_class_netcdf) then
357 call get_attr(gd_nc_variable(cid), name, value, stat, default)
358 else
359 call storeerror(gt_enotvar, "GTVarGetAttrIA")
360 endif
361end subroutine gtvargetattria
362
363!> @en
364!> @brief Get attribute value (real fixed-length array)
365!> @param[in] var Variable handle
366!> @param[in] name Attribute name
367!> @param[out] value Attribute value (real array)
368!> @param[in] default Default fill value
369!> @enden
370!> @ja
371!> @brief 属性値の取得 (実数固定長配列)
372!> @param[in] var 変数ハンドル
373!> @param[in] name 属性名
374!> @param[out] value 属性値 (実数配列)
375!> @param[in] default デフォルト充填値
376!> @endja
377subroutine gtvargetattrra(var, name, value, default)
378 use gtdata_types, only: gt_variable
379 use gtdata_generic, only: friend => get_attr
380 use gtdata_internal_map, only: var_class, vtb_class_netcdf
383 use dc_error, only: gt_enotvar, storeerror
384 implicit none
385 type(gt_variable), intent(in):: var
386 character(len = *), intent(in):: name
387 real, intent(out):: value(:)
388 real, intent(in):: default
389 integer:: class, cid, stat
390continue
391 call var_class(var, class, cid)
392 if (class == vtb_class_netcdf) then
393 call get_attr(gd_nc_variable(cid), name, value, stat, default)
394 else
395 call storeerror(gt_enotvar, "GTVarGetAttrRA")
396 endif
397end subroutine gtvargetattrra
398
399!> @en
400!> @brief Get attribute value (double precision fixed-length array)
401!> @param[in] var Variable handle
402!> @param[in] name Attribute name
403!> @param[out] value Attribute value (double precision array)
404!> @param[in] default Default fill value
405!> @enden
406!> @ja
407!> @brief 属性値の取得 (倍精度実数固定長配列)
408!> @param[in] var 変数ハンドル
409!> @param[in] name 属性名
410!> @param[out] value 属性値 (倍精度実数配列)
411!> @param[in] default デフォルト充填値
412!> @endja
413subroutine gtvargetattrda(var, name, value, default)
414 use gtdata_types, only: gt_variable
415 use gtdata_generic, only: friend => get_attr
416 use gtdata_internal_map, only: var_class, vtb_class_netcdf
419 use dc_types, only: dp
420 use dc_error, only: gt_enotvar, storeerror
421 implicit none
422 type(gt_variable), intent(in):: var
423 character(len = *), intent(in):: name
424 real(DP), intent(out):: value(:)
425 real(DP), intent(in):: default
426 integer:: stat, class, cid
427continue
428 call var_class(var, class, cid)
429 if (class == vtb_class_netcdf) then
430 call get_attr(gd_nc_variable(cid), name, value, stat, default)
431 else
432 call storeerror(gt_enotvar, "GTVarGetAttrRA")
433 endif
434end subroutine gtvargetattrda
subroutine gtvargetattrra(var, name, value, default)
subroutine gtvargetattrip(var, name, value)
subroutine gtvargetattrd(var, attrname, value, default)
subroutine gtvargetattrrp(var, name, value)
subroutine gtvargetattria(var, name, value, default)
subroutine gtvargetattrda(var, name, value, default)
subroutine gtvargetattrdp(var, name, value)
subroutine gtvargetattrr(var, attrname, value, default)
subroutine gtvargetattri(var, attrname, value, default)
Error handling module.
Definition dc_error.f90:454
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:891
integer, parameter, public gt_ebadvar
Definition dc_error.f90:518
integer, parameter, public gt_enotvar
Definition dc_error.f90:512
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:92
subroutine, public var_class(var, class, cid)