IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 2075


Ignore:
Timestamp:
Oct 13, 2004, 9:04:42 AM (22 years ago)
Author:
harman
Message:

Fixed time additon and subtraction functions

Location:
trunk/psLib/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/astro/psTime.c

    r2048 r2075  
    1111 *  @author Ross Harman, MHPCC
    1212 *
    13  *  @version $Revision: 1.31 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2004-10-12 01:34:09 $
     13 *  @version $Revision: 1.32 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2004-10-13 19:04:42 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    541541    psF64  t            =  0.0;
    542542    psF64  tu           =  0.0;
     543    psF64  ut1UtcDbl    =  0.0;
    543544    psF64  const1       =  24110.5493771;
    544545    psF64  const2       =  8639877.3173760;
     
    573574    ALLOC_TIME(ut1UtcDelta);
    574575    ut1UtcDelta->type = PS_TIME_UTC;
    575     ut1UtcDelta->usec = psTimeGetUT1Delta(utcTime)*1e6;
    576     ut1Time = psTimeAdd(utcTime, ut1UtcDelta);
     576
     577    ut1UtcDbl = psTimeGetUT1Delta(utcTime)*1e6;
     578    ut1UtcDelta->usec = (psU32)fabs(ut1UtcDbl);
     579    if(ut1UtcDbl<0) {
     580        ut1Time = psTimeSubtract(utcTime, ut1UtcDelta);
     581    } else {
     582        ut1Time = psTimeAdd(utcTime, ut1UtcDelta);
     583    }
     584
    577585
    578586    // Calculate UT1 as Julian Centuries since J2000.0
     
    9931001psTime* psTimeAdd(const psTime *tai1, const psTime *tai2)
    9941002{
     1003    long deltaUsec = 0;
    9951004    psTime *outTime = NULL;
    9961005
     
    10031012    ALLOC_TIME(outTime);
    10041013    outTime->type = tai1->type;
    1005 
    10061014    outTime->sec = tai1->sec + tai2->sec;
    1007     outTime->usec = tai1->usec + tai2->usec;
    1008 
    1009     // Increment seconds in case of microsecond overflow after addition
    1010     if(outTime->usec<tai1->usec || outTime->usec<tai2->usec) {
     1015    deltaUsec = tai1->usec + tai2->usec;
     1016
     1017    // Adjust time in case of microsecond overflow after subtraction
     1018    if(deltaUsec > 1e6) {
    10111019        outTime->sec++;
     1020        outTime->usec = 2e6 - deltaUsec;
     1021    } else {
     1022        outTime->usec = deltaUsec;
    10121023    }
    10131024
     
    10171028psTime* psTimeSubtract(const psTime *tai1, const psTime *tai2)
    10181029{
     1030    long deltaUsec = 0;
    10191031    psTime *outTime = NULL;
    10201032
     
    10271039    ALLOC_TIME(outTime);
    10281040    outTime->type = tai1->type;
    1029 
    10301041    outTime->sec = tai1->sec - tai2->sec;
    1031     outTime->usec = tai1->usec - tai2->usec;
    1032 
    1033     // Decrement seconds in case of microsecond underflow after subtraction
    1034     if(outTime->usec>tai1->usec || outTime->usec>tai2->usec) {
     1042    deltaUsec = tai1->usec - tai2->usec;
     1043
     1044    // Adjust time in case of microsecond underflow after subtraction
     1045    if(deltaUsec < 0) {
    10351046        outTime->sec--;
     1047        outTime->usec = 1e6+deltaUsec;
     1048    } else {
     1049        outTime->usec = deltaUsec;
    10361050    }
    10371051
     
    10411055psTime* psTimeDelta(const psTime *tai1, const psTime *tai2)
    10421056{
     1057    long deltaUsec = 0;
    10431058    psTime *outTime = NULL;
    10441059
    10451060
    10461061    if(tai1->type != tai2->type) {
    1047         psError(__func__, " : Line %d - Argument types inconsistent for time delta", __LINE__);
     1062        psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__);
    10481063        return NULL;
    10491064    }
     
    10511066    ALLOC_TIME(outTime);
    10521067    outTime->type = tai1->type;
    1053 
    10541068    outTime->sec = tai1->sec - tai2->sec;
    1055     outTime->usec = tai1->usec - tai2->usec;
    1056 
    1057     // Decrement seconds in case of microsecond underflow after subtraction
    1058     if(outTime->usec>tai1->usec || outTime->usec>tai2->usec) {
     1069    deltaUsec = tai1->usec - tai2->usec;
     1070
     1071    // Adjust time in case of microsecond underflow after subtraction
     1072    if(deltaUsec < 0) {
    10591073        outTime->sec--;
     1074        outTime->usec = 1e6+deltaUsec;
     1075    } else {
     1076        outTime->usec = deltaUsec;
    10601077    }
    10611078
  • trunk/psLib/src/astronomy/psTime.c

    r2048 r2075  
    1111 *  @author Ross Harman, MHPCC
    1212 *
    13  *  @version $Revision: 1.31 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2004-10-12 01:34:09 $
     13 *  @version $Revision: 1.32 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2004-10-13 19:04:42 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    541541    psF64  t            =  0.0;
    542542    psF64  tu           =  0.0;
     543    psF64  ut1UtcDbl    =  0.0;
    543544    psF64  const1       =  24110.5493771;
    544545    psF64  const2       =  8639877.3173760;
     
    573574    ALLOC_TIME(ut1UtcDelta);
    574575    ut1UtcDelta->type = PS_TIME_UTC;
    575     ut1UtcDelta->usec = psTimeGetUT1Delta(utcTime)*1e6;
    576     ut1Time = psTimeAdd(utcTime, ut1UtcDelta);
     576
     577    ut1UtcDbl = psTimeGetUT1Delta(utcTime)*1e6;
     578    ut1UtcDelta->usec = (psU32)fabs(ut1UtcDbl);
     579    if(ut1UtcDbl<0) {
     580        ut1Time = psTimeSubtract(utcTime, ut1UtcDelta);
     581    } else {
     582        ut1Time = psTimeAdd(utcTime, ut1UtcDelta);
     583    }
     584
    577585
    578586    // Calculate UT1 as Julian Centuries since J2000.0
     
    9931001psTime* psTimeAdd(const psTime *tai1, const psTime *tai2)
    9941002{
     1003    long deltaUsec = 0;
    9951004    psTime *outTime = NULL;
    9961005
     
    10031012    ALLOC_TIME(outTime);
    10041013    outTime->type = tai1->type;
    1005 
    10061014    outTime->sec = tai1->sec + tai2->sec;
    1007     outTime->usec = tai1->usec + tai2->usec;
    1008 
    1009     // Increment seconds in case of microsecond overflow after addition
    1010     if(outTime->usec<tai1->usec || outTime->usec<tai2->usec) {
     1015    deltaUsec = tai1->usec + tai2->usec;
     1016
     1017    // Adjust time in case of microsecond overflow after subtraction
     1018    if(deltaUsec > 1e6) {
    10111019        outTime->sec++;
     1020        outTime->usec = 2e6 - deltaUsec;
     1021    } else {
     1022        outTime->usec = deltaUsec;
    10121023    }
    10131024
     
    10171028psTime* psTimeSubtract(const psTime *tai1, const psTime *tai2)
    10181029{
     1030    long deltaUsec = 0;
    10191031    psTime *outTime = NULL;
    10201032
     
    10271039    ALLOC_TIME(outTime);
    10281040    outTime->type = tai1->type;
    1029 
    10301041    outTime->sec = tai1->sec - tai2->sec;
    1031     outTime->usec = tai1->usec - tai2->usec;
    1032 
    1033     // Decrement seconds in case of microsecond underflow after subtraction
    1034     if(outTime->usec>tai1->usec || outTime->usec>tai2->usec) {
     1042    deltaUsec = tai1->usec - tai2->usec;
     1043
     1044    // Adjust time in case of microsecond underflow after subtraction
     1045    if(deltaUsec < 0) {
    10351046        outTime->sec--;
     1047        outTime->usec = 1e6+deltaUsec;
     1048    } else {
     1049        outTime->usec = deltaUsec;
    10361050    }
    10371051
     
    10411055psTime* psTimeDelta(const psTime *tai1, const psTime *tai2)
    10421056{
     1057    long deltaUsec = 0;
    10431058    psTime *outTime = NULL;
    10441059
    10451060
    10461061    if(tai1->type != tai2->type) {
    1047         psError(__func__, " : Line %d - Argument types inconsistent for time delta", __LINE__);
     1062        psError(__func__, " : Line %d - Argument types inconsistent for time subtraction", __LINE__);
    10481063        return NULL;
    10491064    }
     
    10511066    ALLOC_TIME(outTime);
    10521067    outTime->type = tai1->type;
    1053 
    10541068    outTime->sec = tai1->sec - tai2->sec;
    1055     outTime->usec = tai1->usec - tai2->usec;
    1056 
    1057     // Decrement seconds in case of microsecond underflow after subtraction
    1058     if(outTime->usec>tai1->usec || outTime->usec>tai2->usec) {
     1069    deltaUsec = tai1->usec - tai2->usec;
     1070
     1071    // Adjust time in case of microsecond underflow after subtraction
     1072    if(deltaUsec < 0) {
    10591073        outTime->sec--;
     1074        outTime->usec = 1e6+deltaUsec;
     1075    } else {
     1076        outTime->usec = deltaUsec;
    10601077    }
    10611078
Note: See TracChangeset for help on using the changeset viewer.