Index: LMDZ5/branches/testing/libf/dyn3dmem/guide_loc_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dmem/guide_loc_mod.F90	(revision 1910)
+++ LMDZ5/branches/testing/libf/dyn3dmem/guide_loc_mod.F90	(revision 2056)
@@ -329,4 +329,6 @@
 !=======================================================================
   SUBROUTINE guide_main(itau,ucov,vcov,teta,q,masse,ps)
+    use exner_hyb_loc_m, only: exner_hyb_loc
+    use exner_milieu_loc_m, only: exner_milieu_loc
     USE parallel_lmdz
     USE control_mod
@@ -353,6 +355,5 @@
     REAL, ALLOCATABLE, SAVE, DIMENSION (:,:) :: f_addv ! var aux: champ de guidage
     ! Variables pour fonction Exner (P milieu couche)
-    REAL, ALLOCATABLE, SAVE, DIMENSION (:,:,:)    :: pk, pkf
-    REAL, ALLOCATABLE, SAVE, DIMENSION (:,:,:)    :: alpha, beta
+    REAL, ALLOCATABLE, SAVE, DIMENSION (:,:,:)    :: pk
     REAL, ALLOCATABLE, SAVE, DIMENSION (:,:)        :: pks    
     REAL                               :: unskap
@@ -367,4 +368,5 @@
     
     INTEGER       :: i,j,l
+    INTEGER,EXTERNAL :: OMP_GET_THREAD_NUM
        
 !$OMP MASTER    
@@ -382,5 +384,5 @@
 !$OMP BARRIER
       
-     PRINT *,'---> on rentre dans guide_main'
+!    PRINT *,'---> on rentre dans guide_main'
 !    CALL AllGather_Field(ucov,ip1jmp1,llm)
 !    CALL AllGather_Field(vcov,ip1jm,llm)
@@ -399,7 +401,4 @@
         ALLOCATE(f_addv(ijb_v:ije_v,llm) ) 
         ALLOCATE(pk(iip1,jjb_u:jje_u,llm)  ) 
-        ALLOCATE(pkf(iip1,jjb_u:jje_u,llm)  ) 
-        ALLOCATE(alpha(iip1,jjb_u:jje_u,llm)  ) 
-        ALLOCATE(beta(iip1,jjb_u:jje_u,llm)  ) 
         ALLOCATE(pks(iip1,jjb_u:jje_u)  ) 
         ALLOCATE(p(ijb_u:ije_u,llmp1) ) 
@@ -431,5 +430,5 @@
         IF (ini_anal) THEN
             CALL guide_interp(ps,teta)
-!$OMP DO            
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)            
             DO l=1,llm
               IF (guide_u) ucov(ijbu:ijeu,l)=ugui2(ijbu:ijeu,l)
@@ -449,13 +448,4 @@
             ENDIF
             RETURN
-        ENDIF
-! Verification structure guidage
-        IF (guide_u) THEN
-!+tard            CALL writefield_u('unat',unat1)
-!            CALL writefield_u('ucov',ucov)
-        ENDIF
-        IF (guide_T) THEN
-!+tard            CALL writefield_p('tnat',tnat1)
-!            CALL writefield_u('teta',teta)
         ENDIF
 
@@ -536,35 +526,47 @@
     f_out=((MOD(itau,iguide_sav).EQ.0).AND.guide_sav)  
     IF (f_out) THEN
-!       Calcul niveaux pression milieu de couches 
-	CALL pression_loc( ijnb_u, ap, bp, ps, p )
-	if (pressure_exner) then
-          CALL exner_hyb_loc(ip1jmp1,ps,p,alpha,beta,pks,pk,pkf)
-	else
-          CALL exner_milieu_loc(ip1jmp1,ps,p,beta,pks,pk,pkf)
-        endif
-!$OMP BARRIER        
+
+!$OMP BARRIER
+      CALL pression_loc(ijnb_u,ap,bp,ps,p)
+
+!$OMP BARRIER
+      if (pressure_exner) then
+      CALL exner_hyb_loc( ijnb_u, ps, p, pks, pk)
+      else
+        CALL exner_milieu_loc( ijnb_u, ps, p, pks, pk )
+      endif
+
+!$OMP BARRIER
+
         unskap=1./kappa
-!$OMP DO
-	DO l = 1, llm
-	    DO j=jjbu,jjeu
-		DO i =1, iip1
-		    p(i+(j-1)*iip1,l) = preff * ( pk(i,j,l)/cpp) ** unskap
-		ENDDO
-	    ENDDO
-	ENDDO
-!$OMP MASTER
-        CALL guide_out("P",jjp1,llm,p,1.)
-!$OMP END MASTER
-!$OMP BARRIER
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l = 1, llm
+            DO j=jjbu,jjeu
+                DO i =1, iip1
+                    p(i+(j-1)*iip1,l) = preff * ( pk(i,j,l)/cpp) ** unskap
+                ENDDO
+            ENDDO
+        ENDDO
+
+!!$OMP MASTER
+!     DO l=1,llm,5
+!         print*,'avant dump2d l=',l,mpi_rank,OMP_GET_THREAD_NUM()
+!         print*,'avant dump2d l=',l,mpi_rank
+!         CALL dump2d(iip1,jjnb_u,p(:,l),'ppp   ')
+!      ENDDO
+!!$OMP END MASTER
+!!$OMP BARRIER
+
+        CALL guide_out("SP",jjp1,llm,p(ijb_u:ije_u,1:llm),1.)
     ENDIF
     
     if (guide_u) then
         if (guide_add) then
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l=1,llm
            f_addu(ijbu:ijeu,l)=(1.-tau)*ugui1(ijbu:ijeu,l)+tau*ugui2(ijbu:ijeu,l)
           ENDDO
         else
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l=1,llm
            f_addu(ijbu:ijeu,l)=(1.-tau)*ugui1(ijbu:ijeu,l)+tau*ugui2(ijbu:ijeu,l)-ucov(ijbu:ijeu,l)
@@ -576,12 +578,9 @@
         if (guide_zon) CALL guide_zonave_u(1,llm,f_addu)
         CALL guide_addfield_u(llm,f_addu,alpha_u)
-!        CALL WriteField_u('f_addu',f_addu)
-!        CALL WriteField_u('alpha_u',alpha_u)
-!$OMP MASTER
-        IF (f_out) CALL guide_out("U",jjp1,llm,f_addu(:,:),factt)
-!$OMP END MASTER
-!$OMP BARRIER
-
-!$OMP DO
+!       IF (f_out) CALL guide_out("ua",jjp1,llm,ugui1(ijb_u:ije_u,:),factt)
+        IF (f_out) CALL guide_out("ua",jjp1,llm,(1.-tau)*ugui1(ijb_u:ije_u,:)+tau*ugui2(ijb_u:ije_u,:),factt)
+        IF (f_out) CALL guide_out("u",jjp1,llm,ucov(ijb_u:ije_u,:),factt)
+        IF (f_out) CALL guide_out("ucov",jjp1,llm,f_addu(ijb_u:ije_u,:),factt)
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO l=1,llm
           ucov(ijbu:ijeu,l)=ucov(ijbu:ijeu,l)+f_addu(ijbu:ijeu,l)
@@ -592,10 +591,10 @@
     if (guide_T) then
         if (guide_add) then
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l=1,llm
             f_addu(ijbu:ijeu,l)=(1.-tau)*tgui1(ijbu:ijeu,l)+tau*tgui2(ijbu:ijeu,l)
           ENDDO
         else
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l=1,llm
            f_addu(ijbu:ijeu,l)=(1.-tau)*tgui1(ijbu:ijeu,l)+tau*tgui2(ijbu:ijeu,l)-teta(ijbu:ijeu,l)
@@ -604,9 +603,6 @@
         if (guide_zon) CALL guide_zonave_u(2,llm,f_addu)
         CALL guide_addfield_u(llm,f_addu,alpha_T)
-!$OMP MASTER
-        IF (f_out) CALL guide_out("T",jjp1,llm,f_addu(:,:),factt)
-!$OMP END MASTER
-!$OMP BARRIER
-!$OMP DO
+        IF (f_out) CALL guide_out("teta",jjp1,llm,f_addu(:,:)/factt,factt)
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO l=1,llm
           teta(ijbu:ijeu,l)=teta(ijbu:ijeu,l)+f_addu(ijbu:ijeu,l)
@@ -628,8 +624,5 @@
         if (guide_zon) CALL guide_zonave_u(2,1,f_addu(ijb_u:ije_u,1))
         CALL guide_addfield_u(1,f_addu(ijb_u:ije_u,1),alpha_P)
-!$OMP MASTER
-        IF (f_out) CALL guide_out("SP",jjp1,1,f_addu(1:ip1jmp1,1),factt)
-!$OMP END MASTER
-!$OMP BARRIER
+!       IF (f_out) CALL guide_out("ps",jjp1,1,f_addu(ijb_u:ije_u,1)/factt,factt)
 !$OMP MASTER
         ps(ijbu:ijeu)=ps(ijbu:ijeu)+f_addu(ijbu:ijeu,1)
@@ -643,10 +636,10 @@
     if (guide_Q) then
         if (guide_add) then
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l=1,llm
             f_addu(ijbu:ijeu,l)=(1.-tau)*qgui1(ijbu:ijeu,l)+tau*qgui2(ijbu:ijeu,l)
           ENDDO
         else
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l=1,llm
             f_addu(ijbu:ijeu,l)=(1.-tau)*qgui1(ijbu:ijeu,l)+tau*qgui2(ijbu:ijeu,l)-q(ijbu:ijeu,l)
@@ -655,10 +648,7 @@
         if (guide_zon) CALL guide_zonave_u(2,llm,f_addu)
         CALL guide_addfield_u(llm,f_addu,alpha_Q)
-!$OMP MASTER
-        IF (f_out) CALL guide_out("Q",jjp1,llm,f_addu(:,:),factt)
-!$OMP END MASTER
-!$OMP BARRIER
-
-!$OMP DO
+        IF (f_out) CALL guide_out("q",jjp1,llm,f_addu(:,:)/factt,factt)
+
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO l=1,llm
           q(ijbu:ijeu,l)=q(ijbu:ijeu,l)+f_addu(ijbu:ijeu,l)
@@ -668,5 +658,5 @@
     if (guide_v) then
         if (guide_add) then
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l=1,llm
              f_addv(ijbv:ijev,l)=(1.-tau)*vgui1(ijbv:ijev,l)+tau*vgui2(ijbv:ijev,l)
@@ -674,5 +664,5 @@
 
         else
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           DO l=1,llm
             f_addv(ijbv:ijev,l)=(1.-tau)*vgui1(ijbv:ijev,l)+tau*vgui2(ijbv:ijev,l)-vcov(ijbv:ijev,l)
@@ -680,19 +670,13 @@
 
         endif 
-!        CALL WriteField_v('f_addv',f_addv)        
     
         if (guide_zon) CALL guide_zonave_v(2,jjm,llm,f_addv(ijb_v:ije_v,:))
-!        CALL WriteField_v('f_addv',f_addv)        
         
         CALL guide_addfield_v(llm,f_addv(ijb_v:ije_v,:),alpha_v)
-!        CALL WriteField_v('f_addv',f_addv)        
-!        CALL WriteField_v('alpha_v',alpha_v)        
-!$OMP MASTER
-        IF (f_out) CALL guide_out("V",jjm,llm,f_addv(1:ip1jm,:),factt)
-!$OMP END MASTER
-!$OMP BARRIER
-!        CALL WriteField_v('f_addv',f_addv)        
-
-!$OMP DO
+        IF (f_out) CALL guide_out("v",jjm,llm,vcov(ijb_v:ije_v,:),factt)
+        IF (f_out) CALL guide_out("va",jjm,llm,(1.-tau)*vgui1(ijb_v:ije_v,:)+tau*vgui2(ijb_v:ije_v,:),factt)
+        IF (f_out) CALL guide_out("vcov",jjm,llm,f_addv(:,:)/factt,factt)
+
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO l=1,llm
           vcov(ijbv:ijev,l)=vcov(ijbv:ijev,l)+f_addv(ijbv:ijev,l)
@@ -700,9 +684,4 @@
     endif
 
-!    CALL WriteField_u('ucov_guide',ucov)
-!    CALL WriteField_v('vcov_guide',vcov)
-!    CALL WriteField_u('teta_guide',teta)
-!    CALL WriteField_u('masse_guide',masse)
-
   END SUBROUTINE guide_main
 
@@ -723,5 +702,5 @@
     INTEGER :: l
 
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     DO l=1,vsize
       field(ijbu:ijeu,l)=alpha(ijbu:ijeu)*field(ijbu:ijeu,l)*alpha_pcor(l)
@@ -746,5 +725,5 @@
     INTEGER :: l
 
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     DO l=1,vsize
       field(ijbv:ijev,l)=alpha(ijbv:ijev)*field(ijbv:ijev,l)*alpha_pcor(l)
@@ -799,5 +778,5 @@
 
     
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,vsize
         fieldm(:,l)=0.
@@ -869,5 +848,5 @@
     ENDIF
 
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
       DO l=1,vsize
       ! Compute zonal average
@@ -894,4 +873,6 @@
 !=======================================================================
   SUBROUTINE guide_interp(psi,teta)
+    use exner_hyb_loc_m, only: exner_hyb_loc
+    use exner_milieu_loc_m, only: exner_milieu_loc
   USE parallel_lmdz
   USE mod_hallo
@@ -919,6 +900,5 @@
   REAL, ALLOCATABLE, SAVE,DIMENSION (:,:,:)     :: pbary 
   ! Variables pour fonction Exner (P milieu couche)
-  REAL, ALLOCATABLE, SAVE,DIMENSION (:,:,:)    :: pk, pkf
-  REAL, ALLOCATABLE, SAVE, DIMENSION (:,:,:)    :: alpha, beta
+  REAL, ALLOCATABLE, SAVE,DIMENSION (:,:,:)    :: pk
   REAL ,ALLOCATABLE, SAVE, DIMENSION (:,:)        :: pks    
   REAL                               :: unskap
@@ -949,7 +929,4 @@
       ALLOCATE(pbary(iip1,jjb_v:jje_v,llm) )    
       ALLOCATE(pk(iip1,jjb_u:jje_u,llm) )    
-      ALLOCATE(pkf(iip1,jjb_u:jje_u,llm)  )    
-      ALLOCATE(alpha(iip1,jjb_u:jje_u,llm) )    
-      ALLOCATE(beta(iip1,jjb_u:jje_u,llm) )    
       ALLOCATE(pks (iip1,jjb_u:jje_u) )    
       ALLOCATE(qsat(ijb_u:ije_u,llm) )    
@@ -1021,33 +998,33 @@
 !    ....  Calcul de pls , pression au milieu des couches ,en Pascals
     IF (guide_plevs.EQ.1) THEN
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         DO l=1,llm
 	    DO j=jjbu,jjeu
 		DO i =1, iip1
                     pls(i,j,l)=(ap(l)+ap(l+1))/2.+psi(i,j)*(bp(l)+bp(l+1))/2.
-		ENDDO
-	    ENDDO
+                ENDDO
+            ENDDO
         ENDDO
     ELSE
-	CALL pression_loc( ijnb_u, ap, bp, psi, p )
-	if (disvert_type==1) then
-          CALL exner_hyb_loc(ijnb_u,psi,p,alpha,beta,pks,pk,pkf)
+        CALL pression_loc( ijnb_u, ap, bp, psi, p )
+        if (disvert_type==1) then
+          CALL exner_hyb_loc(ijnb_u,psi,p,pks,pk)
         else ! we assume that we are in the disvert_type==2 case
-          CALL exner_milieu_loc(ijnb_u,psi,p,beta,pks,pk,pkf)
+          CALL exner_milieu_loc(ijnb_u,psi,p,pks,pk)
         endif
-	unskap=1./kappa
-!$OMP BARRIER
-!$OMP DO
-	DO l = 1, llm
-	    DO j=jjbu,jjeu
-		DO i =1, iip1
-		    pls(i,j,l) = preff * ( pk(i,j,l)/cpp) ** unskap
-		ENDDO
-	    ENDDO
-	ENDDO
+        unskap=1./kappa
+!$OMP BARRIER
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+   DO l = 1, llm
+       DO j=jjbu,jjeu
+   	DO i =1, iip1
+   	    pls(i,j,l) = preff * ( pk(i,j,l)/cpp) ** unskap
+   	ENDDO
+       ENDDO
+   ENDDO
     ENDIF
 
 !   calcul des pressions pour les grilles u et v
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     do l=1,llm
         do j=jjbu,jjeu
@@ -1066,5 +1043,5 @@
     call massbar_loc(pext, pbarx, pbary )
 !$OMP BARRIER
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     do l=1,llm
         do j=jjbu,jjeu
@@ -1075,5 +1052,5 @@
         enddo
     enddo
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     do l=1,llm
         do j=jjbv,jjev
@@ -1136,5 +1113,5 @@
 !$OMP BARRIER
         ! Conversion en variables GCM
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         do l=1,llm
             do j=jjbu,jjeu
@@ -1206,5 +1183,5 @@
         ! On suppose qu'on a la bonne variable dans le fichier de guidage:
         ! Hum.Rel si guide_hr, Hum.Spec. sinon.
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         do l=1,llm
             do j=jjbu,jjeu
@@ -1231,5 +1208,5 @@
         enddo
         IF (guide_hr) THEN
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
           do l=1,llm
             CALL q_sat(iip1*jjnu,teta(:,jjbu:jjeu,l)*pk(:,jjbu:jjeu,l)/cpp,       &
@@ -1284,5 +1261,5 @@
 
         ! Conversion en variables GCM
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         do l=1,llm
             do j=jjbu,jjeu
@@ -1359,5 +1336,5 @@
 !$OMP BARRIER
         ! Conversion en variables GCM
-!$OMP DO
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
         do l=1,llm
             do j=jjbv,jjev
@@ -1755,4 +1732,5 @@
      endif
 
+
 !  Temperature
      if (guide_T) then
@@ -1908,4 +1886,5 @@
              if (ncidpl.eq.-99) ncidpl=ncidu
          endif
+
 ! Vent meridien
          if (guide_v) then
@@ -2045,4 +2024,5 @@
      endif
 
+
 !  Temperature
      if (guide_T) then
@@ -2096,4 +2076,5 @@
 
          IF (invert_y) THEN
+ 
 !           PRINT*,"Invertion impossible actuellement"
 !           CALL abort_gcm(modname,abort_message,1)
@@ -2130,6 +2111,7 @@
   
 !=======================================================================
-  SUBROUTINE guide_out(varname,hsize,vsize,field,factt)
+  SUBROUTINE guide_out(varname,hsize,vsize,field_loc,factt)
     USE parallel_lmdz
+    USE mod_hallo, ONLY : gather_field_u, gather_field_v
     IMPLICIT NONE
 
@@ -2142,8 +2124,9 @@
     
     ! Variables entree
-    CHARACTER, INTENT(IN)                          :: varname
+    CHARACTER*(*), INTENT(IN)                      :: varname
     INTEGER,   INTENT (IN)                         :: hsize,vsize
-    REAL, DIMENSION (iip1,hsize,vsize), INTENT(IN) :: field
-    REAL, INTENT (IN)                              :: factt
+!   REAL, DIMENSION (iip1,hsize,vsize), INTENT(IN) :: field_loc
+    REAL, DIMENSION (:,:), INTENT(IN) :: field_loc
+    REAL factt
 
     ! Variables locales
@@ -2152,13 +2135,38 @@
     INTEGER       :: nid, id_lonu, id_lonv, id_latu, id_latv, id_tim, id_lev
     INTEGER       :: vid_lonu,vid_lonv,vid_latu,vid_latv,vid_cu,vid_cv,vid_lev
+    INTEGER       :: vid_au,vid_av
     INTEGER, DIMENSION (3) :: dim3
     INTEGER, DIMENSION (4) :: dim4,count,start
-    INTEGER                :: ierr, varid
-    
-    CALL gather_field(field,iip1*hsize,vsize,0)
-    
-    IF (mpi_rank /= 0) RETURN
-    
-    print *,'Guide: output timestep',timestep,'var ',varname
+    INTEGER                :: ierr, varid,l
+    REAL zu(ip1jmp1),zv(ip1jm)
+    REAL, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: field_glo
+    
+!$OMP MASTER
+    ALLOCATE(field_glo(iip1,hsize,vsize))
+!$OMP END MASTER
+!$OMP BARRIER
+
+    print*,'gvide_out apres allocation ',hsize,vsize
+
+    IF (hsize==jjp1) THEN
+        CALL gather_field_u(field_loc,field_glo,vsize)
+    ELSE IF (hsize==jjm) THEN
+       CALL gather_field_v(field_loc,field_glo, vsize)
+    ENDIF
+
+    print*,'guide_out apres gather '
+    CALL Gather_field_u(alpha_u,zu,1)
+    CALL Gather_field_v(alpha_v,zv,1)
+
+    IF (mpi_rank >  0) THEN
+!$OMP MASTER
+       DEALLOCATE(field_glo)
+!$OMP END MASTER
+!$OMP BARRIER
+
+       RETURN
+    ENDIF
+    
+!$OMP MASTER
     IF (timestep.EQ.0) THEN 
 ! ----------------------------------------------
@@ -2183,5 +2191,7 @@
         ierr=NF_DEF_VAR(nid,"cu",NF_FLOAT,2,(/id_lonu,id_latu/),vid_cu)
         ierr=NF_DEF_VAR(nid,"cv",NF_FLOAT,2,(/id_lonv,id_latv/),vid_cv)
-        
+        ierr=NF_DEF_VAR(nid,"au",NF_FLOAT,2,(/id_lonu,id_latu/),vid_au)
+        ierr=NF_DEF_VAR(nid,"av",NF_FLOAT,2,(/id_lonv,id_latv/),vid_av)
+
         ierr=NF_ENDDEF(nid)
 
@@ -2195,4 +2205,6 @@
         ierr = NF_PUT_VAR_DOUBLE(nid,vid_cu,cu)
         ierr = NF_PUT_VAR_DOUBLE(nid,vid_cv,cv)
+        ierr = NF_PUT_VAR_DOUBLE(nid,vid_au,zu)
+        ierr = NF_PUT_VAR_DOUBLE(nid,vid_av,zv)
 #else
         ierr = NF_PUT_VAR_REAL(nid,vid_lonu,rlonu*180./pi)
@@ -2203,4 +2215,6 @@
         ierr = NF_PUT_VAR_REAL(nid,vid_cu,cu)
         ierr = NF_PUT_VAR_REAL(nid,vid_cv,cv)
+        ierr = NF_PUT_VAR_REAL(nid,vid_au,alpha_u)
+        ierr = NF_PUT_VAR_REAL(nid,vid_av,alpha_v)
 #endif
 ! --------------------------------------------------------------------
@@ -2210,5 +2224,5 @@
 ! Pressure (GCM)
         dim4=(/id_lonv,id_latu,id_lev,id_tim/)
-        ierr = NF_DEF_VAR(nid,"P",NF_FLOAT,4,dim4,varid)
+        ierr = NF_DEF_VAR(nid,"SP",NF_FLOAT,4,dim4,varid)
 ! Surface pressure (guidage)
         IF (guide_P) THEN
@@ -2219,4 +2233,6 @@
         IF (guide_u) THEN
             dim4=(/id_lonu,id_latu,id_lev,id_tim/)
+            ierr = NF_DEF_VAR(nid,"u",NF_FLOAT,4,dim4,varid)
+            ierr = NF_DEF_VAR(nid,"ua",NF_FLOAT,4,dim4,varid)
             ierr = NF_DEF_VAR(nid,"ucov",NF_FLOAT,4,dim4,varid)
         ENDIF
@@ -2224,4 +2240,6 @@
         IF (guide_v) THEN
             dim4=(/id_lonv,id_latv,id_lev,id_tim/)
+            ierr = NF_DEF_VAR(nid,"v",NF_FLOAT,4,dim4,varid)
+            ierr = NF_DEF_VAR(nid,"va",NF_FLOAT,4,dim4,varid)
             ierr = NF_DEF_VAR(nid,"vcov",NF_FLOAT,4,dim4,varid)
         ENDIF
@@ -2247,63 +2265,57 @@
     ierr=NF_OPEN("guide_ins.nc",NF_WRITE,nid)
 
+    IF (varname=="SP") timestep=timestep+1
+
+    ierr = NF_INQ_VARID(nid,varname,varid)
     SELECT CASE (varname)
-    CASE ("P")
-        timestep=timestep+1
-        ierr = NF_INQ_VARID(nid,"P",varid)
+    CASE ("SP","ps")
         start=(/1,1,1,timestep/)
         count=(/iip1,jjp1,llm,1/)
-#ifdef NC_DOUBLE
-        ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
-#else
-        ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
-#endif
-    CASE ("SP")
-        ierr = NF_INQ_VARID(nid,"ps",varid)
-        start=(/1,1,timestep,0/)
-        count=(/iip1,jjp1,1,0/)
-#ifdef NC_DOUBLE
-        ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt)
-#else
-        ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt)
-#endif
-    CASE ("U")
-        ierr = NF_INQ_VARID(nid,"ucov",varid)
+    CASE ("v","va","vcov")
+        start=(/1,1,1,timestep/)
+        count=(/iip1,jjm,llm,1/)
+    CASE DEFAULT
         start=(/1,1,1,timestep/)
         count=(/iip1,jjp1,llm,1/)
+    END SELECT
+
+!$OMP END MASTER
+!$OMP BARRIER
+
+    SELECT CASE (varname)
+
+    CASE("u","ua")
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm 
+            field_glo(:,2:jjm,l)=field_glo(:,2:jjm,l)/cu(:,2:jjm)
+            field_glo(:,1,l)=0. ; field_glo(:,jjp1,l)=0.
+        ENDDO
+    CASE("v","va")
+!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
+        DO l=1,llm
+           field_glo(:,:,l)=field_glo(:,:,l)/cv(:,:)
+        ENDDO
+    END SELECT
+
+!    if (varname=="ua") then
+!    call dump2d(iip1,jjp1,field_glo,'ua gui1 1ere couche ')
+!    call dump2d(iip1,jjp1,field_glo(:,:,llm),'ua gui1 llm ')
+!    endif
+
+!$OMP MASTER
+
 #ifdef NC_DOUBLE
-        ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt)
+    ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field_glo)
 #else
-        ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt)
+    ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field_glo)
 #endif
-    CASE ("V")
-        ierr = NF_INQ_VARID(nid,"vcov",varid)
-        start=(/1,1,1,timestep/)
-        count=(/iip1,jjm,llm,1/)
-#ifdef NC_DOUBLE
-        ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt)
-#else
-        ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt)
-#endif
-    CASE ("T")
-        ierr = NF_INQ_VARID(nid,"teta",varid)
-        start=(/1,1,1,timestep/)
-        count=(/iip1,jjp1,llm,1/)
-#ifdef NC_DOUBLE
-        ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt)
-#else
-        ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt)
-#endif
-    CASE ("Q")
-        ierr = NF_INQ_VARID(nid,"q",varid)
-        start=(/1,1,1,timestep/)
-        count=(/iip1,jjp1,llm,1/)
-#ifdef NC_DOUBLE
-        ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt)
-#else
-        ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt)
-#endif
-    END SELECT
- 
+
     ierr = NF_CLOSE(nid)
+
+       DEALLOCATE(field_glo)
+!$OMP END MASTER
+!$OMP BARRIER
+
+    RETURN
 
   END SUBROUTINE guide_out
@@ -2329,4 +2341,53 @@
   end subroutine correctbid
 
+
+!====================================================================
+! Ascii debug output. Could be reactivated
+!====================================================================
+
+subroutine dump2du(var,varname)
+use parallel_lmdz
+use mod_hallo
+implicit none
+include 'dimensions.h'
+include 'paramet.h'
+
+      CHARACTER (len=*) :: varname
+
+
+real, dimension(ijb_u:ije_u) :: var
+
+real, dimension(ip1jmp1) :: var_glob
+
+    RETURN
+
+    call barrier
+    CALL Gather_field_u(var,var_glob,1)
+    call barrier
+
+    if (mpi_rank==0) then
+       call dump2d(iip1,jjp1,var_glob,varname)
+    endif
+
+    call barrier
+
+    return
+    end subroutine dump2du
+
+!====================================================================
+! Ascii debug output. Could be reactivated
+!====================================================================
+subroutine dumpall
+     implicit none
+     include "dimensions.h"
+     include "paramet.h"
+     include "comgeom.h"
+     call barrier
+     call dump2du(alpha_u(ijb_u:ije_u),'  alpha_u couche 1')
+     call dump2du(unat2(:,jjbu:jjeu,nlevnc),'  unat2 couche nlevnc')
+     call dump2du(ugui1(ijb_u:ije_u,1)*sqrt(unscu2(ijb_u:ije_u)),'  ugui1 couche 1')
+     return
+end subroutine dumpall
+
 !===========================================================================
 END MODULE guide_loc_mod
