[Spice_discussion] Solving for constraints on L_s

Nat Bachman nathaniel.bachman at jpl.nasa.gov
Fri Mar 30 21:09:00 PDT 2012

Hi Michael,

About your question

Dear all,

does SPICE have an inverse to lspcn_c that would calculate the epoch-time for a 
given solar longitude, maybe constrained to a given calendar year to avoid the 

Best regards and have a nice weekend!


Yes, SPICE does have code that solves this problem, but one cannot
just push a button to get the result. Since a fair amount of set-up work
is involved, I've written an example program which can be extended or
re-written for your application. The program and associated kernels,
as well as program output, are attached.

The basic solution approach is as follows:

    1) Recognize that L_s is longitude of one object relative
       to another in some reference frame.

    2) Create a frame kernel that specifies the needed reference
       frame, as well as any required, supporting frames.

    3) Use the SPICE Geometry Finder (GF) subsystem to search for
       times when L_s satisfies the constraint of interest.

If you're not already familiar with the SPICE GF subsystem, you
can find the tutorial online here:


The dynamic frames tutorial may also be helpful:


Both tutorials are rather large; just skimming them on
the first pass may be useful to get a sense of what
capabilities are provided.

Both of these subsystems are discussed in Required Reading files as well:


These documents are contained in the documentation provided with the SPICE
Toolkit and are available on the NAIF website as well.

The example program uses the earth as the central body. The program and
kernels can easily be modified to work for a different central body.

The example program uses the constraint

    L_s == 90 degrees

Constraints involving inequalities or local and global
extrema are also supported by the GF subsystem; see the

The program searches over a time interval long enough to contain
multiple solutions.

The custom frame kernel


specifies two dynamic reference frames that are needed
for this application. The meta-kernel


loads the frame kernel and other kernels required by
the program. All kernels other than the attached ones
are available from the NAIF server.

As you can see, the GF subsystem is rather complex, but
it does provide a rather robust capability. In particular,
the use of SPICE windows enables set operations on
solution sets: unions, intersections, complements, etc.,
as well as enabling applications to use the result of
one search as an input to another.

SPICE windows are implemented rather differently in the
different language versions of SPICE. The quickest
way to start using them for GF search applications is probably
to start with the example programs in the headers of the GF
search routines themselves.

Finally, what if you want to perform a search using a custom
geometric quantity that GF doesn't know about? The Fortran
and C versions of the SPICE Toolkit contain the routine

    GFUDS {GF, user-defined scalar}

that performs searches using user-defined scalar quantities.
The user must write certain callback routines in order to use this

Another GF user-defined search routine that deals with binary
state quantities---such as occultation or visibility within
an instrument FOV---is being developed and will be provided in
the next version of the SPICE Toolkit.

Please let us know if you have further questions about SPICE.

Best regards,


Nathaniel.Bachman at jpl.nasa.gov

-------------- next part --------------
A non-text attachment was scrubbed...
Name: ls_ex1.for
Type: text/x-fortran
Size: 5294 bytes
Desc: not available
Url : http://naif.jpl.nasa.gov/pipermail/spice_discussion/attachments/20120330/2646c521/ls_ex1.bin
-------------- next part --------------
 Number of result intervals found:            2
 Result window
     1   2012 JUN 20 23:02:07.083569 TDB    2012 JUN 20 23:02:07.083569 TDB    
         LS (deg) =    90.000000000000256     
     2   2013 JUN 21 05:09:00.484632 TDB    2013 JUN 21 05:09:00.484632 TDB    
         LS (deg) =    90.000000000000426     
-------------- next part --------------

   File:                         lspcn.tf
   Author:                       Nat Bachman (JPL/NAIF)
   Date:                         30-MAR-2012

   Example meta-kernel created by Nat Bachman for
   Michael Aye.

   This kernel can be used together with the SPICE GF
   (geometry finder) subsystem to determine times when
   solar longitude L_s with respect to the earth 
   satisfies given constraints.

   The kernels shown here, other than the frame
   kernel, are available from the NAIF server.

      Kernels loaded by this meta-kernel:

         naif0010.tls           Leapseconds

         pck00010.tpc           Generic PCK
                                (provides earth orientation)
         de421.bsp              JPL planetary ephemeris    

         lspcn.tf               Frame kernel specifying the
                                reference frame in which   
                                L_s is measured           

   KERNELS_TO_LOAD = (  'naif0010.tls'
                        'lspcn.tf'    )


 [End of kernel]
-------------- next part --------------

   File:                         lspcn.tf
   Author:                       Nat Bachman (JPL/NAIF)
   Date:                         30-MAR-2012

   Example dynamic frame kernel created by Nat Bachman for
   Michael Aye.

   This kernel can be used together with the SPICE GF
   (geometry finder) subsystem to determine times when
   solar longitude L_s with respect to the earth 
   satisfies given constraints.

   This kernel can be edited to define new reference frames
   for computing L_s with respect to bodies other than the

   Frame Specifications
   GSE: Geocentric Solar Ecliptic

   This is a reference frame based on the instantaneous orbital
   angular velocity vector of the earth. Note that it's also
   possible to define this frame using the mean ecliptic of
   date as the X-Y plane.

      The +X axis points from the earth to the sun.

      The +Z axis is aligned with the cross product
      of the +X axis and velocity of the sun with respect 
      to the earth.

      The +Y axis is the cross product +Z x +X, completing
      the right-handed frame.


      FRAME_GSE                    =  1400000
      FRAME_1400000_NAME           = 'GSE'
      FRAME_1400000_CLASS          =  5
      FRAME_1400000_CLASS_ID       =  1400000
      FRAME_1400000_CENTER         =  399
      FRAME_1400000_RELATIVE       = 'J2000'
      FRAME_1400000_DEF_STYLE      = 'PARAMETERIZED'
      FRAME_1400000_FAMILY         = 'TWO-VECTOR'
      FRAME_1400000_PRI_AXIS       = 'X'
      FRAME_1400000_PRI_OBSERVER   = 'EARTH'
      FRAME_1400000_PRI_TARGET     = 'SUN'
      FRAME_1400000_PRI_ABCORR     = 'NONE'
      FRAME_1400000_SEC_AXIS       = 'Y'
      FRAME_1400000_SEC_OBSERVER   = 'EARTH'
      FRAME_1400000_SEC_TARGET     = 'SUN'
      FRAME_1400000_SEC_ABCORR     = 'NONE'
      FRAME_1400000_SEC_FRAME      = 'J2000'

      The EARTH_LSPCN reference frame is the one in which solar
      planetocentric longitude L_s is actually measured.
      This frame is defined as specified in the header of
      the SPICELIB routine EARTH_LSPCN:
	 This is the longitude of the body-sun vector in a 
         right-handed frame whose basis vectors are defined
          as follows:

	    - The positive Z direction is given by the instantaneous
	      angular velocity vector of the orbit of the body about
	      the sun.

	    - The positive X direction is that of the cross product
              of the instantaneous north spin axis of the body 
              with the positive Z direction.

	    - The positive Y direction is Z x X.

         We can re-cast the specification of the X and Y axes
         in a form usable by the dynamic frames subsystem:

            - The positive Z direction is as above.
	    - The positive Y direction is aligned with the
              component orthogonal to +Z of the north spin 

            - The positive X direction is Y x Z.

      For simplicity, the earth rotational elements determining
      the north pole are taken from the IAU rotation model.
      Changing the reference frame for the pole from IAU_EARTH
      to ITRF93 will yield a more accurate instantaneous pole
      direction, if desired. The application using this kernel
      will need to load a binary earth PCK file in order to use 
      the ITRF93 frame.

      FRAME_EARTH_LSPCN            =  1400001
      FRAME_1400001_NAME           = 'EARTH_LSPCN'
      FRAME_1400001_CLASS          =  5
      FRAME_1400001_CLASS_ID       =  1400001
      FRAME_1400001_CENTER         =  399
      FRAME_1400001_RELATIVE       = 'J2000'
      FRAME_1400001_DEF_STYLE      = 'PARAMETERIZED'
      FRAME_1400001_FAMILY         = 'TWO-VECTOR'
      FRAME_1400001_PRI_AXIS       = 'Z'
      FRAME_1400001_PRI_FRAME      = 'GSE'
      FRAME_1400001_PRI_SPEC       = 'RECTANGULAR'
      FRAME_1400001_PRI_VECTOR     = ( 0, 0, 1 )
      FRAME_1400001_PRI_ABCORR     = 'NONE'
      FRAME_1400001_SEC_AXIS       = 'Y'
      FRAME_1400001_SEC_FRAME      = 'IAU_EARTH'
      FRAME_1400001_SEC_SPEC       = 'RECTANGULAR'
      FRAME_1400001_SEC_VECTOR     = ( 0, 0, 1 )
      FRAME_1400001_SEC_ABCORR     = 'NONE'


 [End of kernel]

More information about the Spice_discussion mailing list