New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 5899 – NEMO

Changeset 5899


Ignore:
Timestamp:
2015-11-19T13:21:14+01:00 (8 years ago)
Author:
emanuelaclementi
Message:

ticket 1632 Add in changes from the 2014/dev_4822_INGV_WAVE branch

Location:
branches/2015/dev_5894_INGV_WAVE/NEMOGCM
Files:
12 edited
2 copied

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/CONFIG/SHARED/namelist_ref

    r4773 r5899  
    635635   rn_bfrien   =    50.    !  local multiplying factor of bfr (ln_bfr2d=T) 
    636636   ln_bfrimp   = .true.    !  implicit bottom friction (requires ln_zdfexp = .false. if true) 
     637   ln_zdfqiao  = .false.    !  Enhanced wave vertical mixing Qiao (2010) 
    637638/ 
    638639!----------------------------------------------------------------------- 
     
    11771178   sn_usd      =  'sdw_wave' ,        1          , 'u_sd2d'     ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
    11781179   sn_vsd      =  'sdw_wave' ,        1          , 'v_sd2d'     ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     1180   sn_swh      =  'sdw_wave' ,        1          , 'hs'         ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     1181   sn_wmp      =  'sdw_wave' ,        1          , 'wmp'        ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
    11791182   sn_wn       =  'sdw_wave' ,        1          , 'wave_num'   ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
    11801183! 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/CONFIG/cfg.txt

    r4690 r5899  
    11GYRE_PISCES OPA_SRC TOP_SRC 
    22ORCA2_LIM_CFC_C14b OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
    3 GYRE OPA_SRC 
    43GYRE_XIOS OPA_SRC 
    54ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 
     
    1110ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
    1211ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 
     12GYRE OPA_SRC 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r4770 r5899  
    405405         zv_frc(:,:) =  zv_frc(:,:) + zraur * z1_2 * ( vtau_b(:,:) + vtau(:,:) ) * hvr(:,:) 
    406406      ENDIF   
     407 
     408      ! Add Stokes Coriolis if defined 
     409      IF ( ln_stcor ) THEN 
     410         DO jj = 1, jpjm1 
     411            DO ji = 1, fs_jpim1   ! vector opt. 
     412 
     413               zy1 = ff(ji  ,jj-1) * ( vsd2d(ji  ,jj-1) + vsd2d(ji+1,jj-1) ) 
     414               zy2 = ff(ji  ,jj  ) * ( vsd2d(ji  ,jj  ) + vsd2d(ji+1,jj  ) ) 
     415               zx1 = ff(ji-1,jj  ) * ( usd2d(ji-1,jj  ) + usd2d(ji-1,jj+1) ) 
     416               zx2 = ff(ji  ,jj  ) * ( usd2d(ji  ,jj  ) + usd2d(ji  ,jj+1) ) 
     417 
     418               zu_frc(ji,jj) = zu_frc(ji,jj) + 0.25 * ( zy1 + zy2 ) * hur(ji,jj) 
     419               zv_frc(ji,jj) = zv_frc(ji,jj) - 0.25 * ( zx1 + zx2 ) * hvr(ji,jj) 
     420           END DO 
     421         END DO 
     422      ENDIF 
     423 
    407424      ! 
    408425      IF ( ln_apr_dyn ) THEN                    ! Add atm pressure forcing 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r4486 r5899  
    99   !!             -   !  2010-09  (D.Storkey and E.O'Dea) bug fixes for BDY module 
    1010   !!            3.3  !  2011-10  (M. Leclair) split former ssh_wzv routine and remove all vvl related work 
     11   !!            3.6  !  2014-10  (E. Clementi, P. Oddo) add wave contribution to surface vertical velocity  
    1112   !!---------------------------------------------------------------------- 
    1213 
     
    4243   USE wrk_nemo        ! Memory Allocation 
    4344   USE timing          ! Timing 
     45   USE sbcwave,  ONLY: usd2dt, vsd2dt,wsd3d 
    4446 
    4547   IMPLICIT NONE 
     
    172174      INTEGER             ::   ji, jj, jk   ! dummy loop indices 
    173175      REAL(wp)            ::   z1_2dt       ! local scalars 
     176      ! 
     177      REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) ::  sshnu, sshnv, dsshnu,dsshnv 
    174178      !!---------------------------------------------------------------------- 
    175179       
     
    220224         END DO 
    221225      ENDIF 
     226! 
     227!     In case ln_wave and ln_sdw the surface vertical velocity is modified 
     228!     accounting for Sokes Drift velocity 
     229      IF ( ln_wave .AND. ln_sdw )  THEN 
     230       ALLOCATE(sshnu(jpi,jpj),sshnv(jpi,jpj),dsshnu(jpi,jpj),dsshnv(jpi,jpj)) 
     231       sshnu (:,:) = 0._wp 
     232       sshnv (:,:) = 0._wp 
     233       dsshnu(:,:) = 0._wp 
     234       dsshnv(:,:) = 0._wp 
     235       ! sshn interpolated on U-V grid 
     236       !--------------------------------- 
     237       DO jj = 1 , jpjm1 
     238         DO ji = 1 , jpim1 
     239           sshnu(ji,jj) =  0.5 * ( 2. - umask(ji,jj,1) ) *               & 
     240                        &        ( sshn(ji  ,jj) * tmask(ji  ,jj,1)      & 
     241                        &        + sshn(ji+1,jj) * tmask(ji+1,jj,1) ) 
     242           sshnv(ji,jj) =  0.5 * ( 2. - vmask(ji,jj,1) ) *               & 
     243                        &        ( sshn(ji,jj  ) * tmask(ji,jj  ,1)      & 
     244                        &        + sshn(ji,jj+1) * tmask(ji,jj+1,1) ) 
     245         ENDDO 
     246       ENDDO 
     247       ! Compute d(ssh)/dx  and d(ssh)/dy   
     248       !--------------------------------- 
     249       DO jj = 1 , jpjm1 
     250         DO ji = 1 , jpim1 
     251           dsshnu(ji,jj) = ( sshnu(ji+1,jj) - sshnu(ji,jj) ) / e1u(ji,jj) 
     252           dsshnv(ji,jj) = ( sshnv(ji,jj+1) - sshnv(ji,jj) ) / e2v(ji,jj) 
     253         ENDDO 
     254       ENDDO 
     255       ! Compute the surface vertical velocity accounting for the Stokes Drift  
     256       !--------------------------------------------------------------------- 
     257       wn(:,:,1) = wn(:,:,1) + usd2dt(:,:) * dsshnu(:,:)     & 
     258                 &           + vsd2dt(:,:) * dsshnv(:,:)      & 
     259                 &           - ( wsd3d (:,:,1) ) * tmask(:,:,1) 
     260      ENDIF 
     261! 
    222262 
    223263#if defined key_bdy 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r4306 r5899  
    5252   LOGICAL , PUBLIC ::   ln_cdgw        !: true if neutral drag coefficient from wave model 
    5353   LOGICAL , PUBLIC ::   ln_sdw         !: true if 3d stokes drift from wave model 
     54   LOGICAL , PUBLIC ::   ln_tauoc         !: true if normalized stress from wave is used 
    5455   ! 
    5556   LOGICAL , PUBLIC ::   ln_icebergs    !: Icebergs 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r4822 r5899  
    8484      NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx,  ln_blk_clio, ln_blk_core, ln_cpl,   & 
    8585         &             ln_blk_mfs, ln_apr_dyn, nn_ice,  nn_ice_embd, ln_dm2dc   , ln_rnf,   & 
    86          &             ln_ssr    , nn_fwb    , ln_cdgw , ln_wave , ln_sdw, nn_lsm, cn_iceflx 
     86         &             ln_ssr    , nn_fwb    , ln_cdgw , ln_wave , ln_sdw, ln_tauoc,        & 
     87         &             nn_lsm, cn_iceflx 
    8788      INTEGER  ::   ios 
    8889      !!---------------------------------------------------------------------- 
     
    337338                       CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! 
    338339      END SELECT 
    339  
     340      IF (ln_wave .AND. ln_tauoc) THEN 
     341            utau(:,:) = utau(:,:)*tauoc_wave(:,:) 
     342            vtau(:,:) = vtau(:,:)*tauoc_wave(:,:) 
     343            taum(:,:) = taum(:,:)*tauoc_wave(:,:) 
     344      ! 
     345            SELECT CASE( nsbc ) 
     346            CASE(  0,1,2,3,5,-1 )  ; 
     347                IF(lwp) WRITE(numout,*) 'WARNING: You are subtracting the wave stress to the ocean. & 
     348                        & If not requested select ln_tauoc=.false' 
     349            END SELECT 
     350      ! 
     351      END IF 
    340352      !                                            !==  Misc. Options  ==! 
    341353       
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90

    r4624 r5899  
    44   !! Wave module  
    55   !!====================================================================== 
    6    !! History :  3.3.1  !   2011-09  (Adani M)  Original code: Drag Coefficient  
    7    !!         :  3.4    !   2012-10  (Adani M)                 Stokes Drift  
     6   !! History :  3.6    !2014-09  (Clementi E, Oddo P)New Stokes Drift Computation  
     7   !!         :  3.3.1  !2011-09  (Adani M)  Original code: Drag Coefficient  
     8   !!         :  3.4    !2012-10  (Adani M)                 Stokes Drift  
    89   !!---------------------------------------------------------------------- 
    910   USE iom             ! I/O manager library 
    1011   USE in_out_manager  ! I/O manager 
    1112   USE lib_mpp         ! distribued memory computing library 
    12    USE fldread        ! read input fields 
     13   USE fldread         ! read input fields 
    1314   USE oce 
    14    USE sbc_oce        ! Surface boundary condition: ocean fields 
     15   USE sbc_oce         ! Surface boundary condition: ocean fields 
    1516   USE domvvl 
    16  
     17   USE phycst 
    1718    
    1819   !!---------------------------------------------------------------------- 
     
    2526   PUBLIC   sbc_wave    ! routine called in sbc_blk_core or sbc_blk_mfs 
    2627    
    27    INTEGER , PARAMETER ::   jpfld  = 3           ! maximum number of files to read for srokes drift 
     28   INTEGER , PARAMETER ::   jpfld  = 4           ! number of files to read for stokes drift 
    2829   INTEGER , PARAMETER ::   jp_usd = 1           ! index of stokes drift  (i-component) (m/s)    at T-point 
    2930   INTEGER , PARAMETER ::   jp_vsd = 2           ! index of stokes drift  (j-component) (m/s)    at T-point 
    30    INTEGER , PARAMETER ::   jp_wn  = 3           ! index of wave number                 (1/m)    at T-point 
    31    TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_cd    ! structure of input fields (file informations, fields read) Drag Coefficient 
    32    TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_sd    ! structure of input fields (file informations, fields read) Stokes Drift 
     31   INTEGER , PARAMETER ::   jp_swh = 3           ! index of significant wave hight      (m)      at T-point 
     32   INTEGER , PARAMETER ::   jp_wmp = 4           ! index of mean wave period            (s)      at T-point 
     33! 
     34   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_cd    ! structure of input fields (file informations, fields read) Drag Coefficient 
     35   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_sd    ! structure of input fields (file informations, fields read) Stokes Drift 
     36   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_wn    ! structure of input fields (file informations, fields read) wave number for Qiao 
     37   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_tauoc    ! structure of input fields (file informations, fields read) normalized wave stress into the ocean 
    3338   REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:)       :: cdn_wave  
    34    REAL(wp),ALLOCATABLE,DIMENSION (:,:)              :: usd2d,vsd2d,uwavenum,vwavenum  
     39   REAL(wp),ALLOCATABLE,DIMENSION (:,:)              :: usd2d,vsd2d 
     40   REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:)       :: swh,wmp,wnum 
     41   REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:)       :: usd2dt,vsd2dt,tsd2d 
    3542   REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:,:)     :: usd3d,vsd3d,wsd3d  
     43   REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:)       :: tauoc_wave 
     44   LOGICAL, PUBLIC :: ln_stcor = .FALSE. 
    3645 
    3746   !! * Substitutions 
     
    5463      !!              - Read stokes drift 2d in netcdf files  
    5564      !!              - Read wave number      in netcdf files  
    56       !!              - Compute 3d stokes drift using monochromatic 
     65      !!              - Compute 3d stokes drift using Breivik et al.,2014 
     66      !!                formulation 
    5767      !! ** action  :    
    5868      !!                
     
    6171      USE divcur 
    6272      USE wrk_nemo 
     73      USE zdf_oce,  ONLY : ln_zdfqiao 
    6374#if defined key_bdy 
    6475      USE bdy_oce, ONLY : bdytmask 
     
    6980      INTEGER                ::   ios     ! Local integer output status for namelist read 
    7081      REAL(wp),DIMENSION(:,:,:),POINTER             ::  udummy,vdummy,hdivdummy,rotdummy 
    71       REAL                                          ::  z2dt,z1_2dt 
     82      REAL(wp)                                      ::  z2dt,z1_2dt 
     83      REAL(wp)                                      ::  ztransp,zsp0, zk, zus,zvs 
     84      REAL(wp), DIMENSION(jpi,jpj)                  ::  zfac  
    7285      TYPE(FLD_N), DIMENSION(jpfld) ::   slf_i     ! array of namelist informations on the fields to read 
    7386      CHARACTER(len=100)     ::  cn_dir                          ! Root directory for location of drag coefficient files 
    74       TYPE(FLD_N)            ::  sn_cdg, sn_usd, sn_vsd, sn_wn   ! informations about the fields to be read 
    75       !!--------------------------------------------------------------------- 
    76       NAMELIST/namsbc_wave/  sn_cdg, cn_dir, sn_usd, sn_vsd, sn_wn 
     87      TYPE(FLD_N)            ::  sn_cdg, sn_usd, sn_vsd,  & 
     88                             &   sn_swh, sn_wmp, sn_wnum, sn_tauoc      ! informations about the fields to be read 
     89      !!--------------------------------------------------------------------- 
     90      NAMELIST/namsbc_wave/  sn_cdg, cn_dir, sn_usd, sn_vsd, sn_swh, sn_wmp, sn_wnum, ln_stcor, sn_tauoc 
    7791      !!--------------------------------------------------------------------- 
    7892 
     
    103117            cdn_wave(:,:) = 0.0 
    104118        ENDIF 
     119! 
     120         IF ( ln_tauoc ) THEN 
     121            ALLOCATE( sf_tauoc(1), STAT=ierror )           !* allocate and fill sf_wave with sn_tauoc 
     122            IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 
     123            ! 
     124                                   ALLOCATE( sf_tauoc(1)%fnow(jpi,jpj,1)   ) 
     125            IF( sn_cdg%ln_tint )   ALLOCATE( sf_tauoc(1)%fdta(jpi,jpj,1,2) ) 
     126            CALL fld_fill( sf_tauoc, (/ sn_tauoc /), cn_dir, 'sbc_wave', 'Wave module', 'namsbc_wave' ) 
     127            ALLOCATE( tauoc_wave(jpi,jpj) ) 
     128            tauoc_wave(:,:) = 0.0 
     129        ENDIF 
     130! 
    105131         IF ( ln_sdw ) THEN 
    106             slf_i(jp_usd) = sn_usd ; slf_i(jp_vsd) = sn_vsd; slf_i(jp_wn) = sn_wn 
    107             ALLOCATE( sf_sd(3), STAT=ierror )           !* allocate and fill sf_wave with sn_cdg 
     132            slf_i(jp_usd) = sn_usd ; slf_i(jp_vsd) = sn_vsd; 
     133            slf_i(jp_swh) = sn_swh ; slf_i(jp_wmp) = sn_wmp; 
     134            ALLOCATE( sf_sd(jpfld), STAT=ierror )           !* allocate and fill sf_sd with stokes drift 
    108135            IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 
    109136            ! 
     
    112139               IF( slf_i(ifpr)%ln_tint )   ALLOCATE( sf_sd(ifpr)%fdta(jpi,jpj,1,2) ) 
    113140            END DO 
     141! 
    114142            CALL fld_fill( sf_sd, slf_i, cn_dir, 'sbc_wave', 'Wave module ', 'namsbc_wave' ) 
    115             ALLOCATE( usd2d(jpi,jpj),vsd2d(jpi,jpj),uwavenum(jpi,jpj),vwavenum(jpi,jpj) ) 
     143            ALLOCATE( usd2d(jpi,jpj),vsd2d(jpi,jpj),usd2dt(jpi,jpj),vsd2dt(jpi,jpj)) 
    116144            ALLOCATE( usd3d(jpi,jpj,jpk),vsd3d(jpi,jpj,jpk),wsd3d(jpi,jpj,jpk) ) 
    117             usd2d(:,:) = 0.0 ;  vsd2d(:,:) = 0.0 ; uwavenum(:,:) = 0.0 ; vwavenum(:,:) = 0.0 
    118             usd3d(:,:,:) = 0.0 ;vsd3d(:,:,:) = 0.0 ; wsd3d(:,:,:) = 0.0 
     145            ALLOCATE( swh(jpi,jpj), wmp(jpi,jpj) ) 
     146            usd2d(:,:)   = 0.0 ;  vsd2d(:,:)   = 0.0 ; 
     147            usd2dt(:,:)  = 0.0 ;  vsd2dt(:,:)  = 0.0 ; 
     148            usd3d(:,:,:) = 0.0 ;  vsd3d(:,:,:) = 0.0 ; 
     149            wsd3d(:,:,:) = 0.0 ; 
     150            swh(:,:)     = 0.0 ;  wmp(:,:)     = 0.0 ; 
     151            IF ( ln_zdfqiao ) THEN 
     152               ALLOCATE( sf_wn(1), STAT=ierror )           !* allocate and fillsf_wave with sn_wnum 
     153               IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable toallocate sf_wave structure' ) 
     154                                      ALLOCATE( sf_wn(1)%fnow(jpi,jpj,1)   ) 
     155               IF( sn_wnum%ln_tint )  ALLOCATE( sf_wn(1)%fdta(jpi,jpj,1,2) ) 
     156               CALL fld_fill( sf_wn, (/ sn_wnum /), cn_dir, 'sbc_wave', 'Wave module', 'namsbc_wave' ) 
     157               ALLOCATE( wnum(jpi,jpj),tsd2d(jpi,jpj) ) 
     158               wnum(:,:) = 0.0; tsd2d(:,:) = 0.0 
     159            ENDIF 
    119160         ENDIF 
    120161      ENDIF 
    121          ! 
    122162         ! 
    123163      IF ( ln_cdgw ) THEN 
     
    125165         cdn_wave(:,:) = sf_cd(1)%fnow(:,:,1) 
    126166      ENDIF 
     167! 
     168      IF ( ln_tauoc ) THEN 
     169         CALL fld_read( kt, nn_fsbc, sf_tauoc )      !* read wave norm stress from external forcing 
     170         tauoc_wave(:,:) = sf_tauoc(1)%fnow(:,:,1) 
     171      ENDIF 
     172! 
    127173      IF ( ln_sdw )  THEN 
    128           CALL fld_read( kt, nn_fsbc, sf_sd )      !* read drag coefficient from external forcing 
    129  
    130          ! Interpolate wavenumber, stokes drift into the grid_V and grid_V 
     174          CALL fld_read( kt, nn_fsbc, sf_sd )      !* read wave parameters from external forcing 
     175          swh(:,:)    = sf_sd(jp_swh)%fnow(:,:,1) 
     176          wmp(:,:)    = sf_sd(jp_wmp)%fnow(:,:,1) 
     177          usd2dt(:,:) = sf_sd(jp_usd)%fnow(:,:,1)  
     178          vsd2dt(:,:) = sf_sd(jp_vsd)%fnow(:,:,1) 
    131179         !------------------------------------------------- 
    132  
     180         ! Interpolate stokes drift into the grid_V and grid_V 
     181         !------------------------------------------------- 
    133182         DO jj = 1, jpjm1 
    134183            DO ji = 1, jpim1 
    135                uwavenum(ji,jj)=0.5 * ( 2. - umask(ji,jj,1) ) * ( sf_sd(3)%fnow(ji,jj,1) * tmask(ji,jj,1) & 
    136                &                                + sf_sd(3)%fnow(ji+1,jj,1) * tmask(ji+1,jj,1) ) 
    137  
    138                vwavenum(ji,jj)=0.5 * ( 2. - vmask(ji,jj,1) ) * ( sf_sd(3)%fnow(ji,jj,1) * tmask(ji,jj,1) & 
    139                &                                + sf_sd(3)%fnow(ji,jj+1,1) * tmask(ji,jj+1,1) ) 
    140  
    141                usd2d(ji,jj) = 0.5 * ( 2. - umask(ji,jj,1) ) * ( sf_sd(1)%fnow(ji,jj,1) * tmask(ji,jj,1) & 
    142                &                                + sf_sd(1)%fnow(ji+1,jj,1) * tmask(ji+1,jj,1) ) 
    143  
    144                vsd2d(ji,jj) = 0.5 * ( 2. - vmask(ji,jj,1) ) * ( sf_sd(2)%fnow(ji,jj,1) * tmask(ji,jj,1) & 
    145                &                                + sf_sd(2)%fnow(ji,jj+1,1) * tmask(ji,jj+1,1) ) 
     184               usd2d(ji,jj) = 0.5 * ( 2. - umask(ji,jj,1) ) * ( usd2dt(ji,jj) * tmask(ji,jj,1) & 
     185               &                                             +  usd2dt(ji+1,jj) * tmask(ji+1,jj,1) ) 
     186 
     187               vsd2d(ji,jj) = 0.5 * ( 2. - vmask(ji,jj,1) ) * ( vsd2dt(ji,jj) * tmask(ji,jj,1) & 
     188               &                                              + vsd2dt(ji,jj+1) * tmask(ji,jj+1,1) ) 
    146189            END DO 
    147190         END DO 
    148  
    149           !Computation of the 3d Stokes Drift 
     191         ! 
     192         CALL lbc_lnk( usd2d(:,:), 'U', -1. ) 
     193         CALL lbc_lnk( vsd2d(:,:), 'V', -1. ) 
     194 
     195          !Computation of the 3d Stokes Drift according to Breivik et al.,2014 
     196          !(DOI: 10.1175/JPO-D-14-0020.1) 
    150197          DO jk = 1, jpk 
     198             DO jj = 1, jpj 
     199                DO ji = 1, jpi 
     200 
     201               ! On T grid 
     202               ! Stokes transport speed estimated from Hs and Tmean 
     203               ztransp = 2.0_wp*rpi*swh(ji,jj)**2.0_wp/(16.0_wp*MAX(wmp(ji,jj),0.0000001_wp)) 
     204 
     205               ! Stokes surface speed 
     206               zsp0 = SQRT( sf_sd(jp_usd)%fnow(ji,jj,1)**2 +  sf_sd(jp_vsd)%fnow(ji,jj,1)**2) 
     207 
     208               ! Wavenumber scale 
     209               zk = ABS(zsp0)/MAX(ABS(5.97_wp*ztransp),0.0000001_wp) 
     210 
     211               ! Depth attenuation 
     212               zfac(ji,jj) = EXP(-2.0_wp*zk*fsdept(ji,jj,jk))/(1.0_wp+8.0_wp*zk*fsdept(ji,jj,jk)) 
     213 
     214                END DO 
     215             END DO 
     216! 
    151217             DO jj = 1, jpj-1 
    152218                DO ji = 1, jpi-1 
    153                    usd3d(ji,jj,jk) = usd2d(ji,jj)*exp(2.0*uwavenum(ji,jj)*(-MIN( gdept_0(ji,jj,jk) , gdept_0(ji+1,jj  ,jk)))) 
    154                    vsd3d(ji,jj,jk) = vsd2d(ji,jj)*exp(2.0*vwavenum(ji,jj)*(-MIN( gdept_0(ji,jj,jk) , gdept_0(ji  ,jj+1,jk)))) 
     219                 ! Into the U and V Grid  
     220                 zus = 0.5 * ( 2. - umask(ji,jj,1) ) * ( zfac(ji,jj) * tmask(ji,jj,1) & 
     221                 &                                + zfac(ji+1,jj) * tmask(ji+1,jj,1) ) 
     222 
     223                 zvs = 0.5 * ( 2. - vmask(ji,jj,1) ) * ( zfac(ji,jj) * tmask(ji,jj,1) & 
     224                 &                                + zfac(ji,jj+1) * tmask(ji,jj+1,1) ) 
     225 
     226                 usd3d(ji,jj,jk) = usd2d(ji,jj)*zus 
     227                 vsd3d(ji,jj,jk) = vsd2d(ji,jj)*zvs 
    155228                END DO 
    156229             END DO 
    157              usd3d(jpi,:,jk) = usd2d(jpi,:)*exp( 2.0*uwavenum(jpi,:)*(-gdept_0(jpi,:,jk)) ) 
    158              vsd3d(:,jpj,jk) = vsd2d(:,jpj)*exp( 2.0*vwavenum(:,jpj)*(-gdept_0(:,jpj,jk)) ) 
    159230          END DO 
     231         ! 
     232         CALL lbc_lnk( usd3d(:,:,:), 'U', -1. ) 
     233         CALL lbc_lnk( vsd3d(:,:,:), 'V', -1. ) 
    160234 
    161235          CALL wrk_alloc( jpi,jpj,jpk,udummy,vdummy,hdivdummy,rotdummy) 
    162            
    163           udummy(:,:,:)=un(:,:,:) 
    164           vdummy(:,:,:)=vn(:,:,:) 
    165           hdivdummy(:,:,:)=hdivn(:,:,:) 
    166           rotdummy(:,:,:)=rotn(:,:,:) 
    167           un(:,:,:)=usd3d(:,:,:) 
    168           vn(:,:,:)=vsd3d(:,:,:) 
     236      !-------------------------------------------------------------------           
     237      ! Store horiz. velocity divergence and Rot in TMP array  
     238      ! ------------------------------------------------------------------- 
     239 
     240          udummy(:,:,:)     = un(:,:,:) 
     241          vdummy(:,:,:)     = vn(:,:,:) 
     242          hdivdummy(:,:,:)  = hdivn(:,:,:) 
     243          rotdummy(:,:,:)   = rotn(:,:,:) 
     244          un(:,:,:)         = usd3d(:,:,:) 
     245          vn(:,:,:)         = vsd3d(:,:,:) 
     246 
     247      ! Compute divergence using 3d stokes drift to calculate vertical SD 
     248      ! velocity 
     249      ! ------------------------------------------------------------------- 
     250 
    169251          CALL div_cur(kt) 
     252 
     253      ! ------------------------------------------------------------------- 
    170254      !                                           !------------------------------! 
    171255      !                                           !     Now Vertical Velocity    ! 
     
    177261             ! - ML - need 3 lines here because replacement of fse3t by its expression yields too long lines otherwise 
    178262             wsd3d(:,:,jk) = wsd3d(:,:,jk+1) -   fse3t_n(:,:,jk) * hdivn(:,:,jk)        & 
    179                 &                      - ( fse3t_a(:,:,jk) - fse3t_b(:,:,jk) )    & 
    180                 &                         * tmask(:,:,jk) * z1_2dt 
     263                &                            - ( fse3t_a(:,:,jk) - fse3t_b(:,:,jk) )    & 
     264                &                                * tmask(:,:,jk) * z1_2dt 
    181265#if defined key_bdy 
    182266             wsd3d(:,:,jk) = wsd3d(:,:,jk) * bdytmask(:,:) 
    183267#endif 
    184268          END DO 
    185           hdivn(:,:,:)=hdivdummy(:,:,:) 
    186           rotn(:,:,:)=rotdummy(:,:,:) 
    187           vn(:,:,:)=vdummy(:,:,:) 
    188           un(:,:,:)=udummy(:,:,:) 
     269      ! Back to state variables   
     270      ! ------------------------------------------------------------------- 
     271          hdivn(:,:,:)  = hdivdummy(:,:,:) 
     272          rotn(:,:,:)   = rotdummy(:,:,:) 
     273          vn(:,:,:)     = vdummy(:,:,:) 
     274          un(:,:,:)     = udummy(:,:,:) 
     275 
    189276          CALL wrk_dealloc( jpi,jpj,jpk,udummy,vdummy,hdivdummy,rotdummy) 
    190       ENDIF 
     277! 
     278        IF ( ln_zdfqiao )  THEN 
     279          wnum(:,:) = sf_wn(1)%fnow(:,:,1) 
     280         ! Calculate the module of the stokes drift on T grid 
     281         !------------------------------------------------- 
     282         DO jj = 1, jpj 
     283            DO ji = 1, jpi 
     284                tsd2d(ji,jj) = ((sf_sd(jp_usd)%fnow(ji,jj,1) * tmask(ji,jj,1))**2.0  +     & 
     285                &               (sf_sd(jp_vsd)%fnow(ji,jj,1) * tmask(ji,jj,1))**2.0)**0.5 
     286            END DO 
     287         END DO 
     288        ENDIF 
     289      ENDIF 
     290 
     291 
    191292   END SUBROUTINE sbc_wave 
    192293       
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90

    r4624 r5899  
    77   !!            3.3  !  2010-09  (C. Ethe, G. Madec)  merge TRC-TRA + switch from velocity to transport 
    88   !!            4.0  !  2011-06  (G. Madec)  Addition of Mixed Layer Eddy parameterisation 
     9   !!            3.6  !  2015-06  (E. Clementi) Addition of Stokes drift in case of wave coupling 
    910   !!---------------------------------------------------------------------- 
    1011 
     
    3233   USE wrk_nemo        ! Memory Allocation 
    3334   USE timing          ! Timing 
    34  
     35   USE sbcwave         ! wave module 
     36   USE sbc_oce         ! surface boundary condition: ocean 
    3537 
    3638   IMPLICIT NONE 
     
    8082      ! 
    8183      CALL wrk_alloc( jpi, jpj, jpk, zun, zvn, zwn ) 
     84      ! 
     85      zun(:,:,:) = 0.0 
     86      zvn(:,:,:) = 0.0 
     87      zwn(:,:,:) = 0.0 
    8288      !                                          ! set time step 
    8389      IF( neuler == 0 .AND. kt == nit000 ) THEN     ! at nit000 
     
    8995      IF( nn_cla == 1 .AND. cp_cfg == 'orca' .AND. jp_cfg == 2 )   CALL cla_traadv( kt )       !==  Cross Land Advection  ==! (hor. advection) 
    9096      ! 
    91       !                                               !==  effective transport  ==! 
    92       DO jk = 1, jpkm1 
    93          zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)                  ! eulerian transport only 
    94          zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 
    95          zwn(:,:,jk) = e1t(:,:) * e2t(:,:)      * wn(:,:,jk) 
    96       END DO 
     97      IF (ln_wave .AND. ln_sdw) THEN 
     98         DO jk = 1, jpkm1 
     99            zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) *      & 
     100                        &  ( un(:,:,jk) + usd3d(:,:,jk) )                  !eulerian transport + Stokes Drift 
     101            zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) *      & 
     102                        &  ( vn(:,:,jk) + vsd3d(:,:,jk) )  
     103            zwn(:,:,jk) = e1t(:,:) * e2t(:,:)      *      & 
     104                        &  ( wn(:,:,jk) + wsd3d(:,:,jk) ) 
     105         END DO 
     106      ELSE 
     107         DO jk = 1, jpkm1 
     108            zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)                  ! eulerian transport only 
     109            zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 
     110            zwn(:,:,jk) = e1t(:,:) * e2t(:,:)      * wn(:,:,jk) 
     111         END DO 
     112      ENDIF 
    97113      ! 
    98114      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_oce.F90

    r4147 r5899  
    3535   INTEGER , PUBLIC ::   nn_npc      !: non penetrative convective scheme call  frequency 
    3636   INTEGER , PUBLIC ::   nn_npcp     !: non penetrative convective scheme print frequency 
     37   LOGICAL , PUBLIC ::   ln_zdfqiao  !: Enhanced wave vertical mixing Qiao(2010) formulation flag 
    3738 
    3839 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90

    r4677 r5899  
    5353      INTEGER ::   ios 
    5454      !! 
    55       NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp,   & 
    56          &              ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp 
     55      NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp,  & 
     56         &        ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp,       & 
     57         &        ln_zdfqiao 
    5758      !!---------------------------------------------------------------------- 
    5859 
     
    8384         WRITE(numout,*) '      npc call  frequency                 nn_npc    = ', nn_npc 
    8485         WRITE(numout,*) '      npc print frequency                 nn_npcp   = ', nn_npcp 
     86         WRITE(numout,*) '      Qiao formulation flag               ln_zdfqiao=', ln_zdfqiao 
    8587      ENDIF 
    8688 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/step.F90

    r4760 r5899  
    2525   !!            3.4  !  2011-04  (G. Madec, C. Ethe) Merge of dtatem and dtasal 
    2626   !!                 !  2012-07  (J. Simeon, G. Madec. C. Ethe) Online coarsening of outputs 
     27   !!            3.6  !  2014-10  (E. Clementi, P. Oddo) Add Qiao vertical mixing in case of waves 
    2728   !!---------------------------------------------------------------------- 
    2829 
     
    7071      !!              -8- Outputs and diagnostics 
    7172      !!---------------------------------------------------------------------- 
    72       INTEGER ::   jk       ! dummy loop indice 
     73      INTEGER ::   ji,jj,jk       ! dummy loop indice 
    7374      INTEGER ::   indic    ! error indicator if < 0 
    7475      INTEGER ::   kcall    ! optional integer argument (dom_vvl_sf_nxt) 
     
    116117      IF( lk_zdfgls  )   CALL zdf_gls( kstp )            ! GLS closure scheme for Kz 
    117118      IF( lk_zdfkpp  )   CALL zdf_kpp( kstp )            ! KPP closure scheme for Kz 
     119      IF( ln_zdfqiao )   THEN 
     120        CALL zdf_qiao(kstp )                             ! Qiao vertical mixing  
     121         DO jk = 1, jpkm1 
     122          DO jj = 1, jpj 
     123            DO ji = 1, jpi 
     124               avmu(ji,jj,jk) = (avmu(ji,jj,jk) + QBvu(ji,jj,jk)) * umask(ji,jj,jk) 
     125               avmv(ji,jj,jk) = (avmv(ji,jj,jk) + QBvv(ji,jj,jk)) * vmask(ji,jj,jk) 
     126               avt( ji,jj,jk) = (avt( ji,jj,jk) + QBv(ji,jj,jk))  * tmask(ji,jj,jk) 
     127            END DO 
     128          END DO 
     129         END DO 
     130      ENDIF 
     131 
    118132      IF( lk_zdfcst  ) THEN                              ! Constant Kz (reset avt, avm[uv] to the background value) 
    119133         avt (:,:,:) = rn_avt0 * tmask(:,:,:) 
     
    121135         avmv(:,:,:) = rn_avm0 * vmask(:,:,:) 
    122136      ENDIF 
     137! 
    123138      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths 
    124139         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO 
     
    184199                                  CALL dyn_ldf      ( kstp )   ! lateral mixing 
    185200          IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! add Neptune velocities (simplified) 
     201          IF( ln_stcor    )       CALL dyn_stcor    ( kstp )   ! Stokes-Coriolis forcing 
     202 
    186203#if defined key_agrif 
    187204          IF(.NOT. Agrif_Root())  CALL Agrif_Sponge_dyn        ! momentum sponge 
     
    286303                               CALL dyn_ldf( kstp )         ! lateral mixing 
    287304        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! add Neptune velocities (simplified) 
     305        IF( ln_stcor    )       CALL dyn_stcor    ( kstp )   ! Stokes-Coriolis forcing (ln_stcor set in SBC/sbc_oce.F90) 
     306 
    288307#if defined key_agrif 
    289308        IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_dyn        ! momemtum sponge 
  • branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/step_oce.F90

    r4328 r5899  
    2727   USE cpl_oasis3, ONLY : lk_cpl 
    2828   USE sbctide          ! Tide initialisation 
     29   USE sbcwave          ! Wave intialisation 
    2930 
    3031   USE traqsr           ! solar radiation penetration      (tra_qsr routine) 
     
    5152   USE dynspg           ! surface pressure gradient        (dyn_spg routine) 
    5253   USE dynnept          ! simp. form of Neptune effect(dyn_nept_cor routine) 
     54   USE dynstcor         ! simp. form of Stokes-Coriolis 
    5355 
    5456   USE dynnxt           ! time-stepping                    (dyn_nxt routine) 
     
    8082   USE zdfric           ! Richardson vertical mixing       (zdf_ric routine) 
    8183   USE zdfmxl           ! Mixed-layer depth                (zdf_mxl routine) 
     84   USE zdfqiao          !Qiao module wave induced mixing   (zdf_qiao routine) 
    8285 
    8386   USE zpshde           ! partial step: hor. derivative     (zps_hde routine) 
Note: See TracChangeset for help on using the changeset viewer.