From f61f51919700f9dc20b7cfd2b327b8ee104ae66c Mon Sep 17 00:00:00 2001 From: Luis Kornblueh <luis.kornblueh@mpimet.mpg.de> Date: Tue, 25 Oct 2022 10:38:06 +0200 Subject: [PATCH] Added some Julian day functions --- src/libmtime.f90 | 25 ++++++++++++++++++++++--- src/mtime_c_bindings.f90 | 7 +++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/libmtime.f90 b/src/libmtime.f90 index 9ff15db9..687a617e 100644 --- a/src/libmtime.f90 +++ b/src/libmtime.f90 @@ -116,7 +116,12 @@ MODULE mtime_juliandelta PUBLIC :: juliandelta PUBLIC :: newJulianDelta PUBLIC :: deallocateJulianDelta + public :: operator (+) ! + interface operator (+) + module procedure addjuliandeltatojulianday + module procedure addjuliandaytojuliandelta + end interface operator (+) CONTAINS @@ -141,10 +146,24 @@ CONTAINS CALL my_deallocatejuliandelta(c_loc(my_juliandelta)) my_juliandelta => NULL() END SUBROUTINE deallocateJuliandelta - + ! + function addJulianDeltaToJulianDay(op1, op2) result(ret) !OK-TESTED. + type(julianday), target :: ret + type(julianday), target, intent(in) :: op1 + type(juliandelta), target, intent(in) :: op2 + type(c_ptr) :: dummy_ptr + dummy_ptr = my_addjuliandeltatojulianday(c_loc(op1), c_loc(op2), c_loc(ret)) + end function addJulianDeltaToJulianDay + ! + function addjulianDayToJulianDelta(op2, op1) result(ret) !OK-TESTED. + type(julianday), target :: ret + type(julianday), target, intent(in) :: op1 + type(juliandelta), target, intent(in) :: op2 + type(c_ptr) :: dummy_ptr + dummy_ptr = my_addjuliandeltatojulianday(c_loc(op1), c_loc(op2), c_loc(ret)) + end function addjulianDayToJulianDelta + ! END MODULE mtime_juliandelta - - !> !! @brief Julian Day Calendar and some operations supported on julian dates. !! diff --git a/src/mtime_c_bindings.f90 b/src/mtime_c_bindings.f90 index 6190b987..76f3fa38 100644 --- a/src/mtime_c_bindings.f90 +++ b/src/mtime_c_bindings.f90 @@ -128,6 +128,13 @@ module mtime_c_bindings import :: c_ptr type(c_ptr), value :: jd end subroutine my_deallocatejuliandelta + ! + function my_addjuliandeltatojulianday(my_julianday, my_juliandelta, ret_julianday) result(julianday_ptr) & + & bind(c, name='addJulianDelta') + import :: c_ptr + type(c_ptr) :: julianday_ptr + type(c_ptr), value :: my_julianday, my_juliandelta, ret_julianday + end function my_addjuliandeltatojulianday end interface interface -- GitLab