Index: LMDZ4/branches/V3_test/libf/dyn3dpar/addfi_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/addfi_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/addfi_p.F	(revision 709)
@@ -82,4 +82,5 @@
       ije=ij_end
       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO k = 1,llm
          DO j = ijb,ije
@@ -87,6 +88,8 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
       if (pole_nord) then
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO  k    = 1, llm
          DO  ij   = 1, iim
@@ -99,7 +102,9 @@
          ENDDO
        ENDDO
+c$OMP END DO NOWAIT
       endif
 
       if (pole_sud) then
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO  k    = 1, llm
          DO  ij   = 1, iim
@@ -112,4 +117,5 @@
          ENDDO
        ENDDO
+c$OMP END DO NOWAIT
       endif
 c
@@ -119,5 +125,6 @@
       if (pole_nord) ijb=ij_begin+iip1
       if (pole_sud)  ije=ij_end-iip1
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO k = 1,llm
          DO j = ijb,ije
@@ -125,7 +132,9 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
       if (pole_nord) ijb=ij_begin
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO k = 1,llm
          DO j = ijb,ije
@@ -133,14 +142,16 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
 c
       if (pole_sud)  ije=ij_end
-
+c$OMP MASTER
       DO j = ijb,ije
          pps(j) = pps(j) + pdpfi(j) * pdt
       ENDDO
- 
+c$OMP END MASTER
  
       DO iq = 1, 2
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          DO k = 1,llm
             DO j = ijb,ije
@@ -149,8 +160,9 @@
             ENDDO
          ENDDO
-      ENDDO
-
+c$OMP END DO NOWAIT
+      ENDDO
 
       DO iq = 3, nq
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          DO k = 1,llm
             DO j = ijb,ije
@@ -159,6 +171,8 @@
             ENDDO
          ENDDO
-      ENDDO
-
+c$OMP END DO NOWAIT
+      ENDDO
+
+c$OMP MASTER
       if (pole_nord) then
       
@@ -188,7 +202,9 @@
       
       endif
+c$OMP END MASTER
 
       if (pole_nord) then
         DO iq = 1, nq
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO  k    = 1, llm
             DO  ij   = 1, iim
@@ -201,4 +217,5 @@
             ENDDO
           ENDDO
+c$OMP END DO NOWAIT	  
         ENDDO
       endif
@@ -206,4 +223,5 @@
       if (pole_sud) then
         DO iq = 1, nq
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO  k    = 1, llm
             DO  ij   = 1, iim
@@ -216,4 +234,5 @@
             ENDDO
           ENDDO
+c$OMP END DO NOWAIT	  
         ENDDO
       endif
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/advtrac_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/advtrac_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/advtrac_p.F	(revision 709)
@@ -4,5 +4,5 @@
 c
 c
-#ifdef INCA_CH4
+#ifdef INCA
       SUBROUTINE advtrac_p(pbaru,pbarv ,
      *                   p,  masse,q,iapptrac,teta,
@@ -25,4 +25,5 @@
 c
       USE parallel
+      USE Write_Field_p
       USE Bands
       USE mod_hallo
@@ -56,5 +57,5 @@
       REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
       REAL pk(ip1jmp1,llm)
-#ifdef INCA_CH4
+#ifdef INCA
 cym      INTEGER            :: hadv_flg(nq)
          INTEGER            :: hadv_flg(nqmx)
@@ -70,5 +71,5 @@
       REAL pbaruc(ip1jmp1,llm),pbarvc(ip1jm,llm)
       REAL massem(ip1jmp1,llm),zdp(ip1jmp1)
-      REAL pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm) 
+      REAL,SAVE::pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm) 
       REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu
       real cpuadv(nqmx)
@@ -78,7 +79,7 @@
       INTEGER ij,l,iq,iiq
       REAL zdpmin, zdpmax
-      EXTERNAL  minmax
       SAVE iadvtr, massem, pbaruc, pbarvc
       DATA iadvtr/0/
+c$OMP THREADPRIVATE(iadvtr)
 c----------------------------------------------------------
 c     Rajouts pour PPM
@@ -98,7 +99,7 @@
       integer ijb,ije,ijb_u,ijb_v,ije_u,ije_v,j
       type(Request) :: Request_vanleer
-      REAL p_tmp( ip1jmp1,llmp1 )
-      REAL teta_tmp(ip1jmp1,llm)
-      REAL pk_tmp(ip1jmp1,llm)
+      REAL,SAVE :: p_tmp( ip1jmp1,llmp1 )
+      REAL,SAVE :: teta_tmp(ip1jmp1,llm)
+      REAL,SAVE :: pk_tmp(ip1jmp1,llm)
       
       ijb_u=ij_begin
@@ -113,11 +114,14 @@
 c         CALL initial0(ijp1llm,pbaruc)
 c         CALL initial0(ijmllm,pbarvc)
-          
-          pbaruc(ijb_u:ije_u,:)=0.
-          pbarvc(ijb_v:ije_v,:)=0.
-          
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)        
+	DO l=1,llm   
+          pbaruc(ijb_u:ije_u,l)=0.
+          pbarvc(ijb_v:ije_v,l)=0.
+        ENDDO
+c$OMP END DO NOWAIT  
       ENDIF
 
 c   accumulation des flux de masse horizontaux
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          DO ij = ijb_u,ije_u
@@ -128,4 +132,5 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
 c   selection de la masse instantannee des mailles avant le transport.
@@ -136,5 +141,10 @@
           ije=ij_end
 
-          massem(ijb:ije,:)=masse(ijb:ije,:)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+       DO l=1,llm
+          massem(ijb:ije,l)=masse(ijb:ije,l)
+       ENDDO
+c$OMP END DO NOWAIT
+
 ccc         CALL filtreg ( massem ,jjp1, llm,-2, 2, .TRUE., 1 )
 c
@@ -142,29 +152,36 @@
 
       iadvtr   = iadvtr+1
+
+c$OMP MASTER
       iapptrac = iadvtr
-
+c$OMP END MASTER
 
 c   Test pour savoir si on advecte a ce pas de temps
-      
+
       IF ( iadvtr.EQ.iapp_tracvl ) THEN
+c$OMP MASTER
         call suspend_timer(timer_caldyn)
+c$OMP END MASTER
       
       ijb=ij_begin
       ije=ij_end
       
+
+cc   ..  Modif P.Le Van  ( 20/12/97 )  ....
+cc
+
+c   traitement des flux de masse avant advection.
+c     1. calcul de w
+c     2. groupement des mailles pres du pole.
+
+c$OMP BARRIER
+        CALL groupe_p( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
+c$OMP BARRIER
+
+c$OMP BARRIER
+c$OMP MASTER      
       p_tmp(ijb:ije,1:llmp1)=p(ijb:ije,1:llmp1)
       pk_tmp(ijb:ije,1:llm)=pk(ijb:ije,1:llm)
       teta_tmp(ijb:ije,1:llm)=teta(ijb:ije,1:llm)
-      
-
-cc   ..  Modif P.Le Van  ( 20/12/97 )  ....
-cc
-
-c   traitement des flux de masse avant advection.
-c     1. calcul de w
-c     2. groupement des mailles pres du pole.
-
-        CALL groupe_p( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
-
       call VTb(VTHallo)
       call Register_SwapFieldHallo(pbarug,pbarug,ip1jmp1,llm,
@@ -195,7 +212,8 @@
       call VTb(VTadvection)
       call start_timer(timer_vanleer)
-
-      
-#ifdef INCA_CH4
+c$OMP END MASTER
+c$OMP BARRIER
+      
+#ifdef INCA
       ! ... Flux de masse diaganostiques traceurs
 c      flxw = wg / FLOAT(iapp_tracvl)
@@ -211,5 +229,5 @@
          if (pole_sud) ije=ij_end-iip1
          
-          
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)          
          DO l=1,llm-1
             DO ij = ijb+1,ije
@@ -241,4 +259,5 @@
 
          ENDDO
+c$OMP END DO NOWAIT
 
 c-------------------------------------------------------------------
@@ -253,6 +272,11 @@
 cym      ----> Revérifier lors de la parallélisation des autres schemas
    
-          call massbar_p(massem,massebx,masseby)          
-
+cym          call massbar_p(massem,massebx,masseby)          
+
+          call vlspltgen_p( q,iadv, 2., massem, wg ,
+     *                    pbarug,pbarvg,dtvr,p_tmp,pk_tmp,teta_tmp )
+
+         
+	  GOTO 1234     
 c-----------------------------------------------------------
 c     Appel des sous programmes d'advection
@@ -309,5 +333,5 @@
 
             call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0)
-#ifdef INCA_CH4
+#ifdef INCA
        do iiq = iq+1, iq+3
          q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1)
@@ -328,5 +352,5 @@
            call  prather(q(1,1,iq),wg,massem,pbarug,pbarvg,
      s                     n,dtbon)
-#ifdef INCA_CH4
+#ifdef INCA
        do iiq = iq+1, iq+9
          q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1)
@@ -441,4 +465,7 @@
        end DO
 
+1234  CONTINUE
+c$OMP BARRIER
+c$OMP MASTER
       ijb=ij_begin
       ije=ij_end
@@ -450,4 +477,5 @@
        ENDDO
 
+
        CALL qminimum_p( q, 2, finmasse )
 
@@ -455,5 +483,5 @@
 c   on reinitialise a zero les flux de masse cumules
 c---------------------------------------------------
-          iadvtr=0
+c          iadvtr=0
 	call VTe(VTadvection)
         call stop_timer(timer_vanleer)
@@ -465,5 +493,5 @@
         enddo
 
-#ifdef INCA_CH4
+#ifdef INCA
        call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm,
      *                             jj_nb_caldyn,0,0,Request_vanleer)
@@ -475,5 +503,7 @@
 	call VTe(VThallo)
 	call resume_timer(timer_caldyn)
-	
+c$OMP END MASTER
+c$OMP BARRIER	
+          iadvtr=0
        ENDIF ! if iadvtr.EQ.iapp_tracvl
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/advx.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/advx.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/advx.F	(revision 709)
@@ -106,5 +106,5 @@
          DO j = 1,jjp1
             DO i = 1,iim
-               sqi = sqi + S0(i,j,l,9)
+               sqi = sqi + S0(i,j,l,ntra)
             ENDDO
          ENDDO
@@ -483,5 +483,5 @@
         DO j = 1, jjp1
           DO i = 1, iim
-             sqf = sqf + S0(i,j,l,9)
+             sqf = sqf + S0(i,j,l,ntra)
           END DO  
         END DO
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/advz.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/advz.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/advz.F	(revision 709)
@@ -105,5 +105,5 @@
          DO j = 1,jjp1
             DO i = 1,iim
-               sqi = sqi + S0(i,j,l,9)
+               sqi = sqi + S0(i,j,l,ntra)
             ENDDO
          ENDDO
@@ -307,5 +307,5 @@
          DO j = 1,jjp1
             DO i = 1,iim
-               sqf = sqf + S0(i,j,l,9)
+               sqf = sqf + S0(i,j,l,ntra)
             ENDDO
          ENDDO
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/bernoui_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/bernoui_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/bernoui_p.F	(revision 709)
@@ -37,5 +37,4 @@
 c
       INTEGER   ij,l,ijb,ije,jjb,jje
-      EXTERNAL  filtreg_p
 c
 c-----------------------------------------------------------------------
@@ -50,5 +49,6 @@
       jje=jj_end+1
       if (pole_sud) jje=jj_end
-                
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)                
       DO l=1,llm
     
@@ -58,4 +58,5 @@
        
        ENDDO
+c$OMP END DO NOWAIT
 c
 c-----------------------------------------------------------------------
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/bilan_dyn_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/bilan_dyn_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/bilan_dyn_p.F	(revision 709)
@@ -168,4 +168,5 @@
 c   Initialisation
 c=====================================================================
+      ndex3d=0
       if (adjust) return
       
@@ -342,5 +343,5 @@
       Q(:,jjb:jje,:,iang)=ang(:,jjb:jje,:)
       Q(:,jjb:jje,:,iu)=unat(:,jjb:jje,:)
-      Q(:,jjb:jje,:,iovap)=q(:,jjb:jje,:,1)
+      Q(:,jjb:jje,:,iovap)=trac(:,jjb:jje,:,1)
       Q(:,jjb:jje,:,iun)=1.
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/caladvtrac_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/caladvtrac_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/caladvtrac_p.F	(revision 709)
@@ -4,5 +4,5 @@
 c
 c
-#ifdef INCA_CH4
+#ifdef INCA
             SUBROUTINE caladvtrac_p(q,pbaru,pbarv ,
      *                   p ,masse, dq ,  teta,
@@ -58,5 +58,4 @@
 c   ------
 
-      EXTERNAL  advtrac,minmaxq, qminimum
       INTEGER ij,l, iq, iapptrac
       REAL finmasse(ip1jmp1,llm), dtvrtrac
@@ -77,4 +76,5 @@
 
 c   advection
+c      print *,'appel a advtrac'
 
 #ifdef INCA_CH4
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/caldyn_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/caldyn_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/caldyn_p.F	(revision 709)
@@ -46,8 +46,9 @@
       REAL ps(ip1jmp1),phis(ip1jmp1)
       REAL pk(iip1,jjp1,llm),pkf(ip1jmp1,llm)
-      REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm)
+      REAL,SAVE :: vcont(ip1jm,llm),ucont(ip1jmp1,llm)
       REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm)
       REAL dv(ip1jm,llm),du(ip1jmp1,llm)
       REAL dteta(ip1jmp1,llm),dp(ip1jmp1)
+      REAL w(ip1jmp1,llm)
       REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)
       REAL time
@@ -56,12 +57,13 @@
 c   ------
 
-      REAL ang(ip1jmp1,llm),p(ip1jmp1,llmp1)
-      REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm),psexbarxy(ip1jm)
-      REAL vorpot(ip1jm,llm)
-      REAL w(ip1jmp1,llm),ecin(ip1jmp1,llm),convm(ip1jmp1,llm)
-      REAL bern(ip1jmp1,llm)
-      REAL massebxy(ip1jm,llm)
-    
-
+      REAL,SAVE :: ang(ip1jmp1,llm)
+      REAL,SAVE :: p(ip1jmp1,llmp1)
+      REAL,SAVE :: massebx(ip1jmp1,llm),masseby(ip1jm,llm)
+      REAL,SAVE :: psexbarxy(ip1jm)
+      REAL,SAVE :: vorpot(ip1jm,llm)
+      REAL,SAVE :: ecin(ip1jmp1,llm)
+      REAL,SAVE :: bern(ip1jmp1,llm)
+      REAL,SAVE :: massebxy(ip1jm,llm)
+      REAL,SAVE :: convm(ip1jmp1,llm)
       INTEGER   ij,l,ijb,ije,ierr
 
@@ -72,4 +74,5 @@
       CALL pression_p ( ip1jmp1, ap      , bp   ,  ps  , p            )
 cym      CALL psextbar (   ps   , psexbarxy                          )
+c$OMP BARRIER
       CALL massdair_p (    p   , masse                                )
       CALL massbar_p  (   masse, massebx , masseby                    )
@@ -77,7 +80,11 @@
       CALL flumass_p  ( massebx, masseby , vcont, ucont ,pbaru, pbarv )
       CALL dteta1_p   (   teta , pbaru   , pbarv, dteta               )
-      CALL convmas_p  (   pbaru, pbarv   , convm                      )
-
+      CALL convmas1_p  (   pbaru, pbarv   , convm                      )
+c$OMP BARRIER      
+      CALL convmas2_p  (   convm                      )
+c$OMP BARRIER
 #ifdef DEBUG_IO
+c$OMP BARRIER
+c$OMP MASTER
       call WriteField_p('ucont',reshape(ucont,(/iip1,jmp1,llm/)))
       call WriteField_p('vcont',reshape(vcont,(/iip1,jjm,llm/)))
@@ -91,6 +98,10 @@
       call WriteField_p('dteta',reshape(dteta,(/iip1,jmp1,llm/)))
       call WriteField_p('convm',reshape(convm,(/iip1,jmp1,llm/)))
+c$OMP END MASTER
+c$OMP BARRIER
 #endif      
 
+c$OMP BARRIER
+c$OMP MASTER
       ijb=ij_begin
       ije=ij_end
@@ -99,5 +110,7 @@
          dp( ij ) = convm( ij,1 ) / airesurg( ij )
       ENDDO
-
+c$OMP END MASTER
+c$OMP BARRIER
+c$OMP FLUSH
       CALL vitvert_p ( convm  , w                                  )
       CALL tourpot_p ( vcov   , ucov  , massebxy  , vorpot         )
@@ -105,8 +118,12 @@
 
 #ifdef DEBUG_IO      
+c$OMP BARRIER
+c$OMP MASTER
       call WriteField_p('w',reshape(w,(/iip1,jmp1,llm/)))
       call WriteField_p('vorpot',reshape(vorpot,(/iip1,jjm,llm/)))
       call WriteField_p('du',reshape(du,(/iip1,jmp1,llm/)))
       call WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/)))
+c$OMP END MASTER
+c$OMP BARRIER
 #endif      
       CALL enercin_p ( vcov   , ucov  , vcont     , ucont  , ecin  )
@@ -115,8 +132,13 @@
 
 #ifdef DEBUG_IO
+c$OMP BARRIER
+c$OMP MASTER
       call WriteField_p('ecin',reshape(ecin,(/iip1,jmp1,llm/)))
       call WriteField_p('bern',reshape(bern,(/iip1,jmp1,llm/)))
       call WriteField_p('du',reshape(du,(/iip1,jmp1,llm/)))
       call WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/)))
+      call WriteField_p('pkf',reshape(pkf,(/iip1,jmp1,llm/)))
+c$OMP END MASTER
+c$OMP BARRIER
 #endif
       
@@ -126,5 +148,6 @@
       if (pole_nord) ijb=ij_begin
       if (pole_sud) ije=ij_end
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
       DO l=1,llm
          DO ij=ijb,ije
@@ -132,7 +155,7 @@
         ENDDO
       ENDDO
+c$OMP END DO
 
-
-      CALL advect_p( ang, vcov, teta, w, massebx, masseby,du,dv,dteta) 
+      CALL advect_new_p(ang,vcov,teta,w,massebx,masseby,du,dv,dteta) 
 
 C  WARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi 
@@ -142,4 +165,5 @@
       if (pole_sud) ije=ij_end-iip1
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
       DO l = 1, llm
          DO ij = ijb, ije, iip1
@@ -152,4 +176,5 @@
          enddo
       enddo
+c$OMP END DO NOWAIT      
 c-----------------------------------------------------------------------
 c   Sorties eventuelles des variables de controle:
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/calfis_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/calfis_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/calfis_p.F	(revision 709)
@@ -23,5 +23,5 @@
      $                  pdq,
      $                  pw,
-#ifdef INCA_CH4
+#ifdef INCA
      $                  flxw,
 #endif
@@ -40,4 +40,5 @@
       Use Write_field_p
       USE Times
+      USE IOPHY
       IMPLICIT NONE
 c=======================================================================
@@ -148,25 +149,56 @@
 
       INTEGER i,j,l,ig0,ig,iq,iiq
-      REAL zpsrf(klon)
-      REAL zplev(klon,llm+1),zplay(klon,llm)
-      REAL zphi(klon,llm),zphis(klon)
-c
-      REAL zufi(klon,llm), zvfi(klon,llm)
-      REAL ztfi(klon,llm),zqfi(klon,llm,nqmx)
-c
-      REAL pcvgu(klon,llm), pcvgv(klon,llm)
-      REAL pcvgt(klon,llm), pcvgq(klon,llm,2)
-c
-      REAL pvervel(klon,llm)
-c
-      REAL zdufi(klon,llm),zdvfi(klon,llm)
-      REAL zdtfi(klon,llm),zdqfi(klon,llm,nqmx)
-      REAL zdpsrf(klon)
-c
+      REAL,ALLOCATABLE,SAVE :: zpsrf(:)
+      REAL,ALLOCATABLE,SAVE :: zplev(:,:),zplay(:,:)
+      REAL,ALLOCATABLE,SAVE :: zphi(:,:),zphis(:)
+c
+      REAL,ALLOCATABLE,SAVE :: zufi(:,:), zvfi(:,:)
+      REAL,ALLOCATABLE,SAVE :: ztfi(:,:),zqfi(:,:,:)
+c
+      REAL,ALLOCATABLE,SAVE :: pcvgu(:,:), pcvgv(:,:)
+      REAL,ALLOCATABLE,SAVE :: pcvgt(:,:), pcvgq(:,:,:)
+c
+      REAL,ALLOCATABLE,SAVE :: pvervel(:,:)
+c
+      REAL,ALLOCATABLE,SAVE :: zdufi(:,:),zdvfi(:,:)
+      REAL,ALLOCATABLE,SAVE :: zdtfi(:,:),zdqfi(:,:,:)
+      REAL,ALLOCATABLE,SAVE :: zdpsrf(:)
+c
+      REAL,ALLOCATABLE,SAVE :: zplev_omp(:,:)
+      REAL,ALLOCATABLE,SAVE :: zplay_omp(:,:)
+      REAL,ALLOCATABLE,SAVE :: zphi_omp(:,:)
+      REAL,ALLOCATABLE,SAVE :: zphis_omp(:)
+      REAL,ALLOCATABLE,SAVE :: presnivs_omp(:)
+      REAL,ALLOCATABLE,SAVE :: zufi_omp(:,:) 
+      REAL,ALLOCATABLE,SAVE :: zvfi_omp(:,:)
+      REAL,ALLOCATABLE,SAVE :: ztfi_omp(:,:)
+      REAL,ALLOCATABLE,SAVE :: zqfi_omp(:,:,:)
+      REAL,ALLOCATABLE,SAVE :: pvervel_omp(:,:) 
+      REAL,ALLOCATABLE,SAVE :: zdufi_omp(:,:)
+      REAL,ALLOCATABLE,SAVE :: zdvfi_omp(:,:)
+      REAL,ALLOCATABLE,SAVE :: zdtfi_omp(:,:)
+      REAL,ALLOCATABLE,SAVE :: zdqfi_omp(:,:,:)
+      REAL,ALLOCATABLE,SAVE :: zdpsrf_omp(:)
+
+c$OMP THREADPRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp,
+c$OMP+                 presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp,
+c$OMP+                 zqfi_omp,pvervel_omp,zdufi_omp,zdvfi_omp,
+c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp)       
+
+      LOGICAL,SAVE :: first_omp=.true.
+c$OMP THREADPRIVATE(first_omp)
+      
       REAL zsin(iim),zcos(iim),z1(iim)
       REAL zsinbis(iim),zcosbis(iim),z1bis(iim)
       REAL unskap, pksurcp
-
-#ifdef INCA_CH4
+c
+cIM diagnostique PVteta, Amip2
+      INTEGER ntetaSTD
+      PARAMETER(ntetaSTD=3)
+      REAL rtetaSTD(ntetaSTD)
+      DATA rtetaSTD/350., 380., 405./
+      REAL PVteta(klon,ntetaSTD)
+      
+#ifdef INCA
       REAL flxw(iip1,jjp1,llm)
       REAL flxwfi(klon,llm)
@@ -179,12 +211,14 @@
       DATA firstcal/.true./
       SAVE firstcal,debut
+c$OMP THREADPRIVATE(firstcal,debut)
       REAL rdayvrai
       
-      REAL,dimension(1:iim,1:llm) :: du_send,du_recv,dv_send,dv_recv
+      REAL,SAVE,dimension(1:iim,1:llm):: du_send,du_recv,dv_send,dv_recv
       INTEGER :: ierr
       INTEGER,dimension(MPI_STATUS_SIZE,4) :: Status
       INTEGER, dimension(4) :: Req
-      REAL zdufi2(klon+iim,llm),zdvfi2(klon+iim,llm)
-      integer :: k,kstart,kend     
+      REAL,ALLOCATABLE,SAVE:: zdufi2(:,:),zdvfi2(:,:)
+      integer :: k,kstart,kend
+      INTEGER :: offset  
 c
 c-----------------------------------------------------------------------
@@ -194,4 +228,8 @@
 c
 
+      klon=klon_mpi
+      
+      PVteta(:,:)=0.
+            
       IF (ngridmx.NE.2+(jjm-1)*iim) THEN
          PRINT*,'STOP dans calfis'
@@ -209,4 +247,19 @@
       IF ( firstcal )  THEN
           debut = .TRUE.
+c$OMP MASTER
+      ALLOCATE(zpsrf(klon))
+      ALLOCATE(zplev(klon,llm+1),zplay(klon,llm))
+      ALLOCATE(zphi(klon,llm),zphis(klon))
+      ALLOCATE(zufi(klon,llm), zvfi(klon,llm))
+      ALLOCATE(ztfi(klon,llm),zqfi(klon,llm,nqmx))
+      ALLOCATE(pcvgu(klon,llm), pcvgv(klon,llm))
+      ALLOCATE(pcvgt(klon,llm), pcvgq(klon,llm,2))
+      ALLOCATE(pvervel(klon,llm))
+      ALLOCATE(zdufi(klon,llm),zdvfi(klon,llm))
+      ALLOCATE(zdtfi(klon,llm),zdqfi(klon,llm,nqmx))
+      ALLOCATE(zdpsrf(klon))
+      ALLOCATE(zdufi2(klon+iim,llm),zdvfi2(klon+iim,llm))
+c$OMP END MASTER
+c$OMP BARRIER	  
       ELSE
           debut = .FALSE.
@@ -222,6 +275,9 @@
 c   ----------------------------------
 
+c$OMP MASTER
       call start_timer(timer_physic)
-             
+c$OMP END MASTER
+
+c$OMP MASTER             
       do ig0=1,klon
         i=Liste_i(ig0)
@@ -229,5 +285,5 @@
         zpsrf(ig0)=pps(i,j)
       enddo
-
+c$OMP END MASTER
 
 
@@ -243,4 +299,6 @@
        unskap   = 1./ kappa
 c
+      print *,omp_rank,'klon--->',klon
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l = 1, llmp1
         do ig0=1,klon
@@ -250,4 +308,5 @@
         enddo
       ENDDO
+c$OMP END DO NOWAIT
 c
 c
@@ -255,5 +314,5 @@
 c   43. temperature naturelle (en K) et pressions milieux couches .
 c   ---------------------------------------------------------------
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
 
@@ -268,4 +327,5 @@
 
       ENDDO
+c$OMP END DO NOWAIT
 
 c   43.bis traceurs
@@ -275,4 +335,5 @@
       DO iq=1,nq
          iiq=niadv(iq)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          DO l=1,llm
            do ig0=1,klon
@@ -282,4 +343,5 @@
            enddo
          ENDDO
+c$OMP END DO NOWAIT	 
       ENDDO
 
@@ -287,4 +349,5 @@
 
       DO iq=1,2
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
          DO l=1,llm
            do ig0=1,klon
@@ -294,4 +357,5 @@
            enddo
          ENDDO
+c$OMP END DO NOWAIT	 
       ENDDO
 
@@ -302,6 +366,11 @@
 
       CALL gr_dyn_fi_p(llm,iip1,jjp1,klon,pphi,zphi)
+
+c$OMP MASTER
       CALL gr_dyn_fi_p(1,iip1,jjp1,klon,pphis,zphis)
-
+c$OMP END MASTER
+c$OMP BARRIER
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
 	 DO ig=1,klon
@@ -309,8 +378,8 @@
 	 ENDDO
       ENDDO
-      
+c$OMP END DO NOWAIT      
 c   ....  Calcul de la vitesse  verticale  ( en Pa*m*s  ou Kg/s )  ....
 c
-       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
       DO l=1,llm
         do ig0=1,klon
@@ -322,5 +391,5 @@
 	if (pole_sud) pvervel(klon,l)=pw(1,jjp1,l)*g/apols
       ENDDO
-
+c$OMP END DO NOWAIT
 
 c
@@ -334,4 +403,5 @@
       if (pole_sud) kend=klon-1
       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO l=1,llm
         do ig0=kstart,kend
@@ -351,8 +421,8 @@
         enddo
       ENDDO
-
+c$OMP END DO NOWAIT
 c   46.champ v:
 c   -----------
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
         DO ig0=kstart,kend
@@ -366,5 +436,5 @@
          ENDDO
       ENDDO
-
+c$OMP END DO NOWAIT
 
 c   47. champs de vents aux pole nord   
@@ -374,5 +444,5 @@
 
       if (pole_nord) then
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
         DO l=1,llm
 
@@ -397,5 +467,5 @@
   
         ENDDO
-      
+c$OMP END DO NOWAIT      
       endif
 
@@ -407,5 +477,5 @@
 
       if (pole_sud) then
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
         DO l=1,llm
   
@@ -430,9 +500,17 @@
 
         ENDDO
-      
+c$OMP END DO NOWAIT       
       endif
 
 
-#ifdef INCA_CH4
+      IF (monocpu) THEN
+c
+cIM calcul PV a teta=350, 380, 405K
+        CALL PVtheta(ngridmx,llm,pucov,pvcov,pteta,
+     $           ztfi,zplay,zplev,
+     $           ntetaSTD,rtetaSTD,PVteta)
+c
+      ENDIF
+#ifdef INCA
       CALL gr_dyn_fi_p(llm,iip1,jjp1,klon,flxw,flxwfi)
 #endif
@@ -443,5 +521,135 @@
 c   ---------------------
 
-
+cc$OMP  PARALLEL DEFAULT(NONE) 
+cc$OMP+ PRIVATE(i,l,offset,iq)
+cc$OMP+ SHARED(klon_omp_nb,nq,klon_omp_begin,
+cc$OMP+        debut,lafin,rdayvrai,heure,dtphys,zplev,zplay,
+cc$OMP+        zphi,zphis,presnivs,clesphy0,zufi,zvfi,ztfi,
+cc$OMP+        zqfi,pvervel,zdufi,zdvfi,zdtfi,zdqfi,zdpsrf)
+
+c PRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp,
+c c$OMP+                 presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp,
+c c$OMP+                 zqfi_omp,pvervel_omp,zdufi_omp,zdvfi_omp,
+c c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp)
+
+c$OMP BARRIER
+      if (first_omp) then
+        klon=klon_omp_nb(omp_rank)
+
+        allocate(zplev_omp(klon,llm+1))
+        allocate(zplay_omp(klon,llm))
+        allocate(zphi_omp(klon,llm))
+        allocate(zphis_omp(klon))
+        allocate(presnivs_omp(llm))
+        allocate(zufi_omp(klon,llm))
+        allocate(zvfi_omp(klon,llm))
+        allocate(ztfi_omp(klon,llm))
+        allocate(zqfi_omp(klon,llm,nq))
+        allocate(pvervel_omp(klon,llm))
+        allocate(zdufi_omp(klon,llm))
+        allocate(zdvfi_omp(klon,llm))
+        allocate(zdtfi_omp(klon,llm))
+        allocate(zdqfi_omp(klon,llm,nq))
+        allocate(zdpsrf_omp(klon))
+	first_omp=.false.
+      endif
+       
+	   
+      klon=klon_omp_nb(omp_rank)
+      offset=klon_omp_begin(omp_rank)-1
+      
+      do l=1,llm+1
+        do i=1,klon
+          zplev_omp(i,l)=zplev(offset+i,l)
+	enddo 
+      enddo
+	  
+       do l=1,llm
+        do i=1,klon  
+	  zplay_omp(i,l)=zplay(offset+i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  zphi_omp(i,l)=zphi(offset+i,l)
+	enddo 
+      enddo
+	
+
+      do i=1,klon
+	zphis_omp(i)=zphis(offset+i)
+      enddo 
+     
+	
+      do l=1,llm
+        presnivs_omp(l)=presnivs(l)
+      enddo 
+	
+      do l=1,llm
+        do i=1,klon
+	  zufi_omp(i,l)=zufi(offset+i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  zvfi_omp(i,l)=zvfi(offset+i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  ztfi_omp(i,l)=ztfi(offset+i,l)
+	enddo 
+      enddo
+	
+      do iq=1,nq
+        do l=1,llm
+          do i=1,klon
+            zqfi_omp(i,l,iq)=zqfi(offset+i,l,iq)
+	  enddo
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  pvervel_omp(i,l)=pvervel(offset+i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  zdufi_omp(i,l)=zdufi(offset+i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  zdvfi_omp(i,l)=zdvfi(offset+i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+          zdtfi_omp(i,l)=zdtfi(offset+i,l)
+	enddo 
+      enddo
+	
+      do iq=1,nq
+        do l=1,llm
+          do i=1,klon
+	    zdqfi_omp(i,l,iq)=zdqfi(offset+i,l,iq)
+	  enddo 
+        enddo
+      enddo
+      	
+      do i=1,klon
+	zdpsrf_omp(i)=zdpsrf(offset+i)
+      enddo 
+      
+c$OMP BARRIER
+cym      call WriteField_phy_p('zdtfi_omp',zdtfi_omp(:,:),llm)
+      
       CALL physiq (klon,
      .             llm,
@@ -452,49 +660,165 @@
      .             heure,
      .             dtphys,
-     .             zplev,
-     .             zplay,
-     .             zphi,
-     .             zphis,
-     .             presnivs,
+     .             zplev_omp,
+     .             zplay_omp,
+     .             zphi_omp,
+     .             zphis_omp,
+     .             presnivs_omp,
      .             clesphy0,
-     .             zufi,
-     .             zvfi,
-     .             ztfi,
-     .             zqfi,
-     .             pvervel,
-#ifdef INCA_CH4
+     .             zufi_omp,
+     .             zvfi_omp,
+     .             ztfi_omp,
+     .             zqfi_omp,
+     .             pvervel_omp,
+#ifdef INCA
      .             flxwfi,
 #endif
-     .             zdufi,
-     .             zdvfi,
-     .             zdtfi,
-     .             zdqfi,
-     .             zdpsrf)
-
+     .             zdufi_omp,
+     .             zdvfi_omp,
+     .             zdtfi_omp,
+     .             zdqfi_omp,
+     .             zdpsrf_omp,
+cIM diagnostique PVteta, Amip2          
+     .             pducov,
+     .             PVteta)
+
+cym      call WriteField_phy_p('zdtfi_omp',zdtfi_omp(:,:),llm)
+
+c$OMP BARRIER
+
+      do l=1,llm+1
+        do i=1,klon
+          zplev(offset+i,l)=zplev_omp(i,l)
+	enddo 
+      enddo
+	  
+       do l=1,llm
+        do i=1,klon  
+	  zplay(offset+i,l)=zplay_omp(i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  zphi(offset+i,l)=zphi_omp(i,l)
+	enddo 
+      enddo
+	
+
+      do i=1,klon
+	zphis(offset+i)=zphis_omp(i)
+      enddo 
+     
+	
+      do l=1,llm
+        presnivs(l)=presnivs_omp(l)
+      enddo 
+	
+      do l=1,llm
+        do i=1,klon
+	  zufi(offset+i,l)=zufi_omp(i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  zvfi(offset+i,l)=zvfi_omp(i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  ztfi(offset+i,l)=ztfi_omp(i,l)
+	enddo 
+      enddo
+	
+      do iq=1,nq
+        do l=1,llm
+          do i=1,klon
+            zqfi(offset+i,l,iq)=zqfi_omp(i,l,iq)
+	  enddo
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  pvervel(offset+i,l)=pvervel_omp(i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  zdufi(offset+i,l)=zdufi_omp(i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+	  zdvfi(offset+i,l)=zdvfi_omp(i,l)
+	enddo 
+      enddo
+	
+      do l=1,llm
+        do i=1,klon
+          zdtfi(offset+i,l)=zdtfi_omp(i,l)
+	enddo 
+      enddo
+	
+      do iq=1,nq
+        do l=1,llm
+          do i=1,klon
+	    zdqfi(offset+i,l,iq)=zdqfi_omp(i,l,iq)
+	  enddo 
+        enddo
+      enddo
+      	
+      do i=1,klon
+	zdpsrf(offset+i)=zdpsrf_omp(i)
+      enddo 
+      
+
+cc$OMP END PARALLEL
+      klon=klon_mpi
 500   CONTINUE
-
+c$OMP BARRIER
+
+c$OMP MASTER
+cym      call WriteField_phy('zdtfi',zdtfi(:,:),llm)
       call stop_timer(timer_physic)
+c$OMP END MASTER
       
       if (MPI_rank>0) then
-      
-        du_send(1:iim,1:llm)=zdufi(1:iim,1:llm)
-        dv_send(1:iim,1:llm)=zdvfi(1:iim,1:llm)
-        
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
+       DO l=1,llm      
+        du_send(1:iim,l)=zdufi(1:iim,l)
+        dv_send(1:iim,l)=zdvfi(1:iim,l)
+       ENDDO
+c$OMP END DO NOWAIT       
+
+c$OMP BARRIER
+c$OMP MASTER
         call MPI_ISSEND(du_send,iim*llm,MPI_REAL8,MPI_Rank-1,401,
-     &                   MPI_COMM_WORLD,Req(1),ierr)
+     &                   COMM_LMDZ,Req(1),ierr)
         call MPI_ISSEND(dv_send,iim*llm,MPI_REAL8,MPI_Rank-1,402,
-     &                  MPI_COMM_WORLD,Req(2),ierr)
+     &                  COMM_LMDZ,Req(2),ierr)
+c$OMP END MASTER
+c$OMP BARRIER
      
       endif
    
       if (MPI_rank<MPI_Size-1) then
-      
+c$OMP BARRIER
+c$OMP MASTER      
         call MPI_IRECV(du_recv,iim*llm,MPI_REAL8,MPI_Rank+1,401,
-     &                 MPI_COMM_WORLD,Req(3),ierr)
+     &                 COMM_LMDZ,Req(3),ierr)
         call MPI_IRECV(dv_recv,iim*llm,MPI_REAL8,MPI_Rank+1,402,
-     &                 MPI_COMM_WORLD,Req(4),ierr)
-     
+     &                 COMM_LMDZ,Req(4),ierr)
+c$OMP END MASTER
+c$OMP BARRIER     
       endif
-   
+
+c$OMP BARRIER
+c$OMP MASTER    
       if (MPI_rank>0 .and. MPI_rank< MPI_Size-1) then
         call MPI_WAITALL(4,Req(1),Status,ierr)
@@ -504,25 +828,37 @@
         call MPI_WAITALL(2,Req(3),Status,ierr)
       endif
-      
-      zdufi2(1:klon,:)=zdufi(1:klon,:)
-      zdufi2(klon+1:klon+iim,:)=du_recv(1:iim,:)
-          
-      zdvfi2(1:klon,:)=zdvfi(1:klon,:)
-      zdvfi2(klon+1:klon+iim,:)=dv_recv(1:iim,:)
-
-       pdhfi(:,jjphy_begin,:)=0
-       pdqfi(:,jjphy_begin,:,:)=0
-       pdufi(:,jjphy_begin,:)=0
-       pdvfi(:,jjphy_begin,:)=0
-       pdpsfi(:,jjphy_begin)=0
-
+c$OMP END MASTER
+c$OMP BARRIER     
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,llm
+            
+        zdufi2(1:klon,l)=zdufi(1:klon,l)
+        zdufi2(klon+1:klon+iim,l)=du_recv(1:iim,l)
+            
+        zdvfi2(1:klon,l)=zdvfi(1:klon,l)
+        zdvfi2(klon+1:klon+iim,l)=dv_recv(1:iim,l) 
+  
+         pdhfi(:,jjphy_begin,l)=0
+         pdqfi(:,jjphy_begin,l,:)=0
+         pdufi(:,jjphy_begin,l)=0
+         pdvfi(:,jjphy_begin,l)=0
+         
+         if (.not. pole_sud) then
+           pdhfi(:,jjphy_end,l)=0
+           pdqfi(:,jjphy_end,l,:)=0
+           pdufi(:,jjphy_end,l)=0
+           pdvfi(:,jjphy_end,l)=0
+         endif
+      
+       ENDDO 
+c$OMP END DO NOWAIT
+
+c$OMP MASTER
+       pdpsfi(:,jjphy_begin)=0    
        if (.not. pole_sud) then
-         pdhfi(:,jjphy_end,:)=0
-         pdqfi(:,jjphy_end,:,:)=0
-         pdufi(:,jjphy_end,:)=0
-         pdvfi(:,jjphy_end,:)=0
 	 pdpsfi(:,jjphy_end)=0
        endif
-
+c$OMP END MASTER
 c-----------------------------------------------------------------------
 c   transformation des tendances physiques en tendances dynamiques:
@@ -531,6 +867,7 @@
 c  tendance sur la pression :
 c  -----------------------------------
-
+c$OMP MASTER
       CALL gr_fi_dyn_p(1,klon,iip1,jjp1,zdpsrf,pdpsfi)
+c$OMP END MASTER
 c
 c   62. enthalpie potentielle
@@ -543,7 +880,8 @@
       if (pole_sud)  kend=klon-1
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
 
-!cdir NODEP
+!!cdir NODEP
         do ig0=kstart,kend
           i=Liste_i(ig0)
@@ -565,4 +903,5 @@
         endif
       ENDDO
+c$OMP END DO NOWAIT
       
 c   62. humidite specifique
@@ -570,6 +909,7 @@
 
       DO iq=1,nqmx
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          DO l=1,llm
-!cdir NODEP 
+!!cdir NODEP 
            do ig0=kstart,kend
              i=Liste_i(ig0)
@@ -592,4 +932,5 @@
            
          ENDDO
+c$OMP END DO NOWAIT
       ENDDO
 
@@ -597,12 +938,19 @@
 c   ------------
 C     initialisation des tendances
-      pdqfi=0.
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,llm
+        pdqfi(:,:,l,:)=0.
+      ENDDO
+c$OMP END DO NOWAIT	 
+
 C
 
       DO iq=1,nq
          iiq=niadv(iq)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          DO l=1,llm
 
-!cdir NODEP           
+!!cdir NODEP           
 	     DO ig0=kstart,kend
               i=Liste_i(ig0)
@@ -625,11 +973,12 @@
 	    
          ENDDO
+c$OMP END DO NOWAIT	 
       ENDDO
       
 c   65. champ u:
 c   ------------
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
-!cdir NODEP
+!!cdir NODEP
          do ig0=kstart,kend
            i=Liste_i(ig0)
@@ -643,5 +992,5 @@
               pdufi(iim,j,l)=0.5*(  zdufi2(ig0,l)
      $                            + zdufi2(ig0+iim-1,l))*cu(iim,j)
-              pdufi(iip1,j,l)=0.5*(zdufi2(ig0,l)+zdufi2(ig0+1,l))*cu(i,j)
+             pdufi(iip1,j,l)=0.5*(zdufi2(ig0,l)+zdufi2(ig0+1,l))*cu(i,j)
            endif
          
@@ -661,5 +1010,5 @@
          
       ENDDO
-
+c$OMP END DO NOWAIT
 
 c   67. champ v:
@@ -672,6 +1021,7 @@
       if (pole_sud)  kend=klon-1-iim
       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO l=1,llm
-!cdir NODEP
+!!cdir NODEP
         do ig0=kstart,kend
            i=Liste_i(ig0)
@@ -684,4 +1034,5 @@
          
       ENDDO
+c$OMP END DO NOWAIT
 
 
@@ -691,5 +1042,6 @@
 
       if (pole_nord) then
-        
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
         DO l=1,llm
 
@@ -705,10 +1057,12 @@
 
         ENDDO
+c$OMP END DO NOWAIT
 
       endif    
       
       if (pole_sud) then
-      
-        DO l=1,llm
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
+         DO l=1,llm
   
            DO i=1,iim
@@ -723,4 +1077,5 @@
 
         ENDDO
+c$OMP END DO NOWAIT
      
       endif
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/conf_dat2d.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/conf_dat2d.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/conf_dat2d.F	(revision 709)
@@ -215,4 +215,7 @@
        ENDDO
 
+      deallocate(xtemp)
+      deallocate(ytemp)
+
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/conf_gcm.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/conf_gcm.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/conf_gcm.F	(revision 709)
@@ -372,4 +372,16 @@
        iflag_con = 2
        CALL getin('iflag_con',iflag_con)
+!
+!Config  Key  = ip_ebil_dyn
+!Config  Desc = PRINT level for energy conserv. diag.
+!Config  Def  = 0
+!Config  Help = PRINT level for energy conservation diag. ;
+!               les options suivantes existent :
+!Config         0 pas de print
+!Config         1 pas de print
+!Config         2 print,
+       ip_ebil_dyn = 0
+       CALL getin('ip_ebil_dyn',ip_ebil_dyn)
+!
 
       DO i = 1, longcles
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/control.h
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/control.h	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/control.h	(revision 709)
@@ -8,8 +8,9 @@
      .              iperiod,iapp_tracvl,iconser,iecri,idissip,iphysiq ,
      .              periodav,ecritphy,iecrimoy,dayref,anneeref,
-     .              raz_date,offline
+     .              raz_date,offline,ip_ebil_dyn
 
       INTEGER   nday,day_step,iperiod,iapp_tracvl,iconser,iecri,
-     .          idissip,iphysiq,iecrimoy,dayref,anneeref, raz_date
+     .          idissip,iphysiq,iecrimoy,dayref,anneeref, raz_date,
+     .          ip_ebil_dyn 
       REAL periodav, ecritphy
       logical offline
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/convflu_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/convflu_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/convflu_p.F	(revision 709)
@@ -33,5 +33,5 @@
 c
      
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)          
       DO 5 l = 1,nbniv
 c
@@ -80,5 +80,5 @@
       
    5  CONTINUE
-   
+c$OMP END DO NOWAIT   
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/convmas_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/convmas_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/convmas_p.F	(revision 709)
@@ -35,14 +35,11 @@
 #include "logic.h"
 
-      REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm ),convm(  ip1jmp1,llm )
+      REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm )
+      REAL, target :: convm(  ip1jmp1,llm )
       INTEGER   l,ij
 
-      EXTERNAL   filtreg_p
-      EXTERNAL   convflu_p
+      INTEGER ijb,ije,jjb,jje
+ 
       
-      INTEGER ijb,ije,jjb,jje
-     
-      
-
 c-----------------------------------------------------------------------
 c    ....  calcul de - (d(pbaru)/dx + d(pbarv)/dy ) ......
@@ -64,4 +61,5 @@
        ije=ij_end+iip1
        if (pole_sud) ije=ij_end
+            
       DO      l      = llmm1, 1, -1
         DO    ij     = ijb, ije
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/covcont_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/covcont_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/covcont_p.F	(revision 709)
@@ -42,5 +42,6 @@
         ije_v=ij_end-iip1
       endif
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)    
       DO 10 l = 1,klevel
 
@@ -54,4 +55,5 @@
 
   10  CONTINUE
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/dissip_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/dissip_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/dissip_p.F	(revision 709)
@@ -49,6 +49,4 @@
 
       REAL  SSUM
-      EXTERNAL  gradiv ,nXgrarot,divgrad,initial0
-      EXTERNAL  gradiv2,nXgraro2,divgrad2,SSUM
       integer :: ijb,ije
 c-----------------------------------------------------------------------
@@ -56,4 +54,5 @@
 c   ----------------
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
       DO l=1,llm
          te1dt(l) = tetaudiv(l) * dtdiss
@@ -61,4 +60,5 @@
          te3dt(l) = tetah(l)    * dtdiss
       ENDDO
+c$OMP END DO NOWAIT
 c      CALL initial0( ijp1llm, du )
 c      CALL initial0( ijmllm , dv )
@@ -67,11 +67,19 @@
       ijb=ij_begin
       ije=ij_end
-      
-      du(ijb:ije,:)=0
-      dh(ijb:ije,:)=0
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
+      DO l=1,llm
+        du(ijb:ije,l)=0
+        dh(ijb:ije,l)=0
+      ENDDO
+c$OMP END DO NOWAIT
       
       if (pole_sud) ije=ij_end-iip1
-      
-      dv(ijb:ije,:)=0
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
+      DO l=1,llm
+        dv(ijb:ije,l)=0
+      ENDDO
+c$OMP END DO NOWAIT
      
 c-----------------------------------------------------------------------
@@ -99,4 +107,5 @@
       if (pole_sud) ije=ij_end-iip1
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
       DO l=1,llm
          if (pole_nord) then
@@ -123,5 +132,5 @@
 
        ENDDO
-
+c$OMP END DO NOWAIT
 c   calcul de la partie   n X grad ( rot ):
 c   ---------------------------------------
@@ -142,5 +151,6 @@
       ije=ij_end
       if (pole_sud) ije=ij_end-iip1
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
       DO l=1,llm
          
@@ -162,4 +172,5 @@
       
       ENDDO
+c$OMP END DO NOWAIT
 
 c   calcul de la partie   div ( grad ):
@@ -172,5 +183,6 @@
       ijb=ij_begin
       ije=ij_end
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
        DO l = 1, llm
           DO ij = ijb, ije
@@ -178,5 +190,5 @@
           ENDDO
        ENDDO
-
+c$OMP END DO NOWAIT
          CALL divgrad2_p( llm,teta, deltapres  ,niterh, gdx )
       ELSE
@@ -190,4 +202,5 @@
       ije=ij_end
       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO l = 1,llm
          DO ij = ijb,ije
@@ -195,4 +208,5 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
       RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/diverg_gam_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/diverg_gam_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/diverg_gam_p.F	(revision 709)
@@ -48,5 +48,6 @@
       if (pole_nord) ijb=ij_begin+iip1
       if(pole_sud)  ije=ij_end-iip1
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO 10 l = 1,klevel
 c
@@ -90,4 +91,5 @@
        endif
   10  CONTINUE
+c$OMP END DO NOWAIT
 c
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/diverg_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/diverg_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/diverg_p.F	(revision 709)
@@ -46,4 +46,5 @@
       if(pole_sud)  ije=ij_end-iip1
       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO 10 l = 1,klevel
 c
@@ -88,4 +89,5 @@
 
   10  CONTINUE
+c$OMP END DO NOWAIT
 c
 
@@ -93,4 +95,5 @@
       
 c
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO l = 1, klevel
            DO ij = ijb,ije
@@ -98,4 +101,5 @@
           ENDDO
         ENDDO
+c$OMP END DO NOWAIT
 c
        RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/divergf_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/divergf_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/divergf_p.F	(revision 709)
@@ -45,5 +45,6 @@
       if (pole_nord) ijb=ij_begin+iip1
       if(pole_sud)  ije=ij_end-iip1
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
       DO 10 l = 1,klevel
 c
@@ -53,4 +54,5 @@
      *   cuvsurcv(ij-iim) * y(ij-iim,l) - cuvsurcv(ij+1) * y(ij+1,l) 
         ENDDO
+
 c
 c     ....  correction pour  div( 1,j,l)  ......
@@ -92,4 +94,6 @@
         
   10    CONTINUE
+c$OMP END DO NOWAIT
+
 c
         jjb=jj_begin
@@ -100,4 +104,5 @@
       
 c
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO l = 1, klevel
            DO ij = ijb,ije
@@ -105,4 +110,5 @@
           ENDDO
         ENDDO
+c$OMP END DO NOWAIT
 c
        RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/divgrad2_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/divgrad2_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/divgrad2_p.F	(revision 709)
@@ -1,3 +1,3 @@
-      SUBROUTINE divgrad2_p ( klevel, h, deltapres, lh, divgra )
+      SUBROUTINE divgrad2_p ( klevel, h, deltapres, lh, divgra_out )
 c
 c     P. Le Van
@@ -23,5 +23,7 @@
       INTEGER klevel
       REAL h( ip1jmp1,klevel ), deltapres( ip1jmp1,klevel )
-      REAL divgra( ip1jmp1,klevel)
+      REAL divgra_out( ip1jmp1,klevel)
+      REAL,SAVE :: divgra( ip1jmp1,llm)
+
 c
 c    .......    variables  locales    ..........
@@ -31,6 +33,4 @@
 c    ...................................................................
 
-      EXTERNAL  filtreg
-      EXTERNAL  SCOPY,  laplacien_gam
       INTEGER ijb,ije
 c
@@ -41,12 +41,20 @@
       ijb=ij_begin
       ije=ij_end
-      divgra(ijb:ije,1:klevel)=h(ijb:ije,1:klevel)
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l = 1, klevel
+        divgra(ijb:ije,l)=h(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
 c
+c$OMP BARRIER
+c$OMP MASTER
       call suspend_timer(timer_dissip)
       call exchange_Hallo(divgra,ip1jmp1,llm,1,1)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
       CALL laplacien_p( klevel, divgra, divgra )
-     
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
       DO l = 1, klevel
        DO ij = ijb, ije
@@ -54,5 +62,8 @@
        ENDDO
       ENDDO
+c$OMP END DO NOWAIT
+
 c
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
       DO l = 1, klevel
         DO ij = ijb, ije
@@ -60,11 +71,16 @@
         ENDDO
       ENDDO
+c$OMP END DO NOWAIT
    
 c    ........    Iteration de l'operateur  laplacien_gam    ........
 c
       DO  iter = 1, lh - 2
+c$OMP BARRIER
+c$OMP MASTER
        call suspend_timer(timer_dissip)
        call exchange_Hallo(divgra,ip1jmp1,llm,1,1)
        call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
        CALL laplacien_gam_p ( klevel,cuvscvgam2,cvuscugam2,unsair_gam2,
      *                     unsapolnga2, unsapolsga2,  divgra, divgra )
@@ -72,5 +88,6 @@
 c
 c    ...............................................................
- 
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
       DO l = 1, klevel
         DO ij = ijb, ije
@@ -78,15 +95,23 @@
         ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 c
+c$OMP BARRIER
+c$OMP MASTER
       call suspend_timer(timer_dissip)
       call exchange_Hallo(divgra,ip1jmp1,llm,1,1)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
+
       CALL laplacien_p ( klevel, divgra, divgra )
 c
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l  = 1,klevel
       DO ij = ijb,ije
-      divgra(ij,l) =  nudivgrs * divgra(ij,l) / deltapres(ij,l)
+      divgra_out(ij,l) =  nudivgrs * divgra(ij,l) / deltapres(ij,l)
       ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
       RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/divgrad_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/divgrad_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/divgrad_p.F	(revision 709)
@@ -1,3 +1,3 @@
-      SUBROUTINE divgrad_p (klevel,h, lh, divgra )
+      SUBROUTINE divgrad_p (klevel,h, lh, divgra_out )
       USE parallel
       USE times
@@ -26,5 +26,7 @@
 c
       INTEGER klevel
-      REAL h( ip1jmp1,klevel ), divgra( ip1jmp1,klevel )
+      REAL h( ip1jmp1,klevel ), divgra_out( ip1jmp1,klevel )
+      REAL,SAVE :: divgra( ip1jmp1,llm )
+
 c
       REAL ghy(ip1jm,llm), ghx(ip1jmp1,llm)
@@ -32,6 +34,4 @@
       INTEGER  l,ij,iter,lh
 c
-      EXTERNAL  filtreg
-      EXTERNAL  SCOPY, grad, covcont, diverg
       INTEGER ijb,ije,jjb,jje
 c
@@ -41,6 +41,9 @@
       ijb=ij_begin
       ije=ij_end
-      divgra(ijb:ije,1:klevel)=h(ijb:ije,1:klevel)
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l = 1, klevel      
+      divgra(ijb:ije,l)=h(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
 c
 
@@ -53,15 +56,21 @@
 
 c      call exchange_Hallo(divgra,ip1jmp1,llm,0,1)
-      
+c$OMP BARRIER
+c$OMP MASTER      
       call suspend_timer(timer_dissip)
       call exchange_Hallo(divgra,ip1jmp1,llm,1,1)
       call resume_timer(timer_dissip)
-       
+c$OMP END MASTER
+c$OMP BARRIER       
       CALL    grad_p (klevel,divgra, ghx  , ghy          )
 
+c$OMP BARRIER
+c$OMP MASTER   
       call suspend_timer(timer_dissip)
       call exchange_Hallo(ghy,ip1jm,llm,1,0)
       call resume_timer(timer_dissip)
-      
+c$OMP END MASTER
+c$OMP BARRIER            
+
       CALL  diverg_p (klevel,  ghx , ghy  , divgra       )
 
@@ -70,9 +79,11 @@
       CALL filtreg_p( divgra,jjb,jje,jjp1,klevel,2,1,.true.,1)
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO 5 l = 1,klevel
       DO 4  ij = ijb, ije
-      divgra( ij,l ) = - cdivh * divgra( ij,l )
+      divgra_out( ij,l ) = - cdivh * divgra( ij,l )
    4  CONTINUE
    5  CONTINUE
+c$OMP END DO NOWAIT
 c
   10  CONTINUE
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/dteta1_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/dteta1_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/dteta1_p.F	(revision 709)
@@ -30,8 +30,5 @@
       REAL hbyv( ip1jm,llm ), hbxu( ip1jmp1,llm )
 
-      EXTERNAL     convflu_p
-      EXTERNAL     filtreg_p
 c
-
       INTEGER ijb,ije,jjb,jje
 
@@ -39,5 +36,6 @@
       jjb=jj_begin
       jje=jj_end
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)    
       DO 5 l = 1,llm
       
@@ -73,5 +71,5 @@
 	
    5  CONTINUE
-
+c$OMP END DO NOWAIT
        
 	
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/dudv1_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/dudv1_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/dudv1_p.F	(revision 709)
@@ -26,5 +26,5 @@
 c
       
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
       DO 10 l = 1,llm
 c
@@ -60,4 +60,5 @@
 c
   10  CONTINUE
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/dudv2_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/dudv2_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/dudv2_p.F	(revision 709)
@@ -32,4 +32,5 @@
 c
 c
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO 5 l = 1,llm
 c
@@ -63,4 +64,5 @@
 c
    5  CONTINUE
+c$OMP END DO NOWAIT 
 c
       RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/dynredem_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/dynredem_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/dynredem_p.F	(revision 709)
@@ -147,5 +147,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"controle",NF_DOUBLE,1,idim_index,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"controle",NF_FLOAT,1,idim_index,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
      .                       "Parametres de controle")
@@ -158,5 +164,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"rlonu",NF_DOUBLE,1,idim_rlonu,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"rlonu",NF_FLOAT,1,idim_rlonu,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
      .                       "Longitudes des points U")
@@ -169,5 +181,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"rlatu",NF_DOUBLE,1,idim_rlatu,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"rlatu",NF_FLOAT,1,idim_rlatu,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
      .                       "Latitudes des points U")
@@ -180,5 +198,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"rlonv",NF_DOUBLE,1,idim_rlonv,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"rlonv",NF_FLOAT,1,idim_rlonv,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
      .                       "Longitudes des points V")
@@ -191,5 +215,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"rlatv",NF_DOUBLE,1,idim_rlatv,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"rlatv",NF_FLOAT,1,idim_rlatv,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
      .                       "Latitudes des points V")
@@ -202,5 +232,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"nivsigs",NF_DOUBLE,1,idim_s,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"nivsigs",NF_FLOAT,1,idim_s,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 28,
      .                       "Numero naturel des couches s")
@@ -213,5 +249,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"nivsig",NF_DOUBLE,1,idim_sig,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"nivsig",NF_FLOAT,1,idim_sig,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 32,
      .                       "Numero naturel des couches sigma")
@@ -224,5 +266,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"ap",NF_DOUBLE,1,idim_sig,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"ap",NF_FLOAT,1,idim_sig,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 26,
      .                       "Coefficient A pour hybride")
@@ -235,5 +283,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"bp",NF_DOUBLE,1,idim_sig,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"bp",NF_FLOAT,1,idim_sig,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 26,
      .                       "Coefficient B pour hybride")
@@ -246,5 +300,11 @@
 c
       ierr = NF_REDEF (nid)
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"presnivs",NF_DOUBLE,1,idim_s,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"presnivs",NF_FLOAT,1,idim_s,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_ENDDEF(nid)
 #ifdef NC_DOUBLE
@@ -259,5 +319,11 @@
       dims2(1) = idim_rlonu
       dims2(2) = idim_rlatu
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"cu",NF_DOUBLE,2,dims2,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"cu",NF_FLOAT,2,dims2,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
      .                       "Coefficient de passage pour U")
@@ -272,5 +338,11 @@
       dims2(1) = idim_rlonv
       dims2(2) = idim_rlatv
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"cv",NF_DOUBLE,2,dims2,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"cv",NF_FLOAT,2,dims2,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
      .                       "Coefficient de passage pour V")
@@ -287,5 +359,11 @@
       dims2(1) = idim_rlonv
       dims2(2) = idim_rlatu
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"aire",NF_DOUBLE,2,dims2,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"aire",NF_FLOAT,2,dims2,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
      .                       "Aires de chaque maille")
@@ -302,5 +380,11 @@
       dims2(1) = idim_rlonv
       dims2(2) = idim_rlatu
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"phisinit",NF_DOUBLE,2,dims2,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"phisinit",NF_FLOAT,2,dims2,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
      .                       "Geopotentiel au sol")
@@ -316,5 +400,11 @@
       ierr = NF_REDEF (nid) ! entrer dans le mode de definition
 c
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"temps",NF_DOUBLE,1,idim_tim,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"temps",NF_FLOAT,1,idim_tim,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
      .                       "Temps de simulation")
@@ -329,5 +419,11 @@
       dims4(3) = idim_s
       dims4(4) = idim_tim
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"ucov",NF_DOUBLE,4,dims4,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"ucov",NF_FLOAT,4,dims4,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
      .                       "Vitesse U")
@@ -337,5 +433,11 @@
       dims4(3) = idim_s
       dims4(4) = idim_tim
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"vcov",NF_DOUBLE,4,dims4,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"vcov",NF_FLOAT,4,dims4,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
      .                       "Vitesse V")
@@ -345,5 +447,11 @@
       dims4(3) = idim_s
       dims4(4) = idim_tim
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"teta",NF_DOUBLE,4,dims4,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"teta",NF_FLOAT,4,dims4,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 11,
      .                       "Temperature")
@@ -355,5 +463,11 @@
       IF(nq.GE.1) THEN
       DO iq=1,nq
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,tname(iq),NF_DOUBLE,4,dims4,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,tname(iq),NF_FLOAT,4,dims4,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,ttext(iq))
       ENDDO
@@ -364,5 +478,11 @@
       dims4(3) = idim_s
       dims4(4) = idim_tim
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"masse",NF_DOUBLE,4,dims4,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"masse",NF_FLOAT,4,dims4,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,
      .                       "C est quoi ?")
@@ -371,5 +491,11 @@
       dims3(2) = idim_rlatu
       dims3(3) = idim_tim
+cIM 220306 BEG
+#ifdef NC_DOUBLE
+      ierr = NF_DEF_VAR (nid,"ps",NF_DOUBLE,3,dims3,nvarid)
+#else
       ierr = NF_DEF_VAR (nid,"ps",NF_FLOAT,3,dims3,nvarid)
+#endif
+cIM 220306 END
       ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 15,
      .                       "Pression au sol")
@@ -377,4 +503,5 @@
       ierr = NF_ENDDEF(nid) ! sortir du mode de definition
       ierr = NF_CLOSE(nid) ! fermer le fichier
+
 
       PRINT*,'iim,jjm,llm,iday_end',iim,jjm,llm,iday_end
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/enercin_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/enercin_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/enercin_p.F	(revision 709)
@@ -58,5 +58,5 @@
 c              0.5 * V(i,  j)**2 *( alpha2 + alpha3 )
 
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO 5 l = 1,llm
       
@@ -117,4 +117,5 @@
       
    5  CONTINUE
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/exner_hyb_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/exner_hyb_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/exner_hyb_p.F	(revision 709)
@@ -48,5 +48,5 @@
       REAL xpn, xps
       REAL SSUM
-      EXTERNAL filtreg, SSUM
+      EXTERNAL SSUM
       INTEGER ije,ijb,jje,jjb
 c
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/flumass_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/flumass_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/flumass_p.F	(revision 709)
@@ -37,5 +37,5 @@
       REAL       SSUM
       
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)    
       DO  5 l = 1,llm
 
@@ -61,5 +61,5 @@
 
    5  CONTINUE
-
+c$OMP END DO NOWAIT
 c    ................................................................
 c     calcul de la composante du flux de masse en x aux poles .......
@@ -87,4 +87,5 @@
         saireun= SSUM( iim, aireu(   1     ), 1 )
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)    
         DO l = 1,llm
  
@@ -111,5 +112,6 @@
         
         ENDDO
-      
+c$OMP END DO NOWAIT              
+
       ENDIF
 
@@ -119,5 +121,6 @@
         saires = SSUM( iim,  aire( ip1jm+1 ), 1 )
         saireus= SSUM( iim, aireu( ip1jm+1 ), 1 )
-        
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)    
         DO  l = 1,llm
  
@@ -143,5 +146,5 @@
        
         ENDDO
-         
+c$OMP END DO NOWAIT         
       ENDIF
       
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/fluxstokenc_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/fluxstokenc_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/fluxstokenc_p.F	(revision 709)
@@ -39,5 +39,5 @@
       real tst(1),ist(1),istp(1)
       INTEGER ij,l,irec,i,j,itau
-      INTEGER fluxid, fluxvid,fluxdid
+      INTEGER,SAVE :: fluxid, fluxvid,fluxdid
  
       SAVE iadvtr, massem,pbaruc,pbarvc,irec
@@ -49,4 +49,9 @@
       integer :: ijb,ije,jjb,jje,jjn
       type(Request) :: Req
+
+c AC initialisations
+cym      pbarug(:,:)   = 0.
+cym      pbarvg(:,:,:) = 0.
+cym      wg(:,:)       = 0.
 
       if(first) then
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/fxhyp.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/fxhyp.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/fxhyp.F	(revision 709)
@@ -4,5 +4,5 @@
 c
 c
-       SUBROUTINE fxhyp ( xzoomdeg,grossism,dzoom,tau ,
+       SUBROUTINE fxhyp ( xzoomdeg,grossism,dzooma,tau ,
      , rlonm025,xprimm025,rlonv,xprimv,rlonu,xprimu,rlonp025,xprimp025,
      , champmin,champmax                                               )
@@ -38,5 +38,5 @@
 c     ......  arguments  d'entree   .......
 c
-       REAL xzoomdeg,dzoom,tau,grossism
+       REAL xzoomdeg,dzooma,tau,grossism
 
 c    ......   arguments  de  sortie  ......
@@ -47,4 +47,5 @@
 c     .... variables locales  ....
 c
+       REAL   dzoom
        REAL*8 xlon(iip1),xprimm(iip1),xuv
        REAL*8 xtild(0:nmax2)
@@ -74,12 +75,12 @@
        WRITE(6,*) 'FXHYP scal180,decalx', scal180,decalx
 c
-       IF( dzoom.LT.1.)  THEN
-         dzoom = dzoom * depi
-       ELSEIF( dzoom.LT. 25. ) THEN
-         WRITE(6,*) ' Le param. dzoomy pour fxhyp est trop petit ! L aug
+       IF( dzooma.LT.1.)  THEN
+         dzoom = dzooma * depi
+       ELSEIF( dzooma.LT. 25. ) THEN
+         WRITE(6,*) ' Le param. dzoomx pour fxhyp est trop petit ! L aug
      ,menter et relancer ! '
          STOP 1
        ELSE
-         dzoom = dzoom * pi/180.
+         dzoom = dzooma * pi/180.
        ENDIF
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/fyhyp.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/fyhyp.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/fyhyp.F	(revision 709)
@@ -4,5 +4,5 @@
 c
 c
-       SUBROUTINE fyhyp ( yzoomdeg, grossism, dzoom,tau  ,  
+       SUBROUTINE fyhyp ( yzoomdeg, grossism, dzooma,tau  ,  
      ,  rrlatu,yyprimu,rrlatv,yyprimv,rlatu2,yprimu2,rlatu1,yprimu1 ,
      ,  champmin,champmax                                            ) 
@@ -37,5 +37,5 @@
 c     .......  arguments  d'entree    .......
 c
-       REAL yzoomdeg, grossism,dzoom,tau 
+       REAL yzoomdeg, grossism,dzooma,tau 
 c         ( rentres  par  run.def )
 
@@ -49,4 +49,5 @@
 c
      
+       REAL   dzoom
        REAL*8 ylat(jjp1), yprim(jjp1)
        REAL*8 yuv
@@ -78,12 +79,12 @@
        y0       =  yzoomdeg * pi/180. 
 
-       IF( dzoom.LT.1.)  THEN
-         dzoom = dzoom * pi
-       ELSEIF( dzoom.LT. 12. ) THEN
+       IF( dzooma.LT.1.)  THEN
+         dzoom = dzooma * pi
+       ELSEIF( dzooma.LT. 12. ) THEN
          WRITE(6,*) ' Le param. dzoomy pour fyhyp est trop petit ! L aug
      ,menter et relancer ! '
          STOP 1
        ELSE
-         dzoom = dzoom * pi/180.
+         dzoom = dzooma * pi/180.
        ENDIF
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/gcm.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/gcm.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/gcm.F	(revision 709)
@@ -119,7 +119,4 @@
       REAL      d_h_vcol, d_qt, d_qw, d_ql, d_ec
       CHARACTER*15 ztit
-      INTEGER   ip_ebil_dyn  ! PRINT level for energy conserv. diag.
-      SAVE      ip_ebil_dyn
-      DATA      ip_ebil_dyn/0/
 c-jld 
 
@@ -208,4 +205,5 @@
       call InitDimphy
       call InitBands
+      call MPI_BARRIER(COMM_LMDZ,ierr)
       if (mpi_rank==0) call WriteBands
       call SetDistrib(jj_Nb_Caldyn)
@@ -218,7 +216,8 @@
       enddo
       call Init_Mod_hallo(MPI_Buffer)
-
+c$OMP PARALLEL
+      call init_phys_openmp
       call InitComgeomphy
-
+c$OMP END PARALLEL 
 #ifdef INCA
       call init_inca_dim
@@ -362,6 +361,8 @@
          WRITE(lunout,*)
      .           'WARNING!!! vitesse verticale nulle dans la physique'
+
          CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys ,
      ,                latfi,lonfi,airefi,zcufi,zcvfi,rad,g,r,cpp     )
+
          call_iniphys=.false.
       ENDIF
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/gr_dyn_fi_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/gr_dyn_fi_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/gr_dyn_fi_p.F	(revision 709)
@@ -1,4 +1,5 @@
       SUBROUTINE gr_dyn_fi_p(nfield,im,jm,ngrid,pdyn,pfi)
       USE dimphy
+      USE PARALLEL
       IMPLICIT NONE
 c=======================================================================
@@ -14,5 +15,5 @@
       REAL pfi(ngrid,nfield)
 
-      INTEGER i,j,ig
+      INTEGER i,j,ig,l
 
 c-----------------------------------------------------------------------
@@ -23,12 +24,13 @@
 c   traitement des poles
 c   traitement des point normaux
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,nfield    
        DO ig=1,klon
          i=Liste_i(ig)
          j=Liste_j(ig)
-         pfi(ig,1:nfield)=pdyn(i,j,1:nfield)
+         pfi(ig,l)=pdyn(i,j,l)
        ENDDO
-
-
+      ENDDO
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/gr_fi_dyn_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/gr_fi_dyn_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/gr_fi_dyn_p.F	(revision 709)
@@ -20,5 +20,5 @@
 c   calcul:
 c   -------
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO ifield=1,nfield
 
@@ -44,5 +44,5 @@
       
       ENDDO
-
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/grad_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/grad_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/grad_p.F	(revision 709)
@@ -22,4 +22,5 @@
 c
 c
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO 6 l = 1,klevel
 c
@@ -47,4 +48,6 @@
 c
    6  CONTINUE
+c$OMP END DO NOWAIT
+
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/gradiv2_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/gradiv2_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/gradiv2_p.F	(revision 709)
@@ -1,3 +1,3 @@
-      SUBROUTINE gradiv2_p(klevel, xcov, ycov, ld, gdx, gdy )
+      SUBROUTINE gradiv2_p(klevel, xcov, ycov, ld, gdx_out, gdy_out )
 c
 c     P. Le Van
@@ -27,9 +27,10 @@
       INTEGER klevel
       REAL  xcov( ip1jmp1,klevel ), ycov( ip1jm,klevel )
-      REAL   gdx( ip1jmp1,klevel ),  gdy( ip1jm,klevel )
+      REAL,SAVE ::  gdx( ip1jmp1,llm ),  gdy( ip1jm,llm )
+      REAL   gdx_out( ip1jmp1,klevel ), gdy_out( ip1jm,klevel )
 c
 c     ........       variables locales       .........
 c
-      REAL div(ip1jmp1,llm)
+      REAL,SAVE :: div(ip1jmp1,llm)
       REAL signe, nugrads
       INTEGER l,ij,iter,ld
@@ -38,5 +39,4 @@
 c    ........................................................
 c
-      EXTERNAL   SCOPY, divergf, grad, laplacien_gam, filtreg
 c
 c      CALL SCOPY( ip1jmp1 * klevel, xcov, 1, gdx, 1 )
@@ -45,15 +45,28 @@
       ijb=ij_begin
       ije=ij_end
-      gdx(ijb:ije,1:klevel)=xcov(ijb:ije,1:klevel)
-
+      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO   l = 1, klevel
+        gdx(ijb:ije,l)=xcov(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT      
       
       ijb=ij_begin
       ije=ij_end
       if(pole_sud) ije=ij_end-iip1
-      gdy(ijb:ije,1:klevel)=ycov(ijb:ije,1:klevel)
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
+      DO   l = 1, klevel
+        gdy(ijb:ije,l)=ycov(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
+
+c$OMP BARRIER
+c$OMP MASTER      
       call suspend_timer(timer_dissip)
       call exchange_Hallo(gdy,ip1jm,llm,1,0)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
 c
 c
@@ -67,9 +80,11 @@
 
       IF( ld.GT.1 )   THEN
-        
+c$OMP BARRIER
+c$OMP MASTER        
 	call suspend_timer(timer_dissip)
         call exchange_Hallo(div,ip1jmp1,llm,1,1)
         call resume_timer(timer_dissip)
-        
+c$OMP END MASTER        
+c$OMP BARRIER
 	CALL laplacien_p ( klevel, div,  div     )
 
@@ -78,7 +93,11 @@
 
         DO iter = 1, ld -2
+c$OMP BARRIER
+c$OMP MASTER
 	 call suspend_timer(timer_dissip)
          call exchange_Hallo(div,ip1jmp1,llm,1,1)
 	 call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
          CALL laplacien_gam ( klevel,cuvscvgam1,cvuscugam1,unsair_gam1,
      *                       unsapolnga1, unsapolsga1,  div, div       )
@@ -92,9 +111,11 @@
        CALL filtreg_p( div   ,jjb,jje, jjp1, klevel, 2, 1, .TRUE., 1 )
 c       call exchange_Hallo(div,ip1jmp1,llm,0,1)
-        
+c$OMP BARRIER
+c$OMP MASTER        
 	call suspend_timer(timer_dissip)
 	call exchange_Hallo(div,ip1jmp1,llm,1,1)
         call resume_timer(timer_dissip)
-
+c$OMP END MASTER
+c$OMP BARRIER
 c       call write_field3d_p('div4',reshape(div,(/iip1,jjp1,llm/)))
        CALL  grad_p  ( klevel,  div,   gdx,  gdy             )
@@ -104,18 +125,19 @@
       ije=ij_end
          
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
        DO   l = 1, klevel
          
          if (pole_sud) ije=ij_end
          DO  ij = ijb, ije
-          gdx( ij,l ) = gdx( ij,l ) * nugrads
+          gdx_out( ij,l ) = gdx( ij,l ) * nugrads
          ENDDO
          
          if (pole_sud) ije=ij_end-iip1
          DO  ij = ijb, ije
-          gdy( ij,l ) = gdy( ij,l ) * nugrads
+          gdy_out( ij,l ) = gdy( ij,l ) * nugrads
          ENDDO
        
        ENDDO
+c$OMP END DO NOWAIT
 c
        RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/gradiv_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/gradiv_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/gradiv_p.F	(revision 709)
@@ -1,3 +1,3 @@
-      SUBROUTINE gradiv_p(klevel, xcov, ycov, ld, gdx, gdy )
+      SUBROUTINE gradiv_p(klevel, xcov, ycov, ld, gdx_out, gdy_out )
 c
 c    Auteur :   P. Le Van
@@ -26,12 +26,12 @@
 c
       REAL xcov( ip1jmp1,klevel ), ycov( ip1jm,klevel )
-      REAL gdx( ip1jmp1,klevel ),   gdy( ip1jm,klevel )
+      REAL,SAVE :: gdx( ip1jmp1,llm ),   gdy( ip1jm,llm )
 
-      REAL div(ip1jmp1,llm)
+      REAL gdx_out( ip1jmp1,klevel ),   gdy_out( ip1jm,klevel )
+
+      REAL,SAVE ::  div(ip1jmp1,llm)
 
       INTEGER l,ij,iter,ld
 c
-      EXTERNAL   SCOPY, diverg,  grad
-      EXTERNAL   filtreg
       INTEGER ijb,ije,jjb,jje
 c
@@ -42,18 +42,32 @@
       ijb=ij_begin
       ije=ij_end
-      gdx(ijb:ije,1:klevel)=xcov(ijb:ije,1:klevel)
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
+      DO l = 1,klevel
+        gdx(ijb:ije,l)=xcov(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
+      
       ijb=ij_begin
       ije=ij_end
       if(pole_sud) ije=ij_end-iip1
-      gdy(ijb:ije,1:klevel)=ycov(ijb:ije,1:klevel)
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
+      DO l = 1,klevel
+        gdy(ijb:ije,l)=ycov(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
+
 c
       DO 10 iter = 1,ld
-      
+
+c$OMP BARRIER
+c$OMP MASTER      
       call suspend_timer(timer_dissip)
       call exchange_Hallo(gdy,ip1jm,llm,1,0)
       call resume_timer(timer_dissip)
-      
+c$OMP END MASTER      
+c$OMP BARRIER
+
       CALL  diverg_p( klevel,  gdx , gdy, div          )
       
@@ -63,24 +77,31 @@
       
 c      call exchange_Hallo(div,ip1jmp1,llm,0,1)
-      
+
+c$OMP BARRIER
+c$OMP MASTER       
       call suspend_timer(timer_dissip)
       call exchange_Hallo(div,ip1jmp1,llm,1,1)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
       
       CALL    grad_p( klevel,  div, gdx, gdy           )
 c
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO 5  l = 1, klevel
       
       if(pole_sud) ije=ij_end
       DO 3 ij = ijb, ije
-        gdx( ij,l ) = - gdx( ij,l ) * cdivu
+        gdx_out( ij,l ) = - gdx( ij,l ) * cdivu
    3  CONTINUE
    
       if(pole_sud) ije=ij_end-iip1
       DO 4 ij = ijb, ije
-        gdy( ij,l ) = - gdy( ij,l ) * cdivu
+        gdy_out( ij,l ) = - gdy( ij,l ) * cdivu
    4  CONTINUE
 
    5  CONTINUE
+c$OMP END DO NOWAIT
 c
   10  CONTINUE
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/gradsdef.h
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/gradsdef.h	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/gradsdef.h	(revision 709)
@@ -3,5 +3,5 @@
 !
       integer nfmx,imx,jmx,lmx,nvarmx
-      parameter(nfmx=10,imx=200,jmx=150,lmx=20,nvarmx=1000)
+      parameter(nfmx=10,imx=200,jmx=150,lmx=200,nvarmx=1000)
 
       real xd(imx,nfmx),yd(jmx,nfmx),zd(lmx,nfmx),dtime(nfmx)
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/grid_noro.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/grid_noro.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/grid_noro.F	(revision 709)
@@ -53,4 +53,5 @@
 c             zval:  Minimum altitude
 C=======================================================================
+
       IMPLICIT INTEGER (I,J)
       IMPLICIT REAL(X,Z) 
@@ -79,4 +80,5 @@
       REAL x(imar+1),y(jmar),zphi(imar+1,jmar)
       REAL zmea(imar+1,jmar),zstd(imar+1,jmar)
+      REAL zmea0(imar+1,jmar) ! GK211005 (CG)
       REAL zsig(imar+1,jmar),zgam(imar+1,jmar),zthe(imar+1,jmar)
       REAL zpic(imar+1,jmar),zval(imar+1,jmar)
@@ -309,4 +311,5 @@
 C  FIRST FILTER, MOVING AVERAGE OVER 9 POINTS.
 
+       zmea0(:,:) = zmea(:,:) ! GK211005 (CG) on sauvegarde la topo non lissee
        CALL MVA9(zmea,iim+1,jjm+1)
        CALL MVA9(zstd,iim+1,jjm+1)
@@ -353,5 +356,8 @@
 c angle theta:
            zthe(ii,jj)=57.29577951*atan2(xm,xl)/2.*mask_tmp(ii,jj)
-           zphi(ii,jj)=zmea(ii,jj)*mask_tmp(ii,jj)
+           ! GK211005 (CG) ne pas forcement lisser la topo
+           ! zphi(ii,jj)=zmea(ii,jj)*mask_tmp(ii,jj)
+           zphi(ii,jj)=zmea0(ii,jj)*mask_tmp(ii,jj)
+           !
            zmea(ii,jj)=zmea(ii,jj)*mask_tmp(ii,jj)
            zpic(ii,jj)=zpic(ii,jj)*mask_tmp(ii,jj)
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/grilles_gcm_netcdf.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/grilles_gcm_netcdf.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/grilles_gcm_netcdf.F	(revision 709)
@@ -73,6 +73,6 @@
 
       do i=1,iip1
-         rlonudeg(i)=rlonu(i)*180./pi
-         rlonvdeg(i)=rlonv(i)*180./pi
+         rlonudeg(i)=rlonu(i)*180./pi + 360.
+         rlonvdeg(i)=rlonv(i)*180./pi + 360.
       enddo
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/groupe_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/groupe_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/groupe_p.F	(revision 709)
@@ -30,5 +30,6 @@
       real wm(iip1,jjp1,llm)
 
-      real zconvm(iip1,jjp1,llm),zconvmm(iip1,jjp1,llm)
+      real,save :: zconvm(iip1,jjp1,llm)
+      real,save :: zconvmm(iip1,jjp1,llm)
 
       real uu
@@ -38,4 +39,5 @@
       logical firstcall
       save firstcall
+c$OMP THREADPRIVATE(firstcall)
 
       data firstcall/.true./
@@ -57,5 +59,11 @@
       jjb=jj_begin
       jje=jj_end
-      zconvmm(:,jjb:jje,:)=zconvm(:,jjb:jje,:)
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
+      do l=1,llm
+        zconvmm(:,jjb:jje,l)=zconvm(:,jjb:jje,l)
+      enddo
+c$OMP END DO NOWAIT
+
       call groupeun_p(jjp1,llm,jjb,jje,zconvmm)
       
@@ -64,5 +72,10 @@
       if (pole_nord) jjb=jj_begin
       if (pole_sud)  jje=jj_end-1
-      pbarvm(:,jjb:jje,:)=pbarv(:,jjb:jje,:)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
+      do l=1,llm
+        pbarvm(:,jjb:jje,l)=pbarv(:,jjb:jje,l)
+      enddo
+c$OMP END DO NOWAIT
+
       call groupeun_p(jjm,llm,jjb,jje,pbarvm)
 
@@ -74,4 +87,5 @@
       if (pole_sud)  jje=jj_end-1
       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       do l=1,llm
          do j=jjb,jje
@@ -86,18 +100,12 @@
          enddo
       enddo
-
+c$OMP END DO NOWAIT
 c    integration de la convergence de masse de haut  en bas ......
    
       jjb=jj_begin
       jje=jj_end
-      
-      do l=1,llm
-         do j=jjb,jje
-            do i=1,iip1
-               zconvmm(i,j,l)=zconvmm(i,j,l)
-            enddo
-         enddo
-      enddo
-      
+
+c$OMP BARRIER
+c$OMP MASTER      
       do  l = llm-1,1,-1
           do j=jjb,jje
@@ -107,9 +115,13 @@
           enddo
       enddo
-      
+
       if (.not. pole_sud) then
         zconvmm(:,jj_end+1,:)=0
-	wm(:,jj_end+1,:)=0
+cym	wm(:,jj_end+1,:)=0
       endif
+      
+c$OMP END MASTER
+c$OMP BARRIER      
+
       CALL vitvert_p(zconvmm(1,1,1),wm(1,1,1))
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/groupeun_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/groupeun_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/groupeun_p.F	(revision 709)
@@ -21,4 +21,5 @@
 Champs 3D
       jd=jjp1-jjmax
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       do l=1,llm
       j1=1+jd
@@ -72,5 +73,5 @@
       enddo
       enddo
-
+c$OMP END DO NOWAIT
       return
       end
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/guide_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/guide_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/guide_p.F	(revision 709)
@@ -82,10 +82,10 @@
       INTEGER step_rea,count_no_rea
 
-      real aire_min,aire_max
+c      real aire_min,aire_max
       integer ilon,ilat
       real factt,ztau(ip1jmp1)
 
       INTEGER itau,ij,l,i,j
-      integer ncidt,varidpl,nlev,status
+      integer ncidpl,varidpl,nlev,status
       integer rcod,rid 
       real ditau,tau,a
@@ -218,18 +218,35 @@
          step_rea=1
          count_no_rea=0
-
+         ncidpl=-99
 c    itau_test    montre si l'importation a deja ete faite au rang itau
 c lecture d'un fichier netcdf pour determiner le nombre de niveaux
-         if (mpi_rank==0) then
-	 ncidt=NCOPN('T.nc',NCNOWRIT,rcod)
+         IF (mpi_rank==0) THEN
+	
+         if (guide_u) then
+           if (ncidpl.eq.-99) ncidpl=NCOPN('u.nc',NCNOWRIT,rcod)
+         endif
+c
+         if (guide_v) then
+           if (ncidpl.eq.-99) ncidpl=NCOPN('v.nc',NCNOWRIT,rcod)
+         endif
+c
+         if (guide_T) then
+           if (ncidpl.eq.-99) ncidpl=NCOPN('T.nc',NCNOWRIT,rcod)
+         endif
+c
+         if (guide_Q) then
+           if (ncidpl.eq.-99) ncidpl=NCOPN('hur.nc',NCNOWRIT,rcod)
+         endif
+c
          if (ncep) then
-          status=NF_INQ_DIMID(ncidt,'LEVEL',rid)
+          status=NF_INQ_DIMID(ncidpl,'LEVEL',rid)
          else
-          status=NF_INQ_DIMID(ncidt,'PRESSURE',rid)
-         endif
-          status=NF_INQ_DIMLEN(ncidt,rid,nlev)
+          status=NF_INQ_DIMID(ncidpl,'PRESSURE',rid)
+         endif
+          status=NF_INQ_DIMLEN(ncidpl,rid,nlev)
          print *,'nlev', nlev 
-          call ncclos(ncidt,rcod)
-	 endif
+          call ncclos(ncidpl,rcod)
+	 
+	 ENDIF
 	 
 c   Lecture du premier etat des reanalyses.
@@ -338,6 +355,4 @@
       tau=tau-aint(tau)
 
-      print*,'ATTENTION !!!! ON NE GUIDE QUE JUSQU A 15N'
-
 c  ucov
       ijb=ij_begin
@@ -532,6 +547,9 @@
                zlat=rlatv(j)*180./pi
             endif
+          if (abs(grossismx-1.).lt.0.1.or.abs(grossismy-1.).lt.0.1) then
+c  pour une grille reguliere, xi=xxx**0=1 -> alpha=alphamin
+             alpha(i,j)=alphamin
+          else
             xi=((dxdy_max-dxdy_)/(dxdy_max-dxdy_min))**gamma
-c  pour une grille reguliere, xi=xxx**0=1 -> alpha=alphamin
             xi=min(xi,1.)
             if(lat_min_guide.le.zlat .and. zlat.le.lat_max_guide) then
@@ -540,4 +558,5 @@
                alpha(i,j)=0.
             endif
+          endif
          enddo
       enddo
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/iniadvtrac.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/iniadvtrac.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/iniadvtrac.F	(revision 709)
@@ -193,5 +193,9 @@
          str1=tnom(iq)
          tname(iiq)=tnom(iq)
-         ttext(iiq)=str1(1:lnblnk(str1))//descrq(iadv(iiq))
+         IF (iadv(iiq).eq.0) THEN
+           ttext(iiq)=str1(1:lnblnk(str1))
+         ELSE
+           ttext(iiq)=str1(1:lnblnk(str1))//descrq(iadv(iiq))
+         ENDIF
          str2=ttext(iiq)
 c   schemas tenant compte des moments d'ordre superieur.
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/integrd_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/integrd_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/integrd_p.F	(revision 709)
@@ -4,5 +4,5 @@
       SUBROUTINE integrd_p
      $  (  nq,vcovm1,ucovm1,tetam1,psm1,massem1,
-     $     dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis,finvmaold )
+     $     dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps0,masse,phis,finvmaold)
       USE parallel
       IMPLICIT NONE
@@ -41,5 +41,5 @@
       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
       REAL q(ip1jmp1,llm,nq)
-      REAL ps(ip1jmp1),masse(ip1jmp1,llm),phis(ip1jmp1)
+      REAL ps0(ip1jmp1),masse(ip1jmp1,llm),phis(ip1jmp1)
 
       REAL vcovm1(ip1jm,llm),ucovm1(ip1jmp1,llm)
@@ -55,5 +55,5 @@
       REAL vscr( ip1jm ),uscr( ip1jmp1 ),hscr( ip1jmp1 ),pscr(ip1jmp1)
       REAL massescr( ip1jmp1,llm ), finvmasse(ip1jmp1,llm)
-      REAL p(ip1jmp1,llmp1)
+      REAL,SAVE :: p(ip1jmp1,llmp1)
       REAL tpn,tps,tppn(iim),tpps(iim)
       REAL qpn,qps,qppn(iim),qpps(iim)
@@ -62,12 +62,12 @@
       INTEGER  l,ij,iq
 
-      EXTERNAL  filtreg,massdair,pression
-      EXTERNAL  SCOPY 
       REAL SSUM
       EXTERNAL SSUM
       INTEGER ijb,ije,jjb,jje
+      REAL,SAVE :: ps(ip1jmp1)
 c-----------------------------------------------------------------------
+     
       if (pole_nord) THEN
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO  l = 1,llm
           DO  ij = 1,iip1
@@ -76,9 +76,9 @@
            ENDDO
         ENDDO
-      
+c$OMP END DO NOWAIT        
       ENDIF
 
       if (pole_sud) THEN
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
         DO  l = 1,llm
           DO  ij = 1,iip1
@@ -87,5 +87,5 @@
           ENDDO
         ENDDO
-      
+c$OMP END DO NOWAIT      
       ENDIF
 
@@ -96,8 +96,13 @@
       ijb=ij_begin
       ije=ij_end
-      massescr(ijb:ije,:)=masse(ijb:ije,:)
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
+      DO  l = 1,llm
+        massescr(ijb:ije,l)=masse(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT 
+
+c$OMP MASTER      
       DO 2 ij = ijb,ije
-       pscr (ij)    = ps(ij)
+       pscr (ij)    = ps0(ij)
        ps (ij)      = psm1(ij) + dt * dp(ij)
    2  CONTINUE
@@ -133,8 +138,12 @@
       
       ENDIF
+c$OMP END MASTER
+c$OMP BARRIER
 c
 c  ... Calcul  de la nouvelle masse d'air au dernier temps integre t+1 ...
 c
+
       CALL pression_p ( ip1jmp1, ap, bp, ps, p )
+c$OMP BARRIER
       CALL massdair_p (     p  , masse         )
 
@@ -142,5 +151,10 @@
       ijb=ij_begin
       ije=ij_end
-      finvmasse(ijb:ije,:)=masse(ijb:ije,:)
+      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
+      DO  l = 1,llm
+        finvmasse(ijb:ije,l)=masse(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
 
       jjb=jj_begin
@@ -151,4 +165,5 @@
 c    ............   integration  de  ucov, vcov,  h     ..............
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
       DO 10 l = 1,llm
       
@@ -225,5 +240,5 @@
 
   10  CONTINUE
-
+c$OMP END DO NOWAIT
 
 c
@@ -233,5 +248,5 @@
       ije=ij_end
       
-
+c$OMP MASTER
          DO l = 1, llm
           DO ij = ijb, ije
@@ -282,8 +297,15 @@
       
       ENDIF
+      
+c$OMP END MASTER
+c$OMP BARRIER
 
 c         CALL  SCOPY( ijp1llm , finvmasse, 1, finvmaold, 1 )
-      
-      finvmaold(ijb:ije,:)=finvmasse(ijb:ije,:)        
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l = 1, llm      
+        finvmaold(ijb:ije,l)=finvmasse(ijb:ije,l)        
+      ENDDO
+c$OMP END DO NOWAIT
 c
 c
@@ -292,4 +314,7 @@
 15    continue
 
+c$OMP MASTER
+        ps0(ijb:ije)=ps(ijb:ije)
+c$OMP END MASTER
 c    .................................................................
 
@@ -298,6 +323,13 @@
 c       CALL SCOPY (    ip1jmp1 ,  pscr   , 1,   psm1  , 1 )
 c       CALL SCOPY ( ip1jmp1*llm, massescr, 1,  massem1, 1 )
+c$OMP MASTER
         psm1(ijb:ije)=pscr(ijb:ije)
-        massem1(ijb:ije,:)=massescr(ijb:ije,:)
+c$OMP END MASTER
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+          DO l = 1, llm
+            massem1(ijb:ije,l)=massescr(ijb:ije,l)
+	  ENDDO
+c$OMP END DO NOWAIT	  
       END IF
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_gam_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_gam_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_gam_p.F	(revision 709)
@@ -31,8 +31,6 @@
 c    ......................................................
 
-      EXTERNAL  filtreg
-      EXTERNAL  SCOPY, grad, divergst
       INTEGER :: ijb,ije
-      
+      INTEGER :: l      
 c
 c
@@ -49,5 +47,10 @@
       if (pole_sud ) ije=ij_end
       
-      divgra(ijb:ije,klevel)=teta(ijb:ije,klevel)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,klevel      
+        divgra(ijb:ije,l)=teta(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
+
 c
       CALL   grad_p ( klevel, divgra, ghx, ghy )
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_p.F	(revision 709)
@@ -21,4 +21,5 @@
       INTEGER klevel
       REAL teta( ip1jmp1,klevel ), divgra( ip1jmp1,klevel )
+      INTEGER :: l
 c
 c    ............     variables  locales      ..............
@@ -27,5 +28,4 @@
 c    .......................................................
 
-      EXTERNAL  SCOPY, grad, divergf, filtreg
       
       INTEGER :: ijb,ije,jjb,jje
@@ -37,6 +37,10 @@
       if (pole_nord) ijb=ij_begin
       if (pole_sud ) ije=ij_end
-      
-      divgra(ijb:ije,klevel)=teta(ijb:ije,klevel)
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO l=1,klevel      
+        divgra(ijb:ije,l)=teta(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
       
       jjb=jj_begin-1
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_rot_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_rot_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_rot_p.F	(revision 709)
@@ -28,5 +28,4 @@
 c   ........................................................
 c
-      EXTERNAL  filtreg, nxgrad, rotatf
 c
       INTEGER :: ijb,ije,jjb,jje
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_rotgam_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_rotgam_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/laplacien_rotgam_p.F	(revision 709)
@@ -28,5 +28,4 @@
 c   ........................................................
 c
-      EXTERNAL   nxgrad_gam, rotat_nfil
       INTEGER :: ijb,ije
       
@@ -39,5 +38,5 @@
       ije=ij_end
       if(pole_sud) ije=ij_end-iip1
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO l = 1, klevel
         DO ij = ijb, ije
@@ -45,5 +44,5 @@
         ENDDO
       ENDDO
-
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/leapfrog_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/leapfrog_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/leapfrog_p.F	(revision 709)
@@ -1,3 +1,3 @@
-!
+! 
 ! $Header$
 !
@@ -75,4 +75,6 @@
 
 #include "academic.h"
+#include "clesphys.h"
+
       
       include 'mpif.h'
@@ -160,7 +162,7 @@
       REAL      d_h_vcol, d_qt, d_qw, d_ql, d_ec
       CHARACTER*15 ztit
-      INTEGER   ip_ebil_dyn  ! PRINT level for energy conserv. diag.
-      SAVE      ip_ebil_dyn
-      DATA      ip_ebil_dyn/0/
+!      INTEGER   ip_ebil_dyn  ! PRINT level for energy conserv. diag.
+!      SAVE      ip_ebil_dyn
+!      DATA      ip_ebil_dyn/0/
 c-jld 
 
@@ -198,5 +200,5 @@
       INTEGER :: iapptrac = 0
       INTEGER :: AdjustCount = 0
-      
+      INTEGER :: var_time
       ItCount=0
       
@@ -229,5 +231,5 @@
    1  CONTINUE
 
-      call MPI_BARRIER(MPI_COMM_WORLD,ierr)
+      call MPI_BARRIER(COMM_LMDZ,ierr)
 
 #ifdef CPP_IOIPSL
@@ -295,5 +297,5 @@
 
       ItCount=ItCount+1
-      if (MOD(ItCount,10000)==0) then
+      if (MOD(ItCount,1)==1) then
         debug=.true.
       else
@@ -315,5 +317,5 @@
       conser = .FALSE.
       apdiss = .FALSE.
-
+c      idissip=1
       IF( purmats ) THEN
          IF( MOD(itau,iconser) .EQ.0.AND.  forward    ) conser = .TRUE.
@@ -469,6 +471,6 @@
        call VTe(VThallo)
 
+      
       if (debug) then	
-             
         call WriteField_p('ucov',reshape(ucov,(/iip1,jmp1,llm/)))
         call WriteField_p('vcov',reshape(vcov,(/iip1,jjm,llm/)))
@@ -484,5 +486,5 @@
 c        enddo        
       endif
-      
+ 
 
       
@@ -497,9 +499,17 @@
       
       call VTb(VTcaldyn)
-      
+
+      var_time=time+iday-day_ini
+      OMP_CHUNK=5
+c$OMP PARALLEL DEFAULT(SHARED) 
+cc$OMP+         SHARED(itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
+cc$OMP+                phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, 
+cc$OMP+                var_time)      
+
       CALL caldyn_p 
      $  ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
      $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time+iday-day_ini )
-      
+
+c$OMP END PARALLEL      
       call VTe(VTcaldyn)
 c      call WriteField_p('du',reshape(du,(/iip1,jmp1,llm/)))
@@ -516,5 +526,5 @@
 
       IF( forward. OR . leapf )  THEN
-
+c$OMP PARALLEL DEFAULT(SHARED) 
 c
 #ifdef INCA_CH4
@@ -530,12 +540,14 @@
      .             pk,iapptrac)
 #endif
+
+c$OMP END PARALLEL
+
 c      do j=1,nqmx
 c        call WriteField_p('q'//trim(int2str(j)),
-c    .                reshape(q(:,:,j),(/iip1,jmp1,llm/)))
+c     .                reshape(q(:,:,j),(/iip1,jmp1,llm/)))
 c        call WriteField_p('dq'//trim(int2str(j)),
 c     .                reshape(dq(:,:,j),(/iip1,jmp1,llm/)))
 c      enddo
-
-         IF (offline) THEN
+       IF (offline) THEN
 Cmaf stokage du flux de masse pour traceurs OFF-LINE
 
@@ -556,9 +568,31 @@
  
        call VTb(VTintegre)
+c      call WriteField_p('ucovm1',reshape(ucovm1,(/iip1,jmp1,llm/)))
+c      call WriteField_p('vcovm1',reshape(vcovm1,(/iip1,jjm,llm/)))
+c      call WriteField_p('tetam1',reshape(tetam1,(/iip1,jmp1,llm/)))
+c      call WriteField_p('psm1',reshape(psm1,(/iip1,jmp1/)))
+c      call WriteField_p('ucov',reshape(ucov,(/iip1,jmp1,llm/)))
+c      call WriteField_p('vcov',reshape(vcov,(/iip1,jjm,llm/)))
+c      call WriteField_p('teta',reshape(teta,(/iip1,jmp1,llm/)))
+c      call WriteField_p('ps',reshape(ps,(/iip1,jmp1/)))
+c$OMP PARALLEL DEFAULT(SHARED)
        CALL integrd_p ( 2,vcovm1,ucovm1,tetam1,psm1,massem1 ,
      $         dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis ,
      $              finvmaold                                    )
 
+c$OMP END PARALLEL
+c      call WriteField_p('ucovm1',reshape(ucovm1,(/iip1,jmp1,llm/)))
+c      call WriteField_p('vcovm1',reshape(vcovm1,(/iip1,jjm,llm/)))
+c      call WriteField_p('tetam1',reshape(tetam1,(/iip1,jmp1,llm/)))
+c      call WriteField_p('psm1',reshape(psm1,(/iip1,jmp1/)))
+c      call WriteField_p('ucov',reshape(ucov,(/iip1,jmp1,llm/)))
+c      call WriteField_p('vcov',reshape(vcov,(/iip1,jjm,llm/)))
+c      call WriteField_p('teta',reshape(teta,(/iip1,jmp1,llm/)))
+c      call WriteField_p('dteta',reshape(dteta,(/iip1,jmp1,llm/)))
+
+c      call WriteField_p('ps',reshape(ps,(/iip1,jmp1/)))
+ 
        call VTe(VTintegre)
+
 c .P.Le Van (26/04/94  ajout de  finvpold dans l'appel d'integrd)
 c
@@ -579,6 +613,12 @@
 c     .......   Ajout   P.Le Van ( 17/04/96 )   ...........
 c
+c$OMP PARALLEL DEFAULT(SHARED)
+c$OMP+         PRIVATE(rdaym_ini,rdayvrai,ijb,ije)
+
+c$OMP MASTER
          call suspend_timer(timer_caldyn)
          print*,'Entree dans la physique : Iteration No ',true_itau
+c$OMP END MASTER
+
          CALL pression_p (  ip1jmp1, ap, bp, ps,  p      )
          CALL exner_hyb_p(  ip1jmp1, ps, p,alpha,beta,pks, pk, pkf )
@@ -605,4 +645,6 @@
       ENDIF 
 c-jld
+c$OMP BARRIER
+c$OMP MASTER
         call VTb(VThallo)
         call SetTag(Request_physic,800)
@@ -650,4 +692,7 @@
 	
 	call VTb(VTphysiq)
+c$OMP END MASTER
+c$OMP BARRIER
+	
         CALL calfis_p( nq, lafin ,rdayvrai,time  ,
      $               ucov,vcov,teta,q,masse,ps,p,pk,phis,phi ,
@@ -657,15 +702,23 @@
 #endif
      $               clesphy0, dufi,dvfi,dtetafi,dqfi,dpfi  )
-     
         ijb=ij_begin
         ije=ij_end  
         if ( .not. pole_nord) then
-          dufi_tmp(1:iip1,:)   = dufi(ijb:ijb+iim,:) 
-          dvfi_tmp(1:iip1,:)   = dvfi(ijb:ijb+iim,:)  
-          dtetafi_tmp(1:iip1,:)= dtetafi(ijb:ijb+iim,:)  
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+          DO l=1,llm
+          dufi_tmp(1:iip1,l)   = dufi(ijb:ijb+iim,l) 
+          dvfi_tmp(1:iip1,l)   = dvfi(ijb:ijb+iim,l)  
+          dtetafi_tmp(1:iip1,l)= dtetafi(ijb:ijb+iim,l)  
+          dqfi_tmp(1:iip1,l,:) = dqfi(ijb:ijb+iim,l,:)  
+          ENDDO
+c$OMP END DO NOWAIT
+
+c$OMP MASTER
           dpfi_tmp(1:iip1)     = dpfi(ijb:ijb+iim)  
-          dqfi_tmp(1:iip1,:,:) = dqfi(ijb:ijb+iim,:,:)  
-        endif
-        
+c$OMP END MASTER
+	endif
+
+c$OMP BARRIER
+c$OMP MASTER
 	call SetDistrib(jj_nb_Physic_bis)
 
@@ -695,20 +748,32 @@
  
         call SetDistrib(jj_nb_Physic)
-	
+c$OMP END MASTER
+c$OMP BARRIER	
 	        ijb=ij_begin
 	if (.not. pole_nord) then
-          dufi(ijb:ijb+iim,:) = dufi(ijb:ijb+iim,:)+dufi_tmp(1:iip1,:)
-          dvfi(ijb:ijb+iim,:) = dvfi(ijb:ijb+iim,:)+dvfi_tmp(1:iip1,:) 
-          dtetafi(ijb:ijb+iim,:) = dtetafi(ijb:ijb+iim,:)
-     &	                         +dtetafi_tmp(1:iip1,:)
+	
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+          DO l=1,llm
+            dufi(ijb:ijb+iim,l) = dufi(ijb:ijb+iim,l)+dufi_tmp(1:iip1,l)
+            dvfi(ijb:ijb+iim,l) = dvfi(ijb:ijb+iim,l)+dvfi_tmp(1:iip1,l) 
+            dtetafi(ijb:ijb+iim,l) = dtetafi(ijb:ijb+iim,l)
+     &                              +dtetafi_tmp(1:iip1,l)
+            dqfi(ijb:ijb+iim,l,:) = dqfi(ijb:ijb+iim,l,:)
+     &                              + dqfi_tmp(1:iip1,l,:)
+          ENDDO
+c$OMP END DO NOWAIT
+
+c$OMP MASTER
           dpfi(ijb:ijb+iim)   = dpfi(ijb:ijb+iim)+ dpfi_tmp(1:iip1)
-          dqfi(ijb:ijb+iim,:,:) = dqfi(ijb:ijb+iim,:,:)
-     &                           + dqfi_tmp(1:iip1,:,:)
+c$OMP END MASTER
+	  
         endif
-	
+c$OMP BARRIER
+cc$OMP MASTER	
 c      call WriteField_p('dufi',reshape(dufi,(/iip1,jmp1,llm/)))
 c      call WriteField_p('dvfi',reshape(dvfi,(/iip1,jjm,llm/)))
 c      call WriteField_p('dtetafi',reshape(dtetafi,(/iip1,jmp1,llm/)))
 c      call WriteField_p('dpfi',reshape(dpfi,(/iip1,jmp1/)))
+cc$OMP END MASTER
 c      
 c      do j=1,nqmx
@@ -723,4 +788,6 @@
      $                 dufi, dvfi, dtetafi , dqfi ,dpfi  )
 
+c$OMP BARRIER
+c$OMP MASTER
         call VTe(VTphysiq)
 
@@ -765,4 +832,6 @@
 
         call SetDistrib(jj_Nb_caldyn)
+c$OMP END MASTER
+c$OMP BARRIER
 c
 c  Diagnostique de conservation de l'énergie : difference
@@ -772,10 +841,13 @@
      e  , ucov    , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2))
       ENDIF 
-      
-      if (debug) then
-       call WriteField_p('ucovfi',reshape(ucov,(/iip1,jmp1,llm/)))
-       call WriteField_p('vcovfi',reshape(vcov,(/iip1,jjm,llm/)))
-       call WriteField_p('tetafi',reshape(teta,(/iip1,jmp1,llm/)))
-      endif
+
+cc$OMP MASTER      
+c      if (debug) then
+c       call WriteField_p('ucovfi',reshape(ucov,(/iip1,jmp1,llm/)))
+c       call WriteField_p('vcovfi',reshape(vcov,(/iip1,jjm,llm/)))
+c       call WriteField_p('tetafi',reshape(teta,(/iip1,jmp1,llm/)))
+c      endif
+cc$OMP END MASTER
+
 #else
 
@@ -799,4 +871,5 @@
 
 c-jld
+c$OMP MASTER
          call resume_timer(timer_caldyn)
 	 if (FirstPhysic) then
@@ -804,4 +877,6 @@
 	   FirstPhysic=.false.
 	 endif
+c$OMP END MASTER
+c$OMP END PARALLEL
        ENDIF
 
@@ -815,4 +890,7 @@
 
       IF(apdiss) THEN
+c$OMP  PARALLEL DEFAULT(SHARED) 
+c$OMP+          PRIVATE(ijb,ije,tppn,tpn,tpps,tps)
+c$OMP MASTER
         call suspend_timer(timer_caldyn)
 	
@@ -822,5 +900,8 @@
 
         call VTb(VThallo)
-
+c$OMP END MASTER
+
+c$OMP BARRIER
+c$OMP MASTER
         call Register_SwapFieldHallo(ucov,ucov,ip1jmp1,llm,
      *                          jj_Nb_dissip,1,1,Request_dissip)
@@ -847,4 +928,7 @@
         
 	call start_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
+
         call covcont_p(llm,ucov,vcov,ucont,vcont)
         call enercin_p(vcov,ucov,vcont,ucont,ecin0)
@@ -853,12 +937,19 @@
 
         CALL dissip_p(vcov,ucov,teta,p,dvdis,dudis,dtetadis)
-        
+         
 	ijb=ij_begin
 	ije=ij_end
-	
-	ucov(ijb:ije,1:llm)=ucov(ijb:ije,1:llm)+dudis(ijb:ije,1:llm)
-        
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)	
+	DO l=1,llm
+	  ucov(ijb:ije,l)=ucov(ijb:ije,l)+dudis(ijb:ije,l)
+        ENDDO
+c$OMP END DO NOWAIT	
 	if (pole_sud) ije=ije-iip1
-	vcov(ijb:ije,1:llm)=vcov(ijb:ije,1:llm)+dvdis(ijb:ije,1:llm)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)	
+	DO l=1,llm
+	  vcov(ijb:ije,l)=vcov(ijb:ije,l)+dvdis(ijb:ije,l)
+        ENDDO
+c$OMP END DO NOWAIT	
+
 c       teta=teta+dtetadis
 
@@ -868,4 +959,6 @@
 C       On rajoute la tendance due a la transform. Ec -> E therm. cree
 C       lors de la dissipation
+c$OMP BARRIER
+c$OMP MASTER
             call suspend_timer(timer_dissip)
 	    call VTb(VThallo)
@@ -877,5 +970,6 @@
             call VTe(VThallo)
             call resume_timer(timer_dissip)
-	    
+c$OMP END MASTER
+c$OMP BARRIER	    
             call covcont_p(llm,ucov,vcov,ucont,vcont)
             call enercin_p(vcov,ucov,vcont,ucont,ecin)
@@ -883,5 +977,5 @@
 	    ijb=ij_begin
 	    ije=ij_end
-	    
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)	    
 	    do l=1,llm
 	      do ij=ijb,ije
@@ -890,10 +984,10 @@
               enddo
 	    enddo
-	    
+c$OMP END DO NOWAIT	    
        endif
 
        ijb=ij_begin
        ije=ij_end
-	    
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)	    
 	 do l=1,llm
 	   do ij=ijb,ije
@@ -901,5 +995,5 @@
 	   enddo
 	 enddo
-	 
+c$OMP END DO NOWAIT	 
 c------------------------------------------------------------------------
 
@@ -913,4 +1007,5 @@
          
         if (pole_nord) then
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l  =  1, llm
             DO ij =  1,iim
@@ -923,5 +1018,7 @@
             ENDDO
           ENDDO
-               
+c$OMP END DO NOWAIT
+
+c$OMP MASTER               
           DO ij =  1,iim
             tppn(ij)  = aire(  ij    ) * ps (  ij    )
@@ -932,7 +1029,9 @@
             ps(  ij    ) = tpn
           ENDDO
+c$OMP END MASTER
         endif
         
         if (pole_sud) then
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l  =  1, llm
             DO ij =  1,iim
@@ -945,5 +1044,7 @@
             ENDDO
           ENDDO
-               
+c$OMP END DO NOWAIT
+
+c$OMP MASTER               
           DO ij =  1,iim
             tpps(ij)  = aire(ij+ip1jm) * ps (ij+ip1jm)
@@ -954,6 +1055,10 @@
             ps(ij+ip1jm) = tps
           ENDDO
+c$OMP END MASTER
         endif
 
+
+c$OMP BARRIER
+c$OMP MASTER
         call VTe(VTdissipation)
 
@@ -983,4 +1088,6 @@
         call resume_timer(timer_caldyn)
 	print *,'fin dissipation'
+c$OMP END MASTER
+c$OMP END PARALLEL
       END IF
 
@@ -1066,14 +1173,7 @@
 
             IF( itau. EQ. itaufinp1 ) then  
-c$$$       write(79,*) 'ucov',ucov
-c$$$       write(80,*) 'vcov',vcov
-c$$$       write(81,*) 'teta',teta
-c$$$       write(82,*) 'ps',ps
-c$$$       write(83,*) 'q',q
-c$$$       WRITE(85,*) 'q1 = ',q(:,:,1)
-c$$$       WRITE(86,*) 'q3 = ',q(:,:,3)
-
+
+              call finalize_parallel
               abort_message = 'Simulation finished'
-
               call abort_gcm(modname,abort_message,0)
             ENDIF
@@ -1161,8 +1261,8 @@
 
 
-#ifdef CPP_IOIPSL
+c#ifdef CPP_IOIPSL
        CALL dynredem1_p("restart.nc",0.0,
      ,                     vcov,ucov,teta,q,nqmx,masse,ps)
-#endif
+c#endif
 
               CLOSE(99)
@@ -1218,4 +1318,5 @@
                forward =  .FALSE.
                IF( itau. EQ. itaufinp1 ) then  
+	         call finalize_parallel
                  abort_message = 'Simulation finished'
                  call abort_gcm(modname,abort_message,0)
@@ -1296,9 +1397,9 @@
                ENDIF
 
-#ifdef CPP_IOIPSL
+c#ifdef CPP_IOIPSL
                  IF(itau.EQ.itaufin)
      . CALL dynredem1_p("restart.nc",0.0,
      .                     vcov,ucov,teta,q,nqmx,masse,ps)
-#endif
+c#endif
 
                  forward = .TRUE.
@@ -1309,4 +1410,5 @@
       END IF
 
-      STOP
+        call finalize_parallel
+	STOP
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/limx.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/limx.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/limx.F	(revision 709)
@@ -48,6 +48,5 @@
       REAL      SSUM,CVMGP,CVMGT
       integer ismax,ismin
-      EXTERNAL  SSUM, convflu,ismin,ismax
-      EXTERNAL filtreg
+      EXTERNAL  SSUM, ismin,ismax
 
       data first/.true./
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/limy.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/limy.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/limy.F	(revision 709)
@@ -52,6 +52,5 @@
       REAL      SSUM
       integer ismax,ismin
-      EXTERNAL  SSUM, convflu,ismin,ismax
-      EXTERNAL filtreg
+      EXTERNAL  SSUM, ismin,ismax
 
       data first/.true./
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/limz.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/limz.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/limz.F	(revision 709)
@@ -48,6 +48,5 @@
       REAL      SSUM,CVMGP,CVMGT
       integer ismax,ismin
-      EXTERNAL  SSUM, convflu,ismin,ismax
-      EXTERNAL filtreg
+      EXTERNAL  SSUM, ismin,ismax
 
       data first/.true./
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/massbar_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/massbar_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/massbar_p.F	(revision 709)
@@ -76,5 +76,5 @@
       
       
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)  
       DO   100    l = 1 , llm
 c
@@ -112,4 +112,5 @@
 
 100   CONTINUE
+c$OMP END DO NOWAIT
 c
       RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/massbarxy_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/massbarxy_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/massbarxy_p.F	(revision 709)
@@ -31,4 +31,5 @@
       if (pole_sud)  ije=ije-iip1
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)    
       DO   100    l = 1 , llm
 c
@@ -49,4 +50,5 @@
 
 100   CONTINUE
+c$OMP END DO NOWAIT
 c
       RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/massdair_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/massdair_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/massdair_p.F	(revision 709)
@@ -92,4 +92,5 @@
       if (pole_sud)  ije=ij_end
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)    
       DO   100    l = 1 , llm
 c
@@ -114,4 +115,5 @@
        
 100   CONTINUE
+c$OMP END DO NOWAIT
 c
       RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/mod_hallo.F90
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/mod_hallo.F90	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/mod_hallo.F90	(revision 709)
@@ -385,7 +385,7 @@
 !         print *, 'process',MPI_RANK,'ISSEND: requette ',a_request%tag,'au process',rank,'de taille',SizeBuffer
 !         call MPI_ISSEND(Req%Buffer,SizeBuffer,MPI_REAL8,rank,a_request%tag,     &
-!                         MPI_COMM_WORLD,Req%MSG_Request,ierr)
+!                         COMM_LMDZ,Req%MSG_Request,ierr)
          call MPI_ISSEND(Buffer(req%Pos),SizeBuffer,MPI_REAL8,rank,a_request%tag,     &
-                         MPI_COMM_WORLD,Req%MSG_Request,ierr)
+                         COMM_LMDZ,Req%MSG_Request,ierr)
 
         endif
@@ -410,7 +410,7 @@
             
 !	    call MPI_IRECV(Req%Buffer,SizeBuffer,MPI_REAL8,rank,a_request%tag,     &
-!                           MPI_COMM_WORLD,Req%MSG_Request,ierr)
+!                           COMM_LMDZ,Req%MSG_Request,ierr)
 	    call MPI_IRECV(Buffer(Req%Pos),SizeBuffer,MPI_REAL8,rank,a_request%tag,     &
-                           MPI_COMM_WORLD,Req%MSG_Request,ierr)
+                           COMM_LMDZ,Req%MSG_Request,ierr)
 
           endif
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrad_gam_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrad_gam_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrad_gam_p.F	(revision 709)
@@ -22,4 +22,5 @@
       INTEGER :: ijb,ije
 c
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO 10 l = 1,klevel
 c
@@ -62,4 +63,5 @@
 c
   10  CONTINUE
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrad_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrad_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrad_p.F	(revision 709)
@@ -21,5 +21,5 @@
 c
 c
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO 10 l = 1,klevel
 c
@@ -63,4 +63,5 @@
 c
   10  CONTINUE
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/nxgraro2_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/nxgraro2_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/nxgraro2_p.F	(revision 709)
@@ -1,3 +1,3 @@
-       SUBROUTINE nxgraro2_p (klevel,xcov, ycov, lr, grx, gry )
+       SUBROUTINE nxgraro2_p (klevel,xcov, ycov, lr, grx_out, gry_out )
 c
 c      P.Le Van .
@@ -25,14 +25,14 @@
       INTEGER klevel
       REAL xcov( ip1jmp1,klevel ), ycov( ip1jm,klevel )
-      REAL  grx( ip1jmp1,klevel ),  gry( ip1jm,klevel )
+      REAL,SAVE ::  grx( ip1jmp1,llm ),  gry( ip1jm,llm )
+      REAL  grx_out( ip1jmp1,klevel ),  gry_out( ip1jm,klevel )
 c
 c    ......   variables locales     ........
 c
-      REAL rot(ip1jm,llm) , signe, nugradrs
+      REAL,SAVE :: rot(ip1jm,llm)
+      REAL  signe, nugradrs
       INTEGER l,ij,iter,lr
 c    ........................................................
 c
-      EXTERNAL    filtreg
-      EXTERNAL  SCOPY, rotatf, nxgrad, laplacien_rotgam
       INTEGER :: ijb,ije,jjb,jje
       
@@ -47,21 +47,40 @@
       ijb=ij_begin
       ije=ij_end
-      grx(ijb:ije,1:klevel)=xcov(ijb:ije,1:klevel)
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO    l = 1, klevel
+        grx(ijb:ije,l)=xcov(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
+
+c$OMP BARRIER
+c$OMP MASTER          
       call suspend_timer(timer_dissip)
       call exchange_Hallo(grx,ip1jmp1,llm,0,1)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
 
       ijb=ij_begin
       ije=ij_end
       if(pole_sud) ije=ij_end-iip1
-      gry(ijb:ije,1:klevel)=ycov(ijb:ije,1:klevel)
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+      DO    l = 1, klevel
+        gry(ijb:ije,l)=ycov(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
+ 
 c
       CALL     rotatf_p     ( klevel, grx, gry, rot )
 c      call write_field3d_p('rot1',reshape(rot,(/iip1,jjm,llm/)))
-      
+
+c$OMP BARRIER
+c$OMP MASTER      
       call suspend_timer(timer_dissip)
       call exchange_Hallo(rot,ip1jm,llm,1,1)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
       
       CALL laplacien_rot_p ( klevel, rot, rot,grx,gry      )
@@ -71,7 +90,11 @@
 c
       DO  iter = 1, lr -2
+c$OMP BARRIER
+c$OMP MASTER
         call suspend_timer(timer_dissip)
 	call exchange_Hallo(rot,ip1jm,llm,1,1)
         call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
 	CALL laplacien_rotgam_p ( klevel, rot, rot )
       ENDDO
@@ -86,7 +109,11 @@
        
       CALL filtreg_p( rot, jjb,jje,jjm, klevel, 2,1, .FALSE.,1)
+c$OMP BARRIER
+c$OMP MASTER
       call suspend_timer(timer_dissip)
       call exchange_Hallo(rot,ip1jm,llm,1,0)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
       CALL nxgrad_p ( klevel, rot, grx, gry )
 
@@ -94,18 +121,20 @@
       ijb=ij_begin
       ije=ij_end
-    
+      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)    
       DO    l = 1, klevel
         
          if(pole_sud) ije=ij_end-iip1
          DO  ij = ijb, ije
-          gry( ij,l ) = gry( ij,l ) * nugradrs
+          gry_out( ij,l ) = gry( ij,l ) * nugradrs
          ENDDO
         
          if(pole_sud) ije=ij_end
          DO  ij = ijb, ije
-          grx( ij,l ) = grx( ij,l ) * nugradrs
+          grx_out( ij,l ) = grx( ij,l ) * nugradrs
          ENDDO
      
       ENDDO
+c$OMP END DO NOWAIT
 c
       RETURN
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrarot_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrarot_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/nxgrarot_p.F	(revision 709)
@@ -1,3 +1,3 @@
-      SUBROUTINE nxgrarot_p (klevel,xcov, ycov, lr, grx, gry )
+      SUBROUTINE nxgrarot_p (klevel,xcov, ycov, lr, grx_out, gry_out )
 c   ***********************************************************
 c
@@ -26,12 +26,12 @@
       INTEGER klevel
       REAL xcov( ip1jmp1,klevel ), ycov( ip1jm,klevel )
-      REAL  grx( ip1jmp1,klevel ),  gry( ip1jm,klevel )
+      REAL  grx_out( ip1jmp1,klevel ),  gry_out( ip1jm,klevel )
+      REAL,SAVE ::  grx( ip1jmp1,llm ),  gry( ip1jm,llm )
+
 c
-      REAL rot(ip1jm,llm)
+      REAL,SAVE :: rot(ip1jm,llm)
 
       INTEGER l,ij,iter,lr
 c
-      EXTERNAL    filtreg
-      EXTERNAL       SCOPY, rotat, nXgrad
       INTEGER ijb,ije,jjb,jje
 c
@@ -42,13 +42,26 @@
       ijb=ij_begin
       ije=ij_end
-      grx(ijb:ije,1:klevel)=xcov(ijb:ije,1:klevel)
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)  
+      DO l = 1, klevel
+        grx(ijb:ije,l)=xcov(ijb:ije,l)
+      ENDDO 
+c$OMP END DO NOWAIT      
+
       if(pole_sud) ije=ij_end-iip1
-      gry(ijb:ije,1:klevel)=ycov(ijb:ije,1:klevel)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
+      DO l = 1, klevel
+        gry(ijb:ije,l)=ycov(ijb:ije,l)
+      ENDDO
+c$OMP END DO NOWAIT
       
       DO 10 iter = 1,lr
+c$OMP BARRIER
+c$OMP MASTER
       call suspend_timer(timer_dissip)
       call exchange_Hallo(grx,ip1jmp1,llm,0,1)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
+
       CALL  rotat_p (klevel,grx, gry, rot )
 c      call write_field3d_p('rot',reshape(rot,(/iip1,jjm,llm/)))
@@ -58,22 +71,27 @@
       if (pole_sud) jje=jj_end-1
       CALL filtreg_p( rot,jjb,jje, jjm, klevel, 2,1, .false.,2)
-      
+
+c$OMP BARRIER
+c$OMP MASTER
       call suspend_timer(timer_dissip)
       call exchange_Hallo(rot,ip1jm,llm,1,0)
       call resume_timer(timer_dissip)
+c$OMP END MASTER
+c$OMP BARRIER
       
       CALL nxgrad_p (klevel,rot, grx, gry )
 c
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO 5  l = 1, klevel
       if(pole_sud) ije=ij_end-iip1
       DO 2 ij = ijb, ije
-      gry( ij,l ) = - gry( ij,l ) * crot
+      gry_out( ij,l ) = - gry( ij,l ) * crot
    2  CONTINUE
       if(pole_sud) ije=ij_end
       DO 3 ij = ijb, ije
-      grx( ij,l ) = - grx( ij,l ) * crot
+      grx_out( ij,l ) = - grx( ij,l ) * crot
    3  CONTINUE
    5  CONTINUE
-
+c$OMP END DO NOWAIT
 c      call write_field3d_p('grx',reshape(grx,(/iip1,jjp1,llm/)))
 c      call write_field3d_p('gry',reshape(gry,(/iip1,jjm,llm/)))
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/parallel.F90
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/parallel.F90	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/parallel.F90	(revision 709)
@@ -3,4 +3,5 @@
     integer, save :: mpi_size
     integer, save :: mpi_rank
+    integer, save :: COMM_LMDZ
     integer, save :: jj_begin
     integer, save :: jj_end
@@ -14,4 +15,5 @@
     integer, allocatable, save, dimension(:) :: jj_end_para
     integer, allocatable, save, dimension(:) :: jj_nb_para
+    integer, save :: OMP_CHUNK
     
  contains
@@ -19,4 +21,9 @@
     subroutine init_parallel
     USE vampir
+#ifdef CPP_COUPLE
+#ifdef CPP_PSMILE
+    USE mod_prism_proto
+#endif
+#endif
     implicit none
     
@@ -25,4 +32,5 @@
       integer :: type_size
       integer, dimension(3) :: blocklen,type
+      integer :: comp_id
       
       
@@ -30,9 +38,17 @@
 #include "dimensions90.h"
 #include "paramet90.h"
-      
+
+#ifdef CPP_COUPLE
+#ifdef CPP_PSMILE
+       call prism_init_comp_proto (comp_id, 'lmdz.x', ierr)
+       call prism_get_localcomm_proto(COMM_LMDZ,ierr)
+#endif
+#else      
       call MPI_INIT(ierr)
+      COMM_LMDZ=MPI_COMM_WORLD
+#endif
       call InitVampir
-      call MPI_COMM_SIZE(MPI_COMM_WORLD,mpi_size,ierr)
-      call MPI_COMM_RANK(MPI_COMM_WORLD,mpi_rank,ierr)
+      call MPI_COMM_SIZE(COMM_LMDZ,mpi_size,ierr)
+      call MPI_COMM_RANK(COMM_LMDZ,mpi_rank,ierr)
   
       
@@ -50,5 +66,5 @@
           print *," ---> diminuez le nombre de CPU ou augmentez la taille en lattitude"
           
-          call MPI_ABORT(MPI_COMM_WORLD,-1, ierr)
+          call MPI_ABORT(COMM_LMDZ,-1, ierr)
           
         endif
@@ -133,4 +149,9 @@
     
     subroutine Finalize_parallel
+#ifdef CPP_COUPLE
+#ifdef CPP_PSMILE
+    use mod_prism_proto
+#endif
+#endif
     implicit none
 
@@ -144,9 +165,18 @@
       deallocate(jj_end_para)
       deallocate(jj_nb_para)
-      
+
+#ifdef CPP_COUPLE
+#ifdef CPP_PSMILE
+     call prism_terminate_proto(ierr)
+     IF (ierr .ne. PRISM_Ok) THEN
+       call abort_gcm('Finalize_parallel',' Probleme dans prism_terminate_proto ',1)
+     endif
+#endif
+#else         
       call MPI_FINALIZE(ierr)
+#endif
       
     end subroutine Finalize_parallel
-    
+        
     subroutine Pack_Data(Field,ij,ll,row,Buffer)
     implicit none
@@ -217,5 +247,5 @@
       INTEGER :: Buffer_size      
       
-      call MPI_Barrier(MPI_COMM_WORLD,ierr)
+      call MPI_Barrier(COMM_LMDZ,ierr)
       call VTb(VThallo)
       
@@ -253,5 +283,5 @@
         call PACK_Data(Field(ij_begin,1),ij,ll,down,Buffer_Send_up)
         call MPI_ISSEND(Buffer_send_up,Buffer_Size,MPI_REAL8,MPI_Rank-1,1,     &
-                        MPI_COMM_WORLD,Request(NbRequest),ierr)
+                        COMM_LMDZ,Request(NbRequest),ierr)
       ENDIF
   
@@ -264,5 +294,5 @@
         
         call MPI_ISSEND(Buffer_send_down,Buffer_Size,MPI_REAL8,MPI_Rank+1,1,     &
-                        MPI_COMM_WORLD,Request(NbRequest),ierr)
+                        COMM_LMDZ,Request(NbRequest),ierr)
       ENDIF
     
@@ -274,5 +304,5 @@
               
         call MPI_IRECV(Buffer_recv_up,Buffer_size,MPI_REAL8,MPI_Rank-1,1,  &
-                        MPI_COMM_WORLD,Request(NbRequest),ierr)
+                        COMM_LMDZ,Request(NbRequest),ierr)
      
        
@@ -285,5 +315,5 @@
         
         call MPI_IRECV(Buffer_recv_down,Buffer_size,MPI_REAL8,MPI_Rank+1,1,     &
-                        MPI_COMM_WORLD,Request(NbRequest),ierr)
+                        COMM_LMDZ,Request(NbRequest),ierr)
       
         
@@ -295,5 +325,5 @@
 
       call VTe(VThallo)
-      call MPI_Barrier(MPI_COMM_WORLD,ierr)
+      call MPI_Barrier(COMM_LMDZ,ierr)
       RETURN
       
@@ -349,5 +379,5 @@
       
       call MPI_GATHERV(Buffer_send,(min(ij_end,ij)-ij_begin+1)*ll,MPI_REAL8,   &
-                        Buffer_Recv,Recv_count,displ,MPI_REAL8,rank,MPI_COMM_WORLD,ierr)
+                        Buffer_Recv,Recv_count,displ,MPI_REAL8,rank,COMM_LMDZ,ierr)
       
       if (MPI_Rank==rank) then                  
@@ -380,5 +410,5 @@
       
       call Gather_Field(Field,ij,ll,0)
-      call MPI_BCAST(Field,ij*ll,MPI_REAL8,0,MPI_COMM_WORLD)
+      call MPI_BCAST(Field,ij*ll,MPI_REAL8,0,COMM_LMDZ)
       
     end subroutine AllGather_Field
@@ -395,5 +425,5 @@
       INTEGER :: ierr
       
-      call MPI_BCAST(Field,ij*ll,MPI_REAL8,rank,MPI_COMM_WORLD)
+      call MPI_BCAST(Field,ij*ll,MPI_REAL8,rank,COMM_LMDZ)
       
     end subroutine Broadcast_Field
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/pentes_ini.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/pentes_ini.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/pentes_ini.F	(revision 709)
@@ -56,13 +56,9 @@
       REAL      SSUM
       integer ismax,ismin,lati,latf
-      EXTERNAL  SSUM, convflu,ismin,ismax
+      EXTERNAL  SSUM, ismin,ismax
       logical first
       save first
 c   fin modif
 
-c      EXTERNAL masskg
-      EXTERNAL advx
-      EXTERNAL advy
-      EXTERNAL advz
 
 c  modif Fred 24 03 96
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/ppm3d.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/ppm3d.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/ppm3d.F	(revision 709)
@@ -737,5 +737,5 @@
 c     j=1 c'est le pôle Sud, j=JNP c'est le pôle Nord
       Q(I,  2,k,IC) = Q(I,  1,k,IC)
-      Q(I,JMR,k,IC) = Q(I,JMP,k,IC)
+      Q(I,JMR,k,IC) = Q(I,JNP,k,IC)
 400   CONTINUE
       endif
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/prather.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/prather.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/prather.F	(revision 709)
@@ -60,9 +60,7 @@
       REAL      SSUM
       integer ismax,ismin
-      EXTERNAL  SSUM, convflu,ismin,ismax
+      EXTERNAL  SSUM, ismin,ismax
       logical first
       save first
-      EXTERNAL advxp,advyp,advzp 
-
 
       data first/.true./
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/pression_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/pression_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/pression_p.F	(revision 709)
@@ -29,5 +29,6 @@
       if (pole_nord) ijb=ij_begin
       if (pole_sud)  ije=ij_end
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
       DO    l    = 1, llmp1
         DO  ij   = ijb, ije
@@ -35,5 +36,5 @@
         ENDDO
       ENDDO
-   
+c$OMP END DO NOWAIT   
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/rotat_nfil_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/rotat_nfil_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/rotat_nfil_p.F	(revision 709)
@@ -32,5 +32,5 @@
       ije=ij_end
       if(pole_sud) ije=ij_end-iip1
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
       DO  10 l = 1,klevel
 c
@@ -48,5 +48,5 @@
 c
   10  CONTINUE
-
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/rotat_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/rotat_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/rotat_p.F	(revision 709)
@@ -33,4 +33,5 @@
       if(pole_sud) ije=ij_end-iip1
       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO  10 l = 1,klevel
 c
@@ -48,7 +49,7 @@
 c
   10  CONTINUE
-
+c$OMP END DO NOWAIT
 ccc        CALL filtreg( rot, jjm, klevel, 2, 2, .FALSE., 1 )
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
         DO l = 1, klevel
           DO ij = ijb, ije
@@ -56,4 +57,5 @@
           ENDDO
         ENDDO
+c$OMP END DO NOWAIT
 c
 c
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/rotatf_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/rotatf_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/rotatf_p.F	(revision 709)
@@ -32,5 +32,6 @@
       ije=ij_end
       if(pole_sud) ije=ij_end-iip1
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO  10 l = 1,klevel
 c
@@ -48,10 +49,11 @@
 c
   10  CONTINUE
-
+c$OMP END DO NOWAIT
         jjb=jj_begin
         jje=jj_end
         if (pole_sud) jje=jj_end-1
         CALL filtreg_p( rot, jjb,jje,jjm, klevel, 2, 2, .FALSE., 1 )
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
         DO l = 1, klevel
           DO ij = ijb, ije
@@ -59,4 +61,5 @@
           ENDDO
         ENDDO
+c$OMP END DO NOWAIT
 c
 c
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/times.F90
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/times.F90	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/times.F90	(revision 709)
@@ -148,8 +148,8 @@
     
     tmp_table(:,:)=timer_table(:,:,mpi_rank)
-    call mpi_allgather(tmp_table(1,1),data_size,MPI_REAL8,timer_table(1,1,mpi_rank),data_size,MPI_REAL8,MPI_COMM_WORLD,ierr)
+    call mpi_allgather(tmp_table(1,1),data_size,MPI_REAL8,timer_table(1,1,mpi_rank),data_size,MPI_REAL8,COMM_LMDZ,ierr)
 
     tmp_table(:,:)=timer_table_sqr(:,:,mpi_rank)
-    call mpi_allgather(tmp_table(1,1),data_size,MPI_REAL8,timer_table_sqr(1,1,mpi_rank),data_size,MPI_REAL8,MPI_COMM_WORLD,ierr)
+    call mpi_allgather(tmp_table(1,1),data_size,MPI_REAL8,timer_table_sqr(1,1,mpi_rank),data_size,MPI_REAL8,COMM_LMDZ,ierr)
     
     deallocate(tmp_table)
@@ -176,11 +176,11 @@
 
     tmp_table(:,:)=timer_average(:,:,mpi_rank)
-    call mpi_allgather(tmp_table(1,1),data_size,MPI_REAL8,timer_average(1,1,0),data_size,MPI_REAL8,MPI_COMM_WORLD,ierr)
+    call mpi_allgather(tmp_table(1,1),data_size,MPI_REAL8,timer_average(1,1,0),data_size,MPI_REAL8,COMM_LMDZ,ierr)
 
     tmp_table(:,:)=timer_delta(:,:,mpi_rank)
-    call mpi_allgather(tmp_table(1,1),data_size,MPI_REAL8,timer_delta(1,1,0),data_size,MPI_REAL8,MPI_COMM_WORLD,ierr)
+    call mpi_allgather(tmp_table(1,1),data_size,MPI_REAL8,timer_delta(1,1,0),data_size,MPI_REAL8,COMM_LMDZ,ierr)
 
     tmp_iter(:,:)=timer_iteration(:,:,mpi_rank)
-    call mpi_allgather(tmp_iter(1,1),data_size,MPI_INTEGER,timer_iteration(1,1,0),data_size,MPI_INTEGER,MPI_COMM_WORLD,ierr)
+    call mpi_allgather(tmp_iter(1,1),data_size,MPI_INTEGER,timer_iteration(1,1,0),data_size,MPI_INTEGER,COMM_LMDZ,ierr)
     
     deallocate(tmp_table)
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/tourpot_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/tourpot_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/tourpot_p.F	(revision 709)
@@ -31,6 +31,4 @@
       INTEGER l, ij ,ije,ijb,jje,jjb
 
-      EXTERNAL filtreg_p
-
 
       ijb=ij_begin-iip1
@@ -45,5 +43,5 @@
 
 c    ........  Calcul du rotationnel du vent V  puis filtrage  ........
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO 5 l = 1,llm
 
@@ -65,5 +63,5 @@
 
    5  CONTINUE
-
+c$OMP END DO NOWAIT
       jjb=jj_begin-1
       jje=jj_end
@@ -73,5 +71,5 @@
       CALL  filtreg_p( rot, jjb,jje,jjm, llm, 2, 1, .FALSE., 1 )
 
-     
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
       DO 10 l = 1, llm
       
@@ -91,5 +89,5 @@
 
   10  CONTINUE
-
+c$OMP END DO NOWAIT
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/vitvert_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/vitvert_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/vitvert_p.F	(revision 709)
@@ -38,5 +38,5 @@
       
       if (pole_sud) ije=ij_end
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO 2  l = 1,llmm1
 
@@ -46,9 +46,11 @@
 
    2  CONTINUE
-
+c$OMP END DO
+c$OMP MASTER
       DO 5 ij  = ijb,ije
       w(ij,1)  = 0.
 5     CONTINUE
-
+c$OMP END MASTER
+c$OMP BARRIER
       RETURN
       END
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/vlsplt_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/vlsplt_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/vlsplt_p.F	(revision 709)
@@ -228,26 +228,13 @@
       REAL u_mq(ip1jmp1,llm)
 
-      Logical extremum,first,testcpu
-      SAVE first,testcpu
+      Logical extremum
 
       REAL      SSUM
       EXTERNAL  SSUM
-      REAL temps0,temps1,temps2,temps3,temps4,temps5,second
-      SAVE temps0,temps1,temps2,temps3,temps4,temps5
 
       REAL z1,z2,z3
 
-      DATA first,testcpu/.true.,.false./
       INTEGER ijb,ije,ijb_x,ije_x
       
-      IF(first) THEN
-         temps1=0.
-         temps2=0.
-         temps3=0.
-         temps4=0.
-         temps5=0.
-         first=.false.
-      ENDIF
-
 c   calcul de la pente a droite et a gauche de la maille
 
@@ -265,5 +252,5 @@
 
 c   calcul de la pente aux points u
-         
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)         
          DO l = 1, llm
             
@@ -315,4 +302,5 @@
 
          ENDDO ! l=1,llm
+c$OMP END DO NOWAIT
 c	print*,'Ok calcul des pentes'
 
@@ -321,5 +309,5 @@
 c   Pentes produits:
 c   ----------------
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          DO l = 1, llm
             DO ij=ijb,ije-1
@@ -342,20 +330,20 @@
 
          ENDDO
-
+c$OMP END DO NOWAIT
       ENDIF ! (pente_max.lt.-1.e-5)
 
 c   bouclage de la pente en iip1:
 c   -----------------------------
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          DO ij=ijb+iip1-1,ije,iip1
             dxq(ij-iim,l)=dxq(ij,l)
          ENDDO
-         DO ij=1,ip1jmp1
+         DO ij=ijb,ije
             iadvplus(ij,l)=0
          ENDDO
 
       ENDDO
-
+c$OMP END DO NOWAIT
 c	 print*,'Bouclage en iip1'
 
@@ -363,5 +351,5 @@
 
 #ifdef CRAY
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
        DO ij=ijb,ije-1
@@ -377,9 +365,10 @@
        ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 #else
 c   on cumule le flux correspondant a toutes les mailles dont la masse
 c   au travers de la paroi pENDant le pas de temps.
 c	print*,'Cumule ....'
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
        DO ij=ijb,ije-1
@@ -394,4 +383,5 @@
        ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 #endif
 c	stop
@@ -400,4 +390,5 @@
 c   detection des points ou on advecte plus que la masse de la
 c   maille
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          DO ij=ijb,ije-1
@@ -408,5 +399,7 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 c	print*,'Ok test 1'
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
        DO ij=ijb+iip1-1,ije,iip1
@@ -414,4 +407,5 @@
        ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 c	 print*,'Ok test 2'
 
@@ -424,4 +418,5 @@
 
       n0=0
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          nl(l)=0
@@ -431,11 +426,11 @@
          n0=n0+nl(l)
       ENDDO
-
+c$OMP END DO NOWAIT
 cym      IF(n0.gt.1) THEN
-      IF(n0.gt.0) THEN
+cym      IF(n0.gt.0) THEN
 
 c      PRINT*,'Nombre de points pour lesquels on advect plus que le'
 c     &       ,'contenu de la maille : ',n0
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          DO l=1,llm
             IF(nl(l).gt.0) THEN
@@ -487,5 +482,6 @@
             ENDIF
          ENDDO
-      ENDIF  ! n0.gt.0 
+c$OMP END DO NOWAIT
+cym      ENDIF  ! n0.gt.0 
 9999    continue
 
@@ -493,4 +489,5 @@
 c   bouclage en latitude
 c	print*,'Avant bouclage en latitude'
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
         DO ij=ijb+iip1-1,ije,iip1
@@ -498,8 +495,8 @@
         ENDDO
       ENDDO
-
+c$OMP END DO NOWAIT
 
 c   calcul des tENDances
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          DO ij=ijb+1,ije
@@ -516,4 +513,5 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 c     CALL SCOPY((jjm-1)*llm,q(iip1+iip1,1),iip1,q(iip2,1),iip1)
 c     CALL SCOPY((jjm-1)*llm,masse(iip1+iip1,1),iip1,masse(iip2,1),iip1)
@@ -568,5 +566,7 @@
       REAL temps0,temps1,temps2,temps3,temps4,temps5,second
       SAVE temps0,temps1,temps2,temps3,temps4,temps5
+c$OMP THREADPRIVATE(temps0,temps1,temps2,temps3,temps4,temps5)
       SAVE first,testcpu
+c$OMP THREADPRIVATE(first,testcpu)
 
       REAL convpn,convps,convmpn,convmps
@@ -575,5 +575,7 @@
       REAL coslon(iip1),coslondlon(iip1)
       SAVE sinlon,coslon,sinlondlon,coslondlon
+c$OMP THREADPRIVATE(sinlon,coslon,sinlondlon,coslondlon)
       SAVE airej2,airejjm
+c$OMP THREADPRIVATE(airej2,airejjm)
 c
 c
@@ -605,5 +607,5 @@
 c	PRINT*,'CALCUL EN LATITUDE'
 
-      
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO l = 1, llm
 c
@@ -806,4 +808,5 @@
 
       ENDDO
+c$OMP END DO NOWAIT
 
       ijb=ij_begin-iip1
@@ -812,5 +815,5 @@
       if (pole_sud)  ije=ij_end-iip1
 
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
        DO ij=ijb,ije
@@ -825,5 +828,5 @@
        ENDDO
       ENDDO
-
+c$OMP END DO NOWAIT
       
       ijb=ij_begin
@@ -832,4 +835,5 @@
       if (pole_sud)  ije=ij_end-iip1
       
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO l=1,llm
          DO ij=ijb,ije
@@ -900,4 +904,5 @@
 c._. fin nouvelle version
       ENDDO
+c$OMP END DO NOWAIT
 
       RETURN
@@ -939,17 +944,20 @@
       INTEGER i,ij,l,j,ii
 c
-      REAL wq(ip1jmp1,llm+1),newmasse
-
-      REAL dzq(ip1jmp1,llm),dzqw(ip1jmp1,llm),adzqw(ip1jmp1,llm),dzqmax
+      REAL,SAVE :: wq(ip1jmp1,llm+1)
+      REAL newmasse
+
+      REAL,SAVE :: dzq(ip1jmp1,llm),dzqw(ip1jmp1,llm),adzqw(ip1jmp1,llm)
+      REAL dzqmax
       REAL sigw
 
       LOGICAL testcpu
       SAVE testcpu
-
+c$OMP THREADPRIVATE(testcpu)
       REAL temps0,temps1,temps2,temps3,temps4,temps5,second
       SAVE temps0,temps1,temps2,temps3,temps4,temps5
+c$OMP THREADPRIVATE(temps0,temps1,temps2,temps3,temps4,temps5)
+
       REAL      SSUM
-      EXTERNAL  SSUM, convflu
-      EXTERNAL filtreg
+      EXTERNAL  SSUM
 
       DATA testcpu/.false./
@@ -967,5 +975,6 @@
       ijb=ijb_x
       ije=ije_x
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO l=2,llm
          DO ij=ijb,ije
@@ -974,5 +983,7 @@
          ENDDO
       ENDDO
-
+c$OMP END DO
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=2,llm-1
          DO ij=ijb,ije
@@ -991,10 +1002,13 @@
          ENDDO
       ENDDO
-
+c$OMP END DO NOWAIT
+
+c$OMP MASTER
       DO ij=ijb,ije
          dzq(ij,1)=0.
          dzq(ij,llm)=0.
       ENDDO
-
+c$OMP END MASTER
+c$OMP BARRIER
 #ifdef BIDON
       IF(testcpu) THEN
@@ -1008,4 +1022,5 @@
 c calcul de  - d( q   * w )/ d(sigma)    qu'on ajoute a  dq pour calculer dq
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
        DO l = 1,llm-1
          do  ij = ijb,ije
@@ -1019,10 +1034,15 @@
          ENDDO
        ENDDO
-
+c$OMP END DO NOWAIT
+
+c$OMP MASTER
        DO ij=ijb,ije
           wq(ij,llm+1)=0.
           wq(ij,1)=0.
        ENDDO
-
+c$OMP END MASTER
+c$OMP BARRIER
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          DO ij=ijb,ije
@@ -1033,4 +1053,5 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
 
Index: LMDZ4/branches/V3_test/libf/dyn3dpar/vlspltqs_p.F
===================================================================
--- LMDZ4/branches/V3_test/libf/dyn3dpar/vlspltqs_p.F	(revision 708)
+++ LMDZ4/branches/V3_test/libf/dyn3dpar/vlspltqs_p.F	(revision 709)
@@ -260,24 +260,9 @@
       REAL u_mq(ip1jmp1,llm)
 
-      Logical first,testcpu
-      SAVE first,testcpu
-
       REAL      SSUM
-      REAL temps0,temps1,temps2,temps3,temps4,temps5
-      SAVE temps0,temps1,temps2,temps3,temps4,temps5
-
-
-      DATA first,testcpu/.true.,.false./
+
 
       INTEGER ijb,ije,ijb_x,ije_x
       
-      IF(first) THEN
-         temps1=0.
-         temps2=0.
-         temps3=0.
-         temps4=0.
-         temps5=0.
-         first=.false.
-      ENDIF
 
 c   calcul de la pente a droite et a gauche de la maille
@@ -299,4 +284,6 @@
 
 c   calcul de la pente aux points u
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
          DO l = 1, llm
             DO ij=ijb,ije-1
@@ -347,4 +334,5 @@
 
          ENDDO ! l=1,llm
+c$OMP END DO NOWAIT
 
       ELSE ! (pente_max.lt.-1.e-5)
@@ -352,5 +340,5 @@
 c   Pentes produits:
 c   ----------------
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 
          DO l = 1, llm
             DO ij=ijb,ije-1
@@ -373,10 +361,10 @@
 
          ENDDO
-
+c$OMP END DO NOWAIT
       ENDIF ! (pente_max.lt.-1.e-5)
 
 c   bouclage de la pente en iip1:
 c   -----------------------------
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          DO ij=ijb+iip1-1,ije,iip1
@@ -389,12 +377,27 @@
 
       ENDDO
-      
-      if (pole_nord) iadvplus(1:iip1,1:llm)=0
-      if (pole_sud)  iadvplus(ip1jm+1:ip1jmp1,1:llm)=0
-
+c$OMP END DO NOWAIT
+      
+      if (pole_nord) THEN
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm      
+          iadvplus(1:iip1,l)=0
+        ENDDO
+c$OMP END DO NOWAIT
+      endif
+      
+      if (pole_sud)  THEN
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm 
+	  iadvplus(ip1jm+1:ip1jmp1,l)=0
+        ENDDO
+c$OMP END DO NOWAIT
+      endif
+      	
 c   calcul des flux a gauche et a droite
 
 #ifdef CRAY
 c--pas encore modification sur Qsat
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
        DO ij=ijb,ije-1
@@ -410,8 +413,11 @@
        ENDDO
       ENDDO
+c$OMP END DO NOWAIT
+
 #else
 c   on cumule le flux correspondant a toutes les mailles dont la masse
 c   au travers de la paroi pENDant le pas de temps.
 c   le rapport de melange de l'air advecte est min(q_vanleer, Qsat_downwind)
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
        DO ij=ijb,ije-1
@@ -427,4 +433,5 @@
        ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 #endif
 
@@ -432,4 +439,5 @@
 c   detection des points ou on advecte plus que la masse de la
 c   maille
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          DO ij=ijb,ije-1
@@ -440,4 +448,7 @@
          ENDDO
       ENDDO
+c$OMP END DO NOWAIT
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
        DO ij=ijb+iip1-1,ije,iip1
@@ -445,4 +456,5 @@
        ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
 
@@ -457,4 +469,5 @@
 
       n0=0
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          nl(l)=0
@@ -464,10 +477,12 @@
          n0=n0+nl(l)
       ENDDO
-
+c$OMP END DO NOWAIT
+
+cym ATTENTION ICI en OpenMP reduction pas forcement nécessaire
 cym      IF(n0.gt.1) THEN
-        IF(n0.gt.0) THEN
+cym        IF(n0.gt.0) THEN
 ccc      PRINT*,'Nombre de points pour lesquels on advect plus que le'
 ccc     &       ,'contenu de la maille : ',n0
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
          DO l=1,llm
             IF(nl(l).gt.0) THEN
@@ -519,10 +534,11 @@
             ENDIF
          ENDDO
-      ENDIF  ! n0.gt.0 
+c$OMP END DO NOWAIT
+cym      ENDIF  ! n0.gt.0 
 
 
 
 c   bouclage en latitude
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
         DO ij=ijb+iip1-1,ije,iip1
@@ -530,8 +546,8 @@
         ENDDO
       ENDDO
-
+c$OMP END DO NOWAIT
 
 c   calcul des tendances
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
          DO ij=ijb+1,ije
@@ -548,5 +564,5 @@
          ENDDO
       ENDDO
-
+c$OMP END DO NOWAIT
 c     CALL SCOPY((jjm-1)*llm,q(iip1+iip1,1),iip1,q(iip2,1),iip1)
 c     CALL SCOPY((jjm-1)*llm,masse(iip1+iip1,1),iip1,masse(iip2,1),iip1)
@@ -597,9 +613,7 @@
       REAL qpns,qpsn,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
 c     REAL newq,oldmasse
-      Logical first,testcpu
-      REAL temps0,temps1,temps2,temps3,temps4,temps5
-      SAVE temps0,temps1,temps2,temps3,temps4,temps5
-      SAVE first,testcpu
-
+      Logical first
+      SAVE first
+c$OMP THREADPRIVATE(first)
       REAL convpn,convps,convmpn,convmps
       REAL sinlon(iip1),sinlondlon(iip1)
@@ -607,10 +621,11 @@
       SAVE sinlon,coslon,sinlondlon,coslondlon
       SAVE airej2,airejjm
+c$OMP THREADPRIVATE(sinlon,coslon,sinlondlon,coslondlon)
+c$OMP THREADPRIVATE(airej2,airejjm)
 c
 c
       REAL      SSUM
 
-      DATA first,testcpu/.true.,.false./
-      DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
+      DATA first/.true./
       INTEGER ijb,ije
 
@@ -634,5 +649,5 @@
 c
 
-
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l = 1, llm
 c
@@ -833,4 +848,5 @@
 
       ENDDO
+c$OMP END DO NOWAIT
 
       ijb=ij_begin-iip1
@@ -839,4 +855,5 @@
       if (pole_sud)  ije=ij_end-iip1
 
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,llm
        DO ij=ijb,ije
@@ -851,4 +868,5 @@
        ENDDO
       ENDDO
+c$OMP END DO NOWAIT
 
       ijb=ij_begin
@@ -856,5 +874,6 @@
       if (pole_nord) ijb=ij_begin+iip1
       if (pole_sud)  ije=ij_end-iip1
-      
+
+c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)      
       DO l=1,llm
          DO ij=ijb,ije
@@ -917,5 +936,5 @@
 c._. fin nouvelle version
       ENDDO
-
+c$OMP END DO NOWAIT
       RETURN
       END
