gtool4 データ内の変数の定義を行います。 他の gtool4 データのファイル名とその中の変数名を指定することで、 自動的にその変数の構造や属性をコピーして変数定義します。 このサブルーチンを用いる前に、 HistoryCreate による初期設定が必要です。 構造や属性を手動で設定する場合には HistoryAddVariable を用いて下さい。
57 implicit none
58 character(len = *), intent(in):: file
59
60
61
62 character(len = *), intent(in):: varname
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 type(GT_HISTORY), intent(inout), optional, target:: history
81
82
83
84
85
86
87
88 logical, intent(in), optional:: overwrite
89
90
91
92
93
94
95
96 type(GT_HISTORY), pointer:: hst =>null()
97 type(GT_VARIABLE), pointer:: vwork(:) =>null(), dimvars(:) =>null()
98 type(GT_VARIABLE):: copyfrom
99 character(STRING):: fullname, url, copyurl
100 integer, pointer:: count_work(:) =>null()
101 integer, pointer:: var_avr_count_work(:) =>null()
102 integer:: var_avr_length
103 logical, pointer:: var_avr_firstput_work(:) =>null()
104 real(DP), pointer:: var_avr_coefsum_work(:) =>null()
105 real(DP), pointer:: var_avr_baseint_work(:) =>null()
106 real(DP), pointer:: var_avr_prevtime_work(:) =>null()
107
108
109 type(GT_HISTORY_AVRDATA), pointer:: var_avr_data_work(:) =>null()
110 integer:: nvars, numdims, i
111 logical:: growable, overwrite_required
112 character(*), parameter:: subname = "HistoryCopyVariable1"
113 continue
114 call beginsub(subname,
'file=%c varname=%c', &
115 & c1=trim(file), c2=trim(varname))
116
117 if (present(history)) then
118 hst => history
119 else
121 endif
122
123
124 if (associated(hst % vars)) then
125 nvars = size(hst % vars(:))
126 vwork => hst % vars
127 count_work => hst % count
128 nullify(hst % vars, hst % count)
129 allocate(hst % vars(nvars + 1), hst % count(nvars + 1))
130 hst % vars(1:nvars) = vwork(1:nvars)
131 hst % count(1:nvars) = count_work(1:nvars)
132 deallocate(vwork, count_work)
133 count_work => hst % growable_indices
134 nullify(hst % growable_indices)
135 allocate(hst % growable_indices(nvars + 1))
136 hst % growable_indices(1:nvars) = count_work(1:nvars)
137 deallocate(count_work)
138
139
140
141
142
143 var_avr_count_work => hst % var_avr_count
144 nullify( hst % var_avr_count )
145 allocate( hst % var_avr_count(nvars + 1) )
146 hst % var_avr_count(1:nvars) = var_avr_count_work(1:nvars)
147 deallocate( var_avr_count_work )
148
149 var_avr_data_work => hst % var_avr_data
150 nullify(hst % var_avr_data)
151 allocate(hst % var_avr_data(nvars + 1))
152 do i = 1, nvars
153 hst % var_avr_data(i) % length = var_avr_data_work(i) % length
154 allocate(hst % var_avr_data(i) % &
155 & a_dataavr(var_avr_data_work(i) % length))
156 hst % var_avr_data(i) % a_DataAvr = var_avr_data_work(i) % a_DataAvr
157 end do
158 deallocate( var_avr_data_work )
159
160 var_avr_firstput_work => hst % var_avr_firstput
161 nullify( hst % var_avr_firstput )
162 allocate( hst % var_avr_firstput(nvars + 1) )
163 hst % var_avr_firstput(1:nvars) = var_avr_firstput_work(1:nvars)
164 deallocate( var_avr_firstput_work )
165
166 var_avr_coefsum_work => hst % var_avr_coefsum
167 nullify( hst % var_avr_coefsum )
168 allocate( hst % var_avr_coefsum(nvars + 1) )
169 hst % var_avr_coefsum(1:nvars) = var_avr_coefsum_work(1:nvars)
170 deallocate( var_avr_coefsum_work )
171
172 var_avr_baseint_work => hst % var_avr_baseint
173 nullify( hst % var_avr_baseint )
174 allocate( hst % var_avr_baseint(nvars + 1) )
175 hst % var_avr_baseint(1:nvars) = var_avr_baseint_work(1:nvars)
176 deallocate( var_avr_baseint_work )
177
178 var_avr_prevtime_work => hst % var_avr_prevtime
179 nullify( hst % var_avr_prevtime )
180 allocate( hst % var_avr_prevtime(nvars + 1) )
181 hst % var_avr_prevtime(1:nvars) = var_avr_prevtime_work(1:nvars)
182 deallocate( var_avr_prevtime_work )
183 else
184
185
186 allocate(hst % vars(1), hst % count(2), hst % growable_indices(1))
187 hst % count(2) = 0
188 allocate(hst % var_avr_count(1), hst % var_avr_data(1))
189 allocate(hst % var_avr_firstput(1), hst % var_avr_coefsum(1))
190 allocate(hst % var_avr_baseint(1), hst % var_avr_prevtime(1))
191 endif
192 nvars = size(hst % vars(:))
193 hst % growable_indices(nvars) = 0
194 hst % count(nvars) = 0
195 hst % var_avr_count(nvars) = -1
196 hst % var_avr_firstput = .true.
197 hst % var_avr_coefsum(nvars) = 0.0_dp
198 hst % var_avr_baseint(nvars) = 0.0_dp
199
200
201
202 hst % var_avr_prevtime(nvars) = hst % var_avr_baseint(nvars)
203
204
206 call open(copyfrom, copyurl)
207
208
209 call inquire(hst % dimvars(1), url=url)
211 overwrite_required = .true.
213 call create(hst % vars(nvars), trim(fullname), copyfrom, &
214 & copyvalue=.false., overwrite=overwrite_required)
215
216
217 call inquire(hst % vars(nvars), alldims=numdims)
218 allocate(dimvars(numdims))
219
220
221 do, i = 1, numdims
222 call open(var=dimvars(i), source_var=hst % vars(nvars), &
223 & dimord=i, count_compact=.true.)
224
225 call inquire(var=dimvars(i), growable=growable)
226 if (growable) then
227 hst % growable_indices(nvars) = i
228 endif
229 enddo
230
231
232 if (hst % growable_indices(nvars) /= 0) then
233 call slice(hst % vars(nvars), hst % growable_indices(nvars), &
234 & start=1, count=1, stride=1)
235 endif
236
237 deallocate(dimvars)
238
239 call inquire( hst % vars(nvars),
size = var_avr_length )
240 allocate( hst % var_avr_data(nvars) % a_DataAvr(var_avr_length) )
241 hst % var_avr_data(nvars) % length = var_avr_length
242 hst % var_avr_data(nvars) % a_DataAvr = 0.0_dp
243
logical function, public present_and_false(arg)
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
integer, parameter, public dp
倍精度実数型変数
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
character, parameter, public gt_atmark
type(gt_history), target, save, public default