Index: LMDZ5/trunk/libf/phylmd/albedo.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/albedo.F90	(revision 2410)
+++ LMDZ5/trunk/libf/phylmd/albedo.F90	(revision 2413)
@@ -22,11 +22,4 @@
     include "clesphys.h"
 
-    ! fmagic -> clesphys.h/.inc
-    ! REAL fmagic ! un facteur magique pour regler l'albedo
-    ! cc      PARAMETER (fmagic=0.7)
-    ! ccIM => a remplacer
-    ! PARAMETER (fmagic=1.32)
-    ! PARAMETER (fmagic=1.0)
-    ! PARAMETER (fmagic=0.7)
     INTEGER npts ! il controle la precision de l'integration
     PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
@@ -74,7 +67,7 @@
           END DO
           IF (srmu/=0.0) THEN
-             albedo(i) = salb/srmu*fmagic + pmagic
+             albedo(i) = salb/srmu
           ELSE ! nuit polaire (on peut prendre une valeur quelconque)
-             albedo(i) = fmagic
+             albedo(i) = 1.0
           END IF
        END DO
@@ -119,7 +112,7 @@
           END DO
           IF (srmu/=0.0) THEN
-             albedo(i) = salb/srmu*fmagic + pmagic
+             albedo(i) = salb/srmu
           ELSE ! nuit polaire (on peut prendre une valeur quelconque)
-             albedo(i) = fmagic
+             albedo(i) = 1.0
           END IF
        END DO
@@ -146,11 +139,4 @@
     real, intent(out):: albedo(klon)
 
-    ! REAL fmagic ! un facteur magique pour regler l'albedo
-    ! cc      PARAMETER (fmagic=0.7)
-    ! ccIM => a remplacer
-    ! PARAMETER (fmagic=1.32)
-    ! PARAMETER (fmagic=1.0)
-    ! PARAMETER (fmagic=0.7)
-
     REAL fauxo
     INTEGER i
@@ -161,10 +147,10 @@
        DO i = 1, klon
           fauxo = (1.47-acos(max(rmu0(i), 0.0)))/0.15
-          albedo(i) = fmagic*(.03+.630/(1.+fauxo*fauxo)) + pmagic
+          albedo(i) = 0.03+.630/(1.+fauxo*fauxo)
           albedo(i) = max(min(albedo(i),0.60), 0.04)
        END DO
     ELSE
        DO i = 1, klon
-          albedo(i) = fmagic*0.058/(max(rmu0(i), 0.0)+0.30) + pmagic
+          albedo(i) = 0.058/(max(rmu0(i), 0.0)+0.30)
           albedo(i) = max(min(albedo(i),0.60), 0.04)
        END DO
Index: LMDZ5/trunk/libf/phylmd/conf_phys_m.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/conf_phys_m.F90	(revision 2410)
+++ LMDZ5/trunk/libf/phylmd/conf_phys_m.F90	(revision 2413)
@@ -914,5 +914,5 @@
     !Config Help = 
     !
-    NSW_omp = 6
+    NSW_omp = 2
     call getin('NSW',NSW_omp)
     !albedo SB >>>
@@ -2165,4 +2165,26 @@
        CALL abort_physic('conf_phys','version_ocean not valid',1)
     END IF
+
+    !--test on radiative scheme 
+    IF (iflag_rrtm .EQ. 0) THEN 
+      IF (NSW.NE.2) THEN 
+        WRITE(lunout,*) ' ERROR iflag_rrtm=0 and NSW<>2 not possible'
+        CALL abort_physic('conf_phys','choice NSW not valid',1)
+      ENDIF
+    ELSE IF (iflag_rrtm .EQ. 1) THEN
+      IF (NSW.NE.2.AND.NSW.NE.4.AND.NSW.NE.6) THEN
+        WRITE(lunout,*) ' ERROR iflag_rrtm=1 and NSW<>2,4,6 not possible'
+        CALL abort_physic('conf_phys','choice NSW not valid',1)
+      ENDIF
+    ELSE 
+       WRITE(lunout,*) ' ERROR iflag_rrtm<>0,1'
+       CALL abort_physic('conf_phys','choice iflag_rrtm not valid',1)
+    ENDIF
+
+    !--test on ocean surface albedo
+    IF (iflag_albedo.LT.0.OR.iflag_albedo.GT.1) THEN
+       WRITE(lunout,*) ' ERROR iflag_albedo<>0,1'
+       CALL abort_physic('conf_phys','choice iflag_albedo not valid',1)
+    ENDIF
 
     ! Test sur new_aod. Ce flag permet de retrouver les resultats de l'AR4
Index: LMDZ5/trunk/libf/phylmd/radlwsw_m.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/radlwsw_m.F90	(revision 2410)
+++ LMDZ5/trunk/libf/phylmd/radlwsw_m.F90	(revision 2413)
@@ -426,53 +426,21 @@
 
 !albedo SB >>>
-!      PALBD(i,1) = alb1(iof+i)
-!      PALBD(i,2) = alb2(iof+i)
-!         PALBD_NEW(i,1) = alb1(iof+i)   !!!!! A REVOIR (MPL) PALBD_NEW en
-!         fonction bdes SW
-!         do kk=2,NSW
-!           PALBD_NEW(i,kk) = alb2(iof+i)
-!         enddo
-!      PALBP(i,1) = alb1(iof+i)
-!      PALBP(i,2) = alb2(iof+i)
-!
-!         PALBP_NEW(i,1) = alb1(iof+i)     !!!!! A REVOIR (MPL) PALBP_NEW en
-!         fonction bdes SW
-!         do kk=2,NSW
-!           PALBP_NEW(i,kk) = alb2(iof+i)
-!         enddo
-
-      if(iflag_rrtm==0)then
-        select case(nsw)
-        case(2)
-          PALBD(i,1)=alb_dif(iof+i,1)
-          PALBD(i,2)=alb_dif(iof+i,2)
-          PALBP(i,1)=alb_dir(iof+i,1)
-          PALBP(i,2)=alb_dir(iof+i,2)
-        case(4)
-          PALBD(i,1)=alb_dif(iof+i,1)
-          PALBD(i,2)=(alb_dif(iof+i,2)*SFRWL(2)+alb_dif(iof+i,3)*SFRWL(3) &
-                 +alb_dif(iof+i,4)*SFRWL(4))/(SFRWL(2)+SFRWL(3)+SFRWL(4))
-          PALBP(i,1)=alb_dir(iof+i,1)
-          PALBP(i,2)=(alb_dir(iof+i,2)*SFRWL(2)+alb_dir(iof+i,3)*SFRWL(3) &
-                 +alb_dir(iof+i,4)*SFRWL(4))/(SFRWL(2)+SFRWL(3)+SFRWL(4))
-        case(6)
-          PALBD(i,1)=(alb_dif(iof+i,1)*SFRWL(1)+alb_dif(iof+i,2)*SFRWL(2) &
-                 +alb_dif(iof+i,3)*SFRWL(3))/(SFRWL(1)+SFRWL(2)+SFRWL(3))
-          PALBD(i,2)=(alb_dif(iof+i,4)*SFRWL(4)+alb_dif(iof+i,5)*SFRWL(5) &
-                 +alb_dif(iof+i,6)*SFRWL(6))/(SFRWL(4)+SFRWL(5)+SFRWL(6))
-          PALBP(i,1)=(alb_dir(iof+i,1)*SFRWL(1)+alb_dir(iof+i,2)*SFRWL(2)  &
-                 +alb_dir(iof+i,3)*SFRWL(3))/(SFRWL(1)+SFRWL(2)+SFRWL(3))
-          PALBP(i,2)=(alb_dir(iof+i,4)*SFRWL(4)+alb_dir(iof+i,5)*SFRWL(5)  &
-                 +alb_dir(iof+i,6)*SFRWL(6))/(SFRWL(4)+SFRWL(5)+SFRWL(6))
-        end select
-      elseif(iflag_rrtm==1)then
+!
+      IF (iflag_rrtm==0) THEN
+!
+        PALBD(i,1)=alb_dif(iof+i,1)
+        PALBD(i,2)=alb_dif(iof+i,2)
+        PALBP(i,1)=alb_dir(iof+i,1)
+        PALBP(i,2)=alb_dir(iof+i,2)
+!
+      ELSEIF (iflag_rrtm==1) THEn
+!
         DO kk=1,NSW
-         PALBD_NEW(i,kk)=alb_dif(iof+i,kk)
-         PALBP_NEW(i,kk)=alb_dir(iof+i,kk)
+          PALBD_NEW(i,kk)=alb_dif(iof+i,kk)
+          PALBP_NEW(i,kk)=alb_dir(iof+i,kk)
         ENDDO
-      endif
+!
+      ENDIF
 !albedo SB <<<
-
-
 
 
@@ -666,9 +634,9 @@
        ENDIF
 
-	      
-          DO i=1,kdlon
-          DO k=1,kflev+1
-         ZSWFT0_i(1:klon,k) = ZFSDN0(1:klon,k)-ZFSUP0(1:klon,k)
-         ZLWFT0_i(1:klon,k)=-ZFLDN0(1:klon,k)-ZFLUP0(1:klon,k)
+       ZSWFT0_i(:,:) = ZFSDN0(:,:)-ZFSUP0(:,:)
+       ZLWFT0_i(:,:) =-ZFLDN0(:,:)-ZFLUP0(:,:)
+
+       DO i=1,kdlon
+       DO k=1,kflev+1
 !        print *,'iof i k klon klev=',iof,i,k,klon,klev
          lwdn0 ( iof+i,k)   = ZFLDN0 ( i,k)
@@ -680,6 +648,6 @@
          swup0 ( iof+i,k)   = ZFSUP0 ( i,k)
          swup  ( iof+i,k)   = ZFSUP  ( i,k)
-          ENDDO  
-          ENDDO  
+       ENDDO  
+       ENDDO  
 !          print*,'SW_AR4 ZFSDN0 1 , klev:',ZFSDN0(1:klon,1),ZFSDN0(1:klon,klev)
 !          print*,'SW_AR4 swdn0  1 , klev:',swdn0(1:klon,1),swdn0(1:klon,klev)
Index: LMDZ5/trunk/libf/phylmd/surf_ocean_mod.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/surf_ocean_mod.F90	(revision 2410)
+++ LMDZ5/trunk/libf/phylmd/surf_ocean_mod.F90	(revision 2413)
@@ -175,29 +175,51 @@
 
 !******************************************************************************
-! Calculate albedo
+! Calculate ocean surface albedo
 !******************************************************************************
 !albedo SB >>>
-  if(iflag_albedo==1)then
-    call ocean_albedo(knon,rmu0,knindex,windsp,SFRWL,alb_dir_new,alb_dif_new)
-  else
+IF (iflag_albedo==0) THEN
+!--old parametrizations of ocean surface albedo
+!
     IF (cycle_diurne) THEN
+!
        CALL alboc_cd(rmu0,alb_eau)
+!
+!--ad-hoc correction for model radiative balance tuning
+!--now outside alboc_cd routine
+       alb_eau(:) = fmagic*alb_eau(:) + pmagic
+       alb_eau=MIN(MAX(alb_eau,0.0),1.0)
+!
     ELSE
+!
        CALL alboc(REAL(jour),rlat,alb_eau)
+!--ad-hoc correction for model radiative balance tuning
+!--now outside alboc routine
+       alb_eau(:) = fmagic*alb_eau(:) + pmagic
+       alb_eau=MIN(MAX(alb_eau(i),0.04),0.60)
+!
     ENDIF
-
+!
     DO i =1, knon
-      do  k=1,nsw
+      DO  k=1,nsw
        alb_dir_new(i,k) = alb_eau(knindex(i))
-      enddo
+      ENDDO
     ENDDO
-!IM 09122015 beg
-!IM next line corresponds to Sunghye Baek change that she made when she added new ocean albedo
-!    alb_dif_new=0.05 !alb_dir_new
-!IM next line corresponds to the old values of LMDZ5A/IPSLCM5A versions 
+!IM 09122015 next line corresponds to the old way of doing in LMDZ5A/IPSLCM5A versions 
+!albedo for diffuse radiation is taken the same as for direct radiation
      alb_dif_new=alb_dir_new
 !IM 09122015 end
-endif
-
+!
+ELSE IF (iflag_albedo==1) THEN
+!--new parametrization of ocean surface albedo by Sunghye Baek
+!--albedo for direct and diffuse radiation are different
+!
+    CALL ocean_albedo(knon,rmu0,knindex,windsp,SFRWL,alb_dir_new,alb_dif_new)
+!
+!--ad-hoc correction for model radiative balance tuning
+    alb_dir_new(:,:) = fmagic*alb_dir_new(:,:) + pmagic
+    alb_dir_new=MIN(MAX(alb_dir_new,0.0),1.0)
+    alb_dif_new=MIN(MAX(alb_dif_new,0.0),1.0)
+!
+ENDIF
 !albedo SB <<<
 
