Loading...
Searching...
No Matches
gdncvarsearch.f90
Go to the documentation of this file.
1! Copyright (C) GFD Dennou Club, 2000. All rights reserved.
2
3! あるファイル名 urlBase に依存する変数すべてを取得するにはまず
4! var_search(iter, urlbase) を呼び出してから無限ループの中で
5! attr_next(iter, url, end) を呼び出す。url がひとつ
6! ひとつの属性名を与える。end が真にになったとき、
7! すべての属性を探索し終えたことになる。
8
9subroutine gdncvarsearchinit(iter, urlBase)
10 use dc_types, only: string
12 use dc_url, only: urlsplit
14 use dc_trace, only: beginsub, endsub, dbgmessage
15 implicit none
16 type(gd_nc_variable_search), intent(out):: iter
17 character(len = *), intent(in):: urlBase
18 character(len = string):: file
19 logical:: err
20 character(len = *), parameter:: subname = 'GDNcVarSearchInit'
21
22 call beginsub(subname, 'urlbase=<%c>', c1=trim(urlbase))
23 call urlsplit(trim(urlbase), file=file)
24 call gdncfileopen(iter%fileid, filename=file, writable=.false., err=err)
25 if (err) iter%fileid = -1
26 iter%varid = 0
27 iter%dimid = 0
28 call endsub(subname, 'file=%d', i=(/iter%fileid/))
29end subroutine gdncvarsearchinit
30
31subroutine gdncvarsearchnext(iter, url, end)
33 use dc_types, only: string
34 use netcdf, only: nf90_max_name, nf90_noerr, &
35 & nf90_inquire_variable, nf90_inquire_dimension, nf90_inq_varid
36 use dc_url, only: urlmerge
38 use dc_trace, only: beginsub, endsub, dbgmessage
39 implicit none
40 type(gd_nc_variable_search), intent(inout):: iter
41 character(len = *), intent(out):: url
42 logical, intent(out):: end
43 character(len = string):: filename
44 character(len = NF90_MAX_NAME):: varname
45 integer:: stat, varid_tmp
46 character(len = *), parameter:: subname = 'GDNcVarSearchNext'
47continue
48 call beginsub(subname)
49 if (iter%fileid <= 0) then
50 end = .TRUE.
51 url = ''
52 call endsub(subname, "bad file %d", i=(/iter%fileid/))
53 return
54 endif
55 if (iter%varid >= 0) then
56 iter%varid = iter%varid + 1
57 stat = nf90_inquire_variable(iter%fileid, iter%varid, name = varname)
58 if (stat == nf90_noerr) goto 900
59 iter%varid = -1
60 endif
61 do while (iter%dimid >= 0)
62 iter%dimid = iter%dimid + 1
63 ! --- 指定番号の次元がなければエラー ---
64 stat = nf90_inquire_dimension(iter%fileid, iter%dimid, name = varname)
65 if (stat /= nf90_noerr) exit
66 ! --- 指定番号の次元と同名の変数があれば却下、次番号へ ---
67 stat = nf90_inq_varid(iter%fileid, varname, varid_tmp)
68 if (stat /= nf90_noerr) goto 900
69 enddo
70 end = .TRUE.
71 url = ""
72 call gdncfileclose(iter%fileid)
73 iter%dimid = -1
74 call endsub(subname, "end file %d", i=(/iter%fileid/))
75 return
76
77900 continue
78 call gdncfileinquire(iter%fileid, name=filename)
79 url = urlmerge(file=trim(filename), var=trim(varname))
80 end = .FALSE.
81 call endsub(subname, "file=%d url=<%c>", &
82 & i=(/iter%fileid/), c1=trim(url))
83 return
84end subroutine gdncvarsearchnext
subroutine gdncfileclose(fileid, err)
subroutine gdncvarsearchnext(iter, url, end)
subroutine gdncvarsearchinit(iter, urlbase)
種別型パラメタを提供します。
Definition dc_types.f90:49
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition dc_types.f90:118