Skip to content
Snippets Groups Projects
Commit c8533eac authored by Luis Kornblueh's avatar Luis Kornblueh
Browse files

Resolve merge conflicts in examples/example.f90

parents 2f7a18ca 17b1668a
No related branches found
Tags 1.0.7
No related merge requests found
......@@ -38,4 +38,5 @@ examples/uniq
examples/callback_test
examples/simulate_iau
examples/restart*.dat
test/test_runner
\ No newline at end of file
test/test_runner
build
\ No newline at end of file
......@@ -21,6 +21,7 @@ program example
type(datetime), pointer :: start_date_tmp
type(datetime), pointer :: start_date_test
type(datetime), pointer :: stop_date
type(datetime), pointer :: end_date
type(timedelta), pointer :: time_step
......@@ -119,6 +120,8 @@ contains
type(datetime), pointer :: dt1 => null(), dt2 => null()
character(len=MAX_TIMEDELTA_STR_LEN) :: td_string
character(len=MAX_DATETIME_STR_LEN) :: dstring
TYPE(timedelta), POINTER :: time_delta
CHARACTER(LEN=MAX_DATETIME_STR_LEN) :: dt_string
mtime_td => newTimedelta("PT1H1M1S")
mtime_td = mtime_td * 0.3d0
......@@ -239,6 +242,35 @@ contains
write (0,*) "-PT01H = ", TRIM(td_string)
call deallocateTimedelta(mtime_td)
CALL setCalendar(PROLEPTIC_GREGORIAN)
start_date => newDatetime("2017-07-01T00:00:00.000")
end_date => newDatetime("2017-07-31T00:00:00.000")
time_delta => newTimeDelta("P01D")
time_delta = end_date - start_date
CALL datetimeToString(start_date, dt_string)
WRITE (0,*) "start_date = ", TRIM(dt_string)
CALL datetimeToString(end_date, dt_string)
WRITE (0,*) "end_date = ", TRIM(dt_string)
CALL timedeltaToString(time_delta, td_string)
WRITE (0,*) "difference (P30D) = ", TRIM(td_string)
CALL deallocateDatetime(start_date)
CALL deallocateDatetime(end_date)
CALL deallocateTimedelta(time_delta)
start_date => newDatetime("2017-07-01T00:00:00.000")
end_date => newDatetime("2017-08-01T00:00:00.000")
time_delta => newTimeDelta("P01D")
time_delta = end_date - start_date
CALL datetimeToString(start_date, dt_string)
WRITE (0,*) "start_date = ", TRIM(dt_string)
CALL datetimeToString(end_date, dt_string)
WRITE (0,*) "end_date = ", TRIM(dt_string)
CALL timedeltaToString(time_delta, td_string)
WRITE (0,*) "difference (P01M) = ", TRIM(td_string)
CALL deallocateDatetime(start_date)
CALL deallocateDatetime(end_date)
CALL deallocateTimedelta(time_delta)
end subroutine icon_tests
subroutine event_tests
......
......@@ -51,7 +51,7 @@ PROGRAM example
! TYPE(t_datetime) :: dt
WRITE (0,*) " testing assignment of t_datetime."
dt = "1970-01-01T00:00:00"
dt = t_datetime("1970-01-01T00:00:00")
! Instead of: TYPE(timedelta), POINTER :: td
! td => newTimeDelta("PT1H1M1S")
......@@ -60,7 +60,7 @@ PROGRAM example
! TYPE(t_timedelta) :: td
WRITE (0,*) " testing assignment of t_timedelta."
td = "PT1H1M1S"
td = t_timedelta("PT1H1M1S")
! Instead of: CALL datetimeToString(dt, dstring1)
! CALL timedeltaToString(td, dstring2)
......@@ -76,19 +76,19 @@ PROGRAM example
! --- Further examples:
! subtraction of two dates
dt2 = "1970-01-01T00:00:00"
dt2 = t_datetime("1970-01-01T00:00:00")
td = dt-dt2
WRITE (0,*) "subtraction of dates: time delta: ", td%to_string()
! comparison of dates
dt = "1970-01-01T00:00:00"
dt2 = "1970-01-01T00:00:00"
dt = t_datetime("1970-01-01T00:00:00")
dt2 = t_datetime("1970-01-01T00:00:00")
WRITE (0,*) dt%to_string(), " == ", dt2%to_string(), ": ", (dt == dt2)
dt3 = "1970-01-01T00:00:01"
dt3 = t_datetime("1970-01-01T00:00:01")
WRITE (0,*) dt%to_string(), " == ", dt3%to_string(), ": ", (dt == dt3)
! interval assignment with milliseconds
td = 360000
td = t_timedelta(360000)
WRITE (0,*) "interval assignment with milliseconds: ", td%to_string()
! ------------------------------------------------------------
......
......@@ -19,12 +19,10 @@ module mtime_hl
public :: t_datetime, t_timedelta
INTEGER, PARAMETER :: i8 = SELECTED_INT_KIND(14) !< at least 8 byte integer
integer, parameter :: i8 = selected_int_kind(14) !< at least 8 byte integer
!> Wrapper class for "mtime" data type "datetime".
!
! Avoids, e.g., explicit use of POINTERs by the user.
!
type t_datetime
private
......@@ -33,8 +31,8 @@ module mtime_hl
contains
procedure :: assign_t_datetime
procedure :: day => t_datetime_day
procedure :: assign_string => t_datetime_assign_string
procedure :: add_timedelta => t_datetime_add_timedelta
procedure :: sub_timedelta => t_datetime_sub_timedelta
procedure :: sub_datetime => t_datetime_sub_datetime
......@@ -50,7 +48,7 @@ module mtime_hl
generic :: to_string => t_datetime_to_string, t_datetime_to_posix_string
generic :: assignment(=) => assign_string
generic :: assignment(=) => assign_t_datetime
generic :: operator(+) => add_timedelta
generic :: operator(-) => sub_timedelta
generic :: operator(-) => sub_datetime
......@@ -63,11 +61,12 @@ module mtime_hl
end type t_datetime
interface t_datetime
module procedure t_datetime_assign_string
end interface t_datetime
!> Wrapper class for "mtime" data type "timedelta".
!
! Avoids, e.g., explicit use of POINTERs by the user.
!
type t_timedelta
private
......@@ -76,17 +75,20 @@ module mtime_hl
contains
procedure :: assign_string => t_timedelta_assign_string
procedure :: assign_ms => t_timedelta_assign_ms
procedure :: assign_t_timedelta
procedure :: t_timedelta_to_string
generic :: to_string => t_timedelta_to_string
generic :: to_string => t_timedelta_to_string
generic :: assignment(=) => assign_string, assign_ms
generic :: assignment(=) => assign_t_timedelta
end type t_timedelta
interface t_timedelta
module procedure t_timedelta_assign_string
module procedure t_timedelta_assign_ms
end interface t_timedelta
!> Error info type: mtime error
type, extends(t_error_info) :: t_mtime_error
......@@ -94,6 +96,30 @@ module mtime_hl
contains
!___________________________________________________________________________
! datetime section:
!
! generic assignment for constructors
!
subroutine assign_t_datetime(to, from)
class(t_datetime), intent(out) :: to
class(t_datetime), intent(in) :: from
type(datetime), pointer :: dt_tmp
dt_tmp => newdatetime(from%dt)
to%dt = dt_tmp
call deallocatedatetime(dt_tmp)
end subroutine assign_t_datetime
! constructor for a datetime string
!
type(t_datetime) function t_datetime_assign_string(dt_string)
character(len=*), intent(in) :: dt_string
type(datetime), pointer :: dt_tmp
dt_tmp => newdatetime(dt_string)
t_datetime_assign_string%dt = dt_tmp
call deallocatedatetime(dt_tmp)
end function t_datetime_assign_string
! Returns t_datetime objects day
!
function t_datetime_day(this)
......@@ -147,17 +173,6 @@ contains
call deallocatedatetime(dt_tmp)
end function t_datetime_to_posix_string
! Assignment operator: this = "date string".
!
subroutine t_datetime_assign_string(this, dt_string)
class (t_datetime), intent(out) :: this
character(len=*), intent(in) :: dt_string
type(datetime), pointer :: dt_tmp
dt_tmp => newDatetime(dt_string)
this%dt = dt_tmp
call deallocateDatetime(dt_tmp)
end subroutine t_datetime_assign_string
! Addition of time interval to datetime object.
!
function t_datetime_add_timedelta(this, td) result(dt_td_sum)
......@@ -241,13 +256,52 @@ contains
class (t_datetime), intent(in) :: dt
t_datetime_greater_or_equal = (this%dt >= dt%dt)
end function t_datetime_greater_or_equal
!___________________________________________________________________________
! timedelta section:
!
! generic assignment for constructors
!
subroutine assign_t_timedelta(to, from)
class(t_timedelta), intent(out) :: to
class(t_timedelta), intent(in) :: from
type(timedelta), pointer :: td_tmp
td_tmp => newTimedelta(from%td)
to%td = td_tmp
to%td%sign = td_tmp%sign
call deallocateTimedelta(td_tmp)
end subroutine assign_t_timedelta
! constructor for timedelta string
!
type(t_timedelta) function t_timedelta_assign_string(td_string)
character(len=*), intent(in) :: td_string
type(timedelta), pointer :: td_tmp
td_tmp => newtimedelta(td_string)
t_timedelta_assign_string%td = td_tmp
t_timedelta_assign_string%td%sign = td_tmp%sign
call deallocatetimedelta(td_tmp)
end function t_timedelta_assign_string
! constructor for integer milliseconds (integer)
!
type(t_timedelta) function t_timedelta_assign_ms(td_ms)
integer, intent(in) :: td_ms
type(timedelta), pointer :: td_tmp
character(len=max_timedelta_str_len) :: td_string
call getptstringfromms(int(td_ms,i8), td_string)
td_tmp => newtimedelta(td_string)
t_timedelta_assign_ms%td = td_tmp
t_timedelta_assign_ms%td%sign = td_tmp%sign
call deallocatetimedelta(td_tmp)
end function t_timedelta_assign_ms
! Convert t_timedelta object to string.
!
FUNCTION t_timedelta_to_string(this, opt_error)
function t_timedelta_to_string(this, opt_error)
character(len=max_timedelta_str_len) :: t_timedelta_to_string
class (t_timedelta) :: this
TYPE(t_error), INTENT(OUT), OPTIONAL :: opt_error
type(t_error), intent(out), optional :: opt_error
type(timedelta), pointer :: td_tmp
INTEGER :: errno
character(len=max_error_str_len) :: error_str
......@@ -264,32 +318,6 @@ contains
call deallocatetimedelta(td_tmp)
end function t_timedelta_to_string
! Assignment operator: this = "time interval string".
!
subroutine t_timedelta_assign_string(this, td_string)
class (t_timedelta), intent(out) :: this
character(len=*), intent(in) :: td_string
type(timedelta), pointer :: td_tmp
td_tmp => newtimedelta(td_string)
this%td = td_tmp
this%td%sign = td_tmp%sign
call deallocatetimedelta(td_tmp)
end subroutine t_timedelta_assign_string
! Assignment operator: this = milliseconds.
!
subroutine t_timedelta_assign_ms(this, td_ms)
class (t_timedelta), intent(out) :: this
integer, intent(in) :: td_ms
type(timedelta), pointer :: td_tmp
character(len=max_timedelta_str_len) :: td_string
call getptstringfromms(int(td_ms,i8), td_string)
td_tmp => newtimedelta(td_string)
this%td = td_tmp
this%td%sign = td_tmp%sign
call deallocatetimedelta(td_tmp)
end subroutine t_timedelta_assign_ms
end module mtime_hl
!>
!! @}
......@@ -1082,6 +1082,8 @@ julianDeltaToTimeDelta(struct _juliandelta* jd, struct _datetime* base_dt, struc
/* } */
/* } */
td_return->month = 0;
td_return->day = (int) delta_final_year;
for (i = NO_OF_MONTHS_IN_A_YEAR; i > 0; i--)
{
if (delta_final_year >= msdinm[base_dt->date.month - 1][i])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment