!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer, 
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms 
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer 
!version 3 or (at your option) any later version that should be found at: 
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html 
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software; 
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), 
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------

      subroutine compute_re(REI, REW,  1
     1                      lwc, iwc, aird,
     2                      cloud, mg, ml, 
     3                      lmx, nk)
C
#include "impnone.cdk"
*
#include "nbsnbl.cdk"
*
      integer lmx, m, nk, ioptrew
      real cloud(lmx,nk), mg(lmx), ml(lmx)
      real lwc(lmx,nk), iwc(lmx,nk)
      real aird(lmx,nk)
      real rew(lmx,nk), rei(lmx,nk)
      parameter(ioptrew=1)
*
*Author 
*          Paul Vaillancourt / J. Li (Oct 2003) 
*
*Revisions
* 001      Jason Cole (April 2006) - Modified to just compute the 
*                    liquid and ice effective radii
*
*Object
*          A new scheme to calculate cloud optical properties, 
*          cloud microphysical input based on cldoptx4
*
*Arguments
*          - Output -
* rei      effective radius for ice clouds
* rew      effective radius for liquid water clouds
*
*          - Input -
* LWC      in-cloud liquid water content in g/m^3
* IWC      in-cloud ice water content in  g/m^3
* CLOUD    layer cloud amount (0. or 1.) (LMX,NK)
* MG       ground cover (ocean=0.0,land <= 1.)  (LMX)
* ML       fraction of lakes (0.-1.) (LMX)
* LMX      number of profiles to compute
* NK       number of layers
*
************************************************************************

C...  AUTOMATIC ARRAYS
*
#include "phy_macros_f.h"

*
      integer i, j, k
      real rec_grav
      real cut, zrieff(lmx,nk), zrieff_vs(lmx,nk), third
      real epsilon,epsilon2,betan,betad
      real rec_cdd(lmx,nk), vs1(lmx,nk)
*
#include "cldop.cdk"
#include "consphy.cdk"
*
      data third/0.3333333/
      save third
      rec_grav=1./grav

!
! COMPUTE THE EFFECTIVE RADIUS FOR LIQUID AND ICE CLOUD PARTICLES
!

      DO K = 1, NK
          DO I =1, LMX
C
C...        EFFECTIVE RADIUS FOR WATER CLOUDS, SET NUMBER OF DROPS PER 
C           CM^3, 100 FOR WATER AND 500 FOR LAND
C
            IF (MG(I) .LE. 0.5 .AND. ML(I) .LE. 0.5)                THEN
c              CDD=50.
              REC_CDD(I,K) =  0.01
           ELSE
c              CDD=250.
              REC_CDD(I,K) =  0.002
            ENDIF
*
C           calcul prealable au vspown de ZRIEFF
C           Units of IWC must be g/m3 
C           for parameterization of REI
*
            ZRIEFF_VS(I,K) = IWC(I,K) !1000. * IWC(I,K) * AIRD(I,K)
          END DO
      END DO
C

      IF (IOPTREW .EQ. 1)                                           THEN
        DO K = 1, NK
          DO I = 1, LMX
             VS1(I,K) = (LWC(I,K)/1000.0) * REC_CDD(I,K) !* AIRD(I,K) * REC_CDD(I,K)
          ENDDO
        ENDDO
        CALL VSPOWN1(REW, VS1, THIRD, NK * LMX)
C
C...    THIS PARAMETERIZATION FROM H. BARKER, BASED ON AIRCRAFT DATA 
C       RANGE 4-17 MICRON IS THAT SPECIFIED BY SLINGO FOR 
C       PARAMETERIZATIONS
C
        DO K = 1, NK
          DO I = 1, LMX
            REW(I,K) = MIN ( MAX (4., 754.6 * REW(I,K)), 17.0)
          END DO
        END DO
      ELSEIF (IOPTREW .EQ. 2)                                       THEN
        DO K = 1, NK
          DO I = 1, LMX
             VS1(I,K) = (1.0 + LWC(I,K)/AIRD(I,K) * 1.E4) 
     1                   * (LWC(I,K)/1000.0) * REC_CDD(I,K) !* AIRD(I,K) * REC_CDD(I,K)
          ENDDO
        ENDDO
        CALL VSPOWN1(REW, VS1,THIRD, NK * LMX) 
C
        DO K = 1, NK
          DO I = 1, LMX
            REW(I,K) =  3000. * REW(I,K)
            REW(I,K) =  MIN (MAX (2.5, REW(I,K)), 50.0)
          END DO
        END DO
      ELSEIF (IOPTREW .EQ. 3)                                       THEN
       DO K = 1, NK 
          DO I = 1, LMX
            EPSILON =  1.0 - 0.7 * EXP(- 0.001 / REC_CDD(I,K))
            EPSILON2 =  EPSILON * EPSILON 
            BETAD =  1.0 + EPSILON2
            BETAN =  BETAD + EPSILON2
!            REW(I,K) = 620.3504944*((BETAN*BETAN*LWC(i,k)*aird(i,k)) 
!     1                  / (BETAD / REC_CDD(I,K)) )**THIRD
            REW(I,K) = 620.3504944*((BETAN*BETAN*LWC(i,k)) 
     1                  / (BETAD / REC_CDD(I,K)) )**THIRD
            REW(I,K) =  MIN (MAX (2.5, REW(I,K)), 17.0)
c            REW(I,K) =  MIN (MAX (4.0, REW(I,K)), 17.0)
          END DO
        END DO
      ENDIF
C
C...        EFFECTIVE RADIUS FOR ICE CLOUDS
C

        CALL VSPOWN1(ZRIEFF, ZRIEFF_VS, 0.216, NK * LMX)
        DO K = 1, NK
          DO I = 1, LMX
            IF (IWC(I,K) .GE. 1.E-9)                              THEN
               ZRIEFF(I,K) = 83.8 * ZRIEFF(I,K)
            ELSE
               ZRIEFF(I,K) = 20.
            ENDIF  
            REI(I,K) =  MAX (MIN (ZRIEFF(I,K), 50.0), 20.0)
         END DO
      END DO

      
      RETURN
      END