gtvarcreated.f90
Go to the documentation of this file.
1 !
2 != 独立変数 (次元) の作成
3 !
4 ! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
5 ! Version:: $Id: gtvarcreated.f90,v 1.5 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 
13 subroutine gtvarcreated(var, url, length, xtype, long_name, overwrite, err)
14  !
15  !== 独立変数 (次元) の作成
16  !
17  ! 場所 *url* に長さ *length* の自分自身を次元とする変数つまり GT_VARIABLE 型
18  ! の実体を作成し、それを第 1 引数 *var* にセットします。
19  ! Open されたものと同様、第1引数 *var* は後で必ず
20  ! Close されなければなりません。
21  !
22  ! 長さ length == 0 を指定するとその変数は可変長次元となります。
23  ! 型 *xtype* を省略すると "+float+" と
24  ! みなされます。既存変数があるとき失敗しますが、
25  ! overwrite == .true. であれば上書きして続行します。
26  ! (まだ *overwrite* の動作は保障されていません)。
27  ! dims の省略は 0 次元変数の設定を意味します。
28  !
29  ! 次元変数は自動生成されることが多いため、変数名部を欠く指定に対しては
30  ! 名前を自動生成します。
31  !
32  ! 作成の際にエラーが生じた場合、メッセージを出力してプログラムは
33  ! 強制終了します。*err* を与えてある場合にはこの引数に .true.
34  ! が返り、プログラムは終了しません。
35  !
36  use dc_string, only: strhead
37  use gtdata_types, only: gt_variable
38  use gtdata_generic, only: gtdatatmpnam
41  use gtdata_memory_generic, only: create
43  use gtdata_internal_map, only: map_create, vtb_class_memory, vtb_class_netcdf, gtvar_dump
44  use dc_url, only: urlsplit, urlmerge
45  use dc_trace, only: beginsub, endsub, dbgmessage
46  use dc_error, only: storeerror, dc_noerr
47  use dc_types, only: string
48  implicit none
49  type(gt_variable), intent(out):: var
50  character(len = *), intent(in):: url
51  integer, intent(in):: length
52  character(len = *), intent(in), optional:: xtype
53  character(len = *), intent(in), optional:: long_name
54  logical, intent(in), optional:: overwrite
55  logical, intent(out), optional:: err
56  character(len = STRING):: fnam, vnam, new_url, data_class
57  type(gd_nc_variable):: gdnc
58  type(gd_mem_variable):: mem
59  integer :: stat, cause_i
60  character(len = *), parameter:: subname = "GTVarCreateD"
61  character(len = *), parameter:: version = &
62  & '$Name: $' // &
63  & '$Id: gtvarcreated.f90,v 1.5 2009-05-25 09:55:58 morikawa Exp $'
64 continue
65  call beginsub(subname, 'url=<%c> length=%d', &
66  & c1=trim(url), i=(/length/), version=version)
67  stat = dc_noerr
68  cause_i = 0
69  data_class = ''
70  if (strhead(url, "memory:")) then
71  call create(mem, url, length, xtype, long_name, overwrite, err)
72  call map_create(var, vtb_class_memory, mem%id, 1, (/length/), stat)
73  if (stat /= dc_noerr) then
74  cause_i = 1
75  goto 999
76  end if
77  call gtvar_dump(var)
78  data_class = 'memory'
79  goto 999
80  endif
81  ! URL の検査
82  call urlsplit(url, file=fnam, var=vnam)
83  if (vnam == "") then
84  call gtdatatmpnam(file=fnam, base="dim", result=new_url)
85  else
86  new_url = url
87  endif
88  ! gdnc 形式が選択される場合は
89  call create(var=gdnc, url=new_url, length=length, xtype=xtype, &
90  & overwrite=overwrite, err=err)
91  if (present(long_name)) then
92  call put_attr(gdnc, 'long_name', long_name, err=err)
93  endif
94  call map_create(var, vtb_class_netcdf, gdnc%id, 1, (/length/), stat)
95  if (stat /= dc_noerr) then
96  cause_i = 1
97  goto 999
98  end if
99  call gtvar_dump(var)
100  data_class = 'netcdf'
101 999 continue
102  call storeerror(stat, subname, err, cause_i=cause_i)
103  call endsub(subname, 'class=%c mapid=%d', &
104  & c1=trim(data_class), i=(/var%mapid/) )
105 end subroutine gtvarcreated
subroutine gtvarcreated(var, url, length, xtype, long_name, overwrite, err)
subroutine, public map_create(var, class, cid, ndims, allcount, stat)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition: dc_error.f90:830
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
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, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:446
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition: dc_types.f90:118