Index of Functions: A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 
Index Page
spkw17

Table of contents
Procedure
Abstract
Required_Reading
Keywords
Declarations
Brief_I/O
Detailed_Input
Detailed_Output
Parameters
Exceptions
Files
Particulars
Examples
Restrictions
Literature_References
Author_and_Institution
Version

Procedure

     SPKW17 ( SPK, write a type 17 segment )

     SUBROUTINE SPKW17 ( HANDLE, BODY,  CENTER, FRAME, FIRST, LAST,
    .                    SEGID,  EPOCH, EQEL,   RAPOL, DECPOL  )

Abstract

     Write an SPK segment of type 17 given a type 17 data record.

Required_Reading

     SPK

Keywords

     EPHEMERIS

Declarations

     IMPLICIT NONE

     INTEGER               HANDLE
     INTEGER               BODY
     INTEGER               CENTER
     CHARACTER*(*)         FRAME
     DOUBLE PRECISION      FIRST
     DOUBLE PRECISION      LAST
     CHARACTER*(*)         SEGID
     DOUBLE PRECISION      EPOCH
     DOUBLE PRECISION      EQEL  ( 9 )
     DOUBLE PRECISION      RAPOL
     DOUBLE PRECISION      DECPOL

Brief_I/O

     VARIABLE  I/O  DESCRIPTION
     --------  ---  --------------------------------------------------
     HANDLE     I   Handle of an SPK file open for writing.
     BODY       I   Body code for ephemeris object.
     CENTER     I   Body code for the center of motion of the body.
     FRAME      I   The reference frame of the states.
     FIRST      I   First valid time for which states can be computed.
     LAST       I   Last valid time for which states can be computed.
     SEGID      I   Segment identifier.
     EPOCH      I   Epoch of elements in seconds past J2000.
     EQEL       I   Array of equinoctial elements.
     RAPOL      I   Right Ascension of the reference plane's pole.
     DECPOL     I   Declination of the reference plane's pole.

Detailed_Input

     HANDLE   is the file handle of an SPK file that has been
              opened for writing.

     BODY     is the NAIF ID for the body whose states are
              to be recorded in the SPK file.

     CENTER   is the NAIF ID for the center of motion associated
              with BODY.

     FRAME    is the reference frame that states are referenced to,
              for example 'J2000'.

     FIRST,
     LAST     are the bounds on the ephemeris times, expressed as
              seconds past J2000.

     SEGID    is the segment identifier. An SPK segment identifier
              may contain up to 40 characters.

     EPOCH    is the epoch of equinoctial elements in seconds
              past the J2000 epoch.

     EQEL     is an array of 9 double precision numbers that
              are the equinoctial elements for some orbit relative
              to the equatorial frame of a central body.

                 Note: The Z-axis of the equatorial frame is the
                 direction of the pole of the central body relative
                 to FRAME. The X-axis is given by the cross product of
                 the Z-axis of FRAME with the direction of the pole of
                 the central body. The Y-axis completes a right handed
                 frame.

              The specific arrangement of the elements is spelled
              out below. The following terms are used in the
              discussion of elements of EQEL:

                 INC  --- inclination of the orbit
                 ARGP --- argument of periapse
                 NODE --- longitude of the ascending node
                 E    --- eccentricity of the orbit
                 M0   --- mean anomaly

              EQEL(1)   is the semi-major axis (A) of the orbit in km.

              EQEL(2)   is the value of H at the specified epoch:

                           H =  E * SIN( ARGP + NODE )

              EQEL(3)   is the value of K at the specified epoch:

                           K =  E * COS( ARGP + NODE )

              EQEL(4)   is the mean longitude at the epoch of the
                        elements measured in radians:

                           ( M0 + ARGP + NODE )

              EQEL(5)   is the value of P at the specified epoch:

                           P =  TAN( INC/2 ) * SIN( NODE )

              EQEL(6)   is the value of Q at the specified epoch:

                           Q =  TAN( INC/2 ) * COS( NODE )

              EQEL(7)   is the rate of the longitude of periapse
                        at the epoch of the elements.

                           ( dARGP/dt + dNODE/dt )

                        This rate is assumed to hold for all time. The
                        rate is measured in radians per second.

              EQEL(8)   is the derivative of the mean longitude:

                           ( dM0/dt + dARGP/dt + dNODE/dt )

                        This rate is assumed to be constant and is
                        measured in radians/second.

              EQEL(9)   is the rate of the longitude of the ascending
                        node:

                           ( dNODE/dt )

                        This rate is measured in radians per second.

     RAPOL    is the Right Ascension of the pole of the reference
              plane relative to FRAME measured in radians.

     DECPOL   is the declination of the pole of the reference plane
              relative to FRAME measured in radians.

Detailed_Output

     None.

     The routine writes an SPK type 17 segment to the file attached to
     HANDLE.

Parameters

     None.

Exceptions

     1)  If the semi-major axis is less than or equal to zero, the
         error SPICE(BADSEMIAXIS) is signaled.

     2)  If the eccentricity of the orbit corresponding to the values
         of H and K ( EQEL(2) and EQEL(3) ) is greater than 0.9, the
         error SPICE(ECCOUTOFRANGE) is signaled.

     3)  If the segment identifier has more than 40 non-blank
         characters, the error SPICE(SEGIDTOOLONG) is signaled.

     4)  If the segment identifier contains non-printing characters,
         the error SPICE(NONPRINTABLECHARS) is signaled.

     5)  If there are inconsistencies in the BODY, CENTER, FRAME or
         FIRST and LAST times, an error is signaled by a routine in
         the call tree of this routine.

Files

     A new type 17 SPK segment is written to the SPK file attached
     to HANDLE.

Particulars

     This routine writes an SPK type 17 data segment to the open SPK
     file according to the format described in the type 17 section of
     the SPK Required Reading. The SPK file must have been opened with
     write access.

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) Suppose that at a given time you have the classical elements
        of Daphnis relative to the equatorial frame of Saturn. These
        can be converted to equinoctial elements and stored in an SPK
        file as a type 17 segment so that Daphnis can be used within
        the SPK subsystem of the SPICE system.

        The example code shown below creates an SPK type 17 kernel
        with a single segment using such data.


        Example code begins here.


              PROGRAM SPKW17_EX1
              IMPLICIT NONE

        C
        C     Local parameters.
        C
              INTEGER               NAMLEN
              PARAMETER           ( NAMLEN = 40 )

              CHARACTER*(*)         SPK17
              PARAMETER           ( SPK17  = 'spkw17_ex1.bsp' )

        C
        C     The SPK type 17 segment will contain data for Daphnis
        C     (ID 635) with respect to Saturn (ID 699) in the J2000
        C     reference frame.
        C
              INTEGER               BODY
              PARAMETER           ( BODY   = 635     )

              INTEGER               CENTER
              PARAMETER           ( CENTER = 699     )

              CHARACTER*(*)         FRMNAM
              PARAMETER           ( FRMNAM = 'J2000' )

        C
        C     This is the list of parameters used to represent the
        C     classical elements:
        C
        C        Variable     Meaning
        C        --------     ---------------------------------------
        C        A            Semi-major axis in km.
        C        ECC          Eccentricity of orbit.
        C        INC          Inclination of orbit.
        C        NODE         Longitude of the ascending node at
        C                     epoch.
        C        OMEGA        Argument of periapse at epoch.
        C        M            Mean anomaly at epoch.
        C        DMDT         Mean anomaly rate in radians/second.
        C        DNODE        Rate of change of longitude of
        C                     ascending node in radians/second.
        C        DOMEGA       Rate of change of argument of periapse
        C                     in radians/second.
        C        EPOCH        The epoch of the elements in seconds
        C                     past the J2000 epoch.
        C
              DOUBLE PRECISION      A
              PARAMETER           ( A      =  1.36505608D+05  )

              DOUBLE PRECISION      ECC
              PARAMETER           ( ECC    = -2.105898062D-05 )

              DOUBLE PRECISION      INC
              PARAMETER           ( INC    = -3.489710429D-05 )

              DOUBLE PRECISION      NODE
              PARAMETER           ( NODE   = -3.349237456D-02 )

              DOUBLE PRECISION      OMEGA
              PARAMETER           ( OMEGA  =  1.52080206722D0 )

              DOUBLE PRECISION      M
              PARAMETER           ( M      =  1.21177109734D0 )

              DOUBLE PRECISION      DMDT
              PARAMETER           ( DMDT   =  1.218114014D-04 )

              DOUBLE PRECISION      DNODE
              PARAMETER           ( DNODE  = -5.96845468D-07  )

              DOUBLE PRECISION      DOMEGA
              PARAMETER           ( DOMEGA =  1.196601093D-06 )

              DOUBLE PRECISION      EPOCH
              PARAMETER           ( EPOCH  = 0.D0             )

        C
        C     In addition, the SPKW17 routine requires the Right
        C     Ascension and Declination of the pole of the
        C     reference plane relative to the J2000 frame, in radians.
        C
              DOUBLE PRECISION      RAPOL
              PARAMETER           ( RAPOL  = 7.08332284D-01 )

              DOUBLE PRECISION      DECPOL
              PARAMETER           ( DECPOL = 1.45800286D0   )

        C
        C     Local variables.
        C
              CHARACTER*(NAMLEN)    IFNAME
              CHARACTER*(NAMLEN)    SEGID

              DOUBLE PRECISION      EQEL   ( 9 )
              DOUBLE PRECISION      FIRST
              DOUBLE PRECISION      LAST

              INTEGER               HANDLE
              INTEGER               NCOMCH

        C
        C     Set the start and end times of interval covered by
        C     segment.
        C
              FIRST  =  504878400.D0
              LAST   = 1578657600.D0

        C
        C     NCOMCH is the number of characters to reserve for the
        C     kernel's comment area. This example doesn't write
        C     comments, so set to zero.
        C
              NCOMCH = 0

        C
        C     Internal file name and segment ID.
        C
              IFNAME = 'Test for type 17 SPK internal file name'
              SEGID  = 'SPK type 17 test segment'

        C
        C     Open a new SPK file.
        C
              CALL SPKOPN( SPK17, IFNAME, NCOMCH, HANDLE )

        C
        C     Convert the classical elements to equinoctial elements
        C     (in the order compatible with type 17).
        C
              EQEL(1) = A
              EQEL(2) = ECC * SIN ( OMEGA + NODE )
              EQEL(3) = ECC * COS ( OMEGA + NODE )

              EQEL(4) = M + OMEGA + NODE

              EQEL(5) = TAN( INC/2.D0 ) * SIN( NODE )
              EQEL(6) = TAN( INC/2.D0 ) * COS( NODE )

              EQEL(7) =        DOMEGA + DNODE
              EQEL(8) = DMDT + DOMEGA + DNODE
              EQEL(9) = DNODE

        C
        C     Now add the segment.
        C
              CALL SPKW17 ( HANDLE, BODY,  CENTER, FRMNAM,
             .              FIRST,  LAST,  SEGID,  EPOCH,
             .              EQEL,   RAPOL, DECPOL          )

        C
        C     Close the SPK file.
        C
              CALL SPKCLS ( HANDLE )

              END


        When this program is executed, no output is presented on
        screen. After run completion, a new SPK type 17 exists in
        the output directory.

Restrictions

     None.

Literature_References

     None.

Author_and_Institution

     J. Diaz del Rio    (ODC Space)
     W.L. Taber         (JPL)

Version

    SPICELIB Version 1.1.0, 06-JUL-2021 (JDR)

        Added IMPLICIT NONE statement.

        Edited the header to comply with NAIF standard. Added complete
        code example based on existing example.

    SPICELIB Version 1.0.1, 24-JUN-1999 (WLT)

        Corrected typographical errors in the header.

    SPICELIB Version 1.0.0, 08-JAN-1997 (WLT)
Fri Dec 31 18:36:56 2021