dbf9ca54844c2c01949f7f64f7cb8c53de9b6f98
[MNH-git_open_source-lfs.git] / src / MNH / advec_weno_k_3_aux.f90
1 !MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
3 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
4 !MNH_LIC for details. version 1.
5 !     ##############################
6       MODULE MODI_ADVEC_WENO_K_3_AUX
7 !     ##############################
8 !
9 INTERFACE
10 !
11       SUBROUTINE ADVEC_WENO_K_3_UX(HLBCX,PSRC, PRUCT, PR)
12 !
13 USE MODE_ll
14 USE MODD_LUNIT
15 USE MODD_CONF
16 !
17 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
18 !
19 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on U grid at t
20 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRUCT ! contrav. comp. on MASS GRID
21 !
22 ! output source term
23 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
24 !
25 END SUBROUTINE ADVEC_WENO_K_3_UX
26 !
27 !---------------------------------------------------------------------------------
28 !
29       SUBROUTINE ADVEC_WENO_K_3_MX(HLBCX,PSRC, PRUCT, PR)
30 !
31 USE MODE_ll
32 USE MODD_LUNIT
33 USE MODD_CONF
34 !
35 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
36 !
37 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on U grid at t
38 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRUCT ! contrav. comp. on MASS GRID
39 !
40 ! output source term
41 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
42 !
43 END SUBROUTINE ADVEC_WENO_K_3_MX
44 !
45 !---------------------------------------------------------------------------------
46 !
47       SUBROUTINE ADVEC_WENO_K_3_VY(HLBCY,PSRC, PRVCT, PR)
48 !
49 USE MODE_ll
50 USE MODD_LUNIT
51 USE MODD_CONF
52 !
53 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY  ! Y direction LBC type
54 !
55 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on U grid at t
56 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRVCT ! contrav. comp. on MASS GRID
57 !
58 !
59 ! output source term
60 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
61 !
62 END SUBROUTINE ADVEC_WENO_K_3_VY
63 !
64 !---------------------------------------------------------------------------------
65 !
66       SUBROUTINE ADVEC_WENO_K_3_MY(HLBCY,PSRC, PRVCT, PR)
67 !
68 USE MODE_ll
69 USE MODD_LUNIT
70 USE MODD_CONF
71 !
72 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY  ! Y direction LBC type
73 !
74 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on U grid at t
75 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRVCT ! contrav. comp. on MASS GRID
76 !
77 ! output source term
78 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
79 !
80 END SUBROUTINE ADVEC_WENO_K_3_MY
81 !
82 !---------------------------------------------------------------------------------
83 !
84 FUNCTION WENO_K_3_WZ(PSRC, PRWCT) RESULT(PR)
85 !
86 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on W grid at t
87 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRWCT ! contrav. comp. on MASS GRID
88 !
89 ! output source term
90 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: PR
91 !
92 END FUNCTION WENO_K_3_WZ
93 !
94 !---------------------------------------------------------------------------------
95 !
96 FUNCTION WENO_K_3_MZ(PSRC, PRWCT) RESULT(PR)
97 !
98 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on MASS grid at t
99 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRWCT ! contrav. comp. on W grid
100 !
101 ! output source term
102 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: PR
103 !
104 END FUNCTION WENO_K_3_MZ
105 !
106 END INTERFACE
107 !
108 END MODULE MODI_ADVEC_WENO_K_3_AUX
109 !
110 !-----------------------------------------------------------------------------
111 !
112 !     ############################################################
113       SUBROUTINE ADVEC_WENO_K_3_UX(HLBCX,PSRC, PRUCT, PR)
114 !     ############################################################
115 !!
116 !!**** Computes PRUCT * PUT. Upstream fluxes of U in X direction.  
117 !!     Input PUT is on U Grid 'ie' (i,j,k) based on UGRID reference
118 !!     Output PR is on mass Grid 'ie' (i+1/2,j,k) based on UGRID reference
119 !!              
120 !!    AUTHOR
121 !!    ------
122 !!    F. Visentin   *CNRS/LA*               
123 !!
124 !!    MODIFICATIONS
125 !!    -------------
126 !!    T. Lunet 02/10/2014:  Correction of periodic boudary conditions
127 !!       Change of structure in order to adapt WENO to NHALOK
128 !!       Suppression of second layer HALO pointers
129 !!       Complete code documentation
130 !!      J.Escobar : 25/09/2015 : WENO5 & JPHEXT <> 1 
131 !!      J.Escobar : 02/10/2015 : correction on CYCL/OPEN boundaries
132 !!
133 !-------------------------------------------------------------------------------
134 !
135 USE MODE_ll
136 USE MODD_LUNIT
137 USE MODD_CONF
138 !
139 IMPLICIT NONE
140 !
141 !*       0.1   Declarations of dummy arguments :
142 !
143 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
144 !
145 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on U grid at t
146 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRUCT ! contrav. comp. on MASS GRID
147 !
148 ! output source term
149 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
150 !
151 !*       0.2   Declarations of local variables :
152 !
153 INTEGER :: IIB,IJB    ! Begining useful area in x,y,z directions
154 INTEGER :: IIE,IJE    ! End useful area in x,y,z directions
155 INTEGER :: IW,IE      ! Physical boundary index
156 !
157 INTEGER:: ILUOUT,IRESP   ! for prints
158 !
159 ! intermediate reconstruction fluxes for positive wind case
160 !
161 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFPOS1, ZFPOS2, ZFPOS3
162 !
163 ! intermediate reconstruction fluxes for negative wind case
164 !
165 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFNEG1, ZFNEG2, ZFNEG3
166 !
167 ! smoothness indicators for positive wind case
168 !
169 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBPOS1, ZBPOS2, ZBPOS3
170 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBNEG1, ZBNEG2, ZBNEG3
171 !
172 ! WENO non-normalized weights
173 !
174 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: ZOMP1, ZOMP2, ZOMP3
175 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: ZOMN1, ZOMN2, ZOMN3
176 !
177 ! EPSILON for weno weights calculation
178
179 REAL, PARAMETER :: ZEPS = 1.0E-15
180 !
181 !-----------------------------------------------------------------------------
182 !*       0.3.     COMPUTES THE DOMAIN DIMENSIONS
183 !                 ------------------------------
184 !
185 CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
186 !
187 !-------------------------------------------------------------------------------
188 !*       0.4.   INITIALIZE THE FIELD 
189 !               ---------------------
190 !
191 PR(:,:,:) = 0.0
192 !
193 ZFPOS1  = 0.0
194 ZFPOS2  = 0.0
195 ZFPOS3  = 0.0
196 ZFNEG1  = 0.0
197 ZFNEG2  = 0.0
198 ZFNEG3  = 0.0
199 ZBPOS1  = 0.0
200 ZBPOS2  = 0.0
201 ZBPOS3  = 0.0
202 ZBNEG1  = 0.0
203 ZBNEG2  = 0.0
204 ZBNEG3  = 0.0
205 ZOMP1   = 0.0
206 ZOMP2   = 0.0
207 ZOMP3   = 0.0
208 ZOMN1   = 0.0
209 ZOMN2   = 0.0
210 ZOMN3   = 0.0 
211 !
212 !-------------------------------------------------------------------------------
213 !*       1.1.   Interior Fluxes 
214 !              ---------------------
215 IW=IIB
216 IE=IIE
217 !
218 !-------------------------------------------------------------------------------
219 ! Flux calculation in the physical domain far enough from the boundary 
220 ! WENO scheme order 5, IW+1 -> IE-2
221 ! Computation at the mass point on Ugrid u(i+1/2,j,k)
222 !-------------------------------------------------------------------------------
223 !
224 ! ----- Positive fluxes -----
225 !
226 ! First positive stencil, needs indices i-2, i-1, i
227 ZFPOS1(IW+1:IE-2,:,:) = 1./6.   * (2.0*PSRC(IW-1:IE-4,:,:) - 7.0*PSRC(IW:IE-3,:,:) + 11.0*PSRC(IW+1:IE-2,:,:)) ! Flux
228 ZBPOS1(IW+1:IE-2,:,:) = 13./12. * (    PSRC(IW-1:IE-4,:,:) - 2.0*PSRC(IW:IE-3,:,:) +      PSRC(IW+1:IE-2,:,:))**2 & 
229                        + 1./4    * (    PSRC(IW-1:IE-4,:,:) - 4.0*PSRC(IW:IE-3,:,:) + 3.0* PSRC(IW+1:IE-2,:,:))**2 ! Smoothness indicator
230 ZOMP1(IW+1:IE-2,:,:)  = 1./10. /  (ZEPS + ZBPOS1(IW+1:IE-2,:,:))**2
231 !
232 ! Second positive stencil, needs indices i-1, i, i+1
233 ZFPOS2(IW+1:IE-2,:,:) = 1./6.  * (-1.0*PSRC(IW:IE-3,:,:) + 5.0*PSRC(IW+1:IE-2,:,:) + 2.0*PSRC(IW+2:IE-1,:,:))! Flux
234 ZBPOS2(IW+1:IE-2,:,:) = 13./12 * (     PSRC(IW:IE-3,:,:) - 2.0*PSRC(IW+1:IE-2,:,:) +     PSRC(IW+2:IE-1,:,:))**2 &
235                          + 1./4   * (  PSRC(IW:IE-3,:,:) - PSRC(IW+2:IE-1,:,:))**2! Smoothness indicator
236 ZOMP2(IW+1:IE-2,:,:)  = 3./5. /  (ZEPS + ZBPOS2(IW+1:IE-2,:,:))**2
237 !
238 ! Third positive stencil, needs indices i, i+1, i+2
239 ZFPOS3(IW+1:IE-2,:,:) = 1./6   * (2.0*PSRC(IW+1:IE-2,:,:) + 5.0*PSRC(IW+2:IE-1,:,:) - PSRC(IW+3:IE,:,:))! Flux
240 ZBPOS3(IW+1:IE-2,:,:) = 13./12 * (PSRC(IW+1:IE-2,:,:) - 2.0*PSRC(IW+2:IE-1,:,:) + PSRC(IW+3:IE,:,:))**2 &
241 + 1./4   * (3.0*PSRC(IW+1:IE-2,:,:) - 4.0*PSRC(IW+2:IE-1,:,:) + PSRC(IW+3:IE,:,:))**2! Smoothness indicator
242 ZOMP3(IW+1:IE-2,:,:)  = 3./10. / (ZEPS + ZBPOS3(IW+1:IE-2,:,:))**2
243 !
244 ! ----- Negative fluxes ----- 
245 !
246 ! First negative stencil, needs indices i+1, i+2, i+3
247 ZFNEG1(IW+1:IE-2,:,:) = 1./6.   * (11.0*PSRC(IW+2:IE-1,:,:) - 7.0*PSRC(IW+3:IE,:,:) + 2.0*PSRC(IW+4:IE+1,:,:)) ! Flux
248 ZBNEG1(IW+1:IE-2,:,:) = 13./12. * (     PSRC(IW+2:IE-1,:,:) - 2.0*PSRC(IW+3:IE,:,:) +     PSRC(IW+4:IE+1,:,:))**2 & 
249                         + 1./4   * (3.0* PSRC(IW+2:IE-1,:,:) - 4.0*PSRC(IW+3:IE,:,:) +     PSRC(IW+4:IE+1,:,:))**2 ! Smoothness indicator
250 ZOMN1(IW+1:IE-2,:,:)  = 1./10. /  (ZEPS + ZBNEG1(IW+1:IE-2,:,:))**2
251 !
252 ! Second negative stencil, needs indices i, i+1, i+2
253 ZFNEG2(IW+1:IE-2,:,:) = 1./6.  * (2.0*PSRC(IW+1:IE-2,:,:) + 5.0*PSRC(IW+2:IE-1,:,:) - 1.0*PSRC(IW+3:IE,:,:))! Flux
254 ZBNEG2(IW+1:IE-2,:,:) = 13./12 * (    PSRC(IW+1:IE-2,:,:) - 2.0*PSRC(IW+2:IE-1,:,:) +     PSRC(IW+3:IE,:,:))**2 &
255                          + 1./4   * (    PSRC(IW+1:IE-2,:,:) -  PSRC(IW+3:IE,:,:))**2! Smoothness indicator
256 ZOMN2(IW+1:IE-2,:,:)  = 3./5. /  (ZEPS + ZBNEG2(IW+1:IE-2,:,:))**2! Non-normalized weight
257 !
258 ! Third negative stencil, needs indices i-1, i, i+1
259 ZFNEG3(IW+1:IE-2,:,:) = 1./6   * (-1.0*PSRC(IW:IE-3,:,:) + 5.0*PSRC(IW+1:IE-2,:,:) + 2.0*PSRC(IW+2:IE-1,:,:))! Flux
260 ZBNEG3(IW+1:IE-2,:,:) = 13./12 * ( PSRC(IW:IE-3,:,:) - 2.0*PSRC(IW+1:IE-2,:,:) +    PSRC(IW+2:IE-1,:,:))**2 &
261                           + 1./4   * (     PSRC(IW:IE-3,:,:) - 4.0*PSRC(IW+1:IE-2,:,:) + 3.0*PSRC(IW+2:IE-1,:,:))**2! Smoothness indicator
262 ZOMN3(IW+1:IE-2,:,:)  = 3./10. / (ZEPS + ZBNEG3(IW+1:IE-2,:,:))**2! Non-normalized weight
263 !
264 !
265 ! ----- Total flux -----
266 !
267 PR(IW+1:IE-2,:,:) = (ZOMP1(IW+1:IE-2,:,:)/(ZOMP1(IW+1:IE-2,:,:)+ZOMP2(IW+1:IE-2,:,:)+ZOMP3(IW+1:IE-2,:,:)) &
268                     * ZFPOS1(IW+1:IE-2,:,:) + &
269                       ZOMP2(IW+1:IE-2,:,:)/(ZOMP1(IW+1:IE-2,:,:)+ZOMP2(IW+1:IE-2,:,:)+ZOMP3(IW+1:IE-2,:,:)) &
270                     * ZFPOS2(IW+1:IE-2,:,:) + & 
271                       ZOMP3(IW+1:IE-2,:,:)/(ZOMP1(IW+1:IE-2,:,:)+ZOMP2(IW+1:IE-2,:,:)+ZOMP3(IW+1:IE-2,:,:)) &
272                     * ZFPOS3(IW+1:IE-2,:,:)) &
273                     * (0.5+SIGN(0.5,PRUCT(IW+1:IE-2,:,:))) &
274                   + (ZOMN1(IW+1:IE-2,:,:)/(ZOMN1(IW+1:IE-2,:,:)+ZOMN2(IW+1:IE-2,:,:)+ZOMN3(IW+1:IE-2,:,:)) &
275                    * ZFNEG1(IW+1:IE-2,:,:)  &
276                      + ZOMN2(IW+1:IE-2,:,:)/(ZOMN1(IW+1:IE-2,:,:)+ZOMN2(IW+1:IE-2,:,:)+ZOMN3(IW+1:IE-2,:,:)) &
277                    * ZFNEG2(IW+1:IE-2,:,:)  &
278                      + ZOMN3(IW+1:IE-2,:,:)/(ZOMN1(IW+1:IE-2,:,:)+ZOMN2(IW+1:IE-2,:,:)+ZOMN3(IW+1:IE-2,:,:)) &
279                     * ZFNEG3(IW+1:IE-2,:,:))  & 
280                     * (0.5-SIGN(0.5,PRUCT(IW+1:IE-2,:,:)))
281 !
282 !-------------------------------------------------------------------------------
283 !*       1.2.   West border
284 !               ---------------------
285 !
286 !!IF( LWEST_ll() .AND. .FALSE. ) THEN 
287 IF( LWEST_ll() ) THEN
288 !-----------------------------------------------------------------------------
289 ! West border is physical -- IW,IW-1
290 !-----------------------------------------------------------------------------
291 SELECT CASE (HLBCX(1)) ! X direction LBC type on left side
292
293 CASE ('CYCL')
294 !---------------------------------------------------------------------------
295 ! Periodic boundary condition
296 !---------------------------------------------------------------------------
297 !
298 IF( LEAST_ll() .AND. .FALSE. ) THEN! East boundary is physical (monoproc)
299 !
300 ! First positive stencil, needs indices i-2, i-1, i 
301 ZFPOS1(IW,:,:)  = 1./6. * (2.0*PSRC(IE,:,:)   - 7.0*PSRC(IW-1,:,:) + 11.0*PSRC(IW,:,:))! Flux IW
302 ZFPOS1(IW-1,:,:) = 1./6. * (2.0*PSRC(IE-1,:,:) - 7.0*PSRC(IE,:,:)   + 11.0*PSRC(IW-1,:,:))! Flux IW-1
303 ZBPOS1(IW,:,:)  = 13./12. * (PSRC(IE,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 & 
304  + 1./4    * (PSRC(IE,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2 ! Smoothness indicator IW
305 ZBPOS1(IW-1,:,:) = 13./12. * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) +     PSRC(IW-1,:,:))**2 & 
306  + 1./4    * (PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + 3.0*PSRC(IW-1,:,:))**2 ! Smoothness indicator IW-1
307 ZOMP1(IW-1:IW,:,:)  = 1./10. / (ZEPS + ZBPOS1(IW-1:IW,:,:))**2! Non-normalized weight IW,IW-1
308 !
309 ! Second positive stencil, needs indices i-1, i, i+1
310 ZFPOS2(IW,:,:)   = 1./6.* (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:))! Flux IW
311 ZFPOS2(IW-1,:,:) = 1./6.* (-1.0*PSRC(IE,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW-1
312 ZBPOS2(IW,:,:)   = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
313  + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2! Smoothness indicator IW
314 ZBPOS2(IW-1,:,:) = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IW-1,:,:) + PSRC(IW,:,:))**2 &
315  + 1./4   * (PSRC(IE,:,:) -                      PSRC(IW,:,:))**2! Smoothness indicator IW-1
316 ZOMP2(IW-1:IW,:,:)  = 3./5. / (ZEPS + ZBPOS2(IW-1:IW,:,:))**2! Non-normalized weight IW,IW-1
317 !
318 ! Third negative stencil, needs indices i-1, i, i+1
319 ZFNEG3(IW,:,:)   = 1./6 * (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:))! Flux IW
320 ZFNEG3(IW-1,:,:) = 1./6 * (-1.0*PSRC(IE,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:))! Flux IW-1
321 ZBNEG3(IW,:,:)   = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) +     PSRC(IW+1,:,:))**2 &
322    + 1./4   * (PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + 3.0*PSRC(IW+1,:,:))**2! Smoothness indicator IW
323 ZBNEG3(IW-1,:,:) = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 &
324    + 1./4   * (PSRC(IE,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2! Smoothness indicator IW-1
325 ZOMN3(IW-1:IW,:,:) = 3./10. / (ZEPS + ZBNEG3(IW-1:IW,:,:))**2! Non-normalized weight IW,IW-1
326
327 ELSEIF(IW>3) THEN! East boundary is proc border, with minimum 3 HALO points on west side
328 !
329 ! First positive stencil, needs indices i-2, i-1, i 
330 ZFPOS1(IW,:,:)   = 1./6. * (2.0*PSRC(IW-2,:,:)   - 7.0*PSRC(IW-1,:,:) + 11.0*PSRC(IW,:,:))! Flux IW
331 ZFPOS1(IW-1,:,:) = 1./6. * (2.0*PSRC(IW-3,:,:) - 7.0*PSRC(IW-2,:,:)   + 11.0*PSRC(IW-1,:,:))! Flux IW-1
332 ZBPOS1(IW,:,:)   = 13./12. * (PSRC(IW-1,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 & 
333  + 1./4    * (PSRC(IW-1,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2 ! Smoothness indicator IW
334 ZBPOS1(IW-1,:,:) = 13./12. * (PSRC(IW-3,:,:) - 2.0*PSRC(IW-2,:,:) +     PSRC(IW-1,:,:))**2 & 
335  + 1./4    * (PSRC(IW-3,:,:) - 4.0*PSRC(IW-2,:,:) + 3.0*PSRC(IW-1,:,:))**2 ! Smoothness indicator IW-1
336 ZOMP1(IW-1:IW,:,:)  = 1./10. / (ZEPS + ZBPOS1(IW-1:IW,:,:))**2! Non-normalized weight IW,IW-1
337 !
338 ! Second positive stencil, needs indices i-1, i, i+1
339 ZFPOS2(IW,:,:)   = 1./6.* (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:))! Flux IW
340 ZFPOS2(IW-1,:,:) = 1./6.* (-1.0*PSRC(IW-2,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:))! Flux IW-1
341 ZBPOS2(IW,:,:)   = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
342  + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2! Smoothness indicator IW
343 ZBPOS2(IW-1,:,:) = 13./12 * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) + PSRC(IW,:,:))**2 &
344  + 1./4   * (PSRC(IW-2,:,:) -                      PSRC(IW,:,:))**2! Smoothness indicator IW-1
345 ZOMP2(IW-1:IW,:,:)  = 3./5. / (ZEPS + ZBPOS2(IW-1:IW,:,:))**2! Non-normalized weight IW,IW-1
346 !
347 ! Third negative stencil, needs indices i-1, i, i+1
348 ZFNEG3(IW,:,:)   = 1./6 * (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:))! Flux IW
349  ZFNEG3(IW-1,:,:) = 1./6 * (-1.0*PSRC(IW-2,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW-1
350  ZBNEG3(IW,:,:)   = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) +     PSRC(IW+1,:,:))**2 &
351         + 1./4   * (PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + 3.0*PSRC(IW+1,:,:))**2 ! Smoothness indicator IW
352  ZBNEG3(IW-1,:,:) = 13./12 * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 &
353         + 1./4   * (PSRC(IW-2,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2 ! Smoothness indicator IW-1
354  ZOMN3(IW-1:IW,:,:) = 3./10. / (ZEPS + ZBNEG3(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
355 !
356  ELSE ! East boundary is proc border, with NHALO < 3 on west side
357   PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on west side'
358   CALL ABORT  
359   STOP  ' Error in advec_weno_k_3_aux.f90 '
360  ENDIF
361 !
362  ! Third positive stencil, needs indices i, i+1, i+2
363  ZFPOS3(IW,:,:)   = 1./6 * (2.0*PSRC(IW,:,:) + 5.0*PSRC(IW+1,:,:) - PSRC(IW+2,:,:)) ! Flux IW
364  ZFPOS3(IW-1,:,:) = 1./6 * (2.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:) - PSRC(IW+1,:,:)) ! Flux IW-1
365  ZBPOS3(IW,:,:)   = 13./12 * (    PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 &
366       + 1./4   * (3.0*PSRC(IW,:,:) - 4.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 ! Smoothness indicator IW
367  ZBPOS3(IW-1,:,:) = 13./12 * (    PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
368       + 1./4   * (3.0*PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 ! Smoothness indicator IW-1
369  ZOMP3(IW-1:IW,:,:)  = 3./10. / (ZEPS + ZBPOS3(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1 
370 !
371  ! First negative stencil, needs indices i+1, i+2, i+3
372  ZFNEG1(IW,:,:)   = 1./6. * (11.0*PSRC(IW+1,:,:) - 7.0*PSRC(IW+2,:,:) + 2.0*PSRC(IW+3,:,:)) ! Flux IW
373  ZFNEG1(IW-1,:,:) = 1./6. * (11.0*PSRC(IW,:,:)   - 7.0*PSRC(IW+1,:,:) + 2.0*PSRC(IW+2,:,:)) ! Flux IW-1
374  ZBNEG1(IW,:,:)   = 13./12. * (    PSRC(IW+1,:,:) - 2.0*PSRC(IW+2,:,:) + PSRC(IW+3,:,:))**2 & 
375       + 1./4    * (3.0*PSRC(IW+1,:,:) - 4.0*PSRC(IW+2,:,:) + PSRC(IW+3,:,:))**2  ! Smoothness indicator IW
376  ZBNEG1(IW-1,:,:) = 13./12. * (    PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 & 
377       + 1./4    * (3.0*PSRC(IW,:,:) - 4.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2  ! Smoothness indicator IW-1
378  ZOMN1(IW-1:IW,:,:) = 1./10. / (ZEPS + ZBNEG1(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
379 !
380  ! Second negative stencil, needs indices i, i+1, i+2
381  ZFNEG2(IW,:,:)   = 1./6. * (2.0*PSRC(IW,:,:)   + 5.0*PSRC(IW+1,:,:) - 1.0*PSRC(IW+2,:,:)) ! Flux IW
382  ZFNEG2(IW-1,:,:) = 1./6. * (2.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   - 1.0*PSRC(IW+1,:,:)) ! Flux IW-1
383  ZBNEG2(IW,:,:)   = 13./12 * (PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 &
384       + 1./4   * (PSRC(IW,:,:) -                      PSRC(IW+2,:,:))**2 ! Smoothness indicator IW
385  ZBNEG2(IW-1,:,:) = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
386       + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2 ! Smoothness indicator IW-1
387  ZOMN2(IW-1:IW,:,:) = 3./5. / (ZEPS + ZBNEG2(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
388 !
389  ! ----- Total flux -----
390
391  PR(IW-1:IW,:,:) = ( ZOMP1(IW-1:IW,:,:)/(ZOMP1(IW-1:IW,:,:)+ZOMP2(IW-1:IW,:,:)+ZOMP3(IW-1:IW,:,:)) * ZFPOS1(IW-1:IW,:,:) &
392                        + ZOMP2(IW-1:IW,:,:)/(ZOMP1(IW-1:IW,:,:)+ZOMP2(IW-1:IW,:,:)+ZOMP3(IW-1:IW,:,:)) * ZFPOS2(IW-1:IW,:,:) & 
393                        + ZOMP3(IW-1:IW,:,:)/(ZOMP1(IW-1:IW,:,:)+ZOMP2(IW-1:IW,:,:)+ZOMP3(IW-1:IW,:,:)) * ZFPOS3(IW-1:IW,:,:)) &
394                       * (0.5+SIGN(0.5,PRUCT(IW-1:IW,:,:))) &
395                     + ( ZOMN1(IW-1:IW,:,:)/(ZOMN1(IW-1:IW,:,:)+ZOMN2(IW-1:IW,:,:)+ZOMN3(IW-1:IW,:,:)) * ZFNEG1(IW-1:IW,:,:) &
396                        + ZOMN2(IW-1:IW,:,:)/(ZOMN1(IW-1:IW,:,:)+ZOMN2(IW-1:IW,:,:)+ZOMN3(IW-1:IW,:,:)) * ZFNEG2(IW-1:IW,:,:) &
397                        + ZOMN3(IW-1:IW,:,:)/(ZOMN1(IW-1:IW,:,:)+ZOMN2(IW-1:IW,:,:)+ZOMN3(IW-1:IW,:,:)) * ZFNEG3(IW-1:IW,:,:)) &
398                       * (0.5-SIGN(0.5,PRUCT(IW-1:IW,:,:)))
399 !
400 !
401  CASE ('OPEN','WALL','NEST') 
402  !---------------------------------------------------------------------------
403  ! Open, or Wall, or Nest boundary condition => WENO order reduction
404  !---------------------------------------------------------------------------
405 !
406  ! WENO scheme order 1, IW-1
407     PR(IW-1,:,:) = PSRC(IW-1,:,:) * (0.5+SIGN(0.5,PRUCT(IW-1,:,:))) + &
408                    PSRC(IW,:,:) * &
409                    (0.5-SIGN(0.5,PRUCT(IW-1,:,:)))
410 !
411 !   ! WENO scheme order 3, IW
412     ZFPOS1(IW,:,:) = 0.5 * (3.0*PSRC(IW,:,:) - PSRC(IW-1,:,:)) ! First positive flux
413     ZFPOS2(IW,:,:) = 0.5 * ( PSRC(IW,:,:) + PSRC(IW+1,:,:)) ! Second positive flux
414     ZBPOS1(IW,:,:) = (PSRC(IW,:,:)   - PSRC(IW-1,:,:))**2 ! First positive smoothness indicator
415     ZBPOS2(IW,:,:) = (PSRC(IW+1,:,:) - PSRC(IW,:,:))**2  ! Second positive smoothness indicator
416 !
417     ZFNEG1(IW,:,:) = 0.5 * (3.0*PSRC(IW+1,:,:) - PSRC(IW+2,:,:)) ! First negative flux
418     ZFNEG2(IW,:,:) = 0.5 * ( PSRC(IW,:,:)   + PSRC(IW+1,:,:)) ! Second negative flux
419     ZBNEG1(IW,:,:) = (PSRC(IW+1,:,:) - PSRC(IW+2,:,:))**2 ! First negative smoothness indicator
420     ZBNEG2(IW,:,:) = (PSRC(IW,:,:)   - PSRC(IW+1,:,:))**2 ! Second negative smoothness indicator
421 !
422     ZOMP1(IW,:,:) = 1./3. / (ZEPS + ZBPOS1(IW,:,:))**2 ! First positive non-normalized weight
423     ZOMP2(IW,:,:) = 2./3. / (ZEPS + ZBPOS2(IW,:,:))**2 ! Second positive non-normalized weight
424     ZOMN1(IW,:,:) = 1./3. / (ZEPS + ZBNEG1(IW,:,:))**2 ! First negative non-normalized weight
425     ZOMN2(IW,:,:) = 2./3. / (ZEPS + ZBNEG2(IW,:,:))**2 ! Second negative non-normalized weight
426
427     PR(IW,:,:) = (ZOMN2(IW,:,:)/(ZOMN1(IW,:,:)+ZOMN2(IW,:,:)) * ZFNEG2(IW,:,:) + &
428              (ZOMN1(IW,:,:)/(ZOMN1(IW,:,:)+ZOMN2(IW,:,:)) * ZFNEG1(IW,:,:))) &
429            *(0.5-SIGN(0.5,PRUCT(IW,:,:))) + &
430      (ZOMP2(IW,:,:)/(ZOMP1(IW,:,:)+ZOMP2(IW,:,:)) * ZFPOS2(IW,:,:) + &
431      (ZOMP1(IW,:,:)/(ZOMP1(IW,:,:)+ZOMP2(IW,:,:)) * ZFPOS1(IW,:,:))) &
432      *(0.5+SIGN(0.5,PRUCT(IW,:,:)))  ! Total flux
433
434  END SELECT ! SELECT CASE (HLBCX(1)) ! X direction LBC type on left side
435 !
436 ELSE
437  !-----------------------------------------------------------------------------
438  ! West border is proc border -- IW,IW-1
439  !-----------------------------------------------------------------------------
440 !
441  IF (NHALO<3) THEN
442  PRINT *,'ERROR : WENO5/west-int not parallelisable with NHALO < 3' 
443  CALL ABORT 
444  STOP ' Error in advec_weno_k_3_aux.f90 '
445  ELSEIF (NHALO>=3) THEN
446  !---------------------------------------------------------------------------
447  ! NHALO >3 => WENO5 for all boundary points
448  !---------------------------------------------------------------------------
449 !
450  ! ----- Positive fluxes -----
451 !
452  ! First positive stencil, needs indices i-2, i-1, i 
453  ZFPOS1(IW,:,:)   = 1./6. * (2.0*PSRC(IW-2,:,:) - 7.0*PSRC(IW-1,:,:) + 11.0*PSRC(IW,:,:)) ! Flux IW
454  ZFPOS1(IW-1,:,:) = 1./6. * (2.0*PSRC(IW-3,:,:) - 7.0*PSRC(IW-2,:,:) + 11.0*PSRC(IW-1,:,:)) ! Flux IW-1
455  ZBPOS1(IW,:,:)   = 13./12. * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 & 
456         + 1./4    * (PSRC(IW-2,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2   ! Smoothness indicator IW
457  ZBPOS1(IW-1,:,:) = 13./12. * (PSRC(IW-3,:,:) - 2.0*PSRC(IW-2,:,:) +     PSRC(IW-1,:,:))**2 & 
458         + 1./4    * (PSRC(IW-3,:,:) - 4.0*PSRC(IW-2,:,:) + 3.0*PSRC(IW-1,:,:))**2  ! Smoothness indicator IW-1
459  ZOMP1(IW-1:IW,:,:)  = 1./10. / (ZEPS + ZBPOS1(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
460 !
461  ! Second positive stencil, needs indices i-1, i, i+1
462  ZFPOS2(IW,:,:)   = 1./6.* (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IW
463  ZFPOS2(IW-1,:,:) = 1./6.* (-1.0*PSRC(IW-2,:,:) + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW-1
464  ZBPOS2(IW,:,:)   = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
465       + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2 ! Smoothness indicator IW
466  ZBPOS2(IW-1,:,:) = 13./12 * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) + PSRC(IW,:,:))**2 &
467       + 1./4   * (PSRC(IW-2,:,:) -                      PSRC(IW,:,:))**2 ! Smoothness indicator IW-1
468  ZOMP2(IW-1:IW,:,:)  = 3./5. / (ZEPS + ZBPOS2(IW-1:IW,:,:))**2  ! Non-normalized weight IW,IW-1
469
470  ! Third positive stencil, needs indices i, i+1, i+2
471  ZFPOS3(IW,:,:)   = 1./6 * (2.0*PSRC(IW,:,:) + 5.0*PSRC(IW+1,:,:) - PSRC(IW+2,:,:)) ! Flux IW
472  ZFPOS3(IW-1,:,:) = 1./6 * (2.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:) - PSRC(IW+1,:,:)) ! Flux IW-1
473  ZBPOS3(IW,:,:)   = 13./12 * (    PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 &
474       + 1./4   * (3.0*PSRC(IW,:,:) - 4.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 ! Smoothness indicator IW
475  ZBPOS3(IW-1,:,:) = 13./12 * (    PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
476       + 1./4   * (3.0*PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 ! Smoothness indicator IW-1
477  ZOMP3(IW-1:IW,:,:)  = 3./10. / (ZEPS + ZBPOS3(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
478 !
479  ! ----- Negative fluxes ----- 
480 !
481  ! First negative stencil, needs indices i+1, i+2, i+3
482  ZFNEG1(IW,:,:)   = 1./6. * (11.0*PSRC(IW+1,:,:) - 7.0*PSRC(IW+2,:,:) + 2.0*PSRC(IW+3,:,:)) ! Flux IW
483  ZFNEG1(IW-1,:,:) = 1./6. * (11.0*PSRC(IW,:,:)   - 7.0*PSRC(IW+1,:,:) + 2.0*PSRC(IW+2,:,:)) ! Flux IW-1
484  ZBNEG1(IW,:,:)   = 13./12. * (    PSRC(IW+1,:,:) - 2.0*PSRC(IW+2,:,:) + PSRC(IW+3,:,:))**2 & 
485       + 1./4    * (3.0*PSRC(IW+1,:,:) - 4.0*PSRC(IW+2,:,:) + PSRC(IW+3,:,:))**2  ! Smoothness indicator IW
486  ZBNEG1(IW-1,:,:) = 13./12. * (    PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 & 
487       + 1./4    * (3.0*PSRC(IW,:,:) - 4.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2  ! Smoothness indicator IW-1
488  ZOMN1(IW-1:IW,:,:) = 1./10. / (ZEPS + ZBNEG1(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
489 !
490  ! Second negative stencil, needs indices i, i+1, i+2
491  ZFNEG2(IW,:,:)   = 1./6. * (2.0*PSRC(IW,:,:)   + 5.0*PSRC(IW+1,:,:) - 1.0*PSRC(IW+2,:,:)) ! Flux IW
492  ZFNEG2(IW-1,:,:) = 1./6. * (2.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   - 1.0*PSRC(IW+1,:,:)) ! Flux IW-1
493  ZBNEG2(IW,:,:)   = 13./12 * (PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 &
494       + 1./4   * (PSRC(IW,:,:) -                      PSRC(IW+2,:,:))**2 ! Smoothness indicator IW
495  ZBNEG2(IW-1,:,:) = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
496       + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2 ! Smoothness indicator IW-1
497  ZOMN2(IW-1:IW,:,:) = 3./5. / (ZEPS + ZBNEG2(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
498 !
499  ! Third negative stencil, needs indices i-1, i, i+1
500  ZFNEG3(IW,:,:)   = 1./6 * (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IW
501  ZFNEG3(IW-1,:,:) = 1./6 * (-1.0*PSRC(IW-2,:,:) + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW-1
502  ZBNEG3(IW,:,:)   = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) +     PSRC(IW+1,:,:))**2 &
503         + 1./4   * (PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + 3.0*PSRC(IW+1,:,:))**2 ! Smoothness indicator IW
504  ZBNEG3(IW-1,:,:) = 13./12 * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 &
505         + 1./4   * (PSRC(IW-2,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2 ! Smoothness indicator IW-1
506  ZOMN3(IW-1:IW,:,:) = 3./10. / (ZEPS + ZBNEG3(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
507 !
508  ! ----- Total flux -----
509
510  PR(IW-1:IW,:,:) = ( ZOMP1(IW-1:IW,:,:)/(ZOMP1(IW-1:IW,:,:)+ZOMP2(IW-1:IW,:,:)+ZOMP3(IW-1:IW,:,:)) * ZFPOS1(IW-1:IW,:,:) &
511                        + ZOMP2(IW-1:IW,:,:)/(ZOMP1(IW-1:IW,:,:)+ZOMP2(IW-1:IW,:,:)+ZOMP3(IW-1:IW,:,:)) * ZFPOS2(IW-1:IW,:,:) & 
512                        + ZOMP3(IW-1:IW,:,:)/(ZOMP1(IW-1:IW,:,:)+ZOMP2(IW-1:IW,:,:)+ZOMP3(IW-1:IW,:,:)) * ZFPOS3(IW-1:IW,:,:)) &
513                       * (0.5+SIGN(0.5,PRUCT(IW-1:IW,:,:))) &
514                     + ( ZOMN1(IW-1:IW,:,:)/(ZOMN1(IW-1:IW,:,:)+ZOMN2(IW-1:IW,:,:)+ZOMN3(IW-1:IW,:,:)) * ZFNEG1(IW-1:IW,:,:) &
515                        + ZOMN2(IW-1:IW,:,:)/(ZOMN1(IW-1:IW,:,:)+ZOMN2(IW-1:IW,:,:)+ZOMN3(IW-1:IW,:,:)) * ZFNEG2(IW-1:IW,:,:) &
516                        + ZOMN3(IW-1:IW,:,:)/(ZOMN1(IW-1:IW,:,:)+ZOMN2(IW-1:IW,:,:)+ZOMN3(IW-1:IW,:,:)) * ZFNEG3(IW-1:IW,:,:)) &
517                       * (0.5-SIGN(0.5,PRUCT(IW-1:IW,:,:)))
518 !
519  END IF ! NHALO
520 !
521 END IF ! IF(LWEST_ll()) 
522 !
523 !-------------------------------------------------------------------------------
524 !*       1.3.   East border
525 !               ---------------------
526 !
527 !! IF( LEAST_ll() .AND. .FALSE. ) THEN 
528 IF( LEAST_ll() ) THEN 
529
530  !-----------------------------------------------------------------------------
531  ! East border is physical -- IE-1,IE
532  !-----------------------------------------------------------------------------
533  SELECT CASE (HLBCX(2)) ! X direction LBC type on right side
534
535  CASE ('CYCL')
536  !---------------------------------------------------------------------------
537  ! Periodic boundary condition
538  !---------------------------------------------------------------------------
539
540  IF (LWEST_ll() .AND. .FALSE. ) THEN  ! West boundary is physical (monoproc)
541
542  ! Third positive stencil, needs indices i, i+1, i+2
543  ZFPOS3(IE-1,:,:) = 1./6 * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:) - PSRC(IE+1,:,:)) ! Flux IE-1
544  ZFPOS3(IE,:,:)   = 1./6 * (2.0*PSRC(IE,:,:) + 5.0*PSRC(IE+1,:,:) - PSRC(IW,:,:)) ! Flux IE
545  ZBPOS3(IE-1,:,:) = 13./12 * (    PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
546       + 1./4   * (3.0*PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 ! Smoothness indicator IE-1
547  ZBPOS3(IE,:,:)   = 13./12 * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2 &
548       + 1./4   * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2  ! Smoothness indicator IE
549  ZOMP3(IE-1:IE,:,:)  = 3./10. / (ZEPS + ZBPOS3(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE 
550 !
551  ! First negative stencil, needs indices i+1, i+2, i+3
552  ZFNEG1(IE-1,:,:) = 1./6. * (11.0*PSRC(IE,:,:)   - 7.0*PSRC(IE+1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IE-1
553  ZFNEG1(IE,:,:)   = 1./6. * (11.0*PSRC(IE+1,:,:) - 7.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IE
554  ZBNEG1(IE-1,:,:) = 13./12. * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2 & 
555       + 1./4    * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2  ! Smoothness indicator IE-1
556  ZBNEG1(IE,:,:)   = 13./12. * (    PSRC(IE+1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 & 
557       + 1./4    * (3.0*PSRC(IE+1,:,:) - 4.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2  ! Smoothness indicator IE
558  ZOMN1(IE-1:IE,:,:) = 1./10. / (ZEPS + ZBNEG1(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
559 !
560  ! Second negative stencil, needs indices i, i+1, i+2
561  ZFNEG2(IE-1,:,:) = 1./6. * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   - 1.0*PSRC(IE+1,:,:)) ! Flux IE-1
562  ZFNEG2(IE,:,:)   = 1./6. * (2.0*PSRC(IE,:,:)   + 5.0*PSRC(IE+1,:,:) - 1.0*PSRC(IW,:,:)) ! Flux IE
563  ZBNEG2(IE-1,:,:)  = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
564       + 1./4   * (PSRC(IE-1,:,:) -                    PSRC(IE+1,:,:))**2 ! Smoothness indicator IE-1
565  ZBNEG2(IE,:,:)   = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2 &
566       + 1./4   * (PSRC(IE,:,:) -                      PSRC(IW,:,:))**2  ! Smoothness indicator IE
567  ZOMN2(IE-1:IE,:,:) = 3./5. / (ZEPS + ZBNEG2(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
568 !
569  ELSEIF(IE<=SIZE(PSRC,1)-3) THEN ! West boundary is proc border, with minimum 3 HALO points on east side
570 !
571  ! Third positive stencil, needs indices i, i+1, i+2
572  ZFPOS3(IE-1,:,:) = 1./6 * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:) - PSRC(IE+1,:,:)) ! Flux IE-1
573  ZFPOS3(IE,:,:)   = 1./6 * (2.0*PSRC(IE,:,:) + 5.0*PSRC(IE+1,:,:) - PSRC(IE+2,:,:)) ! Flux IE
574  ZBPOS3(IE-1,:,:) = 13./12 * (    PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
575       + 1./4   * (3.0*PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 ! Smoothness indicator IE-1
576  ZBPOS3(IE,:,:)   = 13./12 * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 &
577       + 1./4   * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2  ! Smoothness indicator IE
578  ZOMP3(IE-1:IE,:,:)  = 3./10. / (ZEPS + ZBPOS3(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
579 !
580  ! First negative stencil, needs indices i+1, i+2, i+3
581  ZFNEG1(IE-1,:,:) = 1./6. * (11.0*PSRC(IE,:,:)   - 7.0*PSRC(IE+1,:,:) + 2.0*PSRC(IE+2,:,:)) ! Flux IE-1
582  ZFNEG1(IE,:,:)   = 1./6. * (11.0*PSRC(IE+1,:,:) - 7.0*PSRC(IE+2,:,:)   + 2.0*PSRC(IE+3,:,:)) ! Flux IE
583  ZBNEG1(IE-1,:,:) = 13./12. * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 & 
584       + 1./4    * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2  ! Smoothness indicator IE-1
585  ZBNEG1(IE,:,:)   = 13./12. * (    PSRC(IE+1,:,:) - 2.0*PSRC(IE+2,:,:) + PSRC(IE+3,:,:))**2 & 
586       + 1./4    * (3.0*PSRC(IE+1,:,:) - 4.0*PSRC(IE+2,:,:) + PSRC(IE+3,:,:))**2  ! Smoothness indicator IE
587  ZOMN1(IE-1:IE,:,:) = 1./10. / (ZEPS + ZBNEG1(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
588 !
589  ! Second negative stencil, needs indices i, i+1, i+2
590  ZFNEG2(IE-1,:,:) = 1./6. * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   - 1.0*PSRC(IE+1,:,:)) ! Flux IE-1
591  ZFNEG2(IE,:,:)   = 1./6. * (2.0*PSRC(IE,:,:)   + 5.0*PSRC(IE+1,:,:) - 1.0*PSRC(IE+2,:,:)) ! Flux IE
592  ZBNEG2(IE-1,:,:)  = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
593       + 1./4   * (PSRC(IE-1,:,:) -                    PSRC(IE+1,:,:))**2 ! Smoothness indicator IE-1
594  ZBNEG2(IE,:,:)   = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 &
595       + 1./4   * (PSRC(IE,:,:) -                      PSRC(IE+2,:,:))**2  ! Smoothness indicator IE
596  ZOMN2(IE-1:IE,:,:) = 3./5. / (ZEPS + ZBNEG2(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
597 !
598  ELSE ! West boundary is proc border, with NHALO < 3 on east side
599   PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on east side'
600   CALL ABORT
601   STOP  ' Error in advec_weno_k_3_aux.f90 '
602  ENDIF
603 !
604  ! First positive stencil, needs indices i-2, i-1, i 
605  ZFPOS1(IE-1,:,:) = 1./6. * (2.0*PSRC(IE-3,:,:) - 7.0*PSRC(IE-2,:,:) + 11.0*PSRC(IE-1,:,:)) ! Flux IE-1
606  ZFPOS1(IE,:,:)   = 1./6. * (2.0*PSRC(IE-2,:,:) - 7.0*PSRC(IE-1,:,:) + 11.0*PSRC(IE,:,:)) ! Flux IE
607  ZBPOS1(IE-1,:,:) = 13./12. * (PSRC(IE-3,:,:) - 2.0*PSRC(IE-2,:,:) +     PSRC(IE-1,:,:))**2 & 
608         + 1./4    * (PSRC(IE-3,:,:) - 4.0*PSRC(IE-2,:,:) + 3.0*PSRC(IE-1,:,:))**2  ! Smoothness indicator IE-1
609  ZBPOS1(IE,:,:)   = 13./12. * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) +     PSRC(IE,:,:))**2 & 
610         + 1./4    * (PSRC(IE-2,:,:) - 4.0*PSRC(IE-1,:,:) + 3.0*PSRC(IE,:,:))**2  ! Smoothness indicator IE
611  ZOMP1(IE-1:IE,:,:)  = 1./10. / (ZEPS + ZBPOS1(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
612 !
613  ! Second positive stencil, needs indices i-1, i, i+1
614  ZFPOS2(IE-1,:,:) = 1./6. * (-1.0*PSRC(IE-2,:,:) + 5.0*PSRC(IE-1,:,:) + 2.0*PSRC(IE,:,:)) ! Flux IE-1
615  ZFPOS2(IE,:,:)   = 1./6. * (-1.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   + 2.0*PSRC(IE+1,:,:)) ! Flux IE
616  ZBPOS2(IE-1,:,:) = 13./12 * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) + PSRC(IE,:,:))**2 &
617       + 1./4   * (PSRC(IE-2,:,:) -                      PSRC(IE,:,:))**2 ! Smoothness indicator IE-1
618  ZBPOS2(IE,:,:)   = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
619       + 1./4   * (PSRC(IE-1,:,:) -                   PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
620  ZOMP2(IE-1:IE,:,:)  = 3./5. / (ZEPS + ZBPOS2(IE-1:IE,:,:))**2  ! Non-normalized weight IE-1,IE
621
622  ! Third negative stencil, needs indices i-1, i, i+1
623  ZFNEG3(IE-1,:,:) = 1./6 * (-1.0*PSRC(IE-2,:,:) + 5.0*PSRC(IE-1,:,:) + 2.0*PSRC(IE,:,:)) ! Flux IE-1
624  ZFNEG3(IE,:,:)   = 1./6 * (-1.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   + 2.0*PSRC(IE+1,:,:)) ! Flux IE
625  ZBNEG3(IE-1,:,:) = 13./12 * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) +     PSRC(IE,:,:))**2 &
626         + 1./4   * (PSRC(IE-2,:,:) - 4.0*PSRC(IE-1,:,:) + 3.0*PSRC(IE,:,:))**2 ! Smoothness indicator IE-1
627  ZBNEG3(IE,:,:)   = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) +     PSRC(IE+1,:,:))**2 &
628         + 1./4   * (PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + 3.0*PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
629  ZOMN3(IE-1:IE,:,:) = 3./10. / (ZEPS + ZBNEG3(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
630 !
631  ! ----- Total flux -----
632
633  PR(IE-1:IE,:,:) = ( ZOMP1(IE-1:IE,:,:)/(ZOMP1(IE-1:IE,:,:)+ZOMP2(IE-1:IE,:,:)+ZOMP3(IE-1:IE,:,:)) * ZFPOS1(IE-1:IE,:,:) &
634                        + ZOMP2(IE-1:IE,:,:)/(ZOMP1(IE-1:IE,:,:)+ZOMP2(IE-1:IE,:,:)+ZOMP3(IE-1:IE,:,:)) * ZFPOS2(IE-1:IE,:,:) & 
635                        + ZOMP3(IE-1:IE,:,:)/(ZOMP1(IE-1:IE,:,:)+ZOMP2(IE-1:IE,:,:)+ZOMP3(IE-1:IE,:,:)) * ZFPOS3(IE-1:IE,:,:)) &
636                       * (0.5+SIGN(0.5,PRUCT(IE-1:IE,:,:))) &
637                     + ( ZOMN1(IE-1:IE,:,:)/(ZOMN1(IE-1:IE,:,:)+ZOMN2(IE-1:IE,:,:)+ZOMN3(IE-1:IE,:,:)) * ZFNEG1(IE-1:IE,:,:) &
638                        + ZOMN2(IE-1:IE,:,:)/(ZOMN1(IE-1:IE,:,:)+ZOMN2(IE-1:IE,:,:)+ZOMN3(IE-1:IE,:,:)) * ZFNEG2(IE-1:IE,:,:) &
639                        + ZOMN3(IE-1:IE,:,:)/(ZOMN1(IE-1:IE,:,:)+ZOMN2(IE-1:IE,:,:)+ZOMN3(IE-1:IE,:,:)) * ZFNEG3(IE-1:IE,:,:)) &
640                       * (0.5-SIGN(0.5,PRUCT(IE-1:IE,:,:)))
641 !
642 !
643  CASE ('OPEN','WALL','NEST') 
644  !---------------------------------------------------------------------------
645  ! Open, or Wall, or Nest boundary condition => WENO order reduction
646  !---------------------------------------------------------------------------
647 !
648  ! WENO scheme order 1, IE
649     PR(IE,:,:) = PSRC(IE,:,:) * (0.5+SIGN(0.5,PRUCT(IE,:,:))) + &
650                  PSRC(IE+1,:,:) * &
651                  (0.5-SIGN(0.5,PRUCT(IE,:,:)))
652 !
653 !   ! WENO scheme order 3, IE-1
654     ZFPOS1(IE-1,:,:) = 0.5 * (3.0*PSRC(IE-1,:,:) - PSRC(IE-2,:,:)) ! First positive flux
655     ZFPOS2(IE-1,:,:) = 0.5 * ( PSRC(IE-1,:,:) + PSRC(IE,:,:)) ! Second positive flux
656     ZBPOS1(IE-1,:,:) = (PSRC(IE-1,:,:) - PSRC(IE-2,:,:))**2 ! First positive smoothness indicator
657     ZBPOS2(IE-1,:,:) = (PSRC(IE,:,:)   - PSRC(IE-1,:,:))**2 ! Second positive smoothness indicator
658 !
659     ZFNEG1(IE-1,:,:) = 0.5 * (3.0*PSRC(IE,:,:)   - PSRC(IE+1,:,:)) ! First negative flux
660     ZFNEG2(IE-1,:,:) = 0.5 * ( PSRC(IE-1,:,:) + PSRC(IE,:,:)) ! Second negative flux
661     ZBNEG1(IE-1,:,:) = (PSRC(IE,:,:)   - PSRC(IE+1,:,:))**2 ! First negative smoothness indicator
662     ZBNEG2(IE-1,:,:) = (PSRC(IE-1,:,:) - PSRC(IE,:,:))**2  ! Second negative smoothness indicator
663 !
664     ZOMP1(IE-1,:,:) = 1./3. / (ZEPS + ZBPOS1(IE-1,:,:))**2 ! First positive non-normalized weight
665     ZOMP2(IE-1,:,:) = 2./3. / (ZEPS + ZBPOS2(IE-1,:,:))**2 ! Second positive non-normalized weight
666     ZOMN1(IE-1,:,:) = 1./3. / (ZEPS + ZBNEG1(IE-1,:,:))**2 ! First negative non-normalized weight
667     ZOMN2(IE-1,:,:) = 2./3. / (ZEPS + ZBNEG2(IE-1,:,:))**2 ! Second negative non-normalized weight
668
669     PR(IE-1,:,:) = (ZOMN2(IE-1,:,:)/(ZOMN1(IE-1,:,:)+ZOMN2(IE-1,:,:))*ZFNEG2(IE-1,:,:) + &
670       (ZOMN1(IE-1,:,:)/(ZOMN1(IE-1,:,:)+ZOMN2(IE-1,:,:))*ZFNEG1(IE-1,:,:))) &
671       *(0.5-SIGN(0.5,PRUCT(IE-1,:,:))) + &
672                  (ZOMP2(IE-1,:,:)/(ZOMP1(IE-1,:,:)+ZOMP2(IE-1,:,:))*ZFPOS2(IE-1,:,:) + &
673                    (ZOMP1(IE-1,:,:)/(ZOMP1(IE-1,:,:)+ZOMP2(IE-1,:,:))*ZFPOS1(IE-1,:,:))) &
674       * (0.5+SIGN(0.5,PRUCT(IE-1,:,:)))  ! Total flux
675
676  END SELECT ! SELECT CASE (HLBCX(2)) ! X direction LBC type on right side
677 !
678 ELSE
679  !-----------------------------------------------------------------------------
680  ! East border is proc border -- IE-1,IE
681  !-----------------------------------------------------------------------------
682 !
683  IF (NHALO<3) THEN
684  PRINT *,'ERROR : WENO5/east-int not parallelisable with NHALO < 3' 
685  CALL ABORT
686  STOP  ' Error in advec_weno_k_3_aux.f90 '
687  ELSEIF (NHALO>=3) THEN
688  !---------------------------------------------------------------------------
689  ! NHALO >= 3 => WENO5 for all boundary points
690  !---------------------------------------------------------------------------
691
692  ! ----- Positive fluxes -----
693 !
694  ! First positive stencil, needs indices i-2, i-1, i 
695  ZFPOS1(IE-1,:,:) = 1./6. * (2.0*PSRC(IE-3,:,:) - 7.0*PSRC(IE-2,:,:) + 11.0*PSRC(IE-1,:,:)) ! Flux IE-1
696  ZFPOS1(IE,:,:)   = 1./6. * (2.0*PSRC(IE-2,:,:) - 7.0*PSRC(IE-1,:,:) + 11.0*PSRC(IE,:,:)) ! Flux IE
697  ZBPOS1(IE-1,:,:) = 13./12. * (PSRC(IE-3,:,:) - 2.0*PSRC(IE-2,:,:) +     PSRC(IE-1,:,:))**2 & 
698         + 1./4    * (PSRC(IE-3,:,:) - 4.0*PSRC(IE-2,:,:) + 3.0*PSRC(IE-1,:,:))**2  ! Smoothness indicator IE-1
699  ZBPOS1(IE,:,:)   = 13./12. * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) +     PSRC(IE,:,:))**2 & 
700         + 1./4    * (PSRC(IE-2,:,:) - 4.0*PSRC(IE-1,:,:) + 3.0*PSRC(IE,:,:))**2  ! Smoothness indicator IE
701  ZOMP1(IE-1:IE,:,:)  = 1./10. / (ZEPS + ZBPOS1(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
702 !
703  ! Second positive stencil, needs indices i-1, i, i+1
704  ZFPOS2(IE-1,:,:) = 1./6. * (-1.0*PSRC(IE-2,:,:) + 5.0*PSRC(IE-1,:,:) + 2.0*PSRC(IE,:,:)) ! Flux IE-1
705  ZFPOS2(IE,:,:)   = 1./6. * (-1.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   + 2.0*PSRC(IE+1,:,:)) ! Flux IE
706  ZBPOS2(IE-1,:,:) = 13./12 * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) + PSRC(IE,:,:))**2 &
707       + 1./4   * (PSRC(IE-2,:,:) -                      PSRC(IE,:,:))**2 ! Smoothness indicator IE-1
708  ZBPOS2(IE,:,:)   = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
709       + 1./4   * (PSRC(IE-1,:,:) -                   PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
710  ZOMP2(IE-1:IE,:,:)  = 3./5. / (ZEPS + ZBPOS2(IE-1:IE,:,:))**2  ! Non-normalized weight IE-1,IE
711
712  ! Third positive stencil, needs indices i, i+1, i+2
713  ZFPOS3(IE-1,:,:) = 1./6 * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:) - PSRC(IE+1,:,:)) ! Flux IE-1
714  ZFPOS3(IE,:,:)   = 1./6 * (2.0*PSRC(IE,:,:) + 5.0*PSRC(IE+1,:,:) - PSRC(IE+2,:,:)) ! Flux IE
715  ZBPOS3(IE-1,:,:) = 13./12 * (    PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
716       + 1./4   * (3.0*PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 ! Smoothness indicator IE-1
717  ZBPOS3(IE,:,:)   = 13./12 * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 &
718       + 1./4   * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2  ! Smoothness indicator IE
719  ZOMP3(IE-1:IE,:,:)  = 3./10. / (ZEPS + ZBPOS3(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
720 !
721  ! ----- Negative fluxes ----- 
722 !
723  ! First negative stencil, needs indices i+1, i+2, i+3
724  ZFNEG1(IE-1,:,:) = 1./6. * (11.0*PSRC(IE,:,:)   - 7.0*PSRC(IE+1,:,:) + 2.0*PSRC(IE+2,:,:)) ! Flux IE-1
725  ZFNEG1(IE,:,:)   = 1./6. * (11.0*PSRC(IE+1,:,:) - 7.0*PSRC(IE+2,:,:) + 2.0*PSRC(IE+3,:,:)) ! Flux IE
726  ZBNEG1(IE-1,:,:) = 13./12. * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 & 
727       + 1./4    * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2  ! Smoothness indicator IE-1
728  ZBNEG1(IE,:,:)   = 13./12. * (    PSRC(IE+1,:,:) - 2.0*PSRC(IE+2,:,:) + PSRC(IE+3,:,:))**2 & 
729       + 1./4    * (3.0*PSRC(IE+1,:,:) - 4.0*PSRC(IE+2,:,:) + PSRC(IE+3,:,:))**2  ! Smoothness indicator IE
730  ZOMN1(IE-1:IE,:,:) = 1./10. / (ZEPS + ZBNEG1(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
731 !
732  ! Second negative stencil, needs indices i, i+1, i+2
733  ZFNEG2(IE-1,:,:) = 1./6. * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   - 1.0*PSRC(IE+1,:,:)) ! Flux IE-1
734  ZFNEG2(IE,:,:)   = 1./6. * (2.0*PSRC(IE,:,:)   + 5.0*PSRC(IE+1,:,:) - 1.0*PSRC(IE+2,:,:)) ! Flux IE
735  ZBNEG2(IE-1,:,:)  = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
736       + 1./4   * (PSRC(IE-1,:,:) -                    PSRC(IE+1,:,:))**2 ! Smoothness indicator IE-1
737  ZBNEG2(IE,:,:)   = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 &
738       + 1./4   * (PSRC(IE,:,:) -                      PSRC(IE+2,:,:))**2 ! Smoothness indicator IE
739  ZOMN2(IE-1:IE,:,:) = 3./5. / (ZEPS + ZBNEG2(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
740 !
741  ! Third negative stencil, needs indices i-1, i, i+1
742  ZFNEG3(IE-1,:,:) = 1./6 * (-1.0*PSRC(IE-2,:,:) + 5.0*PSRC(IE-1,:,:) + 2.0*PSRC(IE,:,:)) ! Flux IE-1
743  ZFNEG3(IE,:,:)   = 1./6 * (-1.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   + 2.0*PSRC(IE+1,:,:)) ! Flux IE
744  ZBNEG3(IE-1,:,:) = 13./12 * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) +     PSRC(IE,:,:))**2 &
745         + 1./4   * (PSRC(IE-2,:,:) - 4.0*PSRC(IE-1,:,:) + 3.0*PSRC(IE,:,:))**2 ! Smoothness indicator IE-1
746  ZBNEG3(IE,:,:)   = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) +     PSRC(IE+1,:,:))**2 &
747         + 1./4   * (PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + 3.0*PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
748  ZOMN3(IE-1:IE,:,:) = 3./10. / (ZEPS + ZBNEG3(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
749 !
750  ! ----- Total flux -----
751
752  PR(IE-1:IE,:,:) = ( ZOMP1(IE-1:IE,:,:)/(ZOMP1(IE-1:IE,:,:)+ZOMP2(IE-1:IE,:,:)+ZOMP3(IE-1:IE,:,:)) * ZFPOS1(IE-1:IE,:,:) &
753                        + ZOMP2(IE-1:IE,:,:)/(ZOMP1(IE-1:IE,:,:)+ZOMP2(IE-1:IE,:,:)+ZOMP3(IE-1:IE,:,:)) * ZFPOS2(IE-1:IE,:,:) & 
754                        + ZOMP3(IE-1:IE,:,:)/(ZOMP1(IE-1:IE,:,:)+ZOMP2(IE-1:IE,:,:)+ZOMP3(IE-1:IE,:,:)) * ZFPOS3(IE-1:IE,:,:)) &
755                       * (0.5+SIGN(0.5,PRUCT(IE-1:IE,:,:))) &
756                     + ( ZOMN1(IE-1:IE,:,:)/(ZOMN1(IE-1:IE,:,:)+ZOMN2(IE-1:IE,:,:)+ZOMN3(IE-1:IE,:,:)) * ZFNEG1(IE-1:IE,:,:) &
757                        + ZOMN2(IE-1:IE,:,:)/(ZOMN1(IE-1:IE,:,:)+ZOMN2(IE-1:IE,:,:)+ZOMN3(IE-1:IE,:,:)) * ZFNEG2(IE-1:IE,:,:) &
758                        + ZOMN3(IE-1:IE,:,:)/(ZOMN1(IE-1:IE,:,:)+ZOMN2(IE-1:IE,:,:)+ZOMN3(IE-1:IE,:,:)) * ZFNEG3(IE-1:IE,:,:)) &
759                       * (0.5-SIGN(0.5,PRUCT(IE-1:IE,:,:)))
760
761  END IF ! NHALO
762 !
763 END IF ! IF(LWEST_ll()) 
764 !-------------------------------------------------------------------------------
765 !
766 PR = PR * PRUCT ! Add contravariant flux
767 !
768 END SUBROUTINE ADVEC_WENO_K_3_UX
769 !
770 !------------------------------------------------------------------------------
771 !
772 !     ############################################################
773       SUBROUTINE ADVEC_WENO_K_3_MX(HLBCX,PSRC, PRUCT, PR)
774 !     ############################################################
775 !!
776 !!**** Computes PRUCT * PWT (or PRUCT * PVT). Upstream fluxes of W (or V)
777 !!     variables in X direction.  
778 !!     Input PWT is on W Grid 'ie' (i,j,k) based on WGRID reference
779 !!     Output PR is on mass Grid 'ie' (i-1/2,j,k) based on WGRID reference  
780 !!
781 !!    AUTHOR
782 !!    ------
783 !!    F. Visentin   *CNRS/LA*                
784 !!
785 !!    MODIFICATIONS
786 !!    -------------
787 !! T. Lunet 02/10/2014:  Correction of periodic boudary conditions
788 !!       Change of structure in order to adapt WENO to NHALOK
789 !!       Suppression of second layer HALO pointers
790 !!       Complete code documentation
791 !!
792 !------------------------------------------------------------------------------
793 !
794 USE MODE_ll
795 USE MODD_LUNIT
796 USE MODD_CONF
797 !
798 IMPLICIT NONE
799 !
800 !*       0.1   Declarations of dummy arguments :
801 !
802 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
803 !
804 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on U grid at t
805 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRUCT ! contrav. comp. on MASS GRID
806 !
807 ! output source term
808 !
809 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
810 !
811 !*       0.2   Declarations of local variables :
812 !
813 INTEGER :: IIB,IJB    ! Begining useful area in x,y,z directions
814 INTEGER :: IIE,IJE    ! End useful area in x,y,z directions
815 INTEGER::  IW,IE   ! Coordinate of third order diffusion area
816 !
817 INTEGER:: ILUOUT,IRESP   ! for prints
818 !
819 ! intermediate reconstruction fluxes for positive wind case
820 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFPOS1, ZFPOS2, ZFPOS3
821 !
822 ! intermediate reconstruction fluxes for negative wind case
823 !
824 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFNEG1, ZFNEG2, ZFNEG3
825 !
826 ! smoothness indicators for positive wind case
827 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBPOS1, ZBPOS2, ZBPOS3
828 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBNEG1, ZBNEG2, ZBNEG3
829 !
830 ! WENO weights
831 !
832 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: ZOMP1, ZOMP2, ZOMP3
833 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: ZOMN1, ZOMN2, ZOMN3
834 !
835 ! EPSILON for weno weights calculation
836
837 REAL, PARAMETER :: ZEPS = 1.0E-15
838 !
839 !-------------------------------------------------------------------------------
840 !
841 !*       0.3.     COMPUTES THE DOMAIN DIMENSIONS
842 !                 ------------------------------
843 !
844 CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
845 !
846 !-----------------------------------------------------------------------------
847 !
848 !*       0.4.   INITIALIZE THE FIELD 
849 !               ---------------------
850 !
851 PR(:,:,:) = 0.0
852 !
853 ZFPOS1 = 0.0
854 ZFPOS2 = 0.0
855 ZFPOS3 = 0.0
856 ZFNEG1 = 0.0
857 ZFNEG2 = 0.0
858 ZFNEG3 = 0.0
859 ZBPOS1 = 0.0
860 ZBPOS2 = 0.0
861 ZBPOS3 = 0.0
862 ZBNEG1 = 0.0
863 ZBNEG2 = 0.0
864 ZBNEG3 = 0.0
865 ZOMP1  = 0.0
866 ZOMP2  = 0.0
867 ZOMP3  = 0.0
868 ZOMN1  = 0.0
869 ZOMN2  = 0.0
870 ZOMN3  = 0.0 
871 !
872 !-------------------------------------------------------------------------------
873 !*       1.1.   Interior Fluxes 
874 !              ---------------------
875 IW=IIB
876 IE=IIE
877 !
878 !-------------------------------------------------------------------------------
879 ! Flux calculation in the physical domain far enough from the boundary 
880 ! WENO scheme order 5, IW+2 -> IE-1
881 ! Computation at the mass point on Ugrid u(i-1/2,j,k)
882 !-------------------------------------------------------------------------------
883 !
884 ! ----- Positive fluxes -----
885 !
886 ! First positive stencil, needs indices i-3, i-2, i-1
887 ZFPOS1(IW+2:IE-1,:,:) = 1./6.   * (2.0*PSRC(IW-1:IE-4,:,:) - 7.0*PSRC(IW:IE-3,:,:) + 11.0*PSRC(IW+1:IE-2,:,:))   ! Flux
888 ZBPOS1(IW+2:IE-1,:,:) = 13./12. * (    PSRC(IW-1:IE-4,:,:) - 2.0*PSRC(IW:IE-3,:,:) +      PSRC(IW+1:IE-2,:,:))**2 & 
889       + 1./4    * (    PSRC(IW-1:IE-4,:,:) - 4.0*PSRC(IW:IE-3,:,:) + 3.0* PSRC(IW+1:IE-2,:,:))**2  ! Smoothness indicator
890 ZOMP1(IW+2:IE-1,:,:)  = 1./10. /  (ZEPS + ZBPOS1(IW+2:IE-1,:,:))**2             ! Non-normalized weight
891 !
892 ! Second positive stencil, needs indices i-2, i-1, i
893 ZFPOS2(IW+2:IE-1,:,:) = 1./6.  * (-1.0*PSRC(IW:IE-3,:,:) + 5.0*PSRC(IW+1:IE-2,:,:) + 2.0*PSRC(IW+2:IE-1,:,:))  ! Flux
894 ZBPOS2(IW+2:IE-1,:,:) = 13./12 * (     PSRC(IW:IE-3,:,:) - 2.0*PSRC(IW+1:IE-2,:,:) +     PSRC(IW+2:IE-1,:,:))**2 &
895       + 1./4   * (     PSRC(IW:IE-3,:,:) -                               PSRC(IW+2:IE-1,:,:))**2 ! Smoothness indicator
896 ZOMP2(IW+2:IE-1,:,:)  = 3./5. /  (ZEPS + ZBPOS2(IW+2:IE-1,:,:))**2             ! Non-normalized weight
897 !
898 ! Third positive stencil, needs indices i-1, i, i+1
899 ZFPOS3(IW+2:IE-1,:,:) = 1./6   * (2.0*PSRC(IW+1:IE-2,:,:) + 5.0*PSRC(IW+2:IE-1,:,:) - PSRC(IW+3:IE,:,:))  ! Flux
900 ZBPOS3(IW+2:IE-1,:,:) = 13./12 * ( PSRC(IW+1:IE-2,:,:) - 2.0*PSRC(IW+2:IE-1,:,:) + PSRC(IW+3:IE,:,:))**2 &
901       + 1./4   * (3.0*PSRC(IW+1:IE-2,:,:) - 4.0*PSRC(IW+2:IE-1,:,:) + PSRC(IW+3:IE,:,:))**2 ! Smoothness indicator
902 ZOMP3(IW+2:IE-1,:,:)  = 3./10. / (ZEPS + ZBPOS3(IW+2:IE-1,:,:))**2           ! Non-normalized weight
903 !
904 ! ----- Negative fluxes ----- 
905 !
906 ! First negative stencil, needs indices i, i+1, i+2
907 ZFNEG1(IW+2:IE-1,:,:) = 1./6.   * (11.0*PSRC(IW+2:IE-1,:,:) - 7.0*PSRC(IW+3:IE,:,:) + 2.0*PSRC(IW+4:IE+1,:,:))   ! Flux
908 ZBNEG1(IW+2:IE-1,:,:) = 13./12. * (     PSRC(IW+2:IE-1,:,:) - 2.0*PSRC(IW+3:IE,:,:) +     PSRC(IW+4:IE+1,:,:))**2 & 
909       + 1./4    * (3.0* PSRC(IW+2:IE-1,:,:) - 4.0*PSRC(IW+3:IE,:,:) +     PSRC(IW+4:IE+1,:,:))**2  ! Smoothness indicator
910 ZOMN1(IW+2:IE-1,:,:)  = 1./10. /  (ZEPS + ZBNEG1(IW+2:IE-1,:,:))**2             ! Non-normalized weight
911 !
912 ! Second negative stencil, needs indices i-1, i, i+1
913 ZFNEG2(IW+2:IE-1,:,:) = 1./6.  * (2.0*PSRC(IW+1:IE-2,:,:) + 5.0*PSRC(IW+2:IE-1,:,:) - 1.0*PSRC(IW+3:IE,:,:))  ! Flux
914 ZBNEG2(IW+2:IE-1,:,:) = 13./12 * (    PSRC(IW+1:IE-2,:,:) - 2.0*PSRC(IW+2:IE-1,:,:) +     PSRC(IW+3:IE,:,:))**2 &
915       + 1./4   * (    PSRC(IW+1:IE-2,:,:) -                               PSRC(IW+3:IE,:,:))**2 ! Smoothness indicator
916 ZOMN2(IW+2:IE-1,:,:)  = 3./5. /  (ZEPS + ZBNEG2(IW+2:IE-1,:,:))**2            ! Non-normalized weight
917 !
918 ! Third negative stencil, needs indices i-2, i-1, i
919 ZFNEG3(IW+2:IE-1,:,:) = 1./6   * (-1.0*PSRC(IW:IE-3,:,:) + 5.0*PSRC(IW+1:IE-2,:,:) + 2.0*PSRC(IW+2:IE-1,:,:))  ! Flux
920 ZBNEG3(IW+2:IE-1,:,:) = 13./12 * (  PSRC(IW:IE-3,:,:) - 2.0*PSRC(IW+1:IE-2,:,:) +     PSRC(IW+2:IE-1,:,:))**2 &
921       + 1./4   * (     PSRC(IW:IE-3,:,:) - 4.0*PSRC(IW+1:IE-2,:,:) + 3.0*PSRC(IW+2:IE-1,:,:))**2 ! Smoothness indicator
922 ZOMN3(IW+2:IE-1,:,:)  = 3./10. / (ZEPS + ZBNEG3(IW+2:IE-1,:,:))**2             ! Non-normalized weight
923 !
924 !
925 ! ----- Total flux -----
926 !
927 PR(IW+2:IE-1,:,:) = (ZOMP1(IW+2:IE-1,:,:)/(ZOMP1(IW+2:IE-1,:,:)+ZOMP2(IW+2:IE-1,:,:)+ZOMP3(IW+2:IE-1,:,:)) &
928            * ZFPOS1(IW+2:IE-1,:,:) + &
929                       ZOMP2(IW+2:IE-1,:,:)/(ZOMP1(IW+2:IE-1,:,:)+ZOMP2(IW+2:IE-1,:,:)+ZOMP3(IW+2:IE-1,:,:)) &
930            * ZFPOS2(IW+2:IE-1,:,:) + & 
931                       ZOMP3(IW+2:IE-1,:,:)/(ZOMP1(IW+2:IE-1,:,:)+ZOMP2(IW+2:IE-1,:,:)+ZOMP3(IW+2:IE-1,:,:)) &
932            * ZFPOS3(IW+2:IE-1,:,:)) &
933                     * (0.5+SIGN(0.5,PRUCT(IW+2:IE-1,:,:))) &
934                   + (ZOMN1(IW+2:IE-1,:,:)/(ZOMN1(IW+2:IE-1,:,:)+ZOMN2(IW+2:IE-1,:,:)+ZOMN3(IW+2:IE-1,:,:)) &
935            * ZFNEG1(IW+2:IE-1,:,:)  &
936                      + ZOMN2(IW+2:IE-1,:,:)/(ZOMN1(IW+2:IE-1,:,:)+ZOMN2(IW+2:IE-1,:,:)+ZOMN3(IW+2:IE-1,:,:)) &
937            * ZFNEG2(IW+2:IE-1,:,:)  &
938                      + ZOMN3(IW+2:IE-1,:,:)/(ZOMN1(IW+2:IE-1,:,:)+ZOMN2(IW+2:IE-1,:,:)+ZOMN3(IW+2:IE-1,:,:)) &
939            * ZFNEG3(IW+2:IE-1,:,:))  & 
940                     * (0.5-SIGN(0.5,PRUCT(IW+2:IE-1,:,:)))
941 !
942 !-------------------------------------------------------------------------------
943 !*       1.2.   West border
944 !               ---------------------
945 !
946 !! IF( LWEST_ll()  .AND. .FALSE. ) THEN 
947 IF( LWEST_ll() ) THEN 
948  !-----------------------------------------------------------------------------
949  ! West border is physical -- IW+1,IW
950  !-----------------------------------------------------------------------------
951  SELECT CASE (HLBCX(1)) ! X direction LBC type on left side
952
953  CASE ('CYCL')
954  !---------------------------------------------------------------------------
955  ! Periodic boundary condition
956  !---------------------------------------------------------------------------
957 !
958  IF(LEAST_ll()  .AND. .FALSE. ) THEN  ! East border is physical
959 !
960  ! First positive stencil, needs indices i-3, i-2, i-1 
961  ZFPOS1(IW+1,:,:) = 1./6. * (2.0*PSRC(IE,:,:)   - 7.0*PSRC(IW-1,:,:) + 11.0*PSRC(IW,:,:)) ! Flux IW+1
962  ZFPOS1(IW,:,:)   = 1./6. * (2.0*PSRC(IE-1,:,:) - 7.0*PSRC(IE,:,:)   + 11.0*PSRC(IW-1,:,:)) ! Flux IW
963  ZBPOS1(IW+1,:,:) = 13./12. * (PSRC(IE,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 & 
964         + 1./4    * (PSRC(IE,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2   ! Smoothness indicator IW+1
965  ZBPOS1(IW,:,:) = 13./12. * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) +     PSRC(IW-1,:,:))**2 & 
966       + 1./4    * (PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + 3.0*PSRC(IW-1,:,:))**2  ! Smoothness indicator IW
967  ZOMP1(IW:IW+1,:,:)  = 1./10. / (ZEPS + ZBPOS1(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
968 !
969  ! Second positive stencil, needs indices i-2, i-1, i
970  ZFPOS2(IW+1,:,:) = 1./6.* (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IW+1
971  ZFPOS2(IW,:,:)   = 1./6.* (-1.0*PSRC(IE,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW
972  ZBPOS2(IW+1,:,:) = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
973       + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2 ! Smoothness indicator IW+1
974  ZBPOS2(IW,:,:)   = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IW-1,:,:) + PSRC(IW,:,:))**2 &
975       + 1./4   * (PSRC(IE,:,:) -                      PSRC(IW,:,:))**2  ! Smoothness indicator IW
976  ZOMP2(IW:IW+1,:,:)  = 3./5. / (ZEPS + ZBPOS2(IW:IW+1,:,:))**2  ! Non-normalized weight IW+1,IW
977 !
978  ! Third negative stencil, needs indices i-2, i-1, i
979  ZFNEG3(IW+1,:,:) = 1./6 * (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IW+1
980  ZFNEG3(IW,:,:)   = 1./6 * (-1.0*PSRC(IE,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW
981  ZBNEG3(IW+1,:,:) = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) +     PSRC(IW+1,:,:))**2 &
982         + 1./4   * (PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + 3.0*PSRC(IW+1,:,:))**2 ! Smoothness indicator IW+1
983  ZBNEG3(IW,:,:)   = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 &
984         + 1./4   * (PSRC(IE,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2 ! Smoothness indicator IW
985  ZOMN3(IW:IW+1,:,:) = 3./10. / (ZEPS + ZBNEG3(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
986 !
987  ELSEIF(IW>3) THEN ! East boundary is proc border, with minimum 3 HALO points on west side
988 !
989  ! First positive stencil, needs indices i-3, i-2, i-1 
990  ZFPOS1(IW+1,:,:) = 1./6. * (2.0*PSRC(IW-2,:,:)   - 7.0*PSRC(IW-1,:,:) + 11.0*PSRC(IW,:,:)) ! Flux IW+1
991  ZFPOS1(IW,:,:)   = 1./6. * (2.0*PSRC(IW-3,:,:) - 7.0*PSRC(IW-2,:,:)   + 11.0*PSRC(IW-1,:,:)) ! Flux IW
992  ZBPOS1(IW+1,:,:) = 13./12. * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 & 
993         + 1./4    * (PSRC(IW-2,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2   ! Smoothness indicator IW+1
994  ZBPOS1(IW,:,:) = 13./12. * (PSRC(IW-3,:,:) - 2.0*PSRC(IW-2,:,:) +     PSRC(IW-1,:,:))**2 & 
995       + 1./4    * (PSRC(IW-3,:,:) - 4.0*PSRC(IW-2,:,:) + 3.0*PSRC(IW-1,:,:))**2  ! Smoothness indicator IW
996  ZOMP1(IW:IW+1,:,:)  = 1./10. / (ZEPS + ZBPOS1(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
997 !
998  ! Second positive stencil, needs indices i-2, i-1, i
999  ZFPOS2(IW+1,:,:) = 1./6.* (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IW+1
1000  ZFPOS2(IW,:,:)   = 1./6.* (-1.0*PSRC(IW-2,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW
1001  ZBPOS2(IW+1,:,:) = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
1002       + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2 ! Smoothness indicator IW+1
1003  ZBPOS2(IW,:,:)   = 13./12 * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) + PSRC(IW,:,:))**2 &
1004       + 1./4   * (PSRC(IW-2,:,:) -                      PSRC(IW,:,:))**2  ! Smoothness indicator IW
1005  ZOMP2(IW:IW+1,:,:)  = 3./5. / (ZEPS + ZBPOS2(IW:IW+1,:,:))**2  ! Non-normalized weight IW+1,IW
1006 !
1007  ! Third negative stencil, needs indices i-2, i-1, i
1008  ZFNEG3(IW+1,:,:) = 1./6 * (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IW+1
1009  ZFNEG3(IW,:,:)   = 1./6 * (-1.0*PSRC(IW-2,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW
1010  ZBNEG3(IW+1,:,:) = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) +     PSRC(IW+1,:,:))**2 &
1011         + 1./4   * (PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + 3.0*PSRC(IW+1,:,:))**2 ! Smoothness indicator IW+1
1012  ZBNEG3(IW,:,:)   = 13./12 * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 &
1013         + 1./4   * (PSRC(IW-2,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2 ! Smoothness indicator IW
1014  ZOMN3(IW:IW+1,:,:) = 3./10. / (ZEPS + ZBNEG3(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1015 !
1016  ELSE ! East boundary is proc border, with NHALO < 3 on west side
1017   PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on west side'
1018   CALL ABORT
1019   STOP  ' Error in advec_weno_k_3_aux.f90 '
1020  ENDIF
1021
1022  ! Third positive stencil, needs indices i-1, i, i+1
1023  ZFPOS3(IW+1,:,:) = 1./6 * (2.0*PSRC(IW,:,:) + 5.0*PSRC(IW+1,:,:) - PSRC(IW+2,:,:)) ! Flux IW+1
1024  ZFPOS3(IW,:,:)   = 1./6 * (2.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:) - PSRC(IW+1,:,:)) ! Flux IW
1025  ZBPOS3(IW+1,:,:) = 13./12 * (    PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 &
1026       + 1./4   * (3.0*PSRC(IW,:,:) - 4.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 ! Smoothness indicator IW+1
1027  ZBPOS3(IW,:,:)  = 13./12 * (    PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
1028       + 1./4   * (3.0*PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 ! Smoothness indicator IW
1029  ZOMP3(IW:IW+1,:,:)  = 3./10. / (ZEPS + ZBPOS3(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1030 !
1031  ! ----- Negative fluxes ----- 
1032 !
1033  ! First negative stencil, needs indices i, i+1, i+2
1034  ZFNEG1(IW+1,:,:) = 1./6. * (11.0*PSRC(IW+1,:,:) - 7.0*PSRC(IW+2,:,:) + 2.0*PSRC(IW+3,:,:)) ! Flux IW+1
1035  ZFNEG1(IW,:,:)   = 1./6. * (11.0*PSRC(IW,:,:)   - 7.0*PSRC(IW+1,:,:) + 2.0*PSRC(IW+2,:,:)) ! Flux IW
1036  ZBNEG1(IW+1,:,:) = 13./12. * (    PSRC(IW+1,:,:) - 2.0*PSRC(IW+2,:,:) + PSRC(IW+3,:,:))**2 & 
1037       + 1./4    * (3.0*PSRC(IW+1,:,:) - 4.0*PSRC(IW+2,:,:) + PSRC(IW+3,:,:))**2  ! Smoothness indicator IW+1
1038  ZBNEG1(IW,:,:)   = 13./12. * (    PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 & 
1039       + 1./4    * (3.0*PSRC(IW,:,:) - 4.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2  ! Smoothness indicator IW
1040  ZOMN1(IW:IW+1,:,:) = 1./10. / (ZEPS + ZBNEG1(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1041 !
1042  ! Second negative stencil, needs indices i-1, i, i+1
1043  ZFNEG2(IW+1,:,:) = 1./6. * (2.0*PSRC(IW,:,:)   + 5.0*PSRC(IW+1,:,:) - 1.0*PSRC(IW+2,:,:)) ! Flux IW+1
1044  ZFNEG2(IW,:,:)   = 1./6. * (2.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   - 1.0*PSRC(IW+1,:,:)) ! Flux IW
1045  ZBNEG2(IW+1,:,:) = 13./12 * (PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 &
1046       + 1./4   * (PSRC(IW,:,:) -                      PSRC(IW+2,:,:))**2 ! Smoothness indicator IW+1
1047  ZBNEG2(IW,:,:)   = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
1048       + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2 ! Smoothness indicator IW
1049  ZOMN2(IW:IW+1,:,:) = 3./5. / (ZEPS + ZBNEG2(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1050 !
1051  ! ----- Total flux -----
1052
1053  PR(IW:IW+1,:,:) = ( ZOMP1(IW:IW+1,:,:)/(ZOMP1(IW:IW+1,:,:)+ZOMP2(IW:IW+1,:,:)+ZOMP3(IW:IW+1,:,:)) * ZFPOS1(IW:IW+1,:,:) &
1054                        + ZOMP2(IW:IW+1,:,:)/(ZOMP1(IW:IW+1,:,:)+ZOMP2(IW:IW+1,:,:)+ZOMP3(IW:IW+1,:,:)) * ZFPOS2(IW:IW+1,:,:) & 
1055                        + ZOMP3(IW:IW+1,:,:)/(ZOMP1(IW:IW+1,:,:)+ZOMP2(IW:IW+1,:,:)+ZOMP3(IW:IW+1,:,:)) * ZFPOS3(IW:IW+1,:,:)) &
1056                       * (0.5+SIGN(0.5,PRUCT(IW:IW+1,:,:))) &
1057                     + ( ZOMN1(IW:IW+1,:,:)/(ZOMN1(IW:IW+1,:,:)+ZOMN2(IW:IW+1,:,:)+ZOMN3(IW:IW+1,:,:)) * ZFNEG1(IW:IW+1,:,:) &
1058                        + ZOMN2(IW:IW+1,:,:)/(ZOMN1(IW:IW+1,:,:)+ZOMN2(IW:IW+1,:,:)+ZOMN3(IW:IW+1,:,:)) * ZFNEG2(IW:IW+1,:,:) &
1059                        + ZOMN3(IW:IW+1,:,:)/(ZOMN1(IW:IW+1,:,:)+ZOMN2(IW:IW+1,:,:)+ZOMN3(IW:IW+1,:,:)) * ZFNEG3(IW:IW+1,:,:)) &
1060                       * (0.5-SIGN(0.5,PRUCT(IW:IW+1,:,:)))
1061 !
1062  CASE ('OPEN','WALL','NEST') 
1063  !---------------------------------------------------------------------------
1064  ! Open, or Wall, or Nest boundary condition => WENO order reduction
1065  !---------------------------------------------------------------------------
1066 !
1067  ! WENO scheme order 1, IW
1068     PR(IW,:,:) = PSRC(IW-1,:,:) * (0.5+SIGN(0.5,PRUCT(IW,:,:))) + &
1069                  PSRC(IW,:,:)  * (0.5-SIGN(0.5,PRUCT(IW,:,:)))
1070 !
1071 !   ! WENO scheme order 3, IW+1
1072     ZFPOS1(IW+1,:,:) = 0.5 * (3.0*PSRC(IW,:,:) - PSRC(IW-1,:,:)) ! First positive flux
1073     ZFPOS2(IW+1,:,:) = 0.5 * ( PSRC(IW,:,:) + PSRC(IW+1,:,:)) ! Second positive flux
1074     ZBPOS1(IW+1,:,:) = (PSRC(IW,:,:)   - PSRC(IW-1,:,:))**2 ! First positive smoothness indicator
1075     ZBPOS2(IW+1,:,:) = (PSRC(IW+1,:,:) - PSRC(IW,:,:))**2  ! Second positive smoothness indicator
1076 !
1077     ZFNEG1(IW+1,:,:) = 0.5 * (3.0*PSRC(IW+1,:,:) - PSRC(IW+2,:,:)) ! First negative flux
1078     ZFNEG2(IW+1,:,:) = 0.5 * ( PSRC(IW,:,:)   + PSRC(IW+1,:,:)) ! Second negative flux
1079     ZBNEG1(IW+1,:,:) = (PSRC(IW+1,:,:) - PSRC(IW+2,:,:))**2 ! First negative smoothness indicator
1080     ZBNEG2(IW+1,:,:) = (PSRC(IW,:,:)   - PSRC(IW+1,:,:))**2 ! Second negative smoothness indicator
1081 !
1082     ZOMP1(IW+1,:,:) = 1./3. / (ZEPS + ZBPOS1(IW+1,:,:))**2 ! First positive non-normalized weight
1083     ZOMP2(IW+1,:,:) = 2./3. / (ZEPS + ZBPOS2(IW+1,:,:))**2 ! Second positive non-normalized weight
1084     ZOMN1(IW+1,:,:) = 1./3. / (ZEPS + ZBNEG1(IW+1,:,:))**2 ! First negative non-normalized weight
1085     ZOMN2(IW+1,:,:) = 2./3. / (ZEPS + ZBNEG2(IW+1,:,:))**2 ! Second negative non-normalized weight
1086
1087     PR(IW+1,:,:) = (ZOMN2(IW+1,:,:)/(ZOMN1(IW+1,:,:)+ZOMN2(IW+1,:,:)) * ZFNEG2(IW+1,:,:) + &
1088             (ZOMN1(IW+1,:,:)/(ZOMN1(IW+1,:,:)+ZOMN2(IW+1,:,:)) * ZFNEG1(IW+1,:,:))) &
1089           *(0.5-SIGN(0.5,PRUCT(IW+1,:,:))) + &
1090       (ZOMP2(IW+1,:,:)/(ZOMP1(IW+1,:,:)+ZOMP2(IW+1,:,:)) * ZFPOS2(IW+1,:,:) + &
1091       (ZOMP1(IW+1,:,:)/(ZOMP1(IW+1,:,:)+ZOMP2(IW+1,:,:)) * ZFPOS1(IW+1,:,:))) &
1092       *(0.5+SIGN(0.5,PRUCT(IW+1,:,:)))  ! Total flux
1093 !
1094  END SELECT ! SELECT CASE (HLBCX(1)) ! X direction LBC type on left side
1095 !
1096 ELSE
1097  !-----------------------------------------------------------------------------
1098  ! West border is proc border -- IW,IW-1
1099  !-----------------------------------------------------------------------------
1100 !
1101  IF (NHALO<3) THEN
1102  PRINT *,'ERROR : WENO5/west-int not parallelisable with NHALO < 3' 
1103  CALL ABORT
1104  STOP  ' Error in advec_weno_k_3_aux.f90 '
1105  ELSEIF (NHALO>=3) THEN
1106  !---------------------------------------------------------------------------
1107  ! NHALO >3 => WENO5 for all boundary points
1108  !---------------------------------------------------------------------------
1109 !
1110  ! ----- Positive fluxes -----
1111 !
1112  ! First positive stencil, needs indices i-3, i-2, i-1 
1113  ZFPOS1(IW+1,:,:) = 1./6. * (2.0*PSRC(IW-2,:,:)   - 7.0*PSRC(IW-1,:,:) + 11.0*PSRC(IW,:,:)) ! Flux IW+1
1114  ZFPOS1(IW,:,:)   = 1./6. * (2.0*PSRC(IW-3,:,:) - 7.0*PSRC(IW-2,:,:)   + 11.0*PSRC(IW-1,:,:)) ! Flux IW
1115  ZBPOS1(IW+1,:,:) = 13./12. * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 & 
1116         + 1./4    * (PSRC(IW-2,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2   ! Smoothness indicator IW+1
1117  ZBPOS1(IW,:,:) = 13./12. * (PSRC(IW-3,:,:) - 2.0*PSRC(IW-2,:,:) +     PSRC(IW-1,:,:))**2 & 
1118       + 1./4    * (PSRC(IW-3,:,:) - 4.0*PSRC(IW-2,:,:) + 3.0*PSRC(IW-1,:,:))**2  ! Smoothness indicator IW
1119  ZOMP1(IW:IW+1,:,:)  = 1./10. / (ZEPS + ZBPOS1(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1120 !
1121  ! Second positive stencil, needs indices i-2, i-1, i
1122  ZFPOS2(IW+1,:,:) = 1./6.* (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IW+1
1123  ZFPOS2(IW,:,:)   = 1./6.* (-1.0*PSRC(IW-2,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW
1124  ZBPOS2(IW+1,:,:) = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
1125       + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2 ! Smoothness indicator IW+1
1126  ZBPOS2(IW,:,:)   = 13./12 * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) + PSRC(IW,:,:))**2 &
1127       + 1./4   * (PSRC(IW-2,:,:) -                      PSRC(IW,:,:))**2  ! Smoothness indicator IW
1128  ZOMP2(IW:IW+1,:,:)  = 3./5. / (ZEPS + ZBPOS2(IW:IW+1,:,:))**2  ! Non-normalized weight IW+1,IW
1129
1130  ! Third positive stencil, needs indices i-1, i, i+1
1131  ZFPOS3(IW+1,:,:) = 1./6 * (2.0*PSRC(IW,:,:) + 5.0*PSRC(IW+1,:,:) - PSRC(IW+2,:,:)) ! Flux IW+1
1132  ZFPOS3(IW,:,:)   = 1./6 * (2.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:) - PSRC(IW+1,:,:)) ! Flux IW
1133  ZBPOS3(IW+1,:,:) = 13./12 * (    PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 &
1134       + 1./4   * (3.0*PSRC(IW,:,:) - 4.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 ! Smoothness indicator IW+1
1135  ZBPOS3(IW,:,:)  = 13./12 * (    PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
1136       + 1./4   * (3.0*PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 ! Smoothness indicator IW
1137  ZOMP3(IW:IW+1,:,:)  = 3./10. / (ZEPS + ZBPOS3(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1138 !
1139  ! ----- Negative fluxes ----- 
1140 !
1141  ! First negative stencil, needs indices i, i+1, i+2
1142  ZFNEG1(IW+1,:,:) = 1./6. * (11.0*PSRC(IW+1,:,:) - 7.0*PSRC(IW+2,:,:) + 2.0*PSRC(IW+3,:,:)) ! Flux IW+1
1143  ZFNEG1(IW,:,:)   = 1./6. * (11.0*PSRC(IW,:,:)   - 7.0*PSRC(IW+1,:,:) + 2.0*PSRC(IW+2,:,:)) ! Flux IW
1144  ZBNEG1(IW+1,:,:) = 13./12. * (    PSRC(IW+1,:,:) - 2.0*PSRC(IW+2,:,:) + PSRC(IW+3,:,:))**2 & 
1145       + 1./4    * (3.0*PSRC(IW+1,:,:) - 4.0*PSRC(IW+2,:,:) + PSRC(IW+3,:,:))**2  ! Smoothness indicator IW+1
1146  ZBNEG1(IW,:,:)   = 13./12. * (    PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 & 
1147       + 1./4    * (3.0*PSRC(IW,:,:) - 4.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2  ! Smoothness indicator IW
1148  ZOMN1(IW:IW+1,:,:) = 1./10. / (ZEPS + ZBNEG1(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1149 !
1150  ! Second negative stencil, needs indices i-1, i, i+1
1151  ZFNEG2(IW+1,:,:) = 1./6. * (2.0*PSRC(IW,:,:)   + 5.0*PSRC(IW+1,:,:) - 1.0*PSRC(IW+2,:,:)) ! Flux IW+1
1152  ZFNEG2(IW,:,:)   = 1./6. * (2.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   - 1.0*PSRC(IW+1,:,:)) ! Flux IW
1153  ZBNEG2(IW+1,:,:) = 13./12 * (PSRC(IW,:,:) - 2.0*PSRC(IW+1,:,:) + PSRC(IW+2,:,:))**2 &
1154       + 1./4   * (PSRC(IW,:,:) -                      PSRC(IW+2,:,:))**2 ! Smoothness indicator IW+1
1155  ZBNEG2(IW,:,:)   = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 &
1156       + 1./4   * (PSRC(IW-1,:,:) -                    PSRC(IW+1,:,:))**2 ! Smoothness indicator IW
1157  ZOMN2(IW:IW+1,:,:) = 3./5. / (ZEPS + ZBNEG2(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1158 !
1159  ! Third negative stencil, needs indices i-2, i-1, i
1160  ZFNEG3(IW+1,:,:) = 1./6 * (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IW+1
1161  ZFNEG3(IW,:,:)   = 1./6 * (-1.0*PSRC(IW-2,:,:)   + 5.0*PSRC(IW-1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IW
1162  ZBNEG3(IW+1,:,:) = 13./12 * (PSRC(IW-1,:,:) - 2.0*PSRC(IW,:,:) +     PSRC(IW+1,:,:))**2 &
1163         + 1./4   * (PSRC(IW-1,:,:) - 4.0*PSRC(IW,:,:) + 3.0*PSRC(IW+1,:,:))**2 ! Smoothness indicator IW+1
1164  ZBNEG3(IW,:,:)   = 13./12 * (PSRC(IW-2,:,:) - 2.0*PSRC(IW-1,:,:) +     PSRC(IW,:,:))**2 &
1165         + 1./4   * (PSRC(IW-2,:,:) - 4.0*PSRC(IW-1,:,:) + 3.0*PSRC(IW,:,:))**2 ! Smoothness indicator IW
1166  ZOMN3(IW:IW+1,:,:) = 3./10. / (ZEPS + ZBNEG3(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
1167 !
1168  ! ----- Total flux -----
1169
1170  PR(IW:IW+1,:,:) = ( ZOMP1(IW:IW+1,:,:)/(ZOMP1(IW:IW+1,:,:)+ZOMP2(IW:IW+1,:,:)+ZOMP3(IW:IW+1,:,:)) * ZFPOS1(IW:IW+1,:,:) &
1171                        + ZOMP2(IW:IW+1,:,:)/(ZOMP1(IW:IW+1,:,:)+ZOMP2(IW:IW+1,:,:)+ZOMP3(IW:IW+1,:,:)) * ZFPOS2(IW:IW+1,:,:) & 
1172                        + ZOMP3(IW:IW+1,:,:)/(ZOMP1(IW:IW+1,:,:)+ZOMP2(IW:IW+1,:,:)+ZOMP3(IW:IW+1,:,:)) * ZFPOS3(IW:IW+1,:,:)) &
1173                       * (0.5+SIGN(0.5,PRUCT(IW:IW+1,:,:))) &
1174                     + ( ZOMN1(IW:IW+1,:,:)/(ZOMN1(IW:IW+1,:,:)+ZOMN2(IW:IW+1,:,:)+ZOMN3(IW:IW+1,:,:)) * ZFNEG1(IW:IW+1,:,:) &
1175                        + ZOMN2(IW:IW+1,:,:)/(ZOMN1(IW:IW+1,:,:)+ZOMN2(IW:IW+1,:,:)+ZOMN3(IW:IW+1,:,:)) * ZFNEG2(IW:IW+1,:,:) &
1176                        + ZOMN3(IW:IW+1,:,:)/(ZOMN1(IW:IW+1,:,:)+ZOMN2(IW:IW+1,:,:)+ZOMN3(IW:IW+1,:,:)) * ZFNEG3(IW:IW+1,:,:)) &
1177                       * (0.5-SIGN(0.5,PRUCT(IW:IW+1,:,:)))
1178 !
1179  END IF ! NHALO
1180 !
1181 END IF ! IF(LWEST_ll()) 
1182 !
1183 !-------------------------------------------------------------------------------
1184 !*       1.3.   East border
1185 !               ---------------------
1186 !
1187 !! IF(LEAST_ll()  .AND. .FALSE. ) THEN 
1188 IF(LEAST_ll() ) THEN 
1189  !-----------------------------------------------------------------------------
1190  ! East border is physical -- IE,IE+1
1191  !-----------------------------------------------------------------------------
1192  SELECT CASE (HLBCX(2)) ! X direction LBC type on right side
1193
1194  CASE ('CYCL')
1195  !---------------------------------------------------------------------------
1196  ! Periodic boundary condition
1197  !---------------------------------------------------------------------------
1198 !
1199  IF(LWEST_ll()  .AND. .FALSE. ) THEN  ! West border is physical 
1200
1201  ! Third positive stencil, needs indices i, i+1, i+2
1202  ZFPOS3(IE,:,:)   = 1./6 * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:) - PSRC(IE+1,:,:)) ! Flux IE
1203  ZFPOS3(IE+1,:,:) = 1./6 * (2.0*PSRC(IE,:,:) + 5.0*PSRC(IE+1,:,:) - PSRC(IW,:,:)) ! Flux IE+1
1204  ZBPOS3(IE,:,:)   = 13./12 * (    PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
1205       + 1./4   * (3.0*PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
1206  ZBPOS3(IE+1,:,:) = 13./12 * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2 &
1207       + 1./4   * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2  ! Smoothness indicator IE+1
1208  ZOMP3(IE:IE+1,:,:) = 3./10. / (ZEPS + ZBPOS3(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1 
1209 !
1210  ! First negative stencil, needs indices i, i+1, i+2
1211  ZFNEG1(IE,:,:)   = 1./6. * (11.0*PSRC(IE,:,:)   - 7.0*PSRC(IE+1,:,:) + 2.0*PSRC(IW,:,:)) ! Flux IE
1212  ZFNEG1(IE+1,:,:) = 1./6. * (11.0*PSRC(IE+1,:,:) - 7.0*PSRC(IW,:,:)   + 2.0*PSRC(IW+1,:,:)) ! Flux IE+1
1213  ZBNEG1(IE,:,:)   = 13./12. * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2 & 
1214       + 1./4    * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2  ! Smoothness indicator IE
1215  ZBNEG1(IE+1,:,:) = 13./12. * (    PSRC(IE+1,:,:) - 2.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2 & 
1216       + 1./4    * (3.0*PSRC(IE+1,:,:) - 4.0*PSRC(IW,:,:) + PSRC(IW+1,:,:))**2  ! Smoothness indicator IE+1
1217  ZOMN1(IE:IE+1,:,:) = 1./10. / (ZEPS + ZBNEG1(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1218 !
1219  ! Second negative stencil, needs indices i-1, i, i+1
1220  ZFNEG2(IE,:,:)   = 1./6. * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   - 1.0*PSRC(IE+1,:,:)) ! Flux IE
1221  ZFNEG2(IE+1,:,:) = 1./6. * (2.0*PSRC(IE,:,:)   + 5.0*PSRC(IE+1,:,:) - 1.0*PSRC(IW,:,:)) ! Flux IE+1
1222  ZBNEG2(IE,:,:)   = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
1223       + 1./4   * (PSRC(IE-1,:,:) -                    PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
1224  ZBNEG2(IE+1,:,:) = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IW,:,:))**2 &
1225       + 1./4   * (PSRC(IE,:,:) -                      PSRC(IW,:,:))**2  ! Smoothness indicator IE+1
1226  ZOMN2(IE:IE+1,:,:) = 3./5. / (ZEPS + ZBNEG2(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1227 !
1228  ELSEIF(IE<=SIZE(PSRC,1)-3) THEN ! West boundary is proc border, with minimum 3 HALO points on east side
1229
1230  ! Third positive stencil, needs indices i, i+1, i+2
1231  ZFPOS3(IE,:,:)   = 1./6 * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:) - PSRC(IE+1,:,:)) ! Flux IE
1232  ZFPOS3(IE+1,:,:) = 1./6 * (2.0*PSRC(IE,:,:) + 5.0*PSRC(IE+1,:,:) - PSRC(IE+2,:,:)) ! Flux IE+1
1233  ZBPOS3(IE,:,:)   = 13./12 * (    PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
1234       + 1./4   * (3.0*PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
1235  ZBPOS3(IE+1,:,:) = 13./12 * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 &
1236       + 1./4   * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2  ! Smoothness indicator IE+1
1237  ZOMP3(IE:IE+1,:,:) = 3./10. / (ZEPS + ZBPOS3(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1 
1238 !
1239  ! First negative stencil, needs indices i, i+1, i+2
1240  ZFNEG1(IE,:,:)   = 1./6. * (11.0*PSRC(IE,:,:)   - 7.0*PSRC(IE+1,:,:) + 2.0*PSRC(IE+2,:,:)) ! Flux IE
1241  ZFNEG1(IE+1,:,:) = 1./6. * (11.0*PSRC(IE+1,:,:) - 7.0*PSRC(IE+2,:,:)   + 2.0*PSRC(IE+3,:,:)) ! Flux IE+1
1242  ZBNEG1(IE,:,:)   = 13./12. * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 & 
1243       + 1./4    * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2  ! Smoothness indicator IE
1244  ZBNEG1(IE+1,:,:) = 13./12. * (    PSRC(IE+1,:,:) - 2.0*PSRC(IE+2,:,:) + PSRC(IE+3,:,:))**2 & 
1245       + 1./4    * (3.0*PSRC(IE+1,:,:) - 4.0*PSRC(IE+2,:,:) + PSRC(IE+3,:,:))**2  ! Smoothness indicator IE+1
1246  ZOMN1(IE:IE+1,:,:) = 1./10. / (ZEPS + ZBNEG1(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1247 !
1248  ! Second negative stencil, needs indices i-1, i, i+1
1249  ZFNEG2(IE,:,:)   = 1./6. * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   - 1.0*PSRC(IE+1,:,:)) ! Flux IE
1250  ZFNEG2(IE+1,:,:) = 1./6. * (2.0*PSRC(IE,:,:)   + 5.0*PSRC(IE+1,:,:) - 1.0*PSRC(IE+2,:,:)) ! Flux IE+1
1251  ZBNEG2(IE,:,:)   = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
1252       + 1./4   * (PSRC(IE-1,:,:) -                    PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
1253  ZBNEG2(IE+1,:,:) = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 &
1254       + 1./4   * (PSRC(IE,:,:) -                      PSRC(IE+2,:,:))**2  ! Smoothness indicator IE+1
1255  ZOMN2(IE:IE+1,:,:) = 3./5. / (ZEPS + ZBNEG2(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1256 !
1257  ELSE ! West boundary is proc border, with NHALO < 3 on east side
1258   PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on east side'
1259   CALL ABORT
1260   STOP  ' Error in advec_weno_k_3_aux.f90 '
1261  ENDIF
1262 !
1263  ! First positive stencil, needs indices i-3, i-2, i-1 
1264  ZFPOS1(IE,:,:)   = 1./6. * (2.0*PSRC(IE-3,:,:) - 7.0*PSRC(IE-2,:,:) + 11.0*PSRC(IE-1,:,:)) ! Flux IE
1265  ZFPOS1(IE+1,:,:) = 1./6. * (2.0*PSRC(IE-2,:,:) - 7.0*PSRC(IE-1,:,:) + 11.0*PSRC(IE,:,:)) ! Flux IE+1
1266  ZBPOS1(IE,:,:)   = 13./12. * (PSRC(IE-3,:,:) - 2.0*PSRC(IE-2,:,:) +     PSRC(IE-1,:,:))**2 & 
1267         + 1./4    * (PSRC(IE-3,:,:) - 4.0*PSRC(IE-2,:,:) + 3.0*PSRC(IE-1,:,:))**2  ! Smoothness indicator IE
1268  ZBPOS1(IE+1,:,:) = 13./12. * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) +     PSRC(IE,:,:))**2 & 
1269         + 1./4    * (PSRC(IE-2,:,:) - 4.0*PSRC(IE-1,:,:) + 3.0*PSRC(IE,:,:))**2  ! Smoothness indicator IE+1
1270  ZOMP1(IE:IE+1,:,:) = 1./10. / (ZEPS + ZBPOS1(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1271 !
1272  ! Second positive stencil, needs indices i-2, i-1, i
1273  ZFPOS2(IE,:,:)   = 1./6. * (-1.0*PSRC(IE-2,:,:) + 5.0*PSRC(IE-1,:,:) + 2.0*PSRC(IE,:,:)) ! Flux IE
1274  ZFPOS2(IE+1,:,:) = 1./6. * (-1.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   + 2.0*PSRC(IE+1,:,:)) ! Flux IE+1
1275  ZBPOS2(IE,:,:)   = 13./12 * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) + PSRC(IE,:,:))**2 &
1276       + 1./4   * (PSRC(IE-2,:,:) -                      PSRC(IE,:,:))**2 ! Smoothness indicator IE
1277  ZBPOS2(IE+1,:,:) = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
1278       + 1./4   * (PSRC(IE-1,:,:) -                   PSRC(IE+1,:,:))**2 ! Smoothness indicator IE+1
1279  ZOMP2(IE:IE+1,:,:)  = 3./5. / (ZEPS + ZBPOS2(IE:IE+1,:,:))**2  ! Non-normalized weight IE,IE+1
1280 !
1281  ! Third negative stencil, needs indices i-2, i-1, i
1282  ZFNEG3(IE,:,:)   = 1./6 * (-1.0*PSRC(IE-2,:,:) + 5.0*PSRC(IE-1,:,:) + 2.0*PSRC(IE,:,:)) ! Flux IE
1283  ZFNEG3(IE+1,:,:) = 1./6 * (-1.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   + 2.0*PSRC(IE+1,:,:)) ! Flux IE+1
1284  ZBNEG3(IE,:,:)   = 13./12 * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) +     PSRC(IE,:,:))**2 &
1285         + 1./4   * (PSRC(IE-2,:,:) - 4.0*PSRC(IE-1,:,:) + 3.0*PSRC(IE,:,:))**2 ! Smoothness indicator IE
1286  ZBNEG3(IE+1,:,:) = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) +     PSRC(IE+1,:,:))**2 &
1287         + 1./4   * (PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + 3.0*PSRC(IE+1,:,:))**2 ! Smoothness indicator IE+1
1288  ZOMN3(IE:IE+1,:,:) = 3./10. / (ZEPS + ZBNEG3(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1289 !
1290  ! ----- Total flux -----
1291
1292  PR(IE:IE+1,:,:) = ( ZOMP1(IE:IE+1,:,:)/(ZOMP1(IE:IE+1,:,:)+ZOMP2(IE:IE+1,:,:)+ZOMP3(IE:IE+1,:,:)) * ZFPOS1(IE:IE+1,:,:) &
1293                        + ZOMP2(IE:IE+1,:,:)/(ZOMP1(IE:IE+1,:,:)+ZOMP2(IE:IE+1,:,:)+ZOMP3(IE:IE+1,:,:)) * ZFPOS2(IE:IE+1,:,:) & 
1294                        + ZOMP3(IE:IE+1,:,:)/(ZOMP1(IE:IE+1,:,:)+ZOMP2(IE:IE+1,:,:)+ZOMP3(IE:IE+1,:,:)) * ZFPOS3(IE:IE+1,:,:)) &
1295                       * (0.5+SIGN(0.5,PRUCT(IE:IE+1,:,:))) &
1296                     + ( ZOMN1(IE:IE+1,:,:)/(ZOMN1(IE:IE+1,:,:)+ZOMN2(IE:IE+1,:,:)+ZOMN3(IE:IE+1,:,:)) * ZFNEG1(IE:IE+1,:,:) &
1297                        + ZOMN2(IE:IE+1,:,:)/(ZOMN1(IE:IE+1,:,:)+ZOMN2(IE:IE+1,:,:)+ZOMN3(IE:IE+1,:,:)) * ZFNEG2(IE:IE+1,:,:) &
1298                        + ZOMN3(IE:IE+1,:,:)/(ZOMN1(IE:IE+1,:,:)+ZOMN2(IE:IE+1,:,:)+ZOMN3(IE:IE+1,:,:)) * ZFNEG3(IE:IE+1,:,:)) &
1299                       * (0.5-SIGN(0.5,PRUCT(IE:IE+1,:,:)))
1300 !
1301 !
1302  CASE ('OPEN','WALL','NEST') 
1303  !---------------------------------------------------------------------------
1304  ! Open, or Wall, or Nest boundary condition => WENO order reduction
1305  !---------------------------------------------------------------------------
1306 !
1307  ! WENO scheme order 1, IE+1
1308     PR(IE+1,:,:) = PSRC(IE,:,:)  * (0.5+SIGN(0.5,PRUCT(IE+1,:,:))) + &
1309                    PSRC(IE+1,:,:) * (0.5-SIGN(0.5,PRUCT(IE+1,:,:)))
1310 !
1311 !   ! WENO scheme order 3, IE
1312     ZFPOS1(IE,:,:) = 0.5 * (3.0*PSRC(IE-1,:,:) - PSRC(IE-2,:,:)) ! First positive flux
1313     ZFPOS2(IE,:,:) = 0.5 * ( PSRC(IE-1,:,:) + PSRC(IE,:,:)) ! Second positive flux
1314     ZBPOS1(IE,:,:) = (PSRC(IE-1,:,:) - PSRC(IE-2,:,:))**2 ! First positive smoothness indicator
1315     ZBPOS2(IE,:,:) = (PSRC(IE,:,:)   - PSRC(IE-1,:,:))**2 ! Second positive smoothness indicator
1316 !
1317     ZFNEG1(IE,:,:) = 0.5 * (3.0*PSRC(IE,:,:)   - PSRC(IE+1,:,:)) ! First negative flux
1318     ZFNEG2(IE,:,:) = 0.5 * ( PSRC(IE-1,:,:) + PSRC(IE,:,:)) ! Second negative flux
1319     ZBNEG1(IE,:,:) = (PSRC(IE,:,:)   - PSRC(IE+1,:,:))**2 ! First negative smoothness indicator
1320     ZBNEG2(IE,:,:) = (PSRC(IE-1,:,:) - PSRC(IE,:,:))**2  ! Second negative smoothness indicator
1321 !
1322     ZOMP1(IE,:,:) = 1./3. / (ZEPS + ZBPOS1(IE,:,:))**2 ! First positive non-normalized weight
1323     ZOMP2(IE,:,:) = 2./3. / (ZEPS + ZBPOS2(IE,:,:))**2 ! Second positive non-normalized weight
1324     ZOMN1(IE,:,:) = 1./3. / (ZEPS + ZBNEG1(IE,:,:))**2 ! First negative non-normalized weight
1325     ZOMN2(IE,:,:) = 2./3. / (ZEPS + ZBNEG2(IE,:,:))**2 ! Second negative non-normalized weight
1326
1327     PR(IE,:,:) = (ZOMN2(IE,:,:)/(ZOMN1(IE,:,:)+ZOMN2(IE,:,:))*ZFNEG2(IE,:,:) + &
1328      (ZOMN1(IE,:,:)/(ZOMN1(IE,:,:)+ZOMN2(IE,:,:))*ZFNEG1(IE,:,:))) &
1329      *(0.5-SIGN(0.5,PRUCT(IE,:,:))) + &
1330                  (ZOMP2(IE,:,:)/(ZOMP1(IE,:,:)+ZOMP2(IE,:,:))*ZFPOS2(IE,:,:) + &
1331                  (ZOMP1(IE,:,:)/(ZOMP1(IE,:,:)+ZOMP2(IE,:,:))*ZFPOS1(IE,:,:))) &
1332      *(0.5+SIGN(0.5,PRUCT(IE,:,:)))  ! Total flux
1333
1334  END SELECT ! SELECT CASE (HLBCX(2)) ! X direction LBC type on right side
1335 !
1336 ELSE
1337  !-----------------------------------------------------------------------------
1338  ! East border is proc border -- IE,IE+1
1339  !-----------------------------------------------------------------------------
1340 !
1341  IF (NHALO<3) THEN
1342  PRINT *,'ERROR : WENO5/east-int not parallelisable with NHALO < 3' 
1343  CALL ABORT
1344  STOP  ' Error in advec_weno_k_3_aux.f90 '
1345  ELSEIF (NHALO>=3) THEN
1346  !---------------------------------------------------------------------------
1347  ! NHALO >= 3 => WENO5 for all boundary points
1348  !---------------------------------------------------------------------------
1349
1350  ! ----- Positive fluxes -----
1351 !
1352  ! First positive stencil, needs indices i-3, i-2, i-1 
1353  ZFPOS1(IE,:,:)   = 1./6. * (2.0*PSRC(IE-3,:,:) - 7.0*PSRC(IE-2,:,:) + 11.0*PSRC(IE-1,:,:)) ! Flux IE
1354  ZFPOS1(IE+1,:,:) = 1./6. * (2.0*PSRC(IE-2,:,:) - 7.0*PSRC(IE-1,:,:) + 11.0*PSRC(IE,:,:)) ! Flux IE+1
1355  ZBPOS1(IE,:,:)   = 13./12. * (PSRC(IE-3,:,:) - 2.0*PSRC(IE-2,:,:) +     PSRC(IE-1,:,:))**2 & 
1356         + 1./4    * (PSRC(IE-3,:,:) - 4.0*PSRC(IE-2,:,:) + 3.0*PSRC(IE-1,:,:))**2  ! Smoothness indicator IE
1357  ZBPOS1(IE+1,:,:) = 13./12. * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) +     PSRC(IE,:,:))**2 & 
1358         + 1./4    * (PSRC(IE-2,:,:) - 4.0*PSRC(IE-1,:,:) + 3.0*PSRC(IE,:,:))**2  ! Smoothness indicator IE+1
1359  ZOMP1(IE:IE+1,:,:) = 1./10. / (ZEPS + ZBPOS1(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1360 !
1361  ! Second positive stencil, needs indices i-2, i-1, i
1362  ZFPOS2(IE,:,:)   = 1./6. * (-1.0*PSRC(IE-2,:,:) + 5.0*PSRC(IE-1,:,:) + 2.0*PSRC(IE,:,:)) ! Flux IE
1363  ZFPOS2(IE+1,:,:) = 1./6. * (-1.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   + 2.0*PSRC(IE+1,:,:)) ! Flux IE+1
1364  ZBPOS2(IE,:,:)   = 13./12 * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) + PSRC(IE,:,:))**2 &
1365       + 1./4   * (PSRC(IE-2,:,:) -                      PSRC(IE,:,:))**2 ! Smoothness indicator IE
1366  ZBPOS2(IE+1,:,:) = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
1367       + 1./4   * (PSRC(IE-1,:,:) -                   PSRC(IE+1,:,:))**2 ! Smoothness indicator IE+1
1368  ZOMP2(IE:IE+1,:,:)  = 3./5. / (ZEPS + ZBPOS2(IE:IE+1,:,:))**2  ! Non-normalized weight IE,IE+1
1369
1370  ! Third positive stencil, needs indices i, i+1, i+2
1371  ZFPOS3(IE,:,:)   = 1./6 * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:) - PSRC(IE+1,:,:)) ! Flux IE
1372  ZFPOS3(IE+1,:,:) = 1./6 * (2.0*PSRC(IE,:,:) + 5.0*PSRC(IE+1,:,:) - PSRC(IE+2,:,:)) ! Flux IE+1
1373  ZBPOS3(IE,:,:)   = 13./12 * (    PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
1374       + 1./4   * (3.0*PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
1375  ZBPOS3(IE+1,:,:) = 13./12 * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 &
1376       + 1./4   * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2  ! Smoothness indicator IE+1
1377  ZOMP3(IE:IE+1,:,:) = 3./10. / (ZEPS + ZBPOS3(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1378 !
1379  ! ----- Negative fluxes ----- 
1380 !
1381  ! First negative stencil, needs indices i, i+1, i+2
1382  ZFNEG1(IE,:,:)   = 1./6. * (11.0*PSRC(IE,:,:)   - 7.0*PSRC(IE+1,:,:) + 2.0*PSRC(IE+2,:,:)) ! Flux IE
1383  ZFNEG1(IE+1,:,:) = 1./6. * (11.0*PSRC(IE+1,:,:) - 7.0*PSRC(IE+2,:,:)   + 2.0*PSRC(IE+3,:,:)) ! Flux IE+1
1384  ZBNEG1(IE,:,:)   = 13./12. * (    PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 & 
1385       + 1./4    * (3.0*PSRC(IE,:,:) - 4.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2  ! Smoothness indicator IE
1386  ZBNEG1(IE+1,:,:) = 13./12. * (    PSRC(IE+1,:,:) - 2.0*PSRC(IE+2,:,:) + PSRC(IE+3,:,:))**2 & 
1387       + 1./4    * (3.0*PSRC(IE+1,:,:) - 4.0*PSRC(IE+2,:,:) + PSRC(IE+3,:,:))**2  ! Smoothness indicator IE+1
1388  ZOMN1(IE:IE+1,:,:) = 1./10. / (ZEPS + ZBNEG1(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1389 !
1390  ! Second negative stencil, needs indices i-1, i, i+1
1391  ZFNEG2(IE,:,:)   = 1./6. * (2.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   - 1.0*PSRC(IE+1,:,:)) ! Flux IE
1392  ZFNEG2(IE+1,:,:) = 1./6. * (2.0*PSRC(IE,:,:)   + 5.0*PSRC(IE+1,:,:) - 1.0*PSRC(IE+2,:,:)) ! Flux IE+1
1393  ZBNEG2(IE,:,:)   = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) + PSRC(IE+1,:,:))**2 &
1394       + 1./4   * (PSRC(IE-1,:,:) -                    PSRC(IE+1,:,:))**2 ! Smoothness indicator IE
1395  ZBNEG2(IE+1,:,:) = 13./12 * (PSRC(IE,:,:) - 2.0*PSRC(IE+1,:,:) + PSRC(IE+2,:,:))**2 &
1396       + 1./4   * (PSRC(IE,:,:) -                      PSRC(IE+2,:,:))**2  ! Smoothness indicator IE+1
1397  ZOMN2(IE:IE+1,:,:) = 3./5. / (ZEPS + ZBNEG2(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1398 !
1399  ! Third negative stencil, needs indices i-2, i-1, i
1400  ZFNEG3(IE,:,:)   = 1./6 * (-1.0*PSRC(IE-2,:,:) + 5.0*PSRC(IE-1,:,:) + 2.0*PSRC(IE,:,:)) ! Flux IE
1401  ZFNEG3(IE+1,:,:) = 1./6 * (-1.0*PSRC(IE-1,:,:) + 5.0*PSRC(IE,:,:)   + 2.0*PSRC(IE+1,:,:)) ! Flux IE+1
1402  ZBNEG3(IE,:,:)   = 13./12 * (PSRC(IE-2,:,:) - 2.0*PSRC(IE-1,:,:) +     PSRC(IE,:,:))**2 &
1403         + 1./4   * (PSRC(IE-2,:,:) - 4.0*PSRC(IE-1,:,:) + 3.0*PSRC(IE,:,:))**2 ! Smoothness indicator IE
1404  ZBNEG3(IE+1,:,:) = 13./12 * (PSRC(IE-1,:,:) - 2.0*PSRC(IE,:,:) +     PSRC(IE+1,:,:))**2 &
1405         + 1./4   * (PSRC(IE-1,:,:) - 4.0*PSRC(IE,:,:) + 3.0*PSRC(IE+1,:,:))**2 ! Smoothness indicator IE+1
1406  ZOMN3(IE:IE+1,:,:) = 3./10. / (ZEPS + ZBNEG3(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
1407 !
1408  ! ----- Total flux -----
1409
1410  PR(IE:IE+1,:,:) = ( ZOMP1(IE:IE+1,:,:)/(ZOMP1(IE:IE+1,:,:)+ZOMP2(IE:IE+1,:,:)+ZOMP3(IE:IE+1,:,:)) * ZFPOS1(IE:IE+1,:,:) &
1411                        + ZOMP2(IE:IE+1,:,:)/(ZOMP1(IE:IE+1,:,:)+ZOMP2(IE:IE+1,:,:)+ZOMP3(IE:IE+1,:,:)) * ZFPOS2(IE:IE+1,:,:) & 
1412                        + ZOMP3(IE:IE+1,:,:)/(ZOMP1(IE:IE+1,:,:)+ZOMP2(IE:IE+1,:,:)+ZOMP3(IE:IE+1,:,:)) * ZFPOS3(IE:IE+1,:,:)) &
1413                       * (0.5+SIGN(0.5,PRUCT(IE:IE+1,:,:))) &
1414                     + ( ZOMN1(IE:IE+1,:,:)/(ZOMN1(IE:IE+1,:,:)+ZOMN2(IE:IE+1,:,:)+ZOMN3(IE:IE+1,:,:)) * ZFNEG1(IE:IE+1,:,:) &
1415                        + ZOMN2(IE:IE+1,:,:)/(ZOMN1(IE:IE+1,:,:)+ZOMN2(IE:IE+1,:,:)+ZOMN3(IE:IE+1,:,:)) * ZFNEG2(IE:IE+1,:,:) &
1416                        + ZOMN3(IE:IE+1,:,:)/(ZOMN1(IE:IE+1,:,:)+ZOMN2(IE:IE+1,:,:)+ZOMN3(IE:IE+1,:,:)) * ZFNEG3(IE:IE+1,:,:)) &
1417                       * (0.5-SIGN(0.5,PRUCT(IE:IE+1,:,:)))
1418 !
1419  END IF ! NHALO
1420 !
1421 END IF ! IF(LWEST_ll()) 
1422 !-------------------------------------------------------------------------------
1423 !
1424 PR = PR * PRUCT ! Add contravariant flux
1425 !
1426 END SUBROUTINE ADVEC_WENO_K_3_MX
1427 !
1428 !-------------------------------------------------------------------------------
1429 !
1430 !     ########################################################################
1431       SUBROUTINE ADVEC_WENO_K_3_MY(HLBCY,PSRC, PRVCT, PR)
1432 !     ########################################################################
1433 !!
1434 !!****  Computes PRVCT * PUT (or PRVCT * PWT). Upstream fluxes of U (or W) 
1435 !!      variables in Y direction.  
1436 !!      Input PUT is on U Grid 'ie' (i,j,k) based on UGRID reference
1437 !!      Output PR is on mass Grid 'ie' (i,j-1/2,k) based on UGRID reference 
1438 !!
1439 !!    AUTHOR
1440 !!    ------
1441 !!    F. Visentin   *CNRS/LA*                 
1442 !!
1443 !!    MODIFICATIONS
1444 !!    -------------
1445 !! T. Lunet 02/10/2014:  Correction of periodic boudary conditions
1446 !!       Change of structure in order to adapt WENO to NHALOK
1447 !!       Suppression of second layer HALO pointers
1448 !!       Complete code documentation
1449 !!      J.Escobar : 02/10/2015 : correction on CYCL/OPEN boundaries
1450 !!
1451 !-------------------------------------------------------------------------------
1452 !
1453 USE MODE_ll
1454 USE MODD_LUNIT
1455 USE MODD_CONF
1456 !
1457 IMPLICIT NONE
1458 !
1459 !*       0.1   Declarations of dummy arguments :
1460 !
1461 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY  ! Y direction LBC type
1462 !
1463 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on U grid at t
1464 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRVCT ! contrav. comp. on MASS GRID
1465 !
1466 ! output source term
1467 !
1468 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
1469 !
1470 !*       0.2   Declarations of local variables :
1471 !
1472 INTEGER :: IIB,IJB    ! Begining useful area in x,y,z directions
1473 INTEGER :: IIE,IJE    ! End useful area in x,y,z directions
1474 INTEGER::  IS,IN      ! Coordinate of third order diffusion area
1475 !
1476 INTEGER:: ILUOUT,IRESP   ! for prints
1477 !
1478 !
1479 ! intermediate reconstruction fluxes for positive wind case
1480 !
1481 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFPOS1, ZFPOS2, ZFPOS3
1482 !
1483 ! intermediate reconstruction fluxes for negative wind case
1484 !
1485 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFNEG1, ZFNEG2, ZFNEG3
1486 !
1487 ! smoothness indicators for positive wind case
1488 !
1489 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBPOS1, ZBPOS2, ZBPOS3
1490 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBNEG1, ZBNEG2, ZBNEG3
1491 !
1492 ! WENO weights 
1493 !
1494 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZOMP1, ZOMP2, ZOMP3
1495 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZOMN1, ZOMN2, ZOMN3
1496
1497 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: ZWORK
1498 !
1499 ! EPSILON for weno weights calculation
1500
1501 REAL, PARAMETER :: ZEPS = 1.0E-15
1502 !
1503 !-----------------------------------------------------------------------------
1504 !
1505 !*       0.3.     COMPUTES THE DOMAIN DIMENSIONS
1506 !                 ------------------------------
1507 !
1508 CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
1509 !
1510 !---------------------------------------------------------------------------
1511 !
1512 !*       0.4.   INITIALIZE THE FIELD 
1513 !               ---------------------
1514 !
1515 PR(:,:,:) = 0.0
1516 !
1517 ZFPOS1 = 0.0
1518 ZFPOS2 = 0.0
1519 ZFPOS3 = 0.0
1520 ZFNEG1 = 0.0
1521 ZFNEG2 = 0.0
1522 ZFNEG3 = 0.0
1523 ZBPOS1 = 0.0
1524 ZBPOS2 = 0.0
1525 ZBPOS3 = 0.0
1526 ZBNEG1 = 0.0
1527 ZBNEG2 = 0.0
1528 ZBNEG3 = 0.0
1529 ZOMP1  = 0.0
1530 ZOMP2  = 0.0
1531 ZOMP3  = 0.0
1532 ZOMN1  = 0.0
1533 ZOMN2  = 0.0
1534 ZOMN3  = 0.0 
1535
1536 ZWORK = 0.0
1537 !
1538 !-------------------------------------------------------------------------------
1539 !*       1.1.   Interior Fluxes 
1540 !              ---------------------
1541 IS=IJB
1542 IN=IJE
1543 !
1544 !-------------------------------------------------------------------------------
1545 ! Flux calculation in the physical domain far enough from the boundary 
1546 ! WENO scheme order 5, IS+2 -> IN-1
1547 ! Computation at the mass point on Vgrid v(i-1/2,j,k)
1548 !-------------------------------------------------------------------------------
1549 !
1550 ! ----- Positive fluxes -----
1551 !
1552 ! First positive stencil, needs indices i-3, i-2, i-1
1553 ZFPOS1(:,IS+2:IN-1,:) = 1./6.   * (2.0*PSRC(:,IS-1:IN-4,:)- 7.0*PSRC(:,IS:IN-3,:)+ 11.0*PSRC(:,IS+1:IN-2,:))   ! Flux
1554 ZBPOS1(:,IS+2:IN-1,:) = 13./12. * (    PSRC(:,IS-1:IN-4,:)- 2.0*PSRC(:,IS:IN-3,:)+      PSRC(:,IS+1:IN-2,:))**2 &
1555       + 1./4    * (    PSRC(:,IS-1:IN-4,:)- 4.0*PSRC(:,IS:IN-3,:)+ 3.0* PSRC(:,IS+1:IN-2,:))**2  ! Smoothness indicator
1556 ZOMP1(:,IS+2:IN-1,:)  = 1./10. /  (ZEPS + ZBPOS1(:,IS+2:IN-1,:))**2             ! Non-normalized weight
1557 !
1558 ! Second positive stencil, needs indices i-2, i-1, i
1559 ZFPOS2(:,IS+2:IN-1,:) = 1./6.  * (-1.0*PSRC(:,IS:IN-3,:) + 5.0*PSRC(:,IS+1:IN-2,:) + 2.0*PSRC(:,IS+2:IN-1,:))  ! Flux
1560 ZBPOS2(:,IS+2:IN-1,:) = 13./12 * (     PSRC(:,IS:IN-3,:) - 2.0*PSRC(:,IS+1:IN-2,:) +     PSRC(:,IS+2:IN-1,:))**2 &
1561       + 1./4   * (     PSRC(:,IS:IN-3,:) -                               PSRC(:,IS+2:IN-1,:))**2 ! Smoothness indicator
1562 ZOMP2(:,IS+2:IN-1,:)  = 3./5. /  (ZEPS + ZBPOS2(:,IS+2:IN-1,:))**2             ! Non-normalized weight
1563 !
1564 ! Third positive stencil, needs indices i-1, i, i+1
1565 ZFPOS3(:,IS+2:IN-1,:) = 1./6   * (2.0*PSRC(:,IS+1:IN-2,:) + 5.0*PSRC(:,IS+2:IN-1,:) - PSRC(:,IS+3:IN,:))  ! Flux
1566 ZBPOS3(:,IS+2:IN-1,:) = 13./12 * ( PSRC(:,IS+1:IN-2,:) - 2.0*PSRC(:,IS+2:IN-1,:) + PSRC(:,IS+3:IN,:))**2 &
1567       + 1./4   * (3.0*PSRC(:,IS+1:IN-2,:) - 4.0*PSRC(:,IS+2:IN-1,:) + PSRC(:,IS+3:IN,:))**2 ! Smoothness indicator
1568 ZOMP3(:,IS+2:IN-1,:)  = 3./10. / (ZEPS + ZBPOS3(:,IS+2:IN-1,:))**2           ! Non-normalized weight
1569 !
1570 ! ----- Negative fluxes ----- 
1571 !
1572 ! First negative stencil, needs indices i, i+1, i+2
1573 ZFNEG1(:,IS+2:IN-1,:) = 1./6.   * (11.0*PSRC(:,IS+2:IN-1,:) - 7.0*PSRC(:,IS+3:IN,:) + 2.0*PSRC(:,IS+4:IN+1,:))   ! Flux
1574 ZBNEG1(:,IS+2:IN-1,:) = 13./12. * (     PSRC(:,IS+2:IN-1,:) - 2.0*PSRC(:,IS+3:IN,:) +     PSRC(:,IS+4:IN+1,:))**2 &
1575       + 1./4    * (3.0* PSRC(:,IS+2:IN-1,:) - 4.0*PSRC(:,IS+3:IN,:) +     PSRC(:,IS+4:IN+1,:))**2  ! Smoothness indicator
1576 ZOMN1(:,IS+2:IN-1,:)  = 1./10. /  (ZEPS + ZBNEG1(:,IS+2:IN-1,:))**2             ! Non-normalized weight
1577 !
1578 ! Second negative stencil, needs indices i-1, i, i+1
1579 ZFNEG2(:,IS+2:IN-1,:) = 1./6.  * (2.0*PSRC(:,IS+1:IN-2,:) + 5.0*PSRC(:,IS+2:IN-1,:) - 1.0*PSRC(:,IS+3:IN,:))  ! Flux
1580 ZBNEG2(:,IS+2:IN-1,:) = 13./12 * (    PSRC(:,IS+1:IN-2,:) - 2.0*PSRC(:,IS+2:IN-1,:) +     PSRC(:,IS+3:IN,:))**2 &
1581       + 1./4   * (    PSRC(:,IS+1:IN-2,:) -                               PSRC(:,IS+3:IN,:))**2 ! Smoothness indicator
1582 ZOMN2(:,IS+2:IN-1,:)  = 3./5. /  (ZEPS + ZBNEG2(:,IS+2:IN-1,:))**2            ! Non-normalized weight
1583 !
1584 ! Third negative stencil, needs indices i-2, i-1, i
1585 ZFNEG3(:,IS+2:IN-1,:) = 1./6   * (-1.0*PSRC(:,IS:IN-3,:) + 5.0*PSRC(:,IS+1:IN-2,:) + 2.0*PSRC(:,IS+2:IN-1,:))  ! Flux
1586 ZBNEG3(:,IS+2:IN-1,:) = 13./12 * (  PSRC(:,IS:IN-3,:) - 2.0*PSRC(:,IS+1:IN-2,:) +     PSRC(:,IS+2:IN-1,:))**2 &
1587       + 1./4   * (     PSRC(:,IS:IN-3,:) - 4.0*PSRC(:,IS+1:IN-2,:) + 3.0*PSRC(:,IS+2:IN-1,:))**2 ! Smoothness indicator
1588 ZOMN3(:,IS+2:IN-1,:)  = 3./10. / (ZEPS + ZBNEG3(:,IS+2:IN-1,:))**2             ! Non-normalized weight
1589 !
1590 ! ----- Total flux -----
1591 !
1592 PR(:,IS+2:IN-1,:) = (ZOMP1(:,IS+2:IN-1,:)/(ZOMP1(:,IS+2:IN-1,:)+ZOMP2(:,IS+2:IN-1,:)+ZOMP3(:,IS+2:IN-1,:)) &
1593            * ZFPOS1(:,IS+2:IN-1,:) + &
1594                       ZOMP2(:,IS+2:IN-1,:)/(ZOMP1(:,IS+2:IN-1,:)+ZOMP2(:,IS+2:IN-1,:)+ZOMP3(:,IS+2:IN-1,:)) &
1595            * ZFPOS2(:,IS+2:IN-1,:) + & 
1596                       ZOMP3(:,IS+2:IN-1,:)/(ZOMP1(:,IS+2:IN-1,:)+ZOMP2(:,IS+2:IN-1,:)+ZOMP3(:,IS+2:IN-1,:)) &
1597            * ZFPOS3(:,IS+2:IN-1,:)) &
1598                     * (0.5+SIGN(0.5,PRVCT(:,IS+2:IN-1,:))) &
1599                   + (ZOMN1(:,IS+2:IN-1,:)/(ZOMN1(:,IS+2:IN-1,:)+ZOMN2(:,IS+2:IN-1,:)+ZOMN3(:,IS+2:IN-1,:)) &
1600            * ZFNEG1(:,IS+2:IN-1,:)  &
1601                      + ZOMN2(:,IS+2:IN-1,:)/(ZOMN1(:,IS+2:IN-1,:)+ZOMN2(:,IS+2:IN-1,:)+ZOMN3(:,IS+2:IN-1,:)) &
1602            * ZFNEG2(:,IS+2:IN-1,:)  &
1603                      + ZOMN3(:,IS+2:IN-1,:)/(ZOMN1(:,IS+2:IN-1,:)+ZOMN2(:,IS+2:IN-1,:)+ZOMN3(:,IS+2:IN-1,:)) &
1604            * ZFNEG3(:,IS+2:IN-1,:))  & 
1605                     * (0.5-SIGN(0.5,PRVCT(:,IS+2:IN-1,:)))
1606 !
1607 !-------------------------------------------------------------------------------
1608 !*       1.2.   South border
1609 !               ---------------------
1610 !
1611 !! IF(LSOUTH_ll()  .AND. .FALSE. ) THEN 
1612 IF(LSOUTH_ll()) THEN 
1613  !-----------------------------------------------------------------------------
1614  ! South border is physical -- IS+1,IS
1615  !-----------------------------------------------------------------------------
1616  SELECT CASE (HLBCY(1)) ! Y direction LBC type on south side
1617
1618  CASE ('CYCL')
1619  !---------------------------------------------------------------------------
1620  ! Periodic boundary condition
1621  !---------------------------------------------------------------------------
1622 !
1623  IF(LNORTH_ll()  .AND. .FALSE. ) THEN ! North border is physical 
1624 !
1625  ! First positive stencil, needs indices i-3, i-2, i-1 
1626  ZFPOS1(:,IS+1,:) = 1./6. * (2.0*PSRC(:,IN,:)   - 7.0*PSRC(:,IS-1,:) + 11.0*PSRC(:,IS,:)) ! Flux IS+1
1627  ZFPOS1(:,IS,:)   = 1./6. * (2.0*PSRC(:,IN-1,:) - 7.0*PSRC(:,IN,:)   + 11.0*PSRC(:,IS-1,:)) ! Flux IS
1628  ZBPOS1(:,IS+1,:) = 13./12. * (PSRC(:,IN,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 & 
1629         + 1./4    * (PSRC(:,IN,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2   ! Smoothness indicator IS+1
1630  ZBPOS1(:,IS,:) = 13./12. * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) +     PSRC(:,IS-1,:))**2 & 
1631       + 1./4    * (PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + 3.0*PSRC(:,IS-1,:))**2  ! Smoothness indicator IS
1632  ZOMP1(:,IS:IS+1,:)  = 1./10. / (ZEPS + ZBPOS1(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1633 !
1634  ! Second positive stencil, needs indices i-2, i-1, i
1635  ZFPOS2(:,IS+1,:) = 1./6.* (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS+1
1636  ZFPOS2(:,IS,:)   = 1./6.* (-1.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS
1637  ZBPOS2(:,IS+1,:) = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
1638       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS+1
1639  ZBPOS2(:,IS,:)   = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IS-1,:) + PSRC(:,IS,:))**2 &
1640       + 1./4   * (PSRC(:,IN,:) -                      PSRC(:,IS,:))**2  ! Smoothness indicator IS
1641  ZOMP2(:,IS:IS+1,:)  = 3./5. / (ZEPS + ZBPOS2(:,IS:IS+1,:))**2  ! Non-normalized weight IS+1,IS
1642 !
1643  ! Third negative stencil, needs indices i-2, i-1, i
1644  ZFNEG3(:,IS+1,:) = 1./6 * (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS+1
1645  ZFNEG3(:,IS,:)   = 1./6 * (-1.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS
1646  ZBNEG3(:,IS+1,:) = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) +     PSRC(:,IS+1,:))**2 &
1647         + 1./4   * (PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + 3.0*PSRC(:,IS+1,:))**2 ! Smoothness indicator IS+1
1648  ZBNEG3(:,IS,:)   = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 &
1649         + 1./4   * (PSRC(:,IN,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2 ! Smoothness indicator IS
1650  ZOMN3(:,IS:IS+1,:) = 3./10. / (ZEPS + ZBNEG3(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1651
1652  ELSEIF(IS>3) THEN ! North boundary is proc border, with minimum 3 HALO points on sounth side
1653 !
1654  ! First positive stencil, needs indices i-3, i-2, i-1 
1655  ZFPOS1(:,IS+1,:) = 1./6. * (2.0*PSRC(:,IS-2,:)   - 7.0*PSRC(:,IS-1,:) + 11.0*PSRC(:,IS,:)) ! Flux IS+1
1656  ZFPOS1(:,IS,:)   = 1./6. * (2.0*PSRC(:,IS-3,:) - 7.0*PSRC(:,IS-2,:)   + 11.0*PSRC(:,IS-1,:)) ! Flux IS
1657  ZBPOS1(:,IS+1,:) = 13./12. * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 & 
1658         + 1./4    * (PSRC(:,IS-2,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2   ! Smoothness indicator IS+1
1659  ZBPOS1(:,IS,:) = 13./12. * (PSRC(:,IS-3,:) - 2.0*PSRC(:,IS-2,:) +     PSRC(:,IS-1,:))**2 & 
1660       + 1./4    * (PSRC(:,IS-3,:) - 4.0*PSRC(:,IS-2,:) + 3.0*PSRC(:,IS-1,:))**2  ! Smoothness indicator IS
1661  ZOMP1(:,IS:IS+1,:)  = 1./10. / (ZEPS + ZBPOS1(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1662 !
1663  ! Second positive stencil, needs indices i-2, i-1, i
1664  ZFPOS2(:,IS+1,:) = 1./6.* (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS+1
1665  ZFPOS2(:,IS,:)   = 1./6.* (-1.0*PSRC(:,IS-2,:) + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS
1666  ZBPOS2(:,IS+1,:) = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
1667       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS+1
1668  ZBPOS2(:,IS,:)   = 13./12 * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) + PSRC(:,IS,:))**2 &
1669       + 1./4   * (PSRC(:,IS-2,:) -                      PSRC(:,IS,:))**2  ! Smoothness indicator IS
1670  ZOMP2(:,IS:IS+1,:)  = 3./5. / (ZEPS + ZBPOS2(:,IS:IS+1,:))**2  ! Non-normalized weight IS+1,IS
1671 !
1672  ! Third negative stencil, needs indices i-2, i-1, i
1673  ZFNEG3(:,IS+1,:) = 1./6 * (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS+1
1674  ZFNEG3(:,IS,:)   = 1./6 * (-1.0*PSRC(:,IS-2,:) + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS
1675  ZBNEG3(:,IS+1,:) = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) +     PSRC(:,IS+1,:))**2 &
1676         + 1./4   * (PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + 3.0*PSRC(:,IS+1,:))**2 ! Smoothness indicator IS+1
1677  ZBNEG3(:,IS,:)   = 13./12 * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 &
1678         + 1./4   * (PSRC(:,IS-2,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2 ! Smoothness indicator IS
1679  ZOMN3(:,IS:IS+1,:) = 3./10. / (ZEPS + ZBNEG3(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1680
1681  ELSE ! North boundary is proc border, with NHALO < 3 on south side
1682   PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side'
1683   CALL ABORT
1684   STOP  ' Error in advec_weno_k_3_aux.f90 '
1685  ENDIF
1686
1687  ! Third positive stencil, needs indices i-1, i, i+1
1688  ZFPOS3(:,IS+1,:) = 1./6 * (2.0*PSRC(:,IS,:) + 5.0*PSRC(:,IS+1,:) - PSRC(:,IS+2,:)) ! Flux IS+1
1689  ZFPOS3(:,IS,:)   = 1./6 * (2.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:) - PSRC(:,IS+1,:)) ! Flux IS
1690  ZBPOS3(:,IS+1,:) = 13./12 * (    PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 &
1691       + 1./4   * (3.0*PSRC(:,IS,:) - 4.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 ! Smoothness indicator IS+1
1692  ZBPOS3(:,IS,:)  = 13./12 * (    PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
1693       + 1./4   * (3.0*PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
1694  ZOMP3(:,IS:IS+1,:)  = 3./10. / (ZEPS + ZBPOS3(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1695 !
1696  ! ----- Negative fluxes ----- 
1697 !
1698  ! First negative stencil, needs indices i, i+1, i+2
1699  ZFNEG1(:,IS+1,:) = 1./6. * (11.0*PSRC(:,IS+1,:) - 7.0*PSRC(:,IS+2,:) + 2.0*PSRC(:,IS+3,:)) ! Flux IS+1
1700  ZFNEG1(:,IS,:)   = 1./6. * (11.0*PSRC(:,IS,:)   - 7.0*PSRC(:,IS+1,:) + 2.0*PSRC(:,IS+2,:)) ! Flux IS
1701  ZBNEG1(:,IS+1,:) = 13./12. * (    PSRC(:,IS+1,:) - 2.0*PSRC(:,IS+2,:) + PSRC(:,IS+3,:))**2 & 
1702       + 1./4    * (3.0*PSRC(:,IS+1,:) - 4.0*PSRC(:,IS+2,:) + PSRC(:,IS+3,:))**2  ! Smoothness indicator IS+1
1703  ZBNEG1(:,IS,:)   = 13./12. * (    PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 & 
1704       + 1./4    * (3.0*PSRC(:,IS,:) - 4.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2  ! Smoothness indicator IS
1705  ZOMN1(:,IS:IS+1,:) = 1./10. / (ZEPS + ZBNEG1(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1706 !
1707  ! Second negative stencil, needs indices i-1, i, i+1
1708  ZFNEG2(:,IS+1,:) = 1./6. * (2.0*PSRC(:,IS,:)   + 5.0*PSRC(:,IS+1,:) - 1.0*PSRC(:,IS+2,:)) ! Flux IS+1
1709  ZFNEG2(:,IS,:)   = 1./6. * (2.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   - 1.0*PSRC(:,IS+1,:)) ! Flux IS
1710  ZBNEG2(:,IS+1,:) = 13./12 * (PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 &
1711       + 1./4   * (PSRC(:,IS,:) -                      PSRC(:,IS+2,:))**2 ! Smoothness indicator IS+1
1712  ZBNEG2(:,IS,:)   = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
1713       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
1714  ZOMN2(:,IS:IS+1,:) = 3./5. / (ZEPS + ZBNEG2(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1715 !
1716  ! ----- Total flux -----
1717
1718  PR(:,IS:IS+1,:) = ( ZOMP1(:,IS:IS+1,:)/(ZOMP1(:,IS:IS+1,:)+ZOMP2(:,IS:IS+1,:)+ZOMP3(:,IS:IS+1,:)) * ZFPOS1(:,IS:IS+1,:) &
1719                        + ZOMP2(:,IS:IS+1,:)/(ZOMP1(:,IS:IS+1,:)+ZOMP2(:,IS:IS+1,:)+ZOMP3(:,IS:IS+1,:)) * ZFPOS2(:,IS:IS+1,:) & 
1720                        + ZOMP3(:,IS:IS+1,:)/(ZOMP1(:,IS:IS+1,:)+ZOMP2(:,IS:IS+1,:)+ZOMP3(:,IS:IS+1,:)) * ZFPOS3(:,IS:IS+1,:)) &
1721                       * (0.5+SIGN(0.5,PRVCT(:,IS:IS+1,:))) &
1722                     + ( ZOMN1(:,IS:IS+1,:)/(ZOMN1(:,IS:IS+1,:)+ZOMN2(:,IS:IS+1,:)+ZOMN3(:,IS:IS+1,:)) * ZFNEG1(:,IS:IS+1,:) &
1723                        + ZOMN2(:,IS:IS+1,:)/(ZOMN1(:,IS:IS+1,:)+ZOMN2(:,IS:IS+1,:)+ZOMN3(:,IS:IS+1,:)) * ZFNEG2(:,IS:IS+1,:) &
1724                        + ZOMN3(:,IS:IS+1,:)/(ZOMN1(:,IS:IS+1,:)+ZOMN2(:,IS:IS+1,:)+ZOMN3(:,IS:IS+1,:)) * ZFNEG3(:,IS:IS+1,:)) &
1725                       * (0.5-SIGN(0.5,PRVCT(:,IS:IS+1,:)))
1726 !
1727 !
1728  CASE ('OPEN','WALL','NEST') 
1729  !---------------------------------------------------------------------------
1730  ! Open, or Wall, or Nest boundary condition => WENO order reduction
1731  !---------------------------------------------------------------------------
1732 !
1733  ! WENO scheme order 1, IS
1734     PR(:,IS,:) = PSRC(:,IS-1,:) * (0.5+SIGN(0.5,PRVCT(:,IS,:))) + &
1735                  PSRC(:,IS,:)  * (0.5-SIGN(0.5,PRVCT(:,IS,:)))
1736 !
1737 !   ! WENO scheme order 3, IS+1
1738     ZFPOS1(:,IS+1,:) = 0.5 * (3.0*PSRC(:,IS,:) - PSRC(:,IS-1,:)) ! First positive flux
1739     ZFPOS2(:,IS+1,:) = 0.5 * ( PSRC(:,IS,:) + PSRC(:,IS+1,:)) ! Second positive flux
1740     ZBPOS1(:,IS+1,:) = (PSRC(:,IS,:)   - PSRC(:,IS-1,:))**2 ! First positive smoothness indicator
1741     ZBPOS2(:,IS+1,:) = (PSRC(:,IS+1,:) - PSRC(:,IS,:))**2  ! Second positive smoothness indicator
1742 !
1743     ZFNEG1(:,IS+1,:) = 0.5 * (3.0*PSRC(:,IS+1,:) - PSRC(:,IS+2,:)) ! First negative flux
1744     ZFNEG2(:,IS+1,:) = 0.5 * ( PSRC(:,IS+1,:) + PSRC(:,IS,:)) ! Second negative flux
1745     ZBNEG1(:,IS+1,:) = (PSRC(:,IS+1,:) - PSRC(:,IS+2,:))**2 ! First negative smoothness indicator
1746     ZBNEG2(:,IS+1,:) = (PSRC(:,IS,:)   - PSRC(:,IS+1,:))**2 ! Second negative smoothness indicator
1747 !
1748     ZOMP1(:,IS+1,:) = 1./3. / (ZEPS + ZBPOS1(:,IS+1,:))**2 ! First positive non-normalized weight
1749     ZOMP2(:,IS+1,:) = 2./3. / (ZEPS + ZBPOS2(:,IS+1,:))**2 ! Second positive non-normalized weight
1750     ZOMN1(:,IS+1,:) = 1./3. / (ZEPS + ZBNEG1(:,IS+1,:))**2 ! First negative non-normalized weight
1751     ZOMN2(:,IS+1,:) = 2./3. / (ZEPS + ZBNEG2(:,IS+1,:))**2 ! Second negative non-normalized weight
1752
1753     PR(:,IS+1,:) = (ZOMP2(:,IS+1,:)/(ZOMP1(:,IS+1,:)+ZOMP2(:,IS+1,:)) * ZFPOS2(:,IS+1,:) + &
1754       (ZOMP1(:,IS+1,:)/(ZOMP1(:,IS+1,:)+ZOMP2(:,IS+1,:)) * ZFPOS1(:,IS+1,:))) &
1755       *(0.5+SIGN(0.5,PRVCT(:,IS+1,:))) + &
1756       (ZOMN2(:,IS+1,:)/(ZOMN1(:,IS+1,:)+ZOMN2(:,IS+1,:)) * ZFNEG2(:,IS+1,:) + &
1757             (ZOMN1(:,IS+1,:)/(ZOMN1(:,IS+1,:)+ZOMN2(:,IS+1,:)) * ZFNEG1(:,IS+1,:))) &
1758           *(0.5-SIGN(0.5,PRVCT(:,IS+1,:)))  ! Total flux
1759 !
1760  END SELECT ! SELECT CASE (HLBCY(1)) ! Y direction LBC type on south side
1761 !
1762 ELSE
1763  !-----------------------------------------------------------------------------
1764  ! South border is proc border -- IS,IS-1
1765  !-----------------------------------------------------------------------------
1766 !
1767  IF (NHALO<3) THEN
1768  PRINT *,'ERROR : WENO5/south-int not parallelisable with NHALO < 3' 
1769  CALL ABORT
1770  STOP  ' Error in advec_weno_k_3_aux.f90 '
1771  ELSEIF (NHALO>=3) THEN
1772  !---------------------------------------------------------------------------
1773  ! NHALO >3 => WENO5 for all boundary points
1774  !---------------------------------------------------------------------------
1775 !
1776  ! ----- Positive fluxes -----
1777 !
1778  ! First positive stencil, needs indices i-3, i-2, i-1 
1779  ZFPOS1(:,IS+1,:) = 1./6. * (2.0*PSRC(:,IS-2,:)   - 7.0*PSRC(:,IS-1,:) + 11.0*PSRC(:,IS,:)) ! Flux IS+1
1780  ZFPOS1(:,IS,:)   = 1./6. * (2.0*PSRC(:,IS-3,:) - 7.0*PSRC(:,IS-2,:)   + 11.0*PSRC(:,IS-1,:)) ! Flux IS
1781  ZBPOS1(:,IS+1,:) = 13./12. * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 & 
1782         + 1./4    * (PSRC(:,IS-2,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2   ! Smoothness indicator IS+1
1783  ZBPOS1(:,IS,:) = 13./12. * (PSRC(:,IS-3,:) - 2.0*PSRC(:,IS-2,:) +     PSRC(:,IS-1,:))**2 & 
1784       + 1./4    * (PSRC(:,IS-3,:) - 4.0*PSRC(:,IS-2,:) + 3.0*PSRC(:,IS-1,:))**2  ! Smoothness indicator IS
1785  ZOMP1(:,IS:IS+1,:)  = 1./10. / (ZEPS + ZBPOS1(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1786 !
1787  ! Second positive stencil, needs indices i-2, i-1, i
1788  ZFPOS2(:,IS+1,:) = 1./6.* (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS+1
1789  ZFPOS2(:,IS,:)   = 1./6.* (-1.0*PSRC(:,IS-2,:)   + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS
1790  ZBPOS2(:,IS+1,:) = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
1791       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS+1
1792  ZBPOS2(:,IS,:)   = 13./12 * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) + PSRC(:,IS,:))**2 &
1793       + 1./4   * (PSRC(:,IS-2,:) -                      PSRC(:,IS,:))**2  ! Smoothness indicator IS
1794  ZOMP2(:,IS:IS+1,:)  = 3./5. / (ZEPS + ZBPOS2(:,IS:IS+1,:))**2  ! Non-normalized weight IS+1,IS
1795
1796  ! Third positive stencil, needs indices i-1, i, i+1
1797  ZFPOS3(:,IS+1,:) = 1./6 * (2.0*PSRC(:,IS,:) + 5.0*PSRC(:,IS+1,:) - PSRC(:,IS+2,:)) ! Flux IS+1
1798  ZFPOS3(:,IS,:)   = 1./6 * (2.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:) - PSRC(:,IS+1,:)) ! Flux IS
1799  ZBPOS3(:,IS+1,:) = 13./12 * (    PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 &
1800       + 1./4   * (3.0*PSRC(:,IS,:) - 4.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 ! Smoothness indicator IS+1
1801  ZBPOS3(:,IS,:)  = 13./12 * (    PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
1802       + 1./4   * (3.0*PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
1803  ZOMP3(:,IS:IS+1,:)  = 3./10. / (ZEPS + ZBPOS3(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1804 !
1805  ! ----- Negative fluxes ----- 
1806 !
1807  ! First negative stencil, needs indices i, i+1, i+2
1808  ZFNEG1(:,IS+1,:) = 1./6. * (11.0*PSRC(:,IS+1,:) - 7.0*PSRC(:,IS+2,:) + 2.0*PSRC(:,IS+3,:)) ! Flux IS+1
1809  ZFNEG1(:,IS,:)   = 1./6. * (11.0*PSRC(:,IS,:)   - 7.0*PSRC(:,IS+1,:) + 2.0*PSRC(:,IS+2,:)) ! Flux IS
1810  ZBNEG1(:,IS+1,:) = 13./12. * (    PSRC(:,IS+1,:) - 2.0*PSRC(:,IS+2,:) + PSRC(:,IS+3,:))**2 & 
1811       + 1./4    * (3.0*PSRC(:,IS+1,:) - 4.0*PSRC(:,IS+2,:) + PSRC(:,IS+3,:))**2  ! Smoothness indicator IS+1
1812  ZBNEG1(:,IS,:)   = 13./12. * (    PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 & 
1813       + 1./4    * (3.0*PSRC(:,IS,:) - 4.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2  ! Smoothness indicator IS
1814  ZOMN1(:,IS:IS+1,:) = 1./10. / (ZEPS + ZBNEG1(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1815 !
1816  ! Second negative stencil, needs indices i-1, i, i+1
1817  ZFNEG2(:,IS+1,:) = 1./6. * (2.0*PSRC(:,IS,:)   + 5.0*PSRC(:,IS+1,:) - 1.0*PSRC(:,IS+2,:)) ! Flux IS+1
1818  ZFNEG2(:,IS,:)   = 1./6. * (2.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   - 1.0*PSRC(:,IS+1,:)) ! Flux IS
1819  ZBNEG2(:,IS+1,:) = 13./12 * (PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 &
1820       + 1./4   * (PSRC(:,IS,:) -                      PSRC(:,IS+2,:))**2 ! Smoothness indicator IS+1
1821  ZBNEG2(:,IS,:)   = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
1822       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
1823  ZOMN2(:,IS:IS+1,:) = 3./5. / (ZEPS + ZBNEG2(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1824 !
1825  ! Third negative stencil, needs indices i-2, i-1, i
1826  ZFNEG3(:,IS+1,:) = 1./6 * (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS+1
1827  ZFNEG3(:,IS,:)   = 1./6 * (-1.0*PSRC(:,IS-2,:)   + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS
1828  ZBNEG3(:,IS+1,:) = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) +     PSRC(:,IS+1,:))**2 &
1829         + 1./4   * (PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + 3.0*PSRC(:,IS+1,:))**2 ! Smoothness indicator IS+1
1830  ZBNEG3(:,IS,:)   = 13./12 * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 &
1831         + 1./4   * (PSRC(:,IS-2,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2 ! Smoothness indicator IS
1832  ZOMN3(:,IS:IS+1,:) = 3./10. / (ZEPS + ZBNEG3(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
1833 !
1834  ! ----- Total flux -----
1835
1836  PR(:,IS:IS+1,:) = ( ZOMP1(:,IS:IS+1,:)/(ZOMP1(:,IS:IS+1,:)+ZOMP2(:,IS:IS+1,:)+ZOMP3(:,IS:IS+1,:)) * ZFPOS1(:,IS:IS+1,:) &
1837                        + ZOMP2(:,IS:IS+1,:)/(ZOMP1(:,IS:IS+1,:)+ZOMP2(:,IS:IS+1,:)+ZOMP3(:,IS:IS+1,:)) * ZFPOS2(:,IS:IS+1,:) & 
1838                        + ZOMP3(:,IS:IS+1,:)/(ZOMP1(:,IS:IS+1,:)+ZOMP2(:,IS:IS+1,:)+ZOMP3(:,IS:IS+1,:)) * ZFPOS3(:,IS:IS+1,:)) &
1839                       * (0.5+SIGN(0.5,PRVCT(:,IS:IS+1,:))) &
1840                     + ( ZOMN1(:,IS:IS+1,:)/(ZOMN1(:,IS:IS+1,:)+ZOMN2(:,IS:IS+1,:)+ZOMN3(:,IS:IS+1,:)) * ZFNEG1(:,IS:IS+1,:) &
1841                        + ZOMN2(:,IS:IS+1,:)/(ZOMN1(:,IS:IS+1,:)+ZOMN2(:,IS:IS+1,:)+ZOMN3(:,IS:IS+1,:)) * ZFNEG2(:,IS:IS+1,:) &
1842                        + ZOMN3(:,IS:IS+1,:)/(ZOMN1(:,IS:IS+1,:)+ZOMN2(:,IS:IS+1,:)+ZOMN3(:,IS:IS+1,:)) * ZFNEG3(:,IS:IS+1,:)) &
1843                       * (0.5-SIGN(0.5,PRVCT(:,IS:IS+1,:)))
1844 !
1845  END IF ! NHALO
1846 !
1847 END IF ! IF(LSOUTH_ll()) 
1848 !
1849 !-------------------------------------------------------------------------------
1850 !*       1.3.   East border
1851 !               ---------------------
1852 !
1853 !! IF(LNORTH_ll()  .AND. .FALSE. ) THEN 
1854 IF( LNORTH_ll() ) THEN 
1855  !-----------------------------------------------------------------------------
1856  ! North border is physical -- IN,IN+1
1857  !-----------------------------------------------------------------------------
1858  SELECT CASE (HLBCY(2)) ! Y direction LBC type on north side
1859
1860  CASE ('CYCL')
1861  !---------------------------------------------------------------------------
1862  ! Periodic boundary condition
1863  !---------------------------------------------------------------------------
1864 !
1865  IF (LSOUTH_ll()  .AND. .FALSE. ) THEN ! South border is physical 
1866
1867  ! Third positive stencil, needs indices i, i+1, i+2
1868  ZFPOS3(:,IN,:)   = 1./6 * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:) - PSRC(:,IN+1,:)) ! Flux IN
1869  ZFPOS3(:,IN+1,:) = 1./6 * (2.0*PSRC(:,IN,:) + 5.0*PSRC(:,IN+1,:) - PSRC(:,IS,:)) ! Flux IN+1
1870  ZBPOS3(:,IN,:)   = 13./12 * (    PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
1871       + 1./4   * (3.0*PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
1872  ZBPOS3(:,IN+1,:) = 13./12 * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2 &
1873       + 1./4   * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2  ! Smoothness indicator IN+1
1874  ZOMP3(:,IN:IN+1,:) = 3./10. / (ZEPS + ZBPOS3(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
1875 !
1876  ! First negative stencil, needs indices i, i+1, i+2
1877  ZFNEG1(:,IN,:)   = 1./6. * (11.0*PSRC(:,IN,:)   - 7.0*PSRC(:,IN+1,:) + 2.0*PSRC(:,IS,:)) ! Flux IN
1878  ZFNEG1(:,IN+1,:) = 1./6. * (11.0*PSRC(:,IN+1,:) - 7.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IN+1
1879  ZBNEG1(:,IN,:)   = 13./12. * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2 & 
1880       + 1./4    * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2  ! Smoothness indicator IN
1881  ZBNEG1(:,IN+1,:) = 13./12. * (    PSRC(:,IN+1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 & 
1882       + 1./4    * (3.0*PSRC(:,IN+1,:) - 4.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2  ! Smoothness indicator IN+1
1883  ZOMN1(:,IN:IN+1,:) = 1./10. / (ZEPS + ZBNEG1(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
1884 !
1885  ! Second negative stencil, needs indices i-1, i, i+1
1886  ZFNEG2(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   - 1.0*PSRC(:,IN+1,:)) ! Flux IN
1887  ZFNEG2(:,IN+1,:) = 1./6. * (2.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IN+1,:) - 1.0*PSRC(:,IS,:)) ! Flux IN+1
1888  ZBNEG2(:,IN,:)   = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
1889       + 1./4   * (PSRC(:,IN-1,:) -                    PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
1890  ZBNEG2(:,IN+1,:) = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2 &
1891       + 1./4   * (PSRC(:,IN,:) -                      PSRC(:,IS,:))**2  ! Smoothness indicator IN+1
1892  ZOMN2(:,IN:IN+1,:) = 3./5. / (ZEPS + ZBNEG2(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
1893 !
1894  ELSEIF(IN<=SIZE(PSRC,2)-3) THEN ! South boundary is proc border, with minimum 3 HALO points on north side
1895
1896  ! Third positive stencil, needs indices i, i+1, i+2
1897  ZFPOS3(:,IN,:)   = 1./6 * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:) - PSRC(:,IN+1,:)) ! Flux IN
1898  ZFPOS3(:,IN+1,:) = 1./6 * (2.0*PSRC(:,IN,:) + 5.0*PSRC(:,IN+1,:) - PSRC(:,IN+2,:)) ! Flux IN+1
1899  ZBPOS3(:,IN,:)   = 13./12 * (    PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
1900       + 1./4   * (3.0*PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
1901  ZBPOS3(:,IN+1,:) = 13./12 * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 &
1902       + 1./4   * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2  ! Smoothness indicator IN+1
1903  ZOMP3(:,IN:IN+1,:) = 3./10. / (ZEPS + ZBPOS3(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
1904 !
1905  ! First negative stencil, needs indices i, i+1, i+2
1906  ZFNEG1(:,IN,:)   = 1./6. * (11.0*PSRC(:,IN,:)   - 7.0*PSRC(:,IN+1,:) + 2.0*PSRC(:,IN+2,:)) ! Flux IN
1907  ZFNEG1(:,IN+1,:) = 1./6. * (11.0*PSRC(:,IN+1,:) - 7.0*PSRC(:,IN+2,:)   + 2.0*PSRC(:,IN+3,:)) ! Flux IN+1
1908  ZBNEG1(:,IN,:)   = 13./12. * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 & 
1909       + 1./4    * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2  ! Smoothness indicator IN
1910  ZBNEG1(:,IN+1,:) = 13./12. * (    PSRC(:,IN+1,:) - 2.0*PSRC(:,IN+2,:) + PSRC(:,IN+3,:))**2 & 
1911       + 1./4    * (3.0*PSRC(:,IN+1,:) - 4.0*PSRC(:,IN+2,:) + PSRC(:,IN+3,:))**2  ! Smoothness indicator IN+1
1912  ZOMN1(:,IN:IN+1,:) = 1./10. / (ZEPS + ZBNEG1(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
1913 !
1914  ! Second negative stencil, needs indices i-1, i, i+1
1915  ZFNEG2(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   - 1.0*PSRC(:,IN+1,:)) ! Flux IN
1916  ZFNEG2(:,IN+1,:) = 1./6. * (2.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IN+1,:) - 1.0*PSRC(:,IN+2,:)) ! Flux IN+1
1917  ZBNEG2(:,IN,:)   = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
1918       + 1./4   * (PSRC(:,IN-1,:) -                    PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
1919  ZBNEG2(:,IN+1,:) = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 &
1920       + 1./4   * (PSRC(:,IN,:) -                      PSRC(:,IN+2,:))**2  ! Smoothness indicator IN+1
1921  ZOMN2(:,IN:IN+1,:) = 3./5. / (ZEPS + ZBNEG2(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
1922 !
1923  ELSE ! South boundary is proc border, with NHALO < 3 on south side
1924   PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side'
1925   CALL ABORT
1926   STOP  ' Error in advec_weno_k_3_aux.f90 '
1927  ENDIF
1928 !
1929  ! First positive stencil, needs indices i-3, i-2, i-1 
1930  ZFPOS1(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN-3,:) - 7.0*PSRC(:,IN-2,:) + 11.0*PSRC(:,IN-1,:)) ! Flux IN
1931  ZFPOS1(:,IN+1,:) = 1./6. * (2.0*PSRC(:,IN-2,:) - 7.0*PSRC(:,IN-1,:) + 11.0*PSRC(:,IN,:)) ! Flux IN+1
1932  ZBPOS1(:,IN,:)   = 13./12. * (PSRC(:,IN-3,:) - 2.0*PSRC(:,IN-2,:) +     PSRC(:,IN-1,:))**2 & 
1933         + 1./4    * (PSRC(:,IN-3,:) - 4.0*PSRC(:,IN-2,:) + 3.0*PSRC(:,IN-1,:))**2  ! Smoothness indicator IN
1934  ZBPOS1(:,IN+1,:) = 13./12. * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) +     PSRC(:,IN,:))**2 & 
1935         + 1./4    * (PSRC(:,IN-2,:) - 4.0*PSRC(:,IN-1,:) + 3.0*PSRC(:,IN,:))**2  ! Smoothness indicator IN+1
1936  ZOMP1(:,IN:IN+1,:) = 1./10. / (ZEPS + ZBPOS1(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
1937 !
1938  ! Second positive stencil, needs indices i-2, i-1, i
1939  ZFPOS2(:,IN,:)   = 1./6. * (-1.0*PSRC(:,IN-2,:) + 5.0*PSRC(:,IN-1,:) + 2.0*PSRC(:,IN,:)) ! Flux IN
1940  ZFPOS2(:,IN+1,:) = 1./6. * (-1.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   + 2.0*PSRC(:,IN+1,:)) ! Flux IN+1
1941  ZBPOS2(:,IN,:)   = 13./12 * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) + PSRC(:,IN,:))**2 &
1942       + 1./4   * (PSRC(:,IN-2,:) -                      PSRC(:,IN,:))**2 ! Smoothness indicator IN
1943  ZBPOS2(:,IN+1,:) = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
1944       + 1./4   * (PSRC(:,IN-1,:) -                   PSRC(:,IN+1,:))**2 ! Smoothness indicator IN+1
1945  ZOMP2(:,IN:IN+1,:)  = 3./5. / (ZEPS + ZBPOS2(:,IN:IN+1,:))**2  ! Non-normalized weight IN,IN+1
1946 !
1947  ! Third negative stencil, needs indices i-2, i-1, i
1948  ZFNEG3(:,IN,:)   = 1./6 * (-1.0*PSRC(:,IN-2,:) + 5.0*PSRC(:,IN-1,:) + 2.0*PSRC(:,IN,:)) ! Flux IN
1949  ZFNEG3(:,IN+1,:) = 1./6 * (-1.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   + 2.0*PSRC(:,IN+1,:)) ! Flux IN+1
1950  ZBNEG3(:,IN,:)   = 13./12 * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) +     PSRC(:,IN,:))**2 &
1951         + 1./4   * (PSRC(:,IN-2,:) - 4.0*PSRC(:,IN-1,:) + 3.0*PSRC(:,IN,:))**2 ! Smoothness indicator IN
1952  ZBNEG3(:,IN+1,:) = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) +     PSRC(:,IN+1,:))**2 &
1953         + 1./4   * (PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + 3.0*PSRC(:,IN+1,:))**2 ! Smoothness indicator IN+1
1954  ZOMN3(:,IN:IN+1,:) = 3./10. / (ZEPS + ZBNEG3(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
1955 !
1956  ! ----- Total flux -----
1957
1958  PR(:,IN:IN+1,:) = ( ZOMP1(:,IN:IN+1,:)/(ZOMP1(:,IN:IN+1,:)+ZOMP2(:,IN:IN+1,:)+ZOMP3(:,IN:IN+1,:)) * ZFPOS1(:,IN:IN+1,:) &
1959                        + ZOMP2(:,IN:IN+1,:)/(ZOMP1(:,IN:IN+1,:)+ZOMP2(:,IN:IN+1,:)+ZOMP3(:,IN:IN+1,:)) * ZFPOS2(:,IN:IN+1,:) & 
1960                        + ZOMP3(:,IN:IN+1,:)/(ZOMP1(:,IN:IN+1,:)+ZOMP2(:,IN:IN+1,:)+ZOMP3(:,IN:IN+1,:)) * ZFPOS3(:,IN:IN+1,:)) &
1961                       * (0.5+SIGN(0.5,PRVCT(:,IN:IN+1,:))) &
1962                     + ( ZOMN1(:,IN:IN+1,:)/(ZOMN1(:,IN:IN+1,:)+ZOMN2(:,IN:IN+1,:)+ZOMN3(:,IN:IN+1,:)) * ZFNEG1(:,IN:IN+1,:) &
1963                        + ZOMN2(:,IN:IN+1,:)/(ZOMN1(:,IN:IN+1,:)+ZOMN2(:,IN:IN+1,:)+ZOMN3(:,IN:IN+1,:)) * ZFNEG2(:,IN:IN+1,:) &
1964                        + ZOMN3(:,IN:IN+1,:)/(ZOMN1(:,IN:IN+1,:)+ZOMN2(:,IN:IN+1,:)+ZOMN3(:,IN:IN+1,:)) * ZFNEG3(:,IN:IN+1,:)) &
1965                       * (0.5-SIGN(0.5,PRVCT(:,IN:IN+1,:)))
1966 !
1967 !
1968  CASE ('OPEN','WALL','NEST') 
1969  !---------------------------------------------------------------------------
1970  ! Open, or Wall, or Nest boundary condition => WENO order reduction
1971  !---------------------------------------------------------------------------
1972 !
1973  ! WENO scheme order 1, IN+1
1974     PR(:,IN+1,:) = PSRC(:,IN,:)  * (0.5+SIGN(0.5,PRVCT(:,IN+1,:))) + &
1975                    PSRC(:,IN+1,:) * (0.5-SIGN(0.5,PRVCT(:,IN+1,:)))
1976 !
1977 !   ! WENO scheme order 3, IN
1978     ZFPOS1(:,IN,:) = 0.5 * (3.0*PSRC(:,IN-1,:) - PSRC(:,IN-2,:)) ! First positive flux
1979     ZFPOS2(:,IN,:) = 0.5 * ( PSRC(:,IN-1,:) + PSRC(:,IN,:)) ! Second positive flux
1980     ZBPOS1(:,IN,:) = (PSRC(:,IN-1,:) - PSRC(:,IN-2,:))**2 ! First positive smoothness indicator
1981     ZBPOS2(:,IN,:) = (PSRC(:,IN,:)   - PSRC(:,IN-1,:))**2 ! Second positive smoothness indicator
1982 !
1983     ZFNEG1(:,IN,:) = 0.5 * (3.0*PSRC(:,IN,:) - PSRC(:,IN+1,:)) ! First negative flux
1984     ZFNEG2(:,IN,:) = 0.5 * ( PSRC(:,IN,:) + PSRC(:,IN-1,:)) ! Second negative flux
1985     ZBNEG1(:,IN,:) = (PSRC(:,IN,:)   - PSRC(:,IN+1,:))**2 ! First negative smoothness indicator
1986     ZBNEG2(:,IN,:) = (PSRC(:,IN-1,:) - PSRC(:,IN,:))**2  ! Second negative smoothness indicator
1987 !
1988     ZOMP1(:,IN,:) = 1./3. / (ZEPS + ZBPOS1(:,IN,:))**2 ! First positive non-normalized weight
1989     ZOMP2(:,IN,:) = 2./3. / (ZEPS + ZBPOS2(:,IN,:))**2 ! Second positive non-normalized weight
1990     ZOMN1(:,IN,:) = 1./3. / (ZEPS + ZBNEG1(:,IN,:))**2 ! First negative non-normalized weight
1991     ZOMN2(:,IN,:) = 2./3. / (ZEPS + ZBNEG2(:,IN,:))**2 ! Second negative non-normalized weight
1992
1993     PR(:,IN,:) = (ZOMP2(:,IN,:)/(ZOMP1(:,IN,:)+ZOMP2(:,IN,:))*ZFPOS2(:,IN,:) + &
1994                  (ZOMP1(:,IN,:)/(ZOMP1(:,IN,:)+ZOMP2(:,IN,:))*ZFPOS1(:,IN,:))) &
1995      *(0.5+SIGN(0.5,PRVCT(:,IN,:))) + &
1996      (ZOMN2(:,IN,:)/(ZOMN1(:,IN,:)+ZOMN2(:,IN,:))*ZFNEG2(:,IN,:) + &
1997      (ZOMN1(:,IN,:)/(ZOMN1(:,IN,:)+ZOMN2(:,IN,:))*ZFNEG1(:,IN,:))) &
1998      *(0.5-SIGN(0.5,PRVCT(:,IN,:)))  ! Total flux
1999 !
2000  END SELECT ! SELECT CASE (HLBCX(2)) ! X direction LBC type on right side
2001 !
2002 ELSE
2003  !-----------------------------------------------------------------------------
2004  ! North border is proc border -- IN,IN+1
2005  !-----------------------------------------------------------------------------
2006 !
2007  IF (NHALO<3) THEN
2008  PRINT *,'ERROR : WENO5/north-int not parallelisable with NHALO < 3' 
2009  CALL ABORT
2010  STOP  ' Error in advec_weno_k_3_aux.f90 '
2011  ELSEIF (NHALO>=3) THEN
2012  !---------------------------------------------------------------------------
2013  ! NHALO >= 3 => WENO5 for all boundary points
2014  !---------------------------------------------------------------------------
2015
2016  ! ----- Positive fluxes -----
2017 !
2018  ! First positive stencil, needs indices i-3, i-2, i-1 
2019  ZFPOS1(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN-3,:) - 7.0*PSRC(:,IN-2,:) + 11.0*PSRC(:,IN-1,:)) ! Flux IN
2020  ZFPOS1(:,IN+1,:) = 1./6. * (2.0*PSRC(:,IN-2,:) - 7.0*PSRC(:,IN-1,:) + 11.0*PSRC(:,IN,:)) ! Flux IN+1
2021  ZBPOS1(:,IN,:)   = 13./12. * (PSRC(:,IN-3,:) - 2.0*PSRC(:,IN-2,:) +     PSRC(:,IN-1,:))**2 & 
2022         + 1./4    * (PSRC(:,IN-3,:) - 4.0*PSRC(:,IN-2,:) + 3.0*PSRC(:,IN-1,:))**2  ! Smoothness indicator IN
2023  ZBPOS1(:,IN+1,:) = 13./12. * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) +     PSRC(:,IN,:))**2 & 
2024         + 1./4    * (PSRC(:,IN-2,:) - 4.0*PSRC(:,IN-1,:) + 3.0*PSRC(:,IN,:))**2  ! Smoothness indicator IN+1
2025  ZOMP1(:,IN:IN+1,:) = 1./10. / (ZEPS + ZBPOS1(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
2026 !
2027  ! Second positive stencil, needs indices i-2, i-1, i
2028  ZFPOS2(:,IN,:)   = 1./6. * (-1.0*PSRC(:,IN-2,:) + 5.0*PSRC(:,IN-1,:) + 2.0*PSRC(:,IN,:)) ! Flux IN
2029  ZFPOS2(:,IN+1,:) = 1./6. * (-1.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   + 2.0*PSRC(:,IN+1,:)) ! Flux IN+1
2030  ZBPOS2(:,IN,:)   = 13./12 * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) + PSRC(:,IN,:))**2 &
2031       + 1./4   * (PSRC(:,IN-2,:) -                      PSRC(:,IN,:))**2 ! Smoothness indicator IN
2032  ZBPOS2(:,IN+1,:) = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2033       + 1./4   * (PSRC(:,IN-1,:) -                   PSRC(:,IN+1,:))**2 ! Smoothness indicator IN+1
2034  ZOMP2(:,IN:IN+1,:)  = 3./5. / (ZEPS + ZBPOS2(:,IN:IN+1,:))**2  ! Non-normalized weight IN,IN+1
2035
2036  ! Third positive stencil, needs indices i, i+1, i+2
2037  ZFPOS3(:,IN,:)   = 1./6 * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:) - PSRC(:,IN+1,:)) ! Flux IN
2038  ZFPOS3(:,IN+1,:) = 1./6 * (2.0*PSRC(:,IN,:) + 5.0*PSRC(:,IN+1,:) - PSRC(:,IN+2,:)) ! Flux IN+1
2039  ZBPOS3(:,IN,:)   = 13./12 * (    PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2040       + 1./4   * (3.0*PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
2041  ZBPOS3(:,IN+1,:) = 13./12 * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 &
2042       + 1./4   * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2  ! Smoothness indicator IN+1
2043  ZOMP3(:,IN:IN+1,:) = 3./10. / (ZEPS + ZBPOS3(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
2044 !
2045  ! ----- Negative fluxes ----- 
2046 !
2047  ! First negative stencil, needs indices i, i+1, i+2
2048  ZFNEG1(:,IN,:)   = 1./6. * (11.0*PSRC(:,IN,:)   - 7.0*PSRC(:,IN+1,:) + 2.0*PSRC(:,IN+2,:)) ! Flux IN
2049  ZFNEG1(:,IN+1,:) = 1./6. * (11.0*PSRC(:,IN+1,:) - 7.0*PSRC(:,IN+2,:)   + 2.0*PSRC(:,IN+3,:)) ! Flux IN+1
2050  ZBNEG1(:,IN,:)   = 13./12. * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 & 
2051       + 1./4    * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2  ! Smoothness indicator IN
2052  ZBNEG1(:,IN+1,:) = 13./12. * (    PSRC(:,IN+1,:) - 2.0*PSRC(:,IN+2,:) + PSRC(:,IN+3,:))**2 & 
2053       + 1./4    * (3.0*PSRC(:,IN+1,:) - 4.0*PSRC(:,IN+2,:) + PSRC(:,IN+3,:))**2  ! Smoothness indicator IN+1
2054  ZOMN1(:,IN:IN+1,:) = 1./10. / (ZEPS + ZBNEG1(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
2055 !
2056  ! Second negative stencil, needs indices i-1, i, i+1
2057  ZFNEG2(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   - 1.0*PSRC(:,IN+1,:)) ! Flux IN
2058  ZFNEG2(:,IN+1,:) = 1./6. * (2.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IN+1,:) - 1.0*PSRC(:,IN+2,:)) ! Flux IN+1
2059  ZBNEG2(:,IN,:)   = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2060       + 1./4   * (PSRC(:,IN-1,:) -                    PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
2061  ZBNEG2(:,IN+1,:) = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 &
2062       + 1./4   * (PSRC(:,IN,:) -                      PSRC(:,IN+2,:))**2  ! Smoothness indicator IN+1
2063  ZOMN2(:,IN:IN+1,:) = 3./5. / (ZEPS + ZBNEG2(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
2064 !
2065  ! Third negative stencil, needs indices i-2, i-1, i
2066  ZFNEG3(:,IN,:)   = 1./6 * (-1.0*PSRC(:,IN-2,:) + 5.0*PSRC(:,IN-1,:) + 2.0*PSRC(:,IN,:)) ! Flux IN
2067  ZFNEG3(:,IN+1,:) = 1./6 * (-1.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   + 2.0*PSRC(:,IN+1,:)) ! Flux IN+1
2068  ZBNEG3(:,IN,:)   = 13./12 * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) +     PSRC(:,IN,:))**2 &
2069         + 1./4   * (PSRC(:,IN-2,:) - 4.0*PSRC(:,IN-1,:) + 3.0*PSRC(:,IN,:))**2 ! Smoothness indicator IN
2070  ZBNEG3(:,IN+1,:) = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) +     PSRC(:,IN+1,:))**2 &
2071         + 1./4   * (PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + 3.0*PSRC(:,IN+1,:))**2 ! Smoothness indicator IN+1
2072  ZOMN3(:,IN:IN+1,:) = 3./10. / (ZEPS + ZBNEG3(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
2073 !
2074  ! ----- Total flux -----
2075
2076  PR(:,IN:IN+1,:) = ( ZOMP1(:,IN:IN+1,:)/(ZOMP1(:,IN:IN+1,:)+ZOMP2(:,IN:IN+1,:)+ZOMP3(:,IN:IN+1,:)) * ZFPOS1(:,IN:IN+1,:) &
2077                        + ZOMP2(:,IN:IN+1,:)/(ZOMP1(:,IN:IN+1,:)+ZOMP2(:,IN:IN+1,:)+ZOMP3(:,IN:IN+1,:)) * ZFPOS2(:,IN:IN+1,:) & 
2078                        + ZOMP3(:,IN:IN+1,:)/(ZOMP1(:,IN:IN+1,:)+ZOMP2(:,IN:IN+1,:)+ZOMP3(:,IN:IN+1,:)) * ZFPOS3(:,IN:IN+1,:)) &
2079                       * (0.5+SIGN(0.5,PRVCT(:,IN:IN+1,:))) &
2080                     + ( ZOMN1(:,IN:IN+1,:)/(ZOMN1(:,IN:IN+1,:)+ZOMN2(:,IN:IN+1,:)+ZOMN3(:,IN:IN+1,:)) * ZFNEG1(:,IN:IN+1,:) &
2081                        + ZOMN2(:,IN:IN+1,:)/(ZOMN1(:,IN:IN+1,:)+ZOMN2(:,IN:IN+1,:)+ZOMN3(:,IN:IN+1,:)) * ZFNEG2(:,IN:IN+1,:) &
2082                        + ZOMN3(:,IN:IN+1,:)/(ZOMN1(:,IN:IN+1,:)+ZOMN2(:,IN:IN+1,:)+ZOMN3(:,IN:IN+1,:)) * ZFNEG3(:,IN:IN+1,:)) &
2083                       * (0.5-SIGN(0.5,PRVCT(:,IN:IN+1,:)))
2084 !
2085  END IF ! NHALO
2086 !
2087 END IF ! IF(LNORTH_ll()) 
2088 !-------------------------------------------------------------------------------
2089 !
2090 PR = PR * PRVCT ! Add contravariant flux
2091 !
2092 END SUBROUTINE ADVEC_WENO_K_3_MY
2093 !
2094 !-------------------------------------------------------------------------------
2095 !
2096 !     #############################################################
2097       SUBROUTINE ADVEC_WENO_K_3_VY(HLBCY, PSRC, PRVCT, PR)
2098 !     #############################################################
2099 !!
2100 !!**** Computes PRVCT * PVT. Upstream fluxes of V in Y direction.  
2101 !!     Input PVT is on V Grid 'ie' (i,j,k) based on VGRID reference
2102 !!     Output PR is on mass Grid 'ie' (i,j+1/2,k) based on VGRID reference
2103 !!
2104 !!    AUTHOR
2105 !!    ------
2106 !!    F. Visentin   *CNRS/LA*
2107 !!
2108 !!    MODIFICATIONS
2109 !!    -------------
2110 !! T. Lunet 02/10/2014:  Correction of periodic boudary conditions
2111 !!       Change of structure in order to adapt WENO to NHALOK
2112 !!       Suppression of second layer HALO pointers
2113 !!       Complete code documentation
2114 !!      J.Escobar : 02/10/2015 : correction on CYCL/OPEN boundaries
2115 !!
2116 !-------------------------------------------------------------------------------
2117 !
2118 USE MODE_ll
2119 USE MODD_LUNIT
2120 USE MODD_CONF
2121 !
2122 IMPLICIT NONE
2123 !
2124 !*       0.1   Declarations of dummy arguments :
2125 !
2126 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY  ! Y direction LBC type
2127 !
2128 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on U grid at t
2129 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRVCT ! contrav. comp. on MASS GRID
2130 !
2131 ! output source term
2132 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
2133 !
2134 !*       0.2   Declarations of local variables :
2135 !
2136 INTEGER :: IIB,IJB    ! Begining useful area in x,y,z directions
2137 INTEGER :: IIE,IJE    ! End useful area in x,y,z directions
2138 INTEGER::  IS,IN    ! Physical boundary index
2139 !
2140 INTEGER:: ILUOUT,IRESP   ! for prints
2141 !
2142 ! intermediate reconstruction fluxes for positive wind case
2143 !
2144 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFPOS1, ZFPOS2, ZFPOS3
2145 !
2146 ! intermediate reconstruction fluxes for negative wind case
2147 !
2148 !
2149 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFNEG1, ZFNEG2, ZFNEG3
2150 !
2151 ! smoothness indicators for positive wind case
2152 !
2153 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBPOS1, ZBPOS2, ZBPOS3
2154 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBNEG1, ZBNEG2, ZBNEG3
2155 !
2156 ! WENO weights
2157 !
2158 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: ZOMP1, ZOMP2, ZOMP3
2159 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: ZOMN1, ZOMN2, ZOMN3
2160 !
2161 ! EPSILON for weno weights calculation
2162
2163 REAL, PARAMETER :: ZEPS = 1.0E-15
2164 !
2165 !----------------------------------------------------------------------------
2166 !
2167 !*       0.3.     COMPUTES THE DOMAIN DIMENSIONS
2168 !                 ------------------------------
2169 !
2170 CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
2171 !
2172 !--------------------------------------------------------------------------
2173 !
2174 !*       0.4.   INITIALIZE THE FIELD 
2175 !               ---------------------
2176 !
2177 PR(:,:,:) = 0.0
2178 !
2179 ZFPOS1 = 0.0
2180 ZFPOS2 = 0.0
2181 ZFPOS3 = 0.0
2182 ZFNEG1 = 0.0
2183 ZFNEG2 = 0.0
2184 ZFNEG3 = 0.0
2185 ZBPOS1 = 0.0
2186 ZBPOS2 = 0.0
2187 ZBPOS3 = 0.0
2188 ZBNEG1 = 0.0
2189 ZBNEG2 = 0.0
2190 ZBNEG3 = 0.0
2191 ZOMP1  = 0.0
2192 ZOMP2  = 0.0
2193 ZOMP3  = 0.0
2194 ZOMN1  = 0.0
2195 ZOMN2  = 0.0
2196 ZOMN3  = 0.0
2197 !
2198 !-------------------------------------------------------------------------------
2199 !-------------------------------------------------------------------------------
2200 !*       1.1.   Interior Fluxes 
2201 !              ---------------------
2202 IS=IJB
2203 IN=IJE
2204 !
2205 !-------------------------------------------------------------------------------
2206 ! Flux calculation in the physical domain far enough from the boundary 
2207 ! WENO scheme order 5, IS+1 -> IN-2
2208 ! Computation at the mass point on Vgrid v(i+1/2,j,k)
2209 !-------------------------------------------------------------------------------
2210 !
2211 ! ----- Positive fluxes -----
2212 !
2213 ! First positive stencil, needs indices i-2, i-1, i
2214 ZFPOS1(:,IS+1:IN-2,:) = 1./6.   * (2.0*PSRC(:,IS-1:IN-4,:) - 7.0*PSRC(:,IS:IN-3,:) + 11.0*PSRC(:,IS+1:IN-2,:))   ! Flux
2215 ZBPOS1(:,IS+1:IN-2,:) = 13./12. * (    PSRC(:,IS-1:IN-4,:) - 2.0*PSRC(:,IS:IN-3,:) +      PSRC(:,IS+1:IN-2,:))**2 & 
2216       + 1./4    * (    PSRC(:,IS-1:IN-4,:) - 4.0*PSRC(:,IS:IN-3,:) + 3.0* PSRC(:,IS+1:IN-2,:))**2  ! Smoothness indicator
2217 ZOMP1(:,IS+1:IN-2,:)  = 1./10. /  (ZEPS + ZBPOS1(:,IS+1:IN-2,:))**2             ! Non-normalized weight
2218 !
2219 ! Second positive stencil, needs indices i-1, i, i+1
2220 ZFPOS2(:,IS+1:IN-2,:) = 1./6.  * (-1.0*PSRC(:,IS:IN-3,:) + 5.0*PSRC(:,IS+1:IN-2,:) + 2.0*PSRC(:,IS+2:IN-1,:))  ! Flux
2221 ZBPOS2(:,IS+1:IN-2,:) = 13./12 * (     PSRC(:,IS:IN-3,:) - 2.0*PSRC(:,IS+1:IN-2,:) +     PSRC(:,IS+2:IN-1,:))**2 &
2222       + 1./4   * (     PSRC(:,IS:IN-3,:) -                               PSRC(:,IS+2:IN-1,:))**2 ! Smoothness indicator
2223 ZOMP2(:,IS+1:IN-2,:)  = 3./5. /  (ZEPS + ZBPOS2(:,IS+1:IN-2,:))**2             ! Non-normalized weight
2224 !
2225 ! Third positive stencil, needs indices i, i+1, i+2
2226 ZFPOS3(:,IS+1:IN-2,:) = 1./6   * (2.0*PSRC(:,IS+1:IN-2,:) + 5.0*PSRC(:,IS+2:IN-1,:) - PSRC(:,IS+3:IN,:))  ! Flux
2227 ZBPOS3(:,IS+1:IN-2,:) = 13./12 * ( PSRC(:,IS+1:IN-2,:) - 2.0*PSRC(:,IS+2:IN-1,:) + PSRC(:,IS+3:IN,:))**2 &
2228       + 1./4   * (3.0*PSRC(:,IS+1:IN-2,:) - 4.0*PSRC(:,IS+2:IN-1,:) + PSRC(:,IS+3:IN,:))**2 ! Smoothness indicator
2229 ZOMP3(:,IS+1:IN-2,:)  = 3./10. / (ZEPS + ZBPOS3(:,IS+1:IN-2,:))**2           ! Non-normalized weight
2230 !
2231 ! ----- Negative fluxes ----- 
2232 !
2233 ! First negative stencil, needs indices i+1, i+2, i+3
2234 ZFNEG1(:,IS+1:IN-2,:) = 1./6.   * (11.0*PSRC(:,IS+2:IN-1,:) - 7.0*PSRC(:,IS+3:IN,:) + 2.0*PSRC(:,IS+4:IN+1,:))   ! Flux
2235 ZBNEG1(:,IS+1:IN-2,:) = 13./12. * (     PSRC(:,IS+2:IN-1,:) - 2.0*PSRC(:,IS+3:IN,:) +     PSRC(:,IS+4:IN+1,:))**2 & 
2236       + 1./4    * (3.0* PSRC(:,IS+2:IN-1,:) - 4.0*PSRC(:,IS+3:IN,:) +     PSRC(:,IS+4:IN+1,:))**2  ! Smoothness indicator
2237 ZOMN1(:,IS+1:IN-2,:)  = 1./10. /  (ZEPS + ZBNEG1(:,IS+1:IN-2,:))**2             ! Non-normalized weight
2238 !
2239 ! Second negative stencil, needs indices i, i+1, i+2
2240 ZFNEG2(:,IS+1:IN-2,:) = 1./6.  * (2.0*PSRC(:,IS+1:IN-2,:) + 5.0*PSRC(:,IS+2:IN-1,:) - 1.0*PSRC(:,IS+3:IN,:))  ! Flux
2241 ZBNEG2(:,IS+1:IN-2,:) = 13./12 * (    PSRC(:,IS+1:IN-2,:) - 2.0*PSRC(:,IS+2:IN-1,:) +     PSRC(:,IS+3:IN,:))**2 &
2242       + 1./4   * (    PSRC(:,IS+1:IN-2,:) -                               PSRC(:,IS+3:IN,:))**2 ! Smoothness indicator
2243 ZOMN2(:,IS+1:IN-2,:)  = 3./5. /  (ZEPS + ZBNEG2(:,IS+1:IN-2,:))**2            ! Non-normalized weight
2244 !
2245 ! Third negative stencil, needs indices i-1, i, i+1
2246 ZFNEG3(:,IS+1:IN-2,:) = 1./6   * (-1.0*PSRC(:,IS:IN-3,:) + 5.0*PSRC(:,IS+1:IN-2,:) + 2.0*PSRC(:,IS+2:IN-1,:))  ! Flux
2247 ZBNEG3(:,IS+1:IN-2,:) = 13./12 * (  PSRC(:,IS:IN-3,:) - 2.0*PSRC(:,IS+1:IN-2,:) +     PSRC(:,IS+2:IN-1,:))**2 &
2248       + 1./4   * (     PSRC(:,IS:IN-3,:) - 4.0*PSRC(:,IS+1:IN-2,:) + 3.0*PSRC(:,IS+2:IN-1,:))**2 ! Smoothness indicator
2249 ZOMN3(:,IS+1:IN-2,:)  = 3./10. / (ZEPS + ZBNEG3(:,IS+1:IN-2,:))**2             ! Non-normalized weight
2250 !
2251 !
2252 ! ----- Total flux -----
2253 !
2254 PR(:,IS+1:IN-2,:) = (ZOMP1(:,IS+1:IN-2,:)/(ZOMP1(:,IS+1:IN-2,:)+ZOMP2(:,IS+1:IN-2,:)+ZOMP3(:,IS+1:IN-2,:)) &
2255            * ZFPOS1(:,IS+1:IN-2,:) + &
2256                       ZOMP2(:,IS+1:IN-2,:)/(ZOMP1(:,IS+1:IN-2,:)+ZOMP2(:,IS+1:IN-2,:)+ZOMP3(:,IS+1:IN-2,:)) &
2257            * ZFPOS2(:,IS+1:IN-2,:) + & 
2258                       ZOMP3(:,IS+1:IN-2,:)/(ZOMP1(:,IS+1:IN-2,:)+ZOMP2(:,IS+1:IN-2,:)+ZOMP3(:,IS+1:IN-2,:)) &
2259            * ZFPOS3(:,IS+1:IN-2,:)) &
2260                     * (0.5+SIGN(0.5,PRVCT(:,IS+1:IN-2,:))) &
2261                   + (ZOMN1(:,IS+1:IN-2,:)/(ZOMN1(:,IS+1:IN-2,:)+ZOMN2(:,IS+1:IN-2,:)+ZOMN3(:,IS+1:IN-2,:)) &
2262            * ZFNEG1(:,IS+1:IN-2,:)  &
2263                      + ZOMN2(:,IS+1:IN-2,:)/(ZOMN1(:,IS+1:IN-2,:)+ZOMN2(:,IS+1:IN-2,:)+ZOMN3(:,IS+1:IN-2,:)) &
2264            * ZFNEG2(:,IS+1:IN-2,:)  &
2265                      + ZOMN3(:,IS+1:IN-2,:)/(ZOMN1(:,IS+1:IN-2,:)+ZOMN2(:,IS+1:IN-2,:)+ZOMN3(:,IS+1:IN-2,:)) &
2266            * ZFNEG3(:,IS+1:IN-2,:))  & 
2267                     * (0.5-SIGN(0.5,PRVCT(:,IS+1:IN-2,:)))
2268 !
2269 !-------------------------------------------------------------------------------
2270 !*       1.2.   South border
2271 !               ---------------------
2272 !
2273 !! IF(LSOUTH_ll()  .AND. .FALSE. ) THEN 
2274 IF(LSOUTH_ll() ) THEN 
2275  !-----------------------------------------------------------------------------
2276  ! South border is physical -- IS,IS-1
2277  !-----------------------------------------------------------------------------
2278  SELECT CASE (HLBCY(1)) ! Y direction LBC type on south side
2279
2280  CASE ('CYCL')
2281  !---------------------------------------------------------------------------
2282  ! Periodic boundary condition
2283  !---------------------------------------------------------------------------
2284 !
2285  IF(LNORTH_ll()  .AND. .FALSE. ) THEN ! North border is physical 
2286 !
2287  ! First positive stencil, needs indices i-2, i-1, i 
2288  ZFPOS1(:,IS,:)   = 1./6. * (2.0*PSRC(:,IN,:)   - 7.0*PSRC(:,IS-1,:) + 11.0*PSRC(:,IS,:)) ! Flux IS
2289  ZFPOS1(:,IS-1,:) = 1./6. * (2.0*PSRC(:,IN-1,:) - 7.0*PSRC(:,IN,:)   + 11.0*PSRC(:,IS-1,:)) ! Flux IS-1
2290  ZBPOS1(:,IS,:)   = 13./12. * (PSRC(:,IN,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 & 
2291         + 1./4    * (PSRC(:,IN,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2   ! Smoothness indicator IS
2292  ZBPOS1(:,IS-1,:) = 13./12. * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) +     PSRC(:,IS-1,:))**2 & 
2293         + 1./4    * (PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + 3.0*PSRC(:,IS-1,:))**2  ! Smoothness indicator IS-1
2294  ZOMP1(:,IS-1:IS,:)  = 1./10. / (ZEPS + ZBPOS1(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2295 !
2296  ! Second positive stencil, needs indices i-1, i, i+1
2297  ZFPOS2(:,IS,:)   = 1./6.* (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS
2298  ZFPOS2(:,IS-1,:) = 1./6.* (-1.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS-1
2299  ZBPOS2(:,IS,:)   = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
2300       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
2301  ZBPOS2(:,IS-1,:) = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IS-1,:) + PSRC(:,IS,:))**2 &
2302       + 1./4   * (PSRC(:,IN,:) -                      PSRC(:,IS,:))**2  ! Smoothness indicator IS-1
2303  ZOMP2(:,IS-1:IS,:)  = 3./5. / (ZEPS + ZBPOS2(:,IS-1:IS,:))**2  ! Non-normalized weight IS,IS-1
2304 !
2305  ! Third negative stencil, needs indices i-1, i, i+1
2306  ZFNEG3(:,IS,:)   = 1./6 * (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS
2307  ZFNEG3(:,IS-1,:) = 1./6 * (-1.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS-1
2308  ZBNEG3(:,IS,:)   = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) +     PSRC(:,IS+1,:))**2 &
2309         + 1./4   * (PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + 3.0*PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
2310  ZBNEG3(:,IS-1,:) = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 &
2311         + 1./4   * (PSRC(:,IN,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2 ! Smoothness indicator IS-1
2312  ZOMN3(:,IS-1:IS,:) = 3./10. / (ZEPS + ZBNEG3(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2313
2314  ELSEIF(IS>3) THEN ! North boundary is proc border, with minimum 3 HALO points on south side
2315 !
2316  ! First positive stencil, needs indices i-2, i-1, i 
2317  ZFPOS1(:,IS,:)   = 1./6. * (2.0*PSRC(:,IS-2,:)   - 7.0*PSRC(:,IS-1,:) + 11.0*PSRC(:,IS,:)) ! Flux IS
2318  ZFPOS1(:,IS-1,:) = 1./6. * (2.0*PSRC(:,IS+3,:) - 7.0*PSRC(:,IS-2,:)   + 11.0*PSRC(:,IS-1,:)) ! Flux IS-1
2319  ZBPOS1(:,IS,:)   = 13./12. * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 & 
2320         + 1./4    * (PSRC(:,IS-2,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2   ! Smoothness indicator IS
2321  ZBPOS1(:,IS-1,:) = 13./12. * (PSRC(:,IS-3,:) - 2.0*PSRC(:,IS-2,:) +     PSRC(:,IS-1,:))**2 & 
2322         + 1./4    * (PSRC(:,IS-3,:) - 4.0*PSRC(:,IS-2,:) + 3.0*PSRC(:,IS-1,:))**2  ! Smoothness indicator IS-1
2323  ZOMP1(:,IS-1:IS,:)  = 1./10. / (ZEPS + ZBPOS1(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2324 !
2325  ! Second positive stencil, needs indices i-1, i, i+1
2326  ZFPOS2(:,IS,:)   = 1./6.* (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS
2327  ZFPOS2(:,IS-1,:) = 1./6.* (-1.0*PSRC(:,IS-2,:)   + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS-1
2328  ZBPOS2(:,IS,:)   = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
2329       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
2330  ZBPOS2(:,IS-1,:) = 13./12 * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) + PSRC(:,IS,:))**2 &
2331       + 1./4   * (PSRC(:,IS-2,:) -                      PSRC(:,IS,:))**2  ! Smoothness indicator IS-1
2332  ZOMP2(:,IS-1:IS,:)  = 3./5. / (ZEPS + ZBPOS2(:,IS-1:IS,:))**2  ! Non-normalized weight IS,IS-1
2333 !
2334  ! Third negative stencil, needs indices i-1, i, i+1
2335  ZFNEG3(:,IS,:)   = 1./6 * (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS
2336  ZFNEG3(:,IS-1,:) = 1./6 * (-1.0*PSRC(:,IS-2,:)   + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS-1
2337  ZBNEG3(:,IS,:)   = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) +     PSRC(:,IS+1,:))**2 &
2338         + 1./4   * (PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + 3.0*PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
2339  ZBNEG3(:,IS-1,:) = 13./12 * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 &
2340         + 1./4   * (PSRC(:,IS-2,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2 ! Smoothness indicator IS-1
2341  ZOMN3(:,IS-1:IS,:) = 3./10. / (ZEPS + ZBNEG3(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2342
2343  ELSE ! North boundary is proc border, with NHALO < 3 on south side
2344   PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side'
2345   CALL ABORT
2346   STOP  ' Error in advec_weno_k_3_aux.f90 '
2347  ENDIF
2348
2349  ! Third positive stencil, needs indices i, i+1, i+2
2350  ZFPOS3(:,IS,:)   = 1./6 * (2.0*PSRC(:,IS,:) + 5.0*PSRC(:,IS+1,:) - PSRC(:,IS+2,:)) ! Flux IS
2351  ZFPOS3(:,IS-1,:) = 1./6 * (2.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:) - PSRC(:,IS+1,:)) ! Flux IS-1
2352  ZBPOS3(:,IS,:)   = 13./12 * (    PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 &
2353       + 1./4   * (3.0*PSRC(:,IS,:) - 4.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 ! Smoothness indicator IS
2354  ZBPOS3(:,IS-1,:) = 13./12 * (    PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
2355       + 1./4   * (3.0*PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 ! Smoothness indicator IS-1
2356  ZOMP3(:,IS-1:IS,:)  = 3./10. / (ZEPS + ZBPOS3(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2357 !
2358  ! ----- Negative fluxes ----- 
2359 !
2360  ! First negative stencil, needs indices i+1, i+2, i+3
2361  ZFNEG1(:,IS,:)   = 1./6. * (11.0*PSRC(:,IS+1,:) - 7.0*PSRC(:,IS+2,:) + 2.0*PSRC(:,IS+3,:)) ! Flux IS
2362  ZFNEG1(:,IS-1,:) = 1./6. * (11.0*PSRC(:,IS,:)   - 7.0*PSRC(:,IS+1,:) + 2.0*PSRC(:,IS+2,:)) ! Flux IS-1
2363  ZBNEG1(:,IS,:)   = 13./12. * (    PSRC(:,IS+1,:) - 2.0*PSRC(:,IS+2,:) + PSRC(:,IS+3,:))**2 & 
2364       + 1./4    * (3.0*PSRC(:,IS+1,:) - 4.0*PSRC(:,IS+2,:) + PSRC(:,IS+3,:))**2  ! Smoothness indicator IS
2365  ZBNEG1(:,IS-1,:) = 13./12. * (    PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 & 
2366       + 1./4    * (3.0*PSRC(:,IS,:) - 4.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2  ! Smoothness indicator IS-1
2367  ZOMN1(:,IS-1:IS,:) = 1./10. / (ZEPS + ZBNEG1(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2368 !
2369  ! Second negative stencil, needs indices i, i+1, i+2
2370  ZFNEG2(:,IS,:)   = 1./6. * (2.0*PSRC(:,IS,:)   + 5.0*PSRC(:,IS+1,:) - 1.0*PSRC(:,IS+2,:)) ! Flux IS
2371  ZFNEG2(:,IS-1,:) = 1./6. * (2.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   - 1.0*PSRC(:,IS+1,:)) ! Flux IS-1
2372  ZBNEG2(:,IS,:)   = 13./12 * (PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 &
2373       + 1./4   * (PSRC(:,IS,:) -                      PSRC(:,IS+2,:))**2 ! Smoothness indicator IS
2374  ZBNEG2(:,IS-1,:) = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
2375       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS-1
2376  ZOMN2(:,IS-1:IS,:) = 3./5. / (ZEPS + ZBNEG2(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2377 !
2378  ! ----- Total flux -----
2379
2380  PR(:,IS-1:IS,:) = ( ZOMP1(:,IS-1:IS,:)/(ZOMP1(:,IS-1:IS,:)+ZOMP2(:,IS-1:IS,:)+ZOMP3(:,IS-1:IS,:)) * ZFPOS1(:,IS-1:IS,:) &
2381                        + ZOMP2(:,IS-1:IS,:)/(ZOMP1(:,IS-1:IS,:)+ZOMP2(:,IS-1:IS,:)+ZOMP3(:,IS-1:IS,:)) * ZFPOS2(:,IS-1:IS,:) & 
2382                        + ZOMP3(:,IS-1:IS,:)/(ZOMP1(:,IS-1:IS,:)+ZOMP2(:,IS-1:IS,:)+ZOMP3(:,IS-1:IS,:)) * ZFPOS3(:,IS-1:IS,:)) &
2383                       * (0.5+SIGN(0.5,PRVCT(:,IS-1:IS,:))) &
2384                     + ( ZOMN1(:,IS-1:IS,:)/(ZOMN1(:,IS-1:IS,:)+ZOMN2(:,IS-1:IS,:)+ZOMN3(:,IS-1:IS,:)) * ZFNEG1(:,IS-1:IS,:) &
2385                        + ZOMN2(:,IS-1:IS,:)/(ZOMN1(:,IS-1:IS,:)+ZOMN2(:,IS-1:IS,:)+ZOMN3(:,IS-1:IS,:)) * ZFNEG2(:,IS-1:IS,:) &
2386                        + ZOMN3(:,IS-1:IS,:)/(ZOMN1(:,IS-1:IS,:)+ZOMN2(:,IS-1:IS,:)+ZOMN3(:,IS-1:IS,:)) * ZFNEG3(:,IS-1:IS,:)) &
2387                       * (0.5-SIGN(0.5,PRVCT(:,IS-1:IS,:)))
2388 !
2389 !
2390  CASE ('OPEN','WALL','NEST') 
2391  !---------------------------------------------------------------------------
2392  ! Open, or Wall, or Nest boundary condition => WENO order reduction
2393  !---------------------------------------------------------------------------
2394 !
2395  ! WENO scheme order 1, IS-1
2396     PR(:,IS-1,:) = PSRC(:,IS-1,:) * (0.5+SIGN(0.5,PRVCT(:,IS-1,:))) + &
2397                    PSRC(:,IS,:) * &
2398                    (0.5-SIGN(0.5,PRVCT(:,IS-1,:)))
2399 !
2400 !   ! WENO scheme order 3, IS
2401     ZFPOS1(:,IS,:) = 0.5 * (3.0*PSRC(:,IS,:) - PSRC(:,IS-1,:)) ! First positive flux
2402     ZFPOS2(:,IS,:) = 0.5 * ( PSRC(:,IS,:) + PSRC(:,IS+1,:)) ! Second positive flux
2403     ZBPOS1(:,IS,:) = (PSRC(:,IS,:)   - PSRC(:,IS-1,:))**2 ! First positive smoothness indicator
2404     ZBPOS2(:,IS,:) = (PSRC(:,IS+1,:) - PSRC(:,IS,:))**2  ! Second positive smoothness indicator
2405 !
2406     ZFNEG1(:,IS,:) = 0.5 * (3.0*PSRC(:,IS+1,:) - PSRC(:,IS+2,:)) ! First negative flux
2407     ZFNEG2(:,IS,:) = 0.5 * ( PSRC(:,IS,:)   + PSRC(:,IS+1,:)) ! Second negative flux
2408     ZBNEG1(:,IS,:) = (PSRC(:,IS+1,:) - PSRC(:,IS+2,:))**2 ! First negative smoothness indicator
2409     ZBNEG2(:,IS,:) = (PSRC(:,IS,:)   - PSRC(:,IS+1,:))**2 ! Second negative smoothness indicator
2410 !
2411     ZOMP1(:,IS,:) = 1./3. / (ZEPS + ZBPOS1(:,IS,:))**2 ! First positive non-normalized weight
2412     ZOMP2(:,IS,:) = 2./3. / (ZEPS + ZBPOS2(:,IS,:))**2 ! Second positive non-normalized weight
2413     ZOMN1(:,IS,:) = 1./3. / (ZEPS + ZBNEG1(:,IS,:))**2 ! First negative non-normalized weight
2414     ZOMN2(:,IS,:) = 2./3. / (ZEPS + ZBNEG2(:,IS,:))**2 ! Second negative non-normalized weight
2415
2416     PR(:,IS,:) = (ZOMN2(:,IS,:)/(ZOMN1(:,IS,:)+ZOMN2(:,IS,:)) * ZFNEG2(:,IS,:) + &
2417              (ZOMN1(:,IS,:)/(ZOMN1(:,IS,:)+ZOMN2(:,IS,:)) * ZFNEG1(:,IS,:))) &
2418            *(0.5-SIGN(0.5,PRVCT(:,IS,:))) + &
2419      (ZOMP2(:,IS,:)/(ZOMP1(:,IS,:)+ZOMP2(:,IS,:)) * ZFPOS2(:,IS,:) + &
2420      (ZOMP1(:,IS,:)/(ZOMP1(:,IS,:)+ZOMP2(:,IS,:)) * ZFPOS1(:,IS,:))) &
2421      *(0.5+SIGN(0.5,PRVCT(:,IS,:)))  ! Total flux
2422
2423  END SELECT ! SELECT CASE (HLBCY(1)) ! Y direction LBC type on south side
2424 !
2425 ELSE
2426  !-----------------------------------------------------------------------------
2427  ! South border is proc border -- IS,IS-1
2428  !-----------------------------------------------------------------------------
2429 !
2430  IF (NHALO<3) THEN
2431  PRINT *,'ERROR : WENO5/south-int not parallelisable with NHALO < 3' 
2432  CALL ABORT
2433  STOP  ' Error in advec_weno_k_3_aux.f90 '
2434  ELSEIF (NHALO>=3) THEN
2435  !---------------------------------------------------------------------------
2436  ! NHALO >3 => WENO5 for all boundary points
2437  !---------------------------------------------------------------------------
2438 !
2439  ! ----- Positive fluxes -----
2440 !
2441  ! First positive stencil, needs indices i-2, i-1, i 
2442  ZFPOS1(:,IS,:)   = 1./6. * (2.0*PSRC(:,IS-2,:) - 7.0*PSRC(:,IS-1,:) + 11.0*PSRC(:,IS,:)) ! Flux IS
2443  ZFPOS1(:,IS-1,:) = 1./6. * (2.0*PSRC(:,IS-3,:) - 7.0*PSRC(:,IS-2,:) + 11.0*PSRC(:,IS-1,:)) ! Flux IS-1
2444  ZBPOS1(:,IS,:)   = 13./12. * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 & 
2445         + 1./4    * (PSRC(:,IS-2,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2   ! Smoothness indicator IS
2446  ZBPOS1(:,IS-1,:) = 13./12. * (PSRC(:,IS-3,:) - 2.0*PSRC(:,IS-2,:) +     PSRC(:,IS-1,:))**2 & 
2447         + 1./4    * (PSRC(:,IS-3,:) - 4.0*PSRC(:,IS-2,:) + 3.0*PSRC(:,IS-1,:))**2  ! Smoothness indicator IS-1
2448  ZOMP1(:,IS-1:IS,:)  = 1./10. / (ZEPS + ZBPOS1(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2449 !
2450  ! Second positive stencil, needs indices i-1, i, i+1
2451  ZFPOS2(:,IS,:)   = 1./6.* (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS
2452  ZFPOS2(:,IS-1,:) = 1./6.* (-1.0*PSRC(:,IS-2,:) + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS-1
2453  ZBPOS2(:,IS,:)   = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
2454       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
2455  ZBPOS2(:,IS-1,:) = 13./12 * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) + PSRC(:,IS,:))**2 &
2456       + 1./4   * (PSRC(:,IS-2,:) -                      PSRC(:,IS,:))**2 ! Smoothness indicator IS-1
2457  ZOMP2(:,IS-1:IS,:)  = 3./5. / (ZEPS + ZBPOS2(:,IS-1:IS,:))**2  ! Non-normalized weight IS,IS-1
2458
2459  ! Third positive stencil, needs indices i, i+1, i+2
2460  ZFPOS3(:,IS,:)   = 1./6 * (2.0*PSRC(:,IS,:) + 5.0*PSRC(:,IS+1,:) - PSRC(:,IS+2,:)) ! Flux IS
2461  ZFPOS3(:,IS-1,:) = 1./6 * (2.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:) - PSRC(:,IS+1,:)) ! Flux IS-1
2462  ZBPOS3(:,IS,:)   = 13./12 * (    PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 &
2463       + 1./4   * (3.0*PSRC(:,IS,:) - 4.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 ! Smoothness indicator IS
2464  ZBPOS3(:,IS-1,:) = 13./12 * (    PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
2465       + 1./4   * (3.0*PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 ! Smoothness indicator IS-1
2466  ZOMP3(:,IS-1:IS,:)  = 3./10. / (ZEPS + ZBPOS3(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2467 !
2468  ! ----- Negative fluxes ----- 
2469 !
2470  ! First negative stencil, needs indices i+1, i+2, i+3
2471  ZFNEG1(:,IS,:)   = 1./6. * (11.0*PSRC(:,IS+1,:) - 7.0*PSRC(:,IS+2,:) + 2.0*PSRC(:,IS+3,:)) ! Flux IS
2472  ZFNEG1(:,IS-1,:) = 1./6. * (11.0*PSRC(:,IS,:)   - 7.0*PSRC(:,IS+1,:) + 2.0*PSRC(:,IS+2,:)) ! Flux IS-1
2473  ZBNEG1(:,IS,:)   = 13./12. * (    PSRC(:,IS+1,:) - 2.0*PSRC(:,IS+2,:) + PSRC(:,IS+3,:))**2 & 
2474       + 1./4    * (3.0*PSRC(:,IS+1,:) - 4.0*PSRC(:,IS+2,:) + PSRC(:,IS+3,:))**2  ! Smoothness indicator IS
2475  ZBNEG1(:,IS-1,:) = 13./12. * (    PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 & 
2476       + 1./4    * (3.0*PSRC(:,IS,:) - 4.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2  ! Smoothness indicator IS-1
2477  ZOMN1(:,IS-1:IS,:) = 1./10. / (ZEPS + ZBNEG1(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2478 !
2479  ! Second negative stencil, needs indices i, i+1, i+2
2480  ZFNEG2(:,IS,:)   = 1./6. * (2.0*PSRC(:,IS,:)   + 5.0*PSRC(:,IS+1,:) - 1.0*PSRC(:,IS+2,:)) ! Flux IS
2481  ZFNEG2(:,IS-1,:) = 1./6. * (2.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   - 1.0*PSRC(:,IS+1,:)) ! Flux IS-1
2482  ZBNEG2(:,IS,:)   = 13./12 * (PSRC(:,IS,:) - 2.0*PSRC(:,IS+1,:) + PSRC(:,IS+2,:))**2 &
2483       + 1./4   * (PSRC(:,IS,:) -                      PSRC(:,IS+2,:))**2 ! Smoothness indicator IS
2484  ZBNEG2(:,IS-1,:) = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 &
2485       + 1./4   * (PSRC(:,IS-1,:) -                    PSRC(:,IS+1,:))**2 ! Smoothness indicator IS-1
2486  ZOMN2(:,IS-1:IS,:) = 3./5. / (ZEPS + ZBNEG2(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2487 !
2488  ! Third negative stencil, needs indices i-1, i, i+1
2489  ZFNEG3(:,IS,:)   = 1./6 * (-1.0*PSRC(:,IS-1,:) + 5.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IS
2490  ZFNEG3(:,IS-1,:) = 1./6 * (-1.0*PSRC(:,IS-2,:) + 5.0*PSRC(:,IS-1,:) + 2.0*PSRC(:,IS,:)) ! Flux IS-1
2491  ZBNEG3(:,IS,:)   = 13./12 * (PSRC(:,IS-1,:) - 2.0*PSRC(:,IS,:) +     PSRC(:,IS+1,:))**2 &
2492         + 1./4   * (PSRC(:,IS-1,:) - 4.0*PSRC(:,IS,:) + 3.0*PSRC(:,IS+1,:))**2 ! Smoothness indicator IS
2493  ZBNEG3(:,IS-1,:) = 13./12 * (PSRC(:,IS-2,:) - 2.0*PSRC(:,IS-1,:) +     PSRC(:,IS,:))**2 &
2494         + 1./4   * (PSRC(:,IS-2,:) - 4.0*PSRC(:,IS-1,:) + 3.0*PSRC(:,IS,:))**2 ! Smoothness indicator IS-1
2495  ZOMN3(:,IS-1:IS,:) = 3./10. / (ZEPS + ZBNEG3(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
2496 !
2497  ! ----- Total flux -----
2498
2499  PR(:,IS-1:IS,:) = ( ZOMP1(:,IS-1:IS,:)/(ZOMP1(:,IS-1:IS,:)+ZOMP2(:,IS-1:IS,:)+ZOMP3(:,IS-1:IS,:)) * ZFPOS1(:,IS-1:IS,:) &
2500                        + ZOMP2(:,IS-1:IS,:)/(ZOMP1(:,IS-1:IS,:)+ZOMP2(:,IS-1:IS,:)+ZOMP3(:,IS-1:IS,:)) * ZFPOS2(:,IS-1:IS,:) & 
2501                        + ZOMP3(:,IS-1:IS,:)/(ZOMP1(:,IS-1:IS,:)+ZOMP2(:,IS-1:IS,:)+ZOMP3(:,IS-1:IS,:)) * ZFPOS3(:,IS-1:IS,:)) &
2502                       * (0.5+SIGN(0.5,PRVCT(:,IS-1:IS,:))) &
2503                     + ( ZOMN1(:,IS-1:IS,:)/(ZOMN1(:,IS-1:IS,:)+ZOMN2(:,IS-1:IS,:)+ZOMN3(:,IS-1:IS,:)) * ZFNEG1(:,IS-1:IS,:) &
2504                        + ZOMN2(:,IS-1:IS,:)/(ZOMN1(:,IS-1:IS,:)+ZOMN2(:,IS-1:IS,:)+ZOMN3(:,IS-1:IS,:)) * ZFNEG2(:,IS-1:IS,:) &
2505                        + ZOMN3(:,IS-1:IS,:)/(ZOMN1(:,IS-1:IS,:)+ZOMN2(:,IS-1:IS,:)+ZOMN3(:,IS-1:IS,:)) * ZFNEG3(:,IS-1:IS,:)) &
2506                       * (0.5-SIGN(0.5,PRVCT(:,IS-1:IS,:)))
2507 !
2508  END IF ! NHALO
2509 !
2510 END IF ! IF(LSOUTH_ll()) 
2511 !
2512 !-------------------------------------------------------------------------------
2513 !*       1.3.   North border
2514 !               ---------------------
2515 !
2516 !! IF(LNORTH_ll()  .AND. .FALSE. ) THEN 
2517 IF(LNORTH_ll()) THEN 
2518  !-----------------------------------------------------------------------------
2519  ! North border is physical -- IN-1,IN
2520  !-----------------------------------------------------------------------------
2521  SELECT CASE (HLBCY(2)) ! Y direction LBC type on north side
2522
2523  CASE ('CYCL')
2524  !---------------------------------------------------------------------------
2525  ! Periodic boundary condition
2526  !---------------------------------------------------------------------------
2527
2528  IF(LSOUTH_ll()  .AND. .FALSE. ) THEN  ! South border is physical 
2529
2530  ! Third positive stencil, needs indices i, i+1, i+2
2531  ZFPOS3(:,IN-1,:) = 1./6 * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:) - PSRC(:,IN+1,:)) ! Flux IN-1
2532  ZFPOS3(:,IN,:)   = 1./6 * (2.0*PSRC(:,IN,:) + 5.0*PSRC(:,IN+1,:) - PSRC(:,IS,:)) ! Flux IN
2533  ZBPOS3(:,IN-1,:) = 13./12 * (    PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2534       + 1./4   * (3.0*PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 ! Smoothness indicator IN-1
2535  ZBPOS3(:,IN,:)   = 13./12 * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2 &
2536       + 1./4   * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2  ! Smoothness indicator IN
2537  ZOMP3(:,IN-1:IN,:)  = 3./10. / (ZEPS + ZBPOS3(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2538 !
2539  ! First negative stencil, needs indices i+1, i+2, i+3
2540  ZFNEG1(:,IN-1,:) = 1./6. * (11.0*PSRC(:,IN,:)   - 7.0*PSRC(:,IN+1,:) + 2.0*PSRC(:,IS,:)) ! Flux IN-1
2541  ZFNEG1(:,IN,:)   = 1./6. * (11.0*PSRC(:,IN+1,:) - 7.0*PSRC(:,IS,:)   + 2.0*PSRC(:,IS+1,:)) ! Flux IN
2542  ZBNEG1(:,IN-1,:) = 13./12. * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2 & 
2543       + 1./4    * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2  ! Smoothness indicator IN-1
2544  ZBNEG1(:,IN,:)   = 13./12. * (    PSRC(:,IN+1,:) - 2.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2 & 
2545       + 1./4    * (3.0*PSRC(:,IN+1,:) - 4.0*PSRC(:,IS,:) + PSRC(:,IS+1,:))**2  ! Smoothness indicator IN
2546  ZOMN1(:,IN-1:IN,:) = 1./10. / (ZEPS + ZBNEG1(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2547 !
2548  ! Second negative stencil, needs indices i, i+1, i+2
2549  ZFNEG2(:,IN-1,:) = 1./6. * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   - 1.0*PSRC(:,IN+1,:)) ! Flux IN-1
2550  ZFNEG2(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IN+1,:) - 1.0*PSRC(:,IS,:)) ! Flux IN
2551  ZBNEG2(:,IN-1,:)  = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2552       + 1./4   * (PSRC(:,IN-1,:) -                    PSRC(:,IN+1,:))**2 ! Smoothness indicator IN-1
2553  ZBNEG2(:,IN,:)   = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IS,:))**2 &
2554       + 1./4   * (PSRC(:,IN,:) -                      PSRC(:,IS,:))**2  ! Smoothness indicator IN
2555  ZOMN2(:,IN-1:IN,:) = 3./5. / (ZEPS + ZBNEG2(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2556 !
2557  ELSEIF(IN<=SIZE(PSRC,2)-3) THEN ! South boundary is proc border, with minimum 3 HALO points on north side
2558
2559  ! Third positive stencil, needs indices i, i+1, i+2
2560  ZFPOS3(:,IN-1,:) = 1./6 * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:) - PSRC(:,IN+1,:)) ! Flux IN-1
2561  ZFPOS3(:,IN,:)   = 1./6 * (2.0*PSRC(:,IN,:) + 5.0*PSRC(:,IN+1,:) - PSRC(:,IN+2,:)) ! Flux IN
2562  ZBPOS3(:,IN-1,:) = 13./12 * (    PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2563       + 1./4   * (3.0*PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 ! Smoothness indicator IN-1
2564  ZBPOS3(:,IN,:)   = 13./12 * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 &
2565       + 1./4   * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 ! Smoothness indicator IN
2566  ZOMP3(:,IN-1:IN,:)  = 3./10. / (ZEPS + ZBPOS3(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2567 !
2568  ! First negative stencil, needs indices i+1, i+2, i+3
2569  ZFNEG1(:,IN-1,:) = 1./6. * (11.0*PSRC(:,IN,:)   - 7.0*PSRC(:,IN+1,:) + 2.0*PSRC(:,IN+2,:)) ! Flux IN-1
2570  ZFNEG1(:,IN,:)   = 1./6. * (11.0*PSRC(:,IN+1,:) - 7.0*PSRC(:,IN+2,:)   + 2.0*PSRC(:,IN+3,:)) ! Flux IN
2571  ZBNEG1(:,IN-1,:) = 13./12. * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 & 
2572       + 1./4    * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2  ! Smoothness indicator IN-1
2573  ZBNEG1(:,IN,:)   = 13./12. * (    PSRC(:,IN+1,:) - 2.0*PSRC(:,IN+2,:) + PSRC(:,IN+3,:))**2 & 
2574       + 1./4    * (3.0*PSRC(:,IN+1,:) - 4.0*PSRC(:,IN+2,:) + PSRC(:,IN+3,:))**2  ! Smoothness indicator IN
2575  ZOMN1(:,IN-1:IN,:) = 1./10. / (ZEPS + ZBNEG1(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2576 !
2577  ! Second negative stencil, needs indices i, i+1, i+2
2578  ZFNEG2(:,IN-1,:) = 1./6. * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   - 1.0*PSRC(:,IN+1,:)) ! Flux IN-1
2579  ZFNEG2(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IN+1,:) - 1.0*PSRC(:,IN+2,:)) ! Flux IN
2580  ZBNEG2(:,IN-1,:)  = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2581       + 1./4   * (PSRC(:,IN-1,:) -                    PSRC(:,IN+1,:))**2 ! Smoothness indicator IN-1
2582  ZBNEG2(:,IN,:)   = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 &
2583       + 1./4   * (PSRC(:,IN,:) -                      PSRC(:,IN+2,:))**2 ! Smoothness indicator IN
2584  ZOMN2(:,IN-1:IN,:) = 3./5. / (ZEPS + ZBNEG2(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2585 !
2586  ELSE ! South boundary is proc border, with NHALO < 3 on north side
2587   PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on north side'
2588   CALL ABORT
2589   STOP  ' Error in advec_weno_k_3_aux.f90 '
2590  ENDIF
2591 !
2592  ! First positive stencil, needs indices i-2, i-1, i 
2593  ZFPOS1(:,IN-1,:) = 1./6. * (2.0*PSRC(:,IN-3,:) - 7.0*PSRC(:,IN-2,:) + 11.0*PSRC(:,IN-1,:)) ! Flux IN-1
2594  ZFPOS1(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN-2,:) - 7.0*PSRC(:,IN-1,:) + 11.0*PSRC(:,IN,:)) ! Flux IN
2595  ZBPOS1(:,IN-1,:) = 13./12. * (PSRC(:,IN-3,:) - 2.0*PSRC(:,IN-2,:) +     PSRC(:,IN-1,:))**2 & 
2596         + 1./4    * (PSRC(:,IN-3,:) - 4.0*PSRC(:,IN-2,:) + 3.0*PSRC(:,IN-1,:))**2  ! Smoothness indicator IN-1
2597  ZBPOS1(:,IN,:)   = 13./12. * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) +     PSRC(:,IN,:))**2 & 
2598         + 1./4    * (PSRC(:,IN-2,:) - 4.0*PSRC(:,IN-1,:) + 3.0*PSRC(:,IN,:))**2  ! Smoothness indicator IN
2599  ZOMP1(:,IN-1:IN,:)  = 1./10. / (ZEPS + ZBPOS1(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2600 !
2601  ! Second positive stencil, needs indices i-1, i, i+1
2602  ZFPOS2(:,IN-1,:) = 1./6. * (-1.0*PSRC(:,IN-2,:) + 5.0*PSRC(:,IN-1,:) + 2.0*PSRC(:,IN,:)) ! Flux IN-1
2603  ZFPOS2(:,IN,:)   = 1./6. * (-1.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   + 2.0*PSRC(:,IN+1,:)) ! Flux IN
2604  ZBPOS2(:,IN-1,:) = 13./12 * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) + PSRC(:,IN,:))**2 &
2605       + 1./4   * (PSRC(:,IN-2,:) -                      PSRC(:,IN,:))**2 ! Smoothness indicator IN-1
2606  ZBPOS2(:,IN,:)   = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2607       + 1./4   * (PSRC(:,IN-1,:) -                   PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
2608  ZOMP2(:,IN-1:IN,:)  = 3./5. / (ZEPS + ZBPOS2(:,IN-1:IN,:))**2  ! Non-normalized weight IN-1,IN
2609 !
2610  ! Third negative stencil, needs indices i-1, i, i+1
2611  ZFNEG3(:,IN-1,:) = 1./6 * (-1.0*PSRC(:,IN-2,:) + 5.0*PSRC(:,IN-1,:) + 2.0*PSRC(:,IN,:)) ! Flux IN-1
2612  ZFNEG3(:,IN,:)   = 1./6 * (-1.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   + 2.0*PSRC(:,IN+1,:)) ! Flux IN
2613  ZBNEG3(:,IN-1,:) = 13./12 * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) +     PSRC(:,IN,:))**2 &
2614         + 1./4   * (PSRC(:,IN-2,:) - 4.0*PSRC(:,IN-1,:) + 3.0*PSRC(:,IN,:))**2 ! Smoothness indicator IN-1
2615  ZBNEG3(:,IN,:)   = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) +     PSRC(:,IN+1,:))**2 &
2616         + 1./4   * (PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + 3.0*PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
2617  ZOMN3(:,IN-1:IN,:) = 3./10. / (ZEPS + ZBNEG3(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2618 !
2619  ! ----- Total flux -----
2620
2621  PR(:,IN-1:IN,:) = ( ZOMP1(:,IN-1:IN,:)/(ZOMP1(:,IN-1:IN,:)+ZOMP2(:,IN-1:IN,:)+ZOMP3(:,IN-1:IN,:)) * ZFPOS1(:,IN-1:IN,:) &
2622                        + ZOMP2(:,IN-1:IN,:)/(ZOMP1(:,IN-1:IN,:)+ZOMP2(:,IN-1:IN,:)+ZOMP3(:,IN-1:IN,:)) * ZFPOS2(:,IN-1:IN,:) & 
2623                        + ZOMP3(:,IN-1:IN,:)/(ZOMP1(:,IN-1:IN,:)+ZOMP2(:,IN-1:IN,:)+ZOMP3(:,IN-1:IN,:)) * ZFPOS3(:,IN-1:IN,:)) &
2624                       * (0.5+SIGN(0.5,PRVCT(:,IN-1:IN,:))) &
2625                     + ( ZOMN1(:,IN-1:IN,:)/(ZOMN1(:,IN-1:IN,:)+ZOMN2(:,IN-1:IN,:)+ZOMN3(:,IN-1:IN,:)) * ZFNEG1(:,IN-1:IN,:) &
2626                        + ZOMN2(:,IN-1:IN,:)/(ZOMN1(:,IN-1:IN,:)+ZOMN2(:,IN-1:IN,:)+ZOMN3(:,IN-1:IN,:)) * ZFNEG2(:,IN-1:IN,:) &
2627                        + ZOMN3(:,IN-1:IN,:)/(ZOMN1(:,IN-1:IN,:)+ZOMN2(:,IN-1:IN,:)+ZOMN3(:,IN-1:IN,:)) * ZFNEG3(:,IN-1:IN,:)) &
2628                       * (0.5-SIGN(0.5,PRVCT(:,IN-1:IN,:)))
2629 !
2630 !
2631  CASE ('OPEN','WALL','NEST') 
2632  !---------------------------------------------------------------------------
2633  ! Open, or Wall, or Nest boundary condition => WENO order reduction
2634  !---------------------------------------------------------------------------
2635 !
2636  ! WENO scheme order 1, IN
2637     PR(:,IN,:) = PSRC(:,IN,:) * (0.5+SIGN(0.5,PRVCT(:,IN,:))) + &
2638                  PSRC(:,IN+1,:) * &
2639                  (0.5-SIGN(0.5,PRVCT(:,IN,:)))
2640 !
2641 !   ! WENO scheme order 3, IN-1
2642     ZFPOS1(:,IN-1,:) = 0.5 * (3.0*PSRC(:,IN-1,:) - PSRC(:,IN-2,:)) ! First positive flux
2643     ZFPOS2(:,IN-1,:) = 0.5 * (    PSRC(:,IN-1,:) + PSRC(:,IN,:)) ! Second positive flux
2644     ZBPOS1(:,IN-1,:) = (PSRC(:,IN-1,:) - PSRC(:,IN-2,:))**2 ! First positive smoothness indicator
2645     ZBPOS2(:,IN-1,:) = (PSRC(:,IN,:)   - PSRC(:,IN-1,:))**2 ! Second positive smoothness indicator
2646 !
2647     ZFNEG1(:,IN-1,:) = 0.5 * (3.0*PSRC(:,IN,:)   - PSRC(:,IN+1,:)) ! First negative flux
2648     ZFNEG2(:,IN-1,:) = 0.5 * (    PSRC(:,IN-1,:) + PSRC(:,IN,:)) ! Second negative flux
2649     ZBNEG1(:,IN-1,:) = (PSRC(:,IN,:)   - PSRC(:,IN+1,:))**2 ! First negative smoothness indicator
2650     ZBNEG2(:,IN-1,:) = (PSRC(:,IN-1,:) - PSRC(:,IN,:))**2  ! Second negative smoothness indicator
2651 !
2652     ZOMP1(:,IN-1,:) = 1./3. / (ZEPS + ZBPOS1(:,IN-1,:))**2 ! First positive non-normalized weight
2653     ZOMP2(:,IN-1,:) = 2./3. / (ZEPS + ZBPOS2(:,IN-1,:))**2 ! Second positive non-normalized weight
2654     ZOMN1(:,IN-1,:) = 1./3. / (ZEPS + ZBNEG1(:,IN-1,:))**2 ! First negative non-normalized weight
2655     ZOMN2(:,IN-1,:) = 2./3. / (ZEPS + ZBNEG2(:,IN-1,:))**2 ! Second negative non-normalized weight
2656
2657     PR(:,IN-1,:) = (ZOMN2(:,IN-1,:)/(ZOMN1(:,IN-1,:)+ZOMN2(:,IN-1,:))*ZFNEG2(:,IN-1,:) + &
2658       (ZOMN1(:,IN-1,:)/(ZOMN1(:,IN-1,:)+ZOMN2(:,IN-1,:))*ZFNEG1(:,IN-1,:))) &
2659       *(0.5-SIGN(0.5,PRVCT(:,IN-1,:))) + &
2660                  (ZOMP2(:,IN-1,:)/(ZOMP1(:,IN-1,:)+ZOMP2(:,IN-1,:))*ZFPOS2(:,IN-1,:) + &
2661                    (ZOMP1(:,IN-1,:)/(ZOMP1(:,IN-1,:)+ZOMP2(:,IN-1,:))*ZFPOS1(:,IN-1,:))) &
2662       * (0.5+SIGN(0.5,PRVCT(:,IN-1,:)))  ! Total flux
2663
2664  END SELECT ! SELECT CASE (HLBCY(2)) ! Y direction LBC type on north side
2665 !
2666 ELSE
2667  !-----------------------------------------------------------------------------
2668  ! North border is proc border -- IN-1,IN
2669  !-----------------------------------------------------------------------------
2670 !
2671  IF (NHALO<3) THEN
2672  PRINT *,'ERROR : WENO5/north-int not parallelisable with NHALO < 3' 
2673  CALL ABORT
2674  STOP  ' Error in advec_weno_k_3_aux.f90 '
2675  ELSEIF (NHALO>=3) THEN
2676  !---------------------------------------------------------------------------
2677  ! NHALO >= 3 => WENO5 for all boundary points
2678  !---------------------------------------------------------------------------
2679
2680  ! ----- Positive fluxes -----
2681 !
2682  ! First positive stencil, needs indices i-2, i-1, i 
2683  ZFPOS1(:,IN-1,:) = 1./6. * (2.0*PSRC(:,IN-3,:) - 7.0*PSRC(:,IN-2,:) + 11.0*PSRC(:,IN-1,:)) ! Flux IN-1
2684  ZFPOS1(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN-2,:) - 7.0*PSRC(:,IN-1,:) + 11.0*PSRC(:,IN,:)) ! Flux IN
2685  ZBPOS1(:,IN-1,:) = 13./12. * (PSRC(:,IN-3,:) - 2.0*PSRC(:,IN-2,:) +     PSRC(:,IN-1,:))**2 & 
2686         + 1./4    * (PSRC(:,IN-3,:) - 4.0*PSRC(:,IN-2,:) + 3.0*PSRC(:,IN-1,:))**2  ! Smoothness indicator IN-1
2687  ZBPOS1(:,IN,:)   = 13./12. * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) +     PSRC(:,IN,:))**2 & 
2688         + 1./4    * (PSRC(:,IN-2,:) - 4.0*PSRC(:,IN-1,:) + 3.0*PSRC(:,IN,:))**2  ! Smoothness indicator IN
2689  ZOMP1(:,IN-1:IN,:)  = 1./10. / (ZEPS + ZBPOS1(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2690 !
2691  ! Second positive stencil, needs indices i-1, i, i+1
2692  ZFPOS2(:,IN-1,:) = 1./6. * (-1.0*PSRC(:,IN-2,:) + 5.0*PSRC(:,IN-1,:) + 2.0*PSRC(:,IN,:)) ! Flux IN-1
2693  ZFPOS2(:,IN,:)   = 1./6. * (-1.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   + 2.0*PSRC(:,IN+1,:)) ! Flux IN
2694  ZBPOS2(:,IN-1,:) = 13./12 * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) + PSRC(:,IN,:))**2 &
2695       + 1./4   * (PSRC(:,IN-2,:) -                      PSRC(:,IN,:))**2 ! Smoothness indicator IN-1
2696  ZBPOS2(:,IN,:)   = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2697       + 1./4   * (PSRC(:,IN-1,:) -                   PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
2698  ZOMP2(:,IN-1:IN,:)  = 3./5. / (ZEPS + ZBPOS2(:,IN-1:IN,:))**2  ! Non-normalized weight IN-1,IN
2699
2700  ! Third positive stencil, needs indices i, i+1, i+2
2701  ZFPOS3(:,IN-1,:) = 1./6 * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:) - PSRC(:,IN+1,:)) ! Flux IN-1
2702  ZFPOS3(:,IN,:)   = 1./6 * (2.0*PSRC(:,IN,:) + 5.0*PSRC(:,IN+1,:) - PSRC(:,IN+2,:)) ! Flux IN
2703  ZBPOS3(:,IN-1,:) = 13./12 * (    PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2704       + 1./4   * (3.0*PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 ! Smoothness indicator IN-1
2705  ZBPOS3(:,IN,:)   = 13./12 * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 &
2706       + 1./4   * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2  ! Smoothness indicator IN
2707  ZOMP3(:,IN-1:IN,:)  = 3./10. / (ZEPS + ZBPOS3(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2708 !
2709  ! ----- Negative fluxes ----- 
2710 !
2711  ! First negative stencil, needs indices i+1, i+2, i+3
2712  ZFNEG1(:,IN-1,:) = 1./6. * (11.0*PSRC(:,IN,:)   - 7.0*PSRC(:,IN+1,:) + 2.0*PSRC(:,IN+2,:)) ! Flux IN-1
2713  ZFNEG1(:,IN,:)   = 1./6. * (11.0*PSRC(:,IN+1,:) - 7.0*PSRC(:,IN+2,:) + 2.0*PSRC(:,IN+3,:)) ! Flux IN
2714  ZBNEG1(:,IN-1,:) = 13./12. * (    PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 & 
2715       + 1./4    * (3.0*PSRC(:,IN,:) - 4.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2  ! Smoothness indicator IN-1
2716  ZBNEG1(:,IN,:)   = 13./12. * (    PSRC(:,IN+1,:) - 2.0*PSRC(:,IN+2,:) + PSRC(:,IN+3,:))**2 & 
2717       + 1./4    * (3.0*PSRC(:,IN+1,:) - 4.0*PSRC(:,IN+2,:) + PSRC(:,IN+3,:))**2  ! Smoothness indicator IN
2718  ZOMN1(:,IN-1:IN,:) = 1./10. / (ZEPS + ZBNEG1(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2719 !
2720  ! Second negative stencil, needs indices i, i+1, i+2
2721  ZFNEG2(:,IN-1,:) = 1./6. * (2.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   - 1.0*PSRC(:,IN+1,:)) ! Flux IN-1
2722  ZFNEG2(:,IN,:)   = 1./6. * (2.0*PSRC(:,IN,:)   + 5.0*PSRC(:,IN+1,:) - 1.0*PSRC(:,IN+2,:)) ! Flux IN
2723  ZBNEG2(:,IN-1,:)  = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) + PSRC(:,IN+1,:))**2 &
2724       + 1./4   * (PSRC(:,IN-1,:) -                    PSRC(:,IN+1,:))**2 ! Smoothness indicator IN-1
2725  ZBNEG2(:,IN,:)   = 13./12 * (PSRC(:,IN,:) - 2.0*PSRC(:,IN+1,:) + PSRC(:,IN+2,:))**2 &
2726       + 1./4   * (PSRC(:,IN,:) -                      PSRC(:,IN+2,:))**2 ! Smoothness indicator IN
2727  ZOMN2(:,IN-1:IN,:) = 3./5. / (ZEPS + ZBNEG2(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2728 !
2729  ! Third negative stencil, needs indices i-1, i, i+1
2730  ZFNEG3(:,IN-1,:) = 1./6 * (-1.0*PSRC(:,IN-2,:) + 5.0*PSRC(:,IN-1,:) + 2.0*PSRC(:,IN,:)) ! Flux IN-1
2731  ZFNEG3(:,IN,:)   = 1./6 * (-1.0*PSRC(:,IN-1,:) + 5.0*PSRC(:,IN,:)   + 2.0*PSRC(:,IN+1,:)) ! Flux IN
2732  ZBNEG3(:,IN-1,:) = 13./12 * (PSRC(:,IN-2,:) - 2.0*PSRC(:,IN-1,:) +     PSRC(:,IN,:))**2 &
2733         + 1./4   * (PSRC(:,IN-2,:) - 4.0*PSRC(:,IN-1,:) + 3.0*PSRC(:,IN,:))**2 ! Smoothness indicator IN-1
2734  ZBNEG3(:,IN,:)   = 13./12 * (PSRC(:,IN-1,:) - 2.0*PSRC(:,IN,:) +     PSRC(:,IN+1,:))**2 &
2735         + 1./4   * (PSRC(:,IN-1,:) - 4.0*PSRC(:,IN,:) + 3.0*PSRC(:,IN+1,:))**2 ! Smoothness indicator IN
2736  ZOMN3(:,IN-1:IN,:) = 3./10. / (ZEPS + ZBNEG3(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
2737 !
2738  ! ----- Total flux -----
2739
2740  PR(:,IN-1:IN,:) = ( ZOMP1(:,IN-1:IN,:) /(ZOMP1(:,IN-1:IN,:) +ZOMP2(:,IN-1:IN,:) +ZOMP3(:,IN-1:IN,:)) * ZFPOS1(:,IN-1:IN,:) &
2741                        + ZOMP2(:,IN-1:IN,:) /(ZOMP1(:,IN-1:IN,:) +ZOMP2(:,IN-1:IN,:) +ZOMP3(:,IN-1:IN,:)) * ZFPOS2(:,IN-1:IN,:) & 
2742                        + ZOMP3(:,IN-1:IN,:) /(ZOMP1(:,IN-1:IN,:) +ZOMP2(:,IN-1:IN,:) +ZOMP3(:,IN-1:IN,:)) * ZFPOS3(:,IN-1:IN,:)) &
2743                       * (0.5+SIGN(0.5,PRVCT(:,IN-1:IN,:))) &
2744                     + ( ZOMN1(:,IN-1:IN,:)/(ZOMN1(:,IN-1:IN,:)+ZOMN2(:,IN-1:IN,:)+ZOMN3(:,IN-1:IN,:)) * ZFNEG1(:,IN-1:IN,:) &
2745                        + ZOMN2(:,IN-1:IN,:)/(ZOMN1(:,IN-1:IN,:)+ZOMN2(:,IN-1:IN,:)+ZOMN3(:,IN-1:IN,:)) * ZFNEG2(:,IN-1:IN,:) &
2746                        + ZOMN3(:,IN-1:IN,:)/(ZOMN1(:,IN-1:IN,:)+ZOMN2(:,IN-1:IN,:)+ZOMN3(:,IN-1:IN,:)) * ZFNEG3(:,IN-1:IN,:)) &
2747                       * (0.5-SIGN(0.5,PRVCT(:,IN-1:IN,:)))
2748
2749  END IF ! NHALO
2750 !
2751 END IF ! IF(LNORTH_ll()) 
2752 !-------------------------------------------------------------------------------
2753 !
2754 PR = PR * PRVCT ! Add contravariant flux
2755 !
2756 END SUBROUTINE ADVEC_WENO_K_3_VY
2757 !
2758 !-------------------------------------------------------------------------------
2759 !
2760 !     ############################################
2761       FUNCTION WENO_K_3_WZ(PSRC, PRWCT) RESULT(PR)
2762 !     ############################################
2763 !!
2764 !!* Computes PRWCT * PWT. Upstream fluxes of W in Z direction.  
2765 !!  Input PWT is on W Grid 'ie' (i,j,k) based on WGRID reference
2766 !!  Output PR is on mass Grid 'ie' (i,j,k+1/2) based on WGRID reference
2767 !!
2768 !!    AUTHOR
2769 !!    ------
2770 !!    F. Visentin   *CNRS/LA*
2771 !!
2772 !!    MODIFICATIONS
2773 !!    -------------
2774 !! T. Lunet 02/10/2014:  Complete code documentation
2775 !!
2776 !-------------------------------------------------------------------------------
2777 !
2778 USE MODE_ll
2779 USE MODD_CONF
2780 USE MODD_PARAMETERS,ONLY: JPVEXT
2781 !
2782 IMPLICIT NONE
2783 !
2784 !*       0.1   Declarations of dummy arguments :
2785 !
2786 !CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
2787 !
2788 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  ! variable on W grid at t
2789 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRWCT ! contrav. comp. on MASS GRID
2790 !
2791 ! output source term
2792 !
2793 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)) :: PR
2794 !
2795 !*       0.2   Declarations of local variables :
2796 !
2797 INTEGER :: IB    ! Begining useful area in x,y,z directions
2798 INTEGER :: IT    ! End useful area in x,y,z directions
2799 !
2800 ! WENO-related variables:
2801 !
2802 ! intermediate reconstruction fluxes for positive wind case
2803 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFPOS1, ZFPOS2, ZFPOS3
2804 !
2805 ! intermediate reconstruction fluxes for negative wind case
2806 !
2807 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZFNEG1, ZFNEG2, ZFNEG3
2808 !
2809 ! smoothness indicators for positive wind case
2810 !
2811 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBPOS1, ZBPOS2, ZBPOS3
2812 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZBNEG1, ZBNEG2, ZBNEG3
2813 !
2814 ! WENO weights
2815 !
2816 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZOMP1, ZOMP2, ZOMP3
2817 REAL, DIMENSION(SIZE(PSRC,1),SIZE(PSRC,2),SIZE(PSRC,3)):: ZOMN1, ZOMN2, ZOMN3
2818 !
2819 ! EPSILON for weno weights calculation
2820
2821 REAL, PARAMETER :: ZEPS = 1.0E-15
2822 !
2823 !-------------------------------------------------------------------------------
2824 !
2825 !*       0.3.     COMPUTES THE DOMAIN DIMENSIONS
2826 !                 ------------------------------
2827 !
2828 IB = 1 + JPVEXT
2829 IT = SIZE(PSRC,3) - JPVEXT
2830 !
2831 PR(:,:,:) = 0.0
2832 !
2833 ZFPOS1 = 0.0
2834 ZFPOS2 = 0.0
2835 ZFPOS3 = 0.0
2836 ZFNEG1 = 0.0
2837 ZFNEG2 = 0.0
2838 ZFNEG3 = 0.0
2839 ZBPOS1 = 0.0
2840 ZBPOS2 = 0.0
2841 ZBPOS3 = 0.0
2842 ZBNEG1 = 0.0
2843 ZBNEG2 = 0.0
2844 ZBNEG3 = 0.0
2845 ZOMP1  = 0.0
2846 ZOMP2  = 0.0
2847 ZOMP3  = 0.0
2848 ZOMN1  = 0.0
2849 ZOMN2  = 0.0
2850 ZOMN3  = 0.0 
2851 !
2852 !-------------------------------------------------------------------------------
2853 !*       1.1.   Interior Fluxes 
2854 !              ---------------------
2855 !
2856 !-------------------------------------------------------------------------------
2857 ! Flux calculation in the physical domain far enough from the boundary 
2858 ! WENO scheme order 5, IB+1 -> IT-2
2859 ! Computation at the mass point on Wgrid v(i+1/2,j,k)
2860 !-------------------------------------------------------------------------------
2861 !
2862 ! ----- Positive fluxes -----
2863 !
2864 ! First positive stencil, needs indices i-2, i-1, i
2865 ZFPOS1(:,:,IB+1:IT-2) = 1./6.   * (2.0*PSRC(:,:,IB-1:IT-4) - 7.0*PSRC(:,:,IB:IT-3) + 11.0*PSRC(:,:,IB+1:IT-2))   ! Flux
2866 ZBPOS1(:,:,IB+1:IT-2) = 13./12. * (    PSRC(:,:,IB-1:IT-4) - 2.0*PSRC(:,:,IB:IT-3) +      PSRC(:,:,IB+1:IT-2))**2 & 
2867       + 1./4    * (    PSRC(:,:,IB-1:IT-4) - 4.0*PSRC(:,:,IB:IT-3) + 3.0* PSRC(:,:,IB+1:IT-2))**2  ! Smoothness indicator
2868 ZOMP1(:,:,IB+1:IT-2)  = 1./10. /  (ZEPS + ZBPOS1(:,:,IB+1:IT-2))**2             ! Non-normalized weight
2869 !
2870 ! Second positive stencil, needs indices i-1, i, i+1
2871 ZFPOS2(:,:,IB+1:IT-2) = 1./6.  * (-1.0*PSRC(:,:,IB:IT-3) + 5.0*PSRC(:,:,IB+1:IT-2) + 2.0*PSRC(:,:,IB+2:IT-1))  ! Flux
2872 ZBPOS2(:,:,IB+1:IT-2) = 13./12 * (     PSRC(:,:,IB:IT-3) - 2.0*PSRC(:,:,IB+1:IT-2) +     PSRC(:,:,IB+2:IT-1))**2 &
2873       + 1./4   * (     PSRC(:,:,IB:IT-3) -                               PSRC(:,:,IB+2:IT-1))**2 ! Smoothness indicator
2874 ZOMP2(:,:,IB+1:IT-2)  = 3./5. /  (ZEPS + ZBPOS2(:,:,IB+1:IT-2))**2             ! Non-normalized weight
2875 !
2876 ! Third positive stencil, needs indices i, i+1, i+2
2877 ZFPOS3(:,:,IB+1:IT-2) = 1./6   * (2.0*PSRC(:,:,IB+1:IT-2) + 5.0*PSRC(:,:,IB+2:IT-1) - PSRC(:,:,IB+3:IT))  ! Flux
2878 ZBPOS3(:,:,IB+1:IT-2) = 13./12 * ( PSRC(:,:,IB+1:IT-2) - 2.0*PSRC(:,:,IB+2:IT-1) + PSRC(:,:,IB+3:IT))**2 &
2879       + 1./4   * (3.0*PSRC(:,:,IB+1:IT-2) - 4.0*PSRC(:,:,IB+2:IT-1) + PSRC(:,:,IB+3:IT))**2 ! Smoothness indicator
2880 ZOMP3(:,:,IB+1:IT-2)  = 3./10. / (ZEPS + ZBPOS3(:,:,IB+1:IT-2))**2           ! Non-normalized weight
2881 !
2882 ! ----- Negative fluxes ----- 
2883 !
2884 ! First negative stencil, needs indices i+1, i+2, i+3
2885 ZFNEG1(:,:,IB+1:IT-2) = 1./6.   * (11.0*PSRC(:,:,IB+2:IT-1) - 7.0*PSRC(:,:,IB+3:IT) + 2.0*PSRC(:,:,IB+4:IT+1))   ! Flux
2886 ZBNEG1(:,:,IB+1:IT-2) = 13./12. * (     PSRC(:,:,IB+2:IT-1) - 2.0*PSRC(:,:,IB+3:IT) +     PSRC(:,:,IB+4:IT+1))**2 & 
2887       + 1./4    * (3.0* PSRC(:,:,IB+2:IT-1) - 4.0*PSRC(:,:,IB+3:IT) +     PSRC(:,:,IB+4:IT+1))**2  ! Smoothness indicator
2888 ZOMN1(:,:,IB+1:IT-2)  = 1./10. /  (ZEPS + ZBNEG1(:,:,IB+1:IT-2))**2             ! Non-normalized weight
2889 !
2890 ! Second negative stencil, needs indices i, i+1, i+2
2891 ZFNEG2(:,:,IB+1:IT-2) = 1./6.  * (2.0*PSRC(:,:,IB+1:IT-2) + 5.0*PSRC(:,:,IB+2:IT-1) - 1.0*PSRC(:,:,IB+3:IT))  ! Flux
2892 ZBNEG2(:,:,IB+1:IT-2) = 13./12 * (    PSRC(:,:,IB+1:IT-2) - 2.0*PSRC(:,:,IB+2:IT-1) +     PSRC(:,:,IB+3:IT))**2 &
2893       + 1./4   * (    PSRC(:,:,IB+1:IT-2) -                               PSRC(:,:,IB+3:IT))**2 ! Smoothness indicator
2894 ZOMN2(:,:,IB+1:IT-2)  = 3./5. /  (ZEPS + ZBNEG2(:,:,IB+1:IT-2))**2            ! Non-normalized weight
2895 !
2896 ! Third negative stencil, needs indices i-1, i, i+1
2897 ZFNEG3(:,:,IB+1:IT-2) = 1./6   * (-1.0*PSRC(:,:,IB:IT-3) + 5.0*PSRC(:,:,IB+1:IT-2) + 2.0*PSRC(:,:,IB+2:IT-1))  ! Flux
2898 ZBNEG3(:,:,IB+1:IT-2) = 13./12 * (  PSRC(:,:,IB:IT-3) - 2.0*PSRC(:,:,IB+1:IT-2) +     PSRC(:,:,IB+2:IT-1))**2 &
2899       + 1./4   * (     PSRC(:,:,IB:IT-3) - 4.0*PSRC(:,:,IB+1:IT-2) + 3.0*PSRC(:,:,IB+2:IT-1))**2 ! Smoothness indicator
2900 ZOMN3(:,:,IB+1:IT-2)  = 3./10. / (ZEPS + ZBNEG3(:,:,IB+1:IT-2))**2             ! Non-normalized weight
2901 !
2902 !
2903 ! ----- Total flux -----
2904 !
2905 PR(:,:,IB+1:IT-2) = (ZOMP1(:,:,IB+1:IT-2)/(ZOMP1(:,:,IB+1:IT-2)+ZOMP2(:,:,IB+1:IT-2)+ZOMP3(:,:,IB+1:IT-2)) &
2906            * ZFPOS1(:,:,IB+1:IT-2) + &
2907                       ZOMP2(:,:,IB+1:IT-2)/(ZOMP1(:,:,IB+1:IT-2)+ZOMP2(:,:,IB+1:IT-2)+ZOMP3(:,:,IB+1:IT-2)) &
2908            * ZFPOS2(:,:,IB+1:IT-2) + & 
2909                       ZOMP3(:,:,IB+1:IT-2)/(ZOMP1(:,:,IB+1:IT-2)+ZOMP2(:,:,IB+1:IT-2)+ZOMP3(:,:,IB+1:IT-2)) &
2910            * ZFPOS3(:,:,IB+1:IT-2)) &
2911                     * (0.5+SIGN(0.5,PRWCT(:,:,IB+1:IT-2))) &
2912                   + (ZOMN1(:,:,IB+1:IT-2)/(ZOMN1(:,:,IB+1:IT-2)+ZOMN2(:,:,IB+1:IT-2)+ZOMN3(:,:,IB+1:IT-2)) &
2913            * ZFNEG1(:,:,IB+1:IT-2)  &
2914                      + ZOMN2(:,:,IB+1:IT-2)/(ZOMN1(:,:,IB+1:IT-2)+ZOMN2(:,:,IB+1:IT-2)+ZOMN3(:,:,IB+1:IT-2)) &
2915            * ZFNEG2(:,:,IB+1:IT-2)  &
2916                      + ZOMN3(:,:,IB+1:IT-2)/(ZOMN1(:,:,IB+1:IT-2)+ZOMN2(:,:,IB+1:IT-2)+ZOMN3(:,:,IB+1:IT-2)) &
2917            * ZFNEG3(:,:,IB+1:IT-2))  & 
2918                     * (0.5-SIGN(0.5,PRWCT(:,:,IB+1:IT-2)))
2919 !
2920 !-------------------------------------------------------------------------------
2921 !*       1.2.   Bottom border
2922 !               ---------------------
2923 !---------------------------------------------------------------------------
2924 ! WENO order reduction
2925 !---------------------------------------------------------------------------
2926 !
2927 ! WENO scheme order 1, IB-1
2928 PR(:,:,IB-1) =  PSRC(:,:,IB-1) * (0.5+SIGN(0.5,PRWCT(:,:,IB-1) )) &
2929               + PSRC(:,:,IB  ) * (0.5-SIGN(0.5,PRWCT(:,:,IB-1) ))
2930 !
2931 !   ! WENO scheme order 3, IB
2932 ZFPOS1(:,:,IB) = 0.5 * (3.0*PSRC(:,:,IB) - PSRC(:,:,IB-1)) ! First positive flux
2933 ZFPOS2(:,:,IB) = 0.5 * ( PSRC(:,:,IB) + PSRC(:,:,IB+1)) ! Second positive flux
2934 ZBPOS1(:,:,IB) = (PSRC(:,:,IB)   - PSRC(:,:,IB-1))**2 ! First positive smoothness indicator
2935 ZBPOS2(:,:,IB) = (PSRC(:,:,IB+1) - PSRC(:,:,IB))**2  ! Second positive smoothness indicator
2936 !
2937 ZFNEG1(:,:,IB) = 0.5 * (3.0*PSRC(:,:,IB+1) - PSRC(:,:,IB+2)) ! First negative flux
2938 ZFNEG2(:,:,IB) = 0.5 * ( PSRC(:,:,IB)   + PSRC(:,:,IB+1)) ! Second negative flux
2939 ZBNEG1(:,:,IB) = (PSRC(:,:,IB+1) - PSRC(:,:,IB+2))**2 ! First negative smoothness indicator
2940 ZBNEG2(:,:,IB) = (PSRC(:,:,IB)   - PSRC(:,:,IB+1))**2 ! Second negative smoothness indicator
2941 !
2942 ZOMP1(:,:,IB) = 1./3. / (ZEPS + ZBPOS1(:,:,IB))**2 ! First positive non-normalized weight
2943 ZOMP2(:,:,IB) = 2./3. / (ZEPS + ZBPOS2(:,:,IB))**2 ! Second positive non-normalized weight
2944 ZOMN1(:,:,IB) = 1./3. / (ZEPS + ZBNEG1(:,:,IB))**2 ! First negative non-normalized weight
2945 ZOMN2(:,:,IB) = 2./3. / (ZEPS + ZBNEG2(:,:,IB))**2 ! Second negative non-normalized weight
2946
2947 PR(:,:,IB) = (ZOMN2(:,:,IB)/(ZOMN1(:,:,IB)+ZOMN2(:,:,IB)) * ZFNEG2(:,:,IB) + &
2948          (ZOMN1(:,:,IB)/(ZOMN1(:,:,IB)+ZOMN2(:,:,IB)) * ZFNEG1(:,:,IB))) &
2949        *(0.5-SIGN(0.5,PRWCT(:,:,IB))) + &
2950     (ZOMP2(:,:,IB)/(ZOMP1(:,:,IB)+ZOMP2(:,:,IB)) * ZFPOS2(:,:,IB) + &
2951     (ZOMP1(:,:,IB)/(ZOMP1(:,:,IB)+ZOMP2(:,:,IB)) * ZFPOS1(:,:,IB))) &
2952     *(0.5+SIGN(0.5,PRWCT(:,:,IB)))  ! Total flux
2953
2954 !-------------------------------------------------------------------------------
2955 !*       1.3.   Top border
2956 !               ---------------------
2957 !
2958 !---------------------------------------------------------------------------
2959 ! Open, or Wall, or Nest boundary condition => WENO order reduction
2960 !---------------------------------------------------------------------------
2961 !
2962 ! WENO scheme order 1, IT
2963 PR(:,:,IT) = PSRC(:,:,IT  ) * (0.5+SIGN(0.5,PRWCT(:,:,IT) )) &
2964            + PSRC(:,:,IT+1) * (0.5-SIGN(0.5,PRWCT(:,:,IT) ))
2965 !
2966 !   ! WENO scheme order 3, IT-1
2967 ZFPOS1(:,:,IT-1) = 0.5 * (3.0*PSRC(:,:,IT-1) - PSRC(:,:,IT-2)) ! First positive flux
2968 ZFPOS2(:,:,IT-1) = 0.5 * ( PSRC(:,:,IT-1) + PSRC(:,:,IT)) ! Second positive flux
2969 ZBPOS1(:,:,IT-1) = (PSRC(:,:,IT-1) - PSRC(:,:,IT-2))**2 ! First positive smoothness indicator
2970 ZBPOS2(:,:,IT-1) = (PSRC(:,:,IT)   - PSRC(:,:,IT-1))**2 ! Second positive smoothness indicator
2971 !
2972 ZFNEG1(:,:,IT-1) = 0.5 * (3.0*PSRC(:,:,IT)   - PSRC(:,:,IT+1)) ! First negative flux
2973 ZFNEG2(:,:,IT-1) = 0.5 * ( PSRC(:,:,IT-1) + PSRC(:,:,IT)) ! Second negative flux
2974 ZBNEG1(:,:,IT-1) = (PSRC(:,:,IT)   - PSRC(:,:,IT+1))**2 ! First negative smoothness indicator
2975 ZBNEG2(:,:,IT-1) = (PSRC(:,:,IT-1) - PSRC(:,:,IT))**2  ! Second negative smoothness indicator
2976 !
2977 ZOMP1(:,:,IT-1) = 1./3. / (ZEPS + ZBPOS1(:,:,IT-1))**2 ! First positive non-normalized weight