diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index 01b8ad3b08d16de5328da5c3af533b5d6c483817..98e480a511cd2e6adf2ede770f03d47d03f7f5aa 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -65,6 +65,8 @@
 !!  05/2010                    Add lidar
 !!!  03/2012     (S. Bielli)    Add NAM_NCOUT for netcdf output
 !!  03/2013     (O.Caumont)    Modif call aircraft_balloon
+!!  03/2013     (C. Augros)    Add variables for radar simulator in NAMELIST:
+!!                             NBAZIM,LSNRT,XSNRMIN
 !
 !
 !-------------------------------------------------------------------------------
@@ -206,9 +208,9 @@ NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS,   &
                    NGPS,XLAT_GPS,XLON_GPS,XZS_GPS,CNAM_GPS,XDIFFORO, &
                    NVERSION_RAD, NCURV_INTERPOL, LCART_RAD, CARF,LREFR,LDNDZ,&
                    XLON_RAD,XLAT_RAD,XALT_RAD,CNAME_RAD,XLAM_RAD,XDT_RAD, &
-                   NDIFF,LATT,NPTS_GAULAG,NPTS_H,NPTS_V,XSTEP_RAD,NBSTEPMAX, &
+                   NDIFF,LATT,NPTS_GAULAG,NPTS_H,NPTS_V,XSTEP_RAD,NBSTEPMAX,NBAZIM, &
                    XGRID,NBELEV,XELEV,NBRAD,LQUAD,LFALL,LWBSCS,LWREFL,&
-                   XREFLMIN,XREFLVDOPMIN,&
+                   XREFLMIN,XREFLVDOPMIN,LSNRT,XSNRMIN,&
                    LLIDAR,CVIEW_LIDAR,XALT_LIDAR,XWVL_LIDAR,&
                    LISOPR,XISOPR,LISOTH,XISOTH, LHU_FLX
 !
@@ -297,6 +299,7 @@ NVERSION_RAD=1
 XSTEP_RAD=XUNDEF
 NCURV_INTERPOL=0
 LCART_RAD=.TRUE.
+NBAZIM=720
 XLON_RAD(:)=XUNDEF
 XLAT_RAD(:)=XUNDEF
 XALT_RAD(:)=XUNDEF
@@ -324,6 +327,8 @@ LWREFL=.FALSE.
 LWBSCS=.FALSE.
 XREFLMIN=-30.
 XREFLVDOPMIN=-990.
+LSNRT=.TRUE.
+XSNRMIN=0
 !
 LDIAG(:)=.FALSE.
 XDIAG(:)=XUNDEF
diff --git a/src/MNH/modd_radar.f90 b/src/MNH/modd_radar.f90
index 65f695f889fb3f00df2bbd33e7ae1a3cba5dfe8d..f66b0d2f6c88547ae6c0b444126ade603677e0fc 100644
--- a/src/MNH/modd_radar.f90
+++ b/src/MNH/modd_radar.f90
@@ -30,7 +30,8 @@
 !!      Original       20/11/03 
 !!      O. Caumont     14/09/09 Removal of XAZIM
 !!      O. Caumont     14/09/09 Possibility to use polar coordinates
-!-------------------------------------------------------------------------------
+!!      C. Augros      2013 Simulator RADAR : add LSNRT XSNRMIN 
+!!-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
@@ -74,6 +75,10 @@ LOGICAL :: LWBSCS ! weighting by backscattering cross sections
 LOGICAL :: LWREFL ! weighting by reflectivities
 REAL :: XREFLMIN ! min val for reflectivities
 REAL :: XREFLVDOPMIN ! min val for Doppler velocities
+LOGICAL :: LSNRT !if .TRUE. the threshold on Z and V is function of SNR
+REAL :: XSNRMIN !SNR threshold under which reflectivity is set to -XUNDEF if (LSNRT=.TRUE.)
+
+
 
 END MODULE MODD_RADAR
 
diff --git a/src/MNH/mode_arf.f90 b/src/MNH/mode_arf.f90
index ee67ca990648874e4fa5406111b518fcf9d99b6e..d3e43ae1842dfc324b7ff65eb57314c6c64ebcaf 100644
--- a/src/MNH/mode_arf.f90
+++ b/src/MNH/mode_arf.f90
@@ -30,6 +30,9 @@
 !!      Pruppacher, H. R. and K. V. Beard, 1970: A wind tunnel investigation of the
 !!  internal circulation and shape of water drops falling at terminal velocity in
 !!  air. Quart. J. Roy. Meteor. Soc., 96, 247-256.
+!!
+!!	Brandes, E. A., G. Zhang, J. Vivekanandan, 2002: Experiments in Rainfall Estimation 
+!!   with a Polarimetric Radar in a Subtropical Environment. J. Appl. Met., 41, 674-685	
 !!    
 !!
 !!    AUTHOR
@@ -39,7 +42,8 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original   08/02/2005    
-!--------------------------------------------------------------------------------
+!!      C. Augros  26/10/2012 : Ajout fonction Brandes et al 2002 
+!!--------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 
@@ -66,12 +70,20 @@ CONTAINS
        ELSE
           ARF=1.
        END IF
-    ELSE
+    ELSE IF (CARF=="AND99") THEN
        IF(PDEQ>=1.1E-3.and.PDEQ<=4.4E-3) THEN
           ARF=1.012-14.4*PDEQ-1.03E4*PDEQ**2
        ELSE
           ARF=MAX(1.0048+.57*PDEQ-2.628E4*PDEQ**2+3.682E6*PDEQ**3-1.677E8*PDEQ**4,.2)
        END IF
+    ELSE IF (CARF=="BR02") THEN
+       IF (PDEQ < 0.5E-3) THEN
+          ARF=1.
+       ELSE        
+          ARF=0.9951+0.02510E3*PDEQ-0.03644E6*PDEQ**2+0.0053030E9*PDEQ**3-0.0002492E12*PDEQ**4
+       ENDIF
+    ELSE IF (CARF=="SPHE") THEN
+      ARF=1.
     END IF
     
   END FUNCTION ARF
diff --git a/src/MNH/mode_interpol_beam.f90 b/src/MNH/mode_interpol_beam.f90
index 1084b95b3b1030a36b3a383ca0268c097d6c8535..8205b8c6dc13f6c0819764958a4d105691aabb1f 100644
--- a/src/MNH/mode_interpol_beam.f90
+++ b/src/MNH/mode_interpol_beam.f90
@@ -309,6 +309,7 @@ CONTAINS
 
     USE MODD_PARAMETERS
     USE MODD_GRID_n
+    USE MODE_ll
 !
     IMPLICIT NONE
 !
@@ -342,14 +343,9 @@ CONTAINS
 !
     IPAS=0
 !
-    IIU=SIZE(PZM,1)
-    IJU=SIZE(PZM,2)
+    CALL GET_INDICE_ll( IIB,IJB,IIE,IJE)
     IKU=SIZE(PZM,3)
-    IIB = JPHEXT + 1
-    IJB = JPHEXT + 1
     IKB = JPVEXT + 1
-    IIE = IIU - JPHEXT
-    IJE = IJU - JPHEXT
     IKE = IKU - JPVEXT
 ! 
     
@@ -363,7 +359,7 @@ CONTAINS
             IPAS=0
             II=COUNT(PXHATM(:) <= PX_RAY(JI,JEL,JAZ,JL,JH,JV)) ! number of mass points x-coordinates less than x-position of current ray point
             IJ=COUNT(PYHATM(:) <= PY_RAY(JI,JEL,JAZ,JL,JH,JV))
-            IF ( (II  <= IIE-1) .AND. (II >= IIB) .AND. (IJ <= IJE-1) .AND. (IJ >= IJB) ) THEN
+            IF ( (II  <= IIE) .AND. (II >= IIB) .AND. (IJ <= IJE) .AND. (IJ >= IJB) ) THEN
        !          WRITE(ILUOUT0,*) 'inside the horizontal domain '
               ZXCOEF=(PX_RAY(JI,JEL,JAZ,JL,JH,JV)-PXHATM(II))/(PXHATM(II+1)-PXHATM(II))
               ZYCOEF=(PY_RAY(JI,JEL,JAZ,JL,JH,JV)-PYHATM(IJ))/(PYHATM(IJ+1)-PYHATM(IJ))
@@ -402,7 +398,7 @@ CONTAINS
                   END DO
                 ENDIF
               ELSE
-                IF ((IK00 <= IKE-1).AND.  (IK01 <= IKE-1) .AND. (IK10 <= IKE-1) .AND. (IK11 <= IKE-1) ) THEN
+                IF ((IK00 <= IKE).AND.  (IK01 <= IKE) .AND. (IK10 <= IKE) .AND. (IK11 <= IKE) ) THEN
          ! We are above below the lowest mass level and below the upper mass level
                   IPAS=2
                   ZZCOEF00=(PZ_RAY(JI,JEL,JAZ,JL,JH,JV) -PZM(II,IJ,IK00))    /(PZM(II,IJ,IK00+1)-PZM(II,IJ,IK00))
diff --git a/src/MNH/mode_readtmat.f90 b/src/MNH/mode_readtmat.f90
new file mode 100644
index 0000000000000000000000000000000000000000..afd2fb4501f5245be9838da9761e079b522ffd1b
--- /dev/null
+++ b/src/MNH/mode_readtmat.f90
@@ -0,0 +1,559 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!--------------- special set of characters for RCS information
+!-----------------------------------------------------------------
+!-----------------------------------------------------------------
+!     ######spl
+      MODULE MODE_READTMAT
+!     ####################
+!
+!!****  *MODE_READTMAT* -  module routines  
+!!
+!!    PURPOSE
+!!    -------
+!!      Reads coefficients RE IM S11,S22 in Tmat lookup table, build from Tmat_20140121.f
+!!      in rep /home/augros/Programmes/T-Matrice/Clotilde/ClotildeV3
+!!      which is a modification of Mishchenko code
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------
+!!      
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    
+!!
+!!    AUTHOR
+!!    ------
+!!      C. Augros   * Meteo France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original   30/10/2012    
+!!    
+!!      C. Augros 15/11/2012 :  if ZLAM, D, T or ZELEV are out of the table limits
+!!      S11, S22... are set to 0 => this is realistic only in case of small D, below Dmin
+!!      but in reality it happens also for large D (> 8mm) => needs to be corrected
+!!
+!!      ----- MY_MODIF 4 ------
+!!      C. Augros 7/12/2012 : quadrilinear interpolation instead of the ponderation by 1/d**2
+!!      as done in ReadResuTmatV3.f90 (Programmes/T-Matrice/Clotilde/ClotildeV3/ReadResuTmatV3)
+!!
+!!      ----- MY_MODIF 5 ------
+!!      C. Augros 12/12/2012 
+!!	    SUBROUTINE READTMAT(PLAM_RAD,PELEV_RAD,PT,Dm,RES11,IMS11,&
+!!      RES22,IMS22,RES11f,IMS11f,RES22f,IMS22f) instead of
+!!	    SUBROUTINE READTMAT(PLAM_RAD,PELEV_RAD,PT,Dm,S11,S22,S11f,S22f)
+!!
+!!      ----- MY_MODIF 6 ------
+!!      C. Augros 13/12/2012 
+!!	    add of :
+!!      SUBROUTINE READTMATINT(PLAM_RAD,PELEV_RAD,PT,M,PS11_CARRE,PS22_CARRE,&
+!!      S22S11,PRE_S22FMS11F,PIM_S22FT,PIM_S11FT)
+!!      read the 2nd Tmat table with the PS11_CARRE, PS22_CARRE... integrated
+!!      over all diameters (table made by MakeTmatIntegree.f90)
+!!      as done in ReadTmatInt (Programmes/T-Matrice/Clotilde/ClotildeV3/
+!!      TmatIntegree/ReadTmatInt/)
+!!
+!!      C. Augros 01/2013
+!!      Corrections dans subroutine READTMAT et READTMATINT des erreurs de lecture 
+!!      des tables (remplacement de ZLAM_INF, ZTC_INF... par PLAM_MIN, PTC_MIN)
+!!      
+!!      ----- MY_MODIF 12 ------
+!!      C. Augros 13/12/2012 
+!!
+!!	SUBROUTINE CALC_KTMAT(PLAM_RAD,PELEV_RAD,PT,M,PLAM_MIN,PLAM_MAX,PLAM_STEP,&
+!!    	PELEV_MIN,PELEV_MAX,PELEV_STEP,PTC_MIN,PTC_MAX,PTC_STEP,&
+!!    	KTMAT,PLAM_RED,PELEV_RED,PTC_RED,PM_RED)!!
+!!	=> calcul des positions dans la table Tmat (ktmat) des coefficients à interpoler
+!!	et des variables réduites qui traduisent la position entre 0 et 1 de ZLAM, ZELEV,
+!!	ZTC et M par rapport aux bornes sup et inf
+!!
+!!      ------------ MY_MODIF 13 ------
+!!      C. Augros 6/02/2014
+!!      modification CALC_KTMAT et INTERPOL pour tenir compte de la colonne supplémentaire ZFW (wet graupel)
+!!      uniquement pour les tables Tmat 06
+!!      suppresion de la routine READTMATINT
+
+!!      C. Augros 3/06/2014
+!       Correction signe < dans mode_readtmat pour condition T° wet graupel
+!       et modif dans calc_ktmat pour initialiser ZFW à 0 ou à max si proche des min et max
+
+!!    ------------- MY_MODIF 14 ------
+!     C. Augros 3/06/2014
+!     modif seuils sur PR_RAY, PS_RAY...: on remplace par une condition sur M (hydromet content)> minM=10-7
+!     pour être cohérent avec la valeur min dans les tables Tmat => evite plein de calculs pour rien
+!
+!     C. Augros 11/06/2014
+!     Correction du bug dans CALC_KTMAT (mode_readtmat): INB_FW et pas ZFW !!!
+!     => correction du pb dans la bande brillante
+
+!!    ------------- MY_MODIF 15 ------
+!     C. Augros 11/06/2014 (pas d'impact sur mode_readtmat)
+!     => dans radar_scat: calcul fonction diélectique dans la glace avec maxwell garnett (et pas Smith 84)
+!     si NDIFF=7 => calcul avec Mie pour la glace primaire
+!     => dans write_lfifm1: ecriture des sorties sur une seule colonne F12.5 (on supprime az, porte)
+
+!!    ------------- MY_MODIF 16 ------
+!     C. Augros 22/08/2014
+!     On ne conserve que les routines CALC_KTMAT et INTERPOL (qui sont appelées dans radar_scat si NDIFF=7)
+!     Suppression de READTMAT (avec la nouvelle version de radarscat, les tables tmat
+!     intégrées sont lues au début du code, pas besoin de les relire à chaque fois)
+!-------------------------------------------------------------------------------
+!--------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+
+!              ------------
+USE MODD_RADAR, ONLY:XVALGROUND
+USE MODD_CST, ONLY: XPI
+USE MODD_PARAMETERS, ONLY:XUNDEF,NUNDEF
+!
+!-------------------------------------------------------------------------------
+!
+CONTAINS
+!-------------------------------------------------------------------------------
+!-------------------------------------------------------------------------------
+!
+!*       1.   SUBROUTINE CALC_KTMAT
+!
+!-------------------------------------------------------------------------------
+!-------------------------------------------------------------------------------
+!   #################################################
+    SUBROUTINE CALC_KTMAT(PELEV_RAD,PT,PFW,PM,&
+    PELEV_MIN,PELEV_MAX,PELEV_STEP,PTC_MIN,PTC_MAX,PTC_STEP,&
+    PFW_MIN,PFW_MAX,PFW_STEP,PEXPM_MIN,PEXPM_MAX,PEXPM_STEP,&
+    KTMAT,PELEV_RED,PTC_RED,PFW_RED,PM_RED)
+!   #################################################
+
+IMPLICIT NONE
+! Arguments entree et sortie
+REAL,INTENT(IN) :: PELEV_RAD,PT,PFW,PM,PEXPM_MIN,PEXPM_MAX,PEXPM_STEP,&
+PELEV_MIN,PELEV_MAX,PELEV_STEP,PTC_MIN,PTC_MAX,PTC_STEP,PFW_MIN,PFW_MAX,PFW_STEP
+INTEGER,DIMENSION(16),INTENT(OUT):: KTMAT
+REAL,INTENT(OUT) :: PELEV_RED,PTC_RED,PFW_RED,PM_RED
+    
+!************* Declarations ***************
+REAL :: ZELEV,ZELEV_INF,ZELEV_SUP
+REAL :: ZTC,ZTC_INF,ZTC_SUP
+REAL :: ZFW_INF,ZFW_SUP,ZFW
+REAL :: ZEXPM,ZEXPM_INF,ZEXPM_SUP,ZEXPM_RED,ZM_INF,ZM_SUP
+INTEGER :: IELEV,ITC,IFW,IEXPM
+INTEGER :: INB_ELEV,INB_TC,INB_FW,INB_M
+INTEGER :: IELEVS,ITCS,IEXPMS,IFWS
+!**********************************************
+!*****           Parametres !!!          ******
+!**********************************************
+!Conversion de l'elevation en degre (a partir de la valeur en radian)
+ZELEV=PELEV_RAD*180./XPI
+!Conversion de la temperature de °K en °C
+ZTC=PT-273.15 
+!Hydromet content
+ZEXPM=LOG10(PM)  
+!Liquid water fraction
+ZFW=PFW
+
+
+!On verifie que  ZELEV, ZTC, ZFW et M sont compris dans les bornes min et max
+
+IF (ABS(ZELEV-PELEV_MIN) < PELEV_STEP/10) ZELEV=PELEV_MIN
+IF (ABS(ZELEV-PELEV_MAX) < PELEV_STEP/10) ZELEV=PELEV_MAX
+IF (ABS(ZTC-PTC_MIN) < PTC_STEP/10) ZTC=PTC_MIN
+IF (ABS(ZTC-PTC_MAX) < PTC_STEP/10) ZTC=PTC_MAX
+IF (ABS(ZFW-PFW_MIN) < PFW_STEP/10) ZFW=PFW_MIN
+IF (ABS(ZFW-PFW_MAX) < PFW_STEP/10) ZFW=PFW_MAX
+IF (ABS(ZEXPM-PEXPM_MIN) < PEXPM_STEP/10) ZEXPM=PEXPM_MIN
+IF (ABS(ZEXPM-PEXPM_MAX) < PEXPM_STEP/10) ZEXPM=PEXPM_MAX
+
+IF ((ZELEV >=PELEV_MIN).AND. (ZELEV<=PELEV_MAX) .AND.&
+    (ZTC >=PTC_MIN)    .AND. (ZTC<=PTC_MAX)   .AND.(ZFW >=PFW_MIN)    .AND. (ZFW<=PFW_MAX)     .AND.&
+    (ZEXPM >=PEXPM_MIN).AND. (ZEXPM<=PEXPM_MAX)) THEN
+    
+  !Recherche dans le fichier de la position des valeurs encadrant les
+  !valeurs données ci-dessus
+    !------- ZELEV ------------------
+  IELEV=floor((ZELEV-PELEV_MIN)/PELEV_STEP)
+  ZELEV_INF=PELEV_MIN+IELEV*PELEV_STEP
+  IF (ZELEV==ZELEV_INF) THEN
+    IELEVS=IELEV
+  ELSE
+    IELEVS=IELEV+1
+  ENDIF
+  ZELEV_SUP=PELEV_MIN+IELEVS*PELEV_STEP
+  INB_ELEV=nint((PELEV_MAX-PELEV_MIN)/PELEV_STEP)+1
+  !WRITE(0,*) "IELEV,IELEVS,ZELEV_INF,ZELEV_SUP,INB_ELEV : ",IELEV,IELEVS,ZELEV_INF,ZELEV_SUP,INB_ELEV
+  !------- ZTC ------------------
+  ITC=floor((ZTC-PTC_MIN)/PTC_STEP)
+  ZTC_INF=PTC_MIN+ITC*PTC_STEP
+  IF (ZTC==ZTC_INF) THEN
+    ITCS=ITC
+  ELSE
+    ITCS=ITC+1
+  ENDIF
+  ZTC_SUP=PTC_MIN+(ITCS)*PTC_STEP
+  INB_TC=nint((PTC_MAX-PTC_MIN)/PTC_STEP)+1
+  !WRITE(0,*) "ITC,ITCS,ZTC_INF,ZTC_SUP,INB_TC : ",ITC,ITCS,ZTC_INF,ZTC_SUP,INB_TC
+
+  !------- ZFW ------------------
+  IFW=floor((ZFW-PFW_MIN)/PFW_STEP)
+  ZFW_INF=PFW_MIN+IFW*PFW_STEP
+  IF (ZFW==ZFW_INF) THEN
+    IFWS=IFW
+  ELSE
+    IFWS=IFW+1
+  ENDIF
+  ZFW_SUP=PFW_MIN+(IFWS)*PFW_STEP
+  INB_FW=nint((PFW_MAX-PFW_MIN)/PFW_STEP)+1
+  !WRITE(0,*) "IFW,IFWS,ZFW_INF,ZFW_SUP,INB_FW : ",IFW,IFWS,ZFW_INF,ZFW_SUP,INB_FW
+
+  !------- PM ------------------
+  IEXPM=floor((ZEXPM-PEXPM_MIN)/PEXPM_STEP)
+  ZEXPM_INF=PEXPM_MIN+IEXPM*PEXPM_STEP
+  IF (ZEXPM==ZEXPM_INF) THEN
+    IEXPMS=IEXPM
+  ELSE
+    IEXPMS=IEXPM+1
+  ENDIF
+  ZEXPM_SUP=PEXPM_MIN+IEXPMS*PEXPM_STEP
+  INB_M=nint((PEXPM_MAX-PEXPM_MIN)/PEXPM_STEP)+1
+  ZM_INF=10**ZEXPM_INF
+  ZM_SUP=10**ZEXPM_SUP
+  !WRITE(0,*) "IEXPM,IEXPMS,ZEXPM_INF,ZEXPM_SUP,INB_M,ZM_INF,ZM_SUP : ",&
+  !IEXPM,IEXPMS,ZEXPM_INF,ZEXPM_SUP,INB_M,ZM_INF,ZM_SUP
+  !WRITE(0,*) "  "
+
+  !-- Calcul des variables reduites (comprises entre 0 et 1)
+  ! pour l'interpolation linaire
+  IF (ZELEV_SUP .NE. ZELEV_INF) THEN 
+    PELEV_RED=(ZELEV-ZELEV_INF)/(ZELEV_SUP-ZELEV_INF)
+  ELSE
+    PELEV_RED=0
+  ENDIF
+  IF (ZTC_SUP .NE. ZTC_INF) THEN 
+    PTC_RED=(ZTC-ZTC_INF)/(ZTC_SUP-ZTC_INF)
+  ELSE
+    PTC_RED=0
+  ENDIF
+  IF (ZFW_SUP .NE. ZFW_INF) THEN 
+    PFW_RED=(ZFW-ZFW_INF)/(ZFW_SUP-ZFW_INF)
+  ELSE
+    PFW_RED=0
+  ENDIF
+  IF (ZEXPM_SUP .NE. ZEXPM_INF) THEN 
+    PM_RED=(PM-ZM_INF)/(ZM_SUP-ZM_INF)
+    ZEXPM_RED=(ZEXPM-ZEXPM_INF)/(ZEXPM_SUP-ZEXPM_INF)
+  ELSE
+    PM_RED=0
+  ENDIF
+  KTMAT(1)=ITC*INB_ELEV*INB_FW*INB_M+IELEV*INB_FW*INB_M+IFW*INB_M+IEXPM+1
+  KTMAT(2)=ITC*INB_ELEV*INB_FW*INB_M+IELEV*INB_FW*INB_M+IFW*INB_M+IEXPMS+1
+  KTMAT(3)=ITC*INB_ELEV*INB_FW*INB_M+IELEV*INB_FW*INB_M+IFWS*INB_M+IEXPM+1
+  KTMAT(4)=ITC*INB_ELEV*INB_FW*INB_M+IELEV*INB_FW*INB_M+IFWS*INB_M+IEXPMS+1
+  KTMAT(5)=ITC*INB_ELEV*INB_FW*INB_M+IELEVS*INB_FW*INB_M+IFW*INB_M+IEXPM+1
+  KTMAT(6)=ITC*INB_ELEV*INB_FW*INB_M+IELEVS*INB_FW*INB_M+IFW*INB_M+IEXPMS+1
+  KTMAT(7)=ITC*INB_ELEV*INB_FW*INB_M+IELEVS*INB_FW*INB_M+IFWS*INB_M+IEXPM+1
+  KTMAT(8)=ITC*INB_ELEV*INB_FW*INB_M+IELEVS*INB_FW*INB_M+IFWS*INB_M+IEXPMS+1
+  KTMAT(9)=ITCS*INB_ELEV*INB_FW*INB_M+IELEV*INB_FW*INB_M+IFW*INB_M+IEXPM+1
+  KTMAT(10)=ITCS*INB_ELEV*INB_FW*INB_M+IELEV*INB_FW*INB_M+IFW*INB_M+IEXPMS+1
+  KTMAT(11)=ITCS*INB_ELEV*INB_FW*INB_M+IELEV*INB_FW*INB_M+IFWS*INB_M+IEXPM+1
+  KTMAT(12)=ITCS*INB_ELEV*INB_FW*INB_M+IELEV*INB_FW*INB_M+IFWS*INB_M+IEXPMS+1
+  KTMAT(13)=ITCS*INB_ELEV*INB_FW*INB_M+IELEVS*INB_FW*INB_M+IFW*INB_M+IEXPM+1
+  KTMAT(14)=ITCS*INB_ELEV*INB_FW*INB_M+IELEVS*INB_FW*INB_M+IFW*INB_M+IEXPMS+1
+  KTMAT(15)=ITCS*INB_ELEV*INB_FW*INB_M+IELEVS*INB_FW*INB_M+IFWS*INB_M+IEXPM+1
+  KTMAT(16)=ITCS*INB_ELEV*INB_FW*INB_M+IELEVS*INB_FW*INB_M+IFWS*INB_M+IEXPMS+1
+ELSE
+!  WRITE(0,*) "ZM, ZTC, ZELEV ou en dehors des bornes:"
+!  WRITE(0,*) ",ZELEV,ZTC,ZEXPM, ZFW : ",ZELEV,ZTC,ZEXPM, ZFW
+!  WRITE(0,*) "PELEV_MIN,PELEV_STEP,PELEV_MAX",PELEV_MIN,PELEV_STEP,PELEV_MAX
+!  WRITE(0,*) "PTC_MIN,PTC_STEP,PTC_MAX",PTC_MIN,PTC_STEP,PTC_MAX
+!  WRITE(0,*) "PFW_MIN,PFW_STEP,PFW_MAX",PFW_MIN,PFW_STEP,PFW_MAX
+!  WRITE(0,*) "PEXPM_MIN,PEXPM_STEP,PEXPM_MAX",PEXPM_MIN,PEXPM_STEP,PEXPM_MAX
+!  WRITE(0,*) "--------------------------------"
+!  IF ((ZELEV >=PELEV_MIN).AND. (ZELEV<=PELEV_MAX)) THEN
+!    WRITE(0,*) "ok ZELEV :",ZELEV
+!  ELSE
+!    WRITE(0,*) "Nok ZELEV :",ZELEV
+!  ENDIF
+!  IF ((ZTC >=PTC_MIN).AND. (ZTC<=PTC_MAX)) THEN
+!    WRITE(0,*) "ok ZTC :",ZTC
+!  ELSE
+!    WRITE(0,*) "Nok ZTC :",ZTC
+!  ENDIF
+!  IF ((ZFW >=PFW_MIN).AND. (ZFW<=PFW_MAX)) THEN
+!    WRITE(0,*) "ok ZFW :",ZFW
+!  ELSE
+!    WRITE(0,*) "Nok ZFW :",ZFW
+!  ENDIF
+!  IF ((ZEXPM >=PEXPM_MIN).AND. (ZEXPM<=PEXPM_MAX)) THEN
+!    WRITE(0,*) "ok ZEXPM :",ZEXPM
+!  ELSE
+!    WRITE(0,*) "Nok ZEXPM :",ZEXPM
+!  ENDIF
+  KTMAT(:)=-NUNDEF
+  PTC_RED=-XUNDEF
+  PELEV_RED=-XUNDEF
+  PFW_RED=-XUNDEF
+  PM_RED=-XUNDEF
+ENDIF
+
+RETURN
+END SUBROUTINE CALC_KTMAT
+
+!-------------------------------------------------------------------------------
+!-------------------------------------------------------------------------------
+!
+!*       2.   SUBROUTINE INTERPOL
+!         --------------------------------------
+!-------------------------------------------------------------------------------
+!   #################################################
+  SUBROUTINE INTERPOL(PELEV_RED,PTC_RED,PFW_RED,PM_RED,PMAT_COEF,&
+  PS11_CARRE,PS22_CARRE,PRE_S22S11,PIM_S22S11,PRE_S22FMS11F,PIM_S22FT,PIM_S11FT)
+!   #################################################
+
+IMPLICIT NONE
+! Arguments entree et sortie
+REAL,INTENT(IN) :: PELEV_RED,PTC_RED,PFW_RED,PM_RED
+REAL,DIMENSION(7,16),INTENT(IN) :: PMAT_COEF !matrice contenant tous les coef interpolés: RES11, RES22...
+REAL,INTENT(OUT) :: PS11_CARRE,PS22_CARRE,PRE_S22S11,PIM_S22S11,PRE_S22FMS11F,PIM_S22FT,PIM_S11FT 
+INTEGER:: JCOEF
+REAL,DIMENSION(7) :: ZVECT_COEF !vecteur contenant tous les coef interpolés: RES11, RES22...
+
+!------------------- Interpolation --------------------------
+!on calcule la distance entre le point ZELEV,T,M avec les 
+!bornes inf et sup
+! si on ne se trouve pas exactement sur une des bornes
+!IF ((ZELEV_SUP/=ZELEV_INF) .OR. (ZTC_SUP/=ZTC_INF) .OR. (ZM_SUP/=ZM_INF)) THEN
+!	WRITE(0,*) "IF ( (ZELEV_SUP/=ZELEV_INF) .OR. (ZTC_SUP/=ZTC_INF) .OR. (ZM_SUP/=ZM_INF))"
+!ENDIF
+
+   !--- Interpolation linéaire ---
+DO JCOEF=1,7,1
+  ZVECT_COEF(JCOEF)= & 
+    (1-PM_RED)*(1-PFW_RED)*(1-PELEV_RED)*(1-PTC_RED)*PMAT_COEF(JCOEF,1)+&
+    PM_RED*(1-PFW_RED)*(1-PELEV_RED)*(1-PTC_RED)*PMAT_COEF(JCOEF,2)+&
+    (1-PM_RED)*PFW_RED*(1-PELEV_RED)*(1-PTC_RED)*PMAT_COEF(JCOEF,3)+&
+    PM_RED*PFW_RED*(1-PELEV_RED)*(1-PTC_RED)*PMAT_COEF(JCOEF,4)+&
+    (1-PM_RED)*(1-PFW_RED)*PELEV_RED*(1-PTC_RED)*PMAT_COEF(JCOEF,5)+&
+    PM_RED*(1-PFW_RED)*PELEV_RED*(1-PTC_RED)*PMAT_COEF(JCOEF,6)+&
+    (1-PM_RED)*PFW_RED*PELEV_RED*(1-PTC_RED)*PMAT_COEF(JCOEF,7)+&
+    PM_RED*PFW_RED*PELEV_RED*(1-PTC_RED)*PMAT_COEF(JCOEF,8)+&
+
+    (1-PM_RED)*(1-PFW_RED)*(1-PELEV_RED)*PTC_RED*PMAT_COEF(JCOEF,9)+&
+    PM_RED*(1-PFW_RED)*(1-PELEV_RED)*PTC_RED*PMAT_COEF(JCOEF,10)+&
+    (1-PM_RED)*PFW_RED*(1-PELEV_RED)*PTC_RED*PMAT_COEF(JCOEF,11)+&
+    PM_RED*PFW_RED*(1-PELEV_RED)*PTC_RED*PMAT_COEF(JCOEF,12)+&
+    (1-PM_RED)*(1-PFW_RED)*PELEV_RED*PTC_RED*PMAT_COEF(JCOEF,13)+&
+    PM_RED*(1-PFW_RED)*PELEV_RED*PTC_RED*PMAT_COEF(JCOEF,14)+&
+    (1-PM_RED)*PFW_RED*PELEV_RED*PTC_RED*PMAT_COEF(JCOEF,15)+&
+    PM_RED*PFW_RED*PELEV_RED*PTC_RED*PMAT_COEF(JCOEF,16)
+
+ENDDO!--- fin interpolation lineaire -----------------------
+
+PS11_CARRE=ZVECT_COEF(1)
+PS22_CARRE=ZVECT_COEF(2)
+PRE_S22S11=ZVECT_COEF(3)
+PIM_S22S11=ZVECT_COEF(4)
+PRE_S22FMS11F=ZVECT_COEF(5)
+PIM_S22FT=ZVECT_COEF(6)
+PIM_S11FT=ZVECT_COEF(7)
+
+RETURN
+
+  END SUBROUTINE INTERPOL
+!-------------------------------------------------------------------------------
+!-------------------------------------------------------------------------------
+!
+!*       3.   SUBROUTINE CALC_KTMAT_LIMA  : idem CALC_KTMAT mais pour adapter 
+!             aux concentrations pour l'espace pluie pour LIMA
+!
+!-------------------------------------------------------------------------------
+!-------------------------------------------------------------------------------
+!   #################################################
+    SUBROUTINE CALC_KTMAT_LIMA(PELEV_RAD,PT,PCC,PM,&
+    PELEV_MIN,PELEV_MAX,PELEV_STEP,PTC_MIN,PTC_MAX,PTC_STEP,&
+    PEXPCC_MIN,PEXPCC_MAX,PEXPCC_STEP,PEXPM_MIN,PEXPM_MAX,PEXPM_STEP,&
+    KTMAT,PELEV_RED,PTC_RED,PCC_RED,PM_RED)
+!   #################################################
+
+IMPLICIT NONE
+! Arguments entree et sortie
+REAL,INTENT(IN) :: PELEV_RAD,PT,PCC,PM,PEXPM_MIN,PEXPM_MAX,PEXPM_STEP,&
+PELEV_MIN,PELEV_MAX,PELEV_STEP,PTC_MIN,PTC_MAX,PTC_STEP,PEXPCC_MIN,PEXPCC_MAX,PEXPCC_STEP
+INTEGER,DIMENSION(16),INTENT(OUT):: KTMAT
+REAL,INTENT(OUT) :: PELEV_RED,PTC_RED,PCC_RED,PM_RED
+    
+!************* Declarations ***************
+REAL :: ZELEV,ZELEV_INF,ZELEV_SUP
+REAL :: ZTC,ZTC_INF,ZTC_SUP
+REAL :: ZEXPCC_INF,ZEXPCC_SUP,ZEXPCC,ZCC_INF,ZCC_SUP,ZEXPCC_RED
+REAL :: ZEXPM,ZEXPM_INF,ZEXPM_SUP,ZEXPM_RED,ZM_INF,ZM_SUP
+INTEGER :: IELEV,ITC,IEXPCC,IEXPM
+INTEGER :: INB_ELEV,INB_TC,INB_CC,INB_M
+INTEGER :: IELEVS,ITCS,IEXPMS,IEXPCCS
+!**********************************************
+!*****           Parametres !!!          ******
+!**********************************************
+
+!Conversion de l'elevation en degre (a partir de la valeur en radian)
+ZELEV=PELEV_RAD*180./XPI
+!Conversion de la temperature de °K en °C
+ZTC=PT-273.15 
+!Hydromet content
+ZEXPM=LOG10(PM)  
+!Concentration
+ZEXPCC=LOG10(PCC)
+
+
+!On verifie que  ZELEV, ZTC, ZCC et M sont compris dans les bornes min et max
+IF (ABS(ZELEV-PELEV_MIN) < PELEV_STEP/10) ZELEV=PELEV_MIN
+IF (ABS(ZELEV-PELEV_MAX) < PELEV_STEP/10) ZELEV=PELEV_MAX
+IF (ABS(ZTC-PTC_MIN) < PTC_STEP/10) ZTC=PTC_MIN
+IF (ABS(ZTC-PTC_MAX) < PTC_STEP/10) ZTC=PTC_MAX
+IF (ABS(ZEXPCC-PEXPCC_MIN) < PEXPCC_STEP/10) ZEXPCC=PEXPCC_MIN
+IF (ABS(ZEXPCC-PEXPCC_MAX) < PEXPCC_STEP/10) ZEXPCC=PEXPCC_MAX
+IF (ABS(ZEXPM-PEXPM_MIN) < PEXPM_STEP/10) ZEXPM=PEXPM_MIN
+IF (ABS(ZEXPM-PEXPM_MAX) < PEXPM_STEP/10) ZEXPM=PEXPM_MAX
+
+IF ((ZELEV >=PELEV_MIN).AND. (ZELEV<=PELEV_MAX) .AND.&
+    (ZTC >=PTC_MIN)    .AND. (ZTC<=PTC_MAX)   .AND.(ZEXPCC >=PEXPCC_MIN)    .AND. (ZEXPCC<=PEXPCC_MAX)     .AND.&
+    (ZEXPM >=PEXPM_MIN).AND. (ZEXPM<=PEXPM_MAX)) THEN
+    
+  !Recherche dans le fichier de la position des valeurs encadrant les
+  !valeurs données ci-dessus
+  !------- ZELEV ------------------
+  IELEV=floor((ZELEV-PELEV_MIN)/PELEV_STEP)
+  ZELEV_INF=PELEV_MIN+IELEV*PELEV_STEP
+  IF (ZELEV==ZELEV_INF) THEN
+    IELEVS=IELEV
+  ELSE
+    IELEVS=IELEV+1
+  ENDIF
+  ZELEV_SUP=PELEV_MIN+IELEVS*PELEV_STEP
+  INB_ELEV=nint((PELEV_MAX-PELEV_MIN)/PELEV_STEP)+1
+  !WRITE(0,*) "IELEV,IELEVS,ZELEV_INF,ZELEV_SUP,INB_ELEV : ",IELEV,IELEVS,ZELEV_INF,ZELEV_SUP,INB_ELEV
+  !------- ZTC ------------------
+  ITC=floor((ZTC-PTC_MIN)/PTC_STEP)
+  ZTC_INF=PTC_MIN+ITC*PTC_STEP
+  IF (ZTC==ZTC_INF) THEN
+    ITCS=ITC
+  ELSE
+    ITCS=ITC+1
+  ENDIF
+  ZTC_SUP=PTC_MIN+(ITCS)*PTC_STEP
+  INB_TC=nint((PTC_MAX-PTC_MIN)/PTC_STEP)+1
+  !WRITE(0,*) "ITC,ITCS,ZTC_INF,ZTC_SUP,INB_TC : ",ITC,ITCS,ZTC_INF,ZTC_SUP,INB_TC
+
+  !------- ZCC ------------------
+  IEXPCC=floor((ZEXPCC-PEXPCC_MIN)/PEXPCC_STEP)
+  ZEXPCC_INF=PEXPCC_MIN+IEXPCC*PEXPCC_STEP
+  IF (ZEXPCC==ZEXPCC_INF) THEN
+    IEXPCCS=IEXPCC
+  ELSE
+    IEXPCCS=IEXPCC+1
+  ENDIF
+  ZEXPCC_SUP=PEXPCC_MIN+(IEXPCCS)*PEXPCC_STEP
+  INB_CC=nint((PEXPCC_MAX-PEXPCC_MIN)/PEXPCC_STEP)+1
+  ZCC_INF=10**ZEXPCC_INF
+  ZCC_SUP=10**ZEXPCC_SUP
+  !------- PM ------------------
+  IEXPM=floor((ZEXPM-PEXPM_MIN)/PEXPM_STEP)
+  ZEXPM_INF=PEXPM_MIN+IEXPM*PEXPM_STEP
+  IF (ZEXPM==ZEXPM_INF) THEN
+    IEXPMS=IEXPM
+  ELSE
+    IEXPMS=IEXPM+1
+  ENDIF
+  ZEXPM_SUP=PEXPM_MIN+IEXPMS*PEXPM_STEP
+  INB_M=nint((PEXPM_MAX-PEXPM_MIN)/PEXPM_STEP)+1
+  ZM_INF=10**ZEXPM_INF
+  ZM_SUP=10**ZEXPM_SUP
+  !WRITE(0,*) "IEXPM,IEXPMS,ZEXPM_INF,ZEXPM_SUP,INB_M,ZM_INF,ZM_SUP : ",&
+  !IEXPM,IEXPMS,ZEXPM_INF,ZEXPM_SUP,INB_M,ZM_INF,ZM_SUP
+  !WRITE(0,*) "  "
+
+  !-- Calcul des variables reduites (comprises entre 0 et 1)
+  ! pour l'interpolation linaire
+  IF (ZELEV_SUP .NE. ZELEV_INF) THEN 
+    PELEV_RED=(ZELEV-ZELEV_INF)/(ZELEV_SUP-ZELEV_INF)
+  ELSE
+    PELEV_RED=0
+  ENDIF
+  IF (ZTC_SUP .NE. ZTC_INF) THEN 
+    PTC_RED=(ZTC-ZTC_INF)/(ZTC_SUP-ZTC_INF)
+  ELSE
+    PTC_RED=0
+  ENDIF
+  IF (ZEXPCC_SUP .NE. ZEXPCC_INF) THEN 
+    PCC_RED=(PCC-ZCC_INF)/(ZCC_SUP-ZCC_INF)
+    ZEXPCC_RED=(ZEXPCC-ZEXPCC_INF)/(ZEXPCC_SUP-ZEXPCC_INF)
+  ELSE
+    PCC_RED=0
+  ENDIF
+  IF (ZEXPM_SUP .NE. ZEXPM_INF) THEN 
+    PM_RED=(PM-ZM_INF)/(ZM_SUP-ZM_INF)
+    ZEXPM_RED=(ZEXPM-ZEXPM_INF)/(ZEXPM_SUP-ZEXPM_INF)
+  ELSE
+    PM_RED=0
+  ENDIF
+  KTMAT(1)=ITC*INB_ELEV*INB_CC*INB_M+IELEV*INB_CC*INB_M+IEXPCC*INB_M+IEXPM+1
+  KTMAT(2)=ITC*INB_ELEV*INB_CC*INB_M+IELEV*INB_CC*INB_M+IEXPCC*INB_M+IEXPMS+1
+  KTMAT(3)=ITC*INB_ELEV*INB_CC*INB_M+IELEV*INB_CC*INB_M+IEXPCCS*INB_M+IEXPM+1
+  KTMAT(4)=ITC*INB_ELEV*INB_CC*INB_M+IELEV*INB_CC*INB_M+IEXPCCS*INB_M+IEXPMS+1
+  KTMAT(5)=ITC*INB_ELEV*INB_CC*INB_M+IELEVS*INB_CC*INB_M+IEXPCC*INB_M+IEXPM+1
+  KTMAT(6)=ITC*INB_ELEV*INB_CC*INB_M+IELEVS*INB_CC*INB_M+IEXPCC*INB_M+IEXPMS+1
+  KTMAT(7)=ITC*INB_ELEV*INB_CC*INB_M+IELEVS*INB_CC*INB_M+IEXPCCS*INB_M+IEXPM+1
+  KTMAT(8)=ITC*INB_ELEV*INB_CC*INB_M+IELEVS*INB_CC*INB_M+IEXPCCS*INB_M+IEXPMS+1
+  KTMAT(9)=ITCS*INB_ELEV*INB_CC*INB_M+IELEV*INB_CC*INB_M+IEXPCC*INB_M+IEXPM+1
+  KTMAT(10)=ITCS*INB_ELEV*INB_CC*INB_M+IELEV*INB_CC*INB_M+IEXPCC*INB_M+IEXPMS+1
+  KTMAT(11)=ITCS*INB_ELEV*INB_CC*INB_M+IELEV*INB_CC*INB_M+IEXPCCS*INB_M+IEXPM+1
+  KTMAT(12)=ITCS*INB_ELEV*INB_CC*INB_M+IELEV*INB_CC*INB_M+IEXPCCS*INB_M+IEXPMS+1
+  KTMAT(13)=ITCS*INB_ELEV*INB_CC*INB_M+IELEVS*INB_CC*INB_M+IEXPCC*INB_M+IEXPM+1
+  KTMAT(14)=ITCS*INB_ELEV*INB_CC*INB_M+IELEVS*INB_CC*INB_M+IEXPCC*INB_M+IEXPMS+1
+  KTMAT(15)=ITCS*INB_ELEV*INB_CC*INB_M+IELEVS*INB_CC*INB_M+IEXPCCS*INB_M+IEXPM+1
+  KTMAT(16)=ITCS*INB_ELEV*INB_CC*INB_M+IELEVS*INB_CC*INB_M+IEXPCCS*INB_M+IEXPMS+1
+ELSE
+!  WRITE(0,*) "ZM, ZTC, ZELEV en dehors des bornes:"
+!  WRITE(0,*) "ZELEV,ZTC,ZEXPM, ZEXPCC : ",ZELEV,ZTC,ZEXPM, ZEXPCC
+!  WRITE(0,*) "PELEV_MIN,PELEV_STEP,PELEV_MAX",PELEV_MIN,PELEV_STEP,PELEV_MAX
+!  WRITE(0,*) "PTC_MIN,PTC_STEP,PTC_MAX",PTC_MIN,PTC_STEP,PTC_MAX
+!  WRITE(0,*) "PEXPCC_MIN,PEXPCC_STEP,PEXPCC_MAX",PEXPCC_MIN,PEXPCC_STEP,PEXPCC_MAX
+!  WRITE(0,*) "PEXPM_MIN,PEXPM_STEP,PEXPM_MAX",PEXPM_MIN,PEXPM_STEP,PEXPM_MAX
+!  WRITE(0,*) "--------------------------------"
+!  IF ((ZELEV >=PELEV_MIN).AND. (ZELEV<=PELEV_MAX)) THEN
+!    WRITE(0,*) "ok ZELEV :",ZELEV
+!  ELSE
+!    WRITE(0,*) "Nok ZELEV :",ZELEV
+!  ENDIF
+!  IF ((ZTC >=PTC_MIN).AND. (ZTC<=PTC_MAX)) THEN
+!    WRITE(0,*) "ok ZTC :",ZTC
+!  ELSE
+!    WRITE(0,*) "Nok ZTC :",ZTC
+!  ENDIF
+!  IF ((ZEXPCC >=PEXPCC_MIN).AND. (ZEXPCC<=PEXPCC_MAX)) THEN
+!    WRITE(0,*) "ok ZEXPCC :",ZEXPCC
+!  ELSE
+!    WRITE(0,*) "Nok ZEXPCC :",ZEXPCC
+!  ENDIF
+!  IF ((ZEXPM >=PEXPM_MIN).AND. (ZEXPM<=PEXPM_MAX)) THEN
+!    WRITE(0,*) "ok ZEXPM :",ZEXPM
+!  ELSE
+!    WRITE(0,*) "Nok ZEXPM :",ZEXPM
+!  ENDIF
+  KTMAT(:)=-NUNDEF
+  PTC_RED=-XUNDEF
+  PELEV_RED=-XUNDEF
+  PCC_RED=-XUNDEF
+  PM_RED=-XUNDEF
+ENDIF
+
+RETURN
+END SUBROUTINE CALC_KTMAT_LIMA
+
+
+
+END MODULE MODE_READTMAT
diff --git a/src/MNH/radar_scattering.f90 b/src/MNH/radar_scattering.f90
index 89325b277bd0ca136c49867a281c29a4701dfce3..e9434099b850b0daceeefbce1280f1528543bdfe 100644
--- a/src/MNH/radar_scattering.f90
+++ b/src/MNH/radar_scattering.f90
@@ -13,7 +13,7 @@
 !
 INTERFACE
     SUBROUTINE RADAR_SCATTERING(PT_RAY,PRHODREF_RAY,PR_RAY,PI_RAY,PCIT_RAY,PS_RAY,PG_RAY,PVDOP_RAY, &
-   PELEV,PX_H,PX_V,PW_H,PW_V,PZE,PBU_MASK_RAY)
+   PELEV,PX_H,PX_V,PW_H,PW_V,PZE,PBU_MASK_RAY,PCR_RAY)
 REAL, DIMENSION(:,:,:,:,:,:),INTENT(IN)  :: PT_RAY ! temperature interpolated along the rays
 REAL, DIMENSION(:,:,:,:,:,:),INTENT(IN)  :: PRHODREF_RAY ! 
 REAL, DIMENSION(:,:,:,:,:,:),INTENT(IN)  :: PR_RAY  ! rainwater mixing ratio interpolated along the rays
@@ -27,17 +27,18 @@ REAL, DIMENSION(:),           INTENT(IN) :: PX_H ! Gaussian horizontal nodes
 REAL, DIMENSION(:),           INTENT(IN) :: PX_V ! Gaussian vertical nodes
 REAL, DIMENSION(:),           INTENT(IN) :: PW_H ! Gaussian horizontal weights
 REAL, DIMENSION(:),           INTENT(IN) :: PW_V ! Gaussian vertical weights
-REAL,DIMENSION(:,:,:,:,:),    INTENT(INOUT) :: PZE ! gate equivalent reflectivity factor (horizontal)
+REAL,DIMENSION(:,:,:,:,:),    INTENT(INOUT) :: PZE ! 5D matrix (iradar, ielev, iaz, irangestep, ivar) containing the radar variables that will be calculated
+!in polar or cartesian projection (same projection as the observation grid)
 ! convective/stratiform
 REAL, DIMENSION(:,:,:,:,:,:),INTENT(INOUT) :: PBU_MASK_RAY
-! /convective/stratiform
+REAL, DIMENSION(:,:,:,:,:,:),OPTIONAL,INTENT(IN)  :: PCR_RAY  ! rainwater mixing ratio interpolated along the rays
     END SUBROUTINE RADAR_SCATTERING
 END INTERFACE
 END MODULE MODI_RADAR_SCATTERING
 !
 !     ######spl
        SUBROUTINE RADAR_SCATTERING(PT_RAY,PRHODREF_RAY,PR_RAY,PI_RAY,PCIT_RAY, &
-            PS_RAY,PG_RAY,PVDOP_RAY,PELEV,PX_H,PX_V,PW_H,PW_V,PZE,PBU_MASK_RAY)
+            PS_RAY,PG_RAY,PVDOP_RAY,PELEV,PX_H,PX_V,PW_H,PW_V,PZE,PBU_MASK_RAY,PCR_RAY)
 !     ##############################
 !
 !!****  *RADAR_SCATTERING* - computes radar reflectivities.
@@ -84,7 +85,7 @@ END MODULE MODI_RADAR_SCATTERING
 !!
 !!    AUTHOR
 !!    ------
-!!      O. Caumont & V. Ducrocq      * Météo-France *
+!!      O. Caumont & V. Ducrocq      * Meteo-France *
 !!
 !!    MODIFICATIONS
 !!    -------------
@@ -94,8 +95,9 @@ END MODULE MODI_RADAR_SCATTERING
 !!      O. Caumont 21/12/2009 correction of bugs to compute KDP.
 !!      O. Caumont 11/02/2010 thresholding and conversion from linear to 
 !!          log values after interpolation instead of before.
-!!      G.Tanguy 25/03/2010 Introduction of MODD_TMAT and ALLOCATE/DEALLOCATE 
-!!
+!!      G.Tanguy 25/03/2010 Introduction of MODD_TMAT and ALLOCATE/DEALLOCATE
+!!      C.Augros  2014 New simulator for T matrice
+!!      G.Delautier 10/2014 : Mise a jour simulateur T-matrice pour LIMA
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -103,17 +105,39 @@ END MODULE MODI_RADAR_SCATTERING
 !
 USE MODD_CST
 USE MODD_PARAMETERS
-USE MODD_RAIN_ICE_DESCR
-USE MODD_RAIN_ICE_PARAM
+USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XDR_I=>XDR,XLBEXR_I=>XLBEXR,&
+                               XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XCR_I=>XCR,&
+                               XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XDS_I=>XDS,XLBEXS_I=>XLBEXS,&
+                               XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,XCS_I=>XCS,&
+                               XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,&
+                               XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,&
+                               XALPHAI_I=>XALPHAI,XNUI_I=>XNUI,XDI_I=>XDI,XLBEXI_I=>XLBEXI,&
+                               XLBI_I=>XLBI,XAI_I=>XAI,XBI_I=>XBI,XC_I_I=>XC_I,&
+                               XRTMIN_I=>XRTMIN
+!!LIMA         
+!USE MODD_PARAM_LIMA_WARM, ONLY: XDR_L=>XDR,XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XCR_L=>XCR
+!USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,&
+!                                XDS_L=>XDS,XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XCS_L=>XCS
+!
+!USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG
+!USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,&
+!                           XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,&
+!                           XRTMIN_L=>XRTMIN
+!!LIMA
 USE MODD_RADAR, ONLY:XLAM_RAD,XSTEP_RAD,NBELEV,NDIFF,LATT,NPTS_GAULAG,LQUAD,XVALGROUND,NDGS, &
-     LFALL,LWBSCS,LWREFL,XREFLVDOPMIN
+     LFALL,LWBSCS,LWREFL,XREFLVDOPMIN,XREFLMIN,LSNRT,XSNRMIN
 USE MODD_TMAT
 ! 
 USE MODE_ARF
 USE MODE_FSCATTER
+USE MODE_READTMAT
 USE MODE_FGAU , ONLY:GAULAG
 USE MODI_GAMMA, ONLY:GAMMA
 !
+USE MODE_FM
+USE MODE_IO_ll
+USE MODD_LUNIT
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -136,13 +160,22 @@ REAL,DIMENSION(:,:,:,:,:),   INTENT(INOUT) :: PZE ! gate equivalent reflectivity
 ! convective/stratiform
 REAL,DIMENSION(:,:,:,:,:,:),INTENT(INOUT) :: PBU_MASK_RAY
 ! /convective/stratiform
+REAL, DIMENSION(:,:,:,:,:,:),OPTIONAL,INTENT(IN)  :: PCR_RAY  ! rainwater mixing ratio interpolated along the rays
 !
 !*       0.2   Declarations of local variables :
 !
-REAL,   DIMENSION(:,:,:,:,:,:,:),ALLOCATABLE :: ZREFL! 1: radar reflectivity in dBZ, 2: ZDR, 3: KDP, 4: BU_MASK, 5-8: mixing ratios, 9-12: Z_j, 13: CIT, 14: height above ground, 15-18: specific attenuations, 19-22: total attenuations
+REAL,   DIMENSION(:,:,:,:,:,:,:),ALLOCATABLE :: ZREFL
+!1: ZHH (dBZ), 2: ZDR, 3: KDP, 4: CSR (0 pr air clair, 1 pour stratiforme, 2 pour convectif)
+!5-8: ZER, ZEI, ZES,ZEG
+!9 : VRU (vitesse radiale)
+!10-13 : AER, AEI, AES, AEG
+!14-17: ATR, ATI, ATS, ATG
+!18-20: RhoHV, PhiDP, DeltaHV
+
 REAL,   DIMENSION(:,:,:,:,:,:,:),ALLOCATABLE :: ZAELOC ! local attenuation
 REAL,   DIMENSION(:,:,:),ALLOCATABLE :: ZAETOT ! 1: total attenuation, 2: // vertical
-REAL :: ZAERINT,ZAEIINT,ZAESINT,ZAEGINT ! 1-4: total A_i
+REAL :: ZAERINT,ZAEIINT,ZAESINT,ZAEGINT ! total attenuation horizontal
+REAL :: ZAVRINT,ZAVSINT,ZAVGINT ! total attenuation vertical 
 !
 REAL,DIMENSION(:),ALLOCATABLE :: ZX,ZW ! Gauss-Laguerre points and weights
 !
@@ -158,23 +191,208 @@ REAL :: ZFRAC_ICE,ZD,ZDE ! auxiliary variables
 REAL :: ZQSCA
 REAL,DIMENSION(2) :: ZQEXT
 REAL,DIMENSION(3) :: ZQBACK ! Q_b(HH),Q_b(VV) (backscattering efficiencies at horizontal and vertical polarizations, resp.)
-COMPLEX  :: QM,QMW,QMI,QK,QB ! dielectric parameters
+!REAL :: P=DACOS(-1D0)
+REAL :: ZRHOI ! pristine ice density (from m=a*D**b), 
+REAL :: ZRHOPI=916. !pure ice density (kg/m3)
+COMPLEX :: ZNUM, ZDEN !for calculation of ice dielectri cconstant
+COMPLEX  :: ZQM,ZQMW,ZQMI,ZQK,ZQB, ZEPSI ! dielectric parameters
+REAL :: ZS11_CARRE_R,ZS22_CARRE_R,ZRE_S22S11_R,ZIM_S22S11_R
+REAL :: ZS11_CARRE_I,ZS22_CARRE_I,ZRE_S22S11_I,ZIM_S22S11_I
+REAL :: ZS11_CARRE_S,ZS22_CARRE_S,ZRE_S22S11_S,ZIM_S22S11_S
+REAL :: ZS11_CARRE_G,ZS22_CARRE_G,ZRE_S22S11_G,ZIM_S22S11_G
+REAL :: ZS11_CARRE_T,ZS22_CARRE_T,ZRE_S22S11_T,ZIM_S22S11_T
+REAL :: ZRE_S22FMS11F,ZIM_S22FT,ZIM_S11FT 
+
+REAL :: ZM
 !
 INTEGER  :: INBRAD,IIELV,INBAZIM,INBSTEPMAX,INPTS_H,INPTS_V ! sizes of the arrays
 INTEGER  :: IEL
-INTEGER  :: JI,JL,JEL,JAZ,JH,JV,JJ ! Loop variables of control
+INTEGER  :: JI,JL,JEL,JAZ,JH,JV,JJ,JT ! Loop variables of control
 REAL :: ZLB ! depolarization factor along the spheroid symmetry axis
-REAL :: XCXI ! should be defined with other parameters of microphysical scheme
-REAL :: ZCR=0.,ZCI=0.,ZCS=0.,ZCG=0. ! coefficients to take into account fall speeds when simulating Doppler winds
+REAL :: ZCXI=0. ! should be defined with other parameters of microphysical scheme
+REAL :: ZCR,ZCI,ZCS,ZCG ! coefficients to take into account fall speeds when simulating Doppler winds
 REAL, DIMENSION(:,:,:,:),ALLOCATABLE :: ZCONC_BIN
-INTEGER :: IVDOP,IMAX
+INTEGER :: IVDOP,IMAX,IRHOHV,IPHIDP,IDELTAHV
+INTEGER :: IRHR,IRHS,IRHG,IZDA,IZDS,IZDG,IKDR,IKDS,IKDG
 LOGICAL :: LPART_MASK ! indicates a partial mask along the beam
-INTEGER,PARAMETER :: IZER=5,IZEI=6,IZES=7,IZEG=8, IAER=10,IAEI=11,IAES=12,IAEG=13, IATR=14,IATI=15,IATS=16,IATG=17
-!-------------------------------------------------------------------------------
+INTEGER,PARAMETER :: IZER=5,IZEI=6,IZES=7,IZEG=8
+INTEGER,PARAMETER :: IAER=10,IAEI=11,IAES=12,IAEG=13
+INTEGER,PARAMETER :: IAVR=14,IAVI=15,IAVS=16,IAVG=17
+INTEGER,PARAMETER :: IATR=18,IATI=19,IATS=20,IATG=21
+
+!for ZSNR threshold
+REAL ::ZDISTRAD,ZSNR,ZSNR_R,ZSNR_S,ZSNR_I,ZSNR_G,ZZHH,ZZE_R,ZZE_I,ZZE_S,ZZE_G
+LOGICAL :: GTHRESHOLD_V, GTHRESHOLD_Z,GTHRESHOLD_ZR,GTHRESHOLD_ZI,GTHRESHOLD_ZS,GTHRESHOLD_ZG
+
+!--------- TO READ T-MATRIX TABLE --------
+CHARACTER(LEN=6) :: YBAND
+CHARACTER(LEN=1) ::YTYPE
+CHARACTER(LEN=1),DIMENSION(4) :: YTAB_TYPE
+CHARACTER(LEN=25),DIMENSION(4) :: YFILE_COEFINT
+
+REAL,DIMENSION(4) :: ZELEV_MIN,ZELEV_MAX,ZELEV_STEP,&
+ZTC_MIN,ZTC_MAX,ZTC_STEP,ZFW_MIN,ZFW_MAX,ZFW_STEP
+INTEGER :: IRESP,ILINE,INB_M
+INTEGER,DIMENSION(4) :: INB_ELEV,INB_TC,INB_FW,INB_LINE
+
+REAL, DIMENSION(:),ALLOCATABLE :: ZTC_T_R,        ZTC_T_S,        ZTC_T_G,        ZTC_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZELEV_T_R,      ZELEV_T_S,      ZELEV_T_G,      ZELEV_T_W
+REAL, DIMENSION(:),ALLOCATABLE ::                 ZFW_T_S,        ZFW_T_G,        ZFW_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZM_T_R,         ZM_T_S,         ZM_T_G,         ZM_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZS11_CARRE_T_R, ZS11_CARRE_T_S, ZS11_CARRE_T_G, ZS11_CARRE_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZS22_CARRE_T_R, ZS22_CARRE_T_S, ZS22_CARRE_T_G, ZS22_CARRE_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZRE_S22S11_T_R, ZRE_S22S11_T_S, ZRE_S22S11_T_G, ZRE_S22S11_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZIM_S22S11_T_R, ZIM_S22S11_T_S, ZIM_S22S11_T_G, ZIM_S22S11_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZIM_S22FT_T_R,  ZIM_S22FT_T_S,  ZIM_S22FT_T_G,  ZIM_S22FT_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZIM_S11FT_T_R,  ZIM_S11FT_T_S,  ZIM_S11FT_T_G,  ZIM_S11FT_T_W
+REAL, DIMENSION(:),ALLOCATABLE :: ZRE_S22FMS11FT_T_R, ZRE_S22FMS11FT_T_S, ZRE_S22FMS11FT_T_G, ZRE_S22FMS11FT_T_W
+
+INTEGER,DIMENSION(16):: ITMAT
+REAL:: ZELEV_RED,ZTC_RED,ZM_RED,ZFW_RED
+INTEGER :: JIND
+REAL,DIMENSION(7,16) :: KMAT_COEF !matrice contenant tous les coef interpolés
+                                !pour chaque val inf et sup de ELEV_t
+REAL :: ZEXPM_MIN, ZEXPM_STEP, ZEXPM_MAX,ZM_MIN
+REAL :: ZFW !water fraction inside melting graupel (ZFW=0 for rain, snow and dry graupel). used only with NDIFF=7: Tmatrix
+INTEGER :: ILUOUT0,IUNIT
+!
+! MODIF GAELLE POUR LIMA
 !
+LOGICAL :: GLIMA
+REAL,DIMENSION(4) :: ZCC_MIN,ZCC_MAX, ZCC_STEP
+INTEGER,DIMENSION(4):: INB_CC
+REAL, DIMENSION(:),ALLOCATABLE :: ZCC_T_R
+REAL :: ZCC_RED
+LOGICAL :: GCALC
+REAL :: ZCC
+REAL,   DIMENSION(:,:,:,:,:,:),ALLOCATABLE :: ZM_6D,ZCC_6D
+REAL :: ZC
+!
+REAL ::  ZCCR,ZLBR,ZLBEXR,ZDR,ZALPHAR,ZNUR,ZBR
+REAL ::  ZCCS,ZLBS,ZLBEXS,ZDS,ZALPHAS,ZNUS,ZAS,ZBS,ZCXS
+REAL ::  ZCCG,ZLBG,ZLBEXG,ZDG,ZALPHAG,ZNUG,ZAG,ZBG,ZCXG
+REAL ::       ZLBI,ZLBEXI,ZDI,ZALPHAI,ZNUI,ZAI,ZBI
+REAL,DIMENSION(:),ALLOCATABLE :: ZRTMIN
 !
 !*       1.     INITIALISATION 
-!   	        --------------
+!--------------
+! ouverture fichier listing
+CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+! 
+IF (PRESENT(PCR_RAY)) THEN
+  GLIMA=.TRUE.
+ELSE
+  GLIMA=.FALSE.
+ENDIF
+!
+!
+!
+  ZS11_CARRE_R=0
+  ZS22_CARRE_R=0
+  ZRE_S22S11_R=0
+  ZIM_S22S11_R=0
+  ZS11_CARRE_I=0
+  ZS22_CARRE_I=0
+  ZRE_S22S11_I=0
+  ZIM_S22S11_I=0
+  ZS11_CARRE_S=0
+  ZS22_CARRE_S=0
+  ZRE_S22S11_S=0
+  ZIM_S22S11_S=0
+  ZS11_CARRE_G=0
+  ZS22_CARRE_G=0
+  ZRE_S22S11_G=0
+  ZIM_S22S11_G=0
+! Initialisation varibales microphysiques
+!IF (GLIMA) THEN ! LIMA
+!  ZLBR=XLBR_L
+!  ZLBEXR=XLBEXR_L
+!  ZDR=XDR_L
+!  ZALPHAR=XALPHAR_L
+!  ZNUR=XNUR_L
+!  ZBR=XBR_L
+!  ZCCS=XCCS_L
+!  ZCXS=XCXS_L
+!  ZLBS=XLBS_L
+!  ZLBEXS=XLBEXS_L
+!  ZDS=XDS_L
+!  ZALPHAS=XALPHAS_L
+!  ZNUS=XNUS_L
+!  ZAS=XAS_L
+!  ZBS=XBS_L
+!  ZCCG=XCCG_L
+!  ZCXG=XCXG_L
+!  ZLBG=XLBG_L
+!  ZLBEXG=XLBEXG_L
+!  ZDG=XDG_L
+!  ZALPHAG=XALPHAG_L
+!  ZNUG=XNUG_L
+!  ZAG=XAG_L
+!  ZBG=XBG_L
+!  ZLBI=XLBI_L
+!  ZLBEXI=XLBEXI_L
+!  ZDI=XDI_L
+!  ZALPHAI=XALPHAI_L
+!  ZNUI=XNUI_L
+!  ZAI=XAI_L
+!  ZBI=XBI_L
+!  ALLOCATE(ZRTMIN(SIZE(XRTMIN_L)))
+!  ZRTMIN=XRTMIN_L
+!ELSE ! ICE3
+  ZCCR=XCCR_I
+  ZLBR=XLBR_I
+  ZLBEXR=XLBEXR_I
+  ZDR=XDR_I
+  ZALPHAR=XALPHAR_I
+  ZNUR=XNUR_I
+  ZBR=XBR_I
+  ZCCS=XCCS_I
+  ZCXS=XCXS_I
+  ZLBS=XLBS_I
+  ZLBEXS=XLBEXS_I
+  ZDS=XDS_I
+  ZALPHAS=XALPHAS_I
+  ZNUS=XNUS_I
+  ZAS=XAS_I
+  ZBS=XBS_I
+  ZCCG=XCCG_I
+  ZCXG=XCXG_I
+  ZLBG=XLBG_I
+  ZLBEXG=XLBEXG_I
+  ZDG=XDG_I
+  ZALPHAG=XALPHAG_I
+  ZNUG=XNUG_I
+  ZAG=XAG_I
+  ZBG=XBG_I
+  ZLBI=XLBI_I
+  ZLBEXI=XLBEXI_I
+  ZDI=XDI_I
+  ZALPHAI=XALPHAI_I
+  ZNUI=XNUI_I
+  ZAI=XAI_I
+  ZBI=XBI_I
+  ALLOCATE(ZRTMIN(SIZE(XRTMIN_I)))
+  ZRTMIN=XRTMIN_I
+!ENDIF
+IF (LATT) THEN
+  IRHOHV=22 !au lieu de 18:
+            !"ZHH","ZDR","KDP","CSR","ZER","ZEI","ZES","ZEG","VRU"
+            !"AER","AEI","AES","AEG","AVR","AVI","AVS","AVG","ATR","ATI","ATS","ATG"
+ELSE
+  IRHOHV=10
+END IF
+IPHIDP=IRHOHV+1
+IDELTAHV=IPHIDP+1
+IRHR=IDELTAHV+1
+IRHS=IRHR+1
+IRHG=IRHS+1
+IZDA=IRHG+1
+IZDS=IZDA+1
+IZDG=IZDS+1
+IKDR=IZDG+1
+IKDS=IKDR+1
+IKDG=IKDS+1
+
 INBRAD=SIZE(PT_RAY,1)
 IIELV=SIZE(PT_RAY,2)
 INBAZIM=SIZE(PT_RAY,3)
@@ -184,609 +402,1316 @@ INPTS_V=SIZE(PT_RAY,6)
 !
 ! Initialisation for radial winds
 IF(LFALL) THEN
-   ZCR=XCR
-   ZCI=XC_I
-   ZCS=XCS
-   ZCG=XCG
+!  IF (GLIMA) THEN
+!    ZCR=XCR_L
+!    ZCI=XC_I_L
+!    ZCS=XCS_L
+!    ZCG=XCG_L
+!  ELSE
+    ZCR=XCR_I 
+    ZCI=XC_I_I
+    ZCS=XCS_I
+    ZCG=XCG_I
+!  ENDIF
+ELSE
+  ZCR=0.
+  ZCI=0.
+  ZCS=0.
+  ZCG=0.
 END IF
 
+! Calculation of nodes and weights for the Gauss-Laguerre quadrature
+! for Mie and T-matrix and RG
 IF(NDIFF/=0) THEN
-   ALLOCATE(ZX(NPTS_GAULAG),ZW(NPTS_GAULAG))
-   CALL GAULAG(NPTS_GAULAG,ZX,ZW) ! for Mie and T-matrix and RG
+  ALLOCATE(ZX(NPTS_GAULAG),ZW(NPTS_GAULAG)) !NPTS_GAULAG : number of points for the quadrature
+  CALL GAULAG(NPTS_GAULAG,ZX,ZW)
 END IF
 !
-IVDOP=9
+IVDOP=9 !index of Doppler Velocity (VRU) in ZREFL
 IMAX=SIZE(PZE,5)
+WRITE(ILUOUT0,*) "-----------------"
+WRITE(ILUOUT0,*) "Radar scattering"
+WRITE(ILUOUT0,*) "-----------------"
+WRITE(ILUOUT0,*) 'Nombre de variables dans PZE: ',IMAX
+
 IF(.NOT.LWREFL) IMAX=IMAX+1
+
 ALLOCATE(ZREFL(INBRAD,IIELV,INBAZIM,INBSTEPMAX,INPTS_H,INPTS_V,IMAX))
 ZREFL(:,:,:,:,:,:,:)=0.
 IF(LATT) THEN
-   ZREFL(:,:,:,:,:,:,IATR:IATG)=1.
+  ZREFL(:,:,:,:,:,:,IATR:IATG)=1.
 END IF
 PZE(:,:,:,:,:)=0.
 IF (LATT)THEN
-   ALLOCATE(ZAELOC(INBRAD,IIELV,INBAZIM,INBSTEPMAX,INPTS_H,INPTS_V,2))
-   ALLOCATE(ZAETOT(INPTS_H,INPTS_V,2))
-   ZAELOC(:,:,:,:,:,:,:)=0. ! initialization of attenuation stuff (alpha_e for first gate)
-   ZAETOT(:,:,:)=1. ! initialization of attenuation stuff (total attenuation)
+  ALLOCATE(ZAELOC(INBRAD,IIELV,INBAZIM,INBSTEPMAX,INPTS_H,INPTS_V,2))
+  ALLOCATE(ZAETOT(INPTS_H,INPTS_V,2))
+  ZAELOC(:,:,:,:,:,:,:)=0. ! initialization of attenuation stuff (alpha_e for first gate)
+  ZAETOT(:,:,:)=1. ! initialization of attenuation stuff (total attenuation)
 END IF
-WRITE(0,*) 'BEFORE LOOP DIFFUSION'
+WRITE(ILUOUT0,*) 'BEFORE LOOP DIFFUSION'
 
 IF(LWBSCS) THEN
-   ALLOCATE(ZCONC_BIN(INBRAD,IIELV,INBAZIM,INBSTEPMAX))
-   ZCONC_BIN(:,:,:,:)=0.
+  ALLOCATE(ZCONC_BIN(INBRAD,IIELV,INBAZIM,INBSTEPMAX))
+  ZCONC_BIN(:,:,:,:)=0.
 END IF
 
-! LOOP OVER EVERYTHING
-DO JI=1,INBRAD  
-   IEL=NBELEV(JI)
-   DO JEL=1,IEL  
-      DO JAZ=1,INBAZIM 
-         DO JH=1,INPTS_H
-            DO JV=1,INPTS_V ! we go down to check partial masks
-               IF(LATT) THEN
-                  ZAERINT=1.
-                  ZAEIINT=1.
-                  ZAESINT=1.
-                  ZAEGINT=1.
-               END IF
-               LPART_MASK=.FALSE.
-               LOOPJL: DO JL=1,INBSTEPMAX
-                  ! REINDENTING FOR READIBILITY
-IF(LPART_MASK) THEN ! THIS RAY IS MASKED
-   ZREFL(JI,JEL,JAZ,JL:INBSTEPMAX,JH,JV,1)=0. 
-   EXIT LOOPJL
-ELSE
-   ! if not underground or outside of the MESO-NH domain and rain 
-   IF(PT_RAY(JI,JEL,JAZ,JL,JH,JV) /= -XUNDEF) THEN
+WRITE(ILUOUT0,*) "XCCR:",ZCCR
+WRITE(ILUOUT0,*) "XLBR:",ZLBR
+WRITE(ILUOUT0,*) "XLBEXR:",ZLBEXR
+
+WRITE(ILUOUT0,*) "XCCS:",ZCCS
+WRITE(ILUOUT0,*) "XLBS:",ZLBS
+WRITE(ILUOUT0,*) "XLBEXS:",ZLBEXS
+
+WRITE(ILUOUT0,*) "XCCG:",ZCCG
+WRITE(ILUOUT0,*) "XLBG:",ZLBG
+WRITE(ILUOUT0,*) "XLBEXG:",ZLBEXG
+
 !
-!---------------------------------------------------------------------------------------------------
-!*       2.    RAINDROPS
-!              ---------
+IF (GLIMA .AND. NDIFF==7) THEN
+  IF (ZALPHAR/=1 .AND. ZNUR /=2.) THEN
+    WRITE(ILUOUT0,*) " ERROR : TMATRICE TABLE ARE MADE WITH XALPHAR=1 XNUR=2"
+    WRITE(ILUOUT0,*) " FOR CCLOUD=LIMA. PLEASE CHANGE THIS VALUES OR PROVIDE "
+    WRITE(ILUOUT0,*) " NEW TMATRICE TABLES "
+    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+    CALL ABORT
+    STOP
+  ENDIF
+ELSE
+  IF (ZALPHAR/=1 .AND. ZNUR /=1.) THEN
+    WRITE(ILUOUT0,*) " ERROR : TMATRICE TABLE ARE MADE WITH XALPHAR=1 XNUR=1"
+    WRITE(ILUOUT0,*) " FOR CCLOUD=ICE3. PLEASE CHANGE THIS VALUEs OR PROVIDE "
+    WRITE(ILUOUT0,*) " NEW TMATRICE TABLES "
+    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+    CALL ABORT
+    STOP
+  ENDIF
+ENDIF
+
+!---------------------------------------------
+! LOOP OVER EVERYTHING
+!--------------------------------------------
+IF(NDIFF==7) THEN
+  YTAB_TYPE(1)='r'
+  YTAB_TYPE(2)='s'
+  YTAB_TYPE(3)='g'
+  YTAB_TYPE(4)='w'
 !
-      IF(SIZE(PR_RAY,1) > 0) THEN
-         IF(PR_RAY(JI,JEL,JAZ,JL,JH,JV) > XRTMIN(3)) THEN  
-            QMW=SQRT(QEPSW(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XLIGHTSPEED/XLAM_RAD(JI)))
-            ZLBDA=XLBR*(PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PR_RAY(JI,JEL,JAZ,JL,JH,JV))**XLBEXR
-            !                        ZLBDA=XLBR*(6E-3)**XLBEXR
-            QK=(QMW**2-1.)/(QMW**2+2.)
-            ! DIFFUSION
-            IF(NDIFF==0.OR.NDIFF==4) THEN ! Rayleigh
-               ZREFLOC(1:2)=1.E18*XCCR*ZLBDA**(ZCXR-6.)*MOMG(XALPHAR,XNUR,6.)
-               IF(LWREFL) THEN ! weighting by reflectivities
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=-ZCR*SIN(PELEV(JI,JEL,JL,JV)) &
-                       *1.E18*XCCR*ZLBDA**(ZCXR-6.-XDR)*MOMG(XALPHAR,XNUR,6.+XDR)
-               ELSE 
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=XCCR*ZLBDA**ZCXR
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=-ZCR*SIN(PELEV(JI,JEL,JL,JV)) &
-                       *XCCR*ZLBDA**(ZCXR-XDR)*MOMG(XALPHAR,XNUR,XDR)
-               END IF
-               IF(LATT) THEN
-                  IF(NDIFF==0) THEN ! Rayleigh 3rd order
-                     ZAETMP(:)=XCCR*ZLBDA**ZCXR*(                                         &
-                          XPI**2     /XLAM_RAD(JI)   *AIMAG(QK)                           &
-                          *                MOMG(XALPHAR,XNUR,XBR)      /ZLBDA**XBR)
-                  ELSE              ! Rayleigh 6th order
-                     ZAETMP(:)=XCCR*ZLBDA**ZCXR*(                                         &
-                          XPI**2     /XLAM_RAD(JI)   *AIMAG(QK)                           &
-                          *                MOMG(XALPHAR,XNUR,XBR)      /ZLBDA**XBR        &
-                          +XPI**4/15./XLAM_RAD(JI)**3*AIMAG(QK**2*(QMW**4+27.*QMW**2+38.) &
-                          /(2.*QMW**2+3.))*MOMG(XALPHAR,XNUR,5.*XBR/3.)/ZLBDA**(5.*XBR/3.)&
-                          +2.*XPI**5/3. /XLAM_RAD(JI)**4*REAL(QK**2)                      &
-                          *                MOMG(XALPHAR,XNUR,2.*XBR)   /ZLBDA**(2.*XBR))
-                  END IF
-               END IF
-            ELSE ! MIE OR T-MATRIX
-               ZREFLOC(:)=0.
-               IF(LATT) ZAETMP(:)=0.
-               DO JJ=1,NPTS_GAULAG ! Gauss-Laguerre quadrature
-                  SELECT CASE(NDIFF)
-                  CASE(1) ! MIE
-                     CALL BHMIE(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA,QMW,ZQEXT(1),ZQSCA,ZQBACK(1))
-                     ZQBACK(2)=ZQBACK(1)
-                     ZQBACK(3)=0.
-                  CASE(2) ! NDIFF==2 T-matrix
-                     ! G. TANGUY Allocation des Tableaux de MODD_TMAT
-                     ALLOCATE(XRT11(NPN6,NPN4,NPN4))
-                     ALLOCATE(XRT12(NPN6,NPN4,NPN4))
-                     ALLOCATE(XRT21(NPN6,NPN4,NPN4))
-                     ALLOCATE(XRT22(NPN6,NPN4,NPN4))
-                     ALLOCATE(XIT11(NPN6,NPN4,NPN4))
-                     ALLOCATE(XIT12(NPN6,NPN4,NPN4))
-                     ALLOCATE(XIT21(NPN6,NPN4,NPN4))
-                     ALLOCATE(XIT22(NPN6,NPN4,NPN4))
-                     ALLOCATE(XTR1(NPN2,NPN2))
-                     ALLOCATE(XTI1(NPN2,NPN2))
-                     ALLOCATE(XQR(NPN2,NPN2))
-                     ALLOCATE(XQI(NPN2,NPN2))
-                     ALLOCATE(XRGQR(NPN2,NPN2))
-                     ALLOCATE(XRGQI(NPN2,NPN2))
-                     ALLOCATE(XJ(NPNG2,NPN1))
-                     ALLOCATE(XY(NPNG2,NPN1))
-                     ALLOCATE(XJR(NPNG2,NPN1))
-                     ALLOCATE(XJI(NPNG2,NPN1))
-                     ALLOCATE(XDJ(NPNG2,NPN1))
-                     ALLOCATE(XDY(NPNG2,NPN1))
-                     ALLOCATE(XDJR(NPNG2,NPN1))
-                     ALLOCATE(XDJI(NPNG2,NPN1))
-
-                     CALL TMD(&!2,&       !GTTE=1 SPHERES ; =2 OBLATE
-                          ZX(JJ)/ZLBDA,&!Deq (m)
-                          XLAM_RAD(JI),&!LAM: radar wavelength
-                          REAL(QMW),&   !MRR: real part of refractive index
-                          AIMAG(QMW),&  !MRI: imaginary part of refractive index (>=0)
-                          NDGS,&       !NDGS: number of division points in computing integrals over the surface particles (default=2)
-                          2,& ! gouttes oscillantes ? (oui=1,non=2)
-                          PELEV(JI,JEL,JL,JV)*180./XPI,&! elevation in deg
-                          ZQBACK(1),ZQBACK(2),ZQBACK(3),ZQEXT(1),&
-                          1./ARF(ZX(JJ)/ZLBDA))         ! axis ratio function
-                     !                                 ZQBACK(3)=ZQBACK(3)/ZLBDA**2
-                     ZQBACK(3)=12.*ZQBACK(3)/ZX(JJ)**2/XPI
-
-
-                  ! DEALLOACTION DES TABLEAUX
-                     DEALLOCATE(XRT11)
-                     DEALLOCATE(XRT12)
-                     DEALLOCATE(XRT21)
-                     DEALLOCATE(XRT22)
-                     DEALLOCATE(XIT11)
-                     DEALLOCATE(XIT12)
-                     DEALLOCATE(XIT21)
-                     DEALLOCATE(XIT22)
-                     DEALLOCATE(XTR1)
-                     DEALLOCATE(XTI1)
-                     DEALLOCATE(XQR)
-                     DEALLOCATE(XQI)
-                     DEALLOCATE(XRGQR)
-                     DEALLOCATE(XRGQI)
-                     DEALLOCATE(XJ)
-                     DEALLOCATE(XY)
-                     DEALLOCATE(XJR)
-                     DEALLOCATE(XJI)
-                     DEALLOCATE(XDJ)
-                     DEALLOCATE(XDY)
-                     DEALLOCATE(XDJR)
-                     DEALLOCATE(XDJI)
-
-
-                  CASE(3) ! NDIFF==3 RG
-                     IF(ZX(JJ)/ZLBDA<.5E-3) THEN
-                        ZLB=1./3.
-                     ELSE
-                        ZLB=1./(ARF(ZX(JJ)/ZLBDA))**2-1. ! f**2
-                        ZLB=(1.+ZLB)/ZLB*(1.-ATAN(SQRT(ZLB))/SQRT(ZLB)) ! lambda_b
-                        if(ZX(JJ)/ZLBDA>16.61E-3) print*, 'Negative axis ratio; reduce NPTS_GAULAG.'
-                     END IF
-                     ZQBACK(1)=4.*(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA)**4&
-                          *ABS((QMW**2-1.)/3./(1.+.5*(1.-ZLB)*(QMW**2-1.)))**2
-                     ZQBACK(2)=4.*(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA)**4*ABS((QMW**2-1.)/3.*&
-                          (SIN(PELEV(JI,JEL,JL,JV))**2/(1.+.5*(1.-ZLB)*(QMW**2-1.))+& ! PELEV=PI+THETA_I
-                          COS(PELEV(JI,JEL,JL,JV))**2/(1.+ZLB*(QMW**2-1.))) )**2 !
-                     ZQBACK(3)=ZX(JJ)/ZLBDA**3*REAL((QMW**2-1.)**2*(3.*ZLB-1.)/(2.+(QMW**2-1.)*(ZLB+1.) &
-                          +ZLB*(1.-ZLB)*(QMW**2-1.)**2))
-                     IF(LATT) THEN
-                        ZQEXT(1)=4.*(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA)*AIMAG((QMW**2-1.)/3./(1.+.5*(1.-ZLB)*(QMW**2-1.)))
-                        ZQEXT(2)=4.*(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA)*AIMAG((QMW**2-1.)/3.*&
-                             (SIN(PELEV(JI,JEL,JL,JV))**2/(1.+.5*(1.-ZLB)*(QMW**2-1.))+& ! PELEV=PI+THETA_I
-                             COS(PELEV(JI,JEL,JL,JV))**2/(1.+ZLB*(QMW**2-1.))))
-                     END IF
-                  END SELECT
-                  ZREFLOC(1:3)=ZREFLOC(1:3)+ZQBACK(1:3)*ZX(JJ)**2*ZW(JJ)
-                  ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(2+XDR)*ZW(JJ)
-                  IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**2*ZW(JJ)
-               END DO ! end loop Gauss-Laguerre quadrature
-               ZREFLOC(1:2)=1.E18*ZREFLOC(1:2)*(XLAM_RAD(JI)/XPI)**4/.93*XCCR/4./ZLBDA**3
-               ZREFLOC(3)=ZREFLOC(3)*XPI**2/6./XLAM_RAD(JI)*XCCR/ZLBDA &
-                    *180.E3/XPI ! (in deg/km)
-
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
-                    -ZCR*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4) &
-                    *1.E18*(XLAM_RAD(JI)/XPI)**4/.93*XCCR/4./ZLBDA**(3+XDR)
-               IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*XCCR*ZLBDA**(ZCXR-2.*XBR/3.)/(4.*GAMMA(XNUR))
-            END IF
-            ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)+ZREFLOC(1:3)
-            ZREFL(JI,JEL,JAZ,JL,JH,JV,IZER)=ZREFLOC(1) ! Z_e due to raindrops
-            IF(LATT) THEN
-               ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)=ZAETMP(:)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IAER)=ZAETMP(1)
-               IF(JL>1) ZAERINT=ZAERINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAER)*XSTEP_RAD)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IZER)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZER)*ZAERINT ! Z_r attenuated
-            END IF
-         END IF
-         ! Total attenuation even if no hydrometeors
-         IF(LATT.AND.JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IATR)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IATR) &
-              *EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAER)*XSTEP_RAD)
-      END IF
-      
-      !
-      !---------------------------------------------------------------------------------------------------
-      !*       3.    PRISTINE ICE
-      !              ---------
-      !
-      IF (SIZE(PI_RAY,1)>0)  THEN
-         IF(PI_RAY(JI,JEL,JAZ,JL,JH,JV) > XRTMIN(4) .AND. PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)> 527.82) THEN ! cit > 527.82 otherwise pbs due to interpolation
-            QMI=SQRT(QEPSI(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XLIGHTSPEED/XLAM_RAD(JI)))
-            QK=(QMI**2-1.)/(QMI**2+2.)
-            ZDMELT_FACT=(6.*XAI)/(XPI*.92*XRHOLW)
-            ZEXP=2.*XBI
-            ZLBDA=XLBI*(PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PI_RAY(JI,JEL,JAZ,JL,JH,JV)/ &
-                 PCIT_RAY(JI,JEL,JAZ,JL,JH,JV))**XLBEXI
-            IF(NDIFF==0.OR.NDIFF==3.OR.NDIFF==4) THEN ! Rayleigh or Rayleigh-Gans (pristine ice = sphere)
-               ZREFLOC(1:2)=ZEQICE*.92**2*ZDMELT_FACT**2*1.E18*PCIT_RAY(JI,JEL,JAZ,JL,JH,JV) &
-                    *ZLBDA**(XCXI-ZEXP)*MOMG(XALPHAI,XNUI,ZEXP)
-  						 ZREFLOC(3)=0.
-               IF(LWREFL) THEN ! weighting by reflectivities
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                       -ZCI*SIN(PELEV(JI,JEL,JL,JV))*ZEQICE*.92**2*ZDMELT_FACT**2&
-                       *1.E18*PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)*ZLBDA**(XCXI-ZEXP-XDI)*MOMG(XALPHAI,XNUI,ZEXP+XDI)
-               ELSE 
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)&
-                       +PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)*ZLBDA**XCXI
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                       -ZCI*SIN(PELEV(JI,JEL,JL,JV))&
-                       *PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)*ZLBDA**(XCXI-XDI)*MOMG(XALPHAI,XNUI,XDI)
-               END IF
-               IF(LATT) THEN
-                  IF(NDIFF==0.OR.NDIFF==3) THEN
-                     ZAETMP(:)=PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)*ZLBDA**XCXI*(                 &
-                          ZDMELT_FACT          *XPI**2    /XLAM_RAD(JI)   *AIMAG(QK)       &
-                          *                MOMG(XALPHAI,XNUI,XBI)      /ZLBDA**XBI)
+  ! definition des paramètres de lecture de la table T-matrice
+  ! all mixing ratio
+  ZEXPM_MIN=-7. 
+  ZEXPM_STEP=0.01
+  ZEXPM_MAX=-2. 
+  ZM_MIN=10**ZEXPM_MIN 
+  ! rain
+  ZELEV_MIN(1)=0.0
+  ZELEV_STEP(1)=4.0
+  ZELEV_MAX(1)=12.0
+  ZTC_MIN(1)=-20.0
+  ZTC_STEP(1)=1.0
+  ZTC_MAX(1)=40.0
+  ZFW_MIN(1)=0.0
+  ZFW_STEP(1)=0.1
+  ZFW_MAX(1)=0.0
+  IF (GLIMA) THEN
+    ZCC_MIN(1)=1.8 
+    ZCC_STEP(1)=0.02
+    ZCC_MAX(1)=6
+  ELSE
+    ZCC_MIN(1)=1. 
+    ZCC_STEP(1)=1.
+    ZCC_MAX(1)=1.
+  ENDIF
+  ! snow + graupel
+  ZELEV_MIN(2:3)=0.0
+  ZELEV_STEP(2:3)=12.0
+  ZELEV_MAX(2:3)=12.0
+  ZTC_MIN(2:3)=-70.0
+  ZTC_STEP(2:3)=1.0
+  ZTC_MAX(2:3)=10.0
+  ZFW_MIN(2:3)=0.0
+  ZFW_STEP(2:3)=0.1
+  ZFW_MAX(2:3)=0.0
+  ZCC_MIN(2:3)=1.
+  ZCC_STEP(2:3)=1.
+  ZCC_MAX(2:3)=1.
+  ! wet graupel
+  ZELEV_MIN(4)=0.0
+  ZELEV_STEP(4)=4.0
+  ZELEV_MAX(4)=12.0
+  ZTC_MIN(4)=-10.0
+  ZTC_STEP(4)=1.0
+  ZTC_MAX(4)=10.0
+  ZFW_MIN(4)=0.0
+  ZFW_STEP(4)=0.1
+  ZFW_MAX(4)=1.0
+  ZCC_MIN(4)=1.
+  ZCC_STEP(4)=1.
+  ZCC_MAX(4)=1. 
+
+  DO JT=1,4
+    INB_ELEV(JT)=NINT((ZELEV_MAX(JT)-ZELEV_MIN(JT))/ZELEV_STEP(JT))+1
+    INB_TC(JT)=NINT((ZTC_MAX(JT)-ZTC_MIN(JT))/ZTC_STEP(JT))+1
+    INB_FW(JT)=NINT((ZFW_MAX(JT)-ZFW_MIN(JT))/ZFW_STEP(JT))+1
+    INB_M=NINT((ZEXPM_MAX-ZEXPM_MIN)/ZEXPM_STEP)+1
+    INB_CC(JT)=NINT((ZCC_MAX(JT)-ZCC_MIN(JT))/ZCC_STEP(JT))+1          
+    INB_LINE(JT)=INB_ELEV(JT)*INB_TC(JT)*INB_FW(JT)*INB_M*INB_CC(JT)
+  ENDDO
+ENDIF                                 
+
+!---------------------------------------------
+! LOOP OVER EVERYTHING
+!--------------------------------------------
+ !==============         loop over radars        ================= 
+WRITE(ILUOUT0,*) "INBRAD",INBRAD
+DO JI=1,INBRAD
+  WRITE(ILUOUT0,*) "JI",JI
+  WRITE(ILUOUT0,*) "XLAM_RAD(JI):",XLAM_RAD(JI)
+
+  IF(NDIFF==7) THEN ! If T-MATRIX
+  !---------------------------------------------------------------------------------------------
+  !	  0. LECTURE DES TABLES TMAT POUR PLUIE, NEIGE, GRAUPEL
+  !          en fonction de la bande frequence
+  !---------------------------------------------------------------------------------------------
+    IF ( XLAM_RAD(JI)==0.1062) THEN
+      YBAND='S106.2'     
+    ELSEIF (XLAM_RAD(JI) ==0.0532 ) THEN
+      YBAND='C053.2'
+    ELSEIF (XLAM_RAD(JI)==0.0319 ) THEN
+      YBAND='X031.9'
+    ELSE
+      WRITE(ILUOUT0,*) "ERROR RADAR_SCATTERING"
+      WRITE(ILUOUT0,*) "Tmatrice tables are only available for XLAM_RAD=0.1062"
+      WRITE(ILUOUT0,*) "or XLAM_RAD=0.053.2 or XLAM_RAD=0.031.8"
+      WRITE(ILUOUT0,*) "change XLAM_RAD in namelist or compute new tmatrice table"
+      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+      CALL ABORT
+      STOP
+    ENDIF
+
+    !************ fichiers Min Max Pas et Coef Tmat ***********
+    DO JT=1,4  !types (r, s, g, w)
+  
+      YTYPE=YTAB_TYPE(JT)
+      IF (JT .EQ. 1) THEN
+        IF (GLIMA) THEN
+          YFILE_COEFINT(JT)='TmatCoefInt_LIMA_'//YBAND//YTYPE
+        ELSE
+          YFILE_COEFINT(JT)='TmatCoefInt_ICE3_'//YBAND//YTYPE
+        ENDIF
+      ELSE
+       YFILE_COEFINT(JT)='TmatCoefInt_'//YBAND//YTYPE
+      ENDIF
+      YFILE_COEFINT(JT)=TRIM(ADJUSTL(YFILE_COEFINT(JT)))  
+    ENDDO
+    !lookup tables for rain
+    ALLOCATE (ZTC_T_R(INB_LINE(1)),ZELEV_T_R(INB_LINE(1)),ZCC_T_R(INB_LINE(1)),ZM_T_R(INB_LINE(1)),&
+    ZS11_CARRE_T_R(INB_LINE(1)),ZS22_CARRE_T_R(INB_LINE(1)), ZRE_S22S11_T_R(INB_LINE(1)),ZIM_S22S11_T_R(INB_LINE(1)),&
+    ZRE_S22FMS11FT_T_R(INB_LINE(1)),ZIM_S22FT_T_R(INB_LINE(1)),ZIM_S11FT_T_R(INB_LINE(1)))
+   
+    !lookup tables for snow
+    ALLOCATE (ZTC_T_S(INB_LINE(2)),ZELEV_T_S(INB_LINE(2)),ZFW_T_S(INB_LINE(2)),ZM_T_S(INB_LINE(2)),&
+    ZS11_CARRE_T_S(INB_LINE(2)),ZS22_CARRE_T_S(INB_LINE(2)),ZRE_S22S11_T_S(INB_LINE(2)),ZIM_S22S11_T_S(INB_LINE(2)),&
+    ZRE_S22FMS11FT_T_S(INB_LINE(2)),ZIM_S22FT_T_S(INB_LINE(2)),ZIM_S11FT_T_S(INB_LINE(2)))
+
+    !lookup tables for graupel
+    ALLOCATE (ZTC_T_G(INB_LINE(3)),ZELEV_T_G(INB_LINE(3)),ZFW_T_G(INB_LINE(3)),ZM_T_G(INB_LINE(3)),&
+    ZS11_CARRE_T_G(INB_LINE(3)),ZS22_CARRE_T_G(INB_LINE(3)), ZRE_S22S11_T_G(INB_LINE(3)),ZIM_S22S11_T_G(INB_LINE(3)),&
+    ZRE_S22FMS11FT_T_G(INB_LINE(3)),ZIM_S22FT_T_G(INB_LINE(3)),ZIM_S11FT_T_G(INB_LINE(3)))
+
+    !lookup tables for wet graupel
+    ALLOCATE (ZTC_T_W(INB_LINE(4)),ZELEV_T_W(INB_LINE(4)),ZFW_T_W(INB_LINE(4)),ZM_T_W(INB_LINE(4)),&
+    ZS11_CARRE_T_W(INB_LINE(4)),ZS22_CARRE_T_W(INB_LINE(4)), ZRE_S22S11_T_W(INB_LINE(4)),ZIM_S22S11_T_W(INB_LINE(4)),&
+    ZRE_S22FMS11FT_T_W(INB_LINE(4)),ZIM_S22FT_T_W(INB_LINE(4)),ZIM_S11FT_T_W(INB_LINE(4)))
+
+
+    !=====  Lecture des tables  ===========  
+    
+    6003 FORMAT (E11.4,2X,E9.3,2X,E10.4,2X,E10.4,2X,E12.5,2X,E12.5,2X,&
+                 E12.5,2X,E12.5,2X,E12.5,2X,E12.5,2X,E12.5)
+
+    !rain
+    CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(1),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE=GLOBAL)
+    IF ( IRESP /= 0 ) THEN       
+      WRITE(ILUOUT0,*) "STOP : PROBLEM OPENING FILE : ", YFILE_COEFINT(1)
+      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+      CALL ABORT
+      STOP       
+    ENDIF
+    ILINE=1
+    DO WHILE (ILINE .LE. INB_LINE(1))
+      READ( UNIT=IUNIT,FMT=6003, IOSTAT=IRESP ) ZTC_T_R(ILINE),ZELEV_T_R(ILINE),&
+      ZCC_T_R(ILINE),ZM_T_R(ILINE),ZS11_CARRE_T_R(ILINE),ZS22_CARRE_T_R(ILINE),ZRE_S22S11_T_R(ILINE),&
+      ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE) 
+      ILINE=ILINE+1
+    ENDDO
+    CALL CLOSE_ll(YFILE_COEFINT(1),IOSTAT=IRESP) 
+    WRITE(ILUOUT0,*) "NLIGNE rain",ILINE      
+    ILINE=2
+    WRITE(ILUOUT0,*) "ILINE=",ILINE
+    WRITE(ILUOUT0,*) "ZTC_T_R(ILINE),ZELEV_T_R(ILINE),ZCC_T_R(ILINE)",&
+    ZTC_T_R(ILINE),ZELEV_T_R(ILINE),ZCC_T_R(ILINE)
+    WRITE(ILUOUT0,*) "ZM_T_R(ILINE),ZS11_CARRE_T_R(ILINE),ZS22_CARRE_T_R(ILINE),ZRE_S22S11_T_R(ILINE)",&
+    ZM_T_R(ILINE),ZS11_CARRE_T_R(ILINE),ZS22_CARRE_T_R(ILINE),ZRE_S22S11_T_R(ILINE)
+    WRITE(ILUOUT0,*) "ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE)",&
+    ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE)
+   
+    !snow
+    CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(2),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE=GLOBAL)
+    IF ( IRESP /= 0 ) THEN       
+      WRITE(ILUOUT0,*) "STOP : PROBLEM OPENING FILE : ", YFILE_COEFINT(2)
+      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+      CALL ABORT
+      STOP       
+    ENDIF
+    ILINE=1
+    DO WHILE (ILINE .LE. INB_LINE(2))
+      READ( UNIT=IUNIT,FMT=6003, IOSTAT=IRESP ) ZTC_T_S(ILINE),ZELEV_T_S(ILINE),&
+      ZFW_T_S(ILINE),ZM_T_S(ILINE),ZS11_CARRE_T_S(ILINE),ZS22_CARRE_T_S(ILINE),ZRE_S22S11_T_S(ILINE),&
+      ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE)
+      ILINE=ILINE+1
+    ENDDO
+    CALL CLOSE_ll(YFILE_COEFINT(2),IOSTAT=IRESP) 
+    WRITE(ILUOUT0,*) "NLIGNE snow",ILINE    
+    ILINE=2
+    WRITE(ILUOUT0,*) "ILINE=",ILINE
+    WRITE(ILUOUT0,*) "ZTC_T_S(ILINE),ZELEV_T_S(ILINE),ZFW_T_S(ILINE)",&
+    ZTC_T_S(ILINE),ZELEV_T_S(ILINE),ZFW_T_S(ILINE)
+    WRITE(ILUOUT0,*) "ZM_T_S(ILINE),ZS11_CARRE_T_S(ILINE),ZS22_CARRE_T_S(ILINE),ZRE_S22S11_T_S(ILINE)",&
+    ZM_T_S(ILINE),ZS11_CARRE_T_S(ILINE),ZS22_CARRE_T_S(ILINE),ZRE_S22S11_T_S(ILINE)
+    WRITE(ILUOUT0,*) "ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE)",&
+    ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE)
+ 
+    !graupel
+    CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(3),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE=GLOBAL)
+    IF ( IRESP /= 0 ) THEN       
+      WRITE(ILUOUT0,*) "STOP : PROBLEM OPENING FILE : ", YFILE_COEFINT(3)
+      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+      CALL ABORT
+      STOP       
+    ENDIF
+    ILINE=1
+    DO WHILE (ILINE .LE. INB_LINE(3))
+      READ( UNIT=IUNIT, FMT=6003,IOSTAT=IRESP ) ZTC_T_G(ILINE),ZELEV_T_G(ILINE),&
+      ZFW_T_G(ILINE),ZM_T_G(ILINE),ZS11_CARRE_T_G(ILINE),ZS22_CARRE_T_G(ILINE),ZRE_S22S11_T_G(ILINE),&
+      ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE)
+      ILINE=ILINE+1
+    ENDDO
+    CALL CLOSE_ll(YFILE_COEFINT(3),IOSTAT=IRESP) 
+    WRITE(ILUOUT0,*) "NLIGNE graupel",ILINE    
+    ILINE=2
+    WRITE(ILUOUT0,*) "ILINE=",ILINE
+    WRITE(ILUOUT0,*) "ZTC_T_G(ILINE),ZELEV_T_G(ILINE)",&
+    ZTC_T_G(ILINE),ZELEV_T_G(ILINE)
+    WRITE(ILUOUT0,*) "ZM_T_G(ILINE),ZS11_CARRE_T_G(ILINE),ZS22_CARRE_T_G(ILINE),ZRE_S22S11_T_G(ILINE)",&
+    ZM_T_G(ILINE),ZS11_CARRE_T_G(ILINE),ZS22_CARRE_T_G(ILINE),ZRE_S22S11_T_G(ILINE)
+    WRITE(ILUOUT0,*) "ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE)",&
+    ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE)
+
+    !wet graupel
+    CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(4),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE=GLOBAL)
+    IF ( IRESP /= 0 ) THEN       
+      WRITE(ILUOUT0,*) "STOP : PROBLEM OPENING FILE : ", YFILE_COEFINT(4)
+      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+      CALL ABORT
+      STOP       
+    ENDIF
+    ILINE=1
+    DO WHILE (ILINE .LE. INB_LINE(4))
+      READ( UNIT=IUNIT, FMT=6003,IOSTAT=IRESP ) ZTC_T_W(ILINE),ZELEV_T_W(ILINE),&
+      ZFW_T_W(ILINE),ZM_T_W(ILINE),ZS11_CARRE_T_W(ILINE),ZS22_CARRE_T_W(ILINE),ZRE_S22S11_T_W(ILINE),&
+      ZIM_S22S11_T_W(ILINE),ZRE_S22FMS11FT_T_W(ILINE),ZIM_S22FT_T_W(ILINE),ZIM_S11FT_T_W(ILINE)
+      ILINE=ILINE+1
+    ENDDO
+    CALL CLOSE_ll(YFILE_COEFINT(4),IOSTAT=IRESP) 
+    WRITE(ILUOUT0,*) "NLIGNE wet graupel",ILINE    
+    ILINE=2
+    WRITE(ILUOUT0,*) "ILINE=",ILINE
+    WRITE(ILUOUT0,*) "ZTC_T_W(ILINE),ZELEV_T_W(ILINE)", ZTC_T_W(ILINE),ZELEV_T_W(ILINE)
+    WRITE(ILUOUT0,*) "ZM_T_W(ILINE),ZS11_CARRE_T_W(ILINE),ZS22_CARRE_T_W(ILINE),ZRE_S22S11_T_W(ILINE)",&
+    ZM_T_W(ILINE),ZS11_CARRE_T_W(ILINE),ZS22_CARRE_T_W(ILINE),ZRE_S22S11_T_W(ILINE)
+    WRITE(ILUOUT0,*) "ZIM_S22S11_T_W(ILINE),ZRE_S22FMS11FT_T_W(ILINE),ZIM_S22FT_T_W(ILINE),ZIM_S11FT_T_W(ILINE)",&
+    ZIM_S22S11_T_W(ILINE),ZRE_S22FMS11FT_T_W(ILINE),ZIM_S22FT_T_W(ILINE),ZIM_S11FT_T_W(ILINE)
+
+  ENDIF !END IF T-MATRIX => END OF LOOKUP TABLE READING
+
+ !==============         loop over elevations      ================= 
+  IEL=NBELEV(JI)
+  WRITE(ILUOUT0,*) "NBELEV(JI)",NBELEV(JI)
+  WRITE(ILUOUT0,*) "INPTS_V",INPTS_V
+  DO JEL=1,IEL  
+    WRITE(ILUOUT0,*) "JEL",JEL
+    JL=1
+    JV=1
+    WRITE(ILUOUT0,*) "JL,JV",JL,JV
+    WRITE(ILUOUT0,*) "PELEV(JI,JEL,JL,JV)*180./XPI",PELEV(JI,JEL,JL,JV)*180./XPI
+    JL=INBSTEPMAX
+    JV=INPTS_V
+    WRITE(ILUOUT0,*) "JL,JV",JL,JV
+    WRITE(ILUOUT0,*) "PELEV(JI,JEL,JL,JV)*180./XPI",PELEV(JI,JEL,JL,JV)*180./XPI
+    !==============         loop over azimuths     ================= 
+    DO JAZ=1,INBAZIM   
+      DO JH=1,INPTS_H !horizontal discretization of the beam
+        DO JV=1,INPTS_V ! vertical discretization (we go down to check partial masks)
+          IF(LATT) THEN
+            ZAERINT=1.
+            ZAVRINT=1.
+            ZAEIINT=1.
+            ZAESINT=1.
+            ZAVSINT=1.
+            ZAEGINT=1.
+            ZAVGINT=1.
+          END IF
+          !Loop over the ranges for one azimuth. If the range is masked, the reflectivity for all the consecutive ranges is set to 0
+          LPART_MASK=.FALSE.
+          LOOPJL: DO JL=1,INBSTEPMAX
+            IF(LPART_MASK) THEN ! THIS RAY IS MASKED
+              ZREFL(JI,JEL,JAZ,JL:INBSTEPMAX,JH,JV,1)=0. 
+              EXIT LOOPJL
+            ELSE
+              ! if not underground or outside of the MESO-NH domain (PT_RAY : temperature interpolated along the rays)             
+              IF(PT_RAY(JI,JEL,JAZ,JL,JH,JV) /= -XUNDEF) THEN
+                !
+                !---------------------------------------------------------------------------------------------------
+                !*       2.    RAINDROPS
+                !              ---------
+                !
+                IF(SIZE(PR_RAY,1) > 0) THEN ! if PR_RAY is available for at least one radar 
+                  !contenu en hydrometeore 
+                  ZM=PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PR_RAY(JI,JEL,JAZ,JL,JH,JV)
+                  IF (GLIMA) ZCC=PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PCR_RAY(JI,JEL,JAZ,JL,JH,JV)
+                  !ZM_MIN : min value for rain content (10**-7 <=> Z=-26 dBZ)mixing ratio
+                  IF (GLIMA) THEN
+                    GCALC=((ZM > ZM_MIN).AND.(ZCC > 10**ZCC_MIN(1)))  
                   ELSE
-                     ZAETMP(:)=PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)*ZLBDA**XCXI*(                 &
-                          ZDMELT_FACT          *XPI**2    /XLAM_RAD(JI)   *AIMAG(QK)       &
-                          *                MOMG(XALPHAI,XNUI,XBI)      /ZLBDA**XBI         &
-                          +ZDMELT_FACT**(5./3.)*XPI**4/15./XLAM_RAD(JI)**3                 &
-                          *AIMAG(QK**2*(QMI**4+27.*QMI**2+38.)                             &
-                          /(2.*QMI**2+3.))*MOMG(XALPHAI,XNUI,5.*XBI/3.)/ZLBDA**(5.*XBI/3.) &
-                          +ZDMELT_FACT**2   *2.*XPI**5/3. /XLAM_RAD(JI)**4*REAL(QK**2)     &
-                          *                MOMG(XALPHAI,XNUI,2.*XBI)   /ZLBDA**(2.*XBI))
-                  END IF
-               END IF
-            ELSE ! MIE OR T-MATRIX
-               ZREFLOC(:)=0.
-               IF(LATT) ZAETMP(:)=0.
-               DO JJ=1,NPTS_GAULAG ! Gauss-Laguerre quadrature
-                  ZD=ZX(JJ)**(1./XALPHAI)/ZLBDA
-                  ZDE=ZDMELT_FACT**(1./3.)*ZD**(XBI/3.)
-                  CALL BHMIE(XPI/XLAM_RAD(JI)*ZDE,QMI,ZQEXT(1),ZQSCA,ZQBACK(1))
-                  ! zqback=4.*(XPI/XLAM_RAD(JI))**4*ABS((QMI**2-1.)/(QMI**2+2.))**2* &
-                  ! ((ZX(JJ)**(1./XALPHAI)/ZLBDA/(XPI*XRHOLW/(6.*XAI))**(1./XBI))**(XBI/3.))**4 !! rayleigh
-                  ZQBACK(2)=ZQBACK(1)
-                  ZQBACK(3)=0.
-                  ZREFLOC(1:3)=ZREFLOC(1:3)+ZQBACK(1:3)*ZX(JJ)**(XNUI-1.+2.*XBI/3./XALPHAI)*ZW(JJ)
-                  ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(XNUI-1.+2.*XBI/3./XALPHAI+XDI/XALPHAI)*ZW(JJ)
-                  IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**(XNUI-1.+2.*XBI/3./XALPHAI)*ZW(JJ)
-               END DO ! END  Gauss-Laguerre quadrature
-               ZREFLOC(1:2)=1.E18*(XLAM_RAD(JI)/XPI)**4*PCIT_RAY(JI,JEL,JAZ,JL,JH,JV) &
-                    *ZLBDA**(XCXI-2.*XBI/3.)/(4.*GAMMA(XNUI)*.93)*ZDMELT_FACT**(2./3.)*ZREFLOC(1:2)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                    +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
-                    -ZCI*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4) &
-                    *1.E18*(XLAM_RAD(JI)/XPI)**4*PCIT_RAY(JI,JEL,JAZ,JL,JH,JV) &
-                    *ZLBDA**(XCXI-2.*XBI/3.-XDI)/(4.*GAMMA(XNUI)*.93)*ZDMELT_FACT**(2./3.)
-                IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)*ZLBDA**(XCXI-2.*XBI/3.)/(4.*GAMMA(XNUI))&
-                    *ZDMELT_FACT**(2./3.)
-            END IF
-            ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)+ZREFLOC(1:3)
-            ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEI)=ZREFLOC(1) ! z_e due to pristine ice
-            
-            IF(LATT) THEN
-               ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)=ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)+ZAETMP(:)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IAEI)=ZAETMP(1)
-               IF(JL>1) ZAEIINT=ZAEIINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAEI)*XSTEP_RAD)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEI)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEI)*ZAEIINT ! Z_i attenuated
-            END IF
-         END IF
-         ! Total attenuation even if no hydrometeors
-         IF(LATT.AND.JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IATI)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IATI) &
-              *EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAEI)*XSTEP_RAD)
-      END IF
-      
-      !---------------------------------------------------------------------------------------------------
-      !*       4.    SNOW
-      !              -----
-      !
-      IF (SIZE(PS_RAY,1)>0)  THEN
-         IF(PS_RAY(JI,JEL,JAZ,JL,JH,JV) > 100000.*XRTMIN(5)) THEN
-            QMI=SQRT(QEPSI(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XLIGHTSPEED/XLAM_RAD(JI)))
-            ZDMELT_FACT=6.*XAS/(XPI*.92*XRHOLW)
-            ZEXP=2.*XBS
-            ZLBDA= XLBS*( PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PS_RAY(JI,JEL,JAZ,JL,JH,JV) )**XLBEXS
-            IF(NDIFF==0.OR.NDIFF==3.OR.NDIFF==4) THEN ! Rayleigh or Rayleigh-Gans 
-               ZREFLOC(1:2)=ZEQICE*.92**2*ZDMELT_FACT**2*1.E18*XCCS*ZLBDA**(XCXS-ZEXP)*MOMG(XALPHAS,XNUS,ZEXP)
-  						 ZREFLOC(3)=0.
-               IF(LWREFL) THEN ! weighting by reflectivities
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                        -ZCS*SIN(PELEV(JI,JEL,JL,JV))*ZEQICE*.92**2*ZDMELT_FACT**2&
-                       *1.E18*XCCS*ZLBDA**(XCXS-ZEXP-XDS)*MOMG(XALPHAS,XNUS,ZEXP+XDS)
-               ELSE
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)+XCCS*ZLBDA**XCXS
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                       -ZCS*SIN(PELEV(JI,JEL,JL,JV))&
-                       *XCCS*ZLBDA**(XCXS-XDS)*MOMG(XALPHAS,XNUS,XDS)
-               END IF
-               IF(LATT) THEN
-                  IF(NDIFF==0.OR.NDIFF==3) THEN
-                     ZAETMP(:)=XCCS*ZLBDA**XCXS*(                                          &
-                          ZDMELT_FACT          *XPI**2    /XLAM_RAD(JI)   *AIMAG(QK)       &
-                          *                MOMG(XALPHAS,XNUS,XBS)      /ZLBDA**XBS)
+                    GCALC=(ZM > ZM_MIN)
+                  ENDIF
+                  IF(GCALC ) THEN 
+                    !calculation of the dielectrique constant (permittitivité relative)
+                    ! for liquid water from function QEPSW
+                    !(defined in mode_fscatter.f90 => equation 3.6 p 64)
+                    YTYPE='r'  
+                    ZQMW=SQRT(QEPSW(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XLIGHTSPEED/XLAM_RAD(JI)))
+                    !ZLBDA : slope distribution parameter (equation 2.6 p 23)  
+                     IF (GLIMA) THEN
+                       ZLBDA=( ZLBR*ZCC / ZM )**ZLBEXR
+                     ELSE
+                       ZLBDA=ZLBR*(ZM)**ZLBEXR
+                     ENDIF
+                    ZQK=(ZQMW**2-1.)/(ZQMW**2+2.) !dielectric factor (3.43 p 56)
+                    ZFW=0 !Liquid water fraction (only for melting graupel => 0 for rain) 
+        
+                    !compteur=compteur+1
+                    !---------------------------------------------------  
+                    ! ------------    DIFFUSION      --------------
+                    !---------------------------------------------------  
+                    !******************************* NDIFF=0 or 4 *********************************
+                    IF(NDIFF==0.OR.NDIFF==4) THEN ! Rayleigh
+                      !ZREFLOC(1:2) : Zh et Zv = int(sigma(D)*N(D)) (eq 1.6 p 16)
+                      !with N(D) formulation (eq 2.2 p 23) and sigma Rayleigh (3.41 p 55)
+                      !MOMG : gamma function defined in mong.f90
+                      !XCCR = 1.E7; XLBEXR = -0.25! Marshall-Palmer law (radar_rain_ice.f90)
+                      !ZCXR : -1 (Xi coeff in equation 2.3 p 23)
+                      ZREFLOC(1:2)=1.E18*ZCCR*ZLBDA**(ZCXR-6.)*MOMG(ZALPHAR,ZNUR,6.)
+                      IF(LWREFL) THEN ! weighting by reflectivities
+                        !ZREFL(...,IVDOP)=radial velocity (IVDOP=9), weighted by reflectivity and
+                        !taking into account raindrops fall velocity (ZCR = 842, XDR = 0.8 -> 2.8 p23 et 2.1 p24)
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=-ZCR*SIN(PELEV(JI,JEL,JL,JV)) &
+                              *1.E18*ZCCR*ZLBDA**(ZCXR-6.-ZDR)*MOMG(ZALPHAR,ZNUR,6.+ZDR)
+                      ELSE 
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZCCR*ZLBDA**ZCXR ! N0j of equation 2.3 p23 (density of particules)
+                        !projection of fall velocity only
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=-ZCR*SIN(PELEV(JI,JEL,JL,JV)) &
+                                                         *ZCCR*ZLBDA**(ZCXR-ZDR)*MOMG(ZALPHAR,ZNUR,ZDR)
+                      END IF ! end weighting by reflectivities
+                      IF(LATT) THEN ! Calculation of Extinction coefficient
+                        IF(NDIFF==0) THEN ! Rayleigh 3rd order : calculation from equations
+                          ! 3.39 p55 : extinction coeff = int(extinction_section(D) * N(D))
+                          ! 2.2 and 2.3 p23: simplification of int(D**p * N(D)) and N0j
+                          ! 3.42 p57 : extinction_section(D)
+                          ZAETMP(:)=ZCCR*ZLBDA**ZCXR*(XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)&
+                                    *MOMG(ZALPHAR,ZNUR,ZBR)/ZLBDA**ZBR)
+                        ELSE  ! Rayleigh 6th order ! eq 3.52 p 58 for extinction coefficient
+                          ZAETMP(:)=ZCCR*ZLBDA**ZCXR*(XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)&
+                                    *MOMG(ZALPHAR,ZNUR,ZBR)/ZLBDA**ZBR             &
+                                    +XPI**4/15./XLAM_RAD(JI)**3*AIMAG(ZQK**2*(ZQMW**4+27.*ZQMW**2+38.) &
+                                    /(2.*ZQMW**2+3.))*MOMG(ZALPHAR,ZNUR,5.*ZBR/3.)/ZLBDA**(5.*ZBR/3.)&
+                                    +2.*XPI**5/3. /XLAM_RAD(JI)**4*REAL(ZQK**2)                      &
+                                    *MOMG(ZALPHAR,ZNUR,2.*ZBR)   /ZLBDA**(2.*ZBR))
+                        END IF
+                      END IF ! end IF(LATT)
+                      ZRE_S22S11_R=0
+                      ZIM_S22S11_R=0
+                      ZS22_CARRE_R=0
+                      ZS11_CARRE_R=0       
+                    !******************************* NDIFF==7 ************************************                 
+                    ELSE IF(NDIFF==7) THEN !T-matrix 
+                      ZREFLOC(:)=0
+                      IF(LATT) ZAETMP(:)=0       
+                      IF (GLIMA) THEN
+                        CALL CALC_KTMAT_LIMA(PELEV(JI,JEL,JL,JV),&
+                                        PT_RAY(JI,JEL,JAZ,JL,JH,JV),ZCC,ZM,&
+                                        ZELEV_MIN(1),ZELEV_MAX(1),ZELEV_STEP(1),&
+                                        ZTC_MIN(1),ZTC_MAX(1),ZTC_STEP(1),&
+                                        ZCC_MIN(1),ZCC_MAX(1),ZCC_STEP(1),&
+                                        ZEXPM_MIN,ZEXPM_MAX,ZEXPM_STEP,&
+                                        ITMAT,ZELEV_RED,ZTC_RED,ZCC_RED,ZM_RED)
+                      ELSE
+                        CALL CALC_KTMAT(PELEV(JI,JEL,JL,JV),&
+                                        PT_RAY(JI,JEL,JAZ,JL,JH,JV),ZFW,ZM,&
+                                        ZELEV_MIN(1),ZELEV_MAX(1),ZELEV_STEP(1),&
+                                        ZTC_MIN(1),ZTC_MAX(1),ZTC_STEP(1),&
+                                        ZFW_MIN(1),ZFW_MAX(1),ZFW_STEP(1),&
+                                        ZEXPM_MIN,ZEXPM_MAX,ZEXPM_STEP,&
+                                        ITMAT,ZELEV_RED,ZTC_RED,ZFW_RED,ZM_RED)
+                      ENDIF
+                      IF (ITMAT(1) .NE. -NUNDEF) THEN 
+                        DO JIND=1,SIZE(KMAT_COEF,2),1
+                          KMAT_COEF(1,JIND)=ZS11_CARRE_T_R(ITMAT(JIND))
+                          KMAT_COEF(2,JIND)=ZS22_CARRE_T_R(ITMAT(JIND))
+                          KMAT_COEF(3,JIND)=ZRE_S22S11_T_R(ITMAT(JIND))
+                          KMAT_COEF(4,JIND)=ZIM_S22S11_T_R(ITMAT(JIND))
+                          KMAT_COEF(5,JIND)=ZRE_S22FMS11FT_T_R(ITMAT(JIND))
+                          KMAT_COEF(6,JIND)=ZIM_S22FT_T_R(ITMAT(JIND))
+                          KMAT_COEF(7,JIND)=ZIM_S11FT_T_R(ITMAT(JIND))
+                        ENDDO
+                        IF (GLIMA) THEN
+                          CALL INTERPOL(ZELEV_RED,ZTC_RED,ZCC_RED,ZM_RED,KMAT_COEF,ZS11_CARRE_R,ZS22_CARRE_R,&
+                                       ZRE_S22S11_R,ZIM_S22S11_R,ZRE_S22FMS11F,ZIM_S22FT,ZIM_S11FT)  
+                        ELSE
+                          CALL INTERPOL(ZELEV_RED,ZTC_RED,ZFW_RED,ZM_RED,KMAT_COEF,ZS11_CARRE_R,ZS22_CARRE_R,&
+                                       ZRE_S22S11_R,ZIM_S22S11_R,ZRE_S22FMS11F,ZIM_S22FT,ZIM_S11FT)
+                        ENDIF
+                      ELSE
+                        ZS11_CARRE_R=0
+                        ZS22_CARRE_R=0
+                        ZRE_S22S11_R=0
+                        ZIM_S22S11_R=0
+                        ZRE_S22FMS11F=0
+                        ZIM_S22FT=0
+                        ZIM_S11FT=0
+                      END IF
+                      ZREFLOC(1)=1.E18*(XLAM_RAD(JI))**4/(XPI**5*.93)*4*XPI*ZS22_CARRE_R
+                      ZREFLOC(2)=1.E18*(XLAM_RAD(JI))**4/(XPI**5*.93)*4*XPI*ZS11_CARRE_R
+                      ZREFLOC(3)=180.E3/XPI*XLAM_RAD(JI)*ZRE_S22FMS11F
+                      IF (GLIMA) THEN
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
+                                                       -ZCR*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(1) &
+                                                       *1.E18*(XLAM_RAD(JI)/XPI)**4/.93*ZCC/4./ZLBDA**(2+ZDR)
+                      ELSE
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
+                                                       -ZCR*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(1) &
+                                                       *1.E18*(XLAM_RAD(JI)/XPI)**4/.93*ZCCR/4./ZLBDA**(3+ZDR)
+                      ENDIF
+                      IF(LATT) THEN
+                        ZAETMP(1)=ZIM_S22FT*XLAM_RAD(JI)*2
+                        ZAETMP(2)=ZIM_S11FT*XLAM_RAD(JI)*2
+                      END IF   
+                    !******************************* NDIFF=1 or 3 *********************************
+                    !       Gauss Laguerre integration
+                    ELSE ! MIE OR T-MATRIX OR RAYLEIGH FOR ELLIPSOIDES
+                      ZREFLOC(:)=0.
+                      IF(LATT) ZAETMP(:)=0.
+                      DO JJ=1,NPTS_GAULAG ! ****** Gauss-Laguerre quadrature
+                        SELECT CASE(NDIFF)
+                        CASE(1) ! *************** NDIFF=1 MIE *****************
+                          ! subroutine BHMIE defined in mode_fscatter.f90
+                          ! calculate extinction coefficient ZQEXT(1),scattering : ZQSCA
+                          ! and backscattering ZQBACK(1) on the horizontal plan (spheroid)
+                          CALL BHMIE(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA,ZQMW,ZQEXT(1),ZQSCA,ZQBACK(1))
+                          ZQBACK(2)=ZQBACK(1) !=> same because sphere
+                          ZQEXT(2)=ZQEXT(1) ! modif Clotilde 23/04/2012
+                          ZQBACK(3)=0. !=> 0 because sphere
+                        CASE(3) !****************** NDIFF==3 RG RAYLEIGH FOR ELLIPSOIDES ***********************
+                          IF(ARF(ZX(JJ)/ZLBDA)==1.) THEN
+                            ZLB=1./3.
+                          ELSE
+                            ZLB=1./(ARF(ZX(JJ)/ZLBDA))**2-1. ! f**2
+                            ZLB=(1.+ZLB)/ZLB*(1.-ATAN(SQRT(ZLB))/SQRT(ZLB)) ! lambda_b
+                            IF(ZX(JJ)/ZLBDA>16.61E-3) PRINT*, 'Negative axis ratio; reduce NPTS_GAULAG.'
+                          END IF
+                          ! equation 3.44 p 56 (ZX**4 instead of ZX**6 but ZQBACK is multiplied after by ZX**2)
+                          ZQBACK(1)=4.*(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA)**4&
+                                    *ABS((ZQMW**2-1.)/3./(1.+.5*(1.-ZLB)*(ZQMW**2-1.)))**2
+                          ! equation 3.45 p 56
+                          ZQBACK(2)=4.*(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA)**4*ABS((ZQMW**2-1.)/3.*&
+                                    (SIN(PELEV(JI,JEL,JL,JV))**2/(1.+.5*(1.-ZLB)*(ZQMW**2-1.))+& ! PELEV=PI+THETA_I
+                                    COS(PELEV(JI,JEL,JL,JV))**2/(1.+ZLB*(ZQMW**2-1.))) )**2 !
+                          ! KDP from equation 3.49
+                          ZQBACK(3)=ZX(JJ)/ZLBDA**3*REAL((ZQMW**2-1.)**2*(3.*ZLB-1.)/(2.+(ZQMW**2-1.)*(ZLB+1.) &
+                          +ZLB*(1.-ZLB)*(ZQMW**2-1.)**2))
+                          IF(LATT) THEN
+                            ! equations 3.48 and 3.49 p57
+                            ZQEXT(1)=4.*(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA)*AIMAG((ZQMW**2-1.)/3./(1.+.5*(1.-ZLB)*(ZQMW**2-1.)))
+                            ZQEXT(2)=4.*(XPI/XLAM_RAD(JI)*ZX(JJ)/ZLBDA)*AIMAG((ZQMW**2-1.)/3.*&
+                                     (SIN(PELEV(JI,JEL,JL,JV))**2/(1.+.5*(1.-ZLB)*(ZQMW**2-1.))+& ! PELEV=PI+THETA_I
+                                     COS(PELEV(JI,JEL,JL,JV))**2/(1.+ZLB*(ZQMW**2-1.))))
+                          END IF
+                        END SELECT !end SELECT NDIFF
+                        !incrementation of the reflectivity and Kdp(1,2,3,4 for Zh, Zv, )
+                        !with the backscattering coefficients for each point of the GAULAG distribution
+                        ! or each diameter D
+                        ZREFLOC(1:3)=ZREFLOC(1:3)+ZQBACK(1:3)*ZX(JJ)**2*ZW(JJ)
+                        ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(2+ZDR)*ZW(JJ)
+                          !same for attenuation with extinction coefficient						
+                        IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**2*ZW(JJ)
+                      END DO ! ****** end loop Gauss-Laguerre quadrature
+               
+                      ZREFLOC(1:2)=1.E18*ZREFLOC(1:2)*(XLAM_RAD(JI)/XPI)**4/.93*ZCCR/4./ZLBDA**3
+                      ZREFLOC(3)=ZREFLOC(3)*XPI**2/6./XLAM_RAD(JI)*ZCCR/ZLBDA &
+                                 *180.E3/XPI ! (in deg/km)		
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
+                                                       -ZCR*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4) &
+                                                       *1.E18*(XLAM_RAD(JI)/XPI)**4/.93*ZCCR/4./ZLBDA**(3+ZDR)
+          
+                      !********* for all cases with Gauss-Laguerre integration
+                      ZRE_S22S11_R=0
+                      ZIM_S22S11_R=0
+                      ZS22_CARRE_R=0
+                      ZS11_CARRE_R=0
+                      IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*ZCCR*ZLBDA**(ZCXR-2.*ZBR/3.)/(4.*GAMMA(ZNUR))
+                    END IF ! ****************** End if for each type of diffusion ************************
+                    !incrementation of ZHH, ZDR and KDP
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)+ZREFLOC(1:3)
+                    ! ZER (Z due to raindrops)
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IZER)=ZREFLOC(1)
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDA)=ZREFLOC(2) !Zvv for ZDR due to rain
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IKDR)=ZREFLOC(3) !Zvv for ZDR due to rain  
+
+                    ! RhoHV due to rain
+                    IF (ZS22_CARRE_R*ZS11_CARRE_R .GT. 0) THEN
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IRHR)=SQRT(ZRE_S22S11_R**2+ZIM_S22S11_R**2)/SQRT(ZS22_CARRE_R*ZS11_CARRE_R)
+                    ELSE
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IRHR)=1
+                    END IF
+                    IF(LATT) THEN
+                      ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)=ZAETMP(:) ! specific attenuation due to rain
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IAER)=ZAETMP(1)
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IAVR)=ZAETMP(2)
+                      ! for ranges over 1, correction of attenuation on reflectivity due to rain
+                      IF(JL>1) THEN
+                        ZAERINT=ZAERINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAER)*XSTEP_RAD)
+                        ZAVRINT=ZAVRINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAVR)*XSTEP_RAD)
+                      END IF
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IZER)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZER)*ZAERINT ! Z_r attenuated
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDA)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDA)*ZAVRINT ! ZVr attenuated		
+                    END IF !end IF(LATT)
+                  END IF 
+                        ! mimimum rainwater mixing ratio
+                        ! Total attenuation even if no hydrometeors (equation 1.7 p 17)
+                  IF(LATT.AND.JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IATR)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IATR) &
+                                          *EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAER)*XSTEP_RAD)
+                END IF ! **************** end RAIN (end IF SIZE(PR_RAY,1) > 0)
+                !
+                !---------------------------------------------------------------------------------------------------
+                !*       3.    PRISTINE ICE
+                !              ---------
+                !
+                IF (SIZE(PI_RAY,1)>0)  THEN
+                  ZM=PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PI_RAY(JI,JEL,JAZ,JL,JH,JV) !ice content
+                  IF (PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)==-XUNDEF .OR. PI_RAY(JI,JEL,JAZ,JL,JH,JV)==-XUNDEF) ZM=-XUNDEF
+                  IF (GLIMA) THEN
+                    ZC=PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)
+                    IF (PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)==-XUNDEF .OR. PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)==-XUNDEF) ZC=-XUNDEF
                   ELSE
-                     ZAETMP(:)=XCCS*ZLBDA**XCXS*(                                          &
-                          ZDMELT_FACT          *XPI**2    /XLAM_RAD(JI)   *AIMAG(QK)       &
-                          *                MOMG(XALPHAS,XNUS,XBS)      /ZLBDA**XBS         &
-                          +ZDMELT_FACT**(5./3.)*XPI**4/15./XLAM_RAD(JI)**3                 &
-                          *AIMAG(QK**2*(QMI**4+27.*QMI**2+38.)                             &
-                          /(2.*QMI**2+3.))*MOMG(XALPHAS,XNUS,5.*XBS/3.)/ZLBDA**(5.*XBS/3.) &
-                          +ZDMELT_FACT**2   *2.*XPI**5/3. /XLAM_RAD(JI)**4*REAL(QK**2)     &
-                          *                MOMG(XALPHAS,XNUS,2.*XBS)   /ZLBDA**(2.*XBS))
-                  END IF
-               END IF
-            ELSE ! MIE OR T-MATRIX
-               ZREFLOC(:)=0.
-               IF(LATT) ZAETMP(:)=0.
-               DO JJ=1,NPTS_GAULAG ! Gauss-Laguerre quadrature
-                  ZD=ZX(JJ)**(1./XALPHAS)/ZLBDA
-                  ZDE=ZDMELT_FACT**(1./3.)*ZD**(XBS/3.)
-                  SELECT CASE(NDIFF)
-                  CASE(1,2) ! MIE or T-matrix but we use Mie (particles are considered as isotropic=spheres)
-                     CALL BHMIE(XPI/XLAM_RAD(JI)*ZDE,QMI,ZQEXT(1),ZQSCA,ZQBACK(1))
-                     ZQBACK(2)=ZQBACK(1)
-                     ZQBACK(3)=0.
-                  END SELECT
-                  ZREFLOC(1:3)=ZREFLOC(1:3)+ZQBACK(1:3)*ZX(JJ)**(XNUS-1.+2.*XBS/3./XALPHAS)*ZW(JJ)
-                  ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(XNUS-1.+2.*XBS/3./XALPHAS+XDS/XALPHAS)*ZW(JJ)
-                  IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**(XNUS-1.+2.*XBS/3./XALPHAS)*ZW(JJ)
-               END DO
-               ZREFLOC(1:2)=1.E18*(XLAM_RAD(JI)/XPI)**4*XCCS &
-                    *ZLBDA**(XCXS-2.*XBS/3.)/(4.*GAMMA(XNUS)*.93)*ZDMELT_FACT**(2./3.)*ZREFLOC(1:2)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                    +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
-                    -ZCS*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4) &
-                    *1.E18*(XLAM_RAD(JI)/XPI)**4*XCCS &
-                    *ZLBDA**(XCXS-2.*XBS/3.-XDS)/(4.*GAMMA(XNUS)*.93)*ZDMELT_FACT**(2./3.)
-               IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*XCCS*ZLBDA**(XCXS-2.*XBS/3.)/(4.*GAMMA(XNUS))&
-                    *ZDMELT_FACT**(2./3.)
-            END IF
-            ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)+ZREFLOC(1:3)
-            ZREFL(JI,JEL,JAZ,JL,JH,JV,IZES)=ZREFLOC(1) ! Z_e due to snow
-            IF(LATT) THEN
-               ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)=ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)+ZAETMP(:)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IAES)=ZAETMP(1)
-               IF(JL>1) ZAESINT=ZAESINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAES)*XSTEP_RAD)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IZES)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZES)*ZAESINT ! Z_s attenuated
-            END IF
-         END IF
-         ! Total attenuation even if no hydrometeors
-         IF(LATT.AND.JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IATS)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IATS) &
-              *EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAES)*XSTEP_RAD)
-      END IF
-      
-      !---------------------------------------------------------------------------------------------------
-      !*       5.    GRAUPEL
-      !              -------
-      !
-      !ZDG=.5 ! from Bringi & Chandrasekar 2001, p. 433
-      IF (SIZE(PG_RAY,1)>0)  THEN
-         IF(PG_RAY(JI,JEL,JAZ,JL,JH,JV) > XRTMIN(6)) THEN
-            QMI=SQRT(QEPSI(MIN(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XTT),XLIGHTSPEED/XLAM_RAD(JI)))
-            QMW=SQRT(QEPSW(MAX(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XTT),XLIGHTSPEED/XLAM_RAD(JI)))
-            ZLBDA=XLBG*(PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PG_RAY(JI,JEL,JAZ,JL,JH,JV))**XLBEXG
-            IF(PT_RAY(JI,JEL,JAZ,JL,JH,JV) > XTT) THEN ! mixture of ice and water
-               ZFRAC_ICE = .85
-            ELSE ! only ice
-               ZFRAC_ICE=1.
-            END IF
-            ZDMELT_FACT=6.*XAG/(XPI*XRHOLW*((1.-ZFRAC_ICE)+ZFRAC_ICE*0.92))
-            ZEXP=2.*XBG
-            QB=2.*QMW**2*(2.*QMI**2*LOG(QMI/QMW)/(QMI**2-QMW**2)-1.)/(QMI**2-QMW**2)
-            QM=SQRT(((1.-ZFRAC_ICE)*QMW**2+ZFRAC_ICE*QB*QMI**2)/(1.-ZFRAC_ICE+ZFRAC_ICE*QB)) ! Bohren & Battan (1982)
-            QK=(QM**2-1.)/(QM**2+2.)
-            IF(NDIFF==0.OR.NDIFF==3.OR.NDIFF==4) THEN
-               ZREFLOC(1:2)=ABS(QK)**2/.93*ZDMELT_FACT**2*1.E18*XCCG*ZLBDA**(XCXG-ZEXP)*MOMG(XALPHAG,XNUG,ZEXP)
-  						 ZREFLOC(3)=0.
-               IF(LWREFL) THEN ! weighting by reflectivities
+                    ZC=PCIT_RAY(JI,JEL,JAZ,JL,JH,JV)
+                  ENDIF
+                  IF(ZM>ZM_MIN .AND. ZC> 527.82) THEN  
+                    ! cit > 527.82 otherwise pbs due to interpolation
+                    !ice dielectric constant (QPESI defined in mode_fscatter, equation 3.65 p 65)
+                    ZEPSI=QEPSI(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XLIGHTSPEED/XLAM_RAD(JI))
+                    ZQMI=SQRT(ZEPSI)
+                    ZQK=(ZQMI**2-1.)/(ZQMI**2+2.)
+                    !see 3.77 p68 : to replace Dg by an equivalent diameter De of pure ice, a multiplicative
+                    !melting factor has to be added                      
+                    ZDMELT_FACT=(6.*ZAI)/(XPI*.92*XRHOLW)
+                    ZEXP=2.*ZBI !XBI = 2.5 (Plates) in ini_radar.f90 (bj tab 2.1 p24)
+                    !ZLBDA : slope distribution parameter (equation 2.6 p 23)
+                    IF (GLIMA) THEN                   
+                      ZLBDA=(ZLBI*ZC/ZM)**ZLBEXI
+                    ELSE
+                      ZLBDA=ZLBI*(ZM/ZC)**ZLBEXI
+                    ENDIF
+                    ! Rayleigh or Rayleigh-Gans (=> Rayleigh) or Rayleigh with 6th order for attenuation
+                    ! (pristine ice = sphere),
+                    IF(NDIFF==0.OR.NDIFF==3.OR.NDIFF==4) THEN
+                      !ZREFLOC(1:2) : Zh et Zv from equation 2.2 p23 and Cristals parameters
+                      !ZEQICE=0.224 (radar_rain_ice.f90) factor used to convert the ice crystals
+                      !reflectivity into an equivalent liquid water reflectivity (from Smith, JCAM 84)
+                      ZREFLOC(1:2)=ZEQICE*.92**2*ZDMELT_FACT**2*1.E18*ZC &
+                                   *ZLBDA**(ZCXI-ZEXP)*MOMG(ZALPHAI,ZNUI,ZEXP)
+                      ZREFLOC(3)=0.
+                      IF(LWREFL) THEN ! weighting by reflectivities
+                        !calculation of radial velocity
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
+                               -ZCI*SIN(PELEV(JI,JEL,JL,JV))*ZEQICE*.92**2*ZDMELT_FACT**2&
+                               *1.E18*ZC*ZLBDA**(ZCXI-ZEXP-ZDI)&
+                               *MOMG(ZALPHAI,ZNUI,ZEXP+ZDI)
+                      ELSE
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)&
+                                              +ZC*ZLBDA**ZCXI
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
+                                                            -ZCI*SIN(PELEV(JI,JEL,JL,JV))&
+                                                           *ZC&
+                                                           *ZLBDA**(ZCXI-ZDI)*MOMG(ZALPHAI,ZNUI,ZDI)
+                      END IF
+                      IF(LATT) THEN ! Calculation of Extinction coefficient
+                        ! Rayleigh 3rd order
+                        IF(NDIFF==0.OR.NDIFF==3) THEN
+                          ZAETMP(:)=ZC*ZLBDA**ZCXI&
+                                   *(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)&
+                                   *MOMG(ZALPHAI,ZNUI,ZBI)/ZLBDA**ZBI)
+                          ! Rayleigh 6th order
+                        ELSE
+                          ZAETMP(:)=ZC*ZLBDA**ZCXI*(&
+                                    ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)&
+                                    *MOMG(ZALPHAI,ZNUI,ZBI)/ZLBDA**ZBI&
+                                    +ZDMELT_FACT**(5./3.)*XPI**4/15./XLAM_RAD(JI)**3&
+                                    *AIMAG(ZQK**2*(ZQMI**4+27.*ZQMI**2+38.)&
+                                    /(2.*ZQMI**2+3.))*MOMG(ZALPHAI,ZNUI,5.*ZBI/3.)/ZLBDA**(5.*ZBI/3.) &
+                                    +ZDMELT_FACT**2*2.*XPI**5/3. /XLAM_RAD(JI)**4*REAL(ZQK**2)&
+                                    *MOMG(ZALPHAI,ZNUI,2.*ZBI)/ZLBDA**(2.*ZBI))
+                        END IF
+                      END IF
+                    ELSE ! (if NDIFF=1 or NDIFF=7) => MIE (if choice=T-Matrix => Mie)
+                      ZREFLOC(:)=0.
+                      IF(LATT) ZAETMP(:)=0.
+                      DO JJ=1,NPTS_GAULAG ! ****** Gauss-Laguerre quadrature
+                        ZD=ZX(JJ)**(1./ZALPHAI)/ZLBDA !equivaut au ZDELTA_EQUIV olivier
+                        ZRHOI=6*ZAI*ZD**(ZBI-3.)/XPI !pristine ice density
+                        ZNUM=1.+2.*ZRHOI*(ZEPSI-1.)/(ZRHOPI*(ZEPSI+2.))
+                        ZDEN=1.-ZRHOI*(ZEPSI-1.)/(ZRHOPI*(ZEPSI+2.))
+                        ZQM=sqrt(ZNUM/ZDEN)
+                        CALL BHMIE(XPI/XLAM_RAD(JI)*ZD,ZQM,ZQEXT(1),ZQSCA,ZQBACK(1))
+                        ZQBACK(2)=ZQBACK(1)
+                        ZQEXT(2)=ZQEXT(1) ! modif Clotilde 23/04/2012
+                        ZQBACK(3)=0.
+                        ZREFLOC(1:3)=ZREFLOC(1:3)+ZQBACK(1:3)*ZX(JJ)**(ZNUI-1.)*ZD**2*ZW(JJ)
+                        ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(ZNUI-1.+ZDI/ZALPHAI)*ZD**2*ZW(JJ)
+                        IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**(ZNUI-1.)*ZD**2*ZW(JJ)                  
+                      END DO ! **************** end loop Gauss-Laguerre quadrature
+
+                      ZREFLOC(1:2)=ZREFLOC(1:2)*1.E18*(XLAM_RAD(JI)/XPI)**4/.93*ZC &
+                                   *ZLBDA**(ZCXI)/(4.*GAMMA(ZNUI))
+
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
+                                           +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
+                                           -ZCI*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4) &
+                                           *1.E18*(XLAM_RAD(JI)/XPI)**4*ZC &
+                                           *ZLBDA**(ZCXI-ZDI)/(4.*GAMMA(ZNUI)*.93)
+                      IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*ZC*ZLBDA**(ZCXI)/(4.*GAMMA(ZNUI))
+                    END IF !**************** end loop for each type of diffusion
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)+ZREFLOC(1:3)
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEI)=ZREFLOC(1) ! z_e due to pristine ice
+                    IF(LATT) THEN
+                      ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)=ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)+ZAETMP(:)
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IAEI)=ZAETMP(1)
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IAVI)=ZAETMP(2)
+                      IF(JL>1) ZAEIINT=ZAEIINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAEI)*XSTEP_RAD)
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEI)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEI)*ZAEIINT ! Z_i attenuated
+                    END IF            
+                  END IF !********************* end IF (SIZE(PI_RAY,1)>0)
+         
+                  ! Total attenuation even if no hydrometeors
+                  IF(LATT.AND.JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IATI)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IATI) &
+                                                *EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAEI)*XSTEP_RAD)
+                  ZRE_S22S11_I=0
+                  ZIM_S22S11_I=0
+                  ZS22_CARRE_I=0
+                  ZS11_CARRE_I=0              
+                END IF !******************** end IF (SIZE(PI_RAY,1)>0)
+                !---------------------------------------------------------------------------------------------------
+                !*       4.    SNOW 
+                !              -----
+                IF (SIZE(PS_RAY,1)>0)  THEN
+                  ZM=PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PS_RAY(JI,JEL,JAZ,JL,JH,JV) !snow content
+                  IF(ZM > ZM_MIN) THEN
+                    YTYPE='s' 
+                    !ZQMI: same formulation than for ice because snow is simulated only
+                    !above melting leyer (3.5.4 p 67)
+                    ZFW=0 
+                    ZQMI=SQRT(QEPSI(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XLIGHTSPEED/XLAM_RAD(JI)))
+                    ZQK=(ZQMI**2-1.)/(ZQMI**2+2.) !ajout de Clotilde 23/04/2012
+                    ZDMELT_FACT=6.*ZAS/(XPI*.92*XRHOLW)
+                    ZEXP=2.*ZBS !XBS = 1.9 in ini_radar.f90 (bj tab 2.1 p24)
+                    !dans ini_rain_ice.f90 :
+                    ZLBDA= ZLBS*(ZM)**ZLBEXS
+
+                    ! Rayleigh or Rayleigh-Gans or Rayleigh with 6th order for attenuation
+                    IF(NDIFF==0.OR.NDIFF==3.OR.NDIFF==4) THEN
+                      ZREFLOC(1:2)=ZEQICE*.92**2*ZDMELT_FACT**2*1.E18*ZCCS*ZLBDA**(ZCXS-ZEXP)*MOMG(ZALPHAS,ZNUS,ZEXP)
+                      ZREFLOC(3)=0.
+                      IF(LWREFL) THEN ! weighting by reflectivities
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
+                               -ZCS*SIN(PELEV(JI,JEL,JL,JV))*ZEQICE*.92**2*ZDMELT_FACT**2&
+                               *1.E18*ZCCS*ZLBDA**(ZCXS-ZEXP-ZDS)*MOMG(ZALPHAS,ZNUS,ZEXP+ZDS)
+                      ELSE
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)+ZCCS*ZLBDA**ZCXS
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
+                                                            -ZCS*SIN(PELEV(JI,JEL,JL,JV))&
+                                           *ZCCS*ZLBDA**(ZCXS-ZDS)*MOMG(ZALPHAS,ZNUS,ZDS)
+                      END IF
+                      IF(LATT) THEN
+                        IF(NDIFF==0.OR.NDIFF==3) THEN
+                          ZAETMP(:)=ZCCS*ZLBDA**ZCXS*(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)&
+                                    *MOMG(ZALPHAS,ZNUS,ZBS)/ZLBDA**ZBS)
+                        ELSE
+                          ZAETMP(:)=ZCCS*ZLBDA**ZCXS*(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)      &
+                                    *MOMG(ZALPHAS,ZNUS,ZBS)/ZLBDA**ZBS                               &
+                                    +ZDMELT_FACT**(5./3.)*XPI**4/15./XLAM_RAD(JI)**3                 &
+                                    *AIMAG(ZQK**2*(ZQMI**4+27.*ZQMI**2+38.)                             &
+                                    /(2.*ZQMI**2+3.))*MOMG(ZALPHAS,ZNUS,5.*ZBS/3.)/ZLBDA**(5.*ZBS/3.) &
+                                    +ZDMELT_FACT**2   *2.*XPI**5/3. /XLAM_RAD(JI)**4*REAL(ZQK**2)     &
+                                    *MOMG(ZALPHAS,ZNUS,2.*ZBS)/ZLBDA**(2.*ZBS))
+                        END IF
+                      END IF
+                      ZRE_S22S11_S=0
+                      ZIM_S22S11_S=0
+                      ZS22_CARRE_S=0
+                      ZS11_CARRE_S=0                        
+                    !******************************* NDIFF==7 ************************************ 
+                    ELSE IF(NDIFF==7) THEN
+
+                      ZREFLOC(:)=0
+                      IF(LATT) ZAETMP(:)=0      
+                      CALL CALC_KTMAT(PELEV(JI,JEL,JL,JV), PT_RAY(JI,JEL,JAZ,JL,JH,JV),&
+                                      ZFW,ZM,&
+                                      ZELEV_MIN(2),ZELEV_MAX(2),ZELEV_STEP(2),&
+                                      ZTC_MIN(2),ZTC_MAX(2),ZTC_STEP(2),&
+                                      ZFW_MIN(2),ZFW_MAX(2),ZFW_STEP(2),&
+                                      ZEXPM_MIN,ZEXPM_MAX,ZEXPM_STEP,&
+                                      ITMAT,ZELEV_RED,ZTC_RED,ZFW_RED,ZM_RED)
+
+                      IF (ITMAT(1) .NE. -NUNDEF) THEN 
+                        DO JIND=1,SIZE(KMAT_COEF,2),1
+                          KMAT_COEF(1,JIND)=ZS11_CARRE_T_S(ITMAT(JIND))
+                          KMAT_COEF(2,JIND)=ZS22_CARRE_T_S(ITMAT(JIND))
+                          KMAT_COEF(3,JIND)=ZRE_S22S11_T_S(ITMAT(JIND))
+                          KMAT_COEF(4,JIND)=ZIM_S22S11_T_S(ITMAT(JIND))
+                          KMAT_COEF(5,JIND)=ZRE_S22FMS11FT_T_S(ITMAT(JIND))
+                          KMAT_COEF(6,JIND)=ZIM_S22FT_T_S(ITMAT(JIND))
+                          KMAT_COEF(7,JIND)=ZIM_S11FT_T_S(ITMAT(JIND))
+                        ENDDO 
+                          CALL  INTERPOL(ZELEV_RED,ZTC_RED,ZFW_RED,ZM_RED,KMAT_COEF,ZS11_CARRE_S,ZS22_CARRE_S,&
+                                       ZRE_S22S11_S,ZIM_S22S11_S,ZRE_S22FMS11F,ZIM_S22FT,ZIM_S11FT)   
+                      ELSE
+                        ZS11_CARRE_S=0
+                        ZS22_CARRE_S=0
+                        ZRE_S22S11_S=0
+                        ZIM_S22S11_S=0
+                        ZRE_S22FMS11F=0
+                        ZIM_S22FT=0
+                        ZIM_S11FT=0
+                      END IF
+                      ZREFLOC(1)=1.E18*(XLAM_RAD(JI))**4/(XPI**5*.93)*4*XPI*ZS22_CARRE_S
+                      ZREFLOC(2)=1.E18*(XLAM_RAD(JI))**4/(XPI**5*.93)*4*XPI*ZS11_CARRE_S
+                      ZREFLOC(3)=180.E3/XPI*XLAM_RAD(JI)*ZRE_S22FMS11F
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
+                                                        -ZCS*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(1) &
+                                         *1.E18*(XLAM_RAD(JI)/XPI)**4/.93*ZCCS/4./ZLBDA**(3+ZDS)
+                      IF(LATT) THEN
+                        ZAETMP(1)=ZIM_S22FT*XLAM_RAD(JI)*2
+                        ZAETMP(2)=ZIM_S11FT*XLAM_RAD(JI)*2
+                      END IF     
+                    ELSE ! MIE 
+                      ZREFLOC(:)=0.
+                      IF(LATT) ZAETMP(:)=0.
+                      DO JJ=1,NPTS_GAULAG ! ****** Gauss-Laguerre quadrature
+                        ZD=ZX(JJ)**(1./ZALPHAS)/ZLBDA
+                        ZDE=ZDMELT_FACT**(1./3.)*ZD**(ZBS/3.)
+                        CALL BHMIE(XPI/XLAM_RAD(JI)*ZDE,ZQMI,ZQEXT(1),ZQSCA,ZQBACK(1))
+                        ZQBACK(2)=ZQBACK(1)
+                        ZQEXT(2)=ZQEXT(1) ! modif Clotilde 23/04/2012
+                        ZQBACK(3)=0.
+                        ZREFLOC(1:3)=ZREFLOC(1:3)+ZQBACK(1:3)*ZX(JJ)**(ZNUS-1.+2.*ZBS/3./ZALPHAS)*ZW(JJ)
+                        ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(ZNUS-1.+2.*ZBS/3./ZALPHAS+ZDS/ZALPHAS)*ZW(JJ)
+                        IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**(ZNUS-1.+2.*ZBS/3./ZALPHAS)*ZW(JJ)
+                      END DO ! ****** end loop Gauss-Laguerre quadrature
+                      ZREFLOC(1:2)=1.E18*(XLAM_RAD(JI)/XPI)**4*ZCCS*ZLBDA**(ZCXS-2.*ZBS/3.)/&
+                                  (4.*GAMMA(ZNUS)*.93)*ZDMELT_FACT**(2./3.)*ZREFLOC(1:2)               
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
+                                            +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
+                                            -ZCS*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4)   &
+                                            *1.E18*(XLAM_RAD(JI)/XPI)**4*ZCCS          &
+                                            *ZLBDA**(ZCXS-2.*ZBS/3.-ZDS)/              &
+                                            (4.*GAMMA(ZNUS)*.93)*ZDMELT_FACT**(2./3.)                              
+                      IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*ZCCS*ZLBDA**(ZCXS-2.*ZBS/3.)/(4.*GAMMA(ZNUS))&
+                                         *ZDMELT_FACT**(2./3.)            
+                      ZRE_S22S11_S=0
+                      ZIM_S22S11_S=0
+                      ZS22_CARRE_S=0
+                      ZS11_CARRE_S=0 
+                    END IF !**************** end loop for each type of diffusion
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)+ZREFLOC(1:3)
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IZES)=ZREFLOC(1) ! Z_e due to snow
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDS)=ZREFLOC(2) !Zvv for ZDR due to snow
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IKDS)=ZREFLOC(3) !Zvv for ZDR due to snow 
+                    IF (ZS22_CARRE_S*ZS11_CARRE_S .GT. 0) THEN
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IRHS)=SQRT(ZRE_S22S11_S**2+ZIM_S22S11_S**2)/SQRT(ZS22_CARRE_S*ZS11_CARRE_S)
+                    ELSE
+                     ZREFL(JI,JEL,JAZ,JL,JH,JV,IRHS)=1
+                    END IF
+                    IF(LATT) THEN
+                     ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)=ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)+ZAETMP(:)
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IAES)=ZAETMP(1)
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IAVS)=ZAETMP(2) 
+                      IF(JL>1) THEN
+                        ZAESINT=ZAESINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAES)*XSTEP_RAD)
+                        ZAVSINT=ZAVSINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAVS)*XSTEP_RAD)
+                      ENDIF
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IZES)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZES)*ZAESINT ! Z_s attenuated
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDS)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDS)*ZAVSINT ! ZVs attenuated
+                    END IF !end IF(LATT)
+                  END IF !end IF(PS_RAY(JI,JEL,JAZ,JL,JH,JV) > ...)
+
+
+                 ! Total attenuation even if no hydrometeors
+                  IF(LATT.AND.JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IATS)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IATS) &
+                                                *EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAES)*XSTEP_RAD)
+                END IF !END IF (SIZE(PS_RAY,1)>0)
+                !---------------------------------------------------------------------------------------------------
+                !*       5.    GRAUPEL
+                !              -------
+                !
+                !ZDG=.5 ! from Bringi & Chandrasekar 2001, p. 433
+                IF (SIZE(PG_RAY,1)>0)  THEN
+                  ZM=PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PG_RAY(JI,JEL,JAZ,JL,JH,JV) !graupel content
+                  IF(ZM > ZM_MIN) THEN
+                    YTYPE='g'
+                    ZQMI=SQRT(QEPSI(MIN(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XTT),XLIGHTSPEED/XLAM_RAD(JI)))
+                    ZQMW=SQRT(QEPSW(MAX(PT_RAY(JI,JEL,JAZ,JL,JH,JV),XTT),XLIGHTSPEED/XLAM_RAD(JI)))
+                    !ini_radar.f90 : ZCXG = -0.5 XBG = 2.8 ( Xj et bj tab 2.1 p 24)
+                    !ini_rain_ice.f90 : XLBEXG = 1.0/(XCXG-XBG) XAG = 19.6 (aj tab 2.1 p 24)
+                    !XLBG   = ( XAG*XCCG*MOMG(XALPHAG,XNUG,XBG) )**(-XLBEXG) (eq 2.6 p 23)
+                    IF (PR_RAY(JI,JEL,JAZ,JL,JH,JV) > ZRTMIN(3) ) THEN
+                      ZFW=PR_RAY(JI,JEL,JAZ,JL,JH,JV)/(PR_RAY(JI,JEL,JAZ,JL,JH,JV)+PG_RAY(JI,JEL,JAZ,JL,JH,JV))
+                    ELSE
+                      ZFW=0.
+                    END IF
+                    ZLBDA=ZLBG*(PRHODREF_RAY(JI,JEL,JAZ,JL,JH,JV)*PG_RAY(JI,JEL,JAZ,JL,JH,JV))**ZLBEXG
+                    !XTT : température du point triple de l'eau (273.16 K <=> 0.1 °C)
+                    IF(PT_RAY(JI,JEL,JAZ,JL,JH,JV) > XTT) THEN ! mixture of ice and water
+                      ZFRAC_ICE = .85 !(see p 68)
+                    ELSE ! only ice
+                      ZFRAC_ICE=1.
+                    END IF
+                    ! from eq 3.77 p 68
+                    !XRHOLW=1000 (initialized in ini_cst.f90)
+                    ZDMELT_FACT=6.*ZAG/(XPI*XRHOLW*((1.-ZFRAC_ICE)+ZFRAC_ICE*0.92))
+                    ZEXP=2.*ZBG
+                    !Calculation of the refractive index from Bohren and Battan (3.72 p66)
+                    ZQB=2.*ZQMW**2*(2.*ZQMI**2*LOG(ZQMI/ZQMW)/(ZQMI**2-ZQMW**2)-1.)/(ZQMI**2-ZQMW**2) !Beta (3.73 p66)
+                    ZQM=SQRT(((1.-ZFRAC_ICE)*ZQMW**2+ZFRAC_ICE*ZQB*ZQMI**2)/(1.-ZFRAC_ICE+ZFRAC_ICE*ZQB)) ! Bohren & Battan (1982) 3.72 p66
+                    ZQK=(ZQM**2-1.)/(ZQM**2+2.)                                       
+                    !Rayleigh, Rayleigh for ellipsoides or Rayleigh 6th order
+                    IF(NDIFF==0.OR.NDIFF==3.OR.NDIFF==4) THEN
+                      ZREFLOC(1:2)=ABS(ZQK)**2/.93*ZDMELT_FACT**2*1.E18*ZCCG*ZLBDA**(ZCXG-ZEXP)*MOMG(ZALPHAG,ZNUG,ZEXP)
+                      ZREFLOC(3)=0.
+                      IF(LWREFL) THEN ! weighting by reflectivities
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
+                              -ZCG*SIN(PELEV(JI,JEL,JL,JV))*ABS(ZQK)**2/.93*ZDMELT_FACT**2&
+                              *1.E18*ZCCG*ZLBDA**(ZCXG-ZEXP-ZDG)*MOMG(ZALPHAG,ZNUG,ZEXP+ZDG)
+                      ELSE
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)+ZCCG*ZLBDA**ZCXG
+                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
+                                                        -ZCG*SIN(PELEV(JI,JEL,JL,JV))&
+                                                        *ZCCG*ZLBDA**(ZCXG-ZDG)*MOMG(ZALPHAG,ZNUG,ZDG)
+                      END IF !end IF(LWREFL)
+                      IF(LATT) THEN
+                        IF(NDIFF==0.OR.NDIFF==3) THEN
+                          ZAETMP(:)=ZCCG*ZLBDA**ZCXG*(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)   &
+                                    *MOMG(ZALPHAG,ZNUG,ZBG)/ZLBDA**ZBG)
+                        ELSE
+                          ZAETMP(:)=ZCCG*ZLBDA**ZCXG*(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)   &
+                                   *MOMG(ZALPHAG,ZNUG,ZBG)/ZLBDA**ZBG&
+                                   +ZDMELT_FACT**(5./3.)*XPI**4/15./XLAM_RAD(JI)**3               &
+                                   *AIMAG(ZQK**2*(ZQM**4+27.*ZQM**2+38.)                             &
+                                   /(2.*ZQM**2+3.))*MOMG(ZALPHAG,ZNUG,5.*ZBG/3.)/ZLBDA**(5.*ZBG/3.)&
+                                   +ZDMELT_FACT**2   *2.*XPI**5/3. /XLAM_RAD(JI)**4*REAL(ZQK**2)   &
+                                   *MOMG(ZALPHAG,ZNUG,2.*ZBG)   /ZLBDA**(2.*ZBG))
+                        END IF ! end IF(NDIFF==0.OR.NDIFF==3)
+                      END IF ! end IF(LATT)
+                      ZRE_S22S11_G=0
+                      ZIM_S22S11_G=0
+                      ZS22_CARRE_G=0
+                      ZS11_CARRE_G=0                    
+                      !******************************* NDIFF==7 TmatInt ************************************ 
+                    ELSE IF(NDIFF==7) THEN
+                      ZREFLOC(:)=0
+                      IF(LATT) ZAETMP(:)=0                
+                      IF (ZFW < 0.01) THEN !******** DRY GRAUPEL 
+                         CALL CALC_KTMAT(PELEV(JI,JEL,JL,JV), PT_RAY(JI,JEL,JAZ,JL,JH,JV),&
+                                        ZFW,ZM,&
+                                        ZELEV_MIN(3),ZELEV_MAX(3),ZELEV_STEP(3),&
+                                        ZTC_MIN(3),ZTC_MAX(3),ZTC_STEP(3),&
+                                        ZFW_MIN(3),ZFW_MAX(3),ZFW_STEP(3),&
+                                        ZEXPM_MIN,ZEXPM_MAX,ZEXPM_STEP,&
+                                        ITMAT,ZELEV_RED,ZTC_RED,ZFW_RED,ZM_RED)
+                        IF (ITMAT(1) .NE. -NUNDEF) THEN 
+                          DO JIND=1,SIZE(KMAT_COEF,2),1
+                            KMAT_COEF(1,JIND)=ZS11_CARRE_T_G(ITMAT(JIND))
+                            KMAT_COEF(2,JIND)=ZS22_CARRE_T_G(ITMAT(JIND))
+                            KMAT_COEF(3,JIND)=ZRE_S22S11_T_G(ITMAT(JIND))
+                            KMAT_COEF(4,JIND)=ZIM_S22S11_T_G(ITMAT(JIND))
+                            KMAT_COEF(5,JIND)=ZRE_S22FMS11FT_T_G(ITMAT(JIND))
+                            KMAT_COEF(6,JIND)=ZIM_S22FT_T_G(ITMAT(JIND))
+                            KMAT_COEF(7,JIND)=ZIM_S11FT_T_G(ITMAT(JIND))
+                          ENDDO
+                         CALL  INTERPOL(ZELEV_RED,ZTC_RED,ZFW_RED,ZM_RED,KMAT_COEF,ZS11_CARRE_G,ZS22_CARRE_G,&
+                                         ZRE_S22S11_G,ZIM_S22S11_G,ZRE_S22FMS11F,ZIM_S22FT,ZIM_S11FT)
+  ELSE
+                          ZS11_CARRE_G=0
+                          ZS22_CARRE_G=0
+                          ZRE_S22S11_G=0
+                          ZIM_S22S11_G=0
+                          ZRE_S22FMS11F=0
+                          ZIM_S22FT=0
+                          ZIM_S11FT=0
+                        END IF                    
+                      ELSE !ZFW >= 0.01 ************** WET GRAUPEL
+                        CALL CALC_KTMAT(PELEV(JI,JEL,JL,JV),PT_RAY(JI,JEL,JAZ,JL,JH,JV),&
+                                        ZFW,ZM,&
+                                        ZELEV_MIN(4),ZELEV_MAX(4),ZELEV_STEP(4),&
+                                        ZTC_MIN(4),ZTC_MAX(4),ZTC_STEP(4),&
+                                        ZFW_MIN(4),ZFW_MAX(4),ZFW_STEP(4),&
+                                        ZEXPM_MIN,ZEXPM_MAX,ZEXPM_STEP,&
+                                        ITMAT,ZELEV_RED,ZTC_RED,ZFW_RED,ZM_RED)
+                        IF (ITMAT(1) .NE. -NUNDEF) THEN  
+                          DO JIND=1,SIZE(KMAT_COEF,2),1
+                            KMAT_COEF(1,JIND)=ZS11_CARRE_T_W(ITMAT(JIND))
+                            KMAT_COEF(2,JIND)=ZS22_CARRE_T_W(ITMAT(JIND))
+                            KMAT_COEF(3,JIND)=ZRE_S22S11_T_W(ITMAT(JIND))
+                            KMAT_COEF(4,JIND)=ZIM_S22S11_T_W(ITMAT(JIND))
+                            KMAT_COEF(5,JIND)=ZRE_S22FMS11FT_T_W(ITMAT(JIND))
+                            KMAT_COEF(6,JIND)=ZIM_S22FT_T_W(ITMAT(JIND))
+                            KMAT_COEF(7,JIND)=ZIM_S11FT_T_W(ITMAT(JIND))
+                          ENDDO
+                          CALL  INTERPOL(ZELEV_RED,ZTC_RED,ZFW_RED,ZM_RED,KMAT_COEF,ZS11_CARRE_G,ZS22_CARRE_G,&
+                                         ZRE_S22S11_G,ZIM_S22S11_G,ZRE_S22FMS11F,ZIM_S22FT,ZIM_S11FT) 
+                        ELSE
+                          ZS11_CARRE_G=0
+                          ZS22_CARRE_G=0
+                          ZRE_S22S11_G=0
+                          ZIM_S22S11_G=0
+                          ZRE_S22FMS11F=0
+                          ZIM_S22FT=0
+                          ZIM_S11FT=0
+                        END IF                    
+                      END IF!END IF (ZFW<0.01)
+                      ZREFLOC(1)=1.E18*(XLAM_RAD(JI))**4/(XPI**5*.93)*4*XPI*ZS22_CARRE_G
+                      ZREFLOC(2)=1.E18*(XLAM_RAD(JI))**4/(XPI**5*.93)*4*XPI*ZS11_CARRE_G
+                      ZREFLOC(3)=180.E3/XPI*XLAM_RAD(JI)*ZRE_S22FMS11F
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
+                                                        -ZCG*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(1) &
+                                         *1.E18*(XLAM_RAD(JI)/XPI)**4/.93*ZCCG/4./ZLBDA**(3+ZDG)
+                      IF(LATT) THEN
+                        ZAETMP(1)=ZIM_S22FT*XLAM_RAD(JI)*2
+                        ZAETMP(2)=ZIM_S11FT*XLAM_RAD(JI)*2
+                      END IF            
+                    ELSE ! Mie (NDIFF=1)
+                      ZREFLOC(:)=0.
+                      IF(LATT) ZAETMP(:)=0.
+                      DO JJ=1,NPTS_GAULAG ! ****** Gauss-Laguerre quadrature
+                        ZD=ZX(JJ)**(1./ZALPHAG)/ZLBDA
+                        ZDE=ZDMELT_FACT**(1./3.)*ZD**(ZBG/3.)
+                        CALL BHMIE(XPI/XLAM_RAD(JI)*ZDE,ZQM,ZQEXT(1),ZQSCA,ZQBACK(1))
+                        ZQBACK(2)=ZQBACK(1)
+                        ZQEXT(2)=ZQEXT(1) ! modif Clotilde 23/04/2012
+                        ZQBACK(3)=0.
+                        ZREFLOC(1:3)=ZREFLOC(1:3)+ZQBACK(1:3)*ZX(JJ)**(ZNUG-1.+2.*ZBG/3./ZALPHAG)*ZW(JJ)
+                        ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(ZNUG-1.+2.*ZBG/3./ZALPHAG+ZDG/ZALPHAG)*ZW(JJ)
+                        IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**(ZNUG-1.+2.*ZBG/3./ZALPHAG)*ZW(JJ)
+                      END DO ! ****** end loop on diameter (Gauss-Laguerre)                     
+                      ZREFLOC(1:2)=ZREFLOC(1:2)*1.E18*(XLAM_RAD(JI)/XPI)**4*ZCCG                      &
+                                    *ZLBDA**(ZCXG-2.*ZBG/3.)/(4.*GAMMA(ZNUG)*.93)*ZDMELT_FACT**(2./3.)                    
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)               &
+                                    +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1)                        &
+                                    -ZCG*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4)                          &
+                                    *1.E18*(XLAM_RAD(JI)/XPI)**4*ZCCG                                 &
+                                    *ZLBDA**(ZCXG-2.*ZBG/3.-ZDG)/(4.*GAMMA(ZNUG)*.93)*ZDMELT_FACT**(2./3.)               
+                      IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*ZCCG*ZLBDA**(ZCXG-2.*ZBG/3.)/(4.*GAMMA(ZNUG))  &
+                                    *ZDMELT_FACT**(2./3.)
+                      ZRE_S22S11_G=0
+                      ZIM_S22S11_G=0
+                      ZS22_CARRE_G=0
+                      ZS11_CARRE_G=0  !0 in case of Mie
+                    END IF !**************** end loop for each type of diffusion : IF(NDIFF==0.OR.NDIFF==3.OR.NDIFF==4)          
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)+ZREFLOC(1:3)
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEG)=ZREFLOC(1) ! z_e due to graupel
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDG)=ZREFLOC(2) !Zvv for ZDR due to graupel
+                    ZREFL(JI,JEL,JAZ,JL,JH,JV,IKDG)=ZREFLOC(3) !Zvv for ZDR due to graupel  
+
+                    IF (ZS22_CARRE_G*ZS11_CARRE_G .GT. 0) THEN
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IRHG)=SQRT(ZRE_S22S11_G**2+ZIM_S22S11_G**2)/SQRT(ZS22_CARRE_G*ZS11_CARRE_G)
+                    ELSE
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IRHG)=1
+                    END IF
+                    IF(LATT) THEN
+                      ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)=ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)+ZAETMP(:)
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IAEG)=ZAETMP(1)
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IAVG)=ZAETMP(2)
+                      IF(JL>1) THEN
+                        ZAEGINT=ZAEGINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAEG)*XSTEP_RAD)
+                        ZAVGINT=ZAVGINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAVG)*XSTEP_RAD)
+                      END IF
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEG)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEG)*ZAEGINT ! Z_g attenuated
+                      ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDG)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZDG)*ZAVGINT ! Z_g attenuated
+                    END IF !end IF(LATT)            
+                  END IF !**************** IF(PG_RAY(JI,JEL,JAZ,JL,JH,JV) > XRTMIN(6))
+         
+                  ! Total attenuation even if no hydrometeors
+                  IF(LATT.AND.JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IATG)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IATG) &
+                                                *EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAEG)*XSTEP_RAD)
+              
+                END IF ! **************** end GRAUPEL (end IF SIZE(PG_RAY,1) > 0)
+                !-----------------------------------------------------------------------------------------------
+                !-----------------------------------------------------------------------------------------------
+
+                IF(LWREFL) THEN ! weighting by reflectivities
                   ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                       -ZCG*SIN(PELEV(JI,JEL,JL,JV))*ABS(QK)**2/.93*ZDMELT_FACT**2&
-                       *1.E18*XCCG*ZLBDA**(XCXG-ZEXP-XDG)*MOMG(XALPHAG,XNUG,ZEXP+XDG)
-               ELSE
-                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)+XCCG*ZLBDA**XCXG
+                                   +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFL(JI,JEL,JAZ,JL,JH,JV,1)             
+                ELSE IF(LWBSCS) THEN ! weighting by hydrometeor concentrations
                   ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                       -ZCG*SIN(PELEV(JI,JEL,JL,JV))&
-                       *XCCG*ZLBDA**(XCXG-XDG)*MOMG(XALPHAG,XNUG,XDG)
-               END IF
-               IF(LATT) THEN
-                  IF(NDIFF==0.OR.NDIFF==3) THEN
-                     ZAETMP(:)=XCCG*ZLBDA**XCXG*(                                        &
-                          ZDMELT_FACT          *XPI**2    /XLAM_RAD(JI)   *AIMAG(QK)     &
-                          *               MOMG(XALPHAG,XNUG,XBG)      /ZLBDA**XBG)
-                  ELSE
-                     ZAETMP(:)=XCCG*ZLBDA**XCXG*(                                        &
-                          ZDMELT_FACT          *XPI**2    /XLAM_RAD(JI)   *AIMAG(QK)     &
-                          *               MOMG(XALPHAG,XNUG,XBG)      /ZLBDA**XBG        &
-                          +ZDMELT_FACT**(5./3.)*XPI**4/15./XLAM_RAD(JI)**3               &
-                          *AIMAG(QK**2*(QM**4+27.*QM**2+38.)                             &
-                          /(2.*QM**2+3.))*MOMG(XALPHAG,XNUG,5.*XBG/3.)/ZLBDA**(5.*XBG/3.)&
-                          +ZDMELT_FACT**2   *2.*XPI**5/3. /XLAM_RAD(JI)**4*REAL(QK**2)   &
-                          *               MOMG(XALPHAG,XNUG,2.*XBG)   /ZLBDA**(2.*XBG))
-                  END IF
-               END IF
-            ELSE ! Mie or T-matrix
-               ZREFLOC(:)=0.
-               IF(LATT) ZAETMP(:)=0.
-               DO JJ=1,NPTS_GAULAG ! Gauss-Laguerre quadrature
-                  ZD=ZX(JJ)**(1./XALPHAG)/ZLBDA
-                  ZDE=ZDMELT_FACT**(1./3.)*ZD**(XBG/3.)
-                  !                           SELECT CASE(NDIFF)
-                  !                           CASE(0,3)
-                  !                              ZQBACK(1)=4.*(XPI/XLAM_RAD(JI))**4*ABS(QK)**2*ZDE**4
-                  !                              ZQEXT(1)=4.*(XPI*ZDE/XLAM_RAD(JI)*AIMAG(QK)&
-                  !                                   +(XPI*ZDE/XLAM_RAD(JI))**3*AIMAG(QK**2*(QM**4+27.*QM**2+38.)/(2.*QM**2+3.))/15.&
-                  !                                   +2.*(XPI*ZDE/XLAM_RAD(JI))**4*REAL(QK**2)/3.)
-                  !                           CASE(1,2) ! MIE/T-MATRIX (we use Mie in both cases)
-                  CALL BHMIE(XPI/XLAM_RAD(JI)*ZDE,QM,ZQEXT(1),ZQSCA,ZQBACK(1))
-                  !                           END SELECT
-                  ZQBACK(2)=ZQBACK(1)
-                  ZQBACK(3)=0.
-                  ZREFLOC(1:3)=ZREFLOC(1:3)+ZQBACK(1:3)*ZX(JJ)**(XNUG-1.+2.*XBG/3./XALPHAG)*ZW(JJ)
-                  ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(XNUG-1.+2.*XBG/3./XALPHAG+XDG/XALPHAG)*ZW(JJ)
-                  IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**(XNUG-1.+2.*XBG/3./XALPHAG)*ZW(JJ)
-               END DO
-               ZREFLOC(1:2)=ZREFLOC(1:2)*1.E18*(XLAM_RAD(JI)/XPI)**4*XCCG &
-                    *ZLBDA**(XCXG-2.*XBG/3.)/(4.*GAMMA(XNUG)*.93)*ZDMELT_FACT**(2./3.)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-                    +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) &
-                    -ZCG*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4) &
-                    *1.E18*(XLAM_RAD(JI)/XPI)**4*XCCG &
-                    *ZLBDA**(XCXG-2.*XBG/3.-XDG)/(4.*GAMMA(XNUG)*.93)*ZDMELT_FACT**(2./3.)
-               IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*XCCG*ZLBDA**(XCXG-2.*XBG/3.)/(4.*GAMMA(XNUG))&
-                    *ZDMELT_FACT**(2./3.)
-            END IF
-            ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:3)+ZREFLOC(1:3)
-            ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEG)=ZREFLOC(1) ! z_e due to graupel
-            IF(LATT) THEN
-               ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)=ZAELOC(JI,JEL,JAZ,JL,JH,JV,:)+ZAETMP(:)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IAEG)=ZAETMP(1)
-               IF(JL>1) ZAEGINT=ZAEGINT*EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAEG)*XSTEP_RAD)
-               ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEG)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IZEG)*ZAEGINT ! Z_g attenuated
-            END IF
-         END IF
-         ! Total attenuation even if no hydrometeors
-         IF(LATT.AND.JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IATG)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IATG) &
-              *EXP(-2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IAEG)*XSTEP_RAD)
-      END IF
-      
-      IF(LWREFL) THEN ! weighting by reflectivities
-         ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-              +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFL(JI,JEL,JAZ,JL,JH,JV,1)
-      ELSE IF(LWBSCS) THEN ! weighting by hydrometeor concentrations
-         ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)&
-              +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)
-      ELSE IF(ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)/=0.) THEN ! no weighting
-         ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)/ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)&
-              +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)
-      END IF
-
-   ELSE
-      IF(JV==1.OR.ZREFL(JI,JEL,JAZ,JL,JH,MAX(JV-1,1),1)==-XUNDEF) THEN ! ground clutter
-         ZREFL(JI,JEL,JAZ,JL,JH,JV,1:2)=-XUNDEF
-      ELSE ! outside model domain (top or lateral boundaries)
-         ZREFL(JI,JEL,JAZ,JL,JH,JV,1:2)=0.
-      END IF
-      LPART_MASK=.TRUE.
-   END IF
-END IF
+                                   +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)
+                ELSE IF(ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)/=0.) THEN ! no weighting
+                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)/ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)&
+                                   +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)
+                END IF
+                !Calculation of  Phidp  (ZREFL(JI,JEL,JAZ,JL,JH,JV,IPHIDP) is initialized to 0 before the loop
+                IF (JL>1) ZREFL(JI,JEL,JAZ,JL,JH,JV,IPHIDP)=ZREFL(JI,JEL,JAZ,JL-1,JH,JV,IPHIDP)+ &
+                                   2.*ZREFL(JI,JEL,JAZ,JL-1,JH,JV,3)*XSTEP_RAD*1D-3
 
-               END DO LOOPJL
-            END DO !JV
-         END DO !JH
-      END DO !JAZ
-   END DO !JEL
+                !Calculation of RhoHV and DeltaHV
+                ZRE_S22S11_T=ZRE_S22S11_R+ZRE_S22S11_I+ZRE_S22S11_S+ZRE_S22S11_G
+                ZIM_S22S11_T=ZIM_S22S11_R+ZIM_S22S11_I+ZIM_S22S11_S+ZIM_S22S11_G
+                ZS22_CARRE_T=ZS22_CARRE_R+ZS22_CARRE_I+ZS22_CARRE_S+ZS22_CARRE_G
+                ZS11_CARRE_T=ZS11_CARRE_R+ZS11_CARRE_I+ZS11_CARRE_S+ZS11_CARRE_G
+                !RhoHV 
+                IF ((ZS22_CARRE_T*ZS11_CARRE_T)>0.) THEN
+                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IRHOHV)=SQRT(ZRE_S22S11_T**2+ZIM_S22S11_T**2)/SQRT(ZS22_CARRE_T*ZS11_CARRE_T)   
+                ELSE
+                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IRHOHV)=-XUNDEF
+                END IF 
+                !DeltaHV
+                IF (ZRE_S22S11_T/=0) THEN
+                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IDELTAHV)=180/XPI*ATAN(ZIM_S22S11_T/ZRE_S22S11_T)
+                ELSE
+                  ZREFL(JI,JEL,JAZ,JL,JH,JV,IDELTAHV)=0
+                END IF
+              ELSE !if temperature is not defined
+                ZREFL(JI,JEL,JAZ,JL,JH,JV,1:2)=XVALGROUND
+                ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=XVALGROUND
+                LPART_MASK=.TRUE.
+              END IF !end condition : IF(PT_RAY(JI,JEL,JAZ,JL,JH,JV) /= -XUNDEF) => if temperature is defined
+            END IF !end condition : IF(LPART_MASK) => if pixel is not masked
+          END DO LOOPJL
+        END DO !JV
+      END DO !JH
+    END DO !JAZ
+  END DO !JEL   
+  !
+  !lookup tables for rain
+  DEALLOCATE (ZTC_T_R,ZELEV_T_R,ZM_T_R,ZS11_CARRE_T_R,ZS22_CARRE_T_R,&
+  ZRE_S22S11_T_R,ZIM_S22S11_T_R,ZRE_S22FMS11FT_T_R,ZIM_S22FT_T_R,ZIM_S11FT_T_R)
+  !lookup tables for snow
+  DEALLOCATE (ZTC_T_S,ZELEV_T_S,ZM_T_S,ZS11_CARRE_T_S,ZS22_CARRE_T_S,&
+  ZRE_S22S11_T_S,ZIM_S22S11_T_S,ZRE_S22FMS11FT_T_S,ZIM_S22FT_T_S,ZIM_S11FT_T_S)
+  !lookup tables for graupel
+  DEALLOCATE (ZTC_T_G,ZELEV_T_G,ZM_T_G,ZS11_CARRE_T_G,ZS22_CARRE_T_G,&
+  ZRE_S22S11_T_G,ZIM_S22S11_T_G,ZRE_S22FMS11FT_T_G,ZIM_S22FT_T_G,ZIM_S11FT_T_G)
+  !lookup tables for wet graupel
+  DEALLOCATE (ZTC_T_W,ZELEV_T_W,ZM_T_W,ZS11_CARRE_T_W,ZS22_CARRE_T_W,&
+  ZRE_S22S11_T_W,ZIM_S22S11_T_W,ZRE_S22FMS11FT_T_W,ZIM_S22FT_T_W,ZIM_S11FT_T_W)   
 END DO !JI
-
 !
 ! attenuation in dB/km
-IF(LATT) ZREFL(:,:,:,:,:,:,IAER:IAEG)=4343.*2.*ZREFL(:,:,:,:,:,:,IAER:IAEG) ! specific attenuation
+IF(LATT) ZREFL(:,:,:,:,:,:,IAER:IAEG)=4343.*2.*ZREFL(:,:,:,:,:,:,IAER:IAEG) ! horizontal specific attenuation
+IF(LATT) ZREFL(:,:,:,:,:,:,IAVR:IAVG)=4343.*2.*ZREFL(:,:,:,:,:,:,IAVR:IAVG) ! vertical specific attenuation
 ! convective/stratiform
 ZREFL(:,:,:,:,:,:,4)=PBU_MASK_RAY(:,:,:,:,:,:) ! CSR
 ! /convective/stratiform
+
+WRITE(ILUOUT0,*) 'NB ZREFL  MIN MAX :', MINVAL(ZREFL(:,:,:,:,:,:,:)),MAXVAL(ZREFL(:,:,:,:,:,:,:))
+WRITE(ILUOUT0,*) 'NB ZREFL VALGROUND :', COUNT(ZREFL(:,:,:,:,:,:,:) ==XVALGROUND)
+WRITE(ILUOUT0,*) 'NB ZREFL -XUNDEF :', COUNT(ZREFL(:,:,:,:,:,:,:) ==-XUNDEF)
+WRITE(ILUOUT0,*) 'NB ZREFL > 0 :', COUNT(ZREFL(:,:,:,:,:,:,:)>0.)
+WRITE(ILUOUT0,*) 'NB ZREFL = 0 :', COUNT(ZREFL(:,:,:,:,:,:,:)==0.)
+WRITE(ILUOUT0,*) 'NB ZREFL < 0 :', COUNT(ZREFL(:,:,:,:,:,:,:) < 0.)-COUNT( ZREFL(:,:,:,:,:,:,:)==XVALGROUND)
 !---------------------------------------------------------------------------------------------------
 !*       6.    FINAL STEP : TOTAL ATTENUATION AND EQUIVALENT REFLECTIVITY FACTOR
 !              ---------------------------------------------------------------
 !
 ALLOCATE(ZVTEMP(IMAX))
-
 DO JI=1,INBRAD  
-   IEL=NBELEV(JI)
-   DO JEL=1,IEL  
-      DO JAZ=1,INBAZIM 
-         IF (LATT) ZAETOT(:,:,1:2)=1.
-         DO JL=1,INBSTEPMAX
-            IF(COUNT(ZREFL(JI,JEL,JAZ,JL,:,:,1)==-XUNDEF)==0.AND.COUNT(PT_RAY(JI,JEL,JAZ,JL,:,:)/=-XUNDEF)/=0) THEN ! if no undef point in gate JL and at least one point defined
-               DO JH=1,INPTS_H
-                  ZVTEMP(:)=0.
-                  DO JV=1,INPTS_V  ! Loop on Jv
-                     IF (JL > 1) THEN       
-                        IF(LATT) THEN ! we use ZALPHAE0=alpha_0 from last gate
-                           ZAETOT(JH,JV,1:2)=ZAETOT(JH,JV,1:2)*EXP(-2.*ZAELOC(JI,JEL,JAZ,JL-1,JH,JV,:)*XSTEP_RAD)
-                           ZREFL(JI,JEL,JAZ,JL,JH,JV,1:2)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:2)*ZAETOT(JH,JV,1:2)!attenuated reflectivity
-                           IF(LWREFL) ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)*ZAETOT(JH,JV,1)
-                        END IF
-                        
-                     END IF
-
-                     IF(.NOT.(LWREFL.AND.LWBSCS)) THEN
-                        ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)
-                     END IF
+  IEL=NBELEV(JI)
+  DO JEL=1,IEL  
+    DO JAZ=1,INBAZIM 
+      IF (LATT) ZAETOT(:,:,1:2)=1.
+      PZE(JI,JEL,JAZ,1,IPHIDP)=0
+      DO JL=1,INBSTEPMAX
+        ! if no undef point in gate JL and at least one point where T is defined
+        IF(COUNT(ZREFL(JI,JEL,JAZ,JL,:,:,1)==-XUNDEF)==0.AND. &
+           COUNT(ZREFL(JI,JEL,JAZ,JL,:,:,1)==XVALGROUND)==0.AND. &
+           COUNT(PT_RAY(JI,JEL,JAZ,JL,:,:)/=-XUNDEF)/=0) THEN 
+          DO JH=1,INPTS_H
+            ZVTEMP(:)=0.
+            DO JV=1,INPTS_V  ! Loop on Jv
+              !if range is over 1, attenuation is added 
+              IF (JL > 1) THEN      
+                IF(LATT) THEN ! we use ZALPHAE0=alpha_0 from last gate
+                  !Total attenuation
+                  ZAETOT(JH,JV,1:2)=ZAETOT(JH,JV,1:2)*EXP(-2.*ZAELOC(JI,JEL,JAZ,JL-1,JH,JV,:)*XSTEP_RAD)
+                  !Zhh, Zvv
+                  ZREFL(JI,JEL,JAZ,JL,JH,JV,1:2)=ZREFL(JI,JEL,JAZ,JL,JH,JV,1:2)*ZAETOT(JH,JV,1:2)!attenuated reflectivity
+                  !Z for Radial velocity                         
+                  IF(LWREFL) ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)*ZAETOT(JH,JV,1)
+                END IF !end IF(LATT)
+              END IF !end IF (JL > 1)
+              IF(.NOT.(LWREFL.AND.LWBSCS)) THEN
+                ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)
+              END IF
+              ! Quadrature on vertical reflectivities +VDOP
+              IF(LQUAD) THEN
+                ZVTEMP(:)=ZVTEMP(:)+ZREFL(JI,JEL,JAZ,JL,JH,JV,:)*PW_V(ABS((2*JV-INPTS_V-1)/2)+1) &
+                          *EXP(-2.*LOG(2.)*PX_V(ABS((2*JV-INPTS_V-1)/2)+1)**2)
+              ELSE
+                ZVTEMP(:)=ZVTEMP(:)+ZREFL(JI,JEL,JAZ,JL,JH,JV,:)*PW_V(ABS((2*JV-INPTS_V-1)/2)+1)
+              END IF
+            END DO ! End loop on JV                  		
+!
+            IF(LQUAD) THEN
+              PZE(JI,JEL,JAZ,JL,:)=PZE(JI,JEL,JAZ,JL,:)+ZVTEMP(1:SIZE(PZE,5))*PW_H(ABS((2*JH-INPTS_H-1)/2)+1) &
+                                   *EXP(-2.*LOG(2.)*PX_H(ABS((2*JH-INPTS_H-1)/2)+1)**2)
+              IF(LWBSCS) ZCONC_BIN(JI,JEL,JAZ,JL)=ZCONC_BIN(JI,JEL,JAZ,JL)+ZVTEMP(IMAX)* &
+              PW_H(ABS((2*JH-INPTS_H-1)/2)+1)*EXP(-2.*LOG(2.)*PX_H(ABS((2*JH-INPTS_H-1)/2)+1)**2)
+            ELSE
+              PZE(JI,JEL,JAZ,JL,:)=PZE(JI,JEL,JAZ,JL,:)+ZVTEMP(1:SIZE(PZE,5))*PW_H(ABS((2*JH-INPTS_H-1)/2)+1)
+              IF(LWBSCS) ZCONC_BIN(JI,JEL,JAZ,JL)=ZCONC_BIN(JI,JEL,JAZ,JL)+ZVTEMP(IMAX)* &
+                                                   PW_H(ABS((2*JH-INPTS_H-1)/2)+1)
+            END IF !end IF(LQUAD)
+          END DO ! End loop on JH 
 
-                     ! Quadrature on vertical reflectivities +VDOP
-                     IF(LQUAD) THEN
-                        ZVTEMP(:)=ZVTEMP(:)+ZREFL(JI,JEL,JAZ,JL,JH,JV,:)*PW_V(ABS((2*JV-INPTS_V-1)/2)+1) &
-                             *EXP(-2.*LOG(2.)*PX_V(ABS((2*JV-INPTS_V-1)/2)+1)**2)
-                     ELSE
-                        ZVTEMP(:)=ZVTEMP(:)+ZREFL(JI,JEL,JAZ,JL,JH,JV,:)*PW_V(ABS((2*JV-INPTS_V-1)/2)+1)
-                     END IF
-                  END DO ! End loop on JV
-                  
-                  IF(LQUAD) THEN
-                     PZE(JI,JEL,JAZ,JL,:)=PZE(JI,JEL,JAZ,JL,:)+ZVTEMP(1:SIZE(PZE,5))*PW_H(ABS((2*JH-INPTS_H-1)/2)+1) &
-                          *EXP(-2.*LOG(2.)*PX_H(ABS((2*JH-INPTS_H-1)/2)+1)**2)
-                     IF(LWBSCS) ZCONC_BIN(JI,JEL,JAZ,JL)=ZCONC_BIN(JI,JEL,JAZ,JL)+ZVTEMP(IMAX)* &
-                          PW_H(ABS((2*JH-INPTS_H-1)/2)+1)*EXP(-2.*LOG(2.)*PX_H(ABS((2*JH-INPTS_H-1)/2)+1)**2)
-                  ELSE
-                     PZE(JI,JEL,JAZ,JL,:)=PZE(JI,JEL,JAZ,JL,:)+ZVTEMP(1:SIZE(PZE,5))*PW_H(ABS((2*JH-INPTS_H-1)/2)+1)
-                     IF(LWBSCS) ZCONC_BIN(JI,JEL,JAZ,JL)=ZCONC_BIN(JI,JEL,JAZ,JL)+ZVTEMP(IMAX)* &
-                          PW_H(ABS((2*JH-INPTS_H-1)/2)+1)
-                  END IF
-               END DO ! End loop on JH 
-               
-               IF(LQUAD) THEN
-                  PZE(JI,JEL,JAZ,JL,:)=PZE(JI,JEL,JAZ,JL,:)*2.*LOG(2.)/XPI
-                  IF(LWBSCS) ZCONC_BIN(JI,JEL,JAZ,JL)=ZCONC_BIN(JI,JEL,JAZ,JL)*2.*LOG(2.)/XPI
-               ELSE
-                  PZE(JI,JEL,JAZ,JL,:)=PZE(JI,JEL,JAZ,JL,:)/XPI! ELSE REMAINS -XUNDEF
-                  IF(LWBSCS) ZCONC_BIN(JI,JEL,JAZ,JL)=ZCONC_BIN(JI,JEL,JAZ,JL)/XPI
-               END IF
-               
-               IF(PZE(JI,JEL,JAZ,JL,1)>=10**(XREFLVDOPMIN/10.)) THEN ! Doppler velocities if Z>=XREFLVDOPMIN dBZ
-                  IF(LWREFL) THEN
-                     PZE(JI,JEL,JAZ,JL,IVDOP)=PZE(JI,JEL,JAZ,JL,IVDOP)/PZE(JI,JEL,JAZ,JL,1)
-                  ELSE IF(LWBSCS) THEN
-                     IF(ZCONC_BIN(JI,JEL,JAZ,JL)>0.) THEN
-                        PZE(JI,JEL,JAZ,JL,IVDOP)=PZE(JI,JEL,JAZ,JL,IVDOP)/ZCONC_BIN(JI,JEL,JAZ,JL)
-                     ELSE
-                        PZE(JI,JEL,JAZ,JL,IVDOP)=-XUNDEF
-                     END IF
-                  END IF
-               ELSE
-                  PZE(JI,JEL,JAZ,JL,IVDOP)=-XUNDEF
-               END IF
-
-            ELSE      ! ground clutter or outside Meso-NH domain        
-               PZE(JI,JEL,JAZ,JL,1:2)=-XUNDEF
+          IF(LQUAD) THEN
+            PZE(JI,JEL,JAZ,JL,:)=PZE(JI,JEL,JAZ,JL,:)*2.*LOG(2.)/XPI
+            IF(LWBSCS) ZCONC_BIN(JI,JEL,JAZ,JL)=ZCONC_BIN(JI,JEL,JAZ,JL)*2.*LOG(2.)/XPI
+          ELSE
+            PZE(JI,JEL,JAZ,JL,:)=PZE(JI,JEL,JAZ,JL,:)/XPI
+            IF(LWBSCS) ZCONC_BIN(JI,JEL,JAZ,JL)=ZCONC_BIN(JI,JEL,JAZ,JL)/XPI
+          END IF !end IF(LQUAD)
+! 
+          !**** Thresholding: with ZSNR, or with XREFLVDOPMIN and XREFLMIN
+          ZSNR=-XUNDEF
+          ZSNR_R=-XUNDEF
+          ZSNR_I=-XUNDEF
+          ZSNR_S=-XUNDEF
+          ZSNR_G=-XUNDEF
+          ZZHH=PZE(JI,JEL,JAZ,JL,1)
+          ZZE_R=PZE(JI,JEL,JAZ,JL,IZER)
+          ZZE_I=PZE(JI,JEL,JAZ,JL,IZEI)
+          ZZE_S=PZE(JI,JEL,JAZ,JL,IZES)
+          ZZE_G=PZE(JI,JEL,JAZ,JL,IZEG)
+          ZDISTRAD=JL*XSTEP_RAD !radar distance in meters
+          IF (LSNRT) THEN 
+            IF (ZZHH/=XVALGROUND .AND. ZZHH/=-XUNDEF.AND.ZZHH/=0) THEN
+              ZSNR=10*LOG10(ZZHH)-20*LOG10(ZDISTRAD/(100*10**3))
             END IF
-
-            IF(PZE(JI,JEL,JAZ,JL,1) < 0.) THEN  ! flag bin when underground                    
-               PZE(JI,JEL,JAZ,JL,1)=XVALGROUND
-               PZE(JI,JEL,JAZ,JL,IZER:IZEG)=XVALGROUND
+            IF (ZZE_R/=XVALGROUND .AND. ZZE_R/=-XUNDEF.AND.ZZE_R/=0) THEN
+              ZSNR_R=10*LOG10(ZZE_R)-20*LOG10(ZDISTRAD/(100*10**3))
             END IF
-
-            IF(LATT) THEN
-               WHERE(PZE(JI,JEL,JAZ,JL,IATR:IATG)<=0.)
-                  PZE(JI,JEL,JAZ,JL,IATR:IATG)=XVALGROUND
-               END WHERE
+            IF (ZZE_I/=XVALGROUND .AND. ZZE_I/=-XUNDEF.AND.ZZE_I/=0) THEN
+              ZSNR_I=10*LOG10(ZZE_I)-20*LOG10(ZDISTRAD/(100*10**3))
+            END IF
+            IF (ZZE_S/=XVALGROUND .AND. ZZE_S/=-XUNDEF.AND.ZZE_S/=0) THEN
+              ZSNR_S=10*LOG10(ZZE_S)-20*LOG10(ZDISTRAD/(100*10**3))
             END IF
-         END DO
-      END DO
-   END DO
-END DO
-
-DEALLOCATE(ZREFL,ZVTEMP)
-WRITE(0,*) 'NB PZE VALGROUND :', COUNT(PZE(:,:,:,:,1) ==XVALGROUND)
-WRITE(0,*) 'NB PZE > 0 :', COUNT(PZE(:,:,:,:,1)>0.)
-WRITE(0,*) 'NB PZE = 0 :', COUNT(PZE(:,:,:,:,1)==0.)
-WRITE(0,*) 'NB PZE < 0 :', COUNT(PZE(:,:,:,:,1) < 0.)-COUNT(PZE(:,:,:,:,1) ==XVALGROUND)
+            IF (ZZE_G/=XVALGROUND .AND. ZZE_G/=-XUNDEF.AND.ZZE_G/=0) THEN
+              ZSNR_G=10*LOG10(ZZE_G)-20*LOG10(ZDISTRAD/(100*10**3))
+            END IF
+            GTHRESHOLD_V=(ZSNR>=XSNRMIN)
+            GTHRESHOLD_Z=GTHRESHOLD_V
+            GTHRESHOLD_ZR=(ZSNR_R>=XSNRMIN)
+            GTHRESHOLD_ZI=(ZSNR_I>=XSNRMIN)
+            GTHRESHOLD_ZS=(ZSNR_S>=XSNRMIN)
+            GTHRESHOLD_ZG=(ZSNR_G>=XSNRMIN)
+          ELSE
+            GTHRESHOLD_V=(ZZHH>=10**(XREFLVDOPMIN/10.))
+            GTHRESHOLD_Z=(ZZHH>=10**(XREFLMIN/10.))
+            GTHRESHOLD_ZR=(ZZE_R>=10**(XREFLMIN/10.))
+            GTHRESHOLD_ZI=(ZZE_I>=10**(XREFLMIN/10.))
+            GTHRESHOLD_ZS=(ZZE_S>=10**(XREFLMIN/10.))
+            GTHRESHOLD_ZG=(ZZE_G>=10**(XREFLMIN/10.))
+          END IF          
+          !--- Doppler velocities 
+          IF(GTHRESHOLD_V) THEN      
+            IF(LWREFL) THEN
+              !change Clotilde 27/04/2012 to avoid division by zero and floating point exception
+              IF (PZE(JI,JEL,JAZ,JL,1)/=0) THEN
+                PZE(JI,JEL,JAZ,JL,IVDOP)=PZE(JI,JEL,JAZ,JL,IVDOP)/PZE(JI,JEL,JAZ,JL,1) 
+              END IF
+            ELSE IF(LWBSCS) THEN
+              IF(ZCONC_BIN(JI,JEL,JAZ,JL)>0.) THEN
+                PZE(JI,JEL,JAZ,JL,IVDOP)=PZE(JI,JEL,JAZ,JL,IVDOP)/ZCONC_BIN(JI,JEL,JAZ,JL)
+              ELSE
+                PZE(JI,JEL,JAZ,JL,IVDOP)=-XUNDEF
+              END IF !end IF(ZCONC_BIN(JI,JEL,JAZ,JL)>0.)
+            END IF !end IF(LWREFL)
+          ELSE
+            PZE(JI,JEL,JAZ,JL,IVDOP)=-XUNDEF        
+          END IF !end IF(GTHRESHOLD_V)   
+      
+          !--- Zhh, Zvv et variables globales
+          IF(GTHRESHOLD_Z .EQV. .FALSE.) THEN
+            PZE(JI,JEL,JAZ,JL,1:4)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IRHOHV:IDELTAHV)=-XUNDEF
+          END IF
+          !--- ZER, ZDA, KDR, RHR
+          IF(GTHRESHOLD_ZR .EQV. .FALSE.) THEN
+            PZE(JI,JEL,JAZ,JL,IZER)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IZDA)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IKDR)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IRHR)=-XUNDEF
+          END IF
+          !--- ZES, ZDS, KDS, RHS
+          IF(GTHRESHOLD_ZS .EQV. .FALSE.) THEN
+            PZE(JI,JEL,JAZ,JL,IZES)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IZDS)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IKDS)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IRHS)=-XUNDEF
+          END IF
+
+          !--- ZEG, ZDG, KDG, RHG
+          IF(GTHRESHOLD_ZG .EQV. .FALSE.) THEN
+            PZE(JI,JEL,JAZ,JL,IZEG)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IZDG)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IKDG)=-XUNDEF
+            PZE(JI,JEL,JAZ,JL,IRHG)=-XUNDEF
+          END IF
+          !--- ZEI
+          IF(GTHRESHOLD_ZI .EQV. .FALSE.) THEN
+            PZE(JI,JEL,JAZ,JL,IZEI)=-XUNDEF
+          END IF     
+        ELSE 
+          ! ground clutter or outside Meso-NH domain 
+          !(IF T not defined or if one undef point at least in gate)
+          PZE(JI,JEL,JAZ,JL,:)=XVALGROUND
+        END IF 
+        IF(PZE(JI,JEL,JAZ,JL,1) < 0. .AND. PZE(JI,JEL,JAZ,JL,1)/=-XUNDEF) THEN  ! flag bin when underground => xvalground si < 0?                 
+          PZE(JI,JEL,JAZ,JL,:)=XVALGROUND
+        END IF ! end IF(PZE(JI,JEL,JAZ,JL,1) < 0.)
+      END DO ! end DO JL=1,INBSTEPMAX
+    END DO !end DO JAZ=1,INBAZIM
+  END DO !end DO JEL=1,IEL
+END DO !end DO JI=1,INBRAD
+DEALLOCATE(ZREFL,ZVTEMP,ZRTMIN)
+WRITE(ILUOUT0,*) '*****************FIN RADAR_SCATTERING ***********************' 
+WRITE(ILUOUT0,*) 'NB PZE MIN MAX :', MINVAL(PZE(:,:,:,:,IZEI)),MAXVAL(PZE(:,:,:,:,IZEI))
+WRITE(ILUOUT0,*) 'NB PZE VALGROUND :', COUNT(PZE(:,:,:,:,IZEI) ==XVALGROUND)
+WRITE(ILUOUT0,*) 'NB PZE -XUNDEF :', COUNT(PZE(:,:,:,:,IZEI) ==-XUNDEF)
+WRITE(ILUOUT0,*) 'NB PZE > 0 :', COUNT(PZE(:,:,:,:,IZEI)>0.)
+WRITE(ILUOUT0,*) 'NB PZE = 0 :', COUNT(PZE(:,:,:,:,IZEI)==0.)
+WRITE(ILUOUT0,*) 'NB PZE < 0 :', COUNT(PZE(:,:,:,:,IZEI) < 0.)-COUNT(PZE(:,:,:,:,IZEI) ==XVALGROUND)
 IF(NDIFF/=0) DEALLOCATE(ZX,ZW)
 IF (LATT) DEALLOCATE(ZAELOC,ZAETOT)
-WRITE(0,*) 'END OF RADAR SCATTERING'
+WRITE(ILUOUT0,*) 'END OF RADAR SCATTERING'
 END SUBROUTINE RADAR_SCATTERING
 
diff --git a/src/MNH/radar_simulator.f90 b/src/MNH/radar_simulator.f90
index 6ae3191ca1656757547d9ff7b974b37a9c5037e8..c0bd0044c09edb6eb077af287001e3b2e83e1e54 100644
--- a/src/MNH/radar_simulator.f90
+++ b/src/MNH/radar_simulator.f90
@@ -12,17 +12,19 @@
 !      ###########################
 !
 INTERFACE
-    SUBROUTINE RADAR_SIMULATOR(PUM,PVM,PWM,PRT,PCIT,PRHODREF,PTEMP,PPABSM,PREFL_CART,PLATLON)
-!
+    SUBROUTINE RADAR_SIMULATOR(PUM,PVM,PWM,PRT,PCIT,PRHODREF,PTEMP,PPABSM,PREFL_CART,PLATLON,PCRT)
+! variables en entree
 REAL,DIMENSION(:,:,:),  INTENT(IN), TARGET :: PUM,PVM,PWM ! wind components
 REAL,DIMENSION(:,:,:,:),INTENT(IN), TARGET  :: PRT  ! microphysical  mix. ratios at t
 REAL,DIMENSION(:,:,:),  INTENT(IN), TARGET  :: PCIT ! pristine ice concentration at t
 REAL,DIMENSION(:,:,:),  INTENT(IN), TARGET  :: PRHODREF ! density of the ref. state
 REAL,DIMENSION(:,:,:),  INTENT(IN), TARGET  :: PTEMP    ! air temperature
 REAL,DIMENSION(:,:,:),  INTENT(IN)  :: PPABSM   ! Absolute pressure
-!
-REAL,DIMENSION(:,:,:,:,:),INTENT(OUT) :: PREFL_CART ! radar reflectivity in dBZ on observation cartesian grid
+! variables en sortie
+REAL,DIMENSION(:,:,:,:,:),INTENT(OUT) :: PREFL_CART ! radar variables (including reflectivity in dBZ) on observation cartesian grid
 REAL,DIMENSION(:,:,:),  INTENT(OUT) :: PLATLON! latlon of cartesian grid points
+REAL,DIMENSION(:,:,:),OPTIONAL,INTENT(IN), TARGET  :: PCRT  ! rain concentration at t
+
 !
 END SUBROUTINE RADAR_SIMULATOR
 !
@@ -32,7 +34,7 @@ END MODULE MODI_RADAR_SIMULATOR
 !
 !     #########################################################################
       SUBROUTINE RADAR_SIMULATOR(PUM,PVM,PWM,PRT,PCIT,PRHODREF,PTEMP,PPABSM, &
-           PREFL_CART,PLATLON)
+           PREFL_CART,PLATLON,PCRT)
 !     #########################################################################
 !
 !!****  *RADAR_SIMULATOR * - computes some pertinent radar parameters on PPIs
@@ -83,15 +85,48 @@ END MODULE MODI_RADAR_SIMULATOR
 !!
 !!    AUTHOR
 !!    ------
-!!      O. Caumont & V. Ducrocq      * Météo-France *
+!!      O. Caumont & V. Ducrocq      * Meteo-France *
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    26/03/2004
-!!      O. Caumont  14/09/2009 modifications to allow for polar outputs
-!!      O. Caumont 11/02/2010 thresholding and conversion from linear to log values after interpolation instead of before.
-!!      O. Caumont 01/2011 gate-to-gate path computations revised (formulation+efficiency); comments in outputs revised
+!!    Original    26/03/2004
+!!    O. Caumont  14/09/2009 modifications to allow for polar outputs
+!!    O. Caumont 11/02/2010 thresholding and conversion from linear to log values after interpolation instead of before.
+!!    O. Caumont 01/2011 gate-to-gate path computations revised (formulation+efficiency); comments in outputs revised
+!!    C. Augros  22/02/2012 add of comments
+!!    Attention : dans cette version, la temperature est forcee a 15° et l'elevation
+!!    a la valeur donnee dans DIAG (pas de prise en compte de la courbure du faisceau)
+!!
+!!    ------------- MY_MODIF 8 ------
+!!    C. Augros 02/2013
+!!    All thresholding is done in radar_scattering.
+!!
+!!    ------------- MY_MODIF 9 ------
+!!    C. Augros 20/02/2013
+!!    Calculation of RHV, PDP and DHV
+!!
+!!    ------------- MY_MODIF 10 ------
+!!    C. Augros 28/02/2013
+!!    add of Avv (specific vertical attenuation) and T° in output files
 !!
+!!    ------------- MY_MODIF 11 ------
+!!    C. Augros 7/03/2013
+!!    Add of NDIFF=7 (TmatInt) for snow and graupel
+!!    RHR-RHG, ZDA-ZDG, KDR-KDG (RhoHV, ZDR and Kdp for rain, snow and graupel)
+!!    in output files
+!!
+!!    C. Augros 13/03/2013
+!!    Thresholding of radar variables for each specie (specific SNR value for rain, snow, ice, graupel)
+!!    
+!!    C. Augros 22/03/2013
+!!    Correction of interpolation part: add of "IF LATT" to set variables (AER-AEG, ATR-ATG)
+!!    to xvalground or xundef
+!!
+!!    C. Augros 27/03/2013
+!!    for polar output:
+!!    NBAZIM set in nameliste (720) 
+!!    ZAZIM_BASE(JAZ)=(0.5+JAZ-1)*ZZSTEP
+!!       
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -99,8 +134,6 @@ END MODULE MODI_RADAR_SIMULATOR
 !
 USE MODD_CST              , ONLY: XPI,XRD,XRV,XRADIUS
 USE MODD_REF
-USE MODD_RAIN_ICE_DESCR
-USE MODD_RAIN_ICE_PARAM
 USE MODD_PARAMETERS
 USE MODD_LUNIT
 !
@@ -137,6 +170,7 @@ REAL,DIMENSION(:,:,:),  INTENT(IN)  :: PPABSM     ! Absolute pressure
 !
 REAL,DIMENSION(:,:,:,:,:),INTENT(OUT) :: PREFL_CART ! radar reflectivity in dBZ and other parameters on observation cartesian or polar grid
 REAL,DIMENSION(:,:,:),    INTENT(OUT) :: PLATLON! latlon of cartesian grid points
+REAL,DIMENSION(:,:,:),OPTIONAL,INTENT(IN), TARGET  :: PCRT  ! rain concentration at t
 
 !
 !*       0.2   Declarations of local variables :
@@ -154,13 +188,13 @@ INTEGER :: IIELV ! maximum number of elevations
 INTEGER :: ILUOUT0 ! Logical unit number for output-listing
 INTEGER :: IRESP   ! Return code of FM-routines
 INTEGER :: JI,JL,JEL,JAZ,JH,JV ! Loop variables of control
-INTEGER :: IEL
-INTEGER,DIMENSION(:,:,:,:),ALLOCATABLE :: IREFL_CART_NB!
+INTEGER :: IEL,IND,INDV
+INTEGER,DIMENSION(:,:,:,:),ALLOCATABLE :: IREFL_CART_NB,IREFL_CART_NBR,IREFL_CART_NBI,IREFL_CART_NBS,IREFL_CART_NBG!
 INTEGER,DIMENSION(:,:,:,:),ALLOCATABLE :: IVDOP_CART_NB!
 REAL,DIMENSION(:,:,:,:,:),ALLOCATABLE  :: ZZE ! gate equivalent reflectivity factor, ZDR, KDP, 
-REAL,DIMENSION(:,:,:,:),ALLOCATABLE    ::  ZELEV        ! elevation in rad.
-REAL,DIMENSION(:),  ALLOCATABLE    ::  ZAZIM_BASE   ! azimuth in rad. of the beam centre
-REAL,DIMENSION(:,:,:),  ALLOCATABLE    ::  ZAZIM        ! azimuth in rad. of discretized beam
+REAL,DIMENSION(:,:,:,:),ALLOCATABLE    :: ZELEV        ! elevation in rad.
+REAL,DIMENSION(:),  ALLOCATABLE        :: ZAZIM_BASE   ! azimuth in rad. of the beam centre
+REAL,DIMENSION(:,:,:),  ALLOCATABLE    :: ZAZIM        ! azimuth in rad. of discretized beam
 !
 REAL, DIMENSION(:,:,:,:,:,:),ALLOCATABLE :: ZX_RAY   ! x positions of the points along the ray-tracing
 REAL, DIMENSION(:,:,:,:,:,:),ALLOCATABLE :: ZY_RAY   ! y positions of the points along the ray-tracing
@@ -200,16 +234,28 @@ INTEGER :: INVAR
 REAL :: r,h,alph
 
 ! convective/stratiform
-LOGICAL,DIMENSION(:,:,:),ALLOCATABLE               :: GBU_MSK
+LOGICAL,DIMENSION(:,:,:),ALLOCATABLE             :: GBU_MSK
 REAL, DIMENSION(:,:,:),ALLOCATABLE, TARGET       :: ZBU_MASK
 REAL, DIMENSION(:,:,:,:,:,:),ALLOCATABLE, TARGET :: ZBU_MASK_RAY
 ! refractivity
 REAL, DIMENSION(:,:,:,:,:,:),ALLOCATABLE :: ZN_RAY,ZDNDZ_RAY ! refractivity and its vertical gradient in radar coordinates
-REAL, DIMENSION(:,:,:),ALLOCATABLE       :: ZN,ZDNDZ
-INTEGER :: IRFR,IDNZ                                    ! index of ZN_RAY,ZDNDZ_RAY in ZZE
-INTEGER :: IVDOP,IHAS
-INTEGER,PARAMETER :: IZER=5,IZEG=8,IATR=14,IATG=17
-!
+REAL, DIMENSION(:,:,:),ALLOCATABLE       :: ZN,ZDNDZ ! index of ZN_RAY,ZDNDZ_RAY in ZZE
+
+INTEGER,PARAMETER :: IZER=5,IZEI=6,IZES=7,IZEG=8
+INTEGER,PARAMETER :: IVDOP=9
+INTEGER,PARAMETER :: IAER=10,IAEI=11,IAES=12,IAEG=13
+INTEGER,PARAMETER :: IAVR=14,IAVI=15,IAVS=16,IAVG=17
+INTEGER,PARAMETER :: IATR=18,IATI=19,IATS=20,IATG=21
+INTEGER :: IRHV,IPDP,IDHV
+INTEGER :: IRHR, IRHS, IRHG, IZDA, IZDS, IZDG, IKDR, IKDS, IKDG
+INTEGER :: IHAS,IRFR,IDNZ   
+REAL :: ZZSTEP
+!
+!Modif pour LIMA
+!
+LOGICAL :: GLIMA
+REAL, DIMENSION(:,:,:,:,:,:),ALLOCATABLE, TARGET :: ZCRT_RAY  ! rain concentration interpolated along the rays!
+REAL, DIMENSION(:,:,:,:,:,:),ALLOCATABLE :: ZWORK
 !-------------------------------------------------------------------------------
 !
 !
@@ -232,7 +278,7 @@ IJE = IJU - JPHEXT
 IKE = IKU - JPVEXT
 ! convective/stratiform
 ALLOCATE(GBU_MSK(IIU,IJU,4))
-CALL SET_MSK(PRT,PRHODREF,GBU_MSK) ! on récupère GBU_MSK
+CALL SET_MSK(PRT,PRHODREF,GBU_MSK) ! on récupère GBU_MSK
 ALLOCATE(ZBU_MASK(SIZE(PTEMP,1),SIZE(PTEMP,2),SIZE(PTEMP,3)))
 ZBU_MASK(:,:,1)=0.
 WHERE(GBU_MSK(:,:,2)) ! stratiform
@@ -244,6 +290,12 @@ END WHERE
 DEALLOCATE(GBU_MSK)
 ZBU_MASK(:,:,:)=SPREAD(ZBU_MASK(:,:,1),DIM=3,NCOPIES=SIZE(PTEMP,3))
 IIELV=MAXVAL(NBELEV(1:NBRAD))
+! LIMA
+IF (PRESENT(PCRT)) THEN
+  GLIMA=.TRUE.
+ELSE
+  GLIMA=.FALSE.
+ENDIF
 !
 !*       1.2 Some constants and parameters
 !   
@@ -252,32 +304,50 @@ ZRDSDG=XPI/180.       ! PI/180
 !
 !*       1.3 beam characteristics initialization
 !  
-! azimuths 0°=N 90°=E
-ALLOCATE(ZAZIM_BASE(NBAZIM),ZAZIM(NBRAD,NBAZIM,NPTS_H))
-!
-DO JAZ=1,NBAZIM
-   IF(JAZ<=NMAX) THEN
+! azimuths 0=N 90=E
+WRITE(ILUOUT0,*) "NBAZIM",NBAZIM
+ALLOCATE(ZAZIM_BASE(NBAZIM),ZAZIM(NBRAD,NBAZIM,NPTS_H)) 
+!calculation of the azimut of the center of the beam (ZAZIM_BASE)
+!so that each pixel of the square grid circling the PPI (which number of pixel in the radius is NMAX)
+!NMAX=INT(NBSTEPMAX*XSTEP_RAD/XGRID) : number of range 
+!contains one azimut only
+
+IF (LCART_RAD) THEN  
+  DO JAZ=1,NBAZIM ! NBAZIM defined in mode_interpol_beam
+    IF(JAZ<=NMAX) THEN
       ZAZIM_BASE(JAZ)=ATAN((JAZ-.5)/NMAX)
-   ELSE IF(JAZ<=3*NMAX) THEN
+    ELSE IF(JAZ<=3*NMAX) THEN
       ZAZIM_BASE(JAZ)=XPI/2+ATAN((-2*NMAX+JAZ-.5)/NMAX)
-   ELSE IF(JAZ<=5*NMAX) THEN
+    ELSE IF(JAZ<=5*NMAX) THEN
       ZAZIM_BASE(JAZ)=XPI-ATAN((4*NMAX-JAZ+.5)/NMAX)
-   ELSE IF(JAZ<=7*NMAX) THEN
+    ELSE IF(JAZ<=7*NMAX) THEN
       ZAZIM_BASE(JAZ)=3*XPI/2-ATAN((6*NMAX-JAZ+.5)/NMAX)
-   ELSE 
+    ELSE 
       ZAZIM_BASE(JAZ)=2*XPI-ATAN((8*NMAX-JAZ+.5)/NMAX)
-   END IF
-END DO
+    END IF
+  END DO
+ELSE
+  ZZSTEP=2*XPI/NBAZIM
+  DO JAZ=1,NBAZIM
+      ZAZIM_BASE(JAZ)=(0.5+JAZ-1)*ZZSTEP
+  END DO
+END IF
+
+WRITE(ILUOUT0,*) "ZAZIM_BASE(1)",ZAZIM_BASE(1)
+WRITE(ILUOUT0,*) "ZAZIM_BASE(NBAZIM/2.)",ZAZIM_BASE(NBAZIM/2.)
+WRITE(ILUOUT0,*) "ZAZIM_BASE(NBAZIM)",ZAZIM_BASE(NBAZIM)
+
+!copy in the 3D matrix (ZAZIM) containing the horizontal discretization of the beam for all azimut of all radars 
 ZAZIM(:,1:NBAZIM,:)=SPREAD(SPREAD(ZAZIM_BASE(1:NBAZIM),DIM=1,NCOPIES=NBRAD),DIM=3,NCOPIES=NPTS_H)
 !  
 ! elevations 
 ALLOCATE(ZELEV(NBRAD,IIELV,NBSTEPMAX+1,NPTS_V))
-!
+! 4D matrix containing the vertical discretization of the beam for all elevations (with a value for each range step)
 ZELEV(:,:,:,:)=SPREAD(SPREAD(XELEV(1:NBRAD,1:IIELV),DIM=3,NCOPIES=NBSTEPMAX+1),&
      DIM=4,NCOPIES=NPTS_V)
 ! 
 ! Discretization of the gate 
-!
+! Calculation of the position ZX_H and ZX_V and weights ZW_H and ZW_V for each discretization of the beam (horizontally and vertically)
 ALLOCATE(ZX_H((NPTS_H+1)/2),ZW_H((NPTS_H+1)/2))
 ALLOCATE(ZX_V((NPTS_V+1)/2),ZW_V((NPTS_V+1)/2))
 IF(LQUAD) THEN
@@ -309,21 +379,45 @@ ZELEV(:,:,:,:)=ZELEV(:,:,:,:)*ZRDSDG ! in radian
 ! initialisation of refractivity indices
 IRFR=1    ! this is used down there in the interpolation part
 IDNZ=1 ! this is used down there in the interpolation part
-IHAS=10
-IVDOP=9
-IF(LREFR) IRFR=16 ! refractivity
+!IHAS=10 !number of calculated radar variables (on the radar projection) 
+!IHAS=13 !add of RhoHV, PhiDP, DeltaHV in ZZE
+IHAS=22 !add of RHR-RHG, ZDA-ZDG, KDR-KDG
+IF(LREFR) THEN
+  IRFR=IHAS+7 ! add of TEM:
+                      !"HAS","M_R","M_I","M_S","M_G","CIT","TEM"
+                      ! puis "RFR"
+  IF (GLIMA) IRFR=IRFR+1 ! add "CRT"
+ENDIF
 IF(LDNDZ) THEN
    IF(LREFR) THEN
-      IDNZ=17 ! refractivity vertical gradient
+      IDNZ=IHAS+8 !+7 !17 ! refractivity vertical gradient
    ELSE
-      IDNZ=16 ! refractivity vertical gradient
+      IDNZ=IHAS+7 !+6 !16 ! refractivity vertical gradient
    END IF
+  IF (GLIMA) IDNZ=IDNZ+1
 END IF
 IF(LATT) THEN
-   IRFR=IRFR+8
-   IDNZ=IDNZ+8
-   IHAS=IHAS+8
+   IRFR=IRFR+12 !add of AVR-AVG (vertical specific attenuation)
+   IDNZ=IDNZ+12
+   IHAS=IHAS+12
+END IF
+IF (LATT) THEN
+  IRHV=22   !"ZHH","ZDR","KDP","CSR","ZER","ZEI","ZES","ZEG","VRU"
+            !"AER","AEI","AES","AEG","AVR","AVI","AVS","AVG","ATR","ATI","ATS","ATG"
+ELSE
+  IRHV=10
 END IF
+IPDP=IRHV+1
+IDHV=IPDP+1
+IRHR=IDHV+1
+IRHS=IRHR+1
+IRHG=IRHS+1
+IZDA=IRHG+1
+IZDS=IZDA+1
+IZDG=IZDS+1
+IKDR=IZDG+1
+IKDS=IKDR+1
+IKDG=IKDS+1
 !
 !----------------------------------------------------------------------------------------
 !*       2.    RAY TRACING DEFINITION
@@ -336,21 +430,21 @@ IF (XRPK<0.) THEN     ! projection from north pole
   ZLAT0=-XLAT0
   ZBETA=-XBETA
   ZLON0=XLON0+180.
-  WRITE(0,*) 'projection from north pole'
-  WRITE(0,*) 'ZRPK',ZRPK
-  WRITE(0,*) 'ZLAT0',ZLAT0
-  WRITE(0,*) 'ZBETA',ZBETA
-  WRITE(0,*) 'ZLON0',ZLON0
+  WRITE(ILUOUT0,*) 'projection from north pole'
+  WRITE(ILUOUT0,*) 'ZRPK',ZRPK
+  WRITE(ILUOUT0,*) 'ZLAT0',ZLAT0
+  WRITE(ILUOUT0,*) 'ZBETA',ZBETA
+  WRITE(ILUOUT0,*) 'ZLON0',ZLON0
 ELSE                  ! projection from south pole
   ZRPK=XRPK
   ZLAT0=XLAT0
   ZBETA=XBETA
   ZLON0=XLON0
-  WRITE(0,*) 'projection from south pole'
-  WRITE(0,*) 'ZRPK:',ZRPK
-  WRITE(0,*) 'ZLAT0:',ZLAT0
-  WRITE(0,*) 'ZBETA:',ZBETA
-  WRITE(0,*) 'ZLON0:',ZLON0
+  WRITE(ILUOUT0,*) 'projection from south pole'
+  WRITE(ILUOUT0,*) 'ZRPK:',ZRPK
+  WRITE(ILUOUT0,*) 'ZLAT0:',ZLAT0
+  WRITE(ILUOUT0,*) 'ZBETA:',ZBETA
+  WRITE(ILUOUT0,*) 'ZLON0:',ZLON0
 ENDIF
 ZCLAT0 = COS(ZRDSDG*ZLAT0)
 ZSLAT0 = SIN(ZRDSDG*ZLAT0)
@@ -381,8 +475,8 @@ DO JI=1,NBRAD
 END DO
 XZ_INI(:)=XALT_RAD(:)       ! z positions of the ground source signal 
 !
-ALLOCATE(ZX_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),&
-         ZY_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),&
+ALLOCATE(ZX_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),& !6D matrix : X position of the pixel in the model grid for each range
+         ZY_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),& !of each discretisation of each elevation and each azimut of each radar 
          ZZ_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),&
          ZLAT(NPTS_H,NPTS_V),&
          ZLON(NPTS_H,NPTS_V),&
@@ -395,11 +489,11 @@ ZZ_RAY(:,:,:,:,:,:)=0.
 ZDX_NAT(:,:,:,:,:,:)=0.
 ZDY_NAT(:,:,:,:,:,:)=0.
 !
-ZX_RAY(1:NBRAD,:,:,1,:,:)=SPREAD(SPREAD(SPREAD(SPREAD(XX_INI(1:NBRAD),DIM=2,NCOPIES=IIELV),&
+ZX_RAY(1:NBRAD,:,:,1,:,:)=SPREAD(SPREAD(SPREAD(SPREAD(XX_INI(1:NBRAD),DIM=2,NCOPIES=IIELV),& !initialization with the X position of the radar
      DIM=3,NCOPIES=NBAZIM),DIM=4,NCOPIES=NPTS_H),DIM=5,NCOPIES=NPTS_V)
-ZY_RAY(1:NBRAD,:,:,1,:,:)=SPREAD(SPREAD(SPREAD(SPREAD(XY_INI(1:NBRAD),DIM=2,NCOPIES=IIELV), &
+ZY_RAY(1:NBRAD,:,:,1,:,:)=SPREAD(SPREAD(SPREAD(SPREAD(XY_INI(1:NBRAD),DIM=2,NCOPIES=IIELV), & !initialization with the Y position of the radar
      DIM=3,NCOPIES=NBAZIM),DIM=4,NCOPIES=NPTS_H),DIM=5,NCOPIES=NPTS_V)
-ZZ_RAY(1:NBRAD,:,:,1,:,:)=SPREAD(SPREAD(SPREAD(SPREAD(XZ_INI(1:NBRAD),DIM=2,NCOPIES=IIELV), &
+ZZ_RAY(1:NBRAD,:,:,1,:,:)=SPREAD(SPREAD(SPREAD(SPREAD(XZ_INI(1:NBRAD),DIM=2,NCOPIES=IIELV), & !initialization with the Z position of the radar
      DIM=3,NCOPIES=NBAZIM),DIM=4,NCOPIES=NPTS_H),DIM=5,NCOPIES=NPTS_V)
 ! refractivity
 IF(LREFR) ALLOCATE(ZN_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
@@ -417,145 +511,144 @@ IF(NCURV_INTERPOL == 1) THEN
 ENDIF
 
 !
-!*       2.3  positions of the rays in the MESO-NH conformal projection
+!*       2.3  positions of the rays in the MESO-NH conformal projection (calculation of ZX_RAY, ZY_RAY and ZZ_RAY)
 !
 DO JI=1,NBRAD
-   IEL=NBELEV(JI)
-   WRITE(0,*) 'RADAR #',JI,'Number of ELEVATIONS: ',NBELEV(JI)
-   WRITE(0,*) '  Elevations used:'
-   DO JEL=1,IEL
-      WRITE(0,*) "    ",ZELEV(JI,JEL,1,:)/ZRDSDG
-      DO JAZ=1,NBAZIM
-         label: DO JL=1,NBSTEPMAX
-            ! SM_LATLON takes bidimensional arrays as arguments
-            CALL SM_LATLON(XLATORI,XLONORI,   &   
-                 ZX_RAY(JI,JEL,JAZ,JL,:,:), ZY_RAY(JI,JEL,JAZ,JL,:,:),ZLAT(:,:),ZLON(:,:))
-            DO JH=1,NPTS_H
-               DO JV=1,NPTS_V
-                  !   
-                  !*        Compute positions of the gates
-                  !      
-                  ! Compute local Map factor and other projection factors
-                  IF(XRPK<0.)  ZLAT(JH,JV)=-ZLAT(JH,JV)     ! projection from north pole 
-                  
-                  IF(ABS(ZRPK-1.)>1.E-10 .AND. ABS(COS(ZRDSDG*ZLAT(JH,JV)))<1.E-10) THEN
-                     WRITE(0,*) 'Error in projection : '
-                     WRITE(0,*) 'pole in the domain, but not with stereopolar projection'
-                     !callabortstop
-                     CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-                     CALL ABORT
-                     STOP
-                  ENDIF
-                  !
-                  IF(ABS(ZCLAT0)<1.E-10 .AND. ABS(ZRPK-1.)<1.E-10) THEN
-                     ZMAP = (1.+ZSLAT0)/(1.+SIN(ZRDSDG*ZLAT(JH,JV)))
-                  ELSE IF(ABS(COS(ZRDSDG*ZLAT(JH,JV)))>1.E-10) THEN
-                     ZMAP = ((ZCLAT0/COS(ZRDSDG*ZLAT(JH,JV)))**(1.-ZRPK))      &
-                          * ((1.+ZSLAT0)/(1.+SIN(ZRDSDG*ZLAT(JH,JV))))**ZRPK
-                  ELSE
-                     ZMAP = (1.+ZSLAT0)/(1.+SIN(ZRDSDG*ZLAT(JH,JV)))
-                  END IF
-                  ZGAMMA=(ZRPK*(ZLON(JH,JV)-ZLON0)-ZBETA)*ZRDSDG
-                  ZCOSG=COS(ZGAMMA)
-                  ZSING=SIN(ZGAMMA)
+  IEL=NBELEV(JI)
+  WRITE(ILUOUT0,*) 'RADAR #',JI,'Number of ELEVATIONS: ',NBELEV(JI)
+  WRITE(ILUOUT0,*) '  Elevations used:'
+  DO JEL=1,IEL
+    WRITE(ILUOUT0,*) "    ",ZELEV(JI,JEL,1,:)/ZRDSDG
+    DO JAZ=1,NBAZIM
+      label: DO JL=1,NBSTEPMAX
+        ! SM_LATLON takes bidimensional arrays as arguments
+        CALL SM_LATLON(XLATORI,XLONORI,   &   
+               ZX_RAY(JI,JEL,JAZ,JL,:,:), ZY_RAY(JI,JEL,JAZ,JL,:,:),ZLAT(:,:),ZLON(:,:))
+        DO JH=1,NPTS_H
+          DO JV=1,NPTS_V
+            !   
+            !*        Compute positions of the gates
+            !      
+            ! Compute local Map factor and other projection factors
+            IF(XRPK<0.)  ZLAT(JH,JV)=-ZLAT(JH,JV)     ! projection from north pole 
+               
+            IF(ABS(ZRPK-1.)>1.E-10 .AND. ABS(COS(ZRDSDG*ZLAT(JH,JV)))<1.E-10) THEN
+              WRITE(ILUOUT0,*) 'Error in projection : '
+              WRITE(ILUOUT0,*) 'pole in the domain, but not with stereopolar projection'
+              !callabortstop
+              CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+              CALL ABORT
+              STOP
+            ENDIF
+            !
+            IF(ABS(ZCLAT0)<1.E-10 .AND. ABS(ZRPK-1.)<1.E-10) THEN
+              ZMAP = (1.+ZSLAT0)/(1.+SIN(ZRDSDG*ZLAT(JH,JV)))
+            ELSE IF(ABS(COS(ZRDSDG*ZLAT(JH,JV)))>1.E-10) THEN
+              ZMAP = ((ZCLAT0/COS(ZRDSDG*ZLAT(JH,JV)))**(1.-ZRPK))      &
+                   * ((1.+ZSLAT0)/(1.+SIN(ZRDSDG*ZLAT(JH,JV))))**ZRPK
+            ELSE
+              ZMAP = (1.+ZSLAT0)/(1.+SIN(ZRDSDG*ZLAT(JH,JV)))
+            END IF
+            ZGAMMA=(ZRPK*(ZLON(JH,JV)-ZLON0)-ZBETA)*ZRDSDG
+            ZCOSG=COS(ZGAMMA)
+            ZSING=SIN(ZGAMMA)
                   
-                  ! compute positions of radar gates (2 methods) : 
-                  !  First method : gate-to-gate computation using the model's index of refraction
-                  IF(NCURV_INTERPOL == 1) THEN 
-                     ! first compute vertical position (height)          
-                     ! compute the index of refraction at the radar gate boundaries
-                     CALL INTERPOL_BEAM(ZN(:,:,:),ZN1,ZX_RAY(JI,JEL,JAZ,JL,JH,JV),&
-                          ZY_RAY(JI,JEL,JAZ,JL,JH,JV),ZZ_RAY(JI,JEL,JAZ,JL,JH,JV),ZXHATM(:),ZYHATM(:),ZZM(:,:,:))
-                     IF(LREFR) ZN_RAY(JI,JEL,JAZ,JL,JH,JV)=(ZN1-1.)*1.E6
-                     IF(LDNDZ) THEN
-                        IF(JL==1) THEN
-                           ZDNDZ_RAY(JI,JEL,JAZ,JL,JH,JV)=0. ! this is not true, this is set to XVALGROUND afterwards
-                        ELSE
-                           ZDNDZ_RAY(JI,JEL,JAZ,JL,JH,JV)=(ZN1-ZN0)*1.E6/(ZZ_RAY(JI,JEL,JAZ,JL,1,1)-ZZ_RAY(JI,JEL,JAZ,JL-1,1,1))
-                        END IF
-                     END IF
-                     IF(ZN1==-XUNDEF) THEN ! we are underground
-                        ZZ_RAY(JI,JEL,JAZ,JL:NBSTEPMAX+1,:,:)=-XUNDEF ! rest of the ray is flagged undefined
-                        EXIT label
-                     ELSE
-                        IF(JL > 1) THEN 
-! next line to comment (std refraction)
-!                           ZN1=ZN0-(ZZ_RAY(JI,JEL,JAZ,JL,1,1)-ZZ_RAY(JI,JEL,JAZ,JL-1,1,1))/(4.*XRADIUS)
-                           IF(ZN0/ZN1*(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL-1,JH,JV))/(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV)) &
-                                *COS(ZELEV(JI,JEL,JL-1,JV)) >= 1.) THEN ! it means the slope of the ray path is 0 relative to the Earth
-                              ZELEV(JI,JEL,JL,JV)=-ACOS(2.-ZN0/ZN1*(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL-1,JH,JV)) &
-                                   /(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV))*COS(ZELEV(JI,JEL,JL-1,JV)))
-                           ELSE ! usual formula
-                              ZELEV(JI,JEL,JL,JV)=ZELEV(JI,JEL,JL-1,JV)/ABS(ZELEV(JI,JEL,JL-1,JV))* &
-                                   ACOS(ZN0/ZN1*(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL-1,JH,JV))/            &
-                                   (XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV))*COS(ZELEV(JI,JEL,JL-1,JV)))
-                           END IF
-                           ZDNDZ1=(ZN1-ZN0)/(ZZ_RAY(JI,JEL,JAZ,JL,1,1)-ZZ_RAY(JI,JEL,JAZ,JL-1,1,1))
-                        ELSE ! for first gate DNDZ1 is the local value at radar
-                           CALL INTERPOL_BEAM(ZDNDZ(:,:,:),ZDNDZ1,ZX_RAY(JI,JEL,JAZ,JL,JH,JV),&
-                              ZY_RAY(JI,JEL,JAZ,JL,JH,JV),ZZ_RAY(JI,JEL,JAZ,JL,JH,JV),ZXHATM(:),ZYHATM(:),ZZM(:,:,:))
-                        END IF
-                        IF(ZDNDZ1>-ZN1/XRADIUS/COS(ZELEV(JI,JEL,JL,JV))) THEN
-                          ZKE=1./(1.+XRADIUS/ZN1*ZDNDZ1*COS(ZELEV(JI,JEL,JL,JV)))
-                        ELSE
-                          ZKE=1./(1.-XRADIUS/ZN1*ZDNDZ1*COS(ZELEV(JI,JEL,JL,JV)))
-                        END IF
-                        ! éléments finis
-!                        ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)=SQRT(XSTEP_RAD**2+(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV))**2 &
-!                             +2.*XSTEP_RAD*(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV))*SIN(ZELEV(JI,JEL,JL,JV)))-XRADIUS
-                        ! Doviak & Zrnic
-                        ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZZ_RAY(JI,JEL,JAZ,JL,JH,JV)+SQRT(XSTEP_RAD**2+(ZKE*XRADIUS)**2 &
-                             +2.*XSTEP_RAD*ZKE*XRADIUS*SIN(ZELEV(JI,JEL,JL,JV)))-ZKE*XRADIUS
-                        ZN0=ZN1
-                        ! then compute horizontal position
-                        ZDX_NAT(JI,JEL,JAZ,JL,JH,JV)=XRADIUS*ASIN(XSTEP_RAD/ &
-                             (XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV))*COS(ZELEV(JI,JEL,JL,JV)))*SIN(ZAZIM(JI,JAZ,JH))
-                        ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)=XRADIUS*ASIN(XSTEP_RAD/ &
-                             (XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV))*COS(ZELEV(JI,JEL,JL,JV)))*COS(ZAZIM(JI,JAZ,JH))
-                        ZX_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZX_RAY(JI,JEL,JAZ,JL,JH,JV) & !!!
-                             +  (ZMAP* XRADIUS *((ZDX_NAT(JI,JEL,JAZ,JL,JH,JV) * ZCOSG) - &
-                             (ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)* ZSING)  ) &
-                             /(ZZ_RAY(JI,JEL,JAZ,JL,JH,JV) + XRADIUS))
-                        ZY_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZY_RAY(JI,JEL,JAZ,JL,JH,JV) + &
-                             (ZMAP* XRADIUS *((ZDX_NAT(JI,JEL,JAZ,JL,JH,JV) * ZSING) +  &
-                             (ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)* ZCOSG)  ) &
-                             /(ZZ_RAY(JI,JEL,JAZ,JL,JH,JV) + XRADIUS))
-                        !                  WRITE(0,*) 'ZY_RAY(',JI,JEL,JAZ,JL+1,')',ZY_RAY(JI,JEL,JAZ,JL+1)
-                     END IF
-                  ELSE 
-                     ! effective Earth radius model Doviak & Zrnic 1993 (2.28b) p. 21
-                     ! vertical position
-                     ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)=SQRT((JL*XSTEP_RAD)**2+(ZKE*XRADIUS)**2+ &
-                          2.*JL*XSTEP_RAD*ZKE*XRADIUS*SIN(ZELEV(JI,JEL,1,JV)))-ZKE*XRADIUS+ &
-                          ZZ_RAY(JI,JEL,JAZ,1,JH,JV)
-                     ! This formula is given by Doviak & Zrnic 1993 (9.9 p. 307) 
-                     ZELEV(JI,JEL,JL+1,JV)=ZELEV(JI,JEL,1,JV)+ATAN(JL*XSTEP_RAD*COS(ZELEV(JI,JEL,1,JV))&
-                          /(ZKE*XRADIUS+JL*XSTEP_RAD*SIN(ZELEV(JI,JEL,1,JV))))
-                     ! horizontal position (Doviak & Zrnic)
-                     ZDX_NAT(JI,JEL,JAZ,JL,JH,JV)=ZKE*XRADIUS*ASIN(JL*XSTEP_RAD*COS(ZELEV(JI,JEL,JL,JV)) &
-                          /(ZKE*XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)))*SIN(ZAZIM(JI,JAZ,JH))
-                     ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)=ZKE*XRADIUS*ASIN(JL*XSTEP_RAD*COS(ZELEV(JI,JEL,JL,JV)) &
-                          /(ZKE*XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)))*COS(ZAZIM(JI,JAZ,JH))
-                     ZX_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZX_RAY(JI,JEL,JAZ,1,JH,JV) & !!!
-                          +  (ZMAP* XRADIUS *((ZDX_NAT(JI,JEL,JAZ,JL,JH,JV) * ZCOSG) - &
-                          (ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)* ZSING)  ) &
-                          /(ZZ_RAY(JI,JEL,JAZ,JL,JH,JV) + XRADIUS))
-                     ZY_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZY_RAY(JI,JEL,JAZ,1,JH,JV) + &
-                          (ZMAP* XRADIUS *((ZDX_NAT(JI,JEL,JAZ,JL,JH,JV) * ZSING) +  &
-                          (ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)* ZCOSG)  ) &
-                          /(ZZ_RAY(JI,JEL,JAZ,JL,JH,JV) + XRADIUS))
+            ! compute positions of radar gates (2 methods) : 
+            !  First method : gate-to-gate computation using the model's index of refraction
+            IF(NCURV_INTERPOL == 1) THEN 
+              ! first compute vertical position (height)          
+              ! compute the index of refraction at the radar gate boundaries
+              CALL INTERPOL_BEAM(ZN(:,:,:),ZN1,ZX_RAY(JI,JEL,JAZ,JL,JH,JV),&
+              ZY_RAY(JI,JEL,JAZ,JL,JH,JV),ZZ_RAY(JI,JEL,JAZ,JL,JH,JV),ZXHATM(:),ZYHATM(:),ZZM(:,:,:))
+              IF(LREFR) ZN_RAY(JI,JEL,JAZ,JL,JH,JV)=(ZN1-1.)*1.E6 !LREFR: if true writes out refractivity (N ≡ (n − 1) × 106)
+              IF(LDNDZ) THEN !LDNDZ: if true writes out vertical gradient of refractivity
+                IF(JL==1) THEN
+                  ZDNDZ_RAY(JI,JEL,JAZ,JL,JH,JV)=0. ! this is not true, this is set to XVALGROUND afterwards
+                ELSE
+                  ZDNDZ_RAY(JI,JEL,JAZ,JL,JH,JV)=(ZN1-ZN0)*1.E6/(ZZ_RAY(JI,JEL,JAZ,JL,1,1)-ZZ_RAY(JI,JEL,JAZ,JL-1,1,1))
+                END IF
+              END IF
+              IF(ZN1==-XUNDEF) THEN ! we are underground
+                ZZ_RAY(JI,JEL,JAZ,JL:NBSTEPMAX+1,:,:)=-XUNDEF ! rest of the ray is flagged undefined
+                EXIT label
+              ELSE
+                IF(JL > 1) THEN 
+                  ! next line to comment (std refraction)
+                  !ZN1=ZN0-(ZZ_RAY(JI,JEL,JAZ,JL,1,1)-ZZ_RAY(JI,JEL,JAZ,JL-1,1,1))/(4.*XRADIUS)
+                  IF(ZN0/ZN1*(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL-1,JH,JV))/(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV)) &
+                       *COS(ZELEV(JI,JEL,JL-1,JV)) >= 1.) THEN ! it means the slope of the ray path is 0 relative to the Earth
+                    ZELEV(JI,JEL,JL,JV)=-ACOS(2.-ZN0/ZN1*(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL-1,JH,JV)) &
+                                /(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV))*COS(ZELEV(JI,JEL,JL-1,JV)))
+                  ELSE ! usual formula
+                    ZELEV(JI,JEL,JL,JV)=ZELEV(JI,JEL,JL-1,JV)/ABS(ZELEV(JI,JEL,JL-1,JV))* &
+                                        ACOS(ZN0/ZN1*(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL-1,JH,JV))/            &
+                                       (XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV))*COS(ZELEV(JI,JEL,JL-1,JV)))
                   END IF
-               END DO
-            END DO
-         END DO label
-      END DO
-   END DO
+                  ZDNDZ1=(ZN1-ZN0)/(ZZ_RAY(JI,JEL,JAZ,JL,1,1)-ZZ_RAY(JI,JEL,JAZ,JL-1,1,1))
+                ELSE ! for first gate DNDZ1 is the local value at radar
+                  CALL INTERPOL_BEAM(ZDNDZ(:,:,:),ZDNDZ1,ZX_RAY(JI,JEL,JAZ,JL,JH,JV),&
+                            ZY_RAY(JI,JEL,JAZ,JL,JH,JV),ZZ_RAY(JI,JEL,JAZ,JL,JH,JV),ZXHATM(:),ZYHATM(:),ZZM(:,:,:))
+                END IF
+                IF(ZDNDZ1>-ZN1/XRADIUS/COS(ZELEV(JI,JEL,JL,JV))) THEN
+                  ZKE=1./(1.+XRADIUS/ZN1*ZDNDZ1*COS(ZELEV(JI,JEL,JL,JV)))
+                ELSE
+                  ZKE=1./(1.-XRADIUS/ZN1*ZDNDZ1*COS(ZELEV(JI,JEL,JL,JV)))
+                END IF
+                ! elements finis
+                !ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)=SQRT(XSTEP_RAD**2+(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV))**2 &
+                !+2.*XSTEP_RAD*(XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL,JH,JV))*SIN(ZELEV(JI,JEL,JL,JV)))-XRADIUS
+                ! Doviak & Zrnic
+                ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZZ_RAY(JI,JEL,JAZ,JL,JH,JV)+SQRT(XSTEP_RAD**2+(ZKE*XRADIUS)**2 &
+                           +2.*XSTEP_RAD*ZKE*XRADIUS*SIN(ZELEV(JI,JEL,JL,JV)))-ZKE*XRADIUS
+                ZN0=ZN1
+                ! then compute horizontal position
+                ZDX_NAT(JI,JEL,JAZ,JL,JH,JV)=XRADIUS*ASIN(XSTEP_RAD/ &
+                        (XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV))*COS(ZELEV(JI,JEL,JL,JV)))*SIN(ZAZIM(JI,JAZ,JH))
+                ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)=XRADIUS*ASIN(XSTEP_RAD/ &
+                        (XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV))*COS(ZELEV(JI,JEL,JL,JV)))*COS(ZAZIM(JI,JAZ,JH))
+                ZX_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZX_RAY(JI,JEL,JAZ,JL,JH,JV) & !!!
+                        +  (ZMAP* XRADIUS *((ZDX_NAT(JI,JEL,JAZ,JL,JH,JV) * ZCOSG) - &
+                        (ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)* ZSING)  ) &
+                        /(ZZ_RAY(JI,JEL,JAZ,JL,JH,JV) + XRADIUS))
+                ZY_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZY_RAY(JI,JEL,JAZ,JL,JH,JV) + &
+                        (ZMAP* XRADIUS *((ZDX_NAT(JI,JEL,JAZ,JL,JH,JV) * ZSING) +  &
+                        (ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)* ZCOSG)  ) &
+                        /(ZZ_RAY(JI,JEL,JAZ,JL,JH,JV) + XRADIUS))
+              END IF
+            ELSE 
+              ! 2nd method : effective Earth radius model Doviak & Zrnic 1993 (2.28b) p. 21
+              ! vertical position
+              ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)=SQRT((JL*XSTEP_RAD)**2+(ZKE*XRADIUS)**2+ &
+                   2.*JL*XSTEP_RAD*ZKE*XRADIUS*SIN(ZELEV(JI,JEL,1,JV)))-ZKE*XRADIUS+ &
+                   ZZ_RAY(JI,JEL,JAZ,1,JH,JV)
+              ! This formula is given by Doviak & Zrnic 1993 (9.9 p. 307) 
+              ZELEV(JI,JEL,JL+1,JV)=ZELEV(JI,JEL,1,JV)+ATAN(JL*XSTEP_RAD*COS(ZELEV(JI,JEL,1,JV))&
+                  /(ZKE*XRADIUS+JL*XSTEP_RAD*SIN(ZELEV(JI,JEL,1,JV))))
+              ! horizontal position (Doviak & Zrnic)
+              ZDX_NAT(JI,JEL,JAZ,JL,JH,JV)=ZKE*XRADIUS*ASIN(JL*XSTEP_RAD*COS(ZELEV(JI,JEL,JL,JV)) &
+                  /(ZKE*XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)))*SIN(ZAZIM(JI,JAZ,JH))
+              ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)=ZKE*XRADIUS*ASIN(JL*XSTEP_RAD*COS(ZELEV(JI,JEL,JL,JV)) &
+                  /(ZKE*XRADIUS+ZZ_RAY(JI,JEL,JAZ,JL+1,JH,JV)))*COS(ZAZIM(JI,JAZ,JH))
+              ZX_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZX_RAY(JI,JEL,JAZ,1,JH,JV) & !!!
+                  +  (ZMAP* XRADIUS *((ZDX_NAT(JI,JEL,JAZ,JL,JH,JV) * ZCOSG) - &
+                  (ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)* ZSING)  ) &
+                  /(ZZ_RAY(JI,JEL,JAZ,JL,JH,JV) + XRADIUS))
+              ZY_RAY(JI,JEL,JAZ,JL+1,JH,JV)=ZY_RAY(JI,JEL,JAZ,1,JH,JV) + &
+                  (ZMAP* XRADIUS *((ZDX_NAT(JI,JEL,JAZ,JL,JH,JV) * ZSING) +  &
+                  (ZDY_NAT(JI,JEL,JAZ,JL,JH,JV)* ZCOSG)  ) &
+                  /(ZZ_RAY(JI,JEL,JAZ,JL,JH,JV) + XRADIUS))
+            END IF
+          END DO
+        END DO
+      END DO label
+    END DO
+  END DO
 END DO
 DEALLOCATE(ZLAT,ZLON)
 DEALLOCATE(ZDX_NAT,ZDY_NAT)
 IF(NCURV_INTERPOL == 1) DEALLOCATE(ZN,ZDNDZ)
 ! end of geometrical part ; I determined z[xyz]_ray
-WRITE(0,*) 'BEAM DEFINITION DONE'
+WRITE(ILUOUT0,*) 'BEAM DEFINITION DONE'
 !
 !-------------------------------------------------------------------------------
 !*       3.    INTERPOLATION OF THE MODEL VARIABLES ON THE RAYS 
@@ -565,18 +658,22 @@ WRITE(0,*) 'BEAM DEFINITION DONE'
 !*       3.1  allocation of the arrays and initialization of the arrays of pointers 
 !              (to avoid multiple calls to interpol_beam)
 !
-! 1: temperature; 2: rhodref, 3: rain mixing ratio; 4: r_i; 5: CIT; 6: r_s; 7: r_g; 8: convective/stratiform; 9: u; 10: v; 11: w
-ALLOCATE(TVARMOD(NRR+5))
-ALLOCATE(TVARRAD(NRR+5))
+! 1: temperature; 2: rhodref, 3: rain mixing ratio; 4: r_i; 5: CIT; 6: r_s; 7: r_g; 8: convective/stratiform; 9: u; 10: v; 11: w; 12: rain concentration (LIMA only)
+  ALLOCATE(TVARMOD(NRR+5)) ! pointer toward the matrix of model variables (Tempe, rhodref,mixing rations...) in the model projection (X,Y,Z)
+  ALLOCATE(TVARRAD(NRR+5)) ! pointer toward the matrix of model variables (Tempe, rhodref,mixing rations...) interpolated in the
+                         ! radar projection (iradar,ielev,iazim,irangestep,idiscretH,idiscretV)
+       
 TVARMOD(1)%P=>PTEMP(:,:,:)
 TVARMOD(2)%P=>PRHODREF(:,:,:)
-ALLOCATE(ZT_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),&
+
+ALLOCATE(ZT_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),& ! temperature and reference density interpolated along the ray 
      ZRHODREF_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
 TVARRAD(1)%P=>ZT_RAY(:,:,:,:,:,:)
 TVARRAD(2)%P=>ZRHODREF_RAY(:,:,:,:,:,:)
 INVAR=2
 ! raindrops
-IF(SIZE(PRT,4)>2) THEN
+IF(SIZE(PRT,4)>2) THEN ! PRT : 4D matrix containing the mixing ratios of different species in the model grid (X,Y,Z)
+                       !SIZE(PRT,4) : number of hydrometeor species
   INVAR=INVAR+1
   TVARMOD(INVAR)%P=>PRT(:,:,:,3)
   ALLOCATE(ZR_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))  
@@ -591,7 +688,7 @@ IF (SIZE(PRT,4)>3) THEN
   INVAR=INVAR+1
   TVARMOD(INVAR)%P=>PCIT(:,:,:)
   ALLOCATE(ZCIT_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
-  TVARRAD(5)%P=>ZCIT_RAY(:,:,:,:,:,:)
+  TVARRAD(INVAR)%P=>ZCIT_RAY(:,:,:,:,:,:)
 END IF
 ! snow
 IF (SIZE(PRT,4)>4) THEN
@@ -615,15 +712,21 @@ TVARRAD(INVAR+1)%P=>ZBU_MASK_RAY(:,:,:,:,:,:)
 TVARMOD(INVAR+2)%P=>PUM(:,:,:)
 TVARMOD(INVAR+3)%P=>PVM(:,:,:)
 TVARMOD(INVAR+4)%P=>PWM(:,:,:)
-ALLOCATE(ZUM_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),&
-     ZVM_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V),&
-     ZWM_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
+ALLOCATE(ZUM_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
+ALLOCATE(ZVM_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
+ALLOCATE(ZWM_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
 TVARRAD(INVAR+2)%P=>ZUM_RAY(:,:,:,:,:,:)
 TVARRAD(INVAR+3)%P=>ZVM_RAY(:,:,:,:,:,:)
 TVARRAD(INVAR+4)%P=>ZWM_RAY(:,:,:,:,:,:)
 
+IF (GLIMA) THEN
+  ALLOCATE(ZCRT_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
+  TVARMOD(INVAR+5)%P=>PCRT(:,:,:)
+  TVARRAD(INVAR+5)%P=>ZCRT_RAY(:,:,:,:,:,:)
+ENDIF
 !*       3.2   interpolation of all model variables
-
+!interpolation from TVARMOD to TVARRAD of the model variables in the radar projection, using the position (ZX_RAY, ZY_RAY, ZZ_RAY)
+!of the beam in the model grid 
 CALL INTERPOL_BEAM(TVARMOD,TVARRAD,ZX_RAY(:,:,:,:,:,:),&
      ZY_RAY(:,:,:,:,:,:),ZZ_RAY(:,:,:,:,:,:),ZXHATM(:),ZYHATM(:),ZZM(:,:,:)) 
 !
@@ -633,50 +736,137 @@ DEALLOCATE(ZX_RAY,ZY_RAY)
 DEALLOCATE(TVARMOD,TVARRAD)
 !
 !Doppler velocities (unfolded): wind contribution
+!Calculation of the radial velocity in the radar projection from U,V and W model (ZUM_RAY, ZVM_RAY and ZWM_RAY model)
 ALLOCATE(ZVDOP_RAY(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,NPTS_H,NPTS_V))
 DO JI=1,NBRAD
   IEL=NBELEV(JI)
   DO JEL=1,IEL
-     DO JAZ=1,NBAZIM
-        DO JL=1,NBSTEPMAX+1
-           DO JH=1,NPTS_H
-              DO JV=1,NPTS_V
-                 IF(ZUM_RAY(JI,JEL,JAZ,JL,JH,JV)/=-XUNDEF) THEN
-                    ZVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)=(ZUM_RAY(JI,JEL,JAZ,JL,JH,JV)*SIN(ZAZIM(JI,JAZ,JH))&
-                         +ZVM_RAY(JI,JEL,JAZ,JL,JH,JV)*COS(ZAZIM(JI,JAZ,JH)))*COS(ZELEV(JI,JEL,JL,JV))&
-                         +ZWM_RAY(JI,JEL,JAZ,JL,JH,JV)*SIN(ZELEV(JI,JEL,JL,JV))
-                 ELSE
-                    ZVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)=-XUNDEF
-                 END IF
-              END DO
-           END DO
+    DO JAZ=1,NBAZIM
+      DO JL=1,NBSTEPMAX+1
+        DO JH=1,NPTS_H
+          DO JV=1,NPTS_V
+            IF(ZUM_RAY(JI,JEL,JAZ,JL,JH,JV)/=-XUNDEF) THEN
+              ZVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)=(ZUM_RAY(JI,JEL,JAZ,JL,JH,JV)*SIN(ZAZIM(JI,JAZ,JH))&
+                       +ZVM_RAY(JI,JEL,JAZ,JL,JH,JV)*COS(ZAZIM(JI,JAZ,JH)))*COS(ZELEV(JI,JEL,JL,JV))&
+                       +ZWM_RAY(JI,JEL,JAZ,JL,JH,JV)*SIN(ZELEV(JI,JEL,JL,JV))
+            ELSE
+              ZVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)=-XUNDEF
+            END IF
+          END DO
         END DO
-     END DO
+      END DO
+    END DO
   END DO
 END DO
 DEALLOCATE(ZAZIM,ZUM_RAY,ZVM_RAY,ZWM_RAY)
-
-WRITE(0,*) 'INTERPOLATION OF MODEL VARIABLES DONE'
+!
+WRITE(ILUOUT0,*) 'INTERPOLATION OF MODEL VARIABLES DONE'
 !
 !-----------------------------------------------------------------------------------------
 !*       4.    COMPUTING REFLECTIVITIES ALONG THE RAY BEAM (BACKSCATTERING  + ATTENUATION) 
 !              ---------------------------------------------------------------------------    
 ALLOCATE(ZZE(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,SIZE(PREFL_CART(:,:,:,:,:),5)))
+!ZZE : 5D matrix (iradar, ielev, iaz, irangestep, ivar) containing the radar variables that will be calculated
+!in polar or cartesian projection (same projection as the observation grid)
+!PREFL_CART is the same matrix, but is the name of the variable which is given as output of radar_simulator
+!whereas ZZE is a intermediate variable
 
-CALL RADAR_SCATTERING(ZT_RAY,ZRHODREF_RAY,ZR_RAY,ZI_RAY,ZCIT_RAY,ZS_RAY,ZG_RAY,ZVDOP_RAY, &
-     ZELEV,ZX_H,ZX_V,ZW_H,ZW_V,ZZE(:,:,:,:,1:IHAS-1),ZBU_MASK_RAY)
+!calculation of ZZE and ZBU_MASK_RAY
+!-----------------------------------------------------------------------
 
+IF (GLIMA) THEN
+  CALL RADAR_SCATTERING(ZT_RAY,ZRHODREF_RAY,ZR_RAY,ZI_RAY,ZCIT_RAY,ZS_RAY,ZG_RAY,ZVDOP_RAY, &
+     ZELEV,ZX_H,ZX_V,ZW_H,ZW_V,ZZE(:,:,:,:,1:IHAS-1),ZBU_MASK_RAY,ZCRT_RAY)
+ELSE
+  CALL RADAR_SCATTERING(ZT_RAY,ZRHODREF_RAY,ZR_RAY,ZI_RAY,ZCIT_RAY,ZS_RAY,ZG_RAY,ZVDOP_RAY, &
+     ZELEV,ZX_H,ZX_V,ZW_H,ZW_V,ZZE(:,:,:,:,1:IHAS-1),ZBU_MASK_RAY)
+ENDIF
 DEALLOCATE(ZVDOP_RAY)
 ! convective/stratiform
 DEALLOCATE(ZBU_MASK_RAY)
 ! /convective/stratiform
 ! conversion discretised gates -> single point gates for other output fields
+! model variables (beam height, mixing ratios, CIT, refractivity, refractivity gradient) in the radar projection are also added to ZZE
 ZZE(:,:,:,:,IHAS)=ZZ_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2) ! beam height
-ZZE(:,:,:,:,IHAS+1)=ZRHODREF_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)*ZR_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2) ! M_r
-ZZE(:,:,:,:,IHAS+2)=ZRHODREF_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)*ZI_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2) ! M_i
-ZZE(:,:,:,:,IHAS+3)=ZRHODREF_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)*ZS_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2) ! M_s
-ZZE(:,:,:,:,IHAS+4)=ZRHODREF_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)*ZG_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2) ! M_g
-ZZE(:,:,:,:,IHAS+5)=ZCIT_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2) ! CIT
+ALLOCATE(ZWORK(SIZE(ZRHODREF_RAY,1),SIZE(ZRHODREF_RAY,2),&
+               SIZE(ZRHODREF_RAY,3),SIZE(ZRHODREF_RAY,4),&
+               SIZE(ZRHODREF_RAY,5),SIZE(ZRHODREF_RAY,6)))
+! M_r
+WHERE(ZRHODREF_RAY/=-XUNDEF .AND. ZR_RAY/=-XUNDEF)
+  ZWORK=ZRHODREF_RAY*ZR_RAY
+ELSEWHERE
+  ZWORK=-XUNDEF
+END WHERE
+WHERE(ZRHODREF_RAY==XVALGROUND .OR. ZR_RAY==XVALGROUND)
+  ZWORK=XVALGROUND
+END WHERE
+ZZE(:,:,:,:,IHAS+1)=ZWORK(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)
+! M_i
+WHERE(ZRHODREF_RAY/=-XUNDEF .AND. ZI_RAY/=-XUNDEF)
+  ZWORK=ZRHODREF_RAY*ZI_RAY
+ELSEWHERE
+  ZWORK=-XUNDEF
+END WHERE
+WHERE(ZRHODREF_RAY==XVALGROUND .OR. ZI_RAY==XVALGROUND)
+  ZWORK=XVALGROUND
+END WHERE
+ZZE(:,:,:,:,IHAS+2)=ZWORK(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)
+! M_s
+WHERE(ZRHODREF_RAY/=-XUNDEF .AND. ZS_RAY/=-XUNDEF)
+  ZWORK=ZRHODREF_RAY*ZS_RAY
+ELSEWHERE
+  ZWORK=-XUNDEF
+END WHERE
+WHERE(ZRHODREF_RAY==XVALGROUND .OR. ZS_RAY==XVALGROUND)
+  ZWORK=XVALGROUND
+END WHERE
+ZZE(:,:,:,:,IHAS+3)=ZWORK(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)
+! M_g
+WHERE(ZRHODREF_RAY/=-XUNDEF .AND. ZG_RAY/=-XUNDEF)
+  ZWORK=ZRHODREF_RAY*ZG_RAY
+ELSEWHERE
+  ZWORK=-XUNDEF
+END WHERE
+WHERE(ZRHODREF_RAY==XVALGROUND .OR. ZG_RAY==XVALGROUND)
+  ZWORK=XVALGROUND
+END WHERE
+ZZE(:,:,:,:,IHAS+4)=ZWORK(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)
+DEALLOCATE(ZWORK)
+! CIT
+IF (GLIMA)THEN
+  ALLOCATE(ZWORK(SIZE(ZRHODREF_RAY,1),SIZE(ZRHODREF_RAY,2),&
+                 SIZE(ZRHODREF_RAY,3),SIZE(ZRHODREF_RAY,4),&
+                 SIZE(ZRHODREF_RAY,5),SIZE(ZRHODREF_RAY,6)))
+  WHERE(ZRHODREF_RAY/=-XUNDEF .AND. ZCIT_RAY/=-XUNDEF)
+    ZWORK=ZRHODREF_RAY*ZCIT_RAY
+  ELSEWHERE
+    ZWORK=-XUNDEF
+  END WHERE
+  WHERE(ZRHODREF_RAY==XVALGROUND .OR. ZCIT_RAY==XVALGROUND)
+    ZWORK=XVALGROUND
+  END WHERE
+
+  ZZE(:,:,:,:,IHAS+5)=ZWORK(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)
+  DEALLOCATE(ZWORK)
+ELSE
+  ZZE(:,:,:,:,IHAS+5)=ZCIT_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)
+ENDIF
+ZZE(:,:,:,:,IHAS+6)=ZT_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2) ! temperature 
+IF (GLIMA)THEN
+  ALLOCATE(ZWORK(SIZE(ZRHODREF_RAY,1),SIZE(ZRHODREF_RAY,2),&
+                 SIZE(ZRHODREF_RAY,3),SIZE(ZRHODREF_RAY,4),&
+                 SIZE(ZRHODREF_RAY,5),SIZE(ZRHODREF_RAY,6)))
+  WHERE(ZRHODREF_RAY/=-XUNDEF .AND. ZCRT_RAY/=-XUNDEF)
+    ZWORK=ZRHODREF_RAY*ZCRT_RAY
+  ELSEWHERE
+    ZWORK=-XUNDEF
+  END WHERE
+  WHERE(ZRHODREF_RAY==XVALGROUND .OR. ZCRT_RAY==XVALGROUND)
+    ZWORK=XVALGROUND
+  END WHERE
+  ZZE(:,:,:,:,IHAS+7)=ZWORK(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2)
+  DEALLOCATE(ZWORK)
+ENDIF
 IF(LREFR) THEN
    ZZE(:,:,:,:,IRFR)=ZN_RAY(:,:,:,:,(NPTS_H+1)/2,(NPTS_V+1)/2) ! refractivity
    ZZE(:,:,:,NBSTEPMAX+1,IRFR)=XVALGROUND
@@ -700,10 +890,18 @@ IF(ALLOCATED(ZG_RAY)) DEALLOCATE(ZG_RAY)
 !----------------------------------------------------------------------------------------------
 !*       5.    INTERPOLATION ON THE CARTESIAN GRID 
 !              -----------------------------------
-IF (LCART_RAD) THEN
+IF (LCART_RAD) THEN !if cartesian interpolation
   ALLOCATE(IREFL_CART_NB(NBRAD,IIELV,2*NMAX,2*NMAX),IVDOP_CART_NB(NBRAD,IIELV,2*NMAX,2*NMAX))
+  ALLOCATE(IREFL_CART_NBR(NBRAD,IIELV,2*NMAX,2*NMAX))
+  ALLOCATE(IREFL_CART_NBI(NBRAD,IIELV,2*NMAX,2*NMAX))
+  ALLOCATE(IREFL_CART_NBS(NBRAD,IIELV,2*NMAX,2*NMAX))
+  ALLOCATE(IREFL_CART_NBG(NBRAD,IIELV,2*NMAX,2*NMAX))
   PREFL_CART(:,:,:,:,:)=0.
   IREFL_CART_NB(:,:,:,:)=0
+  IREFL_CART_NBR(:,:,:,:)=0
+  IREFL_CART_NBS(:,:,:,:)=0
+  IREFL_CART_NBI(:,:,:,:)=0
+  IREFL_CART_NBG(:,:,:,:)=0
   IVDOP_CART_NB(:,:,:,:)=0
 !
 !*       5.1  reflectivity on a cartesian grid (this is the way DSO/CMR creates BUFRs)
@@ -713,99 +911,567 @@ IF (LCART_RAD) THEN
     DO JEL=1,IEL
       DO JAZ=1,NBAZIM
         DO JL=1,NBSTEPMAX+1
+          IF ((ZZE(JI,JEL,JAZ,JL,IHAS+6)/=XVALGROUND).AND.(ZZE(JI,JEL,JAZ,JL,IHAS+6)/=-XUNDEF)) THEN  !conversion en °C
+            ZZE(JI,JEL,JAZ,JL,IHAS+6)=ZZE(JI,JEL,JAZ,JL,IHAS+6)-273.15
+          ENDIF
           IXGRID=CEILING(NMAX+((JL-1)*XSTEP_RAD*SIN(ZAZIM_BASE(JAZ))/XGRID))
           IYGRID=CEILING(NMAX+((JL-1)*XSTEP_RAD*COS(ZAZIM_BASE(JAZ))/XGRID))
           ! assigning polar grid values to cartesian grid
+
+          !*************************************************
+          !****            RADIAL VELOCITY              ****
+          !*************************************************
+          !XVALGROUND for VRU
+          IF(ZZE(JI,JEL,JAZ,JL,IVDOP)==XVALGROUND.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)==XVALGROUND &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==XVALGROUND) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==XVALGROUND) & ! case for refractivity gradient at origin
+               ) THEN ! if any XVALGROUND in the pixel for ZHH -> pixel set to XVALGROUND for all variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)=XVALGROUND
+            IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+
+          !-xundef for VRU
+          ELSE IF(ZZE(JI,JEL,JAZ,JL,IVDOP)==-XUNDEF.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)==-XUNDEF &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==-XUNDEF) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==-XUNDEF) & ! case for refractivity gradient at origin
+               ) THEN ! if any -XUNDEF in the pixel for ZHH-> pixel set to -XUNDEF for all general variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)=-XUNDEF
+            IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+          
+          !if no xvalground and no -xundef for VRU
+          ELSE 
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP) &
+                 +ZZE(JI,JEL,JAZ,JL,IVDOP)
+            IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)+1
+          END IF
+          
+          !*************************************************
+          !****            GENERAL VARIABLES            ****
+          !*************************************************
+          !Keeping -XUNDEF and XVALGROUND values for ZHH and "general" variables
           IF(ZZE(JI,JEL,JAZ,JL,1)==XVALGROUND.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,1)==XVALGROUND &
                .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==XVALGROUND) &    ! case for refractivity at boundaries
                .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==XVALGROUND) & ! case for refractivity gradient at origin
-               ) THEN ! if any XVALGROUND in the pixel -> pixel set to XVALGROUND
-            PREFL_CART(JI,JEL,IXGRID,IYGRID,:)=XVALGROUND
+               ) THEN ! if any XVALGROUND in the pixel for ZHH -> pixel set to XVALGROUND for all variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,1:4)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHV:IDHV)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IHAS:)=XVALGROUND
             IREFL_CART_NB(JI,JEL,IXGRID,IYGRID)=1
-            IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+            !IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+
+          !-xundef for ZHH
+          ELSE IF(ZZE(JI,JEL,JAZ,JL,1)==-XUNDEF.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,1)==-XUNDEF &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==-XUNDEF) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==-XUNDEF) & ! case for refractivity gradient at origin
+               ) THEN ! if any -XUNDEF in the pixel for ZHH-> pixel set to -XUNDEF for all general variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,1:4)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHV:IDHV)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IHAS:)=-XUNDEF
+            IREFL_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+            !IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+
+          !if no xvalground and no -xundef for REFL: incrementation of all polar pixels inside the cartesian pixel
           ELSE 
-            PREFL_CART(JI,JEL,IXGRID,IYGRID,:IVDOP-1)=PREFL_CART(JI,JEL,IXGRID,IYGRID,:IVDOP-1) &
-                 +ZZE(JI,JEL,JAZ,JL,:IVDOP-1)
-            PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP+1:)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP+1:) &
-                 +ZZE(JI,JEL,JAZ,JL,IVDOP+1:)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,1:4)=PREFL_CART(JI,JEL,IXGRID,IYGRID,1:4) &
+                 +ZZE(JI,JEL,JAZ,JL,1:4)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHV:IDHV)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHV:IDHV) &
+                 +ZZE(JI,JEL,JAZ,JL,IRHV:IDHV)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IHAS:)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IHAS:) &
+                 +ZZE(JI,JEL,JAZ,JL,IHAS:)
             IREFL_CART_NB(JI,JEL,IXGRID,IYGRID)=IREFL_CART_NB(JI,JEL,IXGRID,IYGRID)+1
-            IF(ZZE(JI,JEL,JAZ,JL,IVDOP)/=-XUNDEF.AND.PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)/=XVALGROUND) THEN
-               PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)+ZZE(JI,JEL,JAZ,JL,IVDOP)
-               IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)+1
-            ELSE
-               PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)=XVALGROUND
-               IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+          
+            !if no xundef for IVDOP  
+            !IF(ZZE(JI,JEL,JAZ,JL,IVDOP)/=-XUNDEF.AND.PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)/=-XUNDEF) THEN
+            !  !if no xvalground for IVDOP               
+            !  IF (ZZE(JI,JEL,JAZ,JL,IVDOP)/=XVALGROUND.AND.PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)/=XVALGROUND)THEN
+            !    PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)+ZZE(JI,JEL,JAZ,JL,IVDOP)
+            !    IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)+1
+            !  ELSE
+            !    PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)=XVALGROUND
+            !    IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+            !  END IF
+            !ELSE
+             !  PREFL_CART(JI,JEL,IXGRID,IYGRID,IVDOP)=-XUNDEF
+            !   IVDOP_CART_NB(JI,JEL,IXGRID,IYGRID)=1
+            !END IF !end if no xundef for IVDOP
+          END IF !END IF ZZE(JI,JEL,JAZ,JL,1).OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,1)==XVALGROUND
+
+          !**********************************************
+          !****           RAIN VARIABLES             ****
+          !**********************************************
+          IF(ZZE(JI,JEL,JAZ,JL,IZER)==XVALGROUND.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IZER)==XVALGROUND &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==XVALGROUND) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==XVALGROUND) & ! case for refractivity gradient at origin
+               ) THEN ! if any XVALGROUND in the pixel for ZHH -> pixel set to XVALGROUND for all variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZER)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHR)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDA)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDR)=XVALGROUND
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVR)=XVALGROUND
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATR)=XVALGROUND
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAER)=XVALGROUND
             END IF
+            IREFL_CART_NBR(JI,JEL,IXGRID,IYGRID)=1
+ 
+          !-xundef for ZER
+          ELSE IF(ZZE(JI,JEL,JAZ,JL,IZER)==-XUNDEF.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IZER)==-XUNDEF &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==-XUNDEF) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==-XUNDEF) & ! case for refractivity gradient at origin
+               ) THEN ! if any -XUNDEF in the pixel for ZER-> pixel set to -XUNDEF for all rain variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZER)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHR)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDA)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDR)=-XUNDEF
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAER)=-XUNDEF
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVR)=-XUNDEF
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATR)=-XUNDEF
+            END IF
+            IREFL_CART_NBR(JI,JEL,IXGRID,IYGRID)=1
+
+          !if no xvalground and no -xundef for REFL: incrementation of all polar pixels inside the cartesian pixel
+          ELSE 
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZER)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IZER) &
+                 +ZZE(JI,JEL,JAZ,JL,IZER)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHR)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHR) &
+                 +ZZE(JI,JEL,JAZ,JL,IRHR)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDA)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDA) &
+                 +ZZE(JI,JEL,JAZ,JL,IZDA)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDR)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDR) &
+                 +ZZE(JI,JEL,JAZ,JL,IKDR)
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAER)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IAER) &
+                 +ZZE(JI,JEL,JAZ,JL,IAER)
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVR)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVR) &
+                 +ZZE(JI,JEL,JAZ,JL,IAVR)
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATR)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IATR) &
+                 +ZZE(JI,JEL,JAZ,JL,IATR)
+            END IF
+            IREFL_CART_NBR(JI,JEL,IXGRID,IYGRID)=IREFL_CART_NBR(JI,JEL,IXGRID,IYGRID)+1
           END IF
-        END DO ! JL
-      END DO !
-    END DO
-  END DO
 
-DEALLOCATE(ZZE)
 
+          !**********************************************
+          !****           ICE VARIABLES              ****
+          !**********************************************
+          IF(ZZE(JI,JEL,JAZ,JL,IZEI)==XVALGROUND.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEI)==XVALGROUND &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==XVALGROUND) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==XVALGROUND) & ! case for refractivity gradient at origin
+               ) THEN ! if any XVALGROUND in the pixel for ZHH -> pixel set to XVALGROUND for all variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEI)=XVALGROUND
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAEI)=XVALGROUND
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVI)=XVALGROUND
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATI)=XVALGROUND
+            ENDIF
+            IREFL_CART_NBI(JI,JEL,IXGRID,IYGRID)=1
+ 
+          !-xundef for ZEI
+          ELSE IF(ZZE(JI,JEL,JAZ,JL,IZEI)==-XUNDEF.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEI)==-XUNDEF &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==-XUNDEF) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==-XUNDEF) & ! case for refractivity gradient at origin
+               ) THEN ! if any -XUNDEF in the pixel for ZER-> pixel set to -XUNDEF for all rain variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEI)=-XUNDEF
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAEI)=-XUNDEF
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVI)=-XUNDEF
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATI)=-XUNDEF
+            ENDIF
+            IREFL_CART_NBI(JI,JEL,IXGRID,IYGRID)=1
+
+          !if no xvalground and no -xundef for REFL: incrementation of all polar pixels inside the cartesian pixel
+          ELSE 
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEI)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEI) &
+                 +ZZE(JI,JEL,JAZ,JL,IZEI)
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAEI)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IAEI) &
+                 +ZZE(JI,JEL,JAZ,JL,IAEI)
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVI)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVI) &
+                 +ZZE(JI,JEL,JAZ,JL,IAVI)
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATI)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IATI) &
+                 +ZZE(JI,JEL,JAZ,JL,IATI)
+            ENDIF
+            IREFL_CART_NBI(JI,JEL,IXGRID,IYGRID)=IREFL_CART_NBI(JI,JEL,IXGRID,IYGRID)+1
+          END IF
+
+          !**********************************************
+          !****           SNOW VARIABLES             ****
+          !********************************************** 
+          IF(ZZE(JI,JEL,JAZ,JL,IZES)==XVALGROUND.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IZES)==XVALGROUND &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==XVALGROUND) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==XVALGROUND) & ! case for refractivity gradient at origin
+               ) THEN ! if any XVALGROUND in the pixel for ZES -> pixel set to XVALGROUND for all snow variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZES)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHS)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDS)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDS)=XVALGROUND
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAES)=XVALGROUND
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVS)=XVALGROUND
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATS)=XVALGROUND
+            END IF
+            IREFL_CART_NBS(JI,JEL,IXGRID,IYGRID)=1
+ 
+          !-xundef for ZES
+          ELSE IF(ZZE(JI,JEL,JAZ,JL,IZES)==-XUNDEF.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IZES)==-XUNDEF &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==-XUNDEF) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==-XUNDEF) & ! case for refractivity gradient at origin
+               ) THEN ! if any -XUNDEF in the pixel for ZHH-> pixel set to -XUNDEF for all general variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZES)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHS)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDS)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDS)=-XUNDEF
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAES)=-XUNDEF
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVS)=-XUNDEF
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATS)=-XUNDEF
+            ENDIF
+            IREFL_CART_NBS(JI,JEL,IXGRID,IYGRID)=1
+
+          !if no xvalground and no -xundef for REFL: incrementation of all polar pixels inside the cartesian pixel
+          ELSE 
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZES)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IZES) &
+                 +ZZE(JI,JEL,JAZ,JL,IZES)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHS)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHS) &
+                 +ZZE(JI,JEL,JAZ,JL,IRHS)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDS)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDS) &
+                 +ZZE(JI,JEL,JAZ,JL,IZDS)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDS)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDS) &
+                 +ZZE(JI,JEL,JAZ,JL,IKDS)
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAES)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IAES) &
+                 +ZZE(JI,JEL,JAZ,JL,IAES)
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVS)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IAES) &
+                 +ZZE(JI,JEL,JAZ,JL,IAES)
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATS)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IATS) &
+                 +ZZE(JI,JEL,JAZ,JL,IATS)
+            END IF
+            IREFL_CART_NBS(JI,JEL,IXGRID,IYGRID)=IREFL_CART_NBS(JI,JEL,IXGRID,IYGRID)+1
+          END IF            
+
+          !**********************************************
+          !****          GRAUPEL VARIABLES           ****
+          !********************************************** 
+          IF(ZZE(JI,JEL,JAZ,JL,IZEG)==XVALGROUND.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEG)==XVALGROUND &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==XVALGROUND) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==XVALGROUND) & ! case for refractivity gradient at origin
+               ) THEN ! if any XVALGROUND in the pixel for ZES -> pixel set to XVALGROUND for all snow variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEG)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHG)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDG)=XVALGROUND
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDG)=XVALGROUND
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAEG)=XVALGROUND
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVG)=XVALGROUND
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATG)=XVALGROUND
+            END IF
+
+            IREFL_CART_NBG(JI,JEL,IXGRID,IYGRID)=1
+ 
+          !-xundef for ZEG
+          ELSE IF(ZZE(JI,JEL,JAZ,JL,IZEG)==-XUNDEF.OR.PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEG)==-XUNDEF &
+               .OR.(LREFR.AND.ZZE(JI,JEL,JAZ,JL,IRFR)==-XUNDEF) &    ! case for refractivity at boundaries
+               .OR.(LDNDZ.AND.ZZE(JI,JEL,JAZ,JL,IDNZ)==-XUNDEF) & ! case for refractivity gradient at origin
+               ) THEN ! if any -XUNDEF in the pixel for ZHH-> pixel set to -XUNDEF for all general variables
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEG)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHG)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDG)=-XUNDEF
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDG)=-XUNDEF
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAEG)=-XUNDEF
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVG)=-XUNDEF
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATG)=-XUNDEF
+            END IF
+            IREFL_CART_NBG(JI,JEL,IXGRID,IYGRID)=1
 
-!*       5.2  writing cartesian grid output (averaging)
-! Now out-of-range pixels are affected 0, and underground pixels are affected XVALGROUND
+          !if no xvalground and no -xundef for REFL: incrementation of all polar pixels inside the cartesian pixel
+          ELSE 
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEG)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IZEG) &
+                 +ZZE(JI,JEL,JAZ,JL,IZEG)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHG)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IRHG) &
+                 +ZZE(JI,JEL,JAZ,JL,IRHG)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDG)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IZDG) &
+                 +ZZE(JI,JEL,JAZ,JL,IZDG)
+            PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDG)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IKDG) &
+                 +ZZE(JI,JEL,JAZ,JL,IKDG)
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAEG)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IAEG) &
+                 +ZZE(JI,JEL,JAZ,JL,IAEG)
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVG)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IAVG) &
+                 +ZZE(JI,JEL,JAZ,JL,IAVG)
+              PREFL_CART(JI,JEL,IXGRID,IYGRID,IATG)=PREFL_CART(JI,JEL,IXGRID,IYGRID,IATG) &
+                 +ZZE(JI,JEL,JAZ,JL,IATG)
+            END IF
+            IREFL_CART_NBG(JI,JEL,IXGRID,IYGRID)=IREFL_CART_NBG(JI,JEL,IXGRID,IYGRID)+1
+          END IF           
+
+        END DO !JL
+      END DO !JAZ
+    END DO !JEL
+  END DO !JI
+
+DEALLOCATE(ZZE)
+!*       5.2  writing cartesian grid output (averaging) and dB conversion
   DO JI=1,NBRAD
     IEL=NBELEV(JI)
     DO JEL=1,IEL
       DO JV=2*NMAX,1,-1
         DO JH=1,2*NMAX
-          IF(IREFL_CART_NB(JI,JEL,JH,JV) == 0) THEN
+
+          !****   RADIAL VELOCITY
+          IF(IVDOP_CART_NB(JI,JEL,JH,JV) == 0) THEN
+            IF((JH+SIGN(.5,JH-.5-NMAX)-.5-NMAX)**2+(JV+SIGN(.5,JV-.5-NMAX)-.5-NMAX)**2>=NMAX**2) THEN 
+              ! out of range
+              PREFL_CART(JI,JEL,JH,JV,IVDOP)=XVALGROUND
+            ELSE
+              PREFL_CART(JI,JEL,JH,JV,IVDOP)=0
+              WRITE(ILUOUT0,*) "Warning: some pixels have no radial velocity; increase XGRID or decrease XSTEP_RAD"
+            END IF
+          ELSE            
+            PREFL_CART(JI,JEL,JH,JV,IVDOP)=PREFL_CART(JI,JEL,JH,JV,IVDOP)/IVDOP_CART_NB(JI,JEL,JH,JV)
+          END IF
+
+          !****   GENERAL VARIABLES
+          IF(IREFL_CART_NB(JI,JEL,JH,JV) == 0) THEN ! no values inside the cartesian pixel
             IF((JH+SIGN(.5,JH-.5-NMAX)-.5-NMAX)**2+(JV+SIGN(.5,JV-.5-NMAX)-.5-NMAX)**2>=NMAX**2) THEN 
                ! out of range
-              PREFL_CART(JI,JEL,JH,JV,:)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,1:4)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IRHV:IDHV)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IHAS:)=XVALGROUND
             ELSE
-              PREFL_CART(JI,JEL,JH,JV,:)=0.
-              WRITE(*,*) "Warning: some pixels have no reflectivity; increase XGRID or decrease XSTEP_RAD"
+              PREFL_CART(JI,JEL,JH,JV,1:4)=0
+              PREFL_CART(JI,JEL,JH,JV,IRHV:IDHV)=0
+              PREFL_CART(JI,JEL,JH,JV,IHAS:)=0
+              WRITE(ILUOUT0,*) "Warning: some pixels have no reflectivity; increase XGRID or decrease XSTEP_RAD"
             END IF
           ELSE
-            PREFL_CART(JI,JEL,JH,JV,:)=PREFL_CART(JI,JEL,JH,JV,:)/IREFL_CART_NB(JI,JEL,JH,JV)
-            IF(IVDOP_CART_NB(JI,JEL,JH,JV) == 0) THEN
-               PREFL_CART(JI,JEL,JH,JV,IVDOP)=XVALGROUND
+            !PREFL_CART(JI,JEL,JH,JV,:)=PREFL_CART(JI,JEL,JH,JV,:)/IREFL_CART_NB(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,1:4)=PREFL_CART(JI,JEL,JH,JV,1:4)/IREFL_CART_NB(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IRHV:IDHV)=PREFL_CART(JI,JEL,JH,JV,IRHV:IDHV)/IREFL_CART_NB(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IHAS:)=PREFL_CART(JI,JEL,JH,JV,IHAS:)/IREFL_CART_NB(JI,JEL,JH,JV)
+                     
+            ! --------- Converting to dB -----------
+            IF(PREFL_CART(JI,JEL,JH,JV,1)> 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,1)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,1)) ! Z_equiv in dBZ
+              IF(PREFL_CART(JI,JEL,JH,JV,2) > 0.) THEN
+                PREFL_CART(JI,JEL,JH,JV,2)=PREFL_CART(JI,JEL,JH,JV,1) &
+                                          -10.*LOG10(PREFL_CART(JI,JEL,JH,JV,2)) ! Zdr=Z_HH-Z_VV  
+              !ELSE
+              !  PREFL_CART(JI,JEL,JH,JV,2)=-XUNDEF Zvv<0
+              ENDIF                      
+            ELSE IF (PREFL_CART(JI,JEL,JH,JV,1)== 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,1)=-XUNDEF 
+              !PREFL_CART(JI,JEL,JH,JV,IZER:IZEG)=-XUNDEF 
+            END IF    
+          END IF !***** END GENERAL VARIABLES
+
+          !****   RAIN VARIABLES
+          IF(IREFL_CART_NBR(JI,JEL,JH,JV) == 0) THEN ! no values inside the cartesian pixel
+            IF((JH+SIGN(.5,JH-.5-NMAX)-.5-NMAX)**2+(JV+SIGN(.5,JV-.5-NMAX)-.5-NMAX)**2>=NMAX**2) THEN 
+              ! out of range
+              PREFL_CART(JI,JEL,JH,JV,IZER)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IRHR)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IZDA)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IKDR)=XVALGROUND
+              IF (LATT) THEN
+                PREFL_CART(JI,JEL,JH,JV,IAER)=XVALGROUND
+                PREFL_CART(JI,JEL,JH,JV,IAVR)=XVALGROUND
+                PREFL_CART(JI,JEL,JH,JV,IATR)=XVALGROUND
+              END IF
             ELSE
-               PREFL_CART(JI,JEL,JH,JV,IVDOP)=PREFL_CART(JI,JEL,JH,JV,IVDOP) &
-                    *IREFL_CART_NB(JI,JEL,JH,JV)/IVDOP_CART_NB(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IZER)=0
+              PREFL_CART(JI,JEL,JH,JV,IRHR)=0
+              PREFL_CART(JI,JEL,JH,JV,IZDA)=0
+              PREFL_CART(JI,JEL,JH,JV,IKDR)=0
+              IF (LATT) THEN
+                PREFL_CART(JI,JEL,JH,JV,IAER)=0
+                PREFL_CART(JI,JEL,JH,JV,IAVR)=0
+                PREFL_CART(JI,JEL,JH,JV,IATR)=0
+              END IF
+              WRITE(ILUOUT0,*) "Warning: some pixels have no reflectivity; increase XGRID or decrease XSTEP_RAD"
             END IF
+          ELSE
+            PREFL_CART(JI,JEL,JH,JV,IZER)=PREFL_CART(JI,JEL,JH,JV,IZER)/IREFL_CART_NBR(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IRHR)=PREFL_CART(JI,JEL,JH,JV,IRHR)/IREFL_CART_NBR(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IZDA)=PREFL_CART(JI,JEL,JH,JV,IZDA)/IREFL_CART_NBR(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IKDR)=PREFL_CART(JI,JEL,JH,JV,IKDR)/IREFL_CART_NBR(JI,JEL,JH,JV)
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,JH,JV,IAER)=PREFL_CART(JI,JEL,JH,JV,IAER)/IREFL_CART_NBR(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IAVR)=PREFL_CART(JI,JEL,JH,JV,IAVR)/IREFL_CART_NBR(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IATR)=PREFL_CART(JI,JEL,JH,JV,IATR)/IREFL_CART_NBR(JI,JEL,JH,JV)
+            END IF
+            
+            ! --------- Converting to dB -----------
+            IF(PREFL_CART(JI,JEL,JH,JV,IZER)> 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,IZER)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IZER)) ! Z_equiv in dBZ
+              IF(PREFL_CART(JI,JEL,JH,JV,IZDA) > 0.) THEN
+                PREFL_CART(JI,JEL,JH,JV,IZDA)=PREFL_CART(JI,JEL,JH,JV,IZER) &
+                                              -10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IZDA)) ! Zdr=Z_HH-Z_VV  
+              ENDIF                      
+            ELSE IF (PREFL_CART(JI,JEL,JH,JV,IZER)== 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,IZER)=-XUNDEF 
+            END IF    
+
+            IF(LATT) THEN
+              IF(PREFL_CART(JI,JEL,JH,JV,IATR)>0.) THEN
+                PREFL_CART(JI,JEL,JH,JV,IATR)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IATR))
+              ENDIF
+            ENDIF
+          END IF !****** END RAIN
 
-						! thresholding and converting
-            ! Unit conversion :             
-						IF(PREFL_CART(JI,JEL,JH,JV,1) > 10**(XREFLMIN/10.) ) THEN  ! unit conversion (mm^6 m^{-3} -> dBZ)
-               PREFL_CART(JI,JEL,JH,JV,1)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,1)) ! Z_equiv in dBZ
-              IF(PREFL_CART(JI,JEL,JH,JV,2) > 0. ) THEN
-								PREFL_CART(JI,JEL,JH,JV,2)=PREFL_CART(JI,JEL,JH,JV,1) &
-								-10.*LOG10(PREFL_CART(JI,JEL,JH,JV,2)) ! Zdr=Z_HH-Z_VV  
-							ELSE
-								PREFL_CART(JI,JEL,JH,JV,2)=-XUNDEF
-							ENDIF
-              WHERE(PREFL_CART(JI,JEL,JH,JV,IZER:IZEG)> 10**(XREFLMIN/10.))
-                 PREFL_CART(JI,JEL,JH,JV,IZER:IZEG)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IZER:IZEG))
-              ELSEWHERE
-                 PREFL_CART(JI,JEL,JH,JV,IZER:IZEG)=-XUNDEF
-              END WHERE
-            ELSE IF(PREFL_CART(JI,JEL,JH,JV,1) >= 0.) THEN           ! few/no hydrometeor present
-               PREFL_CART(JI,JEL,JH,JV,1:2)=-XUNDEF
-               PREFL_CART(JI,JEL,JH,JV,IZER:IZEG)=-XUNDEF 
-! Next case should not happen
-!            ELSE                                       ! flag bin when underground                    
-!               PZE(JI,JEL,JAZ,JL,1)=XVALGROUND
-!               PZE(JI,JEL,JAZ,JL,IZER:IZEG)=XVALGROUND
+          !****   ICE VARIABLES
+          IF(IREFL_CART_NBI(JI,JEL,JH,JV) == 0) THEN ! no values inside the cartesian pixel
+            IF((JH+SIGN(.5,JH-.5-NMAX)-.5-NMAX)**2+(JV+SIGN(.5,JV-.5-NMAX)-.5-NMAX)**2>=NMAX**2) THEN 
+              ! out of range
+              PREFL_CART(JI,JEL,JH,JV,IZEI)=XVALGROUND
+              IF (LATT) THEN
+                PREFL_CART(JI,JEL,JH,JV,IAEI)=XVALGROUND
+                PREFL_CART(JI,JEL,JH,JV,IAVI)=XVALGROUND
+                PREFL_CART(JI,JEL,JH,JV,IATI)=XVALGROUND
+              END IF
+            ELSE
+              PREFL_CART(JI,JEL,JH,JV,IZEI)=0
+              IF (LATT) THEN
+                PREFL_CART(JI,JEL,JH,JV,IAEI)=0
+                PREFL_CART(JI,JEL,JH,JV,IAVI)=0
+                PREFL_CART(JI,JEL,JH,JV,IATI)=0
+              END IF
+              WRITE(ILUOUT0,*) "Warning: some pixels have no reflectivity; increase XGRID or decrease XSTEP_RAD"
             END IF
+          ELSE
+            PREFL_CART(JI,JEL,JH,JV,IZEI)=PREFL_CART(JI,JEL,JH,JV,IZEI)/IREFL_CART_NBI(JI,JEL,JH,JV)
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,JH,JV,IAEI)=PREFL_CART(JI,JEL,JH,JV,IAEI)/IREFL_CART_NBI(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IAVI)=PREFL_CART(JI,JEL,JH,JV,IAVI)/IREFL_CART_NBI(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IATI)=PREFL_CART(JI,JEL,JH,JV,IATI)/IREFL_CART_NBI(JI,JEL,JH,JV)
+            END IF
+            ! --------- Converting to dB -----------
+            IF(PREFL_CART(JI,JEL,JH,JV,IZEI)> 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,IZEI)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IZEI)) ! Z_equiv in dB                    
+            ELSE IF (PREFL_CART(JI,JEL,JH,JV,IZEI)== 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,IZEI)=-XUNDEF 
+            END IF    
 
-						IF(LATT) THEN
-							 WHERE(PREFL_CART(JI,JEL,JH,JV,IATR:IATG)>0.)
-								 PREFL_CART(JI,JEL,JH,JV,IATR:IATG)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IATR:IATG))
-               END WHERE
-						ENDIF
+            IF(LATT) THEN
+              IF(PREFL_CART(JI,JEL,JH,JV,IATI)>0.) THEN
+                PREFL_CART(JI,JEL,JH,JV,IATI)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IATI))
+              ENDIF
+            ENDIF
+          END IF !****** END ICE
 
-          END IF
+          !****   SNOW VARIABLES
+          IF(IREFL_CART_NBS(JI,JEL,JH,JV) == 0) THEN ! no values inside the cartesian pixel
+            IF((JH+SIGN(.5,JH-.5-NMAX)-.5-NMAX)**2+(JV+SIGN(.5,JV-.5-NMAX)-.5-NMAX)**2>=NMAX**2) THEN 
+               ! out of range
+              PREFL_CART(JI,JEL,JH,JV,IZES)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IRHS)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IZDS)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IKDS)=XVALGROUND
+              IF (LATT) THEN
+                PREFL_CART(JI,JEL,JH,JV,IAES)=XVALGROUND
+                PREFL_CART(JI,JEL,JH,JV,IAVS)=XVALGROUND
+                PREFL_CART(JI,JEL,JH,JV,IATS)=XVALGROUND
+              ENDIF
+            ELSE
+              PREFL_CART(JI,JEL,JH,JV,IZES)=0
+              PREFL_CART(JI,JEL,JH,JV,IRHS)=0
+              PREFL_CART(JI,JEL,JH,JV,IZDS)=0
+              PREFL_CART(JI,JEL,JH,JV,IKDS)=0
+              IF (LATT) THEN
+                PREFL_CART(JI,JEL,JH,JV,IAES)=0
+                PREFL_CART(JI,JEL,JH,JV,IAVS)=0
+                PREFL_CART(JI,JEL,JH,JV,IATS)=0
+              END IF
+              WRITE(ILUOUT0,*) "Warning: some pixels have no reflectivity; increase XGRID or decrease XSTEP_RAD"
+            END IF
+          ELSE
+            PREFL_CART(JI,JEL,JH,JV,IZES)=PREFL_CART(JI,JEL,JH,JV,IZES)/IREFL_CART_NBS(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IRHS)=PREFL_CART(JI,JEL,JH,JV,IRHS)/IREFL_CART_NBS(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IZDS)=PREFL_CART(JI,JEL,JH,JV,IZDS)/IREFL_CART_NBS(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IKDS)=PREFL_CART(JI,JEL,JH,JV,IKDS)/IREFL_CART_NBS(JI,JEL,JH,JV)
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,JH,JV,IAES)=PREFL_CART(JI,JEL,JH,JV,IAES)/IREFL_CART_NBS(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IAVS)=PREFL_CART(JI,JEL,JH,JV,IAVS)/IREFL_CART_NBS(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IATS)=PREFL_CART(JI,JEL,JH,JV,IATS)/IREFL_CART_NBS(JI,JEL,JH,JV)
+            END IF
+                      
+            ! --------- Converting to dB -----------
+            IF(PREFL_CART(JI,JEL,JH,JV,IZES)> 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,IZES)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IZES)) ! Z_equiv in dBZ
+              IF(PREFL_CART(JI,JEL,JH,JV,IZDS) > 0.) THEN
+                PREFL_CART(JI,JEL,JH,JV,IZDS)=PREFL_CART(JI,JEL,JH,JV,IZES) &
+                                             -10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IZDS)) ! Zdr=Z_HH-Z_VV  
+              ENDIF                      
+            ELSE IF (PREFL_CART(JI,JEL,JH,JV,IZES)== 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,IZES)=-XUNDEF 
+            END IF    
+
+            IF(LATT) THEN
+              IF(PREFL_CART(JI,JEL,JH,JV,IATS)>0.) THEN
+                PREFL_CART(JI,JEL,JH,JV,IATS)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IATS))
+              ENDIF
+            ENDIF
+          END IF !******** END SNOW
+
+          !****   GRAUPEL VARIABLES
+          IF(IREFL_CART_NBG(JI,JEL,JH,JV) == 0) THEN ! no values inside the cartesian pixel
+            IF((JH+SIGN(.5,JH-.5-NMAX)-.5-NMAX)**2+(JV+SIGN(.5,JV-.5-NMAX)-.5-NMAX)**2>=NMAX**2) THEN 
+               ! out of range
+              PREFL_CART(JI,JEL,JH,JV,IZEG)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IRHG)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IZDG)=XVALGROUND
+              PREFL_CART(JI,JEL,JH,JV,IKDG)=XVALGROUND
+              IF (LATT) THEN
+                PREFL_CART(JI,JEL,JH,JV,IAEG)=XVALGROUND
+                PREFL_CART(JI,JEL,JH,JV,IAVG)=XVALGROUND
+                PREFL_CART(JI,JEL,JH,JV,IATG)=XVALGROUND
+              END IF
+            ELSE
+              PREFL_CART(JI,JEL,JH,JV,IZEG)=0
+              PREFL_CART(JI,JEL,JH,JV,IRHG)=0
+              PREFL_CART(JI,JEL,JH,JV,IZDG)=0
+              PREFL_CART(JI,JEL,JH,JV,IKDG)=0
+              IF (LATT) THEN
+                PREFL_CART(JI,JEL,JH,JV,IAEG)=0
+                PREFL_CART(JI,JEL,JH,JV,IAVG)=0
+                PREFL_CART(JI,JEL,JH,JV,IATG)=0
+              ENDIF
+              WRITE(ILUOUT0,*) "Warning: some pixels have no reflectivity; increase XGRID or decrease XSTEP_RAD"
+            END IF
+          ELSE
+            PREFL_CART(JI,JEL,JH,JV,IZEG)=PREFL_CART(JI,JEL,JH,JV,IZEG)/IREFL_CART_NBG(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IRHG)=PREFL_CART(JI,JEL,JH,JV,IRHG)/IREFL_CART_NBG(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IZDG)=PREFL_CART(JI,JEL,JH,JV,IZDG)/IREFL_CART_NBG(JI,JEL,JH,JV)
+            PREFL_CART(JI,JEL,JH,JV,IKDG)=PREFL_CART(JI,JEL,JH,JV,IKDG)/IREFL_CART_NBG(JI,JEL,JH,JV)
+            IF (LATT) THEN
+              PREFL_CART(JI,JEL,JH,JV,IAEG)=PREFL_CART(JI,JEL,JH,JV,IAEG)/IREFL_CART_NBG(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IAVG)=PREFL_CART(JI,JEL,JH,JV,IAVG)/IREFL_CART_NBG(JI,JEL,JH,JV)
+              PREFL_CART(JI,JEL,JH,JV,IATG)=PREFL_CART(JI,JEL,JH,JV,IATG)/IREFL_CART_NBG(JI,JEL,JH,JV)
+            END IF
+            
+            ! --------- Converting to dB -----------
+            IF(PREFL_CART(JI,JEL,JH,JV,IZEG)> 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,IZEG)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IZEG)) ! Z_equiv in dBZ
+              IF(PREFL_CART(JI,JEL,JH,JV,IZDG) > 0.) THEN
+                PREFL_CART(JI,JEL,JH,JV,IZDG)=PREFL_CART(JI,JEL,JH,JV,IZEG) &
+                                             -10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IZDG)) ! Zdr=Z_HH-Z_VV  
+              ENDIF                      
+            ELSE IF (PREFL_CART(JI,JEL,JH,JV,IZEG)== 0) THEN
+              PREFL_CART(JI,JEL,JH,JV,IZES)=-XUNDEF 
+            END IF    
+
+            IF(LATT) THEN
+              IF(PREFL_CART(JI,JEL,JH,JV,IATG)>0.) THEN
+                PREFL_CART(JI,JEL,JH,JV,IATG)=10.*LOG10(PREFL_CART(JI,JEL,JH,JV,IATG))
+              ENDIF
+            ENDIF
+          END IF !******** END GRAUPEL
 
         END DO
       END DO
     END DO
   END DO
-  WRITE(0,*) 'CARTESIAN GRID INTERPOLATION DONE'
+  WRITE(ILUOUT0,*) 'CARTESIAN GRID INTERPOLATION DONE'
   DEALLOCATE(IREFL_CART_NB,IVDOP_CART_NB)
 !
 !*       5.3  positions of the cartesian grid (as in R2, provided 'as is')
@@ -828,20 +1494,111 @@ DEALLOCATE(ZZE)
      END DO
   END DO
 
-! polar output
-ELSE
+
+ELSE ! if polar output
   PREFL_CART(:,:,:,:,:)=ZZE(:,:,:,:,:)
 
   DEALLOCATE(ZZE)
 
   DO JI=1,NBRAD
      DO JAZ=1,NBAZIM
-        PLATLON(1,JAZ,1)=ZAZIM_BASE(JAZ)
-     END DO
+        PLATLON(1,JAZ,1)=ZAZIM_BASE(JAZ) ! pourquoi PLATLON(1,JAZ,1) et pas PLATLON(JI,JAZ,1)? 
+     END DO ! en coordonnees polaires on indique la position centrale (en radian) de chaque azimut
   END DO
 
-END IF
+
+  !--------- Converting to dB for polar output -----------
+  DO JI=1,NBRAD
+    IEL=NBELEV(JI)
+    DO JEL=1,IEL
+      DO JAZ=1,NBAZIM
+        DO JL=1,NBSTEPMAX+1
+          !conversion en deg celcius
+          IF (PREFL_CART(JI,JEL,JAZ,JL,IHAS+6)/=-XUNDEF .AND. PREFL_CART(JI,JEL,JAZ,JL,IHAS+6)/=XVALGROUND) &
+          PREFL_CART(JI,JEL,JAZ,JL,IHAS+6)=PREFL_CART(JI,JEL,JAZ,JL,IHAS+6)-273.15
+          
+          !------ ZHH and ZDR  
+          IF(PREFL_CART(JI,JEL,JAZ,JL,1)> 0) THEN
+            PREFL_CART(JI,JEL,JAZ,JL,1)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,1)) ! Z_equiv in dBZ
+            IF(PREFL_CART(JI,JEL,JAZ,JL,2) > 0.) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,2)=PREFL_CART(JI,JEL,JAZ,JL,1) &
+                                          -10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,2)) ! Zdr=Z_HH-Z_VV  
+            ENDIF                      
+          ELSE IF (PREFL_CART(JI,JEL,JAZ,JL,1)== 0) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,1)=-XUNDEF 
+          END IF
+          
+          !------ RAIN : ZER, ZDA, ATR
+          IF(PREFL_CART(JI,JEL,JAZ,JL,IZER)> 0) THEN
+            PREFL_CART(JI,JEL,JAZ,JL,IZER)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IZER)) ! Z_equiv in dBZ
+            IF(PREFL_CART(JI,JEL,JAZ,JL,IZDA) > 0.) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,IZDA)=PREFL_CART(JI,JEL,JAZ,JL,IZER) &
+                                            -10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IZDA)) ! Zdr=Z_HH-Z_VV  
+            ENDIF                      
+          ELSE IF (PREFL_CART(JI,JEL,JAZ,JL,IZER)== 0) THEN
+             PREFL_CART(JI,JEL,JAZ,JL,IZER)=-XUNDEF 
+          END IF    
+
+          IF(LATT) THEN
+            IF(PREFL_CART(JI,JEL,JAZ,JL,IATR)>0.) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,IATR)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IATR))
+            ENDIF 
+          ENDIF !------- END RAIN
+
+! ------- ICE  -----------
+          IF(PREFL_CART(JI,JEL,JAZ,JL,IZEI)> 0) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,IZEI)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IZEI)) ! Z_equiv in dB                    
+          ELSE IF (PREFL_CART(JI,JEL,JAZ,JL,IZEI)== 0) THEN
+             PREFL_CART(JI,JEL,JAZ,JL,IZEI)=-XUNDEF 
+          END IF    
+
+          IF(LATT) THEN
+            IF(PREFL_CART(JI,JEL,JAZ,JL,IATI)>0.) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,IATI)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IATI))
+            ENDIF
+          END IF !------ END ICE
+
+! --------- SNOW   -----------
+          IF(PREFL_CART(JI,JEL,JAZ,JL,IZES)> 0) THEN
+            PREFL_CART(JI,JEL,JAZ,JL,IZES)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IZES)) ! Z_equiv in dBZ
+            IF(PREFL_CART(JI,JEL,JAZ,JL,IZDS) > 0.) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,IZDS)=PREFL_CART(JI,JEL,JAZ,JL,IZES) &
+                                             -10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IZDS)) ! Zdr=Z_HH-Z_VV  
+            ENDIF                      
+          ELSE IF (PREFL_CART(JI,JEL,JAZ,JL,IZES)== 0) THEN
+            PREFL_CART(JI,JEL,JAZ,JL,IZES)=-XUNDEF 
+          END IF    
+
+          IF(LATT) THEN
+            IF(PREFL_CART(JI,JEL,JAZ,JL,IATS)>0.) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,IATS)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IATS))
+            ENDIF
+          END IF !------ END SNOW   
+
+! --------- GRAUPEL  -----------
+          IF(PREFL_CART(JI,JEL,JAZ,JL,IZEG)> 0) THEN
+            PREFL_CART(JI,JEL,JAZ,JL,IZEG)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IZEG)) ! Z_equiv in dBZ
+            IF(PREFL_CART(JI,JEL,JAZ,JL,IZDG) > 0.) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,IZDG)=PREFL_CART(JI,JEL,JAZ,JL,IZEG) &
+                                            -10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IZDG)) ! Zdr=Z_HH-Z_VV  
+            ENDIF                      
+          ELSE IF (PREFL_CART(JI,JEL,JAZ,JL,IZEG)== 0) THEN
+            PREFL_CART(JI,JEL,JAZ,JL,IZES)=-XUNDEF 
+          END IF    
+
+          IF(LATT) THEN
+            IF(PREFL_CART(JI,JEL,JAZ,JL,IATG)>0.) THEN
+              PREFL_CART(JI,JEL,JAZ,JL,IATG)=10.*LOG10(PREFL_CART(JI,JEL,JAZ,JL,IATG))
+            END IF
+          END IF !------ END GRAUPEL
+        END DO
+      END DO
+    END DO
+  END DO
+
+
+END IF ! end condition on cartesian or polar outout
 DEALLOCATE(ZAZIM_BASE)
-WRITE(0,*) 'ROUTINE RADAR_SIMULATOR COMPLETED'
+WRITE(ILUOUT0,*) 'ROUTINE RADAR_SIMULATOR COMPLETED'
 END SUBROUTINE RADAR_SIMULATOR
 
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index b9cd48d5b5dbc7a73db94318c9c70b55e37c9f51..31eb83591c024177f3d1417ee6aba24f87db9d1e 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -136,7 +136,8 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG
 !!       F. Duffourg 02/2013 : add new fields
 !!      J.Escobar 21/03/2013: for HALOK get correctly local array dim/bound
 !!       J. escobar 27/03/2014 : write LAT/LON only in not CARTESIAN case
-!!                        2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM
+!!       G.Delautier    2014 : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM
+!!       C. Augros 2014 : new radar simulator (T matrice)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -158,6 +159,7 @@ USE MODD_PARAM_n
 USE MODD_CURVCOR_n
 USE MODD_REF
 USE MODD_REF_n
+USE MODD_LUNIT, ONLY : CLUOUT0
 USE MODD_LUNIT_n
 USE MODD_TURB_n
 USE MODD_RADIATIONS_n
@@ -178,8 +180,8 @@ USE MODD_ELEC_DESCR, ONLY : CELECNAMES
 USE MODD_RAIN_C2R2_KHKO_PARAM
 USE MODD_ICE_C1R3_PARAM
 USE MODD_PARAM_ICE,       ONLY : LSEDIC
-USE MODD_PARAM_C2R2,      ONLY : LSEDC
-USE MODD_PARAM_C1R3
+!USE MODD_PARAM_C2R2,      ONLY : LSEDC
+!USE MODD_PARAM_C1R3
 USE MODD_LG,              ONLY : CLGNAMES
 USE MODD_PASPOL,          ONLY : LPASPOL
 USE MODD_CONDSAMP,        ONLY : LCONDSAMP
@@ -188,7 +190,7 @@ USE MODD_DIAG_FLAG
 USE MODD_RADAR, ONLY: XLAT_RAD,XELEV,&
      XSTEP_RAD,NBRAD,NBELEV,NBAZIM,NBSTEPMAX,&
      NCURV_INTERPOL,LATT,LCART_RAD,NPTS_H,NPTS_V,XGRID,&
-     LREFR,LDNDZ,NMAX,CNAME_RAD,&
+     LREFR,LDNDZ,NMAX,CNAME_RAD,NDIFF,&
      XLON_RAD,XALT_RAD,XLAM_RAD,XDT_RAD,LWBSCS,LWREFL
 !
 USE MODI_RADAR_SIMULATOR
@@ -224,6 +226,9 @@ USE MODE_THERMO
 USE MODE_MODELN_HANDLER
 USE MODI_LIDAR
 !
+USE MODD_MPIF
+USE MODD_VAR_ll
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
@@ -272,10 +277,11 @@ REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))  :: ZWORK33,ZWORK34
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2))               :: ZWORK21,ZWORK22
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2))               :: ZWORK23,ZWORK24
 REAL,DIMENSION(:,:,:,:,:), ALLOCATABLE                  :: ZWORK42 ! reflectivity on a cartesian grid (PREFL_CART)
+REAL,DIMENSION(:,:,:,:,:), ALLOCATABLE                  :: ZWORK42_BIS
 REAL,DIMENSION(:,:,:), ALLOCATABLE                      :: ZWORK43 ! latlon coordinates of cartesian grid points (PLATLON)
 REAL,DIMENSION(:,:,:), ALLOCATABLE                      :: ZPHI,ZTHETAE,ZTHETAV
 INTEGER, DIMENSION(:,:), ALLOCATABLE                    :: IWORK1
-integer :: ICURR,INBOUT
+integer :: ICURR,INBOUT,IERR
 !
 REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSP+NCARB+NSOA,JPMODE):: ZPTOTA
 REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NMODE_DST*2):: ZSDSTDEP
@@ -297,13 +303,16 @@ INTEGER :: IEL,IIELV
 CHARACTER(LEN=5)  :: YVIEW   ! Upward or Downward integration
 INTEGER           :: IACCMODE
 !-------------------------------------------------------------------------------
-INTEGER :: IAUX									 ! work variable 
+INTEGER :: IAUX ! work variable 
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZWORK35,ZWORK36
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2))              :: ZWORK25,ZWORK26
-REAL    :: ZEAU									 ! Mean precipitable water
+REAL    :: ZEAU ! Mean precipitable water
 INTEGER, DIMENSION(SIZE(XZZ,1),SIZE(XZZ,2))          ::IKTOP ! level in which is the altitude 3000m
 REAL, DIMENSION(SIZE(XZZ,1),SIZE(XZZ,2),SIZE(XZZ,3)) :: ZDELTAZ ! interval (m) between two levels K
-
+INTEGER :: ILUOUT0 ! Logical unit number for output-listing
+!
+CHARACTER(LEN=2)  :: INDICE
+INTEGER           :: I
 !
 !-------------------------------------------------------------------------------
 !
@@ -322,7 +331,7 @@ IKB=1+JPVEXT
 IKE=IKU-JPVEXT
 
 IMI = GET_CURRENT_MODEL_INDEX()
-
+CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
 !-------------------------------------------------------------------------------
 !
 !*       1.     WRITES IN THE LFI FILE
@@ -2783,7 +2792,7 @@ IF(LRADAR .AND. LUSERR) THEN
 !       
   IF (NVERSION_RAD == 1) THEN 
 ! original version of radar diagnostics 
-      WRITE(0,*) 'radar diagnostics from RADAR_RAIN_ICE routine'
+      WRITE(ILUOUT0,*) 'radar diagnostics from RADAR_RAIN_ICE routine'
   CALL RADAR_RAIN_ICE (XRT, XCIT, XRHODREF, ZTEMP, ZWORK31, ZWORK32, &
                                                          ZWORK33, ZWORK34 )
 !
@@ -2812,158 +2821,169 @@ IF(LRADAR .AND. LUSERR) THEN
   CALL FMWRIT (HFMFILE,YRECFM,CLUOUT,'XY',ZWORK34,IGRID,ILENCH,YCOMMENT,IRESP)
 !
    ELSE 
-      !
-      WRITE(0,*) 'radar diagnostics from RADAR_SIMULATOR routine'
-      
-      NBRAD=COUNT(XLAT_RAD(:) /= XUNDEF)
-      NMAX=INT(NBSTEPMAX*XSTEP_RAD/XGRID)
-      IF(NBSTEPMAX*XSTEP_RAD/XGRID/=NMAX) THEN
-        WRITE(0,*) 'NBSTEPMAX*XSTEP_RAD/XGRID is not an integer; please choose another combination'
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
-      ENDIF
-      DO JI=1,NBRAD
-         NBELEV(JI)=COUNT(XELEV(JI,:) /= XUNDEF)
-         WRITE(0,*) 'Number of ELEVATIONS : ', NBELEV(JI), 'FOR RADAR:', JI
-      END DO
-      IIELV=MAXVAL(NBELEV(1:NBRAD))
-      WRITE(0,*) 'Maximum number of ELEVATIONS',IIELV
-      WRITE(0,*) 'YOU HAVE ASKED FOR ', NBRAD, 'RADARS'
-      !
-      NBAZIM=8*NMAX  ! number of azimuths   
-      WRITE(0,*) ' Number of AZIMUTHS : ', NBAZIM
-      IF (LCART_RAD) THEN
-         ALLOCATE(ZWORK43(NBRAD,4*NMAX,2*NMAX))
-      ELSE
-         ALLOCATE(ZWORK43(1,NBAZIM,1))
-      END IF
+    !
+    WRITE(ILUOUT0,*) 'radar diagnostics from RADAR_SIMULATOR routine'
+    
+    NBRAD=COUNT(XLAT_RAD(:) /= XUNDEF)
+    NMAX=INT(NBSTEPMAX*XSTEP_RAD/XGRID)
+    IF(NBSTEPMAX*XSTEP_RAD/XGRID/=NMAX .AND. (LCART_RAD)) THEN
+      WRITE(ILUOUT0,*) 'NBSTEPMAX*XSTEP_RAD/XGRID is not an integer; please choose another combination'
+      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+      CALL ABORT
+      STOP
+    ENDIF
+    DO JI=1,NBRAD
+       NBELEV(JI)=COUNT(XELEV(JI,:) /= XUNDEF)
+       WRITE(ILUOUT0,*) 'Number of ELEVATIONS : ', NBELEV(JI), 'FOR RADAR:', JI
+    END DO
+    IIELV=MAXVAL(NBELEV(1:NBRAD))
+    WRITE(ILUOUT0,*) 'Maximum number of ELEVATIONS',IIELV
+    WRITE(ILUOUT0,*) 'YOU HAVE ASKED FOR ', NBRAD, 'RADARS'
+    !
+    IF (LCART_RAD) NBAZIM=8*NMAX  ! number of azimuths 
+    WRITE(ILUOUT0,*) ' Number of AZIMUTHS : ', NBAZIM
+    IF (LCART_RAD) THEN
+      ALLOCATE(ZWORK43(NBRAD,4*NMAX,2*NMAX))
+    ELSE
+      ALLOCATE(ZWORK43(1,NBAZIM,1))
+    END IF
 !! Some controls...
-      IF(NBRAD/=COUNT(XLON_RAD(:) /= XUNDEF).OR.NBRAD/=COUNT(XALT_RAD(:) /= XUNDEF).OR. &
-           NBRAD/=COUNT(XLAM_RAD(:) /= XUNDEF).OR.NBRAD/=COUNT(XDT_RAD(:) /= XUNDEF).OR. &
-           NBRAD/=COUNT(CNAME_RAD(:) /= "UNDEF")) THEN
-         WRITE(0,*) "Error: inconsistency in DIAG1.nam."
+    IF(NBRAD/=COUNT(XLON_RAD(:) /= XUNDEF).OR.NBRAD/=COUNT(XALT_RAD(:) /= XUNDEF).OR. &
+       NBRAD/=COUNT(XLAM_RAD(:) /= XUNDEF).OR.NBRAD/=COUNT(XDT_RAD(:) /= XUNDEF).OR. &
+       NBRAD/=COUNT(CNAME_RAD(:) /= "UNDEF")) THEN
+      WRITE(ILUOUT0,*) "Error: inconsistency in DIAG1.nam."
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
-      END IF
-      IF(NCURV_INTERPOL==0.AND.(LREFR.OR.LDNDZ)) THEN
-         LREFR=.FALSE.
-         LDNDZ=.FALSE.
-         WRITE(0,*) "Warning: cannot output refractivity nor its vertical gradient when NCURV_INTERPOL=0"
-      END IF
-      IF(MOD(NPTS_H,2)==0) THEN
-         NPTS_H=NPTS_H+1
-         WRITE(0,*) "Warning: NPTS_H has to be ODD. Setting it to ",NPTS_H
-      END IF
-      IF(MOD(NPTS_V,2)==0) THEN
-         NPTS_V=NPTS_V+1
-         WRITE(0,*) "Warning: NPTS_V has to be ODD. Setting it to ",NPTS_V
-      END IF
-      IF(LWBSCS.AND.LWREFL) THEN
-         LWREFL=.FALSE.
-         WRITE(0,*) "Warning: LWREFL cannot be set to .TRUE. if LWBSCS is also set to .TRUE.. Setting LWREFL to .FALSE.."
-      END IF
+      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+      CALL ABORT
+      STOP
+    END IF
+    IF(NCURV_INTERPOL==0.AND.(LREFR.OR.LDNDZ)) THEN
+      LREFR=.FALSE.
+      LDNDZ=.FALSE.
+      WRITE(ILUOUT0,*) "Warning: cannot output refractivity nor its vertical gradient when NCURV_INTERPOL=0"
+    END IF
+    IF(MOD(NPTS_H,2)==0) THEN
+      NPTS_H=NPTS_H+1
+      WRITE(ILUOUT0,*) "Warning: NPTS_H has to be ODD. Setting it to ",NPTS_H
+    END IF
+    IF(MOD(NPTS_V,2)==0) THEN
+      NPTS_V=NPTS_V+1
+      WRITE(ILUOUT0,*) "Warning: NPTS_V has to be ODD. Setting it to ",NPTS_V
+    END IF
+    IF(LWBSCS.AND.LWREFL) THEN
+      LWREFL=.FALSE.
+      WRITE(ILUOUT0,*) "Warning: LWREFL cannot be set to .TRUE. if LWBSCS is also set to .TRUE.. Setting LWREFL to .FALSE.."
+    END IF
+    IF(CCLOUD=="LIMA" .AND. NDIFF/=7) THEN
+      WRITE(ILUOUT0,*) " ERROR : NDIFF=",NDIFF," not available with CCLOUD=LIMA"
+      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+      CALL ABORT
+      STOP
+    END IF
+    INBOUT=28 !28: Temperature + RHR, RHS, RHG, ZDA, ZDS, ZDG, KDR, KDS, KDG      
+    IF (CCLOUD=='LIMA') INBOUT=INBOUT+1 ! rain concentration CRT
+    IF(LREFR) INBOUT=INBOUT+1 !+refractivity
+    IF(LDNDZ) INBOUT=INBOUT+1 !+refractivity vertical gradient 
+    IF(LATT)  INBOUT=INBOUT+12 !+AER-AEG AVR-AVG (vertical specific attenuation) and ATR-ATG  
+    WRITE(ILUOUT0,*) "Nombre de variables dans ZWORK42 en sortie de radar_simulator:",INBOUT
 
-      INBOUT=15
-      IF(LREFR) INBOUT=INBOUT+1
-      IF(LDNDZ) INBOUT=INBOUT+1
-      IF(LATT)  INBOUT=INBOUT+8
-      IF (LCART_RAD) THEN
-         ALLOCATE(ZWORK42(NBRAD,IIELV,2*NMAX,2*NMAX,INBOUT))
-      ELSE
-         ALLOCATE(ZWORK42(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,INBOUT))
-      END IF
-      !
-      CALL RADAR_SIMULATOR(XUT,XVT,XWT,XRT,XCIT,XRHODREF,ZTEMP,XPABST,ZWORK42,ZWORK43)
-      ALLOCATE(YRAD(INBOUT))
-      YRAD(1:9)=(/"ZHH","ZDR","KDP","CSR","ZER","ZEI","ZES","ZEG","VRU"/)
-      ICURR=10
-      IF(LATT) THEN
-         YRAD(ICURR:ICURR+7)=(/"AER","AEI","AES","AEG","ATR","ATI","ATS","ATG"/)
-         ICURR=ICURR+8
-      END IF
-      YRAD(ICURR:ICURR+5)=(/"HAS","M_R","M_I","M_S","M_G","CIT"/)
-      ICURR=ICURR+6
-      IF(LREFR) THEN
-         YRAD(ICURR)="RFR"
-         ICURR=ICURR+1
-      END IF
-      IF(LDNDZ) THEN
-         YRAD(ICURR)="DNZ"
-         ICURR=ICURR+1
-      END IF
-      
-      IF (LCART_RAD) THEN
-         PRINT*, "Writing Cartesian output"
-         DO JI=1,NBRAD
-            IEL=NBELEV(JI)
-            !           print*,'nb d élévations',IEL
-            ! writing latlon in internal files 
-            ALLOCATE(CLATLON(2*NMAX))
-            CLATLON=""
-            DO JV=2*NMAX,1,-1
-               DO JH=1,2*NMAX
-                  WRITE(CBUFFER,'(2(f8.3,1X))') ZWORK43(JI,2*JH-1,JV),ZWORK43(JI,2*JH,JV)
+    IF (LCART_RAD) THEN
+      ALLOCATE(ZWORK42(NBRAD,IIELV,2*NMAX,2*NMAX,INBOUT))
+    ELSE
+      ALLOCATE(ZWORK42(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,INBOUT))
+      ALLOCATE(ZWORK42_BIS(NBRAD,IIELV,NBAZIM,NBSTEPMAX+1,INBOUT))
+    END IF
+    !
+!    IF (CCLOUD=='LIMA') THEN
+!      CALL RADAR_SIMULATOR(XUT,XVT,XWT,XRT,XSVT(:,:,:,NSV_LIMA_NI),XRHODREF,&
+!                      ZTEMP,XPABST,ZWORK42,ZWORK43,XSVT(:,:,:,NSV_LIMA_NR))
+!    ELSE ! ICE3
+      CALL RADAR_SIMULATOR(XUT,XVT,XWT,XRT,XCIT,XRHODREF,ZTEMP,XPABSM,ZWORK42,ZWORK43)      
+!    ENDIF
+    ALLOCATE(YRAD(INBOUT))
+    YRAD(1:9)=(/"ZHH","ZDR","KDP","CSR","ZER","ZEI","ZES","ZEG","VRU"/)
+    ICURR=10
+    IF(LATT) THEN
+      YRAD(ICURR:ICURR+11)=(/"AER","AEI","AES","AEG","AVR","AVI","AVS","AVG","ATR","ATI","ATS","ATG"/)
+      ICURR=ICURR+12
+    END IF
+    YRAD(ICURR:ICURR+2)=(/"RHV","PDP","DHV"/)
+    ICURR=ICURR+3
+    YRAD(ICURR:ICURR+8)=(/"RHR","RHS","RHG","ZDA","ZDS","ZDG","KDR","KDS","KDG"/)
+    ICURR=ICURR+9
+    YRAD(ICURR:ICURR+6)=(/"HAS","M_R","M_I","M_S","M_G","CIT","TEM"/)
+    ICURR=ICURR+7
+    IF (CCLOUD=='LIMA') THEN
+      YRAD(ICURR)="CRT"
+      ICURR=ICURR+1
+    ENDIF
+    IF(LREFR) THEN
+      YRAD(ICURR)="RFR"
+      ICURR=ICURR+1
+    END IF
+    IF(LDNDZ) THEN
+      YRAD(ICURR)="DNZ"
+      ICURR=ICURR+1
+    END IF
+    IF (LCART_RAD) THEN
+      DO JI=1,NBRAD
+        IEL=NBELEV(JI)
+        ! writing latlon in internal files 
+        ALLOCATE(CLATLON(2*NMAX))
+        CLATLON=""
+        DO JV=2*NMAX,1,-1
+          DO JH=1,2*NMAX
+            WRITE(CBUFFER,'(2(f8.3,1X))') ZWORK43(JI,2*JH-1,JV),ZWORK43(JI,2*JH,JV)
                   CLATLON(JV)=TRIM(CLATLON(JV)) // " " // TRIM(CBUFFER)
-               END DO
-               CLATLON(JV)=TRIM(ADJUSTL(CLATLON(JV)))
+          END DO
+          CLATLON(JV)=TRIM(ADJUSTL(CLATLON(JV)))
+        END DO            
+        DO JEL=1,IEL
+          WRITE(YELEV,'(I2.2,A1,I1.1)') FLOOR(XELEV(JI,JEL)),'.',&
+                 INT(ANINT(10.*XELEV(JI,JEL))-10*INT(XELEV(JI,JEL)))
+          WRITE(YGRID_SIZE,'(I3.3)') 2*NMAX
+          DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5)
+            YRS=YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//YGRID_SIZE//HFMFILE
+            CALL OPEN_ll(UNIT=ILURS,FILE=YRS,IOSTAT=IRESP,STATUS="NEW",ACTION='WRITE', &
+                         FORM="FORMATTED",RECL=8192)
+            WRITE(ILURS,'(A,4F12.6,2I5)') '**domaine LATLON ',ZWORK43(JI,1,1),ZWORK43(JI,4*NMAX-1,2*NMAX), &
+                  ZWORK43(JI,2,1),ZWORK43(JI,4*NMAX,2*NMAX),2*NMAX,2*NMAX !! HEADER
+            DO JV=2*NMAX,1,-1
+              DO JH=1,2*NMAX
+                WRITE(ILURS,'(E11.5,1X)',ADVANCE='NO') ZWORK42(JI,JEL,JH,JV,JJ)
+              END DO
+              WRITE(ILURS,*) ''
             END DO
-            
-            DO JEL=1,IEL
-               WRITE(YELEV,'(I2.2,A1,I1.1)') FLOOR(XELEV(JI,JEL)),'.',&
-                    INT(ANINT(10.*XELEV(JI,JEL))-10*INT(XELEV(JI,JEL)))
-               WRITE(YGRID_SIZE,'(I3.3)') 2*NMAX
-               DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5)
-                  YRS=YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//YGRID_SIZE//HFMFILE
-                  CALL OPEN_ll(UNIT=ILURS,FILE=YRS,IOSTAT=IRESP,STATUS="NEW",ACTION='WRITE', &
-                       FORM="FORMATTED",RECL=8192)
-                  WRITE(ILURS,'(A,4F12.6,2I5)') '**domaine LATLON ',ZWORK43(JI,1,1),ZWORK43(JI,4*NMAX-1,2*NMAX), &
-                       ZWORK43(JI,2,1),ZWORK43(JI,4*NMAX,2*NMAX),2*NMAX,2*NMAX !! HEADER
-                  DO JV=2*NMAX,1,-1
-                     DO JH=1,2*NMAX
-                        WRITE(ILURS,'(E11.5,1X)',ADVANCE='NO') ZWORK42(JI,JEL,JH,JV,JJ)
-                     END DO
-                     WRITE(ILURS,*) ''
-                  END DO
-                  
-                  DO JV=2*NMAX,1,-1
-                     WRITE(ILURS,*) CLATLON(JV)
-                  END DO
                   
-                  CALL CLOSE_ll(HFILE=YRS)
-               END DO
-               
-            END DO
-            DEALLOCATE(CLATLON)
-         END DO
-      ELSE ! polar output
-         PRINT*, "Writing polar output"
-         DO JI=1,NBRAD
-            IEL=NBELEV(JI)
-            DO JEL=1,IEL
-               WRITE(YELEV,'(I2.2,A1,I1.1)') FLOOR(XELEV(JI,JEL)),'.',&
-                    INT(ANINT(10.*XELEV(JI,JEL))-10*INT(XELEV(JI,JEL)))
-!               WRITE(YGRID_SIZE,'(I3.3)') 2*NMAX
-               
-               DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5)
-                  YRS="P"//YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//HFMFILE
-                  CALL OPEN_ll(UNIT=ILURS,FILE=YRS,IOSTAT=IRESP,STATUS="NEW",ACTION='WRITE', &
-                       FORM="FORMATTED",RECL=8192)
-                  WRITE(ILURS,*) '# FORMAT : R (m),THETA (rad),VAL ; azimuths 0°=N 90°=E; NBSTEPMAX=',NBSTEPMAX !! HEADER
-                  DO JH=1,NBAZIM
-                     DO JV=1,NBSTEPMAX+1
-                        WRITE(ILURS,'(3(E11.5,1X))') JV*XSTEP_RAD,ZWORK43(1,JH,1),ZWORK42(JI,JEL,JH,JV,JJ)
-                     END DO
-                  END DO
-                                    
-                  CALL CLOSE_ll(HFILE=YRS)
-               END DO
-            END DO
-         END DO
-      END IF
-      DEALLOCATE(ZWORK42,ZWORK43)
+            DO JV=2*NMAX,1,-1
+              WRITE(ILURS,*) CLATLON(JV)
+            END DO                  
+            CALL CLOSE_ll(HFILE=YRS)
+          END DO               
+        END DO
+        DEALLOCATE(CLATLON)
+      END DO
+    ELSE ! polar output
+       CALL MPI_ALLREDUCE(ZWORK42, ZWORK42_BIS, SIZE(ZWORK42), MPI_PRECISION, MPI_MAX, NMNH_COMM_WORLD, IERR)
+      DO JI=1,NBRAD
+        IEL=NBELEV(JI)
+        DO JEL=1,IEL
+          WRITE(YELEV,'(I2.2,A1,I1.1)') FLOOR(XELEV(JI,JEL)),'.',&
+                INT(ANINT(10.*XELEV(JI,JEL))-10*INT(XELEV(JI,JEL)))
+          DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5)
+            YRS="P"//YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//HFMFILE
+            CALL OPEN_ll(UNIT=ILURS,FILE=YRS,IOSTAT=IRESP,ACTION='WRITE',MODE=GLOBAL)
+            DO JH=1,NBAZIM
+              DO JV=1,NBSTEPMAX+1
+                WRITE(ILURS,"(F15.7)") ZWORK42_BIS(JI,JEL,JH,JV,JJ)
+              END DO
+            END DO                                    
+            CALL CLOSE_ll(HFILE=YRS)
+          END DO
+        END DO
+      END DO
+    END IF !polar output
+    DEALLOCATE(ZWORK42,ZWORK43)
    END IF
 END IF
 !