Index: LMDZ.3.3/branches/rel-LF/libf/phylmd/clmain.F
===================================================================
--- LMDZ.3.3/branches/rel-LF/libf/phylmd/clmain.F	(revision 105)
+++ LMDZ.3.3/branches/rel-LF/libf/phylmd/clmain.F	(revision 109)
@@ -1,3 +1,4 @@
       SUBROUTINE clmain(dtime,pctsrf,t,q,u,v,
+     .                  jour, rmu0,
      .                  ok_veget,ts,
      .                  paprs,pplay,radsol,snow,qsol,evap,albe,
@@ -85,4 +86,6 @@
       REAL rugmer(klon)
       REAL cdragh(klon), cdragm(klon)
+      integer jour            ! jour de l'annee en cours
+      real rmu0(klon)         ! cosinus de l'angle solaire zenithal
       LOGICAL debut, lafin, ok_veget
 cAA      INTEGER itr
@@ -112,5 +115,5 @@
       EXTERNAL clqh, clvent, coefkz, calbeta, cltrac
 c======================================================================
-      REAL yts(klon), yrugos(klon), ypct(klon)
+      REAL yts(klon), yrugos(klon), ypct(klon), yz0_new(klon)
       REAL ycal(klon), ybeta(klon), ydif(klon), yalb(klon),yevap(klon)
       REAL yu1(klon), yv1(klon)
@@ -329,10 +332,12 @@
 c calculer la diffusion de "q" et de "h"
       CALL clqh(knon, dtime, nsrf, ni, pctsrf, rlon, rlat,
-     e          yu1, yv1,
-     e          ycoefh,yt,yq,yts,ypaprs,ypplay,ydelp,yrads,
-     e          yevap,yalb, ysnow, yqsol, yrain_f, ysnow_f,
-     e          yfder, ytaux, ytauy, ysollw, ysolsw,
+     e          jour, rmu0,
+     e          yu1, yv1, ycoefh,
+     e          yt,yq,yts,ypaprs,ypplay,
+     e          ydelp,yrads, yevap,yalb, ysnow, yqsol, 
+     e          yrain_f, ysnow_f, yfder, ytaux, ytauy, 
+     e          ysollw, ysolsw,
      s          pctsrf_new,
-     s          y_d_t, y_d_q, y_d_ts, 
+     s          y_d_t, y_d_q, y_d_ts, yz0_new,
      s          y_flux_t, y_flux_q, y_dflux_t, y_dflux_q)
 c
@@ -391,4 +396,5 @@
          snow(i,nsrf) = ysnow(j)
          qsol(i,nsrf) = yqsol(j)
+         rugos(i,nsrf) = yz0_new(j)
          rugmer(i) = yrugm(j)
          cdragh(i) = cdragh(i) + ycoefh(j,1)
@@ -445,4 +451,5 @@
       END
       SUBROUTINE clqh(knon,dtime,nisurf,knindex,pctsrf, rlon, rlat,
+     e                jour, rmu0
      e                u1lay,v1lay,coef,
      e                t,q,ts,paprs,pplay,
@@ -451,5 +458,6 @@
      e                lwdown, swdown, 
      s                pctsrf_new,
-     s                d_t, d_q, d_ts, flux_t, flux_q,dflux_s,dflux_l)
+     s                d_t, d_q, d_ts, z0_new, 
+     s                flux_t, flux_q,dflux_s,dflux_l)
 
       USE interface_surf
@@ -491,4 +499,6 @@
       REAL qsol(klon)         ! humidite de la surface
       real precip_rain(klon), precip_snow(klon)
+      integer jour            ! jour de l'annee en cours
+      real rmu0(klon)         ! cosinus de l'angle solaire zenithal
       integer knindex(klon)
       real pctsrf(klon,nbsrf)
@@ -554,5 +564,4 @@
 c Rajout pour l'interface
       integer itime
-      integer jour
       integer nisurf
       logical debut, lafin, ok_veget
@@ -699,16 +708,16 @@
       ccanopy = 0.
 
-      CALL interfsurf(itime, dtime, jour,
-     . klon, iim, jjm, nisurf, knon, knindex, pctsrf, rlon, rlat,
-     . debut, lafin, ok_veget,
-     . zlev1,  u1lay, v1lay, temp_air, spechum, hum_air, ccanopy, 
-     . tq_cdrag, petAcoef, peqAcoef, petBcoef, peqBcoef,
-     . precip_rain, precip_snow, lwdown, swnet, swdown,
-     . fder, taux, tauy,
-     . albedo, snow, qsol,
-     . ts, p1lay, psref, radsol,
-     . ocean,zmasq
-     . evap, fluxsens, fluxlat, dflux_l, dflux_s,              
-     . tsol_rad, tsurf_new, alb_new, emis_new, z0_new, pctsrf_new)
+      CALL interfsurf(itime, dtime, jour, rmu0,
+     e klon, iim, jjm, nisurf, knon, knindex, pctsrf, rlon, rlat,
+     e debut, lafin, ok_veget,
+     e zlev1,  u1lay, v1lay, temp_air, spechum, hum_air, ccanopy, 
+     e tq_cdrag, petAcoef, peqAcoef, petBcoef, peqBcoef,
+     e precip_rain, precip_snow, lwdown, swnet, swdown,
+     e fder, taux, tauy,
+     e albedo, snow, qsol,
+     e ts, p1lay, psref, radsol,
+     e ocean,zmasq,
+     s evap, fluxsens, fluxlat, dflux_l, dflux_s,              
+     s tsol_rad, tsurf_new, alb_new, emis_new, z0_new, pctsrf_new)
 
       flux_t(:,1) = fluxsens
Index: LMDZ.3.3/branches/rel-LF/libf/phylmd/interface_surf.F90
===================================================================
--- LMDZ.3.3/branches/rel-LF/libf/phylmd/interface_surf.F90	(revision 105)
+++ LMDZ.3.3/branches/rel-LF/libf/phylmd/interface_surf.F90	(revision 109)
@@ -35,8 +35,10 @@
   END INTERFACE
 
-
-! run_off      ruissellement total
+#include "YOMCST.inc"
+
+
+  ! run_off      ruissellement total
   real, allocatable, dimension(:),save    :: run_off
-#include "YOMCST.inc"
+
 
 
@@ -45,5 +47,5 @@
 !############################################################################
 !
-  SUBROUTINE interfsurf_hq(itime, dtime, jour, &
+  SUBROUTINE interfsurf_hq(itime, dtime, jour, rmu0, &
       & klon, iim, jjm, nisurf, knon, knindex, pctsrf, rlon, rlat, &
       & debut, lafin, ok_veget, &
@@ -72,5 +74,6 @@
 !   iim, jjm     nbres de pts de grille
 !   dtime        pas de temps de la physique (en s)
-!   jour         jour dans l'annee en cours
+!   jour         jour dans l'annee en cours,
+!   rmu0         cosinus de l'angle solaire zenithal
 !   nexca        pas de temps couplage
 !   nisurf       index de la surface a traiter (1 = sol continental)
@@ -130,4 +133,5 @@
   real, intent(IN) :: dtime
   integer, intent(IN) :: jour
+  real, intent(IN)    :: rmu0(klon)
   integer, intent(IN) :: nisurf
   integer, intent(IN) :: knon
@@ -170,6 +174,6 @@
   real, dimension(knon):: alb_ice
   real, dimension(knon):: tsurf_temp
-
-#include "YOMCST.inc"
+  real, dimension(klon):: agesno, alb_neig_grid, alb_eau
+  real, dimension(knon):: alb_neig
 
   if (check) write(*,*) 'Entree ', modname
@@ -201,7 +205,4 @@
   endif
   first_call = .false.
-!
-! Calcul age de la neige
-!
   
 ! Aiguillage vers les differents schemas de surface
@@ -229,4 +230,11 @@
     endif
 !
+! Calcul age de la neige
+!
+
+  CALL albsno(agesno,alb_neig_grid)  
+!
+!
+!
     if (.not. ok_veget) then
 !
@@ -245,4 +253,12 @@
 ! calcul albedo: lecture albedo fichier CL puis ajout albedo neige 
 ! 
+       call interfsur_lim(itime, dtime, jour, &
+     & klon, nisurf, knon, knindex, debut,  &
+     & lmt_alb, lmt_rug)
+       alb_neig = alb_neig_grid(knindex)
+       zfra = MAX(0.0,MIN(1.0,snow/(snow+10.0)))
+       alb_new = alb_neig*zfra + lmt_alb(knindex)*(1.0-zfra)
+       z0_new = lmt_rug(knindex)
+   
     else
 !
@@ -286,10 +302,10 @@
 !    else if (ocean == 'slab  ') then
 !      call interfoce(nisurf)
-!    else                              ! lecture conditions limites
-!      call interfoce(itime, dtime, jour, & 
-!     &  klon, nisurf, knon, knindex, &
-!     &  debut, &
-!     &  tsurf_new, alb_new, z0_new, pctsrf_new)
-!
+    else                              ! lecture conditions limites
+      call interfoce(itime, dtime, jour, & 
+     &  klon, nisurf, knon, knindex, &
+     &  debut, &
+     &  tsurf_new, pctsrf_new)
+
     endif
 
@@ -298,5 +314,4 @@
     dif_grnd = 0.
 
-    endif
     call calcul_fluxs( knon, nisurf, dtime, &
      &   tsurf_temp, p1lay, cal, beta, tq_cdrag, ps, &
@@ -305,9 +320,14 @@
      &   petAcoef, peqAcoef, petBcoef, peqBcoef, &
      &   tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
-
-
 !
 ! calcul albedo
 !
+
+     if ( minval(rmu0) == maxval(rmu0) && minval(rmu0) = -999.999 ) then
+       CALL alboc(FLOAT(jour),rlat,alb_eau)
+     else  ! cycle diurne
+       CALL alboc_cd(rmu0,alb_eau)
+     endif
+     alb_new = alb_eau(knindex)
 
 !
@@ -340,5 +360,6 @@
 !     &  klon, nisurf, knon, knindex, &
 !     &  debut, &
-!     &  tsurf_new, alb_new, z0_new, pctsrf_new)endif
+!     &  tsurf_new, pctsrf_new)
+!   endif
 
       cal = calice
@@ -356,4 +377,10 @@
      &   tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
 
+!
+! calcul albedo
+!
+       zfra = MAX(0.0,MIN(1.0,snow/(snow+10.0)))
+       alb_neig = alb_neig_grid(knindex)
+       alb_new = alb_neig*zfra + 0.6 * (1.0-zfra)
 
   else if (nisurf == is_lic) then
@@ -377,4 +404,11 @@
      &   petAcoef, peqAcoef, petBcoef, peqBcoef, &
      &   tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
+
+!
+! calcul albedo
+!
+       zfra = MAX(0.0,MIN(1.0,snow/(snow+10.0)))
+       alb_neig = alb_neig_grid(knindex)
+       alb_new = alb_neig*zfra + 0.6 * (1.0-zfra)
 
   else
@@ -790,7 +824,7 @@
   endif ! fin if (debut)
 
-! fichier restart et fichiers histoires
-
-! calcul des fluxs a passer
+!! fichier restart et fichiers histoires
+
+!! calcul des fluxs a passer
 
   cpl_sols(:,nisurf) = cpl_sols(:,nisurf) + swdown      / FLOAT(nexca)
@@ -981,5 +1015,5 @@
      & klon, nisurf, knon, knindex, &
      & debut,  &
-     & lmt_sst, lmt_alb, lmt_rug, pctsrf_new)
+     & lmt_sst, pctsrf_new)
 
 ! Cette routine sert d'interface entre le modele atmospherique et un fichier
@@ -1000,6 +1034,4 @@
 ! output:
 !   lmt_sst      SST lues dans le fichier de CL
-!   lmt_alb      Albedo lu 
-!   lmt_rug      longueur de rugosité lue
 !   pctsrf_new   sous-maille fractionnelle
 !
@@ -1019,6 +1051,4 @@
 ! Parametres de sortie
   real, intent(out), dimension(knon) :: lmt_sst
-  real, intent(out), dimension(knon) :: lmt_alb
-  real, intent(out), dimension(knon) :: lmt_rug
   real, intent(out), dimension(klon,nbsrf) :: pctsrf_new
 
@@ -1053,6 +1083,4 @@
     jour_lu = jour - 1
     allocate(sst_lu(klon))
-    allocate(alb_lu(klon))
-    allocate(rug_lu(klon))
     allocate(nat_lu(klon))
     allocate(pct_tmp(klon,nbsrf))
@@ -1201,4 +1229,119 @@
       call abort_gcm(modname,abort_message,1)
     endif    
+
+!
+! Fin de lecture
+!
+    ierr = NF_CLOSE(nid)
+    deja_lu = .true.
+    jour_lu = jour
+  endif
+!
+! Recopie des variables dans les champs de sortie
+!
+  lmt_sst = sst_lu(knindex)
+  pctsrf_new = pct_tmp
+
+  END SUBROUTINE interfoce_lim
+
+!
+!#########################################################################
+!
+  SUBROUTINE interfsur_lim(itime, dtime, jour, &
+     & klon, nisurf, knon, knindex, &
+     & debut,  &
+     & lmt_alb, lmt_rug)
+
+! Cette routine sert d'interface entre le modele atmospherique et un fichier
+! de conditions aux limites
+!
+! L. Fairhead 02/2000
+!
+! input:
+!   itime        numero du pas de temps courant
+!   dtime        pas de temps de la physique (en s)
+!   jour         jour a lire dans l'annee
+!   nisurf       index de la surface a traiter (1 = sol continental)
+!   knon         nombre de points dans le domaine a traiter
+!   knindex      index des points de la surface a traiter
+!   klon         taille de la grille
+!   debut        logical: 1er appel a la physique (initialisation)
+!
+! output:
+!   lmt_sst      SST lues dans le fichier de CL
+!   lmt_alb      Albedo lu 
+!   lmt_rug      longueur de rugosité lue
+!   pctsrf_new   sous-maille fractionnelle
+!
+
+#include "indicesol.h"
+
+! Parametres d'entree
+  integer, intent(IN) :: itime
+  real   , intent(IN) :: dtime
+  integer, intent(IN) :: jour
+  integer, intent(IN) :: nisurf
+  integer, intent(IN) :: knon
+  integer, intent(IN) :: klon
+  integer, dimension(knon), intent(in) :: knindex
+  logical, intent(IN) :: debut
+
+! Parametres de sortie
+  real, intent(out), dimension(knon) :: lmt_alb
+  real, intent(out), dimension(knon) :: lmt_rug
+
+! Variables locales
+  integer     :: ii
+  integer     :: lmt_pas     ! frequence de lecture des conditions limites 
+                             ! (en pas de physique)
+  logical,save :: deja_lu_sur! pour indiquer que le jour a lire a deja
+                             ! lu pour une surface precedente
+  integer,save :: jour_lu_sur 
+  integer      :: ierr
+  character (len = 20) :: modname = 'interfoce_lim'
+  character (len = 80) :: abort_message
+  character (len = 20) :: fich ='limit'
+  logical     :: newlmt = .false.
+  logical     :: check = .true.
+! Champs lus dans le fichier de CL
+  real, allocatable , save, dimension(:) :: alb_lu, rug_lu
+!
+! quelques variables pour netcdf
+!
+#include "netcdf.inc"
+  integer              :: nid, nvarid
+  integer, dimension(2) :: start, epais
+!
+! Fin déclaration
+!
+    
+  if (debut) then
+    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))
+  endif
+
+  if ((jour - jour_lu_sur) /= 0) deja_lu = .false.
+  
+  if (check) write(*,*)modname,':: jour_lu, deja_lu_sur', jour_lu, deja_lu_sur 
+
+! 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
+!
+! Ouverture du fichier
+!
+    ierr = NF_OPEN (fich, NF_NOWRITE,nid)
+    if (ierr.NE.NF_NOERR) then
+      abort_message = 'Pb d''ouverture du fichier de conditions aux limites'
+      call abort_gcm(modname,abort_message,1)
+    endif
+! 
+! La tranche de donnees a lire:
+!
+    start(1) = 1
+    start(2) = jour + 1
+    epais(1) = klon
+    epais(2) = 1
 !
 ! Lecture Albedo
@@ -1240,18 +1383,14 @@
 !
     ierr = NF_CLOSE(nid)
-    deja_lu = .true.
-    jour_lu = jour
+    deja_lu_sur = .true.
+    jour_lu_sur = jour
   endif
 !
 ! Recopie des variables dans les champs de sortie
 !
-  do ii = 1, knon
-    lmt_sst(ii) = sst_lu(knindex(ii))
-    lmt_alb(ii) = alb_lu(knindex(ii))
-    lmt_rug(ii) = rug_lu(knindex(ii))
-  enddo
-  pctsrf_new = pct_tmp
-
-  END SUBROUTINE interfoce_lim
+  lmt_alb = alb_lu(knindex)
+  lmt_rug = rug_lu(knindex)
+
+  END SUBROUTINE interfsur_lim
 
 !
@@ -1300,5 +1439,4 @@
 !
 
-#include "YOMCST.inc"
 #include "YOETHF.inc"
 #include "FCTTRE.inc"
@@ -1668,3 +1806,40 @@
 !#########################################################################
 !
+!
+!#########################################################################
+!
+  SUBROUTINE albsno(agesno,alb_neig_grid)
+  IMPLICIT none
+c
+#include "dimensions.h"
+#include "dimphy.h"
+  INTEGER nvm
+  PARAMETER (nvm=8)
+  REAL veget(klon,nvm)
+  REAL alb_neig(klon)
+  REAL agesno(klon)
+c
+  INTEGER i, nv
+c
+  REAL init(nvm), decay(nvm), as
+  SAVE init, decay
+  DATA init /0.55, 0.14, 0.18, 0.29, 0.15, 0.15, 0.14, 0./
+  DATA decay/0.30, 0.67, 0.63, 0.45, 0.40, 0.14, 0.06, 1./
+c
+  veget = 0.
+  veget(:,1) = 1.     ! desert partout
+  DO i = 1, klon
+    alb_neig(i) = 0.0
+  ENDDO
+  DO nv = 1, nvm
+    DO i = 1, klon
+      as = init(nv)+decay(nv)*EXP(-agesno(i)/5.)
+      alb_neig(i) = alb_neig(i) + veget(i,nv)*as
+    ENDDO
+  ENDDO
+c
+  END SUBROUTINE albsno
+!
+!#########################################################################
+!
   END MODULE interface_surf
Index: LMDZ.3.3/branches/rel-LF/libf/phylmd/oasis.F
===================================================================
--- LMDZ.3.3/branches/rel-LF/libf/phylmd/oasis.F	(revision 105)
+++ LMDZ.3.3/branches/rel-LF/libf/phylmd/oasis.F	(revision 109)
@@ -501,2 +501,111 @@
       END
 
+      SUBROUTINE halte
+      print *, 'Attention dans oasis.F, halte est non defini'
+      RETURN
+      END
+
+      SUBROUTINE locread
+      print *, 'Attention dans oasis.F, locread est non defini'
+      RETURN
+      END
+
+      SUBROUTINE locwrite
+      print *, 'Attention dans oasis.F, locwrite est non defini'
+      RETURN
+      END
+
+      SUBROUTINE pipe_model_define
+      print*,'Attention dans oasis.F, pipe_model_define est non defini'
+      RETURN
+      END
+
+      SUBROUTINE pipe_model_stepi
+      print*,'Attention dans oasis.F, pipe_model_stepi est non defini'
+      RETURN
+      END
+
+      SUBROUTINE pipe_model_recv
+      print *, 'Attention dans oasis.F, pipe_model_recv est non defini'
+      RETURN
+      END
+
+      SUBROUTINE pipe_model_send
+      print *, 'Attention dans oasis.F, pipe_model_send est non defini'
+      RETURN
+      END
+
+      SUBROUTINE clim_stepi
+      print *, 'Attention dans oasis.F, clim_stepi est non defini'
+      RETURN
+      END
+
+      SUBROUTINE clim_start
+      print *, 'Attention dans oasis.F, clim_start est non defini'
+      RETURN
+      END
+
+      SUBROUTINE clim_import
+      print *, 'Attention dans oasis.F, clim_import est non defini'
+      RETURN
+      END
+
+      SUBROUTINE clim_export
+      print *, 'Attention dans oasis.F, clim_export est non defini'
+      RETURN
+      END
+
+      SUBROUTINE clim_init
+      print *, 'Attention dans oasis.F, clim_init est non defini'
+      RETURN
+      END
+
+      SUBROUTINE clim_define
+      print *, 'Attention dans oasis.F, clim_define est non defini'
+      RETURN
+      END
+
+      SUBROUTINE clim_quit
+      print *, 'Attention dans oasis.F, clim_quit est non defini'
+      RETURN
+      END
+
+      SUBROUTINE svipc_write
+      print *, 'Attention dans oasis.F, svipc_write est non defini'
+      RETURN
+      END
+
+      SUBROUTINE svipc_close
+      print *, 'Attention dans oasis.F, svipc_close est non defini'
+      RETURN
+      END
+
+      SUBROUTINE svipc_read
+      print *, 'Attention dans oasis.F, svipc_read est non defini'
+      RETURN
+      END
+
+      SUBROUTINE quitcpl
+      print *, 'Attention dans oasis.F, quitcpl est non defini'
+      RETURN
+      END
+
+      SUBROUTINE sipc_write_model
+      print *, 'Attention dans oasis.F, sipc_write_model est non defini'
+      RETURN
+      END
+
+      SUBROUTINE sipc_attach
+      print *, 'Attention dans oasis.F, sipc_attach est non defini'
+      RETURN
+      END
+
+      SUBROUTINE sipc_init_model
+      print *, 'Attention dans oasis.F, sipc_init_model est non defini'
+      RETURN
+      END
+
+      SUBROUTINE sipc_read_model
+      print *, 'Attention dans oasis.F, sipc_read_model est non defini'
+      RETURN
+      END
Index: LMDZ.3.3/branches/rel-LF/libf/phylmd/param_cou.h
===================================================================
--- LMDZ.3.3/branches/rel-LF/libf/phylmd/param_cou.h	(revision 105)
+++ LMDZ.3.3/branches/rel-LF/libf/phylmd/param_cou.h	(revision 109)
@@ -1,14 +1,18 @@
+C $Id$
 C
 C -- param_cou.h
 C
 	INTEGER jpmaxfld
-	PARAMETER(jpmaxfld = 100)        ! Number of maximum fields
-                                         ! exchange betwwen ocean and atmosphere
-	INTEGER jpflda2o
-	PARAMETER(jpflda2o = 8)          ! Number of fields exchanged from
-                                         ! atmosphere to ocean
+	PARAMETER(jpmaxfld = 40)        ! Maximum number of fields exchanged
+                                        ! between ocean and atmosphere
+	INTEGER jpflda2o1
+	PARAMETER(jpflda2o1 = 11)         ! Number of fields exchanged from
+                                         ! atmosphere to ocean via flx.F
+	INTEGER jpflda2o2
+	PARAMETER(jpflda2o2 = 4)         ! Number of fields exchanged from
+                                         ! atmosphere to ocean via tau.F
 C
 	INTEGER jpfldo2a
-	PARAMETER(jpfldo2a = 2)          ! Number of fields exchanged from
+	PARAMETER(jpfldo2a = 4)          ! Number of fields exchanged from
                                          ! ocean to atmosphere
 C
Index: LMDZ.3.3/branches/rel-LF/libf/phylmd/physiq.F
===================================================================
--- LMDZ.3.3/branches/rel-LF/libf/phylmd/physiq.F	(revision 105)
+++ LMDZ.3.3/branches/rel-LF/libf/phylmd/physiq.F	(revision 109)
@@ -1509,6 +1509,6 @@
          idayvrai = NINT(xjour)
          PRINT *,' PHYS cond  julien ',julien,idayvrai
-         CALL condsurf(julien,idayvrai, pctsrf ,
-     .                  lmt_sst,lmt_alb,lmt_rug,lmt_bils  )
+c         CALL condsurf(julien,idayvrai, pctsrf ,
+c     .                  lmt_sst,lmt_alb,lmt_rug,lmt_bils  )
          CALL ozonecm( FLOAT(julien), rlat, paprs, wo)
       ENDIF
@@ -1535,5 +1535,6 @@
 c
       DO i = 1, klon
-         frugs(i,is_ter) = SQRT(lmt_rug(i)**2+rugoro(i)**2)
+        if (.not. ok_veget) then
+         frugs(i,is_ter) = SQRT(frugs(i,is_ter)**2+rugoro(i)**2)
          frugs(i,is_lic) = rugoro(i)
          frugs(i,is_oce) = rugmer(i)
@@ -1552,8 +1553,19 @@
       ENDDO
 c
+C calculs necessaires au calcul de l'albedo dans l'interface
+c
+      CALL orbite(FLOAT(julien),zlongi,dist)
+      IF (cycle_diurne) THEN
+        zdtime=dtime*FLOAT(radpas) ! pas de temps du rayonnement (s)
+        CALL zenang(zlongi,gmtime,zdtime,rlat,rlon,rmu0,fract)
+      ELSE
+        rmu0 = -999.999
+      ENDIF
+
       CALL clmain(dtime,pctsrf,
-     e            t_seri,q_seri,u_seri,v_seri,ok_veget,
-     e            ftsol,paprs,pplay,radsol,
-     e            fsnow,fqsol,fevap,falbe,
+     e            t_seri,q_seri,u_seri,v_seri,
+     e            julien, rmu0, 
+     e            ok_veget, ftsol,
+     e            paprs,pplay,radsol, fsnow,fqsol,fevap,falbe,
      e            rain_fall, snow_fall, solsw, sollw, fder,
      e            rlon, rlat, frugs,
@@ -1858,24 +1870,24 @@
 c
       IF (MOD(itaprad,radpas).EQ.0) THEN
-      CALL orbite(FLOAT(julien),zlongi,dist)
-      IF (cycle_diurne) THEN
-        zdtime=dtime*FLOAT(radpas) ! pas de temps du rayonnement (s)
-        CALL zenang(zlongi,gmtime,zdtime,rlat,rlon,rmu0,fract)
+c      CALL orbite(FLOAT(julien),zlongi,dist)
+c      IF (cycle_diurne) THEN
+c        zdtime=dtime*FLOAT(radpas) ! pas de temps du rayonnement (s)
+c        CALL zenang(zlongi,gmtime,zdtime,rlat,rlon,rmu0,fract)
 c        CALL zenith(zlongi,gmtime,rlat,rlon,rmu0,fract) !va disparaitre
-        CALL alboc_cd(rmu0,alb_eau)
-      ELSE
-        CALL angle(zlongi,rlat,fract,rmu0)
-        CALL alboc(FLOAT(julien),rlat,alb_eau)
-      ENDIF
-      CALL albsno(veget,agesno,alb_neig)
-      DO i = 1, klon
-         falbe(i,is_oce) = alb_eau(i)
-         IF (pctsrf(i,is_oce).GT.epsfra .AND. ftsol(i,is_oce).LT.271.35)
-     .   falbe(i,is_oce) = 0.6 ! pour slab_ocean
-         zfra = MAX(0.0,MIN(1.0,fsnow(i,is_lic)/(fsnow(i,is_lic)+10.0)))
-         falbe(i,is_lic) = alb_neig(i)*zfra + 0.6*(1.0-zfra)
-         zfra = MAX(0.0,MIN(1.0,fsnow(i,is_ter)/(fsnow(i,is_ter)+10.0)))
-         falbe(i,is_ter) = alb_neig(i)*zfra + lmt_alb(i)*(1.0-zfra)
-         zfra = MAX(0.0,MIN(1.0,fsnow(i,is_sic)/(fsnow(i,is_sic)+10.0)))
+c        CALL alboc_cd(rmu0,alb_eau)
+c      ELSE
+c        CALL angle(zlongi,rlat,fract,rmu0)
+c        CALL alboc(FLOAT(julien),rlat,alb_eau)
+c      ENDIF
+c      CALL albsno(veget,agesno,alb_neig)
+      DO i = 1, klon
+c         falbe(i,is_oce) = alb_eau(i)
+c         IF (pctsrf(i,is_oce).GT.epsfra .AND. ftsol(i,is_oce).LT.271.35)
+c     .   falbe(i,is_oce) = 0.6 ! pour slab_ocean
+c         zfra = MAX(0.0,MIN(1.0,fsnow(i,is_lic)/(fsnow(i,is_lic)+10.0)))
+c         falbe(i,is_lic) = alb_neig(i)*zfra + 0.6*(1.0-zfra)
+c         zfra = MAX(0.0,MIN(1.0,fsnow(i,is_ter)/(fsnow(i,is_ter)+10.0)))
+c         falbe(i,is_ter) = alb_neig(i)*zfra + lmt_alb(i)*(1.0-zfra)
+c         zfra = MAX(0.0,MIN(1.0,fsnow(i,is_sic)/(fsnow(i,is_sic)+10.0)))
          falbe(i,is_sic) = alb_neig(i)*zfra + 0.6*(1.0-zfra)
          albsol(i) = falbe(i,is_oce) * pctsrf(i,is_oce)
