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/diag.f90 b/src/MNH/diag.f90
index abc7599766929e2d08e88a4f57f17d12cca8032b..674b21574e9c2c06920f4e4271afb73bcc10b7ce 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/end_diag_in_run.f90 b/src/MNH/end_diag_in_run.f90
index 61405af363c8688e00877d1e7b5e1334eb17c292..6b48ed8a3aff27f7c153d2517732ece413c1377e 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
 !      #########################
@@ -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 9eccd2a696e1c3737fc7727148e7316acdcc0313..449a890f57ae9a9cf509f908a46967fbad708cce 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -1012,7 +1012,7 @@ IF (LDIAG_IN_RUN) THEN
   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_ZWS,    'GROUND_PARAM_n::XCURRENT_ZWS'    )
   CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2,  'GROUND_PARAM_n::XCURRENT_SFCO2'  )
 
   CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll)
@@ -1207,7 +1207,7 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_HU2M    (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_HU2M(:),   ISHAPE_2)
   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)
+  ! XCURRENT_ZWS     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZWS(:),    ISHAPE_2)
 ENDIF
 !
 DO JLAYER=1,SIZE(PDIR_ALB,3)
diff --git a/src/MNH/ini_diag_in_run.f90 b/src/MNH/ini_diag_in_run.f90
index 6f39e805a357747f41972243e967fbdbd58700e1..e3af33fa2bc9e300f3a95ada5482b1be5095383e 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.
@@ -111,7 +111,7 @@ IF (LDIAG_IN_RUN) THEN
   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
@@ -134,7 +134,7 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_SFCO2 = XUNDEF_SFX
   XCURRENT_TKE_DISS = XUNDEF
   XCURRENT_SLTAOD= XUNDEF
-  XCURRENT_ZWS = XUNDEF_SFX
+  ! XCURRENT_ZWS = XUNDEF_SFX
 ELSE
   ALLOCATE(XCURRENT_RN    (0,0))! net radiation
   ALLOCATE(XCURRENT_H     (0,0))! sensible heat flux
@@ -156,7 +156,7 @@ ELSE
   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_ZWS(0,0))! Significant height of waves
 END IF
 !
 !-------------------------------------------------------------------------------
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_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/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/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/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/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/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/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index 213063f3545c5c332f751b34e18e16ad2c717fc8..10c8623f5d247296a2cc35158ed31cc8cd465fc6 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -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 9774fc4b9449248108d77ddcd125b765078f816b..358023f5566a3d2a75a507f4a6762d5fc2544e79 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -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_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_ADR',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_EOL_ADR', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ADR)
-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 1edbd37ea3454d67c936de76de48764fde5b82c4..8c50f5066455b1cc22baee15c1b271fb8b20b324 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/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/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/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/mode_tke_eps_sources.f90 b/src/PHYEX/turb/mode_tke_eps_sources.f90
index aef4003ca11c629af10bfa8336bd7f91821fc6ff..7e1adeafbf71d858fe19dc8b108d88e26239d9df 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.
@@ -474,12 +474,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 +489,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 +504,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 +519,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/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/configure b/src/configure
index caecb21e36aec3e5af8f40b05e4b9ffa1cf0713f..d4f5e1d3d93c2d27ac95f29e964c92b0449e773a 100755
--- a/src/configure
+++ b/src/configure
@@ -480,7 +480,7 @@ export SLURM_CPU_BIND=none
 export I_MPI_PIN_PROCESSOR_LIST=all:map=spread
 "}
               ;;
-'Linux irlin'*|'Linux islin'*|'Linux ener440'*) # PC IFPEN
+'Linux irlin'*|'Linux islin'*|'Linux ener'*) # PC IFPEN
                 export     ARCH=${ARCH:-LXgfortran}
                 export  VER_MPI=${VER_MPI:-MPIAUTO}
                 export OPTLEVEL=${OPTLEVEL:-O2}
diff --git a/src/job_make_mesonh_dev_pc_ifpen b/src/job_make_mesonh_dev_pc_ifpen
index dacd453cbb27318ceff7442765a17a0eca87dda1..dd377ddac7dd0d438bac2614fd5e090acc6a94ed 100755
--- a/src/job_make_mesonh_dev_pc_ifpen
+++ b/src/job_make_mesonh_dev_pc_ifpen
@@ -14,7 +14,7 @@ export VER_MPI=MPIAUTO
 export OPTLEVEL=DEBUG
 
 # Test de l'existence du profile
-if ! [ -e ../conf/profile_mesonh-${ARCH}-R8I4-${VERSION_XYZ}-${VER_MPI}-${OPTLEVEL}]; then
+if ! [ -e ../conf/profile_mesonh-${ARCH}-R8I4-${VERSION_XYZ}-${VER_MPI}-${OPTLEVEL} ]; then
   ./configure
 fi