Index: /branches/UKMO/dev_r7651_GO6pck_shlat2d/NEMOGCM/CONFIG/SHARED/namelist_ref
===================================================================
--- /branches/UKMO/dev_r7651_GO6pck_shlat2d/NEMOGCM/CONFIG/SHARED/namelist_ref	(revision 7677)
+++ /branches/UKMO/dev_r7651_GO6pck_shlat2d/NEMOGCM/CONFIG/SHARED/namelist_ref	(revision 7678)
@@ -563,4 +563,8 @@
 &namlbc        !   lateral momentum boundary condition
 !-----------------------------------------------------------------------
+!              ! file name ! frequency (hours) !   variable   ! time interp.   !  clim   ! 'yearly'/ ! weights  ! rotation ! land/sea mask !
+!              !           !  (if <0  months)  !     name     !   (logical)    !  (T/F ) ! 'monthly' ! filename ! pairing  ! filename      !
+   sn_shlat2d  =  'shlat_coef.nc',     -12     ,   'shlat2d'  ,    .false.     ,  .true. ,  'yearly' , ''       , ''       , ''
+   ln_shlat2d  = .false.   !  read lateral momentum boundary condition from a file (T)
    rn_shlat    =    2.     !  shlat = 0  !  0 < shlat < 2  !  shlat = 2  !  2 < shlat
                            !  free slip  !   partial slip  !   no slip   ! strong slip
Index: /branches/UKMO/dev_r7651_GO6pck_shlat2d/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90
===================================================================
--- /branches/UKMO/dev_r7651_GO6pck_shlat2d/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90	(revision 7677)
+++ /branches/UKMO/dev_r7651_GO6pck_shlat2d/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90	(revision 7678)
@@ -31,4 +31,6 @@
    USE wrk_nemo        ! Memory allocation
    USE timing          ! Timing
+   USE iom             ! For shlat2d
+   USE fldread         ! for sn_shlat2d
 
    IMPLICIT NONE
@@ -138,6 +140,12 @@
       REAL(wp) ::  zphi_drake_passage, zshlat_antarc
       REAL(wp), POINTER, DIMENSION(:,:) ::  zwf
-      !!
-      NAMELIST/namlbc/ rn_shlat, ln_vorlat
+
+      INTEGER  :: inum             !  logical unit for shlat2d
+      REAL(wp) :: zshlat           !: locally modified shlat for some strait
+      REAL(wp), POINTER, DIMENSION(:,:) :: zshlat2d
+      LOGICAL  :: ln_shlat2d
+      TYPE(FLD_N) :: sn_shlat2d
+      !!
+      NAMELIST/namlbc/ rn_shlat, ln_vorlat, ln_shlat2d, sn_shlat2d
       !!---------------------------------------------------------------------
       !
@@ -172,4 +180,12 @@
          WRITE(ctmp1,*) ' rn_shlat is negative = ', rn_shlat
          CALL ctl_stop( ctmp1 )
+      ENDIF
+
+      IF ( ln_shlat2d ) THEN
+         IF(lwp) WRITE(numout,*) '         READ shlat as a 2D coefficient in a file '
+         CALL wrk_alloc( jpi, jpj, zshlat2d  )
+         CALL iom_open(sn_shlat2d%clname, inum)
+         CALL iom_get (inum, jpdom_data, sn_shlat2d%clvar, zshlat2d, 1) !
+         CALL iom_close(inum)
       ENDIF
 
@@ -350,12 +366,23 @@
       DO jk = 1, jpk
          zwf(:,:) = fmask(:,:,jk)         
-         DO jj = 2, jpjm1
-            DO ji = fs_2, fs_jpim1   ! vector opt.
-               IF( fmask(ji,jj,jk) == 0._wp ) THEN
-                  fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   &
-                     &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  )
-               ENDIF
-            END DO
-         END DO
+         IF (  ln_shlat2d ) THEN
+            DO jj = 2, jpjm1
+               DO ji = fs_2, fs_jpim1   ! vector opt.
+                  IF( fmask(ji,jj,jk) == 0. ) THEN
+                     fmask(ji,jj,jk) = zshlat2d(ji,jj) * MIN( 1._wp, MAX( zwf(ji+1,jj), zwf(ji,jj+1),   &
+                        &                                              zwf(ji-1,jj), zwf(ji,jj-1)  )  )
+                  ENDIF
+               END DO
+            END DO
+         ELSE
+            DO jj = 2, jpjm1
+               DO ji = fs_2, fs_jpim1   ! vector opt.
+                  IF( fmask(ji,jj,jk) == 0._wp ) THEN
+                     fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   &
+                        &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  )
+                  ENDIF
+               END DO
+            END DO
+         ENDIF
          DO jj = 2, jpjm1
             IF( fmask(1,jj,jk) == 0._wp ) THEN
@@ -520,4 +547,7 @@
       CALL wrk_dealloc( jpi, jpj, imsk )
       CALL wrk_dealloc( jpi, jpj, zwf  )
+      IF ( ln_shlat2d ) THEN
+        CALL wrk_dealloc( jpi, jpj, zshlat2d  )
+      ENDIF
       !
       IF( nn_timing == 1 )  CALL timing_stop('dom_msk')
