Index: /NEMO/trunk/src/ABL/ablmod.F90
===================================================================
--- /NEMO/trunk/src/ABL/ablmod.F90	(revision 12813)
+++ /NEMO/trunk/src/ABL/ablmod.F90	(revision 12814)
@@ -592,8 +592,8 @@
       !                            !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
       !                            !  8 *** Swap time indices for the next timestep
-      !                            !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
-      nt_n = 1 + MOD( kt  , 2)
-      nt_a = 1 + MOD( kt+1, 2)
-      !	  
+      !                            !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+      nt_n = 1 + MOD( nt_n, 2)
+      nt_a = 1 + MOD( nt_a, 2)
+      !
 !---------------------------------------------------------------------------------------------------
    END SUBROUTINE abl_stp
Index: /NEMO/trunk/src/ABL/par_abl.F90
===================================================================
--- /NEMO/trunk/src/ABL/par_abl.F90	(revision 12813)
+++ /NEMO/trunk/src/ABL/par_abl.F90	(revision 12814)
@@ -29,4 +29,5 @@
    LOGICAL , PUBLIC            ::   ln_smth_pblh   !: smoothing of atmospheric PBL height 
 
+   LOGICAL           , PUBLIC ::   ln_rstart_abl    !: (de)activate abl restart
    CHARACTER(len=256), PUBLIC ::   cn_ablrst_in     !: suffix of abl restart name (input)
    CHARACTER(len=256), PUBLIC ::   cn_ablrst_out    !: suffix of abl restart name (output)
Index: /NEMO/trunk/src/ABL/sbcabl.F90
===================================================================
--- /NEMO/trunk/src/ABL/sbcabl.F90	(revision 12813)
+++ /NEMO/trunk/src/ABL/sbcabl.F90	(revision 12814)
@@ -68,5 +68,5 @@
       LOGICAL            ::   lluldl
       NAMELIST/namsbc_abl/ cn_dir, cn_dom, cn_ablrst_in, cn_ablrst_out,           &
-         &                 cn_ablrst_indir, cn_ablrst_outdir,                     &
+         &                 cn_ablrst_indir, cn_ablrst_outdir, ln_rstart_abl,      &
          &                 ln_hpgls_frc, ln_geos_winds, nn_dyn_restore,           &
          &                 rn_ldyn_min , rn_ldyn_max, rn_ltra_min, rn_ltra_max,   &
@@ -263,9 +263,8 @@
 
       ! Initialize the time index for now time (nt_n) and after time (nt_a)
-      nt_n = 1 + MOD( nit000  , 2)
-      nt_a = 1 + MOD( nit000+1, 2)
+      nt_n = 1; nt_a = 2
 
       ! initialize ABL from data or restart
-      IF( ln_rstart ) THEN
+      IF( ln_rstart_abl ) THEN
          CALL abl_rst_read
       ELSE
@@ -288,6 +287,4 @@
       ENDIF
 
-      rhoa(:,:) = rho_air( tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), sf(jp_slp)%fnow(:,:,1) ) !!GS: rhoa must be (re)computed here here to avoid division by zero in blk_ice_1 (TBI)
-
    END SUBROUTINE sbc_abl_init
 
@@ -329,55 +326,58 @@
       CALL fld_read( kt, nn_fsbc, sf )             ! input fields provided at the current time-step
 
-      !!-------------------------------------------------------------------------------------------
-      !! 2 - Compute Cd x ||U||, Ch x ||U||, Ce x ||U||, and SSQ using now fields
-      !!-------------------------------------------------------------------------------------------
-
-      CALL blk_oce_1( kt,  u_abl(:,:,2,nt_n      ),  v_abl(:,:,2,nt_n      ),   &   !   <<= in
-         &                tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa),   &   !   <<= in
-         &                sf(jp_slp )%fnow(:,:,1) , sst_m, ssu_m, ssv_m     ,   &   !   <<= in
-         &                sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1) ,   &   !   <<= in
-         &                tsk_m, zssq, zcd_du, zsen, zevp                       )   !   =>> out
-
-#if defined key_si3
-      CALL blk_ice_1(  u_abl(:,:,2,nt_n      ),  v_abl(:,:,2,nt_n      ),    &   !   <<= in
-         &            tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa),    &   !   <<= in
-         &            sf(jp_slp)%fnow(:,:,1)  ,  u_ice, v_ice, tm_su    ,    &   !   <<= in
-         &            pseni=zseni, pevpi=zevpi, pssqi=zssqi, pcd_dui=zcd_dui )   !   <<= out
-#endif
-
-      !!-------------------------------------------------------------------------------------------
-      !! 3 - Advance ABL variables from now (n) to after (n+1)
-      !!-------------------------------------------------------------------------------------------
-
-      CALL abl_stp( kt, tsk_m, ssu_m, ssv_m, zssq,                          &   !   <<= in
-         &              sf(jp_wndi)%fnow(:,:,:), sf(jp_wndj)%fnow(:,:,:),   &   !   <<= in
-         &              sf(jp_tair)%fnow(:,:,:), sf(jp_humi)%fnow(:,:,:),   &   !   <<= in
-         &              sf(jp_slp )%fnow(:,:,1),                            &   !   <<= in
-         &              sf(jp_hpgi)%fnow(:,:,:), sf(jp_hpgj)%fnow(:,:,:),   &   !   <<= in
-         &              zcd_du, zsen, zevp,                                 &   !   <=> in/out
-         &              wndm, utau, vtau, taum                              &   !   =>> out
-#if defined key_si3
-         &            , tm_su, u_ice, v_ice, zssqi, zcd_dui                 &   !   <<= in
-         &            , zseni, zevpi, wndm_ice, ato_i                       &   !   <<= in
-         &            , utau_ice, vtau_ice                                  &   !   =>> out
-#endif
-         &                                                                  )
-      !!-------------------------------------------------------------------------------------------
-      !! 4 - Finalize flux computation using ABL variables at (n+1), nt_n corresponds to (n+1) since
-      !!                                                                time swap is done in abl_stp
-      !!-------------------------------------------------------------------------------------------
-
-      CALL blk_oce_2( tq_abl(:,:,2,nt_n,jp_ta),                            &
-         &            sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1),   &
-         &            sf(jp_prec)%fnow(:,:,1) , sf(jp_snow)%fnow(:,:,1),   &
-         &            tsk_m, zsen, zevp                                )
-
-      CALL abl_rst_opn( kt )                       ! Open abl restart file (if necessary)
-      IF( lrst_abl ) CALL abl_rst_write( kt )      ! -- abl restart file
-
-#if defined key_si3
-      ! Avoid a USE abl in icesbc module
-      sf(jp_tair)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_ta);  sf(jp_humi)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_qa)
-#endif
+      IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN
+
+         !!-------------------------------------------------------------------------------------------
+         !! 2 - Compute Cd x ||U||, Ch x ||U||, Ce x ||U||, and SSQ using now fields
+         !!-------------------------------------------------------------------------------------------
+
+         CALL blk_oce_1( kt,  u_abl(:,:,2,nt_n      ),  v_abl(:,:,2,nt_n      ),   &   !   <<= in
+            &                tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa),   &   !   <<= in
+            &                sf(jp_slp )%fnow(:,:,1) , sst_m, ssu_m, ssv_m     ,   &   !   <<= in
+            &                sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1) ,   &   !   <<= in
+            &                tsk_m, zssq, zcd_du, zsen, zevp                       )   !   =>> out
+
+#if defined key_si3
+         CALL blk_ice_1(  u_abl(:,:,2,nt_n      ),  v_abl(:,:,2,nt_n      ),    &   !   <<= in
+            &            tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa),    &   !   <<= in
+            &            sf(jp_slp)%fnow(:,:,1)  ,  u_ice, v_ice, tm_su    ,    &   !   <<= in
+            &            pseni=zseni, pevpi=zevpi, pssqi=zssqi, pcd_dui=zcd_dui )   !   <<= out
+#endif
+
+         !!-------------------------------------------------------------------------------------------
+         !! 3 - Advance ABL variables from now (n) to after (n+1)
+         !!-------------------------------------------------------------------------------------------
+   
+         CALL abl_stp( kt, tsk_m, ssu_m, ssv_m, zssq,                          &   !   <<= in
+            &              sf(jp_wndi)%fnow(:,:,:), sf(jp_wndj)%fnow(:,:,:),   &   !   <<= in
+            &              sf(jp_tair)%fnow(:,:,:), sf(jp_humi)%fnow(:,:,:),   &   !   <<= in
+            &              sf(jp_slp )%fnow(:,:,1),                            &   !   <<= in
+            &              sf(jp_hpgi)%fnow(:,:,:), sf(jp_hpgj)%fnow(:,:,:),   &   !   <<= in
+            &              zcd_du, zsen, zevp,                                 &   !   <=> in/out
+            &              wndm, utau, vtau, taum                              &   !   =>> out
+#if defined key_si3
+            &            , tm_su, u_ice, v_ice, zssqi, zcd_dui                 &   !   <<= in
+            &            , zseni, zevpi, wndm_ice, ato_i                       &   !   <<= in
+            &            , utau_ice, vtau_ice                                  &   !   =>> out
+#endif
+            &                                                                  )
+         !!-------------------------------------------------------------------------------------------
+         !! 4 - Finalize flux computation using ABL variables at (n+1), nt_n corresponds to (n+1) since
+         !!                                                                time swap is done in abl_stp
+         !!-------------------------------------------------------------------------------------------
+
+         CALL blk_oce_2( tq_abl(:,:,2,nt_n,jp_ta),                            &
+            &            sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1),   &
+            &            sf(jp_prec)%fnow(:,:,1) , sf(jp_snow)%fnow(:,:,1),   &
+            &            tsk_m, zsen, zevp                                )
+   
+         CALL abl_rst_opn( kt )                       ! Open abl restart file (if necessary)
+         IF( lrst_abl ) CALL abl_rst_write( kt )      ! -- abl restart file
+
+#if defined key_si3
+         ! Avoid a USE abl in icesbc module
+         sf(jp_tair)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_ta);  sf(jp_humi)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_qa)
+#endif
+      END IF
 
    END SUBROUTINE sbc_abl
Index: /NEMO/trunk/src/OCE/SBC/sbcblk.F90
===================================================================
--- /NEMO/trunk/src/OCE/SBC/sbcblk.F90	(revision 12813)
+++ /NEMO/trunk/src/OCE/SBC/sbcblk.F90	(revision 12814)
@@ -643,11 +643,11 @@
 
       IF( ln_abl ) THEN         !==  ABL formulation  ==!   multiplication by rho_air and turbulent fluxes computation done in ablstp
-         !! FL do we need this multiplication by tmask ... ???
          DO_2D_11_11
-            zztmp = zU_zu(ji,jj) !* tmask(ji,jj,1)
+            zztmp = zU_zu(ji,jj)
             wndm(ji,jj)   = zztmp                   ! Store zU_zu in wndm to compute ustar2 in ablmod
             pcd_du(ji,jj) = zztmp * zcd_oce(ji,jj)
             psen(ji,jj)   = zztmp * zch_oce(ji,jj)
             pevp(ji,jj)   = zztmp * zce_oce(ji,jj)
+            rhoa(ji,jj)   = rho_air( ptair(ji,jj), phumi(ji,jj), pslp(ji,jj) )
          END_2D
       ELSE                      !==  BLK formulation  ==!   turbulent fluxes computation
@@ -883,5 +883,4 @@
 
       ! local scalars ( place there for vector optimisation purposes)
-      !IF (ln_abl) rhoa  (:,:)  = rho_air( ptair(:,:), phumi(:,:), pslp(:,:) ) !!GS: rhoa must be (re)computed here with ABL to avoid division by zero after (TBI)
       zcd_dui(:,:) = wndm_ice(:,:) * Cd_ice(:,:)
 
