historyvarinfocopy.f90
Go to the documentation of this file.
1 != GT_HISTORY_VARINFO のコピー
2 != Copy GT_HISTORY_VARINFO
3 !
4 ! Authors:: Yasuhiro MORIKAWA
5 ! Version:: $Id: historyvarinfocopy.f90,v 1.2 2009-05-25 09:45:19 morikawa Exp $
6 ! Tag Name:: $Name: $
7 ! Copyright:: Copyright (C) GFD Dennou Club, 2004-2009. All rights reserved.
8 ! License:: See COPYRIGHT[link:../../../COPYRIGHT]
9 !
10  subroutine historyvarinfocopy1(varinfo_dest, varinfo_src, err, &
11  & name, dims, longname, units, xtype )
12  !
13  !== GT_HISTORY_VARINFO 型変数コピー
14  !
15  ! GT_HISTORY_VARINFO 型の変数 *varinfo_src* を
16  ! *varinfo_dest* にコピーします。
17  ! *varinfo_src* は HistoryVarinfoCreate によって初期設定されている必要が
18  ! あります。
19  ! さらに属性を付加する場合には HistoryVarinfoAddAttr
20  ! を用いてください。
21  !
22  ! *err* を与えておくと、コピーの際何らかの不具合が生じても
23  ! 終了せずに err が真になって返ります。
24  !
25  ! *err* 以降の引数は、コピーの際に上書きする値です。
26  !
29  use dc_trace, only: beginsub, endsub, dbgmessage
30  use dc_present,only: present_select
31  use dc_string, only: joinchar
33  use dc_types, only: string, token
34  implicit none
35  type(gt_history_varinfo),intent(out):: varinfo_dest
36  type(gt_history_varinfo),intent(in):: varinfo_src
37  logical, intent(out), optional:: err
38  character(*) , intent(in), optional:: name ! 次元変数名
39  character(*) , intent(in), optional, target:: dims(:) ! 依存する次元
40  character(*) , intent(in), optional:: longname ! 次元変数の記述的名称
41  character(*) , intent(in), optional:: units ! 次元変数の単位
42  character(*) , intent(in), optional:: xtype ! 次元変数の型
43 
44  integer:: i, stat
45  character(STRING):: cause_c
46  character(TOKEN), pointer :: srcdims(:) =>null() ! 依存する次元
47  character(*), parameter:: subname = "HistoryVarinfoCopy1"
48  continue
49  call beginsub(subname)
50  stat = dc_noerr
51  cause_c = ''
52 
53  if ( .not. varinfo_src % initialized ) then
54  stat = dc_enotinit
55  cause_c = 'GT_HISTORY_VARINFO'
56  goto 999
57  end if
58 
59  if ( varinfo_dest % initialized ) then
60  stat = dc_ealreadyinit
61  cause_c = 'GT_HISTORY_VARINFO'
62  goto 999
63  end if
64 
65  varinfo_dest % name = present_select('', varinfo_src % name, name)
66  varinfo_dest % longname = present_select('', varinfo_src % longname, longname)
67  varinfo_dest % units = present_select('', varinfo_src % units, units)
68  varinfo_dest % xtype = present_select('', varinfo_src % xtype, xtype)
69 
70  if (present(dims)) then
71  srcdims => dims
72  else
73  srcdims => varinfo_src % dims
74  endif
75 
76  call dbgmessage('srcdims=<%c>', &
77  & c1=trim(joinchar(srcdims)))
78 
79  allocate( varinfo_dest % dims( size( srcdims ) ) )
80  do i = 1, size(srcdims)
81  varinfo_dest % dims(i) = srcdims(i)
82  end do
83 
84  call dbgmessage('varinfo_dest %% dims=<%c>', &
85  & c1=trim(joinchar(varinfo_dest % dims)))
86 
87  if (associated( varinfo_src % attrs ) ) then
88  allocate( varinfo_dest % attrs( size( varinfo_src % attrs) ) )
89  call copy_attrs( from = varinfo_src % attrs, &
90  & to = varinfo_dest % attrs, err = err)
91  end if
92 
93  varinfo_dest % initialized = .true.
94 999 continue
95  call storeerror( stat, subname, err, cause_c )
96  call endsub(subname)
97  end subroutine historyvarinfocopy1
98 
99  subroutine historyvarinfocopy2(varinfo_dest, varinfo_src, err, &
100  & name, dims, longname, units, xtype )
101  !
102  ! 使用方法は HistoryVarinfoCopy と同様です.
103  !
104  ! Usage is same as "HistoryVarinfoCopy".
105  !
106  !--
107  ! 総称名 Copy として提供するための関数です.
108  ! 機能は HistoryVarinfoCopy1 と同じです.
109  !++
112  use dc_trace, only: beginsub, endsub, dbgmessage
113  implicit none
114  type(gt_history_varinfo),intent(out):: varinfo_dest
115  type(gt_history_varinfo),intent(in):: varinfo_src
116  logical, intent(out), optional:: err
117  character(*) , intent(in), optional:: name ! 次元変数名
118  character(*) , intent(in), optional, target:: dims(:) ! 依存する次元
119  character(*) , intent(in), optional:: longname ! 次元変数の記述的名称
120  character(*) , intent(in), optional:: units ! 次元変数の単位
121  character(*) , intent(in), optional:: xtype ! 次元変数の型
122 
123  character(*), parameter:: subname = "HistoryVarinfoCopy2"
124  continue
125  call beginsub(subname)
126  call historyvarinfocopy(varinfo_dest, varinfo_src, err, &
127  & name, dims, longname, units, xtype )
128  call endsub(subname)
129  end subroutine historyvarinfocopy2
type(gt_history), target, save, public default
integer, parameter, public dc_enotinit
Definition: dc_error.f90:557
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition: dc_types.f90:109
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 historyvarinfocopy2(varinfo_dest, varinfo_src, err, name, dims, longname, units, xtype)
character(string) function, public joinchar(carray, expr)
Definition: dc_string.f90:861
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 historyvarinfocopy1(varinfo_dest, varinfo_src, err, name, dims, longname, units, xtype)
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:446
integer, parameter, public dc_ealreadyinit
Definition: dc_error.f90:558
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition: dc_types.f90:118