diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 97466a414e1dbb88e5fb8746cb10d3e65706df1c..ce06ed50bf7d80102600d3423136c97d754915b4 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -2002,6 +2002,20 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X0D(IMODEL))
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'DRYMASSS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'DRYMASSS'
+TFIELDLIST(IDX)%CUNITS     = 'kg'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Total Dry Mass Source'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 0
+TFIELDLIST(IDX)%LTIMEDEP   = .TRUE.
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X0D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'BL_DEPTH'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'BL_DEPTH'
@@ -3740,6 +3754,13 @@ IF (.NOT.ASSOCIATED(XDRYMASST)) THEN
   TFIELDLIST(IID)%TFIELD_X0D(1)%DATA=>XDRYMASST
 END IF
 !
+IF (.NOT.ASSOCIATED(XDRYMASSS)) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' XDRYMASSS was not associated')
+  ALLOCATE(XDRYMASSS)
+  CALL FIND_FIELD_ID_FROM_MNHNAME('DRYMASSS',IID,IRESP)
+  TFIELDLIST(IID)%TFIELD_X0D(1)%DATA=>XDRYMASSS
+END IF
+!
 IF (.NOT.ASSOCIATED(NRIMX)) THEN
   CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' NRIMX was not associated')
   ALLOCATE(NRIMX)
@@ -4341,6 +4362,14 @@ IF (.NOT.ASSOCIATED(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA)) THEN
 END IF
 XDRYMASST => TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA
 !
+CALL FIND_FIELD_ID_FROM_MNHNAME('DRYMASSS',IID,IRESP)
+IF (.NOT.ASSOCIATED(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA)) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',&
+                 'TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA was not associated for '//TFIELDLIST(IID)%CMNHNAME)
+  ALLOCATE(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA)
+END IF
+XDRYMASSS => TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA
+!
 ! MODD_DYN_n variables
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('RIMX',IID,IRESP)
diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
index cc3b67c97202e5cde8110d15df720aa5355eacf9..e696435f6a2afcc9dfd1d86d31625cfd57e446d4 100644
--- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90
+++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
@@ -49,6 +49,7 @@ MODULE MODE_MPPDB
 
   REAL                             :: PRECISION = 1e-8 * 0.0
   LOGICAL                          :: MPPDB_CHECK_LB = .FALSE.
+  LOGICAL                          :: MPPDB_ACTIVED  = .FALSE.
 
 CONTAINS
 
@@ -92,6 +93,7 @@ CONTAINS
     IF (MPPDB_INITIALIZED) RETURN
     !
     MPPDB_INITIALIZED = .TRUE.
+    MPPDB_ACTIVED  = .TRUE.
     !
     ! Init MPI
     !
@@ -251,8 +253,28 @@ CONTAINS
   END SUBROUTINE MPPDB_INIT
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  SUBROUTINE MPPDB_START_DEBUG()
+    IMPLICIT NONE
+    MPPDB_ACTIVED = .TRUE.
+  END SUBROUTINE MPPDB_START_DEBUG
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
+  SUBROUTINE MPPDB_STOP_DEBUG()
+    IMPLICIT NONE
+    MPPDB_ACTIVED = .FALSE.
+  END SUBROUTINE MPPDB_STOP_DEBUG
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  SUBROUTINE MPPDB_GET_ACTIVED(OACTIVE)
+    IMPLICIT NONE
+    LOGICAL , INTENT(OUT) :: OACTIVE
+    OACTIVE = MPPDB_ACTIVED 
+  END SUBROUTINE MPPDB_GET_ACTIVED
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
+  SUBROUTINE MPPDB_SET_ACTIVED(OACTIVE)
+    IMPLICIT NONE
+    LOGICAL , INTENT(IN) :: OACTIVE
+    MPPDB_ACTIVED = OACTIVE
+  END SUBROUTINE MPPDB_SET_ACTIVED
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
   SUBROUTINE MPPDB_BARRIER()
 #ifdef MNH_SP4
     !pas de mpi_spawn sur IBM-SP ni MPI_ARGV_NULL etc ...
@@ -263,7 +285,7 @@ CONTAINS
     !
     ! synchronize all father & sons
     !
-    IF ( .NOT. MPPDB_INITIALIZED ) RETURN 
+    IF (( .NOT. MPPDB_INITIALIZED ) .OR. ( .NOT. MPPDB_ACTIVED )) RETURN 
     !
     CALL MPI_BARRIER(MPPDB_INTRA_COMM,IERR)
     !
@@ -279,6 +301,7 @@ CONTAINS
     use modd_precision,     only: MNHINT_MPI, MNHREAL_MPI
     USE MODD_MPIF      , ONLY : MPI_STATUS_IGNORE, MPI_SUM
     USE MODE_GATHER_ll
+    USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX
 
     IMPLICIT NONE
 
@@ -310,12 +333,13 @@ CONTAINS
     INTEGER                              :: IIU_SON_ll,IJU_SON_ll,IKU_SON_ll
     INTEGER                              :: IIB_SON_ll,IIE_SON_ll,IJB_SON_ll,IJE_SON_ll
     INTEGER                              :: IHEXT_SON_ll , IDIFF_HEXT
+    INTEGER                              :: IMI
 
 #ifdef MNH_SP4
     !pas de mpi_spawn sur IBM-SP ni MPI_ARGV_NULL etc ...
     RETURN           
 #else
-    IF ( ( .NOT. MPPDB_INITIALIZED ) ) RETURN
+    IF ( ( .NOT. MPPDB_INITIALIZED ) .OR. ( .NOT. MPPDB_ACTIVED ) ) RETURN
     !get the global size of PTAB
     CALL MPI_ALLREDUCE(SIZE(PTAB), IGLBSIZEPTAB, 1,MNHINT_MPI, MPI_SUM, MPPDB_INTER_COMM, IINFO_ll)
     IF ( IGLBSIZEPTAB == 0 ) RETURN
@@ -386,10 +410,13 @@ CONTAINS
           MAX_DIFF=MAXVAL(TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IJB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT,1:IKU_ll)/MAX_VAL)
           TAB_INTERIOR_ll=> TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IJB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT,1:IKU_ll)
           !
+          IMI = GET_CURRENT_MODEL_INDEX()
           IF (MAX_DIFF > PRECISION ) THEN
-             write(6, '(" MPPDB_CHECK3D :: PB MPPDB_CHECK3D =",A40," ERROR=",e15.8," MAXVAL=",e15.8)' ) MESSAGE,MAX_DIFF , MAX_VAL
+             write(6, '(" MPPDB_CHECK3D :: PB MPPDB_CHECK3D =",A40," ERROR=",e15.8," MAXVAL=",e15.8," IMI=",I3.3)' ) &
+                       MESSAGE,MAX_DIFF , MAX_VAL, IMI
           ELSE
-             write(6, '(" MPPDB_CHECK3D :: OK MPPDB_CHECK3D =",A40," ERROR=",e15.8," MAXVAL=",e15.8)' ) MESSAGE,MAX_DIFF , MAX_VAL
+             write(6, '(" MPPDB_CHECK3D :: OK MPPDB_CHECK3D =",A40," ERROR=",e15.8," MAXVAL=",e15.8," IMI=",I3.3)' ) &
+                       MESSAGE,MAX_DIFF , MAX_VAL, IMI
           END IF
           flush(unit=OUTPUT_UNIT)
           !
@@ -475,7 +502,8 @@ CONTAINS
     USE MODD_MPIF      , ONLY : MPI_STATUS_IGNORE, MPI_SUM
     use modd_precision,     only: MNHINT_MPI, MNHREAL_MPI
 
-    USE  MODD_VAR_ll    , ONLY :  NMNH_COMM_WORLD
+    USE MODD_VAR_ll    , ONLY :  NMNH_COMM_WORLD
+    USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX
 
     IMPLICIT NONE
 
@@ -504,12 +532,13 @@ CONTAINS
     INTEGER                              :: IIU_SON_ll,IJU_SON_ll
     INTEGER                              :: IIB_SON_ll,IIE_SON_ll,IJB_SON_ll,IJE_SON_ll
     INTEGER                              :: IHEXT_SON_ll , IDIFF_HEXT
+    INTEGER                              :: IMI
 
 #ifdef MNH_SP4
     !pas de mpi_spawn sur IBM-SP ni MPI_ARGV_NULL etc ...
     RETURN           
 #else
-    IF ( ( .NOT. MPPDB_INITIALIZED ) ) RETURN
+    IF ( ( .NOT. MPPDB_INITIALIZED ) .OR. ( .NOT. MPPDB_ACTIVED ) ) RETURN
     CALL MPI_ALLREDUCE(SIZE(PTAB), IGLBSIZEPTAB, 1,MNHINT_MPI, MPI_SUM, MPPDB_INTRA_COMM, IINFO_ll)
     IF ( IGLBSIZEPTAB == 0 ) RETURN
 
@@ -573,10 +602,14 @@ CONTAINS
           IF ( MAX_VAL .EQ. 0.0 ) MAX_VAL = 1.0
           MAX_DIFF = MAXVAL( TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT) / MAX_VAL )
           TAB_INTERIOR_ll => TAB_ll(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IIB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT)
+          !
+          IMI = GET_CURRENT_MODEL_INDEX()
           IF (MAX_DIFF > PRECISION ) THEN
-             write(6, '(" MPPDB_CHECK2D :: PB MPPDB_CHECK2D =",A40," ERROR=",e15.8," MAXVAL=",e15.8)' ) MESSAGE,MAX_DIFF , MAX_VAL
+             write(6, '(" MPPDB_CHECK2D :: PB MPPDB_CHECK2D =",A40," ERROR=",e15.8," MAXVAL=",e15.8," IMI=",I3.3)' ) &
+                       MESSAGE,MAX_DIFF , MAX_VAL , IMI
           ELSE
-             write(6, '(" MPPDB_CHECK2D :: OK MPPDB_CHECK2D =",A40," ERROR=",e15.8," MAXVAL=",e15.8)' ) MESSAGE,MAX_DIFF , MAX_VAL
+             write(6, '(" MPPDB_CHECK2D :: OK MPPDB_CHECK2D =",A40," ERROR=",e15.8," MAXVAL=",e15.8," IMI=",I3.3)' ) &
+                       MESSAGE,MAX_DIFF , MAX_VAL , IMI
           END IF
           flush(unit=OUTPUT_UNIT)
           !
@@ -619,14 +652,16 @@ CONTAINS
 
   SUBROUTINE MPPDB_CHECKLB(PLB,MESSAGE,PRECISION,HLBTYPE,KRIM)
 
-    USE MODD_IO,            ONLY: GSMONOPROC, ISP, ISNPROC, L2D, LPACK
-    USE MODD_MPIF,          ONLY: MPI_STATUS_IGNORE
-    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
-    USE MODD_VAR_ll,        ONLY: NMNH_COMM_WORLD
-    use modd_precision,     only: MNHINT_MPI, MNHREAL_MPI
+    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
+    USE MODD_VAR_ll    , ONLY : NMNH_COMM_WORLD
+    USE MODD_IO ,        ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D
+    USE MODD_MPIF      , ONLY   : MPI_STATUS_IGNORE, MPI_SUM
 
     USE MODE_DISTRIB_LB
-
+    USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
+    USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX
+    use modd_precision,     only: MNHINT_MPI, MNHREAL_MPI
+    
     IMPLICIT NONE
 
     REAL, DIMENSION(:,:,:) , TARGET      :: PLB
@@ -657,14 +692,18 @@ CONTAINS
     INTEGER                              :: IIU_SON_ll,IJU_SON_ll,IKU_SON_ll
     INTEGER                              :: IIB_SON_ll,IIE_SON_ll,IJB_SON_ll,IJE_SON_ll
     INTEGER                              :: IHEXT_SON_ll , IDIFF_HEXT , IRIM_ll , IRIM_SON_ll
+    INTEGER                              :: IMI , IGLBSIZEPTAB
 
 #ifdef MNH_SP4
     !pas de mpi_spawn sur IBM-SP ni MPI_ARGV_NULL etc ...
     RETURN           
 #else
-    IF ( .NOT. MPPDB_INITIALIZED ) RETURN 
+    IF ( ( .NOT. MPPDB_INITIALIZED ) .OR. ( .NOT. MPPDB_ACTIVED ) ) RETURN
+    !get the global size of PLB
+    CALL MPI_ALLREDUCE(SIZE(PLB), IGLBSIZEPTAB, 1,MNHINT_MPI, MPI_SUM, MPPDB_INTER_COMM, IINFO_ll)
+    IF ( IGLBSIZEPTAB == 0 ) RETURN
     !
-    CALL MPPDB_BARRIER()
+    CALL  MPPDB_BARRIER()
     !
     IF(MPPDB_FATHER_WORLD) THEN
        !
@@ -674,26 +713,30 @@ CONTAINS
        IIU_ll = IIMAX_ll+2*JPHEXT
        IJU_ll = IJMAX_ll+2*JPHEXT
        IKU_ll = SIZE(PLB,3)
-       IRIM_ll = (KRIM+JPHEXT)*2
-
-       IF (HLBTYPE == 'LBX' .OR. HLBTYPE == 'LBXU') THEN 
-          IIU_ll = IRIM_ll
-       ELSE
-          IJU_ll = IRIM_ll
+       IRIM_ll = MAX(1,KRIM)
+       
+       IF       (HLBTYPE == 'LBX' ) THEN
+          IIU_ll = JPHEXT*2
+       ELSE IF ( HLBTYPE == 'LBXU') THEN
+          IIU_ll = (IRIM_ll+JPHEXT)*2
+       ELSE IF ( HLBTYPE == 'LBY') THEN
+          IJU_ll = JPHEXT*2
+       ELSE IF ( HLBTYPE == 'LBYV') THEN
+          IJU_ll = (IRIM_ll+JPHEXT)*2
        END IF
  
        IF (MPPDB_IRANK_WORLD.EQ.0)  THEN
           ! I/O proc case
           ALLOCATE(Z3D(IIU_ll,IJU_ll,SIZE(PLB,3)))
           DO JI = 1,ISNPROC
-             CALL GET_DISTRIB_LB(HLBTYPE,JI,'FM','WRITE',KRIM,IIB,IIE,IJB,IJE)
+             CALL GET_DISTRIB_LB(HLBTYPE,JI,'FM','WRITE',IRIM_ll,IIB,IIE,IJB,IJE)
              IF (IIB /= 0) THEN
                 TX3DP=>Z3D(IIB:IIE,IJB:IJE,:)
                 IF (ISP /= JI) THEN
                    CALL MPI_RECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1 &
                         ,99,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll) 
                 ELSE
-                   CALL GET_DISTRIB_LB(HLBTYPE,JI,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE)
+                   CALL GET_DISTRIB_LB(HLBTYPE,JI,'LOC','WRITE',IRIM_ll,IIB,IIE,IJB,IJE)
                    TX3DP = PLB(IIB:IIE,IJB:IJE,:)
                 END IF
              END IF
@@ -703,7 +746,7 @@ CONTAINS
 
        ELSE
           ! Other processors
-          CALL GET_DISTRIB_LB(HLBTYPE,ISP,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE)
+          CALL GET_DISTRIB_LB(HLBTYPE,ISP,'LOC','WRITE',IRIM_ll,IIB,IIE,IJB,IJE)
           IF (IIB /= 0) THEN
              TX3DP=>PLB(IIB:IIE,IJB:IJE,:)
              CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,0,99,NMNH_COMM_WORLD,IINFO_ll)
@@ -727,12 +770,16 @@ CONTAINS
           IIU_SON_ll = IIMAX_ll+2*IHEXT_SON_ll
           IJU_SON_ll = IJMAX_ll+2*IHEXT_SON_ll
           IKU_SON_ll = SIZE(PLB,3)
-          IRIM_SON_ll = (KRIM+IHEXT_SON_ll)*2
+          IRIM_SON_ll = MAX(1,KRIM)
           !
-          IF (HLBTYPE == 'LBX' .OR. HLBTYPE == 'LBXU') THEN 
-             IIU_SON_ll = IRIM_SON_ll
-          ELSE
-             IJU_SON_ll = IRIM_SON_ll
+          IF       (HLBTYPE == 'LBX' ) THEN
+             IIU_SON_ll = IHEXT_SON_ll*2
+          ELSE IF ( HLBTYPE == 'LBXU') THEN
+             IIU_SON_ll = (IRIM_SON_ll+IHEXT_SON_ll)*2
+          ELSE IF ( HLBTYPE == 'LBY') THEN
+             IJU_SON_ll = IHEXT_SON_ll*2
+          ELSE IF ( HLBTYPE == 'LBYV') THEN
+             IJU_SON_ll = (IRIM_SON_ll+IHEXT_SON_ll)*2
           END IF          
           !
           ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll,IKU_SON_ll))
@@ -765,13 +812,16 @@ CONTAINS
                                              IJB_SON_ll-IDIFF_HEXT:IJE_SON_ll+IDIFF_HEXT,1:IKU_SON_ll) ) )
           IF ( MAX_VAL .EQ. 0.0 ) MAX_VAL = 1.0
           !
+          IMI = GET_CURRENT_MODEL_INDEX()
           MAX_DIFF=MAXVAL(Z3D(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IJB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT,1:IKU_ll)/MAX_VAL)
           TAB_INTERIOR_ll=> Z3D(IIB_ll-IDIFF_HEXT:IIE_ll+IDIFF_HEXT,IJB_ll-IDIFF_HEXT:IJE_ll+IDIFF_HEXT,1:IKU_ll)
           !
           IF (MAX_DIFF > PRECISION ) THEN
-             print*," MPPDB_CHECKLB :: PB MPPDB_CHECKLB =", MESSAGE ," ERROR=",MAX_DIFF , MAX_VAL
+             write(6, '(" MPPDB_CHECKLB :: PB MPPDB_CHECKLB =",A40," ERROR=",e15.8," MAXVAL=",e15.8," IMI=",I3.3)' ) &
+                       MESSAGE ,MAX_DIFF , MAX_VAL , IMI
           ELSE
-             print*," MPPDB_CHECKLB :: OK MPPDB_CHECKLB =", MESSAGE ," ERROR=",MAX_DIFF , MAX_VAL
+             write(6, '(" MPPDB_CHECKLB :: OK MPPDB_CHECKLB =",A40," ERROR=",e15.8," MAXVAL=",e15.8," IMI=",I3.3)' ) &
+                      MESSAGE ,MAX_DIFF , MAX_VAL  , IMI
           END IF
           flush(unit=OUTPUT_UNIT)
           !
@@ -831,7 +881,7 @@ CONTAINS
     INTEGER                              :: KSIZE
     INTEGER                              :: KSIZE_FULL
     !
-    IF ( ( .NOT. MPPDB_INITIALIZED ) ) RETURN
+    IF ( ( .NOT. MPPDB_INITIALIZED ) .OR. ( .NOT. MPPDB_ACTIVED ) ) RETURN
     !
 !    IF ( SIZE(PTAB) == 0 ) THEN
 !      ALLOCATE(ZFIELD2D(0,0))
@@ -935,7 +985,7 @@ CONTAINS
     INTEGER                              :: IINFO_ll
     INTEGER                              :: IKSIZE_ll
     !
-    IF ( ( .NOT. MPPDB_INITIALIZED ) ) RETURN
+    IF ( ( .NOT. MPPDB_INITIALIZED ) .OR. ( .NOT. MPPDB_ACTIVED ) ) RETURN
     CALL MPI_ALLREDUCE(SIZE(PTAB), IGLBSIZEPTAB, 1,MNHINT_MPI, MPI_SUM, MPPDB_INTRA_COMM, IINFO_ll)
     IF ( IGLBSIZEPTAB == 0 ) RETURN
     CALL MPI_ALLREDUCE(SIZE(PTAB,2),IKSIZE_ll, 1, MNHINT_MPI, MPI_MAX, MPPDB_INTRA_COMM, IINFO_ll)
diff --git a/src/MNH/boundaries.f90 b/src/MNH/boundaries.f90
index 046a28af303cc6401540b799ad74289b7794fb3d..4aa484090f8d0b61f4d566943739faec89a2be31 100644
--- a/src/MNH/boundaries.f90
+++ b/src/MNH/boundaries.f90
@@ -420,6 +420,24 @@ ELSE
 !
 END IF
 !
+!     ============================================================    
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+ZLBXVT(:,:,:)  = real(ZLBXVT(:,:,:),kind=4)
+ZLBXWT(:,:,:)  = real(ZLBXWT(:,:,:),kind=4)
+ZLBXTHT(:,:,:) = real(ZLBXTHT(:,:,:),kind=4)
+IF ( SIZE(PTKET,1) /= 0 ) THEN
+   ZLBXTKET(:,:,:) = real(ZLBXTKET(:,:,:),kind=4)
+END IF
+IF ( KRR > 0) THEN
+   ZLBXRT(:,:,:,:) = real(ZLBXRT(:,:,:,:),kind=4)
+END IF
+IF ( KSV > 0) THEN
+   ZLBXSVT(:,:,:,:) = real(ZLBXSVT(:,:,:,:),kind=4)
+END IF
+!     ============================================================ 
+!
 IF ( SIZE(PLBYTHS,1) /= 0 .AND.                       &
      (    HLBCY(1)=='OPEN' .OR. HLBCY(2)=='OPEN'    ))  THEN          
   ZLBYUT(:,:,:) = PLBYUM(:,:,:) + ZTSTEP * PLBYUS(:,:,:)
@@ -453,6 +471,24 @@ ELSE
 END IF
 !
 !
+!     ============================================================    
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+ZLBYUT(:,:,:)  = real(ZLBYUT(:,:,:),kind=4)
+ZLBYWT(:,:,:)  = real(ZLBYWT(:,:,:),kind=4)
+ZLBYTHT(:,:,:) = real(ZLBYTHT(:,:,:),kind=4)
+IF ( SIZE(PTKET,1) /= 0 ) THEN
+   ZLBYTKET(:,:,:) = real(ZLBYTKET(:,:,:),kind=4)
+END IF
+IF ( KRR > 0) THEN
+   ZLBYRT(:,:,:,:) = real(ZLBYRT(:,:,:,:),kind=4) 
+END IF
+IF ( KSV > 0) THEN
+   ZLBYSVT(:,:,:,:) = real(ZLBYSVT(:,:,:,:),kind=4)
+END IF
+!     ============================================================ 
+!
 !-------------------------------------------------------------------------------
 ! PONDERATION COEFF for  Non-Normal velocities and pot temperature
 !
diff --git a/src/MNH/budget.f90 b/src/MNH/budget.f90
index 13c746c4344cd996220e6905df3e2020bbf2fab9..5e7dd0809c8f6296aca79452016cafe437950254 100644
--- a/src/MNH/budget.f90
+++ b/src/MNH/budget.f90
@@ -7,6 +7,7 @@
 !  P. Wautelet 28/01/2020: new subroutines: Budget_store_init, Budget_store_end and Budget_source_id_find in new module mode_budget
 !  P. Wautelet 17/08/2020: treat LES budgets correctly
 !  P. Wautelet 05/03/2021: measure cpu_time for budgets
+!  J.Escobar : 06/10/2021 :for bit reproductiblity use MPPDB_CHECK if LCHECK=T
 !-----------------------------------------------------------------
 
 !#################
@@ -36,6 +37,8 @@ contains
 
 subroutine Budget_store_init( tpbudget, hsource, pvars )
   use modd_les, only: lles_call
+  USE MODE_MPPDB
+  USE MODD_CONF, ONLY : LCHECK
 
   type(tbudgetdata),      intent(inout) :: tpbudget ! Budget datastructure
   character(len=*),       intent(in)    :: hsource  ! Name of the source term
@@ -43,7 +46,15 @@ subroutine Budget_store_init( tpbudget, hsource, pvars )
 
   integer :: iid ! Reference number of the current source term
 
-  call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_store_init', trim( tpbudget%cname )//':'//trim( hsource ) )
+  character(len=:),allocatable :: hbudget
+
+  hbudget =  trim( tpbudget%cname )//':'//trim( hsource )
+
+  IF (LCHECK) THEN
+     CALL MPPDB_CHECK3D(PVARS,'BUD_INI::'//hbudget,PRECISION)
+  END IF
+  
+  call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_store_init', hbudget )
 
   if ( lles_call ) then
     call Second_mnh( ztime1 )
@@ -112,6 +123,8 @@ subroutine Budget_store_init( tpbudget, hsource, pvars )
 
 subroutine Budget_store_end( tpbudget, hsource, pvars )
   use modd_les, only: lles_call
+  USE MODE_MPPDB
+  USE MODD_CONF, ONLY : LCHECK
 
   use modi_les_budget, only: Les_budget
 
@@ -123,7 +136,14 @@ subroutine Budget_store_end( tpbudget, hsource, pvars )
   integer :: igroup ! Number of the group where to store the source term
   real, dimension(:,:,:), allocatable :: zvars_add
 
-  call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_store_end', trim( tpbudget%cname )//':'//trim( hsource ) )
+  character(len=:),allocatable :: hbudget
+
+  hbudget =  trim( tpbudget%cname )//':'//trim( hsource )
+
+  IF (LCHECK) THEN
+     CALL MPPDB_CHECK3D(PVARS,'BUD_END::'//hbudget,PRECISION)
+  END IF  
+  call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_store_end', hbudget )
 
   if ( lles_call ) then
     if ( hsource /= tpbudget%clessource ) &
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index 48b3a7348e239e3db4e139c6687184d781a7365c..718f11ce615bb12340a0c91c7d2b514630be805a 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -1798,7 +1798,7 @@ gles = lles_mean .or. lles_resolved  .or. lles_subgrid .or. lles_updraft &
                  .or. lles_downdraft .or. lles_spectra
 !Called if budgets are enabled via NAM_BUDGET
 !or if LES budgets are enabled via NAM_LES (condition on kmi==1 to call it max once)
-if ( ( cbutype /= "NONE" .and. nbumod == kmi ) .or. ( gles .and. kmi == 1 ) ) THEN
+if ( ( cbutype /= "NONE" .and. nbumod == kmi ) .or. ( gles .and. kmi == 1 ) .or. LCHECK ) THEN
   call Budget_preallocate()
 end if
 
@@ -1913,7 +1913,7 @@ CALL READ_FIELD(KMI,TPINIFILE,IIU,IJU,IKU,                                    &
                 NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll,        &
                 XUM,XVM,XWM,XDUM,XDVM,XDWM,                                   &
                 XUT,XVT,XWT,XTHT,XPABST,XTKET,XRTKEMS,                        &
-                XRT,XSVT,XZWS,XCIT,XDRYMASST,                                 &
+                XRT,XSVT,XZWS,XCIT,XDRYMASST,XDRYMASSS,                       &
                 XSIGS,XSRCT,XCLDFR,XBL_DEPTH,XSBL_DEPTH,XWTHVMF,XPHC,XPHR,    &
                 XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,                      &
                 XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,                        &
@@ -1968,8 +1968,8 @@ CALL INI_LES_n
 !*       11.    INITIALIZE THE SOURCE OF TOTAL DRY MASS Md
 !               ------------------------------------------
 !
-IF((KMI==1).AND.LSTEADYLS) THEN
-  XDRYMASSS = 0.
+IF((KMI==1).AND.LSTEADYLS .AND. (CCONF=='START') ) THEN
+   XDRYMASSS = 0.
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -2163,20 +2163,22 @@ IF ( KMI > 1) THEN
   DPTR_XLBYRM=>XLBYRM
   DPTR_XLBXSVM=>XLBXSVM
   DPTR_XLBYSVM=>XLBYSVM
-  CALL INI_ONE_WAY_n(NDAD(KMI),KMI,                                                             &
-       DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4, &
-       DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4, &
-       NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),                                                     &
-       DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY,                                                       &
-       DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU,                   &
-       DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV,                   &
-       DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW,                   &
-       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM,                   &
-       CCLOUD, LUSECHAQ, LUSECHIC,                                                              &
-       DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM,                 &
-       DPTR_XLBXTHM,DPTR_XLBYTHM,                                                               &
-       DPTR_XLBXTKEM,DPTR_XLBYTKEM,                                                             &
-       DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM                                        )
+  IF (CCONF=='START')  THEN
+  CALL INI_ONE_WAY_n(NDAD(KMI),KMI,                        &
+       DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4,        &
+       DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4,        &
+       NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),      &
+       DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY,                                &
+       DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU,      &
+       DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV,      &
+       DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW,      &
+       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM,      &
+       CCLOUD, LUSECHAQ, LUSECHIC,                                                 &
+       DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM,    &
+       DPTR_XLBXTHM,DPTR_XLBYTHM,                                                  &
+       DPTR_XLBXTKEM,DPTR_XLBYTKEM,                                                &
+       DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM                           )
+   ENDIF
 END IF
 !
 !
diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90
index 84017a6b994ac7be3f3681429bfd3a61771b67ed..ac5f3cdef04db6c7ffa837bbbd1f849b8974e9a8 100644
--- a/src/MNH/mesonh.f90
+++ b/src/MNH/mesonh.f90
@@ -134,6 +134,7 @@ INTEGER       :: IINFO_ll                     ! return code of // routines
 ! Switch to model 1 variables
 #ifndef CPLOASIS
 CALL MPPDB_INIT()
+CALL MPPDB_STOP_DEBUG()  
 #endif
 !
 CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.)
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index c3002495d3c20611cedb2a373c5c3dce4e404f59..6ba8d83984325d8138102903d0428b07887e3a3d 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -944,6 +944,14 @@ CALL SECOND_MNH2(ZTIME2)
 !
 XT_BOUND = XT_BOUND + ZTIME2 - ZTIME1
 !
+!
+! For START/RESTART MPPDB_CHECK use 
+!IF ( (IMI==1) .AND. (CCONF == "START") .AND. (KTCOUNT == 2) ) THEN
+!   CALL MPPDB_START_DEBUG()
+!ENDIF
+!IF ( (IMI==1) .AND. (CCONF == "RESTA") .AND. (KTCOUNT == 1) ) THEN
+!   CALL MPPDB_START_DEBUG()
+!ENDIF
 !-------------------------------------------------------------------------------
 !* initializes surface number
 IF (CSURF=='EXTE') CALL GOTO_SURFEX(IMI)
@@ -1711,14 +1719,20 @@ CALL MPPDB_CHECK3DM("before RAD_BOUND :XRU/V/WS",PRECISION,XRUS,XRVS,XRWS)
 ZRUS=XRUS
 ZRVS=XRVS
 ZRWS=XRWS
-
+!
 if ( .not. l1d ) then
   if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'PRES', xrus(:, :, :) )
   if ( lbudget_v ) call Budget_store_init( tbudgets(NBUDGET_V), 'PRES', xrvs(:, :, :) )
   if ( lbudget_w ) call Budget_store_init( tbudgets(NBUDGET_W), 'PRES', xrws(:, :, :) )
 end if
-
-CALL RAD_BOUND (CLBCX,CLBCY,CTURB,XCARPKMAX,             &
+!
+CALL MPPDB_CHECK3DM("before RAD_BOUND : other var",PRECISION,XUT,XVT,XRHODJ,XTKET)
+CALL MPPDB_CHECKLB(XLBXUM,"modeln XLBXUM",PRECISION,'LBXU',NRIMX)
+CALL MPPDB_CHECKLB(XLBYVM,"modeln XLBYVM",PRECISION,'LBYV',NRIMY)
+CALL MPPDB_CHECKLB(XLBXUS,"modeln XLBXUS",PRECISION,'LBXU',NRIMX)
+CALL MPPDB_CHECKLB(XLBYVS,"modeln XLBYVS",PRECISION,'LBYV',NRIMY)
+!
+  CALL RAD_BOUND (CLBCX,CLBCY,CTURB,XCARPKMAX,           &
                 XTSTEP,                                  &
                 XDXHAT, XDYHAT, XZHAT,                   &
                 XUT, XVT,                                &
@@ -1764,6 +1778,7 @@ CALL MPPDB_CHECK3DM("before pressurez:XRU/V/WS",PRECISION,XRUS,XRVS,XRWS)
   XRUS_PRES = XRUS - XRUS_PRES + ZRUS
   XRVS_PRES = XRVS - XRVS_PRES + ZRVS
   XRWS_PRES = XRWS - XRWS_PRES + ZRWS
+  CALL MPPDB_CHECK3DM("after pressurez:XRU/V/WS",PRECISION,XRUS,XRVS,XRWS)
 !
 END IF
 !
diff --git a/src/MNH/num_diff.f90 b/src/MNH/num_diff.f90
index 65c221c739d179b1116501ac1ce8fe9700be733a..5e3f8d260e1c8ef48c5fa8372516fba357201d48 100644
--- a/src/MNH/num_diff.f90
+++ b/src/MNH/num_diff.f90
@@ -1120,18 +1120,18 @@ CASE ('CYCL')          ! In that case one must have HLBCX(1) == HLBCX(2)
                 TPHALO2%WEST(:,:)   +   PFIELDM(IW+1,:,:)                &
           -4.*( PFIELDM(IW-2,:,:)   +   PFIELDM(IW,:,:)     )            &
           +6.*  PFIELDM(IW-1,:,:)                                        &
-            -   TPHALO2LS%WEST(:,:) -   PLSFIELD(IW+1,:,:)               &
-          +4.*( PLSFIELD(IW-2,:,:)  +   PLSFIELD(IW,:,:)   )             &
-          -6.*  PLSFIELD(IW-1,:,:)  )
+            -   real(TPHALO2LS%WEST(:,:),kind=4) -  real(PLSFIELD(IW+1,:,:),kind=4)               &
+          +4.*( real(PLSFIELD(IW-2,:,:),kind=4)  +  real(PLSFIELD(IW,:,:),kind=4)   )             &
+          -6.*  real(PLSFIELD(IW-1,:,:),kind=4)  )
 !
       PRFIELDS(IE+1,:,:) = PRFIELDS(IE+1,:,:) - PRHODJ(IE+1,:,:) *       &
       PDK4*(                                                             &
                 PFIELDM(IE-1,:,:)   +  TPHALO2%EAST(:,:)                 &
           -4.*( PFIELDM(IE,:,:)     +  PFIELDM(IE+2,:,:)   )             &
           +6.*  PFIELDM(IE+1,:,:)                                        &
-             -  PLSFIELD(IE-1,:,:)  -  TPHALO2LS%EAST(:,:)               &
-          +4.*( PLSFIELD(IE,:,:)    +  PLSFIELD(IE+2,:,:)  )             &
-          -6.*  PLSFIELD(IE+1,:,:)  )
+             -  real(PLSFIELD(IE-1,:,:),kind=4)  -  real(TPHALO2LS%EAST(:,:),kind=4)               &
+          +4.*( real(PLSFIELD(IE,:,:),kind=4)    +  real(PLSFIELD(IE+2,:,:),kind=4)  )             &
+          -6.*  real(PLSFIELD(IE+1,:,:),kind=4)  )
 !
 !!$    ENDIF
 !
@@ -1143,9 +1143,9 @@ CASE ('CYCL')          ! In that case one must have HLBCX(1) == HLBCX(2)
                   PFIELDM(IW-2:IE-2,:,:)  + PFIELDM(IW+2:IE+2,:,:)        &
             -4.*( PFIELDM(IW-1:IE-1,:,:)  + PFIELDM(IW+1:IE+1,:,:)   )    &
             +6.*  PFIELDM(IW:IE,:,:)                                      &                                                                         
-              -   PLSFIELD(IW-2:IE-2,:,:) - PLSFIELD(IW+2:IE+2,:,:)       &
-            +4.*( PLSFIELD(IW-1:IE-1,:,:) + PLSFIELD(IW+1:IE+1,:,:)  )    &
-            -6.*  PLSFIELD(IW:IE,:,:))
+              -   real(PLSFIELD(IW-2:IE-2,:,:),kind=4) - real(PLSFIELD(IW+2:IE+2,:,:),kind=4)       &
+            +4.*( real(PLSFIELD(IW-1:IE-1,:,:),kind=4) + real(PLSFIELD(IW+1:IE+1,:,:),kind=4)  )    &
+            -6.*  real(PLSFIELD(IW:IE,:,:),kind=4)     )
 !
   ELSE
 !
@@ -1215,7 +1215,7 @@ CASE ('OPEN','WALL','NEST')
       PRFIELDS(IW-1,:,:) = PRFIELDS(IW-1,:,:) + PRHODJ(IW-1,:,:) *              &
         PDK2*(                                                                  &
                  PFIELDM(IW-2,:,:)  -2.*PFIELDM(IW-1,:,:)  + PFIELDM(IW,:,:)    &
-                -PLSFIELD(IW-2,:,:) +2.*PLSFIELD(IW-1,:,:) - PLSFIELD(IW,:,:)   )
+                -real(PLSFIELD(IW-2,:,:),kind=4) +2.*real(PLSFIELD(IW-1,:,:),kind=4) - real(PLSFIELD(IW,:,:),kind=4)   )
 !
 !!$    ELSEIF (NHALO == 1) THEN
     ELSE
@@ -1225,9 +1225,9 @@ CASE ('OPEN','WALL','NEST')
                  TPHALO2%WEST(:,:)   +  PFIELDM(IW+1,:,:)                 &
           -4.*(  PFIELDM(IW-2,:,:)   +  PFIELDM(IW,:,:)     )             &
           +6.*   PFIELDM(IW-1,:,:)                                        &
-            -    TPHALO2LS%WEST(:,:) -  PLSFIELD(IW+1,:,:)                &
-          +4.*(  PLSFIELD(IW-2,:,:)  +  PLSFIELD(IW,:,:)    )             &
-          -6.*   PLSFIELD(IW-1,:,:)  ) 
+            -    real(TPHALO2LS%WEST(:,:),kind=4) -  real(PLSFIELD(IW+1,:,:),kind=4)                &
+          +4.*(  real(PLSFIELD(IW-2,:,:),kind=4)  +  real(PLSFIELD(IW,:,:),kind=4)    )             &
+          -6.*   real(PLSFIELD(IW-1,:,:),kind=4)  ) 
 !     
     ENDIF
 !
@@ -1236,7 +1236,7 @@ CASE ('OPEN','WALL','NEST')
       PRFIELDS(IE+1,:,:) = PRFIELDS(IE+1,:,:) + PRHODJ(IE+1,:,:) *            &
         PDK2*(                                                                & 
                 PFIELDM(IE,:,:)  -2.*PFIELDM(IE+1,:,:)  + PFIELDM(IE+2,:,:)   &
-              - PLSFIELD(IE,:,:) +2.*PLSFIELD(IE+1,:,:) - PLSFIELD(IE+2,:,:)  )
+              - real(PLSFIELD(IE,:,:),kind=4) +2.*real(PLSFIELD(IE+1,:,:),kind=4) - real(PLSFIELD(IE+2,:,:),kind=4)  )
 !
 !!$    ELSEIF (NHALO == 1) THEN
     ELSE
@@ -1246,9 +1246,9 @@ CASE ('OPEN','WALL','NEST')
                  PFIELDM(IE-1,:,:)  +   TPHALO2%EAST(:,:)               &
           -4.*(  PFIELDM(IE  ,:,:)  +   PFIELDM(IE+2,:,:)    )          &
           +6.*   PFIELDM(IE+1,:,:)                                      &
-            -    PLSFIELD(IE-1,:,:) -   TPHALO2LS%EAST(:,:)             &
-          +4.*(  PLSFIELD(IE  ,:,:) +   PLSFIELD(IE+2,:,:))             &
-          -6.*   PLSFIELD(IE+1,:,:))
+            -    real(PLSFIELD(IE-1,:,:),kind=4) -   real(TPHALO2LS%EAST(:,:),kind=4)             &
+          +4.*(  real(PLSFIELD(IE  ,:,:),kind=4) +   real(PLSFIELD(IE+2,:,:),kind=4)  )           &
+          -6.*   real(PLSFIELD(IE+1,:,:),kind=4) )
 !
     ENDIF
 
@@ -1262,9 +1262,9 @@ CASE ('OPEN','WALL','NEST')
                   PFIELDM(IW-2:IE-2,:,:)  + PFIELDM(IW+2:IE+2,:,:)        &
             -4.*( PFIELDM(IW-1:IE-1,:,:)  + PFIELDM(IW+1:IE+1,:,:)   )    &
             +6.*  PFIELDM(IW:IE,:,:)                                      & 
-              -   PLSFIELD(IW-2:IE-2,:,:) - PLSFIELD(IW+2:IE+2,:,:)       &
-            +4.*( PLSFIELD(IW-1:IE-1,:,:) + PLSFIELD(IW+1:IE+1,:,:)  )    &
-            -6.*  PLSFIELD(IW:IE,:,:)) 
+              -   real(PLSFIELD(IW-2:IE-2,:,:),kind=4) - real(PLSFIELD(IW+2:IE+2,:,:),kind=4)       &
+            +4.*( real(PLSFIELD(IW-1:IE-1,:,:),kind=4) + real(PLSFIELD(IW+1:IE+1,:,:),kind=4)  )    &
+            -6.*  real(PLSFIELD(IW:IE,:,:),kind=4)     ) 
 !
   ELSE
 !
@@ -1353,18 +1353,18 @@ IF ( .NOT. L2D ) THEN
                   TPHALO2%SOUTH(:,:)   +  PFIELDM(:,IS+1,:)               &
             -4.*( PFIELDM(:,IS-2,:)    +  PFIELDM(:,IS,:)    )            &
             +6.*  PFIELDM(:,IS-1,:)                                       &
-              -   TPHALO2LS%SOUTH(:,:) -  PLSFIELD(:,IS+1,:)              &
-            +4.*( PLSFIELD(:,IS-2,:)   +  PLSFIELD(:,IS,:)   )            &
-            -6.*  PLSFIELD(:,IS-1,:)   )
+              -   real(TPHALO2LS%SOUTH(:,:),kind=4) -  real(PLSFIELD(:,IS+1,:),kind=4)              &
+            +4.*( real(PLSFIELD(:,IS-2,:),kind=4)   +  real(PLSFIELD(:,IS,:),kind=4)   )            &
+            -6.*  real(PLSFIELD(:,IS-1,:),kind=4)   )
 !
         PRFIELDS(:,IN+1,:) = PRFIELDS(:,IN+1,:) - PRHODJ(:,IN+1,:) *      &
         PDK4*(                                                            &
                   PFIELDM(:,IN-1,:)    +  TPHALO2%NORTH(:,:)              &
             -4.*( PFIELDM(:,IN,:)      +  PFIELDM(:,IN+2,:)  )            &
             +6.*  PFIELDM(:,IN+1,:)                                       &
-               -  PLSFIELD(:,IN-1,:)   -  TPHALO2LS%NORTH(:,:)            &
-            +4.*( PLSFIELD(:,IN,:)     +  PLSFIELD(:,IN+2,:) )            &
-            -6.*  PLSFIELD(:,IN+1,:)   )
+               -  real(PLSFIELD(:,IN-1,:),kind=4)   -  real(TPHALO2LS%NORTH(:,:),kind=4)            &
+            +4.*( real(PLSFIELD(:,IN,:),kind=4)     +  real(PLSFIELD(:,IN+2,:),kind=4) )            &
+            -6.*  real(PLSFIELD(:,IN+1,:),kind=4)   )
 !
 !!$      ENDIF
 !
@@ -1376,9 +1376,9 @@ IF ( .NOT. L2D ) THEN
                      PFIELDM(:,IS-2:IN-2,:)  +  PFIELDM(:,IS+2:IN+2,:)     &
              -4.*(   PFIELDM(:,IS-1:IN-1,:)  +  PFIELDM(:,IS+1:IN+1,:)  )  &
              +6.*    PFIELDM(:,IS:IN,:)                                    &
-                   - PLSFIELD(:,IS-2:IN-2,:) -  PLSFIELD(:,IS+2:IN+2,:)    &
-             +4.*(   PLSFIELD(:,IS-1:IN-1,:) +  PLSFIELD(:,IS+1:IN+1,:) )  &
-             -6.*    PLSFIELD(:,IS:IN,:) )
+                   - real(PLSFIELD(:,IS-2:IN-2,:),kind=4) -  real(PLSFIELD(:,IS+2:IN+2,:),kind=4)    &
+             +4.*(   real(PLSFIELD(:,IS-1:IN-1,:),kind=4) +  real(PLSFIELD(:,IS+1:IN+1,:),kind=4) )  &
+             -6.*    real(PLSFIELD(:,IS:IN,:),kind=4)     )
 !
     ELSE
 !
@@ -1449,7 +1449,7 @@ IF ( .NOT. L2D ) THEN
         PRFIELDS(:,IS-1,:) = PRFIELDS(:,IS-1,:) + PRHODJ(:,IS-1,:) *            &
           PDK2*(                                                                &
                  PFIELDM(:,IS-2,:)  -2.*PFIELDM(:,IS-1,:)  + PFIELDM(:,IS,:)    &
-                -PLSFIELD(:,IS-2,:) +2.*PLSFIELD(:,IS-1,:) - PLSFIELD(:,IS,:)   )
+                -real(PLSFIELD(:,IS-2,:),kind=4) +2.*real(PLSFIELD(:,IS-1,:),kind=4) - real(PLSFIELD(:,IS,:),kind=4)   )
 !
 !!$      ELSEIF (NHALO == 1) THEN
       ELSE
@@ -1459,9 +1459,9 @@ IF ( .NOT. L2D ) THEN
                   TPHALO2%SOUTH(:,:)   +  PFIELDM(:,IS+1,:)                     &
             -4.*( PFIELDM(:,IS-2,:)    +  PFIELDM(:,IS,:)    )                  &
             +6.*  PFIELDM(:,IS-1,:)                                             &
-              -   TPHALO2LS%SOUTH(:,:) -  PLSFIELD(:,IS+1,:)                    &
-            +4.*( PLSFIELD(:,IS-2,:)   +  PLSFIELD(:,IS,:)   )                  &
-            -6.*  PLSFIELD(:,IS-1,:)   )
+              -   real(TPHALO2LS%SOUTH(:,:),kind=4) -  real(PLSFIELD(:,IS+1,:),kind=4)                    &
+            +4.*( real(PLSFIELD(:,IS-2,:),kind=4)   +  real(PLSFIELD(:,IS,:),kind=4)   )                  &
+            -6.*  real(PLSFIELD(:,IS-1,:),kind=4)   )
 !
       ENDIF
 !
@@ -1470,7 +1470,7 @@ IF ( .NOT. L2D ) THEN
         PRFIELDS(:,IN+1,:) = PRFIELDS(:,IN+1,:) + PRHODJ(:,IN+1,:) *             &
           PDK2*(                                                                 &
                    PFIELDM(:,IN,:)  -2.*PFIELDM(:,IN+1,:)   + PFIELDM(:,IN+2,:)  &
-                  -PLSFIELD(:,IN,:) +2.*PLSFIELD(:,IN+1,:)  - PLSFIELD(:,IN+2,:) )
+                  -real(PLSFIELD(:,IN,:),kind=4) +2.*real(PLSFIELD(:,IN+1,:),kind=4)  - real(PLSFIELD(:,IN+2,:),kind=4) )
 !
 !!$      ELSEIF (NHALO == 1) THEN
       ELSE
@@ -1480,9 +1480,9 @@ IF ( .NOT. L2D ) THEN
                   PFIELDM(:,IN-1,:)    +  TPHALO2%NORTH(:,:)                 &
           -4.*(   PFIELDM(:,IN,:)      +  PFIELDM(:,IN+2,:)   )              &
           +6.*    PFIELDM(:,IN+1,:)                                          &
-                - PLSFIELD(:,IN-1,:)   - TPHALO2LS%NORTH(:,:)                &
-          +4.*(   PLSFIELD(:,IN,:)     + PLSFIELD(:,IN+2,:)   )              &
-          -6.*    PLSFIELD(:,IN+1,:)   )
+                - real(PLSFIELD(:,IN-1,:),kind=4)   - real(TPHALO2LS%NORTH(:,:),kind=4)                &
+          +4.*(   real(PLSFIELD(:,IN,:),kind=4)     + real(PLSFIELD(:,IN+2,:),kind=4)   )              &
+          -6.*    real(PLSFIELD(:,IN+1,:),kind=4)   )
 !
       ENDIF
 !
@@ -1496,9 +1496,9 @@ IF ( .NOT. L2D ) THEN
                      PFIELDM(:,IS-2:IN-2,:)  +  PFIELDM(:,IS+2:IN+2,:)     &
              -4.*(   PFIELDM(:,IS-1:IN-1,:)  +  PFIELDM(:,IS+1:IN+1,:)  )  &
              +6.*    PFIELDM(:,IS:IN,:)                                    &
-                   - PLSFIELD(:,IS-2:IN-2,:) -  PLSFIELD(:,IS+2:IN+2,:)    &
-             +4.*(   PLSFIELD(:,IS-1:IN-1,:) +  PLSFIELD(:,IS+1:IN+1,:) )  &
-             -6.*    PLSFIELD(:,IS:IN,:)   )
+                   - real(PLSFIELD(:,IS-2:IN-2,:),kind=4) -  real(PLSFIELD(:,IS+2:IN+2,:),kind=4)    &
+             +4.*(   real(PLSFIELD(:,IS-1:IN-1,:),kind=4) +  real(PLSFIELD(:,IS+1:IN+1,:),kind=4) )  &
+             -6.*    real(PLSFIELD(:,IS:IN,:),kind=4)   )
       
 !
     ELSE
diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90
index 035f9498615835453bd56cbdf1462d6dabeeeb5c..eac7238d63ed4e9ee1b641155964a222bdc1273e 100644
--- a/src/MNH/one_wayn.f90
+++ b/src/MNH/one_wayn.f90
@@ -126,7 +126,7 @@ SUBROUTINE ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT,                            &
 !*      0.   DECLARATIONS
 !            ------------
 USE MODD_CH_MNHC_n,      only: LUSECHAQ, LUSECHIC
-USE MODD_CONF,           only: CEQNSYS
+USE MODD_CONF,           only: CEQNSYS,CCONF
 USE MODD_CST,            only: XCPD, XP00, XRD, XRV, XTH00
 USE MODD_DYN_n,          ONLY: LOCEAN
 USE MODD_FIELD_n,        only: XPABST, XRT, XSVT, XUT, XVT, XWT, XTHT, XTKET
@@ -683,22 +683,8 @@ IF(.NOT. OSTEADY_DMASS) THEN
 !
 !*       4.5 segment beginning (we have first to recover the dry mass at T-DT)
 !
-    IF(SIZE(XRT,4) == 0) THEN
-                          ! dry air case
-!                           ------------
-      ZRHOD(:,:,:) = XPABST(:,:,:)/(XPABST(:,:,:)/XP00)**ZRD_O_CPD/(XRD*XTHT(:,:,:))
-    ELSE                  ! moist air case
-!                           --------------
-      ZRHOD(:,:,:) = XPABST(:,:,:)/(XPABST(:,:,:)/XP00)**ZRD_O_CPD/(XRD*XTHT(:,:,:) &
-                                                       *(1.+ZRV_O_RD*XRT(:,:,:,1)))
-    ENDIF
-!
-!
-    ZDRYMASSM = SUM3D_ll (ZJ(:,:,:)*ZRHOD(:,:,:),IINFO_ll,NXOR_ALL(KMI)+JPHEXT,NYOR_ALL(KMI)+JPHEXT, &
-            1+JPVEXT,NXEND_ALL(KMI)-JPHEXT,NYEND_ALL(KMI)-JPHEXT,SIZE(XRHODJ,3)-JPVEXT)
-!
-    PDRYMASST =  ZDRYMASST
-    PDRYMASSS = (PDRYMASST - ZDRYMASSM) / (PTSTEP*KDTRATIO)
+     PDRYMASST =  ZDRYMASST  
+     IF  ( CCONF /= 'RESTA' ) PDRYMASSS =  0.
   ENDIF
 !
 END IF
diff --git a/src/MNH/rad_bound.f90 b/src/MNH/rad_bound.f90
index 296d476b44d32be4d2814e4614cfe0c7cfc1e1b2..e023abde41ae9d25c65f65f9e458463cbf2831e8 100644
--- a/src/MNH/rad_bound.f90
+++ b/src/MNH/rad_bound.f90
@@ -317,6 +317,14 @@ SELECT CASE ( HLBCX(1) )
 !                 +  ZKTSTEP*( ZLBXU(:,:) )       )                         &
 !                    ) * ZINVTSTEP / (1.+ ZCPHASX(:,:) +ZKTSTEP)
 !
+!     ============================================================
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+   ZLBEU = real(ZLBEU,kind=4)
+   ZLBGU = real(ZLBGU,kind=4)
+   ZLBXU = real(ZLBXU,kind=4)
+!   ============================================================  
       PRUS (IIB,:,:) =(PRHODJ(IIB-1,:,:) + PRHODJ(IIB,:,:)) * 0.5 *          &
                        ZINVTSTEP / (1.+ ZKTSTEP * ZALPHA2 )  *               &
             (  (1. - ZCPHASX(:,:) - ZKTSTEP * (1. - ZALPHA2)) * PUT(IIB,:,:) &
@@ -374,7 +382,7 @@ SELECT CASE ( HLBCX(2) )
         ZLBXU(:,:)  = PLBXUM(ILBX-JPHEXT+1,:,:)
       END IF
     ELSE
-      ZLBEU (:,:) = PLBXUS(ILBX-JPHEXT+1,:,:)
+      ZLBEU (:,:) = PLBXUS(ILBX-JPHEXT+1,:,:)                          
       ZLBGU (:,:) = PLBXUM(ILBX-JPHEXT+1,:,:) - PLBXUM(ILBX-JPHEXT,:,:) +  &
                       PTSTEP * (PLBXUS(ILBX-JPHEXT+1,:,:) - PLBXUS(ILBX-JPHEXT,:,:))
       IF ( LRECYCL ) THEN
@@ -393,7 +401,15 @@ SELECT CASE ( HLBCX(2) )
 !                   +  ZLBGU (:,:) * ZCPHASX(:,:)                             &
 !                   +  ZKTSTEP*ZLBXU(:,:)   )                                 &
 !                      ) * ZINVTSTEP / (1.+ZCPHASX(:,:) +ZKTSTEP)
-! 
+!
+!   ============================================================
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4)
+!
+   ZLBEU = real(ZLBEU,kind=4)
+   ZLBGU = real(ZLBGU,kind=4)
+   ZLBXU = real(ZLBXU,kind=4)
+!   ============================================================  
       PRUS (IIE+1,:,:) =(PRHODJ(IIE+1,:,:) + PRHODJ(IIE,:,:)) * 0.5 *           &
                        ZINVTSTEP / (1.+ ZKTSTEP * ZALPHA2 )  *                  &
             (  (1. - ZCPHASX(:,:) - ZKTSTEP * (1. - ZALPHA2) ) * PUT(IIE+1,:,:) &
@@ -469,6 +485,15 @@ SELECT CASE ( HLBCY(1) )
 !                 -  ZLBGV (:,:) * ZCPHASY(:,:)                             &
 !                 +  ZKTSTEP*ZLBYV(:,:)       )                             &
 !                    ) * ZINVTSTEP / (1.+ ZCPHASY(:,:) +ZKTSTEP)
+!
+!     ============================================================    
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+   ZLBEV = real(ZLBEV,kind=4)
+   ZLBGV = real(ZLBGV,kind=4)
+   ZLBYV = real(ZLBYV,kind=4)
+!   ============================================================      
       PRVS (:,IJB,:) =(PRHODJ(:,IJB-1,:) + PRHODJ(:,IJB,:)) * 0.5 *        &
                        ZINVTSTEP / (1.+ ZKTSTEP * ZALPHA2 )  *             &
           (  (1. - ZCPHASY(:,:) - ZKTSTEP * (1. - ZALPHA2) ) * PVT(:,IJB,:)&
@@ -546,6 +571,14 @@ SELECT CASE ( HLBCY(2) )
 !                   +  ZKTSTEP* ZLBYV(:,:)   )                                &
 !                      ) * ZINVTSTEP / (1.+ ZCPHASY(:,:) +ZKTSTEP)
 !
+!     ============================================================    
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+   ZLBEV = real(ZLBEV,kind=4)
+   ZLBGV = real(ZLBGV,kind=4)
+   ZLBYV = real(ZLBYV,kind=4)
+!   ============================================================    
       PRVS (:,IJE+1,:) =(PRHODJ(:,IJE+1,:) + PRHODJ(:,IJE,:)) * 0.5 *         &
                        ZINVTSTEP / (1.+ ZKTSTEP * ZALPHA2 )  *                &
            (  (1. - ZCPHASY(:,:) - ZKTSTEP * (1. - ZALPHA2) ) * PVT(:,IJE+1,:)&
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index 1f8d4b3cab8e98abd0698ec2c34249c956ec75ba..f7ccb114e6c605c3aad6f3585688b88e4f2b6b8b 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -18,7 +18,7 @@ INTERFACE
             KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll,           &
             PUM,PVM,PWM,PDUM,PDVM,PDWM,                                      &
             PUT,PVT,PWT,PTHT,PPABST,PTKET,PRTKEMS,                           &
-            PRT,PSVT,PZWS,PCIT,PDRYMASST,                                    &            
+            PRT,PSVT,PZWS,PCIT,PDRYMASST,PDRYMASSS,                          &            
             PSIGS,PSRCT,PCLDFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR,       &
             PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM, PLSZWSM,                        &
             PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,            &
@@ -81,6 +81,7 @@ REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PSRCT           ! turbulent flux
                                                           !  <s'Rc'> at t 
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PCIT            ! ice conc. at t
 REAL,                      INTENT(OUT) :: PDRYMASST       ! Md(t)
+REAL,                      INTENT(OUT) :: PDRYMASSS       ! d Md(t) / dt
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PSIGS           ! =sqrt(<s's'>) for the
                                                           ! Subgrid Condensation
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PCLDFR          ! cloud fraction  
@@ -141,7 +142,7 @@ END MODULE MODI_READ_FIELD
             KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll,           &
             PUM,PVM,PWM,PDUM,PDVM,PDWM,                                      &
             PUT,PVT,PWT,PTHT,PPABST,PTKET,PRTKEMS,                           &
-            PRT,PSVT,PZWS,PCIT,PDRYMASST,                                    &
+            PRT,PSVT,PZWS,PCIT,PDRYMASST,PDRYMASSS,                          &
             PSIGS,PSRCT,PCLDFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR,       &
             PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,                         &
             PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,            &
@@ -361,6 +362,7 @@ REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PSRCT           ! turbulent flux
                                                           !  <s'Rc'> at t 
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PCIT            ! ice conc. at t
 REAL,                      INTENT(OUT) :: PDRYMASST       ! Md(t)
+REAL,                      INTENT(OUT) :: PDRYMASSS       ! d Md(t) / dt
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PSIGS           ! =sqrt(<s's'>) for the
                                                           ! Subgrid Condensation
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PCLDFR          ! cloud fraction  
@@ -1464,6 +1466,11 @@ CALL INI_LB(TPINIFILE,GLSOURCE,ISV,                                   &
 !*       2.3  Some special variables:
 !
 CALL IO_Field_read(TPINIFILE,'DRYMASST',PDRYMASST) ! dry mass
+IF (CCONF=='RESTA') THEN
+  CALL IO_Field_read(TPINIFILE,'DRYMASSS',PDRYMASSS) ! dry mass tendency
+ELSE
+  PDRYMASSS=XUNDEF   ! should not be used
+END IF
 !
 SELECT CASE(HGETSRCT)                ! turbulent flux SRC at time t
   CASE('READ')
diff --git a/src/MNH/relaxation.f90 b/src/MNH/relaxation.f90
index 7202c8ea13c44d2b708271e20e44fd158703750d..0af96bf758a83ffd12ba107a7128a2c4a7a6fec1 100644
--- a/src/MNH/relaxation.f90
+++ b/src/MNH/relaxation.f90
@@ -517,16 +517,16 @@ IF(OVE_RELAX) THEN
 !
   DO JK = KALBOT, IKE+1
 !
-    PRUS(:,:,JK)  = PRUS(:,:,JK)  - ZKV(JK)  *(PUT(:,:,JK)  -PLSUM(:,:,JK)  )&
+    PRUS(:,:,JK)  = PRUS(:,:,JK)  - ZKV(JK)  *(PUT(:,:,JK)  -real(PLSUM(:,:,JK),kind=4) )&
                     * ZRHODJU(:,:,JK)
 !
-    PRVS(:,:,JK)  = PRVS(:,:,JK)  - ZKV(JK)  *(PVT(:,:,JK)  -PLSVM(:,:,JK)  )&
+    PRVS(:,:,JK)  = PRVS(:,:,JK)  - ZKV(JK)  *(PVT(:,:,JK)  -real(PLSVM(:,:,JK),kind=4) )&
                     * ZRHODJV(:,:,JK)
 !
-    PRWS(:,:,JK)  = PRWS(:,:,JK)  - ZKVW(JK) *(PWT(:,:,JK)  -PLSWM(:,:,JK)  )&
+    PRWS(:,:,JK)  = PRWS(:,:,JK)  - ZKVW(JK) *(PWT(:,:,JK)  -real(PLSWM(:,:,JK),kind=4) )&
                     * ZRHODJW(:,:,JK)
 !
-    PRTHS(:,:,JK) = PRTHS(:,:,JK) - ZKV(JK)  *(PTHT(:,:,JK) -PLSTHM(:,:,JK) )&
+    PRTHS(:,:,JK) = PRTHS(:,:,JK) - ZKV(JK)  *(PTHT(:,:,JK) -real(PLSTHM(:,:,JK),kind=4) )&
                     * PRHODJ(:,:,JK)
 !
   END DO  
@@ -554,16 +554,16 @@ IF(OVE_RELAX_GRD) THEN
 !
   DO JK = 1,KALBAS
 !
-    PRUS(:,:,JK)  = PRUS(:,:,JK)  - ZKVBAS(JK)  *(PUT(:,:,JK)  -PLSUM(:,:,JK)  )&
+    PRUS(:,:,JK)  = PRUS(:,:,JK)  - ZKVBAS(JK)  *(PUT(:,:,JK)  -real(PLSUM(:,:,JK),kind=4) )&
                     * ZRHODJU(:,:,JK)
 !
-    PRVS(:,:,JK)  = PRVS(:,:,JK)  - ZKVBAS(JK)  *(PVT(:,:,JK)  -PLSVM(:,:,JK)  )&
+    PRVS(:,:,JK)  = PRVS(:,:,JK)  - ZKVBAS(JK)  *(PVT(:,:,JK)  -real(PLSVM(:,:,JK),kind=4) )&
                     * ZRHODJV(:,:,JK)
 !
-    PRWS(:,:,JK)  = PRWS(:,:,JK)  - ZKVWBAS(JK) *(PWT(:,:,JK)  -PLSWM(:,:,JK)  )&
+    PRWS(:,:,JK)  = PRWS(:,:,JK)  - ZKVWBAS(JK) *(PWT(:,:,JK)  -real(PLSWM(:,:,JK),kind=4) )&
                     * ZRHODJW(:,:,JK)
 !
-    PRTHS(:,:,JK) = PRTHS(:,:,JK) - ZKVBAS(JK)  *(PTHT(:,:,JK) -PLSTHM(:,:,JK) )&
+    PRTHS(:,:,JK) = PRTHS(:,:,JK) - ZKVBAS(JK)  *(PTHT(:,:,JK) -real(PLSTHM(:,:,JK),kind=4) )&
                     * PRHODJ(:,:,JK)
 !
   END DO  
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index ea08bd41d0a36e803f2afda33d7fa63f8d75a317..e9bab27c0a30fccb9d0b8fbb61d500a8fa9e84a9 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -1552,6 +1552,11 @@ CALL WRITE_LB_n(TPFILE)
 !
 !
 CALL IO_Field_write(TPFILE,'DRYMASST',XDRYMASST)
+IF (CPROGRAM == 'MESONH') THEN
+  CALL IO_Field_write(TPFILE,'DRYMASSS',XDRYMASSS)
+ELSE
+  CALL IO_Field_write(TPFILE,'DRYMASSS',0.)
+END IF
 !
 IF( CTURB /= 'NONE' .AND. CTOM=='TM06') THEN
   CALL IO_Field_write(TPFILE,'BL_DEPTH',XBL_DEPTH)