Loading...
Searching...
No Matches
gtvarcreate.f90
Go to the documentation of this file.
1!
2!= 従属変数の作成
3!
4! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
5! Version:: $Id: gtvarcreate.f90,v 1.4 2009-05-25 09:55:58 morikawa Exp $
6! Tag Name:: $Name: $
7! Copyright:: Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved.
8! License:: See COPYRIGHT[link:../../COPYRIGHT]
9!
10! 以下のサブルーチン, 関数は gtdata_generic から提供されます。
11!
12
13subroutine gtvarcreate(var, url, dims, xtype, long_name, overwrite, err)
14 !
15 !== 従属変数の作成
16 !
17 ! 場所 *url* に次元 *dims* を持った変数つまり GT_VARIABLE 型
18 ! の実体を作成し、それを第 1 引数 *var* にセットします。
19 ! Open されたものと同様、第1引数 *var* は後で必ず
20 ! Close されなければなりません。
21 !
22 ! 型 *xtype* を省略すると "+float+" と
23 ! みなされます。既存変数があるとき失敗しますが、
24 ! overwrite == .true. であれば上書きして続行します。
25 ! (まだ *overwrite* の動作は保障されていません)。
26 ! dims の省略は 0 次元変数の設定を意味します。
27 !
28 ! 作成の際にエラーが生じた場合、メッセージを出力してプログラムは
29 ! 強制終了します。*err* を与えてある場合にはこの引数に .true.
30 ! が返り、プログラムは終了しません。
31 !
32 !
33 use gtdata_types, only: gt_variable
34 use gtdata_internal_map, only: var_class, vtb_class_netcdf, &
38 use dc_string, only: strhead
40 use dc_types, only: token
41 use dc_trace, only: beginsub, endsub, dbgmessage
42 implicit none
43 type(gt_variable), intent(out):: var
44 character(len = *), intent(in):: url
45 type(gt_variable), intent(in), optional:: dims(:)
46 character(len = *), intent(in), optional:: xtype
47 character(len = *), intent(in), optional:: long_name
48 logical, intent(in), optional:: overwrite
49 logical, intent(out), optional:: err
50 type(gd_nc_variable), allocatable:: gdnc_dims(:)
51 type(gd_nc_variable):: gdnc
52 integer, allocatable:: allcount(:)
53 integer:: i, ndims, stat, cause_i
54 character(len = TOKEN):: myxtype
55 character(len = *), parameter:: subname = "GTVarCreate"
56 character(len = *), parameter:: version = &
57 & '$Name: $' // &
58 & '$Id: gtvarcreate.f90,v 1.4 2009-05-25 09:55:58 morikawa Exp $'
59continue
60 stat = dc_noerr
61 ndims = 0
62 cause_i = 0
63 if (present(dims)) ndims = size(dims)
64 call beginsub(subname, 'url=%c ndims=%d', c1=trim(url), i=(/ndims/), &
65 & version=version)
66 ! gdnc 変数の作成
67 if (present(err)) err = .false.
68 if (present(xtype)) then
69 myxtype = xtype
70 else
71 myxtype = "float"
72 endif
73 if (present(dims)) then
74 allocate(gdnc_dims(ndims), allcount(ndims))
75 do, i = 1, ndims
76 call var_class(dims(i), cid=gdnc_dims(i)%id)
77 call dbgmessage('dim=%d mapid=%d -> cid=%d', i=(/i, dims(i)%mapid, gdnc_dims(i)%id/))
78 call inquire(gdnc_dims(i), dimlen=allcount(i))
79 enddo
80 call create(var=gdnc, url=url, dims=gdnc_dims, xtype=myxtype, &
81 & overwrite=overwrite, err=err)
82 else
83 ndims = 0
84 allocate(gdnc_dims(1), allcount(1)) ! dummy
85 call create(var=gdnc, url=url, dims=gdnc_dims(1:0), &
86 & xtype=myxtype, overwrite=overwrite, err=err)
87 endif
88 call map_create(var, vtb_class_netcdf, gdnc%id, ndims, allcount, stat)
89 if (stat /= dc_noerr) then
90 cause_i = ndims
91 goto 999
92 end if
93 deallocate(gdnc_dims, allcount)
94 if (present(long_name)) then
95 call put_attr(gdnc, 'long_name', long_name, err=err)
96 endif
97 call gtvar_dump(var)
98 call dbgmessage('var%%mapid=%d', i=(/var % mapid/))
99999 continue
100 call storeerror(stat, subname, err, cause_i=cause_i)
101 call endsub(subname)
102end subroutine gtvarcreate
subroutine gtvarcreate(var, url, dims, xtype, long_name, overwrite, err)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:830
integer, parameter, public gt_efake
Definition dc_error.f90:523
integer, parameter, public dc_noerr
Definition dc_error.f90:509
種別型パラメタを提供します。
Definition dc_types.f90:49
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition dc_types.f90:109
subroutine, public var_class(var, class, cid)
subroutine, public map_create(var, class, cid, ndims, allcount, stat)