Index: LMDZ4/branches/LMDZ4_par_0/libf/phylmd/interface_surf.F90
===================================================================
--- LMDZ4/branches/LMDZ4_par_0/libf/phylmd/interface_surf.F90	(revision 633)
+++ LMDZ4/branches/LMDZ4_par_0/libf/phylmd/interface_surf.F90	(revision 634)
@@ -22,5 +22,5 @@
 ! L. Fairhead, LMD, 02/2000
 
-  USE ioipsl
+!ym  USE ioipsl
 
   IMPLICIT none
@@ -76,5 +76,5 @@
       & z0_new, pctsrf_new, agesno,fqcalving,ffonte, run_off_lic_0)
 
-
+   USE dimphy,only : monocpu
 ! Cette routine sert d'aiguillage entre l'atmosphere et la surface en general 
 ! (sols continentaux, oceans, glaces) pour les fluxs de chaleur et d'humidite.
@@ -235,4 +235,5 @@
   real, dimension(klon):: fder_prev
   REAL, dimension(klon) :: bidule
+  INTEGER :: j
 
   if (check) write(*,*) 'Entree ', modname
@@ -394,4 +395,9 @@
 
     else
+    
+      if (.not.monocpu) then
+        abort_message='Appel a ORCHIDEE non encore parallelise !!'
+        call abort_gcm(modname,abort_message,1)
+      endif
 !!      CALL albsno(klon,agesno,alb_neig_grid)  
 !
@@ -434,4 +440,9 @@
 !
     if (ocean == 'couple') then
+      if (.not.monocpu) then
+        abort_message='Couplage avec l OCEAN non encore parallelise !!'
+        call abort_gcm(modname,abort_message,1)
+      endif
+
       if (nexca == 0) then
         abort_message='nexca = 0 dans interfoce_cpl'
@@ -510,4 +521,9 @@
     if (ocean == 'couple') then
 
+      if (.not.monocpu) then
+        abort_message='Couplage avec l OCEAN non encore parallelise !!'
+        call abort_gcm(modname,abort_message,1)
+      endif
+
       cumul = .true.
 
@@ -555,5 +571,10 @@
 !
     if (ocean == 'couple') then
-
+      
+      if (.not.monocpu) then
+        abort_message='Couplage avec l OCEAN non encore parallelise !!'
+        call abort_gcm(modname,abort_message,1)
+      endif
+      
       cumul =.false.
 
@@ -596,5 +617,6 @@
 !IM cf LF
       DO ii = 1, knon
-       IF (pctsrf_new(ii,nisurf) < EPSFRA) then
+       j=knindex(ii)
+       IF (pctsrf_new(j,nisurf) < EPSFRA) then
           snow(ii) = 0.0
 !IM cf LF/JLD         tsurf(ii) = RTT - 1.8
@@ -666,4 +688,9 @@
     if (ocean == 'couple') then
 
+      if (.not.monocpu) then
+        abort_message='Couplage avec l OCEAN non encore parallelise !!'
+        call abort_gcm(modname,abort_message,1)
+      endif
+
       cumul =.true.
 
@@ -733,7 +760,16 @@
 
 ! passage du run-off des glaciers calcule dans fonte_neige au coupleur
-    bidule=0.
-    bidule(1:knon)= run_off_lic(1:knon)    
-    call gath2cpl(bidule, tmp_rlic, klon, knon,iim,jjm,knindex)
+    if (ocean=='couple') then
+      
+      if (.not.monocpu) then
+        abort_message='Couplage avec l OCEAN non encore parallelise !!'
+        call abort_gcm(modname,abort_message,1)
+      endif
+
+      bidule=0.
+      bidule(1:knon)= run_off_lic(1:knon)    
+      call gath2cpl(bidule, tmp_rlic, klon, knon,iim,jjm,knindex)
+    
+    endif
 !
 ! calcul albedo
@@ -1239,4 +1275,5 @@
       & pctsrf_new)
 
+   USE ioipsl
 ! Cette routine sert d'interface entre le modele atmospherique et un 
 ! coupleur avec un modele d'ocean 'complet' derriere
@@ -1909,7 +1946,9 @@
 !
   SUBROUTINE interfoce_lim(itime, dtime, jour, &
-     & klon, nisurf, knon, knindex, &
+     & klon_xx, nisurf, knon, knindex, &
      & debut,  &
-     & lmt_sst, pctsrf_new)
+     & lmt_sst_p, pctsrf_new_p)
+     
+     USE dimphy,klon=>klon2,klon2=>klon
 
 ! Cette routine sert d'interface entre le modele atmospherique et un fichier
@@ -1938,13 +1977,16 @@
   real   , intent(IN) :: dtime
   integer, intent(IN) :: jour
+  integer, intent(in) :: klon_xx
   integer, intent(IN) :: nisurf
   integer, intent(IN) :: knon
-  integer, intent(IN) :: klon
-  integer, dimension(klon), intent(in) :: knindex
+  integer, dimension(klon2), intent(in) :: knindex
   logical, intent(IN) :: debut
 
 ! Parametres de sortie
-  real, intent(out), dimension(klon) :: lmt_sst
-  real, intent(out), dimension(klon,nbsrf) :: pctsrf_new
+  real, intent(out), dimension(klon2) :: lmt_sst_p
+  real, intent(out), dimension(klon2,nbsrf) :: pctsrf_new_p
+
+!  real, dimension(klon) :: lmt_sst
+  real, dimension(klon,nbsrf) :: pctsrf_new
 
 ! Variables locales
@@ -1962,6 +2004,9 @@
   logical, save     :: check = .FALSE.
 ! Champs lus dans le fichier de CL
-  real, allocatable , save, dimension(:) :: sst_lu, rug_lu, nat_lu
-  real, allocatable , save, dimension(:,:) :: pct_tmp
+  real, allocatable , save, dimension(:) :: sst_lu_p, rug_lu_p, nat_lu_p
+  real, allocatable , save, dimension(:,:) :: pct_tmp_p
+  real, dimension(klon,nbsrf) :: pct_tmp
+  real, dimension(klon) :: sst_lu
+  real, dimension(klon) :: nat_lu
 !
 ! quelques variables pour netcdf
@@ -1973,11 +2018,11 @@
 ! Fin déclaration
 !
-    
-  if (debut .and. .not. allocated(sst_lu)) then
+  
+  if (debut .and. .not. allocated(sst_lu_p)) then
     lmt_pas = nint(86400./dtime * 1.0) ! pour une lecture une fois par jour
     jour_lu = jour - 1
-    allocate(sst_lu(klon))
-    allocate(nat_lu(klon))
-    allocate(pct_tmp(klon,nbsrf))
+    allocate(sst_lu_p(klon2))
+    allocate(nat_lu_p(klon2))
+    allocate(pct_tmp_p(klon2,nbsrf))
   endif
 
@@ -1992,4 +2037,6 @@
 ! Ouverture du fichier
 !
+    if (phy_rank==0) then
+    
     fich = trim(fich)
     ierr = NF_OPEN (fich, NF_NOWRITE,nid)
@@ -2131,17 +2178,27 @@
 !
     ierr = NF_CLOSE(nid)
-    deja_lu = .true.
-    jour_lu = jour
-  endif
+   endif ! phyrank
 !
 ! Recopie des variables dans les champs de sortie
 !
-  lmt_sst = 999999999.
+  call ScatterField(sst_lu,sst_lu_p,1)
+  call ScatterField(pct_tmp(:,is_oce),pct_tmp_p(:,is_oce),1)
+  call ScatterField(pct_tmp(:,is_sic),pct_tmp_p(:,is_sic),1)
+  
+   deja_lu = .true.
+   jour_lu = jour
+  endif   
+  
+  lmt_sst_p = 999999999.
+  
   do ii = 1, knon
-    lmt_sst(ii) = sst_lu(knindex(ii))
+    lmt_sst_p(ii) = sst_lu_p(knindex(ii))
   enddo
 
-  pctsrf_new(:,is_oce) = pct_tmp(:,is_oce)
-  pctsrf_new(:,is_sic) = pct_tmp(:,is_sic)
+  do ii=1,klon2
+    pctsrf_new_p(ii,is_oce)=pct_tmp_p(ii,is_oce)
+    pctsrf_new_p(ii,is_sic)=pct_tmp_p(ii,is_sic)
+  enddo
+  
 
   END SUBROUTINE interfoce_lim
@@ -2151,7 +2208,9 @@
 !
   SUBROUTINE interfsur_lim(itime, dtime, jour, &
-     & klon, nisurf, knon, knindex, &
+     & klon_xx, nisurf, knon, knindex, &
      & debut,  &
-     & lmt_alb, lmt_rug)
+     & lmt_alb_p, lmt_rug_p)
+
+     USE dimphy,klon=>klon2,klon2=>klon
 
 ! Cette routine sert d'interface entre le modele atmospherique et un fichier
@@ -2184,11 +2243,14 @@
   integer, intent(IN) :: nisurf
   integer, intent(IN) :: knon
-  integer, intent(IN) :: klon
-  integer, dimension(klon), intent(in) :: knindex
+  integer, intent(IN) :: klon_xx
+  integer, dimension(klon2), intent(in) :: knindex
   logical, intent(IN) :: debut
 
 ! Parametres de sortie
-  real, intent(out), dimension(klon) :: lmt_alb
-  real, intent(out), dimension(klon) :: lmt_rug
+  real, intent(out), dimension(klon2) :: lmt_alb_p
+  real, intent(out), dimension(klon2) :: lmt_rug_p
+
+!  real,  dimension(klon) :: lmt_alb
+!  real,  dimension(klon) :: lmt_rug
 
 ! Variables locales
@@ -2206,5 +2268,6 @@
   logical,save     :: check = .false.
 ! Champs lus dans le fichier de CL
-  real, allocatable , save, dimension(:) :: alb_lu, rug_lu
+  real, allocatable , save, dimension(:) :: alb_lu_p, rug_lu_p
+  real, dimension(klon) :: alb_lu, rug_lu
 !
 ! quelques variables pour netcdf
@@ -2220,6 +2283,6 @@
     lmt_pas = nint(86400./dtime * 1.0) ! pour une lecture une fois par jour
     jour_lu_sur = jour - 1
-    allocate(alb_lu(klon))
-    allocate(rug_lu(klon))
+    allocate(alb_lu_p(klon2))
+    allocate(rug_lu_p(klon2))
   endif
 
@@ -2232,4 +2295,6 @@
 ! Tester d'abord si c'est le moment de lire le fichier
   if (mod(itime-1, lmt_pas) == 0 .and. .not. deja_lu_sur) then
+  
+  if (phy_rank==0) then
 !
 ! Ouverture du fichier
@@ -2289,4 +2354,11 @@
 !
     ierr = NF_CLOSE(nid)
+
+
+  endif  !! phyrank
+
+    call ScatterField(alb_lu,alb_lu_p,1)
+    call ScatterField(rug_lu,rug_lu_p,1)
+
     deja_lu_sur = .true.
     jour_lu_sur = jour
@@ -2297,9 +2369,10 @@
 !!$  lmt_alb(:) = 0.0
 !!$  lmt_rug(:) = 0.0
-  lmt_alb(:) = 999999.
-  lmt_rug(:) = 999999.
+ 
+  lmt_alb_p(:) = 999999.
+  lmt_rug_p(:) = 999999.
   DO ii = 1, knon
-    lmt_alb(ii) = alb_lu(knindex(ii))
-    lmt_rug(ii) = rug_lu(knindex(ii))
+    lmt_alb_p(ii) = alb_lu_p(knindex(ii))
+    lmt_rug_p(ii) = rug_lu_p(knindex(ii))
   enddo
 
