Loading...
Searching...
No Matches
historyinquire.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine historyinquire1 (history, err, file, title, source, dims, dimsizes, longnames, units, xtypes, institution, origin, interval, newest, oldest, conventions, gt_version, axes, varinfo)
subroutine historyinquire2 (history, err, file, title, source, dims, dimsizes, longnames, units, xtypes, institution, origin, interval, newest, oldest, conventions, gt_version, axes, varinfo)
subroutine historyinquire3 (history, err, file, title, source, dims, dimsizes, longnames, units, xtypes, institution, origin, interval, newest, oldest, conventions, gt_version, axes, varinfo)
subroutine historyinquire4 (history, err, file, title, source, dims, dimsizes, longnames, units, xtypes, institution, origin, interval, newest, oldest, conventions, gt_version, axes, varinfo)

Function/Subroutine Documentation

◆ historyinquire1()

subroutine historyinquire1 ( type(gt_history), intent(in) history,
logical, intent(out), optional err,
character(*), intent(out), optional file,
character(*), intent(out), optional title,
character(*), intent(out), optional source,
character(*), dimension(:), optional, pointer dims,
integer, dimension(:), optional, pointer dimsizes,
character(*), dimension(:), optional, pointer longnames,
character(*), dimension(:), optional, pointer units,
character(*), dimension(:), optional, pointer xtypes,
character(*), intent(out), optional institution,
real, intent(out), optional origin,
real, intent(out), optional interval,
real, intent(out), optional newest,
real, intent(out), optional oldest,
character(*), intent(out), optional conventions,
character(*), intent(out), optional gt_version,
type(gt_history_axis), dimension(:), optional, pointer axes,
type(gt_history_varinfo), dimension(:), optional, pointer varinfo )

Definition at line 10 of file historyinquire.f90.

15 !
16 !== GT_HISTORY 型変数への問い合わせ
17 !
18 ! HistoryCreate や HistoryAddVariable などで設定した値の
19 ! 参照を行います。
20 !
21 ! file, title, source, institution, origin, interval,
22 ! conventions, gt_version, dims, dimsizes, longnames, units,
23 ! xtypes に関しては HistoryCreate を参照してください。
24 !
25 ! title, source, institution, origin, interval, conventions, gt_version
26 ! に関しては、値が得られなかった場合は "unknown" が返ります。
27 !
28 ! dims, dimsizes, longnames, units, xtypes に関してはポインタに
29 ! 値を返すため、必ずポインタを空状態にしてから与えてください。
30 !
31 ! axes と varinfo にはそれぞれ座標軸情報と変数情報を返します。
32 ! 将来的には全ての属性の値も一緒に返す予定ですが、現在は
33 ! long_name, units, xtype のみが属性の値として返ります。
34 !
35 ! *HistoryInquire* は 2 つのサブルーチンの総称名です。
36 ! HistoryCreate で *history* を与えなかった場合の問い合わせに関しては
37 ! 上記のサブルーチンを参照してください。
38 !
39 !=== エラー
40 !
41 ! 以下の場合に、このサブルーチンはエラーを生じプログラムを終了させます。
42 ! ただし、*err* 引数を与える場合、この引数に <tt>.true.</tt> を
43 ! 返し、プログラムは続行します。
44 !
45 ! - *history* が HistoryCreate によって初期設定されていない場合
46 ! - HistoryAddVariable や HistoryCopyVariable 等による変数定義が
47 ! 一度も行われていない GT_HISTORY 変数に対して引数 varinfo
48 ! を渡した場合
49 !
51 use gtool_history_internal, only: default
52 use gtdata_generic, only: inquire, get_attr, open, close
53 use gtdata_types, only: gt_variable
54 use dc_url, only: urlsplit
55 use dc_error, only: storeerror, dc_noerr, gt_ebadhistory, nf90_enotvar
56 use dc_date, only: evalbyunit
57 use dc_trace, only: beginsub, endsub, dbgmessage
58 use dc_types, only: string, token, dp
59 implicit none
60 type(GT_HISTORY), intent(in):: history
61 logical, intent(out), optional :: err
62 character(*), intent(out), optional:: file, title, source, institution
63 real,intent(out), optional:: origin, interval
64 real,intent(out), optional:: newest ! 最新の時刻
65 real,intent(out), optional:: oldest ! 最初の時刻
66 character(*), intent(out), optional:: conventions, gt_version
67 character(*), pointer, optional:: dims(:) ! (out)
68 integer,pointer, optional:: dimsizes(:) ! (out)
69 character(*), pointer, optional:: longnames(:) ! (out)
70 character(*), pointer, optional:: units(:) ! (out)
71 character(*), pointer, optional:: xtypes(:) ! (out)
72 type(GT_HISTORY_AXIS), pointer, optional :: axes(:) ! (out)
73 type(GT_HISTORY_VARINFO), pointer, optional :: varinfo(:) ! (out)
74
75 ! Internal Work
76 character(STRING) :: url, cause_c
77 character(TOKEN) :: unknown_mes = 'unknown'
78 integer :: i, j, numdims, numvars, alldims, stat
79 logical :: growable
80 type(GT_VARIABLE) :: dimvar
81 character(*), parameter:: subname = "HistoryInquire1"
82 continue
83 call beginsub(subname)
84 stat = dc_noerr
85 cause_c = ''
86 if (.not. associated(history % dimvars) .or. &
87 & size(history % dimvars) < 1) then
88 stat = gt_ebadhistory
89 goto 999
90 end if
91
92 if (present(file)) then
93 call inquire(history % dimvars(1), url=url)
94 call urlsplit(fullname=url, file=file)
95 end if
96 if (present(title)) then
97 call get_attr(history % dimvars(1), '+title', title, trim(unknown_mes))
98 end if
99 if (present(source)) then
100 call get_attr(history % dimvars(1), '+source', source, trim(unknown_mes))
101 end if
102 if (present(institution)) then
103 call get_attr(history % dimvars(1), '+institution', institution, trim(unknown_mes))
104 end if
105
106 if (present(origin)) then
107 origin = history % origin
108! origin = EvalByUnit( history % origin, '', history % unlimited_units_symbol )
109 end if
110 if (present(interval)) then
111 interval = history % interval
112! interval = EvalByUnit( history % interval, '', history % unlimited_units_symbol )
113 end if
114 if (present(newest)) then
115 newest = history % newest
116! newest = EvalByUnit( history % newest, '', history % unlimited_units_symbol )
117 end if
118 if (present(oldest)) then
119 oldest = history % oldest
120! oldest = EvalByUnit( history % oldest, '', history % unlimited_units_symbol )
121 end if
122 if (present(conventions)) then
123 call get_attr(history % dimvars(1), '+Conventions', conventions, trim(unknown_mes))
124 end if
125 if (present(gt_version)) then
126 call get_attr(history % dimvars(1), '+gt_version', gt_version, trim(unknown_mes))
127 end if
128 if (present(dims)) then
129 numdims = size(history % dimvars)
130 allocate(dims(numdims))
131 do i = 1, numdims
132 call inquire(history % dimvars(i), name=dims(i))
133 end do
134 end if
135 if (present(dimsizes)) then
136 numdims = size(history % dimvars)
137 allocate(dimsizes(numdims))
138 do i = 1, numdims
139 call inquire(history % dimvars(i), size=dimsizes(i), growable=growable)
140 if (growable) dimsizes(i) = 0
141 end do
142 end if
143 if (present(longnames)) then
144 numdims = size(history % dimvars)
145 allocate(longnames(numdims))
146 do i = 1, numdims
147 call get_attr(history % dimvars(i), 'long_name', &
148 & longnames(i), 'unknown')
149 end do
150 end if
151 if (present(units)) then
152 numdims = size(history % dimvars)
153 allocate(units(numdims))
154 do i = 1, numdims
155 call get_attr(history % dimvars(i), 'units', &
156 & units(i), 'unknown')
157 end do
158 end if
159 if (present(xtypes)) then
160 numdims = size(history % dimvars)
161 allocate(xtypes(numdims))
162 do i = 1, numdims
163 call inquire(history % dimvars(i), xtype=xtypes(i))
164 end do
165 end if
166 if (present(axes)) then
167 numvars = size(history % dimvars)
168 allocate(axes(numvars))
169 do i = 1, numvars
170 call inquire(history % dimvars(i), &
171 & allcount=axes(i) % length, &
172 & xtype=axes(i) % xtype, name=axes(i) % name)
173 call get_attr(history % dimvars(i), 'long_name', &
174 & axes(i) % longname, 'unknown')
175 call get_attr(history % dimvars(i), 'units', &
176 & axes(i) % units, 'unknown')
177
178 ! 属性 GT_HISTORY_ATTR はまだ取得できない
179 !
180 ! するためには, 属性名に対して様々な型が存在しうると
181 ! 考えられるため, get_attr (gtdata_generic および gtdata_netcdf_generic)
182 ! に err 属性を装備させ, 取得できない際にエラーを
183 ! 返してもらわなければならないだろう.
184
185 end do
186 end if
187
188 if (present(varinfo)) then
189 if (.not. associated(history % vars) ) then
190 stat = nf90_enotvar
191 goto 999
192 end if
193 if ( size(history % vars) < 1) then
194 stat = nf90_enotvar
195 goto 999
196 end if
197 numvars = size(history % vars)
198 allocate(varinfo(numvars))
199 do i = 1, numvars
200 call inquire(history % vars(i), alldims=alldims, &
201 & xtype=varinfo(i) % xtype, name=varinfo(i) % name)
202 call get_attr(history % vars(i), 'long_name', &
203 & varinfo(i) % longname, 'unknown')
204 call get_attr(history % vars(i), 'units', &
205 & varinfo(i) % units, 'unknown')
206
207 ! 属性 GT_HISTORY_ATTR はまだ取得できない
208 !
209 ! するためには, 属性名に対して様々な型が存在しうると
210 ! 考えられるため, get_attr (gtdata_generic および gtdata_netcdf_generic)
211 ! に err 属性を装備させ, 取得できない際にエラーを
212 ! 返してもらわなければならないだろう.
213
214 allocate(varinfo(i) % dims(alldims))
215 do j = 1, alldims
216 call open(var=dimvar, source_var=history % vars(i), &
217 & dimord=j, count_compact=.true.)
218 call inquire(dimvar, name=varinfo(i) % dims(j))
219 call close(dimvar)
220 end do
221
222 varinfo(i) % initialized = .true.
223
224 end do
225 end if
226999 continue
227 call storeerror(stat, subname, err, cause_c=cause_c)
228 call endsub(subname)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:830
integer, parameter, public gt_ebadhistory
Definition dc_error.f90:543
integer, parameter, public dc_noerr
Definition dc_error.f90:509
Provides kind type parameter values.
Definition dc_types.f90:49
integer, parameter, public token
Character length for word, token
Definition dc_types.f90:109
integer, parameter, public string
Character length for string
Definition dc_types.f90:118
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:83
type(gt_history), target, save default

References dc_error::dc_noerr, gtool_history_types::default, dc_types::dp, dc_error::gt_ebadhistory, dc_error::storeerror(), dc_types::string, and dc_types::token.

Here is the call graph for this function:

◆ historyinquire2()

subroutine historyinquire2 ( character(*), intent(in) history,
logical, intent(out), optional err,
character(*), intent(out), optional file,
character(*), intent(out), optional title,
character(*), intent(out), optional source,
character(*), dimension(:), optional, pointer dims,
integer, dimension(:), optional, pointer dimsizes,
character(*), dimension(:), optional, pointer longnames,
character(*), dimension(:), optional, pointer units,
character(*), dimension(:), optional, pointer xtypes,
character(*), intent(out), optional institution,
real, intent(out), optional origin,
real, intent(out), optional interval,
real, intent(out), optional newest,
real, intent(out), optional oldest,
character(*), intent(out), optional conventions,
character(*), intent(out), optional gt_version,
type(gt_history_axis), dimension(:), optional, pointer axes,
type(gt_history_varinfo), dimension(:), optional, pointer varinfo )

Definition at line 233 of file historyinquire.f90.

238 !
239 !== GT_HISTORY 型変数への問い合わせ
240 !
241 ! HistoryCreate で *history* を指定しなかった場合はこちらの
242 ! サブルーチンで問い合わせを行います。
243 ! *history* には必ず "<tt>default</tt>" という文字列を与えてください。
244 !
245 ! *HistoryInquire* は 2 つのサブルーチンの総称名です。
246 ! 各引数の情報に関しては下記のサブルーチンを参照してください。
247 !
248 !--
249 ! HistoryInquire1 と同機能だが, こちらは
250 ! history に "default" という文字列を代入することで,
251 ! デフォルトで出力されるファイル名 (HistoryCreate で
252 ! history 引数を与えない場合のファイル名) が返る.
253 !++
254 !
256 use gtool_history_internal, only: default
257 use gtool_history_generic, only: historyinquire
258 use dc_error, only: storeerror, dc_noerr, nf90_einval
259 use dc_trace, only: beginsub, endsub, dbgmessage
260 use dc_types, only: string, token, dp
261 implicit none
262 character(*), intent(in):: history
263 logical, intent(out), optional :: err
264 character(*), intent(out), optional:: file, title, source, institution
265 real,intent(out), optional:: origin, interval, newest, oldest
266 character(*), intent(out), optional:: conventions, gt_version
267 character(*), pointer, optional:: dims(:) ! (out)
268 integer,pointer, optional:: dimsizes(:) ! (out)
269 character(*), pointer, optional:: longnames(:) ! (out)
270 character(*), pointer, optional:: units(:) ! (out)
271 character(*), pointer, optional:: xtypes(:) ! (out)
272 type(GT_HISTORY_AXIS), pointer, optional :: axes(:) ! (out)
273 type(GT_HISTORY_VARINFO), pointer, optional :: varinfo(:) ! (out)
274 integer:: stat
275 character(STRING):: cause_c
276 character(*), parameter:: subname = "HistoryInquire2"
277 continue
278 call beginsub(subname, "history=%c", c1=trim(history))
279 stat = dc_noerr
280 cause_c = ''
281 if (trim(history) /= 'default') then
282 stat = nf90_einval
283 cause_c = 'history="' // trim(history) // '"'
284 goto 999
285 end if
286 call historyinquire(default, err, file, title, source, &
287 & dims, dimsizes, longnames, units, xtypes, &
288 & institution, origin, interval, newest, oldest, &
289 & conventions, gt_version, &
290 & axes, varinfo )
291999 continue
292 call storeerror(stat, subname, cause_c=cause_c)
293 call endsub(subname)

References dc_error::dc_noerr, gtool_history_types::default, dc_types::dp, dc_error::storeerror(), dc_types::string, and dc_types::token.

Here is the call graph for this function:

◆ historyinquire3()

subroutine historyinquire3 ( type(gt_history), intent(in) history,
logical, intent(out), optional err,
character(*), intent(out), optional file,
character(*), intent(out), optional title,
character(*), intent(out), optional source,
character(*), dimension(:), optional, pointer dims,
integer, dimension(:), optional, pointer dimsizes,
character(*), dimension(:), optional, pointer longnames,
character(*), dimension(:), optional, pointer units,
character(*), dimension(:), optional, pointer xtypes,
character(*), intent(out), optional institution,
real, intent(out), optional origin,
real, intent(out), optional interval,
real, intent(out), optional newest,
real, intent(out), optional oldest,
character(*), intent(out), optional conventions,
character(*), intent(out), optional gt_version,
type(gt_history_axis), dimension(:), optional, pointer axes,
type(gt_history_varinfo), dimension(:), optional, pointer varinfo )

Definition at line 298 of file historyinquire.f90.

303 !
304 ! 使用方法は HistoryInquire と同様です.
305 !
306 ! Usage is same as "HistoryInquire".
307 !
308 !--
309 ! 総称名 Inquire として提供するためのサブルーチンです.
310 ! 機能は HistoryInquire1 と同じです.
311 !++
312 !
314 use gtool_history_generic, only: historyinquire
315 use dc_trace, only: beginsub, endsub, dbgmessage
316 implicit none
317 type(GT_HISTORY), intent(in):: history
318 logical, intent(out), optional :: err
319 character(*), intent(out), optional:: file, title, source, institution
320 real,intent(out), optional:: origin, interval
321 real,intent(out), optional:: newest ! 最新の時刻
322 real,intent(out), optional:: oldest ! 最初の時刻
323 character(*), intent(out), optional:: conventions, gt_version
324 character(*), pointer, optional:: dims(:) ! (out)
325 integer,pointer, optional:: dimsizes(:) ! (out)
326 character(*), pointer, optional:: longnames(:) ! (out)
327 character(*), pointer, optional:: units(:) ! (out)
328 character(*), pointer, optional:: xtypes(:) ! (out)
329 type(GT_HISTORY_AXIS), pointer, optional :: axes(:) ! (out)
330 type(GT_HISTORY_VARINFO), pointer, optional :: varinfo(:) ! (out)
331
332 character(*), parameter:: subname = "HistoryInquire3"
333 continue
334 call beginsub(subname)
335 call historyinquire(history, err, file, title, source, &
336 & dims, dimsizes, longnames, units, xtypes, &
337 & institution, origin, interval, newest, oldest, &
338 & conventions, gt_version, &
339 & axes, varinfo )
340 call endsub(subname)

◆ historyinquire4()

subroutine historyinquire4 ( character(*), intent(in) history,
logical, intent(out), optional err,
character(*), intent(out), optional file,
character(*), intent(out), optional title,
character(*), intent(out), optional source,
character(*), dimension(:), optional, pointer dims,
integer, dimension(:), optional, pointer dimsizes,
character(*), dimension(:), optional, pointer longnames,
character(*), dimension(:), optional, pointer units,
character(*), dimension(:), optional, pointer xtypes,
character(*), intent(out), optional institution,
real, intent(out), optional origin,
real, intent(out), optional interval,
real, intent(out), optional newest,
real, intent(out), optional oldest,
character(*), intent(out), optional conventions,
character(*), intent(out), optional gt_version,
type(gt_history_axis), dimension(:), optional, pointer axes,
type(gt_history_varinfo), dimension(:), optional, pointer varinfo )

Definition at line 345 of file historyinquire.f90.

350 !
351 ! 使用方法は HistoryInquire と同様です.
352 !
353 ! Usage is same as "HistoryInquire".
354 !
355 !--
356 ! 総称名 Inquire として提供するためのサブルーチンです.
357 ! 機能は HistoryInquire2 と同じです.
358 !++
359 !
361 use gtool_history_generic, only: historyinquire
362 use dc_trace, only: beginsub, endsub, dbgmessage
363 implicit none
364 character(*), intent(in):: history
365 logical, intent(out), optional :: err
366 character(*), intent(out), optional:: file, title, source, institution
367 real,intent(out), optional:: origin, interval, newest, oldest
368 character(*), intent(out), optional:: conventions, gt_version
369 character(*), pointer, optional:: dims(:) ! (out)
370 integer,pointer, optional:: dimsizes(:) ! (out)
371 character(*), pointer, optional:: longnames(:) ! (out)
372 character(*), pointer, optional:: units(:) ! (out)
373 character(*), pointer, optional:: xtypes(:) ! (out)
374 type(GT_HISTORY_AXIS), pointer, optional :: axes(:) ! (out)
375 type(GT_HISTORY_VARINFO), pointer, optional :: varinfo(:) ! (out)
376 character(*), parameter:: subname = "HistoryInquire4"
377 continue
378 call beginsub(subname)
379 call historyinquire(history, err, file, title, source, &
380 & dims, dimsizes, longnames, units, xtypes, &
381 & institution, origin, interval, newest, oldest, &
382 & conventions, gt_version, &
383 & axes, varinfo )
384 call endsub(subname)