*IDENT AJ031297
*/
*/------------------------ Mods to RAD_CTL1 ---------------------------
*/
*DECLARE RAD_CTL1
*I ADB2F404.994
     &        D1(JUSER_MULT1(1)+FIRST_POINT-1),
*/
*/------------------------- Mods to SWRAD3A ---------------------------
*/
*DECLARE SWRAD3A
*/
*/ Add to R2_SWRAD's argument list and declarations:
*/
*I ADB2F404.1507
!                       Additional field
     &   , D_ALB
*/  
*/ Additional comdecks required for cloud albedo calculation:
*/  
*I ADB2F404.1520
!     CLOUD COMDECKS
*CALL CLDCMP3A
*CALL CLDTYP3A
*/   
*I AAJ3F404.39
     &   , D_ALB(NPD_FIELD, NCLDS)
!             CHANGE IN CLOUD ALBEDO FOR INDIRECT FORCING
!
*I SWRAD3A.511
      INTEGER
     &     LL
!             LOOP VARIABLE
      REAL
     &     TAU_C
!             CLOUDY OPTICAL DEPTH
     &   , ALBEDO
!             ALBEDO OF CLOUD
     &   , CHI
!             DROPLET CONCENTRATION MULTIPLIER
*/  
*/ Determine change in rE required for "600/150"-style forcing:
*/
*I SWRAD3A.617
        DO I=NLEVS+1-NCLDS, NLEVS
          DO LL=1, NLIT 
            L=LIST(LL)
!           The optical depth is calculated assuming geometrical
!           optics, taking the density of water as 1.0E+03.
            TAU_C=1.5E+00
     &         *CONDENSED_MIX_RATIO(LL, I, IP_CLCMP_ST_WATER)
     &         *D_MASS(LL, I)/(1.0E+03
     &         *CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER))
!           The albedo is calculated using a simple formula taken
!           from a paper by Bohren; the assymetry is fixed at 0.85.
            ALBEDO=(1.0E+00-0.85E+00)*TAU_C
     &         /(2.0E+00+(1.0E+00-0.85E+00)*TAU_C)
!         
!           Two things can lead to meaningless values of the parameter
!           CHI (assuming 0.0<ALBEDO<1.0): 
!           (1) If D_ALB, when added to ALBEDO, makes the new albedo
!               greater than or equal to 1.0; this leads to CHI<0.0
!               (for new albedo > 1.0) or CHI=infinity (for n.a. = 1.0).
!               In such a case, the cloud is made as bright as possible
!               by assigning the minimum permitted rE.
!           (2) If D_ALB (when negative), when added to ALBEDO, leads to
!               a new albedo which is less than or equal to 0.0. In this 
!               case, the cloud is made as dark as possible, by setting
!               rE to the maximum permitted value.
!         
            IF ( (ALBEDO .GT. 0.0)
     &            .AND.                ! Guard against divide by zero.
     &          ((ALBEDO+D_ALB(L,NLEVS+1-I)) .LT. 1.0) )
     &      THEN
              CHI=(((D_ALB(L,NLEVS+1-I)*(ALBEDO-1.0))
     &           - (ALBEDO*(1.0-ALBEDO)))
     &           / (ALBEDO*(D_ALB(L,NLEVS+1-I)+ALBEDO-1.0)))**3
            ELSE
              CHI=1.0                  ! i.e. do nothing.
            ENDIF
            IF (CHI .GT. 0.0) THEN     ! Apply meaningful result:
              CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER)
     &          =CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER)
     &           /(CHI**(1.0/3.0))
            ENDIF
!           Test for cases (1) and (2) discussed above:
            IF ((ALBEDO+D_ALB(L,NLEVS+1-I)) .GE. 1.0) THEN
              CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER)=3.5E-07
            ENDIF
            IF ((ALBEDO+D_ALB(L,NLEVS+1-I)) .LE. 0.0) THEN
              CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER)=3.7E-05
            ENDIF
!           Apply usual safety limits to rE:
            IF(CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER).GT.3.7E-05)
     &         CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER)=3.7E-05
            IF(CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER).LT.3.5E-07)
     &         CONDENSED_DIM_CHAR(LL, I, IP_CLCMP_ST_WATER)=3.5E-07
          ENDDO
        ENDDO
!
