diff --git a/conf/profile_mesonh.ihm b/conf/profile_mesonh.ihm
index 32b64a983dcc575372ec0ce3c7d9468ea8703be5..74bcb1f6d5887136a68edb09031c584fbe1d8bb5 100755
--- a/conf/profile_mesonh.ihm
+++ b/conf/profile_mesonh.ihm
@@ -1,5 +1,5 @@
 #!/bin/bash
-#MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+#MNH_LIC Copyright 1994-2023 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.
@@ -171,8 +171,7 @@ export VARTTY=\`tty\`
 #
 # Variable depending on \$ARCH 
 #
-[ -f \${SRC_MESONH}/conf/conf_\${ARCH} ] && . \${SRC_MESONH}/conf/conf_\${ARCH}
-
+[ ! -f \${SRC_MESONH}/conf/conf_\${ARCH} ] || . \${SRC_MESONH}/conf/conf_\${ARCH}
 #
 # Optional Environnement variable/Module  Env
 #
diff --git a/src/LIB/MPIvide/mpivide.c b/src/LIB/MPIvide/mpivide.c
index eebe91b71a8e3178634fb98688f9118c8325037b..70139b5ea4fee4020ce6986207fbb66b924f8a0a 100644
--- a/src/LIB/MPIvide/mpivide.c
+++ b/src/LIB/MPIvide/mpivide.c
@@ -1,11 +1,12 @@
 /*
-MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+MNH_LIC Copyright 1994-2023 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.
 */
 /* Modifications :
   P. Wautelet 19/11/2021: add function findtypesize + improve/add support for 32 and 64 bits variables + add mpi_reduce
+  J. Escobar  22/09/2022: add MPI_Sendrecv
 */
 
 #include <stdio.h>
@@ -158,6 +159,20 @@ int              *__ierr;
     *__ierr = 0;
 }
 
+#pragma weak mpi_sendrecv__ = mpi_sendrecv
+#pragma weak mpi_sendrecv_  = mpi_sendrecv
+void mpi_sendrecv(void *sendbuf, int *sendcounts, int *sendtype, int *dest  , int *sendtag ,
+                  void *recvbuf, int *recvcounts, int *recvtype, int *source, int *recvtag ,
+		  int *comm, int *__ierr)
+{
+    int size;
+
+    disppass("sendrecv");
+    size = findtypesize(*sendtype);
+    memcpy(recvbuf, sendbuf, (*recvcounts)*size);
+
+    *__ierr = 0;
+}
 
 #pragma weak mpi_alltoallv__ = mpi_alltoallv
 #pragma weak mpi_alltoallv_  = mpi_alltoallv
diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index 7a763a67522b523f8c5ddee29f6449c4b89e3697..5a387ac24a205b5977d6801463847c8e880b7ca1 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -19,6 +19,7 @@
 !  P. Wautelet 04/12/2020: add IO_Field_create and IO_Ndimlist_reduce subroutines
 !  P. Wautelet 07/12/2020: add support for partial write of fields (optional argument: koffset, not all subroutines, no LFI spport)
 !  P. Wautelet 14/01/2021: add IO_Field_write_byname_N4 and IO_Field_write_byfield_N4 subroutines
+!  P. Wautelet 07/04/2023: correct IO_Field_user_write examples
 !-----------------------------------------------------------------
 
 #define MNH_SCALARS_IN_SPLITFILES 0
@@ -3049,6 +3050,7 @@ end subroutine IO_Ndimlist_reduce
     !
     CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
+!PW: transferer ce traitement LFI dans les subroutines LFI (en creer 1 pour les HFIELD)
     IF(GLFI) THEN
       ILE=LEN(HFIELD)
       IP=SIZE(HFIELD)
@@ -4223,9 +4225,10 @@ END DO
 END SUBROUTINE IO_Fieldlist_write
 
 
-SUBROUTINE IO_Field_user_write(TPOUTPUT)
+SUBROUTINE IO_Field_user_write( TPOUTPUT )
 !
 #if 0
+! IMPORTANT: uncomment the previous line (set to '#if 1') if you want to use the next lines
 USE MODD_DYN_n,      ONLY: XTSTEP
 USE MODD_FIELD_n,    ONLY: XUT, XVT, XRT, XTHT, XSVT
 USE MODD_PARAMETERS, ONLY: JPVEXT
@@ -4239,86 +4242,93 @@ TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
 TYPE(TFIELDMETADATA) :: TZFIELD
 !
 #if 0
-INTEGER          :: IKB
+! IMPORTANT: uncomment the previous line (set to '#if 1') if you want to use the next lines
 !
+INTEGER          :: IKB
+
 IKB=JPVEXT+1
-!
-TZFIELD%CMNHNAME   = 'UTLOW'
-TZFIELD%CSTDNAME   = 'x_wind'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'm s-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_U component of wind at lowest physical level'
-TZFIELD%NGRID      = 2
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XUT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'VTLOW'
-TZFIELD%CSTDNAME   = 'y_wind'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'm s-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_V component of wind at lowest physical level'
-TZFIELD%NGRID      = 3
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XVT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'THTLOW'
-TZFIELD%CSTDNAME   = 'air_potential_temperature'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'K'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_potential temperature at lowest physical level'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XTHT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'RVTLOW'
-!TZFIELD%CSTDNAME   = 'humidity_mixing_ratio' !ratio of the mass of water vapor to the mass of dry air
-TZFIELD%CSTDNAME   = 'specific_humidity'     !mass fraction of water vapor in (moist) air
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'kg kg-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_Vapor mixing Ratio at lowest physical level'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XRT(:,:,IKB,1))
-!
-TZFIELD%CMNHNAME   = 'ACPRRSTEP'
-TZFIELD%CSTDNAME   = 'rainfall_amount'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'kg m-2'
-TZFIELD%CDIR       = ''
-TZFIELD%CCOMMENT   = 'X_Y_ACcumulated Precipitation Rain Rate during timestep'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
+
+TZFIELD = TFIELDMETADATA( &
+  CMNHNAME   = 'UTLOW',   &
+  CLONGNAME  = '',        &
+  CSTDNAME   = 'x_wind',  &
+  CUNITS     = 'm s-1',   &
+  CDIR       = 'XY',      &
+  CCOMMENT   = 'X-component of wind at lowest physical level', &
+  NGRID      = 2,         &
+  NTYPE      = TYPEREAL,  &
+  NDIMS      = 2,         &
+  LTIMEDEP   = .TRUE.     )
+CALL IO_Field_write( TPOUTPUT%TFILE, TZFIELD, XUT(:,:,IKB) )
+
+TZFIELD = TFIELDMETADATA( &
+  CMNHNAME   = 'VTLOW',   &
+  CLONGNAME  = '',        &
+  CSTDNAME   = 'y_wind',  &
+  CUNITS     = 'm s-1',   &
+  CDIR       = 'XY',      &
+  CCOMMENT   = 'Y-component of wind at lowest physical level', &
+  NGRID      = 3,         &
+  NTYPE      = TYPEREAL,  &
+  NDIMS      = 2,         &
+  LTIMEDEP   = .TRUE.     )
+CALL IO_Field_write( TPOUTPUT%TFILE, TZFIELD, XVT(:,:,IKB) )
+
+TZFIELD = TFIELDMETADATA( &
+  CMNHNAME   = 'THTLOW',  &
+  CLONGNAME  = '',        &
+  CSTDNAME   = 'air_potential_temperature',  &
+  CUNITS     = 'K',       &
+  CDIR       = 'XY',      &
+  CCOMMENT   = 'potential temperature at lowest physical level', &
+  NGRID      = 1,         &
+  NTYPE      = TYPEREAL,  &
+  NDIMS      = 2,         &
+  LTIMEDEP   = .TRUE.     )
+CALL IO_Field_write( TPOUTPUT%TFILE, TZFIELD, XTHT(:,:,IKB) )
+
+TZFIELD = TFIELDMETADATA(           &
+  CMNHNAME   = 'RVTLOW',            &
+  CLONGNAME  = '',                  &
+  ! CSTDNAME   = 'humidity_mixing_ratio',  &  !ratio of the mass of water vapor to the mass of dry air
+  CSTDNAME   = 'specific_humidity', &         !mass fraction of water vapor in (moist) air
+  CUNITS     = 'kg kg-1',           &
+  CDIR       = 'XY',                &
+  CCOMMENT   = 'Vapor mixing Ratio at lowest physical level', &
+  NGRID      = 1,                   &
+  NTYPE      = TYPEREAL,            &
+  NDIMS      = 2,                   &
+  LTIMEDEP   = .TRUE.               )
+CALL IO_Field_write( TPOUTPUT%TFILE, TZFIELD, XRT(:,:,IKB,1) )
+
+TZFIELD = TFIELDMETADATA(         &
+  CMNHNAME   = 'ACPRRSTEP',       &
+  CLONGNAME  = '',                &
+  CSTDNAME   = 'rainfall_amount', &
+  CUNITS     = 'kg m-2',          &
+  CDIR       = 'XY',              &
+  CCOMMENT   = 'ACcumulated Precipitation Rain Rate during timestep', &
+  NGRID      = 1,                 &
+  NTYPE      = TYPEREAL,          &
+  NDIMS      = 2,                 &
+  LTIMEDEP   = .TRUE.             )
 !XACPRR is multiplied by 1000. to convert from m to kg m-2 (water density is assumed to be 1000 kg m-3)
-CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XINPRR*XTSTEP*1.0E3)
-!
-TZFIELD%CMNHNAME   = 'SVT001'
-TZFIELD%CSTDNAME   = 'concentration in scalar variable'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'kg kg-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_concentration in scalar variable'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 3
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XSVT(:,:,:,1))
-!
+CALL IO_Field_write( TPOUTPUT%TFILE, TZFIELD, XINPRR*XTSTEP*1.0E3 )
+
+TZFIELD = TFIELDMETADATA( &
+  CMNHNAME   = 'SVT001',  &
+  CLONGNAME  = 'SVT001',  &
+  CSTDNAME   = '',        &
+  CUNITS     = 'kg kg-1', &
+  CDIR       = 'XY',      &
+  CCOMMENT   = 'concentration in scalar variable', &
+  NGRID      = 1,         &
+  NTYPE      = TYPEREAL,  &
+  NDIMS      = 3,         &
+  LTIMEDEP   = .TRUE.     )
+CALL IO_Field_write( TPOUTPUT%TFILE, TZFIELD, XSVT(:,:,:,1) )
 #endif
-!
+
 END SUBROUTINE IO_Field_user_write
 
 END MODULE MODE_IO_FIELD_WRITE
diff --git a/src/MNH/aer_clim_surf.f90 b/src/MNH/aer_clim_surf.f90
new file mode 100644
index 0000000000000000000000000000000000000000..fc6af75afd9161afa3aa13837be8b4c9b700e258
--- /dev/null
+++ b/src/MNH/aer_clim_surf.f90
@@ -0,0 +1,182 @@
+!MNH_LIC Copyright 1995-2020 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.
+!-----------------------------------------------------------------
+!     ##########################
+      MODULE MODI_AER_CLIM_SURF
+!     ##########################
+!
+INTERFACE
+!
+    SUBROUTINE AER_CLIM_SURF( PLAT, PLON, PAESEA, PAELAN, PAEURB, PAEDES )
+!
+REAL, DIMENSION(:,:),   INTENT(IN) :: PLAT, PLON ! arrays of latitude-longitude
+!
+REAL, DIMENSION (:),     INTENT(OUT)  :: PAESEA, PAELAN, PAEURB, PAEDES
+!
+END SUBROUTINE AER_CLIM_SURF
+!
+END INTERFACE
+!
+END MODULE MODI_AER_CLIM_SURF
+!
+!
+!   ###################################################################
+    SUBROUTINE AER_CLIM_SURF(PLAT, PLON, PAESEA, PAELAN, PAEURB, PAEDES )
+!   ###################################################################
+!
+!!****  *INI_RADIATIONS * - initialisation for ECMWF radiation scheme in the MesoNH framework
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!! 
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!  	V. Masson : extract the Aerosol initialization by surface types from ini_radiation_ecmwf.f90 routine
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    03/2023
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!MESO-NH modules
+!
+USE MODE_ll
+USE MODD_CONF,    ONLY : LCARTESIAN
+USE MODD_PARAM_n, ONLY : CSURF
+!
+USE MODI_MNHGET_SURF_PARAM_n
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+REAL, DIMENSION(:,:),   INTENT(IN) :: PLAT, PLON ! arrays of latitude-longitude
+!
+REAL, DIMENSION (:),     INTENT(OUT)  :: PAESEA, PAELAN, PAEURB, PAEDES
+!
+!
+!*       0.2   declarations of local variables
+!
+INTEGER :: JI, JJ, IIJ  ! loop index
+!
+INTEGER :: IIB           ! I index value of the first inner mass point
+INTEGER :: IJB           ! J index value of the first inner mass point
+INTEGER :: IIE           ! I index value of the last inner mass point
+INTEGER :: IJE           ! J index value of the last inner mass point
+INTEGER :: IIU           ! array size for the first  index
+INTEGER :: IJU           ! array size for the second index
+!
+REAL, DIMENSION(:,:),ALLOCATABLE :: ZLON          ! longitude
+!
+! Variables for aerosols and ozone climatologies set up
+LOGICAL, DIMENSION (:,:),ALLOCATABLE  :: GAFRICA, GASIA, GAUSTRALIA
+REAL, DIMENSION (:,:),   ALLOCATABLE  :: ZDESERT ! desert fraction
+REAL, DIMENSION (:,:),   ALLOCATABLE  :: ZSEA   ! sea fraction
+REAL, DIMENSION (:,:),   ALLOCATABLE  :: ZTOWN  ! town fraction
+REAL, DIMENSION (:,:),   ALLOCATABLE  :: ZBARE  ! bare soil fraction
+!
+!-------------------------------------------------------------------------------
+!-------------------------------------------------------------------------------
+!-------------------------------------------------------------------------------
+!
+!*       0.1  INITIALIZATIONS
+!
+!
+!*       0.2  COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS
+!
+CALL GET_DIM_EXT_ll ('B',IIU,IJU)
+!
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+!
+!-------------------------------------------------------------------------------
+!
+!*       7.     INITIALIZES THE ECMWF RADIATION PACKAGE 
+!	        ------------------------------------------------
+!
+! AEROSOLS from SURFACE FRACTIONS
+!
+    !* deserts are only considered over Africa, southern Asia, Australia
+    !* longitude between -180 and 180 for geographical tests
+    !  Only bare soil fractions larger than 0.5 are supposed to contribute to
+    !  desert aerosols
+    !
+    ALLOCATE(ZSEA      (IIU,IJU))
+    ALLOCATE(ZTOWN     (IIU,IJU))
+    ALLOCATE(ZBARE     (IIU,IJU))
+    IF (CSURF=='EXTE') THEN
+      CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE)
+    ELSE
+      ZSEA (:,:) = 1.
+      ZTOWN(:,:) = 0.
+      ZBARE(:,:) = 0.
+    END IF
+
+
+    ALLOCATE(ZDESERT   (IIU,IJU))
+    ZDESERT(:,:) = 0.
+
+    IF (.NOT.LCARTESIAN) THEN
+      !* deserts are only considered over Africa, southern Asia, Australia
+      ALLOCATE(ZLON      (IIU,IJU))
+      ALLOCATE(GAFRICA   (IIU,IJU))
+      ALLOCATE(GASIA     (IIU,IJU))
+      ALLOCATE(GAUSTRALIA(IIU,IJU))    
+      !* longitude between -180 and 180 for geographical tests
+      ZLON = PLON(:,:) - NINT(PLON/360.)*360.
+      GAFRICA   (:,:) = PLAT(:,:) > -36.086389  .AND. PLAT(:,:) < 36.010556 &
+                  .AND. ZLON(:,:) > -73.18      .AND. ZLON(:,:) < 34.158611
+      GASIA     (:,:) = PLAT(:,:) > 4.358056    .AND. PLAT(:,:) < 55.335278 &
+                  .AND. ZLON(:,:) > -123.157778 .AND. ZLON(:,:) <-34.285556
+      GAUSTRALIA(:,:) = PLAT(:,:) > -39.561389  .AND. PLAT(:,:) < -10.251667 &
+                  .AND. ZLON(:,:) > -155.041944 .AND. ZLON(:,:) < -111.405556
+      !
+      !  Only bare soil fractions larger than 0.5 are supposed to contribute to
+      !  desert aerosols
+      !
+      WHERE (GAFRICA(:,:) .OR. GASIA(:,:) .OR. GAUSTRALIA(:,:)) &
+      ZDESERT(:,:) = MAX( 2.*(ZBARE(:,:)-0.5) , 0.)
+      !
+      !
+    ELSE
+      !
+      ZDESERT(:,:) = MAX( 2.*(ZBARE(:,:)-0.5) , 0.)
+      !
+    ENDIF
+    !
+    !* fills sea, town, desert and land surface covers for aerosols distributions
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        PAESEA(IIJ) = ZSEA(JI,JJ)
+        PAEURB(IIJ) = ZTOWN(JI,JJ)
+        PAEDES(IIJ) = ZDESERT(JI,JJ)
+        PAELAN(IIJ) = MAX( 1.- PAESEA(IIJ) - PAEURB(IIJ) - PAEDES(IIJ) , 0.)
+      END DO
+    END DO
+    IF (ALLOCATED(ZLON)) DEALLOCATE(ZLON)
+    IF (ALLOCATED(GAFRICA))     DEALLOCATE(GAFRICA)
+    IF (ALLOCATED(GASIA))     DEALLOCATE(GASIA)
+    IF (ALLOCATED(GAUSTRALIA))     DEALLOCATE(GAUSTRALIA)
+    IF (ALLOCATED(ZDESERT))     DEALLOCATE(ZDESERT)
+
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE AER_CLIM_SURF
diff --git a/src/MNH/aer_monitorn.f90 b/src/MNH/aer_monitorn.f90
index 22d5f69a9b8e052d1f28a46fe8a2d524a9e5913c..ec800306eab3ece233568cc174bb489d21e5799f 100644
--- a/src/MNH/aer_monitorn.f90
+++ b/src/MNH/aer_monitorn.f90
@@ -347,8 +347,6 @@ SELECT CASE (CCLOUD)
                               XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),   &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,2),      &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,3),      &
-                              ZRCS(IIB:IIE,IJB:IJE,IKB:IKE),       &
-                              ZRRS(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
                               XTHT(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               XPABST(IIB:IIE,IJB:IJE,IKB:IKE),     &
@@ -366,8 +364,6 @@ SELECT CASE (CCLOUD)
                               XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),   &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,2),      &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,3),      &
-                              ZRCS(IIB:IIE,IJB:IJE,IKB:IKE),       &
-                              ZRRS(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
                               XTHT(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               XPABST(IIB:IIE,IJB:IJE,IKB:IKE),     &
@@ -385,8 +381,6 @@ CASE ('LIMA')
                               XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),   &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,2),      &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,3),      &
-                              ZRCS(IIB:IIE,IJB:IJE,IKB:IKE),       &
-                              ZRRS(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
                               XTHT(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               XPABST(IIB:IIE,IJB:IJE,IKB:IKE),     &
@@ -537,8 +531,6 @@ SELECT CASE (CCLOUD)
                               XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),  &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,2),     &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,3),     &
-                              ZRCS(IIB:IIE,IJB:IJE,IKB:IKE),      &
-                              ZRRS(IIB:IIE,IJB:IJE,IKB:IKE),      &
                               ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),  &
                               XTHT(IIB:IIE,IJB:IJE,IKB:IKE),      &
                               XPABST(IIB:IIE,IJB:IJE,IKB:IKE),    &
@@ -556,8 +548,6 @@ SELECT CASE (CCLOUD)
                               XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),   &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,2),      &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,3),      &
-                              ZRCS(IIB:IIE,IJB:IJE,IKB:IKE),       &
-                              ZRRS(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
                               XTHT(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               XPABST(IIB:IIE,IJB:IJE,IKB:IKE),     &
@@ -574,8 +564,6 @@ SELECT CASE (CCLOUD)
                               XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),   &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,2),      &
                               XRT(IIB:IIE,IJB:IJE,IKB:IKE,3),      &
-                              ZRCS(IIB:IIE,IJB:IJE,IKB:IKE),       &
-                              ZRRS(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
                               XTHT(IIB:IIE,IJB:IJE,IKB:IKE),       &
                               XPABST(IIB:IIE,IJB:IJE,IKB:IKE),     &
diff --git a/src/MNH/aer_wet_dep_kmt_warm.f90 b/src/MNH/aer_wet_dep_kmt_warm.f90
index 40083c0c1e3c9336156114b3148db8d5f8f99354..d0ebbdfff6edd447323c9d85a65c73b6aad43aef 100644
--- a/src/MNH/aer_wet_dep_kmt_warm.f90
+++ b/src/MNH/aer_wet_dep_kmt_warm.f90
@@ -12,7 +12,7 @@ INTERFACE
 !!
 SUBROUTINE AER_WET_DEP_KMT_WARM(KSPLITR, PTSTEP, PZZ, PRHODREF,       &
                                 PRCT, PRRT,                           &
-                                PRCS, PRRS,  PSVT, PTHT,              &
+                                PSVT, PTHT,                           &
                                 PPABST, PRGAER, PEVAP3D, KMODE,       &
                                 PDENSITY_AER, PMASSMIN, PSEA, PTOWN,  &
                                 PCCT, PCRT )
@@ -30,8 +30,6 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT    ! Tracer m.r. at t
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCS    ! Cloud water conc derived from source term
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRS    ! Rain water conc derifed from source term
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEVAP3D ! Instantaneous 3D Rain Evaporation flux (KG/KG/S)
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       !Potential temp
@@ -53,7 +51,7 @@ END MODULE MODI_AER_WET_DEP_KMT_WARM
 !     ###############################################################
       SUBROUTINE AER_WET_DEP_KMT_WARM (KSPLITR, PTSTEP, PZZ,      &
                             PRHODREF, PRCT, PRRT,                 &
-                            PRCS, PRRS,  PSVT, PTHT,              &
+                            PSVT, PTHT,                           &
                             PPABST, PRGAER, PEVAP3D, KMODE,       &
                             PDENSITY_AER, PMASSMIN, PSEA, PTOWN,  &
                             PCCT, PCRT )
@@ -123,14 +121,16 @@ END MODULE MODI_AER_WET_DEP_KMT_WARM
 !              ------------
 !
 USE MODD_CST
-USE MODD_RAIN_ICE_PARAM
+USE MODD_RAIN_ICE_PARAM, ONLY : YEXCACCR=>XEXCACCR, XFSEDC, XFCACCR,&
+                                XEXSEDR, XCRIAUTC, XFSEDR, XTIMAUTC,&
+                                YFCACCR => XFCACCR
 !++th++ 10/05/17
 USE MODD_RAIN_ICE_DESCR, ONLY : YRTMIN => XRTMIN, YCEXVT => XCEXVT, &
                                 XCONC_LAND, XCONC_SEA, XCONC_URBAN, &
                                 XNUC2, XALPHAC2, XNUC, XALPHAC,     &
                                 YLBC => XLBC, XLBEXC,               &
                                 XCCR,                               &
-                                YLBR => XLBR, YLBEXR => XLBEXR 
+                                YLBR => XLBR, YLBEXR => XLBEXR
 !--th--
 USE MODD_PRECIP_n
 USE MODI_AER_VELGRAV
@@ -145,7 +145,8 @@ USE MODD_PARAM_LIMA_WARM, ONLY : WLBR => XLBR, WLBEXR => XLBEXR,          & ! fo
                                  WLBC => XLBC,                            &
                                  XACCR1, XACCR2, XACCR3, XACCR4, XACCR5,  & ! for
                                  XACCR_RLARGE1, XACCR_RLARGE2,            & ! accr.
-                                 XACCR_RSMALL1, XACCR_RSMALL2
+                                 XACCR_RSMALL1, XACCR_RSMALL2,            &
+                                 WEXCACCR=>XEXCACCR, WFCACCR=>XFCACCR
 USE MODD_PARAM_n,         ONLY: CCLOUD
 !--th--
 
@@ -165,8 +166,6 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT    ! Tracer m.r. at t
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCS    ! Cloud water m.r. from source term
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRS    ! Rain water m.r. from source term 
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEVAP3D ! Instantaneous 3D Rain Evaporation flux (KG/KG/S) 
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT     ! Potential temp
@@ -263,7 +262,7 @@ INTEGER :: IKE
 REAL, DIMENSION(:), ALLOCATABLE :: KRTMIN 
 REAL :: KCEXVT, KLBR, KLBEXR, KLBC, ZLBEXC
 REAL, DIMENSION(2) :: ZXLBC
-REAL :: ZEXSEDR, ZDR
+REAL :: ZEXSEDR, ZDR, ZEXCACCR, ZFCACCR
 !  
 !-------------------------------------------------------------------------------
 !
@@ -282,6 +281,8 @@ CASE('ICE3')
   KLBEXR = YLBEXR
   ZXLBC(:) = YLBC(:)
   ZLBEXC = XLBEXC
+  ZEXCACCR = YEXCACCR
+  ZFCACCR = YFCACCR
 CASE('LIMA')
   ALLOCATE(KRTMIN(SIZE(WRTMIN)))
   KRTMIN = WRTMIN
@@ -291,6 +292,8 @@ CASE('LIMA')
   KLBC   = WLBC
   ZLBEXC = 1.0 / 3.0
   ZDR = 0.8
+  ZEXCACCR = WEXCACCR
+  ZFCACCR = WFCACCR
 END SELECT
 !--cb--
 !
@@ -361,9 +364,7 @@ CALL AER_WET_DEP_KMT_ICE_WARM
 !
 CALL AER_WET_DEP_KMT_EVAP   
 !
-!++cb++
 DEALLOCATE(KRTMIN)
-!--cb--
 !
 !-------------------------------------------------------------------------------
 !
@@ -396,12 +397,10 @@ INTEGER                           :: JKAQ     ! counter for chemistry
 GCLOUD(:,:,:) = .FALSE.
 !
 IF (PRESENT(PCCT)) THEN ! case KHKO, C2R2, C3R5, LIMA (2-moment schemes)
-  GCLOUD(:,:,:) = PRCS(:,:,:) > KRTMIN(2) .AND. PCCT(:,:,:) > XCTMIN(2)
+  GCLOUD(:,:,:) = PRCT(:,:,:) > KRTMIN(2) .AND. PCCT(:,:,:) > XCTMIN(2)
 ELSE                    ! Case ICE3, REVE, KESS, ... (1-moment schemes)
-  GCLOUD(:,:,:) = PRCS(:,:,:) > KRTMIN(2)
+  GCLOUD(:,:,:) = PRCT(:,:,:) > KRTMIN(2)
 END IF
-!--cb--
-!--th--
 
 ICLOUD = COUNTJV( GCLOUD(:,:,:),I1C(:),I2C(:),I3C(:))
 IF( ICLOUD >= 1 ) THEN   
@@ -437,7 +436,7 @@ IF( ICLOUD >= 1 ) THEN
     ZTHT(JL)           = PTHT(I1C(JL),I2C(JL),I3C(JL))
     ZRC(JL)            = ZRAY(I1C(JL),I2C(JL),I3C(JL))
     ZPABST(JL)         = PPABST(I1C(JL),I2C(JL),I3C(JL))
-    ZRCT(JL)           = PRCS(I1C(JL),I2C(JL),I3C(JL)) 
+    ZRCT(JL)           = PRCT(I1C(JL),I2C(JL),I3C(JL)) 
     ZRHODREF(JL)       = PRHODREF(I1C(JL),I2C(JL),I3C(JL))   
     ZMASSMIN(JL,:)     = PMASSMIN(I1C(JL),I2C(JL),I3C(JL),:)   
     ZWLBDC(JL)         = ZLBC(I1C(JL),I2C(JL),I3C(JL))
@@ -711,7 +710,7 @@ DO JN = 1 , KSPLITR
         ZSVT(JL,KMODE*2+JKAQ) = PSVT(IR1(JL),IR2(JL),IR3(JL),KMODE*2+JKAQ)
       END DO
 !
-      IF (PRESENT(PCRT)) ZCRT(JL) = PCRT(IR1(JL),IR2(JL),IR2(JL))
+      IF (PRESENT(PCRT)) ZCRT(JL) = PCRT(IR1(JL),IR2(JL),IR3(JL))
       ZRRT(JL)           = PRRT(IR1(JL),IR2(JL),IR3(JL))
       ZRHODREF(JL)       = PRHODREF(IR1(JL),IR2(JL),IR3(JL))
      ENDDO
@@ -803,10 +802,12 @@ ZZRCT(:,:,:) = MAX(ZZRCT(:,:,:), KRTMIN(2)/2.)
 IF (PRESENT(PCRT)) THEN  ! 2-moment schemes
 !
 ! from lima_warm_coal.f90 (AUTO)
-  ZLBDC3(:,:,:) = XMNH_HUGE
+  ZLBDC3(:,:,:) = 1E40
+  ! ZLBDC3(:,:,:) = XMNH_HUGE
   ZLBDC(:,:,:)  = 1.E15
   WHERE (ZZRCT(:,:,:) > KRTMIN(2) .AND. PCCT(:,:,:) > XCTMIN(2))
-    ZLBDC3(:,:,:) = KLBC * PCCT(:,:,:) / PRCT(:,:,:)
+    ZLBDC3(:,:,:) = KLBC * PCCT(:,:,:) / ZZRCT(:,:,:)
+    ! ZLBDC3(:,:,:) = KLBC * PCCT(:,:,:) / PRCT(:,:,:)
     ZLBDC(:,:,:)  = ZLBDC3(:,:,:)**ZLBEXC
   END WHERE
 !
@@ -814,14 +815,14 @@ IF (PRESENT(PCRT)) THEN  ! 2-moment schemes
   WHERE (ZZRCT(:,:,:) > KRTMIN(2))
     ZZW3(:,:,:) = MAX(0.0, XLAUTR*PRHODREF(:,:,:)*ZZRCT(:,:,:)*             &
                            (XAUTO1/ZLBDC3(:,:,:)**4-XLAUTR_THRESHOLD)) ! L 
-    ZZW4(:,:,:) = MIN(PRCS(:,:,:), MAX(0.0, XITAUTR*ZZW3(:,:,:)*ZZRCT(:,:,:)*  &
+    ZZW4(:,:,:) = MIN(PRCT(:,:,:), MAX(0.0, XITAUTR*ZZW3(:,:,:)*ZZRCT(:,:,:)*  &
                            (XAUTO2/ZLBDC3(:,:,:)-XITAUTR_THRESHOLD))) ! L/tau
   END WHERE
 !
 ELSE                     ! 1-moment scheme
 !
-  WHERE ((ZZRCT(:,:,:) > KRTMIN(2)) .AND. (PRCS(:,:,:) > 0.0)) 
-    ZZW4(:,:,:) = MIN(PRCS(:,:,:), XTIMAUTC* &
+  WHERE ((ZZRCT(:,:,:) > KRTMIN(2)) .AND. (PRCT(:,:,:) > 0.0)) 
+    ZZW4(:,:,:) = MIN(PRCT(:,:,:), XTIMAUTC* &
                     MAX((ZZRCT(:,:,:)-XCRIAUTC/PRHODREF(:,:,:)), 0.0))
   END WHERE
 !
@@ -853,12 +854,14 @@ IF (PRESENT(PCRT)) THEN ! 2-moment schemes
 ! from lima_warm_coal.f90 (ACCR)
   ZLBDR3(:,:,:) = 1.E30
   ZLBDR(:,:,:)  = 1.E10
+
+
   WHERE (PRRT(:,:,:) > KRTMIN(3) .AND. PCRT(:,:,:) > XCTMIN(3))
     ZLBDAR(:,:,:) = KLBR * (PRHODREF(:,:,:) * PRRT(:,:,:))**KLBEXR
     ZLBDR3(:,:,:) = KLBR * PCRT(:,:,:) / PRRT(:,:,:)
     ZLBDR(:,:,:)  = ZLBDR3(:,:,:)**KLBEXR
-    ZZW4(:,:,:) = MIN(PRCS(:,:,:), XFCACCR * ZZRCT(:,:,:)            &
-                                         * ZLBDAR(:,:,:)**XEXCACCR &
+    ZZW4(:,:,:) = MIN(PRCT(:,:,:), ZFCACCR * ZZRCT(:,:,:)            &
+                                         * ZLBDAR(:,:,:)**ZEXCACCR &
                                          * PRHODREF(:,:,:)**(-KCEXVT) )
     ZDIM(:,:,:) = XACCR1 / ZLBDAR(:,:,:)
   END WHERE
@@ -871,7 +874,7 @@ IF (PRESENT(PCRT)) THEN ! 2-moment schemes
     ZZW5(:,:,:) = ZLBDC3(:,:,:) / ZLBDR3(:,:,:)
     ZZW1(:,:,:) = (PCCT(:,:,:) * PCRT(:,:,:) / ZLBDC3(:,:,:)**2) * PRHODREF(:,:,:)
     ZZW4(:,:,:) = MIN(ZZW1(:,:,:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZZW5(:,:,:)), &
-                      PRCS(:,:,:))
+                      PRCT(:,:,:))
   END WHERE
 ! Accretion for D < 100 10-6 m
   WHERE (PRRT(:,:,:) > KRTMIN(3)  .AND. PCRT(:,:,:) > XCTMIN(3) .AND. &
@@ -881,17 +884,17 @@ IF (PRESENT(PCRT)) THEN ! 2-moment schemes
     ZZW5(:,:,:) = (ZLBDC3(:,:,:) / ZLBDR3(:,:,:))**2
     ZZW1(:,:,:) = (PCCT(:,:,:) * PCRT(:,:,:) / ZLBDC3(:,:,:)**3) * PRHODREF(:,:,:)
     ZZW4(:,:,:) = MIN(ZZW1(:,:,:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZZW5(:,:,:)), &
-                      PRCS(:,:,:))
+                      PRCT(:,:,:))
   END WHERE
 !
 ELSE                    ! 1-moment schemes
 !
   ZLBDR(:,:,:) = 0.0
   WHERE ((ZZRCT(:,:,:) > KRTMIN(2)) .AND. (PRRT(:,:,:) > KRTMIN(3)) &
-                                    .AND. (PRCS(:,:,:) > 0.0))      
+                                    .AND. (PRCT(:,:,:) > 0.0))      
     ZLBDR(:,:,:) = KLBR * (PRHODREF(:,:,:) * PRRT(:,:,:))**KLBEXR
-    ZZW4(:,:,:) = MIN(PRCS(:,:,:), XFCACCR * ZZRCT(:,:,:)            &
-                                           * ZLBDR(:,:,:)**XEXCACCR &
+    ZZW4(:,:,:) = MIN(PRCT(:,:,:), ZFCACCR * ZZRCT(:,:,:)            &
+                                           * ZLBDR(:,:,:)**ZEXCACCR &
                                            * PRHODREF(:,:,:)**(-KCEXVT) )
   END WHERE
 END IF
@@ -960,7 +963,7 @@ ZWEVAP(:,:,:) = MAX(ZWEVAP(:,:,:), 0.0)
 !              no partial cloud evaporation at this stage
 !
 ZMASK(:,:,:) = 0.
-WHERE(PRCS(:,:,:) .LT. KRTMIN(2))
+WHERE(PRCT(:,:,:) .LT. KRTMIN(2))
   ZMASK(:,:,:) = 1.
 END WHERE
 !
diff --git a/src/MNH/aerocamsn.f90 b/src/MNH/aerocamsn.f90
index b3ceb1d48989bf77722b0996b3845d3735e14c80..3b7dc1cd7e87b856e1ff4401412e68b43ee00074 100644
--- a/src/MNH/aerocamsn.f90
+++ b/src/MNH/aerocamsn.f90
@@ -52,6 +52,7 @@ END MODULE MODI_AEROCAMS_n
 !!
 
 USE MODE_AERO_PSD
+USE MODD_CH_AEROSOL
 !!
 IMPLICIT NONE
 !!
@@ -72,7 +73,14 @@ INTEGER  :: JN
 
 DO JN =1,SIZE(PSV, 4)
  PSV(:,:,:,JN) = PSV(:,:,:,JN) * 1E9 / PRHODREF(:,:,:)
+ !print*, CAERONAMES(JN),' =',MINVAL(PSV(:,:,:,JN)), MAXVAL(PSV(:,:,:,JN))
 ENDDO
+PSV(:,:,:,JP_CH_BCi) = MAX(PSV(:,:,:,JP_CH_BCi), 1E-4)
+PSV(:,:,:,JP_CH_BCj) = MAX(PSV(:,:,:,JP_CH_BCj), 1E-3)
+PSV(:,:,:,JP_CH_OCi) = MAX(PSV(:,:,:,JP_CH_OCi), 1E-4)
+PSV(:,:,:,JP_CH_OCj) = MAX(PSV(:,:,:,JP_CH_OCj), 1E-3)
+PSV(:,:,:,JP_CH_DSTi) = MAX(PSV(:,:,:,JP_CH_DSTi), 1E-4)
+PSV(:,:,:,JP_CH_DSTj) = MAX(PSV(:,:,:,JP_CH_DSTj), 1E-3)
 
 ! Compute moment from aerosol mass and conversion  SV aerosols variables into ppv
 
diff --git a/src/MNH/aerozon.f90 b/src/MNH/aerozon.f90
index b2e6b6c9f9ee75dcde79d6a0e985c75c1a35b0d8..899da024a9c03abead81a9be0afbd17cf4848c02 100644
--- a/src/MNH/aerozon.f90
+++ b/src/MNH/aerozon.f90
@@ -167,6 +167,7 @@ USE MODE_ll
 USE MODI_SHUMAN
 USE MODI_INI_RADCONF
 USE MODI_INI_HOR_AERCLIM
+USE MODI_AER_CLIM_SURF
 USE MODI_SUECOZC
 USE MODI_RADOZC
 USE MODI_SUAERV
@@ -232,7 +233,7 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZEXNT ! Exner functio
 !
 ! Variables for aerosols and ozone climatologies set up
 
-REAL, DIMENSION (:,:),   ALLOCATABLE  :: ZPAVE, ZWORK_GRID
+REAL, DIMENSION (:,:),   ALLOCATABLE  :: ZWORK_GRID
 REAL, DIMENSION (:),   ALLOCATABLE  :: ZAESEA, ZAELAN, ZAEURB, ZAEDES
 !
 REAL(KIND=JPRB), DIMENSION (:,:),   ALLOCATABLE  :: ZT_HL
@@ -326,7 +327,6 @@ PCORSOL = 1.00011+0.034221*COS(ZAD)   +0.001280*SIN(ZAD)    &
 !*       8.1   set up for grid dependant quantitites (from initial state) 
 ! 
 ALLOCATE (ZPRES_HL(KDLON,KFLEV+1))
-ALLOCATE (ZPAVE(KDLON,KFLEV))
 ALLOCATE (ZETAH(KDLON,KFLEV+1))
 ALLOCATE (ZT_HL(KDLON,KFLEV+1))
 ALLOCATE (ZGEMU(KDLON))
@@ -381,10 +381,6 @@ DO  JKRAD=1, KFLEV+1
 END DO
 DEALLOCATE(ZWORK_GRID)
 !
-DO JKRAD=1,KFLEV
-  ZPAVE(:,JKRAD)=0.5*(ZPRES_HL(:,JKRAD)+ZPRES_HL(:,JKRAD+1))
-END DO
-!
 !coo geographique 
 !
 IF(.NOT.LCARTESIAN) THEN
@@ -440,11 +436,16 @@ IF(HAER /= 'NONE') THEN
 !
 ! AEROSOLS ECMWF climatologies
 !
-  IF ( HAER == 'TEGE' ) THEN
+  IF ( HAER == 'TEGE' .OR. HAER=='TANR' ) THEN
     CALL INI_HOR_AERCLIM (HAER,IIB,IIE,IJB,IJE,KDLON,ZYMD,ZHOURS, &
                           PLAT,PLON,ZAESEA,ZAELAN,ZAEURB,ZAEDES )
   END IF
+  !
+  IF( HAER =='SURF') THEN
 !
+    CALL AER_CLIM_SURF(PLAT, PLON, ZAESEA, ZAELAN, ZAEURB, ZAEDES )
+  END IF
+  !
 !
 !     8.3.2 vertical ditributions (standard profiles derived from Tanre)
 !
@@ -468,6 +469,18 @@ IF(HAER /= 'NONE') THEN
 ! modification of initial ECMWF maximum optical thickness 
 ! for aerosols classes in case of HAER=SURF
 ! note : these variables belongs to yoeaerd module   
+!
+! modification of initial ECMWF maximum optical thickness
+! for aerosols classes in case of HAER=SURF
+! note : these variables belongs to yoeaerd module
+!
+  IF ( HAER =='SURF') THEN
+     RCAEOPS = 0.001 ! Sea instead 0.02 to agree with TEGEN
+     RCAEOPL = 0.05  ! Land (continental)
+     RCAEOPU = 0.3   ! Urban zone
+     RCAEOPD = 0.5   ! Desert
+  END IF
+
 !
 ! final aerosol profiles on mnh grid
 !
@@ -516,9 +529,7 @@ DO JJ=IJB,IJE
 END DO
 !
 !
-!
 DEALLOCATE (ZPRES_HL) 
-DEALLOCATE (ZPAVE)
 DEALLOCATE (ZT_HL)
 DEALLOCATE (ZETAH)
 DEALLOCATE (ZGEMU)
diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90
index aae1d60926375bb97c3a7d58994ecd789aadad9f..1d03d38a3302f389102f31c53f9881b483849ac3 100644
--- a/src/MNH/aircraft_balloon_evol.f90
+++ b/src/MNH/aircraft_balloon_evol.f90
@@ -921,7 +921,7 @@ END SUBROUTINE FLYER_COMPUTE_INTERP_COEFF_HOR_STAGE2
 SUBROUTINE FLYER_RECORD_DATA( )
 
 USE MODD_CST,              ONLY: XCPD, XLAM_CRAD, XLIGHTSPEED, XP00, XPI, XRD, XRHOLW, XTT
-USE MODD_DIAG_IN_RUN,      ONLY: LDIAG_IN_RUN, XCURRENT_TKE_DISS
+USE MODD_DIAG_IN_RUN,      ONLY: XCURRENT_TKE_DISS
 USE MODD_GRID,             ONLY: XBETA, XLON0, XRPK
 USE MODD_NSV,              ONLY: NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_NI
 USE MODD_PARAMETERS,       ONLY: JPVEXT
@@ -1349,7 +1349,7 @@ END IF ! end LOOP ICE3
 TPFLYER%XWZ  (ISTORE,:) = FLYER_INTERPZ(ZWM(:,:,:))
 IF (SIZE(PTKE)>0) TPFLYER%XTKE  (ISTORE)    = FLYER_INTERP(PTKE)
 IF (SIZE(PTS) >0) TPFLYER%XTSRAD(ISTORE)    = FLYER_INTERP_2D(PTS)
-IF (LDIAG_IN_RUN) TPFLYER%XTKE_DISS(ISTORE) = FLYER_INTERP(XCURRENT_TKE_DISS)
+TPFLYER%XTKE_DISS(ISTORE) = FLYER_INTERP(XCURRENT_TKE_DISS)
 TPFLYER%XZS(ISTORE)  = FLYER_INTERP_2D(PZ(:,:,1+JPVEXT))
 TPFLYER%XTHW_FLUX(ISTORE) = FLYER_INTERP(ZTHW_FLUX)
 TPFLYER%XRCW_FLUX(ISTORE) = FLYER_INTERP(ZRCW_FLUX)
diff --git a/src/MNH/budget.f90 b/src/MNH/budget.f90
index d453e9aabeea1d1c242f800c82e1560c3c58b545..140fd9147c4b75ed03c153c0588bbc48160882fc 100644
--- a/src/MNH/budget.f90
+++ b/src/MNH/budget.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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.
@@ -141,7 +141,7 @@ subroutine Budget_store_end( tpbudget, hsource, pvars )
 
   call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_store_end', hbudget )
 
-  if ( lcheck ) call Mppdb_check3d( pvars, 'BUD_INI::' // hbudget, precision )
+  if ( lcheck ) call Mppdb_check3d( pvars, 'BUD_END::' // hbudget, precision )
 
   if ( lles_call ) then
     if ( hsource /= tpbudget%clessource ) &
@@ -240,7 +240,10 @@ end subroutine Budget_store_end
 
 
 subroutine Budget_store_add( tpbudget, hsource, pvars )
-  use modd_les, only: lles_call
+  use modd_conf, only: lcheck
+  use modd_les,  only: lles_call
+
+  use mode_mppdb
 
   use modi_les_budget, only: Les_budget
 
@@ -248,10 +251,15 @@ subroutine Budget_store_add( tpbudget, hsource, pvars )
   character(len=*),       intent(in) :: hsource     ! Name of the source term
   real, dimension(:,:,:), intent(in) :: pvars       ! Current value to be stored
 
+  character(len=:), allocatable :: hbudget
   integer :: iid    ! Reference number of the current source term
   integer :: igroup ! Number of the group where to store the source term
 
-  call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_store_add', trim( tpbudget%cname )//':'//trim( hsource ) )
+  hbudget = trim( tpbudget%cname )//':'//trim( hsource )
+
+  call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_store_add', hbudget )
+
+  if ( lcheck ) call Mppdb_check3d( pvars, 'BUD_ADD::' // hbudget, precision )
 
   if ( tpbudget%ntmpstoresource /= 0 ) &
     call Print_msg( NVERB_ERROR, 'BUD', 'Budget_store_add', 'inside a Budget_store_init/Budget_store_end zone' )
diff --git a/src/MNH/ch_aer_coag.f90 b/src/MNH/ch_aer_coag.f90
index 87a97af5cb13d02cfe303f8e431a97330568cfb0..4e50174f9f637fed1dac8a6c648e773e8cfb21b4 100644
--- a/src/MNH/ch_aer_coag.f90
+++ b/src/MNH/ch_aer_coag.f90
@@ -14,15 +14,15 @@
 !!
 INTERFACE
 !!
-SUBROUTINE CH_AER_COAG(PM, PSIG0, PRG0, PN0,PDMINTRA,PDMINTER,PTGAS,PMU,&
-                         PLAMBDA,PRHOP0)
+SUBROUTINE CH_AER_COAG(PM,PLNSIG,PRG,PN,PDMINTRA,PDMINTER,&
+                       PTEMP,PMU,PLAMBDA,PRHOP            )
 IMPLICIT NONE
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PM,PRHOP0 
+REAL, DIMENSION(:,:), INTENT(INOUT) :: PM,PRHOP 
 REAL, DIMENSION(:),   INTENT(INOUT) :: PLAMBDA, PMU
 REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTRA
 REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTER
-REAL, DIMENSION(:),INTENT(IN) :: PTGAS
-REAL,   DIMENSION(:,:), INTENT(IN) :: PSIG0, PRG0, PN0
+REAL, DIMENSION(:),   INTENT(IN)    :: PTEMP
+REAL, DIMENSION(:,:), INTENT(IN)    :: PLNSIG, PRG, PN
 END SUBROUTINE CH_AER_COAG
 !!
 END INTERFACE
@@ -30,59 +30,43 @@ END INTERFACE
 END MODULE MODI_CH_AER_COAG
 !!
 !!   #############################################
-     SUBROUTINE CH_AER_COAG(PM, PSIG0, PRG0, PN0,PDMINTRA,PDMINTER,PTGAS,PMU,&
-                              PLAMBDA,PRHOP0)
+     SUBROUTINE CH_AER_COAG(PM,PLNSIG,PRG,PN,PDMINTRA,PDMINTER,&
+                            PTEMP,PMU,PLAMBDA,PRHOP            )
 !!   #############################################
 !!
 !!   PURPOSE
 !!   -------
-!!
-!!   compute the terms due to Brownian, turbulent and Gravitational
-!!   coagulation:
+!!   Compute the terms due to Brownian, turbulent and gravitational
+!!   coagulation: 
 !!   a set of arrays are used to evaluate the double integral
-!!    REFERENCE
-!!    ---------
-!!    none
+!!   Based on Whitby et al. 1991 : Appendix H
 !!
-!!    AUTHOR
-!!    ------
-!!    Vincent Crassier (LA)
+!!   METHOD
+!!   ------
+!!   * Arrays of numerical evaluation of coagulation terms
+!!     in the free-molecule regime (computed from the ESMAP code)
+!!     ZINTRA     - Intamodal coagulation, mode i,j 0th and 6th Moment
+!!     ZINTER0I   - Intermodal coagulation, mode i, 0th Moment
+!!     ZINTER3I   - Intermodal coagulation, mode i, 3rd Moment
+!!     ZINTER6I   - Intermodal coagulation, mode i, 6th Moment
+!!     ZINTER6J   - Intermodal coagulation, mode j, 6th Moment
 !!
-!!    MODIFICATIONS
-!!    -------------
-!*****************************************************************
-! * Arrays of numerical evaluation of coagulation terms
-!   in the free-molecule regime (computed from the ESMAP code)
-!
-! ZINTRA     - Intamodal coagulation, mode i,j 0th and 6th Moment
-!
-! ZINTER0I   - Intermodal coagulation, mode i, 0th Moment
-! ZINTER3I   - Intermodal coagulation, mode i, 3rd Moment
-! ZINTER6I   - Intermodal coagulation, mode i, 6th Moment
-! ZINTER6J   - Intermodal coagulation, mode j, 6th Moment
-!
-! * Variables used during the coefficients evaluation
-! ZXI(i)     - Variables values at the array nodes
-! ZXINT(i)   - Variables values where the interpolation
-!             is to be made
-!
-! intramodal coagulation
-!
-! ZXINTRAMIN     - Minimal value of ln(sigma)
-! ZXINTRAMAX     - Maximal value of ln(sigma)
-! ZDXINTRA       - Step of ln(sigma) in the array
-!
-! intermodal coagulation
-!
-! ZXINTERMIN(i)  - Minimal value of the variable i
-! ZXINTERMAX(i)  - Maximal value of the variable i
-! ZDXINTER(i)    - Step of the variable i in the arrays
-!
-! i=1           - ln(sigmaj)
-! i=2           - ln(sigmai)
-! i=3           - ln((ZR=Rgj/Rgi)**2)
-!
-!***************************************************************
+!!   * Variables used during the coefficients evaluation
+!!     ZXINT(i)   - Variables values where the interpolation
+!!                  is to be made
+!!
+!!   * intramodal coagulation terms
+!!     ZXINTRAMIN     - Minimal value of ln(sigma)
+!!     ZXINTRAMAX     - Maximal value of ln(sigma)
+!!     ZDXINTRA       - Step of ln(sigma) in the array
+!!
+!!   * intermodal coagulation terms:
+!!     ZXINTERMIN(i)  - Minimal value of the variable i
+!!     ZXINTERMAX(i)  - Maximal value of the variable i
+!!     ZDXINTER(i)    - Step of the variable i in the arrays
+!!     i=1           - ln(sigmaj)
+!!     i=2           - ln(sigmai)
+!!     i=3           - ln((ZR=Rgj/Rgi)**2)
 !!
 !!   EXTERNAL
 !!   -------
@@ -90,336 +74,261 @@ END MODULE MODI_CH_AER_COAG
 !!   IMPLICIT ARGUMENTS
 !!   ------------------
 !!
-USE MODD_CH_AEROSOL
-USE MODD_CST, ONLY :    &
-       XPI              & !Definition of pi
-      ,XBOLTZ            ! Boltzman constant
+!!   REFERENCE
+!!   ---------
+!!   none
 !!
+!!   AUTHOR
+!!   ------
+!!   Vincent Crassier (LA)
+!!
+!!   MODIFICATIONS
+!!   -------------
+!!   October 2018 J. Pianezze - Add comments, cleaning and debug
+!!                              + move mode merging into ch_aer_driver
+!!
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+! 
+USE MODD_CH_AEROSOL
+USE MODD_CST,       ONLY : XPI, XBOLTZ
+USE MODD_CONF,      ONLY : NVERB
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
 !
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PM,PRHOP0 
+REAL, DIMENSION(:,:), INTENT(INOUT) :: PM,PRHOP 
 REAL, DIMENSION(:),   INTENT(INOUT) :: PLAMBDA, PMU
 REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTRA
 REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTER
-REAL, DIMENSION(:),INTENT(IN) :: PTGAS
-REAL,   DIMENSION(:,:), INTENT(IN) :: PSIG0, PRG0, PN0
+REAL, DIMENSION(:),   INTENT(IN)    :: PTEMP
+REAL, DIMENSION(:,:), INTENT(IN)    :: PLNSIG, PRG, PN
 !
 !*       0.2   Declarations of local variables
 !
-INTEGER :: JI,JJ
+INTEGER                             :: JI,JJ
 !
-REAL :: ZTURBDS ! Rate of dissipation of kinetic energy per unit mass (m2/s3)
+REAL, DIMENSION(SIZE(PM,1))         :: ZKFM,ZKNC
+REAL, DIMENSION(SIZE(PM,1))         :: ZR,ZR2,ZR4
+REAL, DIMENSION(SIZE(PM,1))         :: ZRM,ZRM2,ZRM3
+REAL, DIMENSION(SIZE(PM,1))         :: ZKNG
+REAL, DIMENSION(SIZE(PM,1))         :: ZAI,ZKNGI,ZAJ,ZKNGJ
+REAL, DIMENSION(SIZE(PM,1))         :: ZINTRA0NC,ZINTRA0FM,ZINTRA0
+REAL, DIMENSION(SIZE(PM,1))         :: ZINTRA6NC,ZINTRA6FM,ZINTRA6
+REAL, DIMENSION(SIZE(PM,1))         :: ZINTERNC,ZINTERFM,ZINTER
+REAL, DIMENSION(SIZE(PM,1))         :: ZAPPROX
 !
-REAL, DIMENSION(SIZE(PM,1)) :: ZKFM,ZKNC
-!REAL, DIMENSION(SIZE(PM,1)) :: ZKTURB,ZKGRAV,ZR3,ZRM4
-REAL, DIMENSION(SIZE(PM,1)) :: ZR,ZR2,ZR4
-REAL, DIMENSION(SIZE(PM,1)) :: ZRM,ZRM2,ZRM3
-REAL, DIMENSION(SIZE(PM,1)) :: ZKNG
-REAL, DIMENSION(SIZE(PM,1)) :: ZAI,ZKNGI,ZAJ,ZKNGJ
-REAL, DIMENSION(SIZE(PM,1)) :: ZINTRA0NC,ZINTRA0FM,ZINTRA0
-REAL, DIMENSION(SIZE(PM,1)) :: ZINTRA3NC,ZINTRA3FM,ZINTRA3
-REAL, DIMENSION(SIZE(PM,1)) :: ZINTRA6NC,ZINTRA6FM,ZINTRA6
-REAL, DIMENSION(SIZE(PM,1)) :: ZINTERNC,ZINTERFM,ZINTER
-REAL, DIMENSION(SIZE(PM,1)) :: ZAPPROX
+REAL, DIMENSION(SIZE(PM,1))         :: ZRGJ, ZRGI, ZRG
 !
-REAL, DIMENSION(SIZE(PM,1)) :: ZA,ZB,ZC,ZD
-REAL, DIMENSION(SIZE(PM,1)) :: ZRGJ, ZRGI, ZRG
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG01,ZESG04,ZESG05,ZESG08,ZESG09
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG12,ZESG16
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG20,ZESG24,ZESG25,ZESG28
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG32,ZESG36
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG49
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG52
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG64
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG81,ZESG85
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG100,ZESG121,ZESG144,ZESG169,ZESG196
+REAL, DIMENSION(SIZE(PM,1),JPMODE)  :: ZESG256
+REAL, DIMENSION(SIZE(PM,1))         :: ZRB0,ZRB6
+REAL, DIMENSION(SIZE(PM,1))         :: ZRES
 !
-REAL, DIMENSION(SIZE(PM,1)) :: ZERF0,ZPHI0,ZXi,ZSOL
-REAL, DIMENSION(SIZE(PM,1)) :: ZERF3,ZPHI3
-REAL, DIMENSION(SIZE(PM,1)) :: ZERF6,ZPHI6
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZINVSIG,ZLNDG
+!-------------------------------------------------------------------------------
 !
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG01,ZESG04,ZESG05,ZESG08,ZESG09
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG12,ZESG16
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG20,ZESG24,ZESG25,ZESG28
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG32,ZESG36
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG49
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG52
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG64
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG81,ZESG85
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG100,ZESG121,ZESG144,ZESG169,ZESG196
-REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZESG256
-REAL, DIMENSION(SIZE(PM,1)) :: ZRB0,ZRB6
-REAL, DIMENSION(SIZE(PM,1)) :: ZRES
-!-------------------------------------------------------------------------------!
-ZTURBDS=0.001
-ZKNC(:)=2.*XBOLTZ*PTGAS(:)/(3.*PMU(:))
+!*       1.    INITIALIZATION
+!              --------------
 !
-PDMINTRA(:,:)=0.
-PDMINTER(:,:)=0.
+PDMINTRA(:,:) = 0.0
+PDMINTER(:,:) = 0.0
 !
-!****************************************************************
-! Initialisation des variables utilisees dans le calcul des
-! coefficients de coagulation
-!****************************************************************
-
-ZESG01(:,:) = exp(0.125*PSIG0(:,1:JPMODE)**2)            
-ZESG04(:,:)  = ZESG01(:,:) ** 4            
-ZESG05(:,:)  = ZESG04(:,:) * ZESG01(:,:)                        
-ZESG08(:,:)  = ZESG04(:,:) * ZESG04(:,:)                        
-ZESG09(:,:)  = ZESG04(:,:) * ZESG05(:,:)            
-ZESG12(:,:)  = ZESG04(:,:) * ZESG04(:,:) * ZESG04(:,:)
-ZESG16(:,:)  = ZESG08(:,:) * ZESG08(:,:)
-ZESG20(:,:)  = ZESG16(:,:) * ZESG04(:,:)
-ZESG24(:,:)  = ZESG12(:,:) * ZESG12(:,:)
-ZESG25(:,:)  = ZESG16(:,:) * ZESG09(:,:)
-ZESG28(:,:)  = ZESG20(:,:) * ZESG08(:,:)
-ZESG32(:,:)  = ZESG16(:,:) * ZESG16(:,:)
-ZESG36(:,:)  = ZESG16(:,:) * ZESG20(:,:)
-ZESG49(:,:)  = ZESG25(:,:) * ZESG20(:,:) * ZESG04(:,:)
-ZESG52(:,:)  = ZESG16(:,:) * ZESG36(:,:)
-ZESG64(:,:)  = ZESG32(:,:) * ZESG32(:,:)
-ZESG81(:,:)  = ZESG49(:,:) * ZESG32(:,:)
-ZESG85(:,:)  = ZESG64(:,:) * ZESG20(:,:) * ZESG01(:,:)
-ZESG100(:,:) = ZESG36(:,:) * ZESG64(:,:) 
-ZESG121(:,:) = ZESG85(:,:) * ZESG36(:,:)
-ZESG144(:,:) = ZESG100(:,:) * ZESG36(:,:) * ZESG08(:,:)
-ZESG169(:,:) = ZESG144(:,:) * ZESG25(:,:)
-ZESG196(:,:) = ZESG144(:,:) * ZESG52(:,:)
+ZKNC(:)       = 2.*XBOLTZ*PTEMP(:)/(3.*PMU(:))
+!
+! Compute coagulation coefficients : Whitby et al. 1991 : Appendix H
+!
+ZESG01 (:,:) = EXP(0.125*PLNSIG(:,:)**2)            
+ZESG04 (:,:) = ZESG01 (:,:) ** 4            
+ZESG05 (:,:) = ZESG04 (:,:) * ZESG01 (:,:)                        
+ZESG08 (:,:) = ZESG04 (:,:) * ZESG04 (:,:)                        
+ZESG09 (:,:) = ZESG04 (:,:) * ZESG05 (:,:)            
+ZESG12 (:,:) = ZESG04 (:,:) * ZESG04 (:,:) * ZESG04(:,:)
+ZESG16 (:,:) = ZESG08 (:,:) * ZESG08 (:,:)
+ZESG20 (:,:) = ZESG16 (:,:) * ZESG04 (:,:)
+ZESG24 (:,:) = ZESG12 (:,:) * ZESG12 (:,:)
+ZESG25 (:,:) = ZESG16 (:,:) * ZESG09 (:,:)
+ZESG28 (:,:) = ZESG20 (:,:) * ZESG08 (:,:)
+ZESG32 (:,:) = ZESG16 (:,:) * ZESG16 (:,:)
+ZESG36 (:,:) = ZESG16 (:,:) * ZESG20 (:,:)
+ZESG49 (:,:) = ZESG25 (:,:) * ZESG20 (:,:) * ZESG04(:,:)
+ZESG52 (:,:) = ZESG16 (:,:) * ZESG36 (:,:)
+ZESG64 (:,:) = ZESG32 (:,:) * ZESG32 (:,:)
+ZESG81 (:,:) = ZESG49 (:,:) * ZESG32 (:,:)
+ZESG85 (:,:) = ZESG64 (:,:) * ZESG20 (:,:) * ZESG01(:,:)
+ZESG100(:,:) = ZESG36 (:,:) * ZESG64 (:,:) 
+ZESG121(:,:) = ZESG85 (:,:) * ZESG36 (:,:)
+ZESG144(:,:) = ZESG100(:,:) * ZESG36 (:,:) * ZESG08(:,:)
+ZESG169(:,:) = ZESG144(:,:) * ZESG25 (:,:)
+ZESG196(:,:) = ZESG144(:,:) * ZESG52 (:,:)
 ZESG256(:,:) = ZESG144(:,:) * ZESG100(:,:) * ZESG12(:,:)
-
-!***************************************************************
-! Transfert de moments entre les modes i et j
-!***************************************************************
-
-ZINVSIG(:,:)=1./PSIG0(:,1:JPMODE)**2
-ZLNDG(:,:)=log(2.*PRG0(:,1:JPMODE))
-
-ZA(:)=0.5*(ZINVSIG(:,1)-ZINVSIG(:,2))
-ZD(:) = 0.
-ZXi(:)= 0.
-
-WHERE (ABS(ZA(:)) > 1E-4)
-  ZB(:)=ZINVSIG(:,2)*ZLNDG(:,2)-ZINVSIG(:,1)*ZLNDG(:,1)
-  ZC(:)=0.5*(ZINVSIG(:,1)*ZLNDG(:,1)**2-ZINVSIG(:,2)*ZLNDG(:,2)**2) - &
-       &log((PN0(:,1)*PSIG0(:,2))/(PN0(:,2)*PSIG0(:,1)))
-
-  ZD(:)=ZB(:)**2-4.*ZA(:)*ZC(:)
-
-  ZSOL(:)=(-ZB(:)+sqrt(ABS(ZD(:))))/(2.*ZA(:))
-  WHERE (ZSOL(:) < 5.E+2)
-    ZSOL(:)=exp(ZSOL(:))/2.
-    ZXi(:)=log(ZSOL(:)/PRG0(:,1))/(sqrt(2.)*PSIG0(:,1))
-  ENDWHERE
-ENDWHERE
-
-!*********************************************************************
-!      calculate the intramodal moment coefficients (log-normal model)
-!*********************************************************************
-       
-do JI=1,JPMODE
-
-  ZKFM(:)=sqrt(3.*XBOLTZ*PTGAS(:)/PRHOP0(:,JI))*1.e-3
-  !ZKTURB(:)=sqrt(XPI*ZTURBDS*PMU(:)/(120.*PRHOP0(:,JI)))*1.e-18
-  !ZKGRAV(:)=1.5/4.*0.544*XPI*PRHOP0(:,JI)/PMU(:)*1.e-24
-!*************************************************************
-!      calculate ZVG,ln2(sigma) and sigma
-!      (log-normal model)
-!*************************************************************
-
-  ZRG(:)=PRG0(:,JI)
-  ZKNG(:)=PLAMBDA(:)/ZRG(:)
-  ZAI(:)=1.392*ZKNG(:)**0.0783
-
-!***********************
-! Brownian Coagulation  
-!***********************
-       
-  ZRB0(:)=0.8
-  ZRB6(:)=ZRB0
-       
-  ZINTRA0FM(:)=ZKFM(:)*ZRB0(:)*sqrt(2.*ZRG(:))*(ZESG01(:,JI)+ZESG25(:,JI)+2.*ZESG05(:,JI))
-  ZINTRA3FM(:)=ZKFM(:)*ZRB0(:)*sqrt(ZRG(:))**7*sqrt(2.)*(ZESG49(:,JI)+ZESG36(:,JI)*ZESG01(:,JI)+&
-              &2.*ZESG25(:,JI)*ZESG04(:,JI)+ZESG09(:,JI)*ZESG16(:,JI)+ZESG100(:,JI)*ZESG09(:,JI)+&
-              &2.*ZESG64(:,JI)*ZESG01(:,JI))
-  ZINTRA6FM(:)=ZKFM(:)*ZRB6(:)*sqrt(ZRG(:))**13*sqrt(2.)*ZESG85(:,JI)*&
-              (1.+2.*ZESG04(:,JI)+ZESG24(:,JI))
-  ZINTRA0NC(:)=ZKNC(:)*(1.+ZESG08(:,JI)+ZAI(:)*ZKNG(:)*(ZESG20(:,JI)+ZESG04(:,JI)))
-  ZINTRA3NC(:)=ZKNC(:)*ZRG(:)**3*(2.*ZESG36(:,JI)+ZAI(:)*ZKNG(:)*(ZESG16(:,JI)+ZESG04(:,JI)*ZESG04(:,JI)+&
-              &ZESG36(:,JI)*ZESG04(:,JI)+ZESG64(:,JI)*ZESG16(:,JI))+ZESG16(:,JI)*ZESG04(:,JI)+&
-              &ZESG64(:,JI)*ZESG04(:,JI))
-  ZINTRA6NC(:)=2.*ZKNC(:)*(ZRG(:))**6*ZESG52(:,JI)*(ZESG20(:,JI)+ZESG28(:,JI)+ZAI(:)*ZKNG(:)*(1.+ZESG16(:,JI)))
-  ZINTRA0(:)=ZINTRA0FM(:)*(ZINTRA0NC(:)/(ZINTRA0FM(:)+ZINTRA0NC(:)))
-  ZINTRA3(:)=ZINTRA3FM(:)*(ZINTRA3NC(:)/(ZINTRA3FM(:)+ZINTRA3NC(:)))
-  ZINTRA6(:)=ZINTRA6FM(:)*(ZINTRA6NC(:)/(ZINTRA6FM(:)+ZINTRA6NC(:)))
-   
-  PDMINTRA(:,NM0(JI))=ZINTRA0(:)
-  PDMINTRA(:,NM3(JI))=ZINTRA3(:)
-  PDMINTRA(:,NM6(JI))=ZINTRA6(:)
-  !print*,'PDMINTRA(:,NM0(',JI,') =',MINVAL(PDMINTRA(:,NM0(JI))), MAXVAL(PDMINTRA(:,NM0(JI)))
-  !print*,'PDMINTRA(:,NM3(',JI,') =',MINVAL(PDMINTRA(:,NM3(JI))), MAXVAL(PDMINTRA(:,NM3(JI)))
-  !print*,'PDMINTRA(:,NM6(',JI,') =',MINVAL(PDMINTRA(:,NM6(JI))), MAXVAL(PDMINTRA(:,NM6(JI)))
-
-enddo
-!print*,'=============================='
-!print*,'=============================='
-
-WHERE (ZD(:) > 0. .AND. ZXi(:) > (6.*PSIG0(:,1)/sqrt(2.)))
-
-! transfert du moment d'ordre 0 (nombre)
-!**************************************
-
-  ZERF0(:)=sqrt(1.-exp(-4.*(ZXi(:))**2/XPI))
-  ZPHI0(:)=0.5*(1.+ZERF0(:))
-
-! transfert du moment d'ordre 3 (masse)
-!**************************************
-
-  ZERF3(:)=sqrt(1.-exp(-4.*(ZXi(:)-3.*PSIG0(:,1)/sqrt(2.))**2/XPI))
-  ZPHI3(:)=0.5*(1.+ZERF3(:))
-  
-! transfert du moment d'ordre 6 (dispersion)
-!**************************************
-
-  ZERF6(:)=sqrt(1.-exp(-4.*(ZXi(:)-6.*PSIG0(:,1)/sqrt(2.))**2/XPI))
-  ZPHI6(:)=0.5*(1.+ZERF6(:))
-  
-  PDMINTRA(:,NM0(2))=PDMINTRA(:,NM0(2))-(1.-ZPHI0(:)**2)*PDMINTRA(:,NM0(1))*(PM(:,NM0(1))/PM(:,NM0(2)))**2
-  PDMINTRA(:,NM0(1))=(2.-ZPHI0(:)**2)*PDMINTRA(:,NM0(1))
-
-  PDMINTRA(:,NM3(2))=PDMINTRA(:,NM3(1))*(1.-ZPHI0(:)*ZPHI3(:))*PM(:,NM0(1))**2
-  PDMINTRA(:,NM3(1))=PDMINTRA(:,NM3(1))*(ZPHI0(:)*ZPHI3(:)-1.)*PM(:,NM0(1))**2
-  
-  ZKFM(:)=sqrt(3.*XBOLTZ*PTGAS(:)/PRHOP0(:,1))*1.e-3
-  ZRG(:)=PRG0(:,1)
-  ZKNG(:)=PLAMBDA(:)/ZRG(:)
-  ZAI(:)=1.392*ZKNG(:)**0.0783
-  
-  ZINTRA6FM(:)=ZKFM(:)*sqrt(2.)*sqrt(ZRG(:))**13*(ZESG169(:,1)+ZESG144(:,1)*ZESG01(:,1)+&
-               2.*ZESG121(:,1)*ZESG04(:,1)+ZESG81(:,1)*ZESG16(:,1)+&
-               ZESG256(:,1)*ZESG09(:,1)+ZESG196(:,1)*ZESG01(:,1))
-
-  ZINTRA6NC(:)=ZKNC(:)*(ZRG(:))**6*(2.*ZESG144(:,1)+ZAI(:)*ZKNG(:)*(ZESG100(:,1)+&
-             ZESG64(:,1)*ZESG04(:,1))+ZAI(:)*ZKNG(:)*(ZESG144(:,1)*ZESG04(:,1)+&
-             ZESG196(:,1)*ZESG16(:,1))+ZESG100(:,1)*ZESG04(:,1)+&
-             ZESG196(:,1)*ZESG04(:,1))
-             
-  ZINTRA6(:)=ZINTRA6FM(:)*(ZINTRA6NC(:)/(ZINTRA6FM(:)+ZINTRA6NC(:)))
-
-  PDMINTRA(:,NM6(2))=PDMINTRA(:,NM6(2))+(PDMINTRA(:,NM6(1))*(1.-ZPHI3(:)**2)+ZINTRA6(:)*(1.-ZPHI0(:)*ZPHI6(:)))&
-                    &*(PM(:,NM0(1))/PM(:,NM0(2)))**2
-                   
-  PDMINTRA(:,NM6(1))=PDMINTRA(:,NM6(1))*(ZPHI3(:)**2)+ZINTRA6(:)*(ZPHI0(:)*ZPHI6(:)-1.)
-  
-ELSEWHERE
-
-  PDMINTRA(:,NM3(1))=0.
-  PDMINTRA(:,NM3(2))=0.
-
-
-ENDWHERE
-
-do JI=1,JPMODE
-!print*,'2.-ZPHI0(:)**2 =',MINVAL(2.-ZPHI0(:)**2), MAXVAL(2.-ZPHI0(:)**2)
-!  print*,'apres corr PDMINTRA(:,NM0(',JI,') =',MINVAL(PDMINTRA(:,NM0(JI))), MAXVAL(PDMINTRA(:,NM0(JI)))
-!  print*,'apres corr PDMINTRA(:,NM3(',JI,') =',MINVAL(PDMINTRA(:,NM3(JI))), MAXVAL(PDMINTRA(:,NM3(JI)))
-!  print*,'apres corr PDMINTRA(:,NM6(',JI,') =',MINVAL(PDMINTRA(:,NM6(JI))), MAXVAL(PDMINTRA(:,NM6(JI)))
- enddo
-
-!*********************************************************************
-!   calculate the intermodal moment coefficients (log-normal model)
-!*********************************************************************
-
-do JI=1,(JPMODE-1)
-  do JJ=(JI+1),JPMODE
-
-    ZRGI(:)=PRG0(:,JI)
-    ZKNGI(:)=PLAMBDA(:)/ZRGI(:)
-    ZAI(:)=1.392*ZKNGI(:)**0.0783
-
-    ZRGJ(:)=PRG0(:,JJ)
-    ZKNGJ(:)=PLAMBDA(:)/ZRGJ(:)
-    ZAJ(:)=1.392*ZKNGJ(:)**0.0783
-          
-    ZR(:)=sqrt(ZRGJ(:)/ZRGI(:))
-    ZR2(:)=ZR(:)*ZR(:)
-    !ZR3(:)=ZR(:)*ZR2(:)
-    ZR4(:)=ZR2(:)*ZR2(:)
-    ZRM(:)=1./ZR(:)
-    ZRM2(:)=ZRM(:)*ZRM(:)
-    ZRM3(:)=ZRM(:)*ZRM2(:)
-    !ZRM4(:)=ZRM2(:)*ZRM2(:)
-
-!**********************
-! Brownian Coagulation
-!**********************
-
-      ZRES(:)=0.9
-
-      ZAPPROX(:)=sqrt(2.*ZRGI(:))*(ZESG01(:,JI)+ZR(:)*ZESG01(:,JJ)+2.*ZR2(:)*ZESG01(:,JI)*ZESG04(:,JJ)&
-                 +ZR4(:)*ZESG09(:,JI)*ZESG16(:,JJ)+ZRM3(:)*ZESG16(:,JI)*ZESG09(:,JJ)+&
-                 2.*ZRM(:)*ZESG04(:,JI)*ZESG01(:,JJ))
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.    COMPUTE INTRA-MODAL COAGULATION TERMS
+!              -------------------------------------
+!
+DO JI=1,JPMODE
+  !
+  !*          2.0 INITIALIZATION
+  !               --------------
+  !
+  ZRG(:)  = PRG(:,JI)
+  ZKNG(:) = PLAMBDA(:)/ZRG(:)
+  ZAI(:)  = 1.392*ZKNG(:)**0.0783
+  ZKFM(:) = SQRT(3.*XBOLTZ*PTEMP(:)/PRHOP(:,JI))*1.E-3
+  !   
+  ZRB0(:) = 0.8
+  ZRB6(:) = ZRB0
+  !    
+  !*          2.1 FREE-MOLECULE REGIME (KN > 10) 
+  !               ------------------------------
+  !
+  ZINTRA0FM(:) = ZKFM(:) * ZRB0(:) * SQRT(2.*ZRG(:)) *     &
+               & (ZESG01(:,JI)+ZESG25(:,JI)+2.*ZESG05(:,JI))
+  ZINTRA6FM(:) = ZKFM(:)*ZRB6(:)*sqrt(ZRG(:))**13*sqrt(2.)*ZESG85(:,JI) * &
+               & (1.+2.*ZESG04(:,JI)+ZESG24(:,JI))
+  !
+  !*          2.2 NEAR-CONTINUUM (KN < 0.1)
+  !               -------------------------
+  !
+  ZINTRA0NC(:) = ZKNC(:)*(1.+ZESG08(:,JI)+ZAI(:)*ZKNG(:)*(ZESG20(:,JI)+ZESG04(:,JI)))
+  ZINTRA6NC(:) = 2.*ZKNC(:)*(ZRG(:))**6*ZESG52(:,JI)*(ZESG20(:,JI)+ZESG28(:,JI)+&
+                 ZAI(:)*ZKNG(:)*(1.+ZESG16(:,JI)))
+  !
+  !*         2.3 HARMONIC MEAN
+  !              -------------
+  !
+  ZINTRA0(:) = ZINTRA0FM(:)*(ZINTRA0NC(:) / (ZINTRA0FM(:)+ZINTRA0NC(:)))
+  ZINTRA6(:) = ZINTRA6FM(:)*(ZINTRA6NC(:) / (ZINTRA6FM(:)+ZINTRA6NC(:)))
+  !
+  PDMINTRA(:,NM0(JI)) = - ZINTRA0(:) * PM(:,NM0(JI))**2.0
+  PDMINTRA(:,NM3(JI)) =   0.0
+  PDMINTRA(:,NM6(JI)) =   ZINTRA6(:) * PM(:,NM0(JI))**2.0
+  !
+ENDDO
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.    COMPUTE INTER-MODAL COAGULATION TERMS
+!              -------------------------------------
+!
+! JPMODE = 2
+! donc :
+!   - JI = 1
+!   - JJ = 2
+!
+DO JI=1,(JPMODE-1)
+  DO JJ=(JI+1),JPMODE
+    !
+    ZRGI (:) = PRG(:,JI)
+    ZKNGI(:) = PLAMBDA(:)/ZRGI(:)
+    ZAI  (:) = 1.392*ZKNGI(:)**0.0783
+    !
+    ZRGJ (:) = PRG(:,JJ)
+    ZKNGJ(:) = PLAMBDA(:)/ZRGJ(:)
+    ZAJ  (:) = 1.392*ZKNGJ(:)**0.0783
+    !      
+    ZR  (:)  = SQRT(ZRGJ(:)/ZRGI(:))
+    ZR2 (:)  = ZR(:)*ZR(:)
+    ZR4 (:)  = ZR2(:)*ZR2(:)
+    ZRM (:)  = 1./ZR(:)
+    ZRM2(:)  = ZRM(:)*ZRM(:)
+    ZRM3(:)  = ZRM(:)*ZRM2(:)
+    !
+    !    
+    ! * 3.1 Free-Molecule Regime (Kn > 10) : appendix H.2.2.1 - Whitby et al. 1991
+    !       ----------------------------------------------------------------------
+    !
+    ZRES(:)=0.9
+    !
+    !       moment 0
+    !
+    ZAPPROX(:)=sqrt(2.*ZRGI(:))*(ZESG01(:,JI)+ZR(:)*ZESG01(:,JJ)+2.*ZR2(:)*ZESG01(:,JI)*ZESG04(:,JJ)&
+               +ZR4(:)*ZESG09(:,JI)*ZESG16(:,JJ)+ZRM3(:)*ZESG16(:,JI)*ZESG09(:,JJ)+&
+               2.*ZRM(:)*ZESG04(:,JI)*ZESG01(:,JJ))
        
-      ZINTERFM(:)=ZKFM(:)*ZRES(:)*ZAPPROX(:)
+    ZINTERFM(:)=ZKFM(:)*ZRES(:)*ZAPPROX(:)
 
-      ZAPPROX(:)=2.+ZAI(:)*ZKNGI(:)*(ZESG04(:,JI)+ZR2(:)*ZESG16(:,JI)*ZESG04(:,JJ))+&
+    ZAPPROX(:)=2.+ZAI(:)*ZKNGI(:)*(ZESG04(:,JI)+ZR2(:)*ZESG16(:,JI)*ZESG04(:,JJ))+&
                 ZAJ(:)*ZKNGJ(:)*(ZESG04(:,JJ)+ZRM2(:)*ZESG16(:,JJ)*ZESG04(:,JI))+&
                 (ZR2(:)+ZRM2(:))*(ZESG04(:,JI)*ZESG04(:,JJ))
 
-      ZINTERNC(:)=ZKNC(:)*ZAPPROX(:)
+    ZINTERNC(:)=ZKNC(:)*ZAPPROX(:)
 
-      ZINTER(:)=ZINTERNC(:)*(ZINTERFM(:)/(ZINTERNC(:)+ZINTERFM(:)))
+    ZINTER(:)=ZINTERNC(:)*(ZINTERFM(:)/(ZINTERNC(:)+ZINTERFM(:)))
 
-      PDMINTER(:,NM0(JI))=PM(:,NM0(JJ))*ZINTER(:)
-      PDMINTER(:,NM0(JJ))=-PM(:,NM0(JJ))*ZINTER(:)
-
-      ZAPPROX(:)=sqrt(2.)*sqrt(ZRGI(:))**7*(ZESG49(:,JI)+ZR(:)*ZESG36(:,JI)*ZESG01(:,JJ)+2.*ZR2(:)*&
+    PDMINTER(:,NM0(JI))=-PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
+    PDMINTER(:,NM0(JJ))= 0.0
+    !
+    !       moment 3
+    !
+    ZAPPROX(:)=sqrt(2.)*sqrt(ZRGI(:))**7*(ZESG49(:,JI)+ZR(:)*ZESG36(:,JI)*ZESG01(:,JJ)+2.*ZR2(:)*&
                  ZESG25(:,JI)*ZESG04(:,JJ)+ZR4(:)*ZESG09(:,JI)*ZESG16(:,JJ)+ZRM3(:)*&
                  ZESG100(:,JI)*ZESG09(:,JJ)+2.*ZRM(:)*ZESG64(:,JI)*ZESG01(:,JJ))
 
-      ZINTERFM(:)=ZKFM(:)*ZRES(:)*ZAPPROX(:)
+    ZINTERFM(:)=ZKFM(:)*ZRES(:)*ZAPPROX(:)
 
-      ZAPPROX(:)=(2.*ZESG36(:,JI)+ZAI(:)*ZKNGI(:)*(ZESG16(:,JI)+ZR2(:)*ZESG04(:,JI)*ZESG04(:,JJ))+&
-      ZAJ(:)*ZKNGJ(:)*(ZESG36(:,JI)*ZESG04(:,JJ)+ZRM2(:)*ZESG16(:,JJ)*ZESG64(:,JI))+&
-      ZR2(:)*ZESG16(:,JI)*ZESG04(:,JJ)+ZRM2(:)*ZESG64(:,JI)*ZESG04(:,JJ))*(ZRGI(:))**3      
+    ZAPPROX(:)=(2.*ZESG36(:,JI)+ZAI(:)*ZKNGI(:)*(ZESG16(:,JI)+ZR2(:)*ZESG04(:,JI)*ZESG04(:,JJ))+&
+    ZAJ(:)*ZKNGJ(:)*(ZESG36(:,JI)*ZESG04(:,JJ)+ZRM2(:)*ZESG16(:,JJ)*ZESG64(:,JI))+&
+    ZR2(:)*ZESG16(:,JI)*ZESG04(:,JJ)+ZRM2(:)*ZESG64(:,JI)*ZESG04(:,JJ))*(ZRGI(:))**3      
 
-      ZINTERNC(:)=ZKNC(:)*ZAPPROX(:)
+    ZINTERNC(:)=ZKNC(:)*ZAPPROX(:)
 
-      ZINTER(:)=ZINTERNC(:)*(ZINTERFM(:)/(ZINTERNC(:)+ZINTERFM(:)))
+    ZINTER(:)=ZINTERNC(:)*(ZINTERFM(:)/(ZINTERNC(:)+ZINTERFM(:)))
        
-      PDMINTER(:,NM3(JI))=-PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
-      PDMINTER(:,NM3(JJ))=PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
+    PDMINTER(:,NM3(JI))=-PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
+    PDMINTER(:,NM3(JJ))=-PDMINTER(:,NM3(JI))
+
+    !       moment 6
 
-      ZAPPROX(:)=sqrt(2.)*sqrt(ZRGI(:))**13*(ZESG169(:,JI)+ZR(:)*ZESG144(:,JI)*ZESG01(:,JJ)+&
-             2.*ZR2(:)*ZESG121(:,JI)*ZESG04(:,JJ)+ZR4(:)*ZESG81(:,JI)*ZESG16(:,JJ)+&
-             ZRM3(:)*ZESG256(:,JI)*ZESG09(:,JJ)+2*ZRM(:)*ZESG196(:,JI)*ZESG01(:,JJ))
+    ZAPPROX(:)=sqrt(2.)*sqrt(ZRGI(:))**13*(ZESG169(:,JI)+ZR(:)*ZESG144(:,JI)*ZESG01(:,JJ)+&
+           2.*ZR2(:)*ZESG121(:,JI)*ZESG04(:,JJ)+ZR4(:)*ZESG81(:,JI)*ZESG16(:,JJ)+&
+           ZRM3(:)*ZESG256(:,JI)*ZESG09(:,JJ)+2*ZRM(:)*ZESG196(:,JI)*ZESG01(:,JJ))
       
-      ZINTERFM(:)=ZKFM(:)*ZRES(:)*ZAPPROX(:)
+    ZINTERFM(:)=ZKFM(:)*ZRES(:)*ZAPPROX(:)
 
-      ZAPPROX(:)=(ZRGI(:))**6*(2.*ZESG144(:,JI)+ZAI(:)*ZKNGI(:)*(ZESG100(:,JI)+&
+    ZAPPROX(:)=(ZRGI(:))**6*(2.*ZESG144(:,JI)+ZAI(:)*ZKNGI(:)*(ZESG100(:,JI)+&
        ZR2(:)*ZESG64(:,JI)*ZESG04(:,JJ))+ZAJ(:)*ZKNGJ(:)*(ZESG144(:,JI)*ZESG04(:,JJ)+&
        ZRM2(:)*ZESG196(:,JI)*ZESG16(:,JJ))+ZR2(:)*ZESG100(:,JI)*ZESG04(:,JJ)+&
        ZRM2(:)*ZESG196(:,JI)*ZESG04(:,JJ))
 
-      ZINTERNC(:)=ZKNC(:)*ZAPPROX(:)
+    ZINTERNC(:)=ZKNC(:)*ZAPPROX(:)
 
-      ZINTER(:)=ZINTERNC(:)*(ZINTERFM(:)/(ZINTERNC(:)+ZINTERFM(:)))
+    ZINTER(:)=ZINTERNC(:)*(ZINTERFM(:)/(ZINTERNC(:)+ZINTERFM(:)))
 
-      PDMINTER(:,NM6(JI))=-PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
-      PDMINTER(:,NM6(JJ))=PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
+    PDMINTER(:,NM6(JI))=-PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
 
-      ZAPPROX(:)=sqrt(2.)*sqrt(ZRGI(:))**7*sqrt(ZRGJ(:))**6*(ZESG49(:,JI)*&
+    ZAPPROX(:)=sqrt(2.)*sqrt(ZRGI(:))**7*sqrt(ZRGJ(:))**6*(ZESG49(:,JI)*&
            ZESG36(:,JJ)+ZR(:)*ZESG36(:,JI)*ZESG49(:,JJ)+2.*ZR2(:)*ZESG25(:,JI)*&
            ZESG64(:,JJ)+ZR4(:)*ZESG09(:,JI)*ZESG100(:,JJ)+ZRM3(:)*ZESG100(:,JI)*&
            ZESG09(:,JJ)+2.*ZRM(:)*ZESG64(:,JI)*ZESG25(:,JJ))
        
-      ZINTERFM(:)=ZKFM(:)*ZRES(:)*ZAPPROX(:)
+    ZINTERFM(:)=ZKFM(:)*ZRES(:)*ZAPPROX(:)
 
-      ZAPPROX(:)=(ZRGI(:))**3*(ZRGJ(:))**3*(2.*ZESG36(:,JI)*ZESG36(:,JJ)+&
+    ZAPPROX(:)=(ZRGI(:))**3*(ZRGJ(:))**3*(2.*ZESG36(:,JI)*ZESG36(:,JJ)+&
        ZAI(:)*ZKNGI(:)*(ZESG16(:,JI)*ZESG16(:,JJ)+ZR2(:)*ZESG04(:,JI)*ZESG64(:,JJ))+&
        ZAJ(:)*ZKNGJ(:)*(ZESG36(:,JI)*ZESG16(:,JJ)+ZRM2(:)*ZESG64(:,JI)*ZESG04(:,JJ))+&
        ZR2(:)*ZESG16(:,JI)*ZESG64(:,JJ)+ZRM2(:)*ZESG64(:,JI)*ZESG16(:,JJ))
 
-      ZINTERNC(:)=ZKNC(:)*ZAPPROX(:)
+    ZINTERNC(:)=ZKNC(:)*ZAPPROX(:)
 
-      ZINTER(:)=ZINTERNC(:)*(ZINTERFM(:)/(ZINTERNC(:)+ZINTERFM(:)))
+    ZINTER(:)=ZINTERNC(:)*(ZINTERFM(:)/(ZINTERNC(:)+ZINTERFM(:)))
        
-      PDMINTER(:,NM6(JJ))=PDMINTER(:,NM6(JJ))+2.*PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
+    PDMINTER(:,NM6(JJ))=-PDMINTER(:,NM6(JI))+2.*PM(:,NM0(JI))*PM(:,NM0(JJ))*ZINTER(:)
  
-  enddo
-enddo
+  ENDDO
+ENDDO
 
 END SUBROUTINE CH_AER_COAG 
diff --git a/src/MNH/ch_aer_depos.f90 b/src/MNH/ch_aer_depos.f90
index cf5659aa332d24dec88b471aae1fd4ae678c0ac7..37ca0645fe6e357302967318c408f59e0c2469a3 100644
--- a/src/MNH/ch_aer_depos.f90
+++ b/src/MNH/ch_aer_depos.f90
@@ -116,12 +116,12 @@ END IF
 !Get minimum values possible
 ZPMIN(1) = XN0IMIN
 ZRGMIN = ZINIRADIUSI
-ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGIMIN)**2) 
-ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XSIGIMIN)**2)
+ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XINISIGI)**2) 
+ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XINISIGI)**2)
 ZPMIN(4) = XN0JMIN
 ZRGMIN = ZINIRADIUSJ
-ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGJMIN)**2) 
-ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XSIGJMIN)**2)
+ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XINISIGJ)**2) 
+ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XINISIGJ)**2)
 !
 !
 CALL  PPP2AERO(ZSVT, PRHODREF, &
@@ -167,15 +167,15 @@ SELECT CASE (CCLOUD)
   CASE ('KESS','REVE','ICE3','ICE4')
 ! One moment cloud scheme
   CALL AER_WET_DEP_KMT_WARM  (NSPLITR, PTSTEP, PZZ, PRHODREF,    &
-                              PRT(:,:,:,2), PRT(:,:,:,3), ZRCS,  &
-                              ZRRS, ZSVAER, PTHT, PPABST,  ZRG,  &
+                              PRT(:,:,:,2), PRT(:,:,:,3),        &
+                              ZSVAER, PTHT, PPABST,  ZRG,        &
                               PEVAP3D, JPMODE,ZRHOP, ZMASSMIN,   &
                               PSEA=ZSEA, PTOWN=ZTOWN)
   CASE ('KHKO','C2R2','C3R5')
 ! Two moment cloud scheme
   CALL AER_WET_DEP_KMT_WARM  (NSPLITR, PTSTEP, PZZ, PRHODREF,    &
-                              PRT(:,:,:,2), PRT(:,:,:,3), ZRCS,  &
-                              ZRRS, ZSVAER, PTHT, PPABST,  ZRG,  &
+                              PRT(:,:,:,2), PRT(:,:,:,3),        &
+                              ZSVAER, PTHT, PPABST,  ZRG,        &
                               PEVAP3D, JPMODE,ZRHOP, ZMASSMIN,   &
                               PSEA=ZSEA, PTOWN=ZTOWN,            &
                               PCCT=PSVT(:,:,:,NSV_C2R2BEG+1),    &
@@ -183,8 +183,8 @@ SELECT CASE (CCLOUD)
   CASE ('LIMA')
 ! Two moment cloud scheme
   CALL AER_WET_DEP_KMT_WARM  (NSPLITR, PTSTEP, PZZ, PRHODREF,    &
-                              PRT(:,:,:,2), PRT(:,:,:,3), ZRCS,  &
-                              ZRRS, ZSVAER, PTHT, PPABST,  ZRG,  &
+                              PRT(:,:,:,2), PRT(:,:,:,3),        &
+                              ZSVAER, PTHT, PPABST,  ZRG,        &
                               PEVAP3D, JPMODE,ZRHOP, ZMASSMIN,   &
                               PSEA=ZSEA, PTOWN=ZTOWN,            &
                               PCCT=PSVT(:,:,:,NSV_LIMA_NC),      &
diff --git a/src/MNH/ch_aer_eqm_initn.f90 b/src/MNH/ch_aer_eqm_initn.f90
index 0759d63cebf4fb9ecacb825551b4dc67bb1bec1e..d9b1a77621153cfe89c0d5365b9c2b267761147a 100644
--- a/src/MNH/ch_aer_eqm_initn.f90
+++ b/src/MNH/ch_aer_eqm_initn.f90
@@ -403,16 +403,16 @@ XSVMIN(NSV_AERBEG:NSV_AEREND) = XMNH_TINY
 XSVMIN(NSV_CHEMBEG-1+JP_CH_CO) =  1E-10
 ! For i mode
 ZRHODREFMIN = MAX_ll( PRHODREF(:,:,:), IINFO_ll)
-ZMASS  = XN0IMIN *  ((ZMINRGI**3)*EXP(4.5 * (LOG(XSIGIMIN))**2))
-ZM6MIN = XN0IMIN *  ((ZMINRGI**6)*EXP(18. * (LOG(XSIGIMIN))**2))
+ZMASS  = XN0IMIN *  ((ZMINRGI**3)*EXP(4.5 * (LOG(XINISIGI))**2))
+ZM6MIN = XN0IMIN *  ((ZMINRGI**6)*EXP(18. * (LOG(XINISIGI))**2))
 XSVMIN(NSV_AERBEG-1+JP_CH_BCi) = 0.5*ZMASS * XFAC(JP_AER_BC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN)
 XSVMIN(NSV_AERBEG-1+JP_CH_OCi) = 0.5*ZMASS * XFAC(JP_AER_OC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN)
 XSVMIN(NSV_AERBEG-1+JP_CH_M0i) = XN0IMIN * 1E-6 / (ZDEN2MOL*ZRHODREFMIN)
 IF (LVARSIGI) XSVMIN(NSV_AERBEG-1+JP_CH_M6i) = ZM6MIN  / (ZDEN2MOL*ZRHODREFMIN)
 !
 ! For j mode
-ZMASS  = XN0JMIN *  ((ZMINRGJ**3)*EXP(4.5 * (LOG(XSIGJMIN))**2))
-ZM6MIN = XN0JMIN *  ((ZMINRGJ**6)*EXP(18. * (LOG(XSIGJMIN))**2))
+ZMASS  = XN0JMIN *  ((ZMINRGJ**3)*EXP(4.5 * (LOG(XINISIGJ))**2))
+ZM6MIN = XN0JMIN *  ((ZMINRGJ**6)*EXP(18. * (LOG(XINISIGJ))**2))
 XSVMIN(NSV_AERBEG-1+JP_CH_BCj) = 0.5*ZMASS * XFAC(JP_AER_BC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN)
 XSVMIN(NSV_AERBEG-1+JP_CH_OCj) = 0.5*ZMASS * XFAC(JP_AER_OC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN)
 XSVMIN(NSV_AERBEG-1+JP_CH_M0j) = XN0JMIN * 1E-6 / (ZDEN2MOL*ZRHODREFMIN)
diff --git a/src/MNH/ch_aer_reallfin.f90 b/src/MNH/ch_aer_reallfin.f90
index 505f3acfae89b18fac882c45bc4a2fe83b953ac0..101835c6c8a9ce8afeef7ffa24f52c4a1aaa3b8b 100644
--- a/src/MNH/ch_aer_reallfin.f90
+++ b/src/MNH/ch_aer_reallfin.f90
@@ -134,7 +134,7 @@ ZRHOI(:) = 1.8e3
 ZRHOI(JP_AER_H2O) = 1.0e3   ! water
 ZRHOI(JP_AER_DST) = XDENSITY_DUST
 !
-PSV(:,:,:,:)  = MAX(PSV(:,:,:,:), 0.)
+PSV(:,:,:,:)  = MAX(PSV(:,:,:,:), 1E-20)
 PCO(:,:,:)    = MAX(PCO(:,:,:), 10.E-9*PRHODREF(:,:,:))
 !
 ! Special treatment for BC and OC (link to CO gaseous concentration)
@@ -310,6 +310,7 @@ DO JN=1,JPMODE
 !
   ZRG(:,:,:,JN)=(ZM(:,:,:,NM3(JN))/ZN(:,:,:,JN))**(1./3.)*EXP(-1.5*ZSIGMA(:,:,:))
 !
+
 ENDDO
 !
 !conversion into ppv
diff --git a/src/MNH/ch_aer_trans.f90 b/src/MNH/ch_aer_trans.f90
index d8844d117baa87b4a65456a4af08737169242bb2..400ccec1f6e4b79c458fe1a55b8502cb8d3180f7 100644
--- a/src/MNH/ch_aer_trans.f90
+++ b/src/MNH/ch_aer_trans.f90
@@ -95,16 +95,16 @@ CHARACTER(LEN=10),        INTENT(IN) :: HSCHEME
 !
 !*      0.2    declarations local variables
 !
-INTEGER :: JJ, JN  ! loop counter
+INTEGER :: JJ, JN, II  ! loop counter
 !   variables for the aerosol module
 !
 REAL, DIMENSION(SIZE(PM,1)) :: ZSIGMA
 REAL, DIMENSION(SIZE(PM,1)) :: ZSUM
 REAL, SAVE, DIMENSION(JPIN) :: ZPMIN
 LOGICAL, SAVE               :: GPHYSLIM = .TRUE. ! flag
-REAL :: ZRGMIN
+REAL, SAVE    :: ZRGMIN
 REAL, PARAMETER :: ZCSTAVOG=6.0221367E+11
-REAL    :: ZINIRADIUSI, ZINIRADIUSJ
+REAL, SAVE    :: ZINIRADIUSI, ZINIRADIUSJ
 
 
 !
@@ -128,13 +128,13 @@ END IF
 
 ZPMIN(1) = XN0IMIN
 ZRGMIN = ZINIRADIUSI
-ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGIMIN)**2) 
-ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XSIGIMIN)**2)
+ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XINISIGI)**2) 
+ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XINISIGI)**2)
 
 ZPMIN(4) = XN0JMIN
 ZRGMIN = ZINIRADIUSJ
-ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGJMIN)**2) 
-ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XSIGJMIN)**2)
+ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XINISIGJ)**2) 
+ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XINISIGJ)**2)
 
 END IF
 
@@ -768,6 +768,8 @@ END IF
 !
 !*       1.n    transfer moment 0 from gas to aerosol variable
 !
+!print*,'aer_trans N0i =',MINVAL(PAERO(:,JP_CH_M0i)), MAXVAL(PAERO(:,JP_CH_M0i))
+!print*,'aer_trans N0j =',MINVAL(PAERO(:,JP_CH_M0j)), MAXVAL(PAERO(:,JP_CH_M0j))
   PM(:,1) = MAX(PAERO(:,JP_CH_M0i) * 1E+6, XMNH_TINY) ! convert from 1/cc to 1/m3
   PM(:,4) = MAX(PAERO(:,JP_CH_M0j) * 1E+6, XMNH_TINY) ! convert from 1/cc to 1/m3
 
@@ -892,7 +894,7 @@ PMASK(:,JN) = 1.
 END WHERE
 
 ENDDO
-
+  
 ELSE
 !
 !*       2.     TRANSFER FROM AEROSOL TO GAS  MODULE
diff --git a/src/MNH/ch_aer_wetdepn.f90 b/src/MNH/ch_aer_wetdepn.f90
index b1041d55d5171b6a39b85289f99ee1b09a47536b..dd051acd8e62e7409f874285fe408355fa6c0793 100644
--- a/src/MNH/ch_aer_wetdepn.f90
+++ b/src/MNH/ch_aer_wetdepn.f90
@@ -99,12 +99,12 @@ END IF
 !Get minimum values possible
 ZPMIN(1) = XN0IMIN
 ZRGMIN =  ZINIRADIUSI
-ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGIMIN)**2)
-ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XSIGIMIN)**2)
+ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XINISIGI)**2)
+ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XINISIGI)**2)
 ZPMIN(4) = XN0JMIN
 ZRGMIN =  ZINIRADIUSJ
-ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGJMIN)**2)
-ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XSIGJMIN)**2)
+ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XINISIGJ)**2)
+ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XINISIGJ)**2)
 !
 CALL  PPP2AERO(PSVT, PRHODREF, PSIG3D=ZSIG, PRG3D=ZRG, PM3D=ZPMOLD)
 CALL  PPP2AERO(PCWETDEP, PRHODREF, PSIG3D=ZSIGN, PRG3D=ZRGN, PM3D=ZPM)
diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90
index 46f371a703455f83a7f484899861f3b303aaeac8..0f7fc499d4b281047049a20134b712873ad84286 100644
--- a/src/MNH/default_desfmn.f90
+++ b/src/MNH/default_desfmn.f90
@@ -1103,7 +1103,7 @@ LCH_PH              = .FALSE.
 LCH_RET_ICE         = .FALSE.
 XCH_PHINIT          = 5.2
 XRTMIN_AQ           = 5.e-8
-CCHEM_INPUT_FILE    = 'EXSEG1.nam'
+CCHEM_INPUT_FILE    = 'MNHC.input'
 CCH_TDISCRETIZATION = 'SPLIT'
 NCH_SUBSTEPS        = 1
 LCH_TUV_ONLINE      = .FALSE.
@@ -1183,8 +1183,8 @@ LHETEROSO4 = .FALSE.  ! switch to active sulfates heteronegeous
                       ! production
 LSEDIMAERO = .FALSE.  ! switch to active aerosol sedimentation
 LAERINIT   = .FALSE.  ! switch to initialize aerosol in arome
-CMINERAL      = "NONE"   ! mineral equilibrium scheme
-CORGANIC      = "NONE"   ! mineral equilibrium scheme
+CMINERAL      = "EQSAM"   ! mineral equilibrium scheme
+CORGANIC      = "MPMPO"   ! mineral equilibrium scheme
 CNUCLEATION   = "NONE" ! sulfates nucleation scheme
 LDEPOS_AER(:) = .FALSE.
 
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index d4d86db4fe7339f2c28c12880c00d712781f180e..d161d13b027d1164ddebdb9f14e3281b7e15a3e2 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1999-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1999-2023 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.
@@ -403,33 +403,24 @@ CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 !
-CALL POSNAM(ILUNAM,'NAM_DIAG',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_DIAG)
-END IF
+CALL POSNAM( TZNMLFILE, 'NAM_DIAG', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DIAG)
 !
-CALL POSNAM(ILUNAM,'NAM_DIAG_BLANK',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_DIAG_BLANK)
-END IF
+CALL POSNAM( TZNMLFILE, 'NAM_DIAG_BLANK', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DIAG_BLANK)
 !
-CALL POSNAM(ILUNAM,'NAM_DIAG_FILE',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_DIAG_FILE)
-END IF
+CALL POSNAM( TZNMLFILE, 'NAM_DIAG_FILE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DIAG_FILE)
+!
+CALL POSNAM( TZNMLFILE, 'NAM_STO_FILE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_STO_FILE)
+!
+CALL POSNAM( TZNMLFILE, 'NAM_CONFZ', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFZ)
+!
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 !
-CALL POSNAM(ILUNAM,'NAM_STO_FILE',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_STO_FILE)
-END IF
-CALL POSNAM(ILUNAM,'NAM_CONFZ',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_CONFZ)
-END IF
-CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_CONFIO)
-END IF
 CALL IO_Config_set()
 !
 CALL IO_File_close(TZNMLFILE)
diff --git a/src/MNH/dustcamsn.f90 b/src/MNH/dustcamsn.f90
index 33966adfd96f0d7b3e6d5684f374c77cc7721e38..94732c05c0006a92918710c24f4e1a329ebb660d 100644
--- a/src/MNH/dustcamsn.f90
+++ b/src/MNH/dustcamsn.f90
@@ -125,13 +125,12 @@ DO JN = 1, NMODE_DST
   ZMMIN(IM3(JN)) = XN0MIN(IMODEIDX) * (ZRGMIN**3)*EXP(4.5 * LOG(ZINISIGMA(JN))**2) 
   ZMMIN(IM6(JN)) = XN0MIN(IMODEIDX) * (ZRGMIN**6)*EXP(18. * LOG(ZINISIGMA(JN))**2)
 
-  IF (JPDUSTORDER(JN) == 1) ZMASS(:,:,:,JN) = PMASSCAMS(:,:,:,1) ! fin mode 
-  IF (JPDUSTORDER(JN) == 2) ZMASS(:,:,:,JN) = PMASSCAMS(:,:,:,2) ! median mode 
-  IF (JPDUSTORDER(JN) == 3) ZMASS(:,:,:,JN) = PMASSCAMS(:,:,:,3) ! large mode
+  IF (JPDUSTORDER(JN) == 1) ZMASS(:,:,:,JN) = MAX(PMASSCAMS(:,:,:,1), 1E-16) ! fin mode 
+  IF (JPDUSTORDER(JN) == 2) ZMASS(:,:,:,JN) = MAX(PMASSCAMS(:,:,:,2), 1E-15) ! median mode 
+  IF (JPDUSTORDER(JN) == 3) ZMASS(:,:,:,JN) = MAX(PMASSCAMS(:,:,:,3), 1E-15) ! large mode
 
 ENDDO
 
-ZMASS(:,:,:,:) = MAX(ZMASS(:,:,:,:), 1E-40)
 !
 !
 ZRHOI = XDENSITY_DUST !1.8e3 !++changed alfgr
@@ -158,14 +157,14 @@ DO JN = 1, NMODE_DST
                       (ZINIRADIUS(JN)**3) * &
                       EXP(4.5*LOG(ZINISIGMA(JN))**2) 
 
-  ZM(:,:,:,IM3(JN)) = MAX(ZMMIN(IM3(JN)), ZM(:,:,:,IM3(JN)))
+!  ZM(:,:,:,IM3(JN)) = MAX(ZMMIN(IM3(JN)), ZM(:,:,:,IM3(JN)))
 !
 !*       1.3    calculate moment 6 from m0,  RG and SIG 
 !
   ZM(:,:,:,IM6(JN))= ZM(:,:,:,IM0(JN)) * ((ZINIRADIUS(JN)**6) * &
                      EXP(18.*(LOG(ZINISIGMA(JN)))**2))
 !
-  ZM(:,:,:,IM6(JN)) = MAX(ZMMIN(IM6(JN)), ZM(:,:,:,IM6(JN)))
+!  ZM(:,:,:,IM6(JN)) = MAX(ZMMIN(IM6(JN)), ZM(:,:,:,IM6(JN)))
 !
 !*       1.4    output concentration
 !
diff --git a/src/MNH/end_diag_in_run.f90 b/src/MNH/end_diag_in_run.f90
index 61405af363c8688e00877d1e7b5e1334eb17c292..2fd13009abc5141a9bde3f418243aae5b49db82f 100644
--- a/src/MNH/end_diag_in_run.f90
+++ b/src/MNH/end_diag_in_run.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2023 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
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 profiler 2006/10/24 10:07:27
-!-----------------------------------------------------------------
 !      #########################
 MODULE MODI_END_DIAG_IN_RUN
 !      #########################
@@ -83,8 +78,8 @@ DEALLOCATE(XCURRENT_LWD   )! incoming longwave at the surface
 DEALLOCATE(XCURRENT_LWU   )! outcoming longwave at the surface
 DEALLOCATE(XCURRENT_SWD   )! incoming Shortwave at the surface
 DEALLOCATE(XCURRENT_SWU   )! outcoming Shortwave at the surface
-IF(ALLOCATED(XCURRENT_SWDIR)) DEALLOCATE(XCURRENT_SWDIR )! incoming Shortwave direct at the surface
-IF(ALLOCATED(XCURRENT_SWDIFF))DEALLOCATE(XCURRENT_SWDIFF)! incoming Shortwave diffuse at the surface
+DEALLOCATE(XCURRENT_SWDIR )! incoming Shortwave direct at the surface
+DEALLOCATE(XCURRENT_SWDIFF)! incoming Shortwave diffuse at the surface
 DEALLOCATE(XCURRENT_T2M   )! temperature at 2m
 DEALLOCATE(XCURRENT_Q2M   )! humidity at 2m
 DEALLOCATE(XCURRENT_HU2M  )! humidity at 2m
@@ -94,7 +89,7 @@ DEALLOCATE(XCURRENT_DSTAOD)! dust aerosol optical depth
 DEALLOCATE(XCURRENT_SFCO2   ) ! CO2 Surface flux
 DEALLOCATE(XCURRENT_TKE_DISS) ! Tke dissipation rate
 DEALLOCATE(XCURRENT_SLTAOD)   ! Salt aerosol optical depth
-DEALLOCATE(XCURRENT_ZWS   )   ! Significant height of waves
+! DEALLOCATE(XCURRENT_ZWS   )   ! Significant height of waves
 
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90
index d7e5c3e0b058b419fc5ebc97411584813973d69d..268c13525d352148695d4dccf1bba5e48ece49fd 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -135,98 +135,95 @@ END MODULE MODI_GROUND_PARAM_n
 !*       0.     DECLARATIONS
 !               ------------
 !
-! 
+USE MODD_ALLPROFILER_n,     ONLY: LDIAG_SURFRAD_PROF
+USE MODD_ALLSTATION_n,      ONLY: LDIAG_SURFRAD_STAT
+USE MODD_ARGSLIST_ll,       ONLY: LIST_ll
+USE MODD_BLOWSNOW,          ONLY: LBLOWSNOW, NBLOWSNOW_2D, YPBLOWSNOW_2D
+USE MODD_BLOWSNOW_n,        ONLY: XRSNWCANOS
+USE MODD_BUDGET,            ONLY: LBUDGET_TH, LBUDGET_RV, NBUDGET_RV, NBUDGET_TH, TBUDGETS
+USE MODD_CH_AEROSOL,        ONLY: LORILAM
+USE MODD_CH_FLX_n,          ONLY: XCHFLX
+USE MODD_CH_MNHC_n,         ONLY: LUSECHEM
+USE MODD_CONF,              ONLY: CPROGRAM, LCARTESIAN, NHALO
+USE MODD_COUPLING_LEVELS_n
+USE MODD_CONF_n,            ONLY: NRR
+USE MODD_CST,               ONLY: XP00, XCPD, XRD, XRV, XRHOLW, XDAY, XPI, XMD, XAVOGADRO
+USE MODD_CSTS_DUST,         ONLY: XMOLARWEIGHT_DUST
+USE MODD_CSTS_SALT,         ONLY: XMOLARWEIGHT_SALT
+USE MODD_DEEP_CONVECTION_n, ONLY: XPRCONV, XPRSCONV
+USE MODD_DRAGBLDG_n,        ONLY : LFLUXBLDG
+USE MODD_DIAG_FLAG,         ONLY: LCHEMDIAG
+USE MODD_DIAG_IN_RUN
+USE MODD_DIM_n,             ONLY: NKMAX
+USE MODD_DIMPHYEX,          ONLY: DIMPHYEX_t
+USE MODD_DUST,              ONLY: LDUST 
+USE MODD_DYN_n,             ONLY: XTSTEP
+USE MODD_FIELD_n,           ONLY: XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS, XRTHS, XRRS
+USE MODD_FIRE_n,            ONLY: XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE,    &
+                                  XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG,    &
+                                  XFMFLUXHDH, XFMFLUXHDW, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, &
+                                  XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY
+USE MODD_GRID,              ONLY: XLON0, XRPK, XBETA
+USE MODD_GRID_n,            ONLY: XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, &
+                                  XCOSSLOPE, XSINSLOPE, XZS
+USE MODD_IO,                ONLY: TFILEDATA
+USE MODD_LUNIT_n,           ONLY: TLUOUT
+USE MODD_METRICS_n,         ONLY: XDXX, XDYY, XDZZ
+USE MODD_MNH_SURFEX_n,      ONLY: YSURF_CUR
+USE MODD_NSV,               ONLY: CSV, NSV, NSV_AERBEG, NSV_AEREND, NSV_CHEMBEG, NSV_CHEMEND, NSV_DSTBEG, NSV_DSTEND, &
+                                  NSV_SLTBEG, NSV_SLTEND, NSV_SNWBEG, NSV_SNWEND
+USE MODD_PARAM_C2R2,        ONLY: LSEDC
+USE MODD_PREP_SNOW,         ONLY: NIMPUR
+USE MODD_PARAMETERS,        ONLY: JPVEXT
+USE MODD_PARAM_ICE,         ONLY: LSEDIC
+USE MODD_PARAM_LIMA,        ONLY: MSEDC=>LSEDC
+USE MODD_PARAM_n,           ONLY: CDCONV, CCLOUD, CRAD
+USE MODD_PRECIP_n,          ONLY: XINPRC, XINPRR, XINPRS, XINPRG, XINPRH
+USE MODD_PRECISION,         ONLY: MNHTIME
+USE MODD_PROFILER_n,        ONLY: LPROFILER
+USE MODD_RADIATIONS_n,      ONLY: XFLALWD, XCCO2, XTSIDER, &
+                                  XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, &
+                                  XZENITH, XAZIM, XAER, XSWU, XLWU
+USE MODD_REF_n,             ONLY: XEXNREF, XRHODREF, XRHODJ
+USE MODD_SALT,              ONLY: LSALT
+USE MODD_STATION_n,         ONLY: LSTATION
+USE MODD_SURF_PAR,          ONLY: XUNDEF_SFX => XUNDEF
+USE MODD_TIME,              ONLY: TDTSEG
+USE MODD_TIME_n,            ONLY: TDTCUR
 #ifdef CPLOASIS
-USE MODI_GET_HALO
-USE MODI_MNH_OASIS_RECV
-USE MODI_MNH_OASIS_SEND
-USE MODD_SFX_OASIS, ONLY : LOASIS
-USE MODD_DYN,       ONLY : XSEGLEN
-USE MODD_DYN_n,     ONLY : DYN_MODEL
+USE MODD_SFX_OASIS,         ONLY: LOASIS
+USE MODD_DYN,               ONLY: XSEGLEN
+USE MODD_DYN_n,             ONLY: DYN_MODEL
 #endif
-!
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODD_BUDGET,  ONLY: LBUDGET_TH, LBUDGET_RV, NBUDGET_RV, NBUDGET_TH,TBUDGETS
-USE MODE_BUDGET,  ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
-USE MODD_CST,        ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO
-USE MODD_DIMPHYEX,   ONLY : DIMPHYEX_t
-USE MODD_PARAMETERS, ONLY : JPVEXT
-USE MODD_DYN_n,      ONLY : XTSTEP
-USE MODD_CH_MNHC_n,  ONLY : LUSECHEM
-USE MODD_FIELD_n,    ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS, XRTHS, XRRS
-USE MODD_FIRE_n,     ONLY : XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE,    &
-                            XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG,    &
-                            XFMFLUXHDH, XFMFLUXHDW, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, &
-                            XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY
-USE MODD_METRICS_n,  ONLY : XDXX, XDYY, XDZZ
-USE MODD_DIM_n,      ONLY : NKMAX
-USE MODD_GRID_n,     ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, &
-                            XCOSSLOPE, XSINSLOPE, XZS
-USE MODD_REF_n,      ONLY : XEXNREF, XRHODREF, XRHODJ
-USE MODD_CONF_n,     ONLY : NRR
-USE MODD_PARAM_n,    ONLY : CDCONV,CCLOUD, CRAD
-USE MODD_PRECIP_n,   ONLY : XINPRC, XINPRR, XINPRS, XINPRG, XINPRH
-USE MODD_DEEP_CONVECTION_n, ONLY : XPRCONV, XPRSCONV
-USE MODD_CONF,       ONLY : LCARTESIAN, CPROGRAM
-USE MODD_TIME_n,     ONLY : TDTCUR
-USE MODD_RADIATIONS_n,   ONLY : XFLALWD, XCCO2, XTSIDER, &
-                                XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, &
-                                XZENITH, XAZIM, XAER, XSWU, XLWU
-USE MODD_NSV
-USE MODD_GRID,       ONLY : XLON0, XRPK, XBETA
-USE MODD_PARAM_ICE,  ONLY : LSEDIC
-USE MODD_PARAM_C2R2, ONLY : LSEDC
-USE MODD_PREP_SNOW,  ONLY : NIMPUR
-USE MODD_DIAG_IN_RUN
-USE MODD_DUST,       ONLY : LDUST 
-USE MODD_SALT,       ONLY : LSALT
-USE MODD_BLOWSNOW
-USE MODD_BLOWSNOW_n
-USE MODD_CH_AEROSOL, ONLY : LORILAM
-USE MODD_CSTS_DUST,  ONLY : XMOLARWEIGHT_DUST
-USE MODD_CSTS_SALT,  ONLY : XMOLARWEIGHT_SALT
-USE MODD_CH_FLX_n, ONLY : XCHFLX
-USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG
-USE MODD_DRAGBLDG_n, ONLY : LFLUXBLDG
-USE MODD_COUPLING_LEVELS_n
-USE MODD_SURF_PAR,   ONLY: XUNDEF_SFX => XUNDEF
-USE MODD_PRECISION,      ONLY: MNHTIME
-!
-USE MODI_NORMAL_INTERPOL
-USE MODE_ROTATE_WIND, ONLY: ROTATE_WIND
-USE MODI_SHUMAN
-USE MODI_MNHGET_SURF_PARAM_n
-USE MODI_COUPLING_SURF_ATM_n
-USE MODI_DIAG_SURF_ATM_n
-USE MODD_MNH_SURFEX_n
-!
-USE MODE_DATETIME
-USE MODE_ll
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 #ifdef MNH_FOREFIRE
-!** MODULES FOR FOREFIRE **!
 USE MODD_FOREFIRE
 USE MODD_FOREFIRE_n
-USE MODI_COUPLING_FOREFIRE_n
 #endif
-!
-USE MODD_TIME_n
-USE MODD_TIME
-!
-USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC
-!
-USE MODD_FIRE_n
-USE MODD_FIELD
+
+USE MODE_BUDGET,            ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
+USE MODE_DATETIME
 USE MODE_FIRE_MODEL
-USE MODD_CONF, ONLY : NVERB, NHALO
-USE MODE_MNH_TIMING, ONLY : SECOND_MNH2
+USE MODE_ll
+USE MODE_MNH_TIMING,       ONLY: SECOND_MNH2
 USE MODE_MSG
-USE MODD_IO,      ONLY: TFILEDATA
+USE MODE_ROTATE_WIND,      ONLY: ROTATE_WIND
+
+USE MODI_COUPLING_SURF_ATM_n
+USE MODI_DIAG_SURF_ATM_n
+USE MODI_MNHGET_SURF_PARAM_n
+USE MODI_NORMAL_INTERPOL
+USE MODI_SHUMAN
+#ifdef CPLOASIS
+USE MODI_GET_HALO
+USE MODI_MNH_OASIS_RECV
+USE MODI_MNH_OASIS_SEND
+#endif
+#ifdef MNH_FOREFIRE
+USE MODI_COUPLING_FOREFIRE_n
+#endif
 !
 IMPLICIT NONE
 !
-!
-!
 !*      0.1    declarations of arguments
 !
 !* surface fluxes
@@ -435,8 +432,9 @@ CHARACTER(LEN=6) :: YJSV
 CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: YSV_SURF ! name of the scalar variables
                                                         ! sent to SURFEX
 !                                                        
-REAL                              :: ZTIMEC
-INTEGER           :: ILUOUT         ! logical unit
+LOGICAL :: GSTATPROF_SURF ! TRUE if station or profiler need to write surface or radiation data
+REAL    :: ZTIMEC
+INTEGER :: ILUOUT         ! logical unit
 !
 ! New variables for coupling at several levels
 !
@@ -503,6 +501,8 @@ ALLOCATE(ZALFA(SIZE(PSFTH,1),SIZE(PSFTH,2),NLEV_COUPLE))
 ALLOCATE(ZU2D(SIZE(PSFTH,1),SIZE(PSFTH,2),NLEV_COUPLE))
 ALLOCATE(ZV2D(SIZE(PSFTH,1),SIZE(PSFTH,2),NLEV_COUPLE))
 !
+GSTATPROF_SURF = ( LPROFILER .AND. LDIAG_SURFRAD_PROF ) .OR. ( LSTATION .AND. LDIAG_SURFRAD_STAT )
+!
 !-------------------------------------------------------------------------------
 !
 !*       1.     CONVERSION OF THE ATMOSPHERIC VARIABLES
@@ -824,11 +824,15 @@ IF (LOASIS) THEN
 END IF
 #endif
 !
-IF (CPROGRAM=='DIAG  ' .OR. LDIAG_IN_RUN) THEN
-  CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH')
-  CALL  MNHGET_SURF_PARAM_n(PRN=ZP_RN,PH=ZP_H,PLE=ZP_LE,PLEI=ZP_LEI,                &
-                             PGFLUX=ZP_GFLUX,PT2M=ZP_T2M,PQ2M=ZP_Q2M,PHU2M=ZP_HU2M, &
-                             PZON10M=ZP_ZON10M,PMER10M=ZP_MER10M                    )
+IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN
+  CALL DIAG_SURF_ATM_n( YSURF_CUR, 'MESONH' )
+  IF ( CPROGRAM == 'DIAG' ) THEN
+    CALL  MNHGET_SURF_PARAM_n(PZON10M=ZP_ZON10M, PMER10M=ZP_MER10M)
+  ELSE
+    CALL  MNHGET_SURF_PARAM_n( PRN=ZP_RN, PH=ZP_H, PLE=ZP_LE, PLEI=ZP_LEI, &
+                               PGFLUX=ZP_GFLUX, PT2M=ZP_T2M, PQ2M=ZP_Q2M, PHU2M=ZP_HU2M, &
+                               PZON10M=ZP_ZON10M, PMER10M=ZP_MER10M)
+  END IF
 END IF
 !
 ! Transform 1D output fields into 2D:
@@ -1173,51 +1177,58 @@ CALL CLEANLIST_ll(TZFIELDSURF_ll)
 !   -----------
 !
 !
-IF (LDIAG_IN_RUN) THEN
-  !
+IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN
   XCURRENT_SFCO2(:,:) = ZSFCO2(:,:)
-  XCURRENT_DSTAOD(:,:)=0.0
-  XCURRENT_SLTAOD(:,:)=0.0
-  IF (CRAD/='NONE') THEN
-  XCURRENT_LWD  (:,:) = XFLALWD(:,:)
-  XCURRENT_SWD  (:,:) = SUM(XDIRSRFSWD(:,:,:)+XSCAFLASWD(:,:,:),DIM=3)
-  XCURRENT_LWU  (:,:) = XLWU(:,:,IKB) 
-  XCURRENT_SWU  (:,:) = XSWU(:,:,IKB) 
-  XCURRENT_SWDIR(:,:) = SUM(XDIRSRFSWD,DIM=3)
-  XCURRENT_SWDIFF(:,:) = SUM(XSCAFLASWD(:,:,:),DIM=3) 
-  DO JK=IKB,IKE
-    IKRAD = JK - 1 
-    DO JJ=IJB,IJE
-       DO JI=IIB,IIE
-         XCURRENT_DSTAOD(JI,JJ)=XCURRENT_DSTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,3)
-         XCURRENT_SLTAOD(JI,JJ)=XCURRENT_SLTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,2)
-       ENDDO
-    ENDDO
-  ENDDO
+  IF ( CRAD /= 'NONE' ) THEN
+    XCURRENT_LWD  (:,:) = XFLALWD(:,:)
+    XCURRENT_SWD  (:,:) = SUM( XDIRSRFSWD(:,:,:) + XSCAFLASWD(:,:,:), DIM=3 )
+    XCURRENT_LWU  (:,:) = XLWU(:,:,IKB)
+    XCURRENT_SWU  (:,:) = XSWU(:,:,IKB)
+    IF ( GSTATPROF_SURF ) THEN
+      XCURRENT_SWDIR(:,:)  = SUM( XDIRSRFSWD(:,:,:), DIM=3 )
+      XCURRENT_SWDIFF(:,:) = SUM( XSCAFLASWD(:,:,:), DIM=3 )
+      XCURRENT_DSTAOD(:,:) = 0.0
+      XCURRENT_SLTAOD(:,:) = 0.0
+      DO JK=IKB,IKE
+        IKRAD = JK - 1
+        DO JJ = IJB, IJE
+          DO JI = IIB, IIE
+            XCURRENT_DSTAOD(JI,JJ) = XCURRENT_DSTAOD(JI,JJ) + XAER(JI,JJ,IKRAD,3)
+            XCURRENT_SLTAOD(JI,JJ) = XCURRENT_SLTAOD(JI,JJ) + XAER(JI,JJ,IKRAD,2)
+          END DO
+        END DO
+      END DO
+    END IF
   END IF
-  !
   NULLIFY(TZFIELDSURF_ll)
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_RN,     'GROUND_PARAM_n::XCURRENT_RN'     )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_H,      'GROUND_PARAM_n::XCURRENT_H'      )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LE,     'GROUND_PARAM_n::XCURRENT_LE'     )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LEI,    'GROUND_PARAM_n::XCURRENT_LEI'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_GFLUX,  'GROUND_PARAM_n::XCURRENT_GFLUX'  )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWD,    'GROUND_PARAM_n::XCURRENT_SWD'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWU,    'GROUND_PARAM_n::XCURRENT_SWU'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWD,    'GROUND_PARAM_n::XCURRENT_LWD'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWU,    'GROUND_PARAM_n::XCURRENT_LWU'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIR,  'GROUND_PARAM_n::XCURRENT_SWDIR'  )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIFF, 'GROUND_PARAM_n::XCURRENT_SWDIFF' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_T2M,    'GROUND_PARAM_n::XCURRENT_T2M'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_Q2M,    'GROUND_PARAM_n::XCURRENT_Q2M'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_HU2M,   'GROUND_PARAM_n::XCURRENT_HU2M'   )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZON10M, 'GROUND_PARAM_n::XCURRENT_ZON10M' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_MER10M, 'GROUND_PARAM_n::XCURRENT_MER10M' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_DSTAOD, 'GROUND_PARAM_n::XCURRENT_DSTAOD' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SLTAOD, 'GROUND_PARAM_n::XCURRENT_SLTAOD' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZWS,    'GROUND_PARAM_n::XCURRENT_ZWS'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2,  'GROUND_PARAM_n::XCURRENT_SFCO2'  )
-  !
+
+  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2,      'GROUND_PARAM_n::XCURRENT_SFCO2'  )
+  IF ( CRAD /= 'NONE' ) THEN
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWD,      'GROUND_PARAM_n::XCURRENT_LWD'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWD,      'GROUND_PARAM_n::XCURRENT_SWD'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWU,      'GROUND_PARAM_n::XCURRENT_LWU'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWU,      'GROUND_PARAM_n::XCURRENT_SWU'    )
+    IF ( GSTATPROF_SURF ) THEN
+      CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIR,  'GROUND_PARAM_n::XCURRENT_SWDIR'  )
+      CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIFF, 'GROUND_PARAM_n::XCURRENT_SWDIFF' )
+      CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_DSTAOD, 'GROUND_PARAM_n::XCURRENT_DSTAOD' )
+      CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SLTAOD, 'GROUND_PARAM_n::XCURRENT_SLTAOD' )
+    END IF
+  END IF
+  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZON10M,     'GROUND_PARAM_n::XCURRENT_ZON10M' )
+  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_MER10M,     'GROUND_PARAM_n::XCURRENT_MER10M' )
+  IF ( GSTATPROF_SURF ) THEN
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_RN,       'GROUND_PARAM_n::XCURRENT_RN'     )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_H,        'GROUND_PARAM_n::XCURRENT_H'      )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LE,       'GROUND_PARAM_n::XCURRENT_LE'     )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LEI,      'GROUND_PARAM_n::XCURRENT_LEI'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_GFLUX,    'GROUND_PARAM_n::XCURRENT_GFLUX'  )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_T2M,      'GROUND_PARAM_n::XCURRENT_T2M'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_Q2M,      'GROUND_PARAM_n::XCURRENT_Q2M'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_HU2M,     'GROUND_PARAM_n::XCURRENT_HU2M'   )
+  END IF
+  ! CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZWS,      'GROUND_PARAM_n::XCURRENT_ZWS'    )
+
   CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll)
   CALL CLEANLIST_ll(TZFIELDSURF_ll)
   !
@@ -1292,16 +1303,20 @@ ALLOCATE(ZP_TSURF   (KDIM1D))
 ALLOCATE(ZP_Z0      (KDIM1D))
 ALLOCATE(ZP_Z0H     (KDIM1D))
 ALLOCATE(ZP_QSURF   (KDIM1D))
-ALLOCATE(ZP_RN      (KDIM1D))
-ALLOCATE(ZP_H       (KDIM1D))
-ALLOCATE(ZP_LE      (KDIM1D))
-ALLOCATE(ZP_LEI     (KDIM1D))
-ALLOCATE(ZP_GFLUX   (KDIM1D))
-ALLOCATE(ZP_T2M     (KDIM1D))
-ALLOCATE(ZP_Q2M     (KDIM1D))
-ALLOCATE(ZP_HU2M    (KDIM1D))
-ALLOCATE(ZP_ZON10M  (KDIM1D))
-ALLOCATE(ZP_MER10M  (KDIM1D))
+IF ( GSTATPROF_SURF ) THEN
+  ALLOCATE(ZP_RN      (KDIM1D))
+  ALLOCATE(ZP_H       (KDIM1D))
+  ALLOCATE(ZP_LE      (KDIM1D))
+  ALLOCATE(ZP_LEI     (KDIM1D))
+  ALLOCATE(ZP_GFLUX   (KDIM1D))
+  ALLOCATE(ZP_T2M     (KDIM1D))
+  ALLOCATE(ZP_Q2M     (KDIM1D))
+  ALLOCATE(ZP_HU2M    (KDIM1D))
+END IF
+IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN
+  ALLOCATE(ZP_ZON10M  (KDIM1D))
+  ALLOCATE(ZP_MER10M  (KDIM1D))
+END IF
 !
 !* explicit coupling only
 ALLOCATE(ZP_PEW_A_COEF  (KDIM1D))
@@ -1440,7 +1455,7 @@ IF(LBLOWSNOW) THEN
   END DO
 END IF
 !
-IF (LDIAG_IN_RUN) THEN
+IF ( GSTATPROF_SURF ) THEN
   XCURRENT_RN      (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_RN(:),     ISHAPE_2)
   XCURRENT_H       (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_H (:),     ISHAPE_2)
   XCURRENT_LE      (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_LE(:),     ISHAPE_2)
@@ -1449,10 +1464,12 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_T2M     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_T2M(:),    ISHAPE_2)
   XCURRENT_Q2M     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_Q2M(:),    ISHAPE_2)
   XCURRENT_HU2M    (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_HU2M(:),   ISHAPE_2)
+END IF
+IF ( GSTATPROF_SURF .OR. CPROGRAM == 'DIAG' ) THEN
   XCURRENT_ZON10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZON10M(:), ISHAPE_2)
   XCURRENT_MER10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_MER10M(:), ISHAPE_2)
-  XCURRENT_ZWS     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZWS(:),    ISHAPE_2)
-ENDIF
+  ! XCURRENT_ZWS     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZWS(:),    ISHAPE_2)
+END IF
 !
 DO JLAYER=1,SIZE(PDIR_ALB,3)
   PDIR_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_DIR_ALB(:,JLAYER), ISHAPE_2)
@@ -1498,16 +1515,20 @@ DEALLOCATE(ZP_TSRAD   )
 DEALLOCATE(ZP_DIR_ALB )
 DEALLOCATE(ZP_SCA_ALB )
 DEALLOCATE(ZP_EMIS    )
-DEALLOCATE(ZP_RN      )
-DEALLOCATE(ZP_H       )
-DEALLOCATE(ZP_LE      )
-DEALLOCATE(ZP_LEI     )
-DEALLOCATE(ZP_GFLUX   )
-DEALLOCATE(ZP_T2M     )
-DEALLOCATE(ZP_Q2M     )
-DEALLOCATE(ZP_HU2M     )
-DEALLOCATE(ZP_ZON10M  )
-DEALLOCATE(ZP_MER10M  )
+IF ( GSTATPROF_SURF ) THEN
+  DEALLOCATE(ZP_RN      )
+  DEALLOCATE(ZP_H       )
+  DEALLOCATE(ZP_LE      )
+  DEALLOCATE(ZP_LEI     )
+  DEALLOCATE(ZP_GFLUX   )
+  DEALLOCATE(ZP_T2M     )
+  DEALLOCATE(ZP_Q2M     )
+  DEALLOCATE(ZP_HU2M    )
+END IF
+IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN
+  DEALLOCATE(ZP_ZON10M  )
+  DEALLOCATE(ZP_MER10M  )
+END IF
 
 DEALLOCATE(ZP_PEW_A_COEF  )
 DEALLOCATE(ZP_PEW_B_COEF  )
diff --git a/src/MNH/ini_aircraft.f90 b/src/MNH/ini_aircraft.f90
index 331df58cf9ea2e50738f7fdbc9bcaf73816c0bd3..530cb390cf71f355a423fdbc836e950f34577a16 100644
--- a/src/MNH/ini_aircraft.f90
+++ b/src/MNH/ini_aircraft.f90
@@ -199,6 +199,15 @@ DO JI = 1, NAIRCRAFTS
   ! Read CSV data (trajectory)
   CALL AIRCRAFT_CSV_READ( TZAIRCRAFT, CFILE(JI) )
 
+  IF ( TZAIRCRAFT%LALTDEF ) THEN
+    ! Print a warning if pressures seem too high (> 2000 hPa)
+    IF ( ANY( TZAIRCRAFT%XPOSP > 2.E5 ) ) THEN
+      CMNHMSG(1) = TRIM( TZAIRCRAFT%CTITLE ) // ': pressure values seem too high'
+      CMNHMSG(2) = 'check that they are given in hPa and not Pa'
+      CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_AIRCRAFT', OLOCAL = .TRUE. )
+    END IF
+  END IF
+
 END DO
 
 IF ( NAIRCRAFTS > 0 ) CALL AIRCRAFTS_NML_DEALLOCATE()
@@ -223,10 +232,13 @@ CHARACTER(LEN=*),    INTENT(IN)    :: HFILE !Name of the CSV file with the aircr
 
 CHARACTER(LEN=NMAXLINELGT) :: YSTRING
 INTEGER                    :: ILU      ! logical unit of the file
+INTEGER                    :: ILINESREAD ! Number of lines read and treated (the 1st one is skipped)
 INTEGER                    :: JI
 REAL                       :: ZLAT, ZLON, ZALT
 REAL                       :: ZTIME
 
+ILINESREAD = 0
+
 ! Open file
 OPEN( NEWUNIT = ILU, FILE = HFILE, FORM = 'formatted' )
 
@@ -235,6 +247,7 @@ READ( ILU, END = 101, FMT = '(A)' ) YSTRING ! Reading of header (skip it)
 DO JI = 1, TPAIRCRAFT%NPOS
   ! Read aircraft position
   READ( ILU, END = 101, FMT = '(A)' ) YSTRING
+  ILINESREAD = ILINESREAD + 1
 
   READ( YSTRING, * ) ZTIME, ZLAT, ZLON, ZALT
 
@@ -252,7 +265,7 @@ END DO
 
 CLOSE( ILU )
 
-IF ( JI < TPAIRCRAFT%NPOS ) &
+IF ( ILINESREAD < TPAIRCRAFT%NPOS ) &
   CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'AIRCRAFT_CSV_READ', 'Data not found in file ' // TRIM( HFILE ), OLOCAL = .TRUE. )
 
 TPAIRCRAFT%TLAND = TPAIRCRAFT%TLAUNCH + TPAIRCRAFT%XPOSTIME(TPAIRCRAFT%NPOS)
diff --git a/src/MNH/ini_diag_in_run.f90 b/src/MNH/ini_diag_in_run.f90
index 6f39e805a357747f41972243e967fbdbd58700e1..0910a61e66cd9469930d7b6f132a1a5db18898f5 100644
--- a/src/MNH/ini_diag_in_run.f90
+++ b/src/MNH/ini_diag_in_run.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2003-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2023 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.
@@ -31,7 +31,7 @@ END MODULE MODI_INI_DIAG_IN_RUN
 !     ###############################################################
 !
 !
-!!****  *INI_DIAG_IN_RUN* - 
+!!****  *INI_DIAG_IN_RUN* -
 !!
 !!    PURPOSE
 !!    -------
@@ -39,7 +39,7 @@ END MODULE MODI_INI_DIAG_IN_RUN
 !
 !!**  METHOD
 !!    ------
-!!    
+!!
 !!
 !!    EXTERNAL
 !!    --------
@@ -65,10 +65,13 @@ END MODULE MODI_INI_DIAG_IN_RUN
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CONF, ONLY : CPROGRAM
+USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF
+USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD_STAT
+USE MODD_CONF,          ONLY: CPROGRAM
 USE MODD_DIAG_IN_RUN
-USE MODD_PARAMETERS, ONLY : XUNDEF
-USE MODD_SURF_PAR,   ONLY: XUNDEF_SFX => XUNDEF
+USE MODD_PARAMETERS,    ONLY: XUNDEF
+USE MODD_PARAM_n,       ONLY: CRAD
+USE MODD_SURF_PAR,      ONLY: XUNDEF_SFX => XUNDEF
 !
 IMPLICIT NONE
 !
@@ -84,36 +87,90 @@ LOGICAL,            INTENT(IN) :: OPROFILER! flag for profiler
 !
 !-------------------------------------------------------------------------------
 !
-IF (OFLYER .OR. OSTATION .OR. OPROFILER .OR. CPROGRAM=='DIAG  ') THEN
+! LDIAG_IN_RUN is only used for XCURRENT_TKE_DISS (computed in turbulence)
+IF ( OFLYER .OR. OPROFILER ) THEN
   LDIAG_IN_RUN = .TRUE.
+  ALLOCATE( XCURRENT_TKE_DISS(KIU,KJU,KKU) ) ! Tke dissipation rate
+  XCURRENT_TKE_DISS = XUNDEF
 ELSE
   LDIAG_IN_RUN = .FALSE.
+  ALLOCATE( XCURRENT_TKE_DISS(0,0,0) ) ! Tke dissipation rate
 END IF
-!
-IF (LDIAG_IN_RUN) THEN
+
+IF ( CPROGRAM == 'DIAG' ) THEN
+  IF ( CRAD /= 'NONE' ) THEN
+    ALLOCATE(XCURRENT_LWD   (KIU,KJU))! incoming longwave at the surface
+    ALLOCATE(XCURRENT_LWU   (KIU,KJU))! outcoming longwave at the surface
+    ALLOCATE(XCURRENT_SWD   (KIU,KJU))! incoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWU   (KIU,KJU))! outcoming Shortwave at the surface
+  ELSE
+    ALLOCATE(XCURRENT_LWD   (0,0))! incoming longwave at the surface
+    ALLOCATE(XCURRENT_LWU   (0,0))! outcoming longwave at the surface
+    ALLOCATE(XCURRENT_SWD   (0,0))! incoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWU   (0,0))! outcoming Shortwave at the surface
+  END IF
+
+  ALLOCATE(XCURRENT_ZON10M(KIU,KJU))! zonal wind at 10m
+  ALLOCATE(XCURRENT_MER10M(KIU,KJU))! meridian wind at 10m
+
+  ALLOCATE(XCURRENT_SFCO2 (KIU,KJU))! CO2 Surface flux
+
+  ALLOCATE(XCURRENT_RN    (0,0))! net radiation
+  ALLOCATE(XCURRENT_H     (0,0))! sensible heat flux
+  ALLOCATE(XCURRENT_LE    (0,0))! Total latent heat flux
+  ALLOCATE(XCURRENT_LEI   (0,0))! Solid latent heat flux
+  ALLOCATE(XCURRENT_GFLUX (0,0))! ground flux
+  ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface
+  ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface
+  ALLOCATE(XCURRENT_T2M   (0,0))! temperature at 2m
+  ALLOCATE(XCURRENT_Q2M   (0,0))! humidity at 2m
+  ALLOCATE(XCURRENT_HU2M  (0,0))! humidity at 2m
+  ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth
+  ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth
+  ! ALLOCATE(XCURRENT_ZWS(0,0))! Significant height of waves
+
+  XCURRENT_LWD   = XUNDEF
+  XCURRENT_LWU   = XUNDEF
+  XCURRENT_SWD   = XUNDEF
+  XCURRENT_SWU   = XUNDEF
+
+  XCURRENT_ZON10M = XUNDEF_SFX
+  XCURRENT_MER10M = XUNDEF_SFX
+
+  XCURRENT_SFCO2 = XUNDEF_SFX
+ELSE IF ( ( OPROFILER .AND. LDIAG_SURFRAD_PROF ) .OR. ( OSTATION .AND. LDIAG_SURFRAD_STAT ) ) THEN
   ALLOCATE(XCURRENT_RN    (KIU,KJU))! net radiation
   ALLOCATE(XCURRENT_H     (KIU,KJU))! sensible heat flux
   ALLOCATE(XCURRENT_LE    (KIU,KJU))! Total latent heat flux
-  ALLOCATE(XCURRENT_LEI   (KIU,KJU))! Solid latent heat flux  
+  ALLOCATE(XCURRENT_LEI   (KIU,KJU))! Solid latent heat flux
   ALLOCATE(XCURRENT_GFLUX (KIU,KJU))! ground flux
-  ALLOCATE(XCURRENT_LWD   (KIU,KJU))! incoming longwave at the surface
-  ALLOCATE(XCURRENT_LWU   (KIU,KJU))! outcoming longwave at the surface
-  ALLOCATE(XCURRENT_SWD   (KIU,KJU))! incoming Shortwave at the surface
-  ALLOCATE(XCURRENT_SWU   (KIU,KJU))! outcoming Shortwave at the surface
-  ALLOCATE(XCURRENT_SWDIR (KIU,KJU))! incoming Shortwave direct at the surface
-  ALLOCATE(XCURRENT_SWDIFF(KIU,KJU))! incoming Shortwave diffuse at the surface  
+  IF ( CRAD /= 'NONE' ) THEN
+    ALLOCATE(XCURRENT_LWD   (KIU,KJU))! incoming longwave at the surface
+    ALLOCATE(XCURRENT_LWU   (KIU,KJU))! outcoming longwave at the surface
+    ALLOCATE(XCURRENT_SWD   (KIU,KJU))! incoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWU   (KIU,KJU))! outcoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWDIR (KIU,KJU))! incoming Shortwave direct at the surface
+    ALLOCATE(XCURRENT_SWDIFF(KIU,KJU))! incoming Shortwave diffuse at the surface
+    ALLOCATE(XCURRENT_DSTAOD(KIU,KJU))! dust aerosol optical depth
+    ALLOCATE(XCURRENT_SLTAOD(KIU,KJU))! Salt aerosol optical depth
+  ELSE
+    ALLOCATE(XCURRENT_LWD   (0,0))! incoming longwave at the surface
+    ALLOCATE(XCURRENT_LWU   (0,0))! outcoming longwave at the surface
+    ALLOCATE(XCURRENT_SWD   (0,0))! incoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWU   (0,0))! outcoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface
+    ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface
+    ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth
+    ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth
+  END IF
   ALLOCATE(XCURRENT_T2M   (KIU,KJU))! temperature at 2m
   ALLOCATE(XCURRENT_Q2M   (KIU,KJU))! humidity at 2m
-  ALLOCATE(XCURRENT_HU2M   (KIU,KJU))! humidity at 2m
+  ALLOCATE(XCURRENT_HU2M  (KIU,KJU))! humidity at 2m
   ALLOCATE(XCURRENT_ZON10M(KIU,KJU))! zonal wind at 10m
   ALLOCATE(XCURRENT_MER10M(KIU,KJU))! meridian wind at 10m
-  ALLOCATE(XCURRENT_DSTAOD(KIU,KJU))! dust aerosol optical depth
   ALLOCATE(XCURRENT_SFCO2 (KIU,KJU))! CO2 Surface flux
-  ALLOCATE(XCURRENT_TKE_DISS(KIU,KJU,KKU)) ! Tke dissipation rate
-  ALLOCATE(XCURRENT_SLTAOD(KIU,KJU))! Salt aerosol optical depth
-  ALLOCATE(XCURRENT_ZWS(KIU,KJU)) ! Significant height of waves
-  !
-  !
+  ! ALLOCATE(XCURRENT_ZWS(KIU,KJU)) ! Significant height of waves
+
   XCURRENT_RN    = XUNDEF_SFX
   XCURRENT_H     = XUNDEF_SFX
   XCURRENT_LE    = XUNDEF_SFX
@@ -124,39 +181,37 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_SWD   = XUNDEF
   XCURRENT_SWU   = XUNDEF
   XCURRENT_SWDIR = XUNDEF
-  XCURRENT_SWDIFF= XUNDEF  
+  XCURRENT_SWDIFF= XUNDEF
   XCURRENT_T2M   = XUNDEF_SFX
   XCURRENT_Q2M   = XUNDEF_SFX
   XCURRENT_HU2M  = XUNDEF_SFX
   XCURRENT_ZON10M= XUNDEF_SFX
   XCURRENT_MER10M= XUNDEF_SFX
   XCURRENT_DSTAOD= XUNDEF
-  XCURRENT_SFCO2 = XUNDEF_SFX
-  XCURRENT_TKE_DISS = XUNDEF
   XCURRENT_SLTAOD= XUNDEF
-  XCURRENT_ZWS = XUNDEF_SFX
+  XCURRENT_SFCO2 = XUNDEF_SFX
+  ! XCURRENT_ZWS = XUNDEF_SFX
 ELSE
   ALLOCATE(XCURRENT_RN    (0,0))! net radiation
   ALLOCATE(XCURRENT_H     (0,0))! sensible heat flux
   ALLOCATE(XCURRENT_LE    (0,0))! Total latent heat flux
-  ALLOCATE(XCURRENT_LEI   (0,0))! Solid latent heat flux  
+  ALLOCATE(XCURRENT_LEI   (0,0))! Solid latent heat flux
   ALLOCATE(XCURRENT_GFLUX (0,0))! ground flux
   ALLOCATE(XCURRENT_LWD   (0,0))! incoming longwave at the surface
   ALLOCATE(XCURRENT_LWU   (0,0))! outcoming longwave at the surface
   ALLOCATE(XCURRENT_SWD   (0,0))! incoming Shortwave at the surface
   ALLOCATE(XCURRENT_SWU   (0,0))! outcoming Shortwave at the surface
   ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface
-  ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface  
+  ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface
   ALLOCATE(XCURRENT_T2M   (0,0))! temperature at 2m
   ALLOCATE(XCURRENT_Q2M   (0,0))! humidity at 2m
   ALLOCATE(XCURRENT_HU2M  (0,0))! humidity at 2m
   ALLOCATE(XCURRENT_ZON10M(0,0))! zonal wind at 10m
   ALLOCATE(XCURRENT_MER10M(0,0))! meridian wind at 10m
   ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth
-  ALLOCATE(XCURRENT_SFCO2 (0,0))! CO2 Surface flux
-  ALLOCATE(XCURRENT_TKE_DISS(0,0,0)) ! Tke dissipation rate
   ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth
-  ALLOCATE(XCURRENT_ZWS(0,0))! Significant height of waves
+  ALLOCATE(XCURRENT_SFCO2 (0,0))! CO2 Surface flux
+  ! ALLOCATE(XCURRENT_ZWS(0,0))! Significant height of waves
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index d94ee1e6dba8abcac90d18e2b7d9a8ef865eba6a..1858fc125280cb873eee8576e2eb561063cd75a5 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -526,9 +526,6 @@ INTEGER :: IIU_B,IJU_B
 INTEGER :: IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll
 !
 REAL, DIMENSION(:,:),   ALLOCATABLE :: ZCO2   ! CO2 concentration near the surface
-REAL, DIMENSION(:,:),   ALLOCATABLE :: ZSEA   ! sea fraction
-REAL, DIMENSION(:,:),   ALLOCATABLE :: ZTOWN  ! town fraction
-REAL, DIMENSION(:,:),   ALLOCATABLE :: ZBARE  ! bare soil fraction
 !
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo
@@ -2652,17 +2649,6 @@ IF (CRAD   == 'ECMW') THEN
 !* get cover mask for aerosols
 !
   IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG  ') THEN
-    ALLOCATE(ZSEA(IIU,IJU))
-    ALLOCATE(ZTOWN(IIU,IJU))
-    ALLOCATE(ZBARE(IIU,IJU))
-    IF (CSURF=='EXTE') THEN
-      CALL GOTO_SURFEX(KMI)
-      CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE)
-    ELSE
-      ZSEA (:,:) = 1.
-      ZTOWN(:,:) = 0.
-      ZBARE(:,:) = 0.
-    END IF
 !
     IF ( CAOP=='EXPL' .AND. LDUST .AND. KMI==1) THEN
       ALLOCATE( XEXT_COEFF_WVL_LKT_DUST( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST, NMAX_WVL_SW_DUST ) )
@@ -2680,9 +2666,8 @@ IF (CRAD   == 'ECMW') THEN
 !
     CALL INI_RADIATIONS_ECMWF (XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,       &
                                CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB_OLD,CAER,NAER,NSTATM,   &
-                               XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND )
+                               XSTATM, XOZON, XAER,XDST_WL, LSUBG_COND                 )
 !
-    DEALLOCATE(ZSEA,ZTOWN,ZBARE)
     ALLOCATE (XAER_CLIM(SIZE(XAER,1),SIZE(XAER,2),SIZE(XAER,3),SIZE(XAER,4)))
     XAER_CLIM(:,:,:,:) =XAER(:,:,:,:)
 !
@@ -2693,23 +2678,11 @@ ELSE IF (CRAD   == 'ECRA') THEN
 !* get cover mask for aerosols
 !
   IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG  ') THEN
-    ALLOCATE(ZSEA(IIU,IJU))
-    ALLOCATE(ZTOWN(IIU,IJU))
-    ALLOCATE(ZBARE(IIU,IJU))
-    IF (CSURF=='EXTE') THEN
-      CALL GOTO_SURFEX(KMI)
-      CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE)
-    ELSE
-      ZSEA (:,:) = 1.
-      ZTOWN(:,:) = 0.
-      ZBARE(:,:) = 0.
-    END IF
 !
     CALL INI_RADIATIONS_ECRAD (XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,       &
                                CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB_OLD,CAER,NAER,NSTATM,   &
-                               XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND )
+                               XSTATM, XOZON, XAER,XDST_WL, LSUBG_COND                 )
 
-    DEALLOCATE(ZSEA,ZTOWN,ZBARE)
     ALLOCATE (XAER_CLIM(SIZE(XAER,1),SIZE(XAER,2),SIZE(XAER,3),SIZE(XAER,4)))
     XAER_CLIM(:,:,:,:) = XAER(:,:,:,:)
 !
diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90
index 1864623ffbe8bd132b556b841d5c1f3a6840e8bd..f0d7cc6879cb71e19e23774b8cd5b442a6567a07 100644
--- a/src/MNH/ini_prog_var.f90
+++ b/src/MNH/ini_prog_var.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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.
@@ -249,19 +249,19 @@ IF(PRESENT(HCHEMFILE)) THEN
   END IF ! IIMAX
   LUSECHEM = .TRUE.
   IF (LORILAM) THEN
-    CALL POSNAM(ILUDES,'NAM_CH_ORILAM',GFOUND,ILUOUT)
+    CALL POSNAM(TZCHEMFILE, 'NAM_CH_ORILAM', GFOUND )
     IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CH_ORILAM)
   ENDIF
   IF (LDUST) THEN
     LDSTINIT=.TRUE.
     LDSTPRES=.FALSE.
-    CALL POSNAM(ILUDES,'NAM_DUST',GFOUND,ILUOUT)
+    CALL POSNAM(TZCHEMFILE, 'NAM_DUST', GFOUND )
     IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DUST)
   ENDIF
   IF (LSALT) THEN
     LSLTINIT=.TRUE.
     LSLTPRES=.FALSE.
-    CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT)
+    CALL POSNAM(TZCHEMFILE, 'NAM_SALT', GFOUND )
     IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT)
   ENDIF
 
diff --git a/src/MNH/ini_radiations_ecmwf.f90 b/src/MNH/ini_radiations_ecmwf.f90
index e8f11de28487376225ce40d9803858ab0ba1308d..73aa70d072869c00657eda7dbd1264212b3981a9 100644
--- a/src/MNH/ini_radiations_ecmwf.f90
+++ b/src/MNH/ini_radiations_ecmwf.f90
@@ -12,7 +12,7 @@ INTERFACE
     SUBROUTINE INI_RADIATIONS_ECMWF(                                  &
          PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,   &
          HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB, HAER, KAER, KSTATM,    &
-         PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND )
+         PSTATM, POZON, PAER, PDST_WL, OSUBG_COND                     )
 !
 USE MODD_TYPE_DATE
 !
@@ -23,9 +23,6 @@ REAL, DIMENSION(:),     INTENT(IN) :: PZHAT ! height level without orography
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST! pressure
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT  !Temperature
 REAL, DIMENSION(:,:),   INTENT(IN) :: PTSRAD ! surface radiative temperature
-REAL, DIMENSION (:,:),  INTENT(IN) :: PSEA   ! sea fraction
-REAL, DIMENSION (:,:),  INTENT(IN) :: PTOWN  ! town fraction
-REAL, DIMENSION (:,:),  INTENT(IN) :: PBARE  ! bare soil fraction
 REAL, DIMENSION(:,:),   INTENT(IN) :: PLAT, PLON ! arrays of latitude-longitude
 !
 TYPE (DATE_TIME),       INTENT(IN) :: TPDTCUR    ! Current date and time
@@ -61,7 +58,7 @@ END MODULE MODI_INI_RADIATIONS_ECMWF
     SUBROUTINE INI_RADIATIONS_ECMWF(                                  &
          PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,   &
          HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB, HAER, KAER, KSTATM,    &
-         PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND )
+         PSTATM, POZON, PAER, PDST_WL, OSUBG_COND                     )
 !   ###################################################################
 !
 !!****  *INI_RADIATIONS * - initialisation for ECMWF radiation scheme in the MesoNH framework
@@ -181,10 +178,6 @@ END MODULE MODI_INI_RADIATIONS_ECMWF
 !ECMWF radiation scheme specific modules 
 !
 USE OYOMCST,               ONLY: RTT
-USE PARKIND1,              ONLY: JPRB
-USE YOEAERD,               ONLY: RCAEOPS, RCAEOPL, RCAEOPU, RCAEOPD, RCTRBGA, &
-                                 RCVOBGA, RCSTBGA, RCTRPT,  RCAEADM, RCAEROS, &
-                                 RCAEADK
 USE YOETHF,                ONLY: RTICE
 !
 !MESO-NH modules
@@ -205,7 +198,7 @@ USE MODE_ll
 USE MODE_REPRO_SUM
 USE MODE_SALTOPT
 !
-USE MODI_INI_HOR_AERCLIM
+USE MODI_AEROZON
 USE MODI_INI_RADCONF
 USE MODI_INI_STAND_ATM
 USE MODI_RADAER
@@ -224,9 +217,6 @@ REAL, DIMENSION(:),     INTENT(IN) :: PZHAT ! height level without orography
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST! pressure
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT  !Temperature
 REAL, DIMENSION(:,:),   INTENT(IN) :: PTSRAD ! surface radiative temperature
-REAL, DIMENSION (:,:),  INTENT(IN) :: PSEA   ! sea fraction
-REAL, DIMENSION (:,:),  INTENT(IN) :: PTOWN  ! town fraction
-REAL, DIMENSION (:,:),  INTENT(IN) :: PBARE  ! bare soil fraction
 REAL, DIMENSION(:,:),   INTENT(IN) :: PLAT, PLON ! arrays of latitude-longitude
 !
 TYPE (DATE_TIME),       INTENT(IN) :: TPDTCUR    ! Current date and time
@@ -258,11 +248,8 @@ LOGICAL :: GWINTER ! .T. when WINTERtime
 LOGICAL :: GSEASON ! .T. when SUMMERtime in the northern hemisphere or
                    !     when WINTERtime in the southern hemisphere
 !
-INTEGER :: JI, JJ, JK, JK1, JKRAD,IIJ,JL  ! loop index
-!
 INTEGER :: IIB           ! I index value of the first inner mass point
 INTEGER :: IJB           ! J index value of the first inner mass point
-INTEGER :: IKB           ! K index value of the first inner mass point
 INTEGER :: IIE           ! I index value of the last inner mass point
 INTEGER :: IJE           ! J index value of the last inner mass point
 INTEGER :: IKE           ! K index value of the last inner mass point
@@ -275,7 +262,6 @@ REAL :: ZLATMEAN      ! MEAN LATitude in the domain
 REAL :: ZLAT_TROPICAL ! TROPIQUE LATitude
 REAL :: ZLAT_POLAR    ! POLAR circle LATitude
 !
-REAL, DIMENSION(:,:),ALLOCATABLE :: ZLON          ! longitude
 REAL, DIMENSION(SIZE(PSTATM,1)) :: ZZSTAT ! half level altitudes of standard atm.
 !
 INTEGER :: IINFO_ll                   ! return code of parallel routine
@@ -283,20 +269,8 @@ INTEGER :: IIMAX_ll,IJMAX_ll          ! Number of points of
                                       ! Global physical domain
                                       ! in the x and y directions
 !
-REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZEXNT ! Exner function
-!
 ! Variables for aerosols and ozone climatologies set up
-REAL, DIMENSION (:),     ALLOCATABLE  :: ZAESEA, ZAELAN, ZAEURB, ZAEDES
-REAL(KIND=JPRB), DIMENSION (:), ALLOCATABLE  :: ZAESEA_RAD, ZAELAN_RAD, ZAEURB_RAD, ZAEDES_RAD
-LOGICAL, DIMENSION (:,:),ALLOCATABLE  :: GAFRICA, GASIA, GAUSTRALIA
-REAL, DIMENSION (:,:),   ALLOCATABLE  :: ZDESERT ! desert fraction
-REAL, DIMENSION (:,:),   ALLOCATABLE  :: ZPAVE, ZWORK_GRID
-REAL(KIND=JPRB), DIMENSION (:,:,:), ALLOCATABLE  :: ZAER
-REAL(KIND=JPRB), DIMENSION (:,:),   ALLOCATABLE  :: ZPRES_HL,ZT_HL,ZOZON
-REAL(KIND=JPRB), DIMENSION (:,:),   ALLOCATABLE  :: ZCVDAES, ZCVDAEL, ZCVDAEU, ZCVDAED,ZETAH
-REAL(KIND=JPRB), DIMENSION (:),     ALLOCATABLE  :: ZGEMU 
-REAL, DIMENSION(:),      ALLOCATABLE  :: ZAECOV_SEA, ZAECOV_URB, ZAECOV_LAN, ZAECOV_DES
-INTEGER :: ZYMD, ZHOURS   ! date for climatology initialisation
+REAL :: ZSINDEL,ZCOSDEL,ZTSIDER,ZCORSOL   ! astronomical parameters not used here
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
@@ -310,7 +284,6 @@ CALL GET_DIM_EXT_ll ('B',IIU,IJU)
 IKU = SIZE(PTHT,3)
 !
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-IKB = 1 + JPVEXT
 IKE = IKU - JPVEXT
 !
 ! size of global physical domain
@@ -430,272 +403,25 @@ CALL INI_RADCONF (HLW,KSWB,OSUBG_COND)
 !*       8.     INITIALIZE RADIATIVELY ACTIVE COMPOUNDS (3D FIELDS) 
 !	        ------------------------------------------------------ 
 !
-!*       8.1   set up for grid dependant quantitites (from initial state) 
-! 
-ALLOCATE (ZPRES_HL(KDLON,KFLEV+1))
-ALLOCATE (ZPAVE(KDLON,KFLEV))
-ALLOCATE (ZETAH(KDLON,KFLEV+1))
-ALLOCATE (ZT_HL(KDLON,KFLEV+1))
-ALLOCATE (ZGEMU(KDLON))
-ZT_HL(:,:) = 273.
-!
-ZEXNT(:,:,:)= ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-DO JK=IKB,IKE+1
-  JKRAD = JK-JPVEXT
-  DO JJ=IJB,IJE
-    DO JI=IIB,IIE
-      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
-      ZPRES_HL(IIJ,JKRAD) = XP00 * (0.5*(ZEXNT(JI,JJ,JK)+ZEXNT(JI,JJ,JK-1)))**(XCPD/XRD)
-      ZT_HL(IIJ,JKRAD) = 0.5*(PTHT(JI,JJ,JK)*ZEXNT(JI,JJ,JK)+PTHT(JI,JJ,JK-1)*ZEXNT(JI,JJ,JK-1))
-    END DO
-  END DO
-END DO
-!
-!  Surface temperature at the first level
-!
-DO JJ=IJB,IJE
-  DO JI=IIB,IIE
-    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
-    ZT_HL(IIJ,1) = PTSRAD(JI,JJ)
-  END DO
-END DO
-WHERE (ZT_HL(:,:) == 0.)
-  ZT_HL(:,:) = 273.
-ENDWHERE
-!
-!  Standard atmosphere extension
-!* begining at ikup+1 level allows to use a model domain higher than 50km
-!
-IKUP   = IKE-JPVEXT+1
-!
-DO JK=IKUP+1,KFLEV+1
-  JK1 = (KSTATM-1)+(JK-IKUP)
-  ZPRES_HL(:,JK) = PSTATM(JK1,2)*100.0
-  ZT_HL(:,JK) = PSTATM(JK1,3)
-END DO
-!
-! vertical grid inversion for compatibility with ECMWF routines
-!
-ALLOCATE (ZWORK_GRID(SIZE(ZPRES_HL,1),KFLEV+1))
-!
-!half level pressure
-!
-ZWORK_GRID(:,:)=ZPRES_HL(:,:)
-DO JKRAD=1, KFLEV+1
-  JK1=(KFLEV+1)+1-JKRAD
-  ZPRES_HL(:,JKRAD) = ZWORK_GRID(:,JK1)
-END DO
-!
-!half level temperature
-!
-ZWORK_GRID(:,:)=ZT_HL(:,:)
-DO  JKRAD=1, KFLEV+1
-  JK1=(KFLEV+1)+1-JKRAD
-  ZT_HL(:,JKRAD)=ZWORK_GRID(:,JK1)
-END DO
-DEALLOCATE(ZWORK_GRID)
-!
-DO JKRAD=1,KFLEV
-  ZPAVE(:,JKRAD)=0.5*(ZPRES_HL(:,JKRAD)+ZPRES_HL(:,JKRAD+1))
-END DO
-!
-!coo geographique 
-!
-IF(.NOT.LCARTESIAN) THEN
-  DO JJ=IJB,IJE
-    DO JI=IIB,IIE
-      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
-      ZGEMU(IIJ) = SIN ( PLAT(JI,JJ) * XPI/180)  
-    END DO
-  END DO
-ELSE
-  ZGEMU(:) = SIN ( XLAT0 * XPI/180) 
-END IF
-!
-!*     8.2     OZONE climatology 
-!
-ALLOCATE (ZOZON(KDLON,KFLEV))
-!
-IF (LFIX_DAT ) THEN     ! Ajout PP 
- ZYMD = TPDTEXP%nyear * 1E4 + TPDTEXP%nmonth * 1E2 + TPDTEXP%nday
- ZHOURS = INT(TPDTEXP%xtime / 60.)
-ELSE
- ZYMD = TPDTCUR%nyear * 1E4 + TPDTCUR%nmonth * 1E2 + TPDTCUR%nday
- ZHOURS = INT(TPDTCUR%xtime / 60.)
-END IF
-!
-! Fortuin langematz climatology loading
-!
-CALL SUECOZC ( ZYMD , ZHOURS )
-!
-! Interpolation on the simulation domain
-!
-CALL RADOZC ( 1 , KDLON, KDLON , 1, KFLEV, 1 ,&
-     KDLON ,0,ZPRES_HL, ZGEMU,       &
-     ZOZON                         )
-!
-!*    8.3         AEROSOLS climatogy 
-!
-ALLOCATE (ZAER(KDLON, KFLEV,KAER))
-!
-IF(HAER /= 'NONE') THEN
-!
-!     8.3.1 horizontal ditributions   
+!* 8.1          Aerosols and Ozone climatologies
 !
-  ALLOCATE (ZAESEA(KDLON))
-  ALLOCATE (ZAELAN(KDLON))
-  ALLOCATE (ZAEURB(KDLON))
-  ALLOCATE (ZAEDES(KDLON))
-
-  ALLOCATE (ZAESEA_RAD(KDLON))
-  ALLOCATE (ZAELAN_RAD(KDLON))
-  ALLOCATE (ZAEURB_RAD(KDLON))
-  ALLOCATE (ZAEDES_RAD(KDLON))
-!
-! AEROSOLS ECMWF climatologies
-!
-  IF ( HAER =='TANR' .OR. HAER == 'TEGE' ) THEN
-    CALL INI_HOR_AERCLIM (HAER,IIB,IIE,IJB,IJE,KDLON,ZYMD,ZHOURS, &
-                          PLAT,PLON,ZAESEA,ZAELAN,ZAEURB,ZAEDES )
-  END IF
-!
-! AEROSOLS from SURFACE FRACTIONS
-!
-  IF( HAER =='SURF') THEN
+ALLOCATE (POZON(IIU,IJU,KFLEV))
+ALLOCATE (PAER(IIU,IJU,KFLEV,KAER))
 !
-    !* deserts are only considered over Africa, southern Asia, Australia
-    !* longitude between -180 and 180 for geographical tests
-    !  Only bare soil fractions larger than 0.5 are supposed to contribute to
-    !  desert aerosols
-    !
-    ALLOCATE(ZDESERT   (IIU,IJU))
-    ZDESERT(:,:) = 0.
-
-    IF (.NOT.LCARTESIAN) THEN
-      !* deserts are only considered over Africa, southern Asia, Australia
-      ALLOCATE(ZLON      (IIU,IJU))
-      ALLOCATE(GAFRICA   (IIU,IJU))
-      ALLOCATE(GASIA     (IIU,IJU))
-      ALLOCATE(GAUSTRALIA(IIU,IJU))    
-      !* longitude between -180 and 180 for geographical tests
-      ZLON = PLON(:,:) - NINT(PLON/360.)*360.
-      GAFRICA   (:,:) = PLAT(:,:) > -36.086389  .AND. PLAT(:,:) < 36.010556 &
-                  .AND. ZLON(:,:) > -73.18      .AND. ZLON(:,:) < 34.158611
-      GASIA     (:,:) = PLAT(:,:) > 4.358056    .AND. PLAT(:,:) < 55.335278 &
-                  .AND. ZLON(:,:) > -123.157778 .AND. ZLON(:,:) <-34.285556
-      GAUSTRALIA(:,:) = PLAT(:,:) > -39.561389  .AND. PLAT(:,:) < -10.251667 &
-                  .AND. ZLON(:,:) > -155.041944 .AND. ZLON(:,:) < -111.405556
-      !
-      !  Only bare soil fractions larger than 0.5 are supposed to contribute to
-      !  desert aerosols
-      !
-      WHERE (GAFRICA(:,:) .OR. GASIA(:,:) .OR. GAUSTRALIA(:,:)) &
-      ZDESERT(:,:) = MAX( 2.*(PBARE(:,:)-0.5) , 0.)
-      !
-      !
-    ELSE
-      !
-      ZDESERT(:,:) = MAX( 2.*(PBARE(:,:)-0.5) , 0.)
-      !
-    ENDIF
-    !
-    !* fills sea, town, desert and land surface covers for aerosols distributions
-    DO JJ=IJB,IJE
-      DO JI=IIB,IIE
-        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
-        ZAESEA(IIJ) = PSEA(JI,JJ)
-        ZAEURB(IIJ) = PTOWN(JI,JJ)
-        ZAEDES(IIJ) = ZDESERT(JI,JJ)
-        ZAELAN(IIJ) = MAX( 1.- ZAESEA(IIJ) - ZAEURB(IIJ) - ZAEDES(IIJ) , 0.)
-      END DO
-    END DO
-    IF (ALLOCATED(ZLON)) DEALLOCATE(ZLON)
-    IF (ALLOCATED(GAFRICA))     DEALLOCATE(GAFRICA)
-    IF (ALLOCATED(GASIA))     DEALLOCATE(GASIA)
-    IF (ALLOCATED(GAUSTRALIA))     DEALLOCATE(GAUSTRALIA)
-    IF (ALLOCATED(ZDESERT))     DEALLOCATE(ZDESERT)
-
-  END IF
+CALL AEROZON(PPABST,PTHT,PTSRAD,PLAT,PLON,TPDTCUR,TPDTEXP,         &
+         KDLON,KFLEV,HAER,KAER,KSTATM,                             &
+         ZSINDEL,ZCOSDEL,ZTSIDER,ZCORSOL,                          &
+         PSTATM,POZON, PAER)
 !
-!     8.3.2 vertical ditributions (standard profiles derived from Tanre)
-!
-  ALLOCATE (ZCVDAES(KDLON,KFLEV+1))
-  ALLOCATE (ZCVDAEL(KDLON,KFLEV+1))
-  ALLOCATE (ZCVDAEU(KDLON,KFLEV+1))
-  ALLOCATE (ZCVDAED(KDLON,KFLEV+1))
-  DO JL=1,KDLON
-    ZETAH(JL,:)=ZPRES_HL(JL,:)/101300. ! reference pressure for normalisation
-  END DO
-  WHERE (ZETAH (:,:) > 1.)
-    ZETAH(:,:)=1.
-  END WHERE
-!
-! set up of vertical ditribution parameters
-  CALL SUAERV ( KDLON, KFLEV   , ZETAH, &
-        ZCVDAES ,ZCVDAEL ,ZCVDAEU ,ZCVDAED, &
-        RCTRBGA,RCVOBGA,RCSTBGA,RCAEOPS,RCAEOPL,RCAEOPU,&
-        RCAEOPD,RCTRPT ,RCAEADK,RCAEADM,RCAEROS )
-!  
-! modification of initial ECMWF maximum optical thickness 
-! for aerosols classes in case of HAER=SURF
-! note : these variables belongs to yoeaerd module   
-!
-  IF ( HAER =='SURF') THEN
-     RCAEOPS = 0.001 ! Sea instead 0.02 to agree with TEGEN
-     RCAEOPL = 0.05  ! Land (continental)
-     RCAEOPU = 0.3   ! Urban zone
-     RCAEOPD = 0.5   ! Desert
-  END IF
 !
-! final aerosol profiles on mnh grid
-!
-  ZAESEA_RAD = ZAESEA ; ZAELAN_RAD = ZAELAN ; ZAEURB_RAD = ZAEURB ; ZAEDES_RAD = ZAEDES
-  CALL RADAER (1, KDLON, KDLON, 1, KFLEV, ZPRES_HL,ZT_HL, &
-       ZCVDAES ,ZCVDAEL ,ZCVDAEU ,ZCVDAED, &
-       ZAESEA_RAD, ZAELAN_RAD, ZAEURB_RAD, ZAEDES_RAD, &
-       ZAER )
-!
-!!- VOLCANIC AEROSOL SET TO epsilon IN ABSENCE OF ERUPTION 
-  ZAER(:,:,5) = 1.E-12
-!
-  DEALLOCATE (ZCVDAES)
-  DEALLOCATE (ZCVDAEL)
-  DEALLOCATE (ZCVDAEU)
-  DEALLOCATE (ZCVDAED)
-  DEALLOCATE (ZAESEA)
-  DEALLOCATE (ZAELAN)
-  DEALLOCATE (ZAEURB)
-  DEALLOCATE (ZAEDES)
-
-  DEALLOCATE (ZAESEA_RAD)
-  DEALLOCATE (ZAELAN_RAD)
-  DEALLOCATE (ZAEURB_RAD)
-  DEALLOCATE (ZAEDES_RAD)
-ELSE
-  ZAER(:,:,:)= 1E-12
-END IF
+!-------------------------------------------------------------------------------
 !
-!* 8.4              Adaptation on mnh domain
+!* 8.4              Dusts
 !
-ALLOCATE (POZON(IIU,IJU,KFLEV))
-ALLOCATE (PAER(IIU,IJU,KFLEV,KAER))
 ALLOCATE (PDST_WL(IIU,IJU,KFLEV,KSWB))
 !
-POZON (:,:,:)=0.
-PAER (:,:,:,:)=0.
 PDST_WL (:,:,:,:)=0.
 !
-DO JJ=IJB,IJE
-  DO JI=IIB,IIE
-    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
-    DO JKRAD=1,KFLEV      
-      JK1 = KFLEV +1 -JKRAD
-      POZON (JI,JJ,JKRAD) = ZOZON (IIJ,JK1)
-      PAER  (JI,JJ,JKRAD,:) = ZAER (IIJ,JK1,:)
-    END DO
-  END DO
-END DO
 !
 !        Read in look up tables of dust optical properties
 !No arguments, all look up tables are defined in module
@@ -727,13 +453,6 @@ IF ( LSALT .AND. CAOP=='EXPL' ) THEN
 END IF
 !
 CALL INI_CONS_PROP_OP
-DEALLOCATE (ZPRES_HL) 
-DEALLOCATE (ZPAVE)
-DEALLOCATE (ZT_HL)
-DEALLOCATE (ZETAH)
-DEALLOCATE (ZGEMU)
-DEALLOCATE (ZOZON)
-DEALLOCATE (ZAER)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_radiations_ecrad.f90 b/src/MNH/ini_radiations_ecrad.f90
index 7c9349afeb1656c871411d9b57f8d9c34ffa569d..5e3c184b1f03effecd772acfcce3b7ad0609d115 100644
--- a/src/MNH/ini_radiations_ecrad.f90
+++ b/src/MNH/ini_radiations_ecrad.f90
@@ -12,7 +12,7 @@ INTERFACE
     SUBROUTINE INI_RADIATIONS_ECRAD(                                   &
          PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,    &
          HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB_OLD, HAER, KAER, KSTATM, &
-         PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND  )
+         PSTATM, POZON, PAER, PDST_WL, OSUBG_COND                      )
 !
 USE MODD_TYPE_DATE
 
@@ -23,9 +23,6 @@ REAL, DIMENSION(:),     INTENT(IN) :: PZHAT ! height level without orography
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST! pressure
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT  !Temperature
 REAL, DIMENSION(:,:),   INTENT(IN) :: PTSRAD ! surface radiative temperature
-REAL, DIMENSION (:,:),  INTENT(IN) :: PSEA   ! sea fraction
-REAL, DIMENSION (:,:),  INTENT(IN) :: PTOWN  ! town fraction
-REAL, DIMENSION (:,:),  INTENT(IN) :: PBARE  ! bare soil fraction
 REAL, DIMENSION(:,:),   INTENT(IN) :: PLAT, PLON ! arrays of latitude-longitude
 !
 TYPE (DATE_TIME),       INTENT(IN) :: TPDTCUR    ! Current date and time
@@ -61,7 +58,7 @@ END MODULE MODI_INI_RADIATIONS_ECRAD
     SUBROUTINE INI_RADIATIONS_ECRAD(                                   &
          PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,    &
          HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB_OLD, HAER, KAER, KSTATM, &
-         PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND  )
+         PSTATM, POZON, PAER, PDST_WL, OSUBG_COND                      )
 !   ####################################################################
 !
 ! INI_RADIATIONS_ECRAD - Initialization of ECRAD code
@@ -121,9 +118,6 @@ REAL, DIMENSION(:),     INTENT(IN) :: PZHAT ! height level without orography
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST! pressure
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT  !Temperature
 REAL, DIMENSION(:,:),   INTENT(IN) :: PTSRAD ! surface radiative temperature
-REAL, DIMENSION (:,:),  INTENT(IN) :: PSEA   ! sea fraction
-REAL, DIMENSION (:,:),  INTENT(IN) :: PTOWN  ! town fraction
-REAL, DIMENSION (:,:),  INTENT(IN) :: PBARE  ! bare soil fraction
 REAL, DIMENSION(:,:),   INTENT(IN) :: PLAT, PLON ! arrays of latitude-longitude
 !
 TYPE (DATE_TIME),       INTENT(IN) :: TPDTCUR    ! Current date and time
@@ -156,7 +150,7 @@ NULOUT = TLUOUT%NLU
 CALL INI_RADIATIONS_ECMWF(                                                               &
                            PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,    &
                            HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB_OLD, HAER, KAER, KSTATM, &
-                           PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND  )
+                           PSTATM, POZON, PAER, PDST_WL, OSUBG_COND                      )
 
 ! ECRAD specific variables
 
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index 98a316851fc4b5d21ca797b02b3275da6c87069f..f7f5ea11509566967e1b757bdbfc4cb0b333721b 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -324,7 +324,7 @@ CALL DEFAULT_DESFM_n(KMI)
 !*       3.    READ INITIAL FILE NAME AND OPEN INITIAL FILE
 !              --------------------------------------------
 !
-CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND)
+CALL POSNAM( TZFILE_DES, 'NAM_LUNITN', GFOUND )
 IF (GFOUND) THEN
   CALL INIT_NAM_LUNITn
   READ(UNIT=ILUSEG,NML=NAM_LUNITn)
@@ -337,9 +337,9 @@ END IF
 
 IF (CPROGRAM=='MESONH') THEN
    IF (KMI.EQ.1) THEN
-      CALL POSNAM(ILUSEG,'NAM_CONFZ',GFOUND,ILUOUT)
+      CALL POSNAM( TZFILE_DES, 'NAM_CONFZ', GFOUND )
       IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ)
-      CALL POSNAM(ILUSEG,'NAM_CONFIO',GFOUND,ILUOUT)
+      CALL POSNAM( TZFILE_DES, 'NAM_CONFIO', GFOUND )
       IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFIO)
       CALL IO_Config_set()
    END IF
diff --git a/src/MNH/init_salt.f90 b/src/MNH/init_salt.f90
index ab14998b35e89dc56ce1e4b224b74877ce471401..bb99ab50f8e781aa38ef3af7ddf7cb790406ad9b 100644
--- a/src/MNH/init_salt.f90
+++ b/src/MNH/init_salt.f90
@@ -45,7 +45,7 @@ XINIRADIUS_SLT=  (/0.009, 0.021, 0.045, 0.115, 0.415,2.5, 7.0, 25.0/)
 !Initial, standard deviation from  Ova et al., 2014
 XINISIG_SLT =  (/ 1.37, 1.5, 1.42, 1.53, 1.85,1.7, 1.8, 2.1 /)
 !Minimum allowed number concentration for any mode (#/m3)
-XN0MIN_SLT  = (/1.e1 , 1.e1, 1.e1, 1., 1.e-4,1.e-20 , 1.e-20, 1.e-20 /)
+XN0MIN_SLT  = (/1.e1 , 1.e1, 1.e1, 1., 1.e-4, 1.e-5, 1.e-6, 1.e-7 /)
 
 ELSE IF ( NMODE_SLT == 3) THEN
 
diff --git a/src/MNH/latlon_to_xy.f90 b/src/MNH/latlon_to_xy.f90
index 98b134a36a1cf7e21a18a8cb4c49a3627e5f8490..ae3cfb6cabf936316edb62b8075f01839b07b4c8 100644
--- a/src/MNH/latlon_to_xy.f90
+++ b/src/MNH/latlon_to_xy.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 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.
@@ -147,16 +147,14 @@ CALL IO_File_add2list(TZNMLFILE,'LATLON2XY1.nam','NML','READ')
 CALL IO_File_open(TZNMLFILE)
 INAM=TZNMLFILE%NLU
 !
-CALL POSNAM(INAM,'NAM_INIFILE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_INIFILE', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=INAM,NML=NAM_INIFILE)
-  PRINT*, '  namelist NAM_INIFILE read'
 END IF
 !
-CALL POSNAM(INAM,'NAM_CONFIO',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=INAM,NML=NAM_CONFIO)
-  PRINT*, '  namelist NAM_CONFIO read'
 END IF
 !
 CALL IO_Config_set()
diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90
index deb8dda2312cc5000d28482412cf5e4695292e0d..7a37fde0fe1a5c05c86da90720d933ea9b6a0011 100644
--- a/src/MNH/mnh2lpdm.f90
+++ b/src/MNH/mnh2lpdm.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2023 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.
@@ -113,7 +113,7 @@ READ(UNIT=IFNML,NML=NAM_TURB)
 READ(UNIT=IFNML,NML=NAM_FIC)
 print *,'Lecture de NAM_FIC OK.'
 
-CALL POSNAM(IFNML,'NAM_CONFIO',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=IFNML,NML=NAM_CONFIO)
 END IF
diff --git a/src/MNH/modd_allprofilern.f90 b/src/MNH/modd_allprofilern.f90
index fd7cd8eb21b2e5938cb4f72068f2cfe466e72c65..176c5560f14d458f5e7f09bf68aec00432563029 100644
--- a/src/MNH/modd_allprofilern.f90
+++ b/src/MNH/modd_allprofilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2021-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2021-2023 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.
@@ -44,7 +44,7 @@ IMPLICIT NONE
 PRIVATE
 
 PUBLIC :: NNUMB_PROF, XSTEP_PROF, XX_PROF, XY_PROF, XLAT_PROF, XLON_PROF, XZ_PROF
-PUBLIC :: CNAME_PROF, CFILE_PROF !, LDIAG_SURFRAD
+PUBLIC :: CNAME_PROF, CFILE_PROF, LDIAG_SURFRAD_PROF
 
 PUBLIC :: ALLPROFILER_GOTO_MODEL
 
@@ -58,7 +58,7 @@ TYPE ALLPROFILER_t
   CHARACTER(LEN=NSTATPROFNAMELGTMAX), DIMENSION(100) :: CNAME_PROF
   CHARACTER(LEN=NFILENAMELGTMAX)   :: CFILE_PROF
   REAL                             :: XSTEP_PROF
-!  LOGICAL                          :: LDIAG_SURFRAD
+  LOGICAL                          :: LDIAG_SURFRAD_PROF
   !
 !
 END TYPE ALLPROFILER_t
@@ -74,7 +74,7 @@ REAL, DIMENSION(:), POINTER                  :: XLON_PROF=>NULL()
 REAL, DIMENSION(:), POINTER                  :: XZ_PROF=>NULL()
 CHARACTER (LEN=NSTATPROFNAMELGTMAX),DIMENSION(:), POINTER :: CNAME_PROF=>NULL()
 CHARACTER (LEN=NFILENAMELGTMAX),POINTER      :: CFILE_PROF=>NULL()
-!LOGICAL, POINTER                             :: LDIAG_SURFRAD=>NULL()
+LOGICAL, POINTER                             :: LDIAG_SURFRAD_PROF => NULL()
 CONTAINS
 
 SUBROUTINE ALLPROFILER_GOTO_MODEL(KFROM, KTO)
@@ -93,7 +93,7 @@ XLAT_PROF     =>ALLPROFILER_MODEL(KTO)%XLAT_PROF
 XLON_PROF     =>ALLPROFILER_MODEL(KTO)%XLON_PROF
 CNAME_PROF    =>ALLPROFILER_MODEL(KTO)%CNAME_PROF
 CFILE_PROF    =>ALLPROFILER_MODEL(KTO)%CFILE_PROF
-!LDIAG_SURFRAD =>ALLPROFILER_MODEL(KTO)%LDIAG_SURFRAD
+LDIAG_SURFRAD_PROF =>ALLPROFILER_MODEL(KTO)%LDIAG_SURFRAD_PROF
 END SUBROUTINE ALLPROFILER_GOTO_MODEL
 
 END MODULE MODD_ALLPROFILER_n
diff --git a/src/MNH/modd_allstationn.f90 b/src/MNH/modd_allstationn.f90
index 4fe0a7be7e95b4677d7a9dd3f4752d996ace1d7a..463e5a811a2d7361b4bf0d07d51b9ce1a4e71515 100644
--- a/src/MNH/modd_allstationn.f90
+++ b/src/MNH/modd_allstationn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2021-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2021-2023 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.
@@ -43,7 +43,7 @@ IMPLICIT NONE
 PRIVATE
 
 PUBLIC :: NNUMB_STAT, XSTEP_STAT, XX_STAT, XY_STAT, XLAT_STAT, XLON_STAT, XZ_STAT
-PUBLIC :: CNAME_STAT, CFILE_STAT, LDIAG_SURFRAD
+PUBLIC :: CNAME_STAT, CFILE_STAT, LDIAG_SURFRAD_STAT
 
 PUBLIC :: ALLSTATION_GOTO_MODEL
 
@@ -57,7 +57,7 @@ TYPE ALLSTATION_t
   CHARACTER(LEN=NSTATPROFNAMELGTMAX), DIMENSION(100) :: CNAME_STAT
   CHARACTER(LEN=NFILENAMELGTMAX)   :: CFILE_STAT
   REAL                             :: XSTEP_STAT
-  LOGICAL                          :: LDIAG_SURFRAD
+  LOGICAL                          :: LDIAG_SURFRAD_STAT
   !
 !
 END TYPE ALLSTATION_t
@@ -73,7 +73,7 @@ REAL, DIMENSION(:), POINTER                  :: XLON_STAT=>NULL()
 REAL, DIMENSION(:), POINTER                  :: XZ_STAT=>NULL()
 CHARACTER (LEN=NSTATPROFNAMELGTMAX),DIMENSION(:), POINTER :: CNAME_STAT=>NULL()
 CHARACTER (LEN=NFILENAMELGTMAX),POINTER      :: CFILE_STAT=>NULL()
-LOGICAL, POINTER                             :: LDIAG_SURFRAD=>NULL()
+LOGICAL, POINTER                             :: LDIAG_SURFRAD_STAT=>NULL()
 CONTAINS
 
 SUBROUTINE ALLSTATION_GOTO_MODEL(KFROM, KTO)
@@ -92,7 +92,7 @@ XLAT_STAT     =>ALLSTATION_MODEL(KTO)%XLAT_STAT
 XLON_STAT     =>ALLSTATION_MODEL(KTO)%XLON_STAT
 CNAME_STAT    =>ALLSTATION_MODEL(KTO)%CNAME_STAT
 CFILE_STAT    =>ALLSTATION_MODEL(KTO)%CFILE_STAT
-LDIAG_SURFRAD =>ALLSTATION_MODEL(KTO)%LDIAG_SURFRAD
+LDIAG_SURFRAD_STAT =>ALLSTATION_MODEL(KTO)%LDIAG_SURFRAD_STAT
 END SUBROUTINE ALLSTATION_GOTO_MODEL
 
 END MODULE MODD_ALLSTATION_n
diff --git a/src/PHYEX/turb/modd_diag_in_run.f90 b/src/MNH/modd_diag_in_run.f90
similarity index 93%
rename from src/PHYEX/turb/modd_diag_in_run.f90
rename to src/MNH/modd_diag_in_run.f90
index 6f9829570ec8a9f75685491317b5adc86b18e623..854a980048bcd3a877f6de900bb55febb176f91a 100644
--- a/src/PHYEX/turb/modd_diag_in_run.f90
+++ b/src/MNH/modd_diag_in_run.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2023 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.
@@ -34,5 +34,5 @@ REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_DSTAOD! dust aerosol optical dep
 REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_SFCO2    ! CO2 Surface flux
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: XCURRENT_TKE_DISS ! Tke dissipation rate
 REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_SLTAOD   ! Salt aerosol optical depth
-REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_ZWS      ! Significant height of waves
+! REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_ZWS      ! Significant height of waves
 END MODULE MODD_DIAG_IN_RUN
diff --git a/src/MNH/modd_dust.f90 b/src/MNH/modd_dust.f90
index 540de108e225683892178339a0ca054f7064f0c2..2f2a7dca2de875bddd3dd308f7aa875cc26c8d21 100644
--- a/src/MNH/modd_dust.f90
+++ b/src/MNH/modd_dust.f90
@@ -100,7 +100,7 @@ REAL, DIMENSION(3)          :: XINIRADIUS= 0.5*(/0.078, 0.641, 5.00 /)
 !Initial, standard deviation from Alfaro et al 1998
 REAL, DIMENSION(3)          :: XINISIG =  (/1.75, 1.76, 1.70/)
 !Minimum allowed number concentration for any mode (#/m3)
-REAL, DIMENSION(3)          :: XN0MIN  = (/1.e3 , 1.e1 , 1.e-2 /)
+REAL, DIMENSION(3)          :: XN0MIN  = (/1.e1 , 1.e-1 , 1.e-4 /)
 CHARACTER(LEN=9),DIMENSION(:),ALLOCATABLE :: CDEDSTNAMES
 CHARACTER(LEN=9),DIMENSION(6), PARAMETER  :: YPDEDST_INI = &
      (/'DEDSTM31C','DEDSTM32C','DEDSTM33C' &
diff --git a/src/MNH/modd_salt.f90 b/src/MNH/modd_salt.f90
index e111b15db085287e012c5afaf137f9be3bd03185..c8ebbebd09a3525e588a3ce3b226f22ac60aaa44 100644
--- a/src/MNH/modd_salt.f90
+++ b/src/MNH/modd_salt.f90
@@ -83,7 +83,7 @@ REAL,DIMENSION(8)    :: XINIRADIUS_SLT=  (/0.009, 0.021, 0.045, 0.115,0.415,2.5,
 REAL,DIMENSION(8)      :: XINISIG_SLT =  (/ 1.37, 1.5, 1.42, 1.53, 1.85,1.7,1.8, 2.9 /)
 
 !Minimum allowed number concentration for any mode (#/m3)
-REAL,DIMENSION(8)  :: XN0MIN_SLT  = (/1.e1 , 1.e1, 1.e1, 1., 1.e-4,1.e-20, 1.e-20,1.e-20 /)
+REAL,DIMENSION(8)  :: XN0MIN_SLT  = (/1.e1 , 1.e1, 1.e1, 1., 1.e-4,1.e-5, 1.e-6,1.e-7 /)
 !Test Thomas
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: XSLTMSS   ! [kg/m3] total mass concentration of sea salt
 !
diff --git a/src/MNH/modd_type_statprof.f90 b/src/MNH/modd_type_statprof.f90
index 747825bd728d0e725e57119a87bb835823074198..c113913dea706432d942f5f630cc7fd9e4327796 100644
--- a/src/MNH/modd_type_statprof.f90
+++ b/src/MNH/modd_type_statprof.f90
@@ -84,15 +84,20 @@ TYPE :: TSTATPROFDATA
   REAL, DIMENSION(:),   ALLOCATABLE :: XHU2M   ! 2 m relative humidity (%)
   REAL, DIMENSION(:),   ALLOCATABLE :: XZON10M ! 10 m zonal wind (m/s)
   REAL, DIMENSION(:),   ALLOCATABLE :: XMER10M ! 10 m merid. wind (m/s)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XRN     ! net radiation (W m2)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XH      ! sensible heat flux (W m2)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XLE     ! Total latent heat flux (W m2)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XLEI    ! Solid latent heat flux (W m2)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XGFLUX  ! storage heat flux (W m2)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XSWD    ! IR downward radiation (W m2)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XSWU    ! IR upward radiation (W m2)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XLWD    ! solar downward radiation (W m2)
-  REAL, DIMENSION(:),   ALLOCATABLE :: XLWU    ! solar upward radiation (W m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XRN     ! net radiation (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XH      ! sensible heat flux (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XLE     ! Total latent heat flux (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XLEI    ! Solid latent heat flux (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XGFLUX  ! storage heat flux (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XSWD    ! IR downward radiation (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XSWU    ! IR upward radiation (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XLWD    ! solar downward radiation (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XLWU    ! solar upward radiation (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XSWDIR  ! IR downward direct radiation (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XSWDIFF ! IR downward diffuse radiation (W/m2)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XDSTAOD ! Dust Aerosol Optical Depth (m)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XSLTAOD ! Salt Aerosol Optical Depth (m)
+  REAL, DIMENSION(:),   ALLOCATABLE :: XSFCO2  ! CO2 surface flux (mg/m2/s)
 END TYPE
 
 TYPE, EXTENDS( TSTATPROFDATA ) ::  TSTATIONDATA
@@ -112,11 +117,6 @@ TYPE, EXTENDS( TSTATPROFDATA ) ::  TSTATIONDATA
   REAL, DIMENSION(:,:), ALLOCATABLE :: XR      ! r*(n)
   REAL, DIMENSION(:,:), ALLOCATABLE :: XSV     ! Sv*(n)
   REAL, DIMENSION(:),   ALLOCATABLE :: XTSRAD  ! Ts(n)
-
-  REAL, DIMENSION(:),   ALLOCATABLE :: XSWDIR
-  REAL, DIMENSION(:),   ALLOCATABLE :: XSWDIFF
-  REAL, DIMENSION(:),   ALLOCATABLE :: XDSTAOD ! Dust Aerosol Optical Depth
-  REAL, DIMENSION(:),   ALLOCATABLE :: XSFCO2  ! CO2 surface flux
 END TYPE TSTATIONDATA
 
 TYPE, EXTENDS( TSTATPROFDATA ) ::  TPROFILERDATA
diff --git a/src/MNH/mode_aero_psd.f90 b/src/MNH/mode_aero_psd.f90
index d5d72fd29799702f2504a7badf56c22b208b1800..f03bdfcee1b9b84623a350d908857a96eff8ec4d 100644
--- a/src/MNH/mode_aero_psd.f90
+++ b/src/MNH/mode_aero_psd.f90
@@ -101,6 +101,7 @@ REAL                                 :: ZDEN2MOL
 REAL,DIMENSION(JPMODE*3)             :: ZPMIN               ! [aerosol units] minimum values for N, sigma, M
 INTEGER                              :: JI,JJ,JK,JSV, JN              ! [idx] loop counters
 REAL    :: ZINIRADIUSI, ZINIRADIUSJ
+INTEGER :: II,IJ,IK
 !
 !-------------------------------------------------------------------------------
 !
@@ -253,6 +254,7 @@ END IF
 !
 !*       5    set moment 6  ==> um6_{aer}/m3_{air}
 !
+
 IF (LVARSIGI) THEN ! set M6 variable standard deviation
   IF ((CPROGRAM=="REAL  ").OR.(CPROGRAM=="IDEAL ")) THEN
   ZM(:,:,:,3)= ZM(:,:,:,1) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2)
@@ -328,6 +330,7 @@ DO JN=1,JPMODE
 
 ENDDO
 !
+
 IF(PRESENT(PCTOTA)) PCTOTA(:,:,:,:,:) = ZCTOTA(:,:,:,:,:)
 IF(PRESENT(PM3D)) PM3D(:,:,:,:) = ZM(:,:,:,:)
 !
@@ -463,7 +466,9 @@ ENDDO
   ZCTOTA(:,:,:,JP_AER_SOA10,1) = PSVT(:,:,:,JP_CH_SOA10i)
   ZCTOTA(:,:,:,JP_AER_SOA10,2) = PSVT(:,:,:,JP_CH_SOA10j)
   END IF
-  ZCTOTA(:,:,:,:,:) = MAX(ZCTOTA(:,:,:,:,:),XMNH_TINY)
+  ZCTOTA(:,:,:,:,1) = MAX(ZCTOTA(:,:,:,:,1),1E-6)
+  ZCTOTA(:,:,:,:,2) = MAX(ZCTOTA(:,:,:,:,2),1E-4)
+
 
 !
 !*       3    calculate moment 3 from total aerosol mass
@@ -547,8 +552,6 @@ IF (LVARSIGJ) PSVT(:,:,:,JP_CH_M6j) = ZM(:,:,:,6)
 DO JJ=1,SIZE(PSVT,4)
   PSVT(:,:,:,JJ) =  PSVT(:,:,:,JJ) / (ZDEN2MOL * PRHODREF(:,:,:))
 ENDDO
-
-
 END SUBROUTINE CON2MIX
 
 !   ############################################################
diff --git a/src/MNH/mode_pos.f90 b/src/MNH/mode_pos.f90
index 09a2ca12ee8467375b1784743768c89c72e14e98..1a8344973bc1ae797242feb6205c49603f716d8f 100644
--- a/src/MNH/mode_pos.f90
+++ b/src/MNH/mode_pos.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1993-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1993-2023 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.
@@ -12,9 +12,9 @@ implicit none
 !!
 CONTAINS
 !!
-!!    ##############################################
-      SUBROUTINE POSNAM(KULNAM,HDNAML,OFOUND,KLUOUT)
-!!    ##############################################
+!!    ###########################################
+      SUBROUTINE POSNAM( TPFILE, HDNAML, OFOUND )
+!!    ###########################################
 !!
 !!*** *POSNAM*
 !!
@@ -45,72 +45,102 @@ CONTAINS
 !!       Original : 22/06/93
 !!       I. Mallet  15/10/01     adaptation to MesoNH (F90 norm)
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 05/04/2023: POSNAM: modernisation + improvements
 !------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
+USE MODD_IO,    ONLY: TFILEDATA
+
+USE MODE_MSG
+USE MODE_TOOLS, ONLY: Upcase
 !
 !*       0.1   Declarations of arguments
 !
-INTEGER,          INTENT(IN) :: KULNAM
+TYPE(TFILEDATA),  INTENT(IN) :: TPFILE
 CHARACTER(LEN=*), INTENT(IN) :: HDNAML
 LOGICAL,          INTENT(OUT):: OFOUND
-INTEGER, OPTIONAL,INTENT(IN) :: KLUOUT
 !
 !*       0.2   Declarations of local variables
 !
-CHARACTER(LEN=120) :: YLINE
-CHARACTER(LEN=1)   :: YLTEST
-INTEGER            :: ILEN,ILEY,IND1,IRET
-INTEGER            :: J,JA
-!
-CHARACTER(LEN=1),DIMENSION(26) :: YLO=(/'a','b','c','d','e','f','g','h', &
-     'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'/)
-CHARACTER(LEN=1),DIMENSION(26) :: YUP=(/'A','B','C','D','E','F','G','H', &
-     'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'/)
-!
-!*       1.    POSITION FILE
-!              -------------
-!
-REWIND(KULNAM)
-ILEN=LEN(HDNAML)
-IRET = 0
-!
+CHARACTER(LEN=100)            :: YERRORMSG
+CHARACTER(LEN=120)            :: YLINE
+CHARACTER(LEN=1)              :: YLTEST
+CHARACTER(LEN=:), ALLOCATABLE :: YDNAML
+INTEGER                       :: ILU
+INTEGER                       :: ILEN, IND1, IRET
+INTEGER                       :: IVERBLVL
+
+
+OFOUND = .FALSE.
+
+IF ( .NOT.TPFILE%LOPENED ) THEN
+  call Print_msg( NVERB_ERROR, 'IO', 'POSNAM', Trim( TPFILE%CNAME ) // ' not opened' )
+  RETURN
+END IF
+
+ILU = TPFILE%NLU
+
+IF ( TPFILE%CTYPE == 'DES' ) THEN
+  IVERBLVL = NVERB_DEBUG
+ELSE IF ( TPFILE%CTYPE == 'NML' ) THEN
+  IVERBLVL = NVERB_INFO
+ELSE
+  ! Check if there is an associated .des file
+  ! and use it if available
+  IF ( ASSOCIATED( TPFILE%TDESFILE ) ) THEN
+    IVERBLVL = NVERB_DEBUG
+    IF ( .NOT.TPFILE%TDESFILE%LOPENED ) THEN
+      call Print_msg( NVERB_ERROR, 'IO', 'POSNAM', Trim( TPFILE%TDESFILE%CNAME ) // ' not opened' )
+      RETURN
+    END IF
+    ILU = TPFILE%TDESFILE%NLU
+  ELSE
+    IVERBLVL = NVERB_INFO
+    call Print_msg( NVERB_WARNING, 'IO', 'POSNAM', Trim( TPFILE%CNAME ) &
+                    // ': unexpected filetype: ' // Trim( TPFILE%CTYPE ) )
+  END IF
+END IF
+
+REWIND( ILU )
+
+ILEN = LEN( HDNAML )
+ALLOCATE( CHARACTER(LEN=ILEN) :: YDNAML )
+YDNAML = Upcase( HDNAML ) ! Force namelist name into upper case (read namelist name will also be upcased)
+
 search_nam : DO
-      YLINE=' '
-      READ(UNIT=KULNAM,FMT='(A)',IOSTAT=IRET,END=100) YLINE
-      IF (IRET /=0 ) THEN
-        IF (PRESENT(KLUOUT)) &
-         WRITE(KLUOUT,FMT=*) '-> error reading from unit',KULNAM,' line ',YLINE
-      ELSE   
-        ILEY=LEN(YLINE)
-        DO J=1,ILEY
-          DO JA=1,26
-            IF (YLINE(J:J)==YLO(JA)) YLINE(J:J)=YUP(JA) 
-          END DO
-        END DO
-        IND1=INDEX(YLINE,'&'//HDNAML)
-        IF(IND1.NE.0) THEN
-          YLTEST=YLINE(IND1+ILEN+1:IND1+ILEN+1)
-          !IF((LLT(YLTEST,'0').OR.LGT(YLTEST,'9')).AND. &
-          !   (LLT(YLTEST,'A').OR.LGT(YLTEST,'Z'))) EXIT search_nam
-          IF(YLTEST == ' ') EXIT search_nam
-        ENDIF
-      ENDIF
-ENDDO search_nam
-!
-BACKSPACE(KULNAM)
-OFOUND=.TRUE.
-IF (PRESENT(KLUOUT)) WRITE(KLUOUT,FMT=*) '-- namelist ',HDNAML,' read'
-!
+  READ ( UNIT=ILU, FMT='(A)', IOSTAT=IRET, IOMSG=YERRORMSG, END=100 ) YLINE
+  IF (IRET /= 0 ) THEN
+    call Print_msg( NVERB_ERROR, 'IO', 'POSNAM', 'read error:' // Trim( YERRORMSG ) )
+  ELSE
+    YLINE = Upcase( YLINE )
+    IND1 = INDEX( YLINE, '&'//YDNAML )
+    IF( IND1 /= 0 ) THEN
+      IF( IND1 > 1 ) THEN
+        IF ( LEN_TRIM( YLINE(:IND1-1) ) /= 0 ) THEN
+          ! Check that it is really the beginning of a namelist and that is not a comment
+          ! Nothing but spaces is allowed here
+          call Print_msg( NVERB_DEBUG, 'IO', 'POSNAM', 'invalid header or commented namelist: ' // Trim ( YLINE) )
+          CYCLE
+        END IF
+      END IF
+      YLTEST = YLINE(IND1+ILEN+1:IND1+ILEN+1)
+      IF( YLTEST == ' ' ) EXIT search_nam
+    END IF
+  END IF
+END DO search_nam
+
+BACKSPACE( ILU )
+OFOUND = .TRUE.
+call Print_msg( IVERBLVL, 'IO', 'POSNAM', Trim( TPFILE%CNAME ) // ': namelist ' // Trim( HDNAML ) // ' found' )
+
 RETURN
-!
+
 ! end of file: namelist name not found
 100  CONTINUE
-OFOUND=.FALSE.
-IF (PRESENT(KLUOUT)) &
-WRITE(KLUOUT,FMT=*)  &
-'-- namelist ',HDNAML,' not found: default values used if required'
+call Print_msg( IVERBLVL, 'IO', 'POSNAM', Trim( TPFILE%CNAME ) // ': namelist ' // Trim( HDNAML ) &
+                 // ' not found: default values used if required' )
+
 !------------------------------------------------------------------
 END SUBROUTINE POSNAM
 !!
diff --git a/src/MNH/modn_profilern.f90 b/src/MNH/modn_profilern.f90
index d050fddcf48abb54547f69c42a1180a4321397ee..c5e398416461974c92211d6ab8d3a99f8cda196f 100644
--- a/src/MNH/modn_profilern.f90
+++ b/src/MNH/modn_profilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2020-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2020-2023 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.
@@ -35,8 +35,8 @@ USE MODD_ALLPROFILER_n, ONLY:&
         XLON_PROF_n     =>XLON_PROF     ,&
         XZ_PROF_n       =>XZ_PROF       ,&
         CNAME_PROF_n    =>CNAME_PROF    ,&
-        CFILE_PROF_n    =>CFILE_PROF    !,&
-!         LDIAG_SURFRAD_n =>LDIAG_SURFRAD
+        CFILE_PROF_n    =>CFILE_PROF    ,&
+        LDIAG_SURFRAD_n =>LDIAG_SURFRAD_PROF
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX, NSTATPROFNAMELGTMAX
 !
 !-----------------------------------------------------------------------------
@@ -51,14 +51,14 @@ REAL                             ,SAVE:: XSTEP_PROF
 REAL, DIMENSION(100)             ,SAVE:: XX_PROF, XY_PROF, XZ_PROF, XLAT_PROF, XLON_PROF
 CHARACTER (LEN=NSTATPROFNAMELGTMAX), DIMENSION(100),SAVE:: CNAME_PROF
 CHARACTER (LEN=NFILENAMELGTMAX),                   SAVE:: CFILE_PROF              !filename
-! LOGICAL                          ,SAVE:: LDIAG_SURFRAD
+LOGICAL                          ,SAVE:: LDIAG_SURFRAD
 
 NAMELIST /NAM_PROFILERn/  &
      NNUMB_PROF, XSTEP_PROF, &
      XX_PROF,XY_PROF,XZ_PROF,&
      XLON_PROF,XLAT_PROF,&
      CNAME_PROF,&
-     CFILE_PROF !,LDIAG_SURFRAD
+     CFILE_PROF, LDIAG_SURFRAD
      
 !
 CONTAINS
@@ -73,7 +73,7 @@ SUBROUTINE INIT_NAM_PROFILERn
   XZ_PROF      = XZ_PROF_n
   CNAME_PROF   = CNAME_PROF_n
   CFILE_PROF   = CFILE_PROF_n
-!   LDIAG_SURFRAD= LDIAG_SURFRAD_n
+  LDIAG_SURFRAD= LDIAG_SURFRAD_n
 END SUBROUTINE INIT_NAM_PROFILERn
 
 SUBROUTINE UPDATE_NAM_PROFILERn
@@ -86,6 +86,6 @@ SUBROUTINE UPDATE_NAM_PROFILERn
   XZ_PROF_n      = XZ_PROF
   CNAME_PROF_n   = CNAME_PROF
   CFILE_PROF_n   = CFILE_PROF
-!   LDIAG_SURFRAD_n= LDIAG_SURFRAD
+  LDIAG_SURFRAD_n= LDIAG_SURFRAD
 END SUBROUTINE UPDATE_NAM_PROFILERn
 END MODULE MODN_PROFILER_n
diff --git a/src/MNH/modn_stationn.f90 b/src/MNH/modn_stationn.f90
index 094b3dbb1c5325f2a8264a316a211ad131e7997f..5cacedfca4f47d44265ae09caa765147b10902eb 100644
--- a/src/MNH/modn_stationn.f90
+++ b/src/MNH/modn_stationn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2020-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2020-2023 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.
@@ -35,7 +35,7 @@ USE MODD_ALLSTATION_n, ONLY:&
         XZ_STAT_n       =>XZ_STAT       ,&
         CNAME_STAT_n    =>CNAME_STAT    ,&
         CFILE_STAT_n    =>CFILE_STAT    ,&
-        LDIAG_SURFRAD_n =>LDIAG_SURFRAD
+        LDIAG_SURFRAD_n =>LDIAG_SURFRAD_STAT
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX, NSTATPROFNAMELGTMAX
 !
 !-----------------------------------------------------------------------------
diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90
index d331134d68ce797a6112596032f6fe6448b3b1e8..555d5cbc174d5b8f21ef737eccbb17b5255752d3 100644
--- a/src/MNH/open_nestpgd_files.f90
+++ b/src/MNH/open_nestpgd_files.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2023 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.
@@ -172,11 +172,11 @@ CALL IO_File_add2list(TZPRE_NEST_PGD,TRIM(HPRE_NEST_PGD),'NML','READ')
 CALL IO_File_open(TZPRE_NEST_PGD)
 IPRE_NEST_PGD = TZPRE_NEST_PGD%NLU
 !reading of NAM_CONFZ
-CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFZ',GFOUND)
+CALL POSNAM( TZPRE_NEST_PGD, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONFZ)
 !
 !JUAN
-CALL POSNAM(IPRE_NEST_PGD,'NAM_CONF_NEST',GFOUND)
+CALL POSNAM( TZPRE_NEST_PGD, 'NAM_CONF_NEST', GFOUND )
 IF (GFOUND) THEN
    NHALO_MNH = NHALO_CONF_MNH
    READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONF_NEST)
@@ -203,35 +203,35 @@ GADD=.TRUE.
 DO JPGD=1,JPMODELMAX
   IDAD=0
   IF (JPGD==1) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD1',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD1', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD1)
   END IF
   IF (JPGD==2) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD2',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD2', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD2)
   END IF
   IF (JPGD==3) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD3',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD3', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD3)
   END IF
   IF (JPGD==4) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD4',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD4', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD4)
   END IF
   IF (JPGD==5) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD5',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD5', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD5)
   END IF
   IF (JPGD==6) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD6',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD6', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD6)
   END IF
   IF (JPGD==7) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD7',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD7', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD7)
   END IF
   IF (JPGD==8) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD8',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD8', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD8)
   END IF
   !
@@ -291,10 +291,10 @@ END DO
 !*       6.    NAMES OF OUTPUT PGD FILES
 !              -------------------------
 !
-CALL POSNAM(IPRE_NEST_PGD,'NAM_NEST_PGD',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_NEST_PGD, 'NAM_NEST_PGD', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_NEST_PGD)
 !
-CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFIO',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_NEST_PGD, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONFIO)
 CALL IO_Config_set()
 !
diff --git a/src/MNH/open_prc_files.f90 b/src/MNH/open_prc_files.f90
index ecf98378f07cd1712e1d68cb4c51bcd853324bd5..056eb30ae0b95a26cc5df71c399bf76b18ca4f13 100644
--- a/src/MNH/open_prc_files.f90
+++ b/src/MNH/open_prc_files.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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.
@@ -208,15 +208,15 @@ ENDIF
 !              ----------------------------
 !
 !JUANZ
-CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0)
+CALL POSNAM( TPPRE_REAL1FILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
 !JUANZ
-CALL POSNAM(IPRE_REAL1,'NAM_CONFIO',GFOUND,ILUOUT0)
+CALL POSNAM( TPPRE_REAL1FILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFIO)
 CALL IO_Config_set()
 !
 CINIFILE = CINIFILE_n
-CALL POSNAM(IPRE_REAL1,'NAM_FILE_NAMES',GFOUND,ILUOUT0)
+CALL POSNAM( TPPRE_REAL1FILE, 'NAM_FILE_NAMES', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_FILE_NAMES)
 CINIFILE_n = CINIFILE
 !
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index 14eb622d9cfe9b3b9d60e6818c022ffbc2744fa6..f69cb3f18aa3fe130c42f998609f5b5565c72273 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -285,6 +285,7 @@ USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LATZ_EDFLX
 USE MODD_LBC_n
 USE MODD_LES
+USE MODD_LES_n, ONLY: NLES_TIMES
 USE MODD_LES_BUDGET
 USE MODD_LSFIELD_n
 USE MODD_LUNIT_n
@@ -499,7 +500,7 @@ IKB = 1 + JPVEXT
 IKE = IKU - JPVEXT
 !
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3),.TRUE.)
+CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3),.TRUE.,NLES_TIMES)
 !
 ZTIME1 = 0.0_MNHTIME
 ZTIME2 = 0.0_MNHTIME
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 8abd65649d35f0fe2dc1e5a2257d5e7b99be5faa..ee75625e84f9a4ebe04ffd83774e65aad7bb4d2b 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -690,35 +690,35 @@ NLUPRE=TZEXPREFILE%NLU
 !*       3.2   read in NLUPRE the namelist informations
 !
 WRITE(NLUOUT,FMT=*) 'attempt to read ',TRIM(TZEXPREFILE%CNAME),' file'
-CALL POSNAM(NLUPRE,'NAM_REAL_PGD',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_REAL_PGD', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_REAL_PGD)
 !
 !
-CALL POSNAM(NLUPRE,'NAM_CONF_PRE',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_CONF_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONF_PRE)
 !JUANZ
-CALL POSNAM(NLUPRE,'NAM_CONFZ',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFZ)
 !JUANZ
-CALL POSNAM(NLUPRE,'NAM_CONFIO',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFIO)
 CALL IO_Config_set()
-CALL POSNAM(NLUPRE,'NAM_GRID_PRE',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_GRID_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRID_PRE)
-CALL POSNAM(NLUPRE,'NAM_GRIDH_PRE',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_GRIDH_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRIDH_PRE)
-CALL POSNAM(NLUPRE,'NAM_VPROF_PRE',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_VPROF_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_VPROF_PRE)
-CALL POSNAM(NLUPRE,'NAM_BLANKN',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_BLANKN', GFOUND )
 CALL INIT_NAM_BLANKn
 IF (GFOUND) THEN
   READ(UNIT=NLUPRE,NML=NAM_BLANKn)
   CALL UPDATE_NAM_BLANKn
 END IF
-CALL READ_PRE_IDEA_NAM_n(NLUPRE,NLUOUT)
-CALL POSNAM(NLUPRE,'NAM_AERO_PRE',GFOUND,NLUOUT)
+CALL READ_PRE_IDEA_NAM_n( TZEXPREFILE )
+CALL POSNAM( TZEXPREFILE, 'NAM_AERO_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_AERO_PRE)
-CALL POSNAM(NLUPRE,'NAM_IBM_LSF' ,GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_IBM_LSF', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_IBM_LSF )
 !
 CALL INI_FIELD_LIST()
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index 2df254d5ec8aab95ee4ad9713ccf8e65fc7f4af4..64c43fb8cce5d20a50b84d57ea9c6896d052e079 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 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.
@@ -190,23 +190,23 @@ IF (IRESP.NE.0 ) THEN
 ENDIF
 !JUAN
 
-CALL POSNAM(ILUNAM,'NAM_PGDFILE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_PGDFILE', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PGDFILE)
-CALL POSNAM(ILUNAM,'NAM_ZSFILTER',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_ZSFILTER', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_ZSFILTER)
-CALL POSNAM(ILUNAM,'NAM_SLEVE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_SLEVE', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_SLEVE)
 !JUANZ
-CALL POSNAM(ILUNAM,'NAM_CONFZ',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFZ)
-CALL POSNAM(ILUNAM,'NAM_CONF_PGD',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONF_PGD', GFOUND )
 IF (GFOUND) THEN
    NHALO_MNH = NHALO_CONF_MNH
    READ(UNIT=ILUNAM,NML=NAM_CONF_PGD)
    NHALO_CONF_MNH = NHALO_MNH
 ENDIF
 !JUANZ
-CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 CALL IO_Config_set()
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 7af314fe4d80534c4e54da7ddf628de41dbdfb56..0ed4641b560593cbb9442d6fb8b7005066bbeb04 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 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.
@@ -674,9 +674,9 @@ CALL INI_CST
 IPRE_REAL1 = TZPRE_REAL1FILE%NLU
 !
 CALL INIT_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_REAL_CONF', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_PARAM_LIMA',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_PARAM_LIMA', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_PARAM_LIMA)
 !
 CALL INI_FIELD_LIST()
@@ -746,18 +746,18 @@ XANGCONV0=0. ; XANGCONV1000=0. ; XANGCONV2000=0.
 CDADATMFILE=' ' ; CDADBOGFILE=' '
 !
 CALL INIT_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_REAL_CONF', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_HURR_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_HURR_CONF', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_HURR_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_CH_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_CH_CONF', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CH_CONF)
 CALL UPDATE_MODD_FROM_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_AERO_CONF', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
-CALL POSNAM(IPRE_REAL1,'NAM_IBM_LSF' ,GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_IBM_LSF' , GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_IBM_LSF)
 !
 GAERINIT = LAERINIT
@@ -810,7 +810,7 @@ END IF
 !
 !IF(LEN_TRIM(YCHEMFILE)>0)THEN
 !  ! read again Nam_aero_conf
-!  CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
+!  CALL POSNAM( TZPRE_REAL1FILE, 'NAM_AERO_CONF', GFOUND )
 !  IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
 !  IF(YCHEMFILETYPE=='GRIBEX') &
 !  CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
@@ -844,7 +844,7 @@ END IF
 !
 IF(LEN_TRIM(YCHEMFILE)>0)THEN
   ! read again Nam_aero_conf
-  CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
+  CALL POSNAM( TZPRE_REAL1FILE, 'NAM_AERO_CONF', GFOUND )
   IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
   IF(YCHEMFILETYPE=='GRIBEX') &
   CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90
index 904d5c71a3468f9d40cdc0b7a5fe79b5267b40a5..25c907e90e8dd9822a8fd9070b041ad4c6124ccb 100644
--- a/src/MNH/profilern.f90
+++ b/src/MNH/profilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2023 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.
@@ -88,6 +88,7 @@ END MODULE MODI_PROFILER_n
 !*      0. DECLARATIONS
 !          ------------
 !
+USE MODD_ALLPROFILER_n,    ONLY: LDIAG_SURFRAD_PROF
 USE MODD_CST,              ONLY: XCPD, XG, XLAM_CRAD, XLIGHTSPEED, XP00, XPI, XRD, XRHOLW, XRV, XTT
 USE MODD_DIAG_IN_RUN
 USE MODD_GRID,             ONLY: XBETA, XLON0, XRPK
@@ -689,7 +690,7 @@ PROFILER: DO JP = 1, NUMBPROFILER_LOC
   END DO
   IF (SIZE(PTKE)>0) TPROFILERS(JP)%XTKE  (IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), PTKE )
   !
-  IF (LDIAG_IN_RUN) THEN
+  IF ( LDIAG_SURFRAD_PROF ) THEN
     TPROFILERS(JP)%XT2M   (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_T2M    )
     TPROFILERS(JP)%XQ2M   (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_Q2M    )
     TPROFILERS(JP)%XHU2M  (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_HU2M   )
@@ -705,9 +706,14 @@ PROFILER: DO JP = 1, NUMBPROFILER_LOC
       TPROFILERS(JP)%XSWU   (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SWU    )
       TPROFILERS(JP)%XLWD   (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_LWD    )
       TPROFILERS(JP)%XLWU   (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_LWU    )
+      TPROFILERS(JP)%XSWDIR (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SWDIR  )
+      TPROFILERS(JP)%XSWDIFF(IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SWDIFF )
+      TPROFILERS(JP)%XDSTAOD(IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_DSTAOD )
+      TPROFILERS(JP)%XSLTAOD(IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SLTAOD )
     END IF
-    TPROFILERS(JP)%XTKE_DISS(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), XCURRENT_TKE_DISS )
+    TPROFILERS(JP)%XSFCO2   (IN)   = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SFCO2    )
   END IF
+  TPROFILERS(JP)%XTKE_DISS(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), XCURRENT_TKE_DISS )
 END DO PROFILER
 !
 !----------------------------------------------------------------------------
diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index 4e03378378ef394b67c2644ca79352602f39b2e6..14925cb2b28bbcf29a381cf01af447266e21b9dd 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -714,6 +714,10 @@ DEALLOCATE (ZLNPS_G)
 !
 WRITE (ILUOUT0,'(A)') ' | Reading T and Q fields'
 !
+IF (IMODEL==11) THEN
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=130,KLEV1=1000) !look for air temperature at pressure level 1000hPa
+  IF (INUM < 0) IMODEL = 0 ! This change is for handling IFS model level grib file obtained by python API
+END IF
 IF (IMODEL/=10.AND.IMODEL/=11) THEN
   SELECT CASE (IMODEL)
     CASE(0) ! ECMWF
diff --git a/src/MNH/read_chem_data_mozart_case.f90 b/src/MNH/read_chem_data_mozart_case.f90
index e8a65c705587d0c61bb0276aa206c1f2b6d35312..e11f1c03a3053ead1c3256c5f72d4198217fb2bf 100644
--- a/src/MNH/read_chem_data_mozart_case.f90
+++ b/src/MNH/read_chem_data_mozart_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2012-2017 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2012-2023 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.
@@ -85,6 +85,7 @@ END MODULE MODI_READ_CHEM_DATA_MOZART_CASE
 !!      P. Wautelet 30/10/17 use F90 module for netCDF
 !!      J.Pianezzej 13/02/2019 : correction for use of MEGAN
 !  P. Wautelet 18/09/2019: correct support of 64bit integers (MNH_INT=8)
+!  P. Wautelet 29/03/2022: add error if CDUMMY1 not set correctly
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -112,17 +113,13 @@ USE MODD_PREP_REAL
 USE MODD_TIME
 USE MODD_TIME_n
 !
-!UPG*PT    
-!USE MODE_FM
-!USE MODE_IO_ll
-USE MODE_TOOLS, ONLY: UPCASE
-use MODE_TOOLS_ll
 USE MODE_IO_FILE,    only: IO_File_close
-!UPG*PT    
-
 USE MODE_MPPDB
+USE MODE_MSG
 USE MODE_THERMO
 USE MODE_TIME
+USE MODE_TOOLS, ONLY: UPCASE
+use MODE_TOOLS_ll
 !
 USE MODI_CH_AER_INIT_SOA
 USE MODI_CH_INIT_SCHEME_n
@@ -398,6 +395,9 @@ ELSEIF (CDUMMY1=="18") THEN
        itimeindex=3
 ELSEIF ((CDUMMY1=="24").OR.(CDUMMY1=="00")) THEN
        itimeindex=4
+ELSE
+  call Print_msg( NVERB_ERROR, 'GEN', 'READ_CHEM_DATA_MOZART_CASE', 'CDUMMY1 is not set correctly (or not set at all)' )
+  itimeindex=1
 ENDIF
  start3d(4) = itimeindex
 !
diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90
index 2648709e0c93aed6ecd7ca7c21a4727a94d9881b..f55fe1f28bfeeac1d67c04d6975e47be7ccce3df 100644
--- a/src/MNH/read_chem_data_netcdf_case.f90
+++ b/src/MNH/read_chem_data_netcdf_case.f90
@@ -175,7 +175,7 @@ INTEGER(kind=CDFINT)               :: ind_netcdf    ! Indice for netcdf var.
 INTEGER                                       :: ICHANNEL
 CHARACTER(LEN=8)                              :: YMOZ="MOZ1.nam"
 integer                                       :: IMOZ
-CHARACTER(LEN=68)                             :: YFORMAT
+CHARACTER(LEN=100)                            :: YFORMAT
 CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE  :: YSPCMNH
 integer, dimension(:), ALLOCATABLE            :: ISPCMOZ
 CHARACTER(LEN=9)                              :: YA
diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index 213063f3545c5c332f751b34e18e16ad2c717fc8..ce23cbb2ccae0f1e9151fd117335a597a91d865d 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -266,8 +266,8 @@ USE MODN_LATZ_EDFLX
 USE MODN_2D_FRC
 USE MODN_BLOWSNOW_n
 USE MODN_BLOWSNOW
-USE MODN_PROFILER_n
-USE MODN_STATION_n
+USE MODN_PROFILER_n, LDIAG_SURFRAD_PROF => LDIAG_SURFRAD
+USE MODN_STATION_n,  LDIAG_SURFRAD_STAT => LDIAG_SURFRAD
 !
 USE MODN_PARAM_LIMA
 ! USE MODN_FLYERS
@@ -343,6 +343,7 @@ LOGICAL :: GFOUND          ! Return code when searching namelist
 LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_DST ! Dust Moist flag
 LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_SLT ! Sea Salt Moist flag
 LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_AER ! Orilam Moist flag
+TYPE(TFILEDATA), POINTER :: TZDESFILE
 !
 !-------------------------------------------------------------------------------
 !
@@ -354,144 +355,145 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_DESFM_n','called for '//TRIM(TPDATAFILE%CN
 IF (.NOT.ASSOCIATED(TPDATAFILE%TDESFILE)) &
   CALL PRINT_MSG(NVERB_FATAL,'IO','READ_DESFM_n','TDESFILE not associated for '//TRIM(TPDATAFILE%CNAME))
 !
-ILUDES = TPDATAFILE%TDESFILE%NLU
+TZDESFILE => TPDATAFILE%TDESFILE
+ILUDES = TZDESFILE%NLU
 ILUOUT = TLUOUT%NLU
 !
-CALL POSNAM(ILUDES,'NAM_LUNITN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_LUNITN', GFOUND )
 CALL INIT_NAM_LUNITN
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_LUNITn)
   CALL UPDATE_NAM_LUNITN
 END IF
-CALL POSNAM(ILUDES,'NAM_CONFN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_CONFN', GFOUND )
 CALL INIT_NAM_CONFN
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_CONFn)
   CALL UPDATE_NAM_CONFN
 END IF
-CALL POSNAM(ILUDES,'NAM_DYNN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_DYNN', GFOUND )
 CALL INIT_NAM_DYNN
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_DYNn)
   CALL UPDATE_NAM_DYNN
 END IF
-CALL POSNAM(ILUDES,'NAM_ADVN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_ADVN', GFOUND )
 CALL INIT_NAM_ADVN
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_ADVn)
   CALL UPDATE_NAM_ADVN
 END IF
-CALL POSNAM(ILUDES,'NAM_PARAMN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAMN', GFOUND )
 CALL INIT_NAM_PARAMn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAMn)
   CALL UPDATE_NAM_PARAMn
 END IF
-CALL POSNAM(ILUDES,'NAM_PARAM_RADN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAM_RADN', GFOUND )
 CALL INIT_NAM_PARAM_RADn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAM_RADn)
   CALL UPDATE_NAM_PARAM_RADn
 END IF
 #ifdef MNH_ECRAD
-CALL POSNAM(ILUDES,'NAM_PARAM_ECRADN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAM_ECRADN', GFOUND )
 CALL INIT_NAM_PARAM_ECRADn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAM_ECRADn)
   CALL UPDATE_NAM_PARAM_ECRADn
 END IF
 #endif
-CALL POSNAM(ILUDES,'NAM_PARAM_KAFRN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAM_KAFRN', GFOUND )
 CALL INIT_NAM_PARAM_KAFRn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAM_KAFRn)
   CALL UPDATE_NAM_PARAM_KAFRn
 END IF
-CALL POSNAM(ILUDES,'NAM_PARAM_MFSHALLN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAM_MFSHALLN', GFOUND )
 CALL INIT_NAM_PARAM_MFSHALLn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAM_MFSHALLn)
   CALL UPDATE_NAM_PARAM_MFSHALLn
 END IF
-CALL POSNAM(ILUDES,'NAM_LBCN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_LBCN', GFOUND )
 CALL INIT_NAM_LBCn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_LBCn)
   CALL UPDATE_NAM_LBCn
 END IF
-CALL POSNAM(ILUDES,'NAM_NUDGINGN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_NUDGINGN', GFOUND )
 CALL INIT_NAM_NUDGINGn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_NUDGINGn)
   CALL UPDATE_NAM_NUDGINGn
 END IF
-CALL POSNAM(ILUDES,'NAM_TURBN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_TURBN', GFOUND )
 CALL INIT_NAM_TURBn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_TURBn)
   CALL UPDATE_NAM_TURBn
 END IF
-CALL POSNAM(ILUDES,'NAM_CH_MNHCN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_CH_MNHCN', GFOUND )
 CALL INIT_NAM_CH_MNHCn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_CH_MNHCn)
   CALL UPDATE_NAM_CH_MNHCn
 END IF
-CALL POSNAM(ILUDES,'NAM_CH_SOLVERN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_CH_SOLVERN', GFOUND )
 CALL INIT_NAM_CH_SOLVERn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_CH_SOLVERn)
   CALL UPDATE_NAM_CH_SOLVERn
 END IF
-CALL POSNAM(ILUDES,'NAM_DRAGN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_DRAGN', GFOUND )
 CALL INIT_NAM_DRAGn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_DRAGn)
   CALL UPDATE_NAM_DRAGn
 END IF
-CALL POSNAM(ILUDES,'NAM_IBM_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_IBM_PARAMN', GFOUND )
 CALL INIT_NAM_IBM_PARAMn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_IBM_PARAMn)
   CALL UPDATE_NAM_IBM_PARAMn
 END IF
-CALL POSNAM(ILUDES,'NAM_RECYCL_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_RECYCL_PARAMN', GFOUND )
 CALL INIT_NAM_RECYCL_PARAMn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_RECYCL_PARAMn)
   CALL UPDATE_NAM_RECYCL_PARAMn
 END IF
-CALL POSNAM(ILUDES,'NAM_SERIESN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_SERIESN', GFOUND )
 CALL INIT_NAM_SERIESn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_SERIESn)
   CALL UPDATE_NAM_SERIESn
 END IF
-CALL POSNAM(ILUDES,'NAM_BLOWSNOWN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_BLOWSNOWN', GFOUND )
 CALL INIT_NAM_BLOWSNOWn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_BLOWSNOWn)
   CALL UPDATE_NAM_BLOWSNOWn
 END IF
-CALL POSNAM(ILUDES,'NAM_BLANKN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_BLANKN', GFOUND )
 CALL INIT_NAM_BLANKn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_BLANKn)
   CALL UPDATE_NAM_BLANKn
 END IF
-CALL POSNAM(ILUDES,'NAM_PROFILERN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_PROFILERN', GFOUND )
 CALL INIT_NAM_PROFILERn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_PROFILERN)
   CALL UPDATE_NAM_PROFILERn
 END IF
-CALL POSNAM(ILUDES,'NAM_STATIONN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_STATIONN', GFOUND )
 CALL INIT_NAM_STATIONn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_STATIONn)
   CALL UPDATE_NAM_STATIONn
 END IF
-CALL POSNAM(ILUDES,'NAM_FIREN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_FIREN', GFOUND )
 CALL INIT_NAM_FIREn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_FIREn)
@@ -500,13 +502,13 @@ END IF
 !
 !
 IF (KMI == 1) THEN
-  CALL POSNAM(ILUDES,'NAM_CONF',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_CONF', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CONF)
-  CALL POSNAM(ILUDES,'NAM_DYN',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_DYN', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DYN)
-  CALL POSNAM(ILUDES,'NAM_NESTING',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_NESTING', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_NESTING)
-  CALL POSNAM(ILUDES,'NAM_BACKUP',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_BACKUP', GFOUND )
   IF (GFOUND) THEN
     IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
       ALLOCATE(XBAK_TIME(NMODEL,JPOUTMAX))
@@ -530,10 +532,10 @@ IF (KMI == 1) THEN
     END IF
     READ(UNIT=ILUDES,NML=NAM_BACKUP)
   ELSE
-    CALL POSNAM(ILUDES,'NAM_FMOUT',GFOUND)
+    CALL POSNAM( TZDESFILE, 'NAM_FMOUT', GFOUND )
     IF (GFOUND) CALL PRINT_MSG(NVERB_FATAL,'IO','READ_DESFM_n','use namelist NAM_BACKUP instead of namelist NAM_FMOUT')
   END IF
-  CALL POSNAM(ILUDES,'NAM_OUTPUT',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_OUTPUT', GFOUND )
   IF (GFOUND) THEN
     IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
       ALLOCATE(XBAK_TIME(NMODEL,JPOUTMAX)) !Allocate *BAK* variables to prevent
@@ -559,88 +561,88 @@ IF (KMI == 1) THEN
   END IF
 ! Note: it is not useful to read the budget namelists in the .des files
 ! The values here (if present in file) don't need to be compared with the ones in the EXSEGn files
-!   CALL POSNAM(ILUDES,'NAM_BUDGET',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BUDGET', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BUDGET)
-!   CALL POSNAM(ILUDES,'NAM_BU_RU',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RU', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RU)
-!   CALL POSNAM(ILUDES,'NAM_BU_RV',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RV', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RV)
-!   CALL POSNAM(ILUDES,'NAM_BU_RW',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RW', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RW)
-!   CALL POSNAM(ILUDES,'NAM_BU_RTH',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RTH', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RTH)
-!   CALL POSNAM(ILUDES,'NAM_BU_RTKE',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RTKE', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RTKE)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRV',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRV', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRV)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRC',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRC', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRC)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRR',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRR', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRR)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRI',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRI', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRI)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRS',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRS', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRS)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRG',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRG', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRG)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRH',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRH', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRH)
-!   CALL POSNAM(ILUDES,'NAM_BU_RSV',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RSV', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RSV)
-  CALL POSNAM(ILUDES,'NAM_LES',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_LES', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_LES)
-  CALL POSNAM(ILUDES,'NAM_PDF',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PDF', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PDF)
-  CALL POSNAM(ILUDES,'NAM_FRC',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_FRC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FRC)
-  CALL POSNAM(ILUDES,'NAM_PARAM_ICE',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PARAM_ICE', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_ICE)
-  CALL POSNAM(ILUDES,'NAM_PARAM_C2R2',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PARAM_C2R2', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_C2R2)
-  CALL POSNAM(ILUDES,'NAM_PARAM_C1R3',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PARAM_C1R3', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_C1R3)
-  CALL POSNAM(ILUDES,'NAM_PARAM_LIMA',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PARAM_LIMA', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_LIMA)
-  CALL POSNAM(ILUDES,'NAM_ELEC',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_ELEC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_ELEC)
-  CALL POSNAM(ILUDES,'NAM_SERIES',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_SERIES', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SERIES)
-  CALL POSNAM(ILUDES,'NAM_TURB_CLOUD',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_TURB_CLOUD', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_TURB_CLOUD)
-  CALL POSNAM(ILUDES,'NAM_TURB',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_TURB', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_TURB)
-  CALL POSNAM(ILUDES,'NAM_CH_ORILAM',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_CH_ORILAM', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CH_ORILAM)
-  CALL POSNAM(ILUDES,'NAM_DUST',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_DUST', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DUST)
-  CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_SALT', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT)
-  CALL POSNAM(ILUDES,'NAM_PASPOL',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_PASPOL', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PASPOL)
 #ifdef MNH_FOREFIRE
-  CALL POSNAM(ILUDES,'NAM_FOREFIRE',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_FOREFIRE', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FOREFIRE)
 #endif
-  CALL POSNAM(ILUDES,'NAM_CONDSAMP',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_CONDSAMP', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CONDSAMP)
-  CALL POSNAM(ILUDES,'NAM_BLOWSNOW',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_BLOWSNOW', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BLOWSNOW)
-  CALL POSNAM(ILUDES,'NAM_2D_FRC',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_2D_FRC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_2D_FRC)
   LTEMPDEPOS_DST(:) = LDEPOS_DST(:)
   LTEMPDEPOS_SLT(:) = LDEPOS_SLT(:)
   LTEMPDEPOS_AER(:) = LDEPOS_AER(:)
-  CALL POSNAM(ILUDES,'NAM_LATZ_EDFLX',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_LATZ_EDFLX', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_LATZ_EDFLX)
-  CALL POSNAM(ILUDES,'NAM_VISC',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_VISC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_VISC)
 ! Note: it is not useful to read the FLYERS/AIRCRAFTS/BALLOONS namelists in the .des files
 ! The values here (if present in file) don't need to be compared with the ones in the EXSEGn files
-!   CALL POSNAM(ILUDES,'NAM_FLYERS',GFOUND,ILUOUT)
+!   CALL POSNAM( TZDESFILE, 'NAM_FLYERS', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FLYERS)
-!   CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS',GFOUND,ILUOUT)
+!   CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_AIRCRAFTS)
-!   CALL POSNAM(ILUSEG,'NAM_BALLOONS',GFOUND,ILUOUT)
+!   CALL POSNAM(ILUSEG,'NAM_BALLOONS', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BALLOONS)
 END IF
 !
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index 241510495deebf1e3c4528ff5276472a9274f858..9d9639c35241ba5b5ad5a55fd6c23389b54bca05 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -404,12 +404,12 @@ USE MODN_PARAM_MFSHALL_n
 USE MODN_PARAM_n    ! realized in subroutine ini_model n
 USE MODN_PARAM_RAD_n
 USE MODN_PASPOL
-USE MODN_PROFILER_n
+USE MODN_PROFILER_n, LDIAG_SURFRAD_PROF => LDIAG_SURFRAD
 USE MODN_RECYCL_PARAM_n
 USE MODN_SALT
 USE MODN_SERIES
 USE MODN_SERIES_n
-USE MODN_STATION_n
+USE MODN_STATION_n,  LDIAG_SURFRAD_STAT => LDIAG_SURFRAD
 USE MODN_TURB
 USE MODN_TURB_CLOUD
 USE MODN_TURB_n
@@ -519,78 +519,78 @@ CALL INIT_NAM_STATIONn
 CALL INIT_NAM_FIREn
 !
 WRITE(UNIT=ILUOUT,FMT="(/,'READING THE EXSEG.NAM FILE')")
-CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_LUNITN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LUNITn)
-CALL POSNAM(ILUSEG,'NAM_CONFN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_CONFN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFn)
-CALL POSNAM(ILUSEG,'NAM_DYNN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_DYNN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DYNn)
-CALL POSNAM(ILUSEG,'NAM_ADVN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_ADVN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ADVn)
-CALL POSNAM(ILUSEG,'NAM_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAMN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAMn)
-CALL POSNAM(ILUSEG,'NAM_PARAM_RADN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_RADN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_RADn)
 #ifdef MNH_ECRAD
-CALL POSNAM(ILUSEG,'NAM_PARAM_ECRADN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_ECRADN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_ECRADn)
 #endif
-CALL POSNAM(ILUSEG,'NAM_PARAM_KAFRN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_KAFRN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_KAFRn)
-CALL POSNAM(ILUSEG,'NAM_PARAM_MFSHALLN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_MFSHALLN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_MFSHALLn)
-CALL POSNAM(ILUSEG,'NAM_LBCN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_LBCN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LBCn)
-CALL POSNAM(ILUSEG,'NAM_NUDGINGN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_NUDGINGN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NUDGINGn)
-CALL POSNAM(ILUSEG,'NAM_TURBN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_TURBN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURBn)
-CALL POSNAM(ILUSEG,'NAM_DRAGN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_DRAGN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGn)
-CALL POSNAM(ILUSEG,'NAM_IBM_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_IBM_PARAMN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_IBM_PARAMn)
-CALL POSNAM(ILUSEG,'NAM_RECYCL_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_RECYCL_PARAMN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_RECYCL_PARAMn)
-CALL POSNAM(ILUSEG,'NAM_CH_MNHCN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_CH_MNHCN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_MNHCn)
-CALL POSNAM(ILUSEG,'NAM_CH_SOLVERN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_CH_SOLVERN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_SOLVERn)
-CALL POSNAM(ILUSEG,'NAM_SERIESN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_SERIESN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SERIESn)
-CALL POSNAM(ILUSEG,'NAM_BLANKN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_BLANKN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLANKn)
-CALL POSNAM(ILUSEG,'NAM_BLOWSNOWN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_BLOWSNOWN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOWn)
-CALL POSNAM(ILUSEG,'NAM_DRAGTREEN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_DRAGTREEN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGTREEn)
-CALL POSNAM(ILUSEG,'NAM_DRAGBLDGN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_DRAGBLDGN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGBLDGn)
-CALL POSNAM(ILUSEG,'NAM_COUPLING_LEVELSN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE,'NAM_COUPLING_LEVELSN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_COUPLING_LEVELSn)
-CALL POSNAM(ILUSEG,'NAM_EOL',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_EOL', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL)
-CALL POSNAM(ILUSEG,'NAM_EOL_ADNR',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_EOL_ADNR', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ADNR)
-CALL POSNAM(ILUSEG,'NAM_EOL_ALM',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_EOL_ALM', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ALM)
-CALL POSNAM(ILUSEG,'NAM_PROFILERN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PROFILERN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PROFILERn)
-CALL POSNAM(ILUSEG,'NAM_STATIONN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_STATIONN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_STATIONn)
-CALL POSNAM(ILUSEG,'NAM_FIREN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_FIREN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FIREn)
 !
 IF (KMI == 1) THEN                                               
   WRITE(UNIT=ILUOUT,FMT="(' namelists common to all the models ')")
-  CALL POSNAM(ILUSEG,'NAM_CONF',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_CONF', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONF)
-  CALL POSNAM(ILUSEG,'NAM_CONFZ',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_CONFZ', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ)
-  CALL POSNAM(ILUSEG,'NAM_DYN',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_DYN', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DYN)
-  CALL POSNAM(ILUSEG,'NAM_NESTING',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_NESTING', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NESTING)
-  CALL POSNAM(ILUSEG,'NAM_BACKUP',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BACKUP', GFOUND )
   IF (GFOUND) THEN
     !Should have been allocated before in READ_DESFM_n
     IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
@@ -615,14 +615,14 @@ IF (KMI == 1) THEN
     END IF
     READ(UNIT=ILUSEG,NML=NAM_BACKUP)
   ELSE
-    CALL POSNAM(ILUSEG,'NAM_FMOUT',GFOUND)
+    CALL POSNAM( TPEXSEGFILE, 'NAM_FMOUT', GFOUND )
     IF (GFOUND) THEN
       CALL PRINT_MSG(NVERB_FATAL,'IO','READ_EXSEG_n','use namelist NAM_BACKUP instead of namelist NAM_FMOUT')
     ELSE
       IF (CPROGRAM=='MESONH') CALL PRINT_MSG(NVERB_ERROR,'IO','READ_EXSEG_n','namelist NAM_BACKUP not found')
     END IF
   END IF
-  CALL POSNAM(ILUSEG,'NAM_OUTPUT',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_OUTPUT', GFOUND )
   IF (GFOUND) THEN
     !Should have been allocated before in READ_DESFM_n
     IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
@@ -647,10 +647,10 @@ IF (KMI == 1) THEN
     END IF
     READ(UNIT=ILUSEG,NML=NAM_OUTPUT)
   END IF
-  CALL POSNAM(ILUSEG,'NAM_BUDGET',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BUDGET', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BUDGET)
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RU',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RU', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RU ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RU was already allocated' )
@@ -663,7 +663,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RU(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RV',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RV', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RV ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RV was already allocated' )
@@ -676,7 +676,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RV(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RW',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RW', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RW ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RW was already allocated' )
@@ -689,7 +689,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RW(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RTH',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RTH', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RTH ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RTH was already allocated' )
@@ -702,7 +702,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTH(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RTKE',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RTKE', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RTKE ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RTKE was already allocated' )
@@ -715,7 +715,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTKE(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRV',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRV', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRV ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRV was already allocated' )
@@ -728,7 +728,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRV(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRC', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRC ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRC was already allocated' )
@@ -741,7 +741,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRC(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRR',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRR', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRR ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRR was already allocated' )
@@ -754,7 +754,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRR(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRI',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRI', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRI ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRI was already allocated' )
@@ -767,7 +767,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRI(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRS',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRS', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRS ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRS was already allocated' )
@@ -780,7 +780,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRS(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRG',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRG', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRG ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRG was already allocated' )
@@ -793,7 +793,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRG(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRH',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRH', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRH ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRH was already allocated' )
@@ -806,7 +806,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRH(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RSV',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RSV', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RSV ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RSV was already allocated' )
@@ -819,65 +819,65 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RSV(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_LES',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_LES', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LES)
-  CALL POSNAM(ILUSEG,'NAM_MEAN',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_MEAN', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_MEAN)
-  CALL POSNAM(ILUSEG,'NAM_PDF',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PDF', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PDF)
-  CALL POSNAM(ILUSEG,'NAM_FRC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_FRC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FRC)
-  CALL POSNAM(ILUSEG,'NAM_PARAM_ICE',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_ICE', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_ICE)
-  CALL POSNAM(ILUSEG,'NAM_PARAM_C2R2',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_C2R2', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C2R2)
-  CALL POSNAM(ILUSEG,'NAM_PARAM_C1R3',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_C1R3', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C1R3)
-  CALL POSNAM(ILUSEG,'NAM_PARAM_LIMA',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_LIMA', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_LIMA)
-  CALL POSNAM(ILUSEG,'NAM_ELEC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_ELEC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ELEC)
-  CALL POSNAM(ILUSEG,'NAM_SERIES',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_SERIES', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SERIES)
-  CALL POSNAM(ILUSEG,'NAM_TURB_CLOUD',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_TURB_CLOUD', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURB_CLOUD)
-  CALL POSNAM(ILUSEG,'NAM_TURB',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_TURB', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURB)
-  CALL POSNAM(ILUSEG,'NAM_CH_ORILAM',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_CH_ORILAM', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_ORILAM)
-  CALL POSNAM(ILUSEG,'NAM_DUST',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_DUST', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DUST)
-  CALL POSNAM(ILUSEG,'NAM_SALT',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_SALT', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SALT)
-  CALL POSNAM(ILUSEG,'NAM_PASPOL',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PASPOL', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PASPOL)
 #ifdef MNH_FOREFIRE
-  CALL POSNAM(ILUSEG,'NAM_FOREFIRE',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_FOREFIRE', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FOREFIRE)
 #endif
-  CALL POSNAM(ILUSEG,'NAM_CONDSAMP',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_CONDSAMP', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONDSAMP)
-  CALL POSNAM(ILUSEG,'NAM_2D_FRC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_2D_FRC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_2D_FRC)
-  CALL POSNAM(ILUSEG,'NAM_LATZ_EDFLX',GFOUND)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_LATZ_EDFLX', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LATZ_EDFLX)
-  CALL POSNAM(ILUSEG,'NAM_BLOWSNOW',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BLOWSNOW', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOW)
-  CALL POSNAM(ILUSEG,'NAM_VISC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_VISC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_VISC)
 
-  CALL POSNAM(ILUSEG,'NAM_FLYERS',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_FLYERS', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FLYERS)
 
   IF ( NAIRCRAFTS > 0 ) THEN
     CALL AIRCRAFTS_NML_ALLOCATE( NAIRCRAFTS )
-    CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS',GFOUND,ILUOUT)
+    CALL POSNAM( TPEXSEGFILE, 'NAM_AIRCRAFTS', GFOUND )
     IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_AIRCRAFTS)
   END IF
 
   IF ( NBALLOONS > 0 ) THEN
     CALL BALLOONS_NML_ALLOCATE( NBALLOONS )
-    CALL POSNAM(ILUSEG,'NAM_BALLOONS',GFOUND,ILUOUT)
+    CALL POSNAM( TPEXSEGFILE, 'NAM_BALLOONS', GFOUND )
     IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BALLOONS)
   END IF
 END IF
diff --git a/src/MNH/read_exspa.f90 b/src/MNH/read_exspa.f90
index f2b15fa20424d42bb1a3d96e232ad0ad479b5926..dd261a9bc94cb7e5443222203b5816a8a655c1d3 100644
--- a/src/MNH/read_exspa.f90
+++ b/src/MNH/read_exspa.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2023 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.
@@ -225,18 +225,18 @@ IXOR=NUNDEF
 IYOR=NUNDEF
 GBAL_ONLY=.FALSE.
 !
-CALL POSNAM(ILUSPA,'NAM_GRID2_SPA',GFOUND,ILUOUT)
+CALL POSNAM( TZNMLFILE, 'NAM_GRID2_SPA', GFOUND )
 IF (GFOUND) READ(ILUSPA,NAM_GRID2_SPA)
 !
 CINIFILE    = LUNIT_MODEL(1)%CINIFILE    !To respect default values
 CINIFILEPGD = LUNIT_MODEL(1)%CINIFILEPGD !To respect default values
 !
-CALL POSNAM(ILUSPA,'NAM_LUNIT2_SPA',GFOUND,ILUOUT)
+CALL POSNAM( TZNMLFILE, 'NAM_LUNIT2_SPA', GFOUND )
 IF (GFOUND) READ(ILUSPA,NAM_LUNIT2_SPA)
 LUNIT_MODEL(2)%CINIFILE    = CINIFILE
 LUNIT_MODEL(2)%CINIFILEPGD = CINIFILEPGD
 !
-CALL POSNAM(ILUSPA,'NAM_CONFIO',GFOUND,ILUOUT)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(ILUSPA,NAM_CONFIO)
 !
 CALL IO_Config_set()
diff --git a/src/MNH/read_pre_idea_namn.f90 b/src/MNH/read_pre_idea_namn.f90
index 7dcd303219b515d6050d7dd1bc03c781592d60ea..3a63a6b67450af94614043b6a54bb7f2aa2dc521 100644
--- a/src/MNH/read_pre_idea_namn.f90
+++ b/src/MNH/read_pre_idea_namn.f90
@@ -1,46 +1,45 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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 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
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 newsrc 2006/06/06 11:10:18
-!-----------------------------------------------------------------
 !####################################
 MODULE MODI_READ_PRE_IDEA_NAM_n
 !####################################
 INTERFACE 
-  SUBROUTINE READ_PRE_IDEA_NAM_n(KLUPRE,KLUOUT)
-    INTEGER,INTENT(IN) :: KLUPRE,KLUOUT ! Logical unit numbers for EXPRE file
-                                       ! and for output_listing file
+  SUBROUTINE READ_PRE_IDEA_NAM_n( TPFILEPRE )
+    USE MODD_IO,        ONLY: TFILEDATA
+
+    TYPE(TFILEDATA), INTENT(IN) :: TPFILEPRE ! EXPRE file
   END SUBROUTINE READ_PRE_IDEA_NAM_n
 END INTERFACE
 !
 END MODULE MODI_READ_PRE_IDEA_NAM_n
 !
 !
-!     #############################################
-      SUBROUTINE READ_PRE_IDEA_NAM_n(KLUPRE,KLUOUT)
-!     #############################################
+!     ###########################################
+      SUBROUTINE READ_PRE_IDEA_NAM_n( TPFILEPRE )
+!     ###########################################
 
-USE MODD_DIM_n, ONLY: NIMAX_n=>NIMAX, NJMAX_n=>NJMAX
-USE MODD_DYN_n, ONLY: CPRESOPT_n=>CPRESOPT,NITR_n=>NITR,XRELAX_n=>XRELAX, &
-                      LRES_n=>LRES,XRES_n=>XRES
-USE MODD_LBC_n, ONLY: CLBCX_n=>CLBCX,CLBCY_n=>CLBCY
-USE MODD_CH_MNHC_n, ONLY:  LCH_INIT_FIELD_n=>LCH_INIT_FIELD, &
+USE MODD_CH_AEROSOL, ONLY: LORILAM
+USE MODD_CH_MNHC_n,  ONLY: LCH_INIT_FIELD_n=>LCH_INIT_FIELD, &
                            CCHEM_INPUT_FILE_n=>CCHEM_INPUT_FILE
-USE MODD_PARAM_n, ONLY: CSURF_n=>CSURF  
-USE MODD_CH_AEROSOL, ONLY : LORILAM
-USE MODN_LUNIT_n           ! Namelist modules
-USE MODN_CONF_n
+USE MODD_DIM_n,      ONLY: NIMAX_n=>NIMAX, NJMAX_n=>NJMAX
+USE MODD_DYN_n,      ONLY: CPRESOPT_n=>CPRESOPT,NITR_n=>NITR,XRELAX_n=>XRELAX, &
+                           LRES_n=>LRES,XRES_n=>XRES
+USE MODD_IO,         ONLY: TFILEDATA
+USE MODD_LBC_n,      ONLY: CLBCX_n=>CLBCX,CLBCY_n=>CLBCY
+USE MODD_PARAM_n,    ONLY: CSURF_n=>CSURF
+
 USE MODE_POS
-!
+
+USE MODN_CONF_n
+USE MODN_LUNIT_n           ! Namelist modules
+
 IMPLICIT NONE
-INTEGER,INTENT(IN) :: KLUPRE,KLUOUT ! Logical unit numbers for EXPRE file
-                                       ! and for output_listing file
-!
+
+TYPE(TFILEDATA), INTENT(IN) :: TPFILEPRE ! EXPRE file
+
 LOGICAL :: GFOUND                  ! Return code when searching namelist 
 ! Namelist variables from $n
 INTEGER                :: NIMAX,NJMAX
@@ -53,6 +52,8 @@ CHARACTER(LEN=4), DIMENSION(2) :: CLBCX,CLBCY
 CHARACTER(LEN=5)       :: CSURF
 LOGICAL                :: LCH_INIT_FIELD
 CHARACTER(LEN=80)      :: CCHEM_INPUT_FILE
+
+INTEGER                :: ILUPRE
 !
 !*       0.2  Namelist declarations
 !
@@ -64,29 +65,31 @@ NAMELIST/NAM_CH_MNHCn_PRE/ LCH_INIT_FIELD, CCHEM_INPUT_FILE, LORILAM
 !
 !------------------------------------------------------------------------------
 !
+ILUPRE = TPFILEPRE%NLU
+
 CALL INIT_NMLVAR
-CALL POSNAM(KLUPRE,'NAM_DIMN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_DIMn_PRE)
-CALL POSNAM(KLUPRE,'NAM_DYNN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_DYNn_PRE)
-CALL POSNAM(KLUPRE,'NAM_LBCN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_LBCn_PRE)
-CALL POSNAM(KLUPRE,'NAM_GRN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_GRn_PRE)
-CALL POSNAM(KLUPRE,'NAM_CH_MNHCN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_CH_MNHCn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_DIMN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_DIMn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_DYNN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_DYNn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_LBCN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_LBCn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_GRN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_GRn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_CH_MNHCN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_CH_MNHCn_PRE)
 CALL UPDATE_MODD_FROM_NMLVAR
 !
-CALL POSNAM(KLUPRE,'NAM_CONFN',GFOUND,KLUOUT)
+CALL POSNAM( TPFILEPRE, 'NAM_CONFN', GFOUND )
 IF (GFOUND) THEN 
   CALL INIT_NAM_CONFn
-  READ(UNIT=KLUPRE,NML=NAM_CONFn)
+  READ(UNIT=ILUPRE,NML=NAM_CONFn)
   CALL UPDATE_NAM_CONFn
 END IF
-CALL POSNAM(KLUPRE,'NAM_LUNITN',GFOUND,KLUOUT)
+CALL POSNAM( TPFILEPRE, 'NAM_LUNITN', GFOUND )
 IF (GFOUND) THEN 
   CALL INIT_NAM_LUNITn 
-  READ(UNIT=KLUPRE,NML=NAM_LUNITn)
+  READ(UNIT=ILUPRE,NML=NAM_LUNITn)
   CALL UPDATE_NAM_LUNITn
 END IF
 
diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90
index 9d73972cf48986f32f3baee89d19fa530745c922..e7758a91c9e200fa9a915f54281fcd10b5912a30 100644
--- a/src/MNH/read_surf_mnh.f90
+++ b/src/MNH/read_surf_mnh.f90
@@ -1373,7 +1373,7 @@ IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NM
       ELSE
         CGROUND='NONE'
         ILUDES = TPINFILE%TDESFILE%NLU
-        CALL POSNAM(ILUDES,'NAM_PARAMN',GFOUND,ILUOUT)
+        CALL POSNAM( TPINFILE%TDESFILE, 'NAM_PARAMN', GFOUND )
         IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAMn)
       END IF
       IF (CGROUND=='NONE') THEN
diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90
index fe77bede8d2330f95569ae06ff2f745250e362ad..2b28a476beebf3d0346f70bd7ea95c4241777631 100644
--- a/src/MNH/read_ver_grid.f90
+++ b/src/MNH/read_ver_grid.f90
@@ -186,7 +186,7 @@ CALL DEFAULT_SLEVE(LSLEVE,XLEN1,XLEN2)
 !              -------------------
 !
 NKMAX=NKMAX_n
-CALL POSNAM(IPRE_REAL1,'NAM_VER_GRID',GFOUND,ILUOUT0)
+CALL POSNAM( TPPRE_REAL1, 'NAM_VER_GRID', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_VER_GRID) 
 NKMAX_n  = NKMAX
 LSLEVE_n = LSLEVE
@@ -196,7 +196,7 @@ XLEN2_n  = XLEN2
 IF (CPROGRAM=='REAL  ') THEN
   IF (ASSOCIATED (XZHAT)  ) DEALLOCATE(XZHAT)
   IF (ASSOCIATED (XZHATM) ) DEALLOCATE(XZHATM)
-  CALL POSNAM(IPRE_REAL1,'NAM_BLANKN',GFOUND,ILUOUT0)
+  CALL POSNAM( TPPRE_REAL1, 'NAM_BLANKN', GFOUND )
   IF (GFOUND) THEN
     CALL INIT_NAM_BLANKn
     READ(UNIT=IPRE_REAL1,NML=NAM_BLANKn)
diff --git a/src/MNH/reset_exseg.f90 b/src/MNH/reset_exseg.f90
index 0d06d2be3cbadabfab8ce39faa44c18c8f496bcc..b467f7c05123f190f3c63c50506cf111bdbd110f 100644
--- a/src/MNH/reset_exseg.f90
+++ b/src/MNH/reset_exseg.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2000-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2023 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.
@@ -115,7 +115,7 @@ ILUNAM = TZNMLFILE%NLU
 ! Meso-NH to store these diagnostics must be allocated by the ini_model1 subroutine
 !
 IF (NCONV_KF>=0) THEN
-  CALL POSNAM(ILUNAM,'NAM_PARAM_KAFRN',GFOUND)
+  CALL POSNAM( TZNMLFILE, 'NAM_PARAM_KAFRN', GFOUND )
   IF (GFOUND) THEN
     CALL INIT_NAM_PARAM_KAFRn
     READ(UNIT=ILUNAM,NML=NAM_PARAM_KAFRN)
@@ -149,7 +149,7 @@ IF (CRAD=='NONE') THEN
 END IF
 !
 IF(NRAD_3D>=1) THEN
-  CALL POSNAM(ILUNAM,'NAM_PARAM_RADN',GFOUND)
+  CALL POSNAM( TZNMLFILE, 'NAM_PARAM_RADN', GFOUND )
   IF (GFOUND) THEN
     CALL INIT_NAM_PARAM_RADn
     READ(UNIT=ILUNAM,NML=NAM_PARAM_RADN)
@@ -157,7 +157,7 @@ IF(NRAD_3D>=1) THEN
     IF ( IP == 1 ) PRINT*, '  namelist NAM_PARAM_RADN read'
   END IF
 #ifdef MNH_ECRAD
-  CALL POSNAM(ILUNAM,'NAM_PARAM_ECRADN',GFOUND)
+  CALL POSNAM( TZNMLFILE, 'NAM_PARAM_ECRADN', GFOUND )
   IF (GFOUND) THEN
     CALL INIT_NAM_PARAM_EcRADn
     READ(UNIT=ILUNAM,NML=NAM_PARAM_ECRADN)
@@ -193,7 +193,7 @@ IF ( IP == 1 ) PRINT*,' '
 !
 !*      5. For retrotrajectories in // , reset NHALO >> 1 if needed from NAM_CONF_DIAG
 !          ---------------------------------------------------
-CALL POSNAM(ILUNAM,'NAM_CONF_DIAG',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONF_DIAG', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONF_DIAG)
 END IF
diff --git a/src/MNH/saltcamsn.f90 b/src/MNH/saltcamsn.f90
index 1747bddc7934c3ada4267f7df353af05de3ab6e1..96dcde95d634c1a05a2ce9a284648bfd704ecc4c 100644
--- a/src/MNH/saltcamsn.f90
+++ b/src/MNH/saltcamsn.f90
@@ -135,6 +135,8 @@ DELTA_CAMS_3 = RAY_CAMS_4 - RAY_CAMS_3
 ! puis calcul de la masse correspondante avec facteur correctif pour eviter
 ! la surestimation des concentrations en aerosols
 
+ZMASS(:,:,:,1) = PMASSCAMS(:,:,:,1) * 1E-3
+
 DELTA_1 = RAY_2 - RAY_CAMS_1
 RATIO_1 = DELTA_1 / DELTA_CAMS_1
 ZMASS(:,:,:,2) = PMASSCAMS(:,:,:,1) * RATIO_1 ! * 1E-2 ! Attribution Mode 2 ORILAM
@@ -159,18 +161,16 @@ DELTA_6 = 10 - RAY_CAMS_3
 RATIO_6 = DELTA_3 / DELTA_CAMS_1
 ZMASS(:,:,:,5) = (PMASSCAMS(:,:,:,3) * RATIO_6) + ZMASS(:,:,:,5) ! Attribution Mode 5 ter ORILAM
 
-ZMASS(:,:,:,5) = ZMASS(:,:,:,5) * 1E-1
-
-! Hyp : the ultrafine mode is neglected for orilam-lima coupling
-ZMASS(:,:,:,1) = PMASSCAMS(:,:,:,1) * 1E-5 ! ultrafin mode
-!
 !========================================================
 ! Adjust the mass / SSA emissions after a few hours
-ZMASS(:,:,:,1) = ZMASS(:,:,:,1) * 1.
-ZMASS(:,:,:,2) = ZMASS(:,:,:,2) * 1.
-ZMASS(:,:,:,3) = ZMASS(:,:,:,3) * 1.
-ZMASS(:,:,:,4) = ZMASS(:,:,:,4) * 1.
-ZMASS(:,:,:,5) = ZMASS(:,:,:,5) * 1.
+ZMASS(:,:,:,1) = MAX(ZMASS(:,:,:,1) * 0.16, 1E-18)
+ZMASS(:,:,:,2) = MAX(ZMASS(:,:,:,2) * 0.1, 1E-17)
+ZMASS(:,:,:,3) = MAX(ZMASS(:,:,:,3) * 0.5, 1E-16)
+ZMASS(:,:,:,4) = MAX(ZMASS(:,:,:,4) * 0.1, 1E-16)
+ZMASS(:,:,:,5) = MAX(ZMASS(:,:,:,5), 1E-17) 
+IF (NMODE_SLT >= 6) ZMASS(:,:,:,6) = MAX(ZMASS(:,:,:,5) * 0.01, 1E-16)
+IF (NMODE_SLT >= 7) ZMASS(:,:,:,7) = MAX(ZMASS(:,:,:,5) * 0.001, 1E-16)
+IF (NMODE_SLT >= 8) ZMASS(:,:,:,8) = MAX(ZMASS(:,:,:,5) * 0.0001, 1E-16)
 !========================================================
 
 DO JN = 1, NMODE_SLT
@@ -197,15 +197,11 @@ DO JN = 1, NMODE_SLT
   ZMMIN(IM6(JN)) = XN0MIN_SLT(IMODEIDX) * (ZRGMIN**6)*EXP(18. * LOG(ZINISIGMA(JN))**2)
 
 END DO
-
-ZMASS(:,:,:,:) = MAX(ZMASS(:,:,:,:), 1E-40)
-!
 !
 ZRHOI = XDENSITY_SALT
 ZMI   = XMOLARWEIGHT_SALT
 ZDEN2MOL = 1E-6 * XAVOGADRO / XMD
 ZFAC = (4. / 3.) * XPI * ZRHOI * 1.e-9
-
 !
 DO JN = 1, NMODE_SLT
 
@@ -225,13 +221,13 @@ DO JN = 1, NMODE_SLT
                       (ZINIRADIUS(JN)**3) * & 
                       EXP(4.5*LOG(ZINISIGMA(JN))**2) 
 
-  ZM(:,:,:,IM3(JN)) = MAX(ZMMIN(IM3(JN)), ZM(:,:,:,IM3(JN)))
+!  ZM(:,:,:,IM3(JN)) = MAX(ZMMIN(IM3(JN)), ZM(:,:,:,IM3(JN)))
 !
 !*       1.3    calculate moment 6 from m0,  RG and SIG 
 !
   ZM(:,:,:,IM6(JN))= ZM(:,:,:,IM0(JN)) * ((ZINIRADIUS(JN)**6)*&
                         EXP(18. * (LOG(ZINISIGMA(JN)))**2))
-  ZM(:,:,:,IM6(JN)) = MAX(ZMMIN(IM6(JN)), ZM(:,:,:,IM6(JN)))
+!  ZM(:,:,:,IM6(JN)) = MAX(ZMMIN(IM6(JN)), ZM(:,:,:,IM6(JN)))
 !
 !*       1.4    output concentration (in ppv)
 !
diff --git a/src/MNH/set_perturb.f90 b/src/MNH/set_perturb.f90
index 7c4ea5e2e9c224c4d9d1d2022b8fcc0c372d1d8f..c35565007fafde5c4cdbd48aba59de67dbba2bd3 100644
--- a/src/MNH/set_perturb.f90
+++ b/src/MNH/set_perturb.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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.
@@ -211,7 +211,7 @@ NAMELIST/NAM_PERT_PRE/CPERT_KIND,XAMPLITH,       &! Perturbation parameters
 ILUPRE = TPEXPREFILE%NLU
 ILUOUT = TLUOUT%NLU
 !
-CALL POSNAM(ILUPRE,'NAM_PERT_PRE',GFOUND,ILUOUT)
+CALL POSNAM( TPEXPREFILE, 'NAM_PERT_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_PERT_PRE)
 !
 !  Distribue/set identical parameter  seed to all the proc
diff --git a/src/MNH/set_subdomain.f90 b/src/MNH/set_subdomain.f90
index ba8bdd4f2c8618bd0072d8100bd07bda3bf5bbf2..60105c54d2d93748d83d35dd2525940994ff9250 100644
--- a/src/MNH/set_subdomain.f90
+++ b/src/MNH/set_subdomain.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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.
@@ -175,7 +175,7 @@ NYOR=NUNDEF
 !              ---------------------------- 
 !
 ILUNAM = TPNMLFILE%NLU
-CALL POSNAM(ILUNAM,'NAM_MESONH_DOM',GFOUND,ILUOUT0)  
+CALL POSNAM( TPNMLFILE, 'NAM_MESONH_DOM', GFOUND )
 IF (GFOUND) THEN
   NIMAX=NIMAX_n ; NJMAX=NJMAX_n
   READ(UNIT=ILUNAM,NML=NAM_MESONH_DOM)
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index f0ef283104e3c88829e862df850bdd5a11a39c2e..d073818d1e3a450d657454afbf24754c27213a1c 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 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.
@@ -190,18 +190,18 @@ CALL IO_File_open(TZEXPAFILE)
 ILUSPA = TZEXPAFILE%NLU
 !
 CALL INIT_NMLVAR
-CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_SPAWN_SURF', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
 CALL UPDATE_MODD_FROM_NMLVAR
-CALL POSNAM(ILUSPA,'NAM_BLANKN',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_BLANKN', GFOUND )
 CALL INIT_NAM_BLANKn
 IF (GFOUND) THEN
   READ(UNIT=ILUSPA,NML=NAM_BLANKn)
   CALL UPDATE_NAM_BLANKn
 END IF
-CALL POSNAM(ILUSPA,'NAM_CONFZ',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONFZ)
-CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_CONF_SPAWN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN)
 CALL IO_File_close(TZEXPAFILE)
 !
@@ -241,7 +241,7 @@ ILUSPA = TZEXPAFILE%NLU
 CALL SET_POINTERS_TO_MODEL1()
 CALL GOTO_MODEL(2)
 CALL INIT_NMLVAR
-CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_SPAWN_SURF', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
 CALL UPDATE_MODD_FROM_NMLVAR
 CALL GOTO_MODEL(1)
diff --git a/src/MNH/spectre.f90 b/src/MNH/spectre.f90
index a87838c936e9c344c04f5fcc40325dac525eeab5..a6801f1de0a0391f08b41622b673fc1c038da998 100644
--- a/src/MNH/spectre.f90
+++ b/src/MNH/spectre.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2011-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2011-2023 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.
@@ -126,38 +126,38 @@ ILUNAM = TZNMLFILE%NLU
 !
 PRINT*, 'READ THE SPEC1.NAM FILE'
 !
-CALL POSNAM(ILUNAM,'NAM_SPECTRE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_SPECTRE', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_SPECTRE)
   PRINT*, '  namelist NAM_SPECTRE read'
 END IF
 !
 !
-CALL POSNAM(ILUNAM,'NAM_SPECTRE_FILE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_SPECTRE_FILE', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_SPECTRE_FILE)
   PRINT*, '  namelist NAM_SPECTRE_FILE read'
 END IF
 !
-CALL POSNAM(ILUNAM,'NAM_ZOOM_SPECTRE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_ZOOM_SPECTRE', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_ZOOM_SPECTRE)
   PRINT*, '  namelist NAM_ZOOM_SPECTRE read'
 END IF
 !
-CALL POSNAM(ILUNAM,'NAM_DOMAIN_AROME',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_DOMAIN_AROME', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_DOMAIN_AROME)
   PRINT*, '  namelist NAM_DOMAIN_AROME read'
 END IF
 !
-CALL POSNAM(ILUNAM,'NAM_CONFZ',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONFZ)
   PRINT*, '  namelist NAM_CONFZ read'
 END IF
 !
-CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONFIO)
   PRINT*, '  namelist NAM_CONFIO read'
diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90
index 172521e8abb91b0ef28830380b52e3aee4aea628..a9a08e66a8a54e80fd3ec5f53b7b7f90aee738c3 100644
--- a/src/MNH/stationn.f90
+++ b/src/MNH/stationn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2023 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.
@@ -82,6 +82,7 @@ END MODULE MODI_STATION_n
 !*      0. DECLARATIONS
 !          ------------
 !
+USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD_STAT
 USE MODD_CONF,          ONLY: LCARTESIAN
 USE MODD_CST,           ONLY: XPI
 USE MODD_DIAG_IN_RUN
@@ -89,7 +90,6 @@ USE MODD_GRID,          ONLY: XBETA, XLON0, XRPK
 USE MODD_PARAMETERS,    ONLY: JPVEXT
 USE MODD_PARAM_n,       ONLY: CRAD
 USE MODD_STATION_n
-USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD
 !
 USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INSTANT, STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V
 !
@@ -168,7 +168,7 @@ STATION: DO JS = 1,NUMBSTAT_LOC
   IF ( CRAD /= 'NONE' ) TSTATIONS(JS)%XTSRAD(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), PTS )
   TSTATIONS(JS)%XZS  = STATPROF_INTERP_2D( TSTATIONS(JS), PZ(:,:,1+JPVEXT))
 
-  IF ( LDIAG_SURFRAD ) THEN
+  IF ( LDIAG_SURFRAD_STAT ) THEN
     TSTATIONS(JS)%XZON10M(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_ZON10M )
     TSTATIONS(JS)%XMER10M(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_MER10M )
     TSTATIONS(JS)%XT2M   (IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_T2M    )
@@ -187,6 +187,7 @@ STATION: DO JS = 1,NUMBSTAT_LOC
       TSTATIONS(JS)%XSWDIR (IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_SWDIR  )
       TSTATIONS(JS)%XSWDIFF(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_SWDIFF )
       TSTATIONS(JS)%XDSTAOD(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_DSTAOD )
+      TSTATIONS(JS)%XSLTAOD(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_SLTAOD )
     END IF
     TSTATIONS(JS)%XSFCO2(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_SFCO2 )
   END IF
diff --git a/src/MNH/statprof_tools.f90 b/src/MNH/statprof_tools.f90
index 09fcf049b2a7e7e90b44aa9f1c6097fe89446593..f7e0e7596480f238e84f28cf092b60db764c6f08 100644
--- a/src/MNH/statprof_tools.f90
+++ b/src/MNH/statprof_tools.f90
@@ -35,15 +35,14 @@ CONTAINS
 SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
 ! ################################################
 
-!   USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD
-  USE MODD_CONF_n,       ONLY: NRR
-  USE MODD_DIAG_IN_RUN,  ONLY: LDIAG_IN_RUN
-  USE MODD_DIM_n,        ONLY: NKMAX
-  USE MODD_NSV,          ONLY: NSV
-  USE MODD_PARAMETERS,   ONLY: JPVEXT, XUNDEF
-  USE MODD_PARAM_n,      ONLY: CCLOUD, CRAD, CTURB
-  USE MODD_RADIATIONS_n, ONLY: NAER
-  USE MODD_SURF_PAR,     ONLY: XUNDEF_SFX => XUNDEF
+  USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF
+  USE MODD_CONF_n,        ONLY: NRR
+  USE MODD_DIM_n,         ONLY: NKMAX
+  USE MODD_NSV,           ONLY: NSV
+  USE MODD_PARAMETERS,    ONLY: JPVEXT, XUNDEF
+  USE MODD_PARAM_n,       ONLY: CCLOUD, CRAD, CTURB
+  USE MODD_RADIATIONS_n,  ONLY: NAER
+  USE MODD_SURF_PAR,      ONLY: XUNDEF_SFX => XUNDEF
 
   IMPLICIT NONE
 
@@ -96,7 +95,7 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
   ALLOCATE( TPPROFILER%XZWD(KSTORE) )
   ALLOCATE( TPPROFILER%XZHD(KSTORE) )
 
-!   IF ( LDIAG_IN_RUN ) THEN
+  IF ( LDIAG_SURFRAD_PROF ) THEN
     ALLOCATE( TPPROFILER%XT2M   (KSTORE) )
     ALLOCATE( TPPROFILER%XQ2M   (KSTORE) )
     ALLOCATE( TPPROFILER%XHU2M  (KSTORE) )
@@ -112,9 +111,15 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
       ALLOCATE( TPPROFILER%XSWU   (KSTORE) )
       ALLOCATE( TPPROFILER%XLWD   (KSTORE) )
       ALLOCATE( TPPROFILER%XLWU   (KSTORE) )
+      ALLOCATE( TPPROFILER%XSWDIR (KSTORE) )
+      ALLOCATE( TPPROFILER%XSWDIFF(KSTORE) )
+      ALLOCATE( TPPROFILER%XDSTAOD(KSTORE) )
+      ALLOCATE( TPPROFILER%XSLTAOD(KSTORE) )
     END IF
-    ALLOCATE( TPPROFILER%XTKE_DISS(KSTORE, IKU) )
-!   END IF
+    ALLOCATE( TPPROFILER%XSFCO2   (KSTORE) )
+  END IF
+
+  ALLOCATE( TPPROFILER%XTKE_DISS(KSTORE, IKU) )
 
   TPPROFILER%XZON      (:,:) = XUNDEF
   TPPROFILER%XMER      (:,:) = XUNDEF
@@ -143,7 +148,7 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
   TPPROFILER%XZWD(:) = XUNDEF
   TPPROFILER%XZHD(:) = XUNDEF
 
-!   IF ( LDIAG_IN_RUN ) THEN
+  IF ( LDIAG_SURFRAD_PROF ) THEN
     TPPROFILER%XT2M   (:) = XUNDEF_SFX
     TPPROFILER%XQ2M   (:) = XUNDEF_SFX
     TPPROFILER%XHU2M  (:) = XUNDEF_SFX
@@ -159,9 +164,15 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
       TPPROFILER%XSWU   (:) = XUNDEF
       TPPROFILER%XLWD   (:) = XUNDEF
       TPPROFILER%XLWU   (:) = XUNDEF
+      TPPROFILER%XSWDIR (:) = XUNDEF
+      TPPROFILER%XSWDIFF(:) = XUNDEF
+      TPPROFILER%XDSTAOD(:) = XUNDEF
+      TPPROFILER%XSLTAOD(:) = XUNDEF
     END IF
-    TPPROFILER%XTKE_DISS(:,:) = XUNDEF
-!   END IF
+    TPPROFILER%XSFCO2(:)      = XUNDEF
+  END IF
+
+  TPPROFILER%XTKE_DISS(:,:) = XUNDEF
 
 END SUBROUTINE PROFILER_ALLOCATE
 
@@ -169,7 +180,7 @@ END SUBROUTINE PROFILER_ALLOCATE
 SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE )
 ! ##############################################
 
-  USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD
+  USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD_STAT
   USE MODD_CONF_n,       ONLY: NRR
   USE MODD_NSV,          ONLY: NSV
   USE MODD_PARAMETERS,   ONLY: XUNDEF
@@ -198,7 +209,7 @@ SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE )
   ELSE
     ALLOCATE( TPSTATION%XTSRAD(0) )
   END IF
-  IF ( LDIAG_SURFRAD ) THEN
+  IF ( LDIAG_SURFRAD_STAT ) THEN
     ALLOCATE( TPSTATION%XT2M   (KSTORE) )
     ALLOCATE( TPSTATION%XQ2M   (KSTORE) )
     ALLOCATE( TPSTATION%XHU2M  (KSTORE) )
@@ -217,6 +228,7 @@ SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE )
       ALLOCATE( TPSTATION%XSWDIR (KSTORE) )
       ALLOCATE( TPSTATION%XSWDIFF(KSTORE) )
       ALLOCATE( TPSTATION%XDSTAOD(KSTORE) )
+      ALLOCATE( TPSTATION%XSLTAOD(KSTORE) )
     END IF
     ALLOCATE( TPSTATION%XSFCO2(KSTORE) )
   END IF
@@ -230,7 +242,7 @@ SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE )
   TPSTATION%XR(:,:)    = XUNDEF
   TPSTATION%XSV(:,:)   = XUNDEF
   TPSTATION%XTSRAD(:)  = XUNDEF
-  IF ( LDIAG_SURFRAD ) THEN
+  IF ( LDIAG_SURFRAD_STAT ) THEN
     TPSTATION%XT2M(:)    = XUNDEF_SFX
     TPSTATION%XQ2M(:)    = XUNDEF_SFX
     TPSTATION%XHU2M(:)   = XUNDEF_SFX
@@ -249,6 +261,7 @@ SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE )
       TPSTATION%XSWDIR(:)  = XUNDEF
       TPSTATION%XSWDIFF(:) = XUNDEF
       TPSTATION%XDSTAOD(:) = XUNDEF
+      TPSTATION%XSLTAOD(:) = XUNDEF
     END IF
     TPSTATION%XSFCO2(:)  = XUNDEF_SFX
   END IF
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index 2284be8ea3e8264dbb21d273f7e11a7604ffad51..9c3c5b5849ed8591196b57cc81690e35eb862485 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -203,7 +203,6 @@ USE MODD_AIRCRAFT_BALLOON
 use modd_budget,           only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, &
                                  tbudiachrometadata
 USE MODD_CST,              ONLY: XRV
-USE MODD_DIAG_IN_RUN,      ONLY: LDIAG_IN_RUN
 use modd_field,            only: NMNHDIM_LEVEL, NMNHDIM_FLYER_PROC, NMNHDIM_FLYER_TIME, NMNHDIM_UNUSED, &
                                  tfieldmetadata_base, TYPEREAL
 USE MODD_IO,               ONLY: TFILEDATA
@@ -268,7 +267,7 @@ IPROCZ = SIZE(TPFLYER%XRTZ,2)+ SIZE(TPFLYER%XRZ,2)+ SIZE(TPFLYER%XRZ,3)+  SIZE(T
 
 IF (NSV_LIMA_BEG<=NSV_LIMA_END) IPROCZ= IPROCZ+ SIZE(TPFLYER%XCCZ,2) + SIZE(TPFLYER%XCRZ,2)
 IF (SIZE(TPFLYER%XTKE  )>0) IPROC = IPROC + 1
-IF (LDIAG_IN_RUN) IPROC = IPROC + 1
+IPROC = IPROC + 1 ! TKE_DISS
 IF (LORILAM) IPROC = IPROC + JPMODE*3
 IF (LDUST) IPROC = IPROC + NMODE_DST*3
 IF (SIZE(TPFLYER%XTSRAD)>0) IPROC = IPROC + 1
@@ -352,9 +351,7 @@ DO JSV=1,SIZE(TPFLYER%XSVW_FLUX,2)
   WRITE ( YTITLE, FMT = '( A, I3.3 )' ) 'SV_FLUX', JSV
   call Add_point( Trim( ytitle ), 'scalar flux', 'SVUNIT m s-1', tpflyer%xsvw_flux(:,jsv) )
 END DO
-IF (LDIAG_IN_RUN) THEN
-  call Add_point( 'Tke_Diss', 'TKE dissipation rate', 'm2 s-2', tpflyer%xtke_diss(:) )
-ENDIF
+call Add_point( 'Tke_Diss', 'TKE dissipation rate', 'm2 s-2', tpflyer%xtke_diss(:) )
 !
 IF (SIZE(TPFLYER%XSV,2)>=1) THEN
   ! Scalar variables
diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90
index 4f27769f9d9560bee7196a32ce2ed37b49b6bff2..cb4330d88a9c934e7e4f07d8242256f26ad46d1e 100644
--- a/src/MNH/write_desfmn.f90
+++ b/src/MNH/write_desfmn.f90
@@ -216,8 +216,8 @@ USE MODN_BLOWSNOW_n
 USE MODN_BLOWSNOW
 USE MODN_IBM_PARAM_n
 USE MODN_RECYCL_PARAM_n
-USE MODN_PROFILER_n
-USE MODN_STATION_n
+USE MODN_PROFILER_n,     LDIAG_SURFRAD_PROF => LDIAG_SURFRAD
+USE MODN_STATION_n,      LDIAG_SURFRAD_STAT => LDIAG_SURFRAD
 USE MODN_FIRE_n
 USE MODN_FLYERS
 !
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index a6099e6a0f4eb779347699adbcf1e6f85fc896ca..01c1c560e957fed8f28c7445895ae399ea2487da 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -1348,8 +1348,26 @@ IF ((LCHEMDIAG).AND.(LORILAM).AND.(LUSECHEM)) THEN
   IF (.NOT.(ASSOCIATED(XSIG3D))) &
     ALLOCATE(XSIG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
   !
-  CALL  PPP2AERO(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XRHODREF, &
-                 PSIG3D=XSIG3D, PRG3D=XRG3D, PN3D=XN3D, PCTOTA=ZPTOTA)
+  IF (CRGUNIT=="MASS") THEN
+  XRG3D(:,:,:,1) = XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2)
+  XRG3D(:,:,:,2) = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2)
+  ELSE
+  XRG3D(:,:,:,1) = XINIRADIUSI
+  XRG3D(:,:,:,2) = XINIRADIUSJ
+  END IF
+  XSIG3D(:,:,:,1) = XINISIGI
+  XSIG3D(:,:,:,2) = XINISIGJ
+  XN3D(:,:,:,1) = XN0IMIN
+  XN3D(:,:,:,2) = XN0JMIN
+  
+  ZPTOTA(:,:,:,:,:) = 0.
+
+  CALL  PPP2AERO(XSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_AERBEG:NSV_AEREND),&
+                 XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), &
+                 PSIG3D=XSIG3D(IIB:IIE,IJB:IJE,IKB:IKE,:),&
+                 PRG3D=XRG3D(IIB:IIE,IJB:IJE,IKB:IKE,:),&
+                 PN3D=XN3D(IIB:IIE,IJB:IJE,IKB:IKE,:),& 
+                 PCTOTA=ZPTOTA(IIB:IIE,IJB:IJE,IKB:IKE,:,:))
 
   TZFIELD = TFIELDMETADATA(                   &
     CMNHNAME   = 'generic for aerosol modes', &
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index 57a71520c08f08422bb87928e1a0ee143e70735d..33e3d1c32c52c3d6c1d4cc78880ac2fb18e05be6 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -91,6 +91,9 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG_SUPP
 !!      J.-P. Chaboureau 07/2018 bug fix on XEMIS when calling CALL_RTTOVxx
 !!      J.-P. Chaboureau 09/04/2021 add the call to RTTOV13
 !  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
+!!      D. Ricard & Q.Rodier 08/2023 add some diagnostics on pressure levels 
+!!     (temperature, relative and specific humidity, vertical velocity, TKE)
+!!      D. Ricard 08/2023 add a diagnostic: maximum of cloud fraction on vertical levels
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -100,7 +103,7 @@ USE MODD_CH_AEROSOL,        ONLY: LORILAM
 USE MODD_CH_BUDGET_n,       ONLY: CNAMES_BUDGET, NEQ_BUDGET, XTCHEM
 USE MODD_CH_FLX_n,          ONLY: XCHFLX
 USE MODD_CH_PRODLOSSTOT_n,  ONLY: CNAMES_PRODLOSST, NEQ_PLT, XLOSS, XPROD
-USE MODD_CST,               ONLY: XCPD, XP00, XRD, XTT
+USE MODD_CST,               ONLY: XCPD, XP00, XRD, XTT, XMV, XMD, XALPI, XGAMI, XBETAI
 USE MODD_CURVCOR_n,         ONLY: XCORIOZ
 USE MODD_DIAG_IN_RUN,       ONLY: XCURRENT_ZON10M, XCURRENT_MER10M,           &
                                   XCURRENT_SFCO2, XCURRENT_SWD, XCURRENT_LWD, &
@@ -111,7 +114,7 @@ use modd_field,             only: NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED, NMN
 use modd_field
 USE MODD_IO,                ONLY: TFILEDATA
 USE MODD_CONF,              ONLY: LCARTESIAN
-USE MODD_CONF_n,            ONLY: LUSERC, LUSERI, NRR
+USE MODD_CONF_n,            ONLY: LUSERC, LUSERI, LUSERV, NRR
 USE MODD_DEEP_CONVECTION_n, ONLY: NCLBASCONV, NCLTOPCONV, XCAPE, XDMFCONV, XDRCCONV, XDRICONV, XDRVCONV, &
                                   XDTHCONV, XDSVCONV, XMFCONV, XPRLFLXCONV, XPRSFLXCONV, XUMFCONV
 USE MODD_DIAG_FLAG,         ONLY: CRAD_SAT, LCHEMDIAG, LCLD_COV, LCOARSE, LISOAL, LISOPR, LISOTH, LRAD_SUBG_COND, &
@@ -122,7 +125,7 @@ USE MODD_METRICS_n,         ONLY: XDXX, XDYY, XDZX, XDZY, XDZZ
 USE MODD_NSV,               ONLY: NSV, NSV_CHEMBEG, NSV_CHEMEND, TSVLIST
 USE MODD_PARAMETERS,        ONLY: JPVEXT, NUNDEF, XUNDEF
 USE MODD_PARAM_KAFR_n,      ONLY: LCHTRANS
-USE MODD_PARAM_n,           ONLY: CRAD, CSURF
+USE MODD_PARAM_n,           ONLY: CRAD, CSURF, CCLOUD
 USE MODD_PARAM_RAD_n,       only: NRAD_COLNBR
 USE MODD_RADIATIONS_N,      ONLY: NCLEARCOL_TM1, NDLON, NFLEV, NSTATM,                                  &
                                   XAER, XAZIM, XCCO2, XDIR_ALB, XDIRFLASWD, XDIRSRFSWD, XDTHRAD, XEMIS, &
@@ -137,6 +140,7 @@ use mode_field,             only: Find_field_id_from_mnhname
 USE MODE_IO_FIELD_WRITE,    only: IO_Field_write
 USE MODE_MSG
 USE MODE_NEIGHBORAVG,       ONLY: BLOCKAVG, MOVINGAVG
+USE MODE_THERMO,            ONLY: SM_FOES
 USE MODE_TOOLS_LL,          ONLY: GET_INDICE_ll
 
 #ifdef MNH_RTTOV_8
@@ -171,7 +175,7 @@ TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! Output file
 INTEGER           :: IIU,IJU,IKU,IIB,IJB,IKB,IIE,IJE,IKE ! Arrays bounds
 INTEGER           :: IKRAD  
 ! 
-INTEGER           :: JI,JJ,JK,JSV   ! loop index
+INTEGER           :: JI,JJ,JK,JSV,JRR   ! loop index
 ! 
 ! variables for Diagnostic variables related to deep convection
 REAL,DIMENSION(:,:), ALLOCATABLE              :: ZWORK21,ZWORK22
@@ -197,7 +201,8 @@ INTEGER :: IPRES, ITH
 CHARACTER(LEN=4) :: YCAR4
 CHARACTER(LEN=4), DIMENSION(SIZE(XISOPR)) :: YPRES
 CHARACTER(LEN=4), DIMENSION(SIZE(XISOTH)) :: YTH
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK32,ZWORK33,ZWORK34,ZWRES,ZPRES,ZWTH
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK32,ZWORK33,ZWORK34,ZWRES,ZPRES,ZWTH, &
+                                       ZRT,ZQV,ZMRVP,ZWRES1,ZTEMPP
 REAL, DIMENSION(:), ALLOCATABLE :: ZTH
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))  :: ZPOVO
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))  :: ZVOX,ZVOY,ZVOZ
@@ -433,6 +438,21 @@ IF (LCLD_COV .AND. LUSERC) THEN
   CALL IO_Field_write(TPFILE,'CLDFR',XCLDFR)
   CALL IO_Field_write(TPFILE,'ICEFR',XICEFR)
 !
+  ZWORK21(:,:)=0.0
+  ZWORK21(IIB:IIE,IJB:IJE)=MAXVAL(XCLDFR(IIB:IIE,IJB:IJE,JPVEXT+1:IKE),DIM=3)
+ 
+  TZFIELD%CMNHNAME   = 'CLDFRMAX'
+  TZFIELD%CSTDNAME   = 'max_cloud_fraction'
+  TZFIELD%CLONGNAME  = 'CLDFRMAX'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_MAx of CLoud fraction'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  TZFIELD%LTIMEDEP   = .TRUE.
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
+  !
 !  Visibility                                    
 !
   ZWORK31(:,:,:)= 1.E4                ! 10 km for clear sky
@@ -909,6 +929,7 @@ IF (CSURF=='EXTE') THEN
     CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SFCO2)
   END IF
   !
+  IF ( CRAD /= 'NONE' ) THEN
   IF(ANY(XCURRENT_SWD/=XUNDEF))THEN
     TZFIELD = TFIELDMETADATA(                           &
       CMNHNAME   = 'SWD',                               &
@@ -968,6 +989,7 @@ IF (CSURF=='EXTE') THEN
       LTIMEDEP   = .TRUE.                               )
     CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_LWU)
   END IF
+  END IF ! CRAD/='NONE'
 END IF
 
 ! MODIF FP NOV 2012
@@ -995,6 +1017,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
   END DO
 
   ALLOCATE(ZWRES(IIU,IJU,IPRES))
+  ALLOCATE(ZTEMPP(IIU,IJU,IPRES))
   ZWRES(:,:,:)=XUNDEF
   ALLOCATE(ZPRES(IIU,IJU,IPRES))
   IPRES=0
@@ -1030,6 +1053,17 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
 ! *********************
+! Temperature
+! *********************
+  DO JK=1,IPRES
+    TZFIELD%CMNHNAME   = 'TEMP'//TRIM(YPRES(JK))//'HPA'
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'K'
+    TZFIELD%CCOMMENT   = 'X_Y_air temperature '//TRIM(YPRES(JK))//' hPa'
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK)*(ZPRES(:,:,JK)/XP00)**(XRD/XCPD))
+  END DO
+  ZTEMPP(:,:,:)=ZWRES(:,:,:)
+! *********************
 ! Wind
 ! *********************
   ZWORK31(:,:,:) = MXF(XUT(:,:,:))
@@ -1053,6 +1087,29 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CCOMMENT   = 'X_Y_V component of wind '//TRIM(YPRES(JK))//' hPa'
     CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
+  !
+  ZWORK31(:,:,:) = MZF(XWT(:,:,:))
+  CALL PINTER(ZWORK31, XPABST, XZZ, ZTEMP, ZWRES, ZPRES, &
+          IIU, IJU, IKU, IKB, IPRES, 'LOG', 'RHU.')
+  DO JK=1,IPRES
+    TZFIELD%CMNHNAME   = 'WT'//TRIM(YPRES(JK))//'HPA'
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CCOMMENT   = 'X_Y_V component of wind '//TRIM(YPRES(JK))//' hPa'
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
+  END DO
+! *********************
+! Turbulent kinetic energy
+! *********************
+  CALL PINTER(XTKET, XPABST, XZZ, ZTEMP, ZWRES, ZPRES, &
+         IIU, IJU, IKU, IKB, IPRES, 'LOG', 'RHU.')
+  DO JK=1,IPRES
+    TZFIELD%CMNHNAME   = 'TKET'//TRIM(YPRES(JK))//'HPA'
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm 2 s-2'
+    TZFIELD%CCOMMENT   = 'X_Y_turbulent kinetic energy '//TRIM(YPRES(JK))//' hPa'
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
+  END DO
 ! *********************
 ! Water Vapour Mixing Ratio
 ! *********************
@@ -1065,6 +1122,55 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CCOMMENT   = 'X_Y_Vapor Mixing Ratio '//TRIM(YPRES(JK))//' hPa'
     CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK)*1.E3)
   END DO
+!
+! *********************
+! Relative humidity
+! *********************
+  IF (LUSERV) THEN
+    ALLOCATE(ZWRES1(IIU,IJU,IPRES))
+    ALLOCATE(ZMRVP(IIU,IJU,IPRES))
+    ZMRVP(:,:,:)=ZWRES(:,:,:)
+    ZWRES1(:,:,:)=SM_FOES(ZTEMPP(:,:,:))
+    ZWRES1(:,:,:)=(XMV/XMD)*ZWRES1(:,:,:)/(ZPRES(:,:,:)-ZWRES1(:,:,:))
+    ZWRES(:,:,:)=100.*ZMRVP(:,:,:)/ZWRES1(:,:,:)
+    IF (CCLOUD(1:3) =='ICE' .OR. CCLOUD =='C3R5' .OR. CCLOUD == 'LIMA')  THEN
+      WHERE ( ZTEMPP(:,:,:)< XTT)
+        ZWRES1(:,:,:) = EXP( XALPI - XBETAI/ZTEMPP(:,:,:) &
+                       - XGAMI*ALOG(ZTEMPP(:,:,:)) ) !saturation over ice
+        ZWRES1(:,:,:)=(XMV/XMD)*ZWRES1(:,:,:)/(ZPRES(:,:,:)-ZWRES1(:,:,:))
+        ZWRES(:,:,:)=100.*ZMRVP(:,:,:)/ZWRES1(:,:,:)
+      END WHERE
+    END IF
+    DO JK=1,IPRES
+      TZFIELD%CMNHNAME   = 'REHU'//TRIM(YPRES(JK))//'HPA'
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'percent'
+      TZFIELD%CCOMMENT   = 'X_Y_Relative humidity '//TRIM(YPRES(JK))//' hPa'
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    END DO
+    DEALLOCATE(ZWRES1,ZMRVP,ZTEMPP)
+  END IF
+  !
+  ALLOCATE(ZRT(IIU,IJU,IKU))
+  ALLOCATE(ZQV(IIU,IJU,IKU))
+  ZRT(:,:,:)=0.
+  DO JRR=1,NRR
+    ZRT(:,:,:) = ZRT(:,:,:) + XRT(:,:,:,JRR)
+  END DO
+  ZQV(:,:,:) = XRT(:,:,:,1) / (1.0 + ZRT(:,:,:))
+  ! *********************
+  ! Water specific humidity
+  ! *********************
+  CALL PINTER(ZQV, XPABST, XZZ, ZTEMP, ZWRES, ZPRES, &
+         IIU, IJU, IKU, IKB, IPRES, 'LOG', 'RHU.')
+  DO JK=1,IPRES
+    TZFIELD%CMNHNAME   = 'QV'//TRIM(YPRES(JK))//'HPA'
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'kg kg-1'
+    TZFIELD%CCOMMENT   = 'X_Y_Vapor Specific humidity '//TRIM(YPRES(JK))//' hPa'
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
+  END DO
+  DEALLOCATE(ZRT,ZQV)
 ! *********************
 ! Geopotential in meters
 ! *********************
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index ed97cc4758803960f3b69215912f189291c883dd..98e73e04c80ffa866f208ccd3299bf70d8ab2845 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -51,10 +51,10 @@ SUBROUTINE WRITE_PROFILER_n( TPDIAFILE )
 !*      0. DECLARATIONS
 !          ------------
 !
+USE MODD_ALLPROFILER_n,   ONLY: LDIAG_SURFRAD_PROF
 USE MODD_CONF_n,          ONLY: NRR
 USE MODD_DIM_n,           ONLY: NKMAX
 USE MODD_IO,              ONLY: ISNPROC, ISP, TFILEDATA
-USE MODD_DIAG_IN_RUN,     ONLY: LDIAG_IN_RUN
 USE MODD_MPIF
 USE MODD_NSV,             ONLY: NSV
 USE MODD_PARAMETERS,      ONLY: JPVEXT
@@ -146,11 +146,12 @@ IF ( ISNPROC > 1 ) THEN
   IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE * IKU !Tke term
   IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) IPACKSIZE = IPACKSIZE + ISTORE * IKU  !CIZ term
   IPACKSIZE = IPACKSIZE + 4 * ISTORE
-  IF ( LDIAG_IN_RUN ) THEN
+  IF ( LDIAG_SURFRAD_PROF ) THEN
     IPACKSIZE = IPACKSIZE + ISTORE * 10
-    IF ( CRAD /= 'NONE' )  IPACKSIZE = IPACKSIZE + ISTORE * 4
-    IPACKSIZE = IPACKSIZE + ISTORE * IKU !XTKE_DISS term
+    IF ( CRAD /= 'NONE' )  IPACKSIZE = IPACKSIZE + ISTORE * 8
+    IPACKSIZE = IPACKSIZE + ISTORE !XSFCO2 term
   END IF
+  IPACKSIZE = IPACKSIZE + ISTORE * IKU !XTKE_DISS term
 
   ALLOCATE( ZPACK(IPACKSIZE) )
 END IF
@@ -215,7 +216,7 @@ PROFILER: DO JS = 1, INUMPROF
       ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XZWD(:); IPOS = IPOS + ISTORE
       ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XZHD(:); IPOS = IPOS + ISTORE
 
-      IF ( LDIAG_IN_RUN ) THEN
+      IF ( LDIAG_SURFRAD_PROF ) THEN
         ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XT2M;    IPOS = IPOS + ISTORE
         ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XQ2M;    IPOS = IPOS + ISTORE
         ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XHU2M;   IPOS = IPOS + ISTORE
@@ -231,10 +232,16 @@ PROFILER: DO JS = 1, INUMPROF
           ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSWU;    IPOS = IPOS + ISTORE
           ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XLWD;    IPOS = IPOS + ISTORE
           ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XLWU;    IPOS = IPOS + ISTORE
+          ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSWDIR;  IPOS = IPOS + ISTORE
+          ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSWDIFF; IPOS = IPOS + ISTORE
+          ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XDSTAOD; IPOS = IPOS + ISTORE
+          ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSLTAOD; IPOS = IPOS + ISTORE
         END IF
-        ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XTKE_DISS(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
+        ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSFCO2;    IPOS = IPOS + ISTORE
       END IF
 
+      ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XTKE_DISS(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
+
       IF ( IPOS-1 /= IPACKSIZE ) &
         call Print_msg( NVERB_WARNING, 'IO', 'WRITE_PROFILER_n', 'IPOS-1 /= IPACKSIZE (sender side)', OLOCAL = .TRUE. )
 
@@ -297,7 +304,7 @@ PROFILER: DO JS = 1, INUMPROF
       TZPROFILER%XZWD(:) = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
       TZPROFILER%XZHD(:) = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
 
-      IF ( LDIAG_IN_RUN ) THEN
+      IF ( LDIAG_SURFRAD_PROF ) THEN
         TZPROFILER%XT2M    = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
         TZPROFILER%XQ2M    = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
         TZPROFILER%XHU2M   = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
@@ -309,14 +316,20 @@ PROFILER: DO JS = 1, INUMPROF
         TZPROFILER%XGFLUX  = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
         TZPROFILER%XLEI    = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
         IF ( CRAD /= 'NONE' ) THEN
-          TZPROFILER%XSWD = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
-          TZPROFILER%XSWU = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
-          TZPROFILER%XLWD = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
-          TZPROFILER%XLWU = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
+          TZPROFILER%XSWD    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+          TZPROFILER%XSWU    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+          TZPROFILER%XLWD    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+          TZPROFILER%XLWU    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+          TZPROFILER%XSWDIR  = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+          TZPROFILER%XSWDIFF = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+          TZPROFILER%XDSTAOD = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+          TZPROFILER%XSLTAOD = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
         END IF
-        TZPROFILER%XTKE_DISS(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
+        TZPROFILER%XSFCO2    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
       END IF
 
+      TZPROFILER%XTKE_DISS(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
+
       IF ( IPOS-1 /= IPACKSIZE ) &
         call Print_msg( NVERB_WARNING, 'IO', 'WRITE_PROFILER_n', 'IPOS-1 /= IPACKSIZE (receiver side)', OLOCAL = .TRUE. )
     END IF
@@ -334,13 +347,13 @@ END SUBROUTINE WRITE_PROFILER_n
 SUBROUTINE PROFILER_DIACHRO_n( TPDIAFILE, TPPROFILER )
 ! ####################################################
 
+USE MODD_ALLPROFILER_n,   ONLY: LDIAG_SURFRAD_PROF
 use modd_budget,          only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, &
                                 tbudiachrometadata
 USE MODD_CH_AEROSOL,      ONLY: LORILAM, JPMODE
 USE MODD_CONF,            ONLY: LCARTESIAN
 USE MODD_CONF_n,          ONLY: NRR
 USE MODD_CST,             ONLY: XRV
-USE MODD_DIAG_IN_RUN,     only: LDIAG_IN_RUN
 USE MODD_DUST,            ONLY: LDUST, NMODE_DST
 USE MODD_DIM_n,           ONLY: NKMAX
 use modd_field,           only: NMNHDIM_LEVEL, NMNHDIM_LEVEL_W, NMNHDIM_PROFILER_TIME, NMNHDIM_PROFILER_PROC, NMNHDIM_UNUSED, &
@@ -385,7 +398,11 @@ IKU = NKMAX + 2 * JPVEXT !Number of vertical levels
 !
 !IPROC is too large (not a big problem) due to the separation between vertical profiles and point values
 IPROC = 25 + NRR + NSV
-IF (LDIAG_IN_RUN) IPROC = IPROC + 15
+IF (LDIAG_SURFRAD_PROF) THEN
+  IPROC = IPROC + 10
+  IF(CRAD/="NONE")  IPROC = IPROC + 8
+  IPROC = IPROC + 1 ! XSFCO2 term
+END IF
 IF (LORILAM) IPROC = IPROC + JPMODE*3
 IF (LDUST) IPROC = IPROC + NMODE_DST*3
 IF (LDUST .OR. LORILAM .OR. LSALT) IPROC=IPROC+NAER
@@ -422,8 +439,7 @@ call Add_profile( 'W',        'Air vertical speed',            'm s-1',  tpprofi
 !Store position of W in the field list. Useful because it is not computed on the same Arakawa-grid points
 jproc_w = jproc
 
-if ( ldiag_in_run ) &
-  call Add_profile( 'TKE_DISS', 'TKE dissipation rate', 'm2 s-2', tpprofiler%xtke_diss )
+call Add_profile( 'TKE_DISS', 'TKE dissipation rate', 'm2 s-2', tpprofiler%xtke_diss )
 
 if ( ccloud == 'ICE3' .or. ccloud == 'ICE4' ) &
   call Add_profile( 'CIT',      'Ice concentration',    'kg-3',   tpprofiler%xciz )
@@ -658,7 +674,7 @@ ALLOCATE ( XWORK6(1, 1, 1, ISTORE, 1, IPROC) )
 
 jproc = 0
 
-if ( ldiag_in_run ) then
+if ( ldiag_surfrad_prof ) then
   call Add_point( 'T2m',    '2-m temperature',               'K',       tpprofiler%xt2m    )
   call Add_point( 'Q2m',    '2-m humidity',                  'kg kg-1', tpprofiler%xq2m    )
   call Add_point( 'HU2m',   '2-m relative humidity',         'percent', tpprofiler%xhu2m   )
@@ -673,6 +689,10 @@ if ( ldiag_in_run ) then
     call Add_point( 'SWU',  'Upward short-wave radiation',   'W m-2',   tpprofiler%xswu    )
     call Add_point( 'LWD',  'Downward long-wave radiation',  'W m-2',   tpprofiler%xlwd    )
     call Add_point( 'LWU',  'Upward long-wave radiation',    'W m-2',   tpprofiler%xlwu    )
+    call Add_point( 'SWDIR',  'Downward direct short-wave radiation',  'W m-2', tpprofiler%xswdir(:)  )
+    call Add_point( 'SWDIFF', 'Downward diffuse short-wave radiation', 'W m-2', tpprofiler%xswdiff(:) )
+    call Add_point( 'DSTAOD', 'Dust aerosol optical depth',            'm',     tpprofiler%xdstaod(:) )
+    call Add_point( 'SLTAOD', 'Salt aerosol optical depth',            'm',     tpprofiler%xsltaod(:) )
   end if
   call Add_point( 'LEI',    'Solid Latent heat flux',        'W m-2',   tpprofiler%xlei    )
 end if
@@ -682,6 +702,8 @@ call Add_point( 'ZTD', 'Zenith Tropospheric Delay', 'm',      tpprofiler%xztd )
 call Add_point( 'ZWD', 'Zenith Wet Delay',          'm',      tpprofiler%xzwd )
 call Add_point( 'ZHD', 'Zenith Hydrostatic Delay',  'm',      tpprofiler%xzhd )
 
+if ( ldiag_surfrad_prof ) call Add_point( 'SFCO2', 'CO2 Surface Flux', 'mg m-2 s-1', tpprofiler%xsfco2(:) )
+
 Allocate( tzfields( jproc ) )
 
 tzfields(:)%cmnhname  = ctitle(1 : jproc)
diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90
index a94bf78b08f6c1b793d01d41aa0317856ad59488..903380597d8454e9743a91097c1f9a47f0b5d8e9 100644
--- a/src/MNH/write_stationn.f90
+++ b/src/MNH/write_stationn.f90
@@ -44,7 +44,7 @@ SUBROUTINE WRITE_STATION_n( TPDIAFILE )
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_ALLSTATION_n,    ONLY: LDIAG_SURFRAD
+USE MODD_ALLSTATION_n,    ONLY: LDIAG_SURFRAD_STAT
 USE MODD_CONF_n,          ONLY: NRR
 USE MODD_IO,              ONLY: ISNPROC, ISP, TFILEDATA
 USE MODD_MPIF
@@ -130,9 +130,9 @@ IF ( ISNPROC > 1 ) THEN
   IPACKSIZE = IPACKSIZE + ISTORE * ( 5 + NRR + NSV )
   IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE !Tke term
   IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE !XTSRAD term
-  IF ( LDIAG_SURFRAD ) THEN
+  IF ( LDIAG_SURFRAD_STAT ) THEN
     IF ( CSURF == 'EXTE' ) IPACKSIZE = IPACKSIZE + ISTORE * 10
-    IF ( CRAD /= 'NONE' )  IPACKSIZE = IPACKSIZE + ISTORE * 7
+    IF ( CRAD /= 'NONE' )  IPACKSIZE = IPACKSIZE + ISTORE * 8
     IPACKSIZE = IPACKSIZE + ISTORE !XSFCO2 term
   END IF
 
@@ -175,7 +175,7 @@ STATION: DO JS = 1, INUMSTAT
       IF ( CRAD /= 'NONE' ) THEN
         ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XTSRAD(:); IPOS = IPOS + ISTORE
       END IF
-      IF ( LDIAG_SURFRAD ) THEN
+      IF ( LDIAG_SURFRAD_STAT ) THEN
         IF ( CSURF == 'EXTE') THEN
           ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XT2M;    IPOS = IPOS + ISTORE
           ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XQ2M;    IPOS = IPOS + ISTORE
@@ -196,6 +196,7 @@ STATION: DO JS = 1, INUMSTAT
           ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XSWDIR;  IPOS = IPOS + ISTORE
           ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XSWDIFF; IPOS = IPOS + ISTORE
           ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XDSTAOD; IPOS = IPOS + ISTORE
+          ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XSLTAOD; IPOS = IPOS + ISTORE
         END IF
         ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XSFCO2;    IPOS = IPOS + ISTORE
       END IF
@@ -238,7 +239,7 @@ STATION: DO JS = 1, INUMSTAT
       IF ( CRAD /= 'NONE' ) THEN
         TZSTATION%XTSRAD(:) = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
       END IF
-      IF ( LDIAG_SURFRAD ) THEN
+      IF ( LDIAG_SURFRAD_STAT ) THEN
         IF ( CSURF == 'EXTE' ) THEN
           TZSTATION%XT2M    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
           TZSTATION%XQ2M    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
@@ -259,8 +260,9 @@ STATION: DO JS = 1, INUMSTAT
           TZSTATION%XSWDIR  = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
           TZSTATION%XSWDIFF = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
           TZSTATION%XDSTAOD = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+          TZSTATION%XSLTAOD = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
         END IF
-        TZSTATION%XSFCO2 =    ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
+        TZSTATION%XSFCO2    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
       END IF
 
       IF ( IPOS-1 /= IPACKSIZE ) &
@@ -278,7 +280,7 @@ END SUBROUTINE WRITE_STATION_n
 SUBROUTINE STATION_DIACHRO_n( TPDIAFILE, TPSTATION )
 ! ##################################################
 
-USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD
+USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD_STAT
 use modd_budget,        only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, &
                               tbudiachrometadata
 USE MODD_CONF,          ONLY: LCARTESIAN
@@ -327,9 +329,9 @@ type(tfieldmetadata_base), dimension(:), allocatable :: tzfields
 IPROC = 5 + SIZE(TPSTATION%XR,2) + SIZE(TPSTATION%XSV,2)
 
 IF ( CTURB == 'TKEL' ) IPROC = IPROC + 1
-IF (LDIAG_SURFRAD) THEN
+IF (LDIAG_SURFRAD_STAT) THEN
   IF(CSURF=="EXTE") IPROC = IPROC + 10
-  IF(CRAD/="NONE")  IPROC = IPROC + 7
+  IF(CRAD/="NONE")  IPROC = IPROC + 8
   IPROC = IPROC + 1 ! XSFCO2 term
 END IF
 IF (LORILAM) IPROC = IPROC + JPMODE*(3+NSOA+NCARB+NSP)
@@ -363,7 +365,7 @@ end if
 call Add_point( 'W',  'Air vertical speed',    'm s-1', tpstation%xw(:)  )
 call Add_point( 'Th', 'Potential temperature', 'K',     tpstation%xth(:) )
 
-if ( ldiag_surfrad ) then
+if ( ldiag_surfrad_stat ) then
   if ( csurf == "EXTE" ) then
     call Add_point( 'T2m',    '2-m temperature',        'K',       tpstation%xt2m(:)    )
     call Add_point( 'Q2m',    '2-m humidity',           'kg kg-1', tpstation%xq2m(:)    )
@@ -384,6 +386,7 @@ if ( ldiag_surfrad ) then
     call Add_point( 'SWDIR',  'Downward direct short-wave radiation',  'W m-2', tpstation%xswdir(:)  )
     call Add_point( 'SWDIFF', 'Downward diffuse short-wave radiation', 'W m-2', tpstation%xswdiff(:) )
     call Add_point( 'DSTAOD', 'Dust aerosol optical depth',            'm',     tpstation%xdstaod(:) )
+    call Add_point( 'SLTAOD', 'Salt aerosol optical depth',            'm',     tpstation%xsltaod(:) )
   end if
 end if
 
@@ -620,7 +623,7 @@ end if
 
 if ( crad /= 'NONE' ) call Add_point( 'Tsrad', 'Radiative Surface Temperature', 'K', tpstation%xtsrad(:) )
 
-if ( ldiag_surfrad ) call Add_point( 'SFCO2', 'CO2 Surface Flux', 'mg m-2 s-1', tpstation%xsfco2(:) )
+if ( ldiag_surfrad_stat ) call Add_point( 'SFCO2', 'CO2 Surface Flux', 'mg m-2 s-1', tpstation%xsfco2(:) )
 !
 !----------------------------------------------------------------------------
 !
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index 4f0961d8e48419a0a966933dcf1ac64215208bb7..0763fd28301b809b9496f68736e0846dc36fdd8c 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2005-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-2023 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.
@@ -137,9 +137,9 @@ ILUNAM = TZNMLFILE%NLU
 CPGDFILE  = 'PGDFILE'                         ! name of the input file
 YZOOMFILE = ''
 YZOOMNBR  = '00'
-CALL POSNAM(ILUNAM,'NAM_PGDFILE',GFOUND,ILUOUT0)
+CALL POSNAM( TZNMLFILE, 'NAM_PGDFILE', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PGDFILE)
-CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND,ILUOUT0)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 CALL IO_Config_set()
 !
diff --git a/src/PHYEX/aux/modd_dimphyexn.f90 b/src/PHYEX/aux/modd_dimphyexn.f90
index a2767fe04d1d746f47a742200d17f1f97522477d..cac698c823aa8e03727ee9d744341830f5e9ef9a 100644
--- a/src/PHYEX/aux/modd_dimphyexn.f90
+++ b/src/PHYEX/aux/modd_dimphyexn.f90
@@ -76,6 +76,7 @@ TYPE DIMPHYEX_t
   INTEGER :: NIJE  ! Last horizontal inner mass point index
   !
   INTEGER :: NLESMASK ! Number of LES masks
+  INTEGER :: NLES_TIMES ! Number of LES time data storage
 !
 END TYPE DIMPHYEX_t
 !
diff --git a/src/PHYEX/aux/mode_argslist_ll_phy.F90 b/src/PHYEX/aux/mode_argslist_ll_phy.F90
new file mode 100644
index 0000000000000000000000000000000000000000..de0a2f3be638ee37ff57be176a475ad882f2b290
--- /dev/null
+++ b/src/PHYEX/aux/mode_argslist_ll_phy.F90
@@ -0,0 +1,60 @@
+!MNH_LIC Copyright 2023-2023 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.
+!-----------------------------------------------------------------
+!
+!!    #######################
+MODULE MODE_ARGSLIST_ll_PHY
+!
+ USE MODE_ll
+ USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+ USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+!
+ CONTAINS
+!
+ SUBROUTINE ADD3DFIELD_ll_PHY(D, TPLIST, PFIELD, HNAME)
+!!    ###############################################
+!
+!!****  *ADD3DFIELD_ll_PHY* -
+!
+!!    Purpose
+!!    -------
+!     This routine is used as an interface to ADD3DFIELD_ll for
+!     unpacking horizontal dimensions
+!
+!!    Reference
+!!    ---------
+!
+!     see PHYEX documentation
+!
+!!    Implicit Arguments
+!!    ------------------
+!
+!     Module MODD_ARGSLIST :
+!         LIST_ll : list of fields
+!         DIMPHYEX_t: PHYEX dimensions
+!
+!!    Author
+!!    ------
+!
+!     Q.Rodier
+!
+!!    Modifications
+!!    -------------
+!     Original    August, 3, 2023
+!
+!-------------------------------------------------------------------------------
+!
+  IMPLICIT NONE
+!
+  TYPE(DIMPHYEX_t),        INTENT(IN)   :: D
+  TYPE(LIST_ll), POINTER         :: TPLIST   ! list of fields
+  REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PFIELD   ! field which is unpaked here
+!                                              of fields
+  CHARACTER(LEN=*), INTENT(IN) :: HNAME ! Name of the field to be added
+
+  CALL ADD3DFIELD_ll(TPLIST, PFIELD, HNAME)
+              
+ END SUBROUTINE ADD3DFIELD_ll_PHY
+END MODULE MODE_ARGSLIST_ll_PHY
diff --git a/src/PHYEX/aux/mode_fill_dimphyexn.f90 b/src/PHYEX/aux/mode_fill_dimphyexn.f90
index 80679f8e1929dfc71b47905a1d88abf6ebffd437..5f965be18b7d6a788d424ab047032aded219485c 100644
--- a/src/PHYEX/aux/mode_fill_dimphyexn.f90
+++ b/src/PHYEX/aux/mode_fill_dimphyexn.f90
@@ -6,7 +6,7 @@
 MODULE MODE_FILL_DIMPHYEX
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE FILL_DIMPHYEX(YDDIMPHYEX, KIT, KJT, KKT, LTURB)
+SUBROUTINE FILL_DIMPHYEX(YDDIMPHYEX, KIT, KJT, KKT, LTURB,KLES_TIMES)
 !     #########################
 !
 !!
@@ -48,6 +48,7 @@ IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t), INTENT(OUT) :: YDDIMPHYEX ! Structure to fill in
 INTEGER, INTENT(IN) :: KIT, KJT, KKT ! Array dimensions
+INTEGER, INTENT(IN), OPTIONAL :: KLES_TIMES  ! Number of LES data storage frequency
 LOGICAL, INTENT(IN), OPTIONAL :: LTURB ! Flag to replace array dimensions I/JB and I/JE to the full array size
                                        ! needed if computation in HALO points (e.g. in turbulence)
 LOGICAL :: YTURB
@@ -97,7 +98,11 @@ ELSE
 END IF
 IF (LHOOK) CALL DR_HOOK('FILL_DIMPHYEX', 1, ZHOOK_HANDLE)
 !
-YDDIMPHYEX%NLESMASK = 1
+YDDIMPHYEX%NLESMASK=1
+YDDIMPHYEX%NLES_TIMES=0
+IF (PRESENT(KLES_TIMES)) THEN
+  YDDIMPHYEX%NLES_TIMES = KLES_TIMES
+END IF
 IF (LLES_MY_MASK) YDDIMPHYEX%NLESMASK = YDDIMPHYEX%NLESMASK + NLES_MASKS_USER
 IF (LLES_NEB_MASK) YDDIMPHYEX%NLESMASK = YDDIMPHYEX%NLESMASK + 2
 IF (LLES_CORE_MASK) YDDIMPHYEX%NLESMASK = YDDIMPHYEX%NLESMASK + 2
diff --git a/src/PHYEX/micro/mode_ice4_budgets.f90 b/src/PHYEX/micro/mode_ice4_budgets.f90
index e2d91bd8c7adb3221a2fd53b3655df6f6af066a2..a33b0acf7fca490a07caaa8b10bdb4fb70a89924 100644
--- a/src/PHYEX/micro/mode_ice4_budgets.f90
+++ b/src/PHYEX/micro/mode_ice4_budgets.f90
@@ -1,9 +1,11 @@
-!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 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.
 !-----------------------------------------------------------------
-!     ######spl
+! Modifications:
+!  P. Wautelet 14/04/2023: initialize ZZ_LSFACT and ZZ_LVFACT
+!-----------------------------------------------------------------
 MODULE MODE_ICE4_BUDGETS
 IMPLICIT NONE
 CONTAINS
@@ -73,7 +75,9 @@ IIJE=D%NIJE
 ZINV_TSTEP=1./PTSTEP
 !
 IF (BUCONF%LBUDGET_TH) THEN
-  ZZ_DIFF(:,:)=0.
+  ZZ_DIFF(:,:)   = 0.
+  ZZ_LSFACT(:,:) = 0.
+  ZZ_LVFACT(:,:) = 0.
   DO JK = IKTB, IKTE
     DO JIJ = IIJB, IIJE
       ZZ_LVFACT(JIJ, JK) = PLVFACT(JIJ, JK) / PEXNREF(JIJ, JK)
diff --git a/src/PHYEX/turb/les_mean_subgrid_phy.f90 b/src/PHYEX/turb/les_mean_subgrid_phy.f90
index 88a7d2c7260c6756fca71fcaabaebfbaa19b0f34..92d0629464e0cff34788b70ae8bcc8cd6d4071b5 100644
--- a/src/PHYEX/turb/les_mean_subgrid_phy.f90
+++ b/src/PHYEX/turb/les_mean_subgrid_phy.f90
@@ -25,7 +25,7 @@ TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
 TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIJT,D%NKT), INTENT(IN)    :: PA
 !
-REAL,    DIMENSION(D%NKLES,TLES%NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NKLES,D%NLES_TIMES,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
 !
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
@@ -41,7 +41,7 @@ TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
 TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIJT), INTENT(IN)    :: PA
 !
-REAL,    DIMENSION(TLES%NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NLES_TIMES), INTENT(INOUT) :: PA_MEAN
 !
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
@@ -63,7 +63,7 @@ IMPLICIT NONE
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
 TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIJT,D%NKT), INTENT(IN)    :: PA
-REAL,    DIMENSION(D%NKLES,TLES%NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NKLES,D%NLES_TIMES,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
 CALL LES_MEAN_SUBGRID_unpack3D(D,TLES, PA, PA_MEAN, OSUM)
@@ -85,7 +85,7 @@ IMPLICIT NONE
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
 TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIJT), INTENT(IN)    :: PA
-REAL,    DIMENSION(TLES%NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NLES_TIMES), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
 CALL LES_MEAN_SUBGRID_unpackSURF(D, TLES, PA, PA_MEAN, OSUM)
@@ -105,7 +105,7 @@ IMPLICIT NONE
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
 TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PA
-REAL,    DIMENSION(D%NKLES,TLES%NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NKLES,D%NLES_TIMES,D%NLESMASK), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
 CALL LES_MEAN_SUBGRID_3D(PA, PA_MEAN, OSUM)
@@ -128,7 +128,7 @@ IMPLICIT NONE
 TYPE(DIMPHYEX_t),          INTENT(IN)    :: D
 TYPE(TLES_t),              INTENT(IN)    :: TLES
 REAL,    DIMENSION(D%NIT,D%NJT), INTENT(IN)    :: PA
-REAL,    DIMENSION(TLES%NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN
+REAL,    DIMENSION(D%NLES_TIMES), INTENT(INOUT) :: PA_MEAN
 LOGICAL, OPTIONAL,         INTENT(IN)    :: OSUM
 !
 CALL LES_MEAN_SUBGRID_SURF(PA, PA_MEAN, OSUM)
diff --git a/src/PHYEX/turb/mode_tke_eps_sources.f90 b/src/PHYEX/turb/mode_tke_eps_sources.f90
index aef4003ca11c629af10bfa8336bd7f91821fc6ff..ef2af6385bb73cc3853bb6998a045dea8c4e445f 100644
--- a/src/PHYEX/turb/mode_tke_eps_sources.f90
+++ b/src/PHYEX/turb/mode_tke_eps_sources.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 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.
@@ -145,6 +145,7 @@ USE MODD_TURB_n,         ONLY: TURB_t
 USE MODE_BUDGET_PHY,         ONLY: BUDGET_STORE_ADD_PHY, BUDGET_STORE_END_PHY, BUDGET_STORE_INIT_PHY
 USE MODE_IO_FIELD_WRITE_PHY, ONLY: IO_FIELD_WRITE_PHY
 USE MODE_ll
+USE MODE_ARGSLIST_ll_PHY, ONLY: ADD3DFIELD_ll_PHY
 !
 USE MODI_GET_HALO
 USE MODI_LES_MEAN_SUBGRID_PHY
@@ -320,7 +321,7 @@ IF (ODIAG_IN_RUN) THEN
                                   *(PEXPL*PTKEM(:,:) + TURBN%XIMPL*ZRES(:,:))
   !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
 !
-  CALL ADD2DFIELD_ll(TZFIELDDISS_ll, PCURRENT_TKE_DISS, 'TKE_EPS_SOURCES::PCURRENT_TKE_DISS' )
+  CALL ADD3DFIELD_ll_PHY(D, TZFIELDDISS_ll, PCURRENT_TKE_DISS, 'TKE_EPS_SOURCES::PCURRENT_TKE_DISS' )
   CALL UPDATE_HALO_ll(TZFIELDDISS_ll,IINFO_ll)
   CALL CLEANLIST_ll(TZFIELDDISS_ll)
 ENDIF
@@ -474,12 +475,12 @@ IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
 ! stores the dynamic production 
 !
   TZFIELD = TFIELDMETADATA(  &
-    CMNHNAME   = 'DP',       &
+    CMNHNAME   = 'TKE_DP',   &
     CSTDNAME   = '',         &
-    CLONGNAME  = 'DP',       &
+    CLONGNAME  = 'Subgrid TKE dynamical production', &
     CUNITS     = 'm2 s-3',   &
     CDIR       = 'XY',       &
-    CCOMMENT   = 'X_Y_Z_DP', &
+    CCOMMENT   = 'Subgrid dynamical production of TKE', &
     NGRID      = 1,          &
     NTYPE      = TYPEREAL,   &
     NDIMS      = 3,          &
@@ -489,12 +490,12 @@ IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
 ! stores the thermal production 
 !
   TZFIELD = TFIELDMETADATA(  &
-    CMNHNAME   = 'TP',       &
+    CMNHNAME   = 'TKE_TP',   &
     CSTDNAME   = '',         &
-    CLONGNAME  = 'TP',       &
+    CLONGNAME  = 'Subgrid TKE thermal production', &
     CUNITS     = 'm2 s-3',   &
     CDIR       = 'XY',       &
-    CCOMMENT   = 'X_Y_Z_TP', &
+    CCOMMENT   = 'Subgrid thermal production of TKE', &
     NGRID      = 1,          &
     NTYPE      = TYPEREAL,   &
     NDIMS      = 3,          &
@@ -504,12 +505,12 @@ IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
 ! stores the whole turbulent transport
 !
   TZFIELD = TFIELDMETADATA(  &
-    CMNHNAME   = 'TR',       &
+    CMNHNAME   = 'TKE_TR',   &
     CSTDNAME   = '',         &
-    CLONGNAME  = 'TR',       &
+    CLONGNAME  = 'Subgrid TKE turbulent transport', &
     CUNITS     = 'm2 s-3',   &
     CDIR       = 'XY',       &
-    CCOMMENT   = 'X_Y_Z_TR', &
+    CCOMMENT   = 'Subgrid total turbulent transport of TKE', &
     NGRID      = 1,          &
     NTYPE      = TYPEREAL,   &
     NDIMS      = 3,          &
@@ -519,12 +520,12 @@ IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
 ! stores the dissipation of TKE 
 !
   TZFIELD = TFIELDMETADATA(    &
-    CMNHNAME   = 'DISS',       &
+    CMNHNAME   = 'TKE_DISS',   &
     CSTDNAME   = '',           &
-    CLONGNAME  = 'DISS',       &
+    CLONGNAME  = 'Subgrid TKE dissipation', &
     CUNITS     = 'm2 s-3',     &
     CDIR       = 'XY',         &
-    CCOMMENT   = 'X_Y_Z_DISS', &
+    CCOMMENT   = 'Subgrid dissipation of TKE', &
     NGRID      = 1,            &
     NTYPE      = TYPEREAL,     &
     NDIMS      = 3,            &
diff --git a/src/MNH/coupling_dmsn.F90 b/src/SURFEX/coupling_dmsn.F90
similarity index 100%
rename from src/MNH/coupling_dmsn.F90
rename to src/SURFEX/coupling_dmsn.F90
diff --git a/src/SURFEX/coupling_sltn.F90 b/src/SURFEX/coupling_sltn.F90
index 3db0c7b1a987464590ce42376196f115d2188399..cdb6c10ee14606387b1c2ef4ade7427feb3e2155 100644
--- a/src/SURFEX/coupling_sltn.F90
+++ b/src/SURFEX/coupling_sltn.F90
@@ -192,7 +192,7 @@ IF ((CEMISPARAM_SLT .eq. "Ova14").OR.(CEMISPARAM_SLT .eq. "OvB21a").OR.(CEMISPAR
 
   ! Tableau d'interpolation pour calculer ZNUWATER en fonction de la SST
   ! Cas ou 0 < SST < 10 C
-  WHERE ((PSST(:) >= 273.15).AND.(PSST(:) < 283.15))
+  WHERE (PSST(:) < 283.15)
     ZVISCO(:) = ZNUWATER(1) + (PSST(:) - ZWT(1)) * (ZNUWATER(2)-ZNUWATER(1)) / &
                 (ZWT(2) - ZWT(1))
   ENDWHERE
@@ -210,7 +210,7 @@ IF ((CEMISPARAM_SLT .eq. "Ova14").OR.(CEMISPARAM_SLT .eq. "OvB21a").OR.(CEMISPAR
   ENDWHERE
 
   ! Cas ou 30 < SST < 40 C
-  WHERE ((PSST(:) >= 303.15).AND.(PSST(:) < 313.15))
+  WHERE (PSST(:) >= 303.15)
     ZVISCO(:) = ZNUWATER(4) + (PSST(:) - ZWT(4)) * (ZNUWATER(5)-ZNUWATER(4)) / &
                 (ZWT(5) - ZWT(4))
   ENDWHERE
diff --git a/src/SURFEX/default_slt.F90 b/src/SURFEX/default_slt.F90
index ca96f03f98d0b5c56c5cbd4b31838ac4d8c27045..1ac9363d66c36f06f83a25449d1b2d1467410d60 100644
--- a/src/SURFEX/default_slt.F90
+++ b/src/SURFEX/default_slt.F90
@@ -53,10 +53,8 @@ IMPLICIT NONE
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('DEFAULT_SLT',0,ZHOOK_HANDLE)
-! ++ PIERRE / MARINE SSA - MODIF ++
-CEMISPARAM_SLT = 'Ova14'
-JPMODE_SLT     = 5
-! -- PIERRE / MARINE SSA - MODIF --
+CEMISPARAM_SLT = 'OvB21b'
+JPMODE_SLT     = 8
 LVARSIG_SLT    = .FALSE.
 LRGFIX_SLT     = .TRUE.
 IF (LHOOK) CALL DR_HOOK('DEFAULT_SLT',1,ZHOOK_HANDLE)
diff --git a/src/SURFEX/init_slt.F90 b/src/SURFEX/init_slt.F90
index 1476491cd9ec211e4e2964ae365f975ccff87dc3..c74c91f1272e646cbeefab81468ff9dbb25e99a4 100644
--- a/src/SURFEX/init_slt.F90
+++ b/src/SURFEX/init_slt.F90
@@ -63,12 +63,11 @@ IF (LHOOK) CALL DR_HOOK('INIT_SLT',0,ZHOOK_HANDLE)
 !Get initial size distributions. This is cut and pasted
 !from dead routine dstpsd.F90
 !Check for different source parameterizations
-! Default : CEMISPARAM_SLT.eq."Ova14"
-
-  NSLTMDE = 5
+! Default : CEMISPARAM_SLT.eq."OvB21b"
+  NSLTMDE = 8
   CRGUNITS   = 'NUMB'
-  XEMISRADIUS_INI_SLT = (/0.009, 0.021, 0.045, 0.115, 0.415, 0.0, 0.0, 0.0/)
-  XEMISSIG_INI_SLT = (/1.37, 1.5, 1.42, 1.53, 1.85,0.,0.,0./)
+  XEMISRADIUS_INI_SLT = (/0.009, 0.021, 0.045, 0.115, 0.415, 2.5, 7.0, 25.0/)
+  XEMISSIG_INI_SLT = (/1.37, 1.5, 1.42, 1.53,1.70,1.80, 1.85, 2.1/)
 
 IF ((CEMISPARAM_SLT.eq."OvB21a").OR.(CEMISPARAM_SLT.eq."OvB21b")) THEN
   NSLTMDE = 8
@@ -76,6 +75,11 @@ IF ((CEMISPARAM_SLT.eq."OvB21a").OR.(CEMISPARAM_SLT.eq."OvB21b")) THEN
   XEMISRADIUS_INI_SLT = (/0.009, 0.021, 0.045, 0.115, 0.415, 2.5, 7.0, 25.0/)
   XEMISSIG_INI_SLT = (/1.37, 1.5, 1.42, 1.53,1.70,1.80, 1.85, 2.1/)
 
+ELSE IF (CEMISPARAM_SLT.eq."Ova14") THEN
+  NSLTMDE = 5
+  CRGUNITS   = 'NUMB'
+  XEMISRADIUS_INI_SLT = (/0.009, 0.021, 0.045, 0.115, 0.415, 0.0, 0.0, 0.0/)
+  XEMISSIG_INI_SLT = (/1.37, 1.5, 1.42, 1.53, 1.85,0.,0.,0./)
 
 ELSE IF (CEMISPARAM_SLT.eq."Vig01") THEN
    NSLTMDE = 5
diff --git a/src/SURFEX/modd_ch_isban.F90 b/src/SURFEX/modd_ch_isban.F90
index 5e5a9cd49202de3de4d4fba742150fc7612b5c8e..cdb60e93910e621f899734eb8a7db06be2006ea3 100644
--- a/src/SURFEX/modd_ch_isban.F90
+++ b/src/SURFEX/modd_ch_isban.F90
@@ -87,7 +87,7 @@ NULLIFY(YCH_ISBA%CAER_NAMES)
 NULLIFY(YCH_ISBA%CDSTNAMES)
 NULLIFY(YCH_ISBA%CSLTNAMES)
 NULLIFY(YCH_ISBA%CSNWNAMES)
-YCH_ISBA%CCHEM_SURF_FILE=' '
+YCH_ISBA%CCHEM_SURF_FILE='MNHC.input'
 YCH_ISBA%CCH_DRY_DEP=' '
 YCH_ISBA%CPARAMBVOC=' '
 YCH_ISBA%LCH_BIO_FLUX=.FALSE.
diff --git a/src/SURFEX/modd_ch_surfn.F90 b/src/SURFEX/modd_ch_surfn.F90
index f0268de9148a3eee0342221f768cda67c5e3020c..3a3793967653388db4694c3c7ce09b6a8e61b773 100644
--- a/src/SURFEX/modd_ch_surfn.F90
+++ b/src/SURFEX/modd_ch_surfn.F90
@@ -89,7 +89,7 @@ IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_INIT",0,ZHOOK_HANDLE)
 YCH_SURF%CCH_EMIS='NONE'
 YCH_SURF%CCH_BIOEMIS='NONE'
 YCH_SURF%CCH_DMSEMIS='NONE'
-YCH_SURF%CCHEM_SURF_FILE='EXSEG1.nam'
+YCH_SURF%CCHEM_SURF_FILE='MNHC.input'
 YCH_SURF%LCH_SURF_EMIS=.FALSE.
 YCH_SURF%LCH_EMIS=.FALSE.
 YCH_SURF%LCH_BIOEMIS=.FALSE.
diff --git a/src/SURFEX/modd_ch_tebn.F90 b/src/SURFEX/modd_ch_tebn.F90
index 745cbc847d317063a3d5a21f5208b9fa08541388..516651103d3e4756334a04a2374bf9eba9882b49 100644
--- a/src/SURFEX/modd_ch_tebn.F90
+++ b/src/SURFEX/modd_ch_tebn.F90
@@ -85,7 +85,7 @@ NULLIFY(YCH_TEB%CCH_NAMES)
 NULLIFY(YCH_TEB%CAER_NAMES)
 NULLIFY(YCH_TEB%CDSTNAMES)
 NULLIFY(YCH_TEB%CSLTNAMES)
-YCH_TEB%CCHEM_SURF_FILE=' '
+YCH_TEB%CCHEM_SURF_FILE='MNHC.input'
 YCH_TEB%CCH_DRY_DEP=' '
 YCH_TEB%CPARAMBVOC=' '
 YCH_TEB%LCH_BIO_FLUX=.FALSE.
diff --git a/src/MNH/modd_dms_surf_fieldsn.F90 b/src/SURFEX/modd_dms_surf_fieldsn.F90
similarity index 100%
rename from src/MNH/modd_dms_surf_fieldsn.F90
rename to src/SURFEX/modd_dms_surf_fieldsn.F90
diff --git a/src/MNH/modd_dmsn.F90 b/src/SURFEX/modd_dmsn.F90
similarity index 100%
rename from src/MNH/modd_dmsn.F90
rename to src/SURFEX/modd_dmsn.F90
diff --git a/src/SURFEX/mode_pos_surf.F90 b/src/SURFEX/mode_pos_surf.F90
index 478ee2034e3b350f6b3e2d92e8770f506c3fba0b..dfb6b2f73dfcde2dbde801ffb085e1d89358fbe4 100644
--- a/src/SURFEX/mode_pos_surf.F90
+++ b/src/SURFEX/mode_pos_surf.F90
@@ -1,4 +1,4 @@
-!SFX_LIC Copyright 2001-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2001-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
@@ -53,8 +53,13 @@ END INTERFACE
 !!    --------------
 !!       I. Mallet  15/10/01     adaptation to MesoNH (F90 norm)
 !!       P. Wautelet 22/01/2019  use standard FLUSH statement instead of non standard intrinsics
+!!       P. Wautelet 12/04/2023: POSNAM: modernisation + improvements (taken from MesoNH mode_pos.f90)
 !------------------------------------------------------------------------------
 !
+#ifdef SFX_MNH
+USE MODE_MSG
+#endif
+!
 IMPLICIT NONE
 !
 !*       0.    DECLARATIONS
@@ -69,6 +74,7 @@ INTEGER, OPTIONAL,INTENT(IN) :: KLUOUT
 !
 !*       0.2   Declarations of local variables
 !
+ CHARACTER(LEN=100) :: YERRORMSG
  CHARACTER(LEN=120) :: YLINE
  CHARACTER(LEN=1)   :: YLTEST
 INTEGER            :: ILEN,ILEY,INDL,IND1,IRET
@@ -92,22 +98,26 @@ ILEN=LEN(HDNAML)
 DO JFILE=1,2
   search_nam : DO
     YLINE=' '
-    READ(UNIT=KULNAM,FMT='(A)',IOSTAT=IRET,END=100) YLINE
+    READ ( UNIT=KULNAM, FMT='(A)', IOSTAT=IRET, IOMSG=YERRORMSG, END=100 ) YLINE
 
 !   If file does not exist, most compilers would just create it and jump 
 !   to the END label ; but a few of them would report an error:         
     IF (IRET /=0 ) THEN                 
+#ifndef SFX_MNH
       INQUIRE(KULNAM,OPENED=LLOPENED)
       IF (LLOPENED) THEN
         IF (PRESENT(KLUOUT)) THEN
           WRITE(KLUOUT,FMT=*) 'MODE_POS_SURF : error reading from unit ',&
                 KULNAM,' file ',HDNAML,' line ',YLINE
           FLUSH(unit=KLUOUT)
-        ENDIF        
+        ENDIF
         CALL ABOR1_SFX('MODE_POS_SURF: read error in namelist file') 
       ELSE
         EXIT search_nam
       END IF
+#else
+      call Print_msg( NVERB_ERROR, 'IO', 'POSNAM (SFX)', Trim( HDNAML) // ': read error:' // Trim( YERRORMSG ) )
+#endif
     ELSE   
 !     FIRST SEARCH for "&" IN THE LINE, THEN CORRECT LINE AND TEST :
       INDL=INDEX(YLINE,'&')
@@ -120,12 +130,30 @@ DO JFILE=1,2
         END DO
         IND1=INDEX(YLINE,'&'//HDNAML)
         IF(IND1.NE.0) THEN
+          IF( IND1 > 1 ) THEN
+            IF ( LEN_TRIM( YLINE(:IND1-1) ) /= 0 ) THEN
+              ! Check that it is really the beginning of a namelist and that is not a comment
+              ! Nothing but spaces is allowed here
+#ifdef SFX_MNH
+              call Print_msg( NVERB_DEBUG, 'IO', 'POSNAM (SFX)', 'invalid header or commented namelist: ' // Trim ( YLINE) )
+#endif
+              CYCLE
+            END IF
+          END IF
           YLTEST=YLINE(IND1+ILEN+1:IND1+ILEN+1)
           IF(YLTEST == ' ') THEN
 !           NAMELIST FOUND : RETURN
             BACKSPACE(KULNAM)
             OFOUND=.TRUE.
+#ifndef SFX_MNH
             IF (PRESENT(KLUOUT)) WRITE(KLUOUT,FMT=*) '-- namelist ',HDNAML,' read'
+#else
+            IF ( PRESENT( KLUOUT ) ) THEN
+              call Print_msg( NVERB_INFO,  'IO', 'POSNAM (SFX)', 'namelist ' // Trim( HDNAML ) // ' found' )
+            ELSE
+              call Print_msg( NVERB_DEBUG, 'IO', 'POSNAM (SFX)', 'namelist ' // Trim( HDNAML ) // ' found' )
+            END IF
+#endif
             IF (LHOOK) CALL DR_HOOK('MODE_POS_SURF:POSNAM',1,ZHOOK_HANDLE)
             RETURN
           ENDIF
@@ -139,9 +167,19 @@ ENDDO
 
 BACKSPACE(KULNAM)
 ! end of file: namelist name not found
+#ifndef SFX_MNH
 IF (PRESENT(KLUOUT)) &
 WRITE(KLUOUT,FMT=*)  &
 '-- namelist ',HDNAML,' not found: default values used if required'
+#else
+IF ( PRESENT( KLUOUT ) ) THEN
+  call Print_msg( NVERB_INFO,  'IO', 'POSNAM (SFX)', 'namelist ' // Trim( HDNAML ) &
+                 // ' not found: default values used if required' )
+ELSE
+  call Print_msg( NVERB_DEBUG, 'IO', 'POSNAM (SFX)', 'namelist ' // Trim( HDNAML ) &
+                 // ' not found: default values used if required' )
+END IF
+#endif
 IF (LHOOK) CALL DR_HOOK('MODE_POS_SURF:POSNAM',1,ZHOOK_HANDLE)
 !------------------------------------------------------------------
 END SUBROUTINE POSNAM
diff --git a/src/MNH/read_dmsn.F90 b/src/SURFEX/read_dmsn.F90
similarity index 100%
rename from src/MNH/read_dmsn.F90
rename to src/SURFEX/read_dmsn.F90
diff --git a/src/MNH/writesurf_dmsn.F90 b/src/SURFEX/writesurf_dmsn.F90
similarity index 100%
rename from src/MNH/writesurf_dmsn.F90
rename to src/SURFEX/writesurf_dmsn.F90