Changeset 10190


Ignore:
Timestamp:
2018-10-12T14:50:10+02:00 (2 years ago)
Author:
lovato
Message:

Implement correction to sbcblk_algo_ncar for wave coupling (see #2014)

Location:
NEMO/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_cfg

    r10075 r10190  
    8888   nn_fwb      = 2         !  FreshWater Budget:  
    8989   !                       !    =2 annual global mean of e-p-r set to zero 
     90   ln_wave     = .false.   !  Activate coupling with wave  (T => fill namsbc_wave) 
     91   ln_cdgw     = .false.   !  Neutral drag coefficient read from wave model (T => ln_wave=.true. & fill namsbc_wave) 
     92   ln_sdw      = .false.   !  Read 2D Surf Stokes Drift & Computation of 3D stokes drift (T => ln_wave=.true. & fill namsbc_wave)  
     93   nn_sdrift   =  0        !  Parameterization for the calculation of 3D-Stokes drift from the surface Stokes drift 
     94      !                    !   = 0 Breivik 2015 parameterization: v_z=v_0*[exp(2*k*z)/(1-8*k*z)] 
     95      !                    !   = 1 Phillips:                      v_z=v_o*[exp(2*k*z)-beta*sqrt(-2*k*pi*z)*erfc(sqrt(-2*k*z))] 
     96      !                    !   = 2 Phillips as (1) but using the wave frequency from a wave model 
     97   ln_tauwoc   = .false.   !  Activate ocean stress modified by external wave induced stress (T => ln_wave=.true. & fill namsbc_wave) 
     98   ln_tauw     = .false.   !  Activate ocean stress components from wave model 
     99   ln_stcor    = .false.   !  Activate Stokes Coriolis term (T => ln_wave=.true. & ln_sdw=.true. & fill namsbc_wave) 
    90100/ 
    91101!----------------------------------------------------------------------- 
     
    151161/ 
    152162!----------------------------------------------------------------------- 
     163&namsbc_wave   ! External fields from wave model                        (ln_wave=T) 
     164!----------------------------------------------------------------------- 
     165/ 
     166!----------------------------------------------------------------------- 
    153167&namberg       !   iceberg parameters                                   (default: OFF) 
    154168!----------------------------------------------------------------------- 
  • NEMO/trunk/cfgs/SHARED/namelist_ref

    r10075 r10190  
    481481   !           !  file name              ! frequency (hours) ! variable  ! time interp.!  clim  ! 'yearly'/ ! weights filename ! rotation ! land/sea mask ! 
    482482   !           !                         !  (if <0  months)  !   name    !   (logical) !  (T/F) ! 'monthly' !                  ! pairing  !    filename   ! 
    483    sn_cdg      =  'sdw_wave'             ,        1          , 'drag_coeff' ,  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    484    sn_usd      =  'sdw_wave'             ,        1          , 'u_sd2d'     ,  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    485    sn_vsd      =  'sdw_wave'             ,        1          , 'v_sd2d'     ,  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    486    sn_hsw      =  'sdw_wave'             ,        1          , 'hs'         ,  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    487    sn_wmp      =  'sdw_wave'             ,        1          , 'wmp'        ,  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    488    sn_wfr      =  'sdw_wave'             ,        1          , 'wfr'        ,  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    489    sn_wnum     =  'sdw_wave'             ,        1          , 'wave_num'   ,  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    490    sn_tauwoc   =  'sdw_wave'             ,        1          , 'wave_stress',  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    491    sn_tauwx    =  'sdw_wave'             ,        1          , 'wave_stress',  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
    492    sn_tauwy    =  'sdw_wave'             ,        1          , 'wave_stress',  .true.  , .false., 'daily'   ,  ''             , ''       , '' 
     483   sn_cdg      =  'sdw_ecwaves_orca2'    ,        6          , 'drag_coeff' ,  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     484   sn_usd      =  'sdw_ecwaves_orca2'    ,        6          , 'u_sd2d'     ,  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     485   sn_vsd      =  'sdw_ecwaves_orca2'    ,        6          , 'v_sd2d'     ,  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     486   sn_hsw      =  'sdw_ecwaves_orca2'    ,        6          , 'hs'         ,  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     487   sn_wmp      =  'sdw_ecwaves_orca2'    ,        6          , 'wmp'        ,  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     488   sn_wfr      =  'sdw_ecwaves_orca2'    ,        6          , 'wfr'        ,  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     489   sn_wnum     =  'sdw_ecwaves_orca2'    ,        6          , 'wave_num'   ,  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     490   sn_tauwoc   =  'sdw_ecwaves_orca2'    ,        6          , 'wave_stress',  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     491   sn_tauwx    =  'sdw_ecwaves_orca2'    ,        6          , 'wave_stress',  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
     492   sn_tauwy    =  'sdw_ecwaves_orca2'    ,        6          , 'wave_stress',  .true.  , .true. , 'yearly'  ,  ''              , ''       , '' 
    493493/ 
    494494!----------------------------------------------------------------------- 
  • NEMO/trunk/src/OCE/SBC/sbcblk.F90

    r10069 r10190  
    239239      !drag coefficient read from wave model definable only with mfs bulk formulae and core  
    240240         ELSEIF (ln_cdgw .AND. .NOT. ln_NCAR )       THEN        
    241              CALL ctl_stop( 'drag coefficient read from wave model definable only with mfs bulk formulae and core') 
     241             CALL ctl_stop( 'drag coefficient read from wave model definable only with NCAR and CORE bulk formulae') 
    242242         ELSEIF (ln_stcor .AND. .NOT. ln_sdw)                             THEN 
    243243             CALL ctl_stop( 'Stokes-Coriolis term calculated only if activated Stokes Drift ln_sdw=T') 
  • NEMO/trunk/src/OCE/SBC/sbcblk_algo_ncar.F90

    r10069 r10190  
    149149      Ch = 1.e-3*sqrt_Cd_n10*(18.*stab + 32.7*(1. - stab)) 
    150150      stab = sqrt_Cd_n10   ! Temporaty array !!! stab == SQRT(Cd) 
     151  
     152      IF( ln_cdgw )   Cen = Ce  ; Chn = Ch 
    151153 
    152154      !! Initializing values at z_u with z_t values: 
     
    186188         IF( ln_cdgw ) THEN      ! surface wave case 
    187189            stab = vkarmn / ( vkarmn / sqrt_Cd_n10 - ztmp2 )  ! (stab == SQRT(Cd)) 
    188             Cd      = stab * stab 
     190            Cd   = stab * stab 
     191            ztmp0 = (LOG(zu/10.) - zpsi_h_u) / vkarmn / sqrt_Cd_n10 
     192            ztmp2 = stab / sqrt_Cd_n10   ! (stab == SQRT(Cd)) 
     193            ztmp1 = 1. + Chn * ztmp0      
     194            Ch    = Chn * ztmp2 / ztmp1  ! L&Y 2004 eq. (10b) 
     195            ztmp1 = 1. + Cen * ztmp0 
     196            Ce    = Cen * ztmp2 / ztmp1  ! L&Y 2004 eq. (10c) 
     197 
    189198         ELSE 
    190199            ! Update neutral wind speed at 10m and neutral Cd at 10m (L&Y 2004 eq. 9a)... 
     
    205214            Cd      = ztmp0 / ( ztmp1*ztmp1 ) 
    206215            stab = SQRT( Cd ) ! Temporary array !!! (stab == SQRT(Cd)) 
    207          ENDIF 
    208  
    209          ztmp0 = (LOG(zu/10.) - zpsi_h_u) / vkarmn / sqrt_Cd_n10 
    210          ztmp2 = stab / sqrt_Cd_n10   ! (stab == SQRT(Cd)) 
    211          ztmp1 = 1. + Cx_n10*ztmp0    ! (Cx_n10 == Ch_n10) 
    212          Ch  = Cx_n10*ztmp2 / ztmp1   ! L&Y 2004 eq. (10b) 
    213  
    214          Cx_n10  = 1.e-3 * (34.6 * sqrt_Cd_n10)  ! L&Y 2004 eq. (6b)    ! Cx_n10 == Ce_n10 
    215          Cen(:,:) = Cx_n10 
    216          ztmp1 = 1. + Cx_n10*ztmp0 
    217          Ce  = Cx_n10*ztmp2 / ztmp1  ! L&Y 2004 eq. (10c) 
     216 
     217            ztmp0 = (LOG(zu/10.) - zpsi_h_u) / vkarmn / sqrt_Cd_n10 
     218            ztmp2 = stab / sqrt_Cd_n10   ! (stab == SQRT(Cd)) 
     219            ztmp1 = 1. + Cx_n10*ztmp0    ! (Cx_n10 == Ch_n10) 
     220            Ch  = Cx_n10*ztmp2 / ztmp1   ! L&Y 2004 eq. (10b) 
     221 
     222            Cx_n10  = 1.e-3 * (34.6 * sqrt_Cd_n10)  ! L&Y 2004 eq. (6b)    ! Cx_n10 == Ce_n10 
     223            Cen(:,:) = Cx_n10 
     224            ztmp1 = 1. + Cx_n10*ztmp0 
     225            Ce  = Cx_n10*ztmp2 / ztmp1  ! L&Y 2004 eq. (10c) 
     226            ENDIF 
    218227         ! 
    219228      END DO 
  • NEMO/trunk/src/OCE/SBC/sbcmod.F90

    r10068 r10190  
    157157         WRITE(numout,*) '               wave modified ocean stress component ln_tauw       = ', ln_tauw 
    158158         WRITE(numout,*) '               Stokes coriolis term                 ln_stcor      = ', ln_stcor 
    159          WRITE(numout,*) '               neutral drag coefficient (CORE, MFS) ln_cdgw       = ', ln_cdgw 
    160       ENDIF 
    161       ! 
     159         WRITE(numout,*) '               neutral drag coefficient (CORE,NCAR) ln_cdgw       = ', ln_cdgw 
     160      ENDIF 
     161      ! 
     162      IF( .NOT.ln_wave ) THEN 
     163         ln_sdw = .false. ; ln_cdgw = .false. ; ln_tauwoc = .false. ; ln_tauw = .false. ; ln_stcor = .false. 
     164      ENDIF  
    162165      IF( ln_sdw ) THEN 
    163166         IF( .NOT.(nn_sdrift==jp_breivik_2014 .OR. nn_sdrift==jp_li_2017 .OR. nn_sdrift==jp_peakfr) ) & 
Note: See TracChangeset for help on using the changeset viewer.