Skip to content
Snippets Groups Projects
ini_lima_cold_mixed.F90 73.8 KiB
Newer Older
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MAX=",E13.6)') &
!!$                                                    XACCLBDAS_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MAX=",E13.6)') &
!!$                                                    XACCLBDAR_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MIN=",E13.6)') &
!!$                                                    XACCLBDAS_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MIN=",E13.6)') &
!!$                                                    XACCLBDAR_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCSS) ) THEN")')
!!$  DO J1 = 1 , NACCLBDAS
!!$    DO J2 = 1 , NACCLBDAR
!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_RACCSS(",I3,",",I3,") = ",E13.6)') &
!!$                        J1,J2,XKER_RACCSS(J1,J2)
!!$    END DO
!!$  END DO
!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCS ) ) THEN")')
!!$  DO J1 = 1 , NACCLBDAS
!!$    DO J2 = 1 , NACCLBDAR
!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_RACCS (",I3,",",I3,") = ",E13.6)') &
!!$                        J1,J2,XKER_RACCS (J1,J2)
!!$    END DO
!!$  END DO
!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SACCRG) ) THEN")')
!!$  DO J1 = 1 , NACCLBDAR
!!$    DO J2 = 1 , NACCLBDAS
!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_SACCRG(",I3,",",I3,") = ",E13.6)') &
!!$                        J1,J2,XKER_SACCRG(J1,J2)
!!$    END DO
!!$  END DO
!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
  CALL LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                        &
                             PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, &
                             PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,        &
                             PFDINFTY,XKER_RACCSS,XKER_RACCS,XKER_SACCRG                     )
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCSS")')
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCS ")')
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SACCRG")')
!*       7.2N  Computations of the tabulated normalized kernels Snow Self Collection !! 
!
!
!if (NMOM_S.GE.2) then
  XCOLSS   = 0.1 ! Collection efficiency of S+S
  XCOLEXSS = 0.1  ! Temperature factor of the S+S collection efficiency
  XFNSSCS = (XPI/4.0)*XCOLSS*(ZRHO00**XCEXVT)/2.0       
!
  XLBNSSCS1   = 2.0*MOMG(XALPHAS,XNUS,2.)                        
  XLBNSSCS2   = 2.0*MOMG(XALPHAS,XNUS,1.)**2  
!
!*       7.2N.1  Defining the ranges for the computation of the kernels
!
! Notice: One magnitude of lambda discretized over 10 points for snow
!
NSCLBDAS = 80
XSCLBDAS_MIN = 1.0E0*XTRANS_MP_GAMMAS  ! Minimal value of Lbda_s to tabulate XKER_RSCS
XSCLBDAS_MAX = 5.0E10*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_RSCS
ZRATE = LOG(XSCLBDAS_MAX/XSCLBDAS_MIN)/FLOAT(NSCLBDAS-1)
XSCINTP1S = 1.0 / ZRATE
XSCINTP2S = 1.0 - LOG( XSCLBDAS_MIN ) / ZRATE
!
!
  IND      = 50    ! Interval number, collection efficiency and infinite diameter
  ZESS     = 1.0   ! factor used to integrate the dimensional distributions when
  ZFDINFTY = 20.0  ! computing the kernels XKER_SSCSS
!
  ALLOCATE( XKER_N_SSCS(NSCLBDAS,NSCLBDAS) )
!
  CALL NZCOLX  ( IND, XALPHAS, XNUS, XALPHAS, XNUS,                          & 
               ZESS, XCS, XDS, XFVELOS, XCS, XDS, XFVELOS,                   & 
               XSCLBDAS_MAX, XSCLBDAS_MAX, XSCLBDAS_MIN, XSCLBDAS_MIN, & 
               ZFDINFTY, XKER_N_SSCS                                      ) 
!
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SSCS  KERNELS ***")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
!!$  WRITE(UNIT=ILUOUT0,FMT='("KSCLBDAS=",I3)') NSCLBDAS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PESS=",E13.6)') ZESS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MAX=",E13.6)') &
!!$                                                  XSCLBDAS_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MIN=",E13.6)') &
!!$                                                  XSCLBDAS_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SSCS ) ) THEN")')           
!!$  DO J1 = 1 , NSCLBDAS                                                     
!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SSCS (",I3,",",I3,") = ",E13.6)') & 
!!$                      J1,J1,XKER_N_SSCS (J1,J1)                          
!!$  END DO                                                                    
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')  
!
!*       7.2N2    Constants for the 'spontaneous' break-up
!
  XACCS1=MOMG(XALPHAS,XNUS,XBS)
  XSPONBUDS1 = 2.5E-3
  XSPONBUDS2 = 3.5E-3
  XSPONBUDS3 = 4.5E-3
  XSPONCOEFS2 = ((XSPONBUDS3/XSPONBUDS2)**3 - 1.0)/(XSPONBUDS3-XSPONBUDS1)**2
!
!end if
!
!*       7.3    Constant for the conversion-melting rate
!
XFSCVMG = 2.0
!
!!$GFLAG = .TRUE.
!!$IF (GFLAG) THEN
!!$  WRITE(UNIT=ILUOUT0,FMT='("      conversion-melting of the aggregates")')
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Conv. factor XFSCVMG=",E13.6)') XFSCVMG
!!$END IF
!
!
!*       7.4 Constants for Ice-Ice collision process (CIBU)
!
XDCSLIM_CIBU_MIN = 2.0E-4 ! D_cs lim min
XDCSLIM_CIBU_MAX = 1.0E-3 ! D_cs lim max
XDCGLIM_CIBU_MIN = 2.0E-3 ! D_cg lim min
!
!!$GFLAG = .TRUE.
!!$IF (GFLAG) THEN
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Ice-ice collision process")')
!!$  WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim min-max =",E13.6)') XDCSLIM_CIBU_MIN,XDCSLIM_CIBU_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='(" D_cg^lim min     =",E13.6)') XDCGLIM_CIBU_MIN
!!$END IF
!
NGAMINC = 80
!
!Note : Boundaries are rounded at 5.0 or 1.0 (down for Bound_min and up for Bound_max)
XGAMINC_BOUND_CIBU_SMIN = 1.0E-5 * XTRANS_MP_GAMMAS**XALPHAS ! Minimal value of (Lbda_s * D_cs^lim)**alpha) 0.2 mm
XGAMINC_BOUND_CIBU_SMAX = 5.0E+2 * XTRANS_MP_GAMMAS**XALPHAS ! Maximal value of (Lbda_s * D_cs^lim)**alpha) 1 mm
ZRATE_S = EXP(LOG(XGAMINC_BOUND_CIBU_SMAX/XGAMINC_BOUND_CIBU_SMIN)/FLOAT(NGAMINC-1))
!
XGAMINC_BOUND_CIBU_GMIN = 1.0E-1 ! Minimal value of (Lbda_g * D_cg^lim)**alpha) 2 mm
XGAMINC_BOUND_CIBU_GMAX = 5.0E+1 ! Maximal value of (Lbda_g * D_cg^lim)**alpha) 2 mm
ZRATE_G = EXP(LOG(XGAMINC_BOUND_CIBU_GMAX/XGAMINC_BOUND_CIBU_GMIN)/FLOAT(NGAMINC-1))
!
ALLOCATE( XGAMINC_CIBU_S(4,NGAMINC) )
ALLOCATE( XGAMINC_CIBU_G(2,NGAMINC) )
!
DO J1 = 1, NGAMINC
  ZBOUND_CIBU_SMIN = XGAMINC_BOUND_CIBU_SMIN * ZRATE_S**(J1-1)
  ZBOUND_CIBU_GMIN = XGAMINC_BOUND_CIBU_GMIN * ZRATE_G**(J1-1)
!
! For ZNI_CIBU
  XGAMINC_CIBU_S(1,J1) = GAMMA_INC(XNUS,ZBOUND_CIBU_SMIN)
  XGAMINC_CIBU_S(2,J1) = GAMMA_INC(XNUS+(XDS/XALPHAS),ZBOUND_CIBU_SMIN)
!
  XGAMINC_CIBU_G(1,J1) = GAMMA_INC(XNUG+((2.0+XDG)/XALPHAG),ZBOUND_CIBU_GMIN)
  XGAMINC_CIBU_G(2,J1) = GAMMA_INC(XNUG+(2.0/XALPHAG),ZBOUND_CIBU_GMIN)
!
! For ZRI_CIBU
  XGAMINC_CIBU_S(3,J1) = GAMMA_INC(XNUS+(XBS/XALPHAS),ZBOUND_CIBU_SMIN)
  XGAMINC_CIBU_S(4,J1) = GAMMA_INC(XNUS+((XBS+XDS)/XALPHAS),ZBOUND_CIBU_SMIN)
END DO
!
XCIBUINTP_S = XALPHAS / LOG(ZRATE_S)
XCIBUINTP1_S = 1.0 + XCIBUINTP_S * LOG(XDCSLIM_CIBU_MIN/(XGAMINC_BOUND_CIBU_SMIN)**(1.0/XALPHAS))
XCIBUINTP2_S = 1.0 + XCIBUINTP_S * LOG(XDCSLIM_CIBU_MAX/(XGAMINC_BOUND_CIBU_SMIN)**(1.0/XALPHAS))
!
XCIBUINTP_G = XALPHAG / LOG(ZRATE_G)
XCIBUINTP1_G = 1.0 + XCIBUINTP_G * LOG(XDCGLIM_CIBU_MIN/(XGAMINC_BOUND_CIBU_GMIN)**(1.0/XALPHAG))
!
! For ZNI_CIBU
XFACTOR_CIBU_NI = (XPI / 4.0) * (ZRHO00**XCEXVT)
XMOMGG_CIBU_1 = MOMG(XALPHAG,XNUG,2.0+XDG)
XMOMGG_CIBU_2 = MOMG(XALPHAG,XNUG,2.0)
XMOMGS_CIBU_1 = MOMG(XALPHAS,XNUS,XDS)
!
! For ZRI_CIBU
XFACTOR_CIBU_RI = XAS * (XPI / 4.0) * (ZRHO00**XCEXVT)
XMOMGS_CIBU_2 = MOMG(XALPHAS,XNUS,XBS)
XMOMGS_CIBU_3 = MOMG(XALPHAS,XNUS,XBS+XDS)
!
!
!*       7.5 Constants for raindrop shattering by freezing process (RDSF)
!
XDCRLIM_RDSF_MIN = 0.1E-3 ! D_cr lim min
!
!!$GFLAG = .TRUE.
!!$IF (GFLAG) THEN
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Ice-rain collision process")')
!!$  WRITE(UNIT=ILUOUT0,FMT='(" D_cr^lim min     =",E13.6)') XDCRLIM_RDSF_MIN
!!$END IF
!
NGAMINC = 80
!
XGAMINC_BOUND_RDSF_RMIN = 1.0E-5    ! Minimal value of (Lbda_r * D_cr^lim)**alpha) 0.1 mm
XGAMINC_BOUND_RDSF_RMAX = 5.0E-3    ! Maximal value of (Lbda_r * D_cr^lim)**alpha) 1 mm
ZRATE_R = EXP(LOG(XGAMINC_BOUND_RDSF_RMAX/XGAMINC_BOUND_RDSF_RMIN)/FLOAT(NGAMINC-1))
!
ALLOCATE( XGAMINC_RDSF_R(NGAMINC) )
!
DO J1 = 1, NGAMINC
  ZBOUND_RDSF_RMIN = XGAMINC_BOUND_RDSF_RMIN * ZRATE_R**(J1-1)
!
! For ZNI_RDSF
  XGAMINC_RDSF_R(J1) = GAMMA_INC(XNUR+((6.0+XDR)/XALPHAR),ZBOUND_RDSF_RMIN)
END DO
!
XRDSFINTP_R = XALPHAR / LOG(ZRATE_R)
XRDSFINTP1_R = 1.0 + XRDSFINTP_R * LOG( XDCRLIM_RDSF_MIN/(XGAMINC_BOUND_RDSF_RMIN)**(1.0/XALPHAR) )
!
! For ZNI_RDSF
ZKHI_LWM = 2.5E13 ! Coeff. in Lawson-Woods-Morrison for the number of splinters
                  ! N_DF = XKHI_LWM * D_R**4
XFACTOR_RDSF_NI = ZKHI_LWM * (XPI / 4.0) * XCR * (ZRHO00**XCEXVT)
XMOMGR_RDSF = MOMG(XALPHAR,XNUR,6.0+XDR)
!
!-------------------------------------------------------------------------------
!
!
!*       8.     CONSTANTS FOR THE FAST COLD PROCESSES FOR THE GRAUPELN
!   	        --------------------------------------------------------
!
!
!*       8.1    Constants for the rain contact freezing
!
XCOLIR    = 1.0
!
! values of these coeficients differ from the single-momemt rain_ice case
!
XEXRCFRI  = -XDR-5.0
XRCFRI    = ((XPI**2)/24.0)*XRHOLW*XCOLIR*XCR*(ZRHO00**XCEXVT)     &
                                                     *MOMG(XALPHAR,XNUR,XDR+5.0)
XEXICFRR  = -XDR-2.0
XICFRR    = (XPI/4.0)*XCOLIR*XCR*(ZRHO00**XCEXVT)                  &
                                                     *MOMG(XALPHAR,XNUR,XDR+2.0)
!
!!$GFLAG = .TRUE.
!!$IF (GFLAG) THEN
!!$  WRITE(UNIT=ILUOUT0,FMT='("      rain contact freezing")')
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency          XCOLIR=",E13.6)') XCOLIR
!!$END IF
!
!
!*       8.2    Constants for the dry growth of the graupeln
!
!*       8.2.1  Constants for the cloud droplet collection by the graupeln
!               and for the Hallett-Mossop process
!
XCOLCG  = 0.6  !  Estimated from Cober and List (1993)
XFCDRYG = (XPI/4.0)*XCOLCG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0)
!
XHM_COLLCG= 0.9   ! Collision efficiency graupel/droplet (with Dc>25 microns)
XHM_FACTG = XHM_YIELD*(XHM_COLLCG/XCOLCG)
!
!*       8.2.2  Constants for the cloud ice collection by the graupeln
!
XCOLIG    = 0.25 ! Collection efficiency of I+G
XCOLEXIG  = 0.05 ! Temperature factor of the I+G collection efficiency
XCOLIG   = 0.01 ! Collection efficiency of I+G
XCOLEXIG = 0.1  ! Temperature factor of the I+G collection efficiency
!!$WRITE (ILUOUT0, FMT=*) ' NEW Constants for the cloud ice collection by the graupeln'
!!$WRITE (ILUOUT0, FMT=*) ' XCOLIG, XCOLEXIG  = ',XCOLIG,XCOLEXIG
XFIDRYG = (XPI/4.0)*XCOLIG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0)
!!$GFLAG = .TRUE.
!!$IF (GFLAG) THEN
!!$  WRITE(UNIT=ILUOUT0,FMT='("      cloud ice collection by the graupeln")')
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLIG=",E13.6)') XCOLIG
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor     XCOLEXIG=",E13.6)') XCOLEXIG
!!$END IF
!
!*       8.2.3  Constants for the aggregate collection by the graupeln
!
XCOLSG    = 0.25 ! Collection efficiency of S+G
XCOLEXSG  = 0.05 ! Temperature factor of the S+G collection efficiency
XCOLSG   = 0.01 ! Collection efficiency of S+G
XCOLEXSG = 0.1  ! Temperature factor of the S+G collection efficiency
!!$WRITE (ILUOUT0, FMT=*) ' NEW Constants for the aggregate collection by the graupeln'
!!$WRITE (ILUOUT0, FMT=*) ' XCOLSG, XCOLEXSG  = ',XCOLSG,XCOLEXSG
XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XAS*(ZRHO00**XCEXVT)
XFNSDRYG= (XPI/4.0)*XCOLSG*(ZRHO00**XCEXVT)
XLBNSDRYG1  =    MOMG(XALPHAG,XNUG,2.)                        
XLBNSDRYG2  = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,1.) 
XLBNSDRYG3  =                          MOMG(XALPHAS,XNUS,2.)
XLBSDRYG1   =    MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAS,XNUS,XBS)
XLBSDRYG2   = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
XLBSDRYG3   =                          MOMG(XALPHAS,XNUS,XBS+2.)
!
!!$GFLAG = .TRUE.
!!$IF (GFLAG) THEN
!!$  WRITE(UNIT=ILUOUT0,FMT='("      aggregate collection by the graupeln")')
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLSG=",E13.6)') XCOLSG
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor     XCOLEXSG=",E13.6)') XCOLEXSG
!!$END IF
!
!*       8.2.4  Constants for the raindrop collection by the graupeln
!
XFRDRYG = XNR*(XPI/4.0)*XAR*(ZRHO00**XCEXVT)
XFNRDRYG= (XPI/4.0)*(ZRHO00**XCEXVT)
XLBRDRYG1   =    MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAR,XNUR,XBR)
XLBRDRYG2   = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAR,XNUR,XBR+1.)
XLBRDRYG3   =                          MOMG(XALPHAR,XNUR,XBR+2.)
XLBNRDRYG1  =    MOMG(XALPHAG,XNUG,2.)                      
XLBNRDRYG2  = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAR,XNUR,1.) 
XLBNRDRYG3  =                          MOMG(XALPHAR,XNUR,2.)
!
! Notice: One magnitude of lambda discretized over 10 points
!
NDRYLBDAR = 40
XDRYLBDAR_MIN = 1.0E3 ! Minimal value of Lbda_r to tabulate XKER_RDRYG
XDRYLBDAR_MAX = 1.0E7 ! Maximal value of Lbda_r to tabulate XKER_RDRYG
ZRATE = LOG(XDRYLBDAR_MAX/XDRYLBDAR_MIN)/REAL(NDRYLBDAR-1)
XDRYINTP1R = 1.0 / ZRATE
XDRYINTP2R = 1.0 - LOG( XDRYLBDAR_MIN ) / ZRATE
NDRYLBDAS = 80
XDRYLBDAS_MIN = 5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_SDRYG
XDRYLBDAS_MAX = 5.0E8*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_SDRYG
ZRATE = LOG(XDRYLBDAS_MAX/XDRYLBDAS_MIN)/REAL(NDRYLBDAS-1)
XDRYINTP1S = 1.0 / ZRATE
XDRYINTP2S = 1.0 - LOG( XDRYLBDAS_MIN ) / ZRATE
NDRYLBDAG = 40
XDRYLBDAG_MIN = 1.0E3 ! Min value of Lbda_g to tabulate XKER_SDRYG,XKER_RDRYG
XDRYLBDAG_MAX = 1.0E7 ! Max value of Lbda_g to tabulate XKER_SDRYG,XKER_RDRYG
ZRATE = LOG(XDRYLBDAG_MAX/XDRYLBDAG_MIN)/REAL(NDRYLBDAG-1)
XDRYINTP1G = 1.0 / ZRATE
XDRYINTP2G = 1.0 - LOG( XDRYLBDAG_MIN ) / ZRATE
!
!*       8.2.5  Computations of the tabulated normalized kernels
!
IND      = 50    ! Interval number, collection efficiency and infinite diameter
ZEGS     = 1.0   ! factor used to integrate the dimensional distributions when
ZFDINFTY = 20.0  ! computing the kernels XKER_SDRYG
!
ALLOCATE( XKER_SDRYG(NDRYLBDAG,NDRYLBDAS) )
!if (NMOM_S.GE.2) then
  ALLOCATE( XKER_N_SDRYG(NDRYLBDAG,NDRYLBDAS) )
  CALL NZCOLX  ( IND, XALPHAG, XNUG, XALPHAS, XNUS,                         & 
              ZEGS, XCG, XDG, 0., XCS, XDS, XFVELOS,                        & 
              XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & 
              ZFDINFTY, XKER_N_SDRYG                                      ) 
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SDRYG) ) THEN")')          
!!$  DO J1 = 1 , NDRYLBDAG                                                    
!!$    DO J2 = 1 , NDRYLBDAS                                                  
!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SDRYG(",I3,",",I3,") = ",E13.6)') &
!!$                      J1,J2,XKER_N_SDRYG(J1,J2)                          
!!$    END DO                                                                
!!$  END DO                                                                   
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")') 
!end if
!
CALL LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                                    &
                           PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
                           PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN,    &
                           PFDINFTY                                                    )
IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. &
    (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG)                               .OR. &
    (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
    (PEGS/=ZEGS) .OR. (PBS/=XBS)                                       .OR. &
    (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=XFVELOS) .OR. &
    (PDRYLBDAG_MAX/=XDRYLBDAG_MAX) .OR. (PDRYLBDAS_MAX/=XDRYLBDAS_MAX) .OR. &
    (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=XDRYLBDAS_MIN) .OR. &
    (PFDINFTY/=ZFDINFTY)                                               ) THEN
  CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS,                          &
                ZEGS, XBS, XCG, XDG, 0., XCS, XDS, XFVELOS,                 &
                XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, &
                ZFDINFTY, XKER_SDRYG                                        )
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SDRYG KERNELS ****")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
!!$  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG
!!$  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAS=",I3)') NDRYLBDAS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PEGS=",E13.6)') ZEGS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') &
!!$                                                    XDRYLBDAG_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MAX=",E13.6)') &
!!$                                                    XDRYLBDAS_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') &
!!$                                                    XDRYLBDAG_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MIN=",E13.6)') &
!!$                                                    XDRYLBDAS_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SDRYG) ) THEN")')
!!$  DO J1 = 1 , NDRYLBDAG
!!$    DO J2 = 1 , NDRYLBDAS
!!$    WRITE(UNIT=ILUOUT0,FMT='("PKER_SDRYG(",I3,",",I3,") = ",E13.6)') &
!!$                        J1,J2,XKER_SDRYG(J1,J2)
!!$    END DO
!!$  END DO
!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
  CALL LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                                    &
                             PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
                             PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN,    &
                             PFDINFTY,XKER_SDRYG                                         )
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SDRYG")')
END IF
!
!
IND      = 50    ! Number of interval used to integrate the dimensional
ZEGR     = 1.0   ! distributions when computing the kernel XKER_RDRYG
ZFDINFTY = 20.0
!
ALLOCATE( XKER_RDRYG(NDRYLBDAG,NDRYLBDAR) )
!if ( NMOM_R.GE.2 ) then
  ALLOCATE( XKER_N_RDRYG(NDRYLBDAG,NDRYLBDAR) ) 
  CALL NZCOLX  ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          & 
               ZEGR, XCG, XDG, 0., XCR, XDR, 0.,                            & 
               XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, &
               ZFDINFTY, XKER_N_RDRYG                                      )
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RDRYG) ) THEN")')          
!!$  DO J1 = 1 , NDRYLBDAG                                                    
!!$    DO J2 = 1 , NDRYLBDAR                                                  
!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_RDRYG(",I3,",",I3,") = ",E13.6)') &
!!$                      J1,J2,XKER_N_RDRYG(J1,J2)                          
!!$    END DO                                                                
!!$  END DO                                                                   
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")') 
!
CALL LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                                 &
                           PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
                           PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, &
                           PFDINFTY                                                 )
IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. &
    (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG)                               .OR. &
    (PALPHAR/=XALPHAR) .OR. (PNUR/=XNUR)                               .OR. &
    (PEGR/=ZEGR) .OR. (PBR/=XBR)                                       .OR. &
    (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCR/=XCR) .OR. (PDR/=XDR)         .OR. &
    (PDRYLBDAG_MAX/=XDRYLBDAG_MAX) .OR. (PDRYLBDAR_MAX/=XDRYLBDAR_MAX) .OR. &
    (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAR_MIN/=XDRYLBDAR_MIN) .OR. &
    (PFDINFTY/=ZFDINFTY)                                               ) THEN
  CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAR, XNUR,                          &
                ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0.,                      &
                XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, &
                ZFDINFTY, XKER_RDRYG                                        )
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RDRYG KERNELS ****")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
!!$  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG
!!$  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAR=",I3)') NDRYLBDAR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PEGR=",E13.6)') ZEGR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') &
!!$                                                    XDRYLBDAG_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MAX=",E13.6)') &
!!$                                                    XDRYLBDAR_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') &
!!$                                                    XDRYLBDAG_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MIN=",E13.6)') &
!!$                                                    XDRYLBDAR_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RDRYG) ) THEN")')
!!$  DO J1 = 1 , NDRYLBDAG
!!$    DO J2 = 1 , NDRYLBDAR
!!$    WRITE(UNIT=ILUOUT0,FMT='("PKER_RDRYG(",I3,",",I3,") = ",E13.6)') &
!!$                        J1,J2,XKER_RDRYG(J1,J2)
!!$    END DO
!!$  END DO
!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
  ELSE
  CALL LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                                 &
                             PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
                             PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, &
                             PFDINFTY,XKER_RDRYG                                      )
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RDRYG")')
END IF
!  
!-------------------------------------------------------------------------------
!
!*       9.     CONSTANTS FOR THE FAST COLD PROCESSES FOR THE HAILSTONES
!               --------------------------------------------------------
!
!*       9.2    Constants for the wet growth of the hailstones
!
!
!*       9.2.1  Constant for the cloud droplet and cloud ice collection
!               by the hailstones
!
XFWETH = (XPI/4.0)*XCH*(ZRHO00**XCEXVT)*MOMG(XALPHAH,XNUH,XDH+2.0)
!
!*       9.2.2  Constants for the aggregate collection by the hailstones
!
XFSWETH = XNS*(XPI/4.0)*XAS*(ZRHO00**XCEXVT)
XFNSWETH= (XPI/4.0)*(ZRHO00**XCEXVT)
!
XLBSWETH1   =    MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAS,XNUS,XBS)
XLBSWETH2   = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
XLBSWETH3   =                          MOMG(XALPHAS,XNUS,XBS+2.)
XLBNSWETH1  =    MOMG(XALPHAH,XNUH,2.)                       
XLBNSWETH2  = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAS,XNUS,1.) 
XLBNSWETH3  =                          MOMG(XALPHAS,XNUS,2.)
!
!*       9.2.3  Constants for the graupel collection by the hailstones
!
XFGWETH = XNG*(XPI/4.0)*XAG*(ZRHO00**XCEXVT)
XFNGWETH= (XPI/4.0)*(ZRHO00**XCEXVT)
!
XLBGWETH1   =    MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAG,XNUG,XBG)
XLBGWETH2   = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAG,XNUG,XBG+1.)
XLBGWETH3   =                          MOMG(XALPHAG,XNUG,XBG+2.)
XLBNGWETH1  =    MOMG(XALPHAH,XNUH,2.)                      
XLBNGWETH2  = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAG,XNUG,1.)
XLBNGWETH3  =                          MOMG(XALPHAG,XNUG,2.)
!
! Notice: One magnitude of lambda discretized over 10 points
!
NWETLBDAS = 80
XWETLBDAS_MIN = 5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_SWETH
XWETLBDAS_MAX = 5.0E8*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_SWETH
ZRATE = LOG(XWETLBDAS_MAX/XWETLBDAS_MIN)/REAL(NWETLBDAS-1)
XWETINTP1S = 1.0 / ZRATE
XWETINTP2S = 1.0 - LOG( XWETLBDAS_MIN ) / ZRATE
NWETLBDAG = 40
XWETLBDAG_MIN = 1.0E3 ! Min value of Lbda_g to tabulate XKER_GWETH
XWETLBDAG_MAX = 1.0E7 ! Max value of Lbda_g to tabulate XKER_GWETH
ZRATE = LOG(XWETLBDAG_MAX/XWETLBDAG_MIN)/REAL(NWETLBDAG-1)
XWETINTP1G = 1.0 / ZRATE
XWETINTP2G = 1.0 - LOG( XWETLBDAG_MIN ) / ZRATE
NWETLBDAH = 40
XWETLBDAH_MIN = 1.0E3 ! Min value of Lbda_h to tabulate XKER_SWETH,XKER_GWETH
XWETLBDAH_MAX = 1.0E7 ! Max value of Lbda_h to tabulate XKER_SWETH,XKER_GWETH
ZRATE = LOG(XWETLBDAH_MAX/XWETLBDAH_MIN)/REAL(NWETLBDAH-1)
XWETINTP1H = 1.0 / ZRATE
XWETINTP2H = 1.0 - LOG( XWETLBDAH_MIN ) / ZRATE
!
!*       9.2.4  Computations of the tabulated normalized kernels
!
IND      = 50    ! Interval number, collection efficiency and infinite diameter
ZEHS     = 1.0   ! factor used to integrate the dimensional distributions when
ZFDINFTY = 20.0  ! computing the kernels XKER_SWETH
!
!if ( NMOM_S.GE.2 ) then
  IF( .NOT.ALLOCATED(XKER_N_SWETH) ) ALLOCATE( XKER_N_SWETH(NWETLBDAH,NWETLBDAS) )
  CALL NZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS,                          &  
              ZEHS, XCH, XDH, 0., XCS, XDS, XFVELOS,                       &  ! 
              XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, &  ! 
              ZFDINFTY, XKER_N_SWETH                                        )
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SWETH) ) THEN")')          
!!$  DO J1 = 1 , NWETLBDAH                                                    
!!$    DO J2 = 1 , NWETLBDAS                                                  
!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SWETH(",I3,",",I3,") = ",E13.6)') &
!!$                      J1,J2,XKER_N_SWETH(J1,J2)                          
!!$    END DO                                                                
!!$  END DO                                                                   
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")') 
IF( .NOT.ALLOCATED(XKER_SWETH) ) ALLOCATE( XKER_SWETH(NWETLBDAH,NWETLBDAS) )
!
CALL LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                                    &
                           PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, &
                           PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN,    &
                           PFDINFTY                                                    )
IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. &
    (PALPHAH/=XALPHAH) .OR. (PNUH/=XNUH)                               .OR. &
    (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
    (PEHS/=ZEHS) .OR. (PBS/=XBS)                                       .OR. &
    (PCH/=XCH) .OR. (PDH/=XDH) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=XFVELOS) .OR. &
    (PWETLBDAH_MAX/=XWETLBDAH_MAX) .OR. (PWETLBDAS_MAX/=XWETLBDAS_MAX) .OR. &
    (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAS_MIN/=XWETLBDAS_MIN) .OR. &
    (PFDINFTY/=ZFDINFTY)                                               ) THEN
  CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS,                          &
                ZEHS, XBS, XCH, XDH, 0., XCS, XDS, XFVELOS,                 &
                XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, &
                ZFDINFTY, XKER_SWETH                                        )
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SWETH KERNELS ****")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
!!$  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH
!!$  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAS=",I3)') NWETLBDAS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PEHS=",E13.6)') ZEHS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') &
!!$                                                    XWETLBDAH_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MAX=",E13.6)') &
!!$                                                    XWETLBDAS_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') &
!!$                                                    XWETLBDAH_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MIN=",E13.6)') &
!!$                                                    XWETLBDAS_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SWETH) ) THEN")')
!!$  DO J1 = 1 , NWETLBDAH
!!$    DO J2 = 1 , NWETLBDAS
!!$    WRITE(UNIT=ILUOUT0,FMT='("PKER_SWETH(",I3,",",I3,") = ",E13.6)') &
!!$                        J1,J2,XKER_SWETH(J1,J2)
!!$    END DO
!!$  END DO
!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
  CALL LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                                    &
                             PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, &
                             PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN,    &
                             PFDINFTY,XKER_SWETH                                         )
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SWETH")')
END IF
!
!
IND      = 50    ! Number of interval used to integrate the dimensional
ZEHG     = 1.0   ! distributions when computing the kernel XKER_GWETH
ZFDINFTY = 20.0
!
!if ( NMOM_G.GE.2 ) then
  IF( .NOT.ALLOCATED(XKER_N_GWETH) ) ALLOCATE( XKER_N_GWETH(NWETLBDAH,NWETLBDAG) )
  CALL NZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG,                          & 
              ZEHG, XCH, XDH, 0., XCG, XDG, 0.,                            & 
              XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & 
              ZFDINFTY, XKER_N_GWETH                                      )
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_GWETH) ) THEN")')          
!!$  DO J1 = 1 , NWETLBDAH                                                    
!!$    DO J2 = 1 , NWETLBDAG                                                  
!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_GWETH(",I3,",",I3,") = ",E13.6)') &
!!$                      J1,J2,XKER_N_GWETH(J1,J2)                          
!!$    END DO                                                                
!!$  END DO                                                                   
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")') 
IF( .NOT.ALLOCATED(XKER_GWETH) ) ALLOCATE( XKER_GWETH(NWETLBDAH,NWETLBDAG) )
!
CALL LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                                 &
                           PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
                           PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, &
                           PFDINFTY                                                 )
IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. &
    (PALPHAH/=XALPHAH) .OR. (PNUH/=XNUH)                               .OR. &
    (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG)                               .OR. &
    (PEHG/=ZEHG) .OR. (PBG/=XBG)                                       .OR. &
    (PCH/=XCH) .OR. (PDH/=XDH) .OR. (PCG/=XCG) .OR. (PDG/=XDG)         .OR. &
    (PWETLBDAH_MAX/=XWETLBDAH_MAX) .OR. (PWETLBDAG_MAX/=XWETLBDAG_MAX) .OR. &
    (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAG_MIN/=XWETLBDAG_MIN) .OR. &
    (PFDINFTY/=ZFDINFTY)                                               ) THEN
  CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG,                          &
                ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0.,                      &
                XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, &
                ZFDINFTY, XKER_GWETH                                        )
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF GWETH KERNELS ****")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
!!$  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH
!!$  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAG=",I3)') NWETLBDAG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH
!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PEHG=",E13.6)') ZEHG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PBG=",E13.6)') XBG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH
!!$  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') &
!!$                                                    XWETLBDAH_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MAX=",E13.6)') &
!!$                                                    XWETLBDAG_MAX
!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') &
!!$                                                    XWETLBDAH_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MIN=",E13.6)') &
!!$                                                    XWETLBDAG_MIN
!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_GWETH) ) THEN")')
!!$  DO J1 = 1 , NWETLBDAH
!!$    DO J2 = 1 , NWETLBDAG
!!$    WRITE(UNIT=ILUOUT0,FMT='("PKER_GWETH(",I3,",",I3,") = ",E13.6)') &
!!$                        J1,J2,XKER_GWETH(J1,J2)
!!$    END DO
!!$  END DO
!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
  ELSE
  CALL LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                                 &
                             PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
                             PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, &
                             PFDINFTY,XKER_GWETH                                      )
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_GWETH")')
END IF
!
!
!
!-------------------------------------------------------------------------------
!
!*      10.     SET-UP RADIATIVE PARAMETERS
!   	        ---------------------------
!
!
! R_eff_i = XFREFFI * (rho*r_i/N_i)**(1/3)
!
XFREFFI = 0.5 * ZGAMI(8) * (1.0/XLBI)**XLBEXI
!  
!-------------------------------------------------------------------------------
!
!
!*      11.     SOME PRINTS FOR CONTROL
!   	        -----------------------
!
!
!!$GFLAG = .TRUE.
!!$IF (GFLAG) THEN
!!$  WRITE(UNIT=ILUOUT0,FMT='(" Summary of the ice particule characteristics")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("      PRISTINE ICE")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
!!$                                                      XAI,XBI
!!$  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
!!$                                                      XC_I,XDI
!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
!!$                                                      XALPHAI,XNUI
!!$  WRITE(UNIT=ILUOUT0,FMT='("              SNOW")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
!!$                                                      XAS,XBS
!!$  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
!!$                                                      XCS,XDS
!!$  WRITE(UNIT=ILUOUT0,FMT='("           concentration:CC=",E13.6," x=",E13.6)') &
!!$                                                      XCCS,XCXS
!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
!!$                                                      XALPHAS,XNUS
!!$  WRITE(UNIT=ILUOUT0,FMT='("            GRAUPEL")')
!!$  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
!!$                                                      XAG,XBG
!!$  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
!!$                                                      XCG,XDG
!!$  WRITE(UNIT=ILUOUT0,FMT='("           concentration:CC=",E13.6," x=",E13.6)') &
!!$                                                      XCCG,XCXG
!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
!!$                                                      XALPHAG,XNUG
!!$END IF
!
!------------------------------------------------------------------------------
!
END SUBROUTINE INI_LIMA_COLD_MIXED