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 14037 for NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG/src/OCE/ZDF/zdfdrg.F90 – NEMO

Ignore:
Timestamp:
2020-12-03T12:20:38+01:00 (3 years ago)
Author:
ayoung
Message:

Updated to trunk at 14020. Sette tests passed with change of results for configurations with non-linear ssh. Ticket #2506.

Location:
NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG

    • Property svn:externals
      •  

        old new  
        88 
        99# SETTE 
        10 ^/utils/CI/sette@13292        sette 
         10^/utils/CI/sette_wave@13990         sette 
  • NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG/src/OCE/ZDF/zdfdrg.F90

    r13295 r14037  
    3232   USE lib_mpp        ! distributed memory computing 
    3333   USE prtctl         ! Print control 
     34   USE sbc_oce , ONLY : nn_ice  
    3435 
    3536   IMPLICIT NONE 
     
    4142 
    4243   !                                 !!* Namelist namdrg: nature of drag coefficient namelist * 
    43    LOGICAL          ::   ln_OFF       ! free-slip       : Cd = 0 
     44   LOGICAL , PUBLIC ::   ln_drg_OFF   ! free-slip       : Cd = 0 
    4445   LOGICAL          ::   ln_lin       !     linear  drag: Cd = Cd0_lin 
    4546   LOGICAL          ::   ln_non_lin   ! non-linear  drag: Cd = Cd0_nl |U| 
    4647   LOGICAL          ::   ln_loglayer  ! logarithmic drag: Cd = vkarmn/log(z/z0) 
    4748   LOGICAL , PUBLIC ::   ln_drgimp    ! implicit top/bottom friction flag 
    48  
     49   LOGICAL , PUBLIC ::   ln_drgice_imp ! implicit ice-ocean drag  
    4950   !                                 !!* Namelist namdrg_top & _bot: TOP or BOTTOM coefficient namelist * 
    5051   REAL(wp)         ::   rn_Cd0       !: drag coefficient                                           [ - ] 
     
    226227      INTEGER   ::   ios, ioptio   ! local integers 
    227228      !! 
    228       NAMELIST/namdrg/ ln_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp 
     229      NAMELIST/namdrg/ ln_drg_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp, ln_drgice_imp 
    229230      !!---------------------------------------------------------------------- 
    230231      ! 
     
    237238      IF(lwm) WRITE ( numond, namdrg ) 
    238239      ! 
     240      IF ( ln_drgice_imp .AND.   nn_ice /= 2  )   ln_drgice_imp = .FALSE. 
     241      ! 
    239242      IF(lwp) THEN 
    240243         WRITE(numout,*) 
     
    242245         WRITE(numout,*) '~~~~~~~~~~~~' 
    243246         WRITE(numout,*) '   Namelist namdrg : top/bottom friction choices' 
    244          WRITE(numout,*) '      free-slip       : Cd = 0                  ln_OFF      = ', ln_OFF  
     247         WRITE(numout,*) '      free-slip       : Cd = 0                  ln_drg_OFF  = ', ln_drg_OFF  
    245248         WRITE(numout,*) '      linear  drag    : Cd = Cd0                ln_lin      = ', ln_lin 
    246249         WRITE(numout,*) '      non-linear  drag: Cd = Cd0_nl |U|         ln_non_lin  = ', ln_non_lin 
    247250         WRITE(numout,*) '      logarithmic drag: Cd = vkarmn/log(z/z0)   ln_loglayer = ', ln_loglayer 
    248251         WRITE(numout,*) '      implicit friction                         ln_drgimp   = ', ln_drgimp 
     252         WRITE(numout,*) '      implicit ice-ocean drag                   ln_drgice_imp  =', ln_drgice_imp 
    249253      ENDIF 
    250254      ! 
    251255      ioptio = 0                       ! set ndrg and control check 
    252       IF( ln_OFF      ) THEN   ;   ndrg = np_OFF        ;   ioptio = ioptio + 1   ;   ENDIF 
     256      IF( ln_drg_OFF  ) THEN   ;   ndrg = np_OFF        ;   ioptio = ioptio + 1   ;   ENDIF 
    253257      IF( ln_lin      ) THEN   ;   ndrg = np_lin        ;   ioptio = ioptio + 1   ;   ENDIF 
    254258      IF( ln_non_lin  ) THEN   ;   ndrg = np_non_lin    ;   ioptio = ioptio + 1   ;   ENDIF 
     
    257261      IF( ioptio /= 1 )   CALL ctl_stop( 'zdf_drg_init: Choose ONE type of drag coef in namdrg' ) 
    258262      ! 
     263      IF ( ln_drgice_imp.AND.(.NOT.ln_drgimp) ) &  
     264         &                CALL ctl_stop( 'zdf_drg_init: ln_drgice_imp=T requires ln_drgimp=T' ) 
    259265      ! 
    260266      !                     !==  BOTTOM drag setting  ==!   (applied at seafloor) 
     
    263269      CALL drg_init( 'BOTTOM'   , mbkt       ,                                         &   ! <== in 
    264270         &           r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, r_ke0_bot, rCd0_bot, rCdU_bot )   ! ==> out 
    265  
    266271      ! 
    267272      !                     !==  TOP drag setting  ==!   (applied at the top of ocean cavities) 
    268273      ! 
    269       IF( ln_isfcav ) THEN              ! Ocean cavities: top friction setting 
    270          ALLOCATE( rCd0_top(jpi,jpj), rCdU_top(jpi,jpj) ) 
     274      IF( ln_isfcav.OR.ln_drgice_imp ) THEN              ! Ocean cavities: top friction setting 
     275         ALLOCATE( rCdU_top(jpi,jpj) ) 
     276      ENDIF 
     277      ! 
     278      IF( ln_isfcav ) THEN 
     279         ALLOCATE( rCd0_top(jpi,jpj)) 
    271280         CALL drg_init( 'TOP   '   , mikt       ,                                         &   ! <== in 
    272281            &           r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top )   ! ==> out 
     
    374383      IF(ll_bot)   zmsk_boost(:,:) = zmsk_boost(:,:) * ssmask(:,:)                         ! x seafloor mask 
    375384      ! 
     385      l_log_not_linssh = .FALSE.    ! default definition 
    376386      ! 
    377387      SELECT CASE( ndrg ) 
     
    422432            l_log_not_linssh = .FALSE.    !- don't update Cd at each time step 
    423433            ! 
    424             DO_2D( 1, 1, 1, 1 ) 
     434            DO_2D( 1, 1, 1, 1 )              ! pCd0 = mask (and boosted) logarithmic drag coef. 
    425435               zzz =  0.5_wp * e3t_0(ji,jj,k_mk(ji,jj)) 
    426436               zcd = (  vkarmn / LOG( zzz / rn_z0 )  )**2 
Note: See TracChangeset for help on using the changeset viewer.