Index: LMDZ5/trunk/libf/dyn3d/inigrads.F
===================================================================
--- LMDZ5/trunk/libf/dyn3d/inigrads.F	(revision 1884)
+++ LMDZ5/trunk/libf/dyn3d/inigrads.F	(revision 1885)
@@ -13,5 +13,6 @@
       real xmin,xmax,ymin,ymax
 
-      character file*10,titlel*40
+      character(len=*),intent(in) :: file
+      character(len=*),intent(in) :: titlel
 
 #include "gradsdef.h"
Index: LMDZ5/trunk/libf/dyn3dmem/bilan_dyn_loc.F
===================================================================
--- LMDZ5/trunk/libf/dyn3dmem/bilan_dyn_loc.F	(revision 1884)
+++ LMDZ5/trunk/libf/dyn3dmem/bilan_dyn_loc.F	(revision 1885)
@@ -444,7 +444,7 @@
 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
-        masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)+masse(:,jjb:jje,:)
-        flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:)
-     .                         +flux_u(:,jjb:jje,:)
+        masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)+masse(:,jjb:jje,l)
+        flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)
+     .                         +flux_u(:,jjb:jje,l)
       ENDDO
 !$OMP END DO NOWAIT
@@ -454,6 +454,6 @@
 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
-       flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:)
-     .                          +flux_v(:,jjb:jje,:)
+       flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)
+     .                          +flux_v(:,jjb:jje,l)
       ENDDO
 !$OMP END DO NOWAIT
@@ -465,6 +465,6 @@
 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO l=1,llm
-          Q_cum(:,jjb:jje,:,iQ)=Q_cum(:,jjb:jje,:,iQ)
-     .                       +Q(:,jjb:jje,:,iQ)*masse(:,jjb:jje,:)
+          Q_cum(:,jjb:jje,l,iQ)=Q_cum(:,jjb:jje,l,iQ)
+     .                       +Q(:,jjb:jje,l,iQ)*masse(:,jjb:jje,l)
         ENDDO
 !$OMP END DO NOWAIT
Index: LMDZ5/trunk/libf/dyn3dmem/inigrads.F
===================================================================
--- LMDZ5/trunk/libf/dyn3dmem/inigrads.F	(revision 1884)
+++ LMDZ5/trunk/libf/dyn3dmem/inigrads.F	(revision 1885)
@@ -13,5 +13,6 @@
       real xmin,xmax,ymin,ymax
 
-      character file*10,titlel*40
+      character(len=*),intent(in) :: file
+      character(len=*),intent(in) :: titlel
 
 #include "gradsdef.h"
Index: LMDZ5/trunk/libf/dyn3dpar/bilan_dyn_p.F
===================================================================
--- LMDZ5/trunk/libf/dyn3dpar/bilan_dyn_p.F	(revision 1884)
+++ LMDZ5/trunk/libf/dyn3dpar/bilan_dyn_p.F	(revision 1885)
@@ -16,5 +16,5 @@
       USE mod_hallo
       use misc_mod
-      use write_field
+      use write_field_p
       IMPLICIT NONE
 
@@ -57,63 +57,57 @@
 c   =======
 
-      integer icum,ncum
-      logical first
-      real zz,zqy,zfactv(jjm,llm)
-
-      integer nQ
-      parameter (nQ=7)
+      integer,save :: icum,ncum
+!$OMP THREADPRIVATE(icum,ncum)
+      logical,SAVE :: first=.true.
+!$OMP THREADPRIVATE(first) 
+
+      real zz,zqy
+      real,save :: zfactv(jjm,llm)
+
+      integer,parameter :: nQ=7
 
 
 cym      character*6 nom(nQ)
 cym      character*6 unites(nQ)
-      character*6,save :: nom(nQ)
-      character*6,save :: unites(nQ)
-
-      character*10 file
+      character(len=6),save :: nom(nQ)
+      character(len=6),save :: unites(nQ)
+
+      character(len=10) file
       integer ifile
       parameter (ifile=4)
 
-      integer itemp,igeop,iecin,iang,iu,iovap,iun
-      integer i_sortie
-
-      save first,icum,ncum
-      save itemp,igeop,iecin,iang,iu,iovap,iun
-      save i_sortie
-
-      real time
-      integer itau
-      save time,itau
-      data time,itau/0.,0/
-
-      data first/.true./
-      data itemp,igeop,iecin,iang,iu,iovap,iun/1,2,3,4,5,6,7/
-      data i_sortie/1/
+      integer,PARAMETER :: itemp=1,igeop=2,iecin=3,iang=4,iu=5
+      INTEGER,PARAMETER :: iovap=6,iun=7
+      integer,PARAMETER :: i_sortie=1
+
+      real,SAVE :: time=0.
+      integer,SAVE :: itau=0.
+!$OMP THREADPRIVATE(time,itau)
 
       real ww
 
 c   variables dynamiques intermédiaires
-      REAL vcont(iip1,jjm,llm),ucont(iip1,jjp1,llm)
-      REAL ang(iip1,jjp1,llm),unat(iip1,jjp1,llm)
-      REAL massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm)
-      REAL vorpot(iip1,jjm,llm)
-      REAL w(iip1,jjp1,llm),ecin(iip1,jjp1,llm),convm(iip1,jjp1,llm)
-      REAL bern(iip1,jjp1,llm)
+      REAL,save :: vcont(iip1,jjm,llm),ucont(iip1,jjp1,llm)
+      REAL,save :: ang(iip1,jjp1,llm),unat(iip1,jjp1,llm)
+      REAL,save :: massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm)
+      REAL,save :: vorpot(iip1,jjm,llm)
+      REAL,save :: w(iip1,jjp1,llm),ecin(iip1,jjp1,llm)
+      REAL,save ::convm(iip1,jjp1,llm)
+      REAL,save :: bern(iip1,jjp1,llm)
 
 c   champ contenant les scalaires advectés.
-      real Q(iip1,jjp1,llm,nQ)
+      real,save :: Q(iip1,jjp1,llm,nQ)
     
 c   champs cumulés
-      real ps_cum(iip1,jjp1)
-      real masse_cum(iip1,jjp1,llm)
-      real flux_u_cum(iip1,jjp1,llm)
-      real flux_v_cum(iip1,jjm,llm)
-      real Q_cum(iip1,jjp1,llm,nQ)
-      real flux_uQ_cum(iip1,jjp1,llm,nQ)
-      real flux_vQ_cum(iip1,jjm,llm,nQ)
-      real flux_wQ_cum(iip1,jjp1,llm,nQ)
-      real dQ(iip1,jjp1,llm,nQ)
-
-      save ps_cum,masse_cum,flux_u_cum,flux_v_cum
-      save Q_cum,flux_uQ_cum,flux_vQ_cum
+      real,save :: ps_cum(iip1,jjp1)
+      real,save :: masse_cum(iip1,jjp1,llm)
+      real,save :: flux_u_cum(iip1,jjp1,llm)
+      real,save :: flux_v_cum(iip1,jjm,llm)
+      real,save :: Q_cum(iip1,jjp1,llm,nQ)
+      real,save :: flux_uQ_cum(iip1,jjp1,llm,nQ)
+      real,save :: flux_vQ_cum(iip1,jjm,llm,nQ)
+      real,save :: flux_wQ_cum(iip1,jjp1,llm,nQ)
+      real,save :: dQ(iip1,jjp1,llm,nQ)
+
 
 c   champs de tansport en moyenne zonale
@@ -128,14 +122,14 @@
       character*10,save :: zunites(ntr,nQ)
 
-      integer iave,itot,immc,itrs,istn
-      data iave,itot,immc,itrs,istn/1,2,3,4,5/
+      INTEGER,PARAMETER :: iave=1,itot=2,immc=3,itrs=4,istn=5
+
       character*3 ctrs(ntr)
       data ctrs/'  ','TOT','MMC','TRS','STN'/
 
-      real zvQ(jjm,llm,ntr,nQ),zvQtmp(jjm,llm)
-      real zavQ(jjm,ntr,nQ),psiQ(jjm,llm+1,nQ)
-      real zmasse(jjm,llm),zamasse(jjm)
-
-      real zv(jjm,llm),psi(jjm,llm+1)
+      real,save :: zvQ(jjm,llm,ntr,nQ),zvQtmp(jjm,llm)
+      real,save :: zavQ(jjm,ntr,nQ),psiQ(jjm,llm+1,nQ)
+      real,save :: zmasse(jjm,llm),zamasse(jjm)
+
+      real,save :: zv(jjm,llm),psi(jjm,llm+1)
 
       integer i,j,l,iQ
@@ -151,5 +145,5 @@
       save fileid
 
-      integer ndex3d(jjm*llm)
+      integer,save :: ndex3d(jjm*llm)
 
 C   Variables locales
@@ -162,7 +156,8 @@
       integer zan, dayref
 C
-      real rlong(jjm),rlatg(jjm)
+      real,save :: rlong(jjm),rlatg(jjm)
       integer :: jjb,jje,jjn,ijb,ije
-      type(Request) :: Req
+      type(Request),SAVE :: Req
+!$OMP THREADPRIVATE(Req)
 
 ! definition du domaine d'ecriture pour le rebuild
@@ -182,5 +177,4 @@
 c   Initialisation
 c=====================================================================
-      ndex3d=0
       if (adjust) return
       
@@ -190,4 +184,5 @@
       if (first) then
 
+        ndex3d=0
 
         icum=0
@@ -202,16 +197,19 @@
            WRITE(lunout,*)'dt_cum=',dt_cum
            stop
+        else
+          write(lunout,*) "bilan_dyn_p: ncum=",ncum
         endif
 
-        if (i_sortie.eq.1) then
-	 file='dynzon'
-         if (mpi_rank==0) then
-	 call inigrads(ifile,1
-     s  ,0.,180./pi,0.,0.,jjm,rlatv,-90.,90.,180./pi
-     s  ,llm,presnivs,1.
-     s  ,dt_cum,file,'dyn_zon ')
-         endif
-        endif
-
+!        if (i_sortie.eq.1) then
+!	 file='dynzon'
+!         if (mpi_rank==0) then
+!	 call inigrads(ifile,1
+!     s  ,0.,180./pi,0.,0.,jjm,rlatv,-90.,90.,180./pi
+!     s  ,llm,presnivs,1.
+!     s  ,dt_cum,file,'dyn_zon ')
+!         endif
+!        endif
+
+!$OMP MASTER
         nom(itemp)='T'
         nom(igeop)='gz'
@@ -339,5 +337,6 @@
                CALL histend(fileid)
 
-
+!$OMP END MASTER
+!$OMP BARRIER
       endif
 
@@ -351,10 +350,12 @@
     
 c   énergie cinétique
-      ucont(:,jjb:jje,:)=0
+!      ucont(:,jjb:jje,:)=0
 
       call Register_Hallo(ucov,ip1jmp1,llm,1,1,1,1,Req)
       call Register_Hallo(vcov,ip1jm,llm,1,1,1,1,Req)
       call SendRequest(Req)
+c$OMP BARRIER
       call WaitRequest(Req)
+c$OMP BARRIER
 
       CALL covcont_p(llm,ucov,vcov,ucont,vcont)
@@ -362,17 +363,22 @@
 
 c   moment cinétique
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       do l=1,llm
          ang(:,jjb:jje,l)=ucov(:,jjb:jje,l)+constang(:,jjb:jje)
          unat(:,jjb:jje,l)=ucont(:,jjb:jje,l)*cu(:,jjb:jje)
       enddo
-
-      Q(:,jjb:jje,:,itemp)=teta(:,jjb:jje,:)*pk(:,jjb:jje,:)/cpp
-      Q(:,jjb:jje,:,igeop)=phi(:,jjb:jje,:)
-      Q(:,jjb:jje,:,iecin)=ecin(:,jjb:jje,:)
-      Q(:,jjb:jje,:,iang)=ang(:,jjb:jje,:)
-      Q(:,jjb:jje,:,iu)=unat(:,jjb:jje,:)
-      Q(:,jjb:jje,:,iovap)=trac(:,jjb:jje,:,1)
-      Q(:,jjb:jje,:,iun)=1.
-
+!$OMP END DO
+
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,llm
+        Q(:,jjb:jje,l,itemp)=teta(:,jjb:jje,l)*pk(:,jjb:jje,l)/cpp
+        Q(:,jjb:jje,l,igeop)=phi(:,jjb:jje,l)
+        Q(:,jjb:jje,l,iecin)=ecin(:,jjb:jje,l)
+        Q(:,jjb:jje,l,iang)=ang(:,jjb:jje,l)
+        Q(:,jjb:jje,l,iu)=unat(:,jjb:jje,l)
+        Q(:,jjb:jje,l,iovap)=trac(:,jjb:jje,l,1)
+        Q(:,jjb:jje,l,iun)=1.
+      ENDDO
+!$OMP END DO NOWAIT
 
 c=====================================================================
@@ -384,12 +390,20 @@
          jje=jj_end
 
+!$OMP MASTER
          ps_cum(:,jjb:jje)=0.
-         masse_cum(:,jjb:jje,:)=0.
-         flux_u_cum(:,jjb:jje,:)=0.
-         Q_cum(:,jjb:jje,:,:)=0.
-         flux_uQ_cum(:,jjb:jje,:,:)=0.
-         if (pole_sud) jje=jj_end-1
-         flux_v_cum(:,jjb:jje,:)=0.
-         flux_vQ_cum(:,jjb:jje,:,:)=0.
+!$OMP END MASTER
+!$OMP BARRIER
+
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm
+          masse_cum(:,jjb:jje,l)=0.
+          flux_u_cum(:,jjb:jje,l)=0.
+          Q_cum(:,jjb:jje,l,:)=0.
+          flux_uQ_cum(:,jjb:jje,l,:)=0.
+          if (pole_sud) jje=jj_end-1
+          flux_v_cum(:,jjb:jje,l)=0.
+          flux_vQ_cum(:,jjb:jje,l,:)=0.
+        ENDDO
+!$OMP END DO NOWAIT
       endif
 
@@ -402,18 +416,36 @@
       jje=jj_end
 
+!$OMP MASTER
       ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)+ps(:,jjb:jje)
-      masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)+masse(:,jjb:jje,:)
-      flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:)
-     .                       +flux_u(:,jjb:jje,:)
+!$OMP END MASTER
+!$OMP BARRIER
+
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,llm
+        masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)+masse(:,jjb:jje,l)
+        flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)
+     .                         +flux_u(:,jjb:jje,l)
+      ENDDO
+!$OMP END DO NOWAIT
+      
       if (pole_sud) jje=jj_end-1
-      flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:)
-     .                         +flux_v(:,jjb:jje,:)
-
-      jjb=jj_begin
-      jje=jj_end
-
-      do iQ=1,nQ
-        Q_cum(:,jjb:jje,:,iQ)=Q_cum(:,jjb:jje,:,iQ)
-     .                       +Q(:,jjb:jje,:,iQ)*masse(:,jjb:jje,:)
+
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,llm
+       flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)
+     .                          +flux_v(:,jjb:jje,l)
+      ENDDO
+!$OMP END DO NOWAIT
+      
+      jjb=jj_begin
+      jje=jj_end
+
+      do iQ=1,nQ
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm
+          Q_cum(:,jjb:jje,l,iQ)=Q_cum(:,jjb:jje,l,iQ)
+     .                       +Q(:,jjb:jje,l,iQ)*masse(:,jjb:jje,l)
+        ENDDO
+!$OMP END DO NOWAIT
       enddo
 
@@ -425,4 +457,5 @@
 c   -----------------
       do iQ=1,nQ
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          do l=1,llm
             do j=jjb,jje
@@ -434,4 +467,5 @@
             enddo
          enddo
+!$OMP END DO NOWAIT
       enddo
 
@@ -442,6 +476,8 @@
       enddo
       call SendRequest(Req)
+!$OMP BARRIER      
       call WaitRequest(Req)
-      
+!$OMP BARRIER
+
       jjb=jj_begin
       jje=jj_end
@@ -449,4 +485,5 @@
       
       do iQ=1,nQ
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          do l=1,llm
             do j=jjb,jje
@@ -457,4 +494,5 @@
             enddo
          enddo
+!$OMP END DO NOWAIT
       enddo
 
@@ -467,5 +505,7 @@
       call Register_Hallo(flux_vQ_cum,ip1jm,llm,2,2,2,2,Req)
       call SendRequest(Req)
+!$OMP BARRIER      
       call WaitRequest(Req)
+c$OMP BARRIER
 
       call  convflu_p(flux_uQ_cum,flux_vQ_cum,llm*nQ,dQ)
@@ -475,22 +515,37 @@
       call Register_Hallo(flux_v_cum,ip1jm,llm,2,2,2,2,Req)
       call SendRequest(Req)
+!$OMP BARRIER      
       call WaitRequest(Req)
+c$OMP BARRIER
 
       call convmas_p(flux_u_cum,flux_v_cum,convm)
       CALL vitvert_p(convm,w)
-
-      jjb=jj_begin
-      jje=jj_end
-
-      do iQ=1,nQ
-         do l=1,llm-1
-            do j=jjb,jje
-               do i=1,iip1
-                  ww=-0.5*w(i,j,l+1)*(Q(i,j,l,iQ)+Q(i,j,l+1,iQ))
-                  dQ(i,j,l  ,iQ)=dQ(i,j,l  ,iQ)-ww
-                  dQ(i,j,l+1,iQ)=dQ(i,j,l+1,iQ)+ww
-               enddo
-            enddo
-         enddo
+!$OMP BARRIER      
+
+      jjb=jj_begin
+      jje=jj_end
+
+      do iQ=1,nQ
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+         do l=1,llm
+            IF (l<llm) THEN
+              do j=jjb,jje
+                 do i=1,iip1
+                    ww=-0.5*w(i,j,l+1)*(Q(i,j,l,iQ)+Q(i,j,l+1,iQ))
+                    dQ(i,j,l  ,iQ)=dQ(i,j,l  ,iQ)-ww
+                    dQ(i,j,l+1,iQ)=dQ(i,j,l+1,iQ)+ww
+                 enddo
+              enddo
+            ENDIF
+            IF (l>2) THEN
+              do j=jjb,jje
+                do i=1,iip1
+                  ww=-0.5*w(i,j,l)*(Q(i,j,l-1,iQ)+Q(i,j,l,iQ))
+                  dQ(i,j,l,iQ)=dQ(i,j,l,iQ)+ww
+                enddo
+              enddo
+            ENDIF
+         enddo
+!$OMP ENDDO NOWAIT 
       enddo
       IF (prt_level > 5)
@@ -505,23 +560,40 @@
      . WRITE(lunout,*)'Pas d ecriture'
 
+      jjb=jj_begin
+      jje=jj_end
+
 c   Normalisation
       do iQ=1,nQ
-         Q_cum(:,jjb:jje,:,iQ)=Q_cum(:,jjb:jje,:,iQ)
-     .	                      /masse_cum(:,jjb:jje,:)
-      enddo
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        do l=1,llm
+          Q_cum(:,jjb:jje,l,iQ)=Q_cum(:,jjb:jje,l,iQ) 
+     .	                        /masse_cum(:,jjb:jje,l)
+        enddo
+!$OMP ENDDO NOWAIT 
+      enddo
+
       zz=1./REAL(ncum)
 
-      jjb=jj_begin
-      jje=jj_end
-
+!$OMP MASTER
       ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)*zz
-      masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)*zz
-      flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:)*zz
-      flux_uQ_cum(:,jjb:jje,:,:)=flux_uQ_cum(:,jjb:jje,:,:)*zz
-      dQ(:,jjb:jje,:,:)=dQ(:,jjb:jje,:,:)*zz
+!$OMP END MASTER
+
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,llm
+        masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)*zz
+        flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)*zz
+        flux_uQ_cum(:,jjb:jje,l,:)=flux_uQ_cum(:,jjb:jje,l,:)*zz
+        dQ(:,jjb:jje,l,:)=dQ(:,jjb:jje,l,:)*zz
+      ENDDO
+!$OMP ENDDO NOWAIT 
+         
       
       IF (pole_sud) jje=jj_end-1
-      flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:)*zz
-      flux_vQ_cum(:,jjb:jje,:,:)=flux_vQ_cum(:,jjb:jje,:,:)*zz
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,llm
+        flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)*zz
+        flux_vQ_cum(:,jjb:jje,l,:)=flux_vQ_cum(:,jjb:jje,l,:)*zz
+      ENDDO
+!$OMP ENDDO
 
       jjb=jj_begin
@@ -532,5 +604,9 @@
 c   division de dQ par la masse pour revenir aux bonnes grandeurs
       do iQ=1,nQ
-         dQ(:,jjb:jje,:,iQ)=dQ(:,jjb:jje,:,iQ)/masse_cum(:,jjb:jje,:)
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm
+           dQ(:,jjb:jje,l,iQ)=dQ(:,jjb:jje,l,iQ)/masse_cum(:,jjb:jje,l)
+        ENDDO
+!$OMP ENDDO NOWAIT 
       enddo
  
@@ -545,6 +621,10 @@
       if (pole_sud) jje=jj_end-1
 
-      zv(jjb:jje,:)=0.
-      zmasse(jjb:jje,:)=0.
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm
+          zv(jjb:jje,l)=0.
+          zmasse(jjb:jje,l)=0.
+        ENDDO
+!$OMP ENDDO NOWAIT 
 
       call Register_Hallo(masse_cum,ip1jmp1,llm,1,1,1,1,Req)
@@ -554,5 +634,7 @@
 
       call SendRequest(Req)
+!$OMP BARRIER
       call WaitRequest(Req)
+c$OMP BARRIER
 
       call massbar_p(masse_cum,massebx,masseby)
@@ -562,4 +644,5 @@
       if (pole_sud) jje=jj_end-1
       
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       do l=1,llm
          do j=jjb,jje
@@ -571,4 +654,5 @@
          enddo
       enddo
+!$OMP ENDDO 
 
 c     print*,'3OK'
@@ -609,6 +693,7 @@
       psiQ=0.
       do iQ=1,nQ
-         zvQtmp=0.
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          do l=1,llm
+            zvQtmp(:,l)=0.
             do j=jjb,jje
 c              print*,'j,l,iQ=',j,l,iQ
@@ -633,5 +718,8 @@
             enddo
          enddo
+!$OMP ENDDO NOWAIT 
 c   fonction de courant meridienne pour la quantite Q
+!$OMP BARRIER
+!$OMP MASTER
          do l=llm,1,-1
             do j=jjb,jje
@@ -639,7 +727,11 @@
             enddo
          enddo
-      enddo
+!$OMP END MASTER
+!$OMP BARRIER
+      enddo ! of do iQ=1,nQ
 
 c   fonction de courant pour la circulation meridienne moyenne
+!$OMP BARRIER
+!$OMP MASTER
       psi(jjb:jje,:)=0.
       do l=llm,1,-1
@@ -649,7 +741,10 @@
          enddo
       enddo
+!$OMP END MASTER
+!$OMP BARRIER
 
 c     print*,'4OK'
 c   sorties proprement dites
+!$OMP MASTER      
       if (i_sortie.eq.1) then
       jjb=jj_begin
@@ -669,5 +764,4 @@
      s                  ,jjn*llm,ndex3d)
       enddo
-
       call histwrite(fileid,'masse',itau,zmasse(jjb:jje,1:llm)
      s   ,jjn*llm,ndex3d)
@@ -703,5 +797,6 @@
          enddo
       enddo
-
+!$OMP END MASTER
+!$OMP BARRIER
 c     on doit pouvoir tracer systematiquement la fonction de courant.
 
@@ -712,5 +807,4 @@
 c/////////////////////////////////////////////////////////////////////
 c=====================================================================
-
       return
       end
Index: LMDZ5/trunk/libf/dyn3dpar/inigrads.F
===================================================================
--- LMDZ5/trunk/libf/dyn3dpar/inigrads.F	(revision 1884)
+++ LMDZ5/trunk/libf/dyn3dpar/inigrads.F	(revision 1885)
@@ -13,5 +13,6 @@
       real xmin,xmax,ymin,ymax
 
-      character file*10,titlel*40
+      character(len=*),intent(in) :: file
+      character(len=*),intent(in) :: titlel
 
 #include "gradsdef.h"
Index: LMDZ5/trunk/libf/dyn3dpar/leapfrog_p.F
===================================================================
--- LMDZ5/trunk/libf/dyn3dpar/leapfrog_p.F	(revision 1884)
+++ LMDZ5/trunk/libf/dyn3dpar/leapfrog_p.F	(revision 1885)
@@ -1344,5 +1344,5 @@
 c$OMP BARRIER
         RETURN
-      ENDIF
+      ENDIF ! of IF (itau==itaumax)
       
       IF ( .NOT.purmats ) THEN
@@ -1396,17 +1396,6 @@
 #ifdef CPP_IOIPSL
              IF (ok_dynzon) THEN 
-             call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest)
-             call SendRequest(TestRequest)
-c$OMP BARRIER
-              call WaitRequest(TestRequest)
-c$OMP BARRIER
-c$OMP MASTER
-!              CALL writedynav_p(histaveid, itau,vcov ,
-!     ,                          ucov,teta,pk,phi,q,masse,ps,phis)
-
-c ATTENTION!!! bilan_dyn_p ne marche probablement pas avec OpenMP
               CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 
      ,             ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 
-c$OMP END MASTER
               ENDIF !ok_dynzon
 #endif
@@ -1602,16 +1591,6 @@
 #ifdef CPP_IOIPSL
                IF (ok_dynzon) THEN
-c$OMP BARRIER
-               call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest)
-               call SendRequest(TestRequest)
-c$OMP BARRIER
-               call WaitRequest(TestRequest)
-c$OMP BARRIER
-c$OMP MASTER
-!               CALL writedynav_p(histaveid, itau,vcov ,
-!     ,                          ucov,teta,pk,phi,q,masse,ps,phis)
                CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav,
      ,           ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
-c$OMP END MASTER
                END IF !ok_dynzon
 #endif
