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 13540 for NEMO/branches/2020/r12377_ticket2386/src/OCE/ZDF/zdfdrg.F90 – NEMO

Ignore:
Timestamp:
2020-09-29T12:41:06+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2386: update to latest trunk

Location:
NEMO/branches/2020/r12377_ticket2386
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r12377_ticket2386

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
        88 
        99# SETTE 
        10 ^/utils/CI/sette@HEAD         sette 
         10^/utils/CI/sette@13507        sette 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/ZDF/zdfdrg.F90

    r12511 r13540  
    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                                           [ - ] 
     
    7475   !! * Substitutions 
    7576#  include "do_loop_substitute.h90" 
     77#  include "domzgr_substitute.h90" 
    7678   !!---------------------------------------------------------------------- 
    7779   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    115117      ! 
    116118      IF( l_log_not_linssh ) THEN     !==  "log layer"  ==!   compute Cd and -Cd*|U| 
    117          DO_2D_00_00 
     119         DO_2D( 0, 0, 0, 0 ) 
    118120            imk = k_mk(ji,jj)          ! ocean bottom level at t-points 
    119121            zut = uu(ji,jj,imk,Kmm) + uu(ji-1,jj,imk,Kmm)     ! 2 x velocity at t-point 
     
    127129         END_2D 
    128130      ELSE                                            !==  standard Cd  ==! 
    129          DO_2D_00_00 
     131         DO_2D( 0, 0, 0, 0 ) 
    130132            imk = k_mk(ji,jj)    ! ocean bottom level at t-points 
    131133            zut = uu(ji,jj,imk,Kmm) + uu(ji-1,jj,imk,Kmm)     ! 2 x velocity at t-point 
     
    174176      ENDIF 
    175177 
    176       DO_2D_00_00 
     178      DO_2D( 0, 0, 0, 0 ) 
    177179         ikbu = mbku(ji,jj)          ! deepest wet ocean u- & v-levels 
    178180         ikbv = mbkv(ji,jj) 
     
    187189      ! 
    188190      IF( ln_isfcav ) THEN        ! ocean cavities 
    189          DO_2D_00_00 
     191         DO_2D( 0, 0, 0, 0 ) 
    190192            ikbu = miku(ji,jj)          ! first wet ocean u- & v-levels 
    191193            ikbv = mikv(ji,jj) 
     
    225227      INTEGER   ::   ios, ioptio   ! local integers 
    226228      !! 
    227       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 
    228230      !!---------------------------------------------------------------------- 
    229231      ! 
     
    236238      IF(lwm) WRITE ( numond, namdrg ) 
    237239      ! 
     240      IF ( ln_drgice_imp .AND.   nn_ice /= 2  )   ln_drgice_imp = .FALSE. 
     241      ! 
    238242      IF(lwp) THEN 
    239243         WRITE(numout,*) 
     
    241245         WRITE(numout,*) '~~~~~~~~~~~~' 
    242246         WRITE(numout,*) '   Namelist namdrg : top/bottom friction choices' 
    243          WRITE(numout,*) '      free-slip       : Cd = 0                  ln_OFF      = ', ln_OFF  
     247         WRITE(numout,*) '      free-slip       : Cd = 0                  ln_drg_OFF  = ', ln_drg_OFF  
    244248         WRITE(numout,*) '      linear  drag    : Cd = Cd0                ln_lin      = ', ln_lin 
    245249         WRITE(numout,*) '      non-linear  drag: Cd = Cd0_nl |U|         ln_non_lin  = ', ln_non_lin 
    246250         WRITE(numout,*) '      logarithmic drag: Cd = vkarmn/log(z/z0)   ln_loglayer = ', ln_loglayer 
    247251         WRITE(numout,*) '      implicit friction                         ln_drgimp   = ', ln_drgimp 
     252         WRITE(numout,*) '      implicit ice-ocean drag                   ln_drgice_imp  =', ln_drgice_imp 
    248253      ENDIF 
    249254      ! 
    250255      ioptio = 0                       ! set ndrg and control check 
    251       IF( ln_OFF      ) THEN   ;   ndrg = np_OFF        ;   ioptio = ioptio + 1   ;   ENDIF 
     256      IF( ln_drg_OFF  ) THEN   ;   ndrg = np_OFF        ;   ioptio = ioptio + 1   ;   ENDIF 
    252257      IF( ln_lin      ) THEN   ;   ndrg = np_lin        ;   ioptio = ioptio + 1   ;   ENDIF 
    253258      IF( ln_non_lin  ) THEN   ;   ndrg = np_non_lin    ;   ioptio = ioptio + 1   ;   ENDIF 
     
    256261      IF( ioptio /= 1 )   CALL ctl_stop( 'zdf_drg_init: Choose ONE type of drag coef in namdrg' ) 
    257262      ! 
     263      IF ( ln_drgice_imp.AND.(.NOT.ln_drgimp) ) &  
     264         &                CALL ctl_stop( 'zdf_drg_init: ln_drgice_imp=T requires ln_drgimp=T' ) 
    258265      ! 
    259266      !                     !==  BOTTOM drag setting  ==!   (applied at seafloor) 
     
    262269      CALL drg_init( 'BOTTOM'   , mbkt       ,                                         &   ! <== in 
    263270         &           r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, r_ke0_bot, rCd0_bot, rCdU_bot )   ! ==> out 
    264  
    265271      ! 
    266272      !                     !==  TOP drag setting  ==!   (applied at the top of ocean cavities) 
    267273      ! 
    268       IF( ln_isfcav ) THEN              ! Ocean cavities: top friction setting 
    269          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)) 
    270280         CALL drg_init( 'TOP   '   , mikt       ,                                         &   ! <== in 
    271281            &           r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top )   ! ==> out 
     
    362372         ! cl_varname is a coefficient in [0,1] giving where to apply the regional boost 
    363373         CALL iom_open ( TRIM(cl_file), inum ) 
    364          CALL iom_get  ( inum, jpdom_data, TRIM(cl_varname), zmsk_boost, 1 ) 
     374         CALL iom_get  ( inum, jpdom_global, TRIM(cl_varname), zmsk_boost, 1 ) 
    365375         CALL iom_close( inum) 
    366376         zmsk_boost(:,:) = 1._wp + rn_boost * zmsk_boost(:,:) 
     
    421431            l_log_not_linssh = .FALSE.    !- don't update Cd at each time step 
    422432            ! 
    423             DO_2D_11_11 
     433            DO_2D( 1, 1, 1, 1 )              ! pCd0 = mask (and boosted) logarithmic drag coef. 
    424434               zzz =  0.5_wp * e3t_0(ji,jj,k_mk(ji,jj)) 
    425435               zcd = (  vkarmn / LOG( zzz / rn_z0 )  )**2 
Note: See TracChangeset for help on using the changeset viewer.