22 use gtool_history_types, only: gt_history, gt_history_axis, gt_history_varinfo, gt_history_attr, gt_history_avrdata
23 use gtool_history_internal
, only: default
26 use dc_present
, only: present_and_false
31 use dc_trace
, only: beginsub, endsub, dbgmessage
33 character(len = *),
intent(in):: file
37 character(len = *),
intent(in):: varname
55 type(gt_history),
intent(inout),
optional,
target:: history
63 logical,
intent(in),
optional:: overwrite
71 type(gt_history),
pointer:: hst =>null()
72 type(gt_variable),
pointer:: vwork(:) =>null(), dimvars(:) =>null()
73 type(gt_variable):: copyfrom
74 character(STRING):: fullname, url, copyurl
75 integer,
pointer:: count_work(:) =>null()
76 integer,
pointer:: var_avr_count_work(:) =>null()
77 integer:: var_avr_length
78 logical,
pointer:: var_avr_firstput_work(:) =>null()
79 real(DP),
pointer:: var_avr_coefsum_work(:) =>null()
80 real(DP),
pointer:: var_avr_baseint_work(:) =>null()
81 real(DP),
pointer:: var_avr_prevtime_work(:) =>null()
84 type(gt_history_avrdata),
pointer:: var_avr_data_work(:) =>null()
85 integer:: nvars, numdims, i
86 logical:: growable, overwrite_required
87 character(*),
parameter:: subname =
"HistoryCopyVariable1" 89 call beginsub(subname,
'file=%c varname=%c', &
90 & c1=trim(file), c2=trim(varname))
92 if (
present(history))
then 99 if (
associated(hst % vars))
then 100 nvars =
size(hst % vars(:))
102 count_work => hst % count
103 nullify(hst % vars, hst % count)
104 allocate(hst % vars(nvars + 1), hst % count(nvars + 1))
105 hst % vars(1:nvars) = vwork(1:nvars)
106 hst % count(1:nvars) = count_work(1:nvars)
107 deallocate(vwork, count_work)
108 count_work => hst % growable_indices
109 nullify(hst % growable_indices)
110 allocate(hst % growable_indices(nvars + 1))
111 hst % growable_indices(1:nvars) = count_work(1:nvars)
112 deallocate(count_work)
118 var_avr_count_work => hst % var_avr_count
119 nullify( hst % var_avr_count )
120 allocate( hst % var_avr_count(nvars + 1) )
121 hst % var_avr_count(1:nvars) = var_avr_count_work(1:nvars)
122 deallocate( var_avr_count_work )
124 var_avr_data_work => hst % var_avr_data
125 nullify(hst % var_avr_data)
126 allocate(hst % var_avr_data(nvars + 1))
128 hst % var_avr_data(i) % length = var_avr_data_work(i) % length
129 allocate(hst % var_avr_data(i) % &
130 & a_dataavr(var_avr_data_work(i) % length))
131 hst % var_avr_data(i) % a_DataAvr = var_avr_data_work(i) % a_DataAvr
133 deallocate( var_avr_data_work )
135 var_avr_firstput_work => hst % var_avr_firstput
136 nullify( hst % var_avr_firstput )
137 allocate( hst % var_avr_firstput(nvars + 1) )
138 hst % var_avr_firstput(1:nvars) = var_avr_firstput_work(1:nvars)
139 deallocate( var_avr_firstput_work )
141 var_avr_coefsum_work => hst % var_avr_coefsum
142 nullify( hst % var_avr_coefsum )
143 allocate( hst % var_avr_coefsum(nvars + 1) )
144 hst % var_avr_coefsum(1:nvars) = var_avr_coefsum_work(1:nvars)
145 deallocate( var_avr_coefsum_work )
147 var_avr_baseint_work => hst % var_avr_baseint
148 nullify( hst % var_avr_baseint )
149 allocate( hst % var_avr_baseint(nvars + 1) )
150 hst % var_avr_baseint(1:nvars) = var_avr_baseint_work(1:nvars)
151 deallocate( var_avr_baseint_work )
153 var_avr_prevtime_work => hst % var_avr_prevtime
154 nullify( hst % var_avr_prevtime )
155 allocate( hst % var_avr_prevtime(nvars + 1) )
156 hst % var_avr_prevtime(1:nvars) = var_avr_prevtime_work(1:nvars)
157 deallocate( var_avr_prevtime_work )
161 allocate(hst % vars(1), hst % count(2), hst % growable_indices(1))
163 allocate(hst % var_avr_count(1), hst % var_avr_data(1))
164 allocate(hst % var_avr_firstput(1), hst % var_avr_coefsum(1))
165 allocate(hst % var_avr_baseint(1), hst % var_avr_prevtime(1))
167 nvars =
size(hst % vars(:))
168 hst % growable_indices(nvars) = 0
169 hst % count(nvars) = 0
170 hst % var_avr_count(nvars) = -1
171 hst % var_avr_firstput = .true.
172 hst % var_avr_coefsum(nvars) = 0.0_dp
173 hst % var_avr_baseint(nvars) = 0.0_dp
177 hst % var_avr_prevtime(nvars) = hst % var_avr_baseint(nvars)
180 copyurl = urlmerge(file, varname)
181 call open(copyfrom, copyurl)
184 call inquire(hst % dimvars(1), url=url)
185 fullname = urlresolve((
gt_atmark // trim(varname)), trim(url))
186 overwrite_required = .true.
187 if (present_and_false(overwrite)) overwrite_required = .false.
188 call create(hst % vars(nvars), trim(fullname), copyfrom, &
189 & copyvalue=.false., overwrite=overwrite_required)
192 call inquire(hst % vars(nvars), alldims=numdims)
193 allocate(dimvars(numdims))
197 call open(var=dimvars(i), source_var=hst % vars(nvars), &
198 & dimord=i, count_compact=.true.)
200 call inquire(var=dimvars(i), growable=growable)
202 hst % growable_indices(nvars) = i
207 if (hst % growable_indices(nvars) /= 0)
then 208 call slice(hst % vars(nvars), hst % growable_indices(nvars), &
209 & start=1, count=1, stride=1)
214 call inquire( hst % vars(nvars),
size = var_avr_length )
215 allocate( hst % var_avr_data(nvars) % a_DataAvr(var_avr_length) )
216 hst % var_avr_data(nvars) % length = var_avr_length
217 hst % var_avr_data(nvars) % a_DataAvr = 0.0_dp
integer, parameter, public token
Character length for word, token.
character, parameter, public gt_atmark
integer, parameter, public dp
Double Precision Real number.
Provides kind type parameter values.
integer, parameter, public string
Character length for string.