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!-------------------------------------------------------------------------------------
5!> @file gdncvargetnum.erb
6!>
7!> @attention
8!> This file is generated from ../../../../../src/gtdata/gtdata_netcdf/gdncvargetnum.erb by ERB included Ruby 3.3.8.
9!> Please do not edit this file directly.
10!>
11!> @author Yasuhiro MORIKAWA, Eizi TOYODA
12!> @copyright Copyright (C) GFD Dennou Club, 2000-2026. All rights reserved. <br/>
13!> License is BSD-2-Clause. See [COPYRIGHT](@ref COPYRIGHT) in detail
14!>
15!> @en
16!> @brief Get numeric data from netCDF variables
17!>
18!> These subroutines are provided as gtdata_generic#Get through
19!> gtdata_netcdf_generic.
20!> @enden
21!>
22!> @ja
23!> @brief netCDF 変数から数値データを取得
24!>
25!> 以下のサブルーチンは gtdata_netcdf_generic を通じて
26!> gtdata_generic#Get として提供されます。
27!> @endja
28!>
29!>
30!> @en
31!> @brief Get variable data (real type)
32!>
33!> Reads data from a netCDF variable with array slicing support.
34!> @enden
35!>
36!> @ja
37!> @brief 変数データの取得 (real 型)
38!>
39!> netCDF 変数から配列スライシングをサポートしてデータを読み込みます。
40!> @endja
41!>
42!> @param[in] var @en Variable handle @enden @ja 変数ハンドル @endja
43!> @param[in] start @en Start indices for each dimension @enden @ja 各次元の開始インデックス @endja
44!> @param[in] cnt @en Count of elements to read for each dimension @enden @ja 各次元の読み込み要素数 @endja
45!> @param[in] stride @en Stride (interval) for each dimension @enden @ja 各次元のストライド (間隔) @endja
46!> @param[in] imap @en Memory mapping vector (see NetCDF manual NF_PUT_VARM_type) @enden
47!> @ja メモリマッピングベクトル (NetCDF マニュアル NF_PUT_VARM_type 参照) @endja
48!> @param[in] siz @en Size of val array @enden @ja val 配列のサイズ @endja
49!> @param[out] val @en Array to store read data @enden @ja 読み込んだデータを格納する配列 @endja
50!> @param[out] iostat @en I/O status (NF90_NOERR on success) @enden @ja I/O ステータス (成功時 NF90_NOERR) @endja
51!>
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
112!>
113!> @en
114!> @brief Get variable data (double type)
115!>
116!> Reads data from a netCDF variable with array slicing support.
117!> @enden
118!>
119!> @ja
120!> @brief 変数データの取得 (double 型)
121!>
122!> netCDF 変数から配列スライシングをサポートしてデータを読み込みます。
123!> @endja
124!>
125!> @param[in] var @en Variable handle @enden @ja 変数ハンドル @endja
126!> @param[in] start @en Start indices for each dimension @enden @ja 各次元の開始インデックス @endja
127!> @param[in] cnt @en Count of elements to read for each dimension @enden @ja 各次元の読み込み要素数 @endja
128!> @param[in] stride @en Stride (interval) for each dimension @enden @ja 各次元のストライド (間隔) @endja
129!> @param[in] imap @en Memory mapping vector (see NetCDF manual NF_PUT_VARM_type) @enden
130!> @ja メモリマッピングベクトル (NetCDF マニュアル NF_PUT_VARM_type 参照) @endja
131!> @param[in] siz @en Size of val array @enden @ja val 配列のサイズ @endja
132!> @param[out] val @en Array to store read data @enden @ja 読み込んだデータを格納する配列 @endja
133!> @param[out] iostat @en I/O status (NF90_NOERR on success) @enden @ja I/O ステータス (成功時 NF90_NOERR) @endja
134!>
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
195!>
196!> @en
197!> @brief Get variable data (int type)
198!>
199!> Reads data from a netCDF variable with array slicing support.
200!> @enden
201!>
202!> @ja
203!> @brief 変数データの取得 (int 型)
204!>
205!> netCDF 変数から配列スライシングをサポートしてデータを読み込みます。
206!> @endja
207!>
208!> @param[in] var @en Variable handle @enden @ja 変数ハンドル @endja
209!> @param[in] start @en Start indices for each dimension @enden @ja 各次元の開始インデックス @endja
210!> @param[in] cnt @en Count of elements to read for each dimension @enden @ja 各次元の読み込み要素数 @endja
211!> @param[in] stride @en Stride (interval) for each dimension @enden @ja 各次元のストライド (間隔) @endja
212!> @param[in] imap @en Memory mapping vector (see NetCDF manual NF_PUT_VARM_type) @enden
213!> @ja メモリマッピングベクトル (NetCDF マニュアル NF_PUT_VARM_type 参照) @endja
214!> @param[in] siz @en Size of val array @enden @ja val 配列のサイズ @endja
215!> @param[out] val @en Array to store read data @enden @ja 読み込んだデータを格納する配列 @endja
216!> @param[out] iostat @en I/O status (NF90_NOERR on success) @enden @ja I/O ステータス (成功時 NF90_NOERR) @endja
217!>
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 dp
Double Precision Real number
Definition dc_types.f90:92
integer, parameter, public sp
Single Precision Real number.
Definition dc_types.f90:82
integer function, public vtable_lookup(var, entry)