48 use netcdf, only: nf90_noerr, nf90_max_name, nf90_enotvar, nf90_ebaddim, &
49 & nf90_inq_varid, nf90_inq_dimid, nf90_inquire_variable, nf90_inquire
50 implicit none
51 type(GD_NC_VARIABLE), intent(out):: var
52 character(len = *), intent(in):: url
53 logical, intent(in), optional:: writable
54 logical, intent(out), optional:: err
55 character(len = STRING):: filename, varname
56 character(len = NF90_MAX_NAME):: dimname
57 integer:: stat, nvars, i
58 type(GD_NC_VARIABLE_SEARCH):: e
59 character(len = *), parameter:: subname = 'GDNcVarOpen'
60continue
62 call urlsplit(url, file=filename, var=varname)
63 if (filename == "") filename = "gtool.nc"
64 call gdncfileopen(e%fileid, trim(filename), stat=stat, writable=writable, err=err )
65 if (stat /= 0) goto 999
66
67
68
69 if (varname /= '') then
70 e%varid = 0
71 stat = nf90_inq_varid(e%fileid, trim(varname), e%varid)
72 if (stat == nf90_enotvar) then
73 e%varid = 0
74 stat = nf90_noerr
75 endif
76 else
77
78 stat = nf90_inquire(e%fileid, nvariables = nvars)
79 if (stat /= 0) goto 999
80 e%varid = 1
81 do, i = 1, nvars
82 stat = nf90_inquire_variable(e%fileid, i, name = dimname)
83 if (stat /= nf90_noerr) goto 999
84 stat = nf90_inq_dimid(e%fileid, dimname, e%dimid)
85 if (stat == nf90_noerr) cycle
86 if (stat /= nf90_ebaddim) goto 999
87 e%varid = i
88 stat = nf90_noerr
89 exit
90 enddo
91 endif
92 if (stat /= nf90_noerr) goto 999
93
94
95
96 stat = nf90_inq_dimid(e%fileid, trim(varname), e%dimid)
97 if (stat /= nf90_noerr) then
98 if (e%varid <= 0) goto 999
99 e%dimid = 0
100 endif
101
103 if (stat /= nf90_noerr) goto 999
104 call endsub(subname,
'an=%d file=%d var=%d', i=(/var%id, e%fileid, e%varid/))
106 return
107
108
109
110999 continue
112 call endsub(subname,
'an=%d err', i=(/var%id/))
113 call storeerror(stat, subname, err, cause_c=url)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
integer function, public vtable_add(var, entry)