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 11258 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/DYN/dynkeg.F90 – NEMO

Ignore:
Timestamp:
2019-07-11T18:21:02+02:00 (5 years ago)
Author:
smasson
Message:

dev_r10984_HPC-13 : minor bugfix and cleaning, see #2285

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/DYN/dynkeg.F90

    r11195 r11258  
    7474      INTEGER, INTENT( in ) ::   kscheme   ! =0/1   type of KEG scheme  
    7575      ! 
    76       INTEGER  ::   ji, jj, jk, jb           ! dummy loop indices 
    77       INTEGER  ::   igrd, ib_bdy             ! local integers 
     76      INTEGER  ::   ji, jj, jk             ! dummy loop indices 
    7877      REAL(wp) ::   zu, zv                   ! local scalars 
    7978      REAL(wp), DIMENSION(jpi,jpj,jpk)        ::   zhke 
    8079      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdu, ztrdv  
    81       REAL(wp)  :: zweightu, zweightv 
    82       LOGICAL, DIMENSION(4) :: llsend1, llrecv1  ! indicate how bdy communications are to be carried out 
    8380      !!---------------------------------------------------------------------- 
    8481      ! 
     
    113110            END DO 
    114111         END DO 
    115          ! 
    116          IF (ln_bdy) THEN 
    117             ! Maria Luneva & Fred Wobus: July-2016 
    118             ! compensate for lack of turbulent kinetic energy on liquid bdy points 
    119             DO ib_bdy = 1, nb_bdy 
    120                IF( cn_dyn3d(ib_bdy) /= 'none' ) THEN 
    121                   igrd = 1           ! compensating null velocity on the bdy 
    122                   DO jb = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    123                      ji   = idx_bdy(ib_bdy)%nbi(jb,igrd)   ! maximum extent : from 1 to jpi 
    124                      jj   = idx_bdy(ib_bdy)%nbj(jb,igrd)   ! maximum extent : from 1 to jpj 
    125                      IF( ji == 1 .OR. jj == 1 )  CYCLE 
    126                      DO jk = 1, jpkm1 
    127                         zhke(ji,jj,jk) = 0._wp 
    128                         zweightu = umask(ji-1,jj  ,jk) + umask(ji,jj,jk) 
    129                         zweightv = vmask(ji  ,jj-1,jk) + vmask(ji,jj,jk) 
    130                         zu = un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)  +  un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk) 
    131                         zv = vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)  +  vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk) 
    132                         IF( zweightu > 0._wp )   zhke(ji,jj,jk) =  zhke(ji,jj,jk) + zu / (2._wp * zweightu)  
    133                         IF( zweightv > 0._wp )   zhke(ji,jj,jk) =  zhke(ji,jj,jk) + zv / (2._wp * zweightv)  
    134                      END DO 
    135                   END DO 
    136                END IF 
    137             END DO 
    138             ! send jpi-1, jpj-1 and receive 1 used in the computation of the speed tendencies 
    139             llsend1(:) = .false. 
    140             llrecv1(:) = .false. 
    141             DO ib_bdy = 1, nb_bdy 
    142                llsend1(2) = llsend1(2) .OR. ANY(lsend_bdy(ib_bdy,igrd,2,:))   ! send east 
    143                llsend1(4) = llsend1(4) .OR. ANY(lsend_bdy(ib_bdy,igrd,4,:))   ! send north 
    144                llrecv1(1) = llrecv1(1) .OR. ANY(lrecv_bdy(ib_bdy,igrd,1,:))   ! receive west  
    145                llrecv1(3) = llrecv1(3) .OR. ANY(lrecv_bdy(ib_bdy,igrd,3,:))   ! receive south 
    146             END DO 
    147     
    148             IF( ANY(llsend1) .OR. ANY(llrecv1) ) THEN   ! if need to send/recv in at least one direction 
    149                CALL lbc_lnk( 'bdydyn2d', zhke, 'T',  1., kfillmode=jpfillnothing ,lsend=llsend1, lrecv=llrecv1 ) 
    150             END IF 
    151          END IF 
    152          ! 
    153112      CASE ( nkeg_HW )                          !--  Hollingsworth scheme  --! 
    154113         DO jk = 1, jpkm1 
     
    168127            END DO 
    169128         END DO 
    170          IF (ln_bdy) THEN 
    171             ! Maria Luneva & Fred Wobus: July-2016 
    172             ! compensate for lack of turbulent kinetic energy on liquid bdy points 
    173             DO ib_bdy = 1, nb_bdy 
    174                IF( cn_dyn3d(ib_bdy) /= 'none' ) THEN 
    175                   igrd = 1           ! compensation null velocity on land at the bdy 
    176                   DO jb = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    177                      ji   = idx_bdy(ib_bdy)%nbi(jb,igrd)   ! maximum extent : from 1 to jpi 
    178                      jj   = idx_bdy(ib_bdy)%nbj(jb,igrd)   ! maximum extent : from 1 to jpj 
    179                      IF( ji == 1 .OR. ji == jpi .OR. jj == 1 .OR. jj == jpj )  CYCLE 
    180                      DO jk = 1, jpkm1 
    181                         zhke(ji,jj,jk) = 0._wp 
    182                         zweightu = 8._wp * ( umask(ji-1,jj  ,jk) + umask(ji  ,jj  ,jk) ) & 
    183                              &   + 2._wp * ( umask(ji-1,jj-1,jk) + umask(ji-1,jj+1,jk) + umask(ji  ,jj-1,jk) + umask(ji  ,jj+1,jk) )  
    184                         zweightv = 8._wp * ( vmask(ji  ,jj-1,jk) + vmask(ji  ,jj-1,jk) ) & 
    185                              &   + 2._wp * ( vmask(ji-1,jj-1,jk) + vmask(ji+1,jj-1,jk) + vmask(ji-1,jj  ,jk) + vmask(ji+1,jj  ,jk) ) 
    186                         zu = 8._wp * ( un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)    & 
    187                            &         + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk) )  & 
    188                            &   +     ( un(ji-1,jj-1,jk) + un(ji-1,jj+1,jk) ) * ( un(ji-1,jj-1,jk) + un(ji-1,jj+1,jk) )   & 
    189                            &   +     ( un(ji  ,jj-1,jk) + un(ji  ,jj+1,jk) ) * ( un(ji  ,jj-1,jk) + un(ji  ,jj+1,jk) ) 
    190                         zv = 8._wp * ( vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)    & 
    191                            &         + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk) )  & 
    192                            &  +      ( vn(ji-1,jj-1,jk) + vn(ji+1,jj-1,jk) ) * ( vn(ji-1,jj-1,jk) + vn(ji+1,jj-1,jk) )   & 
    193                            &  +      ( vn(ji-1,jj  ,jk) + vn(ji+1,jj  ,jk) ) * ( vn(ji-1,jj  ,jk) + vn(ji+1,jj  ,jk) ) 
    194                         IF( zweightu > 0._wp )   zhke(ji,jj,jk) =  zhke(ji,jj,jk) +  zu / ( 2._wp * zweightu ) 
    195                         IF( zweightv > 0._wp )   zhke(ji,jj,jk) =  zhke(ji,jj,jk) +  zv / ( 2._wp * zweightv ) 
    196                      END DO 
    197                   END DO 
    198                END IF 
    199             END DO 
    200          END IF 
    201129         CALL lbc_lnk( 'dynkeg', zhke, 'T', 1. ) 
    202130         ! 
Note: See TracChangeset for help on using the changeset viewer.