58 character(len = *),
intent(in):: file
62 character(len = *),
intent(in):: varname
80 type(
gt_history),
intent(inout),
optional,
target:: history
88 logical,
intent(in),
optional:: overwrite
97 type(
gt_variable),
pointer:: vwork(:) =>null(), dimvars(:) =>null()
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()
110 integer:: nvars, numdims, i
111 logical:: growable, overwrite_required
112 character(*),
parameter:: subname =
"HistoryCopyVariable1"
114 call beginsub(subname,
'file=%c varname=%c', &
115 & c1=trim(file), c2=trim(varname))
117 if (
present(history))
then
124 if (
associated(hst % vars))
then
125 nvars =
size(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)
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 )
149 var_avr_data_work => hst % var_avr_data
150 nullify(hst % var_avr_data)
151 allocate(hst % var_avr_data(nvars + 1))
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
158 deallocate( var_avr_data_work )
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 )
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 )
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 )
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 )
186 allocate(hst % vars(1), hst % count(2), hst % growable_indices(1))
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))
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
202 hst % var_avr_prevtime(nvars) = hst % var_avr_baseint(nvars)
206 call open(copyfrom, copyurl)
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)
217 call inquire(hst % vars(nvars), alldims=numdims)
218 allocate(dimvars(numdims))
222 call open(var=dimvars(i), source_var=hst % vars(nvars), &
223 & dimord=i, count_compact=.true.)
225 call inquire(var=dimvars(i), growable=growable)
227 hst % growable_indices(nvars) = i
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)
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
subroutine historycopyvariable1(file, varname, history, overwrite)