      SUBROUTINE DIULYM


      INCLUDE 'PARAMETERS.INC'

      INCLUDE 'PLANET.INC'


      COMMON

     &      /BLOCK6/  MCROSS(MB)

     &      /BLOCK14/ MTAU(MB)

     &      /ONED15/  THOUR

     &      /ONED32/  SUNRISE(NALT) , SUNSET(NALT)

     &      /BLOCK12/ CROSS(NWAVE,MB)

     &      /BLOCK21/ CRSO2(11)

     &      /BLOCK24/ TRANLYM(11,NALT)

     &      /ONED47/  COLUMN(NALT,MB)

     &      /ONED50/  COSSZA


C THIS SUBROUTINE USES DETAILED CROSS-SECTION VALUES OF O2 AT LYMAN ALPHA
C TO CALCULATE THE DIURNAL AVERAGE OF THE TRANSMITANCE IN THE LYMAN ALPHA
C REGION.

C *** NOTE: MTAU(1) = O2 AND MTAU(2) = O3 *****


C COMPUTE OPTICAL DEPTH USING SIMPLIFIED CALCULATIONS FOR SZA < 90 DEGREES

      IF( COSSZA .GE. 0.0d0 ) THEN   ! SZA < 90 DEGREES
        DO K = 1 , NALT
          COL1 = COLUMN(K,MTAU(1))
          COL2 = COLUMN(K,MTAU(2))
          DO LALPHA = 1 , 11
            TAULYM = COL2*CROSS(LYMAN,MCROSS(2)) + COL1*CRSO2(LALPHA)
            TRANLYM(LALPHA,K) = DEXP(-TAULYM)
          ENDDO
        ENDDO
      ENDIF

 
C CALCULATE OPTICAL DEPTHS FOR SOLAR ZENITH ANGLES > PI/2. THE COLUMN DEPTH IS
C COMPUTED BY SUBTRACTING THE COLUMN DEPTH AT ANGLE PI - CHI FROM TWICE THE
C COLUMN DEPTH TO THE TANGENT POINT.

      IF( (COSSZA .LT. 0.0d0) .AND. (ISPHERE .EQ. 1) ) THEN
 
        DO K = 1 , NALT
          IF( (THOUR .GE. SUNRISE(K)) .AND.
     &        (THOUR .LT. SUNSET(K)) )THEN

            COL1 = COLUMN(K,MTAU(1))
            COL2 = COLUMN(K,MTAU(2))
            DO LALPHA = 1 , 11
              TAULYM = COL2*CROSS(LYMAN,MCROSS(2)) + COL1*CRSO2(LALPHA)
              TRANLYM(LALPHA,K) = DEXP(-TAULYM)
            ENDDO

          ELSE

            DO LALPHA = 1 , 11
              TRANLYM(LALPHA,K) = 0.0D0  ! IN DARKNESS
            ENDDO

          ENDIF

        ENDDO      ! END LOOP OVER K

      ENDIF   ! END SZA > 90 (SPHERICAL CASE)

      IF( (COSSZA .LT. 0.0d0) .AND. (ISPHERE .EQ. 0) ) THEN

         DO K = 1 , NALT
           DO LALPHA = 1 , 11
             TRANLYM(LALPHA,K) = 0.0D0
           ENDDO
         ENDDO

      ENDIF        ! (NON-SPHERICAL CASE)


      RETURN
      END


C-------------------------------------------------------------------------------
C-------------------------------------------------------------------------------
C-------------------------------------------------------------------------------



      SUBROUTINE LYMAVG


      INCLUDE 'PARAMETERS.INC'

      INCLUDE 'PLANET.INC'


      COMMON

     &      /BLOCK6/  MCROSS(MB)

     &      /BLOCK12/ CROSS(NWAVE,MB)

     &      /BLOCK14/ MTAU(MB)

     &      /BLOCK16/ COSSZA(NTRAP)

     &      /BLOCK17/ NANGLE(NALT)

     &      /BLOCK21/ CRSO2(11)

     &      /BLOCK24/ TRANLYM(11,NALT)

     &      /BLOCK30/ NPI2

     &      /ONED46/  COLUMN(NTRAP,NALT,MB)



      DIMENSION TAU(NTRAP,11,NALT)



C THIS SUBROUTINE USES DETAILED CROSS-SECTION VALUES OF O2 AT LYMAN ALPHA
C TO CALCULATE THE DIURNAL AVERAGE OF THE TRANSMITANCE IN THE LYMAN ALPHA
C REGION.


C *** NOTE: MTAU(1) = O2 AND MTAU(2) = O3 ***

C COMPUTE OPTICAL DEPTHS FOR SZA < 90 DEGREES


      DO K = 1 , NALT
        DO NANG = 1 , NPI2
          COL1 = COLUMN(NANG,K,MTAU(1))
          COL2 = COLUMN(NANG,K,MTAU(2))
          DO LALPHA = 1 , 11
            TAU(NANG,LALPHA,K) = COL2*CROSS(LYMAN,MCROSS(2)) +
     &                           COL1*CRSO2(LALPHA)
          ENDDO
        ENDDO
      ENDDO
 
      IF( ISPHERE .EQ. 1 ) THEN
        DO K = 1 , NALT
          N1 = NPI2 + 1
          N2 = NANGLE(K)
          DO NANG = N1 , N2
            COL1 = COLUMN(NANG,K,MTAU(1))
            COL2 = COLUMN(NANG,K,MTAU(2))
            DO LALPHA = 1 , 11
              TAU(NANG,LALPHA,K) = COL2*CROSS(LYMAN,MCROSS(2)) +
     &                             COL1*CRSO2(LALPHA)
            ENDDO
          ENDDO
        ENDDO
      ENDIF   !  END RAY-TRACE COMPUTATIONS

C############################################################################

C COMPUTE DIURNAL AVERAGE USING THE TRAPEZOIDAL RULE

      DO K = 1 , NALT
        IF( ISPHERE .EQ. 1) THEN
          NEND = NANGLE(K) - 1
        ELSE
          NEND = NPI2 - 1
        ENDIF

        DO LALPHA = 1 , 11
          SUM = 0.0D0
          DO NANG = 1 , NEND
            SUM = SUM + 0.5D0*(DEXP(-TAU(NANG,LALPHA,K)) +
     &                         DEXP(-TAU(NANG+1,LALPHA,K)))
          ENDDO

          IF( NEND .EQ. 0 ) THEN  ! SPECIAL CASE
            SUM = 0.5D0*DEXP(-TAU(1,LALPHA,K))
          ENDIF

          TRANLYM(LALPHA,K) = SUM/FLOAT(NTRAP-1)
        ENDDO
      ENDDO

      RETURN
      END
