23 use gtool_history_internal,
only:
default
24 use gtdata_generic,
only: create, inquire, open, slice, close
26 use dc_present,
only: present_and_false
28 use dc_date,
only: dcdifftimecreate
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
72 type(
gt_variable),
pointer:: vwork(:) =>null(), dimvars(:) =>null()
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()
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)
181 call open(copyfrom, copyurl)
184 call inquire(hst % dimvars(1), url=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
subroutine historycopyvariable1(file, varname, history, overwrite)