gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
gdncvarputnum.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 gdncvarputnum.erb
6!>
7!> @attention
8!> This file is generated from ../../../../../src/gtdata/gtdata_netcdf/gdncvarputnum.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 Put numeric data to netCDF variables
17!>
18!> These subroutines write data to netCDF variables.
19!> @enden
20!>
21!> @ja
22!> @brief netCDF 変数へ数値データを出力
23!>
24!> これらのサブルーチンは netCDF 変数へデータを書き込みます。
25!> @endja
26!>
27!>
28!> @en
29!> @brief Put variable data (real type)
30!>
31!> Writes data to a netCDF variable with array slicing support.
32!> @enden
33!>
34!> @ja
35!> @brief 変数データの出力 (real 型)
36!>
37!> netCDF 変数へ配列スライシングをサポートしてデータを書き込みます。
38!> @endja
39!>
40!> @param[in] var @en Variable handle @enden @ja 変数ハンドル @endja
41!> @param[in] start @en Start indices for each dimension @enden @ja 各次元の開始インデックス @endja
42!> @param[in] count @en Count of elements to write for each dimension @enden @ja 各次元の書き込み要素数 @endja
43!> @param[in] stride @en Stride (interval) for each dimension @enden @ja 各次元のストライド (間隔) @endja
44!> @param[in] imap @en Memory mapping vector (see NetCDF manual NF_PUT_VARM_type) @enden
45!> @ja メモリマッピングベクトル (NetCDF マニュアル NF_PUT_VARM_type 参照) @endja
46!> @param[in] siz @en Size of value array @enden @ja value 配列のサイズ @endja
47!> @param[in] value @en Data to write @enden @ja 書き込むデータ @endja
48!> @param[out] iostat @en I/O status (NF90_NOERR on success) @enden @ja I/O ステータス (成功時 NF90_NOERR) @endja
49!>
50subroutine gdncvarputreal(var, start, count, stride, imap, siz, value, iostat)
51 use dc_types, only: sp
54 use netcdf, only: nf90_noerr, nf90_einval, nf90_put_var
56 use dc_trace, only: dbgmessage
57 implicit none
58 type(gd_nc_variable), intent(in):: var
59 integer, intent(in):: start(:)
60 integer, intent(in):: count(:)
61 integer, intent(in):: stride(:)
62 integer, intent(in):: imap(:)
63 integer, intent(in):: siz
64 real(SP), intent(in):: value(siz)
65 integer, intent(out):: iostat
66 integer:: ndims
67 type(gd_nc_variable_entry):: ent
68 continue
69 iostat = vtable_lookup(var, ent)
70 if (iostat /= nf90_noerr) goto 999
71 ndims = 0
72 if (associated(ent%dimids)) ndims = size(ent%dimids)
73 if (min(size(start), size(count), size(stride), size(imap)) < ndims) then
74 iostat = nf90_einval
75 goto 999
76 endif
77 call dbgmessage("f=%d v=%d sta=%*d c=%*d str=%*d imap=%*d", &
78 & i=(/ent%fileid, ent%varid, start, count, stride, imap/), &
79 & n=(/ndims, ndims, ndims, ndims/))
80 iostat = gdncfiledatamode(ent%fileid)
81 if (iostat /= nf90_noerr) return
82 iostat = nf90_put_var(ent%fileid, ent%varid, value, &
83 & start, count, stride, imap)
84999 continue
85end subroutine gdncvarputreal
86
87!>
88!> @en
89!> @brief Put variable data (double type)
90!>
91!> Writes data to a netCDF variable with array slicing support.
92!> @enden
93!>
94!> @ja
95!> @brief 変数データの出力 (double 型)
96!>
97!> netCDF 変数へ配列スライシングをサポートしてデータを書き込みます。
98!> @endja
99!>
100!> @param[in] var @en Variable handle @enden @ja 変数ハンドル @endja
101!> @param[in] start @en Start indices for each dimension @enden @ja 各次元の開始インデックス @endja
102!> @param[in] count @en Count of elements to write for each dimension @enden @ja 各次元の書き込み要素数 @endja
103!> @param[in] stride @en Stride (interval) for each dimension @enden @ja 各次元のストライド (間隔) @endja
104!> @param[in] imap @en Memory mapping vector (see NetCDF manual NF_PUT_VARM_type) @enden
105!> @ja メモリマッピングベクトル (NetCDF マニュアル NF_PUT_VARM_type 参照) @endja
106!> @param[in] siz @en Size of value array @enden @ja value 配列のサイズ @endja
107!> @param[in] value @en Data to write @enden @ja 書き込むデータ @endja
108!> @param[out] iostat @en I/O status (NF90_NOERR on success) @enden @ja I/O ステータス (成功時 NF90_NOERR) @endja
109!>
110subroutine gdncvarputdouble(var, start, count, stride, imap, siz, value, iostat)
111 use dc_types, only: dp
114 use netcdf, only: nf90_noerr, nf90_einval, nf90_put_var
116 use dc_trace, only: dbgmessage
117 implicit none
118 type(gd_nc_variable), intent(in):: var
119 integer, intent(in):: start(:)
120 integer, intent(in):: count(:)
121 integer, intent(in):: stride(:)
122 integer, intent(in):: imap(:)
123 integer, intent(in):: siz
124 real(DP), intent(in):: value(siz)
125 integer, intent(out):: iostat
126 integer:: ndims
127 type(gd_nc_variable_entry):: ent
128 continue
129 iostat = vtable_lookup(var, ent)
130 if (iostat /= nf90_noerr) goto 999
131 ndims = 0
132 if (associated(ent%dimids)) ndims = size(ent%dimids)
133 if (min(size(start), size(count), size(stride), size(imap)) < ndims) then
134 iostat = nf90_einval
135 goto 999
136 endif
137 call dbgmessage("f=%d v=%d sta=%*d c=%*d str=%*d imap=%*d", &
138 & i=(/ent%fileid, ent%varid, start, count, stride, imap/), &
139 & n=(/ndims, ndims, ndims, ndims/))
140 iostat = gdncfiledatamode(ent%fileid)
141 if (iostat /= nf90_noerr) return
142 iostat = nf90_put_var(ent%fileid, ent%varid, value, &
143 & start, count, stride, imap)
144999 continue
145end subroutine gdncvarputdouble
146
147!>
148!> @en
149!> @brief Put variable data (int type)
150!>
151!> Writes data to a netCDF variable with array slicing support.
152!> @enden
153!>
154!> @ja
155!> @brief 変数データの出力 (int 型)
156!>
157!> netCDF 変数へ配列スライシングをサポートしてデータを書き込みます。
158!> @endja
159!>
160!> @param[in] var @en Variable handle @enden @ja 変数ハンドル @endja
161!> @param[in] start @en Start indices for each dimension @enden @ja 各次元の開始インデックス @endja
162!> @param[in] count @en Count of elements to write for each dimension @enden @ja 各次元の書き込み要素数 @endja
163!> @param[in] stride @en Stride (interval) for each dimension @enden @ja 各次元のストライド (間隔) @endja
164!> @param[in] imap @en Memory mapping vector (see NetCDF manual NF_PUT_VARM_type) @enden
165!> @ja メモリマッピングベクトル (NetCDF マニュアル NF_PUT_VARM_type 参照) @endja
166!> @param[in] siz @en Size of value array @enden @ja value 配列のサイズ @endja
167!> @param[in] value @en Data to write @enden @ja 書き込むデータ @endja
168!> @param[out] iostat @en I/O status (NF90_NOERR on success) @enden @ja I/O ステータス (成功時 NF90_NOERR) @endja
169!>
170subroutine gdncvarputint(var, start, count, stride, imap, siz, value, iostat)
173 use netcdf, only: nf90_noerr, nf90_einval, nf90_put_var
175 use dc_trace, only: dbgmessage
176 implicit none
177 type(gd_nc_variable), intent(in):: var
178 integer, intent(in):: start(:)
179 integer, intent(in):: count(:)
180 integer, intent(in):: stride(:)
181 integer, intent(in):: imap(:)
182 integer, intent(in):: siz
183 integer, intent(in):: value(siz)
184 integer, intent(out):: iostat
185 integer:: ndims
186 type(gd_nc_variable_entry):: ent
187 continue
188 iostat = vtable_lookup(var, ent)
189 if (iostat /= nf90_noerr) goto 999
190 ndims = 0
191 if (associated(ent%dimids)) ndims = size(ent%dimids)
192 if (min(size(start), size(count), size(stride), size(imap)) < ndims) then
193 iostat = nf90_einval
194 goto 999
195 endif
196 call dbgmessage("f=%d v=%d sta=%*d c=%*d str=%*d imap=%*d", &
197 & i=(/ent%fileid, ent%varid, start, count, stride, imap/), &
198 & n=(/ndims, ndims, ndims, ndims/))
199 iostat = gdncfiledatamode(ent%fileid)
200 if (iostat /= nf90_noerr) return
201 iostat = nf90_put_var(ent%fileid, ent%varid, value, &
202 & start, count, stride, imap)
203999 continue
204end subroutine gdncvarputint
205
206!>
207!> @en
208!> @brief Put variable data (char type)
209!>
210!> Writes data to a netCDF variable with array slicing support.
211!> @enden
212!>
213!> @ja
214!> @brief 変数データの出力 (char 型)
215!>
216!> netCDF 変数へ配列スライシングをサポートしてデータを書き込みます。
217!> @endja
218!>
219!> @param[in] var @en Variable handle @enden @ja 変数ハンドル @endja
220!> @param[in] start @en Start indices for each dimension @enden @ja 各次元の開始インデックス @endja
221!> @param[in] count @en Count of elements to write for each dimension @enden @ja 各次元の書き込み要素数 @endja
222!> @param[in] stride @en Stride (interval) for each dimension @enden @ja 各次元のストライド (間隔) @endja
223!> @param[in] imap @en Memory mapping vector (see NetCDF manual NF_PUT_VARM_type) @enden
224!> @ja メモリマッピングベクトル (NetCDF マニュアル NF_PUT_VARM_type 参照) @endja
225!> @param[in] siz @en Size of value array @enden @ja value 配列のサイズ @endja
226!> @param[in] value @en Data to write @enden @ja 書き込むデータ @endja
227!> @param[out] iostat @en I/O status (NF90_NOERR on success) @enden @ja I/O ステータス (成功時 NF90_NOERR) @endja
228!>
229subroutine gdncvarputchar(var, start, count, stride, imap, siz, value, iostat)
232 use netcdf, only: nf90_noerr, nf90_einval, nf90_put_var
234 use dc_trace, only: dbgmessage
235 implicit none
236 type(gd_nc_variable), intent(in):: var
237 integer, intent(in):: start(:)
238 integer, intent(in):: count(:)
239 integer, intent(in):: stride(:)
240 integer, intent(in):: imap(:)
241 integer, intent(in):: siz
242 character(*), intent(in):: value(siz)
243 integer, intent(out):: iostat
244 integer:: ndims
245 type(gd_nc_variable_entry):: ent
246 continue
247 iostat = vtable_lookup(var, ent)
248 if (iostat /= nf90_noerr) goto 999
249 ndims = 0
250 if (associated(ent%dimids)) ndims = size(ent%dimids)
251 if (min(size(start), size(count), size(stride), size(imap)) < ndims) then
252 iostat = nf90_einval
253 goto 999
254 endif
255 call dbgmessage("f=%d v=%d sta=%*d c=%*d str=%*d imap=%*d", &
256 & i=(/ent%fileid, ent%varid, start, count, stride, imap/), &
257 & n=(/ndims, ndims, ndims, ndims/))
258 iostat = gdncfiledatamode(ent%fileid)
259 if (iostat /= nf90_noerr) return
260 iostat = nf90_put_var(ent%fileid, ent%varid, value, &
261 & start, count, stride, imap)
262999 continue
263end subroutine gdncvarputchar
264
subroutine gdncvarputchar(var, start, count, stride, imap, siz, value, iostat)
subroutine gdncvarputint(var, start, count, stride, imap, siz, value, iostat)
subroutine gdncvarputreal(var, start, count, stride, imap, siz, value, iostat)
subroutine gdncvarputdouble(var, start, count, stride, imap, siz, value, iostat)
Debug tracing module.
Definition dc_trace.f90:150
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:661
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)