gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
gdncvargetnum.f90
Go to the documentation of this file.
1! -*- coding: utf-8; mode: f90 -*-
2!-------------------------------------------------------------------------------------
3! Copyright (c) 2000-2026 Gtool Development Group. All rights reserved.
4!-------------------------------------------------------------------------------------
52subroutine gdncvargetreal(var, start, cnt, stride, imap, siz, val, iostat)
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
110end subroutine gdncvargetreal
111
135subroutine gdncvargetdouble(var, start, cnt, stride, imap, siz, val, iostat)
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
193end subroutine gdncvargetdouble
194
218subroutine gdncvargetint(var, start, cnt, stride, imap, siz, val, iostat)
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
275end subroutine gdncvargetint
276
subroutine gdncvargetreal(var, start, cnt, stride, imap, siz, val, iostat)
subroutine gdncvargetint(var, start, cnt, stride, imap, siz, val, iostat)
subroutine gdncvargetdouble(var, start, cnt, stride, imap, siz, val, iostat)
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public sp
Single Precision Real number.
Definition dc_types.f90:82
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:92
integer function, public vtable_lookup(var, entry)