Index: /LMDZ6/trunk/libf/dyn3d/advtrac.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3d/advtrac.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d/advtrac.F90	(revision 4050)
@@ -9,5 +9,5 @@
   !            M.A Filiberti (04/2002)
   !
-  USE infotrac, ONLY: nqtot, iadv,nqperes,ok_iso_verif
+  USE infotrac, ONLY: nqtot, tracers, nqperes,ok_iso_verif
   USE control_mod, ONLY: iapp_tracvl, day_step
   USE comconst_mod, ONLY: dtvr
@@ -72,4 +72,5 @@
   real cflz(ip1jmp1,llm)
   real, save :: cflxmax(llm),cflymax(llm),cflzmax(llm)
+  INTEGER :: iadv
 
   IF(iadvtr.EQ.0) THEN
@@ -226,9 +227,11 @@
      do iq=1,nqperes
         !        call clock(t_initial)
-        if(iadv(iq) == 0) cycle 
+       iadv = tracers(iq)%iadv
+       SELECT CASE(iadv)
+         CASE(0); CYCLE
+         CASE(10)
         !   ----------------------------------------------------------------
         !   Schema de Van Leer I MUSCL
         !   ----------------------------------------------------------------
-        if(iadv(iq).eq.10) THEN
            ! CRisi: on fait passer tout q pour avoir acces aux fils
            
@@ -236,9 +239,9 @@
            call vlsplt(q,2.,massem,wg,pbarug,pbarvg,dtvr,iq)
            
+         CASE(14)
            !   ----------------------------------------------------------------
            !   Schema "pseudo amont" + test sur humidite specifique
            !    pour la vapeur d'eau. F. Codron
            !   ----------------------------------------------------------------
-        else if(iadv(iq).eq.14) then
            !
            !write(*,*) 'advtrac 248: iq,q(1721,19,:)=',iq,q(1721,19,:)
@@ -246,10 +249,10 @@
                 pbarug,pbarvg,dtvr,p,pk,teta,iq)
            
+         CASE(12)
            !   ----------------------------------------------------------------
            !   Schema de Frederic Hourdin
            !   ----------------------------------------------------------------
-        else if(iadv(iq).eq.12) then
            !            Pas de temps adaptatif
-           call adaptdt(iadv(iq),dtbon,n,pbarug,massem)
+           call adaptdt(iadv,dtbon,n,pbarug,massem)
            if (n.GT.1) then
               write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=', &
@@ -259,7 +262,7 @@
               call advn(q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,1)
            end do
-        else if(iadv(iq).eq.13) then
+         CASE(13)
            !            Pas de temps adaptatif
-           call adaptdt(iadv(iq),dtbon,n,pbarug,massem)
+           call adaptdt(iadv,dtbon,n,pbarug,massem)
            if (n.GT.1) then
               write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=', &
@@ -269,16 +272,16 @@
               call advn(q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,2)
            end do
+         CASE(20)
            !   ----------------------------------------------------------------
            !   Schema de pente SLOPES
            !   ----------------------------------------------------------------
-        else if (iadv(iq).eq.20) then
            call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0)
 
+         CASE(30)
            !   ----------------------------------------------------------------
            !   Schema de Prather
            !   ----------------------------------------------------------------
-        else if (iadv(iq).eq.30) then
            !            Pas de temps adaptatif
-           call adaptdt(iadv(iq),dtbon,n,pbarug,massem)
+           call adaptdt(iadv,dtbon,n,pbarug,massem)
            if (n.GT.1) then
               write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=', &
@@ -288,13 +291,12 @@
                 n,dtbon)
 
+         CASE(11,16,17,18)
            !   ----------------------------------------------------------------
            !   Schemas PPM Lin et Rood
            !   ----------------------------------------------------------------
-        else if (iadv(iq).eq.11.OR.(iadv(iq).GE.16.AND. &
-             iadv(iq).LE.18)) then
 
            !        Test sur le flux horizontal
            !        Pas de temps adaptatif
-           call adaptdt(iadv(iq),dtbon,n,pbarug,massem)
+           call adaptdt(iadv,dtbon,n,pbarug,massem)
            if (n.GT.1) then
               write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=', &
@@ -316,5 +318,5 @@
 
            !-----------------------------------------------------------
-           !        Ss-prg interface LMDZ.4->PPM3d
+           !        Ss-prg interface LMDZ.4->PPM3d (ss-prg de Lin)
            !-----------------------------------------------------------
 
@@ -327,6 +329,6 @@
               !                         VL (version PPM) horiz. et PPM vert.
               !----------------------------------------------------------------
-              if (iadv(iq).eq.11) then
-                 !                  Ss-prg PPM3d de Lin
+             SELECT CASE(iadv)
+               CASE(11)
                  call ppm3d(1,qppm(1,1,iq), &
                       psppm,psppm, &
@@ -335,9 +337,8 @@
                       fill,dum,220.)
 
+               CASE(16)
                  !-------------------------------------------------------------
                  !                           Monotonic PPM
                  !-------------------------------------------------------------
-              else if (iadv(iq).eq.16) then
-                 !                  Ss-prg PPM3d de Lin
                  call ppm3d(1,qppm(1,1,iq), &
                       psppm,psppm, &
@@ -347,9 +348,8 @@
                  !-------------------------------------------------------------
 
+               CASE(17)
                  !-------------------------------------------------------------
                  !                           Semi Monotonic PPM
                  !-------------------------------------------------------------
-              else if (iadv(iq).eq.17) then
-                 !                  Ss-prg PPM3d de Lin
                  call ppm3d(1,qppm(1,1,iq), &
                       psppm,psppm, &
@@ -359,9 +359,8 @@
                  !-------------------------------------------------------------
 
+               CASE(18)
                  !-------------------------------------------------------------
                  !                         Positive Definite PPM
                  !-------------------------------------------------------------
-              else if (iadv(iq).eq.18) then
-                 !                  Ss-prg PPM3d de Lin
                  call ppm3d(1,qppm(1,1,iq), &
                       psppm,psppm, &
@@ -370,5 +369,5 @@
                       fill,dum,220.)
                  !-------------------------------------------------------------
-              endif
+             END SELECT
            enddo
            !-----------------------------------------------------------------
@@ -376,5 +375,5 @@
            !-----------------------------------------------------------------
            call interpost(q(1,1,iq),qppm(1,1,iq))
-        endif
+         END SELECT
         !----------------------------------------------------------------------
 
Index: /LMDZ6/trunk/libf/dyn3d/check_isotopes.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3d/check_isotopes.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d/check_isotopes.F	(revision 4050)
@@ -1,4 +1,6 @@
         subroutine check_isotopes_seq(q,ip1jmp1,err_msg)
-        USE infotrac
+        USE infotrac, ONLY: nqtot, nqo, niso, ntraciso, ntraceurs_zone, 
+     &                     ok_isotopes, ok_isotrac, use_iso, 
+     &                     iqiso, index_trac,indnum_fn_num, tnat
         implicit none
 
Index: /LMDZ6/trunk/libf/dyn3d/dynetat0.f90
===================================================================
--- /LMDZ6/trunk/libf/dyn3d/dynetat0.f90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d/dynetat0.f90	(revision 4050)
@@ -6,9 +6,9 @@
 ! Purpose: Initial state reading.
 !-------------------------------------------------------------------------------
-  USE infotrac
+  USE infotrac,    ONLY: nqtot, tracers, iqiso, iso_indnum, tnat, alpha_ideal, &
+                         ok_isotopes, maxlen
   USE netcdf,      ONLY: NF90_OPEN,  NF90_NOWRITE, NF90_INQ_VARID, NF90_NoErr, &
                          NF90_CLOSE, NF90_GET_VAR
   USE control_mod, ONLY: planet_type
-  USE strings_mod, ONLY: maxlen
   USE assert_eq_m, ONLY: assert_eq
   USE comvert_mod, ONLY: pa,preff
@@ -39,5 +39,5 @@
   CHARACTER(LEN=maxlen) :: msg, var, modname
   INTEGER, PARAMETER :: length=100
-  INTEGER :: iq, fID, vID, idecal!, iml, jml, lml, nqt
+  INTEGER :: iq, fID, vID, idecal, iqParent, iName, iZone, iPhase
   REAL    :: time, tab_cntrl(length)               !--- RUN PARAMS TABLE
 !-------------------------------------------------------------------------------
@@ -135,9 +135,13 @@
     q(:,:,:,iq)=0.
    !--- CRisi: for isotops, theoretical initialization using very simplified
-   !           Rayleigh distillation las.
-    IF(ok_isotopes.AND.iso_num(iq)>0) THEN
-      IF(zone_num(iq)==0) q(:,:,:,iq)=q(:,:,:,iqpere(iq))*tnat(iso_num(iq))    &
-     &             *(q(:,:,:,iqpere(iq))/30.e-3)**(alpha_ideal(iso_num(iq))-1)
-      IF(zone_num(iq)==1) q(:,:,:,iq)=q(:,:,:,iqiso(iso_indnum(iq),phase_num(iq)))
+   !           Rayleigh distillation law.
+    iName = tracers(iq)%iso_iName
+    iZone = tracers(iq)%iso_iZone
+    iPhase= tracers(iq)%iso_iPhase
+    iqParent = tracers(iq)%iqParent
+    IF(ok_isotopes .AND. iName>0) THEN
+      IF(iZone==0) q(:,:,:,iq) = q(:,:,:,iqParent)*tnat(iName)    &
+                               *(q(:,:,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.)
+      IF(iZone==1) q(:,:,:,iq) = q(:,:,:,iqiso(iso_indnum(iq),iPhase))
     END IF
   END DO
Index: /LMDZ6/trunk/libf/dyn3d/dynredem.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3d/dynredem.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d/dynredem.F90	(revision 4050)
@@ -7,10 +7,9 @@
   USE IOIPSL
 #endif
-  USE infotrac
+  USE infotrac, ONLY: nqtot, tracers, maxlen
   USE netcdf, ONLY: NF90_CREATE, NF90_DEF_DIM, NF90_INQ_VARID, NF90_GLOBAL,    &
                     NF90_CLOSE,  NF90_PUT_ATT, NF90_UNLIMITED, NF90_CLOBBER,   &
                     NF90_64BIT_OFFSET
   USE dynredem_mod, ONLY: cre_var, put_var1, put_var2, err, modname, fil
-  USE strings_mod, ONLY: maxlen
   USE comvert_mod, ONLY: ap,bp,aps,bps,presnivs,pseudoalt,pa,preff, &
                               nivsig,nivsigs
@@ -167,5 +166,5 @@
 ! Purpose: Write the NetCDF restart file (append).
 !-------------------------------------------------------------------------------
-  USE infotrac
+  USE infotrac, ONLY: nqtot, tracers, type_trac, maxlen
   USE control_mod
   USE netcdf,   ONLY: NF90_OPEN,  NF90_NOWRITE, NF90_GET_VAR, NF90_INQ_VARID,  &
Index: /LMDZ6/trunk/libf/dyn3d/iniacademic.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3d/iniacademic.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d/iniacademic.F90	(revision 4050)
@@ -5,5 +5,6 @@
 
   USE filtreg_mod, ONLY: inifilr
-  USE infotrac
+  USE infotrac,    ONLY: nqtot,niso_possibles,ok_isotopes,ok_iso_verif,tnat,alpha_ideal, &
+        & iqiso,iso_indnum, tracers
   USE control_mod, ONLY: day_step,planet_type
 #ifdef CPP_IOIPSL
@@ -61,5 +62,5 @@
   real tetastrat ! potential temperature in the stratosphere, in K
   real tetajl(jjp1,llm)
-  INTEGER i,j,l,lsup,ij
+  INTEGER i,j,l,lsup,ij, iq
 
   REAL teta0,ttp,delt_y,delt_z,eps ! Constantes pour profil de T
@@ -70,5 +71,5 @@
 
   real zz,ran1
-  integer idum
+  integer idum, iqParent, iName, iZone, iPhase
 
   REAL zdtvr
@@ -275,21 +276,19 @@
         if (planet_type=="earth") then
            ! Earth: first two tracers will be water
-           do i=1,nqtot
-              if (i == 1) q(:,:,i)=1.e-10
-              if (i == 2) q(:,:,i)=1.e-15
-              if (i.gt.2) q(:,:,i)=0.
+           do iq=1,nqtot
+              q(:,:,iq)=0.
+              IF(tracers(iq)%name == 'H2Ov') q(:,:,iq)=1.e-10
+              IF(tracers(iq)%name == 'H2Ol') q(:,:,iq)=1.e-15
 
               ! CRisi: init des isotopes
               ! distill de Rayleigh très simplifiée
-              if (ok_isotopes) then
-                if ((iso_num(i).gt.0).and.(zone_num(i).eq.0)) then          
-                   q(:,:,i)=q(:,:,iqpere(i))             &
-      &                  *tnat(iso_num(i))               &
-      &                  *(q(:,:,iqpere(i))/30.e-3)      &
-      &                  **(alpha_ideal(iso_num(i))-1)
-                endif                
-                if ((iso_num(i).gt.0).and.(zone_num(i).eq.1)) then
-                  q(:,:,i)=q(:,:,iqiso(iso_indnum(i),phase_num(i)))
-                endif
+              iName = tracers(iq)%iso_iName
+              iZone = tracers(iq)%iso_iZone
+              iPhase= tracers(iq)%iso_iPhase
+              iqParent = tracers(iq)%iqParent
+              if (ok_isotopes .AND. iName > 0) then
+                if (iZone == 0) q(:,:,iq) = q(:,:,iqParent)*tnat(iName) &
+                                          *(q(:,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1)
+                if (iZone == 1) q(:,:,iq) = q(:,:,iqiso(iso_indnum(iq),iPhase))
               endif !if (ok_isotopes) then
 
Index: /LMDZ6/trunk/libf/dyn3d/vlsplt.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3d/vlsplt.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d/vlsplt.F	(revision 4050)
@@ -4,5 +4,5 @@
 
       SUBROUTINE vlsplt(q,pente_max,masse,w,pbaru,pbarv,pdt,iq)
-      USE infotrac, ONLY: nqtot,nqdesc,iqfils
+      USE infotrac, ONLY: nqtot,tracers
 c
 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget 
@@ -83,10 +83,8 @@
       CALL SCOPY(ijp1llm,masse,1,zm(1,1,iq),1)
         
-      if (nqdesc(iq).gt.0) then  
-        do ifils=1,nqdesc(iq)
-          iq2=iqfils(ifils,iq)
-          CALL SCOPY(ijp1llm,q(1,1,iq2),1,zq(1,1,iq2),1)
-        enddo  
-      endif !if (nqfils(iq).gt.0) then
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        CALL SCOPY(ijp1llm,q(1,1,iq2),1,zq(1,1,iq2),1)
+      enddo  
 
 cprint*,'Entree vlx1'
@@ -122,22 +120,20 @@
       ENDDO
       ! CRisi: aussi pour les fils
-      if (nqdesc(iq).gt.0) then
-      do ifils=1,nqdesc(iq)
-        iq2=iqfils(ifils,iq)
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
         DO l=1,llm
-         DO ij=1,ip1jmp1
-           q(ij,l,iq2)=zq(ij,l,iq2)
-         ENDDO
-         DO ij=1,ip1jm+1,iip1
+          DO ij=1,ip1jmp1
+            q(ij,l,iq2)=zq(ij,l,iq2)
+          ENDDO
+          DO ij=1,ip1jm+1,iip1
             q(ij+iim,l,iq2)=q(ij,l,iq2)
-         ENDDO
+          ENDDO
         ENDDO
-      enddo !do ifils=1,nqdesc(iq)    
-      endif ! if (nqdesc(iq).gt.0) then    
+      enddo
 
       RETURN
       END
       RECURSIVE SUBROUTINE vlx(q,pente_max,masse,u_m,iq)
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi
+      USE infotrac, ONLY : nqtot,tracers, ! CRisi
      &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
 
@@ -449,29 +445,27 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vlsplt 326: iq,nqfils(iq)=',iq,nqfils(iq) 
+      !write(*,*) 'vlsplt 326: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen
       
-      if (nqdesc(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
-         DO l=1,llm
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
           DO ij=iip2,ip1jm
-           ! On a besoin de q et masse seulement entre iip2 et ip1jm 
-           !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
-           !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           !Mvals: veiller a ce qu'on n'ait pas de denominateur nul
-           masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
-           if (q(ij,l,iq).gt.qperemin) then
-             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           else
-             Ratio(ij,l,iq2)=ratiomin
-           endif
+            ! On a besoin de q et masse seulement entre iip2 et ip1jm 
+            !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
+            !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            !Mvals: veiller a ce qu'on n'ait pas de denominateur nul
+            masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
+            if (q(ij,l,iq).gt.qperemin) then
+              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            else
+              Ratio(ij,l,iq2)=ratiomin
+            endif
           enddo   
-         enddo
-        enddo !do ifils=1,nqdesc(iq)
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         call vlx(Ratio,pente_max,masseq,u_mq,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+      enddo
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        call vlx(Ratio,pente_max,masseq,u_mq,iq2)
+      enddo
 ! end CRisi
 
@@ -498,8 +492,7 @@
       ! On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio 
       ! puis on boucle en longitude
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
-         DO l=1,llm
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
           DO ij=iip2+1,ip1jm
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
@@ -508,7 +501,6 @@
              q(ij-iim,l,iq2)=q(ij,l,iq2)
           enddo ! DO ij=ijb+iip1-1,ije,iip1
-         enddo !DO l=1,llm
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo !DO l=1,llm
+      enddo
 
 c     CALL SCOPY((jjm-1)*llm,q(iip1+iip1,1),iip1,q(iip2,1),iip1)
@@ -519,5 +511,5 @@
       END
       RECURSIVE SUBROUTINE vly(q,pente_max,masse,masse_adv_v,iq)
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi
+      USE infotrac, ONLY : nqtot,tracers, ! CRisi
      &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
 c
@@ -778,31 +770,29 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vly 689: iq,nqfils(iq)=',iq,nqfils(iq) 
+      !write(*,*) 'vly 689: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen
    
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
-         DO l=1,llm
-         DO ij=1,ip1jmp1
-           ! attention, chaque fils doit avoir son masseq, sinon, le 1er
-           ! fils ecrase le masseq de ses freres.
-           !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
-           !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
-           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
-           if (q(ij,l,iq).gt.qperemin) then
-             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           else
-             Ratio(ij,l,iq2)=ratiomin
-           endif 
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
+          DO ij=1,ip1jmp1
+            ! attention, chaque fils doit avoir son masseq, sinon, le 1er
+            ! fils ecrase le masseq de ses freres.
+            !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
+            !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
+            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
+            masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
+            if (q(ij,l,iq).gt.qperemin) then
+              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            else
+              Ratio(ij,l,iq2)=ratiomin
+            endif 
           enddo   
-         enddo
-        enddo !do ifils=1,nqdesc(iq)
-
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         call vly(Ratio,pente_max,masseq,qbyv,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+      enddo
+
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        call vly(Ratio,pente_max,masseq,qbyv,iq2)
+      enddo
 
       DO l=1,llm
@@ -872,14 +862,12 @@
   
 ! retablir les fils en rapport de melange par rapport a l'air:
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
-         DO l=1,llm
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
           DO ij=1,ip1jmp1
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
-         enddo
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+      enddo
 
       !write(*,*) 'vly 853: sortie'
@@ -888,5 +876,5 @@
       END
       RECURSIVE SUBROUTINE vlz(q,pente_max,masse,w,iq)
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi 
+      USE infotrac, ONLY : nqtot,tracers, ! CRisi 
      &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
 c
@@ -1009,28 +997,26 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vlsplt 942: iq,nqfils(iq)=',iq,nqfils(iq)
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
-         DO l=1,llm
+      !write(*,*) 'vlsplt 942: iq,nqChilds(iq)=',iq,nqChilds(iq)
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
           DO ij=1,ip1jmp1
-           !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
-           !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)        
-           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
-           if (q(ij,l,iq).gt.qperemin) then
-             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           else
-             Ratio(ij,l,iq2)=ratiomin
-           endif      
+            !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
+            !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)        
+            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
+            masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
+            if (q(ij,l,iq).gt.qperemin) then
+              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            else
+              Ratio(ij,l,iq2)=ratiomin
+            endif      
           enddo   
-         enddo
-        enddo !do ifils=1,nqdesc(iq)
+        enddo
+      enddo
         
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)         
-         call vlz(Ratio,pente_max,masseq,wq,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        call vlz(Ratio,pente_max,masseq,wq,iq2)
+      enddo
 ! end CRisi  
 
@@ -1045,14 +1031,12 @@
 
 ! retablir les fils en rapport de melange par rapport a l'air:
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
-         DO l=1,llm
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
           DO ij=1,ip1jmp1
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
-         enddo
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+      enddo
       !write(*,*) 'vlsplt 1032'
 
Index: /LMDZ6/trunk/libf/dyn3d/vlspltqs.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3d/vlspltqs.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d/vlspltqs.F	(revision 4050)
@@ -4,5 +4,5 @@
        SUBROUTINE vlspltqs ( q,pente_max,masse,w,pbaru,pbarv,pdt,
      ,                                  p,pk,teta,iq             )
-       USE infotrac, ONLY: nqtot,nqdesc,iqfils
+       USE infotrac, ONLY: nqtot,tracers
 c
 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget, F.Codron 
@@ -121,10 +121,8 @@
       CALL SCOPY(ijp1llm,q(1,1,iq),1,zq(1,1,iq),1)
       CALL SCOPY(ijp1llm,masse,1,zm(1,1,iq),1)
-      if (nqdesc(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-        iq2=iqfils(ifils,iq)
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
         CALL SCOPY(ijp1llm,q(1,1,iq2),1,zq(1,1,iq2),1)
-       enddo  
-      endif !if (nqfils(iq).gt.0) then
+      enddo  
 
 c      call minmaxq(zq,qmin,qmax,'avant vlxqs     ')
@@ -162,17 +160,15 @@
       ENDDO
       ! CRisi: aussi pour les fils
-      if (nqdesc(iq).gt.0) then
-      do ifils=1,nqdesc(iq)
-        iq2=iqfils(ifils,iq)
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
         DO l=1,llm
-         DO ij=1,ip1jmp1
-           q(ij,l,iq2)=zq(ij,l,iq2)
-         ENDDO
-         DO ij=1,ip1jm+1,iip1
+          DO ij=1,ip1jmp1
+            q(ij,l,iq2)=zq(ij,l,iq2)
+          ENDDO
+          DO ij=1,ip1jm+1,iip1
             q(ij+iim,l,iq2)=q(ij,l,iq2)
-         ENDDO
+          ENDDO
         ENDDO
-      enddo !do ifils=1,nqdesc(iq)  
-      endif ! if (nqfils(iq).gt.0) then
+      enddo 
       !write(*,*) 'vlspltqs 183: fin de la routine'
 
@@ -180,5 +176,5 @@
       END
       SUBROUTINE vlxqs(q,pente_max,masse,u_m,qsat,iq)
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
+      USE infotrac, ONLY : nqtot,tracers ! CRisi
 
 c
@@ -483,22 +479,20 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vlspltqs 326: iq,nqfils(iq)=',iq,nqfils(iq) 
+      !write(*,*) 'vlspltqs 326: iq,nqChilds(iq)=',iq,tracers(iq)%nqChilds
       
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
-         DO l=1,llm
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
           DO ij=iip2,ip1jm
-           ! On a besoin de q et masse seulement entre iip2 et ip1jm 
-           masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
-           Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+          ! On a besoin de q et masse seulement entre iip2 et ip1jm 
+            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
+            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
           enddo   
-         enddo
-        enddo !do ifils=1,nqdesc(iq)
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         call vlx(Ratio,pente_max,masseq,u_mq,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+      enddo
+      do ifils=1,tracers(iq)%nqChilds
+        iq2=tracers(iq)%iqDescen(ifils)
+        call vlx(Ratio,pente_max,masseq,u_mq,iq2)
+      enddo
 ! end CRisi
 
@@ -523,17 +517,15 @@
       ! On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio 
       ! puis on boucle en longitude
-      if (nqdesc(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
-         DO l=1,llm
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
           DO ij=iip2+1,ip1jm
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
           DO ij=iip1+iip1,ip1jm,iip1
-             q(ij-iim,l,iq2)=q(ij,l,iq2)
-          enddo ! DO ij=ijb+iip1-1,ije,iip1
-         enddo !DO l=1,llm
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+            q(ij-iim,l,iq2)=q(ij,l,iq2)
+          enddo
+        enddo
+      enddo
 
 c     CALL SCOPY((jjm-1)*llm,q(iip1+iip1,1),iip1,q(iip2,1),iip1)
@@ -544,5 +536,5 @@
       END
       SUBROUTINE vlyqs(q,pente_max,masse,masse_adv_v,qsat,iq)
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
+      USE infotrac, ONLY : nqtot,tracers ! CRisi
 c
 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget 
@@ -794,23 +786,20 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vlyqs 689: iq,nqfils(iq)=',iq,nqfils(iq) 
+      !write(*,*) 'vlyqs 689: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen
    
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
-         DO l=1,llm
-         DO ij=1,ip1jmp1
-           masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
-           Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
+          DO ij=1,ip1jmp1
+            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
+            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
           enddo   
-         enddo
-        enddo !do ifils=1,nqdesc(iq)
-
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         !write(*,*) 'vlyqs 783: appel rec de vly, iq2=',iq2
-         call vly(Ratio,pente_max,masseq,qbyv,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+      enddo
+      do ifils=1,tracers(iq)%nqChilds
+        iq2=tracers(iq)%iqDescen(ifils)
+        !write(*,*) 'vlyqs 783: appel rec de vly, iq2=',iq2
+        call vly(Ratio,pente_max,masseq,qbyv,iq2)
+      enddo
 
       DO l=1,llm
@@ -868,14 +857,12 @@
 
 ! retablir les fils en rapport de melange par rapport a l'air:
-      if (nqdesc(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
-         DO l=1,llm
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        DO l=1,llm
           DO ij=1,ip1jmp1
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
-         enddo
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+      enddo
       !write(*,*) 'vly 879'
 
Index: /LMDZ6/trunk/libf/dyn3d_common/infotrac.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3d_common/infotrac.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d_common/infotrac.F90	(revision 4050)
@@ -32,17 +32,8 @@
   TYPE(isot_type), TARGET,  SAVE, ALLOCATABLE :: isotopes(:)    !=== ISOTOPES PARAMETERS VECTOR
 
-! iadv  : index of trasport schema for each tracer
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: iadv
-
 ! niadv : vector keeping the coorspondance between all tracers(nqtot) treated in the 
 !         dynamic part of the code and the tracers (nbtr+2) used in the physics part of the code. 
   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: niadv ! equivalent dyn / physique
 
-! CRisi: tableaux de fils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqfils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqdesc ! nombres de fils + nombre de tous les petits fils sur toutes les generations
-  INTEGER, SAVE :: nqdesc_tot
-  INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE    :: iqfils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: iqpere
   REAL :: qperemin,masseqmin,ratiomin ! MVals et CRisi
   PARAMETER (qperemin=1e-30,masseqmin=1e-18,ratiomin=1e-16) ! MVals
@@ -63,8 +54,5 @@
   LOGICAL, DIMENSION(niso_possibles),SAVE ::  use_iso
   INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE ::  iqiso ! donne indice iq en fn de (ixt,phase) 
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_num ! donne numero iso entre 1 et niso_possibles en fn de nqtot
   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_indnum ! donne numero iso entre 1 et niso effectif en fn de nqtot
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  zone_num ! donne numero de la zone de tracage en fn de nqtot
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  phase_num ! donne numero de la zone de tracage en fn de nqtot
   INTEGER, DIMENSION(niso_possibles), SAVE :: indnum_fn_num ! donne indice entre entre 1 et niso en fonction du numero d isotope entre 1 et niso_possibles
   INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE ::  index_trac ! numero ixt en fn izone, indnum entre 1 et niso
@@ -128,9 +116,10 @@
   
     INTEGER :: nqtrue  ! number of tracers read from tracer.def, without higer order of moment
-    INTEGER :: iq, new_iq, iiq, jq, ierr,itr
-    INTEGER :: ifils,ipere,generation ! CRisi
+    INTEGER :: iq, new_iq, iiq, jq, ierr,itr, iadv
+    INTEGER :: ifils,ipere ! CRisi
     LOGICAL :: continu,nouveau_traceurdef
     INTEGER :: IOstatus ! gestion de la retrocompatibilite de traceur.def
     CHARACTER(len=maxlen) :: tchaine    
+    INTEGER, ALLOCATABLE  :: iqfils(:,:)
 
     character(len=*),parameter :: modname="infotrac_init"
@@ -565,5 +554,5 @@
 !
     ALLOCATE(tracers(nqtot))
-    ALLOCATE(iadv(nqtot), niadv(nqtot))
+    ALLOCATE(niadv(nqtot))
 
 !-----------------------------------------------------------------------
@@ -578,7 +567,7 @@
        ! Verify choice of advection schema
        IF (hadv(iq)==vadv(iq)) THEN
-          iadv(new_iq)=hadv(iq)
+          tracers(new_iq)%iadv=hadv(iq)
        ELSE IF (hadv(iq)==10 .AND. vadv(iq)==16) THEN
-          iadv(new_iq)=11
+          tracers(new_iq)%iadv=11
        ELSE
           WRITE(lunout,*)trim(modname),': This choice of advection schema is not available',iq,hadv(iq),vadv(iq)
@@ -588,24 +577,25 @@
       
        str1=tnom_0(iq)
-       tracers(new_iq)%name=TRIM(tnom_0(iq))
-       IF (iadv(new_iq)==0) THEN
+       tracers(new_iq)%name = TRIM(tnom_0(iq))
+       tracers(new_iq)%parent = TRIM(tnom_transp(iq))
+       IF (tracers(new_iq)%iadv==0) THEN
           tracers(new_iq)%longName=trim(str1)
        ELSE
-          tracers(new_iq)%longName=trim(tnom_0(iq))//descrq(iadv(new_iq))
+          tracers(new_iq)%longName=trim(tnom_0(iq))//descrq(tracers(new_iq)%iadv)
        ENDIF
 
        ! schemas tenant compte des moments d'ordre superieur
        str2=TRIM(tracers(new_iq)%longName)
-       IF (iadv(new_iq)==20) THEN
+       IF (tracers(new_iq)%iadv==20) THEN
           DO jq=1,3
              new_iq=new_iq+1
-             iadv(new_iq)=-20
+             tracers(new_iq)%iadv=-20
              tracers(new_iq)%longName=trim(str2)//txts(jq)
              tracers(new_iq)%name=trim(str1)//txts(jq)
           END DO
-       ELSE IF (iadv(new_iq)==30) THEN
+       ELSE IF (tracers(new_iq)%iadv==30) THEN
           DO jq=1,9
              new_iq=new_iq+1
-             iadv(new_iq)=-30
+             tracers(new_iq)%iadv=-30
              tracers(new_iq)%longName=trim(str2)//txtp(jq)
              tracers(new_iq)%name=trim(str1)//txtp(jq)
@@ -620,5 +610,5 @@
     iiq=0
     DO iq=1,nqtot
-       IF(iadv(iq).GE.0) THEN
+       IF(tracers(iq)%iadv.GE.0) THEN
           ! True tracer
           iiq=iiq+1
@@ -632,5 +622,5 @@
 
     DO iq=1,nqtot
-       WRITE(lunout,*) iadv(iq),niadv(iq), ' ',trim(tracers(iq)%name),' ',trim(tracers(iq)%longName)
+       WRITE(lunout,*) tracers(iq)%iadv,niadv(iq), ' ',trim(tracers(iq)%name),' ',trim(tracers(iq)%longName)
     END DO
 
@@ -640,9 +630,10 @@
 !
     DO iq=1,nqtot
-       IF (iadv(iq)/=10 .AND. iadv(iq)/=14 .AND. iadv(iq)/=0) THEN
-          WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ'
+       iadv=tracers(iq)%iadv
+       IF (ALL([10, 14, 0]/=iadv)) THEN
+          WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv,' is not tested in this version of LMDZ'
           CALL abort_gcm('infotrac_init','In this version only iadv=10 and iadv=14 is tested!',1)
-       ELSE IF (iadv(iq)==14 .AND. iq/=1) THEN
-          WRITE(lunout,*)trim(modname),'STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ'
+       ELSE IF (iadv==14 .AND. iq/=1) THEN
+          WRITE(lunout,*)trim(modname),'STOP : The option iadv=',iadv,' is not tested in this version of LMDZ'
           CALL abort_gcm('infotrac_init','In this version iadv=14 is only permitted for water vapour!',1)
        ENDIF
@@ -653,13 +644,8 @@
 ! initialiser tous les tableaux d'indices lies aux traceurs familiaux
 ! + verifier que tous les peres sont ecrits en premieres positions
-    ALLOCATE(nqfils(nqtot),nqdesc(nqtot))    
     ALLOCATE(iqfils(nqtot,nqtot))   
-    ALLOCATE(iqpere(nqtot))
     nqperes=0
-    nqfils(:)=0
-    nqdesc(:)=0
     iqfils(:,:)=0
-    iqpere(:)=0
-    nqdesc_tot=0    
+    tracers(:)%iqParent=0
     DO iq=1,nqtot
       if (tnom_transp(iq) == 'air') then
@@ -667,5 +653,5 @@
         WRITE(lunout,*) 'Le traceur',iq,', appele ',trim(tnom_0(iq)),', est un pere'
         nqperes=nqperes+1
-        iqpere(iq)=0
+        tracers(iq)%iqParent=0
       else !if (tnom_transp(iq) == 'air') then
         ! ceci est un fils. Qui est son pere?
@@ -681,7 +667,7 @@
                 CALL abort_gcm('infotrac_init','Un fils est son propre pere',1)
             endif
-            nqfils(ipere)=nqfils(ipere)+1  
-            iqfils(nqfils(ipere),ipere)=iq
-            iqpere(iq)=ipere         
+            tracers(ipere)%nqChilds = tracers(ipere)%nqChilds+1  
+            iqfils(tracers(ipere)%nqChilds,ipere)=iq
+            tracers(iq)%iqParent=ipere         
             continu=.false.
           else !if (tnom_transp(iq) == tnom_0(ipere)) then
@@ -697,49 +683,55 @@
     enddo !DO iq=1,nqtot
     WRITE(lunout,*) 'infotrac: nqperes=',nqperes    
-    WRITE(lunout,*) 'nqfils=',nqfils
-    WRITE(lunout,*) 'iqpere=',iqpere
+    WRITE(lunout,*) 'nqChilds=',tracers(:)%nqChilds
+    WRITE(lunout,*) 'iqParent=',tracers(:)%iqParent
     WRITE(lunout,*) 'iqfils=',iqfils
 
 ! Calculer le nombre de descendants a partir de iqfils et de nbfils
     DO iq=1,nqtot    
-      generation=0
+      tracers(iq)%iGeneration=0
       continu=.true.
       ifils=iq
       do while (continu)
-        ipere=iqpere(ifils)
+        ipere=tracers(ifils)%iqParent
         if (ipere.gt.0) then
-         nqdesc(ipere)=nqdesc(ipere)+1   
-         nqdesc_tot=nqdesc_tot+1      
-         iqfils(nqdesc(ipere),ipere)=iq
+         tracers(ipere)%nqDescen = tracers(ipere)%nqDescen+1   
+         iqfils(tracers(ipere)%nqDescen,ipere)=iq
          ifils=ipere
-         generation=generation+1
+         tracers(iq)%iGeneration=tracers(iq)%iGeneration+1
         else !if (ipere.gt.0) then
          continu=.false.
         endif !if (ipere.gt.0) then
       enddo !do while (continu)    
-      WRITE(lunout,*) 'Le traceur ',iq,', appele ',trim(tnom_0(iq)),' est un traceur de generation: ',generation
+      WRITE(lunout,*) 'Le traceur ',iq,', appele ',trim(tnom_0(iq)), &
+        ' est un traceur de generation: ',tracers(iq)%iGeneration
     enddo !DO iq=1,nqtot
-    WRITE(lunout,*) 'infotrac: nqdesc=',nqdesc
+    DO iq=1,nqtot
+      ALLOCATE(tracers(iq)%iqDescen(tracers(iq)%nqDescen))
+      tracers(iq)%iqDescen(:) = iqfils(1:tracers(iq)%nqDescen,iq)
+    END DO
+
+    WRITE(lunout,*) 'infotrac: nqDescen=',tracers(iq)%nqDescen
     WRITE(lunout,*) 'iqfils=',iqfils
-    WRITE(lunout,*) 'nqdesc_tot=',nqdesc_tot
+    WRITE(lunout,*) 'nqDescen_tot=',SUM(tracers(:)%nqDescen)
 
 ! Interdire autres schemas que 10 pour les traceurs fils, et autres schemas
 ! que 10 et 14 si des peres ont des fils
     do iq=1,nqtot
-      if (iqpere(iq).gt.0) then
+      if (tracers(iq)%iqParent > 0) then
         ! ce traceur a un pere qui n'est pas l'air
         ! Seul le schema 10 est autorise
-        if (iadv(iq)/=10) then
-           WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv(iq),' is not implemented for sons'
+        iadv=tracers(iq)%iadv
+        if (iadv/=10) then
+           WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv,' is not implemented for sons'
           CALL abort_gcm('infotrac_init','Sons should be advected by scheme 10',1)
         endif
         ! Le traceur pere ne peut etre advecte que par schema 10 ou 14:
-        IF (iadv(iqpere(iq))/=10 .AND. iadv(iqpere(iq))/=14) THEN
-          WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv(iq),' is not implemented for fathers'
+        IF (ALL([10,14]/=tracers(tracers(iq)%iqParent)%iadv)) THEN
+          WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv,' is not implemented for fathers'
           CALL abort_gcm('infotrac_init','Fathers should be advected by scheme 10 ou 14',1)
-        endif !IF (iadv(iqpere(iq))/=10 .AND. iadv(iqpere(iq))/=14) THEN
-     endif !if (iqpere(iq).gt.0) the
+        endif
+     endif
     enddo !do iq=1,nqtot
-
+    tracers(:)%gen0Name = ancestor(tracers)      !--- Name of the first generation ancestor
 
 
@@ -763,9 +755,9 @@
         itr=0
         do iq=nqo+1, nqtot
-          if (iso_num(iq).eq.0) then
+          if (tracers(iq)%iso_iName.eq.0) then
             itr=itr+1
             write(*,*) 'itr=',itr
             itr_indice(itr)=iq
-          endif !if (iso_num(iq).eq.0) then
+          endif !if (tracers(iq)%iso_iName.eq.0) then
         enddo
         if (itr.ne.nqtottr) then
@@ -811,13 +803,7 @@
     ALLOCATE(nb_isoind(nqo))
     ALLOCATE(nb_traciso(niso_possibles,nqo))
-    ALLOCATE(iso_num(nqtot))
     ALLOCATE(iso_indnum(nqtot))
-    ALLOCATE(zone_num(nqtot))
-    ALLOCATE(phase_num(nqtot))
      
-    iso_num(:)=0
     iso_indnum(:)=0
-    zone_num(:)=0
-    phase_num(:)=0
     indnum_fn_num(:)=0
     use_iso(:)=.false.  
@@ -841,27 +827,20 @@
           nb_iso(ixt,phase)=nb_iso(ixt,phase)+1   
           nb_isoind(phase)=nb_isoind(phase)+1   
-          iso_num(iq)=ixt
+          tracers(iq)%iso_iName=ixt
           iso_indnum(iq)=nb_isoind(phase)
           indnum_fn_num(ixt)=iso_indnum(iq)
-          phase_num(iq)=phase
-!          write(lunout,*) 'iso_num(iq)=',iso_num(iq)
-!          write(lunout,*) 'iso_indnum(iq)=',iso_indnum(iq)
-!          write(lunout,*) 'indnum_fn_num(ixt)=',indnum_fn_num(ixt)
-!          write(lunout,*) 'phase_num(iq)=',phase_num(iq)
+          tracers(iq)%iso_iPhase=phase
           goto 20
-         else if (iqpere(iq).gt.0) then          
-          if (tnom_0(iqpere(iq)) == tnom_trac) then
+         else if ( tracers(iq)%iqParent> 0) then          
+          if (tnom_0(tracers(iq)%iqParent) == tnom_trac) then
 !           write(lunout,*) 'Ce traceur est le fils d''un isotope'
            ! c'est un traceur d'isotope
            nb_traciso(ixt,phase)=nb_traciso(ixt,phase)+1
-           iso_num(iq)=ixt
+           tracers(iq)%iso_iName=ixt
            iso_indnum(iq)=indnum_fn_num(ixt)
-           zone_num(iq)=nb_traciso(ixt,phase)
-           phase_num(iq)=phase
-!           write(lunout,*) 'iso_num(iq)=',iso_num(iq)
-!           write(lunout,*) 'phase_num(iq)=',phase_num(iq)
-!           write(lunout,*) 'zone_num(iq)=',zone_num(iq)
+           tracers(iq)%iso_iZone=nb_traciso(ixt,phase)
+           tracers(iq)%iso_iPhase=phase
            goto 20
-          endif !if (tnom_0(iqpere(iq)) == trim(tnom_0(phase))//trim(tnom_iso(ixt))) then
+          endif !if (tnom_0(tracers(iq)%iqParent) == trim(tnom_0(phase))//trim(tnom_iso(ixt))) then
          endif !IF (tnom_0(iq) == trim(tnom_0(phase))//trim(tnom_iso(ixt))) then
         enddo !do ixt= niso_possibles
@@ -869,10 +848,4 @@
   20   continue
       enddo !do iq=1,nqtot
-
-!      write(lunout,*) 'iso_num=',iso_num
-!      write(lunout,*) 'iso_indnum=',iso_indnum
-!      write(lunout,*) 'zone_num=',zone_num  
-!      write(lunout,*) 'phase_num=',phase_num
-!      write(lunout,*) 'indnum_fn_num=',indnum_fn_num
 
       do ixt= 1,niso_possibles  
@@ -926,9 +899,5 @@
  
     ! flags isotopiques:
-    if (niso.gt.0) then
-        ok_isotopes=.true.
-    else
-        ok_isotopes=.false.
-    endif 
+    ok_isotopes = niso > 0
 !    WRITE(lunout,*) 'ok_isotopes=',ok_isotopes
  
@@ -955,7 +924,7 @@
     iqiso(:,:)=0     
     do iq=1,nqtot
-        if (iso_num(iq).gt.0) then
-          ixt=iso_indnum(iq)+zone_num(iq)*niso
-          iqiso(ixt,phase_num(iq))=iq
+        if (tracers(iq)%iso_iName > 0) then
+          ixt=iso_indnum(iq)+tracers(iq)%iso_iZone*niso
+          iqiso(ixt,tracers(iq)%iso_iPhase)=iq
         endif
     enddo
Index: /LMDZ6/trunk/libf/dyn3d_common/iso_verif_dyn.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3d_common/iso_verif_dyn.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3d_common/iso_verif_dyn.F	(revision 4050)
@@ -64,5 +64,5 @@
         function iso_verif_aberrant_nostop
      :           (x,iso,q,err_msg)
-        USE infotrac
+        USE infotrac, ONLY: tnat
         implicit none
         
Index: /LMDZ6/trunk/libf/dyn3dmem/advtrac_loc.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/advtrac_loc.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/advtrac_loc.F	(revision 4050)
@@ -24,5 +24,5 @@
       USE Vampir
       USE times
-      USE infotrac, ONLY: nqtot, iadv, ok_iso_verif
+      USE infotrac, ONLY: nqtot, tracers, ok_iso_verif
       USE control_mod, ONLY: iapp_tracvl, day_step, planet_type
       USE advtrac_mod, ONLY: finmasse
@@ -74,5 +74,5 @@
       DATA fill/.true./
       DATA dum/.true./
-      integer ijb,ije,ijbu,ijbv,ijeu,ijev,j
+      integer ijb,ije,ijbu,ijbv,ijeu,ijev,j, iadv
       type(Request),SAVE :: testRequest
 !$OMP THREADPRIVATE(testRequest)
@@ -152,6 +152,5 @@
                  
           !write(*,*) 'advtrac 157: appel de vlspltgen_loc'
-          call vlspltgen_loc( q,iadv, 2., massem, wg ,
-     *                        pbarug,pbarvg,dtvr,p,
+          call vlspltgen_loc( q, 2., massem, wg,pbarug,pbarvg,dtvr,p,
      *                        pk,teta )
 
@@ -169,28 +168,30 @@
       do iq=1,nqtot
 c        call clock(t_initial)
-        if(iadv(iq) == 0) cycle 
+        iadv = tracers(iq)%iadv
+        SELECT CASE(iadv)
+          CASE(0); CYCLE
+          CASE(10)
 c   ----------------------------------------------------------------
 c   Schema de Van Leer I MUSCL
 c   ----------------------------------------------------------------
-        if(iadv(iq).eq.10) THEN
      
 !LF            call vlsplt_p(q(1,1,iq),2.,massem,wg,pbarug,pbarvg,dtvr)
 
+          CASE(14)
 c   ----------------------------------------------------------------
 c   Schema "pseudo amont" + test sur humidite specifique
 C    pour la vapeur d'eau. F. Codron
 c   ----------------------------------------------------------------
-        else if(iadv(iq).eq.14) then
 c
 cym           stop 'advtrac : appel à vlspltqs :schema non parallelise'
 !LF           CALL vlspltqs_p( q(1,1,1), 2., massem, wg ,
 !LF     *                 pbarug,pbarvg,dtvr,p,pk,teta )
+          CASE(12)
 c   ----------------------------------------------------------------
 c   Schema de Frederic Hourdin
 c   ----------------------------------------------------------------
-        else if(iadv(iq).eq.12) then
           stop 'advtrac : schema non parallelise'
 c            Pas de temps adaptatif
-           call adaptdt(iadv(iq),dtbon,n,pbarug,massem)
+           call adaptdt(iadv,dtbon,n,pbarug,massem)
            if (n.GT.1) then
            write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=',
@@ -200,8 +201,8 @@
             call advn(q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,1)
            end do
-        else if(iadv(iq).eq.13) then
+          CASE(13)
           stop 'advtrac : schema non parallelise'
 c            Pas de temps adaptatif
-           call adaptdt(iadv(iq),dtbon,n,pbarug,massem)
+           call adaptdt(iadv,dtbon,n,pbarug,massem)
            if (n.GT.1) then
            write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=',
@@ -211,19 +212,19 @@
             call advn(q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,2)
           end do
+          CASE(20)
 c   ----------------------------------------------------------------
 c   Schema de pente SLOPES
 c   ----------------------------------------------------------------
-        else if (iadv(iq).eq.20) then
           stop 'advtrac : schema non parallelise'
 
             call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0)
 
+          CASE(30)
 c   ----------------------------------------------------------------
 c   Schema de Prather
 c   ----------------------------------------------------------------
-        else if (iadv(iq).eq.30) then
           stop 'advtrac : schema non parallelise'
 c            Pas de temps adaptatif
-           call adaptdt(iadv(iq),dtbon,n,pbarug,massem)
+           call adaptdt(iadv,dtbon,n,pbarug,massem)
            if (n.GT.1) then
            write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=',
@@ -232,9 +233,8 @@
            call  prather(q(1,1,iq),wg,massem,pbarug,pbarvg,
      s                     n,dtbon)
+          CASE(11,16,17,18)
 c   ----------------------------------------------------------------
 c   Schemas PPM Lin et Rood
 c   ----------------------------------------------------------------
-       else if (iadv(iq).eq.11.OR.(iadv(iq).GE.16.AND.
-     s                     iadv(iq).LE.18)) then
 
            stop 'advtrac : schema non parallelise'
@@ -242,5 +242,5 @@
 c        Test sur le flux horizontal
 c        Pas de temps adaptatif
-         call adaptdt(iadv(iq),dtbon,n,pbarug,massem)
+         call adaptdt(iadv,dtbon,n,pbarug,massem)
          if (n.GT.1) then
            write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=',
@@ -273,5 +273,6 @@
 c                         VL (version PPM) horiz. et PPM vert.
 c---------------------------------------------------------------------
-                if (iadv(iq).eq.11) then
+            SELECT CASE(iadv)
+              CASE(11)
 c                  Ss-prg PPM3d de Lin
                   call ppm3d(1,qppm(1,1,iq),
@@ -281,8 +282,8 @@
      s                       fill,dum,220.)
 
+              CASE(16)
 c----------------------------------------------------------------------
 c                           Monotonic PPM
 c----------------------------------------------------------------------
-               else if (iadv(iq).eq.16) then
 c                  Ss-prg PPM3d de Lin
                   call ppm3d(1,qppm(1,1,iq),
@@ -293,8 +294,8 @@
 c---------------------------------------------------------------------
 
+              CASE(17)
 c---------------------------------------------------------------------
 c                           Semi Monotonic PPM
 c---------------------------------------------------------------------
-               else if (iadv(iq).eq.17) then
 c                  Ss-prg PPM3d de Lin
                   call ppm3d(1,qppm(1,1,iq),
@@ -305,8 +306,8 @@
 c---------------------------------------------------------------------
 
+              CASE(18)
 c---------------------------------------------------------------------
 c                         Positive Definite PPM
 c---------------------------------------------------------------------
-                else if (iadv(iq).eq.18) then
 c                  Ss-prg PPM3d de Lin
                   call ppm3d(1,qppm(1,1,iq),
@@ -316,5 +317,5 @@
      s                       fill,dum,220.)
 c---------------------------------------------------------------------
-                endif
+            END SELECT
             enddo
 c-----------------------------------------------------------------
@@ -322,5 +323,5 @@
 c-----------------------------------------------------------------
                   call interpost(q(1,1,iq),qppm(1,1,iq))
-            endif
+        END SELECT
 c----------------------------------------------------------------------
 
Index: /LMDZ6/trunk/libf/dyn3dmem/advtrac_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/advtrac_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/advtrac_mod.F90	(revision 4050)
@@ -9,5 +9,4 @@
   USE allocate_field_mod
   USE parallel_lmdz
-  USE infotrac
   USE vlspltgen_mod
   IMPLICIT NONE
Index: /LMDZ6/trunk/libf/dyn3dmem/caladvtrac_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/caladvtrac_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/caladvtrac_mod.F90	(revision 4050)
@@ -23,5 +23,5 @@
   USE allocate_field_mod
   USE parallel_lmdz
-  USE infotrac
+  USE infotrac, ONLY: nqtot
   USE advtrac_mod, ONLY : advtrac_allocate
   USE groupe_mod 
Index: /LMDZ6/trunk/libf/dyn3dmem/call_calfis_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/call_calfis_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/call_calfis_mod.F90	(revision 4050)
@@ -37,5 +37,5 @@
   USE parallel_lmdz
   USE dimensions_mod
-  USE infotrac
+  USE infotrac, ONLY: nqtot
   IMPLICIT NONE
     TYPE(distrib),POINTER :: d
@@ -80,5 +80,5 @@
   USE Bands
   USE vampir
-  USE infotrac
+  USE infotrac, ONLY: nqtot
   USE control_mod
   USE write_field_loc
Index: /LMDZ6/trunk/libf/dyn3dmem/check_isotopes_loc.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/check_isotopes_loc.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/check_isotopes_loc.F	(revision 4050)
@@ -1,4 +1,6 @@
         subroutine check_isotopes(q,ijb,ije,err_msg)
-        USE infotrac
+        USE infotrac, ONLY: nqtot, nqo, niso, ntraciso, ntraceurs_zone, 
+     &                ok_isotopes, ok_isotrac, use_iso, 
+     &                iqiso, indnum_fn_num, index_trac, tnat
         USE parallel_lmdz
         implicit none
Index: /LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90	(revision 4050)
@@ -7,9 +7,8 @@
 !-------------------------------------------------------------------------------
   USE parallel_lmdz
-  USE infotrac
+  USE infotrac,    ONLY: nqtot, tracers, iqiso, iso_indnum, tnat, alpha_ideal, ok_isotopes, maxlen
   USE netcdf, ONLY: NF90_OPEN,  NF90_INQUIRE_DIMENSION, NF90_INQ_VARID,        &
       NF90_NOWRITE, NF90_CLOSE, NF90_INQUIRE_VARIABLE,  NF90_GET_VAR, NF90_NoErr
   USE control_mod, ONLY: planet_type
-  USE strings_mod, ONLY: maxlen
   USE assert_eq_m, ONLY: assert_eq
   USE comvert_mod, ONLY: pa,preff
@@ -42,5 +41,5 @@
   CHARACTER(LEN=maxlen) :: msg, var, modname
   INTEGER, PARAMETER :: length=100
-  INTEGER :: iq, fID, vID, idecal, ierr
+  INTEGER :: iq, fID, vID, idecal, ierr, iqParent, iName, iZone, iPhase
   REAL    :: time, tab_cntrl(length)               !--- RUN PARAMS TABLE
   REAL,             ALLOCATABLE :: vcov_glo(:,:),masse_glo(:,:),   ps_glo(:)
@@ -174,8 +173,12 @@
    !--- CRisi: for isotops, theoretical initialization using very simplified
    !           Rayleigh distillation las.
-    IF(ok_isotopes.AND.iso_num(iq)>0) THEN
-      IF(zone_num(iq)==0) q(:,:,iq)=q(:,:,iqpere(iq))*tnat(iso_num(iq))        &
-     &           *(q(:,:,iqpere(iq))/30.e-3)**(alpha_ideal(iso_num(iq))-1)
-      IF(zone_num(iq)==1) q(:,:,iq)=q(:,:,iqiso(iso_indnum(iq),phase_num(iq)))
+    iName = tracers(iq)%iso_iName
+    iZone = tracers(iq)%iso_iZone
+    iPhase= tracers(iq)%iso_iPhase
+    iqParent = tracers(iq)%iqParent
+    IF(ok_isotopes .AND. iName>0) THEN
+      IF(iZone==0) q(:,:,iq) = q(:,:,iqParent)*tnat(iName)    &
+     &           *(q(:,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.)
+      IF(iZone==1) q(:,:,iq) = q(:,:,iqiso(iso_indnum(iq),iPhase))
     END IF
   END DO
Index: /LMDZ6/trunk/libf/dyn3dmem/dynredem_loc.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/dynredem_loc.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/dynredem_loc.F90	(revision 4050)
@@ -9,10 +9,9 @@
   USE parallel_lmdz
   USE mod_hallo
-  USE infotrac
+  USE infotrac, ONLY: nqtot, tracers, maxlen
   USE netcdf, ONLY: NF90_CREATE, NF90_DEF_DIM, NF90_INQ_VARID, NF90_GLOBAL,    &
                     NF90_CLOSE,  NF90_PUT_ATT, NF90_UNLIMITED, NF90_CLOBBER,   &
                     NF90_64BIT_OFFSET
   USE dynredem_mod, ONLY: cre_var, put_var, err, modname, fil
-  USE strings_mod, ONLY: maxlen
   USE comvert_mod, ONLY: ap,bp,aps,bps,presnivs,pseudoalt,pa,preff, &
                          nivsig,nivsigs
@@ -175,5 +174,5 @@
   USE parallel_lmdz
   USE mod_hallo
-  USE infotrac
+  USE infotrac, ONLY: nqtot, tracers, type_trac, maxlen
   USE control_mod
   USE netcdf,   ONLY: NF90_OPEN,  NF90_NOWRITE, NF90_GET_VAR, NF90_INQ_VARID,  &
Index: /LMDZ6/trunk/libf/dyn3dmem/gcm.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/gcm.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/gcm.F90	(revision 4050)
@@ -9,5 +9,5 @@
   USE mod_const_mpi, ONLY: init_const_mpi
   USE parallel_lmdz
-  USE infotrac
+  USE infotrac, ONLY: nqtot, infotrac_init
 !#ifdef CPP_PHYS
 !  USE mod_interface_dyn_phys, ONLY: init_interface_dyn_phys
Index: /LMDZ6/trunk/libf/dyn3dmem/groupe_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/groupe_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/groupe_mod.F90	(revision 4050)
@@ -10,5 +10,5 @@
   USE allocate_field_mod
   USE parallel_lmdz
-  USE infotrac
+!  USE infotrac
   USE advtrac_mod, ONLY : advtrac_allocate 
   IMPLICIT NONE
Index: /LMDZ6/trunk/libf/dyn3dmem/iniacademic_loc.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/iniacademic_loc.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/iniacademic_loc.F90	(revision 4050)
@@ -7,6 +7,6 @@
   use exner_hyb_m, only: exner_hyb
   use exner_milieu_m, only: exner_milieu
-  USE infotrac, ONLY: nqtot,niso_possibles,ok_isotopes,iqpere,ok_iso_verif,tnat,alpha_ideal, &
-        & iqiso,phase_num,iso_indnum,iso_num,zone_num
+  USE infotrac, ONLY: nqtot, niso_possibles, ok_isotopes, ok_iso_verif, tnat, alpha_ideal, &
+                      iqiso, tracers, iso_indnum
   USE control_mod, ONLY: day_step,planet_type
   USE parallel_lmdz, ONLY: ijb_u, ije_u, ijb_v, ije_v
@@ -67,5 +67,5 @@
   real tetastrat ! potential temperature in the stratosphere, in K
   real tetajl(jjp1,llm)
-  INTEGER i,j,l,lsup,ij
+  INTEGER i,j,l,lsup,ij, iq, iName, iZone, iPhase, iqParent
 
   REAL teta0,ttp,delt_y,delt_z,eps ! Constantes pour profil de T
@@ -282,21 +282,19 @@
            ! Earth: first two tracers will be water
 
-           do i=1,nqtot
-              if (i == 1) q(ijb_u:ije_u,:,i)=1.e-10
-              if (i == 2) q(ijb_u:ije_u,:,i)=1.e-15
-              if (i.gt.2) q(ijb_u:ije_u,:,i)=0.
+           do iq=1,nqtot
+              q(ijb_u:ije_u,:,iq)=0.
+              if (tracers(iq)%name == 'H2Ov') q(ijb_u:ije_u,:,iq)=1.e-10
+              if (tracers(iq)%name == 'H2Ol') q(ijb_u:ije_u,:,iq)=1.e-15
 
               ! CRisi: init des isotopes
               ! distill de Rayleigh très simplifiée
-              if (ok_isotopes) then
-                if ((iso_num(i).gt.0).and.(zone_num(i).eq.0)) then          
-                   q(ijb_u:ije_u,:,i)=q(ijb_u:ije_u,:,iqpere(i))       &
-      &                  *tnat(iso_num(i))                             &
-      &                  *(q(ijb_u:ije_u,:,iqpere(i))/30.e-3)                              &
-     &                   **(alpha_ideal(iso_num(i))-1)
-                endif                
-                if ((iso_num(i).gt.0).and.(zone_num(i).eq.1)) then
-                  q(ijb_u:ije_u,:,i)=q(ijb_u:ije_u,:,iqiso(iso_indnum(i),phase_num(i)))
-                endif
+              iName = tracers(iq)%iso_iName
+              iZone = tracers(iq)%iso_iZone
+              iPhase= tracers(iq)%iso_iPhase
+              iqParent = tracers(iq)%iqParent
+              if (ok_isotopes .AND. iName > 0) then
+                if (iZone == 0) q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqParent)*tnat(iName) &
+                                                    *(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1)
+                if (iZone == 1) q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqiso(iso_indnum(iq),iPhase))
               endif !if (ok_isotopes) then
 
Index: /LMDZ6/trunk/libf/dyn3dmem/initdynav_loc.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/initdynav_loc.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/initdynav_loc.F	(revision 4050)
@@ -11,5 +11,5 @@
        use Write_field
        use misc_mod
-       USE infotrac
+!       USE infotrac
        use com_io_dyn_mod, only : histaveid,histvaveid,histuaveid,       &
      &        dynhistave_file,dynhistvave_file,dynhistuave_file
Index: /LMDZ6/trunk/libf/dyn3dmem/inithist_loc.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/inithist_loc.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/inithist_loc.F	(revision 4050)
@@ -11,5 +11,4 @@
        use Write_field
        use misc_mod
-       USE infotrac
        use com_io_dyn_mod, only : histid,histvid,histuid,               &
      &                        dynhist_file,dynhistv_file,dynhistu_file
Index: /LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F	(revision 4050)
@@ -14,5 +14,5 @@
 c   --------------------------------------------------------------------
       USE parallel_lmdz
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
+      USE infotrac, ONLY : nqtot,tracers, ! CRisi                 &
      &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
       IMPLICIT NONE
@@ -330,32 +330,29 @@
 ! Il faut faire ça avant d'avoir mis à jour q et masse
 
-       if (nqfils(iq).gt.0) then
-       do ifils=1,nqdesc(iq)
-       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
+      do ifils=1,tracers(iq)%nqDescen
         ! attention: comme Ratio est utilisé comme q dans l'appel
         ! recursif, il doit contenir à lui seul tous les indices de tous
         ! les descendants!
-         iq2=iqfils(ifils,iq)
-c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
-         DO l=1,llm
+        iq2=tracers(iq)%iqDescen(ifils)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm
           DO ij=ijb,ije
-           ! On a besoin de q et masse seulement entre ijb et ije. On ne
-           ! les calcule donc que de ijb à ije
-           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
-           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
-             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           else
-             Ratio(ij,l,iq2)=ratiomin
-           endif
+            ! On a besoin de q et masse seulement entre ijb et ije. On ne
+            ! les calcule donc que de ijb à ije
+            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
+            masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
+            if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
+              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            else
+              Ratio(ij,l,iq2)=ratiomin
+            endif
           enddo   
-         enddo
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+c$OMP END DO NOWAIT
+      enddo !do ifils=1,tracers(iq)%nqDescen
+      do ifils=1,tracers(iq)%nqChilds
+        iq2=tracers(iq)%iqDescen(ifils)
+        call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2)
+      enddo
 ! end CRisi
 
@@ -383,20 +380,17 @@
       ! On calcule q entre ijb+1 et ije -> on fait pareil pour ratio 
       ! puis on boucle en longitude
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
-         iq2=iqfils(ifils,iq)  
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
-         DO l=1,llm
+        DO l=1,llm
           DO ij=ijb+1,ije
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
           DO ij=ijb+iip1-1,ije,iip1
-             q(ij-iim,l,iq2)=q(ij,l,iq2)
-          enddo ! DO ij=ijb+iip1-1,ije,iip1
-         enddo !DO l=1,llm
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+            q(ij-iim,l,iq2)=q(ij,l,iq2)
+          enddo
+        enddo
+c$OMP END DO NOWAIT
+      enddo
 
       !write(*,*) 'vlsplt 399: iq,ijb_x=',iq,ijb_x
@@ -422,5 +416,5 @@
 c   --------------------------------------------------------------------
       USE parallel_lmdz
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
+      USE infotrac, ONLY : nqtot,tracers, ! CRisi                 &
      &                     qperemin,masseqmin,ratiomin ! MVals et CRisi    
       USE comconst_mod, ONLY: pi
@@ -732,5 +726,5 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vly 689: iq,nqfils(iq)=',iq,nqfils(iq) 
+      !write(*,*) 'vly 689: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen
 
       ijb=ij_begin-2*iip1
@@ -743,35 +737,32 @@
       if (pole_sud)  ijem=ij_end
 
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
-         iq2=iqfils(ifils,iq)
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
-         DO l=1,llm
-          ! modif des bornes: CRisi 16 nov 2020
-          ! d'abord masse avec bornes corrigées
+        DO l=1,llm
+        ! modif des bornes: CRisi 16 nov 2020
+        ! d'abord masse avec bornes corrigées
           DO ij=ijbm,ijem 
-           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
-          enddo !DO ij=ijbm,ijem 
+          !MVals: veiller a ce qu'on n'ait pas de denominateur nul
+            masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
+          enddo
 
           ! ensuite Ratio avec anciennes bornes
-         DO ij=ijb,ije
-           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
-             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           else
-             Ratio(ij,l,iq2)=ratiomin  
-           endif     
+          DO ij=ijb,ije
+          !MVals: veiller a ce qu'on n'ait pas de denominateur nul
+            if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
+              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            else
+              Ratio(ij,l,iq2)=ratiomin  
+            endif     
           enddo !DO ij=ijbm,ijem  
-         enddo !DO l=1,llm
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
-
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         call vly_loc(Ratio,pente_max,masse,qbyv,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo !DO l=1,llm
+c$OMP END DO NOWAIT
+      enddo
+
+      do ifils=1,tracers(iq)%nqChilds
+        iq2=tracers(iq)%iqDescen(ifils)
+        call vly_loc(Ratio,pente_max,masse,qbyv,iq2)
+      enddo
 ! end CRisi
       
@@ -862,16 +853,14 @@
 !      if (pole_sud)  ije=ij_end
 
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
-         DO l=1,llm
+        DO l=1,llm
           DO ij=ijb,ije
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
-         enddo
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+c$OMP END DO NOWAIT
+      enddo
 
 
@@ -895,5 +884,5 @@
       USE parallel_lmdz
       USE vlz_mod
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
+      USE infotrac, ONLY : nqtot,tracers, ! CRisi                 &
      &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
       
@@ -1159,32 +1148,29 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vlsplt 942: iq,nqfils(iq)=',iq,nqfils(iq)
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-       !do ifils=1,nqfils(iq) ! modif C Risi 22 nov 2020
-         iq2=iqfils(ifils,iq)
-c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
-         DO l=1,llm
+      !write(*,*) 'vlsplt 942: iq,nqChilds(iq)=',iq,tracers(iq)%nqChilds
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm
           DO ij=ijb,ije
            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
-           if (q(ij,l,iq).gt.qperemin) then
-             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           else
-             Ratio(ij,l,iq2)=ratiomin
-           endif
-           !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015
-           w(ij,l,iq2)=wq(ij,l,iq)
+            masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
+            if (q(ij,l,iq).gt.qperemin) then
+              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            else
+              Ratio(ij,l,iq2)=ratiomin
+            endif
+            !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015
+            w(ij,l,iq2)=wq(ij,l,iq)
           enddo   
-         enddo
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
+        enddo
+c$OMP END DO NOWAIT
+      enddo
 c$OMP BARRIER
 
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         call vlz_loc(Ratio,pente_max,masse,w,ijb_x,ije_x,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+      do ifils=1,tracers(iq)%nqChilds
+        iq2=tracers(iq)%iqDescen(ifils)
+        call vlz_loc(Ratio,pente_max,masse,w,ijb_x,ije_x,iq2)
+      enddo
 ! end CRisi  
 
@@ -1207,16 +1193,14 @@
       
 ! retablir les fils en rapport de melange par rapport a l'air:
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
-         DO l=1,llm
+        DO l=1,llm
           DO ij=ijb,ije
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
-         enddo
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+c$OMP END DO NOWAIT
+      enddo
 
       RETURN
Index: /LMDZ6/trunk/libf/dyn3dmem/vlspltgen_loc.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/vlspltgen_loc.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/vlspltgen_loc.F	(revision 4050)
@@ -2,5 +2,5 @@
 ! $Header$
 !
-       SUBROUTINE vlspltgen_loc( q,iadv,pente_max,masse,w,pbaru,pbarv,
+       SUBROUTINE vlspltgen_loc( q,pente_max,masse,w,pbaru,pbarv,
      &                           pdt, p,pk,teta                 )
      
@@ -28,6 +28,5 @@
       USE VAMPIR
       ! CRisi: on rajoute variables utiles d'infotrac  
-      USE infotrac, ONLY : nqtot,nqperes,nqdesc,nqfils,iqfils, 
-     &    ok_iso_verif
+      USE infotrac, ONLY : nqtot,nqperes, tracers,ok_iso_verif
       USE vlspltgen_mod
       USE comconst_mod, ONLY: cpp
@@ -41,5 +40,4 @@
 c   Arguments:
 c   ----------
-      INTEGER iadv(nqtot)
       REAL masse(ijb_u:ije_u,llm),pente_max
       REAL pbaru( ijb_u:ije_u,llm ),pbarv( ijb_v:ije_v,llm)
@@ -200,15 +198,12 @@
 !      DO iq=1,nqtot
       DO iq=1,nqperes ! CRisi: on ne boucle que sur les pères= ceux qui sont transportés directement par l'air
-       !write(*,*) 'vlspltgen 192: iq,iadv=',iq,iadv(iq)
+       !write(*,*) 'vlspltgen 192: iq,iadv=',iq,tracers(iq)%iadv
 #ifdef DEBUG_IO    
        CALL WriteField_u('zq',zq(:,:,iq))
        CALL WriteField_u('zm',zm(:,:,iq)) 
 #endif
-        if(iadv(iq) == 0) then
-        
-          cycle 
-        
-        else if (iadv(iq)==10) then
-
+        SELECT CASE(tracers(iq)%iadv)
+          CASE(0); CYCLE
+          CASE(10)
 #ifdef _ADV_HALO        
 ! CRisi: on ajoute les nombres de fils et tableaux des fils
@@ -229,6 +224,6 @@
           call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest1)
 ! CRisi
-          do ifils=1,nqdesc(iq)
-            iq2=iqfils(ifils,iq)
+          do ifils=1,tracers(iq)%nqDescen
+            iq2=tracers(iq)%iqDescen(ifils)
             call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest1)
             call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest1)
@@ -238,6 +233,5 @@
           call VTe(VTHallo)
 c$OMP END MASTER
-        else if (iadv(iq)==14) then
-
+          CASE(14)
 #ifdef _ADV_HALO           
           call vlxqs_loc(zq,pente_max,zm,mu,
@@ -256,6 +250,6 @@
           call Register_Hallo_u(zq(:,:,iq),llm,2,2,2,2,MyRequest1)
           call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest1)
-          do ifils=1,nqdesc(iq)
-            iq2=iqfils(ifils,iq)
+          do ifils=1,tracers(iq)%nqDescen
+            iq2=tracers(iq)%iqDescen(ifils)
             call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest1)
             call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest1)
@@ -265,9 +259,8 @@
           call VTe(VTHallo)
 c$OMP END MASTER 
-        else
-        
+          CASE DEFAULT
           stop 'vlspltgen_p : schema non parallelise'
       
-        endif
+        END SELECT
       
       enddo !DO iq=1,nqperes
@@ -298,24 +291,20 @@
         !write(*,*) 'vlspltgen 279: iq=',iq
 
-        if(iadv(iq) == 0) then
-        
-          cycle 
-        
-        else if (iadv(iq)==10) then
-
+        SELECT CASE(tracers(iq)%iadv)
+          CASE(0); CYCLE
+          CASE(10)
 #ifdef _ADV_HALLO
           call vlx_loc(zq,pente_max,zm,mu,
      &                 ij_begin+2*iip1,ij_end-2*iip1,iq)
 #endif        
-        else if (iadv(iq)==14) then
+          CASE(14)
 #ifdef _ADV_HALLO
           call vlxqs_loc(zq,pente_max,zm,mu,
      &                    qsat,ij_begin+2*iip1,ij_end-2*iip1,iq)
 #endif    
-        else
-        
+          CASE DEFAULT
           stop 'vlspltgen_p : schema non parallelise'
       
-        endif
+        END SELECT
       
       enddo
@@ -355,22 +344,11 @@
 #endif
 
-        if(iadv(iq) == 0) then
-        
-          cycle 
-        
-        else if (iadv(iq)==10) then
-        
-          call vly_loc(zq,pente_max,zm,mv,iq)
-  
-        else if (iadv(iq)==14) then
-      
-          call vlyqs_loc(zq,pente_max,zm,mv,
-     &                   qsat,iq)
- 
-        else
-        
+        SELECT CASE(tracers(iq)%iadv)
+          CASE(0); CYCLE
+          CASE(10); call vly_loc(zq,pente_max,zm,mv,iq)
+          CASE(14); call vlyqs_loc(zq,pente_max,zm,mv,qsat,iq)
+          CASE DEFAULT
           stop 'vlspltgen_p : schema non parallelise'
-      
-        endif
+        END SELECT
        
        enddo
@@ -386,10 +364,7 @@
        CALL WriteField_u('zm',zm(:,:,iq))
 #endif
-        if(iadv(iq) == 0) then 
-          
-          cycle 
-        
-        else if (iadv(iq)==10 .or. iadv(iq)==14 ) then
-
+        SELECT CASE(tracers(iq)%iadv)
+          CASE(0); CYCLE
+          CASE(10,14)
 c$OMP BARRIER        
 #ifdef _ADV_HALLO
@@ -411,6 +386,6 @@
           call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest2)
           ! CRisi
-          do ifils=1,nqdesc(iq)
-            iq2=iqfils(ifils,iq)
+          do ifils=1,tracers(iq)%nqDescen
+            iq2=tracers(iq)%iqDescen(ifils)
             call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest2)
             call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest2)
@@ -420,9 +395,8 @@
 c$OMP END MASTER        
 c$OMP BARRIER
-        else
-        
+          CASE DEFAULT
           stop 'vlspltgen_p : schema non parallelise'
       
-        endif
+        END SELECT
       
       enddo
@@ -448,9 +422,7 @@
       !write(*,*) 'vlspltgen 409: iq=',iq
 
-        if(iadv(iq) == 0) then
-          
-          cycle 
-        
-        else if (iadv(iq)==10 .or. iadv(iq)==14 ) then
+        SELECT CASE(tracers(iq)%iadv)
+          CASE(0); CYCLE
+          CASE(10,14)
 c$OMP BARRIER        
 
@@ -461,9 +433,7 @@
 
 c$OMP BARRIER        
-        else
-        
+          CASE DEFAULT
           stop 'vlspltgen_p : schema non parallelise'
-      
-        endif
+        END SELECT
       
       enddo
@@ -498,22 +468,10 @@
        CALL WriteField_u('zm',zm(:,:,iq))
 #endif
-        if(iadv(iq) == 0) then
-        
-          cycle 
-        
-        else if (iadv(iq)==10) then
-        
-          call vly_loc(zq,pente_max,zm,mv,iq)
-  
-        else if (iadv(iq)==14) then
-      
-          call vlyqs_loc(zq,pente_max,zm,mv,
-     &                   qsat,iq)
- 
-        else
-        
-          stop 'vlspltgen_p : schema non parallelise'
-      
-        endif
+        SELECT CASE(tracers(iq)%iadv)
+          CASE(0); CYCLE
+          CASE(10); call   vly_loc(zq,pente_max,zm,mv,     iq)
+          CASE(14); call vlyqs_loc(zq,pente_max,zm,mv,qsat,iq)
+          CASE DEFAULT; stop 'vlspltgen_p : schema non parallelise'
+        END SELECT
        
        enddo !do iq=1,nqperes
@@ -529,23 +487,12 @@
        CALL WriteField_u('zm',zm(:,:,iq))
 #endif
-        if(iadv(iq) == 0) then 
-          
-          cycle 
-        
-        else if (iadv(iq)==10) then
-        
-          call vlx_loc(zq,pente_max,zm,mu,
+        SELECT CASE(tracers(iq)%iadv)
+          CASE(0); CYCLE
+          CASE(10); call   vlx_loc(zq,pente_max,zm,mu,
      &               ij_begin,ij_end,iq)
-  
-        else if (iadv(iq)==14) then
-      
-          call vlxqs_loc(zq,pente_max,zm,mu,
+          CASE(14); call vlxqs_loc(zq,pente_max,zm,mu,
      &                 qsat, ij_begin,ij_end,iq)
- 
-        else
-        
-          stop 'vlspltgen_p : schema non parallelise'
-      
-        endif
+          CASE DEFAULT; stop 'vlspltgen_p : schema non parallelise'
+        END SELECT
        
        enddo !do iq=1,nqperes
Index: /LMDZ6/trunk/libf/dyn3dmem/vlspltqs_loc.F
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/vlspltqs_loc.F	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/vlspltqs_loc.F	(revision 4050)
@@ -12,5 +12,5 @@
 c   --------------------------------------------------------------------
       USE parallel_lmdz
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
+      USE infotrac, ONLY : nqtot,tracers, ! CRisi                 &
      &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
       IMPLICIT NONE
@@ -337,30 +337,28 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vlspltqs 336: iq,ijb_x,nqfils(iq)=',
-!     &     iq,ijb_x,nqfils(iq)  
-
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
+      !write(*,*) 'vlspltqs 336: iq,ijb_x,iqDescen(iq)=',
+!     &     iq,ijb_x,tracers(iq)%iqDescen  
+
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
-         DO l=1,llm
+        DO l=1,llm
           DO ij=ijb,ije
-           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
-           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
-             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           else
-             Ratio(ij,l,iq2)=ratiomin
-           endif 
+            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
+            masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
+            if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
+              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            else
+              Ratio(ij,l,iq2)=ratiomin
+            endif 
           enddo   
-         enddo
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqfils(iq)
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         !write(*,*) 'vlxqs 349: on appelle vlx pour iq2=',iq2
-         call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+c$OMP END DO NOWAIT
+      enddo
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        !write(*,*) 'vlxqs 349: on appelle vlx pour iq2=',iq2
+        call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2)
+      enddo
 ! end CRisi
 
@@ -389,19 +387,17 @@
 
 ! retablir les fils en rapport de melange par rapport a l'air:
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
-         DO l=1,llm
+        DO l=1,llm
           DO ij=ijb+1,ije
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
           DO ij=ijb+iip1-1,ije,iip1
-             q(ij-iim,l,iq2)=q(ij,l,iq2)
+            q(ij-iim,l,iq2)=q(ij,l,iq2)
           enddo ! DO ij=ijb+iip1-1,ije,iip1
-         enddo
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+c$OMP END DO NOWAIT
+      enddo
 
       !write(*,*) 'vlspltqs 399: iq,ijb_x=',iq,ijb_x
@@ -426,5 +422,5 @@
 c   --------------------------------------------------------------------
       USE parallel_lmdz
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
+      USE infotrac, ONLY : nqtot,tracers, ! CRisi                 &
      &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
       USE comconst_mod, ONLY: pi
@@ -733,5 +729,5 @@
 ! CRisi: appel récursif de l'advection sur les fils.
 ! Il faut faire ça avant d'avoir mis à jour q et masse
-      !write(*,*) 'vlyqs 689: iq,nqfils(iq)=',iq,nqfils(iq)
+      !write(*,*) 'vlyqs 689: iq,iqDescen(iq)=',iq,tracers(iq)%iqDescen
       
       ijb=ij_begin-2*iip1
@@ -747,35 +743,33 @@
       !write(lunout,*) 'ij_begin,ij_end=',ij_begin,ij_end
       !write(lunout,*) 'pole_nord,pole_sud=',pole_nord,pole_sud
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
-         DO l=1,llm
+        DO l=1,llm
           ! modif des bornes: CRisi 16 nov 2020
           ! d'abord masse avec bornes corrigées
           DO ij=ijbm,ijem 
-           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
+            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
+            masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
           enddo !DO ij=ijbm,ijem 
 
           ! ensuite Ratio avec anciennes bornes
           DO ij=ijb,ije
-           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
-           !write(lunout,*) 'ij,l,q(ij,l,iq)=',ij,l,q(ij,l,iq)
-           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
-             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
-           else
-             Ratio(ij,l,iq2)=ratiomin   
-           endif
+            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
+            !write(lunout,*) 'ij,l,q(ij,l,iq)=',ij,l,q(ij,l,iq)
+            if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
+              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
+            else
+              Ratio(ij,l,iq2)=ratiomin   
+            endif
           enddo !DO ij=ijbm,ijem
-         enddo !DO l=1,llm
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
-         !write(lunout,*) 'vly: appel recursiv vly iq2=',iq2
-         call vly_loc(Ratio,pente_max,masse,qbyv,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo !DO l=1,llm
+c$OMP END DO NOWAIT
+      enddo
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
+        !write(lunout,*) 'vly: appel recursiv vly iq2=',iq2
+        call vly_loc(Ratio,pente_max,masse,qbyv,iq2)
+      enddo
 
         
@@ -856,16 +850,14 @@
 !      if (pole_sud)  ije=ij_end-iip1
   
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)  
+      do ifils=1,tracers(iq)%nqDescen
+        iq2=tracers(iq)%iqDescen(ifils)
 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
-         DO l=1,llm
+        DO l=1,llm
           DO ij=ijb,ije
             q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)            
           enddo
-         enddo
-c$OMP END DO NOWAIT
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo
+c$OMP END DO NOWAIT
+      enddo
 
 
Index: /LMDZ6/trunk/libf/dyn3dmem/vlz_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/dyn3dmem/vlz_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dyn3dmem/vlz_mod.F90	(revision 4050)
@@ -5,6 +5,5 @@
   REAL,POINTER,SAVE :: dzqw(:,:)
   REAL,POINTER,SAVE :: adzqw(:,:)
-  ! CRisi: pour les traceurs:  
-  !REAL,POINTER,SAVE :: masseq(:,:,:)
+  ! CRisi: pour les traceurs:
   REAL,POINTER,SAVE :: Ratio(:,:,:)
   
@@ -25,8 +24,5 @@
     CALL allocate_u(dzqw,llm,d)
     CALL allocate_u(adzqw,llm,d)
-    if (nqdesc_tot.gt.0) then
-    !CALL allocate_u(masseq,llm,nqtot,d)
-    CALL allocate_u(Ratio,llm,nqtot,d)
-    endif !if (nqdesc_tot.gt.0) then
+    IF(ANY(tracers(:)%nqDescen > 0)) CALL allocate_u(Ratio,llm,nqtot,d)
 
   END SUBROUTINE vlz_allocate
@@ -44,9 +40,5 @@
     CALL switch_u(dzqw,distrib_vanleer,dist)
     CALL switch_u(adzqw,distrib_vanleer,dist)
-    ! CRisi:
-    if (nqdesc_tot.gt.0) then    
-    !CALL switch_u(masseq,distrib_vanleer,dist)
-    CALL switch_u(Ratio,distrib_vanleer,dist)
-    endif !if (nqdesc_tot.gt.0) then     
+    IF(ANY(tracers(:)%nqDescen > 0)) CALL switch_u(Ratio,distrib_vanleer,dist)
 
   END SUBROUTINE vlz_switch_vanleer  
Index: /LMDZ6/trunk/libf/dynphy_lonlat/phylmd/etat0dyn_netcdf.F90
===================================================================
--- /LMDZ6/trunk/libf/dynphy_lonlat/phylmd/etat0dyn_netcdf.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dynphy_lonlat/phylmd/etat0dyn_netcdf.F90	(revision 4050)
@@ -150,6 +150,6 @@
     CALL regr_lat_time_coefoz
     CALL press_coefoz
-    CALL regr_pr_o3(p3d, q3d(:,:,:,i))
-    q3d(:,:,:,i)=q3d(:,:,:,i)*48./ 29.                  !--- Mole->mass fraction         
+    CALL regr_pr_o3(p3d, q3d(:,:,:,iq))
+    q3d(:,:,:,iq)=q3d(:,:,:,iq)*48./ 29.                !--- Mole->mass fraction         
   END IF
 #endif
Index: /LMDZ6/trunk/libf/dynphy_lonlat/phylmd/iniphysiq_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/dynphy_lonlat/phylmd/iniphysiq_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/dynphy_lonlat/phylmd/iniphysiq_mod.F90	(revision 4050)
@@ -18,9 +18,7 @@
   USE infotrac, ONLY: nqtot,nqo,nbtr,nqCO2,tracers,type_trac,&
                       niadv,conv_flg,pbl_flg,solsym,&
-                      nqfils,nqdesc,nqdesc_tot,iqfils,iqpere,&
                       ok_isotopes,ok_iso_verif,ok_isotrac,&
                       ok_init_iso,niso_possibles,tnat,&
-                      alpha_ideal,use_iso,iqiso,iso_num,&
-                      iso_indnum,zone_num,phase_num,&
+                      alpha_ideal,use_iso,iqiso,iso_indnum,&
                       indnum_fn_num,index_trac,&
                       niso,ntraceurs_zone,ntraciso,nqtottr,itr_indice
@@ -148,9 +146,7 @@
   CALL init_infotrac_phy(nqtot,nqo,nbtr,nqtottr,nqCO2,tracers,type_trac,&
                          niadv,conv_flg,pbl_flg,solsym,&
-                         nqfils,nqdesc,nqdesc_tot,iqfils,iqpere,&
                          ok_isotopes,ok_iso_verif,ok_isotrac,&
                          ok_init_iso,niso_possibles,tnat,&
-                         alpha_ideal,use_iso,iqiso,iso_num,&
-                         iso_indnum,zone_num,phase_num,&
+                         alpha_ideal,use_iso,iqiso,iso_indnum,&
                          indnum_fn_num,index_trac,&
                          niso,ntraceurs_zone,ntraciso,itr_indice &
Index: /LMDZ6/trunk/libf/phylmd/infotrac_phy.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmd/infotrac_phy.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmd/infotrac_phy.F90	(revision 4050)
@@ -51,12 +51,4 @@
   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: niadv ! equivalent dyn / physique
 !$OMP THREADPRIVATE(niadv)
-
-! CRisi: tableaux de fils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqfils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqdesc ! nombres de fils + nombre de tous les petits fils sur toutes les générations
-  INTEGER, SAVE :: nqdesc_tot
-  INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE    :: iqfils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: iqpere
-!$OMP THREADPRIVATE(nqfils,nqdesc,nqdesc_tot,iqfils,iqpere)
 
 ! conv_flg(it)=0 : convection desactivated for tracer number it 
@@ -84,12 +76,6 @@
     INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE ::  iqiso ! donne indice iq en fn de (ixt,phase) 
 !$OMP THREADPRIVATE(iqiso)
-    INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_num ! donne numéro iso entre 1 et niso_possibles en fn de nqtot
-!$OMP THREADPRIVATE(iso_num)
     INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_indnum ! donne numéro iso entre 1 et niso effectif en fn de nqtot
 !$OMP THREADPRIVATE(iso_indnum)
-    INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  zone_num ! donne numéro de la zone de tracage en fn de nqtot
-!$OMP THREADPRIVATE(zone_num)
-    INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  phase_num ! donne numéro de la zone de tracage en fn de nqtot
-!$OMP THREADPRIVATE(phase_num)
     INTEGER, DIMENSION(niso_possibles), SAVE :: indnum_fn_num ! donne indice entre entre 1 et niso en fonction du numéro d isotope entre 1 et niso_possibles
 !$OMP THREADPRIVATE(indnum_fn_num)
@@ -106,9 +92,7 @@
   SUBROUTINE init_infotrac_phy(nqtot_,nqo_,nbtr_,nqtottr_,nqCO2_,tracers_,type_trac_,&
                                niadv_,conv_flg_,pbl_flg_,solsym_,&
-                               nqfils_,nqdesc_,nqdesc_tot_,iqfils_,iqpere_,&
                                ok_isotopes_,ok_iso_verif_,ok_isotrac_,&
                                ok_init_iso_,niso_possibles_,tnat_,&
-                               alpha_ideal_,use_iso_,iqiso_,iso_num_,&
-                               iso_indnum_,zone_num_,phase_num_,&
+                               alpha_ideal_,use_iso_,iqiso_,iso_indnum_,&
                                indnum_fn_num_,index_trac_,&
                                niso_,ntraceurs_zone_,ntraciso_,itr_indice_&
@@ -143,9 +127,4 @@
     CHARACTER(len=*),INTENT(IN) :: solsym_(nbtr_)
     ! Isotopes:
-    INTEGER,INTENT(IN) :: nqfils_(nqtot_)
-    INTEGER,INTENT(IN) :: nqdesc_(nqtot_)
-    INTEGER,INTENT(IN) :: nqdesc_tot_
-    INTEGER,INTENT(IN) :: iqfils_(nqtot_,nqtot_)
-    INTEGER,INTENT(IN) :: iqpere_(nqtot_)
     LOGICAL,INTENT(IN) :: ok_isotopes_
     LOGICAL,INTENT(IN) :: ok_iso_verif_
@@ -157,8 +136,5 @@
     LOGICAL,INTENT(IN) :: use_iso_(niso_possibles_)
     INTEGER,INTENT(IN) :: iqiso_(ntraciso_,nqo_)
-    INTEGER,INTENT(IN) :: iso_num_(nqtot_)
     INTEGER,INTENT(IN) :: iso_indnum_(nqtot_)
-    INTEGER,INTENT(IN) :: zone_num_(nqtot_)
-    INTEGER,INTENT(IN) :: phase_num_(nqtot_)
     INTEGER,INTENT(IN) :: indnum_fn_num_(niso_possibles_)
     INTEGER,INTENT(IN) :: index_trac_(ntraceurs_zone_,niso_)
@@ -169,4 +145,5 @@
 
     CHARACTER(LEN=30) :: modname="init_infotrac_phy"
+    INTEGER :: iq
 
     nqtot=nqtot_
@@ -176,4 +153,7 @@
     nqtottr=nqtottr_
     ALLOCATE(tracers(nqtot)); tracers(:) = tracers_(:)
+    tracers(:)%isAdvected = tracers(:)%iadv  >   0
+!    tracers(:)%isH2Ofamily = delPhase(tracers(:)%gen0Name) == 'H2O'
+    tracers(:)%isH2Ofamily = [(tracers(iq)%gen0Name(1:3) == 'H2O', iq=1, nqtot)]
 #ifdef CPP_StratAer
     nbtr_bin=nbtr_bin_
@@ -216,14 +196,4 @@
     
     IF (ok_isotopes) THEN
-      ALLOCATE(nqfils(nqtot))
-      nqfils(:)=nqfils_(:)
-      ALLOCATE(nqdesc(nqtot))
-      nqdesc(:)=nqdesc_(:)
-      nqdesc_tot=nqdesc_tot_
-      ALLOCATE(iqfils(nqtot,nqtot))
-      iqfils(:,:)=iqfils_(:,:)
-      ALLOCATE(iqpere(nqtot))
-      iqpere(:)=iqpere_(:)
-    
       tnat(:)=tnat_(:)
       alpha_ideal(:)=alpha_ideal_(:)
@@ -232,12 +202,6 @@
       ALLOCATE(iqiso(ntraciso,nqo))
       iqiso(:,:)=iqiso_(:,:)
-      ALLOCATE(iso_num(nqtot))
-      iso_num(:)=iso_num_(:)
       ALLOCATE(iso_indnum(nqtot))
       iso_indnum(:)=iso_indnum_(:)
-      ALLOCATE(zone_num(nqtot))
-      zone_num(:)=zone_num_(:)
-      ALLOCATE(phase_num(nqtot))
-      phase_num(:)=phase_num_(:)
       
       indnum_fn_num(:)=indnum_fn_num_(:)
Index: /LMDZ6/trunk/libf/phylmd/tracco2i_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmd/tracco2i_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmd/tracco2i_mod.F90	(revision 4050)
@@ -30,5 +30,5 @@
 
     USE dimphy
-    USE infotrac_phy
+    USE infotrac_phy, ONLY: nbtr
     USE geometry_mod, ONLY: cell_area
     USE carbon_cycle_mod, ONLY: id_CO2, nbcf_in, fields_in, cfname_in
@@ -336,5 +336,5 @@
 
     USE dimphy
-    USE infotrac_phy
+!    USE infotrac_phy
     USE geometry_mod, ONLY : cell_area
     USE mod_grid_phy_lmdz
Index: /LMDZ6/trunk/libf/phylmd/traclmdz_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmd/traclmdz_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmd/traclmdz_mod.F90	(revision 4050)
@@ -67,5 +67,5 @@
     
     USE dimphy
-    USE infotrac_phy
+    USE infotrac_phy, ONLY: nbtr, tracers, niadv, solsym
     
     ! Input argument
@@ -89,5 +89,5 @@
     ! Initialization of the tracers should be done here only for those not found in the restart file.
     USE dimphy
-    USE infotrac_phy
+    USE infotrac_phy, ONLY: nbtr, nqo, tracers, pbl_flg, conv_flg, niadv
     USE regr_pr_comb_coefoz_m, ONLY: alloc_coefoz
     USE press_coefoz_m, ONLY: press_coefoz
@@ -176,6 +176,4 @@
 !!       iiq=niadv(it+2)                                                            ! jyg
        iiq=niadv(it+nqo)                                                            ! jyg
-print*,'###'//TRIM(tracers(iiq)%name)//'###'
-print*,'###'//TRIM(strLower(tracers(iiq)%name))//'###'
        SELECT CASE(strLower(tracers(iiq)%name))
          CASE("rn");      id_rn     = it ! radon
@@ -311,5 +309,5 @@
     
     USE dimphy
-    USE infotrac_phy
+    USE infotrac_phy, ONLY: nbtr, pbl_flg, solsym
     USE regr_pr_comb_coefoz_m, ONLY: regr_pr_comb_coefoz
     USE o3_chem_m, ONLY: o3_chem
@@ -586,5 +584,5 @@
     ! variable trs is written to restart file (restartphy.nc)
     USE dimphy
-    USE infotrac_phy
+    USE infotrac_phy, ONLY: nbtr
     
     REAL,DIMENSION(klon,nbtr), INTENT(OUT) :: trs_out
Index: /LMDZ6/trunk/libf/phylmd/tracreprobus_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmd/tracreprobus_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmd/tracreprobus_mod.F90	(revision 4050)
@@ -12,5 +12,5 @@
 
     USE dimphy
-    USE infotrac_phy
+    USE infotrac_phy, ONLY: nbtr, solsym
 #ifdef REPROBUS 
     USE CHEM_REP, ONLY : pdt_rep, &  ! pas de temps reprobus
Index: /LMDZ6/trunk/libf/phylmdiso/cv30_routines.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/cv30_routines.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmdiso/cv30_routines.F90	(revision 4050)
@@ -449,5 +449,5 @@
 
 #ifdef ISOVERIF
-        write(*,*) 'cv30_routine undilute 1 413: entrée'
+        write(*,*) 'cv30_routine undilute 1 413: entree'
 #endif
 
@@ -602,5 +602,5 @@
           zfice(i) = MIN(MAX(zfice(i),0.0),1.0)          
        enddo
-       ! calcul de la composition du condensat glacé et liquide
+       ! calcul de la composition du condensat glace et liquide
 
        do i=1,len
@@ -647,5 +647,5 @@
 
 #ifdef ISOVERIF
-            write(*,*) 'cv30_routine undilute 1 598: après condiso'
+            write(*,*) 'cv30_routine undilute 1 598: apres condiso'
           
           if (iso_eau.gt.0) then
@@ -1012,5 +1012,5 @@
             else
               q(i,k)=0.0
-              clw(i,k)=0.0 ! mise en commentaire le 5 avril pour vérif
+              clw(i,k)=0.0 ! mise en commentaire le 5 avril pour verif
 !            convergence
             endif  !f (negation(essai_convergence)) then
@@ -1908,5 +1908,5 @@
       real xtrti(ntraciso,nloc)
       real xtres(ntraciso)
-      ! on ajoute la dimension nloc à xtrti pour vérifs dans les tags: 5 fev
+      ! on ajoute la dimension nloc a xtrti pour verifs dans les tags: 5 fev
       ! 2010
       real zfice(nloc),zxtliq(ntraciso,nloc),zxtice(ntraciso,nloc)
@@ -1923,5 +1923,5 @@
 #ifdef ISO
 #ifdef ISOVERIF
-      write(*,*) 'cv30_routines 1820: entrée dans cv3_mixing'
+      write(*,*) 'cv30_routines 1820: entree dans cv3_mixing'
       if (iso_eau.gt.0) then
       call iso_verif_egalite_vect2D( &
@@ -1965,6 +1965,6 @@
              xtelij(ixt,i,k,j)=0.0
             enddo !do ixt =1,niso
-            ! on initialise mieux que ça qent et elij, même si au final les
-            ! valeurs en nd=nl+1 ne sont pas utilisées
+            ! on initialise mieux que ca qent et elij, meme si au final les
+            ! valeurs en nd=nl+1 ne sont pas utilisees
             qent(i,k,j)=rr(i,j)
             elij(i,k,j)=0.0    
@@ -2121,6 +2121,6 @@
 !     :           'tcond(il),rs(il,j)=',
 !     :            il,i,j,xtent(:,il,i,j),tcond(il),rs(il,j)
-        ! colorier la vapeur résiduelle selon température de
-        ! condensation, et le condensat en un tag spécifique
+        ! colorier la vapeur residuelle selon temperature de
+        ! condensation, et le condensat en un tag spEcifique
           if ((elij(il,i,j).gt.0.0).and.(qent(il,i,j).gt.0.0)) then  
             if (option_traceurs.eq.17) then        
@@ -2241,6 +2241,6 @@
 #ifdef ISOTRAC          
         if (option_tmin.ge.1) then
-        ! colorier la vapeur résiduelle selon température de
-        ! condensation, et le condensat en un tag spécifique
+        ! colorier la vapeur residuelle selon temperature de
+        ! condensation, et le condensat en un tag specifique
 !        write(*,*) 'cv3 tmp 2095 il,i,j,xtent(:,il,i,j)=',
 !     :            il,i,j,xtent(:,il,i,j)
@@ -2475,6 +2475,6 @@
 #ifdef ISOTRAC          
         if (option_tmin.ge.1) then
-        ! colorier la vapeur résiduelle selon température de
-        ! condensation, et le condensat en un tag spécifique
+        ! colorier la vapeur residuelle selon temperature de
+        ! condensation, et le condensat en un tag specifique
 !        write(*,*) 'cv3 tmp 2314 il,i,j,xtent(:,il,i,j)=',
 !     :            il,i,j,xtent(:,il,i,j)
@@ -2579,10 +2579,10 @@
 #ifdef ISO
 #ifdef ISOTRAC
-        ! seulement à la fin on taggue le condensat
+        ! seulement a la fin on taggue le condensat
         if (option_cond.ge.1) then
          do im = 1, nd
          do jm = 1, nd
          do il = 1, ncum    
-           ! colorier le condensat en un tag spécifique
+           ! colorier le condensat en un tag specifique
            do ixt=niso+1,ntraciso
              if (index_zone(ixt).eq.izone_cond) then
@@ -2603,5 +2603,5 @@
          do im = 1, nd
          do il = 1, ncum    
-           ! colorier le condensat en un tag spécifique
+           ! colorier le condensat en un tag specifique
            do ixt=niso+1,ntraciso
              if (index_zone(ixt).eq.izone_cond) then
@@ -2739,5 +2739,5 @@
   ! ------------------------------------------------------
 !#ifdef ISOVERIF
-!        write(*,*) 'cv30_routines 2382: entrée dans cv3_unsat'
+!        write(*,*) 'cv30_routines 2382: entree dans cv3_unsat'
 !#endif
 
@@ -2747,5 +2747,5 @@
   mp(:, :) = 0.
 #ifdef ISO
-  ! initialisation plus complète de water et rp
+  ! initialisation plus complete de water et rp
   water(:,:)=0.0
   xtwater(:,:,:)=0.0
@@ -2936,5 +2936,5 @@
         call iso_verif_traceur(xtwdtrain(1,il),'cv30_routine 2540')
         if (option_cond.ge.1) then
-           ! on vérifie que tout le détrainement est taggé condensat
+           ! on verifie que tout le detrainement est tagge condensat
            if (iso_verif_positif_nostop( &
      &          xtwdtrain(index_trac(izone_cond,iso_eau),il) &
@@ -3032,6 +3032,6 @@
 
 #ifdef ISO
-      ! ajout cam: éviter les evaporations ou eaux négatives
-!      water(il,i)=max(0.0,water(il,i)) ! ceci est toujours vérifié
+      ! ajout cam: eviter les evaporations ou eaux negatives
+!      water(il,i)=max(0.0,water(il,i)) ! ceci est toujours verifie
 #ifdef ISOVERIF
           call iso_verif_positif(water(il,i),'cv30_unsat 2376')
@@ -3189,5 +3189,5 @@
 #ifdef ISO
 #ifdef ISOVERIF
-! verif des inputs à appel stewart
+! verif des inputs a appel stewart
 !        write(*,*) 'cv30_routines 2842 tmp: appel de appel_stewart'
       do il=1,ncum 
@@ -3208,5 +3208,5 @@
        enddo
 #endif
-        ! appel de appel_stewart_vectorisé
+        ! appel de appel_stewart_vectorise
         call appel_stewart_vectall(lwork,ncum, &
      &                   ph,t,evap,xtwdtrain, &
@@ -3268,5 +3268,5 @@
 #endif
         
-! équivalent isotopique de rp(il,i)=amin1(rp(il,i),rs(il,i))
+! equivalent isotopique de rp(il,i)=amin1(rp(il,i),rs(il,i))
        do il=1,ncum
         if (i.lt.inb(il) .and. lwork(il)) then
@@ -3463,14 +3463,14 @@
       real xtbx(ntraciso), xtawat(ntraciso)
       ! cam debug
-      ! pour l'homogénéisation sous le nuage:
+      ! pour l'homogeneisation sous le nuage:
       real frsum(nloc), bxtsum(ntraciso,nloc), fxtsum(ntraciso,nloc)
-      ! correction dans calcul tendance liée à Am:
+      ! correction dans calcul tendance liee a Am:
       real dq_tmp,k_tmp,dx_tmp,R_tmp,dqreste_tmp,dxreste_tmp,kad_tmp
       logical correction_excess_aberrant
       parameter (correction_excess_aberrant=.false.)
-        ! correction qui permettait d'éviter deltas et dexcess aberrants. Mais
+        ! correction qui permettait d'eviter deltas et dexcess aberrants. Mais
         ! pb: ne conserve pas la masse d'isotopes!
 #ifdef DIAGISO
-        ! diagnostiques juste: tendance des différents processus
+        ! diagnostiques juste: tendance des differents processus
       real fxt_detrainement(ntraciso,nloc,nd)
       real fxt_fluxmasse(ntraciso,nloc,nd)
@@ -3517,5 +3517,5 @@
 #ifdef ISO
        ! cam debug
-!       write(*,*) 'cv30_routines 3082: entrée dans cv3_yield'
+!       write(*,*) 'cv30_routines 3082: entree dans cv3_yield'
        ! en cam debug
        do ixt = 1, ntraciso
@@ -3749,6 +3749,6 @@
         do ixt = 1, ntraciso
 !        fxt_fluxmasse(ixt,il,1)=fxt_fluxmasse(ixt,il,1) &
-!     &      +0.01*grav*am(il)*(xt(ixt,il,2)-xt(ixt,il,1))*work(il) ! déplacé
-!     plus haut car il existe différents cas
+!     &      +0.01*grav*am(il)*(xt(ixt,il,2)-xt(ixt,il,1))*work(il) ! deplace
+!     plus haut car il existe differents cas
         fxt_ddft(ixt,il,1)=fxt_ddft(ixt,il,1) &
      &      +0.01*grav*mp(il,2)*(xtp(ixt,il,2)-xt(ixt,il,1))*work(il)
@@ -3759,18 +3759,18 @@
 
 
-        ! pour l'ajout de la tendance liée au flux de masse Am, il faut être
+        ! pour l'ajout de la tendance liee au flux de masse Am, il faut etre
         ! prudent.
         ! On a dq1=k*(q2-q1) avec k=dt*0.01*grav*am(il)*work(il)
-        ! Pour les isotopes, la formule utilisée depuis 2006 et qui avait toujours marché est:
+        ! Pour les isotopes, la formule utilisee depuis 2006 et qui avait toujours marche est:
         ! dx1=k*(x2-x1)
-        ! Mais on plante dans un cas pathologique en décembre 2017 lors du test
-        ! d'un cas d'Anne Cozic: les isotopes deviennent négatifs.
+        ! Mais on plante dans un cas pathologique en decembre 2017 lors du test
+        ! d'un cas d'Anne Cozic: les isotopes deviennent negatifs.
         ! C'est un cas pas physique: on perd 99% de la masse de vapeur d'eau! 
         ! q2=1.01e-3 et q1=1.25e-3 kg/kg
-        ! et dq=-1.24e-3: comment est-ce possible qu'un flux venant d'un air à
-        ! q2= 1.01e-3 assèche q1 jusqu'à 0.01e-3kg/kg!
-        ! Pour les isotopes, ça donne des x1+dx négatifs.
-        ! Ce n'est pas physique mais il faut quand même s'adapter.
-        ! Pour cela, on considère que d'abord on fait rentrer le flux de masse
+        ! et dq=-1.24e-3: comment est-ce possible qu'un flux venant d'un air a
+        ! q2= 1.01e-3 asseche q1 jusqu'a 0.01e-3kg/kg!
+        ! Pour les isotopes, ca donne des x1+dx negatifs.
+        ! Ce n'est pas physique mais il faut quand meme s'adapter.
+        ! Pour cela, on considere que d'abord on fait rentrer le flux de masse
         ! descendant, et ensuite seulement on fait sortir le flux de masse
         ! sortant.
@@ -3778,17 +3778,17 @@
         ! isotopique de la vapeur d'eau q1. 
         ! A la fin, on a R=(x1+dx)/(q1+dq)=(x1+k*x2)/(q1+k*q2)
-        ! On vérifie que quand k est petit, on tend vers la formulation
+        ! On verifie que quand k est petit, on tend vers la formulation
         ! habituelle.
-        ! Comme on est habitués à la formulation habituelle, qu'elle a fait ses
-        ! preuves, on la garde sauf dans le cas où dq/q<-0.9 où on utilise la
+        ! Comme on est habitues a la formulation habituelle, qu'elle a fait ses
+        ! preuves, on la garde sauf dans le cas ou dq/q<-0.9 ou on utilise la
         ! nouvelle formulation.
         ! rappel: dq_tmp=0.01*grav*am(il)*(rr(il,2)-rr(il,1))*work(il)*delt
-        ! Même avec cette nouvelle foirmulation, on a encore des isotopes
-        ! négatifs, cette fois à cause des ddfts
-        ! On considère donc les tendances et série et non en parallèle quand on
+        ! Meme avec cette nouvelle foirmulation, on a encore des isotopes
+        ! negatifs, cette fois a cause des ddfts
+        ! On considere donc les tendances et serie et non en parallele quand on
         ! calcule R_tmp.
         dq_tmp=0.01*grav*am(il)*(rr(il,2)-rr(il,1))*work(il)*delt ! utile ci-dessous
         if ((dq_tmp/rr(il,1).lt.-0.9).and.correction_excess_aberrant) then
-                ! nouvelle formulation où on fait d'abord entrer k*q2 et ensuite
+                ! nouvelle formulation ou on fait d'abord entrer k*q2 et ensuite
                 ! seulement on fait sortir k*q1 sans changement de composition
                 ! isotopique
@@ -3828,6 +3828,6 @@
            enddo ! do ixt = 1, ntraciso
         else !if (dq_tmp/rr(il,1).lt.-0.9) then
-                ! formulation habituelle qui avait toujours marché de 2006 à
-                ! décembre 2017.
+                ! formulation habituelle qui avait toujours marche de 2006 a
+                ! decembre 2017.
            do ixt = 1, ntraciso     
                 fxt(ixt,il,1)=fxt(ixt,il,1) &
@@ -4232,13 +4232,13 @@
         ! ad.
 #endif
-       ! ici, on sépare 2 cas, pour éviter le cas pathologique décrit plus haut
-       ! pour la tendance liée à Am en i=1, qui peut conduire à des isotopes
-       ! négatifs dans les cas où les flux de masse soustrait plus de 90% de la
-       ! vapeur de la couche. Voir plus haut le détail des équations.
-       ! La différence ici est qu'on considère les flux de masse amp1 et ad en
-       ! même temps.
+       ! ici, on separe 2 cas, pour eviter le cas pathologique decrit plus haut
+       ! pour la tendance liee a Am en i=1, qui peut conduire a des isotopes
+       ! negatifs dans les cas ou les flux de masse soustrait plus de 90% de la
+       ! vapeur de la couche. Voir plus haut le detail des equations.
+       ! La difference ici est qu'on considere les flux de masse amp1 et ad en
+       ! meme temps.
        dq_tmp= 0.01*grav*dpinv*(amp1(il)*(rr(il,i+1)-rr(il,i)) &
     &            -ad(il)*(rr(il,i)-rr(il,i-1)))*delt
-       ! c'est équivalent à dqi= kamp1*qip1+kad*qim1-(kamp1+kad)*qi
+       ! c'est equivalent a dqi= kamp1*qip1+kad*qim1-(kamp1+kad)*qi
        if ((dq_tmp/rr(il,i).lt.-0.9).and.correction_excess_aberrant) then 
         ! nouvelle formulation
@@ -4430,19 +4430,19 @@
         ! on change le traitement de cette ligne le 8 mai 2009:
         ! avant, on avait: xtawat=xtelij(il,k,i)-(1.-xtep(il,i))*xtclw(il,i)
-        ! c'est à dire que Rawat=Relij+(1-ep)*clw/awat*(Relij-Rclw)
-        ! si Relij!=Rclw, alors un fractionnement isotopique non physique était
+        ! c'est a dire que Rawat=Relij+(1-ep)*clw/awat*(Relij-Rclw)
+        ! si Relij!=Rclw, alors un fractionnement isotopique non physique etait
         ! introduit.
-        ! En fait, awat représente le surplus de condensat dans le mélange par
-        ! rapport à celui restant dans la colonne adiabatique
-        ! ce surplus à la même compo que le elij, sans fractionnement.
-        ! d'où le nouveau traitement ci-dessous.
+        ! En fait, awat represente le surplus de condensat dans le melange par
+        ! rapport a celui restant dans la colonne adiabatique
+        ! ce surplus a la meme compo que le elij, sans fractionnement.
+        ! d'ou le nouveau traitement ci-dessous.
       if (elij(il,k,i).gt.0.0) then
         do ixt = 1, ntraciso
           xtawat(ixt)=awat*(xtelij(ixt,il,k,i)/elij(il,k,i))
-!          xtawat(ixt)=amax1(xtawat(ixt),0.0) ! pas nécessaire
+!          xtawat(ixt)=amax1(xtawat(ixt),0.0) ! pas necessaire
         enddo
       else !if (elij(il,k,i).gt.0.0) then
           ! normalement, si elij(il,k,i)<=0, alors awat=0
-          ! on le vérifie. Si c'est vrai -> xtawat=0 aussi
+          ! on le verifie. Si c'est vrai -> xtawat=0 aussi
 #ifdef ISOVERIF
         call iso_verif_egalite(awat,0.0,'cv30_yield 3779')
@@ -4942,5 +4942,5 @@
      &       'cv30_yield 5029,O18, evap')
           if ((il.eq.1636).and.(i.eq.9)) then
-            write(*,*) 'cv30_yield 5057: ici, on vérifie deltaD_nobx'
+            write(*,*) 'cv30_yield 5057: ici, on verifie deltaD_nobx'
             write(*,*) 'il,i=',il,i
             write(*,*) 'fr(il,i),bx,fr(il,i)-bx=',fr(il,i),bx,fr(il,i)-bx
@@ -4973,6 +4973,6 @@
         else ! taggage des ddfts:
         ! la formule pour fq_ddft suppose que le ddft est en RP. Ce n'est pas le
-        ! cas pour le water tagging puisqu'il y a conversion des molécules
-        ! blances entrainées en molécule rouges.
+        ! cas pour le water tagging puisqu'il y a conversion des molecules
+        ! blances entrainees en molecule rouges.
         ! Il faut donc prendre en compte ce taux de conversion quand
         ! entrainement d'env vers ddft
@@ -4983,13 +4983,13 @@
 !     :           -conversion(iiso)   
 
-        ! Pb: quand on discretise, dqp/dt n'est pas vérifée numériquement.
-        ! on se retrouve donc avec des d Ye/dt différents de 0 même si ye=0 ( on
-        ! note X les molécules poubelles et Y les molécules ddfts).
+        ! Pb: quand on discretise, dqp/dt n'est pas verifee numeriquement.
+        ! on se retrouve donc avec des d Ye/dt differents de 0 meme si ye=0 ( on
+        ! note X les molecules poubelles et Y les molecules ddfts).
 
         ! Solution alternative: Dans le cas entrainant, Ye ne varie que par
         ! ascendance compensatoire des ddfts et par perte de Ye vers le ddft. On
-        ! calcule donc ce terme directement avec schéma amont: 
-
-        ! ajout déjà de l'évap
+        ! calcule donc ce terme directement avec schema amont: 
+
+        ! ajout deja de l'evap
         do ixt = 1+niso,ntraciso
              fxt(ixt,il,i)=fxt(ixt,il,i) &
@@ -5069,5 +5069,5 @@
 #endif
                 else !if (abs(dXe).gt.ridicule) then
-                    ! dans ce cas, fxtXe doit être faible
+                    ! dans ce cas, fxtXe doit etre faible
                     
 #ifdef ISOVERIF
@@ -5085,5 +5085,5 @@
                       fxt(ixt,il,i)=fxt(ixt,il,i)+fxtXe(iiso)
                     else !if (izone.eq.izone_poubelle) then
-                        ! pas de tendance pour ce tag là
+                        ! pas de tendance pour ce tag la
                     endif !if (izone.eq.izone_poubelle) then
                    endif !if ((izone.ne.izone_revap).and.
@@ -5099,5 +5099,5 @@
                
             else !if (mp(il,i).gt.mp(il,i+1)) then
-                ! cas détrainant: pas de problèmes
+                ! cas detrainant: pas de problemes
                 do ixt=1+niso,ntraciso
                 fxt(ixt,il,i)=fxt(ixt,il,i) &
@@ -5389,5 +5389,5 @@
   DO il = 1, ncum
 
-! attention, on corrige un problème C Risi
+! attention, on corrige un probleme C Risi
       IF (cvflag_grav) then
 
@@ -5722,5 +5722,5 @@
 !             write(*,*) 'cv30_routine 3990: fin des il pour i=',i
           enddo !do i=1,nl
-!          write(*,*) 'cv30_routine 3990: fin des vérifs sur homogen'
+!          write(*,*) 'cv30_routine 3990: fin des verifs sur homogen'
 #endif
 
@@ -6027,5 +6027,5 @@
 
   ! fraction deau condensee dans les melanges convertie en precip : epm
-  ! et eau condensée précipitée dans masse d'air saturé : l_m*dM_m/dzdz.dzdz
+  ! et eau condensee precipitee dans masse d'air sature : l_m*dM_m/dzdz.dzdz
   DO j = 1, nam1
     DO k = 1, j - 1
@@ -6226,5 +6226,5 @@
 
 #ifdef ISOVERIF
-        write(*,*) 'cv30_routines 4293: entrée dans cv3_uncompress'
+        write(*,*) 'cv30_routines 4293: entree dans cv3_uncompress'
 #endif
   DO i = 1, ncum
@@ -6346,7 +6346,7 @@
 
         ! On fait varier epmax en fn de la cape
-        ! Il faut donc recalculer ep, et hp qui a déjà été calculé et
-        ! qui en dépend
-        ! Toutes les autres variables fn de ep sont calculées plus bas.
+        ! Il faut donc recalculer ep, et hp qui a deja ete calcule et
+        ! qui en depend
+        ! Toutes les autres variables fn de ep sont calculees plus bas.
 
 #include "cvthermo.h"
Index: /LMDZ6/trunk/libf/phylmdiso/cv3_routines.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/cv3_routines.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmdiso/cv3_routines.F90	(revision 4050)
@@ -403,5 +403,5 @@
         enddo !do i=1,len
 #endif          
-! initialiser quelques variables oubliées
+! initialiser quelques variables oubliees
        do i=1,len
           plcllo(i)=0.0
@@ -900,5 +900,5 @@
           zfice(i) = MIN(MAX(zfice(i),0.0),1.0)          
        enddo
-       ! calcul de la composition du condensat glacé et liquide
+       ! calcul de la composition du condensat glace et liquide
 
        do i=1,len
@@ -959,5 +959,5 @@
 
 #ifdef ISOVERIF
-            write(*,*) 'cv3_routine undilute 1 598: après condiso'
+            write(*,*) 'cv3_routine undilute 1 598: apres condiso'
           
           if (iso_eau.gt.0) then
@@ -1435,5 +1435,5 @@
 
 !JAM--------------------------------------------------------------------
-! Calcul de la quantité d'eau sous forme de glace
+! Calcul de la quantite d'eau sous forme de glace
 ! --------------------------------------------------------------------
   INTEGER nl, len
@@ -2856,5 +2856,5 @@
       real xtrti(ntraciso,nloc)
       real xtres(ntraciso)
-      ! on ajoute la dimension nloc à xtrti pour vérifs dans les tags: 5 fev
+      ! on ajoute la dimension nloc a xtrti pour verifs dans les tags: 5 fev
       ! 2010
       real zfice(nloc),zxtliq(ntraciso,nloc),zxtice(ntraciso,nloc)
@@ -2873,5 +2873,5 @@
 #ifdef ISO
 #ifdef ISOVERIF
-!       write(*,*) 'cv3_routines 1820: entrée dans cv3_mixing'
+!       write(*,*) 'cv3_routines 1820: entree dans cv3_mixing'
        do i=minorig+1,nl
         do il=1,ncum
@@ -3083,6 +3083,6 @@
 !     :           'tcond(il),rs(il,j)=',
 !     :            il,i,j,xtent(:,il,i,j),tcond(il),rs(il,j)
-        ! colorier la vapeur résiduelle selon température de
-        ! condensation, et le condensat en un tag spécifique
+        ! colorier la vapeur residuelle selon temperature de
+        ! condensation, et le condensat en un tag specifique
           if ((elij(il,i,j).gt.0.0).and.(qent(il,i,j).gt.0.0)) then  
             if (option_traceurs.eq.17) then        
@@ -3194,6 +3194,6 @@
 #ifdef ISOTRAC          
         if (option_tmin.ge.1) then
-        ! colorier la vapeur résiduelle selon température de
-        ! condensation, et le condensat en un tag spécifique
+        ! colorier la vapeur residuelle selon temperature de
+        ! condensation, et le condensat en un tag specifique
 !        write(*,*) 'cv3 tmp 2095 il,i,j,xtent(:,il,i,j)=',
 !     :            il,i,j,xtent(:,il,i,j)
@@ -3431,6 +3431,6 @@
 #ifdef ISOTRAC          
         if (option_tmin.ge.1) then
-        ! colorier la vapeur résiduelle selon température de
-        ! condensation, et le condensat en un tag spécifique
+        ! colorier la vapeur residuelle selon temperature de
+        ! condensation, et le condensat en un tag specifique
 !        write(*,*) 'cv3 tmp 2314 il,i,j,xtent(:,il,i,j)=',
 !     :            il,i,j,xtent(:,il,i,j)
@@ -3543,10 +3543,10 @@
 #ifdef ISO
 #ifdef ISOTRAC
-        ! seulement à la fin on taggue le condensat
+        ! seulement a la fin on taggue le condensat
         if (option_cond.ge.1) then
          do im = 1, nd
          do jm = 1, nd
          do il = 1, ncum    
-           ! colorier le condensat en un tag spécifique
+           ! colorier le condensat en un tag specifique
            do ixt=niso+1,ntraciso
              if (index_zone(ixt).eq.izone_cond) then
@@ -3567,5 +3567,5 @@
          do im = 1, nd
          do il = 1, ncum    
-           ! colorier le condensat en un tag spécifique
+           ! colorier le condensat en un tag specifique
            do ixt=niso+1,ntraciso
              if (index_zone(ixt).eq.izone_cond) then
@@ -3991,5 +3991,5 @@
         call iso_verif_traceur(xtwdtrain(1,il),'cv3_routine 2540')
         if (option_cond.ge.1) then
-          ! on vérifie que tout le détrainement est taggé condensat
+          ! on verifie que tout le detrainement est tagge condensat
           if (iso_verif_positif_nostop( &
      &          xtwdtrain(index_trac(izone_cond,iso_eau),il) &
@@ -4156,5 +4156,5 @@
 !!---end jyg---
 
-! --------retour à la formulation originale d'Emanuel.
+! --------retour a la formulation originale d'Emanuel.
         IF (cvflag_ice) THEN
 
@@ -4170,7 +4170,7 @@
 
 !JAM  Attention: evap=sigt*E
-!    Modification: evap devient l'évaporation en milieu de couche
-!    car nécessaire dans cv3_yield
-!    Du coup, il faut modifier pas mal d'équations...
+!    Modification: evap devient l'evaporation en milieu de couche
+!    car necessaire dans cv3_yield
+!    Du coup, il faut modifier pas mal d'equations...
 !    et l'expression de afac qui devient afac1
 !    revap=sqrt((prec(i+1)+prec(i))/2)
@@ -4191,5 +4191,5 @@
 !JYG    Dans sa formulation originale, Emanuel calcule l'evaporation par:
 ! c             evap(il,i)=sigt*afac*revap
-! ce qui n'est pas correct. Dans cv_routines, la formulation a été modifiee.
+! ce qui n'est pas correct. Dans cv_routines, la formulation a ete modifiee.
 ! Ici,l'evaporation evap est simplement calculee par l'equation de
 ! conservation.
@@ -4525,5 +4525,5 @@
 #ifdef ISO
 #ifdef ISOVERIF
-! verif des inputs à appel stewart
+! verif des inputs a appel stewart
       do il=1,ncum 
        if (i.le.inb(il) .and. lwork(il)) then
@@ -4543,5 +4543,5 @@
        enddo
 #endif
-        ! appel de appel_stewart_vectorisé
+        ! appel de appel_stewart_vectorise
         call appel_stewart_vectall_np(lwork,ncum, &
      &                   ph,t,evap,xtwdtrain, &
@@ -4611,5 +4611,5 @@
 #endif
         
-! équivalent isotopique de rp(il,i)=amin1(rp(il,i),rs(il,i))
+! equivalent isotopique de rp(il,i)=amin1(rp(il,i),rs(il,i))
        do il=1,ncum
         if (i.lt.inb(il) .and. lwork(il)) then
@@ -4651,5 +4651,5 @@
 #endif
           rpprec(il,i)=rs(il,i)      
-         ! sous cas rajouté le 11dec 2011. Normalement, pas utile 
+         ! sous cas rajoute le 11dec 2011. Normalement, pas utile 
          else if (rp(il,i).eq.0.0) then                 
             do ixt=1,ntraciso
@@ -4864,8 +4864,8 @@
       real xtbx(ntraciso), xtawat(ntraciso,nloc)
       ! cam debug
-      ! pour l'homogénéisation sous le nuage:
+      ! pour l'homogeneisation sous le nuage:
       real bxtsum(ntraciso,nloc), fxtsum(ntraciso,nloc)
 #ifdef DIAGISO
-        ! diagnostiques juste: tendance des différents processus
+        ! diagnostiques juste: tendance des differents processus
       real fxt_detrainement(niso,nloc,nd)
       real fxt_fluxmasse(niso,nloc,nd)
@@ -4917,5 +4917,5 @@
 #ifdef ISO
        ! cam debug
-!       write(*,*) 'cv3_routines 3082: entrée dans cv3_yield'
+!       write(*,*) 'cv3_routines 3082: entree dans cv3_yield'
        ! en cam debug
        do ixt = 1, ntraciso
@@ -4994,5 +4994,5 @@
   END DO
 #ifdef ISO
-! on initialise mieux fr et fxt par securité
+! on initialise mieux fr et fxt par securite
   fr(:,:)=0.0
   fxt(:,:,:)=0.0
@@ -5845,6 +5845,6 @@
         else ! taggage des ddfts:
         ! la formule pour fq_ddft suppose que le ddft est en RP. Ce n'est pas le
-        ! cas pour le water tagging puisqu'il y a conversion des molécules
-        ! blances entrainées en molécule rouges.
+        ! cas pour le water tagging puisqu'il y a conversion des molecules
+        ! blances entrainees en molecule rouges.
         ! Il faut donc prendre en compte ce taux de conversion quand
         ! entrainement d'env vers ddft
@@ -5855,13 +5855,13 @@
 !     :           -conversion(iiso)   
 
-        ! Pb: quand on discretise, dqp/dt n'est pas vérifée numériquement.
-        ! on se retrouve donc avec des d Ye/dt différents de 0 même si ye=0 ( on
-        ! note X les molécules poubelles et Y les molécules ddfts).
+        ! Pb: quand on discretise, dqp/dt n'est pas verifee numeriquement.
+        ! on se retrouve donc avec des d Ye/dt differents de 0 meme si ye=0 ( on
+        ! note X les molecules poubelles et Y les molecules ddfts).
 
         ! Solution alternative: Dans le cas entrainant, Ye ne varie que par
         ! ascendance compensatoire des ddfts et par perte de Ye vers le ddft. On
-        ! calcule donc ce terme directement avec schéma amont: 
-
-        ! ajout déjà de l'évap
+        ! calcule donc ce terme directement avec schema amont: 
+
+        ! ajout deja de l'evap
         do ixt = 1+niso,ntraciso
              fxt(ixt,il,i)=fxt(ixt,il,i) &
@@ -5941,5 +5941,5 @@
 #endif
                 else !if (abs(dXe).gt.ridicule) then
-                    ! dans ce cas, fxtXe doit être faible
+                    ! dans ce cas, fxtXe doit etre faible
                     
 #ifdef ISOVERIF
@@ -5957,5 +5957,5 @@
                       fxt(ixt,il,i)=fxt(ixt,il,i)+fxtXe(iiso)
                     else !if (izone.eq.izone_poubelle) then
-                        ! pas de tendance pour ce tag là
+                        ! pas de tendance pour ce tag la
                     endif !if (izone.eq.izone_poubelle) then
                    endif !if ((izone.ne.izone_revap).and.
@@ -5971,5 +5971,5 @@
                
             else !if (mp(il,i).gt.mp(il,i+1)) then
-                ! cas détrainant: pas de problèmes
+                ! cas detrainant: pas de problemes
                 do ixt=1+niso,ntraciso
                 fxt(ixt,il,i)=fxt(ixt,il,i) &
@@ -6176,19 +6176,19 @@
         ! on change le traitement de cette ligne le 8 mai 2009:
         ! avant, on avait: xtawat=xtelij(il,k,i)-(1.-xtep(il,i))*xtclw(il,i)
-        ! c'est à dire que Rawat=Relij+(1-ep)*clw/awat*(Relij-Rclw)
-        ! si Relij!=Rclw, alors un fractionnement isotopique non physique était
+        ! c'est a dire que Rawat=Relij+(1-ep)*clw/awat*(Relij-Rclw)
+        ! si Relij!=Rclw, alors un fractionnement isotopique non physique etait
         ! introduit.
-        ! En fait, awat représente le surplus de condensat dans le mélange par
-        ! rapport à celui restant dans la colonne adiabatique
-        ! ce surplus à la même compo que le elij, sans fractionnement.
-        ! d'où le nouveau traitement ci-dessous.
+        ! En fait, awat represente le surplus de condensat dans le melange par
+        ! rapport a celui restant dans la colonne adiabatique
+        ! ce surplus a la meme compo que le elij, sans fractionnement.
+        ! d'ou le nouveau traitement ci-dessous.
       if (elij(il,k,i).gt.0.0) then
         do ixt = 1, ntraciso
           xtawat(ixt,il)=awat(il)*(xtelij(ixt,il,k,i)/elij(il,k,i))
-!          xtawat(ixt)=amax1(xtawat(ixt),0.0) ! pas nécessaire
+!          xtawat(ixt)=amax1(xtawat(ixt),0.0) ! pas necessaire
         enddo !do ixt = 1, ntraciso
       else !if (elij(il,k,i).gt.0.0) then
           ! normalement, si elij(il,k,i)<=0, alors awat=0
-          ! on le vérifie. Si c'est vrai -> xtawat=0 aussi
+          ! on le verifie. Si c'est vrai -> xtawat=0 aussi
 #ifdef ISOVERIF
         call iso_verif_egalite(awat(il),0.0,'cv3_yield 3779')
@@ -6850,8 +6850,8 @@
         fq_detrainement(il, i) = fq_detrainement(il, i)/alpha_qpos(il)
         do ixt=1,ntraciso
-          fq_ddft(ixt,il, i) = fq_ddft(ixt,il, i)/alpha_qpos(il)
-          fq_evapprecip(ixt,il, i) = fq_evapprecip(ixt,il, i)/alpha_qpos(il)
-          fq_fluxmasse(ixt,il, i) = fq_fluxmasse(ixt,il, i)/alpha_qpos(il)
-          fq_detrainement(ixt,il, i) = fq_detrainement(ixt,il, i)/alpha_qpos(il)
+          fxt_ddft(ixt,il, i) = fxt_ddft(ixt,il, i)/alpha_qpos(il)
+          fxt_evapprecip(ixt,il, i) = fxt_evapprecip(ixt,il, i)/alpha_qpos(il)
+          fxt_fluxmasse(ixt,il, i) = fxt_fluxmasse(ixt,il, i)/alpha_qpos(il)
+          fxt_detrainement(ixt,il, i) = fxt_detrainement(ixt,il, i)/alpha_qpos(il)
         enddo ! do ixt=1,ntraciso
 #endif       
@@ -7179,5 +7179,5 @@
     ENDDO       ! k
 
-! 14/01/15 AJ delta n'a rien à faire là...                                                 
+! 14/01/15 AJ delta n'a rien a faire la...                                                 
     DO il = 1, ncum                                                  ! cld
 !!      IF (wa(il,i)>0.0 .AND. iflag(il)<=1) &                         ! cld
@@ -7195,5 +7195,5 @@
 
 ! IM cf. FH 
-! 14/01/15 AJ ne correspond pas à ce qui a été codé par JYG et SB           
+! 14/01/15 AJ ne correspond pas a ce qui a ete code par JYG et SB           
                                                          
       IF (iflag_clw==0) THEN                                         ! cld
@@ -7290,5 +7290,5 @@
 
 ! fraction deau condensee dans les melanges convertie en precip : epm
-! et eau condensée précipitée dans masse d'air saturé : l_m*dM_m/dzdz.dzdz
+! et eau condensee precipitee dans masse d'air sature : l_m*dM_m/dzdz.dzdz
   DO j = 1, nl
     DO k = 1, nl
@@ -7576,7 +7576,7 @@
 
         ! On fait varier epmax en fn de la cape
-        ! Il faut donc recalculer ep, et hp qui a déjà été calculé et
-        ! qui en dépend
-        ! Toutes les autres variables fn de ep sont calculées plus bas.
+        ! Il faut donc recalculer ep, et hp qui a deja ete calcule et
+        ! qui en depend
+        ! Toutes les autres variables fn de ep sont calculees plus bas.
 
   include "cvthermo.h"
@@ -7613,5 +7613,5 @@
 
         ! il faut calculer la cape: on fait un calcule simple car tant qu'on ne
-        ! connait pas ep, on ne connait pas les mélanges, ddfts etc... qui sont
+        ! connait pas ep, on ne connait pas les melanges, ddfts etc... qui sont
         ! necessaires au calcul de la cape dans la nouvelle physique
         
Index: /LMDZ6/trunk/libf/phylmdiso/infotrac_phy.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/infotrac_phy.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmdiso/infotrac_phy.F90	(revision 4050)
@@ -51,12 +51,4 @@
   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: niadv ! equivalent dyn / physique
 !$OMP THREADPRIVATE(niadv)
-
-! CRisi: tableaux de fils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqfils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqdesc ! nombres de fils + nombre de tous les petits fils sur toutes les générations
-  INTEGER, SAVE :: nqdesc_tot
-  INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE    :: iqfils
-  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: iqpere
-!$OMP THREADPRIVATE(nqfils,nqdesc,nqdesc_tot,iqfils,iqpere)
 
 ! conv_flg(it)=0 : convection desactivated for tracer number it 
@@ -84,12 +76,6 @@
     INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE ::  iqiso ! donne indice iq en fn de (ixt,phase) 
 !$OMP THREADPRIVATE(iqiso)
-    INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_num ! donne numéro iso entre 1 et niso_possibles en fn de nqtot
-!$OMP THREADPRIVATE(iso_num)
     INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_indnum ! donne numéro iso entre 1 et niso effectif en fn de nqtot
 !$OMP THREADPRIVATE(iso_indnum)
-    INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  zone_num ! donne numéro de la zone de tracage en fn de nqtot
-!$OMP THREADPRIVATE(zone_num)
-    INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  phase_num ! donne numéro de la zone de tracage en fn de nqtot
-!$OMP THREADPRIVATE(phase_num)
     INTEGER, DIMENSION(niso_possibles), SAVE :: indnum_fn_num ! donne indice entre entre 1 et niso en fonction du numéro d isotope entre 1 et niso_possibles
 !$OMP THREADPRIVATE(indnum_fn_num)
@@ -106,9 +92,7 @@
   SUBROUTINE init_infotrac_phy(nqtot_,nqo_,nbtr_,nqtottr_,nqCO2_,tracers_,type_trac_,&
                                niadv_,conv_flg_,pbl_flg_,solsym_,&
-                               nqfils_,nqdesc_,nqdesc_tot_,iqfils_,iqpere_,&
                                ok_isotopes_,ok_iso_verif_,ok_isotrac_,&
                                ok_init_iso_,niso_possibles_,tnat_,&
-                               alpha_ideal_,use_iso_,iqiso_,iso_num_,&
-                               iso_indnum_,zone_num_,phase_num_,&
+                               alpha_ideal_,use_iso_,iqiso_,iso_indnum_,&
                                indnum_fn_num_,index_trac_,&
                                niso_,ntraceurs_zone_,ntraciso_,itr_indice_&
@@ -143,9 +127,4 @@
     CHARACTER(len=*),INTENT(IN) :: solsym_(nbtr_)
     ! Isotopes:
-    INTEGER,INTENT(IN) :: nqfils_(nqtot_)
-    INTEGER,INTENT(IN) :: nqdesc_(nqtot_)
-    INTEGER,INTENT(IN) :: nqdesc_tot_
-    INTEGER,INTENT(IN) :: iqfils_(nqtot_,nqtot_)
-    INTEGER,INTENT(IN) :: iqpere_(nqtot_)
     LOGICAL,INTENT(IN) :: ok_isotopes_
     LOGICAL,INTENT(IN) :: ok_iso_verif_
@@ -157,8 +136,5 @@
     LOGICAL,INTENT(IN) :: use_iso_(niso_possibles_)
     INTEGER,INTENT(IN) :: iqiso_(ntraciso_,nqo_)
-    INTEGER,INTENT(IN) :: iso_num_(nqtot_)
     INTEGER,INTENT(IN) :: iso_indnum_(nqtot_)
-    INTEGER,INTENT(IN) :: zone_num_(nqtot_)
-    INTEGER,INTENT(IN) :: phase_num_(nqtot_)
     INTEGER,INTENT(IN) :: indnum_fn_num_(niso_possibles_)
     INTEGER,INTENT(IN) :: index_trac_(ntraceurs_zone_,niso_)
@@ -216,14 +192,4 @@
     
     IF (ok_isotopes) THEN
-      ALLOCATE(nqfils(nqtot))
-      nqfils(:)=nqfils_(:)
-      ALLOCATE(nqdesc(nqtot))
-      nqdesc(:)=nqdesc_(:)
-      nqdesc_tot=nqdesc_tot_
-      ALLOCATE(iqfils(nqtot,nqtot))
-      iqfils(:,:)=iqfils_(:,:)
-      ALLOCATE(iqpere(nqtot))
-      iqpere(:)=iqpere_(:)
-    
       tnat(:)=tnat_(:)
       alpha_ideal(:)=alpha_ideal_(:)
@@ -232,12 +198,6 @@
       ALLOCATE(iqiso(ntraciso,nqo))
       iqiso(:,:)=iqiso_(:,:)
-      ALLOCATE(iso_num(nqtot))
-      iso_num(:)=iso_num_(:)
       ALLOCATE(iso_indnum(nqtot))
       iso_indnum(:)=iso_indnum_(:)
-      ALLOCATE(zone_num(nqtot))
-      zone_num(:)=zone_num_(:)
-      ALLOCATE(phase_num(nqtot))
-      phase_num(:)=phase_num_(:)
       
       indnum_fn_num(:)=indnum_fn_num_(:)
@@ -255,5 +215,5 @@
         write(*,*) 'itr_indice=',itr_indice
 #ifdef ISOVERIF
-        write(*,*) 'iso_num=',iso_num
+        write(*,*) 'iso_iName=',tracers(:)%iso_iName
 #endif
   
Index: /LMDZ6/trunk/libf/phylmdiso/isotopes_verif_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/isotopes_verif_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmdiso/isotopes_verif_mod.F90	(revision 4050)
@@ -2123,25 +2123,46 @@
        end function iso_verif_tracdD_choix_nostop
 
-       subroutine iso_verif_trac17_q_deltaD(x,err_msg)
-        use isotrac_mod, only: nzone_temp,option_traceurs
-        USE infotrac_phy, ONLY: ntraciso
-       implicit none
-
-        ! inputs
-        real x(ntraciso)
-        character*(*) err_msg
-        ! local 
-        integer iso_verif_tag17_q_deltaD_chns
-
-       if ((option_traceurs.eq.17).or. &
-     &           (option_traceurs.eq.18)) then
-       if (nzone_temp.ge.5) then
-          if (iso_verif_tag17_q_deltaD_chns(x,err_msg).eq.1) then
-                stop
-          endif
-        endif
-        endif !if (option_traceurs.eq.17) then
-
-        end subroutine iso_verif_trac17_q_deltaD
+INTEGER FUNCTION iso_verif_tag17_q_deltaD_chns(x,err_msg) RESULT(res)
+  USE infotrac_phy, ONLY: index_trac, ntraciso
+  USE isotopes_mod, ONLY: iso_HDO, iso_eau, ridicule
+  USE isotrac_mod,  ONLY: nzone_temp, option_traceurs
+  IMPLICIT NONE
+  REAL,             INTENT(IN) :: x(ntraciso)
+  CHARACTER(LEN=*), INTENT(IN) :: err_msg
+  INTEGER :: ieau, ixt, ieau1
+  res = 0
+  IF(ALL([17,18]/=option_traceurs)) RETURN
+  !--- Check whether * deltaD(highest tagging layer) < 200 permil
+  !                  * q <
+  ieau=index_trac(nzone_temp,iso_eau)
+  ixt=index_trac(nzone_temp,iso_HDO)
+  IF(x(ieau)>ridicule) THEN
+    IF(iso_verif_positif_nostop(-200.0-deltaD(x(ixt)/x(ieau)), err_msg//': deltaDt05 trop fort')==1) THEN
+      res=1; write(*,*) 'x=',x
+    END IF
+  END IF
+  IF(iso_verif_positif_nostop(2.0e-3-x(ieau),err_msg//': qt05 trop fort')==1) THEN
+    res=1; write(*,*) 'x=',x
+  END IF
+  !--- Check whether q is small ; then, qt01 < 10%
+  IF(x(iso_eau)<2.0e-3) THEN
+    ieau1= index_trac(1,iso_eau)
+    IF(iso_verif_positif_nostop(0.1-(x(ieau1)/x(iso_eau)),err_msg//': qt01 trop abondant')==1) THEN
+      res=1; write(*,*) 'x=',x
+    END IF
+  END IF
+END FUNCTION iso_verif_tag17_q_deltaD_chns
+
+SUBROUTINE iso_verif_trac17_q_deltaD(x,err_msg)
+  USE isotrac_mod,  ONLY: nzone_temp, option_traceurs
+  USE infotrac_phy, ONLY: ntraciso
+  IMPLICIT NONE
+  REAL,             INTENT(IN) :: x(ntraciso)
+  CHARACTER(LEN=*), INTENT(IN) :: err_msg
+  IF(ALL([17,18]/=option_traceurs)) RETURN
+  IF(nzone_temp>=5) THEN
+    IF(iso_verif_tag17_q_deltaD_chns(x,err_msg)==1) STOP
+  END IF
+END SUBROUTINE iso_verif_trac17_q_deltaD
 
       subroutine iso_verif_traceur(x,err_msg)
@@ -2676,57 +2697,4 @@
         
         end function iso_verif_traceur_jm_nostop
-
-        function iso_verif_tag17_q_deltaD_chns(x,err_msg)
-        USE infotrac_phy, ONLY: index_trac,ntraciso
-        use isotopes_mod, ONLY: iso_HDO,iso_eau,ridicule
-        use isotrac_mod, only: nzone_temp,option_traceurs
-        implicit none
-
-        ! inputs
-        real x(ntraciso)
-        character*(*) err_msg
-        ! output 
-        integer iso_verif_tag17_q_deltaD_chns
-        ! locals
-        !integer iso_verif_positif_nostop
-        !real deltaD
-        integer ieau,ixt,ieau1
-
-        iso_verif_tag17_q_deltaD_chns=0
-
-        if ((option_traceurs.eq.17).or. &
-     &           (option_traceurs.eq.18)) then
-        ! verifier que deltaD du tag de la couche la plus haute <
-        ! 200 permil, et vérifier que son q est inférieur à 
-        ieau=index_trac(nzone_temp,iso_eau)
-        ixt=index_trac(nzone_temp,iso_HDO)
-
-        if (x(ieau).gt.ridicule) then
-          if (iso_verif_positif_nostop(-200.0-deltaD(x(ixt)/x(ieau)), &
-     &           err_msg//': deltaDt05 trop fort').eq.1) then
-                write(*,*) 'x=',x
-                iso_verif_tag17_q_deltaD_chns=1
-          endif !if (iso_verif_positif_nostop(-200.0-deltaD(x(ixt),x(ieau)),
-        endif !if (x(ieau).gt.ridicule) then
-
-        if (iso_verif_positif_nostop(2.0e-3-x(ieau), &
-     &           err_msg//': qt05 trop fort').eq.1) then
-                write(*,*) 'x=',x
-                iso_verif_tag17_q_deltaD_chns=1
-        endif !if (iso_verif_positif_nostop(1.0e-3-x(ieau),
-
-        ! on vérifie que si q est petit, alors qt01 fait moins de 10%
-        if (x(iso_eau).lt.2.0e-3) then
-           ieau1= index_trac(1,iso_eau)
-           if (iso_verif_positif_nostop(0.1-(x(ieau1)/x(iso_eau)), &
-     &            err_msg//': qt01 trop abondant').eq.1) then
-             write(*,*) 'x=',x
-                iso_verif_tag17_q_deltaD_chns=1
-           endif ! if (iso_verif_positif(0.1-(x(ixt)/x(ieau)),
-        endif !if (x(ieau).lt.2.0e-3) then
-
-        endif !if (option_traceurs.eq.17) then
-
-        end function iso_verif_tag17_q_deltaD_chns
 
         subroutine iso_verif_tag17_q_deltaD_vect(x,n,m,err_msg)
Index: /LMDZ6/trunk/libf/phylmdiso/phyetat0.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/phyetat0.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmdiso/phyetat0.F90	(revision 4050)
@@ -45,5 +45,5 @@
   use config_ocean_skin_m, only: activate_ocean_skin
 #ifdef ISO
-  USE infotrac_phy, ONLY: ntraciso,niso,iso_num
+  USE infotrac_phy, ONLY: niso
   USE isotopes_routines_mod, ONLY: phyisoetat0
   USE isotopes_mod, ONLY: iso_eau
Index: /LMDZ6/trunk/libf/phylmdiso/phys_output_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/phys_output_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmdiso/phys_output_mod.F90	(revision 4050)
@@ -35,7 +35,6 @@
     USE iophy 
     USE dimphy
-    USE infotrac_phy, ONLY: nqtot, nqo, niadv, tracers, type_trac, &
+    USE infotrac_phy, ONLY: nqtot, nqo, niadv, tracers, type_trac, maxlen, &
         nqtottr,itr_indice ! C Risi
-    USE strings_mod,  ONLY: maxlen
     USE ioipsl
     USE phys_cal_mod, only : hour, calend
@@ -537,5 +536,4 @@
         write(lunout,*) 'itr_indice=',itr_indice
 !       IF (nqtot>=nqo+1) THEN
-         IF (nqtottr>=1) THEN
 !
             !DO iq=nqo+1,nqtot 
@@ -579,5 +577,4 @@
             tnam = 'cum'//TRIM(tracers(iiq)%name); o_trac_cum(itr)= ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
           ENDDO
-       ENDIF
 
    ENDDO !  iff
Index: /LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90	(revision 4049)
+++ /LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90	(revision 4050)
@@ -123,5 +123,5 @@
 #ifdef ISO
     USE infotrac_phy, ONLY:  &
-        iqiso,iso_num,iso_indnum,zone_num,ok_isotrac, &
+        iqiso,iso_indnum,tracers,ok_isotrac, &
         niso,ntraciso,nqtottr,itr_indice ! ajout C Risi pour isos
      USE isotopes_mod, ONLY: iso_eau,iso_HDO,iso_O18,iso_O17,iso_HTO, &
@@ -141,5 +141,5 @@
         & iso_verif_aberrant_choix,iso_verif_positif, &
         & iso_verif_positif_choix_vect,iso_verif_o18_aberrant_nostop, &
-        & iso_verif_init, &
+        & iso_verif_init,&
         & iso_verif_positif_strict_nostop,iso_verif_O18_aberrant_enc_vect2D
 #endif
@@ -155,5 +155,5 @@
 &       iso_verif_traceur_justmass,iso_verif_traceur_vect, &
 &       iso_verif_trac17_q_deltad,iso_verif_trac_masse_vect, &
-&       iso_verif_tracpos_choix_nostop
+&       iso_verif_tag17_q_deltaD_vect, iso_verif_tracpos_choix_nostop
 #endif
 #endif
@@ -2366,5 +2366,5 @@
 #endif
       if (ixt.gt.niso) then
-      write(*,*) 'izone,iiso=',zone_num(iqiso(ixt,ivap)),iso_indnum(iqiso(ixt,ivap))  
+      write(*,*) 'izone,iiso=',tracers(iqiso(ixt,ivap))%iso_iZone,iso_indnum(iqiso(ixt,ivap))  
       endif
       DO k = 1, klev
