diff --git a/Makefile.in b/Makefile.in index 3feb30c533511da938ece9d9f01831e0f499f859..6c0b3a30e581fc2dd873e6d09f0a125691e78759 100644 --- a/Makefile.in +++ b/Makefile.in @@ -92,7 +92,6 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_fc_line_length.m4 \ $(top_srcdir)/m4/acx_fc_module.m4 \ $(top_srcdir)/m4/acx_fc_pp.m4 $(top_srcdir)/m4/acx_lang_lib.m4 \ - $(top_srcdir)/m4/acx_lang_openmp.m4 \ $(top_srcdir)/m4/acx_lang_package.m4 \ $(top_srcdir)/m4/asx_common.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ @@ -299,7 +298,6 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_FCFLAG = @OPENMP_FCFLAG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ diff --git a/aclocal.m4 b/aclocal.m4 index ba2d4f7311961d1aafd0c7e4ec9e34a02ff310d2..5e4d480b4806e56451f2c76e661680f36cbeef7f 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1549,7 +1549,6 @@ m4_include([m4/acx_fc_line_length.m4]) m4_include([m4/acx_fc_module.m4]) m4_include([m4/acx_fc_pp.m4]) m4_include([m4/acx_lang_lib.m4]) -m4_include([m4/acx_lang_openmp.m4]) m4_include([m4/acx_lang_package.m4]) m4_include([m4/asx_common.m4]) m4_include([m4/ax_prog_doxygen.m4]) diff --git a/configure b/configure index a1f068f6cd1b33f1963a978724dc67f35668cc67..3257c2727f52565f3f9d94d2828c476df9518118 100755 --- a/configure +++ b/configure @@ -719,9 +719,6 @@ ENABLE_FORTRAN_HL_FALSE ENABLE_FORTRAN_HL_TRUE ENABLE_EXAMPLES_FALSE ENABLE_EXAMPLES_TRUE -ENABLE_OPENMP_FALSE -ENABLE_OPENMP_TRUE -OPENMP_FCFLAG pkgpyexecdir pyexecdir pkgpythondir @@ -876,7 +873,6 @@ enable_libtool_lock with_python_sys_prefix with_python_prefix with_python_exec_prefix -enable_openmp enable_examples enable_fortran_hl enable_check @@ -1550,8 +1546,6 @@ Optional Features: --disable-dependency-tracking speeds up one-time build --disable-libtool-lock avoid locking (might break parallel builds) - --enable-openmp ensure compatibility with OpenMP applications - [default=no] --enable-examples build examples [default=yes] --enable-fortran-hl build Fortran high-level interface [default=yes] --enable-check enable unit testing with check library @@ -17918,93 +17912,6 @@ then : fi -# Check whether --enable-openmp was given. -if test ${enable_openmp+y} -then : - enableval=$enable_openmp; -else $as_nop - enable_openmp=no -fi - - -OPENMP_FCFLAG='' - -if test "x$enable_openmp" = xyes -then : - ac_ext=${ac_fc_srcext-f} -ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' -ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_fc_compiler_gnu - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler flag needed to enable OpenMP support" >&5 -printf %s "checking for Fortran compiler flag needed to enable OpenMP support... " >&6; } - if test ${acx_cv_fc_openmp_flag+y} -then : - printf %s "(cached) " >&6 -else $as_nop - acx_cv_fc_openmp_flag=unknown - acx_save_FCFLAGS=$FCFLAGS - cat > conftest.$ac_ext <<_ACEOF -#ifndef _OPENMP - choke me -#endif - - program main - implicit none -!$ integer tid - tid = 42 - call omp_set_num_threads(2) - end - -_ACEOF - for acx_lang_openmp_flag in '' -qopenmp -openmp -fopenmp -homp -mp; do - FCFLAGS="${acx_save_FCFLAGS} $acx_lang_openmp_flag" - if ac_fn_fc_try_link "$LINENO" -then : - acx_cv_fc_openmp_flag=$acx_lang_openmp_flag -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext - test "x$acx_cv_fc_openmp_flag" != xunknown && break - done - rm -f conftest.$ac_ext - FCFLAGS=$acx_save_FCFLAGS -fi - - if test -n "$acx_cv_fc_openmp_flag" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acx_cv_fc_openmp_flag" >&5 -printf "%s\n" "$acx_cv_fc_openmp_flag" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -fi - if test "x$acx_cv_fc_openmp_flag" = xunknown -then : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "unable to detect Fortran compiler flag needed to enable OpenMP support -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - OPENMP_FCFLAG=$acx_cv_fc_openmp_flag -fi - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi - if test x"$enable_openmp" = xyes; then - ENABLE_OPENMP_TRUE= - ENABLE_OPENMP_FALSE='#' -else - ENABLE_OPENMP_TRUE='#' - ENABLE_OPENMP_FALSE= -fi - - # Check whether --enable-examples was given. if test ${enable_examples+y} then : @@ -20504,10 +20411,6 @@ if test -z "${FCMODUC_TRUE}" && test -z "${FCMODUC_FALSE}"; then as_fn_error $? "conditional \"FCMODUC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${ENABLE_OPENMP_TRUE}" && test -z "${ENABLE_OPENMP_FALSE}"; then - as_fn_error $? "conditional \"ENABLE_OPENMP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${ENABLE_EXAMPLES_TRUE}" && test -z "${ENABLE_EXAMPLES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_EXAMPLES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 7d976fabb9f62d23a4371ff67beebc89892f69ce..f42ce77dd920d2ffc00c2777561e14ae40aad42b 100644 --- a/configure.ac +++ b/configure.ac @@ -64,18 +64,6 @@ AM_PATH_PYTHON([2.6]) AC_SEARCH_LIBS([roundf], [m]) -AC_ARG_ENABLE([openmp], - [AS_HELP_STRING([--enable-openmp], - [ensure compatibility with OpenMP applications @<:@default=no@:>@])], [], - [enable_openmp=no]) - -AC_SUBST([OPENMP_FCFLAG], ['']) -AS_VAR_IF([enable_openmp], [yes], - [AC_LANG_PUSH([Fortran]) - ACX_LANG_OPENMP_FLAG([OPENMP_FCFLAG=$acx_cv_fc_openmp_flag]) - AC_LANG_POP([Fortran])]) -AM_CONDITIONAL([ENABLE_OPENMP], [test x"$enable_openmp" = xyes]) - AC_ARG_ENABLE([examples], [AS_HELP_STRING([--enable-examples], [build examples @<:@default=yes@:>@])], [], diff --git a/doc/Makefile.in b/doc/Makefile.in index 08b19f684f43ccb2b52ff6eab30a937bc7855ca1..058e2e7737fde2d6b314d956f06e7c721a8f4330 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -92,7 +92,6 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_fc_line_length.m4 \ $(top_srcdir)/m4/acx_fc_module.m4 \ $(top_srcdir)/m4/acx_fc_pp.m4 $(top_srcdir)/m4/acx_lang_lib.m4 \ - $(top_srcdir)/m4/acx_lang_openmp.m4 \ $(top_srcdir)/m4/acx_lang_package.m4 \ $(top_srcdir)/m4/asx_common.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ @@ -212,7 +211,6 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_FCFLAG = @OPENMP_FCFLAG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ diff --git a/examples/Makefile.in b/examples/Makefile.in index dee28c245d2d7a7b806aced115d57acf9b7fe243..356284ca0080cf5dc66080ccf2723dbc69803e9e 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -109,7 +109,6 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_fc_line_length.m4 \ $(top_srcdir)/m4/acx_fc_module.m4 \ $(top_srcdir)/m4/acx_fc_pp.m4 $(top_srcdir)/m4/acx_lang_lib.m4 \ - $(top_srcdir)/m4/acx_lang_openmp.m4 \ $(top_srcdir)/m4/acx_lang_package.m4 \ $(top_srcdir)/m4/asx_common.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ @@ -380,7 +379,6 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_FCFLAG = @OPENMP_FCFLAG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ diff --git a/include/Makefile.in b/include/Makefile.in index 3a329fd1d92edfc120c35986cf449d209eeac7dc..79fc7fc2e1d6b55196e87ec50bf196816831ddfd 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -93,7 +93,6 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_fc_line_length.m4 \ $(top_srcdir)/m4/acx_fc_module.m4 \ $(top_srcdir)/m4/acx_fc_pp.m4 $(top_srcdir)/m4/acx_lang_lib.m4 \ - $(top_srcdir)/m4/acx_lang_openmp.m4 \ $(top_srcdir)/m4/acx_lang_package.m4 \ $(top_srcdir)/m4/asx_common.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ @@ -259,7 +258,6 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_FCFLAG = @OPENMP_FCFLAG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ diff --git a/m4/acx_lang_openmp.m4 b/m4/acx_lang_openmp.m4 deleted file mode 100644 index d90ee736fbd192c4f161db26b8f48c2ea318f570..0000000000000000000000000000000000000000 --- a/m4/acx_lang_openmp.m4 +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright (c) 2018-2024, MPI-M -# -# Author: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# ACX_LANG_OPENMP_FLAG([ACTION-IF-SUCCESS], -# [ACTION-IF-FAILURE = FAILURE]) -# ----------------------------------------------------------------------------- -# Finds the compiler flag needed to enable OpenMP support. The result is either -# "unknown", or the actual compiler flag required to enable OpenMP support, -# which may be an empty string. -# -# If successful, runs ACTION-IF-SUCCESS, otherwise runs ACTION-IF-FAILURE -# (defaults to failing with an error message). -# -# The flag is cached in the acx_cv_[]_AC_LANG_ABBREV[]_openmp_flag variable. -# -# Upon successful run, you can check for the version of the standard supported -# by the compiler by expanding: -# AS_VAR_APPEND([_AC_LANG_PREFIX[]FLAGS], -# [" $acx_cv_[]_AC_LANG_ABBREV[]_openmp_flag"]) -# ACX_LANG_MACRO_CHECK_VALUE([_OPENMP]) -# and checking for the value of the -# acx_cv_[]_AC_LANG_ABBREV[]_macro__OPENMP_value shell variable. The possible -# (successful) values of the variable are dates, which map to the versions of -# the standard in the following way: -# 202111 5.2 -# 202011 5.1 -# 201811 5.0 -# 201511 4.5 -# 201307 4.0 -# 201107 3.1 -# 200805 3.0 -# 200505 2.5 -# 200203 C/C++ version 2.0 -# 200011 Fortran version 2.0 -# 199911 Fortran version 1.1 -# 199810 C/C++ version 1.0 -# 199710 Fortran version 1.0 -# -AC_DEFUN([ACX_LANG_OPENMP_FLAG], - [m4_pushdef([acx_cache_var], [acx_cv_[]_AC_LANG_ABBREV[]_openmp_flag])dnl - AC_MSG_CHECKING([for _AC_LANG compiler flag needed to enable OpenMP dnl -support]) - AC_CACHE_VAL([acx_cache_var], - [acx_cache_var=unknown - acx_save_[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - AC_LANG_CONFTEST([_ACX_LANG_OPENMP]) - for acx_lang_openmp_flag in '' -qopenmp -openmp -fopenmp -homp -mp; do - _AC_LANG_PREFIX[]FLAGS="${acx_save_[]_AC_LANG_PREFIX[]FLAGS} dnl -$acx_lang_openmp_flag" - AC_LINK_IFELSE([], [acx_cache_var=$acx_lang_openmp_flag]) - test "x$acx_cache_var" != xunknown && break - done - rm -f conftest.$ac_ext - _AC_LANG_PREFIX[]FLAGS=$acx_save_[]_AC_LANG_PREFIX[]FLAGS]) - AS_IF([test -n "$acx_cache_var"], - [AC_MSG_RESULT([$acx_cache_var])], - [AC_MSG_RESULT([none needed])]) - AS_VAR_IF([acx_cache_var], [unknown], [m4_default([$2], - [AC_MSG_FAILURE([unable to detect _AC_LANG compiler flag needed to dnl -enable OpenMP support])])], [$1]) - m4_popdef([acx_cache_var])]) - -# _ACX_LANG_OPENMP() -# ----------------------------------------------------------------------------- -# Expands into the source code of a program in the current language that is -# compiled successfully only when OpenMP support is enabled for the current -# compiler. By default, expands to _AC_LANG_OPENMP. -# -m4_define([_ACX_LANG_OPENMP], - [m4_ifdef([$0(]_AC_LANG[)], - [m4_indir([$0(]_AC_LANG[)], $@)], - [_AC_LANG_OPENMP])])]) - -# _ACX_LANG_OPENMP(Fortran)() -# ----------------------------------------------------------------------------- -# Implementation of _ACX_LANG_OPENMP for Fortran language. In addition to the -# standard implementation of _AC_LANG_OPENMP(Fortran), also checks whether the -# macro _OPENMP is set by the compiler (if AC_FC_PP_SRCEXT was expanded -# before). -# -m4_define([_ACX_LANG_OPENMP(Fortran)], - [AC_LANG_SOURCE([AC_PROVIDE_IFELSE([AC_FC_PP_SRCEXT], -[m4_n([[#ifndef _OPENMP - choke me -#endif]])])_AC_LANG_OPENMP])]) diff --git a/src/Makefile.am b/src/Makefile.am index d6f257d6e31c25e0b383094da6fb30c9ca8c4395..08ac828665a48ee0d80712a9367bc0238750564d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,25 +5,6 @@ lib_LTLIBRARIES = libmtime.la AM_CPPFLAGS = -I$(top_srcdir)/include -AM_FCFLAGS = - -if ENABLE_OPENMP -# We cannot simply append $(OPENMP_FCFLAG) to AM_FCFLAGS because this breaks -# linking with NAG compiler: -# a) whenever libtool is called for linking, it duplicates the openmp flag, -# which is considered as an error by NAG; -# b) libmtime.la gets an entry inherited_linker_flags=' -openmp' and it -# becomes impossible to link a C application to libmtime with libtool if -# the C compiler is gcc, which misinterpretes the flag '-openmp'. -# Therefore, we prepend $(OPENMP_FCFLAG) with '-Xcompiler', which solves both of -# the aforementioned problems: the openmp flag is used when linking the shared -# version of libmtime but is not duplicated, additionaly, it is not saved to -# libmtime.la as an inherited linker flag. -# However, due to a bug in the argument parsing procedure, libtool fails if the -# first argument for the compiler is '-Xcompiler <flag>' or '-Wc,<flag>'. -# Therefore, we additionaly prepend AM_FCFLAGS with a dummy flag '$(FCMODINC).'. -AM_FCFLAGS += $(FCMODINC). -Xcompiler $(OPENMP_FCFLAG) -endif ENABLE_OPENMP libmtime_la_SOURCES = \ kepler.c \ diff --git a/src/Makefile.in b/src/Makefile.in index 4a69dc18701a6483ea4c3f570635c4eaf5f20573..b46e153968f7b421dbda2158347bdfe77b6b9189 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -89,30 +89,14 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ - -# We cannot simply append $(OPENMP_FCFLAG) to AM_FCFLAGS because this breaks -# linking with NAG compiler: -# a) whenever libtool is called for linking, it duplicates the openmp flag, -# which is considered as an error by NAG; -# b) libmtime.la gets an entry inherited_linker_flags=' -openmp' and it -# becomes impossible to link a C application to libmtime with libtool if -# the C compiler is gcc, which misinterpretes the flag '-openmp'. -# Therefore, we prepend $(OPENMP_FCFLAG) with '-Xcompiler', which solves both of -# the aforementioned problems: the openmp flag is used when linking the shared -# version of libmtime but is not duplicated, additionaly, it is not saved to -# libmtime.la as an inherited linker flag. -# However, due to a bug in the argument parsing procedure, libtool fails if the -# first argument for the compiler is '-Xcompiler <flag>' or '-Wc,<flag>'. -# Therefore, we additionaly prepend AM_FCFLAGS with a dummy flag '$(FCMODINC).'. -@ENABLE_OPENMP_TRUE@am__append_1 = $(FCMODINC). -Xcompiler $(OPENMP_FCFLAG) -@ENABLE_FORTRAN_HL_TRUE@am__append_2 = \ +@ENABLE_FORTRAN_HL_TRUE@am__append_1 = \ @ENABLE_FORTRAN_HL_TRUE@ libmtime_hl.f90 \ @ENABLE_FORTRAN_HL_TRUE@ mtime_t_datetime.inc \ @ENABLE_FORTRAN_HL_TRUE@ mtime_t_event.inc \ @ENABLE_FORTRAN_HL_TRUE@ mtime_t_juliandelta.inc \ @ENABLE_FORTRAN_HL_TRUE@ mtime_t_timedelta.inc -@ENABLE_FORTRAN_HL_TRUE@am__append_3 = \ +@ENABLE_FORTRAN_HL_TRUE@am__append_2 = \ @ENABLE_FORTRAN_HL_TRUE@ $(mtime_hl_mod) subdir = src @@ -120,7 +104,6 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_fc_line_length.m4 \ $(top_srcdir)/m4/acx_fc_module.m4 \ $(top_srcdir)/m4/acx_fc_pp.m4 $(top_srcdir)/m4/acx_lang_lib.m4 \ - $(top_srcdir)/m4/acx_lang_openmp.m4 \ $(top_srcdir)/m4/acx_lang_package.m4 \ $(top_srcdir)/m4/asx_common.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ @@ -367,7 +350,6 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_FCFLAG = @OPENMP_FCFLAG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -455,14 +437,13 @@ top_srcdir = @top_srcdir@ # lib_LTLIBRARIES = libmtime.la AM_CPPFLAGS = -I$(top_srcdir)/include -AM_FCFLAGS = $(am__append_1) libmtime_la_SOURCES = kepler.c libmtime.f90 mtime_c_bindings.f90 \ mtime_calendar.c mtime_calendar360day.c mtime_calendar365day.c \ mtime_calendarGregorian.c mtime_constants.f90 mtime_date.c \ mtime_datetime.c mtime_error_handling.f90 \ mtime_eventHandling.c mtime_eventList.c mtime_iso8601.c \ mtime_julianDay.c mtime_time.c mtime_timedelta.c \ - mtime_utilities.c orbit.c vsop87.c $(am__append_2) + mtime_utilities.c orbit.c vsop87.c $(am__append_1) @FCMODUC_FALSE@mtime_c_bindings_mod = mtime_c_bindings.$(FCMODEXT) @FCMODUC_TRUE@mtime_c_bindings_mod = MTIME_C_BINDINGS.$(FCMODEXT) @FCMODUC_FALSE@mtime_constants_mod = mtime_constants.$(FCMODEXT) @@ -501,7 +482,7 @@ libmtime_la_SOURCES = kepler.c libmtime.f90 mtime_c_bindings.f90 \ @ENABLE_FORTRAN_HL_TRUE@@FCMODUC_TRUE@mtime_hl_mod = MTIME_HL.$(FCMODEXT) all_mods = $(mtime_c_bindings_mod) $(mtime_constants_mod) \ $(mtime_error_handling_mod) $(mtime_mod) $(mtime_other_mods) \ - $(mtime_print_by_callback_mod) $(am__append_3) + $(mtime_print_by_callback_mod) $(am__append_2) nodist_include_HEADERS = $(all_mods) MOSTLYCLEANFILES = $(all_mods) python_PYTHON = libmtime.py mtime.py diff --git a/src/libmtime.f90 b/src/libmtime.f90 index 05da435359ee997a90e6ec15b4f2aaa46ee3ed12..da4672c9cfbef93b46bd71f19e65f83077532e4f 100644 --- a/src/libmtime.f90 +++ b/src/libmtime.f90 @@ -82,7 +82,7 @@ CONTAINS !! @param[out] string the calendar type verbose !! @param[out] errno optional, error message !! - SUBROUTINE calendarToString(string, errno) !TESTED-OK + RECURSIVE SUBROUTINE calendarToString(string, errno) !TESTED-OK CHARACTER(len=max_calendar_str_len), INTENT(out) :: string INTEGER :: i TYPE(c_ptr) :: c_pointer @@ -118,7 +118,7 @@ MODULE mtime_juliandelta ! CONTAINS ! - FUNCTION newJuliandelta(sign, day, ms, errno) RESULT(ret_juliandelta) !OK-TESTED. + RECURSIVE FUNCTION newJuliandelta(sign, day, ms, errno) RESULT(ret_juliandelta) !OK-TESTED. TYPE(juliandelta), POINTER :: ret_juliandelta CHARACTER(c_char), VALUE, INTENT(in) :: sign INTEGER(c_int64_t), INTENT(in) :: day @@ -133,7 +133,7 @@ CONTAINS ! !> !! @brief destructor for a Julian delta - SUBROUTINE deallocateJuliandelta(my_juliandelta) !OK-TESTED. + RECURSIVE SUBROUTINE deallocateJuliandelta(my_juliandelta) !OK-TESTED. TYPE(juliandelta), POINTER :: my_juliandelta CALL my_deallocatejuliandelta(C_LOC(my_juliandelta)) my_juliandelta => NULL() @@ -220,7 +220,7 @@ CONTAINS !! @param[in] ms an integer denoting the actual milli seconds of a day !! @param[out] errno optional, error message !! @return ret_julianday a pointer of type(julianday) - FUNCTION newJulianday(day, ms, errno) RESULT(ret_julianday) !OK-TESTED. + RECURSIVE FUNCTION newJulianday(day, ms, errno) RESULT(ret_julianday) !OK-TESTED. TYPE(julianday), POINTER :: ret_julianday INTEGER(c_int64_t), INTENT(in) :: day INTEGER(c_int64_t), INTENT(in) :: ms @@ -235,14 +235,14 @@ CONTAINS !! @brief destructor for a Julian date !! !! @param my_julianday a pointer of type(julianday) - SUBROUTINE deallocateJulianday(my_julianday) !OK-TESTED. + RECURSIVE SUBROUTINE deallocateJulianday(my_julianday) !OK-TESTED. TYPE(julianday), POINTER :: my_julianday CALL my_deallocatejulianday(C_LOC(my_julianday)) my_julianday => NULL() END SUBROUTINE deallocateJulianday ! ! NOTE: Do not call the function using replacejulianday(.,.) directly; Use overloaded '=' instead as in "dest = src" - SUBROUTINE replacejulianday(dest, src) !OK-TESTED. + RECURSIVE SUBROUTINE replacejulianday(dest, src) !OK-TESTED. TYPE(julianday), TARGET, INTENT(inout) :: dest TYPE(julianday), TARGET, INTENT(in) :: src TYPE(c_ptr) :: dummy_ptr @@ -255,7 +255,7 @@ CONTAINS !! @param[in] my_julianday a pointer to type(julianday). The Julian day to be converted to a string !! @param[out] string the Julian day verbose !! @param[out] errno optional, error message - SUBROUTINE juliandayToString(my_julianday, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE juliandayToString(my_julianday, string, errno) !OK-TESTED. TYPE(julianday), POINTER :: my_julianday CHARACTER(len=max_julianday_str_len), INTENT(out) :: string TYPE(c_ptr) :: dummy_ptr @@ -269,7 +269,7 @@ CONTAINS string(i:LEN(string)) = ' ' END SUBROUTINE juliandayToString ! - FUNCTION addJuliandeltaToJulianday(op1, op2) RESULT(ret) + RECURSIVE FUNCTION addJuliandeltaToJulianday(op1, op2) RESULT(ret) TYPE(julianday), TARGET :: ret TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(juliandelta), TARGET, INTENT(in) :: op2 @@ -278,7 +278,7 @@ CONTAINS dummy_ptr = my_addjuliandeltatojulianday(C_LOC(op1), C_LOC(op2), C_LOC(ret)) END FUNCTION addJuliandeltaToJulianday ! - FUNCTION addJuliandayToJuliandelta(op2, op1) RESULT(ret) + RECURSIVE FUNCTION addJuliandayToJuliandelta(op2, op1) RESULT(ret) TYPE(julianday), TARGET :: ret TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(juliandelta), TARGET, INTENT(in) :: op2 @@ -287,7 +287,7 @@ CONTAINS dummy_ptr = my_addjuliandeltatojulianday(C_LOC(op1), C_LOC(op2), C_LOC(ret)) END FUNCTION addJuliandayToJuliandelta ! - FUNCTION subtractJuliandayFromJulianday(op1, op2) RESULT(ret) + RECURSIVE FUNCTION subtractJuliandayFromJulianday(op1, op2) RESULT(ret) TYPE(juliandelta), TARGET :: ret TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(julianday), TARGET, INTENT(in) :: op2 @@ -304,7 +304,7 @@ CONTAINS # define MTIME_PURE_IF_C_LOC_IS_PURE PURE # endif #endif - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION julianday_gt(op1, op2) RESULT(gt) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION julianday_gt(op1, op2) RESULT(gt) LOGICAL :: gt TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(julianday), TARGET, INTENT(in) :: op2 @@ -317,7 +317,7 @@ CONTAINS END IF END FUNCTION julianday_gt ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION julianday_lt(op1, op2) RESULT(lt) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION julianday_lt(op1, op2) RESULT(lt) LOGICAL :: lt TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(julianday), TARGET, INTENT(in) :: op2 @@ -330,7 +330,7 @@ CONTAINS END IF END FUNCTION julianday_lt ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION julianday_lt_or_eq(op1, op2) RESULT(lt_or_eq) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION julianday_lt_or_eq(op1, op2) RESULT(lt_or_eq) LOGICAL :: lt_or_eq TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(julianday), TARGET, INTENT(in) :: op2 @@ -343,7 +343,7 @@ CONTAINS END IF END FUNCTION julianday_lt_or_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION julianday_gt_or_eq(op1, op2) RESULT(gt_or_eq) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION julianday_gt_or_eq(op1, op2) RESULT(gt_or_eq) LOGICAL :: gt_or_eq TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(julianday), TARGET, INTENT(in) :: op2 @@ -356,7 +356,7 @@ CONTAINS END IF END FUNCTION julianday_gt_or_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION julianday_eq(op1, op2) RESULT(eq) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION julianday_eq(op1, op2) RESULT(eq) LOGICAL :: eq TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(julianday), TARGET, INTENT(in) :: op2 @@ -369,7 +369,7 @@ CONTAINS END IF END FUNCTION julianday_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION julianday_ne(op1, op2) RESULT(ne) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION julianday_ne(op1, op2) RESULT(ne) LOGICAL :: ne TYPE(julianday), TARGET, INTENT(in) :: op1 TYPE(julianday), TARGET, INTENT(in) :: op2 @@ -424,7 +424,7 @@ CONTAINS !! @param[in] string an ISO 8601 conforming date string !! @param[out] errno optional, error message !! @return ret_date a pointer of type(date) - FUNCTION newdatefromstring(string, errno) RESULT(ret_date) !OK-TESTED. + RECURSIVE FUNCTION newdatefromstring(string, errno) RESULT(ret_date) !OK-TESTED. TYPE(date), POINTER :: ret_date CHARACTER(len=*), INTENT(in) :: string TYPE(c_ptr) :: c_pointer @@ -441,7 +441,7 @@ CONTAINS !! @param[in] day the day !! @param[out] errno optional, error message !! @return ret_date a pointer of type(date) - FUNCTION newdatefromraw_yi8(year, month, day, errno) RESULT(ret_date) !OK-TESTED. + RECURSIVE FUNCTION newdatefromraw_yi8(year, month, day, errno) RESULT(ret_date) !OK-TESTED. TYPE(date), POINTER :: ret_date INTEGER(c_int64_t), INTENT(in) :: year INTEGER(c_int), INTENT(in) :: month, day @@ -459,7 +459,7 @@ CONTAINS !! @param[in] day the day !! @param[out] errno optional, error message !! @return ret_date a pointer of type(date) - FUNCTION newdatefromraw(year, month, day, errno) RESULT(ret_date) !OK-TESTED. + RECURSIVE FUNCTION newdatefromraw(year, month, day, errno) RESULT(ret_date) !OK-TESTED. TYPE(date), POINTER :: ret_date INTEGER(c_int), INTENT(in) :: year, month, day TYPE(c_ptr) :: c_pointer @@ -474,7 +474,7 @@ CONTAINS !! @param[in] src a pointer of type(date) !! @param[out] errno optional, error message !! @return ret_date a pointer of type(date) - FUNCTION newdatefromconstructandcopy(src, errno) RESULT(dest) !OK-TESTED + RECURSIVE FUNCTION newdatefromconstructandcopy(src, errno) RESULT(dest) !OK-TESTED TYPE(date), POINTER :: dest TYPE(date), TARGET :: src TYPE(c_ptr) :: c_pointer @@ -487,7 +487,7 @@ CONTAINS !! @brief destructor for a date !! !! @param[in] my_date a pointer of type(date) - SUBROUTINE deallocateDate(my_date) !OK-TESTED. + RECURSIVE SUBROUTINE deallocateDate(my_date) !OK-TESTED. TYPE(date), POINTER :: my_date CALL my_deallocatedate(C_LOC(my_date)) my_date => NULL() @@ -498,7 +498,7 @@ CONTAINS !! @param[in] src a pointer of type(date) !! @param[out] dest a pointer of type(date) !! @param[out] errno optional, error message - SUBROUTINE replaceDate(dest, src, errno) !OK-TESTED. + RECURSIVE SUBROUTINE replaceDate(dest, src, errno) !OK-TESTED. TYPE(date), TARGET, INTENT(inout) :: dest TYPE(date), TARGET, INTENT(in) :: src TYPE(c_ptr) :: dummy_ptr @@ -519,7 +519,7 @@ CONTAINS !! !! @param[out] errno !! Optional, error message - SUBROUTINE dateToString(my_date, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE dateToString(my_date, string, errno) !OK-TESTED. TYPE(date), POINTER :: my_date CHARACTER(len=max_date_str_len) :: string TYPE(c_ptr) :: dummy_ptr @@ -547,7 +547,7 @@ CONTAINS !! Desired Format string. CRITICAL: Inappropriate fmt string will cause dump. !! !! @param[out] errno optional, error message - SUBROUTINE dateToPosixString(my_date, string, fmtstr, errno) !OK-TESTED. + RECURSIVE SUBROUTINE dateToPosixString(my_date, string, fmtstr, errno) !OK-TESTED. TYPE(date), POINTER :: my_date CHARACTER(len=max_date_str_len) :: string CHARACTER(len=*) :: fmtstr @@ -602,7 +602,7 @@ MODULE mtime_time CONTAINS ! !! @param[out] errno optional, error message - FUNCTION newtimefromstring(string, errno) RESULT(ret_time) !OK-TESTED. + RECURSIVE FUNCTION newtimefromstring(string, errno) RESULT(ret_time) !OK-TESTED. TYPE(time), POINTER :: ret_time CHARACTER(len=*), INTENT(in) :: string TYPE(c_ptr) :: c_pointer @@ -613,7 +613,7 @@ CONTAINS END FUNCTION newtimefromstring ! !! @param[out] errno optional, error message - FUNCTION newtimefromraw(hour, minute, second, ms, errno) RESULT(ret_time) !OK-TESTED. + RECURSIVE FUNCTION newtimefromraw(hour, minute, second, ms, errno) RESULT(ret_time) !OK-TESTED. TYPE(time), POINTER :: ret_time INTEGER(c_int), INTENT(in) :: hour, minute, second, ms TYPE(c_ptr) :: c_pointer @@ -624,7 +624,7 @@ CONTAINS END FUNCTION newtimefromraw ! !! @param[out] errno optional, error message - FUNCTION newtimefromconstructandcopy(src, errno) RESULT(dest) !OK-TESTED. + RECURSIVE FUNCTION newtimefromconstructandcopy(src, errno) RESULT(dest) !OK-TESTED. TYPE(time), POINTER :: dest TYPE(time), TARGET :: src TYPE(c_ptr) :: c_pointer @@ -638,7 +638,7 @@ CONTAINS !! !! @param my_time !! A pointer to type time. my_time is deallocated. - SUBROUTINE deallocateTime(my_time) !OK-TESTED. + RECURSIVE SUBROUTINE deallocateTime(my_time) !OK-TESTED. TYPE(time), POINTER :: my_time CALL my_deallocatetime(C_LOC(my_time)) my_time => NULL() @@ -655,7 +655,7 @@ CONTAINS !! A pointer to type time. Copy "TO" time object. !! !! @param[out] errno optional, error message - SUBROUTINE replaceTime(dest, src, errno) !OK-TESTED. + RECURSIVE SUBROUTINE replaceTime(dest, src, errno) !OK-TESTED. TYPE(time), TARGET, INTENT(in) :: src TYPE(time), TARGET, INTENT(inout) :: dest TYPE(c_ptr) :: dummy_ptr @@ -675,7 +675,7 @@ CONTAINS !! String where time is to be written. !! !! @param[out] errno optional, error message - SUBROUTINE timeToString(my_time, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE timeToString(my_time, string, errno) !OK-TESTED. TYPE(time), POINTER :: my_time CHARACTER(len=max_time_str_len) :: string TYPE(c_ptr) :: dummy_ptr @@ -701,7 +701,7 @@ CONTAINS !! Desired Format string. CRITICAL: Inappropriate fmt string will cause dump. !! !! @param[out] errno optional, error message - SUBROUTINE timeToPosixString(my_time, string, fmtstr, errno) !OK-TESTED. + RECURSIVE SUBROUTINE timeToPosixString(my_time, string, fmtstr, errno) !OK-TESTED. TYPE(time), POINTER :: my_time CHARACTER(len=max_time_str_len) :: string CHARACTER(len=32) :: fmtstr @@ -813,7 +813,7 @@ MODULE mtime_datetime CONTAINS ! !! @param[out] errno optional, error message - FUNCTION newdatetimefromstring(string, errno) RESULT(ret_datetime) !OK-TESTED + RECURSIVE FUNCTION newdatetimefromstring(string, errno) RESULT(ret_datetime) !OK-TESTED TYPE(datetime), POINTER :: ret_datetime CHARACTER(len=*), INTENT(in) :: string TYPE(c_ptr) :: c_pointer @@ -824,7 +824,7 @@ CONTAINS END FUNCTION newdatetimefromstring ! !! @param[out] errno optional, error message - FUNCTION newdatetimefromraw_yi8(year, month, day, hour, minute, second, ms, errno) RESULT(ret_datetime) !OK-TESTED + RECURSIVE FUNCTION newdatetimefromraw_yi8(year, month, day, hour, minute, second, ms, errno) RESULT(ret_datetime) !OK-TESTED TYPE(datetime), POINTER :: ret_datetime INTEGER(c_int64_t), INTENT(in) :: year INTEGER(c_int), INTENT(in) :: month, day, hour, minute, second, ms @@ -836,7 +836,7 @@ CONTAINS END FUNCTION newdatetimefromraw_yi8 ! !! @param[out] errno optional, error message - FUNCTION newdatetimefromraw(year, month, day, hour, minute, second, ms, errno) RESULT(ret_datetime) !OK-TESTED + RECURSIVE FUNCTION newdatetimefromraw(year, month, day, hour, minute, second, ms, errno) RESULT(ret_datetime) !OK-TESTED TYPE(datetime), POINTER :: ret_datetime INTEGER(c_int), INTENT(in) :: year, month, day, hour, minute, second, ms TYPE(c_ptr) :: c_pointer @@ -847,7 +847,7 @@ CONTAINS END FUNCTION newdatetimefromraw ! !! @param[out] errno optional, error message - FUNCTION newdatetimefromconstructandcopy(src, errno) RESULT(dest) !OK-TESTED. + RECURSIVE FUNCTION newdatetimefromconstructandcopy(src, errno) RESULT(dest) !OK-TESTED. TYPE(datetime), POINTER :: dest TYPE(datetime), TARGET :: src TYPE(c_ptr) :: c_pointer @@ -862,7 +862,7 @@ CONTAINS ! @note This function does not return a copy of one of the arguments ! but returns only the corresponding result point to avoid ! unnecessary deallocate calls. - FUNCTION datetime_min(a, b) RESULT(res) + RECURSIVE FUNCTION datetime_min(a, b) RESULT(res) TYPE(datetime), POINTER :: res TYPE(datetime), POINTER :: a, b @@ -878,7 +878,7 @@ CONTAINS ! @note This function does not return a copy of one of the arguments ! but returns only the corresponding result point to avoid ! unnecessary deallocate calls. - FUNCTION datetime_max(a, b) RESULT(res) + RECURSIVE FUNCTION datetime_max(a, b) RESULT(res) TYPE(datetime), POINTER :: res TYPE(datetime), POINTER :: a, b @@ -894,7 +894,7 @@ CONTAINS !! !! @param my_datetime !! A pointer to type datetime. my_datetime is deallocated. - SUBROUTINE deallocateDatetime(my_datetime) !OK-TESTED. + RECURSIVE SUBROUTINE deallocateDatetime(my_datetime) !OK-TESTED. TYPE(datetime), POINTER :: my_datetime CALL my_deallocatedatetime(C_LOC(my_datetime)) NULLIFY (my_datetime) @@ -911,7 +911,7 @@ CONTAINS !! String where datetime is to be written. !! !! @param[out] errno optional, error message - SUBROUTINE datetimeToString(my_datetime, string, errno) !OK-TESTED + RECURSIVE SUBROUTINE datetimeToString(my_datetime, string, errno) !OK-TESTED TYPE(datetime), TARGET, INTENT(in) :: my_datetime CHARACTER(len=max_datetime_str_len) :: string TYPE(c_ptr) :: dummy_ptr @@ -943,7 +943,7 @@ CONTAINS !! Desired Format string. CRITICAL: Inappropriate fmt string will cause dump. !! !! @param[out] errno optional, error message - SUBROUTINE datetimeToPosixString(my_datetime, string, fmtstr, errno) !OK-TESTED. + RECURSIVE SUBROUTINE datetimeToPosixString(my_datetime, string, fmtstr, errno) !OK-TESTED. TYPE(datetime), TARGET, INTENT(in) :: my_datetime CHARACTER(len=max_datetime_str_len) :: string CHARACTER(len=*) :: fmtstr @@ -959,14 +959,14 @@ CONTAINS END SUBROUTINE datetimeToPosixString ! ! NOTE: Do not call the function using replacedatetime(.,.) directly; Use overloaded '=' instead as in "dest = src" - SUBROUTINE replacedatetime(dest, src) !OK-TESTED. + RECURSIVE SUBROUTINE replacedatetime(dest, src) !OK-TESTED. TYPE(datetime), TARGET, INTENT(inout) :: dest TYPE(datetime), TARGET, INTENT(in) :: src TYPE(c_ptr) :: dummy_ptr dummy_ptr = my_replacedatetime(C_LOC(src), C_LOC(dest)) END SUBROUTINE replacedatetime ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION datetime_gt(op1, op2) RESULT(gt) !OK-TESTED. + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION datetime_gt(op1, op2) RESULT(gt) !OK-TESTED. LOGICAL :: gt TYPE(datetime), TARGET, INTENT(in) :: op1 TYPE(datetime), TARGET, INTENT(in) :: op2 @@ -975,7 +975,7 @@ CONTAINS gt = (ret == 1_c_int) END FUNCTION datetime_gt ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION datetime_lt(op1, op2) RESULT(lt) !OK-TESTED. + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION datetime_lt(op1, op2) RESULT(lt) !OK-TESTED. LOGICAL :: lt TYPE(datetime), TARGET, INTENT(in) :: op1 TYPE(datetime), TARGET, INTENT(in) :: op2 @@ -984,7 +984,7 @@ CONTAINS lt = (ret == -1_c_int) END FUNCTION datetime_lt ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION datetime_lt_or_eq(op1, op2) RESULT(lt_or_eq) !OK-TESTED. + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION datetime_lt_or_eq(op1, op2) RESULT(lt_or_eq) !OK-TESTED. LOGICAL :: lt_or_eq TYPE(datetime), TARGET, INTENT(in) :: op1 TYPE(datetime), TARGET, INTENT(in) :: op2 @@ -993,7 +993,7 @@ CONTAINS lt_or_eq = (ret == 0_c_int) .OR. (ret == -1_c_int) END FUNCTION datetime_lt_or_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION datetime_gt_or_eq(op1, op2) RESULT(gt_or_eq) !OK-TESTED + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION datetime_gt_or_eq(op1, op2) RESULT(gt_or_eq) !OK-TESTED LOGICAL :: gt_or_eq TYPE(datetime), TARGET, INTENT(in) :: op1 TYPE(datetime), TARGET, INTENT(in) :: op2 @@ -1002,7 +1002,7 @@ CONTAINS gt_or_eq = (ret == 0_c_int) .OR. (ret == 1_c_int) END FUNCTION datetime_gt_or_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION datetime_eq(op1, op2) RESULT(eq) !OK-TESTED. + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION datetime_eq(op1, op2) RESULT(eq) !OK-TESTED. LOGICAL :: eq TYPE(datetime), TARGET, INTENT(in) :: op1 TYPE(datetime), TARGET, INTENT(in) :: op2 @@ -1011,7 +1011,7 @@ CONTAINS eq = ret == 0_c_int END FUNCTION datetime_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION datetime_ne(op1, op2) RESULT(ne) !OK-TESTED. + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION datetime_ne(op1, op2) RESULT(ne) !OK-TESTED. LOGICAL :: ne TYPE(datetime), TARGET, INTENT(in) :: op1 TYPE(datetime), TARGET, INTENT(in) :: op2 @@ -1035,7 +1035,7 @@ CONTAINS !! Integer value of nod. The value depends on the month and the calendar type. Zero indicates error. !! !! @param[out] errno optional, error message - FUNCTION getNoOfDaysInMonthDateTime(dt, errno) !OK-TESTED. + RECURSIVE FUNCTION getNoOfDaysInMonthDateTime(dt, errno) !OK-TESTED. TYPE(datetime), TARGET :: dt INTEGER(c_int) :: getNoOfDaysInMonthDateTime INTEGER, OPTIONAL:: errno @@ -1057,7 +1057,7 @@ CONTAINS !! Integer value of nod. The value depends on the year and the calendar type. Zero indicates error. !! !! @param[out] errno optional, error message - FUNCTION getNoOfDaysInYearDateTime(dt, errno) !OK-TESTED. + RECURSIVE FUNCTION getNoOfDaysInYearDateTime(dt, errno) !OK-TESTED. TYPE(datetime), TARGET :: dt INTEGER(c_int) :: getNoOfDaysInYearDateTime INTEGER, OPTIONAL:: errno @@ -1080,7 +1080,7 @@ CONTAINS !! Integer value of doy. The value depends on the calendar type. Zero indicates error. !! !! @param[out] errno optional, error message - FUNCTION getDayOfYearFromDateTime(dt, errno) !OK-TESTED. + RECURSIVE FUNCTION getDayOfYearFromDateTime(dt, errno) !OK-TESTED. TYPE(datetime), TARGET :: dt INTEGER(c_int) :: getDayOfYearFromDateTime INTEGER, OPTIONAL:: errno @@ -1097,7 +1097,7 @@ CONTAINS !! int(i8) value of no_of_seconds. -1 indicates error. !! !! @param[out] errno optional, error message - FUNCTION getNoOfSecondsElapsedInMonthDateTime(dt, errno) !OK-TESTED. + RECURSIVE FUNCTION getNoOfSecondsElapsedInMonthDateTime(dt, errno) !OK-TESTED. TYPE(datetime), TARGET :: dt INTEGER(c_int64_t) :: getNoOfSecondsElapsedInMonthDateTime INTEGER, OPTIONAL:: errno @@ -1114,7 +1114,7 @@ CONTAINS !! int value of no_of_seconds. -1 indicates error. !! !! @param[out] errno optional, error message - FUNCTION getNoOfSecondsElapsedInDayDateTime(dt, errno) !OK-TESTED. + RECURSIVE FUNCTION getNoOfSecondsElapsedInDayDateTime(dt, errno) !OK-TESTED. TYPE(datetime), TARGET :: dt INTEGER(c_int) :: getNoOfSecondsElapsedInDayDateTime INTEGER, OPTIONAL:: errno @@ -1134,7 +1134,7 @@ CONTAINS !! A pointer to type julianday. JD where the converted value is stored. !! !! @param[out] errno optional, error message - SUBROUTINE getJulianDayFromDatetime(dt, jd, errno) !OK-TESTED. + RECURSIVE SUBROUTINE getJulianDayFromDatetime(dt, jd, errno) !OK-TESTED. TYPE(datetime), TARGET :: dt TYPE(julianday), TARGET :: jd TYPE(c_ptr) :: dummy_ptr @@ -1155,7 +1155,7 @@ CONTAINS !! A pointer to type datetime. The DT where the converted value is stored. !! !! @param[out] errno optional, error message - SUBROUTINE getDatetimeFromJulianDay(jd, dt, errno) + RECURSIVE SUBROUTINE getDatetimeFromJulianDay(jd, dt, errno) TYPE(julianday), TARGET, INTENT(in) :: jd TYPE(datetime), TARGET, INTENT(out) :: dt TYPE(c_ptr) :: dummy_ptr @@ -1293,7 +1293,7 @@ MODULE mtime_timedelta CONTAINS ! !! @param[out] errno optional, error message - FUNCTION newtimedeltafromstring(string, errno) RESULT(ret_timedelta) !OK-TESTED. + RECURSIVE FUNCTION newtimedeltafromstring(string, errno) RESULT(ret_timedelta) !OK-TESTED. TYPE(timedelta), POINTER :: ret_timedelta CHARACTER(len=*), INTENT(in) :: string TYPE(c_ptr) :: c_pointer @@ -1308,7 +1308,7 @@ CONTAINS END FUNCTION newtimedeltafromstring ! !! @param[out] errno optional, error message - FUNCTION newtimedeltafromraw(sign, year, month, day, hour, minute, second, ms, errno) RESULT(ret_timedelta) + RECURSIVE FUNCTION newtimedeltafromraw(sign, year, month, day, hour, minute, second, ms, errno) RESULT(ret_timedelta) TYPE(timedelta), POINTER :: ret_timedelta CHARACTER(len=*), INTENT(in) :: sign INTEGER(c_int), INTENT(in) :: year, month, day, hour, minute, second, ms @@ -1326,7 +1326,7 @@ CONTAINS END FUNCTION newtimedeltafromraw ! !! @param[out] errno optional, error message - FUNCTION newtimedeltafromraw_yi8(sign, year, month, day, hour, minute, second, ms, errno) RESULT(ret_timedelta) + RECURSIVE FUNCTION newtimedeltafromraw_yi8(sign, year, month, day, hour, minute, second, ms, errno) RESULT(ret_timedelta) TYPE(timedelta), POINTER :: ret_timedelta CHARACTER(len=*), INTENT(in) :: sign INTEGER(c_int64_t), INTENT(in) :: year @@ -1345,7 +1345,7 @@ CONTAINS END FUNCTION newtimedeltafromraw_yi8 ! !! @param[out] errno optional, error message - FUNCTION newtimedeltafromconstructandcopy(src, errno) RESULT(dest) !OK-TESTED. + RECURSIVE FUNCTION newtimedeltafromconstructandcopy(src, errno) RESULT(dest) !OK-TESTED. TYPE(timedelta), POINTER :: dest TYPE(timedelta), TARGET :: src TYPE(c_ptr) :: c_pointer @@ -1363,13 +1363,13 @@ CONTAINS !! !! @param my_timedelta !! A pointer to typetimedelta. my_timedelta is deallocated. - SUBROUTINE deallocateTimedelta(my_timedelta) !OK-TESTED. + RECURSIVE SUBROUTINE deallocateTimedelta(my_timedelta) !OK-TESTED. TYPE(timedelta), POINTER :: my_timedelta CALL my_deallocatetimedelta(C_LOC(my_timedelta)) NULLIFY (my_timedelta) END SUBROUTINE deallocateTimedelta ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION timedelta_gt(op1, op2) RESULT(gt) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION timedelta_gt(op1, op2) RESULT(gt) LOGICAL :: gt TYPE(timedelta), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1378,7 +1378,7 @@ CONTAINS gt = ret == 1_c_int END FUNCTION timedelta_gt ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION timedelta_lt(op1, op2) RESULT(lt) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION timedelta_lt(op1, op2) RESULT(lt) LOGICAL :: lt TYPE(timedelta), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1387,7 +1387,7 @@ CONTAINS lt = ret == -1_c_int END FUNCTION timedelta_lt ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION timedelta_lt_or_eq(op1, op2) RESULT(lt_or_eq) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION timedelta_lt_or_eq(op1, op2) RESULT(lt_or_eq) LOGICAL :: lt_or_eq TYPE(timedelta), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1396,7 +1396,7 @@ CONTAINS lt_or_eq = ret == 0_c_int .OR. ret == -1_c_int END FUNCTION timedelta_lt_or_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION timedelta_gt_or_eq(op1, op2) RESULT(gt_or_eq) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION timedelta_gt_or_eq(op1, op2) RESULT(gt_or_eq) LOGICAL :: gt_or_eq TYPE(timedelta), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1405,7 +1405,7 @@ CONTAINS gt_or_eq = ret == 0_c_int .OR. ret == 1_c_int END FUNCTION timedelta_gt_or_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION timedelta_eq(op1, op2) RESULT(eq) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION timedelta_eq(op1, op2) RESULT(eq) LOGICAL :: eq TYPE(timedelta), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1414,7 +1414,7 @@ CONTAINS eq = ret == 0_c_int END FUNCTION timedelta_eq ! - MTIME_PURE_IF_C_LOC_IS_PURE FUNCTION timedelta_ne(op1, op2) RESULT(ne) + MTIME_PURE_IF_C_LOC_IS_PURE RECURSIVE FUNCTION timedelta_ne(op1, op2) RESULT(ne) LOGICAL :: ne TYPE(timedelta), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1443,7 +1443,7 @@ CONTAINS !! !! @return ret !! A pointer to TimeDelta containing the result of subtraction. - FUNCTION getTimeDeltaFromDate(op1, op2) RESULT(ret) !OK-TESTED. + RECURSIVE FUNCTION getTimeDeltaFromDate(op1, op2) RESULT(ret) !OK-TESTED. TYPE(timedelta), TARGET :: ret TYPE(date), TARGET, INTENT(in) :: op1, op2 TYPE(c_ptr) :: dummy_ptr @@ -1472,7 +1472,7 @@ CONTAINS !! !! @return ret !! A pointer to TimeDelta containing the result of subtraction. - FUNCTION getTimeDeltaFromDateTime(op1, op2) RESULT(ret) !OK-TESTED. + RECURSIVE FUNCTION getTimeDeltaFromDateTime(op1, op2) RESULT(ret) !OK-TESTED. TYPE(timedelta), TARGET :: ret TYPE(datetime), TARGET, INTENT(in) :: op1, op2 TYPE(c_ptr) :: dummy_ptr @@ -1500,7 +1500,7 @@ CONTAINS !! Integer value of totalmilliSeconds. 0 indicates error. !! !! WARNING: TD 0 is error. If you know your TD is 0, ignore the error flag. - FUNCTION getTotalMilliSecondsTimeDelta(td, dt, errno) !OK-TESTED. + RECURSIVE FUNCTION getTotalMilliSecondsTimeDelta(td, dt, errno) !OK-TESTED. INTEGER(c_int64_t) :: getTotalMilliSecondsTimeDelta TYPE(timedelta), TARGET, INTENT(in):: td TYPE(datetime), TARGET, INTENT(in) :: dt @@ -1529,7 +1529,7 @@ CONTAINS !! Integer value of totalSeconds. 0 indicates error. !! !! WARNING: TD 0 is error. If you know your TD is 0, ignore the error flag. - FUNCTION getTotalSecondsTimeDelta(td, dt, errno) !OK-TESTED. + RECURSIVE FUNCTION getTotalSecondsTimeDelta(td, dt, errno) !OK-TESTED. INTEGER(c_int64_t) :: getTotalSecondsTimeDelta TYPE(timedelta), TARGET, INTENT(in) :: td TYPE(datetime), TARGET, INTENT(in) :: dt @@ -1550,7 +1550,7 @@ CONTAINS !! String where timedelta is to be written. !! !! @param[out] errno optional, error message - SUBROUTINE timedeltaToString(my_timedelta, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE timedeltaToString(my_timedelta, string, errno) !OK-TESTED. TYPE(timedelta), TARGET :: my_timedelta CHARACTER(len=max_timedelta_str_len) :: string TYPE(c_ptr) :: dummy_ptr @@ -1569,7 +1569,7 @@ CONTAINS END IF END SUBROUTINE timedeltaToString ! - FUNCTION addTimedeltaToDatetime(op1, op2) RESULT(ret) !OK-TESTED. + RECURSIVE FUNCTION addTimedeltaToDatetime(op1, op2) RESULT(ret) !OK-TESTED. TYPE(datetime), TARGET :: ret TYPE(datetime), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1578,7 +1578,7 @@ CONTAINS dummy_ptr = my_addtimedeltatodatetime(C_LOC(op1), C_LOC(op2), C_LOC(ret)) END FUNCTION addTimedeltaToDatetime ! - FUNCTION addDatetimeToTimedelta(op2, op1) RESULT(ret) !OK-TESTED. + RECURSIVE FUNCTION addDatetimeToTimedelta(op2, op1) RESULT(ret) !OK-TESTED. TYPE(datetime), TARGET :: ret TYPE(datetime), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1587,7 +1587,7 @@ CONTAINS dummy_ptr = my_addtimedeltatodatetime(C_LOC(op1), C_LOC(op2), C_LOC(ret)) END FUNCTION addDatetimeToTimedelta ! - FUNCTION addTimedeltaToDate(op1, op2) RESULT(ret) !OK-TESTED. + RECURSIVE FUNCTION addTimedeltaToDate(op1, op2) RESULT(ret) !OK-TESTED. TYPE(date), TARGET :: ret TYPE(date), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1596,7 +1596,7 @@ CONTAINS dummy_ptr = my_addtimedeltatodate(C_LOC(op1), C_LOC(op2), C_LOC(ret)) END FUNCTION addTimedeltaToDate ! - FUNCTION addDateToTimedelta(op2, op1) RESULT(ret) !OK-TESTED. + RECURSIVE FUNCTION addDateToTimedelta(op2, op1) RESULT(ret) !OK-TESTED. TYPE(date), TARGET :: ret TYPE(date), TARGET, INTENT(in) :: op1 TYPE(timedelta), TARGET, INTENT(in) :: op2 @@ -1605,7 +1605,7 @@ CONTAINS dummy_ptr = my_addtimedeltatodate(C_LOC(op1), C_LOC(op2), C_LOC(ret)) END FUNCTION addDateToTimedelta ! - FUNCTION elementwiseScalarMultiplyTimeDelta(base_td, ilambda) RESULT(scaled_td) !OK-TESTED. + RECURSIVE FUNCTION elementwiseScalarMultiplyTimeDelta(base_td, ilambda) RESULT(scaled_td) !OK-TESTED. TYPE(timedelta), TARGET :: scaled_td INTEGER(c_int32_t), INTENT(in) :: ilambda TYPE(timedelta), TARGET, INTENT(in) :: base_td @@ -1616,7 +1616,7 @@ CONTAINS dummy_ptr = my_elementwisescalarmultiplytimedelta(C_LOC(base_td), lambda, C_LOC(scaled_td)) END FUNCTION elementwiseScalarMultiplyTimeDelta ! - FUNCTION elementwiseScalarMultiplyTimeDeltaInv(ilambda, base_td) RESULT(scaled_td) !OK-TESTED. + RECURSIVE FUNCTION elementwiseScalarMultiplyTimeDeltaInv(ilambda, base_td) RESULT(scaled_td) !OK-TESTED. TYPE(timedelta), TARGET :: scaled_td INTEGER(c_int32_t), INTENT(in) :: ilambda TYPE(timedelta), TARGET, INTENT(in) :: base_td @@ -1627,7 +1627,7 @@ CONTAINS dummy_ptr = my_elementwisescalarmultiplytimedelta(C_LOC(base_td), lambda, C_LOC(scaled_td)) END FUNCTION elementwiseScalarMultiplyTimeDeltaInv ! - FUNCTION elementwiseScalarMultiplyTimeDelta_long(base_td, lambda) RESULT(scaled_td) !OK-TESTED. + RECURSIVE FUNCTION elementwiseScalarMultiplyTimeDelta_long(base_td, lambda) RESULT(scaled_td) !OK-TESTED. TYPE(timedelta), TARGET :: scaled_td INTEGER(c_int64_t), INTENT(in) :: lambda TYPE(timedelta), TARGET, INTENT(in) :: base_td @@ -1636,7 +1636,7 @@ CONTAINS dummy_ptr = my_elementwisescalarmultiplytimedelta(C_LOC(base_td), lambda, C_LOC(scaled_td)) END FUNCTION elementwiseScalarMultiplyTimeDelta_long ! - FUNCTION elementwiseScalarMultiplyTimeDeltaInv_long(lambda, base_td) RESULT(scaled_td) !OK-TESTED. + RECURSIVE FUNCTION elementwiseScalarMultiplyTimeDeltaInv_long(lambda, base_td) RESULT(scaled_td) !OK-TESTED. TYPE(timedelta), TARGET :: scaled_td INTEGER(c_int64_t), INTENT(in) :: lambda TYPE(timedelta), TARGET, INTENT(in) :: base_td @@ -1645,7 +1645,7 @@ CONTAINS dummy_ptr = my_elementwisescalarmultiplytimedelta(C_LOC(base_td), lambda, C_LOC(scaled_td)) END FUNCTION elementwiseScalarMultiplyTimeDeltaInv_long ! - FUNCTION elementwisescalarmultiplytimedelta_real(base_td, lambda) RESULT(scaled_td) !OK-TESTED. + RECURSIVE FUNCTION elementwisescalarmultiplytimedelta_real(base_td, lambda) RESULT(scaled_td) !OK-TESTED. TYPE(timedelta), TARGET :: scaled_td REAL(c_double), INTENT(in) :: lambda TYPE(timedelta), TARGET, INTENT(in) :: base_td @@ -1654,7 +1654,7 @@ CONTAINS dummy_ptr = my_elementwisescalarmultiplytimedeltadp(C_LOC(base_td), lambda, C_LOC(scaled_td)) END FUNCTION elementwisescalarmultiplytimedelta_real ! - FUNCTION elementwiseAddTimeDeltatoTimeDelta(td1, td2) RESULT(added_td) !OK-TESTED. + RECURSIVE FUNCTION elementwiseAddTimeDeltatoTimeDelta(td1, td2) RESULT(added_td) !OK-TESTED. TYPE(timedelta), TARGET :: added_td TYPE(timedelta), TARGET, INTENT(in) :: td1, td2 TYPE(c_ptr) :: dummy_ptr @@ -1675,7 +1675,7 @@ CONTAINS !! !! @return rem !! modulo(a, p) - FUNCTION moduloTimedelta(a, p, quot) RESULT(rem) + RECURSIVE FUNCTION moduloTimedelta(a, p, quot) RESULT(rem) TYPE(timedelta), TARGET, INTENT(in) :: a TYPE(timedelta), TARGET, INTENT(in) :: p INTEGER(c_int64_t), TARGET, INTENT(out) :: quot @@ -1694,7 +1694,7 @@ CONTAINS !! @param[out] string !! Translated string is written here. !! - SUBROUTINE getPTStringFromMS(ms, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE getPTStringFromMS(ms, string, errno) !OK-TESTED. INTEGER(c_int64_t), INTENT(in) :: ms CHARACTER(len=*) :: string TYPE(c_ptr) :: dummy_ptr @@ -1713,7 +1713,7 @@ CONTAINS END IF END SUBROUTINE getPTStringFromMS ! - SUBROUTINE getPTStringFromSecondsInt(s, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE getPTStringFromSecondsInt(s, string, errno) !OK-TESTED. INTEGER(c_int64_t) :: s CHARACTER(len=*) :: string TYPE(c_ptr) :: dummy_ptr @@ -1732,7 +1732,7 @@ CONTAINS END IF END SUBROUTINE getPTStringFromSecondsInt ! - SUBROUTINE getPTStringFromSecondsFloat(s, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE getPTStringFromSecondsFloat(s, string, errno) !OK-TESTED. REAL(c_float) :: s CHARACTER(len=*) :: string TYPE(c_ptr) :: dummy_ptr @@ -1751,7 +1751,7 @@ CONTAINS END IF END SUBROUTINE getPTStringFromSecondsFloat ! - SUBROUTINE getPTStringFromSecondsDouble(s, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE getPTStringFromSecondsDouble(s, string, errno) !OK-TESTED. REAL(c_double) :: s CHARACTER(len=*) :: string TYPE(c_ptr) :: dummy_ptr @@ -1781,7 +1781,7 @@ CONTAINS !! @param[out] string !! Translated string is written here. !! - SUBROUTINE getPTStringFromMinutes(m, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE getPTStringFromMinutes(m, string, errno) !OK-TESTED. INTEGER(c_int64_t) :: m CHARACTER(len=*) :: string TYPE(c_ptr) :: dummy_ptr @@ -1811,7 +1811,7 @@ CONTAINS !! @param[out] string !! Translated string is written here. !! - SUBROUTINE getPTStringFromHours(h, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE getPTStringFromHours(h, string, errno) !OK-TESTED. INTEGER(c_int64_t) :: h CHARACTER(len=*) :: string TYPE(c_ptr) :: dummy_ptr @@ -1833,7 +1833,7 @@ CONTAINS !> !! @brief Convert time delta to "Julian calendar delta". !! - SUBROUTINE timeDeltaToJulianDelta(td, dt, jd) + RECURSIVE SUBROUTINE timeDeltaToJulianDelta(td, dt, jd) TYPE(c_ptr) :: dummy_ptr TYPE(timedelta), TARGET, INTENT(in) :: td TYPE(datetime), TARGET, INTENT(in) :: dt @@ -1853,7 +1853,7 @@ CONTAINS !! @param[out] quotient !! A pointer to type divisionquotienttimespan !! - SUBROUTINE divideTimeDeltaInSeconds(dividend, divisor, quotient, errna)!OK-UNTESTED. + RECURSIVE SUBROUTINE divideTimeDeltaInSeconds(dividend, divisor, quotient, errna)!OK-UNTESTED. TYPE(timedelta), TARGET, INTENT(in) :: dividend TYPE(timedelta), TARGET, INTENT(in) :: divisor TYPE(divisionquotienttimespan), TARGET, INTENT(out) :: quotient @@ -1875,7 +1875,7 @@ CONTAINS !! Interval given in seconds. !! !! @return result of division. NULL indicates error. - SUBROUTINE divideTwoDatetimeDiffsInSeconds(dt1_dividend, dt2_dividend, & + RECURSIVE SUBROUTINE divideTwoDatetimeDiffsInSeconds(dt1_dividend, dt2_dividend, & & dt1_divisor, dt2_divisor, & & denominator, quotient) TYPE(datetime), TARGET, INTENT(in) :: dt1_dividend @@ -1907,7 +1907,7 @@ CONTAINS !! @param[out] quotient !! A pointer to type divisionquotienttimespan !! - SUBROUTINE divideDatetimeDifferenceInSeconds(dt1, dt2, divisor, quotient, errna) + RECURSIVE SUBROUTINE divideDatetimeDifferenceInSeconds(dt1, dt2, divisor, quotient, errna) TYPE(datetime), TARGET, INTENT(in) :: dt1 TYPE(datetime), TARGET, INTENT(in) :: dt2 TYPE(timedelta), TARGET, INTENT(in) :: divisor @@ -1983,7 +1983,7 @@ MODULE mtime_events CONTAINS ! !! @param[out] errno optional, error message - FUNCTION newEventWithString(name, referenceDate, firstdate, lastDate, interval, offset, errno) RESULT(ret_event) !OK-TESTED. + RECURSIVE FUNCTION newEventWithString(name, referenceDate, firstdate, lastDate, interval, offset, errno) RESULT(ret_event) !OK-TESTED. TYPE(event), POINTER :: ret_event CHARACTER(len=*), INTENT(in) :: name CHARACTER(len=*), INTENT(in) :: referenceDate @@ -2011,7 +2011,7 @@ CONTAINS END FUNCTION newEventWithString ! !! @param[out] errno optional, error message - FUNCTION newEventWithDataTypes(name, referenceDate, firstdate, lastDate, interval, offset, errno) RESULT(ret_event) !OK-TESTED. + RECURSIVE FUNCTION newEventWithDataTypes(name, referenceDate, firstdate, lastDate, interval, offset, errno) RESULT(ret_event) !OK-TESTED. TYPE(event), POINTER :: ret_event CHARACTER(len=*), INTENT(in) :: name TYPE(datetime), POINTER, INTENT(in) :: referenceDate @@ -2039,13 +2039,13 @@ CONTAINS !! !! WARNING: If my_event was added to a group, this should never be called; !! use removeEventFromEventGroup instead. - SUBROUTINE deallocateEvent(my_event) + RECURSIVE SUBROUTINE deallocateEvent(my_event) TYPE(event), POINTER :: my_event CALL my_deallocateevent(C_LOC(my_event)) my_event => NULL() END SUBROUTINE deallocateEvent !> - FUNCTION constructAndCopyEvent(my_event, errno) RESULT(ret_event) !OK-TESTED. + RECURSIVE FUNCTION constructAndCopyEvent(my_event, errno) RESULT(ret_event) !OK-TESTED. TYPE(event), POINTER :: ret_event TYPE(event), TARGET, INTENT(in) :: my_event INTEGER, OPTIONAL, INTENT(out) :: errno @@ -2064,7 +2064,7 @@ CONTAINS !! String where event is to be written. !! !! @param[out] errno optional, error message - SUBROUTINE eventToString(my_event, string, errno) !TODO:C code still incomplete. + RECURSIVE SUBROUTINE eventToString(my_event, string, errno) !TODO:C code still incomplete. TYPE(event), POINTER, INTENT(in) :: my_event CHARACTER(len=max_eventname_str_len), INTENT(out) :: string TYPE(c_ptr) :: dummy_ptr @@ -2106,7 +2106,7 @@ CONTAINS !! !! @return ret !! true/false indicating if the event is active. - FUNCTION isCurrentEventActive(my_event, my_datetime, plus_slack, minus_slack) RESULT(ret) + RECURSIVE FUNCTION isCurrentEventActive(my_event, my_datetime, plus_slack, minus_slack) RESULT(ret) TYPE(event), POINTER, INTENT(in) :: my_event TYPE(datetime), TARGET, INTENT(in) :: my_datetime TYPE(timedelta), POINTER, OPTIONAL, INTENT(in) :: plus_slack @@ -2134,7 +2134,7 @@ CONTAINS !! !! @returns ret !! Logical: true if next event is on new day - FUNCTION isEventNextInNextDay(my_event) RESULT(ret) + RECURSIVE FUNCTION isEventNextInNextDay(my_event) RESULT(ret) TYPE(event), POINTER, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_iseventnextinnextday(C_LOC(my_event)) @@ -2147,7 +2147,7 @@ CONTAINS !! !! @returns ret !! Logical: true if next event is in a new month - FUNCTION iseventNextInNextMonth(my_event) RESULT(ret) + RECURSIVE FUNCTION iseventNextInNextMonth(my_event) RESULT(ret) TYPE(event), POINTER, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_iseventnextinnextmonth(C_LOC(my_event)) @@ -2160,7 +2160,7 @@ CONTAINS !! !! @returns ret !! Logical: true if next event is in a new year - FUNCTION iseventNextInNextYear(my_event) RESULT(ret) + RECURSIVE FUNCTION iseventNextInNextYear(my_event) RESULT(ret) TYPE(event), POINTER, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_iseventnextinnextyear(C_LOC(my_event)) @@ -2182,7 +2182,7 @@ CONTAINS !! A variable of type datetime with next-trigger datetime. !! !! @param[out] errno optional, error message - SUBROUTINE getTriggerNextEventAtDateTime(my_event, my_currentdatetime, my_datetime, errno) + RECURSIVE SUBROUTINE getTriggerNextEventAtDateTime(my_event, my_currentdatetime, my_datetime, errno) TYPE(event), TARGET, INTENT(in) :: my_event TYPE(datetime), TARGET, INTENT(in) :: my_currentdatetime TYPE(datetime), TARGET, INTENT(out) :: my_datetime @@ -2204,7 +2204,7 @@ CONTAINS !! A variable of type datetime with last-trigger datetime. !! !! @param[out] errno optional, error message - SUBROUTINE getTriggeredPreviousEventAtDateTime(my_event, my_datetime, errno) + RECURSIVE SUBROUTINE getTriggeredPreviousEventAtDateTime(my_event, my_datetime, errno) TYPE(event), TARGET, INTENT(in) :: my_event TYPE(datetime), TARGET, INTENT(out) :: my_datetime TYPE(c_ptr) :: dummy_ptr @@ -2221,7 +2221,7 @@ CONTAINS !! @returns ret_evtid !! the event id !! - FUNCTION getEventId(my_event) RESULT(ret_evtid) !OK-TESTED. + RECURSIVE FUNCTION getEventId(my_event) RESULT(ret_evtid) !OK-TESTED. INTEGER(c_int64_t) :: ret_evtid TYPE(event), POINTER :: my_event ret_evtid = my_event%eventId @@ -2235,7 +2235,7 @@ CONTAINS !! @param[out] string the name of the event !! !! @param[out] errno optional, error message - SUBROUTINE getEventName(my_event, string, errno) !OK-TESTED. + RECURSIVE SUBROUTINE getEventName(my_event, string, errno) !OK-TESTED. TYPE(event), POINTER, INTENT(in) :: my_event CHARACTER(len=max_eventname_str_len), INTENT(out) :: string TYPE(c_ptr) :: dummy_ptr @@ -2257,7 +2257,7 @@ CONTAINS !! @returns ret_referenceDateTime !! A pointer of type datetime. The event's reference date. !! - FUNCTION getEventReferenceDateTime(my_event) RESULT(ret_referenceDateTime) !OK-TESTED. + RECURSIVE FUNCTION getEventReferenceDateTime(my_event) RESULT(ret_referenceDateTime) !OK-TESTED. TYPE(datetime), POINTER :: ret_referenceDateTime TYPE(event), POINTER, INTENT(in) :: my_event TYPE(c_ptr) :: c_pointer @@ -2277,7 +2277,7 @@ CONTAINS !! @returns ret_eventFirstDateTime !! A pointer of type datetime. The event's first date. !! - FUNCTION getEventFirstDateTime(my_event) RESULT(ret_eventFirstDateTime) !OK-TESTED. + RECURSIVE FUNCTION getEventFirstDateTime(my_event) RESULT(ret_eventFirstDateTime) !OK-TESTED. TYPE(datetime), POINTER :: ret_eventFirstDateTime TYPE(event), POINTER, INTENT(in) :: my_event TYPE(c_ptr) :: c_pointer @@ -2297,7 +2297,7 @@ CONTAINS !! @returns ret_eventLastDateTime !! A pointer of type datetime. The event's last date. !! - FUNCTION getEventLastDateTime(my_event) RESULT(ret_eventLastDateTime) !OK-TESTED. + RECURSIVE FUNCTION getEventLastDateTime(my_event) RESULT(ret_eventLastDateTime) !OK-TESTED. TYPE(datetime), POINTER :: ret_eventLastDateTime TYPE(event), POINTER, INTENT(in) :: my_event TYPE(c_ptr) :: c_pointer @@ -2317,7 +2317,7 @@ CONTAINS !! @returns ret_eventInterval !! A pointer of type timedelta. The event's last date. !! - FUNCTION getEventInterval(my_event) RESULT(ret_eventInterval) !OK-TESTED. + RECURSIVE FUNCTION getEventInterval(my_event) RESULT(ret_eventInterval) !OK-TESTED. TYPE(timedelta), POINTER :: ret_eventInterval TYPE(event), POINTER, INTENT(in) :: my_event TYPE(c_ptr) :: c_pointer @@ -2337,7 +2337,7 @@ CONTAINS !! @returns ret !! Logical: true if event is first !! - FUNCTION getNextEventIsFirst(my_event) RESULT(ret) + RECURSIVE FUNCTION getNextEventIsFirst(my_event) RESULT(ret) TYPE(event), TARGET, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_getnexteventisfirst(C_LOC(my_event)) @@ -2351,7 +2351,7 @@ CONTAINS !! @returns ret !! Logical: true if event is first in day !! - FUNCTION getEventisFirstInDay(my_event) RESULT(ret) + RECURSIVE FUNCTION getEventisFirstInDay(my_event) RESULT(ret) TYPE(event), TARGET, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_geteventisfirstinday(C_LOC(my_event)) @@ -2365,7 +2365,7 @@ CONTAINS !! @returns ret !! Logical: true if event is first in month !! - FUNCTION getEventisFirstInMonth(my_event) RESULT(ret) + RECURSIVE FUNCTION getEventisFirstInMonth(my_event) RESULT(ret) TYPE(event), TARGET, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_geteventisfirstinmonth(C_LOC(my_event)) @@ -2379,7 +2379,7 @@ CONTAINS !! @returns ret !! Logical: true if event is first in year !! - FUNCTION getEventisFirstInYear(my_event) RESULT(ret) + RECURSIVE FUNCTION getEventisFirstInYear(my_event) RESULT(ret) TYPE(event), TARGET, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_geteventisfirstinyear(C_LOC(my_event)) @@ -2394,7 +2394,7 @@ CONTAINS !! Logical: true if event is last in day !! - FUNCTION getEventisLastInDay(my_event) RESULT(ret) + RECURSIVE FUNCTION getEventisLastInDay(my_event) RESULT(ret) TYPE(event), TARGET, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_geteventislastinday(C_LOC(my_event)) @@ -2408,7 +2408,7 @@ CONTAINS !! @returns ret !! Logical: true if event is last in month !! - FUNCTION getEventisLastInMonth(my_event) RESULT(ret) + RECURSIVE FUNCTION getEventisLastInMonth(my_event) RESULT(ret) TYPE(event), TARGET, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_geteventislastinmonth(C_LOC(my_event)) @@ -2422,7 +2422,7 @@ CONTAINS !! @returns ret !! Logical: true if event is last in year !! - FUNCTION getEventisLastInYear(my_event) RESULT(ret) + RECURSIVE FUNCTION getEventisLastInYear(my_event) RESULT(ret) TYPE(event), TARGET, INTENT(in) :: my_event LOGICAL(c_bool) :: ret ret = my_geteventislastinyear(C_LOC(my_event)) @@ -2474,7 +2474,7 @@ CONTAINS !! @return ret_eventgroup !! A pointer to an initialized event-Group. !! - FUNCTION newEventGroup(name, errno) RESULT(ret_eventgroup) !OK-TESTED. + RECURSIVE FUNCTION newEventGroup(name, errno) RESULT(ret_eventgroup) !OK-TESTED. TYPE(eventgroup), POINTER :: ret_eventgroup CHARACTER(len=*), INTENT(in) :: name TYPE(c_ptr) :: c_pointer @@ -2489,7 +2489,7 @@ CONTAINS !! @param[in] my_eventgroup !! A pointer to type eventGroup. my_eventgroup is deallocated. !! - SUBROUTINE deallocateEventGroup(my_eventgroup) !OK-TESTED. + RECURSIVE SUBROUTINE deallocateEventGroup(my_eventgroup) !OK-TESTED. TYPE(eventgroup), POINTER :: my_eventgroup CALL my_deallocateeventgroup(C_LOC(my_eventgroup)) my_eventgroup => NULL() @@ -2505,7 +2505,7 @@ CONTAINS !! !! @return ret !! true/false indicating success or failure of addition. - FUNCTION addEventToEventGroup(my_event, my_eventgroup) RESULT(ret) !OK-TESTED. + RECURSIVE FUNCTION addEventToEventGroup(my_event, my_eventgroup) RESULT(ret) !OK-TESTED. LOGICAL :: ret TYPE(event), TARGET, INTENT(in) :: my_event TYPE(eventgroup), TARGET, INTENT(inout) :: my_eventgroup @@ -2522,7 +2522,7 @@ CONTAINS !! !! @return ret !! true/false indicating success or failure of removal. - FUNCTION removeEventfromEventGroup(my_name, my_eventgroup) RESULT(ret) !OK-TESTED. + RECURSIVE FUNCTION removeEventfromEventGroup(my_name, my_eventgroup) RESULT(ret) !OK-TESTED. LOGICAL :: ret CHARACTER(len=*), INTENT(in) :: my_name TYPE(eventgroup), POINTER, INTENT(inout) :: my_eventgroup @@ -2536,7 +2536,7 @@ CONTAINS !! !! @return ret_grpid !! The event group id - FUNCTION getEventGroupId(my_eventgroup) RESULT(ret_grpid) !OK-TESTED. + RECURSIVE FUNCTION getEventGroupId(my_eventgroup) RESULT(ret_grpid) !OK-TESTED. INTEGER(c_int64_t) :: ret_grpid TYPE(eventgroup), POINTER, INTENT(in) :: my_eventgroup ret_grpid = my_eventgroup%eventGroupId @@ -2550,7 +2550,7 @@ CONTAINS !! @param[out] string the name of the event group !! !! @param[out] errno optional, error message - SUBROUTINE getEventGroupName(my_eventgroup, string, errno) !TESTED-OK. + RECURSIVE SUBROUTINE getEventGroupName(my_eventgroup, string, errno) !TESTED-OK. TYPE(eventgroup), POINTER, INTENT(in) :: my_eventgroup CHARACTER(len=max_groupname_str_len) :: string TYPE(c_ptr) :: dummy_ptr @@ -2571,7 +2571,7 @@ CONTAINS !! !! @returns ret_event !! A pointer of type event. The first event in eventgroup - FUNCTION getFirstEventFromEventGroup(my_eventgroup) RESULT(ret_event) !OK-TESTED. + RECURSIVE FUNCTION getFirstEventFromEventGroup(my_eventgroup) RESULT(ret_event) !OK-TESTED. TYPE(event), POINTER :: ret_event TYPE(eventgroup), POINTER, INTENT(in) :: my_eventgroup TYPE(c_ptr) :: c_pointer @@ -2590,7 +2590,7 @@ CONTAINS !! !! @returns ret_event !! A pointer of type event. The next event in eventgroup - FUNCTION getNextEventFromEventGroup(my_event) RESULT(ret_event) !OK-TESTED. + RECURSIVE FUNCTION getNextEventFromEventGroup(my_event) RESULT(ret_event) !OK-TESTED. TYPE(event), POINTER :: ret_event TYPE(event), POINTER, INTENT(in) :: my_event TYPE(c_ptr) :: c_pointer @@ -2639,7 +2639,7 @@ CONTAINS !! @return r !! An int representing the number of repetitions. !! - FUNCTION getRepetitions(repetitionString) RESULT(r) + RECURSIVE FUNCTION getRepetitions(repetitionString) RESULT(r) INTEGER :: r CHARACTER(len=*), INTENT(in) :: repetitionString r = my_getRepetitions(TRIM(ADJUSTL(repetitionString))//c_null_char) @@ -2668,7 +2668,7 @@ CONTAINS !! @param[out] lduration !! Logical: true, if duration is available !! - SUBROUTINE splitRepetitionString(recurringTimeInterval, repetitor, start, END, duration, lrepetitor, lstart, lend, lduration) + RECURSIVE SUBROUTINE splitRepetitionString(recurringTimeInterval, repetitor, start, END, duration, lrepetitor, lstart, lend, lduration) CHARACTER(len=*), INTENT(in) :: recurringTimeInterval CHARACTER(len=*), INTENT(out) :: repetitor CHARACTER(len=*), INTENT(out) :: start diff --git a/test/Makefile.in b/test/Makefile.in index b901d7a44dbf005eff61608347370fc7829a85a7..48e84e1f74a2179f3f92e150438ca7f83a0c0c11 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -94,7 +94,6 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_fc_line_length.m4 \ $(top_srcdir)/m4/acx_fc_module.m4 \ $(top_srcdir)/m4/acx_fc_pp.m4 $(top_srcdir)/m4/acx_lang_lib.m4 \ - $(top_srcdir)/m4/acx_lang_openmp.m4 \ $(top_srcdir)/m4/acx_lang_package.m4 \ $(top_srcdir)/m4/asx_common.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 \ @@ -481,7 +480,6 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_FCFLAG = @OPENMP_FCFLAG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@