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 12991 for NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves/src/OCE/SBC/sbccpl.F90 – NEMO

Ignore:
Timestamp:
2020-05-29T12:58:31+02:00 (4 years ago)
Author:
emanuelaclementi
Message:

Included wave-current processes following Couvelard et al 2019 and Gurvan code -ticket #2155

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves/src/OCE/SBC/sbccpl.F90

    r12620 r12991  
    88   !!            3.1  ! 2009_02  (G. Madec, S. Masson, E. Maisonave, A. Caubel) generic coupled interface 
    99   !!            3.4  ! 2011_11  (C. Harris) more flexibility + multi-category fields 
     10   !!            4.2  ! 2020-05  (G. Madec, E. Clementi)  wave coupling updates 
    1011   !!---------------------------------------------------------------------- 
    1112 
     
    102103   INTEGER, PARAMETER ::   jpr_fraqsr = 42   ! fraction of solar net radiation absorbed in the first ocean level 
    103104   INTEGER, PARAMETER ::   jpr_mslp   = 43   ! mean sea level pressure  
    104    INTEGER, PARAMETER ::   jpr_hsig   = 44   ! Hsig  
    105    INTEGER, PARAMETER ::   jpr_phioc  = 45   ! Wave=>ocean energy flux  
    106    INTEGER, PARAMETER ::   jpr_sdrftx = 46   ! Stokes drift on grid 1  
    107    INTEGER, PARAMETER ::   jpr_sdrfty = 47   ! Stokes drift on grid 2  
     105   !**  surface wave coupling  ** 
     106   INTEGER, PARAMETER ::   jpr_hsig   = 44   ! Hsig 
     107   INTEGER, PARAMETER ::   jpr_phioc  = 45   ! Wave=>ocean energy flux 
     108   INTEGER, PARAMETER ::   jpr_sdrftx = 46   ! Stokes drift on grid 1 
     109   INTEGER, PARAMETER ::   jpr_sdrfty = 47   ! Stokes drift on grid 2 
    108110   INTEGER, PARAMETER ::   jpr_wper   = 48   ! Mean wave period 
    109111   INTEGER, PARAMETER ::   jpr_wnum   = 49   ! Mean wavenumber 
    110    INTEGER, PARAMETER ::   jpr_tauwoc = 50   ! Stress fraction adsorbed by waves 
     112   INTEGER, PARAMETER ::   jpr_wstrf = 50   ! Stress fraction adsorbed by waves 
    111113   INTEGER, PARAMETER ::   jpr_wdrag  = 51   ! Neutral surface drag coefficient 
    112    INTEGER, PARAMETER ::   jpr_isf    = 52 
    113    INTEGER, PARAMETER ::   jpr_icb    = 53 
    114    INTEGER, PARAMETER ::   jpr_wfreq  = 54   ! Wave peak frequency 
    115    INTEGER, PARAMETER ::   jpr_tauwx  = 55   ! x component of the ocean stress from waves 
    116    INTEGER, PARAMETER ::   jpr_tauwy  = 56   ! y component of the ocean stress from waves 
    117    INTEGER, PARAMETER ::   jpr_ts_ice = 57   ! Sea ice surface temp 
    118  
    119    INTEGER, PARAMETER ::   jprcv      = 57   ! total number of fields received   
     114   INTEGER, PARAMETER ::   jpr_charn  = 52   ! Chranock coefficient 
     115   INTEGER, PARAMETER ::   jpr_twox   = 53   ! wave to ocean momentum flux 
     116   INTEGER, PARAMETER ::   jpr_twoy   = 54   ! wave to ocean momentum flux 
     117   INTEGER, PARAMETER ::   jpr_tawx   = 55   ! net wave-supported stress 
     118   INTEGER, PARAMETER ::   jpr_tawy   = 56   ! net wave-supported stress 
     119   INTEGER, PARAMETER ::   jpr_bhd    = 57   ! Bernoulli head. waves' induced surface pressure 
     120   INTEGER, PARAMETER ::   jpr_tusd   = 58   ! zonal stokes transport 
     121   INTEGER, PARAMETER ::   jpr_tvsd   = 59   ! meridional stokes tranmport 
     122   INTEGER, PARAMETER ::   jpr_isf    = 60 
     123   INTEGER, PARAMETER ::   jpr_icb    = 61 
     124   INTEGER, PARAMETER ::   jpr_ts_ice = 62   ! Sea ice surface temp 
     125 
     126   INTEGER, PARAMETER ::   jprcv      = 62   ! total number of fields received   
    120127 
    121128   INTEGER, PARAMETER ::   jps_fice   =  1   ! ice fraction sent to the atmosphere 
     
    172179      &             sn_snd_thick1, sn_snd_cond, sn_snd_mpnd , sn_snd_sstfrz, sn_snd_ttilyr 
    173180   !                                   ! Received from the atmosphere 
    174    TYPE(FLD_C) ::   sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_tauw, sn_rcv_dqnsdt, sn_rcv_qsr,  & 
     181   TYPE(FLD_C) ::   sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr,  & 
    175182      &             sn_rcv_qns , sn_rcv_emp   , sn_rcv_rnf, sn_rcv_ts_ice 
    176183   TYPE(FLD_C) ::   sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf 
    177    ! Send to waves  
     184   !                                   ! Send to waves  
    178185   TYPE(FLD_C) ::   sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev  
    179    ! Received from waves  
    180    TYPE(FLD_C) ::   sn_rcv_hsig, sn_rcv_phioc, sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper, sn_rcv_wnum, sn_rcv_tauwoc, & 
    181                     sn_rcv_wdrag, sn_rcv_wfreq 
     186   !                                   ! Received from waves  
     187   TYPE(FLD_C) ::   sn_rcv_hsig, sn_rcv_phioc, sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper, sn_rcv_wnum, & 
     188      &             sn_rcv_wstrf, sn_rcv_wdrag, sn_rcv_charn, sn_rcv_taw, sn_rcv_bhd, sn_rcv_tusd, sn_rcv_tvsd 
    182189   !                                   ! Other namelist parameters 
    183190   INTEGER     ::   nn_cplmodel           ! Maximum number of models to/from which NEMO is potentialy sending/receiving data 
     
    248255      REAL(wp), DIMENSION(jpi,jpj) ::   zacs, zaos 
    249256      !! 
    250       NAMELIST/namsbc_cpl/  sn_snd_temp  , sn_snd_alb   , sn_snd_thick, sn_snd_crt   , sn_snd_co2  ,   &  
    251          &                  sn_snd_ttilyr, sn_snd_cond  , sn_snd_mpnd , sn_snd_sstfrz, sn_snd_thick1,  &  
    252          &                  sn_snd_ifrac , sn_snd_crtw  , sn_snd_wlev , sn_rcv_hsig  , sn_rcv_phioc,   &  
    253          &                  sn_rcv_w10m  , sn_rcv_taumod, sn_rcv_tau  , sn_rcv_dqnsdt, sn_rcv_qsr  ,   &  
    254          &                  sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum  , sn_rcv_tauwoc,  & 
     257      NAMELIST/namsbc_cpl/  sn_snd_temp  , sn_snd_alb   , sn_snd_thick, sn_snd_crt   , sn_snd_co2  ,   & 
     258         &                  sn_snd_ttilyr, sn_snd_cond  , sn_snd_mpnd , sn_snd_sstfrz, sn_snd_thick1,  & 
     259         &                  sn_snd_ifrac , sn_snd_crtw  , sn_snd_wlev , sn_rcv_hsig  , sn_rcv_phioc,   & 
     260         &                  sn_rcv_w10m  , sn_rcv_taumod, sn_rcv_tau  , sn_rcv_dqnsdt, sn_rcv_qsr  ,   & 
     261         &                  sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum  , sn_rcv_wstrf,   & 
     262         &                  sn_rcv_charn , sn_rcv_taw   , sn_rcv_bhd  , sn_rcv_tusd  , sn_rcv_tvsd,    & 
    255263         &                  sn_rcv_wdrag , sn_rcv_qns   , sn_rcv_emp  , sn_rcv_rnf   , sn_rcv_cal  ,   & 
    256264         &                  sn_rcv_iceflx, sn_rcv_co2   , nn_cplmodel , ln_usecplmask, sn_rcv_mslp ,   & 
    257          &                  sn_rcv_icb   , sn_rcv_isf   , sn_rcv_wfreq , sn_rcv_tauw, nn_cats_cpl  ,   & 
    258          &                  sn_rcv_ts_ice 
     265         &                  sn_rcv_icb   , sn_rcv_isf   , sn_rcv_ts_ice, nn_cats_cpl 
     266 
    259267 
    260268      !!--------------------------------------------------------------------- 
     
    294302         WRITE(numout,*)'      sea ice heat fluxes             = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 
    295303         WRITE(numout,*)'      atm co2                         = ', TRIM(sn_rcv_co2%cldes   ), ' (', TRIM(sn_rcv_co2%clcat   ), ')' 
     304         WRITE(numout,*)'      Sea ice surface skin temperature= ', TRIM(sn_rcv_ts_ice%cldes), ' (', TRIM(sn_rcv_ts_ice%clcat), ')' 
     305         WRITE(numout,*)'      surface waves:' 
    296306         WRITE(numout,*)'      significant wave heigth         = ', TRIM(sn_rcv_hsig%cldes  ), ' (', TRIM(sn_rcv_hsig%clcat  ), ')'  
    297307         WRITE(numout,*)'      wave to oce energy flux         = ', TRIM(sn_rcv_phioc%cldes ), ' (', TRIM(sn_rcv_phioc%clcat ), ')'  
     
    300310         WRITE(numout,*)'      Mean wave period                = ', TRIM(sn_rcv_wper%cldes  ), ' (', TRIM(sn_rcv_wper%clcat  ), ')'  
    301311         WRITE(numout,*)'      Mean wave number                = ', TRIM(sn_rcv_wnum%cldes  ), ' (', TRIM(sn_rcv_wnum%clcat  ), ')'  
    302          WRITE(numout,*)'      Wave peak frequency             = ', TRIM(sn_rcv_wfreq%cldes ), ' (', TRIM(sn_rcv_wfreq%clcat ), ')' 
    303          WRITE(numout,*)'      Stress frac adsorbed by waves   = ', TRIM(sn_rcv_tauwoc%cldes), ' (', TRIM(sn_rcv_tauwoc%clcat ), ')'  
    304          WRITE(numout,*)'      Stress components by waves      = ', TRIM(sn_rcv_tauw%cldes  ), ' (', TRIM(sn_rcv_tauw%clcat  ), ')' 
     312         WRITE(numout,*)'      Stress frac adsorbed by waves   = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')' 
    305313         WRITE(numout,*)'      Neutral surf drag coefficient   = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')'  
    306          WRITE(numout,*)'      Sea ice surface skin temperature= ', TRIM(sn_rcv_ts_ice%cldes), ' (', TRIM(sn_rcv_ts_ice%clcat), ')'  
     314         WRITE(numout,*)'      Charnock coefficient            = ', TRIM(sn_rcv_charn%cldes ), ' (', TRIM(sn_rcv_charn%clcat ), ')' 
    307315         WRITE(numout,*)'  sent fields (multiple ice categories)' 
    308316         WRITE(numout,*)'      surface temperature             = ', TRIM(sn_snd_temp%cldes  ), ' (', TRIM(sn_snd_temp%clcat  ), ')' 
     
    605613         cpl_wper = .TRUE. 
    606614      ENDIF 
    607       srcv(jpr_wfreq)%clname = 'O_WFreq'     ! wave peak frequency  
    608       IF( TRIM(sn_rcv_wfreq%cldes ) == 'coupled' )  THEN 
    609          srcv(jpr_wfreq)%laction = .TRUE. 
    610          cpl_wfreq = .TRUE. 
    611       ENDIF 
    612615      srcv(jpr_wnum)%clname = 'O_WNum'       ! mean wave number 
    613616      IF( TRIM(sn_rcv_wnum%cldes ) == 'coupled' )  THEN 
     
    615618         cpl_wnum = .TRUE. 
    616619      ENDIF 
    617       srcv(jpr_tauwoc)%clname = 'O_TauOce'   ! stress fraction adsorbed by the wave 
    618       IF( TRIM(sn_rcv_tauwoc%cldes ) == 'coupled' )  THEN 
    619          srcv(jpr_tauwoc)%laction = .TRUE. 
    620          cpl_tauwoc = .TRUE. 
    621       ENDIF 
    622       srcv(jpr_tauwx)%clname = 'O_Tauwx'      ! ocean stress from wave in the x direction 
    623       srcv(jpr_tauwy)%clname = 'O_Tauwy'      ! ocean stress from wave in the y direction 
    624       IF( TRIM(sn_rcv_tauw%cldes ) == 'coupled' )  THEN 
    625          srcv(jpr_tauwx)%laction = .TRUE. 
    626          srcv(jpr_tauwy)%laction = .TRUE. 
    627          cpl_tauw = .TRUE. 
     620      srcv(jpr_wstrf)%clname = 'O_WStrf'     ! stress fraction adsorbed by the wave 
     621      IF( TRIM(sn_rcv_wstrf%cldes ) == 'coupled' )  THEN 
     622         srcv(jpr_wstrf)%laction = .TRUE. 
     623         cpl_wstrf = .TRUE. 
    628624      ENDIF 
    629625      srcv(jpr_wdrag)%clname = 'O_WDrag'     ! neutral surface drag coefficient 
     
    632628         cpl_wdrag = .TRUE. 
    633629      ENDIF 
    634       IF( srcv(jpr_tauwoc)%laction .AND. srcv(jpr_tauwx)%laction .AND. srcv(jpr_tauwy)%laction ) & 
    635             CALL ctl_stop( 'More than one method for modifying the ocean stress has been selected ', & 
    636                                      '(sn_rcv_tauwoc=coupled and sn_rcv_tauw=coupled)' ) 
     630      srcv(jpr_charn)%clname = 'O_Charn'     ! neutral surface drag coefficient 
     631      IF( TRIM(sn_rcv_charn%cldes ) == 'coupled' )  THEN 
     632         srcv(jpr_charn)%laction = .TRUE. 
     633         cpl_charn = .TRUE. 
     634      ENDIF 
     635      srcv(jpr_bhd)%clname = 'O_Bhd'     ! neutral surface drag coefficient 
     636      IF( TRIM(sn_rcv_bhd%cldes ) == 'coupled' )  THEN 
     637         srcv(jpr_bhd)%laction = .TRUE. 
     638         cpl_bhd = .TRUE. 
     639      ENDIF 
     640      srcv(jpr_tusd)%clname = 'O_Tusd'     ! neutral surface drag coefficient 
     641      IF( TRIM(sn_rcv_tusd%cldes ) == 'coupled' )  THEN 
     642         srcv(jpr_tusd)%laction = .TRUE. 
     643         cpl_tusd = .TRUE. 
     644      ENDIF 
     645      srcv(jpr_tvsd)%clname = 'O_Tvsd'     ! neutral surface drag coefficient 
     646      IF( TRIM(sn_rcv_tvsd%cldes ) == 'coupled' )  THEN 
     647         srcv(jpr_tvsd)%laction = .TRUE. 
     648         cpl_tvsd = .TRUE. 
     649      ENDIF 
     650 
     651      srcv(jpr_twox)%clname = 'O_Twox'     ! wave to ocean momentum flux in the u direction 
     652      srcv(jpr_twoy)%clname = 'O_Twoy'     ! wave to ocean momentum flux in the v direction 
     653      srcv(jpr_tawx)%clname = 'O_Tawx'     ! Net wave-supported stress in the u direction 
     654      srcv(jpr_tawy)%clname = 'O_Tawy'     ! Net wave-supported stress in the v direction 
     655      IF( TRIM(sn_rcv_taw%cldes ) == 'coupled' )  THEN 
     656         srcv(jpr_twox)%laction = .TRUE. 
     657         srcv(jpr_twoy)%laction = .TRUE. 
     658         srcv(jpr_tawx)%laction = .TRUE. 
     659         srcv(jpr_tawy)%laction = .TRUE. 
     660         cpl_taw = .TRUE. 
     661      ENDIF 
    637662      ! 
    638663      !                                                      ! ------------------------------- ! 
     
    10431068      ENDIF 
    10441069      xcplmask(:,:,0) = 1. - SUM( xcplmask(:,:,1:nn_cplmodel), dim = 3 ) 
     1070      ! 
    10451071      ! 
    10461072   END SUBROUTINE sbc_cpl_init 
     
    11181144         IF( ncpl_qsr_freq /= 0) ncpl_qsr_freq = 86400 / ncpl_qsr_freq ! used by top 
    11191145          
     1146         IF ( ln_wave .AND. nn_components == 0 ) THEN 
     1147            ncpl_qsr_freq = 1; 
     1148            WRITE(numout,*) 'ncpl_qsr_freq is set to 1 when coupling NEMO with wave (without SAS) ' 
     1149         ENDIF 
    11201150      ENDIF 
    11211151      ! 
     
    12801310         IF( srcv(jpr_hsig)%laction ) hsw(:,:) = frcv(jpr_hsig)%z3(:,:,1) 
    12811311      !  
    1282       !                                                      ! ========================= !   
    1283       !                                                      !    Wave peak frequency    !  
    1284       !                                                      ! ========================= !   
    1285          IF( srcv(jpr_wfreq)%laction ) wfreq(:,:) = frcv(jpr_wfreq)%z3(:,:,1) 
    1286       ! 
    12871312      !                                                      ! ========================= !  
    12881313      !                                                      !    Vertical mixing Qiao   ! 
     
    12911316 
    12921317         ! Calculate the 3D Stokes drift both in coupled and not fully uncoupled mode 
    1293          IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. srcv(jpr_wper)%laction & 
    1294                                       .OR. srcv(jpr_hsig)%laction   .OR. srcv(jpr_wfreq)%laction) THEN 
     1318         IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. & 
     1319             srcv(jpr_wper)%laction .OR. srcv(jpr_hsig)%laction )  THEN 
    12951320            CALL sbc_stokes( Kmm ) 
    12961321         ENDIF 
     
    12991324      !                                                      ! Stress adsorbed by waves  ! 
    13001325      !                                                      ! ========================= !  
    1301       IF( srcv(jpr_tauwoc)%laction .AND. ln_tauwoc ) tauoc_wave(:,:) = frcv(jpr_tauwoc)%z3(:,:,1) 
    1302  
    1303       !                                                      ! ========================= !   
    1304       !                                                      ! Stress component by waves !  
    1305       !                                                      ! ========================= !   
    1306       IF( srcv(jpr_tauwx)%laction .AND. srcv(jpr_tauwy)%laction .AND. ln_tauw ) THEN 
    1307          tauw_x(:,:) = frcv(jpr_tauwx)%z3(:,:,1) 
    1308          tauw_y(:,:) = frcv(jpr_tauwy)%z3(:,:,1) 
    1309       ENDIF 
    1310  
     1326      IF( srcv(jpr_wstrf)%laction .AND. ln_tauoc )  tauoc_wave(:,:) = frcv(jpr_wstrf)%z3(:,:,1) 
     1327      ! 
    13111328      !                                                      ! ========================= !  
    13121329      !                                                      !   Wave drag coefficient   ! 
    13131330      !                                                      ! ========================= !  
    13141331      IF( srcv(jpr_wdrag)%laction .AND. ln_cdgw )   cdn_wave(:,:) = frcv(jpr_wdrag)%z3(:,:,1) 
    1315  
     1332      ! 
     1333      !                                                      ! ========================= ! 
     1334      !                                                      !   Wave drag coefficient   ! 
     1335      !                                                      ! ========================= ! 
     1336      IF( srcv(jpr_charn)%laction .AND. ln_charn )  charn(:,:) = frcv(jpr_charn)%z3(:,:,1) 
     1337      ! 
     1338      ! 
     1339      IF( srcv(jpr_tawx)%laction .AND. ln_taw )     tawx(:,:) = frcv(jpr_tawx)%z3(:,:,1) 
     1340      IF( srcv(jpr_tawy)%laction .AND. ln_taw )     tawy(:,:) = frcv(jpr_tawy)%z3(:,:,1) 
     1341      IF( srcv(jpr_twox)%laction .AND. ln_taw )     twox(:,:) = frcv(jpr_twox)%z3(:,:,1) 
     1342      IF( srcv(jpr_twoy)%laction .AND. ln_taw )     twoy(:,:) = frcv(jpr_twoy)%z3(:,:,1) 
     1343      !                                                       
     1344      !                                                      ! ========================= ! 
     1345      !                                                      !    wave TKE flux at sfc   ! 
     1346      !                                                      ! ========================= ! 
     1347      IF( srcv(jpr_phioc)%laction .AND. ln_phioc )     phioc(:,:) = frcv(jpr_phioc)%z3(:,:,1) 
     1348      ! 
     1349      !                                                      ! ========================= ! 
     1350      !                                                      !      Bernoulli head       ! 
     1351      !                                                      ! ========================= ! 
     1352      IF( srcv(jpr_bhd)%laction .AND. ln_bern_srfc )   bhd_wave(:,:) = frcv(jpr_bhd)%z3(:,:,1) 
     1353      ! 
     1354      !                                                      ! ========================= ! 
     1355      !                                                      !   Stokes transport u dir  ! 
     1356      !                                                      ! ========================= ! 
     1357      IF( srcv(jpr_tusd)%laction .AND. ln_breivikFV_2016 )    tusd(:,:) = frcv(jpr_tusd)%z3(:,:,1) 
     1358      ! 
     1359      !                                                      ! ========================= ! 
     1360      !                                                      !   Stokes transport v dir  ! 
     1361      !                                                      ! ========================= ! 
     1362      IF( srcv(jpr_tvsd)%laction .AND. ln_breivikFV_2016 )     tvsd(:,:) = frcv(jpr_tvsd)%z3(:,:,1) 
     1363      ! 
    13161364      !  Fields received by SAS when OASIS coupling 
    13171365      !  (arrays no more filled at sbcssm stage) 
Note: See TracChangeset for help on using the changeset viewer.