Changeset 10425 for NEMO/trunk/src/OCE/ZDF/zdfiwm.F90
- Timestamp:
- 2018-12-19T22:54:16+01:00 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/ZDF/zdfiwm.F90
r10069 r10425 64 64 & hbot_iwm(jpi,jpj), hcri_iwm(jpi,jpj) , STAT=zdf_iwm_alloc ) 65 65 ! 66 IF( lk_mpp ) CALL mpp_sum (zdf_iwm_alloc )67 IF( zdf_iwm_alloc /= 0 ) CALL ctl_ warn('zdf_iwm_alloc: failed to allocate arrays')66 CALL mpp_sum ( 'zdfiwm', zdf_iwm_alloc ) 67 IF( zdf_iwm_alloc /= 0 ) CALL ctl_stop( 'STOP', 'zdf_iwm_alloc: failed to allocate arrays' ) 68 68 END FUNCTION zdf_iwm_alloc 69 69 … … 122 122 ! 123 123 INTEGER :: ji, jj, jk ! dummy loop indices 124 REAL(wp) :: zztmp ! scalar workspace124 REAL(wp) :: zztmp, ztmp1, ztmp2 ! scalar workspace 125 125 REAL(wp), DIMENSION(jpi,jpj) :: zfact ! Used for vertical structure 126 126 REAL(wp), DIMENSION(jpi,jpj) :: zhdep ! Ocean depth … … 157 157 !!gm gde3w ==>>> check for ssh taken into account.... seem OK gde3w_n=gdept_n - sshn 158 158 DO jk = 2, jpkm1 ! complete with the level-dependent part 159 zemx_iwm(:,:,jk) = zfact(:,:) * ( EXP( ( gde3w_n(:,:,jk ) - zhdep(:,:) ) / hcri_iwm(:,:) ) & 160 & - EXP( ( gde3w_n(:,:,jk-1) - zhdep(:,:) ) / hcri_iwm(:,:) ) ) * wmask(:,:,jk) & 161 & / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 162 159 DO jj = 1, jpj 160 DO ji = 1, jpi 161 IF ( zfact(ji,jj) == 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN ! optimization 162 zemx_iwm(ji,jj,jk) = 0._wp 163 ELSE 164 zemx_iwm(ji,jj,jk) = zfact(ji,jj) * ( EXP( ( gde3w_n(ji,jj,jk ) - zhdep(ji,jj) ) / hcri_iwm(ji,jj) ) & 165 & - EXP( ( gde3w_n(ji,jj,jk-1) - zhdep(ji,jj) ) / hcri_iwm(ji,jj) ) ) & 166 & / ( gde3w_n(ji,jj,jk) - gde3w_n(ji,jj,jk-1) ) 167 ENDIF 168 END DO 169 END DO 163 170 !!gm delta(gde3w_n) = e3t_n !! Please verify the grid-point position w versus t-point 164 171 !!gm it seems to me that only 1/hcri_iwm is used ==> compute it one for all … … 234 241 zwkb(:,:,1) = zhdep(:,:) * wmask(:,:,1) 235 242 ! 236 zweight(:,:,:) = 0._wp 237 DO jk = 2, jpkm1 238 zweight(:,:,jk) = MAX( 0._wp, rn2(:,:,jk) ) * hbot_iwm(:,:) * wmask(:,:,jk) & 239 & * ( EXP( -zwkb(:,:,jk) / hbot_iwm(:,:) ) - EXP( -zwkb(:,:,jk-1) / hbot_iwm(:,:) ) ) 243 DO jk = 2, jpkm1 244 DO jj = 1, jpj 245 DO ji = 1, jpi 246 IF ( rn2(ji,jj,jk) <= 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN ! optimization 247 zweight(ji,jj,jk) = 0._wp 248 ELSE 249 zweight(ji,jj,jk) = rn2(ji,jj,jk) * hbot_iwm(ji,jj) & 250 & * ( EXP( -zwkb(ji,jj,jk) / hbot_iwm(ji,jj) ) - EXP( -zwkb(ji,jj,jk-1) / hbot_iwm(ji,jj) ) ) 251 ENDIF 252 END DO 253 END DO 240 254 END DO 241 255 ! … … 305 319 END DO 306 320 END DO 307 IF( lk_mpp ) CALL mpp_sum(zztmp )321 CALL mpp_sum( 'zdfiwm', zztmp ) 308 322 zztmp = rau0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing 309 323 ! … … 322 336 ! 323 337 IF( ln_tsdiff ) THEN !* Option for differential mixing of salinity and temperature 338 ztmp1 = 0.505_wp + 0.495_wp * TANH( 0.92_wp * ( LOG10( 1.e-20_wp ) - 0.60_wp ) ) 324 339 DO jk = 2, jpkm1 ! Calculate S/T diffusivity ratio as a function of Reb 325 340 DO jj = 1, jpj 326 341 DO ji = 1, jpi 327 zav_ratio(ji,jj,jk) = ( 0.505_wp + 0.495_wp * & 328 & TANH( 0.92_wp * ( LOG10( MAX( 1.e-20_wp, zReb(ji,jj,jk) * 5._wp * r1_6 ) ) - 0.60_wp ) ) & 329 & ) * wmask(ji,jj,jk) 342 ztmp2 = zReb(ji,jj,jk) * 5._wp * r1_6 343 IF ( ztmp2 > 1.e-20_wp .AND. wmask(ji,jj,jk) == 1._wp ) THEN 344 zav_ratio(ji,jj,jk) = 0.505_wp + 0.495_wp * TANH( 0.92_wp * ( LOG10(ztmp2) - 0.60_wp ) ) 345 ELSE 346 zav_ratio(ji,jj,jk) = ztmp1 * wmask(ji,jj,jk) 347 ENDIF 330 348 END DO 331 349 END DO … … 463 481 ecri_iwm(:,:) = ecri_iwm(:,:) * ssmask(:,:) 464 482 465 zbot = glob_sum( e1e2t(:,:) * ebot_iwm(:,:) )466 zpyc = glob_sum( e1e2t(:,:) * epyc_iwm(:,:) )467 zcri = glob_sum( e1e2t(:,:) * ecri_iwm(:,:) )483 zbot = glob_sum( 'zdfiwm', e1e2t(:,:) * ebot_iwm(:,:) ) 484 zpyc = glob_sum( 'zdfiwm', e1e2t(:,:) * epyc_iwm(:,:) ) 485 zcri = glob_sum( 'zdfiwm', e1e2t(:,:) * ecri_iwm(:,:) ) 468 486 IF(lwp) THEN 469 487 WRITE(numout,*) ' High-mode wave-breaking energy: ', zbot * 1.e-12_wp, 'TW'
Note: See TracChangeset
for help on using the changeset viewer.