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

Go to the source code of this file.

Functions/Subroutines

subroutine gdncattrgetint (var, name, value, stat, default)
 
subroutine gdncattrgetreal (var, name, value, stat, default)
 
subroutine gdncattrgetdouble (var, name, value, stat, default)
 

Function/Subroutine Documentation

◆ gdncattrgetdouble()

subroutine gdncattrgetdouble ( type(gd_nc_variable), intent(in)  var,
character(len = *), intent(in)  name,
real(dp), dimension(:), intent(out)  value,
integer, intent(out)  stat,
real(dp), intent(in), optional  default 
)

Get numeric attribute value (double type)

Retrieves a numeric attribute from a netCDF variable.

Parameters
[in]varVariable handle
[in]nameAttribute name
[out]valueArray to store attribute values
[out]statStatus (see file header for interpretation)
[in]defaultDefault value if attribute not found (optional)

Definition at line 270 of file gdncattrgetnum.f90.

273 use netcdf, only: &
274 & nf90_noerr, &
275 & nf90_global, &
276 & nf90_char, &
277 & nf90_enomem, &
278 & nf90_inquire_attribute, &
279 & nf90_get_att
280 use dc_url, only: gt_plus
282 use dc_types, only: string, dp
283 use dc_string
284 implicit none
285 type(GD_NC_VARIABLE), intent(in) :: var
286 character(len = *), intent(in) :: name
287 integer, intent(out):: stat
288 real(DP), intent(out):: value(:)
289 real(DP), intent(in), optional:: default
290 real(DP), allocatable:: rbuffer(:)
291 character(STRING) :: cbuffer
292 character(STRING), pointer :: lbuffer(:)
293 integer :: attrlen, xtype, i, xferend, iname, varid
294 type(GD_NC_VARIABLE_ENTRY):: ent
295 continue
296 stat = vtable_lookup(var, ent)
297 if (stat /= nf90_noerr) then
298 if (present(default)) value(:) = default
299 return
300 endif
301 ! 型と長さを取得
302 if (name(1:1) == gt_plus) then
303 iname = 2
304 varid = nf90_global
305 else
306 iname = 1
307 varid = ent%varid
308 endif
309 stat = nf90_inquire_attribute(ent%fileid, varid, &
310 name = name(iname:), xtype = xtype, len = attrlen)
311 if (stat /= nf90_noerr) then
312 if (present(default)) value(:) = default
313 return
314 endif
315 ! 文字型の場合は長さをコンマで分解した語数と読み替える
316 if (xtype == nf90_char) then
317 call get_attr(var, name, cbuffer, "", stat)
318 if (stat /= 0) return
319 call split(cbuffer, lbuffer, ", ")
320 attrlen = size(lbuffer)
321 endif
322 ! 結果を入れるところがなければ長さだけを伝え終了
323 if (size(value) == 0) then
324 if (xtype == nf90_char) deallocate(lbuffer)
325 stat = attrlen
326 return
327 endif
328 ! 型に応じて要求されただけ値を転送
329 xferend = min(size(value), attrlen)
330 if (present(default)) value(xferend+1: ) = default
331 if (xtype == nf90_char) then
332 do, i = 1, xferend
333 value(i) = stod(lbuffer(i))
334 enddo
335 deallocate(lbuffer)
336 stat = attrlen
337 return
338 else
339 allocate(rbuffer(attrlen), stat=stat)
340 if (stat /= 0) then
341 stat = nf90_enomem
342 return
343 endif
344 stat = nf90_get_att(ent%fileid, varid, name(iname:), rbuffer)
345 if (stat == nf90_noerr) then
346 value(1:xferend) = rbuffer(1:xferend)
347 stat = attrlen
348 endif
349 deallocate(rbuffer)
350 return
351 endif
Handling character types.
Definition dc_string.f90:83
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:92
integer, parameter, public string
Character length for string
Definition dc_types.f90:137
Variable URL string parser.
Definition dc_url.f90:61
character, parameter, public gt_plus
Definition dc_url.f90:109
integer function, public vtable_lookup(var, entry)

References dc_types::dp, dc_url::gt_plus, dc_types::string, and gtdata_netcdf_internal::vtable_lookup().

Here is the call graph for this function:

◆ gdncattrgetint()

subroutine gdncattrgetint ( type(gd_nc_variable), intent(in)  var,
character(len = *), intent(in)  name,
integer, dimension(:), intent(out)  value,
integer, intent(out)  stat,
integer, intent(in), optional  default 
)

Get numeric attribute value (int type)

Retrieves a numeric attribute from a netCDF variable.

Parameters
[in]varVariable handle
[in]nameAttribute name
[out]valueArray to store attribute values
[out]statStatus (see file header for interpretation)
[in]defaultDefault value if attribute not found (optional)

Definition at line 66 of file gdncattrgetnum.f90.

69 use netcdf, only: &
70 & nf90_noerr, &
71 & nf90_global, &
72 & nf90_char, &
73 & nf90_enomem, &
74 & nf90_inquire_attribute, &
75 & nf90_get_att
76 use dc_url, only: gt_plus
78 use dc_types, only: string
79 use dc_string
80 implicit none
81 type(GD_NC_VARIABLE), intent(in) :: var
82 character(len = *), intent(in) :: name
83 integer, intent(out):: stat
84 integer, intent(out):: value(:)
85 integer, intent(in), optional:: default
86 integer, allocatable:: rbuffer(:)
87 character(STRING) :: cbuffer
88 character(STRING), pointer :: lbuffer(:)
89 integer :: attrlen, xtype, i, xferend, iname, varid
90 type(GD_NC_VARIABLE_ENTRY):: ent
91 continue
92 stat = vtable_lookup(var, ent)
93 if (stat /= nf90_noerr) then
94 if (present(default)) value(:) = default
95 return
96 endif
97 ! 型と長さを取得
98 if (name(1:1) == gt_plus) then
99 iname = 2
100 varid = nf90_global
101 else
102 iname = 1
103 varid = ent%varid
104 endif
105 stat = nf90_inquire_attribute(ent%fileid, varid, &
106 name = name(iname:), xtype = xtype, len = attrlen)
107 if (stat /= nf90_noerr) then
108 if (present(default)) value(:) = default
109 return
110 endif
111 ! 文字型の場合は長さをコンマで分解した語数と読み替える
112 if (xtype == nf90_char) then
113 call get_attr(var, name, cbuffer, "", stat)
114 if (stat /= 0) return
115 call split(cbuffer, lbuffer, ", ")
116 attrlen = size(lbuffer)
117 endif
118 ! 結果を入れるところがなければ長さだけを伝え終了
119 if (size(value) == 0) then
120 if (xtype == nf90_char) deallocate(lbuffer)
121 stat = attrlen
122 return
123 endif
124 ! 型に応じて要求されただけ値を転送
125 xferend = min(size(value), attrlen)
126 if (present(default)) value(xferend+1: ) = default
127 if (xtype == nf90_char) then
128 do, i = 1, xferend
129 value(i) = stoi(lbuffer(i))
130 enddo
131 deallocate(lbuffer)
132 stat = attrlen
133 return
134 else
135 allocate(rbuffer(attrlen), stat=stat)
136 if (stat /= 0) then
137 stat = nf90_enomem
138 return
139 endif
140 stat = nf90_get_att(ent%fileid, varid, name(iname:), rbuffer)
141 if (stat == nf90_noerr) then
142 value(1:xferend) = rbuffer(1:xferend)
143 stat = attrlen
144 endif
145 deallocate(rbuffer)
146 return
147 endif

References dc_url::gt_plus, dc_types::string, and gtdata_netcdf_internal::vtable_lookup().

Here is the call graph for this function:

◆ gdncattrgetreal()

subroutine gdncattrgetreal ( type(gd_nc_variable), intent(in)  var,
character(len = *), intent(in)  name,
real(sp), dimension(:), intent(out)  value,
integer, intent(out)  stat,
real(sp), intent(in), optional  default 
)

Get numeric attribute value (real type)

Retrieves a numeric attribute from a netCDF variable.

Parameters
[in]varVariable handle
[in]nameAttribute name
[out]valueArray to store attribute values
[out]statStatus (see file header for interpretation)
[in]defaultDefault value if attribute not found (optional)

Definition at line 168 of file gdncattrgetnum.f90.

171 use netcdf, only: &
172 & nf90_noerr, &
173 & nf90_global, &
174 & nf90_char, &
175 & nf90_enomem, &
176 & nf90_inquire_attribute, &
177 & nf90_get_att
178 use dc_url, only: gt_plus
180 use dc_types, only: string, sp
181 use dc_string
182 implicit none
183 type(GD_NC_VARIABLE), intent(in) :: var
184 character(len = *), intent(in) :: name
185 integer, intent(out):: stat
186 real(SP), intent(out):: value(:)
187 real(SP), intent(in), optional:: default
188 real(SP), allocatable:: rbuffer(:)
189 character(STRING) :: cbuffer
190 character(STRING), pointer :: lbuffer(:)
191 integer :: attrlen, xtype, i, xferend, iname, varid
192 type(GD_NC_VARIABLE_ENTRY):: ent
193 continue
194 stat = vtable_lookup(var, ent)
195 if (stat /= nf90_noerr) then
196 if (present(default)) value(:) = default
197 return
198 endif
199 ! 型と長さを取得
200 if (name(1:1) == gt_plus) then
201 iname = 2
202 varid = nf90_global
203 else
204 iname = 1
205 varid = ent%varid
206 endif
207 stat = nf90_inquire_attribute(ent%fileid, varid, &
208 name = name(iname:), xtype = xtype, len = attrlen)
209 if (stat /= nf90_noerr) then
210 if (present(default)) value(:) = default
211 return
212 endif
213 ! 文字型の場合は長さをコンマで分解した語数と読み替える
214 if (xtype == nf90_char) then
215 call get_attr(var, name, cbuffer, "", stat)
216 if (stat /= 0) return
217 call split(cbuffer, lbuffer, ", ")
218 attrlen = size(lbuffer)
219 endif
220 ! 結果を入れるところがなければ長さだけを伝え終了
221 if (size(value) == 0) then
222 if (xtype == nf90_char) deallocate(lbuffer)
223 stat = attrlen
224 return
225 endif
226 ! 型に応じて要求されただけ値を転送
227 xferend = min(size(value), attrlen)
228 if (present(default)) value(xferend+1: ) = default
229 if (xtype == nf90_char) then
230 do, i = 1, xferend
231 value(i) = real(stod(lbuffer(i)), kind=kind(value(i)))
232 enddo
233 deallocate(lbuffer)
234 stat = attrlen
235 return
236 else
237 allocate(rbuffer(attrlen), stat=stat)
238 if (stat /= 0) then
239 stat = nf90_enomem
240 return
241 endif
242 stat = nf90_get_att(ent%fileid, varid, name(iname:), rbuffer)
243 if (stat == nf90_noerr) then
244 value(1:xferend) = rbuffer(1:xferend)
245 stat = attrlen
246 endif
247 deallocate(rbuffer)
248 return
249 endif
integer, parameter, public sp
Single Precision Real number.
Definition dc_types.f90:82

References dc_url::gt_plus, dc_types::sp, dc_types::string, and gtdata_netcdf_internal::vtable_lookup().

Here is the call graph for this function: