52 type(
gt_history),
intent(in),
target,
optional:: history
53 integer,
intent(in),
optional:: unit
59 character(*),
intent(in),
optional:: indent
63 logical,
intent(out),
optional:: err
84 character(STRING):: cause_c
87 character(STRING):: indent_str
89 character(STRING):: file, title, source, institution
90 character(STRING):: conventions, gt_version
91 character(TOKEN),
pointer:: dims(:) =>null()
92 integer,
pointer:: dimsizes(:) =>null()
93 character(STRING),
pointer:: longnames(:) =>null()
94 character(TOKEN),
pointer:: units(:) =>null()
95 character(TOKEN),
pointer:: xtypes(:) =>null()
97 real(DP):: origin, interval, newest, oldest
98 character(*),
parameter:: subname =
'HistoryPutLine'
108 if (
present(unit) )
then
116 if (
present(indent) )
then
117 if ( len(indent) /= 0 )
then
118 indent_len = len(indent)
119 indent_str(1:indent_len) = indent
123 if (
present(history))
then
133 if ( hst % initialized )
then
135 & indent_str(1:indent_len) // &
136 &
'#<GT_HISTORY:: @initialized=%y', &
137 & l = (/hst % initialized/) )
141 & file = file, title = title, &
142 & source = source, institution = institution, &
143 & dims = dims, dimsizes = dimsizes, &
144 & longnames = longnames, &
145 & units = units, xtypes = xtypes, &
146 & conventions = conventions, &
147 & gt_version = gt_version )
150 & indent_str(1:indent_len) // &
151 &
' @file=%c @title=%c', &
152 & c1 = trim(file), c2 = trim(title) )
155 & indent_str(1:indent_len) // &
156 &
' @source=%c @institution=%c', &
157 & c1 = trim(source), c2 = trim(institution) )
161 & indent_str(1:indent_len) // &
162 &
' @dims=%c @dimsizes=%*d', &
163 & c1 = trim(
joinchar(dims,
',') ), &
164 & i = dimsizes, n = (/max/) )
165 deallocate( dims, dimsizes )
168 & indent_str(1:indent_len) // &
169 &
' @longnames=%c', &
170 & c1 = trim(
joinchar(longnames,
',') ) )
171 deallocate( longnames )
174 & indent_str(1:indent_len) // &
175 &
' @units=%c @xtypes=%c', &
176 & c1 = trim(
joinchar(units,
',') ), &
177 & c2 = trim(
joinchar(xtypes,
',') ) )
178 deallocate( units, xtypes )
181 & indent_str(1:indent_len) // &
182 &
' @conventions=%c @gt_version=%c', &
183 & c1 = trim(conventions), c2 = trim(gt_version) )
186 & indent_str(1:indent_len) // &
187 &
' @unlimited_index=%d', &
188 & i = (/hst % unlimited_index/) )
190 max =
size( hst % dim_value_written )
192 & indent_str(1:indent_len) // &
193 &
' @dim_value_written=%*y', &
194 & l = hst % dim_value_written, n = (/max/) )
196 origin = real(hst % origin, kind=kind(origin))
197 interval = real(hst % interval, kind=kind(interval))
198 newest = real(hst % newest, kind=kind(newest))
199 oldest = real(hst % oldest, kind=kind(oldest))
207 & indent_str(1:indent_len) // &
208 &
' @origin=%r @interval=%r @newest=%r @oldest=%r', &
209 & d = (/origin, interval, newest, oldest/) )
211 if (
associated( hst % growable_indices ) )
then
212 max =
size( hst % growable_indices )
214 & indent_str(1:indent_len) // &
215 &
' @growable_indices=%*d', &
216 & i = hst % growable_indices, n = (/max/) )
219 & indent_str(1:indent_len) // &
220 &
' @growable_indices=<null>' )
223 if (
associated( hst % count ) )
then
224 max =
size( hst % count )
226 & indent_str(1:indent_len) // &
228 & i = hst % count, n = (/max/) )
231 & indent_str(1:indent_len) // &
235 if (
associated( hst % dimvars ) )
then
237 & indent_str(1:indent_len) // &
239 max =
size( hst % dimvars )
241 call gtputline( hst % dimvars(i), out_unit, &
242 & indent_str(1:indent_len) //
' ', err )
246 & indent_str(1:indent_len) // &
247 &
' @dimvars=<null>' )
250 if (
associated( hst % vars ) )
then
252 & indent_str(1:indent_len) // &
254 max =
size( hst % vars )
256 call gtputline( hst % vars(i), out_unit, &
257 & indent_str(1:indent_len) //
' ', err )
261 & indent_str(1:indent_len) // &
265 if (
associated( hst % var_avr_count ) )
then
266 max =
size( hst % var_avr_count )
268 & indent_str(1:indent_len) // &
269 &
' @var_avr_count=%*d', &
270 & i = hst % var_avr_count, n = (/max/) )
273 & indent_str(1:indent_len) // &
274 &
' @var_avr_count=<null>' )
277 if (
associated( hst % var_avr_firstput ) )
then
278 max =
size( hst % var_avr_firstput )
280 & indent_str(1:indent_len) // &
281 &
' @var_avr_firstput=%*b', &
282 & l = hst % var_avr_firstput, n = (/max/) )
285 & indent_str(1:indent_len) // &
286 &
' @var_avr_firstput=<null>' )
289 if (
associated( hst % var_avr_coefsum ) )
then
290 max =
size( hst % var_avr_coefsum )
292 & indent_str(1:indent_len) // &
293 &
' @var_avr_coefsum=%*f', &
294 & d = hst % var_avr_coefsum, n = (/max/) )
297 & indent_str(1:indent_len) // &
298 &
' @var_avr_coefsum=<null>' )
302 & indent_str(1:indent_len) // &
303 &
' @time_bnds=%*f, @time_bnds_output_count=%d', &
304 & i = (/hst % time_bnds_output_count/), &
305 & d = hst % time_bnds, &
306 & n = (/
size(hst % time_bnds) /) )
308 if (
associated( hst % var_avr_data ) )
then
310 & indent_str(1:indent_len) // &
311 &
' @var_avr_data=' )
312 max =
size( hst % var_avr_data )
315 & indent_str(1:indent_len) // &
316 &
' #<GT_HISTORY_AVRDATA:: @length=%d', &
317 & i = (/hst % var_avr_data(i) % length/) )
318 call strputline( hst % var_avr_data(i) % a_DataAvr, unit = out_unit, &
319 & lbounds = lbound(hst % var_avr_data(i) % a_DataAvr), &
320 & ubounds = ubound(hst % var_avr_data(i) % a_DataAvr), &
321 & indent = indent_str(1:indent_len) // &
326 & indent_str(1:indent_len) // &
327 &
' @var_avr_data=<null>' )
331 & indent_str(1:indent_len) // &
335 & indent_str(1:indent_len) // &
336 &
'#<GT_HISTORY:: @initialized=%y>', &
337 & l = (/hst % initialized/) )
344 call storeerror( stat, subname, err, cause_c )
subroutine historyputline(history, unit, indent, err)