From 45532c4c42281125420cfe83409f20b17a7825a1 Mon Sep 17 00:00:00 2001
From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de>
Date: Thu, 16 Jan 2025 10:20:39 +0100
Subject: [PATCH] Remove the Fortran high-level interface source files

---
 src/libmtime_hl.f90         | 408 -----------------------------------
 src/mtime_t_datetime.inc    | 292 -------------------------
 src/mtime_t_event.inc       | 156 --------------
 src/mtime_t_juliandelta.inc |  30 ---
 src/mtime_t_timedelta.inc   | 417 ------------------------------------
 5 files changed, 1303 deletions(-)
 delete mode 100644 src/libmtime_hl.f90
 delete mode 100644 src/mtime_t_datetime.inc
 delete mode 100644 src/mtime_t_event.inc
 delete mode 100644 src/mtime_t_juliandelta.inc
 delete mode 100644 src/mtime_t_timedelta.inc

diff --git a/src/libmtime_hl.f90 b/src/libmtime_hl.f90
deleted file mode 100644
index 2dbb78de..00000000
--- a/src/libmtime_hl.f90
+++ /dev/null
@@ -1,408 +0,0 @@
-!! Copyright (c) 2013-2024 MPI-M, Luis Kornblueh, Rahul Sinha and DWD, Florian Prill. All rights reserved.
-!!
-!! SPDX-License-Identifier: BSD-3-Clause
-!!
-!TODO: extract internal c binding routines (my_...) from libmtime.f90 into extra module
-!      and derive old and new interface out of this
-
-!> @file libmtime_hl.f90
-!!
-!! @brief Providing a high level interface for the Fortran language bindings of libmtime.
-!!
-!! The mtime library - at least in its first release - heavily uses
-!! pointers for passing arguments to functions. This design causes
-!! several inconveniences on the application side, e.g. the need for
-!! explicit deallocation. Besides, the standard interface of the mtime
-!! library provides numerous functions which are well suited for an
-!! object-oriented implementation.
-!!
-!! This wrapper module attempts to provide the mtime functionality
-!! with stack-based data structures. It does not refactor the libmtime
-!! library itself but hides its allocate-deallocate code within
-!! type-bound procedures.
-!!
-!! @author  Luis Kornblueh, Max Planck Institute for Meteorology
-!! @author  Florian Prill, DWD
-!! @author  J.F. Engels, DKRZ
-!!
-!! TODOs:
-!!  - Event: Wrappers for event functionality; direct use of c-bindings
-!!  - Get rid of use of old mtime library
-!!  - Expand examples_hl by event wrapper calls
-!!  - Make December'18 branch compile, link and run basic test
-!!  - Merge recent changes in ICON into our December'18 branch
-!!  - Remove old mtime Fortran library
-!!  - Change mtime C source, use stack variables
-!!
-!! @defgroup FortranHLBindings libmtime high-level Fortran language bindings
-!! @{
-!!
-MODULE mtime_hl
-
-  USE, INTRINSIC :: ISO_C_BINDING, ONLY: &
-    & c_associated, c_char, c_double, c_f_pointer, c_int, c_int32_t, &
-    & c_int64_t, c_loc, c_null_char, c_ptr
-  USE mtime_constants, ONLY: &
-    & max_datetime_str_len, max_event_str_len, max_eventname_str_len, &
-    & max_groupname_str_len, max_timedelta_str_len
-  USE mtime_error_handling
-  USE mtime_c_bindings, ONLY: &
-    & date, datetime, divisionquotienttimespan, handle_errno, julianday, &
-    & juliandelta, time, timedelta
-  USE mtime_c_bindings, ONLY: &
-    & my_addtimedeltatodatetime, my_comparedatetime, my_datetimetostring, &
-    & my_datetoposixstring, my_deallocatedatetime, my_deallocatejuliandelta, &
-    & my_deallocatetimedelta, my_elementwisescalarmultiplytimedelta, &
-    & my_elementwisescalarmultiplytimedeltadp, my_getdayofyearfromdatetime, &
-    & my_getjuliandayfromdatetime, my_getnoofdaysinmonthdatetime, &
-    & my_getnoofdaysinyeardatetime, my_getnoofsecondselapsedindaydatetime, &
-    & my_getnoofsecondselapsedinmonthdatetime, my_gettimedeltafromdate, &
-    & my_newdatetime, my_newjuliandelta, my_newrawdatetime, &
-    & my_newrawtimedelta, my_newtimedeltafromstring, my_timedeltatostring
-  USE mtime, ONLY: &
-    & OPERATOR(*), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(==), &
-    & OPERATOR(>), OPERATOR(>=), deallocateDatetime, deallocateJulianDay, &
-    & deallocateJulianDelta, deallocateTimedelta, &
-    & divideDatetimeDifferenceInSeconds, divideTimeDeltaInSeconds, &
-    & getDatetimeFromJulianDay, getPTStringFromMS, &
-    & getTotalMilliSecondsTimeDelta, getTotalSecondsTimeDelta, newDatetime, &
-    & newJulianDay, newJuliandelta, newTimedelta, timeDeltaToJulianDelta
-
-  IMPLICIT NONE
-
-#ifndef __NVCOMPILER
-
-  PUBLIC :: t_datetime, t_timedelta, t_juliandelta, t_julianday, t_event, t_eventGroup
-  PUBLIC :: t_timedeltaFromMilliseconds
-  PUBLIC :: t_timedeltaFromSeconds
-  PUBLIC :: min, max
-  PUBLIC :: OPERATOR(*)
-
-  !
-  ! TODO: simply repeat the implementation of "divisionquotienttimespan" in
-  !       order to disentangle the mtime_hl and the mtime Fortran modules.
-  !
-  !PUBLIC :: divisionquotienttimespan
-
-  !> NOTE / TODO:
-  !
-  !  Why does this wrapper module *not* implement the assignment
-  !  operator? - Lenghty answer:
-  !
-  !    The fundamental question is: Why do our "t_datetime",
-  !    "t_timedelta", "t_xxx" types need assignment operators which
-  !    apply "pointer magic"? Couldn't we simply copy the stack
-  !    variables?
-  !
-  !    Here's why this is important: Since we are dealing with stack
-  !    variables, these might be implicitly initialized with default
-  !    values, causing problems with our "pointer magic". Imagine that
-  !    in our application code we have a derived type as follows:
-  !
-  !      TYPE(mytype)
-  !        [...]
-  !        TYPE(t_datetime) :: mtime_date
-  !      END TYPE
-  !
-  !    where "mtime_date" is an mtime datetime variable which is
-  !    usually not used and therefore not explicitly initialized by
-  !    the user. Now, when we have this operation:
-  !
-  !      TYPE(mytype) :: tmp_a, tmp_b
-  !      tmp_a = tmp_b
-  !
-  !    then the application code crashes, because the assign operator
-  !    of "t_datetime" attempts to create an mtime "datetime" pointer
-  !    based on the uninitializd "tmp_b%dt".
-  !
-
-  !> Wrapper class for "mtime" data type "datetime".
-  !
-  TYPE t_datetime
-
-    !private
-
-    !> wrapped datatype of the standard mtime interface
-    TYPE(datetime) :: dt = datetime(date(year=0_c_int64_t, month=0_c_int, day=0_c_int),&
-         &                          time(hour=0_c_int, minute=0_c_int, second=0_c_int, ms=0_c_int))
-
-  CONTAINS
-
-    ! --- conversions
-
-    PROCEDURE :: t_datetime_toString
-    PROCEDURE :: t_datetime_to_posix_string
-    GENERIC   :: toString => t_datetime_toString, t_datetime_to_posix_string
-
-    PROCEDURE :: toJulianDay => t_datetime_toJulianDay
-
-    ! --- inquire components
-
-    PROCEDURE :: getDay => t_datetime_getDay
-
-    ! --- derived quantities
-
-    PROCEDURE :: daysInEntireMonth => t_datetime_daysInEntireMonth
-    PROCEDURE :: daysInEntireYear => t_datetime_daysInEntireYear
-    PROCEDURE :: elapsedDaysInYear => t_datetime_elapsedDaysInYear
-    PROCEDURE :: elapsedSecondsInMonth => t_datetime_elapsedSecondsInMonth
-    PROCEDURE :: elapsedSecondsInDay => t_datetime_elapsedSecondsInDay
-
-    ! --- overloaded operators
-
-    PROCEDURE :: add_timedelta => t_datetime_add_timedelta
-    PROCEDURE :: sub_timedelta => t_datetime_sub_timedelta
-    PROCEDURE :: sub_datetime => t_datetime_sub_datetime
-    PROCEDURE :: equal_datetime => t_datetime_equal
-    PROCEDURE :: not_equal_datetime => t_datetime_not_equal
-    PROCEDURE :: less_than_datetime => t_datetime_less_than
-    PROCEDURE :: greater_than_datetime => t_datetime_greater_than
-    PROCEDURE :: less_or_equal_datetime => t_datetime_less_or_equal
-    PROCEDURE :: greater_or_equal_datetime => t_datetime_greater_or_equal
-
-    PROCEDURE :: get_c_pointer => t_datetime_get_c_pointer
-
-    GENERIC   :: OPERATOR(+) => add_timedelta
-    GENERIC   :: OPERATOR(-) => sub_timedelta
-    GENERIC   :: OPERATOR(-) => sub_datetime
-    GENERIC   :: OPERATOR(==) => equal_datetime
-    GENERIC   :: OPERATOR(/=) => not_equal_datetime
-    GENERIC   :: OPERATOR(<) => less_than_datetime
-    GENERIC   :: OPERATOR(>) => greater_than_datetime
-    GENERIC   :: OPERATOR(<=) => less_or_equal_datetime
-    GENERIC   :: OPERATOR(>=) => greater_or_equal_datetime
-
-  END TYPE t_datetime
-
-  INTERFACE t_datetime
-    MODULE PROCEDURE t_datetime_assign_string
-    MODULE PROCEDURE t_datetime_assign_raw
-  END INTERFACE t_datetime
-
-  !> Wrapper class for "mtime" data type "timedelta".
-  !
-  TYPE t_timedelta
-
-    !private
-
-    !> wrapped datatype of the standard mtime interface
-    TYPE(timedelta) :: td = timedelta(flag_std_form=0_c_int, sign='+', year=0_c_int64_t,   &
-         &                                month=0_c_int, day=0_c_int, hour=0_c_int,         &
-         &                                minute=0_c_int, second=0_c_int, ms=0_c_int)
-
-  CONTAINS
-
-    ! --- conversions
-
-    PROCEDURE :: toString => t_timedelta_toString
-    PROCEDURE :: toJulianDelta => t_timedelta_toJulianDelta
-
-    ! --- inquire components
-
-    ! todo: [...]
-
-    ! --- derived quantities
-
-    PROCEDURE :: toSeconds => t_timedelta_toSeconds
-
-    ! t_timedelta_toMilliSeconds: todo: It would be convenient to have
-    ! the reference date for this function as an optional argument;
-    ! only in case of "non-well-definedness" an error should be
-    ! thrown.
-    PROCEDURE :: toMilliSeconds => t_timedelta_toMilliSeconds
-
-    PROCEDURE :: divideInSecondsBy => t_timedelta_divideInSecondsBy
-
-    ! --- overloaded operators
-
-    ! note: the "+", "-" operators are not well-defined for timedelta
-    ! objects!
-
-    PROCEDURE :: equal_datetime => t_timedelta_equal
-    PROCEDURE :: not_equal_datetime => t_timedelta_not_equal
-    PROCEDURE :: less_than_datetime => t_timedelta_less_than
-    PROCEDURE :: greater_than_datetime => t_timedelta_greater_than
-    PROCEDURE :: less_or_equal_datetime => t_timedelta_less_than_or_equal
-    PROCEDURE :: greater_or_equal_datetime => t_timedelta_greater_than_or_equal
-    PROCEDURE :: scalar_multiply_long => t_timedelta_scalar_multiply_long
-    PROCEDURE :: scalar_multiply_int => t_timedelta_scalar_multiply_int
-    PROCEDURE :: scalar_multiply_real => t_timedelta_scalar_multiply_real
-
-    PROCEDURE :: get_c_pointer => t_timedelta_get_c_pointer
-
-    GENERIC   :: OPERATOR(==) => equal_datetime
-    GENERIC   :: OPERATOR(/=) => not_equal_datetime
-    GENERIC   :: OPERATOR(<) => less_than_datetime
-    GENERIC   :: OPERATOR(>) => greater_than_datetime
-    GENERIC   :: OPERATOR(<=) => less_or_equal_datetime
-    GENERIC   :: OPERATOR(>=) => greater_or_equal_datetime
-    GENERIC   :: OPERATOR(*) => scalar_multiply_long, scalar_multiply_int,         &
-         &                                        scalar_multiply_real
-
-  END TYPE t_timedelta
-
-  INTERFACE t_timedelta
-    MODULE PROCEDURE t_timedelta_assign_string
-  END INTERFACE t_timedelta
-
-  INTERFACE t_timedeltaFromMilliseconds
-    MODULE PROCEDURE t_timedelta_assign_ms
-    MODULE PROCEDURE t_timedelta_assign_ms_i8
-  END INTERFACE t_timedeltaFromMilliseconds
-
-  INTERFACE t_timedeltaFromSeconds
-    MODULE PROCEDURE t_timedelta_assign_sec
-    MODULE PROCEDURE t_timedelta_assign_sec_i8
-  END INTERFACE t_timedeltaFromSeconds
-
-  INTERFACE OPERATOR(*)
-    MODULE PROCEDURE t_timedelta_scalar_multiply_inv_long
-    MODULE PROCEDURE t_timedelta_scalar_multiply_inv_int
-    MODULE PROCEDURE t_timedelta_scalar_multiply_inv_real
-  END INTERFACE OPERATOR(*)
-
-  INTERFACE min
-    MODULE PROCEDURE t_datetime_min
-  END INTERFACE min
-
-  INTERFACE max
-    MODULE PROCEDURE t_datetime_max
-  END INTERFACE max
-
-  TYPE t_julianday
-
-    !private
-
-    !> wrapped datatype of the standard mtime interface
-    TYPE(julianday) :: jd
-
-  CONTAINS
-
-    ! --- conversions
-
-    PROCEDURE :: toDateTime => t_julianday_toDateTime
-
-    ! --- inquire components
-
-    PROCEDURE :: getDay => t_julianDay_getDay
-    PROCEDURE :: getFractionOfDayInMS => t_julianday_getFractionOfDayInMS
-
-  END TYPE t_julianday
-
-  !> Wrapper class for "mtime" data type "juliandelta".
-  !
-  TYPE t_juliandelta
-
-    !private
-
-    !> wrapped datatype of the standard mtime interface
-    TYPE(juliandelta) :: jd
-
-  END TYPE t_juliandelta
-
-  INTERFACE t_juliandelta
-    MODULE PROCEDURE t_juliandelta_assign_raw
-  END INTERFACE t_juliandelta
-
-  TYPE t_event
-
-    !private
-    ! FIXME (some day in the future): This derived type should not specify both -
-    ! the linked list element and the element itself.
-    TYPE(t_event), POINTER               :: nextEventInGroup
-
-    INTEGER(c_int64_t)                   :: eventId
-    CHARACTER(len=max_eventname_str_len) :: eventName
-
-    TYPE(t_datetime)                     :: eventsLastEvaluationDateTime
-    TYPE(t_datetime)                     :: eventReferenceDateTime
-
-    TYPE(t_datetime)                     :: eventFirstDateTime
-    TYPE(t_datetime)                     :: eventLastDateTime
-
-    TYPE(t_timedelta)                    :: eventInterval
-    TYPE(t_timedelta)                    :: eventOffset
-
-    LOGICAL                              :: neverTriggerEvent
-
-    LOGICAL                              :: triggerCurrentEvent
-
-    LOGICAL                              :: nextEventIsFirst
-    LOGICAL                              :: lastEventWasFinal
-
-    LOGICAL                              :: eventisFirstInDay
-    LOGICAL                              :: eventisFirstInMonth
-    LOGICAL                              :: eventisFirstInYear
-    LOGICAL                              :: eventisLastInDay
-    LOGICAL                              :: eventisLastInMonth
-    LOGICAL                              :: eventisLastInYear
-
-    TYPE(t_datetime)                     :: triggerNextEventDateTime
-    TYPE(t_datetime)                     :: triggeredPreviousEventDateTime
-
-  CONTAINS
-
-    !> TODO: implement isAvtive ....
-    ! PROCEDURE :: trigger                   => t_event_trigger
-    PROCEDURE :: getFirstDatetime => t_event_getFirstDatetime
-    PROCEDURE :: getInterval => t_event_getInterval
-    PROCEDURE :: getLastDatetime => t_event_getLastDatetime
-    PROCEDURE :: getNextOccurrenceDatetime => t_event_getNextOccurrenceDatetime
-    PROCEDURE :: getPrevOccurrenceDatetime => t_event_getPrevOccurrenceDatetime
-
-    PROCEDURE :: getName => t_event_getName
-    PROCEDURE :: nextEvent => t_event_next_event
-
-  END TYPE t_event
-
-  INTERFACE t_event
-    MODULE PROCEDURE t_event_assign_raw
-    MODULE PROCEDURE t_event_assign_types
-  END INTERFACE t_event
-
-  TYPE t_eventGroup
-
-    !private
-
-    INTEGER(c_int64_t)                   :: event_group_id
-    CHARACTER(len=max_groupname_str_len) :: event_group_name
-    TYPE(t_event), POINTER               :: first_event_in_group
-    TYPE(t_event), POINTER               :: last_event_in_group
-
-  CONTAINS
-
-    PROCEDURE :: append => t_eventGroup_addToGroup
-
-    !> TODO: implement the removal of a event in a list
-    !PROCEDURE :: remove        => t_eventGroup_removeFromGroup
-
-    ! --- inquire components
-
-    PROCEDURE :: getID => t_eventGroup_getGroupId
-    PROCEDURE :: getName => t_eventGroup_getGroupName
-
-    ! --- derived quantities
-
-    PROCEDURE :: getFirstEvent => t_eventGroup_getFirstEvent
-
-  END TYPE t_eventGroup
-
-  INTERFACE t_eventGroup
-    MODULE PROCEDURE t_eventGroup_constructor
-  END INTERFACE t_eventGroup
-
-  INTEGER :: event_group_id = 0
-  INTEGER :: event_id = 0
-
-CONTAINS
-
-#include "mtime_t_datetime.inc"
-#include "mtime_t_timedelta.inc"
-#include "mtime_t_juliandelta.inc"
-#include "mtime_t_event.inc"
-
-#endif
-
-END MODULE mtime_hl
-!>
-!! @}
diff --git a/src/mtime_t_datetime.inc b/src/mtime_t_datetime.inc
deleted file mode 100644
index 58ca33b8..00000000
--- a/src/mtime_t_datetime.inc
+++ /dev/null
@@ -1,292 +0,0 @@
-!! Copyright (c) 2013-2024 MPI-M, Luis Kornblueh, Rahul Sinha and DWD, Florian Prill. All rights reserved.
-!!
-!! SPDX-License-Identifier: BSD-3-Clause
-!!
-  ! ================================================================================
-  ! datetime section:
-  ! ================================================================================
-
-  ! constructor for a datetime string
-  !
-  TYPE(t_datetime) FUNCTION t_datetime_assign_string(dt_string)
-    CHARACTER(len=*), INTENT(in) :: dt_string
-    TYPE(c_ptr)             :: c_pointer
-    TYPE(datetime), POINTER :: dt_tmp
-    c_pointer = my_newdatetime(TRIM(ADJUSTL(dt_string))//c_null_char)
-    CALL handle_errno(.NOT. C_ASSOCIATED(c_pointer), 4*100 + 1, &
-      & __FILE__, &
-      & __LINE__)
-    CALL C_F_POINTER(c_pointer, dt_tmp)
-    t_datetime_assign_string%dt = dt_tmp
-    CALL my_deallocatedatetime(c_pointer)
-  END FUNCTION t_datetime_assign_string
-
-  ! constructor for a datetime
-  !
-  FUNCTION t_datetime_assign_raw(year, month, day, hour, minute, second, ms) RESULT(res)
-    TYPE(t_datetime) :: res
-
-    INTEGER(c_int64_t), INTENT(in) :: year
-    INTEGER(c_int), INTENT(in) :: month, day, hour, minute, second, ms
-
-    TYPE(datetime), POINTER :: dt_tmp
-    TYPE(c_ptr)             :: c_pointer
-
-    c_pointer = my_newrawdatetime(year, month, day, hour, minute, second, ms)
-    CALL handle_errno(.NOT. C_ASSOCIATED(c_pointer), 4*100 + 2, &
-      & __FILE__, &
-      & __LINE__)
-    CALL C_F_POINTER(c_pointer, dt_tmp)
-    res%dt = dt_tmp
-    CALL my_deallocatedatetime(c_pointer)
-  END FUNCTION t_datetime_assign_raw
-
-  ! Returns t_datetime objects day
-  !
-  FUNCTION t_datetime_getDay(this)
-    INTEGER            :: t_datetime_getDay
-    CLASS(t_datetime) :: this
-    t_datetime_getDay = this%dt%date%day
-  END FUNCTION t_datetime_getDay
-
-  ! Convert t_datetime object to string.
-  !
-  FUNCTION t_datetime_toString(this) RESULT(string)
-    CHARACTER(len=max_datetime_str_len)  :: string
-    CLASS(t_datetime)                   :: this
-    TYPE(c_ptr) :: c_pointer, dummy_ptr
-    INTEGER :: i
-
-    string = ""
-
-    c_pointer = this%get_c_pointer()
-    CALL handle_errno(.NOT. C_ASSOCIATED(c_pointer), 0*100 + 2, &
-      & __FILE__, &
-      & __LINE__)
-    dummy_ptr = my_datetimetostring(c_pointer, string)
-    CALL handle_errno(.NOT. C_ASSOCIATED(dummy_ptr), 4*100 + 6, &
-      & __FILE__, &
-      & __LINE__)
-
-    char_loop: DO i = 1, LEN(string)
-      IF (string(i:i) == c_null_char) EXIT char_loop
-    END DO char_loop
-    string(i:LEN(string)) = ' '
-
-    CALL my_deallocatedatetime(c_pointer)
-  END FUNCTION t_datetime_toString
-
-  ! Convert t_datetime object to string.
-  !
-  FUNCTION t_datetime_to_posix_string(this, format_string) RESULT(string)
-    CHARACTER(len=max_datetime_str_len)  :: string
-    CHARACTER(len=*), INTENT(in)         :: format_string
-    CLASS(t_datetime)                   :: this
-    INTEGER :: i
-    TYPE(c_ptr) :: c_pointer, dummy_ptr
-
-    string = ""
-    c_pointer = this%get_c_pointer()
-    dummy_ptr = my_datetoposixstring(c_pointer, string, format_string)
-    CALL handle_errno(.NOT. C_ASSOCIATED(dummy_ptr), 2*100 + 8, &
-      & __FILE__, &
-      & __LINE__)
-    char_loop: DO i = 1, LEN(string)
-      IF (string(i:i) == c_null_char) EXIT char_loop
-    END DO char_loop
-    string(i:LEN(string)) = ' '
-
-    CALL my_deallocatedatetime(c_pointer)
-  END FUNCTION t_datetime_to_posix_string
-
-  FUNCTION t_datetime_toJulianDay(this) RESULT(jd)
-    CLASS(t_datetime), INTENT(in) :: this
-    TYPE(t_julianday), TARGET :: jd
-    TYPE(c_ptr) :: c_pointer, dummy_ptr
-    c_pointer = this%get_c_pointer()
-    jd = t_julianday(julianday(0, 0))
-    dummy_ptr = my_getjuliandayfromdatetime(c_pointer, C_LOC(jd%jd))
-    CALL handle_errno(.NOT. C_ASSOCIATED(dummy_ptr), 0*100 + 2, &
-      & __FILE__, &
-      & __LINE__)
-    CALL my_deallocatedatetime(c_pointer)
-  END FUNCTION t_datetime_toJulianDay
-
-  ! Addition of time interval to datetime object.
-  !
-  FUNCTION t_datetime_add_timedelta(this, td) RESULT(dt_td_sum)
-    TYPE(t_datetime)               :: dt_td_sum
-    CLASS(t_datetime), INTENT(in) :: this
-    CLASS(t_timedelta), INTENT(in) :: td
-    TYPE(datetime), POINTER        :: dt_tmp
-
-    TYPE(c_ptr) :: c_pointer1, c_pointer2, dummy_ptr
-    c_pointer1 = this%get_c_pointer()
-    c_pointer2 = td%get_c_pointer()
-
-    dummy_ptr = my_addtimedeltatodatetime(c_pointer1, c_pointer2, c_pointer1)
-    CALL handle_errno(.NOT. C_ASSOCIATED(dummy_ptr), 0*100 + 2, &
-      & __FILE__, &
-      & __LINE__)
-    CALL C_F_POINTER(c_pointer1, dt_tmp)
-    dt_td_sum%dt = dt_tmp
-    CALL my_deallocatedatetime(c_pointer1)
-    CALL my_deallocatedatetime(c_pointer2)
-  END FUNCTION t_datetime_add_timedelta
-
-  ! Subtraction of time interval to datetime object.
-  !
-  FUNCTION t_datetime_sub_timedelta(this, td) RESULT(dt_td_sum)
-    TYPE(t_datetime)               :: dt_td_sum
-    CLASS(t_datetime), INTENT(in) :: this
-    TYPE(t_timedelta), INTENT(in) :: td
-    TYPE(t_timedelta)              :: td_tmp
-    TYPE(datetime), POINTER        :: dt_tmp
-    TYPE(c_ptr) :: c_pointer1, c_pointer2, dummy_ptr
-
-    td_tmp = td
-    IF (td_tmp%td%sign == "+") THEN
-      td_tmp%td%sign = "-"
-    ELSE
-      td_tmp%td%sign = "+"
-    END IF
-
-    c_pointer1 = this%get_c_pointer()
-    c_pointer2 = td_tmp%get_c_pointer()
-
-    dummy_ptr = my_addtimedeltatodatetime(c_pointer1, c_pointer2, c_pointer1)
-    CALL handle_errno(.NOT. C_ASSOCIATED(dummy_ptr), 0*100 + 2, &
-      & __FILE__, &
-      & __LINE__)
-    CALL C_F_POINTER(c_pointer1, dt_tmp)
-    dt_td_sum%dt = dt_tmp
-    CALL my_deallocatedatetime(c_pointer1)
-    CALL my_deallocatedatetime(c_pointer2)
-  END FUNCTION t_datetime_sub_timedelta
-
-  ! Subtraction of two dates.
-  !
-  FUNCTION t_datetime_sub_datetime(this, dt) RESULT(dt_dt_diff)
-    TYPE(t_timedelta), TARGET :: dt_dt_diff
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    CLASS(t_datetime), INTENT(in), TARGET :: dt
-    TYPE(c_ptr) :: dummy_ptr
-    dummy_ptr = my_gettimedeltafromdate(C_LOC(this%dt), C_LOC(dt%dt), C_LOC(dt_dt_diff%td))
-  END FUNCTION t_datetime_sub_datetime
-
-  ! Overloaded operator: test for equivalence.
-  !
-#ifndef MTIME_PURE_IF_C_LOC_IS_PURE
-#  if defined(__NEC__) || (defined(NAGFOR) &&  __NAG_COMPILER_RELEASE <= 71)
-!    NEC and older versions of NAG do not consider C_LOC as PURE
-#    define MTIME_PURE_IF_C_LOC_IS_PURE
-#  else
-#    define MTIME_PURE_IF_C_LOC_IS_PURE PURE
-#  endif
-#endif
-  MTIME_PURE_IF_C_LOC_IS_PURE LOGICAL FUNCTION t_datetime_equal(this, dt) RESULT(eq)
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    CLASS(t_datetime), INTENT(in), TARGET :: dt
-    INTEGER(c_int) :: ret
-    ret = my_comparedatetime(C_LOC(this%dt), C_LOC(dt%dt))
-    IF (ret == 0) THEN
-      eq = .TRUE.
-    ELSE
-      eq = .FALSE.
-    END IF
-  END FUNCTION t_datetime_equal
-
-  MTIME_PURE_IF_C_LOC_IS_PURE LOGICAL FUNCTION t_datetime_not_equal(this, dt)
-    CLASS(t_datetime), INTENT(in) :: this
-    CLASS(t_datetime), INTENT(in) :: dt
-    t_datetime_not_equal = .NOT. (this%dt == dt%dt)
-  END FUNCTION t_datetime_not_equal
-
-  MTIME_PURE_IF_C_LOC_IS_PURE LOGICAL FUNCTION t_datetime_less_than(this, dt) RESULT(lt)
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    CLASS(t_datetime), INTENT(in), TARGET :: dt
-    INTEGER(c_int) :: ret
-    ret = my_comparedatetime(C_LOC(this%dt), C_LOC(dt%dt))
-    IF (ret == -1) THEN
-      lt = .TRUE.
-    ELSE
-      lt = .FALSE.
-    END IF
-  END FUNCTION t_datetime_less_than
-
-  MTIME_PURE_IF_C_LOC_IS_PURE LOGICAL FUNCTION t_datetime_greater_than(this, dt) RESULT(gt)
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    CLASS(t_datetime), INTENT(in), TARGET :: dt
-    INTEGER(c_int) :: ret
-    ret = my_comparedatetime(C_LOC(this%dt), C_LOC(dt%dt))
-    IF (ret == 1) THEN
-      gt = .TRUE.
-    ELSE
-      gt = .FALSE.
-    END IF
-  END FUNCTION t_datetime_greater_than
-
-  MTIME_PURE_IF_C_LOC_IS_PURE LOGICAL FUNCTION t_datetime_less_or_equal(this, dt)
-    CLASS(t_datetime), INTENT(in) :: this
-    CLASS(t_datetime), INTENT(in) :: dt
-    t_datetime_less_or_equal = .NOT. (this > dt)
-  END FUNCTION t_datetime_less_or_equal
-
-  MTIME_PURE_IF_C_LOC_IS_PURE LOGICAL FUNCTION t_datetime_greater_or_equal(this, dt)
-    CLASS(t_datetime), INTENT(in) :: this
-    CLASS(t_datetime), INTENT(in) :: dt
-    t_datetime_greater_or_equal = .NOT. (this < dt)
-  END FUNCTION t_datetime_greater_or_equal
-
-  FUNCTION t_datetime_daysInEntireMonth(this)
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    INTEGER(c_int) :: t_datetime_daysInEntireMonth
-    t_datetime_daysInEntireMonth = my_getnoofdaysinmonthdatetime(C_LOC(this%dt))
-    CALL handle_errno(t_datetime_daysInEntireMonth == 0, 4*100 + 15, &
-      & __FILE__, __LINE__)
-  END FUNCTION t_datetime_daysInEntireMonth
-
-  FUNCTION t_datetime_daysInEntireYear(this)
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    INTEGER(c_int) :: t_datetime_daysInEntireYear
-    t_datetime_daysInEntireYear = my_getnoofdaysinyeardatetime(C_LOC(this%dt))
-    CALL handle_errno(t_datetime_daysInEntireYear == 0, 4*100 + 16, &
-      & __FILE__, __LINE__)
-  END FUNCTION t_datetime_daysInEntireYear
-
-  FUNCTION t_datetime_elapsedDaysInYear(this)
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    INTEGER(c_int) :: t_datetime_elapsedDaysInYear
-
-    t_datetime_elapsedDaysInYear = my_getdayofyearfromdatetime(C_LOC(this%dt))
-    CALL handle_errno(t_datetime_elapsedDaysInYear == 0, 4*100 + 17, &
-         &            __FILE__, __LINE__)
-  END FUNCTION t_datetime_elapsedDaysInYear
-
-  FUNCTION t_datetime_elapsedSecondsInMonth(this)
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    INTEGER(c_int64_t) :: t_datetime_elapsedSecondsInMonth
-    t_datetime_elapsedSecondsInMonth = my_getnoofsecondselapsedinmonthdatetime(C_LOC(this%dt))
-    CALL handle_errno(t_datetime_elapsedSecondsInMonth == -1, 4*100 + 18, &
-      & __FILE__, __LINE__)
-  END FUNCTION t_datetime_elapsedSecondsInMonth
-
-  FUNCTION t_datetime_elapsedSecondsInDay(this)
-    CLASS(t_datetime), INTENT(in), TARGET :: this
-    INTEGER(c_int64_t) :: t_datetime_elapsedSecondsInDay
-
-    t_datetime_elapsedSecondsInDay = my_getnoofsecondselapsedindaydatetime(C_LOC(this%dt))
-    CALL handle_errno(t_datetime_elapsedSecondsInDay == -1, 4*100 + 19, &
-     & __FILE__, __LINE__)
-  END FUNCTION t_datetime_elapsedSecondsInDay
-
-  FUNCTION t_datetime_get_c_pointer(this) RESULT(c_pointer)
-    TYPE(c_ptr) :: c_pointer
-    CLASS(t_datetime) :: this
-    c_pointer = my_newrawdatetime(INT(this%dt%date%year, c_int64_t), this%dt%date%month,     &
-         &                        this%dt%date%day, this%dt%time%hour, this%dt%time%minute, &
-         &                        this%dt%time%second, this%dt%time%ms)
-    CALL handle_errno((.NOT. C_ASSOCIATED(c_pointer)), 4*100 + 3, &
-      & __FILE__, &
-      & __LINE__)
-  END FUNCTION t_datetime_get_c_pointer
diff --git a/src/mtime_t_event.inc b/src/mtime_t_event.inc
deleted file mode 100644
index 99914802..00000000
--- a/src/mtime_t_event.inc
+++ /dev/null
@@ -1,156 +0,0 @@
-!! Copyright (c) 2013-2024 MPI-M, Luis Kornblueh, Rahul Sinha and DWD, Florian Prill. All rights reserved.
-!!
-!! SPDX-License-Identifier: BSD-3-Clause
-!!
-  ! ================================================================================
-  ! event section:
-  ! ================================================================================
-
-  ! generic assignment for constructors
-  !
-  FUNCTION t_event_assign_raw(name, referenceDate, firstdate, lastDate, interval, offset)
-    TYPE(t_event) :: t_event_assign_raw
-    CHARACTER(len=*), INTENT(in)           :: name
-    CHARACTER(len=*), INTENT(in)           :: referenceDate
-    CHARACTER(len=*), INTENT(in)           :: firstDate
-    CHARACTER(len=*), INTENT(in)           :: lastDate
-    CHARACTER(len=*), INTENT(in)           :: interval
-    CHARACTER(len=*), INTENT(in), OPTIONAL :: offset
-
-    CHARACTER(len=4)                       :: zeroOffset = "PT0S"
-
-    t_event_assign_raw%eventName = name
-    t_event_assign_raw%eventReferenceDateTime = t_datetime(referenceDate)
-    t_event_assign_raw%eventFirstDateTime = t_datetime(firstDate)
-    t_event_assign_raw%eventLastDateTime = t_datetime(lastDate)
-    t_event_assign_raw%eventInterval = t_timedelta(interval)
-    IF (PRESENT(offset)) THEN
-      t_event_assign_raw%eventOffset = t_timedelta(offset)
-    ELSE
-      t_event_assign_raw%eventOffset = t_timedelta(zeroOffset)
-    END IF
-
-  END FUNCTION t_event_assign_raw
-
-  FUNCTION t_event_assign_types(name, referenceDate, firstdate, lastDate, interval, offset)
-    TYPE(t_event) :: t_event_assign_types
-    CHARACTER(len=*), INTENT(in)            :: name
-    TYPE(t_datetime), INTENT(in)            :: referenceDate
-    TYPE(t_datetime), INTENT(in)            :: firstDate
-    TYPE(t_datetime), INTENT(in)            :: lastDate
-    TYPE(t_timedelta), INTENT(in)           :: interval
-    TYPE(t_timedelta), INTENT(in), OPTIONAL :: offset
-
-    CHARACTER(len=4)                       :: zeroOffset = "PT0S"
-
-    t_event_assign_types%eventName = name
-    t_event_assign_types%eventReferenceDateTime = referenceDate
-    t_event_assign_types%eventFirstDateTime = firstDate
-    t_event_assign_types%eventLastDateTime = lastDate
-    t_event_assign_types%eventInterval = interval
-    IF (PRESENT(offset)) THEN
-      t_event_assign_types%eventOffset = offset
-    ELSE
-      t_event_assign_types%eventOffset = t_timedelta(zeroOffset)
-    END IF
-
-  END FUNCTION t_event_assign_types
-
-  ! Iterate to next event in event group.
-  !
-  ! @return NULL() if no next event available.
-  FUNCTION t_event_next_event(this)
-    TYPE(t_event), POINTER :: t_event_next_event
-    CLASS(t_event) :: this
-    t_event_next_event => NULL()
-    IF (ASSOCIATED(this%nextEventInGroup)) THEN
-      t_event_next_event => this%nextEventInGroup
-    END IF
-  END FUNCTION t_event_next_event
-
-  FUNCTION t_event_getId(this) RESULT(res)
-    INTEGER(c_int64_t) :: res
-    CLASS(t_event) :: this
-    res = this%eventId
-  END FUNCTION t_event_getId
-
-  FUNCTION t_event_getName(this) RESULT(res)
-    CHARACTER(len=max_event_str_len) :: res
-    CLASS(t_event) :: this
-    res = this%eventName
-  END FUNCTION t_event_getName
-
-  FUNCTION t_event_getFirstDatetime(this) RESULT(res)
-    TYPE(t_datetime)        :: res
-    CLASS(t_event)          :: this
-    res = this%eventFirstDateTime
-  END FUNCTION t_event_getFirstDatetime
-
-  FUNCTION t_event_getInterval(this) RESULT(res)
-    TYPE(t_timedelta)        :: res
-    CLASS(t_event)           :: this
-    res = this%eventInterval
-  END FUNCTION t_event_getInterval
-
-  FUNCTION t_event_getLastDatetime(this) RESULT(res)
-    TYPE(t_datetime)        :: res
-    CLASS(t_event)          :: this
-    res = this%eventLastDateTime
-  END FUNCTION t_event_getLastDatetime
-
-  FUNCTION t_event_getNextOccurrenceDatetime(this) RESULT(res)
-    TYPE(t_datetime)             :: res
-    CLASS(t_event)               :: this
-    res = this%triggerNextEventDateTime
-  END FUNCTION t_event_getNextOccurrenceDatetime
-
-  FUNCTION t_event_getPrevOccurrenceDatetime(this) RESULT(res)
-    TYPE(t_datetime)             :: res
-    CLASS(t_event)               :: this
-    res = this%triggeredPreviousEventDateTime
-  END FUNCTION t_event_getPrevOccurrenceDatetime
-
-  ! ================================================================================
-  ! event group section:
-  ! ================================================================================
-
-  FUNCTION t_eventGroup_constructor(name) RESULT(this_event_group)
-    TYPE(t_eventGroup) :: this_event_group
-    CHARACTER(len=*), INTENT(in) :: name
-    event_group_id = event_group_id + 1
-    this_event_group%event_group_id = event_group_id
-    this_event_group%event_group_name = name
-    this_event_group%first_event_in_group => NULL()
-    this_event_group%last_event_in_group => NULL()
-  END FUNCTION t_eventGroup_constructor
-
-  SUBROUTINE t_eventGroup_addToGroup(this, event_to_add)
-    CLASS(t_eventGroup) :: this
-    TYPE(t_event), TARGET :: event_to_add
-    IF (.NOT. ASSOCIATED(this%last_event_in_group)) THEN
-      this%first_event_in_group => event_to_add
-      NULLIFY (this%first_event_in_group%nextEventInGroup)
-    ELSE
-      this%last_event_in_group%nextEventInGroup => event_to_add
-      NULLIFY (event_to_add%nextEventInGroup)
-    END IF
-    this%last_event_in_group => event_to_add
-  END SUBROUTINE t_eventGroup_addToGroup
-
-  FUNCTION t_eventGroup_getGroupId(this) RESULT(group_id)
-    INTEGER(c_int64_t) :: group_id
-    CLASS(t_eventGroup) ::this
-    group_id = this%event_group_id
-  END FUNCTION t_eventGroup_getGroupId
-
-  FUNCTION t_eventGroup_getGroupName(this) RESULT(name)
-    CHARACTER(len=max_groupname_str_len) :: name
-    CLASS(t_eventGroup) :: this
-    name = this%event_group_name
-  END FUNCTION t_eventGroup_getGroupName
-
-  FUNCTION t_eventGroup_getFirstEvent(this) RESULT(event_ptr)
-    TYPE(t_event), POINTER :: event_ptr
-    CLASS(t_eventGroup) :: this
-    event_ptr => this%first_event_in_group
-  END FUNCTION t_eventGroup_getFirstEvent
diff --git a/src/mtime_t_juliandelta.inc b/src/mtime_t_juliandelta.inc
deleted file mode 100644
index 8506a798..00000000
--- a/src/mtime_t_juliandelta.inc
+++ /dev/null
@@ -1,30 +0,0 @@
-!! Copyright (c) 2013-2024 MPI-M, Luis Kornblueh, Rahul Sinha and DWD, Florian Prill. All rights reserved.
-!!
-!! SPDX-License-Identifier: BSD-3-Clause
-!!
-  ! ================================================================================
-  ! juliandelta section:
-  ! ================================================================================
-
-  ! generic assignment for constructors
-  !
-  FUNCTION t_juliandelta_assign_raw(sign, day, ms)
-    TYPE(t_juliandelta) :: t_juliandelta_assign_raw
-    CHARACTER(c_char), INTENT(in) :: sign
-    INTEGER(c_int64_t), INTENT(in) :: day
-    INTEGER(c_int64_t), INTENT(in) :: ms
-    TYPE(c_ptr) :: c_pointer
-    TYPE(juliandelta), POINTER :: jd_tmp
-
-    c_pointer = my_newjuliandelta(sign, day, ms)
-    !print *,sign, c_pointer
-    IF (.NOT. C_ASSOCIATED(c_pointer)) THEN
-      CALL handle_errno(1*100 + 1, __FILE__, __LINE__)
-      t_juliandelta_assign_raw%jd%sign = 'L'
-    ELSE
-      CALL C_F_POINTER(c_pointer, jd_tmp)
-      t_juliandelta_assign_raw%jd = jd_tmp
-      t_juliandelta_assign_raw%jd%sign = jd_tmp%sign
-      CALL my_deallocatejuliandelta(c_pointer)
-    END IF
-  END FUNCTION t_juliandelta_assign_raw
diff --git a/src/mtime_t_timedelta.inc b/src/mtime_t_timedelta.inc
deleted file mode 100644
index 6aaaaeeb..00000000
--- a/src/mtime_t_timedelta.inc
+++ /dev/null
@@ -1,417 +0,0 @@
-!! Copyright (c) 2013-2024 MPI-M, Luis Kornblueh, Rahul Sinha and DWD, Florian Prill. All rights reserved.
-!!
-!! SPDX-License-Identifier: BSD-3-Clause
-!!
-  ! ================================================================================
-  ! timedelta section:
-  ! ================================================================================
-
-! ToDo: Most of this file needs to be renovated for NOT USE mtime.
-
-  ! constructor for timedelta string
-  !
-  TYPE(t_timedelta) FUNCTION t_timedelta_assign_string(td_string) !OK-tested
-    CHARACTER(len=*), INTENT(in) :: td_string
-    TYPE(timedelta), POINTER     :: td_tmp
-    TYPE(c_ptr) :: c_pointer
-
-    c_pointer = my_newtimedeltafromstring(TRIM(ADJUSTL(td_string))//c_null_char)
-    IF (.NOT. C_ASSOCIATED(c_pointer)) THEN
-      CALL handle_errno(5*100 + 1, &
-        & __FILE__, &
-        & __LINE__)
-      t_timedelta_assign_string%td%sign = '?'
-    ELSE
-      CALL C_F_POINTER(c_pointer, td_tmp)
-      t_timedelta_assign_string%td = td_tmp
-      t_timedelta_assign_string%td%sign = td_tmp%sign
-      CALL my_deallocatetimedelta(c_pointer)
-    END IF
-  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
-    INTEGER                              :: errno
-    CALL getPTStringFromMS(INT(td_ms, c_int64_t), td_string, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    td_tmp => newTimedelta(td_string, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    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
-
-  ! constructor for integer milliseconds (integer)
-  !
-  TYPE(t_timedelta) FUNCTION t_timedelta_assign_ms_i8(td_ms)
-    INTEGER(c_int64_t), INTENT(in)              :: td_ms
-    TYPE(timedelta), POINTER             :: td_tmp
-    CHARACTER(len=max_timedelta_str_len) :: td_string
-    INTEGER                              :: errno
-    CALL getPTStringFromMS(INT(td_ms, c_int64_t), td_string, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    td_tmp => newTimedelta(td_string, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    t_timedelta_assign_ms_i8%td = td_tmp
-    t_timedelta_assign_ms_i8%td%sign = td_tmp%sign
-    CALL deallocateTimedelta(td_tmp)
-  END FUNCTION t_timedelta_assign_ms_i8
-
-  ! constructor for integer seconds (integer)
-  !
-  TYPE(t_timedelta) FUNCTION t_timedelta_assign_sec(td_sec)
-    INTEGER, INTENT(in) :: td_sec
-    t_timedelta_assign_sec = t_timedelta_assign_ms(td_sec*1000)
-  END FUNCTION t_timedelta_assign_sec
-
-  ! constructor for integer seconds (integer)
-  !
-  TYPE(t_timedelta) FUNCTION t_timedelta_assign_sec_i8(td_sec)
-    INTEGER(c_int64_t), INTENT(in) :: td_sec
-    t_timedelta_assign_sec_i8 = t_timedelta_assign_ms_i8(td_sec*1000)
-  END FUNCTION t_timedelta_assign_sec_i8
-
-  LOGICAL FUNCTION t_timedelta_equal(this, td)
-    CLASS(t_timedelta), INTENT(in) :: this
-    CLASS(t_timedelta), INTENT(in) :: td
-    t_timedelta_equal = (this%td == td%td)
-  END FUNCTION t_timedelta_equal
-
-  LOGICAL FUNCTION t_timedelta_not_equal(this, td)
-    CLASS(t_timedelta), INTENT(in) :: this
-    CLASS(t_timedelta), INTENT(in) :: td
-    t_timedelta_not_equal = (this%td /= td%td)
-  END FUNCTION t_timedelta_not_equal
-
-  LOGICAL FUNCTION t_timedelta_less_than(this, td)
-    CLASS(t_timedelta), INTENT(in) :: this
-    CLASS(t_timedelta), INTENT(in) :: td
-    t_timedelta_less_than = (this%td < td%td)
-  END FUNCTION t_timedelta_less_than
-
-  LOGICAL FUNCTION t_timedelta_greater_than(this, td)
-    CLASS(t_timedelta), INTENT(in) :: this
-    CLASS(t_timedelta), INTENT(in) :: td
-    t_timedelta_greater_than = (this%td > td%td)
-  END FUNCTION t_timedelta_greater_than
-
-  LOGICAL FUNCTION t_timedelta_less_than_or_equal(this, td)
-    CLASS(t_timedelta), INTENT(in) :: this
-    CLASS(t_timedelta), INTENT(in) :: td
-    t_timedelta_less_than_or_equal = (this%td <= td%td)
-  END FUNCTION t_timedelta_less_than_or_equal
-
-  LOGICAL FUNCTION t_timedelta_greater_than_or_equal(this, td)
-    CLASS(t_timedelta), INTENT(in) :: this
-    CLASS(t_timedelta), INTENT(in) :: td
-    t_timedelta_greater_than_or_equal = (this%td >= td%td)
-  END FUNCTION t_timedelta_greater_than_or_equal
-
-  FUNCTION t_timedelta_scalar_multiply_long(this, lambda) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    INTEGER(c_int64_t), INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(timedelta), POINTER             :: td_tmp, td_tmp2
-    INTEGER :: errno
-    td_tmp => newTimedelta(this%td, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    NULLIFY (td_tmp2)
-    td_tmp2 = td_tmp*lambda
-    IF (ASSOCIATED(td_tmp2)) THEN
-      CALL handle_errno(general_arithmetic_error, &
-        & __FILE__, &
-        & __LINE__)
-      RETURN
-    END IF
-    scaled_td%td = td_tmp2
-    scaled_td%td%sign = td_tmp2%sign
-    IF (ASSOCIATED(td_tmp)) CALL deallocateTimedelta(td_tmp)
-    IF (ASSOCIATED(td_tmp2)) CALL deallocateTimedelta(td_tmp2)
-  END FUNCTION t_timedelta_scalar_multiply_long
-
-  FUNCTION t_timedelta_scalar_multiply_inv_long(lambda, this) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    INTEGER(c_int64_t), INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(timedelta), POINTER             :: td_tmp, td_tmp2
-    INTEGER :: errno
-    td_tmp => newTimedelta(this%td, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    NULLIFY (td_tmp2)
-    td_tmp2 = td_tmp*lambda
-    IF (ASSOCIATED(td_tmp2)) THEN
-      CALL handle_errno(general_arithmetic_error, &
-        & __FILE__, &
-        & __LINE__)
-      RETURN
-    END IF
-    scaled_td%td = td_tmp2
-    scaled_td%td%sign = td_tmp2%sign
-    IF (ASSOCIATED(td_tmp)) CALL deallocateTimedelta(td_tmp)
-    IF (ASSOCIATED(td_tmp2)) CALL deallocateTimedelta(td_tmp2)
-  END FUNCTION t_timedelta_scalar_multiply_inv_long
-
-  FUNCTION t_timedelta_scalar_multiply_int(this, lambda) RESULT(scaled_td) !OK-tested
-    TYPE(t_timedelta), TARGET :: scaled_td
-    INTEGER(c_int32_t), INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(c_ptr) :: dummy_ptr
-
-    dummy_ptr = my_elementwisescalarmultiplytimedelta(C_LOC(this%td), INT(lambda, c_int64_t), C_LOC(scaled_td%td))
-    IF (.NOT. C_ASSOCIATED(dummy_ptr)) THEN
-      CALL handle_errno(0*100 + 2, &
-        & __FILE__, &
-        & __LINE__)
-      scaled_td%td%sign = '!'
-    END IF
-
-  END FUNCTION t_timedelta_scalar_multiply_int
-
-  FUNCTION t_timedelta_scalar_multiply_inv_int(lambda, this) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    INTEGER(c_int32_t), INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-
-    scaled_td = t_timedelta_scalar_multiply_int(this, lambda)
-  END FUNCTION t_timedelta_scalar_multiply_inv_int
-
-  FUNCTION t_timedelta_scalar_multiply_real(this, lambda) RESULT(scaled_td) !OK-tested
-    TYPE(t_timedelta), TARGET             :: scaled_td
-    REAL(c_double), INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(c_ptr)                            :: dummy_ptr
-
-    dummy_ptr = my_elementwisescalarmultiplytimedeltadp(C_LOC(this%td), lambda, C_LOC(scaled_td%td))
-    IF (.NOT. C_ASSOCIATED(dummy_ptr)) THEN
-      CALL handle_errno(0*100 + 2, &
-        & __FILE__, &
-        & __LINE__)
-      scaled_td%td%sign = '!'
-    END IF
-
-  END FUNCTION t_timedelta_scalar_multiply_real
-
-  FUNCTION t_timedelta_scalar_multiply_inv_real(lambda, this) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    REAL(c_double), INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-
-    scaled_td = t_timedelta_scalar_multiply_real(this, lambda)
-  END FUNCTION t_timedelta_scalar_multiply_inv_real
-
-  ! Convert t_timedelta object to string.
-  !
-  FUNCTION t_timedelta_toString(this) RESULT(string)
-    CHARACTER(len=max_timedelta_str_len)  :: string
-    CLASS(t_timedelta)                   :: this
-    TYPE(c_ptr) :: c_pointer, dummy_ptr
-    INTEGER :: i
-
-    string = ""
-
-    c_pointer = this%get_c_pointer()
-    CALL handle_errno(.NOT. C_ASSOCIATED(c_pointer), 0*100 + 2, &
-      & __FILE__, &
-      & __LINE__)
-    dummy_ptr = my_timedeltatostring(c_pointer, string)
-    CALL handle_errno(.NOT. C_ASSOCIATED(dummy_ptr), 4*100 + 6, &
-      & __FILE__, &
-      & __LINE__)
-
-    char_loop: DO i = 1, LEN(string)
-      IF (string(i:i) == c_null_char) EXIT char_loop
-    END DO char_loop
-    string(i:LEN(string)) = ' '
-
-    CALL my_deallocatetimedelta(c_pointer) !deallocate timedelta
-  END FUNCTION t_timedelta_toString
-
-  FUNCTION t_timedelta_divideInSecondsBy(this, divisor, referenceDateTime) RESULT(quotient)
-    CLASS(t_timedelta), INTENT(in)           :: this
-    TYPE(t_timedelta), INTENT(in)           :: divisor
-    TYPE(t_datetime), INTENT(IN), OPTIONAL :: referenceDateTime
-    TYPE(divisionquotienttimespan)           :: quotient
-    TYPE(timedelta), POINTER  :: tmp_dividend
-    TYPE(timedelta), POINTER  :: tmp_divisor
-    TYPE(datetime), POINTER  :: tmp_ref, tmp_dt
-    TYPE(t_datetime)                         :: dt_tmp
-    INTEGER                                  :: errno
-
-    tmp_dividend => newTimedelta(this%td, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    tmp_divisor => newTimedelta(divisor%td, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    IF (PRESENT(referenceDateTime)) THEN
-      tmp_ref => newDateTime(referenceDateTime%dt, errno)
-      CALL handle_errno(errno, &
-        & __FILE__, &
-        & __LINE__)
-    END IF
-
-    CALL divideTimeDeltaInSeconds(tmp_dividend, tmp_divisor, quotient, errno)
-
-    IF (errno /= no_error) THEN
-      IF (.NOT. PRESENT(referenceDateTime)) THEN
-        CALL handle_errno(errno, &
-          & __FILE__, &
-          & __LINE__)
-      ELSE
-        dt_tmp = referenceDateTime + this
-        tmp_dt => newDateTime(dt_tmp%dt, errno)
-        CALL handle_errno(errno, &
-          & __FILE__, &
-          & __LINE__)
-        CALL divideDatetimeDifferenceInSeconds(tmp_dt, tmp_ref, &
-             &                                tmp_divisor, quotient, errno)
-        CALL handle_errno(errno, &
-          & __FILE__, &
-          & __LINE__)
-
-        CALL deallocateDatetime(tmp_dt)
-      END IF
-    END IF
-
-    CALL deallocateTimedelta(tmp_dividend)
-    CALL deallocateTimedelta(tmp_divisor)
-    IF (PRESENT(referenceDateTime)) THEN
-      CALL deallocateDatetime(tmp_ref)
-    END IF
-  END FUNCTION t_timedelta_divideInSecondsBy
-
-  FUNCTION t_timedelta_toSeconds(this, td) RESULT(seconds)
-    CLASS(t_timedelta), INTENT(in) :: this
-    TYPE(t_datetime), INTENT(in) :: td
-    INTEGER(c_int64_t)             :: seconds
-
-    seconds = getTotalSecondsTimeDelta(this%td, td%dt)
-  END FUNCTION t_timedelta_toSeconds
-
-  FUNCTION t_timedelta_toMilliSeconds(this, td) RESULT(ms)
-    CLASS(t_timedelta), INTENT(in) :: this
-    TYPE(t_datetime), INTENT(in) :: td
-    INTEGER(c_int64_t)             :: ms
-
-    ms = getTotalMilliSecondsTimeDelta(this%td, td%dt)
-  END FUNCTION t_timedelta_toMilliSeconds
-
-  FUNCTION t_timedelta_toJulianDelta(this, dt) RESULT(jd)
-    TYPE(t_juliandelta) :: jd
-    CLASS(t_timedelta), INTENT(in) :: this
-    TYPE(t_datetime), INTENT(in) :: dt
-    TYPE(timedelta), POINTER    :: td_tmp
-    TYPE(datetime), POINTER    :: dt_tmp
-    TYPE(juliandelta), POINTER    :: jd_tmp
-    INTEGER                        :: errno
-    td_tmp => newTimedelta(this%td, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    dt_tmp => newDatetime(dt%dt, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    jd_tmp => newJuliandelta('+', 0_c_int64_t, 0_c_int64_t, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-
-    CALL timeDeltaToJulianDelta(td_tmp, dt_tmp, jd_tmp)
-    jd%jd = jd_tmp
-
-    CALL deallocateTimedelta(td_tmp)
-    CALL deallocateDatetime(dt_tmp)
-    CALL deallocateJuliandelta(jd_tmp)
-  END FUNCTION t_timedelta_toJulianDelta
-
-  FUNCTION t_julianDay_getDay(this) RESULT(d)
-    CLASS(t_julianday), INTENT(in) :: this
-    INTEGER(c_int64_t) :: d
-    d = this%jd%day
-  END FUNCTION t_julianDay_getDay
-
-  FUNCTION t_julianday_getFractionOfDayInMS(this) RESULT(ms)
-    CLASS(t_julianday), INTENT(in) :: this
-    INTEGER(c_int64_t) :: ms
-    ms = this%jd%ms
-  END FUNCTION t_julianday_getFractionOfDayInMS
-
-  FUNCTION t_julianday_toDateTime(this) RESULT(res)
-    TYPE(t_datetime) :: res
-    CLASS(t_julianday)           :: this
-    TYPE(julianday), POINTER    :: jd_tmp
-    INTEGER                      :: errno
-    TYPE(datetime), POINTER    :: dt_tmp
-
-    jd_tmp => newJulianDay(this%jd%day, this%jd%ms, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-    dt_tmp => newDatetime("1970-01-01T00:00:00", errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-
-    CALL getDatetimeFromJulianDay(jd_tmp, dt_tmp, errno)
-    CALL handle_errno(errno, &
-      & __FILE__, &
-      & __LINE__)
-
-    res%dt = dt_tmp
-    CALL deallocateJulianDay(jd_tmp)
-    CALL deallocateDatetime(dt_tmp)
-  END FUNCTION t_julianday_toDateTime
-
-  FUNCTION t_datetime_min(a, b) RESULT(res)
-    TYPE(t_datetime) :: a, b
-    TYPE(t_datetime) :: res
-
-    IF (a > b) THEN
-      res = b
-    ELSE
-      res = a
-    END IF
-  END FUNCTION t_datetime_min
-
-  FUNCTION t_datetime_max(a, b) RESULT(res)
-    TYPE(t_datetime) :: a, b
-    TYPE(t_datetime) :: res
-
-    IF (a > b) THEN
-      res = a
-    ELSE
-      res = b
-    END IF
-  END FUNCTION t_datetime_max
-
-  FUNCTION t_timedelta_get_c_pointer(this) RESULT(c_pointer)
-    TYPE(c_ptr) :: c_pointer
-    CLASS(t_timedelta) :: this
-    CHARACTER(c_char) ::c_sign
-
-    c_sign = this%td%SIGN(1:1)
-    c_pointer = my_newrawtimedelta(c_sign, INT(this%td%year, c_int64_t), this%td%month, this%td%day, &
-         &                         this%td%hour, this%td%minute, this%td%second, this%td%ms)
-    CALL handle_errno((.NOT. C_ASSOCIATED(c_pointer)), 5*100 + 2, &
-      & __FILE__, &
-      & __LINE__)
-  END FUNCTION t_timedelta_get_c_pointer
-- 
GitLab