| ckgr02 |
|
Table of contents
Procedure
CKGR02 ( C-kernel, get record, type 02 )
SUBROUTINE CKGR02 ( HANDLE, DESCR, RECNO, RECORD )
Abstract
Return a specified pointing instance from a CK type 02 segment.
The segment is identified by a CK file handle and segment
descriptor.
Required_Reading
CK
DAF
Keywords
POINTING
Declarations
IMPLICIT NONE
INTEGER HANDLE
DOUBLE PRECISION DESCR ( * )
INTEGER RECNO
DOUBLE PRECISION RECORD ( * )
Brief_I/O
VARIABLE I/O DESCRIPTION
-------- --- --------------------------------------------------
HANDLE I The handle of the CK file containing the segment.
DESCR I The segment descriptor.
RECNO I The number of the pointing record to be returned.
RECORD O The pointing record.
Detailed_Input
HANDLE is the handle of the binary CK file containing the
desired segment. The file should have been opened
for read or write access, by CKLPF, DAFOPR or DAFOPW.
DESCR is the packed descriptor of the data type 2 CK segment.
RECNO is the number of the individual pointing record to be
returned from the data type 2 segment.
Detailed_Output
RECORD is the pointing record indexed by RECNO in the segment.
The contents are as follows:
RECORD( 1 ) = start SCLK time of interval
RECORD( 2 ) = end SCLK time of interval
RECORD( 3 ) = TDB seconds per tick rate
RECORD( 4 ) = Q1
RECORD( 5 ) = Q2
RECORD( 6 ) = Q3
RECORD( 7 ) = Q4
RECORD( 8 ) = AV1
RECORD( 9 ) = AV2
RECORD( 10 ) = AV3
See the section on data type 2 in the CK Required
Reading for a complete description on how pointing
is obtained from a type 2 record.
Note that the RECORD returned by this routine is slightly
different from that returned by the SPICELIB routine
CKR02. The second element of the record returned by that
routine contains the SCLK time at which pointing was
requested, whereas this routine returns the SCLK time of
the right endpoint of the interval for which the constant
angular velocity model is valid.
Parameters
None.
Exceptions
1) If the segment is not of data type 2, the error
SPICE(CKWRONGDATATYPE) is signaled.
2) If RECNO is less than one or greater than the number of
records in the specified segment, the error
SPICE(CKNONEXISTREC) is signaled.
3) If the specified handle does not belong to any file that is
currently known to be open, an error is signaled by a routine
in the call tree of this routine.
4) If DESCR is not a valid descriptor of a segment in the CK
file specified by HANDLE, the results of this routine are
unpredictable.
Files
The CK file specified by HANDLE should be open for read or write
access.
Particulars
For a detailed description of the structure of a type 2 segment,
see the CK Required Reading.
This is a utility routine that may be used to read the individual
pointing records that make up a data type 2 segment. It is
normally used in combination with CKNR02, which gives the number
of pointing instances stored in a segment.
Examples
The numerical results shown for this example may differ across
platforms. The results depend on the SPICE kernels used as
input, the compiler and supporting libraries, and the machine
specific arithmetic implementation.
1) The following code example extracts the start and end SCLK
time, seconds per tick rate, platform's +Z axis direction,
and angular velocity vector for each pointing instance in
the first segment in a CK file that contains segments of data
type 2.
Use the CK kernel below, available in the Viking Orbiter PDS
archives, as input for the code example.
vo2_swu_ck2.bc
Example code begins here.
PROGRAM CKGR02_EX1
IMPLICIT NONE
DOUBLE PRECISION AV ( 3 )
DOUBLE PRECISION CMAT ( 3, 3 )
DOUBLE PRECISION DCD ( 2 )
DOUBLE PRECISION DESCR ( 5 )
DOUBLE PRECISION QUAT ( 4 )
DOUBLE PRECISION RECORD ( 10 )
DOUBLE PRECISION SCLKE
DOUBLE PRECISION SCLKR
DOUBLE PRECISION SCLKS
DOUBLE PRECISION Z ( 3 )
INTEGER ICD ( 6 )
INTEGER HANDLE
INTEGER NREC
INTEGER I
LOGICAL FOUND
C
C First load the file. (The file may also be opened by
C using CKLPF).
C
CALL DAFOPR ( 'vo2_swu_ck2.bc', HANDLE )
C
C Begin forward search. Find the first array.
C
CALL DAFBFS ( HANDLE )
CALL DAFFNA ( FOUND )
C
C Get segment descriptor.
C
CALL DAFGS ( DESCR )
C
C Unpack the segment descriptor into its double precision
C and integer components.
C
CALL DAFUS ( DESCR, 2, 6, DCD, ICD )
C
C The data type for a segment is located in the third
C integer component of the descriptor.
C
IF ( ICD( 3 ) .EQ. 2 ) THEN
C
C How many records does this segment contain?
C
CALL CKNR02 ( HANDLE, DESCR, NREC )
DO I = 1, NREC
C
C Get the Ith record in the segment.
C
CALL CKGR02 ( HANDLE, DESCR, I, RECORD )
C
C Unpack RECORD into the start and end time, rate in
C TDB seconds/tick, quaternion, and av.
C
SCLKS = RECORD ( 1 )
SCLKE = RECORD ( 2 )
SCLKR = RECORD ( 3 )
CALL MOVED ( RECORD(4), 4, QUAT )
CALL MOVED ( RECORD(8), 3, AV )
C
C The +Z axis direction is the third row of the
C C-matrix.
C
CALL Q2M ( QUAT, CMAT )
Z(1) = CMAT(3,1)
Z(2) = CMAT(3,2)
Z(3) = CMAT(3,3)
C
C Write out the results.
C
WRITE (*,'(A,I2)') 'Record: ', I
WRITE (*,'(A,F21.6)') ' Start encoded SCLK:',
. SCLKS
WRITE (*,'(A,F21.6)') ' End encoded SCLK :',
. SCLKE
WRITE (*,'(A,F21.6)') ' TDB Seconds/tick :',
. SCLKR
WRITE (*,'(A,3F13.8)') ' +Z axis :',
. Z
WRITE (*,'(A,3F13.8)') ' Angular velocity :',
. AV
WRITE (*,*)
END DO
END IF
END
When this program was executed on a Mac/Intel/gfortran/64-bit
platform, the output was:
Record: 1
Start encoded SCLK: 32380393707.000015
End encoded SCLK : 32380395707.000015
TDB Seconds/tick : 0.001000
+Z axis : 0.62277152 -0.29420673 0.72498141
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 2
Start encoded SCLK: 32380402605.999947
End encoded SCLK : 32380404605.999947
TDB Seconds/tick : 0.001000
+Z axis : 0.62172600 -0.27894910 0.73187716
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 3
Start encoded SCLK: 32380412542.000053
End encoded SCLK : 32380414542.000053
TDB Seconds/tick : 0.001000
+Z axis : 0.62183610 -0.26307233 0.73764003
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 4
Start encoded SCLK: 32827264875.000000
End encoded SCLK : 32827266875.000000
TDB Seconds/tick : 0.001000
+Z axis : 0.82984105 -0.44796078 0.33270853
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 5
Start encoded SCLK: 32827403805.999992
End encoded SCLK : 32827405805.999992
TDB Seconds/tick : 0.001000
+Z axis : 0.80812500 -0.44911178 0.38109395
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 6
Start encoded SCLK: 32827412705.000042
End encoded SCLK : 32827414705.000042
TDB Seconds/tick : 0.001000
+Z axis : 0.81120505 -0.43593555 0.38975193
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 7
Start encoded SCLK: 32827417284.000038
End encoded SCLK : 32827419284.000038
TDB Seconds/tick : 0.001000
+Z axis : 0.81313834 -0.42861613 0.39382008
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 8
Start encoded SCLK: 33793314593.000053
End encoded SCLK : 33793316593.000053
TDB Seconds/tick : 0.001000
+Z axis : 0.79860617 -0.37840751 0.46801275
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 9
Start encoded SCLK: 33793332478.000046
End encoded SCLK : 33793334478.000046
TDB Seconds/tick : 0.001000
+Z axis : 0.77861783 -0.39171670 0.49021658
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 10
Start encoded SCLK: 33793341463.000061
End encoded SCLK : 33793343463.000061
TDB Seconds/tick : 0.001000
+Z axis : 0.76852381 -0.39797437 0.50098659
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 11
Start encoded SCLK: 33793350363.000034
End encoded SCLK : 33793352363.000034
TDB Seconds/tick : 0.001000
+Z axis : 0.75779934 -0.40484364 0.51170478
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 12
Start encoded SCLK: 33984028250.000000
End encoded SCLK : 33984030250.000000
TDB Seconds/tick : 0.001000
+Z axis : 0.77099184 -0.39926339 0.49614546
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 13
Start encoded SCLK: 33984046134.999992
End encoded SCLK : 33984048134.999992
TDB Seconds/tick : 0.001000
+Z axis : 0.75024440 -0.41218993 0.51694564
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 14
Start encoded SCLK: 33984055121.000053
End encoded SCLK : 33984057121.000053
TDB Seconds/tick : 0.001000
+Z axis : 0.73947359 -0.41886863 0.52699894
Angular velocity : 0.00000000 0.00000000 0.00000000
Record: 15
Start encoded SCLK: 33984220835.999966
[...]
Warning: incomplete output. Only 100 out of 875 lines have been
provided.
Restrictions
1) The binary CK file containing the segment whose descriptor was
passed to this routine must be opened for read or write access
by CKLPF, DAFOPR or DAFOPW.
Literature_References
None.
Author_and_Institution
N.J. Bachman (JPL)
J. Diaz del Rio (ODC Space)
J.M. Lynch (JPL)
E.D. Wright (JPL)
Version
SPICELIB Version 1.1.1, 26-OCT-2021 (NJB) (JDR)
Edited the header to comply with NAIF standard. Created
complete code example from existing code fragment.
Improved header documentation.
SPICELIB Version 1.1.0, 07-SEP-2001 (EDW)
Replaced DAFRDA call with DAFGDA.
Added IMPLICIT NONE.
SPICELIB Version 1.0.0, 25-NOV-1992 (JML)
|
Fri Dec 31 18:36:02 2021