Index: LMDZ6/branches/LMDZ-tracers/libf/dyn3d/vlsplt.F
===================================================================
--- LMDZ6/branches/LMDZ-tracers/libf/dyn3d/vlsplt.F	(revision 3725)
+++ LMDZ6/branches/LMDZ-tracers/libf/dyn3d/vlsplt.F	(revision 3852)
@@ -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, tra
 c
 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget 
@@ -54,5 +54,6 @@
       SAVE temps1,temps2,temps3
       INTEGER iminn,imaxx
-      INTEGER ifils,iq2 ! CRisi
+      INTEGER ichld,iq2 ! CRisi
+      TYPE(tra), POINTER :: tr
 
       REAL qmin,qmax
@@ -61,4 +62,5 @@
       DATA temps1,temps2,temps3/0.,0.,0./
 
+       tr => tracers(iq)
 
         zzpbar = 0.5 * pdt
@@ -83,10 +85,10 @@
       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)
+      if (tr%ndesc > 0) then  
+        do ichld=1,tr%ndesc
+          iq2=tr%idesc(ichld)
           CALL SCOPY(ijp1llm,q(1,1,iq2),1,zq(1,1,iq2),1)
         enddo  
-      endif !if (nqfils(iq).gt.0) then
+      endif !if (tr%ndesc > 0) then
 
 cprint*,'Entree vlx1'
@@ -122,7 +124,7 @@
       ENDDO
       ! CRisi: aussi pour les fils
-      if (nqdesc(iq).gt.0) then
-      do ifils=1,nqdesc(iq)
-        iq2=iqfils(ifils,iq)
+      if(tr%ndesc > 0) then
+      do ichld=1,tr%ndesc
+        iq2=tr%idesc(ichld)
         DO l=1,llm
          DO ij=1,ip1jmp1
@@ -133,11 +135,11 @@
          ENDDO
         ENDDO
-      enddo !do ifils=1,nqdesc(iq)    
-      endif ! if (nqdesc(iq).gt.0) then    
+      enddo !do ichld=1,tr%ndesc
+      endif ! if (tr%ndesc > 0)    
 
       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, tra ! CRisi
 
 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget 
@@ -179,5 +181,6 @@
       ! CRisi
       REAL masseq(ip1jmp1,llm,nqtot),Ratio(ip1jmp1,llm,nqtot)
-      INTEGER ifils,iq2 ! CRisi
+      INTEGER ichld,iq2 ! CRisi
+      TYPE(tra), POINTER :: tr
 
       Logical extremum,first,testcpu
@@ -200,4 +203,6 @@
          first=.false.
       ENDIF
+
+      tr => tracers(iq)
 
 c   calcul de la pente a droite et a gauche de la maille
@@ -450,7 +455,7 @@
       !write(*,*) 'vlsplt 326: iq,nqfils(iq)=',iq,nqfils(iq) 
       
-      if (nqdesc(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
+      if (tr%ndesc > 0) then  
+       do ichld=1,tr%ndesc
+         iq2=tr%idesc(ichld)
          DO l=1,llm
           DO ij=iip2,ip1jm
@@ -460,10 +465,10 @@
           enddo   
          enddo
-        enddo !do ifils=1,nqdesc(iq)
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
+        enddo !do ichld=1,tr%ndesc
+        do ichld=1,tr%nchld
+         iq2=tr%idesc(ichld)
          call vlx(Ratio,pente_max,masseq,u_mq,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo !do ichld=1,tr%nchld
+      endif !if (tr%nchld > 0) then
 ! end CRisi
 
@@ -489,7 +494,7 @@
       ! 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)  
+      if (tr%ndesc > 0) then  
+       do ichld=1,tr%ndesc
+         iq2=tr%idesc(ichld)  
          DO l=1,llm
           DO ij=iip2+1,ip1jm
@@ -500,6 +505,6 @@
           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 ichld=1,tr%ndesc
+      endif !if (tr%ndesc > 0) then
 
 c     CALL SCOPY((jjm-1)*llm,q(iip1+iip1,1),iip1,q(iip2,1),iip1)
@@ -510,5 +515,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, tra ! CRisi
 c
 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget 
@@ -562,6 +567,6 @@
 
       REAL masseq(ip1jmp1,llm,nqtot),Ratio(ip1jmp1,llm,nqtot) ! CRisi
-      INTEGER ifils,iq2 ! CRisi
-
+      INTEGER ichld,iq2 ! CRisi
+      TYPE(tra), POINTER :: tr
 c
 c
@@ -590,4 +595,5 @@
       ENDIF
 
+      tr => tracers(iq)
 c
 cPRINT*,'CALCUL EN LATITUDE'
@@ -770,7 +776,7 @@
       !write(*,*) 'vly 689: iq,nqfils(iq)=',iq,nqfils(iq) 
    
-      if (nqfils(iq).gt.0) then  
-       do ifils=1,nqdesc(iq)
-         iq2=iqfils(ifils,iq)
+      if (tr%ndesc > 0) then  
+       do ichld=1,tr%ndesc
+         iq2=tr%idesc(ichld)
          DO l=1,llm
          DO ij=1,ip1jmp1
@@ -781,11 +787,11 @@
           enddo   
          enddo
-        enddo !do ifils=1,nqdesc(iq)
-
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)
+        enddo !do ichld=1,tr%ndesc
+
+        do ichld=1,tr%nchld
+         iq2=tr%idesc(ichld)
          call vly(Ratio,pente_max,masseq,qbyv,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo !do ichld=1,tr%nchld
+      endif !if (tr%ndesc > 0)
 
       DO l=1,llm
@@ -855,7 +861,7 @@
   
 ! 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)  
+      if (tr%ndesc > 0) then  
+       do ichld=1,tr%ndesc
+         iq2=tr%idesc(ichld)  
          DO l=1,llm
           DO ij=1,ip1jmp1
@@ -863,6 +869,6 @@
           enddo
          enddo
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo !do ichld=1,tr%ndesc
+      endif !if (tr%ndesc > 0)
 
       !write(*,*) 'vly 853: sortie'
@@ -871,5 +877,5 @@
       END
       RECURSIVE SUBROUTINE vlz(q,pente_max,masse,w,iq)
-      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 
+      USE infotrac, ONLY : nqtot, tracers, tra ! CRisi 
 c
 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget 
@@ -907,5 +913,6 @@
 
       REAL masseq(ip1jmp1,llm,nqtot),Ratio(ip1jmp1,llm,nqtot) ! CRisi
-      INTEGER ifils,iq2 ! CRisi
+      INTEGER ichld,iq2 ! CRisi
+      TYPE(tra), POINTER :: tr
 
       LOGICAL testcpu
@@ -923,4 +930,6 @@
 
       !write(*,*) 'vlz 923: entree'
+
+      tr => tracers(iq)
 
 #ifdef BIDON
@@ -992,7 +1001,7 @@
 ! 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)
+      if (tr%ndesc > 0) then  
+       do ichld=1,tr%ndesc
+         iq2=tr%idesc(ichld)
          DO l=1,llm
           DO ij=1,ip1jmp1
@@ -1001,11 +1010,11 @@
           enddo   
          enddo
-        enddo !do ifils=1,nqdesc(iq)
+        enddo !do ichld=1,tr%ndesc
         
-        do ifils=1,nqfils(iq)
-         iq2=iqfils(ifils,iq)         
+        do ichld=1,tr%nchld
+         iq2=tr%idesc(ichld)         
          call vlz(Ratio,pente_max,masseq,wq,iq2)
-        enddo !do ifils=1,nqfils(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo !do ichld=1,tr%nchld
+      endif !if (tr%ndesc > 0)
 ! end CRisi  
 
@@ -1020,7 +1029,7 @@
 
 ! 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)  
+      if (tr%ndesc > 0) then  
+       do ichld=1,tr%ndesc
+         iq2=tr%idesc(ichld)
          DO l=1,llm
           DO ij=1,ip1jmp1
@@ -1028,6 +1037,6 @@
           enddo
          enddo
-        enddo !do ifils=1,nqdesc(iq)
-      endif !if (nqfils(iq).gt.0) then
+        enddo !do ichld=1,tr%ndesc
+      endif !if (tr%ndesc > 0)
       !write(*,*) 'vlsplt 1032'
 
