Index: /trunk/SOURCES/Fichiers-parametres/Makefile.tof-lsce3130.inc
===================================================================
--- /trunk/SOURCES/Fichiers-parametres/Makefile.tof-lsce3130.inc	(revision 70)
+++ /trunk/SOURCES/Fichiers-parametres/Makefile.tof-lsce3130.inc	(revision 71)
@@ -42,5 +42,5 @@
                                                                       # (normalement reproductible)
     ifeq ($(debug), 1)
-		ARITHM    = $(ARITHMi) -CB -g -traceback -warn all
+		ARITHM    = $(ARITHMi) -CB -g -p -traceback -warn all -openmp
 	else
 		ARITHM    = $(ARITHMi) -diag-disable warn
Index: /trunk/SOURCES/New-remplimat/diagno-L2_mod.f90
===================================================================
--- /trunk/SOURCES/New-remplimat/diagno-L2_mod.f90	(revision 70)
+++ /trunk/SOURCES/New-remplimat/diagno-L2_mod.f90	(revision 71)
@@ -1,5 +1,5 @@
 !module diagno_L2_mod               ! Nouvelle version, compatible remplimat 2008 Cat
 module diagno_mod                   ! nom pendant les tests
-
+ !$ USE OMP_LIB
 use module3D_phy
 use module_choix
@@ -238,11 +238,25 @@
 ! Pour les noeuds posés mais ayant un voisin stream ou flottant, on calcule
 ! la viscosité avec stream/shelves
-
 ! le calcul se fait sur les noeuds majeurs
+
+!$  integer :: rang ,nb_taches
+!$  logical :: paral
+
+  integer :: t1,t2,ir
+  real                           :: temps, t_cpu_0, t_cpu_1, t_cpu, norme  
+
 if (itracebug.eq.1)  call tracebug(' Calc pvi')
+
+!$OMP PARALLEL PRIVATE(rang,iplus1,jplus1,sf3,sf1,BT2,phiphi,ttau,d02,discr)
+!$ paral = OMP_IN_PARALLEL()
+!$ rang=OMP_GET_THREAD_NUM()
+!$ nb_taches=OMP_GET_NUM_THREADS()
+
+!$OMP WORKSHARE
 pvi(:,:)  = pvimin
 Abar(:,:) = 0.
-
-
+!$OMP END WORKSHARE
+
+!$OMP DO
 do j=1,ny
    do i=1,nx
@@ -322,8 +336,9 @@
    end do
 end do
+!$OMP END DO
 
 ! cas des noeuds fictifs, si l'épaisseur est très petite 
 ! pvimin est très petit
-
+!$OMP WORKSHARE
 where (H(:,:).le.1.)
    pvi(:,:) = pvimin
@@ -334,6 +349,7 @@
 end where
 
+
 debug_3D(:,:,27)=pvi(:,:)
-
+!$OMP END WORKSHARE
 ! attention run 35
 !-------------------- 
@@ -345,5 +361,5 @@
 
 !  calcul de la viscosite integree au milieu des mailles (pvm)
-
+!$OMP DO
 do i=2,nx
    do j=2,ny
@@ -355,4 +371,7 @@
    end do
 end do
+!$OMP END DO
+!$OMP END PARALLEL
+
 end subroutine calc_pvi
 !------------------------------------------------------------------
@@ -379,6 +398,6 @@
 !    -41               -1  Sud                -12 
 
-
-
+!$OMP PARALLEL
+!$OMP WORKSHARE
 imx_diag(:,:)=0
 imy_diag(:,:)=0
@@ -432,4 +451,6 @@
 imx_diag(1,:)=0     ! hors domaine a cause des mailles alternees
 imy_diag(:,1)=0     ! hors domaine a cause des mailles alternees
+!$OMP END WORKSHARE
+!$OMP END PARALLEL
  
 end subroutine imx_imy_nx_ny
Index: /trunk/SOURCES/Temperature-routines/Qprod_icetemp.f90
===================================================================
--- /trunk/SOURCES/Temperature-routines/Qprod_icetemp.f90	(revision 70)
+++ /trunk/SOURCES/Temperature-routines/Qprod_icetemp.f90	(revision 71)
@@ -17,4 +17,6 @@
 
   use Icetemp_declar
+!$ USE OMP_LIB
+
 
   implicit none
@@ -41,4 +43,6 @@
   real, dimension(Nx,Ny)      :: Tox           !< Contraintes Sur Maille Mx
   real, dimension(Nx,Ny)      :: Toy           !< Contraintes Sur Maille Mx
+  real      :: Chalk_1       !< Utilise Pour Le Calcul De Chalk : Glace PosÃ©e
+  real      :: Chalk_2       !< Utilise Pour Le Calcul De Chalk : Ice Streams Et Ice
 
 
@@ -52,8 +56,12 @@
      ! Q_prod_demi(T_m%T,T_m%Tpmp,Deform_m%Tobmx,Deform_m%Tobmy,Geom_m%H,Geom_m%Hmx,Geom_m%Hmy,mask_flot_m%Flot,mask_flot_m%Flotmx,mask_flot_m%Flotmy,mask_flot_m%Flgzmx ,mask_flot_m%Flgzmy,Geom_m%Slop_x,Geom_m%Slop_y,Ice_flow_m%Ddx,Ice_flow_m%Ddy,&
      !      Ice_flow_m%Ddbx,Ice_flow_m%Ddby,Deform_m%Epsxx,Deform_m%Epsyy,Deform_m%Epsxy,mask_flot_m%Gzmx,mask_flot_m%Gzmy,Deform_m%Btt,Ice_flow_m%Uxbar,Ice_flow_m%Uybar,therm_var_m%Phid,Deform_m%Glen,Deform_m%Visc)
-
-     do K=2,Nz
-        do J=2,Ny-1
-           do I=2,Nx-1
+     
+
+
+    !$OMP PARALLEL PRIVATE(chalk_1,chalk_2)
+    !$OMP DO COLLAPSE(2)
+    do K=2,Nz
+    do J=2,Ny-1
+	    do I=2,Nx-1
 
               ! Calcul De La Chaleur De Deformation Selon Xx Yy Zz Et Xy
@@ -80,9 +88,15 @@
            end do
         end do
-     end do
+!        !$ i_min=min(i_min,j)
+!        !$ i_max=max(i_max,j)
+     end do
+	!$OMP END DO NOWAIT
+!	!$ print*,'nb_taches = ', nb_taches
+!   !$ print*,"Rang : ",rang," i_min : ",i_min," i_max : ",i_max
 
      !  Partie Sia   Calcul De La Chaleur Produite Sur Chaque Demi Maille
-     do L=1,size(Btt,4) !N1poly,N2poly
-        do J=2,Ny
+		!$OMP DO COLLAPSE(2)
+		do L=1,size(Btt,4) !N1poly,N2poly
+      do J=2,Ny
            do I=2,Nx
               !          Ffx A 3 Dimensions !
@@ -92,31 +106,35 @@
         end do
      end do
-
-     do L=1,size(Btt,4)!N1poly,N2poly
-        do K=2,Nz
-           do J=2,Ny
-              do I=2,Nx
-                 if ((.not.Flotmx(I,J)).and.(.not.fleuvemx(I,J))) then ! grounded et slowssa
-                    Chalx(I,J,K,L)=(Btt(I-1,J,K,L)+Btt(I,J,K,L))*Ffx(I,J,L) !&
+     !$OMP END DO
+     
+     !$OMP DO COLLAPSE(2)
+	  do K=2,Nz
+       do J=2,Ny
+	      do I=2,Nx
+		     do L=1,size(Btt,4)!N1poly,N2poly
+		    if ((.not.Flotmx(I,J)).and.(.not.fleuvemx(I,J))) then ! grounded et slowssa
+			Chalx(I,J,K,L)=(Btt(I-1,J,K,L)+Btt(I,J,K,L))*Ffx(I,J,L) !&
                     !                      *Ro*G*Ee(K)**(Glen(L)+1)/Cp(I,J,K)
 
-                 else if (fleuvemx(I,J)) then ! Ice Streams
-                    Chalx(I,J,K,L)=0.
-                 else                     ! Ice Shelves  
-                    Chalx(I,J,K,L)=0.
-                 endif
-                 if ((.not.Flotmy(I,J)).and.(.not.fleuvemy(I,J))) then ! grounded et slowssa
-                    Chaly(I,J,K,L)=(Btt(I,J-1,K,L)+Btt(I,J,K,L))*Ffy(I,J,L) !&
+		    else if (fleuvemx(I,J)) then ! Ice Streams
+			Chalx(I,J,K,L)=0.
+		    else                     ! Ice Shelves  
+			Chalx(I,J,K,L)=0.
+		    endif
+		    if ((.not.Flotmy(I,J)).and.(.not.fleuvemy(I,J))) then ! grounded et slowssa
+			Chaly(I,J,K,L)=(Btt(I,J-1,K,L)+Btt(I,J,K,L))*Ffy(I,J,L) !&
                     !                      *Ro*G*Ee(K)**(Glen(L)+1)/Cp(I,J,K)
-                 else if (fleuvemy(I,J)) then  ! Ice Streams
-                    Chaly(I,J,K,L)=0.
-                 else                      ! Ice Shelves
-                    Chaly(I,J,K,L)=0.
-                 endif
-
-              end do
-           end do
-        end do
-     end do
+		    else if (fleuvemy(I,J)) then  ! Ice Streams
+			Chaly(I,J,K,L)=0.
+		    else                      ! Ice Shelves
+			Chaly(I,J,K,L)=0.
+		    endif
+
+		   end do
+	    end do
+      end do
+     end do
+     !$OMP END DO
+     
 
      !         Nouvelle Formulation De Chaldef_maj(I,J,K), Le 4 Vient Des Moyennes
@@ -125,8 +143,8 @@
      !         Ancienne Formulation Chal=(Ro*G*H(I,J))**4*(Sx2+Sy2)*(Sx*Sx+Sy*Sy) 
 
-     do K=2,Nz
-        do J=1,Ny-1
-           do I=1,Nx-1
-
+    !$OMP DO COLLAPSE(2)
+    do K=2,Nz
+      do J=1,Ny-1
+	    do I=1,Nx-1
               ! Modif Christophe Mars 2000 : Chalx Et Chaly Sont A 4 Dim
               Chaldef_maj(I,J,K)= 0.
@@ -152,5 +170,8 @@
         end do
      end do
+     !$OMP END DO NOWAIT
+	  
      ! Chaleur Produite A La Base Par Le Glissement
+     !$OMP DO
      do J=2,Ny
         do I=2,Nx
@@ -168,10 +189,12 @@
            endif
 
-        end do
-     end do
-
+        end do   
+     end do
+     !$OMP END DO
+	  
      !  Boundary Condition Ice-Rock Interface 
      K=Nz
 
+     !$OMP DO
      do J=2,Ny-1
         do I=2,Nx-1
@@ -227,5 +250,7 @@
         end do
      end do
-
+     !$OMP END DO
+     !$OMP END PARALLEL
+     
 
   case (2)             ! Q_prod_centre : Calcul Avec La Somme Des Carres
@@ -904,3 +929,4 @@
 
   end select
+
 end subroutine Qprod_ice
Index: /trunk/SOURCES/Temperature-routines/icetemp_declar_mod.f90
===================================================================
--- /trunk/SOURCES/Temperature-routines/icetemp_declar_mod.f90	(revision 70)
+++ /trunk/SOURCES/Temperature-routines/icetemp_declar_mod.f90	(revision 71)
@@ -32,6 +32,4 @@
   ! a la Base De L'Ice Shelf
   Integer :: Ifail1             !< Permet De Detecter Les Erreurs 
-  Real :: Chalk_1               !< Utilise Pour Le Calcul De Chalk : Glace PosÃ©e
-  Real :: Chalk_2               !< Utilise Pour Le Calcul De Chalk : Ice Streams Et Ice Shelves
   Real :: Chalbed_1             !< Utilise Pour Le Calcul De Chalbed
   Real :: Coefadv               !< Pour Limiter Le Flux De Chaleur Horiz.
Index: /trunk/SOURCES/deformation_mod_2lois.f90
===================================================================
--- /trunk/SOURCES/deformation_mod_2lois.f90	(revision 70)
+++ /trunk/SOURCES/deformation_mod_2lois.f90	(revision 71)
@@ -179,9 +179,13 @@
 subroutine flow_general
 
+  !$ USE OMP_LIB
   implicit none
 
+  !$OMP PARALLEL
+  !$OMP WORKSHARE
   teta(:,:,:) = t(:,:,1:nz)-tpmp(:,:,:)
-
-
+  !$OMP END WORKSHARE
+
+  !$OMP DO COLLAPSE(2)
   do k=nz-1,1,-1
      do i=2,nx-1
@@ -192,4 +196,6 @@
      end do
   end do
+  !$OMP END DO
+  !$OMP END PARALLEL
 
 end subroutine flow_general
@@ -197,4 +203,5 @@
 subroutine flowlaw (iiglen)
 
+  !$ USE OMP_LIB
 
   implicit none
@@ -216,10 +223,20 @@
 !  real,dimension(nz) :: e          ! vertical coordinate in ice, scaled to h zeta
   real :: de= 1./(nz-1)
+! variables openmp :  
+  !$  integer :: rang
+  !$ integer, dimension(:), allocatable :: tab_sync
+  !$ integer :: nb_taches
+
 
   e(1)=0.
   e(nz)=1.
+  
+  !$OMP PARALLEL PRIVATE(bat,q,aat,ssec,zetat)
+  !$ nb_taches = OMP_GET_NUM_THREADS()
+  !$OMP DO 
   do k=1,nz
      if ((k.ne.1).and.(k.ne.nz)) e(k)=(k-1.)/(nz-1.)
   end do
+  !$OMP END DO NOWAIT
 
   ! exposant de la loi de deformation utilisee : glen(iiglen)
@@ -230,4 +247,5 @@
   !    boucle pour btt a k=1
   ti1=273.15*273.15
+  !$OMP DO
   do j=2,ny-1
      do i=2,nx-1
@@ -239,8 +257,10 @@
      end do
   end do
+  !$OMP END DO
 
   ! boucle pour tous les autres btt
+  !$OMP DO COLLAPSE(2)
   do k=nz-1,1,-1
-     do j=2,ny-1
+	do j=2,ny-1  
         do i=2,nx-1  
            if (h(i,j).gt.1.) then
@@ -361,7 +381,8 @@
      end do
   end do
-
+  !$OMP END DO NOWAIT
+  
   !     integration de sa et s2a
-
+  !$OMP DO
   do j=1,ny
      do i=1,nx  
@@ -371,6 +392,25 @@
      end do
   end do
-
+  !$OMP END DO
+  !$OMP END PARALLEL
+  
+
+  ! Allocation et initialisation du tableau tab_sync
+  ! qui gere la synchronisation entre les differents threads
+  !$ allocate(tab_sync(0:nb_taches-1))
+  !$ tab_sync(0:nb_taches-1) = 1
+  !$OMP PARALLEL private(i,j,k,rang) shared(tab_sync)
+  !$ rang = OMP_GET_THREAD_NUM()  
   do k=nz-1,1,-1
+       ! Synchronisation des threads
+     !$     if (rang /= 0) then
+     !$        do
+     !$OMP FLUSH(tab_sync) 
+     !$           if (tab_sync(rang-1)>=tab_sync(rang)+1) exit
+     !$        enddo
+     !$OMP FLUSH(sa)
+     !$OMP FLUSH(s2a)
+     !$     endif
+     !$OMP DO SCHEDULE(STATIC)
      do j=1,ny
         do i=1,nx
@@ -386,6 +426,11 @@
         end do
      end do
-  end do
-
+     !$OMP END DO NOWAIT
+!     ! Mis a jour du tableau tab_sync
+     !$     tab_sync(rang) = tab_sync(rang) + 1
+     !$OMP FLUSH(tab_sync,sa,s2a)
+  end do
+
+  !$OMP WORKSHARE
   !     cas particulier des bords
   sa(:,1,:,iiglen)=sa(:,2,:,iiglen)
@@ -402,7 +447,8 @@
   s2a(nx,:,:,iiglen)=s2a(nx-1,:,:,iiglen)
   btt(nx,:,:,iiglen)=btt(nx-1,:,:,iiglen)
-
+  !$OMP END WORKSHARE
+  !$OMP END PARALLEL
+  
   ! calcul des moyennes sur les mailles staggered
-
   do k=1,nz
      tab2d=sa(:,:,k,iiglen)
@@ -417,8 +463,23 @@
      s2a_my(:,:,k,iglen)=tab_my
   end do
-
+ 
 ! attribution de debug_3d pour les sorties s2a
 ! loi 1 -> 190 dans description variable -> 90 dans debug_3d
-debug_3d(:,:,90+iiglen-1) = s2a(:,:,1,iiglen)
+!debug_3d(:,:,90+iiglen-1) = s2a(:,:,1,iiglen)
+
+
+!~   ! Temps elapsed final
+!~   call system_clock(count=t2, count_rate=ir)
+!~   temps=real(t2 - t1,kind=4)/real(ir,kind=4)
+!~   ! Temps CPU de calcul final
+!~   call cpu_time(t_cpu_1)
+!~   t_cpu = t_cpu_1 - t_cpu_0
+ 
+!~   ! Impression du resultat.
+!~   print '(//,3X,"Valeurs de nx et ny : ",I5,I5/,              &
+!~            & 3X,"Temps elapsed       : ",1PE10.3," sec.",/, &
+!~            & 3X,"Temps CPU           : ",1PE10.3," sec.",/, &
+!~            & 3X,"Norme (PB si /= 0)  : ",1PE10.3,//)', &
+!~            nx,ny,temps,t_cpu,norme
 
 end subroutine flowlaw
Index: /trunk/SOURCES/flottab2-0.7.f90
===================================================================
--- /trunk/SOURCES/flottab2-0.7.f90	(revision 70)
+++ /trunk/SOURCES/flottab2-0.7.f90	(revision 71)
@@ -16,4 +16,5 @@
 module flottab_mod
   
+  !$ USE OMP_LIB
 USE module3D_phy
 use module_choix
@@ -104,4 +105,12 @@
 
 
+!~   integer :: t1,t2,ir
+!~   real                           :: temps, t_cpu_0, t_cpu_1, t_cpu, norme  
+  
+!~    ! Temps CPU de calcul initial.
+!~    call cpu_time(t_cpu_0)
+!~    ! Temps elapsed de reference.
+!~    call system_clock(count=t1, count_rate=ir)
+
 
 if (itracebug.eq.1)  call tracebug(' Entree dans routine flottab')
@@ -112,5 +121,7 @@
 ! cas particulier des runs paleo ou on impose un masque grounded
 
+!$OMP PARALLEL PRIVATE(archim,surnet)
  if (igrdline.eq.2) then
+    !$OMP WORKSHARE
     where ( mk_init(:,:).eq.1)                 ! pose
        flot(:,:) = .False.
@@ -120,4 +131,5 @@
        flot(:,:) = .True.
     end where
+    !$OMP END WORKSHARE
  end if
 
@@ -129,4 +141,5 @@
 
        appel_new_flot=.false.
+       !$OMP DO
        do j=1,ny
           do i=1,nx
@@ -136,7 +149,9 @@
           enddo
        enddo
-
+       !$OMP END DO
+       
 ! ICE(:,:)=(H(:,:).gt.1) ! ice=.true. si epaisseur > 1m
 
+      !$OMP WORKSHARE
       ICE(:,:)=0
       front(:,:)=0
@@ -148,4 +163,5 @@
       cotemy(:,:)=.false.
       boost=.false.
+      !$OMP END WORKSHARE
 
 ! fin de l'initialisation
@@ -155,5 +171,5 @@
 ! -------------------------------------
 
-
+ !$OMP DO
  do j=1,ny
    do i=1,nx
@@ -223,5 +239,5 @@
     end do
  end do
-
+ !$OMP END DO
 
 !!$ do i=1,nx
@@ -240,5 +256,5 @@
 
 !-----------------------------------------------------------------------
-
+ !$OMP DO
 domain_x: do j=1,ny       
          do i=2,nx
@@ -280,9 +296,10 @@
           end do
        end do domain_x
-
-if (itracebug.eq.1)  call tracebug('  routine flottab apres domain_x')
+ !$OMP END DO
+!if (itracebug.eq.1)  call tracebug('  routine flottab apres domain_x')
 
 !     3_y    B- NOUVELLE DEFINITION DE FLOTMY
 !         --------------------------------
+ !$OMP DO
 domain_y: do j=2,ny       
          do i=1,nx
@@ -318,5 +335,5 @@
           end do
        end do domain_y
-
+ !$OMP END DO
 
 
@@ -351,9 +368,11 @@
 !      4- determination des iles
 !      -------------------------
- 
+          !$OMP WORKSHARE
           ilemx(:,:)=.false.
           ilemy(:,:)=.false.
-
-!       selon x 
+          !$OMP END WORKSHARE
+
+!       selon x
+  !$OMP DO
 ilesx:  do j=2,ny-1
            do i=3,nx-2
@@ -404,6 +423,8 @@
          end do
       end do ilesx
-
-!       selon y 
+   !$OMP END DO
+
+!       selon y
+   !$OMP DO
 ilesy: do j=3,ny-2
            do i=2,nx-1
@@ -452,4 +473,6 @@
          end do
       end do ilesy
+    !$OMP END DO
+    !$OMP END PARALLEL
 ! fin des iles
 
@@ -479,5 +502,6 @@
 
 !   6- calcule les vitesses des points qui sont devenus gzm
-         
+!$OMP PARALLEL
+!$OMP DO         
 do j=1,ny
    do i=2,nx-1
@@ -492,5 +516,7 @@
    end do
 end do
-
+!$OMP END DO
+
+!$OMP DO 
 do j=2,ny-1
    do i=1,nx
@@ -504,5 +530,5 @@
     end do
 end do
-
+!$OMP END DO
 
 
@@ -511,13 +537,16 @@
 
 if (nt.ge.2) then   ! pour ne pas faire ce calcul lors du premier passage
+   !$OMP WORKSHARE
    uxbar(:,:)=uxs1(:,:)
-   uybar(:,:)=uys1(:,:) 
+   uybar(:,:)=uys1(:,:)
+   !$OMP END WORKSHARE
 endif
 
+!$OMP WORKSHARE
 flgzmx(:,:)=(marine.and.(flotmx(:,:).or.gzmx(:,:).or.ilemx(:,:)))   &
      .or.(.not.marine.and.flotmx(:,:))
 flgzmy(:,:)=(marine.and.(flotmy(:,:).or.gzmy(:,:).or.ilemy(:,:)))   &
      .or.(.not.marine.and.flotmy(:,:))
-
+!$OMP END WORKSHARE
 
 
@@ -526,4 +555,5 @@
 !       fbm est vrai si le point est flottant mais un des voisins est pose 
 !_________________________________________________________________________
+!$OMP DO
 do j=2,ny-1
   do i=2,nx-1
@@ -536,5 +566,5 @@
   end do
 end do
-
+!$OMP END DO
 
 
@@ -552,4 +582,5 @@
 !!$end do
 
+!$OMP WORKSHARE
 where (flot(:,:))
    where (H(:,:).gt.(1.1)) 
@@ -565,4 +596,6 @@
    end where
 end where
+!$OMP END WORKSHARE
+!$OMP END PARALLEL
 
 call DETERMIN_TACHE 
@@ -581,5 +614,5 @@
 !----------------------------------------------!
 !On determine les differents ice strean/shelf  !
-      call DETERMIN_TACHE                      !
+!      call DETERMIN_TACHE                      !
 !----------------------------------------------!
 
@@ -597,5 +630,6 @@
 
 !On compte comme englacé uniquement les calottes dont une partie est posée      
-
+!$OMP PARALLEL PRIVATE(smax_,smax_coord,smax_i,smax_j)
+!$OMP DO
 do i=3,nx-2
    do j=3,ny-2
@@ -666,5 +700,6 @@
    end do
 end do
-
+!$OMP END DO
+!$OMP END PARALLEL
 
 !----------------------------------------------
@@ -691,5 +726,17 @@
 !print*, 'front',front(50,30),ice(50,30),flotmx(i,j),uxbar(i,j)
 
-
+!~   ! Temps elapsed final
+!~   call system_clock(count=t2, count_rate=ir)
+!~   temps=real(t2 - t1,kind=4)/real(ir,kind=4)
+!~   ! Temps CPU de calcul final
+!~   call cpu_time(t_cpu_1)
+!~   t_cpu = t_cpu_1 - t_cpu_0
+ 
+!~   ! Impression du resultat.
+!~   print '(//,3X,"Valeurs de nx et ny : ",I5,I5/,              &
+!~            & 3X,"Temps elapsed       : ",1PE10.3," sec.",/, &
+!~            & 3X,"Temps CPU           : ",1PE10.3," sec.",/, &
+!~            & 3X,"Norme (PB si /= 0)  : ",1PE10.3,//)', &
+!~            nx,ny,temps,t_cpu,norme
 
 end subroutine flottab
@@ -700,4 +747,6 @@
 !>
 subroutine determin_tache
+
+!!$ USE OMP_LIB
 
 implicit none
@@ -720,14 +769,18 @@
 enddo
 !      table_in  = .false.
-
+!!$OMP PARALLEL
+!!$OMP WORKSHARE
 table_out(:,:) = 0
 iceberg(:)  = .true.
 icetrim (:) = .true.
 nb_pts_tache(:) = 0
-
+!!$OMP END WORKSHARE
+!!$OMP END PARALLEL
 !    open(unit=100,file="tache.data",status='replace')
 
 ! 2-reperage des taches
 !----------------------
+!!$OMP PARALLEL PRIVATE(mask,label,indice)
+!!$OMP DO
 do i=2,nx-1
   do j=2,ny-1
@@ -736,5 +789,5 @@
 
      IF (ice(i,j).ge.1) THEN ! on est sur la glace-----------------------------!
-
+			
         if ((ice(i-1,j).ge.1).or.(ice(i,j-1).ge.1)) then   !masque de 2 cases adjacentes
            !      un des voisins est deja en glace
@@ -747,4 +800,5 @@
               if (mask(indice).gt.0) label=min(label,mask(indice))
            enddo
+!cdc       label=min(label,minval(mask(:), mask=mask > 0))
 
            !on fixe la valeur de la tache voisine minimun au point etudie (via label)
@@ -798,10 +852,12 @@
   enddo
 enddo
-
+!!$OMP END DO
+!!$OMP END PARALLEL
 
 
 ! On reorganise compt en ecrivant le numero de la tache fondamentale
 ! i.e. du plus petit numero present sur la tache (Sans utiliser de recursivité)
-! On indique aussi le nb de point que contient chaque taches (nb_pts_tache)        
+! On indique aussi le nb de point que contient chaque taches (nb_pts_tache)
+
 do indice=1,label_max
    vartemp = compt(indice)
@@ -813,4 +869,6 @@
 enddo
 
+!!$OMP PARALLEL
+!!$OMP DO REDUCTION(+:nb_pts_tache)
 do i=1,nx
    do j=1,ny
@@ -821,6 +879,6 @@
    enddo
 enddo
-
-
+!!$OMP END DO
+!!$OMP END PARALLEL
 
 
@@ -853,10 +911,12 @@
 !>
 subroutine determin_front
-
+!!$ USE OMP_LIB
 integer :: i_moins1,i_plus1,i_plus2
 integer :: j_moins1,j_plus1,j_plus2
       
-      do i=3,nx-2
-       do j=3,ny-2
+      !!$OMP PARALLEL
+      !!$OMP DO
+      do j=3,ny-2
+        do i=3,nx-2
 
  surice:if  (ice(i,j).eq.0) then
@@ -910,5 +970,5 @@
        end do
       end do
-
+      !!$OMP END DO
 
 !!$call detect_assym(nx,ny,0,41,1,0,1,0,H,itestf)
@@ -923,5 +983,7 @@
 
 !     print*,'dans remplissage baies',time
+       
 baies: do k=1,2
+!!$OMP DO PRIVATE(i_moins1,j_moins1,i_plus1,j_plus1,i_plus2,j_plus2)
 do j=1,ny
    do i=1,nx
@@ -958,4 +1020,5 @@
    end do
 end do
+!!$OMP END DO
 end do baies
 
@@ -969,7 +1032,7 @@
 !!$end if
 
-
-do i=2,nx-1
-   do j=2,ny-1
+!!$OMP DO
+do j=2,ny-1
+   do i=2,nx-1
 
       if (ice(i,j).eq.1) then     !         test si ice=1
@@ -983,9 +1046,10 @@
    end do
 end do
+!!$OMP END DO
 
 ! traitement des bords. On considere que l'exterieur n'a pas de glace
 ! attention ce n'est vrai que sur la grande grille
 
-
+!!$OMP DO PRIVATE(i)
 do j=2,ny-1
    i=1
@@ -994,5 +1058,7 @@
    front(i,j)=(ice(i-1,j)+ice(i,j+1)+ice(i,j-1))
 end do
-
+!!$OMP END DO 
+
+!!$OMP DO PRIVATE(j)
 do i=2,nx-1
    j=1 
@@ -1001,5 +1067,5 @@
    front(i,j)=(ice(i-1,j)+ice(i+1,j)+ice(i,j-1))
 end do
-
+!!$OMP END DO 
 ! traitement des coins
 
@@ -1023,5 +1089,5 @@
 !   si ces deux taches sont posées (ou une des deux), il n'y a pas assez de conditions aux limites
 
-
+!!$OMP DO 
 do j=1,ny
    do i=1,nx-1
@@ -1036,5 +1102,7 @@
    end do
 end do
-
+!!$OMP END DO
+
+!!$OMP DO 
 do j=1,ny-1
    do i=1,nx
@@ -1049,4 +1117,5 @@
    end do
 end do
+!!$OMP END DO
 
 !isolx signifie pas de voisins en x
@@ -1056,4 +1125,5 @@
 
 ! calcul de frontfacex et isolx
+!!$OMP DO
 do j=1,ny
    do i=2,nx-1
@@ -1075,6 +1145,8 @@
    end do
 end do
+!!$OMP END DO
 
 ! calcul de frontfacey et isoly
+!!$OMP DO
 do j=2,ny-1
    do i=1,nx
@@ -1096,5 +1168,5 @@
    end do
 end do
-
+!!$OMP END DO
 
 
@@ -1102,5 +1174,5 @@
 ! attention ce n'est vrai que sur la grande grille
 
-
+!!$OMP DO PRIVATE(i)
 do j=2,ny-1
    i=1
@@ -1121,5 +1193,7 @@
    end if
 end do
-
+!!$OMP END DO
+
+!!$OMP DO PRIVATE(j)
 do i=2,nx-1
    j=1 
@@ -1140,6 +1214,6 @@
    end if
 end do
-
-
+!!$OMP END DO
+!!OMP END PARALLEL
 
 return
Index: /trunk/SOURCES/mix-SIA-L1_mod.f90
===================================================================
--- /trunk/SOURCES/mix-SIA-L1_mod.f90	(revision 70)
+++ /trunk/SOURCES/mix-SIA-L1_mod.f90	(revision 71)
@@ -53,4 +53,7 @@
 subroutine mix_SIA_L1
 
+!$ USE OMP_LIB
+! variables parallelisation openMP
+!!$  integer :: rang ,nb_taches
 
 ! subroutine qui associe SIA et L1
@@ -59,5 +62,5 @@
 
 ! use module_choix
-    if (itracebug.eq.1)  call tracebug(' routine mix_SIA_L1')
+if (itracebug.eq.1)  call tracebug(' routine mix_SIA_L1')
 
 debug_3D(:,:,9)=0.
@@ -73,5 +76,6 @@
    ! que celles du L1. On garde le L1 comme vitesse basale.
    ! version utilisee pour les runs MIS11 de Cairns
-
+	!$OMP PARALLEL
+   !$OMP DO
    do j=2,ny
       do i=2,nx
@@ -95,36 +99,70 @@
       end do
    end do
+   !$OMP END DO
+	!$OMP END PARALLEL
 
 else if (i_resolmeca.eq.2) then
 
 ! addition systematique
-
+!	!$OMP PARALLEL PRIVATE(rang,nb_taches)
+!	!$ rang=OMP_GET_THREAD_NUM()
+!	!$ nb_taches=OMP_GET_NUM_THREADS()
+!	!$OMP DO SCHEDULE(STATIC,NY/nb_taches)
+	!$OMP PARALLEL
+   !$OMP DO
    do j=2,ny
       do i=2,nx
+! test sur tout le tableau :
          if (flgzmx(i,j)) then 
-            debug_3D(i,j,11)=uxflgz(i,j)
+!            debug_3D(i,j,11)=uxflgz(i,j)
             uxbar(i,j)=uxflgz(i,j)+uxdef(i,j)                       ! on ajoute la deform. SIA
             ubx(i,j) = uxflgz(i,j)
-            do k=1,nz
+!            do k=1,nz
+!               ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j)           ! remplace le glissement par uxflgz
+!            end do
+
+!            debug_3D(i,j,9)=uxdef(i,j)                   
+         endif
+
+         if (flgzmy(i,j)) then 
+!            debug_3D(i,j,12)=uyflgz(i,j)
+            uybar(i,j)=uyflgz(i,j)+uydef(i,j)                       ! on ajoute la deform. SIA
+            uby(i,j) = uyflgz(i,j)
+!            do k=1,nz
+!               uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j)           ! remplace le glissement par uyflgz
+!            end do
+
+!            debug_3D(i,j,10)=uydef(i,j)              
+         endif
+      end do
+   end do
+	!$OMP END DO
+	!$OMP END PARALLEL
+
+! on ne recalcul ux que lorsque uxflgz est modifié soit tous les dtt
+	if (isynchro.eq.1) then
+!	!$OMP PARALLEL PRIVATE(rang,nb_taches)
+!	!$ rang=OMP_GET_THREAD_NUM()
+!	!$ nb_taches=OMP_GET_NUM_THREADS()
+!	!$OMP DO SCHEDULE(STATIC,NY/nb_taches)
+	!$OMP PARALLEL
+   !$OMP DO
+	do j=2,ny
+		do i=2,nx
+        if (flgzmx(i,j)) then 
+			do k=1,nz
                ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j)           ! remplace le glissement par uxflgz
             end do
-
-            debug_3D(i,j,9)=uxdef(i,j)                   
-         end if
-
+         endif
          if (flgzmy(i,j)) then 
-            debug_3D(i,j,12)=uyflgz(i,j)
-            uybar(i,j)=uyflgz(i,j)+uydef(i,j)                       ! on ajoute la deform. SIA
-            uby(i,j) = uyflgz(i,j)
-            do k=1,nz
+			do k=1,nz
                uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j)           ! remplace le glissement par uyflgz
             end do
-
-            debug_3D(i,j,10)=uydef(i,j)              
-         end if
-      end do
-   end do
-
-
+         endif
+       enddo
+   enddo
+	!$OMP END DO
+	!$OMP END PARALLEL 
+endif
 
 else ! SIA et L1 en 2 zones separe : pas d'action (uxbar est deja remis a uxflgz dans diffusiv)
Index: /trunk/SOURCES/moy_mxmy.f90
===================================================================
--- /trunk/SOURCES/moy_mxmy.f90	(revision 70)
+++ /trunk/SOURCES/moy_mxmy.f90	(revision 71)
@@ -18,5 +18,5 @@
 subroutine moy_mxmy(n1,n2,X2D,X_mx,X_my)
 ! fait la moyenne ponderee d'un tableau X2D sur les mailles staggered
-
+ !$ USE OMP_LIB
 implicit none
 integer, intent(in) :: n1,n2   !< dimension des tableaux
@@ -29,23 +29,24 @@
 
 
+  !$OMP PARALLEL PRIVATE(i_moins1,j_moins1,i_plus1,j_plus1)
+  !$OMP DO
+	do j=1,n2
+		do i=1,n1
+			i_moins1=max(1,i-1)
+			j_moins1=max(1,j-1)
+			i_plus1=min(n1,i+1)
+			j_plus1=min(n2,j+1)
 
-do j=1,n2
-   do i=1,n1
-      i_moins1=max(1,i-1)
-      j_moins1=max(1,j-1)
-      i_plus1=min(n1,i+1)
-      j_plus1=min(n2,j+1)
-
-      X_mx(i,j)=0.25*(X2D(i,j)+X2D(i_moins1,j)) &
+			X_mx(i,j)=0.25*(X2D(i,j)+X2D(i_moins1,j)) &
            + 0.125*((X2D(i_moins1,j_plus1)+X2D(i,j_plus1))   &
            +       (X2D(i_moins1,j_moins1)+X2D(i,j_moins1)))
 
-      X_my(i,j)=0.25*(X2D(i,j)+X2D(i,j_moins1)) &
+			X_my(i,j)=0.25*(X2D(i,j)+X2D(i,j_moins1)) &
            + 0.125*((X2D(i_plus1,j_moins1)+X2D(i_plus1,j))   &
            +       (X2D(i_moins1,j_moins1)+X2D(i_moins1,j)))
-
-
-   end do
-end do
+		end do
+	end do
+  !$OMP END DO
+  !$OMP END PARALLEL
 
 return
Index: /trunk/SOURCES/steps_time_loop.f90
===================================================================
--- /trunk/SOURCES/steps_time_loop.f90	(revision 70)
+++ /trunk/SOURCES/steps_time_loop.f90	(revision 71)
@@ -340,6 +340,7 @@
         if (itracebug.eq.1)  call tracebug(' Dans spinup_3_bed')
 
-        if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1) then           
-           call bedrock()                                            !  bedrock adjustment
+!        if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1) then
+         if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1.and.(mod(abs(TIME),50.).lt.dtmin)) then
+           call bedrock                                              !  bedrock adjustment
         endif
 
