/* cke01.f -- translated by f2c (version 19980913). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* $Procedure CKE01 ( CK evaluate pointing record, data type 1 ) */ /* Subroutine */ int cke01_(logical *needav, doublereal *record, doublereal * cmat, doublereal *av, doublereal *clkout) { extern /* Subroutine */ int chkin_(char *, ftnlen), chkout_(char *, ftnlen); extern logical return_(void); extern /* Subroutine */ int q2m_(doublereal *, doublereal *); /* $ Abstract */ /* Evaluate a pointing record returned by CKR01 from a CK data type 1 */ /* segment. Return the C-matrix and optionally the angular velocity */ /* vector associated with the time CLKOUT. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* CK */ /* DAF */ /* ROTATION */ /* $ Keywords */ /* POINTING */ /* $ Declarations */ /* $ Brief_I/O */ /* Variable I/O Description */ /* -------- --- -------------------------------------------------- */ /* NEEDAV I True if angular velocity vector is required. */ /* RECORD I Data type 1 pointing record. */ /* CMAT O C-matrix. */ /* AV O Angular velocity vector. */ /* CLKOUT O Output spacecraft clock time. */ /* $ Detailed_Input */ /* NEEDAV is true when angular velocity data is requested. */ /* RECORD is a set of double precision numbers returned by CKR01 */ /* that contain sufficient information from a data type */ /* 1 pointing segment to evaluate the C-matrix and */ /* possibly the angular velocity vector (if NEEDAV is */ /* true) for a particular instance. */ /* The contents of RECORD are as follows: */ /* RECORD( 1 ) = CLKOUT */ /* RECORD( 2 ) = q0 */ /* RECORD( 3 ) = q1 */ /* RECORD( 4 ) = q2 */ /* RECORD( 5 ) = q3 */ /* RECORD( 6 ) = Av1 ] */ /* RECORD( 7 ) = Av2 |-- Optional */ /* RECORD( 8 ) = Av3 ] */ /* The quantities q0 - q3 represent a quaternion. */ /* The quantities Av1, Av2, and Av3 represent the angular */ /* velocity vector. */ /* CLKOUT is the encoded spacecraft clock time */ /* associated with the quaternion and, optionally, the */ /* angular velocity vector. */ /* $ Detailed_Output */ /* CMAT is a rotation matrix that transforms the components of */ /* of a vector expressed in the reference frame given in */ /* the segment to components expressed in the instrument */ /* fixed frame at time CLKOUT. */ /* Thus, if a vector v has components x, y, z in the */ /* reference frame, then v has components x', y', z' in */ /* the instrument fixed frame at time CLKOUT: */ /* [ x' ] [ ] [ x ] */ /* | y' | = | CMAT | | y | */ /* [ z' ] [ ] [ z ] */ /* If the x', y', z' components are known, use the */ /* transpose of the C-matrix to determine x, y, z as */ /* follows. */ /* [ x ] [ ]T [ x' ] */ /* | y | = | CMAT | | y' | */ /* [ z ] [ ] [ z' ] */ /* (Transpose of CMAT) */ /* AV is the angular velocity vector. This is returned only */ /* if it has been requested, as indicated by NEEDAV. In */ /* other words, if NEEDAV is true, the angular velocity */ /* portion of RECORD must be present. */ /* The angular velocity vector is the vector whose */ /* direction gives the right-handed axis about which */ /* the reference frame tied to the instrument is */ /* instantaneously rotating at time CLKOUT. */ /* The angular velocity vector is returned in component */ /* form */ /* AV = [ AV1 , AV2 , AV3 ] */ /* which is in terms of the reference coordinate frame */ /* specified in the segment descriptor. */ /* The magnitude of AV is the magnitude of the instantane- */ /* ous velocity of the rotation, in radians per second. */ /* CLKOUT The encoded spacecraft clock time associated with the */ /* returned C-matrix and, optionally, the returned angular */ /* velocity vector. */ /* $ Parameters */ /* None. */ /* $ Exceptions */ /* 1) No checking is done to determine whether RECORD is a valid */ /* record. */ /* 2) If NEEDAV is true, then RECORD is assumed to contain angular */ /* velocity data. No checking is performed to verify this */ /* assumption. */ /* $ Files */ /* None. */ /* $ Particulars */ /* For a detailed description of the structure of a type 1 pointing */ /* segment, see the CK Required Reading file. */ /* The only real work done by CKE01 is to convert the pointing */ /* portion of the record from quaternion form to C-matrix form. */ /* The angular velocity vector will only be returned if it has been */ /* requested. In other words, if NEEDAV is true, the routine will */ /* expect the angular velocity component of the record to be present. */ /* $ Examples */ /* A call to a CKEnn routine is almost always preceded by a call to */ /* the corresponding CKRnn routine, which gets the logical record */ /* that CKEnn evaluates. */ /* The following code fragment searches through a file represented */ /* by HANDLE for all segments applicable to the Voyager 2 wide angle */ /* camera, for a particular spacecraft clock time, which have data */ /* type 1. It then evaluates the pointing for that epoch and prints */ /* the result. */ /* C */ /* C - Get the spacecraft clock time. Must encode it for use */ /* C in the C-kernel. */ /* C */ /* C - Set the time tolerance high to catch anything close to */ /* C the input time. */ /* C */ /* C - We don't need angular velocity data. */ /* C */ /* SC = -32 */ /* INST = -32002 */ /* TOL = 1000.D0 */ /* NEEDAV = .FALSE. */ /* DTYPE = 1 */ /* C */ /* C Load the Voyager 2 spacecraft clock kernel and the C-kernel. */ /* C */ /* CALL FURNSH ( 'VGR_SCLK.TSC' ) */ /* CALL DAFOPR ( 'VGR2_CK.BC', HANDLE ) */ /* C */ /* C Convert the input request time to ticks. */ /* C */ /* WRITE (*,*) 'Enter spacecraft clock time string:' */ /* READ (*,FMT='(A)') SCLKCH */ /* CALL SCENCD ( SC, SCLKCH, SCLKDP ) */ /* C */ /* C Search from the beginning through all segments. */ /* C */ /* CALL DAFBFS ( HANDLE ) */ /* CALL DAFFNA ( SFND ) */ /* DO WHILE ( SFND ) */ /* CALL DAFGN ( IDENT ) */ /* CALL DAFGS ( DESCR ) */ /* CALL DAFUS ( DESCR, 2, 6, DCD, ICD ) */ /* IF ( INST .EQ. ICD( 1 ) */ /* . DTYPE .EQ. ICD( 3 ) */ /* . .AND. SCLKDP + TOL .GE. DCD( 1 ) */ /* . .AND. SCLKDP - TOL .LE. DCD( 2 ) ) THEN */ /* CALL CKR01 ( HANDLE, DESCR, SCLKDP, TOL, NEEDAV, */ /* . RECORD, FOUND ) */ /* IF ( FOUND ) THEN */ /* CALL CKE01 ( NEEDAV, RECORD, CMAT, AV, CLKOUT ) */ /* WRITE (*,*) 'Segment descriptor and identifier:' */ /* WRITE (*,*) DCD, ICD */ /* WRITE (*,*) IDENT */ /* WRITE (*,*) 'C-matrix:' */ /* WRITE (*,*) CMAT */ /* END IF */ /* END IF */ /* CALL DAFFNA ( SFND ) */ /* END DO */ /* $ Restrictions */ /* None. */ /* $ Literature_References */ /* 1) None. */ /* $ Author_and_Institution */ /* J.E. McLean (JPL) */ /* M.J. Spencer (JPL) */ /* R.E. Thurman (JPL) */ /* I.M. Underwood (JPL) */ /* $ Version */ /* - SPICELIB Version 1.2.1, 22-AUG-2006 (EDW) */ /* Replaced header references to LDPOOL with references */ /* to FURNSH. */ /* - SPICELIB Version 1.2.0, 14-NOV-1995 (WLT) */ /* Changed "inertial frame" to simply reference frame to */ /* reflect new capabilities of the SPICE system. */ /* - SPICELIB Version 1.1.1, 10-MAR-1992 (WLT) */ /* Comment section for permuted index source lines was added */ /* following the header. */ /* - SPICELIB Version 1.1.0, 30-AUG-1991 (MJS) (JML) */ /* 1) Previously, in the standard SPICE error handling, the */ /* logical function RETURN was not written as a function; */ /* it is now written as a function. */ /* 2) The example program was changed so that the tolerance */ /* and data type are used in selecting which segments to read. */ /* 3) It was specified that the angular velocity vector */ /* gives the right-handed axis about which the instrument */ /* frame rotates. */ /* - SPICELIB Version 1.0.1, 02-NOV-1990 (JML) */ /* The example program was corrected so that the input */ /* instrument code was tested against ICD(1) instead of */ /* ICD(3). */ /* - SPICELIB Version 1.0.0, 07-SEP-1990 (RET) (IMU) */ /* -& */ /* $ Index_Entries */ /* evaluate ck type_1 pointing data record */ /* -& */ /* $ Revisions */ /* - SPICELIB Version 1.2.0, 14-NOV-1995 (WLT) */ /* Changed "inertial frame" to simply reference frame to */ /* reflect new capabilities of the SPICE system. */ /* This change affects only documentation not code. */ /* - SPICELIB Version 1.1.0, 30-AUG-1991 (MJS) (JML) */ /* 1) In the standard SPICE error handling, the line: */ /* IF ( RETURN ) THEN */ /* was changed to */ /* IF ( RETURN() ) THEN */ /* 2) The example program was changed so that the tolerance */ /* and data type are used in selecting which segments to read. */ /* 3) It was specified that the angular velocity vector */ /* gives the right-handed axis about which the instrument */ /* frame rotates. */ /* - SPICELIB Version 1.0.1, 02-NOV-1990 (JML) */ /* 1) The example program was corrected so that the input */ /* instrument code was tested against ICD(1) instead of */ /* ICD(3). */ /* 2) SCLK was removed from the Required Reading section. */ /* - Beta Version 1.1.0, 29-AUG-1990 (MJS) (JEM) */ /* The following changes were made as a result of the */ /* NAIF CK Code and Documentation Review: */ /* 1) The argument SCLK was removed from the calling sequence. */ /* 2) Header was updated. */ /* 3) The call to the routine QUAT2M_3 was replaced by a call to */ /* the routine Q2M. */ /* - Beta Version 1.0.0, 18-MAY-1990 (RET) (IMU) */ /* -& */ /* SPICELIB functions */ /* Standard SPICE error handling. */ if (return_()) { return 0; } else { chkin_("CKE01", (ftnlen)5); } /* Dissect the record. */ *clkout = record[0]; q2m_(&record[1], cmat); if (*needav) { av[0] = record[5]; av[1] = record[6]; av[2] = record[7]; } chkout_("CKE01", (ftnlen)5); return 0; } /* cke01_ */