https://www.cdslab.org/paramonte/fortran/2
Current view: top level - main - pm_dateTime@routines.F90 (source / functions) Hit Total Coverage
Test: ParaMonte 2.0.0 :: Serial Fortran - Code Coverage Report Lines: 345 346 99.7 %
Date: 2024-04-08 03:18:57 Functions: 99 99 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       2             : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       3             : !!!!                                                                                                                            !!!!
       4             : !!!!    ParaMonte: Parallel Monte Carlo and Machine Learning Library.                                                           !!!!
       5             : !!!!                                                                                                                            !!!!
       6             : !!!!    Copyright (C) 2012-present, The Computational Data Science Lab                                                          !!!!
       7             : !!!!                                                                                                                            !!!!
       8             : !!!!    This file is part of the ParaMonte library.                                                                             !!!!
       9             : !!!!                                                                                                                            !!!!
      10             : !!!!    LICENSE                                                                                                                 !!!!
      11             : !!!!                                                                                                                            !!!!
      12             : !!!!       https://github.com/cdslaborg/paramonte/blob/main/LICENSE.md                                                          !!!!
      13             : !!!!                                                                                                                            !!!!
      14             : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      15             : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      16             : 
      17             : !>  \brief
      18             : !>  This file contains procedure implementations of [pm_dateTime](@ref pm_dateTime).
      19             : !>
      20             : !>  \finmain
      21             : !>
      22             : !>  \author
      23             : !>  \AmirShahmoradi, March 23, 2012, 5:33 PM, National Institute for Fusion Studies, The University of Texas at Austin
      24             : 
      25             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      26             : 
      27             : submodule (pm_dateTime) routines
      28             : 
      29             :     use pm_val2str, only: getStr
      30             : #if CHECK_ENABLED
      31             :     use pm_err, only: getFine
      32             :     use pm_err, only: setAsserted
      33             : #define CHECK_ASSERTION(LINE,ASSERTION,MSG) \
      34             : call setAsserted(ASSERTION,getFine(__FILE__,LINE)//MODULE_NAME//MSG);
      35             : #else
      36             : #define CHECK_ASSERTION(LINE,ASSERTION,MSG) continue;
      37             : #endif
      38             : 
      39             :     implicit none
      40             : 
      41             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      42             : 
      43             : contains
      44             : 
      45             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      46             : 
      47             : #define isValidZone_ENABLED 1
      48             : 
      49             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      50             : 
      51             : #define isValidZone_IK_ENABLED 1
      52             : 
      53      295524 :     module procedure isValidZone_IK
      54             :         use pm_kind, only: IKC => IK
      55             : #include "pm_dateTime@routines.inc.F90"
      56      295524 :     end procedure
      57             : 
      58             : !#if IK5_ENABLED
      59             : !    module procedure isValidZone_IK5
      60             : !        use pm_kind, only: IKC => IK5
      61             : !#include "pm_dateTime@routines.inc.F90"
      62             : !    end procedure
      63             : !#endif
      64             : !
      65             : !#if IK4_ENABLED
      66             : !    module procedure isValidZone_IK4
      67             : !        use pm_kind, only: IKC => IK4
      68             : !#include "pm_dateTime@routines.inc.F90"
      69             : !    end procedure
      70             : !#endif
      71             : !
      72             : !#if IK3_ENABLED
      73             : !    module procedure isValidZone_IK3
      74             : !        use pm_kind, only: IKC => IK3
      75             : !#include "pm_dateTime@routines.inc.F90"
      76             : !    end procedure
      77             : !#endif
      78             : !
      79             : !#if IK2_ENABLED
      80             : !    module procedure isValidZone_IK2
      81             : !        use pm_kind, only: IKC => IK2
      82             : !#include "pm_dateTime@routines.inc.F90"
      83             : !    end procedure
      84             : !#endif
      85             : !
      86             : !#if IK1_ENABLED
      87             : !    module procedure isValidZone_IK1
      88             : !        use pm_kind, only: IKC => IK1
      89             : !#include "pm_dateTime@routines.inc.F90"
      90             : !    end procedure
      91             : !#endif
      92             : 
      93             : #undef isValidZone_IK_ENABLED
      94             : 
      95             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      96             : 
      97             : #undef isValidZone_ENABLED
      98             : 
      99             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     100             : 
     101           1 :     module procedure getZoneAbbrC
     102           1 :         abbr = getZoneAbbr(getZone())
     103           1 :     end procedure
     104             : 
     105             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     106             : 
     107        1269 :     module procedure getZoneAbbrZ
     108             :         use pm_arraySort, only: isAscending ! LCOV_EXCL_LINE
     109             :         use pm_arraySearch, only: getBin
     110             :         use pm_kind, only: SKC => SK
     111             :         integer(IK) :: bin
     112        1269 :         CHECK_ASSERTION(__LINE__, isAscending(timeZone%zone), SK_"@getZoneAbbr(): The condition `isAscending(timeZone%zone)` must hold. timeZone%zone = "//getStr(timeZone%zone)) ! fpp
     113        1269 :         bin = getBin(timeZone%zone, zone) ! we cannot use `findloc()` intrinsic because the time and zone may not be in the constant timezone.
     114        1269 :         if (0_IK < bin .and. bin < size(timeZone%zone, kind = IK)) then
     115        1266 :             abbr = trim(timeZone%Abbr(bin))
     116           3 :         elseif (zone == int(14 * 60, kind(zone))) then
     117           0 :             abbr = trim(timeZone%Abbr(size(timeZone%zone, kind = IK)))
     118             :         else
     119           3 :             abbr = SKC_""
     120             :         end if
     121        1269 :     end procedure
     122             : 
     123             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     124             : 
     125           3 :     module procedure getHour12C
     126             :         use pm_kind, only: IKC => IK
     127           3 :         hour12 = getHour12(getHour())
     128           3 :     end procedure
     129             : 
     130             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     131             : 
     132        2683 :     module procedure getHour12H
     133             :         use pm_kind, only: IKC => IK
     134        2683 :         CHECK_ASSERTION(__LINE__, 0_IKC <= hour .and. hour <= 24_IKC, SK_"@getHour12(): The condition `0_IKC <= hour .and. hour <= 24_IKC` must hold. hour = "//getStr(hour)) ! fpp
     135        2683 :         if (12_IKC < hour) then
     136        1278 :             hour12 = hour - 12_IKC
     137        1405 :         elseif (0_IKC < hour) then
     138             :             hour12 = hour
     139             :         else
     140             :             hour12 = 12_IKC
     141             :         end if
     142        2683 :     end procedure
     143             : 
     144             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     145             : 
     146        1011 :     module procedure getCountDaysInYear
     147             :         use pm_kind, only: IKC => IK
     148        1011 :         if (isLeapYear(year)) then
     149             :             countDays = 366_IKC
     150             :         else
     151             :             countDays = 365_IKC
     152             :         end if
     153        1011 :     end procedure
     154             : 
     155             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     156             : 
     157        1560 :     module procedure getCountDaysInMonth
     158             :         use pm_kind, only: IKC => IK
     159        4680 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month), SK_"@getCountDays(): The input `year` and `month` must be a valid Gregorian date. year, month = "//getStr([year, month])) ! fpp
     160        1560 :         if (isLeapYear(year)) then
     161         413 :             countDays = DAYS_OF_MONTH_LEAP(month)
     162             :         else
     163        1147 :             countDays = DAYS_OF_MONTH(month)
     164             :         end if
     165        1560 :     end procedure
     166             : 
     167             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     168             : 
     169        4605 :     module procedure getCountWeeksInYear
     170             :         use pm_kind, only: IKC => IK
     171             :         integer(IKC) :: weekDayDec31Current, weekDayDec31Previous
     172             :         !weekDayDec31 = modulo(year + floor(0.25 * year, IKC) - floor(0.01 * year, IKC) + floor(0.0025 * year, IKC)), 7_IKC)
     173        4605 :         weekDayDec31Current = getWeekDayISO(year, 12_IKC, 31_IKC)
     174        4605 :         weekDayDec31Previous = getWeekDayISO(year - 1_IKC, 12_IKC, 31_IKC)
     175        4605 :         if (weekDayDec31Current == 4_IKC .or. weekDayDec31Previous == 3_IKC) then ! current year ends Thursday or previous year ends Wednesday.
     176             :             countWeeks = 53_IKC
     177             :         else
     178             :             countWeeks = 52_IKC
     179             :         end if
     180        4605 :     end procedure
     181             : 
     182             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     183             : 
     184         549 :     module procedure getCountWeeksInMonth
     185             :         use pm_kind, only: IKC => IK
     186             :         integer(IKC) :: countDays, weekdayStartISO
     187        1647 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month), SK_"@getCountWeeks(): The input `year` and `month` must be a valid Gregorian date. year, month = "//getStr([year, month])) ! fpp
     188         549 :         weekdayStartISO = getWeekDayISO(year, month, 1_IKC)
     189         549 :         countDays = getCountDays(year, month)
     190         549 :         if (countDays == 31_IKC) then
     191         329 :             if (weekdayStartISO < 2_IKC .or. weekdayStartISO > 4_IKC) then
     192             :                 countWeeks = 4_IKC
     193             :             else
     194             :                 countWeeks = 5_IKC
     195             :             end if
     196         220 :         elseif (countDays == 30_IKC) then
     197         176 :             if (weekdayStartISO < 3_IKC .or. weekdayStartISO > 4_IKC) then
     198             :                 countWeeks = 4_IKC
     199             :             else
     200             :                 countWeeks = 5_IKC
     201             :             end if
     202          44 :         elseif (countDays == 28_IKC) then
     203             :             countWeeks = 4_IKC
     204          12 :         elseif (countDays == 29_IKC) then
     205          12 :             if (weekdayStartISO /= 4_IKC) then
     206             :                 countWeeks = 4_IKC
     207             :             else
     208             :                 countWeeks = 5_IKC
     209             :             end if
     210             :         end if
     211         549 :     end procedure
     212             : 
     213             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     214             : 
     215          11 :     module procedure getWeekDayCurrent
     216             :         integer(IK) :: Values(8)
     217          11 :         call date_and_time(values = Values)
     218          99 :         CHECK_ASSERTION(__LINE__, all(Values /= -huge(0_IK)), SK_"@getWeekDay(): The processor does not possess a clock.")
     219          11 :         weekday = getWeekDay(year = Values(1), month = Values(2), day = Values(3))
     220          11 :     end procedure
     221             : 
     222             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     223             : 
     224           7 :     module procedure getWeekDayValues
     225           7 :         CHECK_ASSERTION(__LINE__, size(Values) > 2, SK_"@getWeekDay(): The condition `size(Values) > 2` must hold. size(Values) = "//getStr(size(Values)))
     226           7 :         CHECK_ASSERTION(__LINE__, size(Values) < 9, SK_"@getWeekDay(): The condition `size(Values) < 9` must hold. size(Values) = "//getStr(size(Values)))
     227           7 :         weekday = getWeekDay(year = Values(1), month = Values(2), day = Values(3))
     228           7 :     end procedure
     229             : 
     230             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     231             : 
     232       20287 :     module procedure getWeekDayTriple
     233             :         use pm_kind, only: RKC => RK, IKC => IK
     234             :         !integer(IK) :: century
     235             :         !integer(IK) :: month_
     236             :         !integer(IK) :: year_
     237       81148 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month, day), SK_"@getWeekDay(): The input [year, month, day] must correspond to a valid Gregorian date. year, month, day = "//getStr([year, month, day]))
     238       20287 :         weekday = modulo(floor(getJulianDay(year, month, day) + 1.5_RKC, IKC), 7_IKC)
     239             :         !if (month > 2_IK) then
     240             :         !    month_ = month + 1_IK
     241             :         !    year_ = year
     242             :         !else
     243             :         !    month_ = month + 13_IK
     244             :         !    year_ = year - 1_IK
     245             :         !end if
     246             :         !century = year_ / 100_IK
     247             :         !year_ = year_ - century * 100_IK
     248             :         !weekday = modulo(day + int(2.6 * real(month_), IK) + year_ + year_ / 4_IK + century / 4_IK - 2_IK * century, 7_IK)
     249       20287 :     end procedure
     250             : 
     251             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     252             : 
     253           4 :     module procedure getWeekYearCurrent
     254             :         use pm_kind, only: IKC => IK
     255             :         integer(IKC) :: WeekDate(3)
     256           4 :         WeekDate(1:3) = getWeekDate()
     257           4 :         weekYear = WeekDate(1)
     258           4 :     end procedure
     259             : 
     260             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     261             : 
     262        2683 :     module procedure getWeekYearValues
     263             :         use pm_kind, only: IKC => IK
     264             :         integer(IKC) :: WeekDate(3)
     265        2683 :         WeekDate(1:3) = getWeekDate(Values)
     266        2683 :         weekYear = WeekDate(1)
     267        2683 :     end procedure
     268             : 
     269             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     270             : 
     271         209 :     module procedure getWeekYearTriple
     272             :         use pm_kind, only: IKC => IK
     273             :         integer(IKC) :: WeekDate(3)
     274         209 :         WeekDate(1:3) = getWeekDate(year, month, day)
     275         209 :         weekYear = WeekDate(1)
     276         209 :     end procedure
     277             : 
     278             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     279             : 
     280           7 :     module procedure getWeekDateCurrent
     281             :         integer(IK) :: Values(8)
     282           7 :         call date_and_time(values = Values)
     283          63 :         CHECK_ASSERTION(__LINE__, all(Values /= -huge(0_IK)), SK_"@getWeekDate(): The processor does not possess a clock.")
     284           7 :         WeekDate(1:3) = getWeekDate(year = Values(1), month = Values(2), day = Values(3))
     285           7 :     end procedure
     286             : 
     287             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     288             : 
     289        2894 :     module procedure getWeekDateValues
     290        2894 :         CHECK_ASSERTION(__LINE__, size(Values) > 2, SK_"@getWeekDate(): The condition `size(Values) > 2` must hold. size(Values) = "//getStr(size(Values)))
     291        2894 :         CHECK_ASSERTION(__LINE__, size(Values) < 9, SK_"@getWeekDate(): The condition `size(Values) < 9` must hold. size(Values) = "//getStr(size(Values)))
     292        2894 :         WeekDate(1:3) = getWeekDate(year = Values(1), month = Values(2), day = Values(3))
     293        2894 :     end procedure
     294             : 
     295             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     296             : 
     297        3128 :     module procedure getWeekDateTriple
     298             :         use pm_kind, only: IKC => IK
     299       12512 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month, day), SK_"@getWeekDate(): The input [year, month, day] must correspond to a valid Gregorian date. year, month, day = "//getStr([year, month, day]))
     300        3128 :         WeekDate(1) = year
     301        3128 :         WeekDate(3) = getWeekDayISO(year, month, day)
     302        3128 :         WeekDate(2) = (10_IK + getOrdinalDay(year, month, day) - WeekDate(3)) / 7_IK
     303        3128 :         if (WeekDate(2) == 0_IK) then
     304          23 :             WeekDate(1) = year - 1_IK
     305          23 :             WeekDate(2) = getCountWeeks(WeekDate(1))
     306        3105 :         elseif (WeekDate(2) > getCountWeeks(year)) then
     307          13 :             WeekDate(1) = year + 1_IK
     308          13 :             WeekDate(2) = 1_IK
     309             :         end if
     310        3128 :     end procedure
     311             : 
     312             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     313             : 
     314           8 :     module procedure getWeekDayISOCurrent
     315             :         integer(IK) :: Values(8)
     316           8 :         call date_and_time(values = Values)
     317           8 :         weekday = getWeekDayISO(year = Values(1), month = Values(2), day = Values(3))
     318           8 :     end procedure
     319             : 
     320             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     321             : 
     322           7 :     module procedure getWeekDayISOValues
     323           7 :         weekday = getWeekDayISO(year = Values(1), month = Values(2), day = Values(3))
     324           7 :     end procedure
     325             : 
     326             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     327             : 
     328       18882 :     module procedure getWeekDayISOTriple
     329       18882 :         weekday = getWeekDay(year, month, day)
     330       18882 :         if (weekday == 0_IK) weekday = 7_IK
     331       18882 :     end procedure
     332             : 
     333             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     334             : 
     335         110 :     module procedure getCountLeapYears
     336             :         integer(IK) :: year
     337             :         !CHECK_ASSERTION(__LINE__, until /= 0_IK, SK_"@getCountLeapYears(): The condition `until /= 0` must hold. until = "//getStr(until))
     338         110 :         if (until > 0_IK) then
     339             :             year = until
     340             :         else
     341          52 :             year = until - 4_IK
     342             :         end if
     343         110 :         countLeapYear = year / 4_IK - year / 100_IK + year / 400_IK
     344         110 :     end procedure
     345             : 
     346             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     347             : 
     348          31 :     module procedure getCountLeapYearsSince
     349             :         !CHECK_ASSERTION(__LINE__, until /= 0_IK, SK_"@getCountLeapYearsSince(): The condition `until /= 0` must hold. until = "//getStr(until))
     350             :         !CHECK_ASSERTION(__LINE__, since /= 0_IK, SK_"@getCountLeapYearsSince(): The condition `since /= 0` must hold. since = "//getStr(since))
     351          93 :         CHECK_ASSERTION(__LINE__, since <= until, SK_"@getCountLeapYears(): The condition `since <= until` must hold. since, until = "//getStr([since, until]))
     352          31 :         countLeapYear = getCountLeapYears(until) - getCountLeapYears(since)
     353          31 :         if (since > 0_IK .and. until > 0_IK) then
     354           9 :             if (isLeapYear(since)) countLeapYear = countLeapYear + 1_IK
     355          22 :         elseif (since <= 0_IK .and. until <= 0_IK) then
     356          12 :             if (isLeapYear(until)) countLeapYear = countLeapYear + 1_IK
     357             :         end if
     358          31 :     end procedure
     359             : 
     360             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     361             : 
     362           1 :     module procedure isLastDayInMonthC
     363           1 :         lastDayInMonth = isLastDayInMonth(getDateTime())
     364           1 :     end procedure
     365             : 
     366             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     367             : 
     368           3 :     module procedure isLastDayInMonthValues
     369           3 :         CHECK_ASSERTION(__LINE__, size(Values) > 2, SK_"@isLastDayInMonth(): The condition `size(Values) > 2` must hold. size(Values) = "//getStr(size(Values)))
     370           3 :         CHECK_ASSERTION(__LINE__, size(Values) < 9, SK_"@isLastDayInMonth(): The condition `size(Values) < 9` must hold. size(Values) = "//getStr(size(Values)))
     371           3 :         lastDayInMonth = isLastDayInMonth(year = Values(1), month = Values(2), day = Values(3))
     372           3 :     end procedure
     373             : 
     374             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     375             : 
     376      101814 :     module procedure isLastDayInMonthTriple
     377      407256 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month, day), SK_"@isLastDayInMonth(): The input [year, month, day] must correspond to a valid Gregorian date. year, month, day = "//getStr([year, month, day]))
     378      101814 :         if (month /= 2_IK) then
     379             :             lastDayInMonth = logical((month ==  1_IK .and. day == 31_IK) & ! LCOV_EXCL_LINE
     380             :                                 .or. (month ==  3_IK .and. day == 31_IK) & ! LCOV_EXCL_LINE
     381             :                                 .or. (month ==  4_IK .and. day == 30_IK) & ! LCOV_EXCL_LINE
     382             :                                 .or. (month ==  5_IK .and. day == 31_IK) & ! LCOV_EXCL_LINE
     383             :                                 .or. (month ==  6_IK .and. day == 30_IK) & ! LCOV_EXCL_LINE
     384             :                                 .or. (month ==  7_IK .and. day == 31_IK) & ! LCOV_EXCL_LINE
     385             :                                 .or. (month ==  8_IK .and. day == 31_IK) & ! LCOV_EXCL_LINE
     386             :                                 .or. (month ==  9_IK .and. day == 30_IK) & ! LCOV_EXCL_LINE
     387             :                                 .or. (month == 10_IK .and. day == 31_IK) & ! LCOV_EXCL_LINE
     388             :                                 .or. (month == 11_IK .and. day == 30_IK) & ! LCOV_EXCL_LINE
     389       96973 :                                 .or. (month == 12_IK .and. day == 31_IK), LK)
     390             :         else
     391        4841 :             if (isLeapYear(year)) then
     392        1234 :                 lastDayInMonth = logical(day == 29_IK, LK)
     393             :             else
     394        3607 :                 lastDayInMonth = logical(day == 28_IK, LK)
     395             :             end if
     396             :         end if
     397      101814 :     end procedure
     398             : 
     399             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     400             : 
     401           1 :     module procedure getDateAfterC
     402           1 :         DateAfter(1:3) = getDateAfter(getDateTime())
     403           1 :     end procedure
     404             : 
     405             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     406             : 
     407       30003 :     module procedure getDateAfterValues
     408       30003 :         CHECK_ASSERTION(__LINE__, size(Values) > 2, SK_"@getDateAfter(): The condition `size(Values) > 2` must hold. size(Values) = "//getStr(size(Values)))
     409       30003 :         CHECK_ASSERTION(__LINE__, size(Values) < 9, SK_"@getDateAfter(): The condition `size(Values) < 9` must hold. size(Values) = "//getStr(size(Values)))
     410       30003 :         DateAfter(1:3) = getDateAfter(year = Values(1), month = Values(2), day = Values(3))
     411       30003 :     end procedure
     412             : 
     413             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     414             : 
     415       81808 :     module procedure getDateAfterTriple
     416             :         use pm_kind, only: IKC => IK
     417      327232 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month, day), SK_"@getDateAfter(): The input [year, month, day] must correspond to a valid Gregorian date. year, month, day = "//getStr([year, month, day]))
     418       81808 :         if (isLastDayInMonth(year, month, day)) then
     419        1380 :             if (month < 12_IK) then
     420        1245 :                 DateAfter(1) = year
     421        1245 :                 DateAfter(2) = month + 1_IK
     422        1245 :                 DateAfter(3) = 1_IK
     423             :             else
     424         135 :                 DateAfter(1) = year + 1_IKC
     425             :                 !if (year /= -1_IKC) then
     426             :                 !    DateAfter(1) = year + 1_IKC
     427             :                 !else
     428             :                 !    DateAfter(1) = 1_IKC
     429             :                 !end if
     430         135 :                 DateAfter(2) = 1_IK
     431         135 :                 DateAfter(3) = 1_IK
     432             :             end if
     433             :         else
     434       80428 :             DateAfter(1) = year
     435       80428 :             DateAfter(2) = month
     436       80428 :             DateAfter(3) = day + 1_IK
     437             :         end if
     438       81808 :     end procedure
     439             : 
     440             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     441             : 
     442           1 :     module procedure getDateBeforeC
     443           1 :         DateBefore(1:3) = getDateBefore(getDateTime())
     444           1 :     end procedure
     445             : 
     446             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     447             : 
     448       20003 :     module procedure getDateBeforeValues
     449       20003 :         CHECK_ASSERTION(__LINE__, size(Values) > 2, SK_"@getDateBefore(): The condition `size(Values) > 2` must hold. size(Values) = "//getStr(size(Values)))
     450       20003 :         CHECK_ASSERTION(__LINE__, size(Values) < 9, SK_"@getDateBefore(): The condition `size(Values) < 9` must hold. size(Values) = "//getStr(size(Values)))
     451       20003 :         DateBefore(1:3) = getDateBefore(year = Values(1), month = Values(2), day = Values(3))
     452       20003 :     end procedure
     453             : 
     454             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     455             : 
     456       50192 :     module procedure getDateBeforeTriple
     457             :         use pm_kind, only: IKC => IK
     458      200768 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month, day), SK_"@getDateBefore(): The input [year, month, day] must correspond to a valid Gregorian date. year, month, day = "//getStr([year, month, day]))
     459       50192 :         if (day > 1_IKC) then
     460       49202 :             DateBefore(1) = year
     461       49202 :             DateBefore(2) = month
     462       49202 :             DateBefore(3) = day - 1_IKC
     463             :         else
     464         990 :             if (month > 1_IKC) then
     465         893 :                 DateBefore(1) = year
     466         893 :                 DateBefore(2) = month - 1_IKC
     467         893 :                 if (isLeapYear(year)) then
     468         203 :                     DateBefore(3) = DAYS_OF_MONTH_LEAP(DateBefore(2))
     469             :                 else
     470         690 :                     DateBefore(3) = DAYS_OF_MONTH(DateBefore(2))
     471             :                 end if
     472             :             else ! month == 1_IKC
     473             :                 !if (year /= 1_IKC) then
     474             :                 !    DateBefore(1) = year - 1_IKC
     475             :                 !else
     476             :                 !    DateBefore(1) = -1_IKC ! leap year
     477             :                 !end if
     478          97 :                 DateBefore(1) = year - 1_IKC
     479          97 :                 DateBefore(2) = 12_IKC
     480          97 :                 DateBefore(3) = 31_IKC ! December always has 31 days.
     481             :             end if
     482             :         end if
     483       50192 :     end procedure
     484             : 
     485             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     486             : 
     487           3 :     module procedure getOrdinalDayCurrent
     488             :         integer(IK) :: Values(8)
     489           3 :         call date_and_time(values = Values)
     490           3 :         ordinalDay = getOrdinalDay(year = Values(1), month = Values(2), day = Values(3))
     491           3 :     end procedure
     492             : 
     493             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     494             : 
     495       11323 :     module procedure getOrdinalDayValues
     496       11323 :         CHECK_ASSERTION(__LINE__, size(Values) > 2, SK_"@getOrdinalDay(): The condition `size(Values) > 2` must hold. size(Values) = "//getStr(size(Values)))
     497       11323 :         CHECK_ASSERTION(__LINE__, size(Values) < 9, SK_"@getOrdinalDay(): The condition `size(Values) < 9` must hold. size(Values) = "//getStr(size(Values)))
     498       11323 :         ordinalDay = getOrdinalDay(year = Values(1), month = Values(2), day = Values(3))
     499       11323 :     end procedure
     500             : 
     501             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     502             : 
     503       25900 :     module procedure getOrdinalDayTriple
     504             :         use pm_kind, only: IKC => IK
     505             :         integer(IKC), parameter :: CUMULATIVE_MONTH_DAYS(12) = [0_IKC, 31_IKC, 59_IKC, 90_IKC, 120_IKC, 151_IKC, 181_IKC, 212_IKC, 243_IKC, 273_IKC, 304_IKC, 334_IKC]
     506      103600 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month, day), SK_"@getOrdinalDay(): The input [year, month, day] must correspond to a valid Gregorian date. year, month, day = "//getStr([year, month, day]))
     507       25900 :         ordinalDay = CUMULATIVE_MONTH_DAYS(month) + day
     508       25900 :         if (isLeapYear(year) .and. month > 2_IK) ordinalDay = ordinalDay + 1_IK
     509       25900 :     end procedure
     510             : 
     511             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     512             : 
     513           3 :     module procedure getWeekNumberCurrent
     514             :         integer(IK) :: Values(8)
     515           3 :         call date_and_time(values = Values)
     516           3 :         weekNumber = getWeekNumber(year = Values(1), month = Values(2), day = Values(3))
     517           3 :     end procedure
     518             : 
     519             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     520             : 
     521          18 :     module procedure getWeekNumberValues
     522          18 :         CHECK_ASSERTION(__LINE__, size(Values) > 2, SK_"@getWeekNumber(): The condition `size(Values) > 2` must hold. size(Values) = "//getStr(size(Values)))
     523          18 :         CHECK_ASSERTION(__LINE__, size(Values) < 9, SK_"@getWeekNumber(): The condition `size(Values) < 9` must hold. size(Values) = "//getStr(size(Values)))
     524          18 :         weekNumber = getWeekNumber(year = Values(1), month = Values(2), day = Values(3))
     525          18 :     end procedure
     526             : 
     527             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     528             : 
     529        1434 :     module procedure getWeekNumberTriple
     530             :         use pm_kind, only: IKC => IK
     531             :         integer(IKC), parameter :: CUMULATIVE_MONTH_DAYS(12) = [0_IKC, 31_IKC, 59_IKC, 90_IKC, 120_IKC, 151_IKC, 181_IKC, 212_IKC, 243_IKC, 273_IKC, 304_IKC, 334_IKC]
     532        5736 :         CHECK_ASSERTION(__LINE__, isValidDateTime(year, month, day), SK_"@getWeekNumber(): The input [year, month, day] must correspond to a valid Gregorian date. year, month, day = "//getStr([year, month, day]))
     533        1434 :         weekNumber = (10_IK + getOrdinalDay(year, month, day) - getWeekDayISO(year, month, day)) / 7_IK
     534        1434 :         if (weekNumber == 0_IK) then
     535           7 :             weekNumber = getCountWeeks(year - 1_IK)
     536        1427 :         elseif (weekNumber > getCountWeeks(year)) then
     537             :             weekNumber = 1_IK
     538             :         end if
     539        1434 :     end procedure
     540             : 
     541             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     542             : 
     543       15016 :     module procedure getDateTimeDiffValues
     544       15016 :         CHECK_ASSERTION(__LINE__, size(Values1) == 8, SK_"@getDateTimeDiff(): The condition `size(Values1) == 8` must hold. size(Values1) = "//getStr(size(Values1)))
     545       15016 :         CHECK_ASSERTION(__LINE__, size(Values2) == 8, SK_"@getDateTimeDiff(): The condition `size(Values2) == 8` must hold. size(Values2) = "//getStr(size(Values2)))
     546       15016 :         if (Values1(4) == Values2(4)) then ! identical timezone.
     547             :             dateTimeDiff= getJulianDay(Values1(1), Values1(2), Values1(3), 0_IK, Values1(5), Values1(6), Values1(7), Values1(8)) & ! LCOV_EXCL_LINE
     548       15011 :                         - getJulianDay(Values2(1), Values2(2), Values2(3), 0_IK, Values2(5), Values2(6), Values2(7), Values2(8))
     549             :         else ! different timezones.
     550             :             dateTimeDiff= getJulianDay(Values1(1), Values1(2), Values1(3), Values1(4), Values1(5), Values1(6), Values1(7), Values1(8)) & ! LCOV_EXCL_LINE
     551           5 :                         - getJulianDay(Values2(1), Values2(2), Values2(3), Values2(4), Values2(5), Values2(6), Values2(7), Values2(8))
     552             :         end if
     553       15016 :     end procedure
     554             : 
     555             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     556             : 
     557           4 :     module procedure isMorningCurrent
     558             :         use pm_kind, only: IKC => IK
     559             :         integer(IKC) :: Values(8)
     560           4 :         call date_and_time(values = Values)
     561           4 :         morning = Values(5) < 12_IKC
     562           4 :     end procedure
     563             : 
     564             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     565             : 
     566        2790 :     module procedure isMorningZ
     567             :         use pm_kind, only: IKC => IK
     568        2790 :         morning = getHour(zone) < 12_IKC
     569        2790 :     end procedure
     570             : 
     571             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     572             : 
     573       10625 :     module procedure isMorningJD
     574             :         use pm_kind, only: RKC => RK
     575       10625 :         morning = logical(julianDay - real(floor(julianDay, IK), RKC) >= 0.5_RKC, LK)
     576       10625 :     end procedure
     577             : 
     578             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     579             : 
     580        5311 :     module procedure isMorningJDZ
     581             :         use pm_kind, only: RKC => RK
     582             :         real(RKC), parameter :: INV_MINUTES_PER_DAY = 1._RKC / MINUTES_PER_DAY
     583        5311 :         CHECK_ASSERTION(__LINE__, isValidZone(zone), SK_"@isMorning(): The condition `isValidZone(zone)` must hold. zone = "//getStr(zone)) ! fpp
     584        5311 :         morning = isMorning(julianDay + zone * INV_MINUTES_PER_DAY)
     585        5311 :     end procedure
     586             : 
     587             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     588             : 
     589             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     590             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     591             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     592             : 
     593             : #define getJulianDay_ENABLED 1
     594             : 
     595             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     596             : 
     597             : #define getJulianDayC_ENABLED 1
     598             : 
     599           3 :     module procedure getJulianDayC
     600             :         use pm_kind, only: IKC => IK, RKC => RK
     601             : #include "pm_dateTime@routines.inc.F90"
     602           3 :     end procedure
     603             : 
     604             : #undef getJulianDayC_ENABLED
     605             : 
     606             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     607             : 
     608             : #define getJulianDayV_ENABLED 1
     609             : 
     610      119934 :     module procedure getJulianDayV
     611             :         use pm_kind, only: IKC => IK, RKC => RK
     612             : #include "pm_dateTime@routines.inc.F90"
     613      119934 :     end procedure
     614             : 
     615             : #undef getJulianDayV_ENABLED
     616             : 
     617             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     618             : 
     619             : #define getJulianDayY_ENABLED 1
     620             : 
     621           9 :     module procedure getJulianDayY
     622             :         use pm_kind, only: IKC => IK, RKC => RK
     623             : #include "pm_dateTime@routines.inc.F90"
     624           9 :     end procedure
     625             : 
     626             : #undef getJulianDayY_ENABLED
     627             : 
     628             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     629             : 
     630             : #define getJulianDayYM_ENABLED 1
     631             : 
     632           9 :     module procedure getJulianDayYM
     633             :         use pm_kind, only: IKC => IK, RKC => RK
     634             : #include "pm_dateTime@routines.inc.F90"
     635           9 :     end procedure
     636             : 
     637             : #undef getJulianDayYM_ENABLED
     638             : 
     639             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     640             : 
     641             : #define getJulianDayYMD_ENABLED 1
     642             : 
     643       20316 :     module procedure getJulianDayYMD
     644             :         use pm_kind, only: IKC => IK, RKC => RK
     645             : #include "pm_dateTime@routines.inc.F90"
     646       20316 :     end procedure
     647             : 
     648             : #undef getJulianDayYMD_ENABLED
     649             : 
     650             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     651             : 
     652             : #define getJulianDayYMDZ_ENABLED 1
     653             : 
     654          17 :     module procedure getJulianDayYMDZ
     655             :         use pm_kind, only: IKC => IK, RKC => RK
     656             : #include "pm_dateTime@routines.inc.F90"
     657          17 :     end procedure
     658             : 
     659             : #undef getJulianDayYMDZ_ENABLED
     660             : 
     661             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     662             : 
     663             : #define getJulianDayYMDZH_ENABLED 1
     664             : 
     665          30 :     module procedure getJulianDayYMDZH
     666             :         use pm_kind, only: IKC => IK, RKC => RK
     667             : #include "pm_dateTime@routines.inc.F90"
     668          30 :     end procedure
     669             : 
     670             : #undef getJulianDayYMDZH_ENABLED
     671             : 
     672             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     673             : 
     674             : #define getJulianDayYMDZHM_ENABLED 1
     675             : 
     676          27 :     module procedure getJulianDayYMDZHM
     677             :         use pm_kind, only: IKC => IK, RKC => RK
     678             : #include "pm_dateTime@routines.inc.F90"
     679          27 :     end procedure
     680             : 
     681             : #undef getJulianDayYMDZHM_ENABLED
     682             : 
     683             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     684             : 
     685             : #define getJulianDayYMDZHMS_ENABLED 1
     686             : 
     687          27 :     module procedure getJulianDayYMDZHMS
     688             :         use pm_kind, only: IKC => IK, RKC => RK
     689             : #include "pm_dateTime@routines.inc.F90"
     690          27 :     end procedure
     691             : 
     692             : #undef getJulianDayYMDZHMS_ENABLED
     693             : 
     694             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     695             : 
     696             : #define getJulianDayYMDZHMSM_ENABLED 1
     697             : 
     698      205019 :     module procedure getJulianDayYMDZHMSM
     699             :         use pm_kind, only: IKC => IK, RKC => RK
     700             : #include "pm_dateTime@routines.inc.F90"
     701      205019 :     end procedure
     702             : 
     703             : #undef getJulianDayYMDZHMSM_ENABLED
     704             : 
     705             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     706             : 
     707             : #undef getJulianDay_ENABLED
     708             : 
     709             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     710             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     711             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     712             : 
     713             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     714             : 
     715             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     716             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     717             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     718             : 
     719             : #define getDateTimeUTC_ENABLED 1
     720             : 
     721             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     722             : 
     723             : #define getDateTimeUTCC_ENABLED 1
     724             : 
     725           5 :     module procedure getDateTimeUTCC
     726             :         use pm_kind, only: IKC => IK, RKC => RK
     727             : #include "pm_dateTime@routines.inc.F90"
     728           5 :     end procedure
     729             : 
     730             : #undef getDateTimeUTCC_ENABLED
     731             : 
     732             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     733             : 
     734             : #define getDateTimeUTCV_ENABLED 1
     735             : 
     736       25000 :     module procedure getDateTimeUTCV
     737             :         use pm_kind, only: IKC => IK, RKC => RK
     738             : #include "pm_dateTime@routines.inc.F90"
     739       25000 :     end procedure
     740             : 
     741             : #undef getDateTimeUTCV_ENABLED
     742             : 
     743             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     744             : 
     745             : #define getDateTimeUTCYMDZ_ENABLED 1
     746             : 
     747       10002 :     module procedure getDateTimeUTCYMDZ
     748             :         use pm_kind, only: IKC => IK, RKC => RK
     749             : #include "pm_dateTime@routines.inc.F90"
     750       10002 :     end procedure
     751             : 
     752             : #undef getDateTimeUTCYMDZ_ENABLED
     753             : 
     754             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     755             : 
     756             : #define getDateTimeUTCYMDZH_ENABLED 1
     757             : 
     758       10002 :     module procedure getDateTimeUTCYMDZH
     759             :         use pm_kind, only: IKC => IK, RKC => RK
     760             : #include "pm_dateTime@routines.inc.F90"
     761       10002 :     end procedure
     762             : 
     763             : #undef getDateTimeUTCYMDZH_ENABLED
     764             : 
     765             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     766             : 
     767             : #define getDateTimeUTCYMDZHM_ENABLED 1
     768             : 
     769       15001 :     module procedure getDateTimeUTCYMDZHM
     770             :         use pm_kind, only: IKC => IK, RKC => RK
     771             : #include "pm_dateTime@routines.inc.F90"
     772       15001 :     end procedure
     773             : 
     774             : #undef getDateTimeUTCYMDZHM_ENABLED
     775             : 
     776             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     777             : 
     778             : #define getDateTimeUTCYMDZHMS_ENABLED 1
     779             : 
     780       10001 :     module procedure getDateTimeUTCYMDZHMS
     781             :         use pm_kind, only: IKC => IK, RKC => RK
     782             : #include "pm_dateTime@routines.inc.F90"
     783       10001 :     end procedure
     784             : 
     785             : #undef getDateTimeUTCYMDZHMS_ENABLED
     786             : 
     787             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     788             : 
     789             : #define getDateTimeUTCYMDZHMSM_ENABLED 1
     790             : 
     791      237955 :     module procedure getDateTimeUTCYMDZHMSM
     792             :         use pm_kind, only: IKC => IK, RKC => RK
     793             : #include "pm_dateTime@routines.inc.F90"
     794      237955 :     end procedure
     795             : 
     796             : #undef getDateTimeUTCYMDZHMSM_ENABLED
     797             : 
     798             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     799             : 
     800             : #undef getDateTimeUTC_ENABLED
     801             : 
     802             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     803             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     804             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     805             : 
     806             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     807             : 
     808             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     809             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     810             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     811             : 
     812             : #define getDateTimeNewZone_ENABLED 1
     813             : 
     814             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     815             : 
     816             : #define getDateTimeNewZoneC_ENABLED 1
     817             : 
     818        5588 :     module procedure getDateTimeNewZoneC
     819             :         use pm_kind, only: IKC => IK, RKC => RK
     820             : #include "pm_dateTime@routines.inc.F90"
     821        5588 :     end procedure
     822             : 
     823             : #undef getDateTimeNewZoneC_ENABLED
     824             : 
     825             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     826             : 
     827             : #define getDateTimeNewZoneV_ENABLED 1
     828             : 
     829       27012 :     module procedure getDateTimeNewZoneV
     830             :         use pm_kind, only: IKC => IK, RKC => RK
     831             : #include "pm_dateTime@routines.inc.F90"
     832       27012 :     end procedure
     833             : 
     834             : #undef getDateTimeNewZoneV_ENABLED
     835             : 
     836             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     837             : 
     838             : #define getDateTimeNewZoneYMDZ_ENABLED 1
     839             : 
     840       10004 :     module procedure getDateTimeNewZoneYMDZ
     841             :         use pm_kind, only: IKC => IK, RKC => RK
     842             : #include "pm_dateTime@routines.inc.F90"
     843       10004 :     end procedure
     844             : 
     845             : #undef getDateTimeNewZoneYMDZ_ENABLED
     846             : 
     847             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     848             : 
     849             : #define getDateTimeNewZoneYMDZH_ENABLED 1
     850             : 
     851       10007 :     module procedure getDateTimeNewZoneYMDZH
     852             :         use pm_kind, only: IKC => IK, RKC => RK
     853             : #include "pm_dateTime@routines.inc.F90"
     854       10007 :     end procedure
     855             : 
     856             : #undef getDateTimeNewZoneYMDZH_ENABLED
     857             : 
     858             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     859             : 
     860             : #define getDateTimeNewZoneYMDZHM_ENABLED 1
     861             : 
     862       15004 :     module procedure getDateTimeNewZoneYMDZHM
     863             :         use pm_kind, only: IKC => IK, RKC => RK
     864             : #include "pm_dateTime@routines.inc.F90"
     865       15004 :     end procedure
     866             : 
     867             : #undef getDateTimeNewZoneYMDZHM_ENABLED
     868             : 
     869             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     870             : 
     871             : #define getDateTimeNewZoneYMDZHMS_ENABLED 1
     872             : 
     873       10002 :     module procedure getDateTimeNewZoneYMDZHMS
     874             :         use pm_kind, only: IKC => IK, RKC => RK
     875             : #include "pm_dateTime@routines.inc.F90"
     876       10002 :     end procedure
     877             : 
     878             : #undef getDateTimeNewZoneYMDZHMS_ENABLED
     879             : 
     880             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     881             : 
     882             : #define getDateTimeNewZoneYMDZHMSM_ENABLED 1
     883             : 
     884       12598 :     module procedure getDateTimeNewZoneYMDZHMSM
     885             :         use pm_kind, only: IKC => IK, RKC => RK
     886             : #include "pm_dateTime@routines.inc.F90"
     887       12598 :     end procedure
     888             : 
     889             : #undef getDateTimeNewZoneYMDZHMSM_ENABLED
     890             : 
     891             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     892             : 
     893             : #undef getDateTimeNewZone_ENABLED
     894             : 
     895             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     896             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     897             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     898             : 
     899             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     900             : 
     901             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     902             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     903             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     904             : 
     905             : #define getDateTimeShifted_ENABLED 1
     906             : 
     907             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     908             : 
     909             : #define getDateTimeShiftedC_ENABLED 1
     910             : 
     911           3 :     module procedure getDateTimeShiftedC
     912             :         use pm_kind, only: IKC => IK, RKC => RK
     913             : #include "pm_dateTime@routines.inc.F90"
     914           3 :     end procedure
     915             : 
     916             : #undef getDateTimeShiftedC_ENABLED
     917             : 
     918             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     919             : 
     920             : #define getDateTimeShiftedV_ENABLED 1
     921             : 
     922       55041 :     module procedure getDateTimeShiftedV
     923             :         use pm_kind, only: IKC => IK, RKC => RK
     924             : #include "pm_dateTime@routines.inc.F90"
     925       55041 :     end procedure
     926             : 
     927             : #undef getDateTimeShiftedV_ENABLED
     928             : 
     929             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     930             : 
     931             : #define getDateTimeShiftedY_ENABLED 1
     932             : 
     933           6 :     module procedure getDateTimeShiftedY
     934             :         use pm_kind, only: IKC => IK, RKC => RK
     935             : #include "pm_dateTime@routines.inc.F90"
     936           6 :     end procedure
     937             : 
     938             : #undef getDateTimeShiftedY_ENABLED
     939             : 
     940             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     941             : 
     942             : #define getDateTimeShiftedYM_ENABLED 1
     943             : 
     944           4 :     module procedure getDateTimeShiftedYM
     945             :         use pm_kind, only: IKC => IK, RKC => RK
     946             : #include "pm_dateTime@routines.inc.F90"
     947           4 :     end procedure
     948             : 
     949             : #undef getDateTimeShiftedYM_ENABLED
     950             : 
     951             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     952             : 
     953             : #define getDateTimeShiftedYMD_ENABLED 1
     954             : 
     955           7 :     module procedure getDateTimeShiftedYMD
     956             :         use pm_kind, only: IKC => IK, RKC => RK
     957             : #include "pm_dateTime@routines.inc.F90"
     958           7 :     end procedure
     959             : 
     960             : #undef getDateTimeShiftedYMD_ENABLED
     961             : 
     962             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     963             : 
     964             : #define getDateTimeShiftedYMDZ_ENABLED 1
     965             : 
     966       10016 :     module procedure getDateTimeShiftedYMDZ
     967             :         use pm_kind, only: IKC => IK, RKC => RK
     968             : #include "pm_dateTime@routines.inc.F90"
     969       10016 :     end procedure
     970             : 
     971             : #undef getDateTimeShiftedYMDZ_ENABLED
     972             : 
     973             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     974             : 
     975             : #define getDateTimeShiftedYMDZH_ENABLED 1
     976             : 
     977       10015 :     module procedure getDateTimeShiftedYMDZH
     978             :         use pm_kind, only: IKC => IK, RKC => RK
     979             : #include "pm_dateTime@routines.inc.F90"
     980       10015 :     end procedure
     981             : 
     982             : #undef getDateTimeShiftedYMDZH_ENABLED
     983             : 
     984             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     985             : 
     986             : #define getDateTimeShiftedYMDZHM_ENABLED 1
     987             : 
     988       10013 :     module procedure getDateTimeShiftedYMDZHM
     989             :         use pm_kind, only: IKC => IK, RKC => RK
     990             : #include "pm_dateTime@routines.inc.F90"
     991       10013 :     end procedure
     992             : 
     993             : #undef getDateTimeShiftedYMDZHM_ENABLED
     994             : 
     995             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     996             : 
     997             : #define getDateTimeShiftedYMDZHMS_ENABLED 1
     998             : 
     999       10012 :     module procedure getDateTimeShiftedYMDZHMS
    1000             :         use pm_kind, only: IKC => IK, RKC => RK
    1001             : #include "pm_dateTime@routines.inc.F90"
    1002       10012 :     end procedure
    1003             : 
    1004             : #undef getDateTimeShiftedYMDZHMS_ENABLED
    1005             : 
    1006             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1007             : 
    1008             : #define getDateTimeShiftedYMDZHMSM_ENABLED 1
    1009             : 
    1010       15033 :     module procedure getDateTimeShiftedYMDZHMSM
    1011             :         use pm_kind, only: IKC => IK, RKC => RK
    1012             : #include "pm_dateTime@routines.inc.F90"
    1013       15033 :     end procedure
    1014             : 
    1015             : #undef getDateTimeShiftedYMDZHMSM_ENABLED
    1016             : 
    1017             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1018             : 
    1019             : #undef getDateTimeShifted_ENABLED
    1020             : 
    1021             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1022             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1023             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1024             : 
    1025             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1026             : 
    1027             : #define isValidDateTime_ENABLED 1
    1028             : 
    1029             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1030             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1031             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1032             : 
    1033             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1034             : 
    1035             : #define isValidDateTimeV_ENABLED 1
    1036             : 
    1037        2213 :     module procedure isValidDateTimeV
    1038             :         use pm_kind, only: IKC => IK, SKC => SK
    1039             : #include "pm_dateTime@routines.inc.F90"
    1040        2213 :     end procedure
    1041             : 
    1042             : #undef isValidDateTimeV_ENABLED
    1043             : 
    1044             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1045             : 
    1046             : #define isValidDateTimeY_ENABLED 1
    1047             : 
    1048      570446 :     module procedure isValidDateTimeY
    1049             :         use pm_kind, only: IKC => IK, SKC => SK
    1050             : #include "pm_dateTime@routines.inc.F90"
    1051      570446 :     end procedure
    1052             : 
    1053             : #undef isValidDateTimeY_ENABLED
    1054             : 
    1055             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1056             : 
    1057             : #define isValidDateTimeYM_ENABLED 1
    1058             : 
    1059      570043 :     module procedure isValidDateTimeYM
    1060             :         use pm_kind, only: IKC => IK, SKC => SK
    1061             : #include "pm_dateTime@routines.inc.F90"
    1062      570043 :     end procedure
    1063             : 
    1064             : #undef isValidDateTimeYM_ENABLED
    1065             : 
    1066             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1067             : 
    1068             : #define isValidDateTimeYMD_ENABLED 1
    1069             : 
    1070      567533 :     module procedure isValidDateTimeYMD
    1071             :         use pm_kind, only: IKC => IK, SKC => SK
    1072             : #include "pm_dateTime@routines.inc.F90"
    1073      567533 :     end procedure
    1074             : 
    1075             : #undef isValidDateTimeYMD_ENABLED
    1076             : 
    1077             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1078             : 
    1079             : #define isValidDateTimeYMDZ_ENABLED 1
    1080             : 
    1081      282565 :     module procedure isValidDateTimeYMDZ
    1082             :         use pm_kind, only: IKC => IK, SKC => SK
    1083             : #include "pm_dateTime@routines.inc.F90"
    1084      282565 :     end procedure
    1085             : 
    1086             : #undef isValidDateTimeYMDZ_ENABLED
    1087             : 
    1088             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1089             : 
    1090             : #define isValidDateTimeYMDZH_ENABLED 1
    1091             : 
    1092      282164 :     module procedure isValidDateTimeYMDZH
    1093             :         use pm_kind, only: IKC => IK, SKC => SK
    1094             : #include "pm_dateTime@routines.inc.F90"
    1095      282164 :     end procedure
    1096             : 
    1097             : #undef isValidDateTimeYMDZH_ENABLED
    1098             : 
    1099             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1100             : 
    1101             : #define isValidDateTimeYMDZHM_ENABLED 1
    1102             : 
    1103      281763 :     module procedure isValidDateTimeYMDZHM
    1104             :         use pm_kind, only: IKC => IK, SKC => SK
    1105             : #include "pm_dateTime@routines.inc.F90"
    1106      281763 :     end procedure
    1107             : 
    1108             : #undef isValidDateTimeYMDZHM_ENABLED
    1109             : 
    1110             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1111             : 
    1112             : #define isValidDateTimeYMDZHMS_ENABLED 1
    1113             : 
    1114      281362 :     module procedure isValidDateTimeYMDZHMS
    1115             :         use pm_kind, only: IKC => IK, SKC => SK
    1116             : #include "pm_dateTime@routines.inc.F90"
    1117      281362 :     end procedure
    1118             : 
    1119             : #undef isValidDateTimeYMDZHMS_ENABLED
    1120             : 
    1121             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1122             : 
    1123             : #define isValidDateTimeYMDZHMSM_ENABLED 1
    1124             : 
    1125      280961 :     module procedure isValidDateTimeYMDZHMSM
    1126             :         use pm_kind, only: IKC => IK, SKC => SK
    1127             : #include "pm_dateTime@routines.inc.F90"
    1128      280961 :     end procedure
    1129             : 
    1130             : #undef isValidDateTimeYMDZHMSM_ENABLED
    1131             : 
    1132             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1133             : 
    1134             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1135             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1136             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1137             : 
    1138             : #undef isValidDateTime_ENABLED
    1139             : 
    1140             : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1141             : 
    1142             : #define getDateTime_ENABLED 1
    1143             : 
    1144             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1145             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1146             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1147             : 
    1148             : #define getDateTimeValues_ENABLED 1
    1149             : 
    1150             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1151             : 
    1152             : #define getDateTimeValuesJ_ENABLED 1
    1153             : 
    1154      119016 :     module procedure getDateTimeValuesJ
    1155             :         use pm_kind, only: IKC => IK, RKC => RK
    1156             : #include "pm_dateTime@routines.inc.F90"
    1157      119016 :     end procedure
    1158             : 
    1159             : #undef getDateTimeValuesJ_ENABLED
    1160             : 
    1161             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1162             : 
    1163             : #define getDateTimeValuesJZ_ENABLED 1
    1164             : 
    1165        1500 :     module procedure getDateTimeValuesJZ
    1166             :         use pm_kind, only: IKC => IK, RKC => RK
    1167             : #include "pm_dateTime@routines.inc.F90"
    1168        1500 :     end procedure
    1169             : 
    1170             : #undef getDateTimeValuesJZ_ENABLED
    1171             : 
    1172             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1173             : 
    1174             : #define getDateTimeValuesC_ENABLED 1
    1175             : 
    1176       15550 :     module procedure getDateTimeValuesC
    1177             :         use pm_kind, only: IKC => IK, SKC => SK
    1178             : #include "pm_dateTime@routines.inc.F90"
    1179       15550 :     end procedure
    1180             : 
    1181             : #undef getDateTimeValuesC_ENABLED
    1182             : 
    1183             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1184             : 
    1185             : #define getDateTimeValuesY_ENABLED 1
    1186             : 
    1187       10509 :     module procedure getDateTimeValuesY
    1188             :         use pm_kind, only: IKC => IK, SKC => SK
    1189             : #include "pm_dateTime@routines.inc.F90"
    1190       10509 :     end procedure
    1191             : 
    1192             : #undef getDateTimeValuesY_ENABLED
    1193             : 
    1194             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1195             : 
    1196             : #define getDateTimeValuesYM_ENABLED 1
    1197             : 
    1198         501 :     module procedure getDateTimeValuesYM
    1199             :         use pm_kind, only: IKC => IK, SKC => SK
    1200             : #include "pm_dateTime@routines.inc.F90"
    1201         501 :     end procedure
    1202             : 
    1203             : #undef getDateTimeValuesYM_ENABLED
    1204             : 
    1205             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1206             : 
    1207             : #define getDateTimeValuesYMD_ENABLED 1
    1208             : 
    1209         536 :     module procedure getDateTimeValuesYMD
    1210             :         use pm_kind, only: IKC => IK, SKC => SK
    1211             : #include "pm_dateTime@routines.inc.F90"
    1212         536 :     end procedure
    1213             : 
    1214             : #undef getDateTimeValuesYMD_ENABLED
    1215             : 
    1216             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1217             : 
    1218             : #define getDateTimeValuesYMDZ_ENABLED 1
    1219             : 
    1220         521 :     module procedure getDateTimeValuesYMDZ
    1221             :         use pm_kind, only: IKC => IK, SKC => SK
    1222             : #include "pm_dateTime@routines.inc.F90"
    1223         521 :     end procedure
    1224             : 
    1225             : #undef getDateTimeValuesYMDZ_ENABLED
    1226             : 
    1227             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1228             : 
    1229             : #define getDateTimeValuesYMDZH_ENABLED 1
    1230             : 
    1231         504 :     module procedure getDateTimeValuesYMDZH
    1232             :         use pm_kind, only: IKC => IK, SKC => SK
    1233             : #include "pm_dateTime@routines.inc.F90"
    1234         504 :     end procedure
    1235             : 
    1236             : #undef getDateTimeValuesYMDZH_ENABLED
    1237             : 
    1238             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1239             : 
    1240             : #define getDateTimeValuesYMDZHM_ENABLED 1
    1241             : 
    1242         502 :     module procedure getDateTimeValuesYMDZHM
    1243             :         use pm_kind, only: IKC => IK, SKC => SK
    1244             : #include "pm_dateTime@routines.inc.F90"
    1245         502 :     end procedure
    1246             : 
    1247             : #undef getDateTimeValuesYMDZHM_ENABLED
    1248             : 
    1249             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1250             : 
    1251             : #define getDateTimeValuesYMDZHMS_ENABLED 1
    1252             : 
    1253         501 :     module procedure getDateTimeValuesYMDZHMS
    1254             :         use pm_kind, only: IKC => IK, SKC => SK
    1255             : #include "pm_dateTime@routines.inc.F90"
    1256         501 :     end procedure
    1257             : 
    1258             : #undef getDateTimeValuesYMDZHMS_ENABLED
    1259             : 
    1260             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1261             : 
    1262             : #define getDateTimeValuesYMDZHMSM_ENABLED 1
    1263             : 
    1264         502 :     module procedure getDateTimeValuesYMDZHMSM
    1265             :         use pm_kind, only: IKC => IK, SKC => SK
    1266             : #include "pm_dateTime@routines.inc.F90"
    1267         502 :     end procedure
    1268             : 
    1269             : #undef getDateTimeValuesYMDZHMSM_ENABLED
    1270             : 
    1271             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1272             : 
    1273             : #undef getDateTimeValues_ENABLED
    1274             : 
    1275             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1276             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1277             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1278             : 
    1279             : #define getDateTimeString_ENABLED 1
    1280             : 
    1281             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1282             : !
    1283             : !#define getDateTimeStringJ_ENABLED 1
    1284             : !
    1285             : !    module procedure getDateTimeStringJ
    1286             : !        use pm_kind, only: IKC => IK, RKC => RK
    1287             : !#include "pm_dateTime@routines.inc.F90"
    1288             : !    end procedure
    1289             : !
    1290             : !#undef getDateTimeStringJ_ENABLED
    1291             : !
    1292             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1293             : !
    1294             : !#define getDateTimeStringJZ_ENABLED 1
    1295             : !
    1296             : !    module procedure getDateTimeStringJZ
    1297             : !        use pm_kind, only: IKC => IK, RKC => RK
    1298             : !#include "pm_dateTime@routines.inc.F90"
    1299             : !    end procedure
    1300             : !
    1301             : !#undef getDateTimeStringJZ_ENABLED
    1302             : !
    1303             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1304             : 
    1305             : #define getDateTimeStringC_ENABLED 1
    1306             : 
    1307         113 :     module procedure getDateTimeStringC
    1308             :         use pm_kind, only: IKC => IK, SKC => SK
    1309             : #include "pm_dateTime@routines.inc.F90"
    1310         113 :     end procedure
    1311             : 
    1312             : #undef getDateTimeStringC_ENABLED
    1313             : 
    1314             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1315             : 
    1316             : #define getDateTimeStringV_ENABLED 1
    1317             : 
    1318       20138 :     module procedure getDateTimeStringV
    1319             :         use pm_kind, only: IKC => IK, SKC => SK
    1320             : #include "pm_dateTime@routines.inc.F90"
    1321       20138 :     end procedure
    1322             : 
    1323             : #undef getDateTimeStringV_ENABLED
    1324             : 
    1325             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1326             : !
    1327             : !#define getDateTimeStringY_ENABLED 1
    1328             : !
    1329             : !    module procedure getDateTimeStringY
    1330             : !        use pm_kind, only: IKC => IK, SKC => SK
    1331             : !#include "pm_dateTime@routines.inc.F90"
    1332             : !    end procedure
    1333             : !
    1334             : !#undef getDateTimeStringY_ENABLED
    1335             : !
    1336             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1337             : !
    1338             : !#define getDateTimeStringYM_ENABLED 1
    1339             : !
    1340             : !    module procedure getDateTimeStringYM
    1341             : !        use pm_kind, only: IKC => IK, SKC => SK
    1342             : !#include "pm_dateTime@routines.inc.F90"
    1343             : !    end procedure
    1344             : !
    1345             : !#undef getDateTimeStringYM_ENABLED
    1346             : !
    1347             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1348             : !
    1349             : !#define getDateTimeStringYMD_ENABLED 1
    1350             : !
    1351             : !    module procedure getDateTimeStringYMD
    1352             : !        use pm_kind, only: IKC => IK, SKC => SK
    1353             : !#include "pm_dateTime@routines.inc.F90"
    1354             : !    end procedure
    1355             : !
    1356             : !#undef getDateTimeStringYMD_ENABLED
    1357             : !
    1358             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1359             : !
    1360             : !#define getDateTimeStringYMDZ_ENABLED 1
    1361             : !
    1362             : !    module procedure getDateTimeStringYMDZ
    1363             : !        use pm_kind, only: IKC => IK, SKC => SK
    1364             : !#include "pm_dateTime@routines.inc.F90"
    1365             : !    end procedure
    1366             : !
    1367             : !#undef getDateTimeStringYMDZ_ENABLED
    1368             : !
    1369             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1370             : !
    1371             : !#define getDateTimeStringYMDZH_ENABLED 1
    1372             : !
    1373             : !    module procedure getDateTimeStringYMDZH
    1374             : !        use pm_kind, only: IKC => IK, SKC => SK
    1375             : !#include "pm_dateTime@routines.inc.F90"
    1376             : !    end procedure
    1377             : !
    1378             : !#undef getDateTimeStringYMDZH_ENABLED
    1379             : !
    1380             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1381             : !
    1382             : !#define getDateTimeStringYMDZHM_ENABLED 1
    1383             : !
    1384             : !    module procedure getDateTimeStringYMDZHM
    1385             : !        use pm_kind, only: IKC => IK, SKC => SK
    1386             : !#include "pm_dateTime@routines.inc.F90"
    1387             : !    end procedure
    1388             : !
    1389             : !#undef getDateTimeStringYMDZHM_ENABLED
    1390             : !
    1391             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1392             : !
    1393             : !#define getDateTimeStringYMDZHMS_ENABLED 1
    1394             : !
    1395             : !    module procedure getDateTimeStringYMDZHMS
    1396             : !        use pm_kind, only: IKC => IK, SKC => SK
    1397             : !#include "pm_dateTime@routines.inc.F90"
    1398             : !    end procedure
    1399             : !
    1400             : !#undef getDateTimeStringYMDZHMS_ENABLED
    1401             : !
    1402             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1403             : !
    1404             : !#define getDateTimeStringYMDZHMSM_ENABLED 1
    1405             : !
    1406             : !    module procedure getDateTimeStringYMDZHMSM
    1407             : !        use pm_kind, only: IKC => IK, SKC => SK
    1408             : !#include "pm_dateTime@routines.inc.F90"
    1409             : !    end procedure
    1410             : !
    1411             : !#undef getDateTimeStringYMDZHMSM_ENABLED
    1412             : !
    1413             : !    !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1414             : 
    1415             : #undef getDateTimeString_ENABLED
    1416             : 
    1417             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1418             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1419             :     !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1420             : 
    1421             : #undef getDateTime_ENABLED
    1422             : 
    1423             : !!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1424             : 
    1425             : end submodule routines
    1426             : 
    1427             : #undef  CHECK_ASSERTION

ParaMonte: Parallel Monte Carlo and Machine Learning Library 
The Computational Data Science Lab
© Copyright 2012 - 2024