Index: /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/CONFIG/cfg.txt
===================================================================
--- /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/CONFIG/cfg.txt	(revision 5456)
+++ /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/CONFIG/cfg.txt	(revision 5457)
@@ -1,5 +1,4 @@
 GYRE_PISCES OPA_SRC TOP_SRC
 ORCA2_LIM_CFC_C14b OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC
-GYRE OPA_SRC
 GYRE_XIOS OPA_SRC
 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC
@@ -11,2 +10,3 @@
 ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC
 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC
+GYRE OPA_SRC
Index: /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
===================================================================
--- /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90	(revision 5456)
+++ /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90	(revision 5457)
@@ -227,5 +227,5 @@
 !     In case ln_wave and ln_sdw the surface vertical velocity is modified
 !     accounting for Sokes Drift velocity
-      IF ( ln_sdw )  THEN
+      IF ( ln_wave .AND. ln_sdw )  THEN
        ALLOCATE(sshnu(jpi,jpj),sshnv(jpi,jpj),dsshnu(jpi,jpj),dsshnv(jpi,jpj))
        sshnu (:,:) = 0._wp
Index: /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
===================================================================
--- /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90	(revision 5456)
+++ /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90	(revision 5457)
@@ -52,4 +52,5 @@
    LOGICAL , PUBLIC ::   ln_cdgw        !: true if neutral drag coefficient from wave model
    LOGICAL , PUBLIC ::   ln_sdw         !: true if 3d stokes drift from wave model
+   LOGICAL , PUBLIC ::   ln_tauoc         !: true if normalized stress from wave is used
    !
    LOGICAL , PUBLIC ::   ln_icebergs    !: Icebergs
Index: /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
===================================================================
--- /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90	(revision 5456)
+++ /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90	(revision 5457)
@@ -84,5 +84,6 @@
       NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx,  ln_blk_clio, ln_blk_core, ln_cpl,   &
          &             ln_blk_mfs, ln_apr_dyn, nn_ice,  nn_ice_embd, ln_dm2dc   , ln_rnf,   &
-         &             ln_ssr    , nn_fwb    , ln_cdgw , ln_wave , ln_sdw, nn_lsm, cn_iceflx
+         &             ln_ssr    , nn_fwb    , ln_cdgw , ln_wave , ln_sdw, ln_tauoc,        &
+         &             nn_lsm, cn_iceflx
       INTEGER  ::   ios
       !!----------------------------------------------------------------------
@@ -337,5 +338,16 @@
                        CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   !
       END SELECT
-
+      IF (ln_wave .AND. ln_tauoc) THEN
+            utau(:,:) = utau(:,:)*tauoc_wave(:,:)
+            vtau(:,:) = vtau(:,:)*tauoc_wave(:,:)
+            taum(:,:) = taum(:,:)*tauoc_wave(:,:)
+      !
+            SELECT CASE( nsbc )
+            CASE(  0,1,2,3,5,-1 )  ;
+                IF(lwp) WRITE(numout,*) 'WARNING: You are subtracting the wave stress to the ocean. &
+                        & If not requested select ln_tauoc=.false'
+            END SELECT
+      !
+      END IF
       !                                            !==  Misc. Options  ==!
       
Index: /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90
===================================================================
--- /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90	(revision 5456)
+++ /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90	(revision 5457)
@@ -35,4 +35,5 @@
    TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_sd    ! structure of input fields (file informations, fields read) Stokes Drift
    TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_wn    ! structure of input fields (file informations, fields read) wave number for Qiao
+   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_tauoc    ! structure of input fields (file informations, fields read) normalized wave stress into the ocean
    REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:)       :: cdn_wave 
    REAL(wp),ALLOCATABLE,DIMENSION (:,:)              :: usd2d,vsd2d
@@ -40,4 +41,5 @@
    REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:)       :: usd2dt,vsd2dt,tsd2d
    REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:,:)     :: usd3d,vsd3d,wsd3d 
+   REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:)       :: tauoc_wave
    LOGICAL, PUBLIC :: ln_stcor = .FALSE.
 
@@ -84,7 +86,7 @@
       CHARACTER(len=100)     ::  cn_dir                          ! Root directory for location of drag coefficient files
       TYPE(FLD_N)            ::  sn_cdg, sn_usd, sn_vsd,  &
-                             &   sn_swh, sn_wmp, sn_wnum         ! informations about the fields to be read
-      !!---------------------------------------------------------------------
-      NAMELIST/namsbc_wave/  sn_cdg, cn_dir, sn_usd, sn_vsd, sn_swh, sn_wmp, sn_wnum, ln_stcor
+                             &   sn_swh, sn_wmp, sn_wnum, sn_tauoc      ! informations about the fields to be read
+      !!---------------------------------------------------------------------
+      NAMELIST/namsbc_wave/  sn_cdg, cn_dir, sn_usd, sn_vsd, sn_swh, sn_wmp, sn_wnum, ln_stcor, sn_tauoc
       !!---------------------------------------------------------------------
 
@@ -115,5 +117,16 @@
             cdn_wave(:,:) = 0.0
         ENDIF
-
+!
+         IF ( ln_tauoc ) THEN
+            ALLOCATE( sf_tauoc(1), STAT=ierror )           !* allocate and fill sf_wave with sn_tauoc
+            IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' )
+            !
+                                   ALLOCATE( sf_tauoc(1)%fnow(jpi,jpj,1)   )
+            IF( sn_cdg%ln_tint )   ALLOCATE( sf_tauoc(1)%fdta(jpi,jpj,1,2) )
+            CALL fld_fill( sf_tauoc, (/ sn_tauoc /), cn_dir, 'sbc_wave', 'Wave module', 'namsbc_wave' )
+            ALLOCATE( tauoc_wave(jpi,jpj) )
+            tauoc_wave(:,:) = 0.0
+        ENDIF
+!
          IF ( ln_sdw ) THEN
             slf_i(jp_usd) = sn_usd ; slf_i(jp_vsd) = sn_vsd;
@@ -152,4 +165,10 @@
          cdn_wave(:,:) = sf_cd(1)%fnow(:,:,1)
       ENDIF
+!
+      IF ( ln_tauoc ) THEN
+         CALL fld_read( kt, nn_fsbc, sf_tauoc )      !* read wave norm stress from external forcing
+         tauoc_wave(:,:) = sf_tauoc(1)%fnow(:,:,1)
+      ENDIF
+!
       IF ( ln_sdw )  THEN
           CALL fld_read( kt, nn_fsbc, sf_sd )      !* read wave parameters from external forcing
@@ -214,5 +233,4 @@
          CALL lbc_lnk( vsd3d(:,:,:), 'V', -1. )
 
-
           CALL wrk_alloc( jpi,jpj,jpk,udummy,vdummy,hdivdummy,rotdummy)
       !-------------------------------------------------------------------          
Index: /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
===================================================================
--- /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90	(revision 5456)
+++ /branches/2014/dev_r4822_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90	(revision 5457)
@@ -7,4 +7,5 @@
    !!            3.3  !  2010-09  (C. Ethe, G. Madec)  merge TRC-TRA + switch from velocity to transport
    !!            4.0  !  2011-06  (G. Madec)  Addition of Mixed Layer Eddy parameterisation
+   !!            3.6  !  2015-06  (E. Clementi) Addition of Stokes drift in case of wave coupling
    !!----------------------------------------------------------------------
 
@@ -32,5 +33,6 @@
    USE wrk_nemo        ! Memory Allocation
    USE timing          ! Timing
-
+   USE sbcwave         ! wave module
+   USE sbc_oce         ! surface boundary condition: ocean
 
    IMPLICIT NONE
@@ -80,4 +82,8 @@
       !
       CALL wrk_alloc( jpi, jpj, jpk, zun, zvn, zwn )
+      !
+      zun(:,:,:) = 0.0
+      zvn(:,:,:) = 0.0
+      zwn(:,:,:) = 0.0
       !                                          ! set time step
       IF( neuler == 0 .AND. kt == nit000 ) THEN     ! at nit000
@@ -89,10 +95,20 @@
       IF( nn_cla == 1 .AND. cp_cfg == 'orca' .AND. jp_cfg == 2 )   CALL cla_traadv( kt )       !==  Cross Land Advection  ==! (hor. advection)
       !
-      !                                               !==  effective transport  ==!
-      DO jk = 1, jpkm1
-         zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)                  ! eulerian transport only
-         zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk)
-         zwn(:,:,jk) = e1t(:,:) * e2t(:,:)      * wn(:,:,jk)
-      END DO
+      IF (ln_wave .AND. ln_sdw) THEN
+         DO jk = 1, jpkm1
+            zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) *      &
+                        &  ( un(:,:,jk) + usd3d(:,:,jk) )                  !eulerian transport + Stokes Drift
+            zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) *      &
+                        &  ( vn(:,:,jk) + vsd3d(:,:,jk) ) 
+            zwn(:,:,jk) = e1t(:,:) * e2t(:,:)      *      &
+                        &  ( wn(:,:,jk) + wsd3d(:,:,jk) )
+         END DO
+      ELSE
+         DO jk = 1, jpkm1
+            zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)                  ! eulerian transport only
+            zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk)
+            zwn(:,:,jk) = e1t(:,:) * e2t(:,:)      * wn(:,:,jk)
+         END DO
+      ENDIF
       !
       IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN
