Changeset 7753 for trunk/NEMOGCM/NEMO/OPA_SRC/ZDF
- Timestamp:
- 2017-03-03T12:46:59+01:00 (7 years ago)
- Location:
- trunk/NEMOGCM/NEMO/OPA_SRC/ZDF
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90
r7698 r7753 106 106 IF ( ln_loglayer.AND. .NOT.ln_linssh ) THEN ! "log layer" bottom friction coefficient 107 107 108 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbt,ztmp)109 108 DO jj = 1, jpj 110 109 DO ji = 1, jpi … … 118 117 ! (ISF) 119 118 IF ( ln_isfcav ) THEN 120 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbt,ztmp)121 119 DO jj = 1, jpj 122 120 DO ji = 1, jpi … … 131 129 ! 132 130 ELSE 133 !$OMP PARALLEL DO schedule(static) private(jj,ji) 134 DO jj = 1, jpj 135 DO ji = 1, jpi 136 zbfrt(ji,jj) = bfrcoef2d(ji,jj) 137 ztfrt(ji,jj) = tfrcoef2d(ji,jj) 138 END DO 139 END DO 140 ENDIF 141 142 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbu,ikbv,zvu,zuv,zecu,zecv) 131 zbfrt(:,:) = bfrcoef2d(:,:) 132 ztfrt(:,:) = tfrcoef2d(:,:) 133 ENDIF 134 143 135 DO jj = 2, jpjm1 144 136 DO ji = 2, jpim1 … … 175 167 176 168 IF( ln_isfcav ) THEN 177 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbu,ikbv,zvu,zuv,zecu,zecv)178 169 DO jj = 2, jpjm1 179 170 DO ji = 2, jpim1 … … 269 260 CASE( 0 ) 270 261 IF(lwp) WRITE(numout,*) ' free-slip ' 271 !$OMP PARALLEL DO schedule(static) private(jj,ji) 272 DO jj = 1, jpj 273 DO ji = 1, jpi 274 bfrua(ji,jj) = 0.e0 275 bfrva(ji,jj) = 0.e0 276 tfrua(ji,jj) = 0.e0 277 tfrva(ji,jj) = 0.e0 278 END DO 279 END DO 262 bfrua(:,:) = 0._wp 263 bfrva(:,:) = 0._wp 264 tfrua(:,:) = 0._wp 265 tfrva(:,:) = 0._wp 280 266 ! 281 267 CASE( 1 ) … … 299 285 CALL iom_get (inum, jpdom_data, 'bfr_coef',bfrcoef2d,1) ! bfrcoef2d is used as tmp array 300 286 CALL iom_close(inum) 301 !$OMP PARALLEL DO schedule(static) private(jj,ji) 302 DO jj = 1, jpj 303 DO ji = 1, jpi 304 bfrcoef2d(ji,jj) = rn_bfri1 * ( 1 + rn_bfrien * bfrcoef2d(ji,jj) ) 305 END DO 306 END DO 287 bfrcoef2d(:,:) = rn_bfri1 * ( 1 + rn_bfrien * bfrcoef2d(:,:) ) 307 288 ELSE 308 !$OMP PARALLEL DO schedule(static) private(jj,ji) 309 DO jj = 1, jpj 310 DO ji = 1, jpi 311 bfrcoef2d(ji,jj) = rn_bfri1 ! initialize bfrcoef2d to the namelist variable 312 END DO 313 END DO 314 ENDIF 315 ! 316 !$OMP PARALLEL DO schedule(static) private(jj,ji) 317 DO jj = 1, jpj 318 DO ji = 1, jpi 319 bfrua(ji,jj) = - bfrcoef2d(ji,jj) 320 bfrva(ji,jj) = - bfrcoef2d(ji,jj) 321 END DO 322 END DO 289 bfrcoef2d(:,:) = rn_bfri1 ! initialize bfrcoef2d to the namelist variable 290 ENDIF 291 ! 292 bfrua(:,:) = - bfrcoef2d(:,:) 293 bfrva(:,:) = - bfrcoef2d(:,:) 323 294 ! 324 295 IF ( ln_isfcav ) THEN … … 328 299 CALL iom_get (inum, jpdom_data, 'tfr_coef',tfrcoef2d,1) ! tfrcoef2d is used as tmp array 329 300 CALL iom_close(inum) 330 !$OMP PARALLEL DO schedule(static) private(jj,ji) 331 DO jj = 1, jpj 332 DO ji = 1, jpi 333 tfrcoef2d(ji,jj) = rn_tfri1 * ( 1 + rn_tfrien * tfrcoef2d(ji,jj) ) 334 END DO 335 END DO 301 tfrcoef2d(:,:) = rn_tfri1 * ( 1 + rn_tfrien * tfrcoef2d(:,:) ) 336 302 ELSE 337 !$OMP PARALLEL DO schedule(static) private(jj,ji) 338 DO jj = 1, jpj 339 DO ji = 1, jpi 340 tfrcoef2d(ji,jj) = rn_tfri1 ! initialize tfrcoef2d to the namelist variable 341 END DO 342 END DO 303 tfrcoef2d(:,:) = rn_tfri1 ! initialize tfrcoef2d to the namelist variable 343 304 ENDIF 344 305 ! 345 !$OMP PARALLEL DO schedule(static) private(jj,ji) 346 DO jj = 1, jpj 347 DO ji = 1, jpi 348 tfrua(ji,jj) = - tfrcoef2d(ji,jj) 349 tfrva(ji,jj) = - tfrcoef2d(ji,jj) 350 END DO 351 END DO 306 tfrua(:,:) = - tfrcoef2d(:,:) 307 tfrva(:,:) = - tfrcoef2d(:,:) 352 308 END IF 353 309 ! … … 390 346 CALL iom_close(inum) 391 347 ! 392 !$OMP PARALLEL DO schedule(static) private(jj,ji) 393 DO jj = 1, jpj 394 DO ji = 1, jpi 395 bfrcoef2d(ji,jj) = rn_bfri2 * ( 1 + rn_bfrien * bfrcoef2d(ji,jj) ) 396 END DO 397 END DO 348 bfrcoef2d(:,:) = rn_bfri2 * ( 1 + rn_bfrien * bfrcoef2d(:,:) ) 398 349 ELSE 399 !$OMP PARALLEL DO schedule(static) private(jj,ji) 400 DO jj = 1, jpj 401 DO ji = 1, jpi 402 bfrcoef2d(ji,jj) = rn_bfri2 ! initialize bfrcoef2d to the namelist variable 403 END DO 404 END DO 350 bfrcoef2d(:,:) = rn_bfri2 ! initialize bfrcoef2d to the namelist variable 405 351 ENDIF 406 352 … … 412 358 CALL iom_close(inum) 413 359 ! 414 !$OMP PARALLEL DO schedule(static) private(jj,ji) 415 DO jj = 1, jpj 416 DO ji = 1, jpi 417 tfrcoef2d(ji,jj) = rn_tfri2 * ( 1 + rn_tfrien * tfrcoef2d(ji,jj) ) 418 END DO 419 END DO 360 tfrcoef2d(:,:) = rn_tfri2 * ( 1 + rn_tfrien * tfrcoef2d(:,:) ) 420 361 ELSE 421 !$OMP PARALLEL DO schedule(static) private(jj,ji) 422 DO jj = 1, jpj 423 DO ji = 1, jpi 424 tfrcoef2d(ji,jj) = rn_tfri2 ! initialize tfrcoef2d to the namelist variable 425 END DO 426 END DO 362 tfrcoef2d(:,:) = rn_tfri2 ! initialize tfrcoef2d to the namelist variable 427 363 ENDIF 428 364 END IF 429 365 ! 430 366 IF( ln_loglayer.AND. ln_linssh ) THEN ! set "log layer" bottom friction once for all 431 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbt,ztmp)432 367 DO jj = 1, jpj 433 368 DO ji = 1, jpi … … 439 374 END DO 440 375 IF ( ln_isfcav ) THEN 441 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbt,ztmp)442 376 DO jj = 1, jpj 443 377 DO ji = 1, jpi … … 479 413 zmaxtfr = -1.e10_wp ! initialise tracker for maximum of bottom friction coefficient 480 414 ! 481 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbu,ikbv,zfru,zfrv,ictu,ictv,zminbfr,zmaxbfr,zmintfr,zmaxtfr)482 415 DO jj = 2, jpjm1 483 416 DO ji = 2, jpim1 -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90
r7698 r7753 112 112 ! Define the mask 113 113 ! --------------- 114 !$OMP PARALLEL115 !$OMP DO schedule(static) private(jj,ji,zrw,zaw,zbw,zdt,zds)116 114 DO jj = 1, jpj ! R=zrau = (alpha / beta) (dk[t] / dk[s]) 117 115 DO ji = 1, jpi … … 130 128 END DO 131 129 END DO 132 !$OMP END DO NOWAIT 133 134 !$OMP DO schedule(static) private(jj,ji) 130 135 131 DO jj = 1, jpj ! indicators: 136 132 DO ji = 1, jpi … … 159 155 END DO 160 156 ! mask zmsk in order to have avt and avs masked 161 162 !$OMP DO schedule(static) private(jj,ji) 163 DO jj = 1, jpj 164 DO ji = 1, jpi 165 zmsks(ji,jj) = zmsks(ji,jj) * wmask(ji,jj,jk) 166 END DO 167 END DO 157 zmsks(:,:) = zmsks(:,:) * wmask(:,:,jk) 158 168 159 169 160 ! Update avt and avs 170 161 ! ------------------ 171 162 ! Constant eddy coefficient: reset to the background value 172 !$OMP DO schedule(static) private(jj,ji,zinr,zrr,zavfs,zavft,zavdt,zavds)173 163 DO jj = 1, jpj 174 164 DO ji = 1, jpi … … 199 189 ! -------------------------------- 200 190 !!gm to be changed following the definition of avm. 201 !$OMP DO schedule(static) private(jj,ji)202 191 DO jj = 1, jpjm1 203 192 DO ji = 1, fs_jpim1 ! vector opt. … … 210 199 END DO 211 200 END DO 212 !$OMP END DO NOWAIT213 !$OMP END PARALLEL214 201 ! ! =============== 215 202 END DO ! End of slab … … 245 232 !!---------------------------------------------------------------------- 246 233 INTEGER :: ios ! local integer 247 INTEGER :: ji, jj , jk ! dummy loop indices248 234 !! 249 235 NAMELIST/namzdf_ddm/ rn_avts, rn_hsbfr … … 271 257 IF( zdf_ddm_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'zdf_ddm_init : unable to allocate arrays' ) 272 258 ! ! initialization to masked Kz 273 !$OMP DO schedule(static) private(jk,jj,ji) 274 DO jk = 1, jpk 275 DO jj = 1, jpj 276 DO ji = 1, jpi 277 avs(ji,jj,jk) = rn_avt0 * wmask(ji,jj,jk) 278 END DO 279 END DO 280 END DO 259 avs(:,:,:) = rn_avt0 * wmask(:,:,:) 281 260 ! 282 261 END SUBROUTINE zdf_ddm_init -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90
r7698 r7753 70 70 CALL wrk_alloc( jpi,jpj,jpk, zavt_evd, zavm_evd ) 71 71 ! 72 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 73 DO jk = 1, jpk 74 DO jj = 1, jpj 75 DO ji = 1, jpi 76 zavt_evd(ji,jj,jk) = avt(ji,jj,jk) ! set avt prior to evd application 77 END DO 78 END DO 79 END DO 72 zavt_evd(:,:,:) = avt(:,:,:) ! set avt prior to evd application 80 73 ! 81 74 SELECT CASE ( nn_evdm ) … … 83 76 CASE ( 1 ) ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12) 84 77 ! 85 !$OMP PARALLEL 86 !$OMP DO schedule(static) private(jk, jj, ji) 87 DO jk = 1, jpk 88 DO jj = 1, jpj 89 DO ji = 1, jpi 90 zavm_evd(ji,jj,jk) = avm(ji,jj,jk) ! set avm prior to evd application 91 END DO 92 END DO 93 END DO 78 zavm_evd(:,:,:) = avm(:,:,:) ! set avm prior to evd application 94 79 ! 95 !$OMP DO schedule(static) private(jk, jj, ji)96 80 DO jk = 1, jpkm1 97 81 DO jj = 2, jpj ! no vector opt. … … 108 92 END DO 109 93 END DO 110 !$OMP END PARALLEL111 94 CALL lbc_lnk( avt , 'W', 1. ) ; CALL lbc_lnk( avm , 'W', 1. ) ! Lateral boundary conditions 112 95 CALL lbc_lnk( avmu, 'U', 1. ) ; CALL lbc_lnk( avmv, 'V', 1. ) 113 96 ! 114 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 115 DO jk = 1, jpk 116 DO jj = 1, jpj 117 DO ji = 1, jpi 118 zavm_evd(ji,jj,jk) = avm(ji,jj,jk) - zavm_evd(ji,jj,jk) ! change in avm due to evd 119 END DO 120 END DO 121 END DO 97 zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:) ! change in avm due to evd 122 98 CALL iom_put( "avm_evd", zavm_evd ) ! output this change 123 99 ! 124 100 CASE DEFAULT ! enhance vertical eddy diffusivity only (if rn2<-1.e-12) 125 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji)126 101 DO jk = 1, jpkm1 127 102 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd ! agissant sur T SEUL! … … 136 111 END SELECT 137 112 138 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 139 DO jk = 1, jpk 140 DO jj = 1, jpj 141 DO ji = 1, jpi 142 zavt_evd(ji,jj,jk) = avt(ji,jj,jk) - zavt_evd(ji,jj,jk) ! change in avt due to evd 143 END DO 144 END DO 145 END DO 113 zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:) ! change in avt due to evd 146 114 CALL iom_put( "avt_evd", zavt_evd ) ! output this change 147 115 IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd ) -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90
r7698 r7753 96 96 97 97 ! w-level of the mixing and mixed layers 98 zN2_c = grav * rho_c * r1_rau0 ! convert density criteria into N^2 criteria 99 !$OMP PARALLEL 100 !$OMP DO schedule(static) private(jj, ji) 101 DO jj = 1, jpj 102 DO ji = 1, jpi 103 nmln(ji,jj) = nlb10 ! Initialization to the number of w ocean point 104 hmlp(ji,jj) = 0._wp ! here hmlp used as a dummy variable, integrating vertically N^2 105 END DO 106 END DO 98 nmln(:,:) = nlb10 ! Initialization to the number of w ocean point 99 hmlp(:,:) = 0._wp ! here hmlp used as a dummy variable, integrating vertically N^2 100 zN2_c = grav * rho_c * r1_rau0 ! convert density criteria into N^2 criteria 107 101 DO jk = nlb10, jpkm1 108 !$OMP DO schedule(static) private(jj, ji, ikt)109 102 DO jj = 1, jpj ! Mixed layer level: w-level 110 103 DO ji = 1, jpi … … 117 110 ! 118 111 ! w-level of the turbocline and mixing layer (iom_use) 119 !$OMP DO schedule(static) private(jj, ji) 120 DO jj = 1, jpj 121 DO ji = 1, jpi 122 imld(ji,jj) = mbkt(ji,jj) + 1 ! Initialization to the number of w ocean point 123 END DO 124 END DO 112 imld(:,:) = mbkt(:,:) + 1 ! Initialization to the number of w ocean point 125 113 DO jk = jpkm1, nlb10, -1 ! from the bottom to nlb10 126 !$OMP DO schedule(static) private(jj, ji)127 114 DO jj = 1, jpj 128 115 DO ji = 1, jpi … … 132 119 END DO 133 120 ! depth of the mixing and mixed layers 134 !$OMP DO schedule(static) private(jj, ji, iiki, iikn)135 121 DO jj = 1, jpj 136 122 DO ji = 1, jpi … … 142 128 END DO 143 129 END DO 144 !$OMP END PARALLEL145 130 ! 146 131 IF( .NOT.l_offline ) THEN -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
r7698 r7753 171 171 !!---------------------------------------------------------------------- 172 172 INTEGER, INTENT(in) :: kt ! ocean time step 173 INTEGER :: jk, jj, ji174 173 !!---------------------------------------------------------------------- 175 174 ! … … 180 179 ! 181 180 IF( kt /= nit000 ) THEN ! restore before value to compute tke 182 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 183 DO jk = 1, jpk 184 DO jj = 1, jpj 185 DO ji = 1, jpi 186 avt (ji,jj,jk) = avt_k (ji,jj,jk) 187 avm (ji,jj,jk) = avm_k (ji,jj,jk) 188 avmu(ji,jj,jk) = avmu_k(ji,jj,jk) 189 avmv(ji,jj,jk) = avmv_k(ji,jj,jk) 190 END DO 191 END DO 192 END DO 181 avt (:,:,:) = avt_k (:,:,:) 182 avm (:,:,:) = avm_k (:,:,:) 183 avmu(:,:,:) = avmu_k(:,:,:) 184 avmv(:,:,:) = avmv_k(:,:,:) 193 185 ENDIF 194 186 ! … … 197 189 CALL tke_avn ! now avt, avm, avmu, avmv 198 190 ! 199 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 200 DO jk = 1, jpk 201 DO jj = 1, jpj 202 DO ji = 1, jpi 203 avt_k (ji,jj,jk) = avt (ji,jj,jk) 204 avm_k (ji,jj,jk) = avm (ji,jj,jk) 205 avmu_k(ji,jj,jk) = avmu(ji,jj,jk) 206 avmv_k(ji,jj,jk) = avmv(ji,jj,jk) 207 END DO 208 END DO 209 END DO 191 avt_k (:,:,:) = avt (:,:,:) 192 avm_k (:,:,:) = avm (:,:,:) 193 avmu_k(:,:,:) = avmu(:,:,:) 194 avmv_k(:,:,:) = avmv(:,:,:) 210 195 ! 211 196 #if defined key_agrif … … 268 253 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 269 254 IF ( ln_isfcav ) THEN 270 !$OMP PARALLEL DO schedule(static) private(jj, ji)271 255 DO jj = 2, jpjm1 ! en(mikt(ji,jj)) = rn_emin 272 256 DO ji = fs_2, fs_jpim1 ! vector opt. … … 275 259 END DO 276 260 END IF 277 !$OMP PARALLEL DO schedule(static) private(jj, ji)278 261 DO jj = 2, jpjm1 ! en(1) = rn_ebb taum / rau0 (min value rn_emin0) 279 262 DO ji = fs_2, fs_jpim1 ! vector opt. … … 310 293 ! 311 294 ! !* total energy produce by LC : cumulative sum over jk 312 !$OMP PARALLEL 313 !$OMP DO schedule(static) private(jj, ji) 314 DO jj =1, jpj 315 DO ji=1, jpi 316 zpelc(ji,jj,1) = MAX( rn2b(ji,jj,1), 0._wp ) * gdepw_n(ji,jj,1) * e3w_n(ji,jj,1) 317 END DO 318 END DO 295 zpelc(:,:,1) = MAX( rn2b(:,:,1), 0._wp ) * gdepw_n(:,:,1) * e3w_n(:,:,1) 319 296 DO jk = 2, jpk 320 !$OMP DO schedule(static) private(jj, ji) 321 DO jj =1, jpj 322 DO ji=1, jpi 323 zpelc(ji,jj,jk) = zpelc(ji,jj,jk-1) + MAX( rn2b(ji,jj,jk), 0._wp ) * gdepw_n(ji,jj,jk) * e3w_n(ji,jj,jk) 324 END DO 325 END DO 297 zpelc(:,:,jk) = zpelc(:,:,jk-1) + MAX( rn2b(:,:,jk), 0._wp ) * gdepw_n(:,:,jk) * e3w_n(:,:,jk) 326 298 END DO 327 299 ! !* finite Langmuir Circulation depth 328 300 zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 329 !$OMP DO schedule(static) private(jj,ji) 330 DO jj = 1, jpj 331 DO ji = 1, jpi 332 imlc(ji,jj) = mbkt(ji,jj) + 1 ! Initialization to the number of w ocean point (=2 over land) 333 END DO 334 END DO 301 imlc(:,:) = mbkt(:,:) + 1 ! Initialization to the number of w ocean point (=2 over land) 335 302 DO jk = jpkm1, 2, -1 336 !$OMP DO schedule(static) private(jj, ji, zus)337 303 DO jj = 1, jpj ! Last w-level at which zpelc>=0.5*us*us 338 304 DO ji = 1, jpi ! with us=0.016*wind(starting from jpk-1) … … 343 309 END DO 344 310 ! ! finite LC depth 345 !$OMP DO schedule(static) private(jj, ji)346 311 DO jj = 1, jpj 347 312 DO ji = 1, jpi … … 350 315 END DO 351 316 zcof = 0.016 / SQRT( zrhoa * zcdrag ) 352 !$OMP DO schedule(static) private(jk, jj, ji, zus, zind, zwlc)353 317 DO jk = 2, jpkm1 !* TKE Langmuir circulation source term added to en 354 318 DO jj = 2, jpjm1 … … 364 328 END DO 365 329 END DO 366 !$OMP END PARALLEL367 330 ! 368 331 ENDIF … … 375 338 ! ! zdiag : diagonal zd_up : upper diagonal zd_lw : lower diagonal 376 339 ! 377 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji)378 340 DO jk = 2, jpkm1 !* Shear production at uw- and vw-points (energy conserving form) 379 341 DO jj = 1, jpjm1 … … 394 356 ! Note that zesh2 is also computed in the next loop. 395 357 ! We decided to compute it twice to keep code readability and avoid an IF case in the DO loops 396 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zesh2, zri)397 358 DO jk = 2, jpkm1 398 359 DO jj = 2, jpjm1 … … 411 372 ENDIF 412 373 ! 413 !$OMP PARALLEL414 !$OMP DO schedule(static) private(jk, jj, ji, zcof, zzd_up, zzd_lw, zesh2)415 374 DO jk = 2, jpkm1 !* Matrix and right hand side in en 416 375 DO jj = 2, jpjm1 … … 446 405 ! !* Matrix inversion from level 2 (tke prescribed at level 1) 447 406 DO jk = 3, jpkm1 ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 448 !$OMP DO schedule(static) private(jj, ji)449 407 DO jj = 2, jpjm1 450 408 DO ji = fs_2, fs_jpim1 ! vector opt. … … 453 411 END DO 454 412 END DO 455 !$OMP DO schedule(static) private(jj, ji)456 413 DO jj = 2, jpjm1 ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 457 414 DO ji = fs_2, fs_jpim1 ! vector opt. … … 460 417 END DO 461 418 DO jk = 3, jpkm1 462 !$OMP DO schedule(static) private(jj, ji)463 419 DO jj = 2, jpjm1 464 420 DO ji = fs_2, fs_jpim1 ! vector opt. … … 467 423 END DO 468 424 END DO 469 !$OMP DO schedule(static) private(jj, ji)470 425 DO jj = 2, jpjm1 ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 471 426 DO ji = fs_2, fs_jpim1 ! vector opt. … … 474 429 END DO 475 430 DO jk = jpk-2, 2, -1 476 !$OMP DO schedule(static) private(jj, ji)477 431 DO jj = 2, jpjm1 478 432 DO ji = fs_2, fs_jpim1 ! vector opt. … … 481 435 END DO 482 436 END DO 483 !$OMP DO schedule(static) private(jk,jj, ji)484 437 DO jk = 2, jpkm1 ! set the minimum value of tke 485 438 DO jj = 2, jpjm1 … … 489 442 END DO 490 443 END DO 491 !$OMP END PARALLEL492 444 493 445 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< … … 498 450 499 451 IF( nn_etau == 1 ) THEN !* penetration below the mixed layer (rn_efr fraction) 500 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji)501 452 DO jk = 2, jpkm1 502 453 DO jj = 2, jpjm1 … … 508 459 END DO 509 460 ELSEIF( nn_etau == 2 ) THEN !* act only at the base of the mixed layer (jk=nmln) (rn_efr fraction) 510 !$OMP PARALLEL DO schedule(static) private(jj, ji, jk)511 461 DO jj = 2, jpjm1 512 462 DO ji = fs_2, fs_jpim1 ! vector opt. … … 517 467 END DO 518 468 ELSEIF( nn_etau == 3 ) THEN !* penetration belox the mixed layer (HF variability) 519 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ztx2, zty2, ztau, zdif)520 469 DO jk = 2, jpkm1 521 470 DO jj = 2, jpjm1 … … 596 545 ! 597 546 ! initialisation of interior minimum value (avoid a 2d loop with mikt) 598 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 599 DO jk = 1, jpk 600 DO jj = 1, jpj 601 DO ji = 1, jpi 602 zmxlm(ji,jj,jk) = rmxl_min 603 zmxld(ji,jj,jk) = rmxl_min 604 END DO 605 END DO 606 END DO 547 zmxlm(:,:,:) = rmxl_min 548 zmxld(:,:,:) = rmxl_min 607 549 ! 608 550 IF( ln_mxl0 ) THEN ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 609 !$OMP PARALLEL DO schedule(static) private(jj, ji, zraug)610 551 DO jj = 2, jpjm1 611 552 DO ji = fs_2, fs_jpim1 … … 615 556 END DO 616 557 ELSE 617 !$OMP PARALLEL DO schedule(static) private(jj,ji) 618 DO jj = 1, jpj 619 DO ji = 1, jpi 620 zmxlm(ji,jj,1) = rn_mxl0 621 END DO 622 END DO 558 zmxlm(:,:,1) = rn_mxl0 623 559 ENDIF 624 560 ! 625 !$OMP PARALLEL626 !$OMP DO schedule(static) private(jk, jj, ji, zrn2)627 561 DO jk = 2, jpkm1 ! interior value : l=sqrt(2*e/n^2) 628 562 DO jj = 2, jpjm1 … … 636 570 ! !* Physical limits for the mixing length 637 571 ! 638 !$OMP DO schedule(static) private(jj,ji) 639 DO jj = 1, jpj 640 DO ji = 1, jpi 641 zmxld(ji,jj, 1 ) = zmxlm(ji,jj,1) ! surface set to the minimum value 642 zmxld(ji,jj,jpk) = rmxl_min ! last level set to the minimum value 643 END DO 644 END DO 645 !$OMP END PARALLEL 572 zmxld(:,:, 1 ) = zmxlm(:,:,1) ! surface set to the minimum value 573 zmxld(:,:,jpk) = rmxl_min ! last level set to the minimum value 646 574 ! 647 575 SELECT CASE ( nn_mxl ) … … 650 578 ! where wmask = 0 set zmxlm == e3w_n 651 579 CASE ( 0 ) ! bounded by the distance to surface and bottom 652 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl)653 580 DO jk = 2, jpkm1 654 581 DO jj = 2, jpjm1 … … 664 591 ! 665 592 CASE ( 1 ) ! bounded by the vertical scale factor 666 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl)667 593 DO jk = 2, jpkm1 668 594 DO jj = 2, jpjm1 … … 676 602 ! 677 603 CASE ( 2 ) ! |dk[xml]| bounded by e3t : 678 !$OMP PARALLEL679 604 DO jk = 2, jpkm1 ! from the surface to the bottom : 680 !$OMP DO schedule(static) private(jj, ji)681 605 DO jj = 2, jpjm1 682 606 DO ji = fs_2, fs_jpim1 ! vector opt. … … 686 610 END DO 687 611 DO jk = jpkm1, 2, -1 ! from the bottom to the surface : 688 !$OMP DO schedule(static) private(jj, ji, zemxl)689 612 DO jj = 2, jpjm1 690 613 DO ji = fs_2, fs_jpim1 ! vector opt. … … 695 618 END DO 696 619 END DO 697 !$OMP END PARALLEL698 620 ! 699 621 CASE ( 3 ) ! lup and ldown, |dk[xml]| bounded by e3t : 700 !$OMP PARALLEL701 622 DO jk = 2, jpkm1 ! from the surface to the bottom : lup 702 !$OMP DO schedule(static) private(jj, ji)703 623 DO jj = 2, jpjm1 704 624 DO ji = fs_2, fs_jpim1 ! vector opt. … … 708 628 END DO 709 629 DO jk = jpkm1, 2, -1 ! from the bottom to the surface : ldown 710 !$OMP DO schedule(static) private(jj, ji)711 630 DO jj = 2, jpjm1 712 631 DO ji = fs_2, fs_jpim1 ! vector opt. … … 715 634 END DO 716 635 END DO 717 !$OMP DO schedule(static) private(jk, jj, ji, zemlm, zemlp)718 636 DO jk = 2, jpkm1 719 637 DO jj = 2, jpjm1 … … 726 644 END DO 727 645 END DO 728 !$OMP END PARALLEL729 646 ! 730 647 END SELECT 731 648 ! 732 649 # if defined key_c1d 733 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 734 DO jk = 1, jpk 735 DO jj = 1, jpj 736 DO ji = 1, jpi 737 e_dis(ji,jj,jk) = zmxld(ji,jj,jk) ! c1d configuration : save mixing and dissipation turbulent length scales 738 e_mix(ji,jj,jk) = zmxlm(ji,jj,jk) 739 END DO 740 END DO 741 END DO 650 e_dis(:,:,:) = zmxld(:,:,:) ! c1d configuration : save mixing and dissipation turbulent length scales 651 e_mix(:,:,:) = zmxlm(:,:,:) 742 652 # endif 743 653 … … 745 655 ! ! Vertical eddy viscosity and diffusivity (avmu, avmv, avt) 746 656 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 747 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zsqen, zav)748 657 DO jk = 1, jpkm1 !* vertical eddy viscosity & diffivity at w-points 749 658 DO jj = 2, jpjm1 … … 759 668 CALL lbc_lnk( avm, 'W', 1. ) ! Lateral boundary conditions (sign unchanged) 760 669 ! 761 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji)762 670 DO jk = 2, jpkm1 !* vertical eddy viscosity at wu- and wv-points 763 671 DO jj = 2, jpjm1 … … 771 679 ! 772 680 IF( nn_pdl == 1 ) THEN !* Prandtl number case: update avt 773 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji)774 681 DO jk = 2, jpkm1 775 682 DO jj = 2, jpjm1 … … 891 798 SELECT CASE( nn_htau ) ! Choice of the depth of penetration 892 799 CASE( 0 ) ! constant depth penetration (here 10 meters) 893 !$OMP PARALLEL DO schedule(static) private(jj,ji) 894 DO jj = 1, jpj 895 DO ji = 1, jpi 896 htau(ji,jj) = 10._wp 897 END DO 898 END DO 800 htau(:,:) = 10._wp 899 801 CASE( 1 ) ! F(latitude) : 0.5m to 30m poleward of 40 degrees 900 !$OMP PARALLEL DO schedule(static) private(jj,ji) 901 DO jj = 1, jpj 902 DO ji = 1, jpi 903 htau(ji,jj) = MAX( 0.5_wp, MIN( 30._wp, 45._wp* ABS( SIN( rpi/180._wp * gphit(ji,jj) ) ) ) ) 904 END DO 905 END DO 802 htau(:,:) = MAX( 0.5_wp, MIN( 30._wp, 45._wp* ABS( SIN( rpi/180._wp * gphit(:,:) ) ) ) ) 906 803 END SELECT 907 804 ENDIF 908 805 ! !* set vertical eddy coef. to the background value 909 !$OMP PARALLEL910 !$OMP DO schedule(static) private(jk,jj,ji)911 806 DO jk = 1, jpk 912 DO jj = 1, jpj 913 DO ji = 1, jpi 914 avt (ji,jj,jk) = avtb(jk) * wmask (ji,jj,jk) 915 avm (ji,jj,jk) = avmb(jk) * wmask (ji,jj,jk) 916 avmu(ji,jj,jk) = avmb(jk) * wumask(ji,jj,jk) 917 avmv(ji,jj,jk) = avmb(jk) * wvmask(ji,jj,jk) 918 END DO 919 END DO 920 END DO 921 !$OMP END DO NOWAIT 922 !$OMP DO schedule(static) private(jk,jj,ji) 923 DO jk = 1, jpk 924 DO jj = 1, jpj 925 DO ji = 1, jpi 926 dissl(ji,jj,jk) = 1.e-12_wp 927 END DO 928 END DO 929 END DO 930 !$OMP END PARALLEL 807 avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 808 avm (:,:,jk) = avmb(jk) * wmask (:,:,jk) 809 avmu(:,:,jk) = avmb(jk) * wumask(:,:,jk) 810 avmv(:,:,jk) = avmb(jk) * wvmask(:,:,jk) 811 END DO 812 dissl(:,:,:) = 1.e-12_wp 931 813 ! 932 814 CALL tke_rst( nit000, 'READ' ) !* read or initialize all required files … … 948 830 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 949 831 ! 950 INTEGER :: jit, jk , jj, ji! dummy loop indices832 INTEGER :: jit, jk ! dummy loop indices 951 833 INTEGER :: id1, id2, id3, id4, id5, id6 ! local integers 952 834 !!---------------------------------------------------------------------- … … 975 857 ELSE ! No TKE array found: initialisation 976 858 IF(lwp) WRITE(numout,*) ' ===>>>> : previous run without tke scheme, en computed by iterative loop' 977 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 978 DO jk = 1, jpk 979 DO jj = 1, jpj 980 DO ji = 1, jpi 981 en (ji,jj,jk) = rn_emin * tmask(ji,jj,jk) 982 END DO 983 END DO 984 END DO 859 en (:,:,:) = rn_emin * tmask(:,:,:) 985 860 CALL tke_avn ! recompute avt, avm, avmu, avmv and dissl (approximation) 986 861 ! 987 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 988 DO jk = 1, jpk 989 DO jj = 1, jpj 990 DO ji = 1, jpi 991 avt_k (ji,jj,jk) = avt (ji,jj,jk) 992 avm_k (ji,jj,jk) = avm (ji,jj,jk) 993 avmu_k(ji,jj,jk) = avmu(ji,jj,jk) 994 avmv_k(ji,jj,jk) = avmv(ji,jj,jk) 995 END DO 996 END DO 997 END DO 862 avt_k (:,:,:) = avt (:,:,:) 863 avm_k (:,:,:) = avm (:,:,:) 864 avmu_k(:,:,:) = avmu(:,:,:) 865 avmv_k(:,:,:) = avmv(:,:,:) 998 866 ! 999 867 DO jit = nit000 + 1, nit000 + 10 ; CALL zdf_tke( jit ) ; END DO 1000 868 ENDIF 1001 869 ELSE !* Start from rest 1002 !$OMP PARALLEL 1003 !$OMP DO schedule(static) private(jk,jj,ji) 1004 DO jk = 1, jpk 1005 DO jj = 1, jpj 1006 DO ji = 1, jpi 1007 en(ji,jj,jk) = rn_emin * tmask(ji,jj,jk) 1008 END DO 1009 END DO 870 en(:,:,:) = rn_emin * tmask(:,:,:) 871 DO jk = 1, jpk ! set the Kz to the background value 872 avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 873 avm (:,:,jk) = avmb(jk) * wmask (:,:,jk) 874 avmu(:,:,jk) = avmb(jk) * wumask(:,:,jk) 875 avmv(:,:,jk) = avmb(jk) * wvmask(:,:,jk) 1010 876 END DO 1011 !$OMP END DO NOWAIT1012 !$OMP DO schedule(static) private(jk)1013 DO jk = 1, jpk ! set the Kz to the background value1014 DO jj = 1, jpj1015 DO ji = 1, jpi1016 avt (ji,jj,jk) = avtb(jk) * wmask (ji,jj,jk)1017 avm (ji,jj,jk) = avmb(jk) * wmask (ji,jj,jk)1018 avmu(ji,jj,jk) = avmb(jk) * wumask(ji,jj,jk)1019 avmv(ji,jj,jk) = avmb(jk) * wvmask(ji,jj,jk)1020 END DO1021 END DO1022 END DO1023 !$OMP END PARALLEL1024 877 ENDIF 1025 878 ! -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90
r7698 r7753 121 121 ! ! ----------------------- ! 122 122 ! !* First estimation (with n2 bound by rn_n2min) bounded by 60 cm2/s 123 !$OMP PARALLEL 124 !$OMP DO schedule(static) private(jk,jj,ji) 125 DO jk = 1, jpk 126 DO jj = 1, jpj 127 DO ji = 1, jpi 128 zav_tide(ji,jj,jk) = MIN( 60.e-4, az_tmx(ji,jj,jk) / MAX( rn_n2min, rn2(ji,jj,jk) ) ) 129 END DO 130 END DO 131 END DO 132 !$OMP END DO NOWAIT 133 134 !$OMP DO schedule(static) private(jj, ji) 135 DO jj = 1, jpj 136 DO ji = 1, jpi 137 zkz(ji,jj) = 0.e0 !* Associated potential energy consummed over the whole water column 138 END DO 139 END DO 123 zav_tide(:,:,:) = MIN( 60.e-4, az_tmx(:,:,:) / MAX( rn_n2min, rn2(:,:,:) ) ) 124 125 zkz(:,:) = 0.e0 !* Associated potential energy consummed over the whole water column 140 126 DO jk = 2, jpkm1 141 !$OMP DO schedule(static) private(jj, ji) 142 DO jj = 1, jpj 143 DO ji = 1, jpi 144 zkz(ji,jj) = zkz(ji,jj) + e3w_n(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 145 END DO 146 END DO 147 END DO 148 149 !$OMP DO schedule(static) private(jj, ji) 127 zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 128 END DO 129 150 130 DO jj = 1, jpj !* Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 151 131 DO ji = 1, jpi … … 155 135 156 136 DO jk = 2, jpkm1 !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zav_tide bound by 300 cm2/s 157 !$OMP DO schedule(static) private(jj, ji) 158 DO jj = 1, jpj 159 DO ji = 1, jpi 160 zav_tide(ji,jj,jk) = zav_tide(ji,jj,jk) * MIN( zkz(ji,jj), 30./6. ) * wmask(ji,jj,jk) !kz max = 300 cm2/s 161 END DO 162 END DO 163 END DO 164 !$OMP END PARALLEL 137 zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk) !kz max = 300 cm2/s 138 END DO 165 139 166 140 IF( kt == nit000 ) THEN !* check at first time-step: diagnose the energy consumed by zav_tide 167 141 ztpc = 0._wp 168 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc)169 142 DO jk= 1, jpk 170 143 DO jj= 1, jpj … … 189 162 ! ! Update mixing coefs ! 190 163 ! ! ----------------------- ! 191 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)192 164 DO jk = 2, jpkm1 !* update momentum & tracer diffusivity with tidal mixing 193 DO jj = 1, jpj 194 DO ji = 1, jpi ! vector opt. 195 avt(ji,jj,jk) = avt(ji,jj,jk) + zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 196 avm(ji,jj,jk) = avm(ji,jj,jk) + zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 197 END DO 198 END DO 165 avt(:,:,jk) = avt(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 166 avm(:,:,jk) = avm(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 199 167 DO jj = 2, jpjm1 200 168 DO ji = fs_2, fs_jpim1 ! vector opt. … … 257 225 258 226 ! ! compute the form function using N2 at each time step 259 !$OMP PARALLEL 260 !$OMP DO schedule(static) private(jj, ji) 261 DO jj = 1, jpj 262 DO ji = 1, jpi 263 zempba_3d_1(ji,jj,jpk) = 0.e0 264 zempba_3d_2(ji,jj,jpk) = 0.e0 265 END DO 266 END DO 267 !$OMP DO schedule(static) private(jk,jj,ji) 227 zempba_3d_1(:,:,jpk) = 0.e0 228 zempba_3d_2(:,:,jpk) = 0.e0 268 229 DO jk = 1, jpkm1 269 DO jj = 1, jpj 270 DO ji = 1, jpi 271 zdn2dz (ji,jj,jk) = rn2(ji,jj,jk) - rn2(ji,jj,jk+1) ! Vertical profile of dN2/dz 272 zempba_3d_1(ji,jj,jk) = SQRT( MAX( 0.e0, rn2(ji,jj,jk) ) ) ! - - of N 273 zempba_3d_2(ji,jj,jk) = MAX( 0.e0, rn2(ji,jj,jk) ) ! - - of N^2 274 END DO 275 END DO 276 END DO 277 !$OMP END DO NOWAIT 278 ! 279 !$OMP DO schedule(static) private(jj, ji) 280 DO jj = 1, jpj 281 DO ji = 1, jpi 282 zsum (ji,jj) = 0.e0 283 zsum1(ji,jj) = 0.e0 284 zsum2(ji,jj) = 0.e0 285 END DO 286 END DO 230 zdn2dz (:,:,jk) = rn2(:,:,jk) - rn2(:,:,jk+1) ! Vertical profile of dN2/dz 231 zempba_3d_1(:,:,jk) = SQRT( MAX( 0.e0, rn2(:,:,jk) ) ) ! - - of N 232 zempba_3d_2(:,:,jk) = MAX( 0.e0, rn2(:,:,jk) ) ! - - of N^2 233 END DO 234 ! 235 zsum (:,:) = 0.e0 236 zsum1(:,:) = 0.e0 237 zsum2(:,:) = 0.e0 287 238 DO jk= 2, jpk 288 !$OMP DO schedule(static) private(jj,ji) 289 DO jj= 1, jpj 290 DO ji= 1, jpi 291 zsum1(ji,jj) = zsum1(ji,jj) + zempba_3d_1(ji,jj,jk) * e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 292 zsum2(ji,jj) = zsum2(ji,jj) + zempba_3d_2(ji,jj,jk) * e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 293 END DO 294 END DO 295 END DO 296 !$OMP DO schedule(static) private(jj,ji) 239 zsum1(:,:) = zsum1(:,:) + zempba_3d_1(:,:,jk) * e3w_n(:,:,jk) * wmask(:,:,jk) 240 zsum2(:,:) = zsum2(:,:) + zempba_3d_2(:,:,jk) * e3w_n(:,:,jk) * wmask(:,:,jk) 241 END DO 297 242 DO jj = 1, jpj 298 243 DO ji = 1, jpi … … 303 248 304 249 DO jk= 1, jpk 305 !$OMP DO schedule(static) private(jj,ji,zcoef,ztpc)306 250 DO jj = 1, jpj 307 251 DO ji = 1, jpi … … 315 259 END DO 316 260 END DO 317 !$OMP DO schedule(static) private(jj,ji)318 261 DO jj = 1, jpj 319 262 DO ji = 1, jpi … … 324 267 ! ! first estimation bounded by 10 cm2/s (with n2 bounded by rn_n2min) 325 268 zcoef = rn_tfe_itf / ( rn_tfe * rau0 ) 326 !$OMP DO schedule(static) private(jk,jj,ji)327 269 DO jk = 1, jpk 328 DO jj = 1, jpj 329 DO ji = 1, jpi 330 zavt_itf(ji,jj,jk) = MIN( 10.e-4, zcoef * en_tmx(ji,jj) * zsum(ji,jj) * zempba_3d(ji,jj,jk) & 331 & / MAX( rn_n2min, rn2(ji,jj,jk) ) * tmask(ji,jj,jk) ) 332 END DO 333 END DO 334 END DO 335 336 !$OMP DO schedule(static) private(jj, ji) 337 DO jj = 1, jpj 338 DO ji = 1, jpi 339 zkz(ji,jj) = 0.e0 ! Associated potential energy consummed over the whole water column 340 END DO 341 END DO 270 zavt_itf(:,:,jk) = MIN( 10.e-4, zcoef * en_tmx(:,:) * zsum(:,:) * zempba_3d(:,:,jk) & 271 & / MAX( rn_n2min, rn2(:,:,jk) ) * tmask(:,:,jk) ) 272 END DO 273 274 zkz(:,:) = 0.e0 ! Associated potential energy consummed over the whole water column 342 275 DO jk = 2, jpkm1 343 !$OMP DO schedule(static) private(jj,ji) 344 DO jj = 1, jpj 345 DO ji = 1, jpi 346 zkz(ji,jj) = zkz(ji,jj) + e3w_n(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * zavt_itf(ji,jj,jk) * wmask(ji,jj,jk) 347 END DO 348 END DO 349 END DO 350 351 !$OMP DO schedule(static) private(jj,ji) 276 zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * wmask(:,:,jk) 277 END DO 278 352 279 DO jj = 1, jpj ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 353 280 DO ji = 1, jpi … … 356 283 END DO 357 284 358 !$OMP DO schedule(static) private(jk,jj,ji)359 285 DO jk = 2, jpkm1 ! Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zavt_itf bound by 300 cm2/s 360 DO jj = 1, jpj 361 DO ji = 1, jpi 362 zavt_itf(ji,jj,jk) = zavt_itf(ji,jj,jk) * MIN( zkz(ji,jj), 120./10. ) * wmask(ji,jj,jk) ! kz max = 120 cm2/s 363 END DO 364 END DO 365 END DO 366 !$OMP END PARALLEL 286 zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) * wmask(:,:,jk) ! kz max = 120 cm2/s 287 END DO 367 288 368 289 IF( kt == nit000 ) THEN ! diagnose the nergy consumed by zavt_itf 369 290 ztpc = 0.e0 370 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc)371 291 DO jk= 1, jpk 372 292 DO jj= 1, jpj … … 383 303 384 304 ! ! Update pav with the ITF mixing coefficient 385 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)386 305 DO jk = 2, jpkm1 387 DO jj= 1, jpj 388 DO ji= 1, jpi 389 pav(ji,jj,jk) = pav (ji,jj,jk) * ( 1.e0 - mask_itf(ji,jj) ) & 390 & + zavt_itf(ji,jj,jk) * mask_itf(ji,jj) 391 END DO 392 END DO 306 pav(:,:,jk) = pav (:,:,jk) * ( 1.e0 - mask_itf(:,:) ) & 307 & + zavt_itf(:,:,jk) * mask_itf(:,:) 393 308 END DO 394 309 ! … … 494 409 ! ! only the energy available for mixing is taken into account, 495 410 ! ! (mixing efficiency tidal dissipation efficiency) 496 !$OMP PARALLEL 497 498 !$OMP DO schedule(static) private(jj, ji) 499 DO jj = 1, jpj 500 DO ji = 1, jpi 501 en_tmx(ji,jj) = - rn_tfe * rn_me * ( zem2(ji,jj) * 1.25 + zek1(ji,jj) ) * ssmask(ji,jj) 502 END DO 503 END DO 411 en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * ssmask(:,:) 504 412 505 413 !============ … … 508 416 !! the error is thus ~1% which I feel comfortable with, compared to uncertainties in tidal energy dissipation. 509 417 ! ! Vertical structure (az_tmx) 510 !$OMP DO schedule(static) private(jj, ji)511 418 DO jj = 1, jpj ! part independent of the level 512 419 DO ji = 1, jpi … … 516 423 END DO 517 424 END DO 518 !$OMP DO schedule(static) private(jk, jj, ji)519 425 DO jk= 1, jpk ! complete with the level-dependent part 520 426 DO jj = 1, jpj … … 524 430 END DO 525 431 END DO 526 !$OMP END PARALLEL527 432 !=========== 528 433 ! … … 531 436 ! Total power consumption due to vertical mixing 532 437 ! zpc = rau0 * 1/rn_me * rn2 * zav_tide 438 zav_tide(:,:,:) = 0.e0 439 DO jk = 2, jpkm1 440 zav_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) ) 441 END DO 442 ! 533 443 ztpc = 0._wp 534 !$OMP PARALLEL 535 !$OMP DO schedule(static) private(jk, jj, ji) 536 DO jk = 1, jpk 537 DO jj = 1, jpj 538 DO ji = 1, jpi 539 zav_tide(ji,jj,jk) = 0.e0 540 END DO 541 END DO 542 END DO 543 !$OMP DO schedule(static) private(jk,jj,ji) 544 DO jk = 2, jpkm1 545 DO jj = 1, jpj 546 DO ji = 1, jpi 547 zav_tide(ji,jj,jk) = az_tmx(ji,jj,jk) / MAX( rn_n2min, rn2(ji,jj,jk) ) 548 END DO 549 END DO 550 END DO 551 ! 552 !$OMP DO schedule(static) private(jk, jj, ji) 553 DO jk= 1, jpk 554 DO jj = 1, jpj 555 DO ji = 1, jpi 556 zpc(ji,jj,jk) = MAX(rn_n2min,rn2(ji,jj,jk)) * zav_tide(ji,jj,jk) 557 END DO 558 END DO 559 END DO 560 !$OMP DO schedule(static) private(jk, jj, ji, ztpc) 444 zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * zav_tide(:,:,:) 561 445 DO jk= 2, jpkm1 562 446 DO jj = 1, jpj … … 566 450 END DO 567 451 END DO 568 !$OMP END PARALLEL569 452 IF( lk_mpp ) CALL mpp_sum( ztpc ) 570 453 ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc … … 574 457 ! 575 458 ! control print 2 576 !$OMP PARALLEL 577 !$OMP DO schedule(static) private(jk, jj, ji) 578 DO jk= 1, jpk 579 DO jj = 1, jpj 580 DO ji = 1, jpi 581 zav_tide(ji,jj,jk) = MIN( zav_tide(ji,jj,jk), 60.e-4 ) 582 zkz(ji,jj) = 0._wp 583 END DO 584 END DO 585 END DO 586 459 zav_tide(:,:,:) = MIN( zav_tide(:,:,:), 60.e-4 ) 460 zkz(:,:) = 0._wp 587 461 DO jk = 2, jpkm1 588 !$OMP DO schedule(static) private(jj, ji) 589 DO jj = 1, jpj 590 DO ji = 1, jpi 591 zkz(ji,jj) = zkz(ji,jj) + e3w_n(ji,jj,jk) * MAX(0.e0, rn2(ji,jj,jk)) * rau0 * zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 592 END DO 593 END DO 462 zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX(0.e0, rn2(:,:,jk)) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 594 463 END DO 595 464 ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz 596 !$OMP DO schedule(static) private(jj, ji)597 465 DO jj = 1, jpj 598 466 DO ji = 1, jpi … … 603 471 END DO 604 472 ztpc = 1.e50 605 !$OMP DO schedule(static) private(jj, ji, ztpc)606 473 DO jj = 1, jpj 607 474 DO ji = 1, jpi … … 611 478 END DO 612 479 END DO 613 !$OMP END PARALLEL614 480 WRITE(numout,*) ' Min de zkz ', ztpc, ' Max = ', maxval(zkz(:,:) ) 615 !$OMP PARALLEL616 481 ! 617 !$OMP DO schedule(static) private(jk,jj,ji)618 482 DO jk = 2, jpkm1 619 DO jj = 1, jpj 620 DO ji = 1, jpi 621 zav_tide(ji,jj,jk) = zav_tide(ji,jj,jk) * MIN( zkz(ji,jj), 30./6. ) * wmask(ji,jj,jk) !kz max = 300 cm2/s 622 END DO 623 END DO 483 zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk) !kz max = 300 cm2/s 624 484 END DO 625 485 ztpc = 0._wp 626 !$OMP DO schedule(static) private(jk, jj, ji) 627 DO jk= 1, jpk 628 DO jj = 1, jpj 629 DO ji = 1, jpi 630 zpc(ji,jj,jk) = Max(0.e0,rn2(ji,jj,jk)) * zav_tide(ji,jj,jk) 631 END DO 632 END DO 633 END DO 634 !$OMP DO schedule(static) private(jk, jj, ji, ztpc) 486 zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * zav_tide(:,:,:) 635 487 DO jk= 1, jpk 636 488 DO jj = 1, jpj … … 640 492 END DO 641 493 END DO 642 !$OMP END PARALLEL643 494 IF( lk_mpp ) CALL mpp_sum( ztpc ) 644 495 ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc … … 649 500 & / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask (:,:,jk) * tmask_i(:,:) ) ) 650 501 ztpc = 1.e50 651 !$OMP PARALLEL DO schedule(static) private(ztpc, jj, ji)652 502 DO jj = 1, jpj 653 503 DO ji = 1, jpi … … 663 513 WRITE(numout,*) ' Initial profile of tidal vertical mixing' 664 514 DO jk = 1, jpk 665 !$OMP PARALLEL DO schedule(static) private(jj, ji)666 515 DO jj = 1,jpj 667 516 DO ji = 1,jpi … … 674 523 END DO 675 524 DO jk = 1, jpk 676 !$OMP PARALLEL DO schedule(static) private(jj, ji) 677 DO jj = 1,jpj 678 DO ji = 1,jpi 679 zkz(ji,jj) = az_tmx(ji,jj,jk) /rn_n2min 680 END DO 681 END DO 525 zkz(:,:) = az_tmx(:,:,jk) /rn_n2min 682 526 ze_z = SUM( e1e2t(:,:) * zkz (:,:) * tmask_i(:,:) ) & 683 527 & / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) ) … … 845 689 ! !* Critical slope mixing: distribute energy over the time-varying ocean depth, 846 690 ! using an exponential decay from the seafloor. 847 !$OMP PARALLEL848 !$OMP DO schedule(static) private(jj,ji)849 691 DO jj = 1, jpj ! part independent of the level 850 692 DO ji = 1, jpi … … 855 697 END DO 856 698 857 !$OMP DO schedule(static) private(jk,jj,ji)858 699 DO jk = 2, jpkm1 ! complete with the level-dependent part 859 DO jj = 1, jpj 860 DO ji = 1, jpi 861 emix_tmx(ji,jj,jk) = zfact(ji,jj) * ( EXP( ( gde3w_n(ji,jj,jk ) - zhdep(ji,jj) ) / hcri_tmx(:,:) ) & 862 & - EXP( ( gde3w_n(ji,jj,jk-1) - zhdep(ji,jj) ) / hcri_tmx(ji,jj) ) ) * wmask(ji,jj,jk) & 863 & / ( gde3w_n(ji,jj,jk) - gde3w_n(ji,jj,jk-1) ) 864 END DO 865 END DO 866 END DO 867 !$OMP END PARALLEL 700 emix_tmx(:,:,jk) = zfact(:,:) * ( EXP( ( gde3w_n(:,:,jk ) - zhdep(:,:) ) / hcri_tmx(:,:) ) & 701 & - EXP( ( gde3w_n(:,:,jk-1) - zhdep(:,:) ) / hcri_tmx(:,:) ) ) * wmask(:,:,jk) & 702 & / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 703 END DO 868 704 869 705 ! !* Pycnocline-intensified mixing: distribute energy over the time-varying … … 874 710 CASE ( 1 ) ! Dissipation scales as N (recommended) 875 711 876 !$OMP PARALLEL 877 !$OMP DO schedule(static) private(jj, ji) 878 DO jj = 1, jpj 879 DO ji = 1, jpi 880 zfact(ji,jj) = 0._wp 881 END DO 882 END DO 712 zfact(:,:) = 0._wp 883 713 DO jk = 2, jpkm1 ! part independent of the level 884 !$OMP DO schedule(static) private(jj,ji) 885 DO jj = 1, jpj ! part independent of the level 886 DO ji = 1, jpi 887 zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * SQRT( MAX( 0._wp, rn2(ji,jj,jk) ) ) * wmask(ji,jj,jk) 888 END DO 889 END DO 890 END DO 891 892 !$OMP DO schedule(static) private(jj,ji) 714 zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) ) * wmask(:,:,jk) 715 END DO 716 893 717 DO jj = 1, jpj 894 718 DO ji = 1, jpi … … 897 721 END DO 898 722 899 !$OMP DO schedule(static) private(jk,jj,ji)900 723 DO jk = 2, jpkm1 ! complete with the level-dependent part 901 DO jj = 1, jpj 902 DO ji = 1, jpi 903 emix_tmx(ji,jj,jk) = emix_tmx(ji,jj,jk) + zfact(ji,jj) * SQRT( MAX( 0._wp, rn2(ji,jj,jk) ) ) * wmask(ji,ji,jk) 904 END DO 905 END DO 906 END DO 907 !$OMP END PARALLEL 724 emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zfact(:,:) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) ) * wmask(:,:,jk) 725 END DO 908 726 909 727 CASE ( 2 ) ! Dissipation scales as N^2 910 728 911 !$OMP PARALLEL 912 !$OMP DO schedule(static) private(jj, ji) 913 DO jj = 1, jpj 914 DO ji = 1, jpi 915 zfact(ji,jj) = 0._wp 916 END DO 917 END DO 918 919 DO jk = 2, jpkm1 920 !$OMP DO schedule(static) private(jj,ji) 921 DO jj = 1, jpj 922 DO ji = 1, jpi 923 zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) 924 END DO 925 END DO 926 END DO 927 928 !$OMP DO schedule(static) private(jj,ji) 729 zfact(:,:) = 0._wp 730 DO jk = 2, jpkm1 ! part independent of the level 731 zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk) 732 END DO 733 929 734 DO jj= 1, jpj 930 735 DO ji = 1, jpi … … 933 738 END DO 934 739 935 !$OMP DO schedule(static) private(jk,jj,ji)936 740 DO jk = 2, jpkm1 ! complete with the level-dependent part 937 DO jj = 1, jpj 938 DO ji = 1, jpi 939 emix_tmx(ji,jj,jk) = emix_tmx(ji,jj,jk) + zfact(ji,jj) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,ji,jk) 940 END DO 941 END DO 942 END DO 943 !$OMP END PARALLEL 741 emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zfact(:,:) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk) 742 END DO 944 743 945 744 END SELECT … … 948 747 ! !* ocean depth as proportional to rn2 * exp(-z_wkb/rn_hbot) 949 748 950 !$OMP PARALLEL 951 !$OMP DO schedule(static) private(jk,jj,ji) 952 DO jk = 1, jpk 953 DO jj = 1, jpj 954 DO ji = 1, jpi 955 zwkb(ji,jj,jk) = 0._wp 956 END DO 957 END DO 958 END DO 959 !$OMP DO schedule(static) private(jj,ji) 960 DO jj = 1, jpj 961 DO ji = 1, jpi 962 zfact(ji,jj) = 0._wp 963 END DO 964 END DO 749 zwkb(:,:,:) = 0._wp 750 zfact(:,:) = 0._wp 965 751 DO jk = 2, jpkm1 966 !$OMP DO schedule(static) private(jj,ji) 967 DO jj = 1, jpj 968 DO ji = 1, jpi 969 zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * SQRT( MAX( 0._wp, rn2(ji,jj,jk) ) ) * wmask(ji,jj,jk) 970 zwkb(ji,jj,jk) = zfact(ji,jj) 971 END DO 972 END DO 973 END DO 974 975 !$OMP DO schedule(static) private(jk,jj,ji) 752 zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) ) * wmask(:,:,jk) 753 zwkb(:,:,jk) = zfact(:,:) 754 END DO 755 976 756 DO jk = 2, jpkm1 977 757 DO jj = 1, jpj … … 982 762 END DO 983 763 END DO 984 985 !$OMP DO schedule(static) private(jj, ji) 986 DO jj = 1, jpj 987 DO ji = 1, jpi 988 zwkb(ji,jj,1) = zhdep(ji,jj) * tmask(ji,jj,1) 989 END DO 990 END DO 991 !$OMP END DO NOWAIT 992 !$OMP DO schedule(static) private(jk,jj,ji) 993 DO jk = 1, jpk 994 DO jj = 1, jpj 995 DO ji = 1, jpi 996 zweight(ji,jj,jk) = 0._wp 997 END DO 998 END DO 999 END DO 1000 1001 !$OMP DO schedule(static) private(jk,jj,ji) 764 zwkb(:,:,1) = zhdep(:,:) * tmask(:,:,1) 765 766 zweight(:,:,:) = 0._wp 1002 767 DO jk = 2, jpkm1 1003 DO jj = 1, jpj 1004 DO ji = 1, jpi 1005 zweight(ji,jj,jk) = MAX( 0._wp, rn2(ji,jj,jk) ) * hbot_tmx(ji,jj) * wmask(ji,jj,jk) & 1006 & * ( EXP( -zwkb(ji,jj,jk) / hbot_tmx(ji,jj) ) - EXP( -zwkb(ji,jj,jk-1) / hbot_tmx(ji,jj) ) ) 1007 END DO 1008 END DO 1009 END DO 1010 1011 !$OMP DO schedule(static) private(jj, ji) 1012 DO jj = 1, jpj 1013 DO ji = 1, jpi 1014 zfact(ji,jj) = 0._wp 1015 END DO 1016 END DO 1017 768 zweight(:,:,jk) = MAX( 0._wp, rn2(:,:,jk) ) * hbot_tmx(:,:) * wmask(:,:,jk) & 769 & * ( EXP( -zwkb(:,:,jk) / hbot_tmx(:,:) ) - EXP( -zwkb(:,:,jk-1) / hbot_tmx(:,:) ) ) 770 END DO 771 772 zfact(:,:) = 0._wp 1018 773 DO jk = 2, jpkm1 ! part independent of the level 1019 !$OMP DO schedule(static) private(jj,ji) 1020 DO jj = 1, jpj 1021 DO ji = 1, jpi 1022 zfact(ji,jj) = zfact(ji,jj) + zweight(ji,jj,jk) 1023 END DO 1024 END DO 1025 END DO 1026 1027 !$OMP DO schedule(static) private(jj,ji) 774 zfact(:,:) = zfact(:,:) + zweight(:,:,jk) 775 END DO 776 1028 777 DO jj = 1, jpj 1029 778 DO ji = 1, jpi … … 1032 781 END DO 1033 782 1034 !$OMP DO schedule(static) private(jk,jj,ji)1035 783 DO jk = 2, jpkm1 ! complete with the level-dependent part 1036 DO jj = 1, jpj 1037 DO ji = 1, jpi 1038 emix_tmx(ji,jj,jk) = emix_tmx(ji,jj,jk) + zweight(ji,jj,jk) * zfact(ji,jj) * wmask(ji,ji,jk) 1039 & / ( gde3w_n(ji,jj,jk) - gde3w_n(ji,jj,jk-1) ) 1040 END DO 1041 END DO 1042 END DO 1043 !$OMP END DO NOWAIT 784 emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zweight(:,:,jk) * zfact(:,:) * wmask(:,:,jk) & 785 & / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 786 END DO 1044 787 1045 788 1046 789 ! Calculate molecular kinematic viscosity 1047 !$OMP DO schedule(static) private(jj, ji) 1048 DO jj = 1, jpj 1049 DO ji = 1, jpi 1050 znu_t(ji,jj,jk) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * tsn(ji,jj,jk,jp_tem) & 1051 & + 0.00694_wp * tsn(ji,jj,jk,jp_tem) * tsn(ji,jj,jk,jp_tem) & 1052 & + 0.02305_wp * tsn(ji,jj,jk,jp_sal) ) * tmask(ji,jj,jk) * r1_rau0 1053 END DO 1054 END DO 1055 !$OMP DO schedule(static) private(jk,jj,ji) 790 znu_t(:,:,:) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * tsn(:,:,:,jp_tem) + 0.00694_wp * tsn(:,:,:,jp_tem) * tsn(:,:,:,jp_tem) & 791 & + 0.02305_wp * tsn(:,:,:,jp_sal) ) * tmask(:,:,:) * r1_rau0 1056 792 DO jk = 2, jpkm1 1057 DO jj = 1, jpj 1058 DO ji = 1, jpi 1059 znu_w(ji,jj,jk) = 0.5_wp * ( znu_t(ji,jj,jk-1) + znu_t(ji,jj,jk) ) * wmask(ji,jj,jk) 1060 END DO 1061 END DO 793 znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) 1062 794 END DO 1063 795 1064 796 ! Calculate turbulence intensity parameter Reb 1065 !$OMP DO schedule(static) private(jk,jj,ji)1066 797 DO jk = 2, jpkm1 1067 DO jj = 1, jpj 1068 DO ji = 1, jpi 1069 zReb(ji,jj,jk) = emix_tmx(ji,jj,jk) / MAX( 1.e-20_wp, znu_w(ji,jj,jk) * rn2(ji,jj,jk) ) 1070 END DO 1071 END DO 798 zReb(:,:,jk) = emix_tmx(:,:,jk) / MAX( 1.e-20_wp, znu_w(:,:,jk) * rn2(:,:,jk) ) 1072 799 END DO 1073 800 1074 801 ! Define internal wave-induced diffusivity 1075 !$OMP DO schedule(static) private(jk,jj,ji)1076 802 DO jk = 2, jpkm1 1077 DO jj = 1, jpj 1078 DO ji = 1, jpi 1079 zav_wave(ji,jj,jk) = znu_w(ji,jj,jk) * zReb(ji,jj,jk) * r1_6 ! This corresponds to a constant mixing efficiency of 1/6 1080 END DO 1081 END DO 1082 END DO 1083 !$OMP END PARALLEL 803 zav_wave(:,:,jk) = znu_w(:,:,jk) * zReb(:,:,jk) * r1_6 ! This corresponds to a constant mixing efficiency of 1/6 804 END DO 1084 805 1085 806 IF( ln_mevar ) THEN ! Variable mixing efficiency case : modify zav_wave in the 1086 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)1087 807 DO jk = 2, jpkm1 ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 1088 808 DO jj = 1, jpj … … 1098 818 ENDIF 1099 819 1100 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)1101 820 DO jk = 2, jpkm1 ! Bound diffusivity by molecular value and 100 cm2/s 1102 DO jj = 1, jpj 1103 DO ji = 1, jpi 1104 zav_wave(ji,jj,jk) = MIN( MAX( 1.4e-7_wp, zav_wave(ji,jj,jk) ), 1.e-2_wp ) * wmask(ji,jj,jk) 1105 END DO 1106 END DO 821 zav_wave(:,:,jk) = MIN( MAX( 1.4e-7_wp, zav_wave(:,:,jk) ), 1.e-2_wp ) * wmask(:,:,jk) 1107 822 END DO 1108 823 1109 824 IF( kt == nit000 ) THEN !* Control print at first time-step: diagnose the energy consumed by zav_wave 1110 825 ztpc = 0._wp 1111 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc)1112 826 DO jk = 2, jpkm1 1113 827 DO jj = 1, jpj … … 1135 849 ! 1136 850 IF( ln_tsdiff ) THEN !* Option for differential mixing of salinity and temperature 1137 !$OMP PARALLEL1138 !$OMP DO schedule(static) private(jk,jj,ji)1139 851 DO jk = 2, jpkm1 ! Calculate S/T diffusivity ratio as a function of Reb 1140 852 DO jj = 1, jpj … … 1146 858 END DO 1147 859 END DO 1148 !$OMP DO schedule(static) private(jk,jj,ji)860 CALL iom_put( "av_ratio", zav_ratio ) 1149 861 DO jk = 2, jpkm1 !* update momentum & tracer diffusivity with wave-driven mixing 1150 DO jj = 1, jpj 1151 DO ji = 1, jpi 1152 fsavs(ji,jj,jk) = avt(ji,jj,jk) + zav_wave(ji,jj,jk) * zav_ratio(ji,jj,jk) 1153 avt (ji,jj,jk) = avt(ji,jj,jk) + zav_wave(ji,jj,jk) 1154 avm (ji,jj,jk) = avm(ji,jj,jk) + zav_wave(ji,jj,jk) 1155 END DO 1156 END DO 1157 END DO 1158 !$OMP END PARALLEL 1159 CALL iom_put( "av_ratio", zav_ratio ) 862 fsavs(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) * zav_ratio(:,:,jk) 863 avt (:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 864 avm (:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 865 END DO 1160 866 ! 1161 867 ELSE !* update momentum & tracer diffusivity with wave-driven mixing 1162 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)1163 868 DO jk = 2, jpkm1 1164 DO jj = 1, jpj 1165 DO ji = 1, jpi 1166 fsavs(ji,jj,jk) = avt(ji,jj,jk) + zav_wave(ji,jj,jk) 1167 avt (ji,jj,jk) = avt(ji,jj,jk) + zav_wave(ji,jj,jk) 1168 avm (ji,jj,jk) = avm(ji,jj,jk) + zav_wave(ji,jj,jk) 1169 END DO 1170 END DO 1171 END DO 1172 ENDIF 1173 1174 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 869 fsavs(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 870 avt (:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 871 avm (:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 872 END DO 873 ENDIF 874 1175 875 DO jk = 2, jpkm1 !* update momentum diffusivity at wu and wv points 1176 876 DO jj = 2, jpjm1 … … 1188 888 ! vertical integral of rau0 * Kz * N^2 (pcmap_tmx), energy density (emix_tmx) 1189 889 IF( iom_use("bflx_tmx") .OR. iom_use("pcmap_tmx") ) THEN 1190 !$OMP PARALLEL 1191 !$OMP DO schedule(static) private(jk,jj,ji) 1192 DO jk = 1, jpk 1193 DO jj = 1, jpj 1194 DO ji = 1, jpi 1195 bflx_tmx(ji,jj,jk) = MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) 1196 END DO 1197 END DO 1198 END DO 1199 !$OMP END DO NOWAIT 1200 !$OMP DO schedule(static) private(jj, ji) 1201 DO jj = 1, jpj 1202 DO ji = 1, jpi 1203 pcmap_tmx(ji,jj) = 0._wp 1204 END DO 1205 END DO 1206 DO jk = 2, jpkm1 1207 !$OMP DO schedule(static) private(jj, ji) 1208 DO jj = 1, jpj 1209 DO ji = 1, jpi 1210 pcmap_tmx(ji,jj) = pcmap_tmx(ji,jj) + e3w_n(ji,jj,jk) * bflx_tmx(ji,jj,jk) * wmask(ji,jj,jk) 1211 END DO 1212 END DO 1213 END DO 1214 !$OMP DO schedule(static) private(jj, ji) 1215 DO jj = 1, jpj 1216 DO ji = 1, jpi 1217 pcmap_tmx(ji,jj) = rau0 * pcmap_tmx(ji,jj) 1218 END DO 1219 END DO 1220 !$OMP END PARALLEL 890 bflx_tmx(:,:,:) = MAX( 0._wp, rn2(:,:,:) ) * zav_wave(:,:,:) 891 pcmap_tmx(:,:) = 0._wp 892 DO jk = 2, jpkm1 893 pcmap_tmx(:,:) = pcmap_tmx(:,:) + e3w_n(:,:,jk) * bflx_tmx(:,:,jk) * wmask(:,:,jk) 894 END DO 895 pcmap_tmx(:,:) = rau0 * pcmap_tmx(:,:) 1221 896 CALL iom_put( "bflx_tmx", bflx_tmx ) 1222 897 CALL iom_put( "pcmap_tmx", pcmap_tmx ) … … 1295 970 avmb(:) = 1.4e-6_wp ! viscous molecular value 1296 971 avtb(:) = 1.e-10_wp ! very small diffusive minimum (background avt is specified in zdf_tmx) 1297 !$OMP PARALLEL DO schedule(static) private(jj, ji) 1298 DO jj = 1, jpj 1299 DO ji = 1, jpi 1300 avtb_2d(ji,jj) = 1.e0_wp ! uniform 1301 END DO 1302 END DO 972 avtb_2d(:,:) = 1.e0_wp ! uniform 1303 973 IF(lwp) THEN ! Control print 1304 974 WRITE(numout,*) … … 1333 1003 CALL iom_close(inum) 1334 1004 1335 !$OMP PARALLEL DO schedule(static) private(jj, ji) 1336 DO jj = 1, jpj 1337 DO ji = 1, jpi 1338 ebot_tmx(ji,jj) = ebot_tmx(ji,jj) * ssmask(ji,jj) 1339 epyc_tmx(ji,jj) = epyc_tmx(ji,jj) * ssmask(ji,jj) 1340 ecri_tmx(ji,jj) = ecri_tmx(ji,jj) * ssmask(ji,jj) 1341 1342 ! Set once for all to zero the first and last vertical levels of appropriate variables 1343 emix_tmx (ji,jj, 1 ) = 0._wp 1344 emix_tmx (ji,jj,jpk) = 0._wp 1345 zav_ratio(ji,jj, 1 ) = 0._wp 1346 zav_ratio(ji,jj,jpk) = 0._wp 1347 zav_wave (ji,jj, 1 ) = 0._wp 1348 zav_wave (ji,jj,jpk) = 0._wp 1349 END DO 1350 END DO 1005 ebot_tmx(:,:) = ebot_tmx(:,:) * ssmask(:,:) 1006 epyc_tmx(:,:) = epyc_tmx(:,:) * ssmask(:,:) 1007 ecri_tmx(:,:) = ecri_tmx(:,:) * ssmask(:,:) 1008 1009 ! Set once for all to zero the first and last vertical levels of appropriate variables 1010 emix_tmx (:,:, 1 ) = 0._wp 1011 emix_tmx (:,:,jpk) = 0._wp 1012 zav_ratio(:,:, 1 ) = 0._wp 1013 zav_ratio(:,:,jpk) = 0._wp 1014 zav_wave (:,:, 1 ) = 0._wp 1015 zav_wave (:,:,jpk) = 0._wp 1351 1016 1352 1017 zbot = glob_sum( e1e2t(:,:) * ebot_tmx(:,:) )
Note: See TracChangeset
for help on using the changeset viewer.