diff --git a/src/mesonh/ext/boundaries.f90 b/src/mesonh/ext/boundaries.f90
new file mode 100644
index 0000000000000000000000000000000000000000..c74bce92f9e92c7c8ab278ff7d74f2e085446928
--- /dev/null
+++ b/src/mesonh/ext/boundaries.f90
@@ -0,0 +1,1244 @@
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!#####################
+MODULE MODI_BOUNDARIES
+!#####################
+!
+INTERFACE
+!
+      SUBROUTINE BOUNDARIES (                                       &
+            PTSTEP,HLBCX,HLBCY,KRR,KSV,KTCOUNT,                     &
+            PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,   &
+            PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,   &
+            PLBXUS,PLBXVS,PLBXWS,PLBXTHS,PLBXTKES,PLBXRS,PLBXSVS,   &
+            PLBYUS,PLBYVS,PLBYWS,PLBYTHS,PLBYTKES,PLBYRS,PLBYSVS,   &
+            PRHODJ,PRHODREF,                                        &
+            PUT,PVT,PWT,PTHT,PTKET,PRT,PSVT,PSRCT                   )
+!
+REAL,                  INTENT(IN) :: PTSTEP        ! time step dt
+CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY   ! X and Y-direc. LBC type
+!
+INTEGER,               INTENT(IN) :: KRR           ! Number of moist  variables
+INTEGER,               INTENT(IN) :: KSV           ! Number of Scalar Variables
+INTEGER,               INTENT(IN) :: KTCOUNT       ! Temporal loop COUNTer
+                                                   ! (=1 at the segment beginning)
+!
+! Lateral Boundary fields at time t
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUM,PLBXVM,PLBXWM ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTHM              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYUM,PLBYVM,PLBYWM ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTHM              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTKEM          ! TKE
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTKEM
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBXRM  ,PLBXSVM  ! Moisture and SV
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRM  ,PLBYSVM  ! in x and y-dir.
+! temporal derivative of the Lateral Boundary fields
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUS,PLBXVS,PLBXWS ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTHS              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYUS,PLBYVS,PLBYWS ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTHS              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTKES          ! TKE
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTKES
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBXRS  ,PLBXSVS  ! Moisture and SV
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRS  ,PLBYSVS  ! in x and y-dir.
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PRHODJ    ! Jacobian * dry density of
+                                                  !  the reference state
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PRHODREF
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PUT,PVT,PWT,PTHT,PTKET,PSRCT
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT,PSVT
+                                                      ! Variables at t
+!
+END SUBROUTINE BOUNDARIES
+!
+END INTERFACE
+!
+
+END MODULE MODI_BOUNDARIES
+!
+!
+!     ####################################################################
+      SUBROUTINE BOUNDARIES (                                       &
+            PTSTEP,HLBCX,HLBCY,KRR,KSV,KTCOUNT,                     &
+            PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,   &
+            PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,   &
+            PLBXUS,PLBXVS,PLBXWS,PLBXTHS,PLBXTKES,PLBXRS,PLBXSVS,   &
+            PLBYUS,PLBYVS,PLBYWS,PLBYTHS,PLBYTKES,PLBYRS,PLBYSVS,   &
+            PRHODJ,PRHODREF,                                        &
+            PUT,PVT,PWT,PTHT,PTKET,PRT,PSVT,PSRCT                   )
+!     ####################################################################
+!
+!!****  *BOUNDARIES* - routine to prepare the Lateral Boundary Conditions for
+!!                 all variables at a scalar localization relative to the 
+!!                 considered boundary.
+!!
+!!    PURPOSE
+!!    -------
+!       Fill up the left and right lateral EXTernal zones, for all prognostic
+!       variables, at time t and t-dt, to avoid particular cases close to
+!       the Lateral Boundaries in routines computing the evolution terms, in
+!       particular in the advection routines.
+!
+!!**  METHOD
+!!    ------
+!!      3 different options are proposed: 'WALL' 'CYCL' 'OPEN'
+!!                    to define the Boundary Condition type,
+!!      though the variables HLBCX and HLBCY (for the X and Y-directions
+!!      respectively).
+!!       For the 'OPEN' type of LBC, the treatment depends
+!!      on the flow configuration: i.e. INFLOW or OUTFLOW conditions.
+!!   
+!!    EXTERNAL 
+!!    --------  
+!!    GET_INDICE_ll  : get physical sub-domain bounds
+!!    LWEAST_ll,LEAST_ll,LNORTH_ll,LSOUTH_ll : position functions
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------  
+!!      Module MODD_PARAMETERS : 
+!!        JPHEXT ,JPVEXT 
+!!
+!!      Module MODD_CONF :
+!!        CCONF
+!!
+!!      Module MODE_UPDATE_NSV :
+!!        NSV_CHEM, NSV_CHEMBEG, NSV_CHEMEND
+!!
+!!      Module MODD_CTURB :
+!!        XTKEMIN 
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book1 and book2 of documentation (routine BOUNDARIES)
+!!
+!!    AUTHOR
+!!    ------
+!!	J.-P. Lafore J. Stein     * Meteo France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original        17/10/94 
+!!      Modification    02/11/94  (J.Stein) copy for t-dt at the external points
+!!                                          + change the copy formulation
+!!      Modification    18/11/94  (J.Stein) bug correction in the normal velocity
+!!                                          prescription in the WALL cases
+!!      Modification    13/02/95  (Lafore)  to account for the OPEN case and
+!!                                          for the LS fields introduction
+!!      Modification    03/03/95  (Mallet)  corrections in variables names in 
+!!                                          the Y-OPEN case
+!!                      16/03/95  (J.Stein) remove R from the historical variables
+!!      Modification    31/05/95  (Lafore)  MASTER_DEV2.1 preparation after the
+!!                                          LBC tests performed by I. Mallet
+!!      Modification    15/03/96  (Richard) bug correction for OPEN CASE: (TOP Y-LBC)
+!!                                          Rv case 
+!!      Modification    15/03/96  (Shure)   bug correction for SV variable in
+!!                                          open x  right case
+!!      Modification    24/10/96  (Masson)  initialization of outer points in
+!!                                          wall cases for spawning interpolations
+!!      Modification    13/03/97  (Lafore)  "surfacic" LS-fields introduction
+!!      Modification    10/04/97  (Lafore)  proper treatment of minima for TKE and EPS
+!!      Modification    01/09/97  (Masson)  minimum value for water and passive
+!!                                          scalars set to zero at instants M,T
+!!      Modification    20/10/97  (Lafore)  introduction of DAVI type of lbc
+!!                                           suppression of NEST type
+!!      Modification    12/11/97  ( Stein ) use the lB fields
+!!      Modification    02/06/98  (Lafore)  declaration of local variables (PLBXUM
+!!                                          and PLBXWM do'nt have the same size)
+!!      Modification    24/08/98   (Jabouille) parallelize the code 
+!!      Modification    20/04/99  ( Stein ) use the same conditions for times t
+!!                                          and t-dt
+!!      Modification    11/04/00  (Mari)    special conditions for chemical variables
+!!      Modification    10/01/01  (Tulet)   update for MOCAGE boundary conditions
+!!      Modification    22/01/01  (Gazen)   use NSV_CHEM,NSV_CHEMBEG,NSV_CHEMEND variables
+!!      Modification    22/06/01(Jabouille) use XSVMIN
+!!      Modification    20/11/01(Gazen & Escobar) rewrite GCHBOUNDARY for portability
+!!      Modification    14/03/05 (Tulet)    bug : in case of CYCL do not call ch_boundaries
+!!      Modification    14/05/05 (Tulet)    add aerosols / dust
+!!      Modification    05/06               Suppression of DAVI type of lbc
+!!      Modification    05/06               Remove EPS
+!!      Modification    12/2010  (Chong)    Add boundary condition for ions
+!!                                          (fair weather profiles)
+!!      Modification    07/2013  (Bosseur & Filippi) adds Forefire
+!!      Modification    04/2013  (C.Lac)    Remove instant M               
+!!      Modification    01/2015  (JL Redelsperger) Introduction of ponderation
+!!                                 for non normal velocity and potential temp
+!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
+!!      Redelsperger & Pianezze : 08/2015 : add XPOND coefficient
+!!      Modification    01/2016  (JP Pinty) Add LIMA that is LBC for CCN and IFN
+!!      Modification    18/07/17 (Vionnet)  Add blowing snow variables 
+!!      Modification    01/2018  (JL Redelsperger) Correction for TKE treatment
+!!      Modification    03/02/2020 (B. Vié)  Correction for SV with LIMA
+!  P. Wautelet 04/06/2020: correct call to Set_conc_lima
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!         
+USE MODD_BLOWSNOW,  ONLY : LBLOWSNOW,NBLOWSNOW_2D
+USE MODD_BLOWSNOW_n
+USE MODD_CH_AEROSOL , ONLY : LORILAM
+USE MODD_CH_MNHC_n,   ONLY : LUSECHEM, LUSECHIC
+USE MODD_CONDSAMP,    ONLY : LCONDSAMP
+USE MODD_CONF
+USE MODD_CTURB
+USE MODD_DUST
+USE MODD_GRID_n,    ONLY : XZZ
+USE MODD_ELEC_DESCR
+USE MODD_ELEC_n
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE,   ONLY : LFOREFIRE
+#endif
+USE MODD_LBC_n,      ONLY : XPOND
+USE MODE_ll
+USE MODD_NESTING,      ONLY : NDAD
+USE MODD_NSV
+USE MODD_PARAMETERS
+USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND
+USE MODD_PARAM_n,    ONLY : CELEC,CCLOUD
+USE MODD_PASPOL,      ONLY : LPASPOL
+USE MODD_REF_n
+USE MODD_SALT,        ONLY : LSALT
+
+USE MODE_MODELN_HANDLER
+USE MODE_SET_CONC_LIMA
+
+USE MODI_CH_BOUNDARIES
+USE MODI_INIT_AEROSOL_CONCENTRATION
+USE MODI_ION_BOUNDARIES
+
+IMPLICIT NONE
+!
+!
+!*       0.1   declarations of arguments
+!
+!
+!
+!
+REAL,                  INTENT(IN) :: PTSTEP        ! time step dt
+CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY   ! X and Y-direc. LBC type
+!
+INTEGER,               INTENT(IN) :: KRR           ! Number of moist  variables
+INTEGER,               INTENT(IN) :: KSV           ! Number of Scalar Variables
+INTEGER,               INTENT(IN) :: KTCOUNT       ! Temporal loop COUNTer
+                                                   ! (=1 at the segment beginning)
+!
+! Lateral Boundary fields at time t
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUM,PLBXVM,PLBXWM ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTHM              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYUM,PLBYVM,PLBYWM ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTHM              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTKEM          ! TKE
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTKEM
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBXRM  ,PLBXSVM  ! Moisture and SV
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRM  ,PLBYSVM  ! in x and y-dir.
+! temporal derivative of the Lateral Boundary fields
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUS,PLBXVS,PLBXWS ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTHS              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYUS,PLBYVS,PLBYWS ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTHS              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTKES          ! TKE
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTKES
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBXRS  ,PLBXSVS  ! Moisture and SV
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRS  ,PLBYSVS  ! in x and y-dir.
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PRHODJ    ! Jacobian * dry density of
+                                                  !  the reference state
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PRHODREF
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PUT,PVT,PWT,PTHT,PTKET,PSRCT
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT,PSVT
+                                                      ! Variables at t
+!
+!*       0.2   declarations of local variables
+!
+INTEGER             :: IIB       ! indice I Beginning in x direction
+INTEGER             :: IJB       ! indice J Beginning in y direction
+INTEGER             :: IKB       ! indice K Beginning in z direction
+INTEGER             :: IIE       ! indice I End       in x direction 
+INTEGER             :: IJE       ! indice J End       in y direction 
+INTEGER             :: IKE       ! indice K End       in z direction 
+INTEGER             :: JEXT      ! Loop index for EXTernal points
+INTEGER             :: JRR       ! Loop index for RR variables (water)
+INTEGER             :: JSV       ! Loop index for Scalar Variables
+INTEGER             :: IMI       ! Model Index
+REAL                :: ZTSTEP    ! effective time step
+REAL                :: ZPOND      !  Coeff PONDERATION LS 
+INTEGER             :: ILBX,ILBY ! size of LB fields' arrays
+LOGICAL, SAVE, DIMENSION(:), ALLOCATABLE :: GCHBOUNDARY, GAERBOUNDARY,&
+                    GDSTBOUNDARY, GSLTBOUNDARY, GPPBOUNDARY,          &
+                    GCSBOUNDARY, GICBOUNDARY, GLIMABOUNDARY,GSNWBOUNDARY 
+LOGICAL, SAVE        :: GFIRSTCALL1 = .TRUE.
+LOGICAL, SAVE        :: GFIRSTCALL2 = .TRUE.
+LOGICAL, SAVE        :: GFIRSTCALL3 = .TRUE.
+LOGICAL, SAVE        :: GFIRSTCALL5 = .TRUE. 
+LOGICAL, SAVE        :: GFIRSTCALLPP = .TRUE.                         
+LOGICAL, SAVE        :: GFIRSTCALLCS = .TRUE.                         
+LOGICAL, SAVE        :: GFIRSTCALLIC = .TRUE.                 
+LOGICAL, SAVE        :: GFIRSTCALLLIMA = .TRUE.                 
+!
+REAL, DIMENSION(SIZE(PLBXWM,1),SIZE(PLBXWM,2),SIZE(PLBXWM,3)) ::  &
+                       ZLBXVT,ZLBXWT,ZLBXTHT
+REAL, DIMENSION(SIZE(PLBYWM,1),SIZE(PLBYWM,2),SIZE(PLBYWM,3)) ::  &
+                       ZLBYUT,ZLBYWT,ZLBYTHT
+REAL, DIMENSION(SIZE(PLBXTKEM,1),SIZE(PLBXTKEM,2),SIZE(PLBXTKEM,3)) ::  &
+                       ZLBXTKET
+REAL, DIMENSION(SIZE(PLBYTKEM,1),SIZE(PLBYTKEM,2),SIZE(PLBYTKEM,3)) ::  &
+                       ZLBYTKET
+REAL, DIMENSION(SIZE(PLBXRM,1),SIZE(PLBXRM,2),SIZE(PLBXRM,3),SIZE(PLBXRM,4)) :: &
+                       ZLBXRT
+REAL, DIMENSION(SIZE(PLBYRM,1),SIZE(PLBYRM,2),SIZE(PLBYRM,3),SIZE(PLBYRM,4)) :: &
+                       ZLBYRT
+REAL, DIMENSION(SIZE(PLBXSVM,1),SIZE(PLBXSVM,2),SIZE(PLBXSVM,3),SIZE(PLBXSVM,4)) :: &
+                       ZLBXSVT
+REAL, DIMENSION(SIZE(PLBYSVM,1),SIZE(PLBYSVM,2),SIZE(PLBYSVM,3),SIZE(PLBYSVM,4)) :: &
+                       ZLBYSVT
+LOGICAL              :: GCHTMP
+LOGICAL              :: GPPTMP
+LOGICAL              :: GCSTMP
+!
+LOGICAL, SAVE        :: GFIRSTCALL4 = .TRUE.
+!
+#ifdef MNH_FOREFIRE
+LOGICAL, SAVE, DIMENSION(:), ALLOCATABLE ::  GFFBOUNDARY
+LOGICAL, SAVE        :: GFIRSTCALLFF = .TRUE.                         
+LOGICAL              :: GFFTMP
+#endif
+!
+INTEGER              :: JI,JJ
+!
+REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),SIZE(PSVT,4)) :: ZSVT
+REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),SIZE(PRT,4)) :: ZRT
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.    COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES:
+!              ----------------------------------------------
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+IKB = 1 + JPVEXT
+IKE = SIZE(PUT,3) - JPVEXT
+IMI = GET_CURRENT_MODEL_INDEX()
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.    UPPER AND LOWER BC FILLING:   
+!              ---------------------------
+!
+!*       2.1    COMPUTE THE FIELD EXTRAPOLATIONS AT THE GROUND
+!
+
+!
+!          at the instant t
+!
+IF(SIZE(PUT) /= 0) PUT  (:,:,IKB-1)   = PUT  (:,:,IKB) 
+IF(SIZE(PVT) /= 0) PVT  (:,:,IKB-1)   = PVT  (:,:,IKB) 
+IF(SIZE(PWT) /= 0) PWT  (:,:,IKB-1)   = PWT  (:,:,IKB)  
+IF(SIZE(PTHT) /= 0) PTHT (:,:,IKB-1)  = PTHT (:,:,IKB) 
+IF(SIZE(PTKET) /= 0) PTKET(:,:,IKB-1) = PTKET(:,:,IKB)
+IF(SIZE(PRT) /= 0)  PRT  (:,:,IKB-1,:)= PRT  (:,:,IKB,:)
+IF(SIZE(PSVT)/= 0)  PSVT (:,:,IKB-1,:)= PSVT (:,:,IKB,:)
+IF(SIZE(PSRCT) /= 0) PSRCT(:,:,IKB-1)   = PSRCT(:,:,IKB)
+!
+!
+!*       2.2    COMPUTE THE FIELD EXTRAPOLATIONS AT THE TOP
+!
+!          at the instant t
+!
+IF(SIZE(PWT) /= 0) PWT  (:,:,IKE+1)   = 0.           
+IF(SIZE(PUT) /= 0) PUT  (:,:,IKE+1)   = PUT  (:,:,IKE) 
+IF(SIZE(PVT) /= 0) PVT  (:,:,IKE+1)   = PVT  (:,:,IKE)
+IF(SIZE(PTHT) /= 0) PTHT (:,:,IKE+1)  = PTHT (:,:,IKE)
+IF(SIZE(PTKET) /= 0) PTKET(:,:,IKE+1) = PTKET(:,:,IKE)
+IF(SIZE(PRT) /= 0) PRT  (:,:,IKE+1,:) = PRT  (:,:,IKE,:)
+IF(SIZE(PSVT)/= 0) PSVT (:,:,IKE+1,:) = PSVT (:,:,IKE,:)
+IF(SIZE(PSRCT) /= 0) PSRCT(:,:,IKE+1)   = PSRCT(:,:,IKE)
+
+! specific for positive and negative ions mixing ratios (1/kg)
+
+IF (NSV_ELEC .NE. 0) THEN
+!
+   IF (SIZE(PWT) /= 0) THEN
+     WHERE ( PWT(:,:,IKE+1)  .GE. 0.)    ! Outflow
+         PSVT (:,:,IKE+1,NSV_ELECBEG) = 2.*PSVT (:,:,IKE,NSV_ELECBEG) -  &
+                                           PSVT (:,:,IKE-1,NSV_ELECBEG)
+         PSVT (:,:,IKE+1,NSV_ELECEND) = 2.*PSVT (:,:,IKE,NSV_ELECEND) -  &
+                                           PSVT (:,:,IKE-1,NSV_ELECEND)
+     ELSE WHERE                         ! Inflow from the top
+         PSVT (:,:,IKE+1,NSV_ELECBEG) = XCION_POS_FW(:,:,IKE+1)
+         PSVT (:,:,IKE+1,NSV_ELECEND) = XCION_NEG_FW(:,:,IKE+1)
+     END WHERE
+   ENDIF
+!
+END IF
+
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.    COMPUTE LB FIELDS AT TIME T
+!              ---------------------------
+!
+!
+IF ( KTCOUNT == 1) THEN
+  ZTSTEP = 0.
+ELSE
+  ZTSTEP = PTSTEP
+END IF
+!
+!
+IF ( SIZE(PLBXTHS,1) /= 0 .AND.                      &
+   (     HLBCX(1)=='OPEN' .OR. HLBCX(2)=='OPEN')     ) THEN            
+  ZLBXVT(:,:,:) = PLBXVM(:,:,:) + ZTSTEP * PLBXVS(:,:,:)
+  ZLBXWT(:,:,:) = PLBXWM(:,:,:) + ZTSTEP * PLBXWS(:,:,:)
+  ZLBXTHT(:,:,:) = PLBXTHM(:,:,:) + ZTSTEP * PLBXTHS(:,:,:)
+  IF ( SIZE(PTKET,1) /= 0 ) THEN
+    ZLBXTKET(:,:,:) = PLBXTKEM(:,:,:) + ZTSTEP * PLBXTKES(:,:,:)
+  END IF
+  IF ( KRR > 0) THEN
+    ZLBXRT(:,:,:,:) = PLBXRM(:,:,:,:) + ZTSTEP * PLBXRS(:,:,:,:)
+  END IF
+  IF ( KSV > 0) THEN
+    ZLBXSVT(:,:,:,:) = PLBXSVM(:,:,:,:) + ZTSTEP * PLBXSVS(:,:,:,:)
+  END IF
+!
+ELSE
+!
+  ZLBXVT(:,:,:) = PLBXVM(:,:,:)
+  ZLBXWT(:,:,:) = PLBXWM(:,:,:)
+  ZLBXTHT(:,:,:) = PLBXTHM(:,:,:)
+  IF ( SIZE(PTKET,1) /= 0 ) THEN
+    ZLBXTKET(:,:,:) = PLBXTKEM(:,:,:) 
+  END IF
+  IF ( KRR > 0) THEN
+    ZLBXRT(:,:,:,:) = PLBXRM(:,:,:,:) 
+  END IF
+  IF ( KSV > 0) THEN
+    ZLBXSVT(:,:,:,:) = PLBXSVM(:,:,:,:) 
+  END IF
+!
+END IF
+!
+IF ( SIZE(PLBYTHS,1) /= 0 .AND.                       &
+     (    HLBCY(1)=='OPEN' .OR. HLBCY(2)=='OPEN'    ))  THEN          
+  ZLBYUT(:,:,:) = PLBYUM(:,:,:) + ZTSTEP * PLBYUS(:,:,:)
+  ZLBYWT(:,:,:) = PLBYWM(:,:,:) + ZTSTEP * PLBYWS(:,:,:)
+  ZLBYTHT(:,:,:) = PLBYTHM(:,:,:) + ZTSTEP * PLBYTHS(:,:,:)
+  IF ( SIZE(PTKET,1) /= 0 ) THEN
+    ZLBYTKET(:,:,:) = PLBYTKEM(:,:,:) + ZTSTEP * PLBYTKES(:,:,:)
+  END IF
+  IF ( KRR > 0) THEN
+    ZLBYRT(:,:,:,:) = PLBYRM(:,:,:,:) + ZTSTEP * PLBYRS(:,:,:,:)
+  END IF
+  IF ( KSV > 0) THEN
+    ZLBYSVT(:,:,:,:) = PLBYSVM(:,:,:,:) + ZTSTEP * PLBYSVS(:,:,:,:)
+  END IF
+!
+ELSE
+!
+  ZLBYUT(:,:,:) = PLBYUM(:,:,:)
+  ZLBYWT(:,:,:) = PLBYWM(:,:,:)
+  ZLBYTHT(:,:,:) = PLBYTHM(:,:,:)
+  IF ( SIZE(PTKET,1) /= 0 ) THEN
+    ZLBYTKET(:,:,:) = PLBYTKEM(:,:,:) 
+  END IF
+  IF ( KRR > 0) THEN
+    ZLBYRT(:,:,:,:) = PLBYRM(:,:,:,:) 
+  END IF
+  IF ( KSV > 0) THEN
+    ZLBYSVT(:,:,:,:) = PLBYSVM(:,:,:,:) 
+  END IF
+!
+END IF
+!
+!
+!-------------------------------------------------------------------------------
+! PONDERATION COEFF for  Non-Normal velocities and pot temperature
+!
+ZPOND = XPOND
+!
+!*       4.    LBC FILLING IN THE X DIRECTION (LEFT WEST SIDE):   
+!              ------------------------------------------------
+IF (LWEST_ll( )) THEN
+!
+!
+SELECT CASE ( HLBCX(1) )  
+!
+!*       4.1  WALL CASE:  
+!             ========= 
+!
+  CASE ('WALL')
+!
+    DO JEXT=1,JPHEXT
+       IF(SIZE(PUT) /= 0) PUT  (IIB-JEXT,:,:)   = PUT  (IIB       ,:,:)   ! never used during run
+       IF(SIZE(PVT) /= 0) PVT  (IIB-JEXT,:,:)   = PVT  (IIB-1+JEXT,:,:)
+       IF(SIZE(PWT) /= 0) PWT  (IIB-JEXT,:,:)   = PWT  (IIB-1+JEXT,:,:)
+       IF(SIZE(PTHT) /= 0) PTHT(IIB-JEXT,:,:)   = PTHT (IIB-1+JEXT,:,:)
+       IF(SIZE(PTKET)/= 0) PTKET(IIB-JEXT,:,:)  = PTKET(IIB-1+JEXT,:,:)
+       IF(SIZE(PRT) /= 0) PRT  (IIB-JEXT,:,:,:) = PRT  (IIB-1+JEXT,:,:,:)
+       IF(SIZE(PSVT) /= 0) PSVT(IIB-JEXT,:,:,:) = PSVT (IIB-1+JEXT,:,:,:)
+       IF(SIZE(PSRCT) /= 0) PSRCT (IIB-JEXT,:,:)   = PSRCT (IIB-1+JEXT,:,:)
+       IF(LBLOWSNOW) XSNWCANO(IIB-JEXT,:,:)     = XSNWCANO(IIB-1+JEXT,:,:)            
+!
+    END DO
+!
+    IF(SIZE(PUT) /= 0) PUT(IIB     ,:,:)   = 0.    ! set the normal velocity
+!
+!
+!*       4.2  OPEN CASE:
+!             =========
+!
+  CASE ('OPEN')
+!
+    IF(SIZE(PUT) /= 0) THEN
+       DO JI=JPHEXT,1,-1
+          PUT(JI,:,:)=0.
+          WHERE ( PUT(IIB,:,:) <= 0. )               !  OUTFLOW condition
+             PVT  (JI,:,:) = 2.*PVT  (JI+1,:,:)  -PVT  (JI+2,:,:)
+             PWT  (JI,:,:) = 2.*PWT  (JI+1,:,:)  -PWT  (JI+2,:,:)
+             PTHT (JI,:,:) = 2.*PTHT (JI+1,:,:)  -PTHT (JI+2,:,:)
+             !
+          ELSEWHERE                                   !  INFLOW  condition
+             PVT  (JI,:,:) = ZPOND*ZLBXVT   (JI,:,:) + (1.-ZPOND)* PVT(JI+1,:,:) ! 1 
+             PWT  (JI,:,:) = ZPOND*ZLBXWT   (JI,:,:) + (1.-ZPOND)* PWT(JI+1,:,:) ! 1
+             PTHT (JI,:,:) = ZPOND*ZLBXTHT  (JI,:,:) + (1.-ZPOND)* PTHT(JI+1,:,:)! 1
+          ENDWHERE
+       ENDDO
+    ENDIF
+!
+!
+  IF(SIZE(PTKET) /= 0) THEN
+     DO JI=JPHEXT,1,-1
+        WHERE ( PUT(IIB,:,:) <= 0. )               !  OUTFLOW condition
+           PTKET(JI,:,:) = MAX(XTKEMIN, 2.*PTKET(JI+1,:,:)-PTKET(JI+2,:,:))  
+        ELSEWHERE                                  !  INFLOW  condition
+           PTKET(JI,:,:) = MAX(XTKEMIN, ZPOND*ZLBXTKET(JI,:,:) + (1.-ZPOND)*PTKET(JI+1,:,:))
+        ENDWHERE
+     ENDDO
+  END IF
+    !
+!                      Case with KRR moist variables 
+! 
+! 
+!
+  DO JRR =1 ,KRR
+     IF(SIZE(PUT) /= 0) THEN
+        DO JI=JPHEXT,1,-1
+           WHERE ( PUT(IIB,:,:) <= 0. )         !  OUTFLOW condition
+              PRT(JI,:,:,JRR) = MAX(0.,2.*PRT(JI+1,:,:,JRR) -PRT(JI+2,:,:,JRR))
+           ELSEWHERE                            !  INFLOW  condition
+              PRT(JI,:,:,JRR) = MAX(0.,ZLBXRT(JI,:,:,JRR)) ! 1
+           END WHERE
+        END DO
+     END IF
+     !
+  END DO
+!
+  IF(SIZE(PSRCT) /= 0) THEN
+     DO JI=JPHEXT,1,-1
+        PSRCT (JI,:,:)   = PSRCT (JI+1,:,:)
+     END DO
+  END IF
+!
+!                       Case with KSV scalar variables  
+  DO JSV=1 ,KSV
+    IF(SIZE(PUT) /= 0) THEN
+       DO JI=JPHEXT,1,-1
+          WHERE ( PUT(IIB,:,:) <= 0. )         !  OUTFLOW condition
+             PSVT(JI,:,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(JI+1,:,:,JSV) - &
+                  PSVT(JI+2,:,:,JSV))
+          ELSEWHERE                            !  INFLOW  condition
+             PSVT(JI,:,:,JSV) = MAX(XSVMIN(JSV),ZLBXSVT(JI,:,:,JSV)) ! 1
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+  !
+    IF(LBLOWSNOW) THEN
+    DO JSV=1 ,NBLOWSNOW_2D
+      WHERE ( PUT(IIB,:,IKB) <= 0. )         !  OUTFLOW condition
+        XSNWCANO(IIB-1,:,JSV) = MAX(0.,2.*XSNWCANO(IIB,:,JSV) - &
+                                             XSNWCANO(IIB+1,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        XSNWCANO(IIB-1,:,JSV) = 0.         ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END DO
+   DO JSV=NSV_SNWBEG ,NSV_SNWEND
+    IF(SIZE(PUT) /= 0) THEN
+      WHERE ( PUT(IIB,:,:) <= 0. )         !  OUTFLOW condition
+        PSVT(IIB-1,:,:,JSV) = MAX(0.,2.*PSVT(IIB,:,:,JSV) - &
+                                               PSVT(IIB+1,:,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        PSVT(IIB-1,:,:,JSV) = 0.           ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END IF
+    !
+   END DO
+  ENDIF  
+!
+!
+END SELECT
+!
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       5    LBC FILLING IN THE X DIRECTION (RIGHT EAST SIDE): 
+!              ===============--------------------------------
+!
+IF (LEAST_ll( )) THEN
+!
+SELECT CASE ( HLBCX(2) ) 
+!
+!*       5.1  WALL CASE:
+!             =========
+!
+  CASE ('WALL')
+!
+    DO JEXT=1,JPHEXT
+       IF(SIZE(PUT) /= 0) PUT  (IIE+JEXT,:,:)   = PUT  (IIE       ,:,:)   ! never used during run
+       IF(SIZE(PVT) /= 0) PVT  (IIE+JEXT,:,:)   = PVT  (IIE+1-JEXT,:,:)
+       IF(SIZE(PWT) /= 0) PWT  (IIE+JEXT,:,:)   = PWT  (IIE+1-JEXT,:,:)
+       IF(SIZE(PTHT) /= 0) PTHT (IIE+JEXT,:,:)  = PTHT (IIE+1-JEXT,:,:)
+       IF(SIZE(PTKET) /= 0) PTKET(IIE+JEXT,:,:) = PTKET(IIE+1-JEXT,:,:)
+       IF(SIZE(PRT) /= 0) PRT  (IIE+JEXT,:,:,:) = PRT  (IIE+1-JEXT,:,:,:)
+       IF(SIZE(PSVT) /= 0) PSVT(IIE+JEXT,:,:,:) = PSVT (IIE+1-JEXT,:,:,:)
+       IF(SIZE(PSRCT) /= 0) PSRCT (IIE+JEXT,:,:)= PSRCT (IIE+1-JEXT,:,:)
+       IF(LBLOWSNOW) XSNWCANO(IIE+JEXT,:,:) = XSNWCANO(IIE+1-JEXT,:,:)           
+!
+    END DO
+!
+    IF(SIZE(PUT) /= 0) PUT(IIE+1   ,:,:)   = 0.     ! set the normal velocity
+!
+!*       5.2  OPEN CASE:
+!             =========
+!
+  CASE ('OPEN')
+!
+     ILBX = SIZE(PLBXVM,1)
+     IF(SIZE(PUT) /= 0) THEN
+        DO JI=1,JPHEXT
+           WHERE ( PUT(IIE+1,:,:) >= 0. )               !  OUTFLOW condition
+              PVT  (IIE+JI,:,:) = 2.*PVT  (IIE+JI-1,:,:)   -PVT  (IIE+JI-2,:,:)
+              PWT  (IIE+JI,:,:) = 2.*PWT  (IIE+JI-1,:,:)   -PWT  (IIE+JI-2,:,:)
+              PTHT (IIE+JI,:,:) = 2.*PTHT (IIE+JI-1,:,:)   -PTHT (IIE+JI-2,:,:)
+              !
+           ELSEWHERE                                   !  INFLOW  condition
+              PVT  (IIE+JI,:,:) = ZPOND*ZLBXVT   (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PVT(IIE+JI-1,:,:)
+              PWT  (IIE+JI,:,:) = ZPOND*ZLBXWT   (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PWT(IIE+JI-1,:,:)
+              PTHT (IIE+JI,:,:) = ZPOND*ZLBXTHT  (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PTHT(IIE+JI-1,:,:)
+           ENDWHERE
+        END DO
+     ENDIF
+     !
+     IF(SIZE(PTKET) /= 0) THEN
+        ILBX = SIZE(PLBXTKEM,1)
+        DO JI=1,JPHEXT
+           WHERE ( PUT(IIE+1,:,:) >= 0. )             !  OUTFLOW condition
+              PTKET(IIE+JI,:,:) = MAX(XTKEMIN, 2.*PTKET(IIE+JI-1,:,:)-PTKET(IIE+JI-2,:,:))  
+           ELSEWHERE                                  !  INFLOW  condition
+              PTKET(IIE+JI,:,:) =  MAX(XTKEMIN, ZPOND*ZLBXTKET(ILBX-JPHEXT+JI,:,:) + &
+                                   (1.-ZPOND)*PTKET(IIE+JI-1,:,:))
+           ENDWHERE
+        END DO
+     END IF
+    !
+!
+!                      Case with KRR moist variables 
+! 
+! 
+  DO JRR =1 ,KRR
+    ILBX=SIZE(PLBXRM,1)
+    !
+    IF(SIZE(PUT) /= 0) THEN
+       DO JI=1,JPHEXT  
+          WHERE ( PUT(IIE+1,:,:) >= 0. )       !  OUTFLOW condition
+             PRT(IIE+JI,:,:,JRR) = MAX(0.,2.*PRT(IIE+JI-1,:,:,JRR) -PRT(IIE+JI-2,:,:,JRR))
+          ELSEWHERE                            !  INFLOW  condition
+             PRT(IIE+JI,:,:,JRR) = MAX(0.,ZLBXRT(ILBX-JPHEXT+JI,:,:,JRR))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+  IF(SIZE(PSRCT) /= 0) THEN
+     DO JI=1,JPHEXT 
+        PSRCT (IIE+JI,:,:)   = PSRCT (IIE+JI-1,:,:)
+     END DO
+  END IF
+!                       Case with KSV scalar variables  
+  DO JSV=1 ,KSV
+    ILBX=SIZE(PLBXSVM,1)
+    IF(SIZE(PUT) /= 0) THEN
+       DO JI=1,JPHEXT 
+          WHERE ( PUT(IIE+1,:,:) >= 0. )       !  OUTFLOW condition
+             PSVT(IIE+JI,:,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(IIE+JI-1,:,:,JSV) - &
+                  PSVT(IIE+JI-2,:,:,JSV))
+          ELSEWHERE                            !  INFLOW  condition
+             PSVT(IIE+JI,:,:,JSV) = MAX(XSVMIN(JSV),ZLBXSVT(ILBX-JPHEXT+JI,:,:,JSV))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+  IF(LBLOWSNOW) THEN
+    DO JSV=1 ,3
+      WHERE ( PUT(IIE+1,:,IKB) >= 0. )       !  OUTFLOW condition
+        XSNWCANO(IIE+1,:,JSV) = MAX(0.,2.*XSNWCANO(IIE,:,JSV) - &
+                                              XSNWCANO(IIE-1,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        XSNWCANO(IIE+1,:,JSV) = 0.         ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END DO
+    DO JSV=NSV_SNWBEG ,NSV_SNWEND
+    IF(SIZE(PUT) /= 0) THEN
+      WHERE ( PUT(IIE+1,:,:) >= 0. )       !  OUTFLOW condition
+        PSVT(IIE+1,:,:,JSV) = MAX(0.,2.*PSVT(IIE,:,:,JSV) - &
+                                               PSVT(IIE-1,:,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        PSVT(IIE+1,:,:,JSV) = 0.           ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END IF
+    !
+  END DO
+  END IF
+!
+END SELECT
+!
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       6.    LBC FILLING IN THE Y DIRECTION (BOTTOM SOUTH SIDE): 
+!              ------------------------------
+IF (LSOUTH_ll( )) THEN
+!
+SELECT CASE ( HLBCY(1) )              
+!
+!*       6.1  WALL CASE:
+!             ========= 
+!
+  CASE ('WALL')
+!
+    DO JEXT=1,JPHEXT
+       IF(SIZE(PUT) /= 0) PUT  (:,IJB-JEXT,:)   = PUT  (:,IJB-1+JEXT,:)
+       IF(SIZE(PVT) /= 0) PVT  (:,IJB-JEXT,:)   = PVT  (:,IJB       ,:)   ! never used during run
+       IF(SIZE(PWT) /= 0) PWT  (:,IJB-JEXT,:)   = PWT  (:,IJB-1+JEXT,:)
+       IF(SIZE(PTHT) /= 0) PTHT (:,IJB-JEXT,:)  = PTHT (:,IJB-1+JEXT,:)
+       IF(SIZE(PTKET) /= 0) PTKET(:,IJB-JEXT,:) = PTKET(:,IJB-1+JEXT,:)
+       IF(SIZE(PRT) /= 0) PRT  (:,IJB-JEXT,:,:) = PRT  (:,IJB-1+JEXT,:,:)
+       IF(SIZE(PSVT) /= 0) PSVT (:,IJB-JEXT,:,:)= PSVT (:,IJB-1+JEXT,:,:)
+       IF(SIZE(PSRCT) /= 0) PSRCT(:,IJB-JEXT,:) = PSRCT(:,IJB-1+JEXT,:)
+       IF(LBLOWSNOW) XSNWCANO(:,IJB-JEXT,:)     = XSNWCANO(:,IJB-1+JEXT,:)     
+!
+    END DO
+!
+    IF(SIZE(PVT) /= 0) PVT(:,IJB     ,:)   = 0.       ! set the normal velocity
+!
+!*       6.2  OPEN CASE:
+!             =========
+!
+  CASE ('OPEN')
+!
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=JPHEXT,1,-1
+          PVT(:,JJ,:)=0.
+          WHERE ( PVT(:,IJB,:) <= 0. )               !  OUTFLOW condition
+             PUT  (:,JJ,:) = 2.*PUT  (:,JJ+1,:)   -PUT  (:,JJ+2,:)
+             PWT  (:,JJ,:) = 2.*PWT  (:,JJ+1,:)   -PWT  (:,JJ+2,:)
+             PTHT (:,JJ,:) = 2.*PTHT (:,JJ+1,:)   -PTHT (:,JJ+2,:)
+          ELSEWHERE                                   !  INFLOW  condition
+             PUT  (:,JJ,:) = ZPOND*ZLBYUT   (:,JJ,:) + (1.-ZPOND)* PUT(:,JJ+1,:)
+             PWT  (:,JJ,:) = ZPOND*ZLBYWT   (:,JJ,:) + (1.-ZPOND)* PWT(:,JJ+1,:)
+             PTHT (:,JJ,:) = ZPOND*ZLBYTHT  (:,JJ,:) + (1.-ZPOND)* PTHT(:,JJ+1,:)
+          ENDWHERE
+       END DO
+    ENDIF
+!
+  IF(SIZE(PTKET) /= 0) THEN
+     DO JJ=JPHEXT,1,-1
+        WHERE ( PVT(:,IJB,:) <= 0. )             !  OUTFLOW condition
+           PTKET(:,JJ,:) = MAX(XTKEMIN, 2.*PTKET(:,JJ+1,:)-PTKET(:,JJ+2,:))  
+        ELSEWHERE                                !  INFLOW  condition
+           PTKET(:,JJ,:) =  MAX(XTKEMIN,ZPOND*ZLBYTKET(:,JJ,:) +  &
+                            (1.-ZPOND)*PTKET(:,JJ+1,:))
+        ENDWHERE
+     END DO
+  END IF
+    !
+!
+!                      Case with KRR moist variables 
+! 
+! 
+  DO JRR =1 ,KRR
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=JPHEXT,1,-1
+          WHERE ( PVT(:,IJB,:) <= 0. )         !  OUTFLOW condition
+             PRT(:,JJ,:,JRR) = MAX(0.,2.*PRT(:,JJ+1,:,JRR) -PRT(:,JJ+2,:,JRR))
+          ELSEWHERE                            !  INFLOW  condition
+             PRT(:,JJ,:,JRR) = MAX(0.,ZLBYRT(:,JJ,:,JRR))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+  IF(SIZE(PSRCT) /= 0) THEN
+     DO JJ=JPHEXT,1,-1
+        PSRCT(:,JJ,:)   = PSRCT(:,JJ+1,:)
+     END DO
+  END IF
+!
+!                       Case with KSV scalar variables  
+!
+  DO JSV=1 ,KSV
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=JPHEXT,1,-1
+          WHERE ( PVT(:,IJB,:) <= 0. )         !  OUTFLOW condition
+             PSVT(:,JJ,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(:,JJ+1,:,JSV) - &
+                  PSVT(:,JJ+2,:,JSV))
+          ELSEWHERE                            !  INFLOW  condition
+             PSVT(:,JJ,:,JSV) = MAX(XSVMIN(JSV),ZLBYSVT(:,JJ,:,JSV))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+   IF(LBLOWSNOW) THEN
+    DO JSV=1 ,3
+      WHERE ( PVT(:,IJB,IKB) <= 0. )         !  OUTFLOW condition
+        XSNWCANO(:,IJB-1,JSV) = MAX(0.,2.*XSNWCANO(:,IJB,JSV) - &
+                                             XSNWCANO(:,IJB+1,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        XSNWCANO(:,IJB-1,JSV) = 0.         ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END DO
+   DO JSV=NSV_SNWBEG ,NSV_SNWEND
+    IF(SIZE(PVT) /= 0) THEN
+      WHERE ( PVT(:,IJB,:) <= 0. )         !  OUTFLOW condition
+        PSVT(:,IJB-1,:,JSV) = MAX(0.,2.*PSVT(:,IJB,:,JSV) - &
+                                               PSVT(:,IJB+1,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        PSVT(:,IJB-1,:,JSV) = 0.           ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END IF
+    !
+  END DO
+  END IF 
+!
+!
+END SELECT
+!
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       7.    LBC FILLING IN THE Y DIRECTION (TOP NORTH SIDE): 
+!              ===============
+!
+IF (LNORTH_ll( )) THEN
+!
+SELECT CASE ( HLBCY(2) ) 
+!
+!*       4.3.1  WALL CASE:
+!               ========= 
+!
+  CASE ('WALL')
+!
+    DO JEXT=1,JPHEXT
+       IF(SIZE(PUT) /= 0) PUT  (:,IJE+JEXT,:)   = PUT  (:,IJE+1-JEXT,:)
+       IF(SIZE(PVT) /= 0) PVT  (:,IJE+JEXT,:)   = PVT  (:,IJE       ,:)   ! never used during run
+       IF(SIZE(PWT) /= 0) PWT  (:,IJE+JEXT,:)   = PWT  (:,IJE+1-JEXT,:)
+       IF(SIZE(PTHT) /= 0) PTHT (:,IJE+JEXT,:)  = PTHT (:,IJE+1-JEXT,:)
+       IF(SIZE(PTKET) /= 0) PTKET(:,IJE+JEXT,:) = PTKET(:,IJE+1-JEXT,:)
+       IF(SIZE(PRT) /= 0) PRT  (:,IJE+JEXT,:,:) = PRT  (:,IJE+1-JEXT,:,:)
+       IF(SIZE(PSVT) /= 0) PSVT (:,IJE+JEXT,:,:)= PSVT (:,IJE+1-JEXT,:,:)
+       IF(SIZE(PSRCT) /= 0) PSRCT(:,IJE+JEXT,:) = PSRCT(:,IJE+1-JEXT,:)
+       IF(LBLOWSNOW) XSNWCANO(:,IJE+JEXT,:)     = XSNWCANO(:,IJE+1-JEXT,:)   
+!
+    END DO
+!
+    IF(SIZE(PVT) /= 0) PVT(:,IJE+1   ,:)   = 0.    ! set the normal velocity
+!
+!*       4.3.2  OPEN CASE:
+!               ========= 
+!
+  CASE ('OPEN')
+!
+!
+    ILBY=SIZE(PLBYUM,2)
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=1,JPHEXT
+          WHERE ( PVT(:,IJE+1,:) >= 0. )               !  OUTFLOW condition
+             PUT  (:,IJE+JJ,:) = 2.*PUT  (:,IJE+JJ-1,:)   -PUT  (:,IJE+JJ-2,:)
+             PWT  (:,IJE+JJ,:) = 2.*PWT  (:,IJE+JJ-1,:)   -PWT  (:,IJE+JJ-2,:)
+             PTHT (:,IJE+JJ,:) = 2.*PTHT (:,IJE+JJ-1,:)   -PTHT (:,IJE+JJ-2,:)
+          ELSEWHERE                                   !  INFLOW  condition
+             PUT  (:,IJE+JJ,:) = ZPOND*ZLBYUT   (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PUT(:,IJE+JJ-1,:)
+             PWT  (:,IJE+JJ,:) = ZPOND*ZLBYWT   (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PWT(:,IJE+JJ-1,:)
+             PTHT (:,IJE+JJ,:) = ZPOND*ZLBYTHT  (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PTHT(:,IJE+JJ-1,:)
+          ENDWHERE
+       END DO
+    ENDIF
+!
+  IF(SIZE(PTKET) /= 0) THEN
+    ILBY=SIZE(PLBYTKEM,2)
+    DO JJ=1,JPHEXT
+       WHERE ( PVT(:,IJE+1,:) >= 0. )             !  OUTFLOW condition
+          PTKET(:,IJE+JJ,:) = MAX(XTKEMIN, 2.*PTKET(:,IJE+JJ-1,:)-PTKET(:,IJE+JJ-2,:))  
+       ELSEWHERE                                  !  INFLOW  condition
+          PTKET(:,IJE+JJ,:) = MAX(XTKEMIN,ZPOND*ZLBYTKET(:,ILBY-JPHEXT+JJ,:) + &
+                              (1.-ZPOND)*PTKET(:,IJE+JJ-1,:))
+       ENDWHERE
+    END DO
+  ENDIF
+    !
+!                      Case with KRR moist variables 
+! 
+! 
+  DO JRR =1 ,KRR
+    ILBY=SIZE(PLBYRM,2)
+    !
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=1,JPHEXT
+          WHERE ( PVT(:,IJE+1,:) >= 0. )         !  OUTFLOW condition
+             PRT(:,IJE+JJ,:,JRR) = MAX(0.,2.*PRT(:,IJE+JJ-1,:,JRR) -PRT(:,IJE+JJ-2,:,JRR))
+          ELSEWHERE                            !  INFLOW  condition
+             PRT(:,IJE+JJ,:,JRR) = MAX(0.,ZLBYRT(:,ILBY-JPHEXT+JJ,:,JRR))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+  IF(SIZE(PSRCT) /= 0) THEN
+      DO JJ=1,JPHEXT
+         PSRCT(:,IJE+JJ,:)   = PSRCT(:,IJE+JJ-1,:)
+      END DO
+  END IF
+!
+!                       Case with KSV scalar variables  
+  DO JSV=1 ,KSV
+    ILBY=SIZE(PLBYSVM,2)
+    !
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=1,JPHEXT
+          WHERE ( PVT(:,IJE+1,:) >= 0. )         !  OUTFLOW condition
+             PSVT(:,IJE+JJ,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(:,IJE+JJ-1,:,JSV) - &
+                  PSVT(:,IJE+JJ-2,:,JSV))
+          ELSEWHERE                            !  INFLOW  condition
+             PSVT(:,IJE+JJ,:,JSV) = MAX(XSVMIN(JSV),ZLBYSVT(:,ILBY-JPHEXT+JJ,:,JSV))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+    IF(LBLOWSNOW) THEN
+  DO JSV=1 ,3
+    WHERE ( PVT(:,IJE+1,IKB) >= 0. )         !  OUTFLOW condition
+      XSNWCANO(:,IJE+1,JSV) = MAX(0.,2.*XSNWCANO(:,IJE,JSV) - &
+                                            XSNWCANO(:,IJE-1,JSV))
+    ELSEWHERE                            !  INFLOW  condition
+      XSNWCANO(:,IJE+1,JSV) = 0.         ! Assume no snow enter throug
+                                         ! boundaries
+    END WHERE
+  END DO
+  DO JSV=NSV_SNWBEG ,NSV_SNWEND
+    !
+    IF(SIZE(PVT) /= 0) THEN
+      WHERE ( PVT(:,IJE+1,:) >= 0. )         !  OUTFLOW condition
+        PSVT(:,IJE+1,:,JSV) = MAX(0.,2.*PSVT(:,IJE,:,JSV) - &
+                                               PSVT(:,IJE-1,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        PSVT(:,IJE+1,:,JSV) = 0.           ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END IF
+    !
+  END DO
+  ENDIF
+!
+END SELECT
+END IF
+!
+!
+IF (CCLOUD == 'LIMA' .AND. IMI == 1 .AND. CPROGRAM=='MESONH') THEN
+
+   ZSVT=PSVT
+   ZRT=PRT
+
+  IF (GFIRSTCALLLIMA) THEN
+    ALLOCATE(GLIMABOUNDARY(NSV_LIMA))
+    GFIRSTCALLLIMA = .FALSE.
+    DO JSV=NSV_LIMA_BEG,NSV_LIMA_END
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GLIMABOUNDARY(JSV-NSV_LIMA_BEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+  CALL INIT_AEROSOL_CONCENTRATION(PRHODREF,ZSVT,XZZ)
+  DO JSV=NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1 ! LBC for CCN
+     IF (GLIMABOUNDARY(JSV-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,JSV)=ZSVT(IIB-1,:,:,JSV)
+        PSVT(IIE+1,:,:,JSV)=ZSVT(IIE+1,:,:,JSV)
+        PSVT(:,IJB-1,:,JSV)=ZSVT(:,IJB-1,:,JSV)
+        PSVT(:,IJE+1,:,JSV)=ZSVT(:,IJE+1,:,JSV)
+     ENDIF
+  END DO
+  DO JSV=NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1 ! LBC for IFN
+     IF (GLIMABOUNDARY(JSV-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,JSV)=ZSVT(IIB-1,:,:,JSV)
+        PSVT(IIE+1,:,:,JSV)=ZSVT(IIE+1,:,:,JSV)
+        PSVT(:,IJB-1,:,JSV)=ZSVT(:,IJB-1,:,JSV)
+        PSVT(:,IJE+1,:,JSV)=ZSVT(:,IJE+1,:,JSV)
+     ENDIF
+  END DO
+
+  CALL SET_CONC_LIMA( IMI, 'NONE', PRHODREF, ZRT(:, :, :, :), ZSVT(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
+  IF (NSV_LIMA_NC.GE.1) THEN
+     IF (GLIMABOUNDARY(NSV_LIMA_NC-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,NSV_LIMA_NC)=ZSVT(IIB-1,:,:,NSV_LIMA_NC) ! cloud
+        PSVT(IIE+1,:,:,NSV_LIMA_NC)=ZSVT(IIE+1,:,:,NSV_LIMA_NC)
+        PSVT(:,IJB-1,:,NSV_LIMA_NC)=ZSVT(:,IJB-1,:,NSV_LIMA_NC)
+        PSVT(:,IJE+1,:,NSV_LIMA_NC)=ZSVT(:,IJE+1,:,NSV_LIMA_NC)
+     ENDIF
+  ENDIF
+  IF (NSV_LIMA_NR.GE.1) THEN
+     IF (GLIMABOUNDARY(NSV_LIMA_NR-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,NSV_LIMA_NR)=ZSVT(IIB-1,:,:,NSV_LIMA_NR) ! rain
+        PSVT(IIE+1,:,:,NSV_LIMA_NR)=ZSVT(IIE+1,:,:,NSV_LIMA_NR)
+        PSVT(:,IJB-1,:,NSV_LIMA_NR)=ZSVT(:,IJB-1,:,NSV_LIMA_NR)
+        PSVT(:,IJE+1,:,NSV_LIMA_NR)=ZSVT(:,IJE+1,:,NSV_LIMA_NR)
+     ENDIF
+  ENDIF
+  IF (NSV_LIMA_NI.GE.1) THEN
+     IF (GLIMABOUNDARY(NSV_LIMA_NI-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,NSV_LIMA_NI)=ZSVT(IIB-1,:,:,NSV_LIMA_NI) ! ice
+        PSVT(IIE+1,:,:,NSV_LIMA_NI)=ZSVT(IIE+1,:,:,NSV_LIMA_NI)
+        PSVT(:,IJB-1,:,NSV_LIMA_NI)=ZSVT(:,IJB-1,:,NSV_LIMA_NI)
+        PSVT(:,IJE+1,:,NSV_LIMA_NI)=ZSVT(:,IJE+1,:,NSV_LIMA_NI)
+     ENDIF
+  END IF
+END IF
+!
+!
+IF (LUSECHEM .AND. IMI == 1) THEN
+  IF (GFIRSTCALL1) THEN
+    ALLOCATE(GCHBOUNDARY(NSV_CHEM))
+    GFIRSTCALL1 = .FALSE.
+    DO JSV=NSV_CHEMBEG,NSV_CHEMEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GCHBOUNDARY(JSV-NSV_CHEMBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_CHEMBEG,NSV_CHEMEND
+    IF (GCHBOUNDARY(JSV-NSV_CHEMBEG+1))  THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+!
+IF (LUSECHIC .AND. IMI == 1) THEN
+  IF (GFIRSTCALLIC) THEN
+    ALLOCATE(GICBOUNDARY(NSV_CHIC))
+    GFIRSTCALLIC = .FALSE.
+    DO JSV=NSV_CHICBEG,NSV_CHICEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GICBOUNDARY(JSV-NSV_CHICBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_CHICBEG,NSV_CHICEND
+    IF (GICBOUNDARY(JSV-NSV_CHICBEG+1))  THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+IF (LORILAM .AND. IMI == 1) THEN
+  IF (GFIRSTCALL2) THEN
+    ALLOCATE(GAERBOUNDARY(NSV_AER))
+    GFIRSTCALL2 = .FALSE.
+    DO JSV=NSV_AERBEG,NSV_AEREND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GAERBOUNDARY(JSV-NSV_AERBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_AERBEG,NSV_AEREND
+    IF (GAERBOUNDARY(JSV-NSV_AERBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+!
+IF (LDUST .AND. IMI == 1) THEN
+  IF (GFIRSTCALL3) THEN
+    ALLOCATE(GDSTBOUNDARY(NSV_DST))
+    GFIRSTCALL3 = .FALSE.
+    DO JSV=NSV_DSTBEG,NSV_DSTEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GDSTBOUNDARY(JSV-NSV_DSTBEG+1) = GCHTMP
+    ENDDO
+    ENDIF
+
+  DO JSV=NSV_DSTBEG,NSV_DSTEND
+    IF (GDSTBOUNDARY(JSV-NSV_DSTBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO 
+ENDIF
+!
+IF (LSALT .AND. IMI == 1) THEN
+  IF (GFIRSTCALL5) THEN
+    ALLOCATE(GSLTBOUNDARY(NSV_SLT))
+    GFIRSTCALL5 = .FALSE.
+    DO JSV=NSV_SLTBEG,NSV_SLTEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GSLTBOUNDARY(JSV-NSV_SLTBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_SLTBEG,NSV_SLTEND
+    IF (GSLTBOUNDARY(JSV-NSV_SLTBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+!
+IF ( LPASPOL .AND. IMI == 1) THEN
+  IF (GFIRSTCALLPP) THEN
+    ALLOCATE(GPPBOUNDARY(NSV_PP))
+    GFIRSTCALLPP = .FALSE.
+    DO JSV=NSV_PPBEG,NSV_PPEND
+      GPPTMP = .FALSE.
+      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+      GPPBOUNDARY(JSV-NSV_PPBEG+1) = GPPTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_PPBEG,NSV_PPEND
+    IF (GPPBOUNDARY(JSV-NSV_PPBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+!
+IF ( LCONDSAMP .AND. IMI == 1) THEN
+  IF (GFIRSTCALLCS) THEN
+    ALLOCATE(GCSBOUNDARY(NSV_CS))
+    GFIRSTCALLCS = .FALSE.
+    DO JSV=NSV_CSBEG,NSV_CSEND
+      GCSTMP = .FALSE.
+      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+      GCSBOUNDARY(JSV-NSV_CSBEG+1) = GCSTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_CSBEG,NSV_CSEND
+    IF (GCSBOUNDARY(JSV-NSV_CSBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+
+IF (LBLOWSNOW .AND. IMI == 1) THEN
+  IF (GFIRSTCALL3) THEN
+    ALLOCATE(GSNWBOUNDARY(NSV_SNW))
+    GFIRSTCALL3 = .FALSE.
+    DO JSV=NSV_SNWBEG,NSV_SNWEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0)
+       GSNWBOUNDARY(JSV-NSV_SNWBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+ENDIF
+
+#ifdef MNH_FOREFIRE
+!ForeFire 
+IF ( LFOREFIRE .AND. IMI == 1) THEN
+  IF (GFIRSTCALLFF) THEN
+    ALLOCATE(GFFBOUNDARY(NSV_FF))
+    GFIRSTCALLFF = .FALSE.
+    DO JSV=NSV_FFBEG,NSV_FFEND
+      GFFTMP = .FALSE.
+      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+      GFFBOUNDARY(JSV-NSV_FFBEG+1) = GFFTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_FFBEG,NSV_FFEND
+    IF (GFFBOUNDARY(JSV-NSV_FFBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+#endif
+!
+IF ( CELEC /= 'NONE' .AND. (NSV_ELEC_A(NDAD(IMI)) == 0 .OR. IMI == 1)) THEN
+  CALL ION_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT)
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE BOUNDARIES