C$Procedure DVWEST C SUBROUTINE DVWEST ( CLSOLD , CLSNOW , & DVOLD , DVNOW , & TMWOLD , TMWNOW , TARGET & ) C C C******************************************************************************* C C Copyright (C) 1993, California Institute of Technology. U.S. C Government Sponsorhip under NASA Contract NAS7-918 is C acknowledged. C C******************************************************************************* C C$ Log C C Date Name Description C ----------------------------------------------------------------------------- C 23-JUL-1990 Eric Cannell creation of DVWEST C C$ Purpose C C DVWEST computes the dV for the next ground track runout for the C time targeting to the west boundary strategy. C C$ Input_Arguments C C Name Type Dim Units Description C ----------------------------------------------------------------------------- C CLSOLD I 1 - type of next to last ground track C CLSNOW I 1 - type of last ground track C DVOLD DP 1 mm/sec dV of next to last ground track C DVNOW DP 1 mm/sec dV of last ground track C TMWOLD DP 1 days time to west boundary for next to the C last ground track C TMWNOW DP 1 days time to west boundary for last ground track C TARGET DP 1 days desired time to west boundary C C$ Output_Arguments C C Name Type Dim Units Description C ----------------------------------------------------------------------------- C DVOLD DP 1 mm/sec dV of last ground track (input DVNOW) C DVNOW DP 1 mm/sec dV of next ground track C C$ References C C 1] See GTARG.FOR for a discussion regarding the classification of C ground tracks. C C$ Restrictions C C 1] CLSOLD and CLSNOW can only have values in the range of 1..6 and C combinations defined in the Method Section. C C 2] DVWEST assumes that a positive dV is along the velocity vector and C raises the semi-major axis. Conversely, a negative dV is opposite C the velocity vector and lowers semi-major axis. C C$ Files C C File Name Unit Number Description C ----------------------------------------------------------------------------- C * * standard I/O C OFILE 8 text output file C C$ Declarations_of_Input_and_Output_Arguments C INTEGER CLSNOW INTEGER CLSOLD DOUBLE PRECISION DVNOW DOUBLE PRECISION DVOLD DOUBLE PRECISION TARGET DOUBLE PRECISION TMWNOW DOUBLE PRECISION TMWOLD C C$ Declarations_of_Local_Variables C DOUBLE PRECISION DVTEMP DOUBLE PRECISION M C C$ Method C C The method by which the new dV is computed depends on the previous C two ground track types: C C CLSOLD CLSNOW method of computation C -------------------------------------------------- C 1 1 120% of current dV C 2 1 or 2 120% of current dV C 3 1 or 2 or 3 120% of current dV C 1 or 2 or 3 4 or 5 or 6 average of last 2 dV's C 4 or 5 or 6 1 or 2 or 3 average of last 2 dV's C 4 or 5 4 or 5 or 6 linear extrapolation C 6 4 or 5 linear extrapolation C 6 6 80% of current dV C C C If luni-solar/drag interaction gets really wacky, DVWEST may have to C be modified to allow other transitions, i.e., 1 to 2. C C-& IF ( ( CLSOLD .EQ. 1 & ) & .AND. ( CLSNOW .EQ. 1 & ) ) THEN DVOLD = DVNOW DVNOW = DVNOW + DABS( .2D0 * DVNOW ) ELSE IF ( ( CLSOLD .EQ. 2 & ) & .AND. ( CLSNOW .EQ. 1 & .OR. CLSNOW .EQ. 2 & ) ) THEN DVOLD = DVNOW DVNOW = DVNOW + DABS( .2D0 * DVNOW ) ELSE IF ( ( CLSOLD .EQ. 3 & ) & .AND. ( CLSNOW .EQ. 1 & .OR. CLSNOW .EQ. 2 & .OR. CLSNOW .EQ. 3 & ) ) THEN DVOLD = DVNOW DVNOW = DVNOW + DABS( .2D0 * DVNOW ) ELSE IF ( ( CLSOLD .EQ. 1 & .OR. CLSOLD .EQ. 2 & .OR. CLSOLD .EQ. 3 & ) & .AND. ( CLSNOW .EQ. 4 & .OR. CLSNOW .EQ. 5 & .OR. CLSNOW .EQ. 6 & ) ) THEN DVTEMP = ( DVOLD + DVNOW ) / 2D0 DVOLD = DVNOW DVNOW = DVTEMP ELSE IF ( ( CLSOLD .EQ. 4 & .OR. CLSOLD .EQ. 5 & .OR. CLSOLD .EQ. 6 & ) & .AND. ( CLSNOW .EQ. 1 & .OR. CLSNOW .EQ. 2 & .OR. CLSNOW .EQ. 3 & ) ) THEN DVTEMP = ( DVOLD + DVNOW ) / 2D0 DVOLD = DVNOW DVNOW = DVTEMP ELSE IF ( ( CLSOLD .EQ. 4 & .OR. CLSOLD .EQ. 5 & ) & .AND. ( CLSNOW .EQ. 4 & .OR. CLSNOW .EQ. 5 & .OR. CLSNOW .EQ. 6 & ) ) THEN M = ( TMWNOW - TMWOLD ) / ( DVNOW - DVOLD ) DVTEMP = ( TARGET - TMWNOW + DVNOW * M ) & / M DVOLD = DVNOW DVNOW = DVTEMP ELSE IF ( ( CLSOLD .EQ. 6 & ) & .AND. ( CLSNOW .EQ. 4 & .OR. CLSNOW .EQ. 5 & ) ) THEN M = ( TMWNOW - TMWOLD ) / ( DVNOW - DVOLD ) DVTEMP = ( TARGET - TMWNOW + DVNOW * M ) & / M DVOLD = DVNOW DVNOW = DVTEMP ELSE IF ( ( CLSOLD .EQ. 6 & ) & .AND. ( CLSNOW .EQ. 6 & ) ) THEN DVOLD = DVNOW DVNOW = DVNOW - DABS( .2D0 * DVNOW ) ELSE WRITE(*,301) CLSOLD , CLSNOW WRITE(8,301) CLSOLD , CLSNOW 301 FORMAT(/,1X, & 'GTARG: CLSOLD, CLSNOW (',I,',',I,') in DVWEST are invalid.') STOP END IF C1 End of DVWEST. RETURN END