13 subroutine gdncvarcreate(var, url, xtype, dims, overwrite, err)
28 use dc_string
, only: strieq
32 use dc_trace
, only: beginsub, endsub, dbgmessage
35 & nf90_noerr, nf90_float, nf90_double, nf90_int, nf90_char, nf90_ebaddim, nf90_def_var
40 character(len = *),
intent(in):: url
41 character(len = *),
intent(in):: xtype
43 logical,
intent(in),
optional:: overwrite
44 logical,
intent(out),
optional:: err
47 character(len = string):: filename, varname
48 integer,
allocatable:: dimids(:)
49 integer:: stat, nvdims, i
53 character(len = *),
parameter:: subnam =
"GDNcVarCreate" 56 if (
present(overwrite)) clobber = overwrite
58 call dbgmessage(
'url=%c', c1=trim(url))
59 call dbgmessage(
'xtype=%c', c1=trim(xtype))
60 call dbgmessage(
'dims=(/%*d/)', i=(/dims(:)%id/), n=(/
size(dims)/))
61 call dbgmessage(
'ovwr=%y', l=(/clobber/))
64 call urlsplit(url, filename, varname)
65 call gdncfileopen(ent%fileid, filename, stat=stat, writable=.true., &
67 if (stat /= nf90_noerr)
goto 999
71 allocate(dimids(max(1, nvdims)), stat=stat)
78 if (stat /= nf90_noerr)
then 82 if (ent%fileid /= ent_dim%fileid)
then 86 if (ent_dim%dimid <= 0)
then 90 dimids(i) = ent_dim%dimid
96 if (strieq(xtype,
"double") .or. strieq(xtype,
"DOUBLEPRECISION"))
then 97 nc_xtype = nf90_double
99 if (strieq(xtype,
"int") .or. strieq(xtype,
"INTEGER"))
then 102 if (strieq(xtype,
"char") .or. strieq(xtype,
"CHARACTER"))
then 108 if (stat /= nf90_noerr)
goto 999
109 if ( nvdims == 0 )
then 110 stat = nf90_def_var(ent%fileid, name = trim(varname), &
111 & xtype = nc_xtype, varid=ent%varid)
113 stat = nf90_def_var(ent%fileid, name = trim(varname), &
114 & xtype = nc_xtype, dimids = dimids, varid=ent%varid)
116 if (stat /= nf90_noerr)
goto 999
122 if (
allocated(dimids))
deallocate(dimids)
123 if (stat /= nf90_noerr) var % id = -1
124 call storeerror(stat, subnam, err, cause_c=url)
125 call endsub(subnam,
'stat=%d, var.id=%d', i=(/stat, var % id/))
integer function, public vtable_lookup(var, entry)
integer function gdncfiledefinemode(fileid)
integer, parameter, public gt_edimnodim
integer, parameter, public gt_enomem
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public gt_eotherfile
integer function, public vtable_add(var, entry)
subroutine gdncfileopen(fileid, filename, writable, overwrite, stat, err)
Provides kind type parameter values.
integer, parameter, public gt_edimmultidim
subroutine gdncvarcreate(var, url, xtype, dims, overwrite, err)
integer, parameter, public string
Character length for string.