場所 url に次元 dims を持った変数つまり GT_VARIABLE 型 の実体を作成し、それを第 1 引数 var にセットします。 Open されたものと同様、第1引数 var は後で必ず Close されなければなりません。
型 xtype を省略すると "float" とみなされます。 既存変数があるとき失敗しますが、overwrite == .true. であれば 上書きして続行します。(まだ overwrite の動作は保障されていません)。 dims の省略は 0 次元変数の設定を意味します。
作成の際にエラーが生じた場合、メッセージを出力してプログラムは 強制終了します。err を与えてある場合にはこの引数に .true. が返り、プログラムは終了しません。
79 implicit none
80 type(GT_VARIABLE), intent(out):: var
81 character(len = *), intent(in):: url
82 type(GT_VARIABLE), intent(in), optional:: dims(:)
83 character(len = *), intent(in), optional:: xtype
84 character(len = *), intent(in), optional:: long_name
85 logical, intent(in), optional:: overwrite
86 logical, intent(out), optional:: err
87 type(GD_NC_VARIABLE), allocatable:: gdnc_dims(:)
88 type(GD_NC_VARIABLE):: gdnc
89 integer, allocatable:: allcount(:)
90 integer:: i, ndims, stat, cause_i
91 character(len = TOKEN):: myxtype
92 character(len = *), parameter:: subname = "GTVarCreate"
93 character(len = *), parameter:: version = &
94 & '$Name: $' // &
95 & '$Id: gtvarcreate.f90,v 1.4 2009-05-25 09:55:58 morikawa Exp $'
96continue
98 ndims = 0
99 cause_i = 0
100 if (present(dims)) ndims = size(dims)
101 call beginsub(subname,
'url=%c ndims=%d', c1=trim(url), i=(/ndims/), &
102 & version=version)
103
104 if (present(err)) err = .false.
105 if (present(xtype)) then
106 myxtype = xtype
107 else
108 myxtype = "float"
109 endif
110 if (present(dims)) then
111 allocate(gdnc_dims(ndims), allcount(ndims))
112 do, i = 1, ndims
113 call var_class(dims(i), cid=gdnc_dims(i)%id)
114 call dbgmessage(
'dim=%d mapid=%d -> cid=%d', i=(/i, dims(i)%mapid, gdnc_dims(i)%id/))
115 call inquire(gdnc_dims(i), dimlen=allcount(i))
116 enddo
117 call create(var=gdnc, url=url, dims=gdnc_dims, xtype=myxtype, &
118 & overwrite=overwrite, err=err)
119 else
120 ndims = 0
121 allocate(gdnc_dims(1), allcount(1))
122 call create(var=gdnc, url=url, dims=gdnc_dims(1:0), &
123 & xtype=myxtype, overwrite=overwrite, err=err)
124 endif
125 call map_create(var, vtb_class_netcdf, gdnc%id, ndims, allcount, stat)
127 cause_i = ndims
128 goto 999
129 end if
130 deallocate(gdnc_dims, allcount)
131 if (present(long_name)) then
132 call put_attr(gdnc,
'long_name', long_name, err=err)
133 endif
135 call dbgmessage(
'var%%mapid=%d', i=(/var % mapid/))
136999 continue
137 call storeerror(stat, subname, err, cause_i=cause_i)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public dc_noerr
エラー等を保持
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
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 token
単語やキーワードを保持する文字型変数の種別型パラメタ
subroutine, public var_class(var, class, cid)
subroutine, public map_create(var, class, cid, ndims, allcount, stat)
subroutine gtvar_dump(var)