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

Go to the source code of this file.

Functions/Subroutines

subroutine gdncvarcreated (var, url, xtype, length, overwrite, err)

Function/Subroutine Documentation

◆ gdncvarcreated()

subroutine gdncvarcreated ( type(gd_nc_variable), intent(out) var,
character(len = *), intent(in) url,
character(len = *), intent(in) xtype,
integer, intent(in) length,
logical, intent(in), optional overwrite,
logical, intent(out), optional err )

Definition at line 13 of file gdncvarcreated.f90.

14 !
15 !== 次元変数作成
16 !
17 ! 変数 URL *url* に次元変数を作成します.
18 ! 次元変数の長さを *length* に与えます.
19 ! 返される引数 *var* には変数 ID などの情報が格納されます.
20 !
21 ! *overwrite* に .true. を設定すると上書き可能なモードになります.
22 ! デフォルトは上書き不可です.
23 ! *err* を与える場合, 次元変数生成時にエラーが生じても
24 ! プログラムを終了せず, *err* に .false. が返ります.
25 !
28 use dc_string, only: strieq
29 use dc_types, only: string
30 use dc_url, only: urlsplit
31 use dc_trace, only: beginsub, endsub, dbgmessage
32 use netcdf, only: nf90_noerr, nf90_float, nf90_int, nf90_double, nf90_char, &
33 & nf90_def_var, nf90_def_dim
35 use dc_error, only: storeerror, gt_enomem
36 implicit none
37 type(GD_NC_VARIABLE), intent(out):: var
38 character(len = *), intent(in):: url
39 character(len = *), intent(in):: xtype
40 integer, intent(in):: length
41 logical, intent(in), optional:: overwrite
42 logical, intent(out), optional:: err
43 type(GD_NC_VARIABLE_SEARCH):: ent
44 character(len = string):: filename, varname, cause_c
45 integer:: stat
46 integer:: nc_xtype
47 character(len = *), parameter:: subname = "GDNcVarCreateD"
48continue
49 call beginsub(subname, 'url=<%c>, xtype=<%c>, length=<%d>', &
50 & c1=trim(url), c2=trim(xtype), i=(/length/))
51 cause_c = trim(url)
52 !
53 ! --- ファイルを用意 ---
54 call urlsplit(url, file=filename, var=varname)
55 call gdncfileopen(ent%fileid, filename, stat=stat, writable=.true., &
56 & overwrite=overwrite)
57 if (stat /= nf90_noerr) goto 999
58 stat = gdncfiledefinemode(ent%fileid)
59 if (stat /= nf90_noerr) goto 999
60 !
61 ! --- 型の決定 ---
62 nc_xtype = nf90_float
63 if (strieq(xtype, "double") .or. strieq(xtype, "DOUBLEPRECISION")) then
64 nc_xtype = nf90_double
65 endif
66 if (strieq(xtype, "int") .or. strieq(xtype, "INTEGER")) then
67 nc_xtype = nf90_int
68 endif
69 if (strieq(xtype, "char") .or. strieq(xtype, "CHARACTER")) then
70 nc_xtype = nf90_char
71 endif
72 !
73 ! --- 次元変数の作成 ---
74 stat = nf90_def_dim(ent%fileid, trim(varname), len=length, dimid=ent%dimid)
75 if (stat /= nf90_noerr) goto 999
76 stat = nf90_def_var(ent%fileid, trim(varname), &
77 & xtype=nc_xtype, dimids=(/ent%dimid/), varid=ent%varid)
78 if (stat /= nf90_noerr) goto 999
79 !
80 stat = vtable_add(var, ent)
81 if (stat /= nf90_noerr) goto 999
82
83999 continue
84 call storeerror(stat, subname, err, cause_c=cause_c)
85 if (stat /= nf90_noerr) var = gd_nc_variable(-1)
86 call endsub(subname, 'stat=%d', i=(/stat/))
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:830
integer, parameter, public gt_enomem
Definition dc_error.f90:534
種別型パラメタを提供します。
Definition dc_types.f90:49
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition dc_types.f90:118
integer function, public vtable_add(var, entry)

References dc_error::gt_enomem, dc_error::storeerror(), dc_types::string, and gtdata_netcdf_internal::vtable_add().

Here is the call graph for this function: