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 13899 for NEMO/branches/2020/tickets_icb_1900/src/OCE/LDF/ldfslp.F90 – NEMO

Ignore:
Timestamp:
2020-11-27T17:26:33+01:00 (4 years ago)
Author:
mathiot
Message:

ticket #1900: update branch to trunk and add ICB test case

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

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/tickets_icb_1900

    • Property svn:externals
      •  

        old new  
        22^/utils/build/makenemo@HEAD   makenemo 
        33^/utils/build/mk@HEAD         mk 
        4 ^/utils/tools/@HEAD           tools 
         4^/utils/tools@HEAD            tools 
        55^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
         
        88 
        99# SETTE 
        10 ^/utils/CI/sette@12931        sette 
         10^/utils/CI/sette@13559        sette 
  • NEMO/branches/2020/tickets_icb_1900/src/OCE/LDF/ldfslp.F90

    r13237 r13899  
    128128      IF( ln_timing )   CALL timing_start('ldf_slp') 
    129129      ! 
    130       zeps   =  1.e-20_wp        !==   Local constant initialization   ==! 
     130      zeps   =  1.e-20_wp           !==   Local constant initialization   ==! 
    131131      z1_16  =  1.0_wp / 16._wp 
    132132      zm1_g  = -1.0_wp / grav 
     
    137137      zwz(:,:,:) = 0._wp 
    138138      ! 
    139       DO_3D_10_10( 1, jpk ) 
     139      DO_3D( 1, 0, 1, 0, 1, jpk )   !==   i- & j-gradient of density   ==! 
    140140         zgru(ji,jj,jk) = umask(ji,jj,jk) * ( prd(ji+1,jj  ,jk) - prd(ji,jj,jk) ) 
    141141         zgrv(ji,jj,jk) = vmask(ji,jj,jk) * ( prd(ji  ,jj+1,jk) - prd(ji,jj,jk) ) 
    142142      END_3D 
    143143      IF( ln_zps ) THEN                           ! partial steps correction at the bottom ocean level 
    144          DO_2D_10_10 
     144         DO_2D( 1, 0, 1, 0 ) 
    145145            zgru(ji,jj,mbku(ji,jj)) = gru(ji,jj) 
    146146            zgrv(ji,jj,mbkv(ji,jj)) = grv(ji,jj) 
     
    148148      ENDIF 
    149149      IF( ln_zps .AND. ln_isfcav ) THEN           ! partial steps correction at the bottom ocean level 
    150          DO_2D_10_10 
     150         DO_2D( 1, 0, 1, 0 ) 
    151151            IF( miku(ji,jj) > 1 )   zgru(ji,jj,miku(ji,jj)) = grui(ji,jj)  
    152152            IF( mikv(ji,jj) > 1 )   zgrv(ji,jj,mikv(ji,jj)) = grvi(ji,jj) 
     
    154154      ENDIF 
    155155      ! 
    156       zdzr(:,:,1) = 0._wp        !==   Local vertical density gradient at T-point   == !   (evaluated from N^2) 
     156      zdzr(:,:,1) = 0._wp           !==   Local vertical density gradient at T-point   == !   (evaluated from N^2) 
    157157      DO jk = 2, jpkm1 
    158158         !                                ! zdzr = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 
     
    165165      END DO 
    166166      ! 
    167       !                          !==   Slopes just below the mixed layer   ==! 
     167      !                             !==   Slopes just below the mixed layer   ==! 
    168168      CALL ldf_slp_mxl( prd, pn2, zgru, zgrv, zdzr, Kmm )        ! output: uslpml, vslpml, wslpiml, wslpjml 
    169169 
     
    173173      ! 
    174174      IF ( ln_isfcav ) THEN 
    175          DO_2D_00_00 
     175         DO_2D( 0, 0, 0, 0 ) 
    176176            zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / ( MAX(hmlpt  (ji,jj), hmlpt  (ji+1,jj  ), 5._wp) & 
    177177               &                                  - MAX(risfdep(ji,jj), risfdep(ji+1,jj  )       ) )  
     
    180180         END_2D 
    181181      ELSE 
    182          DO_2D_00_00 
     182         DO_2D( 0, 0, 0, 0 ) 
    183183            zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji+1,jj  ), 5._wp) 
    184184            zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji  ,jj+1), 5._wp) 
     
    186186      END IF 
    187187 
    188       DO_3D_00_00( 2, jpkm1 ) 
     188      DO_3D( 0, 0, 0, 0, 2, jpkm1 )        !* Slopes at u and v points 
    189189         !                                      ! horizontal and vertical density gradient at u- and v-points 
    190190         zau = zgru(ji,jj,jk) * r1_e1u(ji,jj) 
     
    231231      CALL lbc_lnk_multi( 'ldfslp', zwz, 'U', -1.0_wp,  zww, 'V', -1.0_wp )      ! lateral boundary conditions 
    232232      ! 
    233       !                                            !* horizontal Shapiro filter 
     233      !                                    !* horizontal Shapiro filter 
    234234      DO jk = 2, jpkm1 
    235          DO_2D_00_00 
     235         DO_2D( 0, 0, 0, 0 )                                 ! rows jj=2 and =jpjm1 only 
    236236            uslp(ji,jj,jk) = z1_16 * (        zwz(ji-1,jj-1,jk) + zwz(ji+1,jj-1,jk)      & 
    237237               &                       +      zwz(ji-1,jj+1,jk) + zwz(ji+1,jj+1,jk)      & 
     
    245245               &                       + 4.*  zww(ji,jj    ,jk)                       ) 
    246246         END_2D 
    247          DO jj = 3, jpj-2                               ! other rows 
     247         DO jj = 3, jpj-2                                    ! other rows 
    248248            DO ji = 2, jpim1   ! vector opt. 
    249249               uslp(ji,jj,jk) = z1_16 * (        zwz(ji-1,jj-1,jk) + zwz(ji+1,jj-1,jk)      & 
     
    259259            END DO 
    260260         END DO 
    261          !                                        !* decrease along coastal boundaries 
    262          DO_2D_00_00 
     261         !                                 !* decrease along coastal boundaries 
     262         DO_2D( 0, 0, 0, 0 ) 
    263263            uslp(ji,jj,jk) = uslp(ji,jj,jk) * ( umask(ji,jj+1,jk) + umask(ji,jj-1,jk  ) ) * 0.5_wp   & 
    264264               &                            * ( umask(ji,jj  ,jk) + umask(ji,jj  ,jk+1) ) * 0.5_wp 
     
    272272      ! ===========================      | wslpj = mij( d/dj( prd ) / d/dz( prd ) 
    273273      ! 
    274       DO_3D_00_00( 2, jpkm1 ) 
     274      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    275275         !                                  !* Local vertical density gradient evaluated from N^2 
    276276         zbw = zm1_2g * pn2 (ji,jj,jk) * ( prd (ji,jj,jk) + prd (ji,jj,jk-1) + 2. ) 
     
    307307      !                                           !* horizontal Shapiro filter 
    308308      DO jk = 2, jpkm1 
    309          DO_2D_00_00 
     309         DO_2D( 0, 0, 0, 0 )                             ! rows jj=2 and =jpjm1 only 
    310310            zcofw = wmask(ji,jj,jk) * z1_16 
    311311            wslpi(ji,jj,jk) = (         zwz(ji-1,jj-1,jk) + zwz(ji+1,jj-1,jk)     & 
     
    338338         END DO 
    339339         !                                        !* decrease in vicinity of topography 
    340          DO_2D_00_00 
     340         DO_2D( 0, 0, 0, 0 ) 
    341341            zck =   ( umask(ji,jj,jk) + umask(ji-1,jj,jk) )   & 
    342342               &  * ( vmask(ji,jj,jk) + vmask(ji,jj-1,jk) ) * 0.25 
     
    401401         ! 
    402402         ip = jl   ;   jp = jl                ! guaranteed nonzero gradients ( absolute value larger than repsln) 
    403          DO_3D_10_10( 1, jpkm1 ) 
     403         DO_3D( 1, 0, 1, 0, 1, jpkm1 )        ! done each pair of triad ! NB: not masked ==>  a minimum value is set 
    404404            zdit = ( ts(ji+1,jj,jk,jp_tem,Kbb) - ts(ji,jj,jk,jp_tem,Kbb) )    ! i-gradient of T & S at u-point 
    405405            zdis = ( ts(ji+1,jj,jk,jp_sal,Kbb) - ts(ji,jj,jk,jp_sal,Kbb) ) 
     
    413413         ! 
    414414         IF( ln_zps .AND. l_grad_zps ) THEN     ! partial steps: correction of i- & j-grad on bottom 
    415             DO_2D_10_10 
     415            DO_2D( 1, 0, 1, 0 ) 
    416416               iku  = mbku(ji,jj)          ;   ikv  = mbkv(ji,jj)             ! last ocean level (u- & v-points) 
    417417               zdit = gtsu(ji,jj,jp_tem)   ;   zdjt = gtsv(ji,jj,jp_tem)      ! i- & j-gradient of Temperature 
     
    427427 
    428428      DO kp = 0, 1                            !==  unmasked before density i- j-, k-gradients  ==! 
    429          DO_3D_11_11( 1, jpkm1 ) 
    430             IF( jk+kp > 1 ) THEN        ! k-gradient of T & S a jk+kp 
     429         DO_3D( 1, 1, 1, 1, 1, jpkm1 )        ! done each pair of triad ! NB: not masked ==>  a minimum value is set 
     430            IF( jk+kp > 1 ) THEN              ! k-gradient of T & S a jk+kp 
    431431               zdkt = ( ts(ji,jj,jk+kp-1,jp_tem,Kbb) - ts(ji,jj,jk+kp,jp_tem,Kbb) ) 
    432432               zdks = ( ts(ji,jj,jk+kp-1,jp_sal,Kbb) - ts(ji,jj,jk+kp,jp_sal,Kbb) ) 
     
    442442      END DO 
    443443      ! 
    444       DO_2D_11_11 
     444      DO_2D( 1, 1, 1, 1 )                     !==  Reciprocal depth of the w-point below ML base  ==! 
    445445         jk = MIN( nmln(ji,jj), mbkt(ji,jj) ) + 1     ! MIN in case ML depth is the ocean depth 
    446446         z1_mlbw(ji,jj) = 1._wp / gdepw(ji,jj,jk,Kmm) 
     
    462462      DO jl = 0, 1                            ! calculate slope of the 4 triads immediately ONE level below mixed-layer base 
    463463         DO kp = 0, 1                         ! with only the slope-max limit   and   MASKED 
    464             DO_2D_10_10 
     464            DO_2D( 1, 0, 1, 0 ) 
    465465               ip = jl   ;   jp = jl 
    466466               ! 
     
    499499               ! Must mask contribution to slope from dz/dx at constant s for triads jk=1,kp=0 that poke up though ocean surface 
    500500               znot_thru_surface = REAL( 1-1/(jk+kp), wp )  !jk+kp=1,=0.; otherwise=1.0 
    501                DO_2D_10_10 
     501               DO_2D( 1, 0, 1, 0 ) 
    502502                  ! 
    503503                  ! Calculate slope relative to geopotentials used for GM skew fluxes 
     
    628628      ! 
    629629      !                                            !==   surface mixed layer mask   ! 
    630       DO_3D_11_11( 1, jpk ) 
     630      DO_3D( 1, 1, 1, 1, 1, jpk )                  ! =1 inside the mixed layer, =0 otherwise 
    631631         ik = nmln(ji,jj) - 1 
    632632         IF( jk <= ik ) THEN   ;   omlmask(ji,jj,jk) = 1._wp 
     
    646646      !----------------------------------------------------------------------- 
    647647      ! 
    648       DO_2D_00_00 
     648      DO_2D( 0, 0, 0, 0 ) 
    649649         !                        !==   Slope at u- & v-points just below the Mixed Layer   ==! 
    650650         ! 
Note: See TracChangeset for help on using the changeset viewer.