Philippe 02/05/2016: moved all LIBTOOLS files in LIBTOOLS directory
[MNH-git_open_source-lfs.git] / LIBTOOLS / tools / diachro / src / DIAPRO / diff_oper.f90
1 !     ######spl
2       MODULE  MODI_DIFF_OPER
3 !     ##############################
4 !
5 INTERFACE
6 !
7 SUBROUTINE DIFF_OPER(K)
8 INTEGER :: K
9 END SUBROUTINE DIFF_OPER
10 !
11 END INTERFACE
12 !
13 END MODULE MODI_DIFF_OPER
14 !     #######################
15       SUBROUTINE DIFF_OPER(K)
16 !     #######################
17 !
18 !!****  *DIFF_OPER* - 
19 !!
20 !!    PURPOSE
21 !!    -------
22 !      
23 !
24 !!**  METHOD
25 !!    ------
26 !!     
27 !!     N.A.
28 !!
29 !!    EXTERNAL
30 !!    --------
31 !!      None
32 !!
33 !!    IMPLICIT ARGUMENTS
34 !!    ------------------
35 !!      Module
36 !!
37 !!    REFERENCE
38 !!    ---------
39 !!
40 !!
41 !!    AUTHOR
42 !!    ------
43 !!      J. Duron    * Laboratoire d'Aerologie *
44 !!
45 !!
46 !!    MODIFICATIONS
47 !!    -------------
48 !!      Original       08/01/96
49 !!      Updated   PM 
50 !-------------------------------------------------------------------------------
51 !
52 !*       0.    DECLARATIONS
53 !              ------------
54 !
55 USE MODD_ALLOC_FORDIACHRO
56 USE MODD_ALLOC2_FORDIACHRO
57 USE MODD_RESOLVCAR
58 USE MODD_PT_FOR_CH_FORDIACHRO
59 USE MODD_FILES_DIACHRO
60 USE MODD_TIT
61 USE MODD_TYPE_AND_LH
62 USE MODD_MEMCV
63 USE MODN_NCAR
64
65 IMPLICIT NONE
66 !
67 !*       0.1   Dummy arguments
68 !              ---------------
69
70 INTEGER  :: K
71 !
72 !*       0.1   Local variables
73 !              ---------------
74 INTEGER  :: JLOOPT, ILENT, ILENT2, ILENC, ILENFI, ILENTIM, ILENTIT
75 INTEGER  :: JA, JME, JME2, IP
76 INTEGER  :: INDK, INDKM1, INDNN
77 INTEGER  :: IFAC, INUMPM
78 INTEGER,SAVE  :: IDIFK, INIV1, INIV2
79 CHARACTER(LEN=800),SAVE :: YCAR
80 CHARACTER(LEN=100),SAVE :: YTITB3
81 CHARACTER(LEN=8) :: YTIM
82 REAL     :: ZSPVAL
83 !
84 !------------------------------------------------------------------------------
85 IDIFK=1
86 INIV1=0; INIV2=0
87 IF(LEV .OR. LPR .OR. LTK)THEN
88   print *,' NON NON NON NON NON NON NON NON NON NON NON NON NON NON NON NON NON'
89   print *,' **Diff_oper Operation IMPOSSIBLE . Seules sont autorisees les differences '
90   print *,' entre 2 niveaux de modele (identiques ou non) ou entre 2 altitudes semblables'
91   LPBREAD=.TRUE.
92   RETURN
93 ENDIF
94 if(nverbia > 0)then
95   print *,' ** Diff_oper NUMPM(MAX(K-1,1)),K-1,K ',NUMPM(MAX(K-1,1)),NUMPM(K-1),NUMPM(K),' K argument ',K
96 endif
97 IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
98   ZSPVAL=XSPVAL
99   XSPVAL=XSPVALT
100 ENDIF
101 ! Initialisation unquement si il n'y a pas eu de + ou - avant
102 INUMPM=0
103 DO JA=1,K-1
104   IF(NUMPM(JA) == 1 .OR. NUMPM(JA) == 2)THEN
105     INUMPM=INUMPM+1
106   ENDIF
107 ENDDO
108 IF(INUMPM == 0)THEN
109   YCAR(1:LEN(YCAR))=' '
110   ILENC=0
111   ILENC=ILENC+1
112 ELSE
113   ILENC=LEN_TRIM(YCAR)
114   ILENC=ILENC+1
115   YCAR(ILENC:ILENC+2)=' , '
116   ILENC=ILENC+3
117 ENDIF
118 if(nverbia > 0)then
119   print *,' **Diff_oper ILENC entree ',ILENC
120 endif
121 YTIM(1:LEN(YTIM))=' '
122 IF(NUMFILECUR2 /= NUMFILECUR)THEN
123   DO JA=1,NBFILES
124     IF(NUMFILES(JA) == NUMFILECUR)THEN
125       JME=JA
126     ENDIF
127     IF(NUMFILES(JA) == NUMFILECUR2)THEN
128       JME2=JA
129     ENDIF
130   ENDDO
131 ENDIF
132 !
133 ! Traitement d'un seul temps
134 !
135 IF(NBNDIA(K) /= 1 .OR. NBNDIA(K-1) /= 1 )THEN       
136   LPBREAD=.TRUE.
137   print *,' NB DE MASQUES (ou STATIONS) DEMANDES > 1 . PAS DE TRACE '
138   IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
139     XSPVAL=ZSPVAL
140   ENDIF
141   RETURN
142 ENDIF     
143
144 INDK=NNDIA(1,K); INDKM1=NNDIA(1,K-1)
145
146 !Je mets directement 1 pour le 1er indice de xlvlzdia puisque= nblvlzdia(k,indk)
147           if(nblvlzdia(k) == 1 .and. nblvlzdia(k-1) == 1 .AND. &
148              xlvlzdia(1,k) /= xlvlzdia(1,k-1) )then
149             print *,' NON NON NON NON NON NON NON NON NON NON NON NON NON NON NON NON NON'
150             print *,' **Diff_oper Operation IMPOSSIBLE . Seules sont autorisees les differences '
151             print *,' entre 2 niveaux de modele (identiques ou non) ou entre 2 altitudes semblables'
152             print *,' **Altitudes demandees : xlvlzdia(1,k-1),xlvlzdia(1,k) ',xlvlzdia(1,k-1),xlvlzdia(1,k)
153             LPBREAD=.TRUE.
154             IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
155               XSPVAL=ZSPVAL
156             ENDIF
157             RETURN
158           endif
159
160 IP=NPROCDIA(NBPROCDIA(K),K)
161
162 IF(NGRIDIA(IP) /= NGRIDIAM)THEN
163   IF(CTYPE == 'MASK')THEN
164     SELECT CASE(NGRIDIAM)
165       CASE(1,2,3,5)
166          SELECT CASE(NGRIDIA(IP))
167            CASE(1,2,3,5)
168              print *,' *** diff_oper Type MASK NGRIDIAM, NGRIDIA(IP), pas d interpolation ',NGRIDIAM,NGRIDIA(IP)
169            CASE(4,6,7)
170              print *,' *** diff_oper Type MASK NGRIDIAM, NGRIDIA(IP),&
171 & interpolation en K sur la grille du 1er processus traite (NGRIDIAM) ',NGRIDIAM,NGRIDIA(IP)
172              CALL INTERP_GRIDS(K)
173          END SELECT
174       CASE(4,6,7)
175          SELECT CASE(NGRIDIA(IP))
176            CASE(1,2,3,5)
177              print *,' *** diff_oper Type MASK NGRIDIAM, NGRIDIA(IP), interpolation en K&
178 & sur la grille du 1er processus traite (NGRIDIAM) ',NGRIDIAM,NGRIDIA(IP)
179              CALL INTERP_GRIDS(K)
180            CASE(4,6,7)
181              print *,' *** diff_oper Type MASK NGRIDIAM, NGRIDIA(IP), pas d interpolation ',NGRIDIAM,NGRIDIA(IP)
182          END SELECT
183     END SELECT
184   ELSE
185     print *,' *** diff_oper NGRIDIAM, NGRIDIA(IP), interpolation ',NGRIDIAM,NGRIDIA(IP)
186     CALL INTERP_GRIDS(K)
187   ENDIF
188 ENDIF
189
190 if(nverbia >0)then
191 print *,' DIFF_OPER  INDK INDKM1 ',INDK,INDKM1
192 print *,' DIFF_OPER  NBTIMEDIA(K,INDK) NBTIMEDIA(K-1,INDKM1) ', &
193 NBTIMEDIA(K,INDK),NBTIMEDIA(K-1,INDKM1)
194 endif
195
196 !******************************** 1 seul temps
197
198 IF(NBTIMEDIA(K,INDK) == 1 .AND. NBTIMEDIA(K-1,INDKM1) == 1)THEN
199 ! print *,' DIFF_OPER XVAR ',XVAR
200 ! print *,' DIFF_OPER XVAR2 ',XVAR2
201
202   IF(NBPROCDIA(K) /= 1 .OR. NBPROCDIA(K-1) /= 1 )THEN        !++++++++++
203     LPBREAD=.TRUE.
204     print *,' NB DE PROCESSUS DEMANDES > 1 . PAS DE TRACE '
205     IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
206       XSPVAL=ZSPVAL
207     ENDIF
208     RETURN
209
210   ELSE                                                       !++++++++++
211 !-----------------------------------------------------------------------
212 !   IF(K <= 2)THEN
213     IF(NUMPM(K-1) == 0 .OR. NUMPM(MAX(K-1,1)) == 3)THEN
214       if(nverbia > 0)then
215         print *,' diff_oper1 K NUMPM(K-1) ',K,NUMPM(K-1)
216       endif
217       if(nblvlkdia(k,indk) == 1 .and. nblvlkdia(k-1,indk) == 1)then
218         print *,' diff_oper1 Niveaux en K de part et d autre de MINUS '
219         print *,' K1= ',NLVLKDIA(1,K-1,INDK),' K2= ',NLVLKDIA(1,K,INDK)
220 ! INIV1=le 1er dans la directive <-> K-1 , INIV2=le 2e=courant <-> K
221 ! Janv 2001
222         IF(CTYPE == 'CART' .OR. CTYPE == 'MASK')THEN
223             INIV1=NLVLKDIA(1,K-1,INDK)-NKL+1
224             INIV2=NLVLKDIA(1,K,INDK)-NKL+1
225         ELSE
226 ! Janv 2001
227           INIV1=NLVLKDIA(1,K-1,INDK)
228           INIV2=NLVLKDIA(1,K,INDK)
229 ! Janv 2001
230         ENDIF
231 ! Janv 2001
232         IDIFK=2
233       endif
234
235       IF(LMUMVM .OR. LMUTVT .OR. LUMVM .OR. LUTVT .OR. &
236          LSUMVM .OR. LSUTVT .OR. LMLSUMVM .OR. LMLSUTVT)THEN
237         CGROUPS(K-1)=ADJUSTL(CGROUPS(K-1))
238         ILENTIT=LEN_TRIM(CGROUPS(K-1))
239         YCAR(ILENC:ILENC+ILENTIT-1)=CGROUPS(K-1)(1:ILENTIT)
240       ELSE
241         CTITRE2(NPROCDIA(1,K-1))=ADJUSTL(CTITRE2(NPROCDIA(1,K-1)))
242         ILENTIT=LEN_TRIM(CTITRE2(NPROCDIA(1,K-1)))
243         YCAR(ILENC:ILENC+ILENTIT-1)=CTITRE2(NPROCDIA(1,K-1))(1:ILENTIT)
244       ENDIF
245       YCAR=ADJUSTL(YCAR)
246       ILENC=LEN_TRIM(YCAR)
247       ILENC=ILENC+2
248       YCAR(ILENC:ILENC)='('
249       ILENC=ILENC+1
250       IF(NUMFILECUR2 /= NUMFILECUR)THEN
251         CFILEDIAS(JME2)=ADJUSTL(CFILEDIAS(JME2))
252         ILENFI=LEN_TRIM(CFILEDIAS(JME2))
253         YCAR(ILENC:ILENC+ILENFI-1)=CFILEDIAS(JME2)(1:ILENFI)
254         ILENC=ILENC+ILENFI
255         YCAR(ILENC:ILENC+1)=')('
256         ILENC=ILENC+2
257       ENDIF
258
259       IF(IDIFK == 2 .AND. INIV1 /= INIV2)THEN
260         YCAR(ILENC:ILENC+1)='K='
261         ILENC=ILENC+2
262         WRITE(YCAR(ILENC:ILENC+1),'(I2)')INIV1
263         ILENC=ILENC+2
264         YCAR(ILENC:ILENC+1)=')('
265         ILENC=ILENC+2
266       ENDIF
267
268       IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
269         WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),INDKM1)
270       ELSE
271         WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1)
272       ENDIF
273       YTIM=ADJUSTL(YTIM)
274 !     print *,' YTIM ',YTIM
275       ILENTIM=LEN_TRIM(YTIM)
276       YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
277       YTIM(1:LEN(YTIM))=' '
278       ILENC=ILENC+ILENTIM
279       IF(LMINUS)THEN
280         YCAR(ILENC:ILENC+3)=') - '
281       ELSE IF(LPLUS)THEN
282         YCAR(ILENC:ILENC+3)=') + '
283       ENDIF
284       ILENC=ILENC+4
285
286     ELSE
287
288       YCAR=ADJUSTL(CTITB3)
289       ILENC=LEN_TRIM(YCAR)+1
290       IF(LMINUS)THEN
291         YCAR(ILENC:ILENC+2)=' - '
292       ELSE IF(LPLUS)THEN
293         YCAR(ILENC:ILENC+2)=' + '
294       ENDIF
295       ILENC=ILENC+3
296
297     ENDIF
298 !-----------------------------------------------------------------------
299     IF(LMUMVM .OR. LMUTVT .OR. LUMVM .OR. LUTVT .OR. &
300        LSUMVM .OR. LSUTVT .OR. LMLSUMVM .OR. LMLSUTVT)THEN
301       ILENTIT=LEN_TRIM(CGROUPS(K))
302       YCAR(ILENC:ILENC+ILENTIT-1)=CGROUPS(K)(1:ILENTIT)
303     ELSE
304       CTITRE(NPROCDIA(1,K))=ADJUSTL(CTITRE(NPROCDIA(1,K)))
305       ILENTIT=LEN_TRIM(CTITRE(NPROCDIA(1,K)))
306       YCAR(ILENC:ILENC+ILENTIT-1)=CTITRE(NPROCDIA(1,K))(1:ILENTIT)
307     ENDIF
308     YCAR=ADJUSTL(YCAR)
309     ILENC=LEN_TRIM(YCAR)
310     ILENC=ILENC+2
311     YCAR(ILENC:ILENC)='('
312     ILENC=ILENC+1
313 !   print *,' AV 2eme IF'
314     IF(NUMFILECUR2 /= NUMFILECUR)THEN
315       CFILEDIAS(JME)=ADJUSTL(CFILEDIAS(JME))
316       ILENFI=LEN_TRIM(CFILEDIAS(JME))
317       YCAR(ILENC:ILENC+ILENFI-1)=CFILEDIAS(JME)(1:ILENFI)
318       ILENC=ILENC+ILENFI
319       YCAR(ILENC:ILENC+1)=')('
320       ILENC=ILENC+2
321     ENDIF
322
323       IF(IDIFK == 2 .AND. INIV1 /= INIV2)THEN
324         YCAR(ILENC:ILENC+1)='K='
325         ILENC=ILENC+2
326         WRITE(YCAR(ILENC:ILENC+1),'(I2)')INIV2
327         ILENC=ILENC+2
328         YCAR(ILENC:ILENC+1)=')('
329         ILENC=ILENC+2
330       ENDIF
331
332       IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
333         WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK)
334       ELSE
335         WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1)
336       ENDIF
337     YTIM=ADJUSTL(YTIM)
338 !   print *,' YTIM ',YTIM,' ILENC ',ILENC
339     ILENTIM=LEN_TRIM(YTIM)
340     YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
341     print *,' YCAR ',YCAR(1:LEN_TRIM(YCAR))
342 !   YTIM(1:LEN(YTIM))=' '
343     ILENC=ILENC+ILENTIM
344 !   print *,' ILENC ',ILENC
345     YCAR(ILENC:ILENC)=')'
346 !   print *,' YCAR ',YCAR
347
348 !   IF(K <= 2)THEN
349     IF(NUMPM(K-1) == 0 .OR. NUMPM(MAX(K-1,1)) == 3)THEN
350       if(nverbia > 0)then
351         print *,' diff_oper1 K NUMPM(K-1) ',K,NUMPM(K-1)
352       endif
353       if(nblvlkdia(k,indk) == 1 .and. nblvlkdia(k-1,indk) == 1)then
354         print *,' diff_oper1-2 Niveaux en K de part et d autre de MINUS '
355         print *,' K1= ',NLVLKDIA(1,K-1,INDK),' K2= ',NLVLKDIA(1,K,INDK)
356 ! Janv 2001
357         IF(CTYPE == 'CART' .OR. CTYPE == 'MASK')THEN
358           INIV1=NLVLKDIA(1,K-1,INDK)-NKL+1
359           INIV2=NLVLKDIA(1,K,INDK)-NKL+1
360         ELSE
361 ! Janv 2001
362           INIV1=NLVLKDIA(1,K-1,INDK)
363           INIV2=NLVLKDIA(1,K,INDK)
364 ! Janv 2001
365         ENDIF
366 ! Janv 2001
367         IDIFK=2
368       endif
369       LTITDEF=.FALSE.
370 !     YTITB3(1:LEN(YTITB3))=' '
371 !     YTITB3=ADJUSTL(CTITB3)
372     ENDIF
373 !!! 1/3/04
374     IF(CTITB3 /= 'DEFAULT')THEN
375     ELSE
376 !!! 1/3/04
377     CTITB3=ADJUSTL(YCAR(1:100))
378     CTITB3=ADJUSTL(CTITB3)
379 !!! 1/3/04
380     ENDIF
381 !!! 1/3/04
382     print *,' CTITB3 ',CTITB3
383     IF(LMINUS)THEN
384       IFAC=-1
385     ELSE IF(LPLUS)THEN
386       IFAC=1
387     ENDIF
388
389     IF(IDIFK == 2)THEN
390 !!Mai 2003
391       WHERE((XVAR(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK, &
392 !     WHERE((XVAR(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
393         NPROCDIA(NBPROCDIA(K),K)) == XSPVAL) .OR.  &
394         (XVAR2(:,:,INIV1,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),INDKM1, &
395 !       (XVAR2(:,:,INIV1,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
396         NPROCDIA(NBPROCDIA(K-1),K-1)) == XSPVAL))
397         XVAR(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK, &
398 !       XVAR(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
399         NPROCDIA(NBPROCDIA(K),K))= XSPVAL
400       ELSEWHERE
401         XVAR(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK,  &
402 !       XVAR(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1,  &
403         NPROCDIA(NBPROCDIA(K),K))=  &
404         XVAR2(:,:,INIV1,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),INDKM1, &
405 !       XVAR2(:,:,INIV1,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
406         NPROCDIA(NBPROCDIA(K-1),K-1))+  &
407         IFAC * XVAR(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK, &
408 !       IFAC * XVAR(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
409         NPROCDIA(NBPROCDIA(K),K))
410       END WHERE
411     ELSE
412       WHERE((XVAR(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK, &
413 !     WHERE((XVAR(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
414         NPROCDIA(NBPROCDIA(K),K)) == XSPVAL) .OR.  &
415         (XVAR2(:,:,:,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),INDKM1, &
416 !       (XVAR2(:,:,:,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
417         NPROCDIA(NBPROCDIA(K-1),K-1)) == XSPVAL))
418         XVAR(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK, &
419 !       XVAR(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
420         NPROCDIA(NBPROCDIA(K),K))= XSPVAL
421       ELSEWHERE
422         XVAR(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK,  &
423 !       XVAR(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1,  &
424         NPROCDIA(NBPROCDIA(K),K))=  &
425         XVAR2(:,:,:,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),INDKM1, &
426 !       XVAR2(:,:,:,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
427         NPROCDIA(NBPROCDIA(K-1),K-1))+  &
428         IFAC * XVAR(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDK, &
429 !       IFAC * XVAR(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
430 !!Mai 2003
431         NPROCDIA(NBPROCDIA(K),K))
432       END WHERE
433     ENDIF
434
435     IF(ALLOCATED(XUMEM))THEN
436       IF(IDIFK == 2)THEN
437         WHERE((XU(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
438           NPROCDIA(NBPROCDIA(K),K)) == XSPVAL) .OR.  &
439           (XUMEM(:,:,INIV1,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
440           NPROCDIA(NBPROCDIA(K-1),K-1)) == XSPVAL))
441           XU(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
442           NPROCDIA(NBPROCDIA(K),K))= XSPVAL
443         ELSEWHERE
444           XU(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1,  &
445           NPROCDIA(NBPROCDIA(K),K))=  &
446           XUMEM(:,:,INIV1,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
447           NPROCDIA(NBPROCDIA(K-1),K-1))+  &
448           IFAC * XU(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
449           NPROCDIA(NBPROCDIA(K),K))
450         END WHERE
451       ELSE
452         WHERE((XU(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
453           NPROCDIA(NBPROCDIA(K),K)) == XSPVAL) .OR.  &
454           (XUMEM(:,:,:,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
455           NPROCDIA(NBPROCDIA(K-1),K-1)) == XSPVAL))
456           XU(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
457           NPROCDIA(NBPROCDIA(K),K))= XSPVAL
458         ELSEWHERE
459           XU(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1,  &
460           NPROCDIA(NBPROCDIA(K),K))=  &
461           XUMEM(:,:,:,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
462           NPROCDIA(NBPROCDIA(K-1),K-1))+  &
463           IFAC * XU(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
464           NPROCDIA(NBPROCDIA(K),K))
465         END WHERE
466       ENDIF
467     ENDIF
468     IF(ALLOCATED(XVMEM))THEN
469       IF(IDIFK == 2)THEN
470         WHERE((XV(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
471           NPROCDIA(NBPROCDIA(K),K)) == XSPVAL) .OR.  &
472           (XVMEM(:,:,INIV1,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
473           NPROCDIA(NBPROCDIA(K-1),K-1)) == XSPVAL))
474           XV(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
475           NPROCDIA(NBPROCDIA(K),K))= XSPVAL
476         ELSEWHERE
477           XV(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1,  &
478           NPROCDIA(NBPROCDIA(K),K))=  &
479           XVMEM(:,:,INIV1,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
480           NPROCDIA(NBPROCDIA(K-1),K-1))+  &
481           IFAC * XV(:,:,INIV2,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
482           NPROCDIA(NBPROCDIA(K),K))
483         END WHERE
484       ELSE
485         WHERE((XV(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
486           NPROCDIA(NBPROCDIA(K),K)) == XSPVAL) .OR.  &
487           (XVMEM(:,:,:,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
488           NPROCDIA(NBPROCDIA(K-1),K-1)) == XSPVAL))
489           XV(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
490           NPROCDIA(NBPROCDIA(K),K))= XSPVAL
491         ELSEWHERE
492           XV(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1,  &
493           NPROCDIA(NBPROCDIA(K),K))=  &
494           XVMEM(:,:,:,NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1, &
495           NPROCDIA(NBPROCDIA(K-1),K-1))+  &
496           IFAC * XV(:,:,:,NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1, &
497           NPROCDIA(NBPROCDIA(K),K))
498         END WHERE
499       ENDIF
500     ENDIF
501   ENDIF                                                      !++++++++++
502
503 !********************************   plusieurs temps
504
505 ELSE
506
507 ! Expression du temps en sequentiel   SSSSSSSSSSSS
508   IF(.NOT.LTINCRDIA(K,INDK))THEN
509
510     IF(NBTIMEDIA(K,INDK) == NBTIMEDIA(K-1,INDKM1))THEN
511 ! Intervalle de temps de meme longueur pour les 2 champs OK
512
513       IF(NBPROCDIA(K) /= 1 .OR. NBPROCDIA(K-1) /= 1 )THEN
514         LPBREAD=.TRUE.
515         print *,' NB DE PROCESSUS DEMANDES > 1 . PAS DE TRACE '
516         IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
517           XSPVAL=ZSPVAL
518         ENDIF
519         RETURN
520       ELSE
521 !       print *,' PASSAGE ICI'
522         IF(LMUMVM .OR. LMUTVT .OR. LUMVM .OR. LUTVT .OR. &
523            LSUMVM .OR. LSUTVT .OR. LMLSUMVM .OR. LMLSUTVT)THEN
524           CGROUPS(K-1)=ADJUSTL(CGROUPS(K-1))
525           ILENTIT=LEN_TRIM(CGROUPS(K-1))
526           YCAR(ILENC:ILENC+ILENTIT-1)=CGROUPS(K-1)(1:ILENTIT)
527         ELSE
528           CTITRE2(NPROCDIA(1,K-1))=ADJUSTL(CTITRE2(NPROCDIA(1,K-1)))
529           ILENTIT=LEN_TRIM(CTITRE2(NPROCDIA(1,K-1)))
530           YCAR(ILENC:ILENC+ILENTIT-1)=CTITRE2(NPROCDIA(1,K-1))(1:ILENTIT)
531         ENDIF
532         YCAR=ADJUSTL(YCAR)
533         ILENC=LEN_TRIM(YCAR)
534         ILENC=ILENC+2
535         YCAR(ILENC:ILENC)='('
536         ILENC=ILENC+1
537         IF(NUMFILECUR2 /= NUMFILECUR)THEN
538           CFILEDIAS(JME2)=ADJUSTL(CFILEDIAS(JME2))
539           ILENFI=LEN_TRIM(CFILEDIAS(JME2))
540           YCAR(ILENC:ILENC+ILENFI-1)=CFILEDIAS(JME2)(1:ILENFI)
541           ILENC=ILENC+ILENFI
542           YCAR(ILENC:ILENC+1)=')('
543           ILENC=ILENC+2
544         ENDIF
545
546       IF(IDIFK == 2 .AND. INIV1 /= INIV2)THEN
547         YCAR(ILENC:ILENC+1)='K='
548         ILENC=ILENC+2
549         WRITE(YCAR(ILENC:ILENC+1),'(I2)')INIV1
550         ILENC=ILENC+2
551         YCAR(ILENC:ILENC+1)=')('
552         ILENC=ILENC+2
553       ENDIF
554
555 ! Ecriture de la premiere serie de temps
556 !-----------------------------------------------------------------------
557 !       IF(K <=2)THEN
558         IF(NUMPM(K-1) == 0 .OR. NUMPM(MAX(K-1,1)) == 3)THEN
559           if(nverbia > 0)then
560             print *,' diff_oper2 K NUMPM(K-1) ',K,NUMPM(K-1)
561           endif
562           if(nblvlkdia(k,indk) == 1 .and. nblvlkdia(k-1,indk) == 1)then
563             print *,' diff_oper2 Niveaux en K de part et d autre de MINUS '
564             print *,' K1= ',NLVLKDIA(1,K-1,INDK),' K2= ',NLVLKDIA(1,K,INDK)
565 ! Janv 2001
566             IF(CTYPE == 'CART' .OR. CTYPE == 'MASK')THEN
567               INIV1=NLVLKDIA(1,K-1,INDK)-NKL+1
568               INIV2=NLVLKDIA(1,K,INDK)-NKL+1
569             ELSE
570 ! Janv 2001
571               INIV1=NLVLKDIA(1,K-1,INDK)
572               INIV2=NLVLKDIA(1,K,INDK)
573 ! Janv 2001
574             ENDIF
575 ! Janv 2001
576             IDIFK=2
577           endif
578
579           IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
580             WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(1,K-1,INDKM1),INDKM1)
581           ELSE
582             WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(1,K-1,INDKM1),1)
583           ENDIF
584           YTIM=ADJUSTL(YTIM)
585           ILENTIM=LEN_TRIM(YTIM)
586           YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
587           YTIM(1:LEN(YTIM))=' '
588           ILENC=ILENC+ILENTIM
589       IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
590         INDNN=INDKM1
591       ELSE
592         INDNN=1
593       ENDIF
594 !         IF(XTRAJT2(NTIMEDIA(1,K-1,INDKM1),1) /= XTRAJT2(NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),1))THEN
595           IF(XTRAJT2(NTIMEDIA(1,K-1,INDKM1),INDNN) /= XTRAJT2(NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),INDNN))THEN
596             YCAR(ILENC:ILENC+2)=' - '
597             ILENC=ILENC+3
598               WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(NBTIMEDIA(K-1,INDKM1),K-1,INDKM1),INDNN)
599             YTIM=ADJUSTL(YTIM)
600             ILENTIM=LEN_TRIM(YTIM)
601             YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
602             YTIM(1:LEN(YTIM))=' '
603             ILENC=ILENC+ILENTIM
604
605           ELSE
606
607             ILENC=ILENC+1
608           ENDIF
609           IF(LMINUS)THEN
610             YCAR(ILENC:ILENC+3)=') - '
611           ELSE IF(LPLUS)THEN
612             YCAR(ILENC:ILENC+3)=') + '
613           ENDIF
614           ILENC=ILENC+4
615
616         ELSE
617     
618           YCAR=ADJUSTL(CTITB3)
619           ILENC=LEN_TRIM(YCAR)+1
620           IF(LMINUS)THEN
621             YCAR(ILENC:ILENC+2)=' - '
622           ELSE IF(LPLUS)THEN
623             YCAR(ILENC:ILENC+2)=' + '
624           ENDIF
625           ILENC=ILENC+3
626     
627         ENDIF
628 !-----------------------------------------------------------------------
629 !  FIN Ecriture de la premiere serie de temps
630         IF(LMUMVM .OR. LMUTVT .OR. LUMVM .OR. LUTVT .OR. &
631            LSUMVM .OR. LSUTVT .OR. LMLSUMVM .OR. LMLSUTVT)THEN
632           ILENTIT=LEN_TRIM(CGROUPS(K))
633           YCAR(ILENC:ILENC+ILENTIT-1)=CGROUPS(K)(1:ILENTIT)
634         ELSE
635           CTITRE(NPROCDIA(1,K))=ADJUSTL(CTITRE(NPROCDIA(1,K)))
636           ILENTIT=LEN_TRIM(CTITRE(NPROCDIA(1,K)))
637           YCAR(ILENC:ILENC+ILENTIT-1)=CTITRE(NPROCDIA(1,K))(1:ILENTIT)
638         ENDIF
639         YCAR=ADJUSTL(YCAR)
640         ILENC=LEN_TRIM(YCAR)
641         ILENC=ILENC+2
642         YCAR(ILENC:ILENC)='('
643         ILENC=ILENC+1
644         IF(NUMFILECUR2 /= NUMFILECUR)THEN
645           CFILEDIAS(JME)=ADJUSTL(CFILEDIAS(JME))
646           ILENFI=LEN_TRIM(CFILEDIAS(JME))
647           YCAR(ILENC:ILENC+ILENFI-1)=CFILEDIAS(JME)(1:ILENFI)
648           ILENC=ILENC+ILENFI
649           YCAR(ILENC:ILENC+1)=')('
650           ILENC=ILENC+2
651         ENDIF
652
653       IF(IDIFK == 2 .AND. INIV1 /= INIV2)THEN
654         YCAR(ILENC:ILENC+1)='K='
655         ILENC=ILENC+2
656         WRITE(YCAR(ILENC:ILENC+1),'(I2)')INIV2
657         ILENC=ILENC+2
658         YCAR(ILENC:ILENC+1)=')('
659         ILENC=ILENC+2
660       ENDIF
661
662 ! Ecriture de la deuxieme serie de temps
663       IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
664         WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(1,K,INDK),INDK)
665       ELSE
666         WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(1,K,INDK),1)
667       ENDIF
668         YTIM=ADJUSTL(YTIM)
669         ILENTIM=LEN_TRIM(YTIM)
670         YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
671         YTIM(1:LEN(YTIM))=' '
672         ILENC=ILENC+ILENTIM
673
674         IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
675           INDNN=INDK
676         ELSE
677           INDNN=1
678         ENDIF
679 !       IF(XTRAJT(NTIMEDIA(1,K,INDK),1) /= XTRAJT(NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1))THEN
680         IF(XTRAJT(NTIMEDIA(1,K,INDK),INDNN) /= XTRAJT(NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDNN))THEN
681           YCAR(ILENC:ILENC+2)=' - '
682           ILENC=ILENC+3
683           WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),INDNN)
684 !         WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(NBTIMEDIA(K,INDK),K,INDK),1)
685           YTIM=ADJUSTL(YTIM)
686           ILENTIM=LEN_TRIM(YTIM)
687           YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
688           YTIM(1:LEN(YTIM))=' '
689           ILENC=ILENC+ILENTIM
690
691         ELSE
692
693           ILENC=ILENC+1
694         ENDIF
695         YCAR(ILENC:ILENC)=')'
696
697 !       IF(K <= 2)THEN
698         IF(NUMPM(K-1) == 0 .OR. NUMPM(MAX(K-1,1)) == 3)THEN
699           if(nverbia > 0)then
700             print *,' diff_oper2 K NUMPM(K-1) ',K,NUMPM(K-1)
701           endif
702           if(nblvlkdia(k,indk) == 1 .and. nblvlkdia(k-1,indk) == 1)then
703             print *,' diff_oper2-2 Niveaux en K de part et d autre de MINUS '
704             print *,' K1= ',NLVLKDIA(1,K-1,INDK),' K2= ',NLVLKDIA(1,K,INDK)
705 ! Janv 2001
706             IF(CTYPE == 'CART' .OR. CTYPE == 'MASK')THEN
707               INIV1=NLVLKDIA(1,K-1,INDK)-NKL+1
708               INIV2=NLVLKDIA(1,K,INDK)-NKL+1
709             ELSE
710 ! Janv 2001
711               INIV1=NLVLKDIA(1,K-1,INDK)
712               INIV2=NLVLKDIA(1,K,INDK)
713 ! Janv 2001
714             ENDIF
715 ! Janv 2001
716             IDIFK=2
717           endif
718           LTITDEF=.FALSE.
719 !         YTITB3(1:LEN(YTITB3))=' '
720 !         YTITB3=ADJUSTL(CTITB3)
721         ENDIF
722
723 !!! 1/3/04
724     IF(CTITB3 /= 'DEFAULT')THEN
725     ELSE
726 !!! 1/3/04
727         CTITB3=ADJUSTL(YCAR(1:100))
728         CTITB3=ADJUSTL(CTITB3)
729 !!! 1/3/04
730     ENDIF
731 !!! 1/3/04
732         print *,' CTITB3 ',CTITB3
733         DO JLOOPT=1,NBTIMEDIA(K,INDK)
734           IF(LMINUS)THEN
735             IFAC=-1
736           ELSE IF(LPLUS)THEN
737             IFAC=1
738           ENDIF
739           IF(IDIFK == 2)THEN
740 ! Mai 2003
741             WHERE((XVAR(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),INDK,NPROCDIA(1,K))==XSPVAL)&
742 !           WHERE((XVAR(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))==XSPVAL)&
743             .OR. (XVAR2(:,:,INIV1,NTIMEDIA(JLOOPT,K-1,INDKM1),INDKM1, &
744 !           .OR. (XVAR2(:,:,INIV1,NTIMEDIA(JLOOPT,K-1,INDKM1),1, &
745             NPROCDIA(1,K-1))==XSPVAL))
746               XVAR(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),INDK,NPROCDIA(1,K))=XSPVAL
747 !             XVAR(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))=XSPVAL
748             ELSEWHERE
749               XVAR(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),INDK,NPROCDIA(1,K)) =  &
750 !             XVAR(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K)) =  &
751               XVAR2(:,:,INIV1,NTIMEDIA(JLOOPT,K-1,INDKM1),INDKM1,NPROCDIA(1,K-1)) + &
752 !             XVAR2(:,:,INIV1,NTIMEDIA(JLOOPT,K-1,INDKM1),1,NPROCDIA(1,K-1)) + &
753               IFAC * XVAR(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),INDK,NPROCDIA(1,K))
754 !             IFAC * XVAR(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))
755             END WHERE
756           ELSE
757             WHERE((XVAR(:,:,:,NTIMEDIA(JLOOPT,K,INDK),INDK,NPROCDIA(1,K))==XSPVAL)&
758 !           WHERE((XVAR(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))==XSPVAL)&
759             .OR. (XVAR2(:,:,:,NTIMEDIA(JLOOPT,K-1,INDKM1),INDKM1, &
760 !           .OR. (XVAR2(:,:,:,NTIMEDIA(JLOOPT,K-1,INDKM1),1, &
761             NPROCDIA(1,K-1))==XSPVAL))
762               XVAR(:,:,:,NTIMEDIA(JLOOPT,K,INDK),INDK,NPROCDIA(1,K))=XSPVAL
763 !             XVAR(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))=XSPVAL
764             ELSEWHERE
765               XVAR(:,:,:,NTIMEDIA(JLOOPT,K,INDK),INDK,NPROCDIA(1,K)) =  &
766 !             XVAR(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K)) =  &
767               XVAR2(:,:,:,NTIMEDIA(JLOOPT,K-1,INDKM1),INDKM1,NPROCDIA(1,K-1)) + &
768 !             XVAR2(:,:,:,NTIMEDIA(JLOOPT,K-1,INDKM1),1,NPROCDIA(1,K-1)) + &
769               IFAC * XVAR(:,:,:,NTIMEDIA(JLOOPT,K,INDK),INDK,NPROCDIA(1,K))
770 !             IFAC * XVAR(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))
771             END WHERE
772           ENDIF
773           IF(ALLOCATED(XUMEM))THEN
774             IF(IDIFK == 2)THEN
775               WHERE((XU(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))==XSPVAL)&
776               .OR. (XUMEM(:,:,INIV1,NTIMEDIA(JLOOPT,K-1,INDKM1),1, &
777               NPROCDIA(1,K-1))==XSPVAL))
778                 XU(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))=XSPVAL
779               ELSEWHERE
780                 XU(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K)) =  &
781                 XUMEM(:,:,INIV1,NTIMEDIA(JLOOPT,K-1,INDKM1),1,NPROCDIA(1,K-1)) + &
782                 IFAC * XU(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))
783               END WHERE
784             ELSE
785               WHERE((XU(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))==XSPVAL)&
786               .OR. (XUMEM(:,:,:,NTIMEDIA(JLOOPT,K-1,INDKM1),1, &
787               NPROCDIA(1,K-1))==XSPVAL))
788                 XU(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))=XSPVAL
789               ELSEWHERE
790                 XU(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K)) =  &
791                 XUMEM(:,:,:,NTIMEDIA(JLOOPT,K-1,INDKM1),1,NPROCDIA(1,K-1)) + &
792                 IFAC * XU(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))
793               END WHERE
794             ENDIF
795           ENDIF
796           IF(ALLOCATED(XVMEM))THEN
797             IF(IDIFK == 2)THEN
798               WHERE((XV(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))==XSPVAL)&
799                 .OR. (XVMEM(:,:,INIV1,NTIMEDIA(JLOOPT,K-1,INDKM1),1, &
800                 NPROCDIA(1,K-1))==XSPVAL))
801                 XV(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))=XSPVAL
802               ELSEWHERE
803                 XV(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K)) =  &
804                 XVMEM(:,:,INIV1,NTIMEDIA(JLOOPT,K-1,INDKM1),1,NPROCDIA(1,K-1)) + &
805                 IFAC * XV(:,:,INIV2,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))
806               END WHERE
807             ELSE
808               WHERE((XV(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))==XSPVAL)&
809                 .OR. (XVMEM(:,:,:,NTIMEDIA(JLOOPT,K-1,INDKM1),1, &
810                 NPROCDIA(1,K-1))==XSPVAL))
811                 XV(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))=XSPVAL
812               ELSEWHERE
813                 XV(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K)) =  &
814                 XVMEM(:,:,:,NTIMEDIA(JLOOPT,K-1,INDKM1),1,NPROCDIA(1,K-1)) + &
815                 IFAC * XV(:,:,:,NTIMEDIA(JLOOPT,K,INDK),1,NPROCDIA(1,K))
816               END WHERE
817             ENDIF
818           ENDIF
819         ENDDO
820       ENDIF
821     ELSE
822 ! Intervalle de temps de longueur differente  pour les 2 champs. On ne trace pas
823       LPBREAD=.TRUE.
824       print *,' INTERVALLE DE TEMPS DIFFERENT POUR LES 2 CHAMPS. PAS DE TRACE '
825       IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
826         XSPVAL=ZSPVAL
827       ENDIF
828       RETURN
829     ENDIF
830
831 !           A VERIFIER                SSSSSSSSSSSS
832   ELSE
833 ! Temps incremental
834     IF(NBPROCDIA(K) /= 1 .OR. NBPROCDIA(K-1) /= 1 )THEN
835       LPBREAD=.TRUE.
836       print *,' NB DE PROCESSUS DEMANDES > 1 . PAS DE TRACE '
837       IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
838         XSPVAL=ZSPVAL
839       ENDIF
840       RETURN
841     ELSE
842       ILENT=(NTIMEDIA(2,K,INDK)-NTIMEDIA(1,K,INDK))/NTIMEDIA(3,K,INDK)
843       ILENT2=(NTIMEDIA(2,K-1,INDKM1)-NTIMEDIA(1,K-1,INDKM1))/NTIMEDIA(3,K-1,INDKM1)
844       IF(ILENT2 /= ILENT)THEN
845         LPBREAD=.TRUE.
846         print *,' INTERVALLE DE TEMPS DIFFERENT POUR LES 2 CHAMPS. PAS DE TRACE '
847         print *,' (',XTIMEDIA(1,K-1,INDKM1),' - (',XTIMEDIA(2,K-1,INDKM1),') ET (', &
848         XTIMEDIA(1,K,INDK),' - (',XTIMEDIA(2,K,INDK),')'
849         IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
850           XSPVAL=ZSPVAL
851         ENDIF
852         RETURN
853       ELSE
854 !-----------------------------------------------------------------------
855 !       IF(K <= 2)THEN
856         IF(NUMPM(K-1) == 0 .OR. NUMPM(MAX(K-1,1)) == 3)THEN
857           if(nverbia > 0)then
858             print *,' diff_oper3 K NUMPM(K-1) ',K,NUMPM(K-1)
859           endif
860       if(nblvlkdia(k,indk) == 1 .and. nblvlkdia(k-1,indk) == 1)then
861         print *,' diff_oper3 Niveaux en K de part et d autre de MINUS '
862         print *,' K1= ',NLVLKDIA(1,K-1,INDK),' K2= ',NLVLKDIA(1,K,INDK)
863 ! INIV1=le 1er dans la directive <-> K-1 , INIV2=le 2e=courant <-> K
864 ! Janv 2001
865         IF(CTYPE == 'CART' .OR. CTYPE == 'MASK')THEN
866           INIV1=NLVLKDIA(1,K-1,INDK)-NKL+1
867           INIV2=NLVLKDIA(1,K,INDK)-NKL+1
868         ELSE
869 ! Janv 2001
870           INIV1=NLVLKDIA(1,K-1,INDK)
871           INIV2=NLVLKDIA(1,K,INDK)
872 ! Janv 2001
873         ENDIF
874 ! Janv 2001
875         IDIFK=2
876       endif
877
878
879           IF(LMUMVM .OR. LMUTVT .OR. LUMVM .OR. LUTVT .OR. &
880             LSUMVM .OR. LSUTVT .OR. LMLSUMVM .OR. LMLSUTVT)THEN
881             CGROUPS(K-1)=ADJUSTL(CGROUPS(K-1))
882             ILENTIT=LEN_TRIM(CGROUPS(K-1))
883             YCAR(ILENC:ILENC+ILENTIT-1)=CGROUPS(K-1)(1:ILENTIT)
884           ELSE
885             CTITRE2(NPROCDIA(1,K-1))=ADJUSTL(CTITRE2(NPROCDIA(1,K-1)))
886             ILENTIT=LEN_TRIM(CTITRE2(NPROCDIA(1,K-1)))
887             YCAR(ILENC:ILENC+ILENTIT-1)=CTITRE2(NPROCDIA(1,K-1))(1:ILENTIT)
888           ENDIF
889           YCAR=ADJUSTL(YCAR)
890           ILENC=LEN_TRIM(YCAR)
891           ILENC=ILENC+2
892           YCAR(ILENC:ILENC)='('
893           ILENC=ILENC+1
894           IF(NUMFILECUR2 /= NUMFILECUR)THEN
895             CFILEDIAS(JME2)=ADJUSTL(CFILEDIAS(JME2))
896             ILENFI=LEN_TRIM(CFILEDIAS(JME2))
897             YCAR(ILENC:ILENC+ILENFI-1)=CFILEDIAS(JME2)(1:ILENFI)
898             ILENC=ILENC+ILENFI
899             YCAR(ILENC:ILENC+1)=')('
900             ILENC=ILENC+2
901           ENDIF
902
903       IF(IDIFK == 2 .AND. INIV1 /= INIV2) THEN
904         YCAR(ILENC:ILENC+1)='K='
905         ILENC=ILENC+2
906         WRITE(YCAR(ILENC:ILENC+1),'(I2)')INIV1
907         ILENC=ILENC+2
908         YCAR(ILENC:ILENC+1)=')('
909         ILENC=ILENC+2
910       ENDIF
911
912 ! Ecriture de la premiere serie de temps
913           IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
914             WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(1,K-1,INDKM1),INDKM1)
915           ELSE
916             WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(1,K-1,INDKM1),1)
917           ENDIF
918           YTIM=ADJUSTL(YTIM)
919           ILENTIM=LEN_TRIM(YTIM)
920           YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
921           YTIM(1:LEN(YTIM))=' '
922           ILENC=ILENC+ILENTIM
923
924           IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
925             INDNN=INDKM1
926           ELSE
927             INDNN=1
928           ENDIF
929 !         IF(XTRAJT2(NTIMEDIA(2,K-1,INDKM1),1) /= XTRAJT2(NTIMEDIA(1,K-1,INDKM1),1))THEN
930           IF(XTRAJT2(NTIMEDIA(2,K-1,INDKM1),INDNN) /= XTRAJT2(NTIMEDIA(1,K-1,INDKM1),INDNN))THEN
931
932             YCAR(ILENC:ILENC+2)=' - '
933             ILENC=ILENC+3
934             WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(2,K-1,INDKM1),INDNN)
935 !           WRITE(YTIM,'(F8.0)')XTRAJT2(NTIMEDIA(2,K-1,INDKM1),1)
936             YTIM=ADJUSTL(YTIM)
937             ILENTIM=LEN_TRIM(YTIM)
938             YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
939             YTIM(1:LEN(YTIM))=' '
940             ILENC=ILENC+ILENTIM
941
942           ELSE
943             ILENC=ILENC+1
944           ENDIF
945
946           IF(LMINUS)THEN
947             YCAR(ILENC:ILENC+3)=') - '
948           ELSE IF(LPLUS)THEN
949             YCAR(ILENC:ILENC+3)=') + '
950           ENDIF
951           ILENC=ILENC+4
952
953         ELSE
954     
955           YCAR=ADJUSTL(CTITB3)
956           ILENC=LEN_TRIM(YCAR)+1
957           IF(LMINUS)THEN
958             YCAR(ILENC:ILENC+2)=' - '
959           ELSE IF(LPLUS)THEN
960             YCAR(ILENC:ILENC+2)=' + '
961           ENDIF
962           ILENC=ILENC+3
963     
964         ENDIF
965 !-----------------------------------------------------------------------
966 !  FIN Ecriture de la premiere serie de temps
967         IF(LMUMVM .OR. LMUTVT .OR. LUMVM .OR. LUTVT .OR. &
968            LSUMVM .OR. LSUTVT .OR. LMLSUMVM .OR. LMLSUTVT)THEN
969           ILENTIT=LEN_TRIM(CGROUPS(K))
970           YCAR(ILENC:ILENC+ILENTIT-1)=CGROUPS(K)(1:ILENTIT)
971         ELSE
972           CTITRE(NPROCDIA(1,K))=ADJUSTL(CTITRE(NPROCDIA(1,K)))
973           ILENTIT=LEN_TRIM(CTITRE(NPROCDIA(1,K)))
974           YCAR(ILENC:ILENC+ILENTIT-1)=CTITRE(NPROCDIA(1,K))(1:ILENTIT)
975         ENDIF
976         YCAR=ADJUSTL(YCAR)
977         ILENC=LEN_TRIM(YCAR)
978         ILENC=ILENC+2
979         YCAR(ILENC:ILENC)='('
980         ILENC=ILENC+1
981         IF(NUMFILECUR2 /= NUMFILECUR)THEN
982           CFILEDIAS(JME)=ADJUSTL(CFILEDIAS(JME))
983           ILENFI=LEN_TRIM(CFILEDIAS(JME))
984           YCAR(ILENC:ILENC+ILENFI-1)=CFILEDIAS(JME)(1:ILENFI)
985           ILENC=ILENC+ILENFI
986           YCAR(ILENC:ILENC+1)=')('
987           ILENC=ILENC+2
988         ENDIF
989
990       IF(IDIFK == 2 .AND. INIV1 /= INIV2)THEN
991         YCAR(ILENC:ILENC+1)='K='
992         ILENC=ILENC+2
993         WRITE(YCAR(ILENC:ILENC+1),'(I2)')INIV2
994         ILENC=ILENC+2
995         YCAR(ILENC:ILENC+1)=')('
996         ILENC=ILENC+2
997       ENDIF
998
999
1000 ! Ecriture de la deuxieme serie de temps
1001         IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
1002           WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(1,K,INDK),INDK)
1003         ELSE
1004           WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(1,K,INDK),1)
1005         ENDIF
1006         YTIM=ADJUSTL(YTIM)
1007         ILENTIM=LEN_TRIM(YTIM)
1008         YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
1009         YTIM(1:LEN(YTIM))=' '
1010         ILENC=ILENC+ILENTIM
1011
1012         IF(CTYPE == 'DRST' .OR. CTYPE == 'RSPL' .OR. CTYPE == 'RAPL')THEN
1013           INDNN=INDK
1014         ELSE
1015           INDNN=1
1016         ENDIF
1017 !       IF(XTRAJT(NTIMEDIA(2,K,INDK),1) /= XTRAJT(NTIMEDIA(1,K,INDK),1))THEN
1018         IF(XTRAJT(NTIMEDIA(2,K,INDK),INDNN) /= XTRAJT(NTIMEDIA(1,K,INDK),INDNN))THEN
1019
1020           YCAR(ILENC:ILENC+2)=' - '
1021           ILENC=ILENC+3
1022           WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(2,K,INDK),INDNN)
1023 !         WRITE(YTIM,'(F8.0)')XTRAJT(NTIMEDIA(2,K,INDK),1)
1024           YTIM=ADJUSTL(YTIM)
1025           ILENTIM=LEN_TRIM(YTIM)
1026           YCAR(ILENC:ILENC+ILENTIM-1)=YTIM(1:ILENTIM)
1027           YTIM(1:LEN(YTIM))=' '
1028           ILENC=ILENC+ILENTIM
1029
1030         ELSE
1031           ILENC=ILENC+1
1032         ENDIF
1033
1034         YCAR(ILENC:ILENC)=')'
1035         
1036 !       IF(K <= 2)THEN
1037         IF(NUMPM(K-1) == 0 .OR. NUMPM(MAX(K-1,1)) == 3)THEN
1038           if(nverbia > 0)then
1039             print *,' diff_oper3 K NUMPM(K-1) ',K,NUMPM(K-1)
1040           endif
1041           LTITDEF=.FALSE.
1042 !         YTITB3(1:LEN(YTITB3))=' '
1043 !         YTITB3=ADJUSTL(CTITB3)
1044         ENDIF
1045         if(nblvlkdia(k,indk) == 1 .and. nblvlkdia(k-1,indk) == 1)then
1046           print *,' diff_oper3-2 Niveaux en K de part et d autre de MINUS '
1047           print *,' K1= ',NLVLKDIA(1,K-1,INDK),' K2= ',NLVLKDIA(1,K,INDK)
1048 ! Janv 2001
1049           IF(CTYPE == 'CART' .OR. CTYPE == 'MASK')THEN
1050             INIV1=NLVLKDIA(1,K-1,INDK)-NKL+1
1051             INIV2=NLVLKDIA(1,K,INDK)-NKL+1
1052           ELSE
1053 ! Janv 2001
1054             INIV1=NLVLKDIA(1,K-1,INDK)
1055             INIV2=NLVLKDIA(1,K,INDK)
1056 ! Janv 2001
1057           ENDIF
1058 ! Janv 2001
1059             if(nverbia >0)then
1060             print *,' INIV1 INIV2 diff_oper',INIV1,INIV2
1061             endif
1062           IDIFK=2
1063         endif
1064 !!! 1/3/04
1065     IF(CTITB3 /= 'DEFAULT')THEN
1066     ELSE
1067 !!! 1/3/04
1068
1069         CTITB3=ADJUSTL(YCAR(1:100))
1070         CTITB3=ADJUSTL(CTITB3)
1071 !!! 1/3/04
1072     ENDIF
1073 !!! 1/3/04
1074         print *,' CTITB3 ',CTITB3
1075         IF(LMINUS)THEN
1076           IFAC=-1
1077         ELSE IF(LPLUS)THEN
1078           IFAC=1
1079         ENDIF
1080 ! 220900
1081         IF(IDIFK == 2)THEN
1082           if(nverbia > 0)then
1083             print *,' **diff_oper IDIFK size(XVAR) ',IDIFK,size(xvar,1),&
1084             size(xvar,2),size(xvar,3),size(xvar,4),size(xvar,5),size(xvar,6)
1085             print *,' AV ',xvar(1,1,1,:,1,3)
1086             print *,' INDKM1 ',INDKM1,' K ',K,' NPROCDIA(1,K) ',NPROCDIA(1,K)
1087           endif
1088 ! Mai 2003
1089           WHERE((XVAR(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1090           NTIMEDIA(3,K,INDK),INDK,NPROCDIA(1,K)) == XSPVAL) &
1091 !         NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K)) == XSPVAL) &
1092           .OR. (XVAR2(:,:,INIV1,NTIMEDIA(1,K-1,INDKM1): &
1093           NTIMEDIA(2,K-1,INDKM1):&
1094           NTIMEDIA(3,K-1,INDKM1),INDKM1,NPROCDIA(1,K-1)) == XSPVAL))
1095 !         NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) == XSPVAL))
1096             XVAR(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1097             NTIMEDIA(3,K,INDK),INDK,NPROCDIA(1,K))=XSPVAL
1098 !           NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))=XSPVAL
1099           ELSEWHERE
1100             XVAR(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1101             NTIMEDIA(3,K,INDK),INDK,NPROCDIA(1,K))= &
1102 !           NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))= &
1103             XVAR2(:,:,INIV1,NTIMEDIA(1,K-1,INDKM1):NTIMEDIA(2,K-1,INDKM1):&
1104             NTIMEDIA(3,K-1,INDKM1),INDKM1,NPROCDIA(1,K-1)) +  &
1105 !           NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) +  &
1106             IFAC * XVAR(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1107             NTIMEDIA(3,K,INDK),INDK,NPROCDIA(1,K))
1108 !           NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))
1109           END WHERE
1110           if(nverbia > 0)then
1111             print *,' AP ',xvar(1,1,1,:,1,3)
1112           endif
1113         ELSE
1114           WHERE((XVAR(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1115           NTIMEDIA(3,K,INDK),INDK,NPROCDIA(1,K)) == XSPVAL) &
1116 !         NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K)) == XSPVAL) &
1117           .OR. (XVAR2(:,:,:,NTIMEDIA(1,K-1,INDKM1): &
1118           NTIMEDIA(2,K-1,INDKM1):&
1119           NTIMEDIA(3,K-1,INDKM1),INDKM1,NPROCDIA(1,K-1)) == XSPVAL))
1120 !         NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) == XSPVAL))
1121             XVAR(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1122             NTIMEDIA(3,K,INDK),INDK,NPROCDIA(1,K))=XSPVAL
1123 !           NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))=XSPVAL
1124           ELSEWHERE
1125             XVAR(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1126             NTIMEDIA(3,K,INDK),INDK,NPROCDIA(1,K))= &
1127 !           NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))= &
1128             XVAR2(:,:,:,NTIMEDIA(1,K-1,INDKM1):NTIMEDIA(2,K-1,INDKM1):&
1129             NTIMEDIA(3,K-1,INDKM1),INDKM1,NPROCDIA(1,K-1)) +  &
1130 !           NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) +  &
1131             IFAC * XVAR(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1132             NTIMEDIA(3,K,INDK),INDK,NPROCDIA(1,K))
1133 !           NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))
1134           END WHERE
1135         ENDIF
1136         IF(ALLOCATED(XUMEM))THEN
1137           IF(IDIFK == 2)THEN
1138             WHERE((XU(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1139             NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K)) == XSPVAL) &
1140             .OR. (XUMEM(:,:,INIV1,NTIMEDIA(1,K-1,INDKM1): &
1141             NTIMEDIA(2,K-1,INDKM1):&
1142             NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) == XSPVAL))
1143               XU(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1144               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))=XSPVAL
1145             ELSEWHERE
1146               XU(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1147               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))= &
1148               XUMEM(:,:,INIV1,NTIMEDIA(1,K-1,INDKM1):NTIMEDIA(2,K-1,INDKM1):&
1149               NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) +  &
1150               IFAC * XU(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1151               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))
1152             END WHERE
1153           ELSE
1154             WHERE((XU(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1155             NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K)) == XSPVAL) &
1156             .OR. (XUMEM(:,:,:,NTIMEDIA(1,K-1,INDKM1): &
1157             NTIMEDIA(2,K-1,INDKM1):&
1158             NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) == XSPVAL))
1159               XU(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1160               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))=XSPVAL
1161             ELSEWHERE
1162               XU(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1163               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))= &
1164               XUMEM(:,:,:,NTIMEDIA(1,K-1,INDKM1):NTIMEDIA(2,K-1,INDKM1):&
1165               NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) +  &
1166               IFAC * XU(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1167               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))
1168             END WHERE
1169           ENDIF
1170         ENDIF
1171         IF(ALLOCATED(XVMEM))THEN
1172           IF(IDIFK == 2)THEN
1173             WHERE((XV(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1174             NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K)) == XSPVAL) &
1175             .OR. (XVMEM(:,:,INIV1,NTIMEDIA(1,K-1,INDKM1): &
1176             NTIMEDIA(2,K-1,INDKM1):&
1177             NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) == XSPVAL))
1178               XV(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1179               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))=XSPVAL
1180             ELSEWHERE
1181               XV(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1182               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))= &
1183               XVMEM(:,:,INIV1,NTIMEDIA(1,K-1,INDKM1):NTIMEDIA(2,K-1,INDKM1):&
1184               NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) +  &
1185               IFAC * XV(:,:,INIV2,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1186               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))
1187             END WHERE
1188           ELSE
1189             WHERE((XV(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1190             NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K)) == XSPVAL) &
1191             .OR. (XVMEM(:,:,:,NTIMEDIA(1,K-1,INDKM1): &
1192             NTIMEDIA(2,K-1,INDKM1):&
1193             NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) == XSPVAL))
1194               XV(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1195               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))=XSPVAL
1196             ELSEWHERE
1197               XV(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1198               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))= &
1199               XVMEM(:,:,:,NTIMEDIA(1,K-1,INDKM1):NTIMEDIA(2,K-1,INDKM1):&
1200               NTIMEDIA(3,K-1,INDKM1),1,NPROCDIA(1,K-1)) +  &
1201               IFAC * XV(:,:,:,NTIMEDIA(1,K,INDK):NTIMEDIA(2,K,INDK): &
1202               NTIMEDIA(3,K,INDK),1,NPROCDIA(1,K))
1203             END WHERE
1204           ENDIF
1205         ENDIF
1206
1207       ENDIF
1208
1209     ENDIF
1210 !           A VERIFIER                SSSSSSSSSSSS
1211   ENDIF
1212
1213 !******************************** A VERIFIER
1214 ENDIF
1215
1216 !
1217 !-----------------------------------------------------------------------------
1218 !
1219 !*       2.       EXITS
1220 !                 -----
1221
1222 !IF(K == NSUPERDIA .AND. YTITB3 /= ' ' .AND. YTITB3 /= 'DEFAULT')THEN
1223 ! CTITB3=YTITB3
1224 !ENDIF
1225
1226 IF(LFT .OR. LPVKT .OR. LFT1 .OR. LPVKT1 .AND. LSPVALT)THEN
1227   XSPVAL=ZSPVAL
1228 ENDIF
1229 RETURN
1230 END SUBROUTINE DIFF_OPER