- Timestamp:
- 2015-03-31T19:58:23+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90
r5120 r5189 162 162 ! ! trick: tmask(ik ) = 0 => all pn2 = 0 => zdzr = 0 163 163 ! ! else tmask(ik+1) = 0 => pn2(ik+1) = 0 => zdzr divides by 1 164 ! ! umask(ik+1) /= 0 => all pn2 /= 0 => zdzr divides by 2164 ! ! tmask(ik+1) /= 0 => all pn2 /= 0 => zdzr divides by 2 165 165 ! ! NB: 1/(tmask+1) = (1-.5*tmask) substitute a / by a * ==> faster 166 166 zdzr(:,:,jk) = zm1_g * ( prd(:,:,jk) + 1._wp ) & … … 188 188 DO jj = 2, jpjm1 189 189 DO ji = fs_2, fs_jpim1 ! vector opt. 190 IF (miku(ji,jj) .GT. miku(ji+1,jj)) zhmlpu(ji,jj) = MAX(hmlpt(ji ,jj ), 5._wp) 191 IF (miku(ji,jj) .LT. miku(ji+1,jj)) zhmlpu(ji,jj) = MAX(hmlpt(ji+1,jj ), 5._wp) 192 IF (miku(ji,jj) .EQ. miku(ji+1,jj)) zhmlpu(ji,jj) = MAX(hmlpt(ji ,jj ), hmlpt(ji+1,jj ), 5._wp) 193 IF (mikv(ji,jj) .GT. miku(ji,jj+1)) zhmlpv(ji,jj) = MAX(hmlpt(ji ,jj ), 5._wp) 194 IF (mikv(ji,jj) .LT. miku(ji,jj+1)) zhmlpv(ji,jj) = MAX(hmlpt(ji ,jj+1), 5._wp) 195 IF (mikv(ji,jj) .EQ. miku(ji,jj+1)) zhmlpv(ji,jj) = MAX(hmlpt(ji ,jj ), hmlpt(ji ,jj+1), 5._wp) 196 ENDDO 197 ENDDO 190 zhmlpu(ji,jj) = MAX(hmlpt(ji,jj), hmlpt(ji+1,jj ), 5._wp) - 0.5 * ( risfdep(ji,jj) + risfdep(ji+1,jj ) ) 191 zhmlpv(ji,jj) = MAX(hmlpt(ji,jj), hmlpt(ji ,jj+1), 5._wp) - 0.5 * ( risfdep(ji,jj) + risfdep(ji ,jj+1) ) 192 END DO 193 END DO 198 194 ELSE 199 195 DO jj = 2, jpjm1 … … 201 197 zhmlpu(ji,jj) = MAX(hmlpt(ji,jj), hmlpt(ji+1,jj ), 5._wp) 202 198 zhmlpv(ji,jj) = MAX(hmlpt(ji,jj), hmlpt(ji ,jj+1), 5._wp) 203 END DO204 END DO199 END DO 200 END DO 205 201 END IF 202 ! PM + GM can be optimized by using : zuslp_hmlpu(ji,jj)= uslpml(ji,jj) / zhmlpu (ji,jj) 203 206 204 DO jk = 2, jpkm1 !* Slopes at u and v points 207 205 DO jj = 2, jpjm1 … … 220 218 zfj = MAX( omlmask(ji,jj,jk), omlmask(ji ,jj+1,jk) ) 221 219 ! thickness of water column between surface and level k at u/v point 222 zdepu = 0.5_wp * ( ( fsdept (ji,jj,jk) + fsdept(ji+1,jj ,jk) )&223 - 2 * MAX( risfdep(ji,jj), risfdep(ji+1,jj )) - fse3u(ji,jj,miku(ji,jj)) )224 zdepv = 0.5_wp * ( ( fsdept (ji,jj,jk) + fsdept(ji,jj+1,jk) ) &225 - 2 * MAX( risfdep(ji,jj), risfdep(ji ,jj+1)) - fse3v(ji,jj,mikv(ji,jj)) )220 zdepu = 0.5_wp * ( ( fsdept (ji,jj,jk) + fsdept (ji+1,jj ,jk) ) & 221 - ( risfdep(ji,jj) + risfdep(ji+1,jj) ) - fse3u(ji,jj,miku(ji,jj)) ) 222 zdepv = 0.5_wp * ( ( fsdept (ji,jj,jk) + fsdept (ji,jj+1,jk) ) & 223 - ( risfdep(ji,jj) + risfdep(ji,jj+1) ) - fse3v(ji,jj,mikv(ji,jj)) ) 226 224 ! 227 225 zwz(ji,jj,jk) = ( 1. - zfi) * zau / ( zbu - zeps ) & … … 315 313 ! ! wslpi and wslpj with ML flattening (output in zwz and zww, resp.) 316 314 zfk = MAX( omlmask(ji,jj,jk), omlmask(ji,jj,jk-1) ) ! zfk=1 in the ML otherwise zfk=0 317 zck = ( fsdepw(ji,jj,jk) - fsdepw(ji,jj,mikt(ji,jj) ) ) / MAX( hmlp(ji,jj) , 10._wp )315 zck = ( fsdepw(ji,jj,jk) - fsdepw(ji,jj,mikt(ji,jj) ) ) / MAX( hmlp(ji,jj) - fsdepw(ji,jj,mikt(ji,jj)), 10._wp ) 318 316 zwz(ji,jj,jk) = ( zai / ( zbi - zeps ) * ( 1._wp - zfk ) & 319 317 & + zck * wslpiml(ji,jj) * zfk ) * wmask(ji,jj,jk) … … 426 424 DO jj = 2, jpjm1 427 425 DO ji = fs_2, fs_jpim1 ! vector opt. 428 uslp(ji,jj,1) = -1./e1u(ji,jj) * ( fsdept_b(ji+1,jj,1) - fsdept_b(ji ,jj ,1) ) * umask(ji,jj,1)429 vslp(ji,jj,1) = -1./e2v(ji,jj) * ( fsdept_b(ji,jj+1,1) - fsdept_b(ji ,jj ,1) ) * vmask(ji,jj,1)426 uslp(ji,jj,1) = -1./e1u(ji,jj) * ( fsdept_b(ji+1,jj,1) - fsdept_b(ji ,jj ,1) ) * umask(ji,jj,1) 427 vslp(ji,jj,1) = -1./e2v(ji,jj) * ( fsdept_b(ji,jj+1,1) - fsdept_b(ji ,jj ,1) ) * vmask(ji,jj,1) 430 428 wslpi(ji,jj,1) = -1./e1t(ji,jj) * ( fsdepw_b(ji+1,jj,1) - fsdepw_b(ji-1,jj,1) ) * tmask(ji,jj,1) * 0.5 431 429 wslpj(ji,jj,1) = -1./e2t(ji,jj) * ( fsdepw_b(ji,jj+1,1) - fsdepw_b(ji,jj-1,1) ) * tmask(ji,jj,1) * 0.5 … … 436 434 DO jj = 2, jpjm1 437 435 DO ji = fs_2, fs_jpim1 ! vector opt. 438 uslp(ji,jj,jk) = -1./e1u(ji,jj) * ( fsdept_b(ji+1,jj,jk) - fsdept_b(ji ,jj ,jk) ) * umask(ji,jj,jk)439 vslp(ji,jj,jk) = -1./e2v(ji,jj) * ( fsdept_b(ji,jj+1,jk) - fsdept_b(ji ,jj ,jk) ) * vmask(ji,jj,jk)436 uslp(ji,jj,jk) = -1./e1u(ji,jj) * ( fsdept_b(ji+1,jj,jk) - fsdept_b(ji ,jj ,jk) ) * umask(ji,jj,jk) 437 vslp(ji,jj,jk) = -1./e2v(ji,jj) * ( fsdept_b(ji,jj+1,jk) - fsdept_b(ji ,jj ,jk) ) * vmask(ji,jj,jk) 440 438 wslpi(ji,jj,jk) = -1./e1t(ji,jj) * ( fsdepw_b(ji+1,jj,jk) - fsdepw_b(ji-1,jj,jk) ) & 441 439 & * wmask(ji,jj,jk) * 0.5 … … 752 750 DO ji = 1, jpi 753 751 ik = nmln(ji,jj) - 1 754 IF( jk <= ik .AND. jk >= mikt(ji,jj) ) THEN 755 omlmask(ji,jj,jk) = 1._wp 756 ELSE 757 omlmask(ji,jj,jk) = 0._wp 752 IF( jk <= ik ) THEN ; omlmask(ji,jj,jk) = 1._wp 753 ELSE ; omlmask(ji,jj,jk) = 0._wp 758 754 ENDIF 759 755 END DO … … 777 773 ! 778 774 ! !- vertical density gradient for u- and v-slopes (from dzr at T-point) 779 iku = MIN( MAX( miku(ji,jj)+1,nmln(ji,jj) , nmln(ji+1,jj) ) , jpkm1 ) ! ML (MAX of T-pts, bound by jpkm1)780 ikv = MIN( MAX( mikv(ji,jj)+1,nmln(ji,jj) , nmln(ji,jj+1) ) , jpkm1 ) !775 iku = MIN( MAX( nmln(ji,jj) , nmln(ji+1,jj) ) , jpkm1 ) ! ML (MAX of T-pts, bound by jpkm1) 776 ikv = MIN( MAX( nmln(ji,jj) , nmln(ji,jj+1) ) , jpkm1 ) ! 781 777 zbu = 0.5_wp * ( p_dzr(ji,jj,iku) + p_dzr(ji+1,jj ,iku) ) 782 778 zbv = 0.5_wp * ( p_dzr(ji,jj,ikv) + p_dzr(ji ,jj+1,ikv) )
Note: See TracChangeset
for help on using the changeset viewer.