Skip to content

Commit 0dfa9a9

Browse files
author
Davide Cesari
committed
prefer seconds for timedelta to avoid problems with long timeranges
1 parent 9516e96 commit 0dfa9a9

7 files changed

Lines changed: 22 additions & 22 deletions

bin/grib_api_csv.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ SUBROUTINE grib_api_csv_export(v7d, vg6d, iun, header)
142142
DO l = 1, SIZE(vg6d%time)
143143
CALL getval(vg6d%time(l), isodate=csv_time, simpledate=csv_simpletime)
144144
DO k = 1, SIZE(vg6d%timerange)
145-
veriftime = vg6d%time(l) + timedelta_new(msec=vg6d%timerange(k)%p1*1000)
145+
veriftime = vg6d%time(l) + timedelta_new(sec=vg6d%timerange(k)%p1)
146146
CALL getval(veriftime, simpledate=csv_simplevertime)
147147
DO j = 1, SIZE(vg6d%level)
148148
! TODO handle coupling of variables on a single csv record (e.g. U/V)

vol7d/stat_proc_engine.F90

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ SUBROUTINE recompute_stat_proc_agg_common(itime, itimerange, stat_proc, tri, &
6868
! the shortest interval available is used, the longest could be used
6969
! obtaining more data but worse
7070
lstart = itime(1) - &
71-
timedelta_new(msec=MINVAL(itimerange(:)%p2, mask=tr_mask(:))*1000)
71+
timedelta_new(sec=MINVAL(itimerange(:)%p2, mask=tr_mask(:)))
7272

7373
lstart = lstart-(MOD(lstart, step)) ! round to step, check the - sign!!!
7474
ENDIF
@@ -102,7 +102,7 @@ SUBROUTINE recompute_stat_proc_agg_common(itime, itimerange, stat_proc, tri, &
102102

103103
nval = nval + 1
104104
map_tr(nval) = j ! mappatura per ottimizzare il successivo ciclo sui timerange
105-
dt1 = timedelta_new(msec=itimerange(j)%p2*1000)
105+
dt1 = timedelta_new(sec=itimerange(j)%p2)
106106

107107
! calcolo il numero teorico di intervalli in ingresso che
108108
! contribuiscono all'intervallo corrente in uscita
@@ -497,10 +497,10 @@ SUBROUTINE recompute_stat_proc_agg_common_exp(itime, itimerange, stat_proc, tri,
497497
minp2 = MINVAL(itimerange(:)%p2, mask=mask_timerange)
498498
minp1mp2 = MINVAL(itimerange(:)%p1 - itimerange(:)%p2, mask=mask_timerange)
499499
IF (time_definition == 0) THEN ! reference time
500-
lstart = lstart + timedelta_new(msec=1000*minp1mp2)
501-
lend = lend + timedelta_new(msec=1000*maxp1)
500+
lstart = lstart + timedelta_new(sec=minp1mp2)
501+
lend = lend + timedelta_new(sec=maxp1)
502502
ELSE ! verification time
503-
lstart = lstart - timedelta_new(msec=1000*minp2)
503+
lstart = lstart - timedelta_new(sec=minp2)
504504
lstart = lstart - (MOD(lstart, step)) ! round to step, check the - sign!!!
505505
ENDIF
506506
#ifdef DEBUG
@@ -617,8 +617,8 @@ SUBROUTINE time_timerange_get_period(time, timerange, time_definition, &
617617
TYPE(timedelta) :: p1, p2
618618

619619

620-
p1 = timedelta_new(msec=timerange%p1*1000) ! end of period
621-
p2 = timedelta_new(msec=timerange%p2*1000) ! length of period
620+
p1 = timedelta_new(sec=timerange%p1) ! end of period
621+
p2 = timedelta_new(sec=timerange%p2) ! length of period
622622

623623
IF (time == datetime_miss .OR. .NOT.c_e(timerange%p1) .OR. .NOT.c_e(timerange%p2) .OR. &
624624
(timerange%p1 > 0 .AND. timerange%p1 < timerange%p2) .OR. &

vol7d/vol7d_dballe_class.F03

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,7 @@ subroutine dba2v7d(this,metaanddatav,time_definition, set_network)
711711
do i =1,size(metaanddatav)
712712
metaanddatav(i)%metadata%datetime%datetime = &
713713
metaanddatav(i)%metadata%datetime%datetime - &
714-
timedelta_new(msec=metaanddatav(i)%metadata%timerange%vol7d_timerange%p1*1000)
714+
timedelta_new(sec=metaanddatav(i)%metadata%timerange%vol7d_timerange%p1)
715715
end do
716716
end if
717717

vol7d/vol7d_dballeold_class.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,7 @@ SUBROUTINE vol7d_dballe_importvvns_dba(this, var, network, coordmin, coordmax, t
894894

895895
! take in account time_definition
896896
if (this%vol7d%time_definition == 0) buffer(i)%time = buffer(i)%time - &
897-
timedelta_new(msec=buffer(i)%timerange%p1*1000)
897+
timedelta_new(sec=buffer(i)%timerange%p1)
898898

899899
end do
900900

@@ -3202,7 +3202,7 @@ SUBROUTINE vol7d_dballe_importvvns_file(this, var, network, coordmin, coordmax,
32023202

32033203
! take in account time_definition
32043204
IF (this%vol7d%time_definition == 0) buffer(nd)%time = buffer(nd)%time - &
3205-
timedelta_new(msec=buffer(nd)%timerange%p1*1000)
3205+
timedelta_new(sec=buffer(nd)%timerange%p1)
32063206

32073207
! put ana in bufferana becouse we can have no station data but we need ana
32083208
!todo ; we have to do the same for network but I am tired ....

vol7d/vol7d_serialize_dballe_class.F03

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ SUBROUTINE vol7d_serialize_export(this, metaanddatal)
509509
if (this%v7d%time_definition == 0) then
510510
metaanddata%metadata%datetime%datetime = &
511511
metaanddata%metadata%datetime%datetime + &
512-
timedelta_new(msec=metaanddata%metadata%timerange%vol7d_timerange%p1*1000)
512+
timedelta_new(sec=metaanddata%metadata%timerange%vol7d_timerange%p1)
513513
end if
514514

515515
!! set to missing

volgrid6d/gridinfo_class.F90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ SUBROUTINE time_import_gribapi(this,gaid)
641641
CALL grib_get(gaid,'lengthOfTimeRange',p2g)
642642
CALL grib_get(gaid,'indicatorOfUnitForTimeRange',unit)
643643
CALL g2_interval_to_second(unit, p2g, p2)
644-
this = this + timedelta_new(msec=p2*1000)
644+
this = this + timedelta_new(sec=p2)
645645
ELSE IF ((status == GRIB_SUCCESS .AND. ttimeincr == 2) .OR. &
646646
status /= GRIB_SUCCESS) THEN ! usual case
647647
! do nothing
@@ -679,7 +679,7 @@ SUBROUTINE time_export_gribapi(this, gaid, timerange)
679679
IF (timerange%p1 >= timerange%p2) THEN ! forecast-like
680680
CALL code_referencetime(this)
681681
ELSE IF (timerange%p1 == 0) THEN ! analysis-like
682-
CALL code_referencetime(this-timedelta_new(msec=timerange%p2*1000))
682+
CALL code_referencetime(this-timedelta_new(sec=timerange%p2))
683683
ELSE ! bad timerange
684684
CALL l4f_log( L4F_ERROR, 'Timerange with 0>p1>p2 cannot be exported in grib2')
685685
CALL raise_error()
@@ -906,7 +906,7 @@ SUBROUTINE timerange_export_gribapi(this, gaid, reftime)
906906
CALL timerange_v7d_to_g2(this%p1-this%p2,p1,unit)
907907
CALL grib_set(gaid,'indicatorOfUnitOfTimeRange',unit)
908908
CALL grib_set(gaid,'forecastTime',p1)
909-
CALL code_endoftimeinterval(reftime+timedelta_new(msec=this%p1*1000))
909+
CALL code_endoftimeinterval(reftime+timedelta_new(sec=this%p1))
910910
! Successive times processed have same start time of forecast,
911911
! forecast time is incremented
912912
CALL grib_set(gaid,'typeOfStatisticalProcessing',this%timerange)

volgrid6d/volgrid6d_class.F90

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -871,7 +871,7 @@ SUBROUTINE import_from_gridinfo(this, gridinfo, force, dup_mode, clone)
871871

872872
correctedtime = gridinfo%time
873873
IF (this%time_definition == 1) correctedtime = correctedtime + &
874-
timedelta_new(msec=gridinfo%timerange%p1*1000)
874+
timedelta_new(sec=gridinfo%timerange%p1)
875875
itime = index(this%time, correctedtime)
876876
IF (itime == 0 .AND. lforce) THEN
877877
itime = index(this%time, datetime_miss)
@@ -1005,7 +1005,7 @@ SUBROUTINE export_to_gridinfo(this, gridinfo, itime, itimerange, ilevel, ivar, &
10051005

10061006
IF (this%time_definition == 1) THEN
10071007
correctedtime = this%time(itime) - &
1008-
timedelta_new(msec=this%timerange(itimerange)%p1*1000)
1008+
timedelta_new(sec=this%timerange(itimerange)%p1)
10091009
ELSE
10101010
correctedtime = this%time(itime)
10111011
ENDIF
@@ -1094,7 +1094,7 @@ SUBROUTINE import_from_gridinfovv(this, gridinfov, dup_mode, clone, decode, &
10941094
IF (time_definition == 1) THEN
10951095
DO i = 1, gridinfov%arraysize
10961096
correctedtime(i) = correctedtime(i) + &
1097-
timedelta_new(msec=gridinfov%array(i)%timerange%p1*1000)
1097+
timedelta_new(sec=gridinfov%array(i)%timerange%p1)
10981098
ENDDO
10991099
ENDIF
11001100
ENDIF
@@ -1934,10 +1934,10 @@ SUBROUTINE volgrid6d_v7d_transform_compute(this, volgrid6d_in, vol7d_out, &
19341934
do itimerange=1,ntimerange
19351935
if (vol7d_out%time_definition > volgrid6d_in%time_definition) then
19361936
validitytime(itime,itimerange) = &
1937-
volgrid6d_in%time(itime) + timedelta_new(msec=volgrid6d_in%timerange(itimerange)%p1*1000)
1937+
volgrid6d_in%time(itime) + timedelta_new(sec=volgrid6d_in%timerange(itimerange)%p1)
19381938
else
19391939
validitytime(itime,itimerange) = &
1940-
volgrid6d_in%time(itime) - timedelta_new(msec=volgrid6d_in%timerange(itimerange)%p1*1000)
1940+
volgrid6d_in%time(itime) - timedelta_new(sec=volgrid6d_in%timerange(itimerange)%p1)
19411941
end if
19421942
end do
19431943
end do
@@ -2097,10 +2097,10 @@ SUBROUTINE volgrid6d_v7d_transform(this, volgrid6d_in, vol7d_out, v7d, &
20972097
do itimerange=1,ntimerange
20982098
if (time_definition > volgrid6d_in%time_definition) then
20992099
validitytime(itime,itimerange) = &
2100-
volgrid6d_in%time(itime) + timedelta_new(msec=volgrid6d_in%timerange(itimerange)%p1*1000)
2100+
volgrid6d_in%time(itime) + timedelta_new(sec=volgrid6d_in%timerange(itimerange)%p1)
21012101
else
21022102
validitytime(itime,itimerange) = &
2103-
volgrid6d_in%time(itime) - timedelta_new(msec=volgrid6d_in%timerange(itimerange)%p1*1000)
2103+
volgrid6d_in%time(itime) - timedelta_new(sec=volgrid6d_in%timerange(itimerange)%p1)
21042104
end if
21052105
end do
21062106
end do

0 commit comments

Comments
 (0)