Skip to content
Snippets Groups Projects
ini_lima_cold_mixed.F90 72.6 KiB
Newer Older
  • Learn to ignore specific revisions
  •   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")')
      ELSE
    
      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")')
    END IF
    !
    
    !*       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")')
      ELSE
    
      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='("!")') 
    !end if
    
    !
    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='("!")') 
    !end  if
    
    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")')
      ELSE
    
      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='("!")') 
    !end if
    
    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