diff --git a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90
index 863e7b667c2288ebaae606cc54d72b323ff2ba82..c3c55262fcc8efcae9148a7998929924b4456951 100644
--- a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90
@@ -535,7 +535,7 @@
 !
 !*       2.1.1.2   Fill out the buffer in the south part of the halo2
 !
-      DO JK=TPZONE%NZOR, TPZONE%NZEND
+      DO JK=TPZONE%NZOR, MIN(TPZONE%NZEND,SIZE(TZHALO2%HALO2%SOUTH,2))
           DO JI=TPZONE%NXOR, TPZONE%NXEND
 !
             JINC = JINC + 1
@@ -562,7 +562,7 @@
 !
 !*       2.1.2.2   Fill out the buffer in the east part of the halo2
 !
-      DO JK=TPZONE%NZOR, TPZONE%NZEND
+      DO JK=TPZONE%NZOR, MIN(TPZONE%NZEND,SIZE(TZHALO2%HALO2%EAST,2))
         DO JJ=TPZONE%NYOR, TPZONE%NYEND
 !
             JINC = JINC + 1
@@ -589,7 +589,7 @@
 !
 !*       2.1.3.2   Fill out the buffer in the north part of the halo2
 !
-      DO JK=TPZONE%NZOR, TPZONE%NZEND
+      DO JK=TPZONE%NZOR, MIN(TPZONE%NZEND,SIZE(TZHALO2%HALO2%NORTH,2))
           DO JI=TPZONE%NXOR, TPZONE%NXEND
 !
             JINC = JINC + 1
@@ -616,7 +616,7 @@
 !
 !*       2.1.4.2   Fill out the buffer in the west part of the halo2
 !
-      DO JK=TPZONE%NZOR, TPZONE%NZEND
+      DO JK=TPZONE%NZOR, MIN(TPZONE%NZEND,SIZE(TZHALO2%HALO2%WEST,2))
         DO JJ=TPZONE%NYOR, TPZONE%NYEND
 !
             JINC = JINC + 1
diff --git a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90
index b45850ab06006503d24fdf82e7e6bfe480f4a26b..3302f650e440636222024ccea1fae85ff5742cd9 100644
--- a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90
@@ -1441,7 +1441,9 @@ INTEGER                                               :: NB_REQ
 !
   TYPE(LIST_ll), POINTER :: TZLIST
   INTEGER :: IIBS, IIES, IJBS, IJES, IKBS, IKES, IIBR, IIER, &
-             IJBR, IJER, IKBR, IKER
+       IJBR, IJER, IKBR, IKER
+  !JUAN
+  INTEGER :: IIKMAXIN,IIKMAXOUT
 !
 !-------------------------------------------------------------------------------
 !
@@ -1461,6 +1463,13 @@ INTEGER                                               :: NB_REQ
   IJER = TPRECV%NYEND
   IKBR = TPRECV%NZOR
   IKER = TPRECV%NZEND
+  IIKMAXIN  = SIZE(PFIELDIN,3)
+  IIKMAXOUT = SIZE(PFIELDOUT,3)
+  ! JUAN SPECIAL CASE TO REDUCE/AUGMENTE Z LEVEL FOR PREP_REAL_CASE
+  IF ( (IKES.EQ.IKER) .AND. (IIKMAXIN.EQ.IIKMAXOUT)) THEN
+     IKER = IIKMAXOUT
+     IKES = IIKMAXIN
+  END IF
 !
 !*       2.    COPY THE VALUES OF PFIELDIN SITUATED IN THE TPSEND ZONE
 !*             IN THE ENTRIES OF PFIELDOUT DEFINED BY TPRECV
@@ -1558,7 +1567,7 @@ INTEGER                                               :: NB_REQ
 !        Z axe
       JKMAX = SIZE(TPFIELD%ARRAY3D,3)
       JKOR  = TPZONE%NZOR
-      JKEND = TPZONE%NZEND
+      JKEND = MIN(TPZONE%NZEND,JKMAX)
 !        Y axe
       JJMAX = SIZE(TPFIELD%ARRAY3D,2)
       JJOR  = TPZONE%NYOR
@@ -1675,7 +1684,7 @@ INTEGER                                               :: NB_REQ
 !    Z axe
      JKMAX = SIZE(TPFIELD%ARRAY3D,3)
      JKOR  = TPZONE%NZOR
-     JKEND = TPZONE%NZEND
+     JKEND = MIN(TPZONE%NZEND,JKMAX)
 !    Y axe
      JJMAX = SIZE(TPFIELD%ARRAY3D,2)
      JJOR  = TPZONE%NYOR
@@ -2063,7 +2072,7 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
 !          Z axe
            JKMAX = SIZE(PFIELDIN,3)
            JKOR  = TZZONESEND%NZOR
-           JKEND = TZZONESEND%NZEND
+           JKEND = MIN(JKMAX,TZZONESEND%NZEND)
 !          Y axe
            JJMAX = SIZE(PFIELDIN,2)
            JJOR  = TZZONESEND%NYOR
@@ -2078,7 +2087,7 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
            JJBOX  = JJEND - JJOR + 1
            JIJMAX = JIBOX*JJBOX
 
-           DO JK=TZZONESEND%NZOR, TZZONESEND%NZEND
+           DO JK=JKOR,JKEND ! TZZONESEND%NZOR, TZZONESEND%NZEND
 !CDIR NODEP
 !OCL NOVREC
               DO JIJ=1,JIJMAX
@@ -2142,7 +2151,7 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
            !       Z axe
            JKMAX = SIZE(PFIELDOUT,3)
            JKOR  = TZZONERECV%NZOR
-           JKEND = TZZONERECV%NZEND
+           JKEND = MIN(JKMAX,TZZONERECV%NZEND)
            !       Y axe
            JJMAX = SIZE(PFIELDOUT,2)
            JJOR  = TZZONERECV%NYOR
@@ -2156,7 +2165,7 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
            JIBOX  = JIEND - JIOR + 1
            JJBOX  = JJEND - JJOR + 1
            JIJMAX = JIBOX*JJBOX
-           DO JK = TZZONERECV%NZOR, TZZONERECV%NZEND
+           DO JK = JKOR,JKEND ! TZZONERECV%NZOR, TZZONERECV%NZEND
               !CDIR NODEP
               !OCL NOVREC
               DO JIJ=1,JIJMAX
@@ -2197,7 +2206,7 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
            !       Z axe
            JKMAX = SIZE(PFIELDOUT,3)
            JKOR  = TZZONERECV%NZOR
-           JKEND = TZZONERECV%NZEND
+           JKEND = MIN(JKMAX,TZZONERECV%NZEND)
            !       Y axe
            JJMAX = SIZE(PFIELDOUT,2)
            JJOR  = TZZONERECV%NYOR
@@ -2211,7 +2220,7 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
            JIBOX  = JIEND - JIOR + 1
            JJBOX  = JJEND - JJOR + 1
            JIJMAX = JIBOX*JJBOX
-           DO JK = TZZONERECV%NZOR, TZZONERECV%NZEND
+           DO JK = JKOR,JKEND ! TZZONERECV%NZOR, TZZONERECV%NZEND
               !CDIR NODEP
               !OCL NOVREC
               DO JIJ=1,JIJMAX
diff --git a/src/MNH/anel_balancen.f90 b/src/MNH/anel_balancen.f90
index 540e56b76eff1ad6c19ca1cf4fc79da078cb12ae..d969a9b8800786497a1750caeefef53240ba4101 100644
--- a/src/MNH/anel_balancen.f90
+++ b/src/MNH/anel_balancen.f90
@@ -208,7 +208,7 @@ CALL MPPDB_CHECK3D(XUT,"anel_balancen1-::XUT",PRECISION)
 !               -------------------------------
 !
 !
-CALL TRIDZ(CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,ZDXHATM,ZDYHATM,ZRHOM,        &
+CALL TRIDZ(CLBCX,CLBCY,CPRESOPT,XMAP,XDXHAT,XDYHAT,ZDXHATM,ZDYHATM,ZRHOM,        &
           ZAF,ZCF,ZTRIGSX,ZTRIGSY,IIFAXX,IIFAXY,XRHODJ,XTHVREF,XZZ,ZBFY,&
           ZBFB,ZBF_SXP2_YP1_Z) 
 CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen1-after TRIDZ::XRHODJ",PRECISION)
diff --git a/src/MNH/ini_dynamics.f90 b/src/MNH/ini_dynamics.f90
index add1cc9e389d189ec736e64cc2c1c4f87e6d4758..44a9bc9bd639c187a3b05085a4c6d22acd25f787 100644
--- a/src/MNH/ini_dynamics.f90
+++ b/src/MNH/ini_dynamics.f90
@@ -8,7 +8,7 @@
 !     ########################
 INTERFACE
 SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ,                   &
-               PDXHAT,PDYHAT,PZHAT,PZHATM,HLBCX,HLBCY,PTSTEP,                &
+               PDXHAT,PDYHAT,PZHAT,PZHATM,HLBCX,HLBCY,HPRESOPT,PTSTEP,       &
                OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV,           &
                OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG,  &
                OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV,                         &
@@ -45,6 +45,7 @@ REAL, DIMENSION(:),     INTENT(IN)        :: PZHAT     ! Gal-Chen Height
 REAL, DIMENSION(:),     INTENT(IN)        :: PZHATM    ! ... at mass points
 CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCX    ! x-direction LBC type
 CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCY    ! y-direction LBC type
+CHARACTER (LEN=5)                         :: HPRESOPT ! Choice of the pressure solver
 LOGICAL,                INTENT(IN)        :: OVE_RELAX ! logical
              ! switch to activate the VErtical  RELAXation
 LOGICAL,                INTENT(IN)        :: OVE_RELAX_GRD ! logical
@@ -180,7 +181,7 @@ END INTERFACE
 END MODULE MODI_INI_DYNAMICS
 !     ######################################################################
 SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ,                   &
-               PDXHAT,PDYHAT,PZHAT,PZHATM,HLBCX,HLBCY,PTSTEP,                &
+               PDXHAT,PDYHAT,PZHAT,PZHATM,HLBCX,HLBCY,HPRESOPT,PTSTEP,       &
                OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV,           &
                OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG,  &
                OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV,                         &
@@ -316,6 +317,7 @@ REAL, DIMENSION(:),     INTENT(IN)        :: PZHAT     ! Gal-Chen Height
 REAL, DIMENSION(:),     INTENT(IN)        :: PZHATM    ! ... at mass points
 CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCX    ! x-direction LBC type
 CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCY    ! y-direction LBC type
+CHARACTER (LEN=5)                         :: HPRESOPT ! Choice of the pressure solver
 LOGICAL,                INTENT(IN)        :: OVE_RELAX ! logical
              ! switch to activate the VErtical  RELAXation 
 LOGICAL,                INTENT(IN)        :: OVE_RELAX_GRD ! logical
@@ -493,7 +495,7 @@ IF (.NOT.L1D) THEN
 !           PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,PAF,                 &
 !           PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,                            &
 !           PRHODJ,PTHVREF,PZZ,PBFY)
-  CALL TRIDZ(HLBCX,HLBCY,                                                 &
+  CALL TRIDZ(HLBCX,HLBCY,HPRESOPT,                                        &
             PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,PAF,                 &
             PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,                            &
             PRHODJ,PTHVREF,PZZ,PBFY,PBFB,                                 &
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index a67a2ee3d0c60ba317bd2fbb11eee85a322fcb72..f88d337e5ac3c136ee0c535b6bee82e5a8cf83ef 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -2539,7 +2539,7 @@ IF (LLG .AND. LINIT_LG .AND. CPROGRAM=='MESONH') &
 !               ------------------------------------------
 !
 CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT,            &
-             XZHAT,XZHATM,CLBCX,CLBCY,XTSTEP,                                 &
+             XZHAT,XZHATM,CLBCX,CLBCY,CPRESOPT,XTSTEP,                        &
              LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV,              &
              LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG,     &
              LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV,                            &
diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90
index 28380073c49d0606ad041f27f1c8a725c59f5b61..7d102bc24d345b9ebc368f59dac584752dbb2bb3 100644
--- a/src/MNH/ini_spectren.f90
+++ b/src/MNH/ini_spectren.f90
@@ -891,7 +891,7 @@ ALLOCATE(XALKBAS(0))
 ALLOCATE(XALKWBAS(0))
 !
 CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT,            &
-             XZHAT,XZHATM,CLBCX,CLBCY,XTSTEP,                                 &
+             XZHAT,XZHATM,CLBCX,CLBCY,CPRESOPT,XTSTEP,                        &
              LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV,              &
              LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG,     &
              LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV,                            &
diff --git a/src/MNH/tridz.f90 b/src/MNH/tridz.f90
index 4a74457910674c6edca3bf6f463ba8ed82fda929..e5a6b7429263e0e74b0f1817626eb17a8f0ad350 100644
--- a/src/MNH/tridz.f90
+++ b/src/MNH/tridz.f90
@@ -9,7 +9,7 @@
 !
 INTERFACE
 !
-      SUBROUTINE TRIDZ(HLBCX,HLBCY,                                     &
+      SUBROUTINE TRIDZ(HLBCX,HLBCY,HPRESOPT,                            &
                       PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,         &
                       PAF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,            &
                       PRHODJ,PTHVREF,PZZ,PBFY,PBFB,&
@@ -19,6 +19,7 @@ IMPLICIT NONE
 !
 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX    ! x-direction LBC type
 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY    ! y-direction LBC type
+CHARACTER (LEN=5)                           :: HPRESOPT ! Choice of the pressure solver
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! density of reference * J
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHVREF    ! Virtual Potential
@@ -68,7 +69,7 @@ END INTERFACE
 END MODULE MODI_TRIDZ
 !
 !     ###################################################################
-      SUBROUTINE TRIDZ(HLBCX,HLBCY,                                     &
+      SUBROUTINE TRIDZ(HLBCX,HLBCY,HPRESOPT,                            &
                       PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,         &
                       PAF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,            &
                       PRHODJ,PTHVREF,PZZ,PBFY,PBFB,&
@@ -199,6 +200,7 @@ IMPLICIT NONE
 !
 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX    ! x-direction LBC type
 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY    ! y-direction LBC type
+CHARACTER (LEN=5)                           :: HPRESOPT ! Choice of the pressure solver
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! density of reference * J
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHVREF    ! Virtual Potential
@@ -573,8 +575,10 @@ DEALLOCATE(ZEIGENX_ll)
 !
 !
 PBFY = 1.
-PBFB = 1.  ! JUAN Z_SLIDE
-PBF_SXP2_YP1_Z = 1.  ! JUAN Z_SLIDE
+IF ( HPRESOPT == 'ZRESI' ) THEN
+   PBFB = 1.  ! JUAN Z_SLIDE
+   PBF_SXP2_YP1_Z = 1.  ! JUAN Z_SLIDE
+END IF
 !
 IF (L2D) THEN
   DO JK= IKB,IKE
@@ -614,7 +618,7 @@ ELSE
   PBFY(1:IYMODEY_ll,1:IXMODEY_ll,IKE+1) =  0.5 * ( PRHOM(IKE)   + PRHOM(IKE+1) ) /  &
                                ZDZM(IKE+1) **2
   !
-
+IF ( HPRESOPT == 'ZRESI' ) THEN
 !JUAN Z_SPLITTING
 !JUAN for Z splitting we need to do the vertical substitution
 !JUAN in Bsplitting slides so need PBFB 
@@ -635,6 +639,7 @@ ELSE
   !
   PBFB(IIB:IIE,IJB:IJE,IKE+1) =  0.5 * ( PRHOM(IKE)   + PRHOM(IKE+1) ) /  &
                                ZDZM(IKE+1) **2
+END IF
 !
 IF (HLBCX(1) == 'CYCL' .AND. .NOT.(L2D) ) THEN
    !JUAN
@@ -648,7 +653,8 @@ IF (HLBCY(1) == 'CYCL' .AND. .NOT.(L2D) ) THEN
    JJ = IYMODE_ll -1
    ZEIGEN_ll(:,2)  = ZEIGEN_ll(:,JJ)
 END IF
-  !
+!
+IF ( HPRESOPT == 'ZRESI' ) THEN
 !JUAN Z_SPLITTING
 !JUAN Z_SPLITTING
 !JUAN for Z splitting we need to do the vertical substitution
@@ -671,7 +677,8 @@ END IF
   PBF_SXP2_YP1_Z(1:IIU_SXP2_YP1_Z_ll,1:IJU_SXP2_YP1_Z_ll,IKE+1) =  0.5 * ( PRHOM(IKE)   + PRHOM(IKE+1) ) /  &
                                ZDZM(IKE+1) **2
   !
-!JUAN Z_SPLITTING
+  !JUAN Z_SPLITTING
+END IF
 END IF
 !
 ! second coefficent is meaningless in cyclic case
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index b0db48a149d2815e4161fdade5c34729556e8135..3cc62a7b6039e69f79f9568bbac1433f57db0741 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -1702,7 +1702,7 @@ END IF
 !
 !*       1.10   Diagnostic variables related to the precipitations
 !
-IF (CPROGRAM /= 'IDEAL') THEN
+IF ( (CPROGRAM /= 'IDEAL') .AND. (CPROGRAM /= 'REAL')  )THEN
   IF (ASSOCIATED(XINPRC)) THEN
   IF (SIZE(XINPRC) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)