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

Go to the source code of this file.

Functions/Subroutines

subroutine gdncvargetreal (var, start, cnt, stride, imap, siz, val, iostat)
subroutine gdncvargetdouble (var, start, cnt, stride, imap, siz, val, iostat)
subroutine gdncvargetint (var, start, cnt, stride, imap, siz, val, iostat)

Function/Subroutine Documentation

◆ gdncvargetdouble()

subroutine gdncvargetdouble ( type(gd_nc_variable), intent(in) var,
integer, dimension(:), intent(in) start,
integer, dimension(:), intent(in) cnt,
integer, dimension(:), intent(in) stride,
integer, dimension(:), intent(in) imap,
integer, intent(in) siz,
real(dp), dimension(siz), intent(out) val,
integer, intent(out) iostat )

Get variable data (double type)

Reads data from a netCDF variable with array slicing support.

Parameters
[in]varVariable handle
[in]startStart indices for each dimension
[in]cntCount of elements to read for each dimension
[in]strideStride (interval) for each dimension
[in]imapMemory mapping vector (see NetCDF manual NF_PUT_VARM_type)
[in]sizSize of val array
[out]valArray to store read data
[out]iostatI/O status (NF90_NOERR on success)

Definition at line 135 of file gdncvargetnum.f90.

138 use netcdf, only: &
139 & nf90_noerr, &
140 & nf90_einval, &
141 & nf90_eindefine, &
142 & nf90_get_var, &
143 & nf90_redef, &
144 & nf90_enddef
145 use dc_types, only: dp
146 implicit none
147 type(GD_NC_VARIABLE), intent(in):: var
148 integer, intent(in):: start(:)
149 integer, intent(in):: cnt(:)
150 integer, intent(in):: stride(:)
151 integer, intent(in):: imap(:)
152 ! NetCDF変数と内部データ配列のメモリ内構
153 ! 造間のマッピングを指定する整数ベクトル.
154 ! 詳しくは NetCDF マニュアル
155 ! (NF_PUT_VARM_type 等 を参照のこと)
156 integer, intent(in):: siz
157 real(DP), intent(out):: val(siz)
158 integer, intent(out):: iostat
159 integer:: nd ! var が保持する変数が依存する次元変数の数
160 type(GD_NC_VARIABLE_ENTRY):: ent
161 integer, allocatable:: istart(:), istride(:), iimap(:)
162 continue
163 iostat = vtable_lookup(var, ent)
164 if (iostat /= nf90_noerr) goto 999
165 ! --- nd check ---
166 nd = 0
167 if (associated(ent%dimids)) nd = size(ent%dimids)
168 if (min(size(start), size(cnt), size(stride), size(imap)) < nd) then
169 iostat = nf90_einval
170 goto 999
171 endif
172 if (nd == 0) then
173 iostat = nf90_get_var(ent%fileid, ent%varid, val(1), start)
174 goto 999
175 endif
176 ! --- stride ovarwrite buffer ---
177 allocate(istart(nd), istride(nd), iimap(nd))
178 istart(1:nd) = start(1:nd)
179 istride(1:nd) = stride(1:nd)
180 iimap(1:nd) = imap(1:nd)
181 ! --- do read ---
182 iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
183 if (iostat == nf90_eindefine) then
184 iostat = nf90_enddef(ent%fileid)
185 if (iostat /= nf90_noerr) return
186 iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
187 if (iostat /= nf90_noerr) return
188 iostat = nf90_redef(ent%fileid)
189 if (iostat /= nf90_noerr) return
190 end if
191 deallocate(istart, istride, iimap)
192999 continue
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:92
integer function, public vtable_lookup(var, entry)

References dc_types::dp, and gtdata_netcdf_internal::vtable_lookup().

Here is the call graph for this function:

◆ gdncvargetint()

subroutine gdncvargetint ( type(gd_nc_variable), intent(in) var,
integer, dimension(:), intent(in) start,
integer, dimension(:), intent(in) cnt,
integer, dimension(:), intent(in) stride,
integer, dimension(:), intent(in) imap,
integer, intent(in) siz,
integer, dimension(siz), intent(out) val,
integer, intent(out) iostat )

Get variable data (int type)

Reads data from a netCDF variable with array slicing support.

Parameters
[in]varVariable handle
[in]startStart indices for each dimension
[in]cntCount of elements to read for each dimension
[in]strideStride (interval) for each dimension
[in]imapMemory mapping vector (see NetCDF manual NF_PUT_VARM_type)
[in]sizSize of val array
[out]valArray to store read data
[out]iostatI/O status (NF90_NOERR on success)

Definition at line 218 of file gdncvargetnum.f90.

221 use netcdf, only: &
222 & nf90_noerr, &
223 & nf90_einval, &
224 & nf90_eindefine, &
225 & nf90_get_var, &
226 & nf90_redef, &
227 & nf90_enddef
228 implicit none
229 type(GD_NC_VARIABLE), intent(in):: var
230 integer, intent(in):: start(:)
231 integer, intent(in):: cnt(:)
232 integer, intent(in):: stride(:)
233 integer, intent(in):: imap(:)
234 ! NetCDF変数と内部データ配列のメモリ内構
235 ! 造間のマッピングを指定する整数ベクトル.
236 ! 詳しくは NetCDF マニュアル
237 ! (NF_PUT_VARM_type 等 を参照のこと)
238 integer, intent(in):: siz
239 integer, intent(out):: val(siz)
240 integer, intent(out):: iostat
241 integer:: nd ! var が保持する変数が依存する次元変数の数
242 type(GD_NC_VARIABLE_ENTRY):: ent
243 integer, allocatable:: istart(:), istride(:), iimap(:)
244 continue
245 iostat = vtable_lookup(var, ent)
246 if (iostat /= nf90_noerr) goto 999
247 ! --- nd check ---
248 nd = 0
249 if (associated(ent%dimids)) nd = size(ent%dimids)
250 if (min(size(start), size(cnt), size(stride), size(imap)) < nd) then
251 iostat = nf90_einval
252 goto 999
253 endif
254 if (nd == 0) then
255 iostat = nf90_get_var(ent%fileid, ent%varid, val(1), start)
256 goto 999
257 endif
258 ! --- stride ovarwrite buffer ---
259 allocate(istart(nd), istride(nd), iimap(nd))
260 istart(1:nd) = start(1:nd)
261 istride(1:nd) = stride(1:nd)
262 iimap(1:nd) = imap(1:nd)
263 ! --- do read ---
264 iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
265 if (iostat == nf90_eindefine) then
266 iostat = nf90_enddef(ent%fileid)
267 if (iostat /= nf90_noerr) return
268 iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
269 if (iostat /= nf90_noerr) return
270 iostat = nf90_redef(ent%fileid)
271 if (iostat /= nf90_noerr) return
272 end if
273 deallocate(istart, istride, iimap)
274999 continue

References gtdata_netcdf_internal::vtable_lookup().

Here is the call graph for this function:

◆ gdncvargetreal()

subroutine gdncvargetreal ( type(gd_nc_variable), intent(in) var,
integer, dimension(:), intent(in) start,
integer, dimension(:), intent(in) cnt,
integer, dimension(:), intent(in) stride,
integer, dimension(:), intent(in) imap,
integer, intent(in) siz,
real(sp), dimension(siz), intent(out) val,
integer, intent(out) iostat )

Definition at line 52 of file gdncvargetnum.f90.

55 use netcdf, only: &
56 & nf90_noerr, &
57 & nf90_einval, &
58 & nf90_eindefine, &
59 & nf90_get_var, &
60 & nf90_redef, &
61 & nf90_enddef
62 use dc_types, only: sp
63 implicit none
64 type(GD_NC_VARIABLE), intent(in):: var
65 integer, intent(in):: start(:)
66 integer, intent(in):: cnt(:)
67 integer, intent(in):: stride(:)
68 integer, intent(in):: imap(:)
69 ! NetCDF変数と内部データ配列のメモリ内構
70 ! 造間のマッピングを指定する整数ベクトル.
71 ! 詳しくは NetCDF マニュアル
72 ! (NF_PUT_VARM_type 等 を参照のこと)
73 integer, intent(in):: siz
74 real(SP), intent(out):: val(siz)
75 integer, intent(out):: iostat
76 integer:: nd ! var が保持する変数が依存する次元変数の数
77 type(GD_NC_VARIABLE_ENTRY):: ent
78 integer, allocatable:: istart(:), istride(:), iimap(:)
79 continue
80 iostat = vtable_lookup(var, ent)
81 if (iostat /= nf90_noerr) goto 999
82 ! --- nd check ---
83 nd = 0
84 if (associated(ent%dimids)) nd = size(ent%dimids)
85 if (min(size(start), size(cnt), size(stride), size(imap)) < nd) then
86 iostat = nf90_einval
87 goto 999
88 endif
89 if (nd == 0) then
90 iostat = nf90_get_var(ent%fileid, ent%varid, val(1), start)
91 goto 999
92 endif
93 ! --- stride ovarwrite buffer ---
94 allocate(istart(nd), istride(nd), iimap(nd))
95 istart(1:nd) = start(1:nd)
96 istride(1:nd) = stride(1:nd)
97 iimap(1:nd) = imap(1:nd)
98 ! --- do read ---
99 iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
100 if (iostat == nf90_eindefine) then
101 iostat = nf90_enddef(ent%fileid)
102 if (iostat /= nf90_noerr) return
103 iostat = nf90_get_var(ent%fileid, ent%varid, val, istart, cnt, istride, iimap)
104 if (iostat /= nf90_noerr) return
105 iostat = nf90_redef(ent%fileid)
106 if (iostat /= nf90_noerr) return
107 end if
108 deallocate(istart, istride, iimap)
109999 continue
integer, parameter, public sp
Single Precision Real number.
Definition dc_types.f90:82

References dc_types::sp, and gtdata_netcdf_internal::vtable_lookup().

Here is the call graph for this function: