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

Added some julian day computations required for interpolation in time

parent f61f5191
No related branches found
No related tags found
1 merge request!8Feature extend julianday
......@@ -56,13 +56,13 @@ newJulianDelta(char _sign, int64_t _day, int64_t _ms);
void
deallocateJulianDelta(struct _juliandelta* jd);
/*! \cond PRIVATE */
struct _julianday*
addJulianDelta(struct _julianday* jd1, struct _juliandelta* jd2, struct _julianday* jd);
addJulianDeltaToJulianDay(struct _julianday* jd1, struct _juliandelta* jd2, struct _julianday* jd);
struct _julianday*
substractJulianDelta(struct _julianday* jd1, struct _juliandelta* jd2, struct _julianday* jd);
substractJulianDeltaFromJulianDay(struct _julianday* jd1, struct _juliandelta* jd2, struct _julianday* jd);
/*! \cond PRIVATE */
struct _juliandelta*
substractJulianDay(struct _julianday* jd1, struct _julianday* jd2, struct _juliandelta* jd);
/*! \endcond */
......
This diff is collapsed.
......@@ -119,7 +119,7 @@ module mtime_c_bindings
function my_newjuliandelta(sign, day, ms) result(c_pointer) bind(c, name='newJulianDelta')
import :: c_int64_t, c_char, c_ptr
type(c_ptr) :: c_pointer
character(c_char) :: sign
character(c_char), value :: sign
integer(c_int64_t), value :: day
integer(c_int64_t), value :: ms
end function my_newjuliandelta
......@@ -150,6 +150,20 @@ module mtime_c_bindings
type(c_ptr), value :: jd
end subroutine my_deallocatejulianday
!
function my_replacejulianday(src, dest) result(ret_dest) bind(c, name='replaceJulianday')
import :: c_ptr
type(c_ptr) :: ret_dest
type(c_ptr), value :: src
type(c_ptr), value :: dest
end function my_replacejulianday
!
function my_comparejulianday(op1, op2) result(ret) bind(c, name='compareJulianDay')
import :: c_ptr, c_int
integer(c_int) :: ret
type(c_ptr), value :: op1
type(c_ptr), value :: op2
end function my_comparejulianday
!
function my_juliandaytostring(my_julianday, string) result(string_ptr) bind(c, name='juliandayToString')
import :: c_ptr, c_char
type(c_ptr) :: string_ptr
......@@ -157,6 +171,13 @@ module mtime_c_bindings
character(c_char), dimension(*) :: string
end function my_juliandaytostring
!
function my_addjuliandeltatojulianday(my_julianday, my_juliandelta, ret_julianday) result(julianday_ptr) &
& bind(c, name='addJulianDeltaToJulianDay')
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
......
......@@ -141,6 +141,34 @@ newJulianDay(int64_t _day, int64_t _ms)
return NULL;
}
/**
* @brief COPY a JulianDay object.
*
* Routine replaceJulianDay copies the contents of source JulianDay into a destination JulianDay object.
*
* @param jdsrc
* A pointer to struct _julianday. Copy "FROM" JulianDay object.
*
* @param jddest
* A pointer to struct _julianday. Copy "TO" JulianDay object.
*
* @return jddest
* A pointer to 'copied' JulianDay Object.
*/
struct _julianday*
replaceJulianday(struct _julianday* jdsrc, struct _julianday* jddest)
{
if ((jddest != NULL) && (jdsrc != NULL)) {
jddest->day = jdsrc->day;
jddest->ms = jdsrc->ms;
return jddest;
}
else
return NULL;
}
/*! \cond PRIVATE */
/* Internal data structure. */
......@@ -206,12 +234,8 @@ deallocateJulianDelta(struct _juliandelta* jd)
}
}
/* Internal Function. */
/* Add a lib defined julian delta to a Julian Day. */
struct _julianday*
addJulianDelta(struct _julianday* jd1, struct _juliandelta* jd2, struct _julianday* jd)
addJulianDeltaToJulianDay(struct _julianday* jd1, struct _juliandelta* jd2, struct _julianday* jd)
{
if ((jd1 != NULL ) && (jd2 != NULL) && (jd != NULL) ){
......@@ -230,11 +254,8 @@ return NULL;
}
/* Internal Function. */
/* Substract a lib defined julian delta from a Julian Day. */
struct _julianday*
substractJulianDelta(struct _julianday* jd1, struct _juliandelta* jd2, struct _julianday* jd)
substractJulianDeltaFromJulianDay(struct _julianday* jd1, struct _juliandelta* jd2, struct _julianday* jd)
{
if ((jd1 != NULL )&& (jd2 != NULL) && (jd != NULL) ){
......@@ -257,8 +278,6 @@ else
return NULL;
}
/* Internal function. */
/* Return jd1 >= jd2 */
bool
......@@ -275,8 +294,6 @@ compareJulianDay(struct _julianday* jd1, struct _julianday* jd2)
else
return true;
}
/*! \endcond */
/**
* @brief Get the JulianDelta between two JulianDays as (jd1-jd2).
......
......@@ -1726,11 +1726,11 @@ addTimeDeltaToDateTime(struct _datetime* dt, struct _timedelta* td, struct _date
if ( td->sign == '+' )
{
jd = addJulianDelta(jd1, jd2, jd);
jd = addJulianDeltaToJulianDay(jd1, jd2, jd);
}
else if ( td->sign == '-' )
{
jd = substractJulianDelta(jd1, jd2, jd);
jd = substractJulianDeltaFromJulianDay(jd1, jd2, jd);
}
else
return NULL; /* ERROR: Sign of timedelta is not defined. Should never happen. */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment