IMPLICIT NONE DOUBLE PRECISION BEGET DOUBLE PRECISION ENDET DOUBLE PRECISION ET DOUBLE PRECISION STEP DOUBLE PRECISION DVEC ( 3 ) DOUBLE PRECISION SPOINT ( 3 ) DOUBLE PRECISION TRGEPC DOUBLE PRECISION SRFVEC ( 3 ) LOGICAL FOUND LOGICAL OFOUND CHARACTER*(32) UTC CALL FURNSH ( 'get_limb_crossings.furnsh' ) C C Set begin/end times and step. C CALL STR2ET( "2008-MAY-25 20:01", BEGET ) CALL STR2ET( "2008-MAY-26 01:59", ENDET ) STEP = 0.1D0 ET = BEGET C C View direction is +Z of M01_THEMIS_IR frame. C CALL VPACK( 0.D0, 0.D0, 1.D0, DVEC ) C C Assume that we have intercept on the first step. C OFOUND = .TRUE. C C Loop over the time period with specified step. C DO WHILE( ET .LE. ENDET ) C C Compute surface intercept for THEMIS IR boresight. C CALL SINCPT ( 'Ellipsoid', 'MARS', ET, 'IAU_MARS', . 'NONE', 'M01', 'M01_THEMIS_IR', DVEC, . SPOINT, TRGEPC, SRFVEC, FOUND ) C C Is state different the previous one? If yes, report C limb crossing. C IF ( FOUND .NEQV. OFOUND ) THEN CALL TIMOUT( ET, 'YYYY-MM-DDTHR:MN:SC.# ::RND', UTC ) IF ( FOUND ) THEN WRITE (*,*) 'HIT MARS AT ', UTC ELSE WRITE (*,*) 'OFF MARS AT ', UTC END IF OFOUND = FOUND END IF C C take next step. C ET = ET + STEP END DO C C All done. C END