Changeset 11258 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/DYN/dynkeg.F90
- Timestamp:
- 2019-07-11T18:21:02+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/DYN/dynkeg.F90
r11195 r11258 74 74 INTEGER, INTENT( in ) :: kscheme ! =0/1 type of KEG scheme 75 75 ! 76 INTEGER :: ji, jj, jk, jb ! dummy loop indices 77 INTEGER :: igrd, ib_bdy ! local integers 76 INTEGER :: ji, jj, jk ! dummy loop indices 78 77 REAL(wp) :: zu, zv ! local scalars 79 78 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zhke 80 79 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv 81 REAL(wp) :: zweightu, zweightv82 LOGICAL, DIMENSION(4) :: llsend1, llrecv1 ! indicate how bdy communications are to be carried out83 80 !!---------------------------------------------------------------------- 84 81 ! … … 113 110 END DO 114 111 END DO 115 !116 IF (ln_bdy) THEN117 ! Maria Luneva & Fred Wobus: July-2016118 ! compensate for lack of turbulent kinetic energy on liquid bdy points119 DO ib_bdy = 1, nb_bdy120 IF( cn_dyn3d(ib_bdy) /= 'none' ) THEN121 igrd = 1 ! compensating null velocity on the bdy122 DO jb = 1, idx_bdy(ib_bdy)%nblenrim(igrd)123 ji = idx_bdy(ib_bdy)%nbi(jb,igrd) ! maximum extent : from 1 to jpi124 jj = idx_bdy(ib_bdy)%nbj(jb,igrd) ! maximum extent : from 1 to jpj125 IF( ji == 1 .OR. jj == 1 ) CYCLE126 DO jk = 1, jpkm1127 zhke(ji,jj,jk) = 0._wp128 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 DO135 END DO136 END IF137 END DO138 ! send jpi-1, jpj-1 and receive 1 used in the computation of the speed tendencies139 llsend1(:) = .false.140 llrecv1(:) = .false.141 DO ib_bdy = 1, nb_bdy142 llsend1(2) = llsend1(2) .OR. ANY(lsend_bdy(ib_bdy,igrd,2,:)) ! send east143 llsend1(4) = llsend1(4) .OR. ANY(lsend_bdy(ib_bdy,igrd,4,:)) ! send north144 llrecv1(1) = llrecv1(1) .OR. ANY(lrecv_bdy(ib_bdy,igrd,1,:)) ! receive west145 llrecv1(3) = llrecv1(3) .OR. ANY(lrecv_bdy(ib_bdy,igrd,3,:)) ! receive south146 END DO147 148 IF( ANY(llsend1) .OR. ANY(llrecv1) ) THEN ! if need to send/recv in at least one direction149 CALL lbc_lnk( 'bdydyn2d', zhke, 'T', 1., kfillmode=jpfillnothing ,lsend=llsend1, lrecv=llrecv1 )150 END IF151 END IF152 !153 112 CASE ( nkeg_HW ) !-- Hollingsworth scheme --! 154 113 DO jk = 1, jpkm1 … … 168 127 END DO 169 128 END DO 170 IF (ln_bdy) THEN171 ! Maria Luneva & Fred Wobus: July-2016172 ! compensate for lack of turbulent kinetic energy on liquid bdy points173 DO ib_bdy = 1, nb_bdy174 IF( cn_dyn3d(ib_bdy) /= 'none' ) THEN175 igrd = 1 ! compensation null velocity on land at the bdy176 DO jb = 1, idx_bdy(ib_bdy)%nblenrim(igrd)177 ji = idx_bdy(ib_bdy)%nbi(jb,igrd) ! maximum extent : from 1 to jpi178 jj = idx_bdy(ib_bdy)%nbj(jb,igrd) ! maximum extent : from 1 to jpj179 IF( ji == 1 .OR. ji == jpi .OR. jj == 1 .OR. jj == jpj ) CYCLE180 DO jk = 1, jpkm1181 zhke(ji,jj,jk) = 0._wp182 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 DO197 END DO198 END IF199 END DO200 END IF201 129 CALL lbc_lnk( 'dynkeg', zhke, 'T', 1. ) 202 130 !
Note: See TracChangeset
for help on using the changeset viewer.