gtvarputattrchar.f90
Go to the documentation of this file.
1 !
2 != 属性の付加
3 !
4 ! Authors:: Eizi TOYODA, Yasuhiro MORIKAWA
5 ! Version:: $Id: gtvarputattrchar.f90,v 1.6 2009-05-25 09:55:57 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 から gtdata_generic#Put_Attr
11 ! として提供されます。
12 
13 subroutine gtvarputattrlogical(var, name, value, err)
14  !
15  !== 属性の付加
16  !
17  ! 変数 *var* に, 属性名 *name* とその値 *value* を付加します。
18  !
19  ! *Put_Attr* は複数のサブルーチンの総称名なので、
20  ! *value* には様々な型の変数を与えることが可能です。
21  ! 以下のサブルーチンを参照してください。
22  !
23  ! 引数に *xtype* を持つものは、その引数に型を指定することで、
24  ! 引数 *value* には文字型を与えても、
25  ! 整数型、実数型 (単精度、倍精度) の値を付加することが可能です。
26  ! 下記のサブルーチンを参照ください。
27  !
28  ! エラーが発生した場合、引数 *err* が与えられる場合は *err* が
29  ! <tt>.true.</tt> となって返ります。
30  ! 引数 *err* を与えなければプログラムは停止します。
31  !
32  use gtdata_types, only: gt_variable
33  use gtdata_internal_map, only: var_class, vtb_class_netcdf, vtb_class_memory
38  use dc_string, only: tochar
39  implicit none
40  type(gt_variable), intent(inout) :: var
41  character(len = *), intent(in) :: name
42  logical, intent(in) :: value
43  logical, intent(out), optional:: err
44  integer:: class, cid
45 continue
46  call var_class(var, class, cid)
47  if (class == vtb_class_netcdf) then
48  if (value) then
49  call put_attr(gd_nc_variable(cid), name, "true", err=err)
50  else
51  call put_attr(gd_nc_variable(cid), name, "false", err=err)
52  endif
53  else if (class == vtb_class_memory) then
54  if (value) then
55  call put_attr(gd_mem_variable(cid), name, "true")
56  else
57  call put_attr(gd_mem_variable(cid), name, "false")
58  endif
59  if (present(err)) err = .false.
60  endif
61 end subroutine gtvarputattrlogical
62 
63 !subroutine GTVarPutAttrString(var, name, value, err)
64 ! !--
65 ! ! VSTRING 型を引き取り上記 put_attr を呼び出す。下位層のことは関知しない
66 ! !++
67 ! use gtdata_types, only: GT_VARIABLE
68 ! use dc_string, only: VSTRING, vchar, operator(==), len
69 ! use gtdata_generic, only: put_attr
70 ! implicit none
71 ! type(GT_VARIABLE), intent(inout):: var
72 ! character(len = *), intent(in):: name
73 ! type(VSTRING), intent(in):: value
74 ! logical, intent(out), optional:: err
75 !continue
76 ! call put_attr(var, name, vchar(value, len(value)), err=err)
77 !end subroutine GTVarPutAttrString
78 
79 subroutine gtvarputattrint(var, name, value, err)
80  !
81  ! まずは上記の Put_Attr
82  ! (または GTVarPutAttrChar および GTVarPutAttrReal)
83  ! を参照してください。
84  !
85  ! *value* は配列を受け取るので、スカラーを書き出すには
86  ! Fortran の配列構成子 <tt>(/ ... /)</tt> を使ってください。
87  ! たとえば、スカラー a から長さ 1 の配列 <tt>(/a/)</tt>
88  ! を作ることができます。
89  !
90  use gtdata_types, only: gt_variable
91  use gtdata_internal_map, only: var_class, vtb_class_netcdf, vtb_class_memory
96  use dc_string, only: tochar
97  type(gt_variable), intent(inout):: var
98  character(len = *), intent(in):: name
99  integer, intent(in):: value(:)
100  logical, intent(out), optional:: err
101  integer:: class, cid
102 continue
103  call var_class(var, class, cid)
104  if (class == vtb_class_netcdf) then
105  call put_attr(gd_nc_variable(cid), name, value, err)
106  else if (class == vtb_class_memory) then
107  call put_attr(gd_mem_variable(cid), name, trim(tochar(value)))
108  if (present(err)) err = .false.
109  endif
110 end subroutine gtvarputattrint
111 
112 subroutine gtvarputattrreal(var, name, value, err)
113  !
114  ! まずは上記の Put_Attr
115  ! (または GTVarPutAttrChar および GTVarPutAttrReal)
116  ! を参照してください。
117  !
118  use gtdata_types, only: gt_variable
119  use gtdata_internal_map, only: var_class, vtb_class_netcdf, vtb_class_memory
124  use dc_string, only: tochar
125  implicit none
126  type(gt_variable), intent(inout):: var
127  character(len = *), intent(in):: name
128  real, intent(in):: value(:)
129  logical, intent(out), optional:: err
130  integer:: class, cid
131 continue
132  call var_class(var, class, cid)
133  if (class == vtb_class_netcdf) then
134  call put_attr(gd_nc_variable(cid), name, value, err)
135  else if (class == vtb_class_memory) then
136  call put_attr(gd_mem_variable(cid), name, trim(tochar(value)))
137  if (present(err)) err = .false.
138  endif
139 end subroutine gtvarputattrreal
140 
141 subroutine gtvarputattrdouble(var, name, value, err)
142  !
143  ! まずは上記の Put_Attr
144  ! (または GTVarPutAttrChar および GTVarPutAttrReal)
145  ! を参照してください。
146  !
147  use gtdata_types, only: gt_variable
148  use gtdata_internal_map, only: var_class, vtb_class_netcdf, vtb_class_memory
153  use dc_string, only: tochar
154  use dc_types, only: dp
155  implicit none
156  type(gt_variable), intent(inout):: var
157  character(len = *), intent(in):: name
158  real(DP), intent(in):: value(:)
159  logical, intent(out), optional:: err
160  integer:: class, cid
161 continue
162  call var_class(var, class, cid)
163  if (class == vtb_class_netcdf) then
164  call put_attr(gd_nc_variable(cid), name, value, err)
165  else if (class == vtb_class_memory) then
166  call put_attr(gd_mem_variable(cid), name, trim(tochar(value)))
167  if (present(err)) err = .false.
168  endif
169 end subroutine gtvarputattrdouble
170 
171 subroutine gtvarputattrchar(var, name, value, xtype, err)
172  !
173  ! まずは上記の Put_Attr
174  ! (または GTVarPutAttrChar)
175  ! を参照してください。
176  !
177  ! *xtype* に型を指定することで、引数 *value* には文字型を与えても、
178  ! 整数型、実数型 (単精度、倍精度) の値を付加することが可能です。
179  !
180  ! *xtype* には与える文字列として、以下のものが有効です。
181  ! これら以外の場合は文字型の値が与えられます。
182  !
183  ! 整数型 :: "INTEGER", "integer", "int"
184  ! 実数型 (単精度) :: "REAL", "real", "float"
185  ! 実数型 (倍精度) :: "DOUBLEPRECISION", "DOUBLE", "double"
186  !--
187  ! gtdata/gtdata_netcdf/gdncputattrchar.f90#GDNcVarPutAttrChar 参照
188  !++
189  !
190  use gtdata_types, only: gt_variable
191  use gtdata_internal_map, only: var_class, vtb_class_netcdf, vtb_class_memory
196  use dc_trace, only: beginsub, endsub
197  implicit none
198  type(gt_variable), intent(inout):: var
199  character(len = *), intent(in):: name
200  character(len = *), intent(in):: value
201  character(len = *), intent(in), optional:: xtype
202  logical, intent(out), optional:: err
203  integer:: class, cid
204  character(*), parameter:: subnam = "gtvarputattrchar"
205 continue
206  call beginsub(subnam, "%d:%c = %c", i=(/var%mapid/), c1=trim(name), c2=trim(value))
207  call var_class(var, class, cid)
208  if (class == vtb_class_netcdf) then
209  call put_attr(gd_nc_variable(cid), name, value, xtype, err)
210  else if (class == vtb_class_memory) then
211  call put_attr(gd_mem_variable(cid), name, value)
212  if (present(err)) err = .false.
213  endif
214  call endsub(subnam)
215 end subroutine gtvarputattrchar
subroutine gtvarputattrdouble(var, name, value, err)
subroutine gtvarputattrreal(var, name, value, err)
integer, parameter, public dp
倍精度実数型変数
Definition: dc_types.f90:83
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
Definition: dc_trace.f90:351
文字型変数の操作.
Definition: dc_string.f90:24
種別型パラメタを提供します。
Definition: dc_types.f90:49
subroutine gtvarputattrint(var, name, value, err)
subroutine gtvarputattrchar(var, name, value, xtype, err)
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:446
subroutine, public var_class(var, class, cid)
subroutine gtvarputattrlogical(var, name, value, err)