Geometric Event Finding Hands-On Lesson (FORTRAN) |
Table of ContentsGeometric Event Finding Hands-On Lesson (FORTRAN) Overview Note About HTML Links References Tutorials Required Readings The Permuted Index Source Code Header Comments Kernels Used SPICE Routines Used Find View Periods Task Statement Learning Goals Approach Solution steps Solution Solution Meta-Kernel Solution Code Solution Sample Output Find Times when Target is Visible Task Statement Learning Goals Approach Solution steps Solution Solution Code Solution Sample Output Extra Credit Task statements Solutions Geometric Event Finding Hands-On Lesson (FORTRAN)
Overview
In this lesson the student is asked to construct a program that finds the time intervals, within a specified time range, when the ExoMars-16 Trace Gas Orbiter (TGO) is visible from ESA's deep space station in New Norcia. Possible occultation of the spacecraft by Mars is to be considered. Note About HTML Links
In order for the links to be resolved, create a subdirectory called ``lessons'' under the ``doc/html'' directory of the ``toolkit/'' tree and copy this document to that subdirectory before loading it into a Web browser. ReferencesTutorials
Name Lesson steps/routines it describes --------------- ----------------------------------------- Time Time Conversion SCLK and LSK Time Conversion SPK Obtaining Ephemeris Data Frames Reference Frames Using Frames Reference Frames PCK Planetary Constants Data Lunar-Earth PCK Lunar and Earth Orientation Data GF The SPICE Geometry Ginder (GF) subsystemThese tutorials are available from the NAIF ftp server at JPL:
http://naif.jpl.nasa.gov/naif/tutorials.html Required Readings
Name Lesson steps/routines that it describes --------------- ----------------------------------------- cells.req Cell/window initialization frames.req Using reference frames gf.req The SPICE geometry finder (GF) subsystem kernel.req Loading SPICE kernels naif_ids.req Body and reference frame names pck.req Obtaining planetary constants data spk.req Computing positions and velocities time.req UTC to ET time conversion windows.req The SPICE window data type The Permuted Index
This text document provides a simple mechanism by which users can discover which SPICE routines perform functions of interest, as well as the names of the source files that contain these routines. This is particularly useful for FORTRAN programmers because some of the routines are entry points; the names of these routines do not translate directly into the name of the respective source files that contain them. Source Code Header Comments
For example path of the source code of the STR2ET routine is
toolkit/src/spicelib/str2et.for Kernels Used
1. Solar System Ephemeris SPK, subsetted to cover only the time range of interest: de430.bsp 2. Martian Satellite Ephemeris SPK, subsetted to cover only the time range of interest: mar085.bsp 3. ESA stations SPK: estrack_v01.bsp 4. ESA stations frame definitions: estrack_v01.tf 5. EARTH_FIXED/ITRF93 frame connection: earthfixeditrf93.tf 6. Binary PCK for Earth: earth_070425_370426_predict.bpc 7. ExoMars-16 TGO Spacecraft Trajectory SPK, subsetted to cover only the time range of interest: em16_tgo_mlt_20171205_20230115_v01.bsp 8. Generic LSK: naif0012.tls 9. Generic PCK: pck00010.tpc 10. ExoMars-16 TGO FK, containing the SPICE ID/name mappings for the TGO spacecraft: em16_tgo_v07.tfThese SPICE kernels are included in the lesson package available from the NAIF server at JPL:
ftp://naif.jpl.nasa.gov/pub/naif/toolkit_docs/Lessons/ SPICE Routines Used
Name Function that it performs ---------- --------------------------------------------------- FURNSH Loads kernels, individually or listed in meta-kernel GFOCLT Solve for times of occultation or transit GFPOSC Solve for times when a position vector coordinate constraint is met REPMC Substitute a substring for a marker in a string REPMF Substitute double precision value for marker in string RPD Return number of radians per degree SSIZED Set the size of a d.p. cell STR2ET Converts a time string to ET seconds past J2000 TIMOUT Format a time string for output TOSTDO Write a string to standard output WNCARD Return cardinality of a SPICE window WNDIFD Find the difference of two d.p. windows WNFETD Fetch a specified interval from a d.p. window WNINSD Insert an interval into a d.p. windowRefer to the headers of the various routines listed above, as detailed interface specifications are provided with the source code. Find View PeriodsTask Statement
2018 JUN 10 TDB 2018 JUN 14 TDBwhen the ExoMars-16 Trace Gas Orbiter (TGO) is visible from ESA's New Norcia station. These time intervals are frequently called ``view periods.'' The spacecraft is considered visible if its apparent position (that is, its position corrected for light time and stellar aberration) has elevation of at least 6 degrees in the topocentric reference frame NEW_NORCIA_TOPO. In this exercise, we ignore the possibility of occultation of the spacecraft by Mars. Use a search step size that ensures that no view periods of duration 5 minutes or longer will be missed by the search. Display the start and stop times of these intervals using TDB calendar dates and millisecond precision. Learning Goals
ApproachSolution steps
Preparation:
SolutionSolution Meta-Kernel
KPL/MK This is the meta-kernel used in the solution of the tasks in the Geometric Event Finding Hands On Lesson. \begindata KERNELS_TO_LOAD = ( 'kernels/spk/de430.bsp' 'kernels/spk/mar085.bsp', 'kernels/spk/estrack_v01.bsp' 'kernels/fk/estrack_v01.tf' 'kernels/fk/earthfixeditrf93.tf' 'kernels/pck/earth_070425_370426_predict.bpc' 'kernels/lsk/naif0012.tls' 'kernels/spk/em16_tgo_mlt_20171205_20230115_v01.bsp' 'kernels/pck/pck00010.tpc' 'kernels/fk/em16_tgo_v07.tf' ) \begintext Solution Code
PROGRAM VIEWPR IMPLICIT NONE C C Find and display the window of times when the ExoMars-16 C TGO spacecraft is above a specified elevation limit in the C topocentric reference frame of ESA's New Norcia station. C C C SPICELIB functions C DOUBLE PRECISION RPD INTEGER WNCARD C C Global GF parameters: we import from this file C the definition of the GF workspace size parameter C C NWMAX C INCLUDE 'gf.inc' C C Local parameters C C Format string for time output: C CHARACTER*(*) TDBFMT PARAMETER ( TDBFMT = . 'YYYY MON DD HR:MN:SC.### (TDB) ::TDB' ) C C The meta-kernel: C CHARACTER*(*) METAKR PARAMETER ( METAKR = 'viewpr.tm' ) C C Maximum number of intervals in any window: C INTEGER MAXIVL PARAMETER ( MAXIVL = 1000 ) C C Maximum result window size: C INTEGER MAXWIN PARAMETER ( MAXWIN = 2 * MAXIVL ) C C SPICELIB cell bound: C INTEGER LBCELL PARAMETER ( LBCELL = -5 ) C C String length parameters: C INTEGER CORLEN PARAMETER ( CORLEN = 10 ) INTEGER FRNMLN PARAMETER ( FRNMLN = 32 ) INTEGER LNSIZE PARAMETER ( LNSIZE = 200 ) INTEGER NAMLEN PARAMETER ( NAMLEN = 32 ) INTEGER OPLEN PARAMETER ( OPLEN = 50 ) INTEGER TIMLEN PARAMETER ( TIMLEN = 50 ) C C Local variables C CHARACTER*(CORLEN) ABCORR CHARACTER*(NAMLEN) CRDSYS CHARACTER*(NAMLEN) COORD CHARACTER*(LNSIZE) LINE CHARACTER*(FRNMLN) OBSFRM CHARACTER*(OPLEN) RELATE CHARACTER*(NAMLEN) SRFPT CHARACTER*(TIMLEN) START CHARACTER*(TIMLEN) STOP CHARACTER*(NAMLEN) TARGET CHARACTER*(TIMLEN) TIMSTR CHARACTER*(LNSIZE) TITLE DOUBLE PRECISION ADJUST C C Confinement window used to store interval to be searched: C DOUBLE PRECISION CNFINE ( LBCELL : MAXWIN ) DOUBLE PRECISION ELVLIM DOUBLE PRECISION ETBEG DOUBLE PRECISION ETEND DOUBLE PRECISION INTBEG DOUBLE PRECISION INTEND DOUBLE PRECISION REVLIM C C STEPSZ is the step size, measured in seconds, used to search C for times bracketing a state transition. C DOUBLE PRECISION STEPSZ C C Result window used to store rise/set times: C DOUBLE PRECISION RISWIN ( LBCELL : MAXWIN ) C C Workspace array: C DOUBLE PRECISION WORK ( LBCELL : MAXWIN, NWMAX ) INTEGER I INTEGER WINSIZ C C Load the meta-kernel. C CALL FURNSH ( METAKR ) C C Assign the inputs for our search. C C Since we're interested in the apparent location of the C target, we use light time and stellar aberration C corrections. We use the "converged Newtonian" form C of the light time correction because this choice may C increase the accuracy of the occultation times we'll C compute using GFOCLT. C SRFPT = 'NEW_NORCIA' OBSFRM = 'NEW_NORCIA_TOPO' TARGET = 'TGO' ABCORR = 'CN+S' START = '2018 JUN 10 TDB' STOP = '2018 JUN 14 TDB' ELVLIM = 6.0D0 C C The elevation limit above has units of degrees; we convert C this value to radians for computation using SPICE routines. C We'll store the equivalent value in radians in REVLIM. C REVLIM = RPD() * ELVLIM C C Since SPICE doesn't directly support the AZ/EL coordinate C system, we use the equivalent constraint C C latitude > REVLIM C C in the latitudinal coordinate system, where the reference C frame is topocentric and is centered at the viewing location. C CRDSYS = 'LATITUDINAL' COORD = 'LATITUDE' RELATE = '>' C C The adjustment value only applies to absolute extrema C searches; simply give it an initial value of zero C for this inequality search. C ADJUST = 0.D0 C C STEPSZ is the step size, measured in seconds, used to search C for times bracketing a state transition. Since we don't expect C any events of interest to be shorter than five minutes, and C since the separation between events is well over 5 minutes, C we'll use this value as our step size. Units are seconds. C STEPSZ = 300.D0 C C Display a banner for the output report: C TITLE = 'Inputs for target visibility search:' CALL TOSTDO ( ' ' ) CALL TOSTDO ( TITLE ) CALL TOSTDO ( ' ' ) LINE = ' Target = #' CALL REPMC ( LINE, '#', TARGET, LINE ) CALL TOSTDO ( LINE ) LINE = ' Observation surface location = #' CALL REPMC ( LINE, '#', SRFPT, LINE ) CALL TOSTDO ( LINE ) LINE = ' Observer''s reference frame = #' CALL REPMC ( LINE, '#', OBSFRM, LINE ) CALL TOSTDO ( LINE ) LINE = ' Elevation limit (degrees) = #' CALL REPMF ( LINE, '#', ELVLIM, 7, 'F', LINE ) CALL TOSTDO ( LINE ) LINE = ' Aberration correction = #' CALL REPMC ( LINE, '#', ABCORR, LINE ) CALL TOSTDO ( LINE ) LINE = ' Step size (seconds) = #' CALL REPMF ( LINE, '#', STEPSZ, 9, 'F', LINE ) CALL TOSTDO ( LINE ) C C Convert the start and stop times to ET. C CALL STR2ET ( START, ETBEG ) CALL STR2ET ( STOP, ETEND ) C C Display the search interval start and stop times C using the format shown below. C C 2004 MAY 06 20:15:00.000 (TDB) C CALL TIMOUT ( ETBEG, TDBFMT, TIMSTR ) LINE = ' Start time = '//TIMSTR CALL TOSTDO ( LINE ) CALL TIMOUT ( ETEND, TDBFMT, TIMSTR ) LINE = ' Stop time = '//TIMSTR CALL TOSTDO ( LINE ) CALL TOSTDO ( ' ' ) C C Every SPICELIB window must have its size initialized. C C Initialize the "confinement" window with the interval C over which we'll conduct the search. C CALL SSIZED ( MAXWIN, CNFINE ) CALL WNINSD ( ETBEG, ETEND, CNFINE ) C C Initialize the result window; this window will contain C the rise/set times found by our search. C CALL SSIZED ( MAXWIN, RISWIN ) C C In the call below, the workspace dimensions are C C ( MAXWIN, NWMAX ) C C Now search for the time period, within our confinement C window, during which the apparent target has elevation C at least equal to the elevation limit. C CALL GFPOSC ( TARGET, OBSFRM, ABCORR, SRFPT, . CRDSYS, COORD, RELATE, REVLIM, . ADJUST, STEPSZ, CNFINE, MAXWIN, . NWMAX, WORK, RISWIN ) C C The function WNCARD returns the number of intervals C in a SPICE window. C WINSIZ = WNCARD( RISWIN ) IF ( WINSIZ .EQ. 0 ) THEN WRITE (*,*) 'No events were found.' ELSE C C Display the view periods. C LINE = 'Visibility times of # as seen from #:' CALL REPMC ( LINE, '#', TARGET, LINE ) CALL REPMC ( LINE, '#', SRFPT, LINE ) CALL TOSTDO ( LINE ) CALL TOSTDO ( ' ' ) DO I = 1, WINSIZ C C Fetch the start and stop times of the Ith interval C from the search result window VISWIN. C CALL WNFETD ( RISWIN, I, INTBEG, INTEND ) C C Convert the rise time to a TDB calendar string. C CALL TIMOUT ( INTBEG, TDBFMT, TIMSTR ) C C Write the string to standard output. C IF ( I .EQ. 1 ) THEN LINE = 'Visibility or window start time: #' ELSE LINE = 'Visibility start time: #' END IF CALL REPMC ( LINE, '#', TIMSTR, LINE ) CALL TOSTDO ( LINE ) C C Convert the set time to a TDB calendar string. C CALL TIMOUT ( INTEND, TDBFMT, TIMSTR ) C C Write the string to standard output. C IF ( I .EQ. WINSIZ ) THEN LINE = 'Visibility or window stop time: #' ELSE LINE = 'Visibility stop time: #' END IF CALL REPMC ( LINE, '#', TIMSTR, LINE ) CALL TOSTDO ( LINE ) CALL TOSTDO ( ' ' ) END DO END IF END Solution Sample Output
After compiling the program, execute it. The output is:
Inputs for target visibility search: Target = TGO Observation surface location = NEW_NORCIA Observer's reference frame = NEW_NORCIA_TOPO Elevation limit (degrees) = 6.000000 Aberration correction = CN+S Step size (seconds) = 300.000000 Start time = 2018 JUN 10 00:00:00.000 (TDB) Stop time = 2018 JUN 14 00:00:00.000 (TDB) Visibility times of TGO as seen from NEW_NORCIA: Visibility or window start time: 2018 JUN 10 00:00:00.000 (TDB) Visibility stop time: 2018 JUN 10 02:11:17.355 (TDB) Visibility start time: 2018 JUN 10 13:19:58.777 (TDB) Visibility stop time: 2018 JUN 11 02:08:16.008 (TDB) Visibility start time: 2018 JUN 11 13:16:50.542 (TDB) Visibility stop time: 2018 JUN 12 02:05:12.548 (TDB) Visibility start time: 2018 JUN 12 13:13:38.573 (TDB) Visibility stop time: 2018 JUN 13 02:02:06.618 (TDB) Visibility start time: 2018 JUN 13 13:10:23.432 (TDB) Visibility or window stop time: 2018 JUN 14 00:00:00.000 (TDB) Find Times when Target is VisibleTask Statement
Display each of the intervals in the result window as a pair of start and stop times. Express each time as a TDB calendar date using the same format as in the previous program. Learning Goals
ApproachSolution steps
SolutionSolution Code
PROGRAM VISIBL IMPLICIT NONE C C Find and display the window of times when the ExoMars-16 C TGO spacecraft is above a specified elevation limit in the C topocentric reference frame of ESA's New Norcia station C and is not occulted by Mars. C C C SPICELIB functions C DOUBLE PRECISION RPD INTEGER WNCARD C C Global GF parameters: we import from this file C the definition of the GF workspace size parameter C C NWMAX C C and the occultation parameters C C OCCLN C SHPLEN C INCLUDE 'gf.inc' C C Local parameters C C Format string for time output: C CHARACTER*(*) TDBFMT PARAMETER ( TDBFMT = . 'YYYY MON DD HR:MN:SC.### (TDB) ::TDB' ) C C The meta-kernel: C CHARACTER*(*) METAKR PARAMETER ( METAKR = 'viewpr.tm' ) C C Maximum number of events we can handle in our event set: C INTEGER MAXEVT PARAMETER ( MAXEVT = 1000 ) C C Maximum result window size: C INTEGER MAXWIN PARAMETER ( MAXWIN = 2 * MAXEVT ) C C SPICELIB cell bound: C INTEGER LBCELL PARAMETER ( LBCELL = -5 ) C C String length parameters: C INTEGER BDNMLN PARAMETER ( BDNMLN = 36 ) INTEGER CORLEN PARAMETER ( CORLEN = 10 ) INTEGER FRNMLN PARAMETER ( FRNMLN = 32 ) INTEGER LNSIZE PARAMETER ( LNSIZE = 200 ) INTEGER NAMLEN PARAMETER ( NAMLEN = 32 ) INTEGER OPLEN PARAMETER ( OPLEN = 50 ) INTEGER TIMLEN PARAMETER ( TIMLEN = 50 ) C C Local variables C CHARACTER*(CORLEN) ABCORR CHARACTER*(BDNMLN) BACK CHARACTER*(FRNMLN) BFRAME CHARACTER*(BDNMLN) BSHAPE CHARACTER*(NAMLEN) CRDSYS CHARACTER*(NAMLEN) COORD CHARACTER*(FRNMLN) FFRAME CHARACTER*(FRNMLN) FRAME CHARACTER*(BDNMLN) FRONT CHARACTER*(SHPLEN) FSHAPE CHARACTER*(LNSIZE) LINE CHARACTER*(OCLLN) OCCTYP CHARACTER*(OPLEN) RELATE CHARACTER*(NAMLEN) SRFPT CHARACTER*(TIMLEN) START CHARACTER*(TIMLEN) STOP CHARACTER*(NAMLEN) TARGET CHARACTER*(TIMLEN) TIMSTR CHARACTER*(LNSIZE) TITLE DOUBLE PRECISION ADJUST C C Confinement window used to store interval to be searched: C DOUBLE PRECISION CNFINE ( LBCELL : MAXEVT ) DOUBLE PRECISION ELVLIM DOUBLE PRECISION ETBEG DOUBLE PRECISION ETEND DOUBLE PRECISION INTBEG DOUBLE PRECISION INTEND DOUBLE PRECISION REVLIM C C STEPSZ is the step size, measured in seconds, used to search C for times bracketing a state transition. C DOUBLE PRECISION STEPSZ C C Result window used to store occultation times: C DOUBLE PRECISION OCCWIN ( LBCELL : MAXWIN ) C C Result window used to store rise/set times: C DOUBLE PRECISION RISWIN ( LBCELL : MAXWIN ) C C Result window used to store visibility periods: C DOUBLE PRECISION VISWIN ( LBCELL : MAXWIN ) C C Workspace array: C DOUBLE PRECISION WORK ( LBCELL : MAXWIN, NWMAX ) INTEGER I INTEGER WINSIZ C C Load the meta-kernel. C CALL FURNSH ( METAKR ) C C Assign the inputs for our search. C SRFPT = 'NEW_NORCIA' FRAME = 'NEW_NORCIA_TOPO' TARGET = 'TGO' ABCORR = 'CN+S' START = '2018 JUN 10 TDB' STOP = '2018 JUN 14 TDB' ELVLIM = 6.0D0 C C The elevation limit above has units of degrees; we convert C this value to radians for computation using SPICE routines. C We'll store the equivalent value in radians in REVLIM. C REVLIM = RPD() * ELVLIM C Since we're interested in the apparent location of the C target, we use light time and stellar aberration C corrections. C C Since SPICE doesn't directly support the AZ/EL coordinate C system, we use the equivalent constraint C C latitude > REVLIM C C in the latitudinal coordinate system, where the reference C frame is topocentric and is centered at the viewing location. C CRDSYS = 'LATITUDINAL' COORD = 'LATITUDE' RELATE = '>' C C STEPSZ is the step size, measured in seconds, used to search C for times bracketing a state transition. Since we don't expect C any events of interest to be shorter than five minutes, and C since the separation between events is well over 5 minutes, C we'll use this value as our step size. Units are seconds. C STEPSZ = 300.D0 C C We model the target shape as a point and the blocking body's C shape as an ellipsoid. No body-fixed reference frame is C required for the target since its orientation is not used. C BACK = TARGET BSHAPE = 'POINT' BFRAME = ' ' FRONT = 'MARS' FSHAPE = 'ELLIPSOID' FFRAME = 'IAU_MARS' C C The occultation type should be set to 'ANY' for a point C target. C OCCTYP = 'ANY' C C Display a banner for the output report: C TITLE = 'Inputs for target visibility search:' CALL TOSTDO ( ' ' ) CALL TOSTDO ( TITLE ) CALL TOSTDO ( ' ' ) LINE = ' Target = #' CALL REPMC ( LINE, '#', TARGET, LINE ) CALL TOSTDO ( LINE ) LINE = ' Observation surface location = #' CALL REPMC ( LINE, '#', SRFPT, LINE ) CALL TOSTDO ( LINE ) LINE = ' Observer''s reference frame = #' CALL REPMC ( LINE, '#', FRAME, LINE ) CALL TOSTDO ( LINE ) LINE = ' Blocking body = #' CALL REPMC ( LINE, '#', FRONT, LINE ) CALL TOSTDO ( LINE ) LINE = ' Blocker''s reference frame = #' CALL REPMC ( LINE, '#', FFRAME, LINE ) CALL TOSTDO ( LINE ) LINE = ' Elevation limit (degrees) = #' CALL REPMF ( LINE, '#', ELVLIM, 7, 'F', LINE ) CALL TOSTDO ( LINE ) LINE = ' Aberration correction = #' CALL REPMC ( LINE, '#', ABCORR, LINE ) CALL TOSTDO ( LINE ) LINE = ' Step size (seconds) = #' CALL REPMF ( LINE, '#', STEPSZ, 9, 'F', LINE ) CALL TOSTDO ( LINE ) C C Convert the start and stop times to ET. C CALL STR2ET ( START, ETBEG ) CALL STR2ET ( STOP, ETEND ) C C Display the search interval start and stop times C using the format shown below. C C 2004 MAY 06 20:15:00.000 (TDB) C CALL TIMOUT ( ETBEG, TDBFMT, TIMSTR ) LINE = ' Start time = '//TIMSTR CALL TOSTDO ( LINE ) CALL TIMOUT ( ETEND, TDBFMT, TIMSTR ) LINE = ' Stop time = '//TIMSTR CALL TOSTDO ( LINE ) CALL TOSTDO ( ' ' ) C C Every SPICELIB window must have its size initialized. C C Initialize the "confinement" window with the interval C over which we'll conduct the search. C CALL SSIZED ( MAXWIN, CNFINE ) CALL WNINSD ( ETBEG, ETEND, CNFINE ) C C Initialize the result window; this window will contain C the rise/set times found by our search. C CALL SSIZED ( MAXWIN, RISWIN ) C C Initialize the occultation and visibility windows. C CALL SSIZED ( MAXWIN, OCCWIN ) CALL SSIZED ( MAXWIN, VISWIN ) C C The adjustment value only applies to absolute extrema C searches; simply give it an initial value of zero C for this inequality search. C ADJUST = 0.D0 C C Note that the workspace dimensions are ( MAXWIN, NWMAX ). C C Now search for the time period, within our confinement C window, during which the apparent target has elevation C at least equal to the elevation limit. C CALL GFPOSC ( TARGET, FRAME, ABCORR, SRFPT, . CRDSYS, COORD, RELATE, REVLIM, . ADJUST, STEPSZ, CNFINE, MAXWIN, . NWMAX, WORK, RISWIN ) C C Now find the times when the apparent target is above C the elevation limit and is not occulted by the C blocking body (Mars). We'll find the times when the target C is above the elevation limit and *is* occulted, then subtract C that window from the view period window RISWIN found above. C C For this occultation search, we can use RISWIN as C the confinement window because we're not interested in C occultations that occur when the target is below the C elevation limit. C C Find occultations within the view period window. C CALL GFOCLT ( OCCTYP, FRONT, FSHAPE, FFRAME, . BACK, BSHAPE, BFRAME, ABCORR, . SRFPT, STEPSZ, RISWIN, OCCWIN ) C C Subtract the occultation window from the view period C window: this yields the time periods when the target C is visible. C CALL WNDIFD ( RISWIN, OCCWIN, VISWIN ) C C The function WNCARD returns the number of intervals C in a SPICE window. C WINSIZ = WNCARD( VISWIN ) IF ( WINSIZ .EQ. 0 ) THEN WRITE (*,*) 'No events were found.' ELSE C C Display the visibility time periods. C LINE = 'Visibility times of # as seen from #:' CALL REPMC ( LINE, '#', TARGET, LINE ) CALL REPMC ( LINE, '#', SRFPT, LINE ) CALL TOSTDO ( LINE ) CALL TOSTDO ( ' ' ) DO I = 1, WINSIZ C C Fetch the start and stop times of the Ith interval C from the search result window VISWIN. C CALL WNFETD ( VISWIN, I, INTBEG, INTEND ) C C Convert the rise time to a TDB calendar string. C CALL TIMOUT ( INTBEG, TDBFMT, TIMSTR ) C C Write the string to standard output. C IF ( I .EQ. 1 ) THEN LINE = 'Visibility or window start time: #' ELSE LINE = 'Visibility start time: #' END IF CALL REPMC ( LINE, '#', TIMSTR, LINE ) CALL TOSTDO ( LINE ) CALL TIMOUT ( INTEND, TDBFMT, TIMSTR ) C C Write the string to standard output. C IF ( I .EQ. WINSIZ ) THEN LINE = 'Visibility or window stop time: #' ELSE LINE = 'Visibility stop time: #' END IF CALL REPMC ( LINE, '#', TIMSTR, LINE ) CALL TOSTDO ( LINE ) CALL TOSTDO ( ' ' ) END DO END IF END Solution Sample Output
After compiling the program, execute it. The output is:
Inputs for target visibility search: Target = TGO Observation surface location = NEW_NORCIA Observer's reference frame = NEW_NORCIA_TOPO Blocking body = MARS Blocker's reference frame = IAU_MARS Elevation limit (degrees) = 6.000000 Aberration correction = CN+S Step size (seconds) = 300.000000 Start time = 2018 JUN 10 00:00:00.000 (TDB) Stop time = 2018 JUN 14 00:00:00.000 (TDB) Visibility times of TGO as seen from NEW_NORCIA: Visibility or window start time: 2018 JUN 10 00:00:00.000 (TDB) Visibility stop time: 2018 JUN 10 01:00:30.640 (TDB) Visibility start time: 2018 JUN 10 01:41:03.610 (TDB) Visibility stop time: 2018 JUN 10 02:11:17.355 (TDB) Visibility start time: 2018 JUN 10 13:28:28.785 (TDB) Visibility stop time: 2018 JUN 10 14:45:38.197 (TDB) Visibility start time: 2018 JUN 10 15:26:21.981 (TDB) Visibility stop time: 2018 JUN 10 16:43:32.192 (TDB) Visibility start time: 2018 JUN 10 17:24:17.290 (TDB) Visibility stop time: 2018 JUN 10 18:41:27.535 (TDB) Visibility start time: 2018 JUN 10 19:22:13.628 (TDB) Visibility stop time: 2018 JUN 10 20:39:21.785 (TDB) Visibility start time: 2018 JUN 10 21:20:08.856 (TDB) Visibility stop time: 2018 JUN 10 22:37:12.445 (TDB) Visibility start time: 2018 JUN 10 23:18:00.834 (TDB) Visibility stop time: 2018 JUN 11 00:35:01.034 (TDB) Visibility start time: 2018 JUN 11 01:15:50.883 (TDB) Visibility stop time: 2018 JUN 11 02:08:16.008 (TDB) Visibility start time: 2018 JUN 11 13:16:50.542 (TDB) Visibility stop time: 2018 JUN 11 14:20:09.789 (TDB) Visibility start time: 2018 JUN 11 15:01:08.370 (TDB) Visibility stop time: 2018 JUN 11 16:18:03.385 (TDB) Visibility start time: 2018 JUN 11 16:59:03.014 (TDB) Visibility stop time: 2018 JUN 11 18:15:58.739 (TDB) Visibility start time: 2018 JUN 11 18:56:59.199 (TDB) Visibility stop time: 2018 JUN 11 20:13:54.308 (TDB) Visibility start time: 2018 JUN 11 20:54:55.301 (TDB) Visibility stop time: 2018 JUN 11 22:11:47.045 (TDB) Visibility start time: 2018 JUN 11 22:52:48.925 (TDB) Visibility stop time: 2018 JUN 12 00:09:35.868 (TDB) Visibility start time: 2018 JUN 12 00:50:39.046 (TDB) Visibility stop time: 2018 JUN 12 02:05:12.548 (TDB) Visibility start time: 2018 JUN 12 13:13:38.573 (TDB) Visibility stop time: 2018 JUN 12 13:54:43.524 (TDB) Visibility start time: 2018 JUN 12 14:35:54.054 (TDB) Visibility stop time: 2018 JUN 12 15:52:36.256 (TDB) Visibility start time: 2018 JUN 12 16:33:47.502 (TDB) Visibility stop time: 2018 JUN 12 17:50:30.988 (TDB) Visibility start time: 2018 JUN 12 18:31:42.896 (TDB) Visibility stop time: 2018 JUN 12 19:48:26.827 (TDB) Visibility start time: 2018 JUN 12 20:29:39.039 (TDB) Visibility stop time: 2018 JUN 12 21:46:20.933 (TDB) Visibility start time: 2018 JUN 12 22:27:33.596 (TDB) Visibility stop time: 2018 JUN 12 23:44:11.473 (TDB) Visibility start time: 2018 JUN 13 00:25:24.992 (TDB) Visibility stop time: 2018 JUN 13 01:42:00.777 (TDB) Visibility start time: 2018 JUN 13 13:10:23.432 (TDB) Visibility stop time: 2018 JUN 13 13:29:19.789 (TDB) Visibility start time: 2018 JUN 13 14:10:38.985 (TDB) Visibility stop time: 2018 JUN 13 15:27:11.882 (TDB) Visibility start time: 2018 JUN 13 16:08:31.566 (TDB) Visibility stop time: 2018 JUN 13 17:25:06.068 (TDB) Visibility start time: 2018 JUN 13 18:06:26.219 (TDB) Visibility stop time: 2018 JUN 13 19:23:01.820 (TDB) Visibility start time: 2018 JUN 13 20:04:22.175 (TDB) Visibility stop time: 2018 JUN 13 21:20:57.296 (TDB) Visibility start time: 2018 JUN 13 22:02:17.650 (TDB) Visibility or window stop time: 2018 JUN 13 23:18:49.624 (TDB) Extra Credit
These ``extra credit'' tasks are provided as task statements, and unlike the regular tasks, no approach or solution source code is provided. In the next section, you will find the numeric solutions to the questions asked in these tasks. Task statements
2018 JUN 10 TDB 2018 JUN 11 TDB
2018 JUN 10 TDB 2018 JUN 11 TDB
2018 JUN 10 TDB 2018 JUN 11 TDB
Solutions
1. Inputs for the equator crossing search, using GFPOSC for the spacecraft latitude in the Mars body-fixed frame equal to 0: Target = TGO Observer = MARS Observer's reference frame = IAU_MARS Elevation limit (degrees) = 0.000000 Aberration correction = NONE Step size (seconds) = 300.000000 Start time = 2018 JUN 10 00:00:00.000 (TDB) Stop time = 2018 JUN 11 00:00:00.000 (TDB) TGO Mars' equator crossing times: Equator crossing time: 2018 JUN 10 00:14:08.836 (TDB) Equator crossing time: 2018 JUN 10 01:12:34.582 (TDB) Equator crossing time: 2018 JUN 10 02:12:00.375 (TDB) Equator crossing time: 2018 JUN 10 03:10:28.808 (TDB) Equator crossing time: 2018 JUN 10 04:09:53.955 (TDB) Equator crossing time: 2018 JUN 10 05:08:23.919 (TDB) Equator crossing time: 2018 JUN 10 06:07:48.630 (TDB) Equator crossing time: 2018 JUN 10 07:06:17.539 (TDB) Equator crossing time: 2018 JUN 10 08:05:42.659 (TDB) Equator crossing time: 2018 JUN 10 09:04:09.120 (TDB) Equator crossing time: 2018 JUN 10 10:03:34.270 (TDB) Equator crossing time: 2018 JUN 10 11:01:59.269 (TDB) Equator crossing time: 2018 JUN 10 12:01:22.866 (TDB) Equator crossing time: 2018 JUN 10 12:59:49.352 (TDB) Equator crossing time: 2018 JUN 10 13:59:13.289 (TDB) Equator crossing time: 2018 JUN 10 14:57:41.242 (TDB) Equator crossing time: 2018 JUN 10 15:57:07.576 (TDB) Equator crossing time: 2018 JUN 10 16:55:35.266 (TDB) Equator crossing time: 2018 JUN 10 17:55:02.773 (TDB) Equator crossing time: 2018 JUN 10 18:53:30.271 (TDB) Equator crossing time: 2018 JUN 10 19:52:56.383 (TDB) Equator crossing time: 2018 JUN 10 20:51:23.966 (TDB) Equator crossing time: 2018 JUN 10 21:50:47.729 (TDB) Equator crossing time: 2018 JUN 10 22:49:14.385 (TDB) Equator crossing time: 2018 JUN 10 23:48:37.583 (TDB) 2. Inputs for the periapsis search, using GFDIST for the spacecraft distance from Mars at a local minimum: Target = TGO Observer = MARS Observer's reference frame = J2000 Aberration correction = NONE Step size (seconds) = 300.000000 Start time = 2018 JUN 10 00:00:00.000 (TDB) Stop time = 2018 JUN 11 00:00:00.000 (TDB) TGO periapsis times: Periapsis time: 2018 JUN 10 00:43:06.357 (TDB) Periapsis time: 2018 JUN 10 02:40:47.168 (TDB) Periapsis time: 2018 JUN 10 04:38:45.496 (TDB) Periapsis time: 2018 JUN 10 06:36:32.706 (TDB) Periapsis time: 2018 JUN 10 08:34:10.548 (TDB) Periapsis time: 2018 JUN 10 10:31:49.108 (TDB) Periapsis time: 2018 JUN 10 12:29:20.342 (TDB) Periapsis time: 2018 JUN 10 14:27:07.089 (TDB) Periapsis time: 2018 JUN 10 16:25:36.081 (TDB) Periapsis time: 2018 JUN 10 18:24:02.653 (TDB) Periapsis time: 2018 JUN 10 20:22:23.184 (TDB) Periapsis time: 2018 JUN 10 22:20:12.453 (TDB) 3. Inputs for the apoapsis search, using GFDIST for the spacecraft distance from Mars at a local maximum: Target = TGO Observer = MARS Observer's reference frame = J2000 Aberration correction = NONE Step size (seconds) = 300.000000 Start time = 2018 JUN 10 00:00:00.000 (TDB) Stop time = 2018 JUN 11 00:00:00.000 (TDB) TGO apoapsis times: Apoapsis time: 2018 JUN 10 01:41:44.632 (TDB) Apoapsis time: 2018 JUN 10 03:39:31.106 (TDB) Apoapsis time: 2018 JUN 10 05:37:22.115 (TDB) Apoapsis time: 2018 JUN 10 07:34:59.674 (TDB) Apoapsis time: 2018 JUN 10 09:32:25.708 (TDB) Apoapsis time: 2018 JUN 10 11:29:47.945 (TDB) Apoapsis time: 2018 JUN 10 13:27:30.200 (TDB) Apoapsis time: 2018 JUN 10 15:26:02.524 (TDB) Apoapsis time: 2018 JUN 10 17:24:37.842 (TDB) Apoapsis time: 2018 JUN 10 19:23:11.265 (TDB) Apoapsis time: 2018 JUN 10 21:21:13.530 (TDB) Apoapsis time: 2018 JUN 10 23:18:56.796 (TDB) |