Changeset 6508
- Timestamp:
- 2016-05-04T16:23:46+02:00 (8 years ago)
- Location:
- branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r6348 r6508 885 885 CALL histwrite( nid_V, "vomecrty", it, vn , ndim_V , ndex_V ) ! j-current 886 886 IF( ln_traldf_gdia ) THEN 887 !$OMP PARALLEL DO schedule(static) private(jk) 887 888 DO jk=1,jpk-1 888 889 zw3d(:,:,jk) = (psiy_eiv(:,:,jk+1) - psiy_eiv(:,:,jk))/fse3v(:,:,jk) ! v_eiv = -dpsiy/dz … … 899 900 CALL histwrite( nid_W, "vovecrtz", it, wn , ndim_T, ndex_T ) ! vert. current 900 901 IF( ln_traldf_gdia ) THEN 901 DO jk=1,jpk-1 902 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 903 DO jk=1,jpk-1 902 904 DO jj = 2, jpjm1 903 905 DO ji = fs_2, fs_jpim1 ! vector opt. -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r6204 r6508 897 897 IF( nn_timing == 1 ) CALL timing_start('zgr_zco') 898 898 ! 899 DO jk = 1, jpk 899 !$OMP PARALLEL DO schedule(static) private(jk) 900 DO jk = 1, jpk 900 901 gdept_0 (:,:,jk) = gdept_1d(jk) 901 902 gdepw_0 (:,:,jk) = gdepw_1d(jk) -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90
r5332 r6508 385 385 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 386 386 ! 387 DO jk = 1, jpk 387 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 388 DO jk = 1, jpk 388 389 DO jj = 1, jpj 389 390 DO ji = 1, jpi -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90
r6204 r6508 107 107 108 108 ! ! =============== 109 DO jk = 1, jpkm1 ! Horizontal slab 109 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 110 DO jk = 1, jpkm1 ! Horizontal slab 110 111 ! ! =============== 111 112 ! … … 288 289 289 290 ! ! =============== 290 DO jk = 1, jpkm1 ! Horizontal slab 291 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 292 DO jk = 1, jpkm1 ! Horizontal slab 291 293 ! ! =============== 292 294 ! -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r5224 r6508 246 246 ! interior value (2=<jk=<jpkm1) 247 247 DO jk = 2, jpkm1 248 DO jj = 2, jpjm1 248 !$OMP PARALLEL DO private(ji,jj, zcoef1) 249 DO jj = 2, jpjm1 249 250 DO ji = fs_2, fs_jpim1 ! vector opt. 250 251 zcoef1 = zcoef0 * fse3w(ji,jj,jk) … … 298 299 299 300 ! Surface value (also valid in partial step case) 300 DO jj = 2, jpjm1 301 !$OMP PARALLEL DO private(ji,jj, zcoef1) 302 DO jj = 2, jpjm1 301 303 DO ji = fs_2, fs_jpim1 ! vector opt. 302 304 zcoef1 = zcoef0 * fse3w(ji,jj,1) … … 312 314 313 315 ! interior value (2=<jk=<jpkm1) 314 DO jk = 2, jpkm1 316 !$OMP PARALLEL DO private(ji,jj, zcoef1) 317 DO jk = 2, jpkm1 315 318 DO jj = 2, jpjm1 316 319 DO ji = fs_2, fs_jpim1 ! vector opt. … … 319 322 zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) & 320 323 & + zcoef1 * ( ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) ) & 321 & - ( rhd(ji ,jj,jk) + rhd(ji ,jj,jk-1) ) ) / e1u(ji,jj) 324 & 325 - ( rhd(ji ,jj,jk) + rhd(ji ,jj,jk-1) ) ) / e1u(ji,jj) 322 326 323 327 zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) & -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90
r5328 r6508 101 101 ! 102 102 CASE ( nkeg_C2 ) !-- Standard scheme --! 103 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zu, zv) 103 104 DO jk = 1, jpkm1 104 105 DO jj = 2, jpj … … 114 115 ! 115 116 CASE ( nkeg_HW ) !-- Hollingsworth scheme --! 117 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zu, zv) 116 118 DO jk = 1, jpkm1 117 119 DO jj = 2, jpjm1 … … 134 136 END SELECT 135 137 ! 138 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 136 139 DO jk = 1, jpkm1 !== grad( KE ) added to the general momentum trends ==! 137 140 DO jj = 2, jpjm1 -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap.F90
r4990 r6508 72 72 ENDIF 73 73 ! ! =============== 74 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze2u, ze1v, zua, zva) 74 75 DO jk = 1, jpkm1 ! Horizontal slab 75 76 ! ! =============== -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90
r5628 r6508 140 140 ! 141 141 IF( ln_dynadv_vec .OR. .NOT. lk_vvl ) THEN ! applied on velocity 142 !$OMP PARALLEL DO schedule(static) private(jk) 142 143 DO jk = 1, jpkm1 143 144 ua(:,:,jk) = ( ub(:,:,jk) + z2dt * ua(:,:,jk) ) * umask(:,:,jk) … … 145 146 END DO 146 147 ELSE ! applied on thickness weighted velocity 148 !$OMP PARALLEL DO schedule(static) private(jk) 147 149 DO jk = 1, jpkm1 148 150 ua(:,:,jk) = ( ub(:,:,jk) * fse3u_b(:,:,jk) & … … 176 178 ! In the forward case, this is done below after asselin filtering 177 179 ! so that asselin contribution is removed at the same time 180 !$OMP PARALLEL DO schedule(static) private(jk) 178 181 DO jk = 1, jpkm1 179 182 un(:,:,jk) = ( un(:,:,jk) - un_adv(:,:) + un_b(:,:) )*umask(:,:,jk) … … 225 228 ! ------------------------------------------ 226 229 IF( neuler == 0 .AND. kt == nit000 ) THEN !* Euler at first time-step: only swap 230 !$OMP PARALLEL DO schedule(static) private(jk) 227 231 DO jk = 1, jpkm1 228 232 un(:,:,jk) = ua(:,:,jk) ! un <-- ua … … 230 234 END DO 231 235 IF (lk_vvl) THEN 236 !$OMP PARALLEL DO schedule(static) private(jk) 232 237 DO jk = 1, jpkm1 233 238 fse3t_b(:,:,jk) = fse3t_n(:,:,jk) … … 240 245 IF( .NOT. lk_vvl ) THEN ! Fixed volume ! 241 246 ! ! =============! 247 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 242 248 DO jk = 1, jpkm1 243 249 DO jj = 1, jpj … … 289 295 ! Leap-Frog - Asselin filter and swap: applied on velocity 290 296 ! ----------------------------------- 297 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 291 298 DO jk = 1, jpkm1 292 299 DO jj = 1, jpj … … 310 317 ! Leap-Frog - Asselin filter and swap: applied on thickness weighted velocity 311 318 ! ----------------------------------- =========================== 319 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zue3b, zve3b, zue3n, zve3n, zue3a, zve3a, zuf, zvf) 312 320 DO jk = 1, jpkm1 313 321 DO jj = 1, jpj -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90
r4990 r6508 142 142 ! 143 143 IF( ln_dynadv_vec ) THEN ! vector form : applied on velocity 144 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 144 145 DO jk = 1, jpkm1 145 146 DO jj = 2, jpjm1 … … 152 153 ! 153 154 ELSE ! flux form : applied on thickness weighted velocity 155 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 154 156 DO jk = 1, jpkm1 155 157 DO jj = 2, jpjm1 … … 175 177 END DO 176 178 END DO 179 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 177 180 DO jk = 1, jpkm1 ! unweighted time stepping 178 181 DO jj = 2, jpjm1 … … 186 189 IF( l_trddyn ) THEN ! temporary save of spg trends 187 190 CALL wrk_alloc( jpi, jpj, jpk, ztrdu, ztrdv ) 191 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 188 192 DO jk = 1, jpkm1 ! unweighted time stepping 189 193 DO jj = 2, jpjm1 … … 210 214 ! compute the next vertically averaged velocity (effect of the additional force not included) 211 215 ! --------------------------------------------- 216 !$OMP PARALLEL DO schedule(static) private(jj, ji) 212 217 DO jj = 2, jpjm1 213 218 DO ji = fs_2, fs_jpim1 ! vector opt. … … 217 222 END DO 218 223 DO jk = 2, jpkm1 ! vertical sum 224 !$OMP PARALLEL DO schedule(static) private(jj, ji) 219 225 DO jj = 2, jpjm1 220 226 DO ji = fs_2, fs_jpim1 ! vector opt. … … 224 230 END DO 225 231 END DO 226 232 !$OMP PARALLEL DO schedule(static) private(jj, ji) 227 233 DO jj = 2, jpjm1 ! transport: multiplied by the horizontal scale factor 228 234 DO ji = fs_2, fs_jpim1 ! vector opt. … … 238 244 ! Right hand side of the elliptic equation and first guess 239 245 ! -------------------------------------------------------- 246 !$OMP PARALLEL DO schedule(static) private(jj, ji, zgcb,zbtd) 240 247 DO jj = 2, jpjm1 241 248 DO ji = fs_2, fs_jpim1 ! vector opt. … … 296 303 ! Transport divergence gradient multiplied by z2dt 297 304 ! --------------------------------------------==== 305 !$OMP PARALLEL DO schedule(static) private(jj, ji, ztdgu, ztdgv) 298 306 DO jj = 2, jpjm1 299 307 DO ji = fs_2, fs_jpim1 ! vector opt. … … 354 362 ! trend, the leap-frog time stepping will not 355 363 ! be done in dynnxt.F90 routine) 364 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 356 365 DO jk = 1, jpkm1 357 366 DO jj = 2, jpjm1 -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90
r5120 r6508 81 81 ztrdv(:,:,:) = va(:,:,:) 82 82 ENDIF 83 83 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 84 84 DO jk = 2, jpkm1 ! Vertical momentum advection at level w and u- and v- vertical 85 85 DO jj = 2, jpj ! vertical fluxes … … 97 97 ! 98 98 ! Surface and bottom advective fluxes set to zero 99 IF ( ln_isfcav ) THEN 99 IF ( ln_isfcav ) THEN 100 100 DO jj = 2, jpjm1 101 101 DO ji = fs_2, fs_jpim1 ! vector opt. … … 116 116 END DO 117 117 END IF 118 118 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zua, zva) 119 119 DO jk = 1, jpkm1 ! Vertical momentum advection at u- and v-points 120 120 DO jj = 2, jpjm1 -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
r5120 r6508 99 99 100 100 IF( ln_bfrimp ) THEN 101 !$OMP PARALLEL DO schedule(static) private(jj, ji, ikbu, ikbv) 101 102 DO jj = 2, jpjm1 102 103 DO ji = 2, jpim1 … … 108 109 END DO 109 110 IF ( ln_isfcav ) THEN 111 !$OMP PARALLEL DO schedule(static) private(jj, ji, ikbu, ikbv) 110 112 DO jj = 2, jpjm1 111 113 DO ji = 2, jpim1 … … 174 176 ! non zero value at the ocean bottom depending on the bottom friction used. 175 177 ! 178 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3ua, zcoef, zzwi, zzws) 176 179 DO jk = 1, jpkm1 ! Matrix 177 180 DO jj = 2, jpjm1 … … 211 214 !== First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 (increasing k) == 212 215 DO jk = 2, jpkm1 216 !$OMP PARALLEL DO schedule(static) private(jj, ji) 213 217 DO jj = 2, jpjm1 214 218 DO ji = fs_2, fs_jpim1 ! vector opt. … … 218 222 END DO 219 223 ! 224 !$OMP PARALLEL DO schedule(static) private(jj, ji) 220 225 DO jj = 2, jpjm1 !== second recurrence: SOLk = RHSk - Lk / Dk-1 Lk-1 == 221 226 DO ji = fs_2, fs_jpim1 ! vector opt. … … 232 237 END DO 233 238 DO jk = 2, jpkm1 239 !$OMP PARALLEL DO schedule(static) private(jj, ji, zrhs) 234 240 DO jj = 2, jpjm1 235 241 DO ji = fs_2, fs_jpim1 … … 244 250 END DO 245 251 ! 252 !$OMP PARALLEL DO schedule(static) private(jj, ji) 246 253 DO jj = 2, jpjm1 !== thrid recurrence : SOLk = ( Lk - Uk * Ek+1 ) / Dk == 247 254 DO ji = fs_2, fs_jpim1 ! vector opt. … … 250 257 END DO 251 258 DO jk = jpk-2, 1, -1 259 !$OMP PARALLEL DO schedule(static) private(jj, ji) 252 260 DO jj = 2, jpjm1 253 261 DO ji = fs_2, fs_jpim1 … … 259 267 #if ! defined key_dynspg_ts 260 268 ! Normalization to obtain the general momentum trend ua 269 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 261 270 DO jk = 1, jpkm1 262 271 DO jj = 2, jpjm1 … … 274 283 ! non zero value at the ocean bottom depending on the bottom friction used 275 284 ! 285 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3va, zcoef, zzwi, zzws) 276 286 DO jk = 1, jpkm1 ! Matrix 277 287 DO jj = 2, jpjm1 … … 287 297 END DO 288 298 END DO 299 !$OMP PARALLEL DO schedule(static) private(jj, ji) 289 300 DO jj = 2, jpjm1 ! Surface boundary conditions 290 301 DO ji = fs_2, fs_jpim1 ! vector opt. … … 311 322 !== First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 (increasing k) == 312 323 DO jk = 2, jpkm1 324 !$OMP PARALLEL DO schedule(static) private(jj, ji) 313 325 DO jj = 2, jpjm1 314 326 DO ji = fs_2, fs_jpim1 ! vector opt. … … 318 330 END DO 319 331 ! 332 !$OMP PARALLEL DO schedule(static) private(jj, ji, ze3va) 320 333 DO jj = 2, jpjm1 !== second recurrence: SOLk = RHSk - Lk / Dk-1 Lk-1 == 321 334 DO ji = fs_2, fs_jpim1 ! vector opt. … … 332 345 END DO 333 346 DO jk = 2, jpkm1 347 !$OMP PARALLEL DO schedule(static) private(jj, ji, zrhs) 334 348 DO jj = 2, jpjm1 335 349 DO ji = fs_2, fs_jpim1 ! vector opt. … … 344 358 END DO 345 359 ! 360 !$OMP PARALLEL DO schedule(static) private(jj, ji) 346 361 DO jj = 2, jpjm1 !== third recurrence : SOLk = ( Lk - Uk * SOLk+1 ) / Dk == 347 362 DO ji = fs_2, fs_jpim1 ! vector opt. … … 350 365 END DO 351 366 DO jk = jpk-2, 1, -1 367 !$OMP PARALLEL DO schedule(static) private(jj, ji) 352 368 DO jj = 2, jpjm1 353 369 DO ji = fs_2, fs_jpim1 … … 359 375 ! Normalization to obtain the general momentum trend va 360 376 #if ! defined key_dynspg_ts 377 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 361 378 DO jk = 1, jpkm1 362 379 DO jj = 2, jpjm1 … … 371 388 !! restore bottom layer avmu(v) 372 389 IF( ln_bfrimp ) THEN 390 !$OMP PARALLEL DO schedule(static) private(jj, ji) 373 391 DO jj = 2, jpjm1 374 392 DO ji = 2, jpim1 … … 380 398 END DO 381 399 IF (ln_isfcav) THEN 400 !$OMP PARALLEL DO schedule(static) private(jj, ji) 382 401 DO jj = 2, jpjm1 383 402 DO ji = 2, jpim1 -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r6204 r6508 98 98 ! ! After Sea Surface Height ! 99 99 ! !------------------------------! 100 !$OMP PARALLEL WORKSHARE 100 101 zhdiv(:,:) = 0._wp 102 !$OMP END PARALLEL WORKSHARE 101 103 DO jk = 1, jpkm1 ! Horizontal divergence of barotropic transports 104 !$OMP PARALLEL WORKSHARE 102 105 zhdiv(:,:) = zhdiv(:,:) + fse3t_n(:,:,jk) * hdivn(:,:,jk) 106 !$OMP END PARALLEL WORKSHARE 103 107 END DO 104 108 ! ! Sea surface elevation time stepping … … 107 111 ! 108 112 z1_rau0 = 0.5_wp * r1_rau0 113 !$OMP PARALLEL WORKSHARE 109 114 ssha(:,:) = ( sshb(:,:) - z2dt * ( z1_rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:) 110 115 !$OMP END PARALLEL WORKSHARE 111 116 #if ! defined key_dynspg_ts 112 117 ! These lines are not necessary with time splitting since … … 176 181 IF(lwp) WRITE(numout,*) '~~~~~ ' 177 182 ! 183 !$OMP PARALLEL WORKSHARE 178 184 wn(:,:,jpk) = 0._wp ! bottom boundary condition: w=0 (set once for all) 185 !$OMP END PARALLEL WORKSHARE 179 186 ! 180 187 ENDIF … … 188 195 CALL wrk_alloc( jpi, jpj, jpk, zhdiv ) 189 196 ! 197 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 190 198 DO jk = 1, jpkm1 191 199 ! horizontal divergence of thickness diffusion transport ( velocity multiplied by e3t) -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r6476 r6508 381 381 ! 382 382 ! WARNING ptab is defined only between nld and nle 383 DO jk = 1, jpk 383 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 384 DO jk = 1, jpk 384 385 DO jj = nlcj+1, jpj ! added line(s) (inner only) 385 386 ptab(nldi :nlei , jj ,jk) = ptab(nldi:nlei, nlej,jk) -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90
r6353 r6508 128 128 zm1_2g = -0.5_wp / grav 129 129 ! 130 zww(:,:,:) = 0._wp 131 zwz(:,:,:) = 0._wp 132 ! 130 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 131 DO jk = 1, jpk 132 DO jj = 1, jpj 133 !DIR$ IVDEP 134 DO ji = 1, jpi 135 zww(ji,jj,jk) = 0._wp 136 zwz(ji,jj,jk) = 0._wp 137 END DO 138 END DO 139 END DO 140 ! 141 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 133 142 DO jk = 1, jpk !== i- & j-gradient of density ==! 134 143 DO jj = 1, jpjm1 … … 140 149 END DO 141 150 IF( ln_zps ) THEN ! partial steps correction at the bottom ocean level 151 !$OMP PARALLEL DO schedule(static) private(jj, ji) 142 152 DO jj = 1, jpjm1 143 153 DO ji = 1, jpim1 … … 148 158 ENDIF 149 159 IF( ln_zps .AND. ln_isfcav ) THEN ! partial steps correction at the bottom ocean level 160 !$OMP PARALLEL DO schedule(static) private(jj, ji) 150 161 DO jj = 1, jpjm1 151 162 DO ji = 1, jpim1 … … 158 169 !== Local vertical density gradient at T-point == ! (evaluated from N^2) 159 170 ! interior value 160 DO jk = 2, jpkm1 171 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 172 DO jk = 2, jpkm1 161 173 ! ! zdzr = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 162 174 ! ! trick: tmask(ik ) = 0 => all pn2 = 0 => zdzr = 0 … … 186 198 ! 187 199 IF ( ln_isfcav ) THEN 200 !$OMP PARALLEL DO schedule(static) private(jj,ji) 188 201 DO jj = 2, jpjm1 189 202 DO ji = fs_2, fs_jpim1 ! vector opt. … … 195 208 ENDDO 196 209 ELSE 210 !$OMP PARALLEL DO schedule(static) private(jj,ji) 197 211 DO jj = 2, jpjm1 198 212 DO ji = fs_2, fs_jpim1 ! vector opt. … … 202 216 ENDDO 203 217 END IF 218 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zau, zav, zbu, zbv, zfj, zfi, zdepu, zdepv) 204 219 DO jk = 2, jpkm1 !* Slopes at u and v points 205 220 DO jj = 2, jpjm1 … … 246 261 ! 247 262 ! !* horizontal Shapiro filter 263 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 248 264 DO jk = 2, jpkm1 249 265 DO jj = 2, jpjm1, MAX(1, jpj-3) ! rows jj=2 and =jpjm1 only … … 292 308 ! =========================== | wslpj = mij( d/dj( prd ) / d/dz( prd ) 293 309 ! 310 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbw, zfk, zck, zbi, zbj, zai, zaj, zci, zcj) 294 311 DO jk = 2, jpkm1 295 312 DO jj = 2, jpjm1 … … 332 349 ! 333 350 ! !* horizontal Shapiro filter 334 DO jk = 2, jpkm1 351 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcofw, zck) 352 DO jk = 2, jpkm1 335 353 DO jj = 2, jpjm1, MAX(1, jpj-3) ! rows jj=2 and =jpjm1 only 336 354 DO ji = 2, jpim1 … … 422 440 ! set the slope of diffusion to the slope of s-surfaces 423 441 ! ( c a u t i o n : minus sign as fsdep has positive value ) 424 DO jj = 2, jpjm1 442 !$OMP PARALLEL DO schedule(static) private(jj,ji) 443 DO jj = 2, jpjm1 425 444 DO ji = fs_2, fs_jpim1 ! vector opt. 426 445 uslp(ji,jj,1) = -1./e1u(ji,jj) * ( fsdept_b(ji+1,jj,1) - fsdept_b(ji ,jj ,1) ) * umask(ji,jj,1) … … 430 449 END DO 431 450 END DO 432 451 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 433 452 DO jk = 2, jpk 434 453 DO jj = 2, jpjm1 … … 510 529 ! 511 530 ip = jl ; jp = jl ! guaranteed nonzero gradients ( absolute value larger than repsln) 531 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zdit,zdis,zdjt,zdjs,zdxrho_raw,zdyrho_raw) 512 532 DO jk = 1, jpkm1 ! done each pair of triad 513 533 DO jj = 1, jpjm1 ! NB: not masked ==> a minimum value is set … … 526 546 ! 527 547 IF( ln_zps .AND. l_grad_zps ) THEN ! partial steps: correction of i- & j-grad on bottom 528 DO jj = 1, jpjm1 548 !$OMP PARALLEL DO schedule(static) private(jj,ji,zdit,zdis,zdjt,zdjs,zdxrho_raw,zdyrho_raw) 549 DO jj = 1, jpjm1 529 550 DO ji = 1, jpim1 530 551 iku = mbku(ji,jj) ; ikv = mbkv(ji,jj) ! last ocean level (u- & v-points) … … 536 557 zdyrho(ji ,jj+jp,ikv,1-jp) = SIGN( MAX( repsln, ABS( zdyrho_raw ) ), zdyrho_raw ) 537 558 END DO 538 END DO 559 END DO 539 560 ENDIF 540 561 ! … … 542 563 543 564 DO kp = 0, 1 !== unmasked before density i- j-, k-gradients ==! 565 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zdkt,zdks,zdzrho_raw) 544 566 DO jk = 1, jpkm1 ! done each pair of triad 545 567 DO jj = 1, jpj ! NB: not masked ==> a minimum value is set … … 740 762 zm1_2g = -0.5_wp / grav 741 763 ! 742 uslpml (1,:) = 0._wp ; uslpml (jpi,:) = 0._wp 743 vslpml (1,:) = 0._wp ; vslpml (jpi,:) = 0._wp 744 wslpiml(1,:) = 0._wp ; wslpiml(jpi,:) = 0._wp 745 wslpjml(1,:) = 0._wp ; wslpjml(jpi,:) = 0._wp 746 ! 764 !$OMP PARALLEL DO schedule(static) private(jk) 765 !DIR$ IVDEP 766 DO jk=1,jpk 767 uslpml (1,jk) = 0._wp 768 vslpml (1,jk) = 0._wp 769 wslpiml(1,jk) = 0._wp 770 wslpjml(1,jk) = 0._wp 771 uslpml (jpi,jk) = 0._wp 772 vslpml (jpi,jk) = 0._wp 773 wslpiml(jpi,jk) = 0._wp 774 wslpjml(jpi,jk) = 0._wp 775 END DO 776 ! 747 777 ! !== surface mixed layer mask ! 748 DO jk = 1, jpk ! =1 inside the mixed layer, =0 otherwise 778 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ik) 779 DO jk = 1, jpk ! =1 inside the mixed layer, =0 otherwise 749 780 DO jj = 1, jpj 750 781 DO ji = 1, jpi … … 770 801 !----------------------------------------------------------------------- 771 802 ! 803 !$OMP PARALLEL DO schedule(static) private(jj, ji, iku, ikv, zbu, zbv, zau, zav, ik, zbw, zci, zcj, zai, zaj, zbi, zbj) 772 804 DO jj = 2, jpjm1 773 805 DO ji = 2, jpim1 … … 858 890 ! Direction of lateral diffusion (tracers and/or momentum) 859 891 ! ------------------------------ 860 uslp (:,:,:) = 0._wp ; uslpml (:,:) = 0._wp ! set the slope to zero (even in s-coordinates) 861 vslp (:,:,:) = 0._wp ; vslpml (:,:) = 0._wp 862 wslpi(:,:,:) = 0._wp ; wslpiml(:,:) = 0._wp 863 wslpj(:,:,:) = 0._wp ; wslpjml(:,:) = 0._wp 864 892 ! set the slope to zero (even in s-coordinates) 893 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 894 DO jk = 1, jpk 895 DO jj = 1, jpj 896 DO ji = 1, jpi 897 uslp (ji,jj,jk) = 0._wp 898 vslp (ji,jj,jk) = 0._wp 899 wslpi(ji,jj,jk) = 0._wp 900 wslpj(ji,jj,jk) = 0._wp 901 END DO 902 END DO 903 END DO 904 !$OMP PARALLEL DO schedule(static) private(jj, ji) 905 DO jj = 1, jpj 906 DO ji = 1, jpi 907 uslpml (ji,jj) = 0._wp 908 vslpml (ji,jj) = 0._wp 909 wslpiml(ji,jj) = 0._wp 910 wslpjml(ji,jj) = 0._wp 911 END DO 912 END DO 865 913 IF(ln_sco .AND. (ln_traldf_hor .OR. ln_dynldf_hor )) THEN 866 914 IF(lwp) WRITE(numout,*) ' Horizontal mixing in s-coordinate: slope = slope of s-surfaces' … … 872 920 ! set the slope of diffusion to the slope of s-surfaces 873 921 ! ( c a u t i o n : minus sign as fsdep has positive value ) 922 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 874 923 DO jk = 1, jpk 875 924 DO jj = 2, jpjm1 -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90
r5540 r6508 231 231 CASE( -1, 0 ) !== polynomial TEOS-10 / EOS-80 ==! 232 232 ! 233 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 233 234 DO jk = 1, jpkm1 234 235 DO jj = 1, jpj … … 271 272 CASE( 1 ) !== simplified EOS ==! 272 273 ! 274 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zt, zs, zh, ztm, zn) 273 275 DO jk = 1, jpkm1 274 276 DO jj = 1, jpj … … 339 341 END DO 340 342 ! 343 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, jsmp, jdof, zh, zt, zstemp, zs, ztm, zn3, zn2, zn1) 341 344 DO jk = 1, jpkm1 342 345 DO jj = 1, jpj … … 393 396 ! Non-stochastic equation of state 394 397 ELSE 398 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 395 399 DO jk = 1, jpkm1 396 400 DO jj = 1, jpj … … 435 439 CASE( 1 ) !== simplified EOS ==! 436 440 ! 441 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zt, zs, zh, ztm, zn) 437 442 DO jk = 1, jpkm1 438 443 DO jj = 1, jpj … … 583 588 CASE( -1, 0 ) !== polynomial TEOS-10 / EOS-80 ==! 584 589 ! 590 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 585 591 DO jk = 1, jpkm1 586 592 DO jj = 1, jpj … … 640 646 CASE( 1 ) !== simplified EOS ==! 641 647 ! 648 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn) 642 649 DO jk = 1, jpkm1 643 650 DO jj = 1, jpj … … 910 917 IF( nn_timing == 1 ) CALL timing_start('bn2') 911 918 ! 919 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrw, zaw, zbw) 912 920 DO jk = 2, jpkm1 ! interior points only (2=< jk =< jpkm1 ) 913 921 DO jj = 1, jpj ! surface and bottom value set to zero one for all in istate.F90 … … 1125 1133 CASE( -1, 0 ) !== polynomial TEOS-10 / EOS-80 ==! 1126 1134 ! 1135 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn2, zn1, zn0, zn) 1127 1136 DO jk = 1, jpkm1 1128 1137 DO jj = 1, jpj … … 1188 1197 CASE( 1 ) !== Vallis (2006) simplified EOS ==! 1189 1198 ! 1199 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn) 1190 1200 DO jk = 1, jpkm1 1191 1201 DO jj = 1, jpj -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r5147 r6508 94 94 ! 95 95 ! !== effective transport ==! 96 !$OMP PARALLEL DO schedule(static) private(jk) 96 97 DO jk = 1, jpkm1 97 98 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) ! eulerian transport only -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
r6204 r6508 103 103 IF( l_trd ) THEN 104 104 CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 105 ztrdx(:,:,:) = 0.e0 ; ztrdy(:,:,:) = 0.e0 ; ztrdz(:,:,:) = 0.e0 105 !$OMP PARALLEL WORKSHARE 106 ztrdx(:,:,:) = 0.e0 ; ztrdy(:,:,:) = 0.e0 ; ztrdz(:,:,:) = 0.e0 107 !$OMP END PARALLEL WORKSHARE 106 108 ENDIF 107 109 ! 108 zwi(:,:,:) = 0.e0 ; 110 !$OMP PARALLEL WORKSHARE 111 zwi(:,:,:) = 0.e0 ; 112 !$OMP END PARALLEL WORKSHARE 109 113 ! 110 114 ! ! =========== … … 120 124 ! -------------------------------------------------------------------- 121 125 ! upstream tracer flux in the i and j direction 126 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui, zfm_ui) 122 127 DO jk = 1, jpkm1 123 128 DO jj = 1, jpjm1 … … 136 141 ! upstream tracer flux in the k direction 137 142 ! Interior value 143 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 138 144 DO jk = 2, jpkm1 139 145 DO jj = 1, jpj … … 169 175 170 176 ! total advective trend 177 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 171 178 DO jk = 1, jpkm1 172 179 z2dtt = p2dt(jk) … … 201 208 ! -------------------------------------------------- 202 209 ! antidiffusive flux on i and j 210 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 203 211 DO jk = 1, jpkm1 204 212 DO jj = 1, jpjm1 … … 212 220 ! antidiffusive flux on k 213 221 ! Interior value 222 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 214 223 DO jk = 2, jpkm1 215 224 DO jj = 1, jpj … … 227 236 END DO 228 237 ELSE 238 !$OMP PARALLEL WORKSHARE 229 239 zwz(:,:,1) = 0.e0 240 !$OMP END PARALLEL WORKSHARE 230 241 END IF 231 242 CALL lbc_lnk( zwx, 'U', -1. ) ; CALL lbc_lnk( zwy, 'V', -1. ) ! Lateral bondary conditions … … 239 250 ! 5. final trend with corrected fluxes 240 251 ! ------------------------------------ 252 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 241 253 DO jk = 1, jpkm1 242 254 DO jj = 2, jpjm1 … … 339 351 IF( l_trd ) THEN 340 352 CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 353 !$OMP PARALLEL WORKSHARE 341 354 ztrdx(:,:,:) = 0._wp ; ztrdy(:,:,:) = 0._wp ; ztrdz(:,:,:) = 0._wp 355 !$OMP END PARALLEL WORKSHARE 342 356 ENDIF 343 357 ! 358 !$OMP PARALLEL WORKSHARE 344 359 zwi(:,:,:) = 0._wp 360 !$OMP END PARALLEL WORKSHARE 345 361 z_rzts = 1._wp / REAL( jnzts, wp ) 346 362 zr_p2dt(:) = 1._wp / p2dt(:) … … 351 367 ! 1. Bottom value : flux set to zero 352 368 ! ---------------------------------- 369 !$OMP PARALLEL WORKSHARE 353 370 zwx(:,:,jpk) = 0._wp ; zwz(:,:,jpk) = 0._wp 354 371 zwy(:,:,jpk) = 0._wp ; zwi(:,:,jpk) = 0._wp 355 372 !$OMP END PARALLEL WORKSHARE 356 373 ! 2. upstream advection with initial mass fluxes & intermediate update 357 374 ! -------------------------------------------------------------------- 358 375 ! upstream tracer flux in the i and j direction 376 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui, zfm_ui) 359 377 DO jk = 1, jpkm1 360 378 DO jj = 1, jpjm1 … … 373 391 ! upstream tracer flux in the k direction 374 392 ! Interior value 393 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 375 394 DO jk = 2, jpkm1 376 395 DO jj = 1, jpj … … 385 404 IF( lk_vvl ) THEN 386 405 IF ( ln_isfcav ) THEN 406 !$OMP PARALLEL DO schedule(static) private(jj, ji) 387 407 DO jj = 1, jpj 388 408 DO ji = 1, jpi … … 391 411 END DO 392 412 ELSE 413 !$OMP PARALLEL WORKSHARE 393 414 zwz(:,:,1) = 0.e0 ! volume variable + no isf 415 !$OMP END PARALLEL WORKSHARE 394 416 END IF 395 417 ELSE 396 418 IF ( ln_isfcav ) THEN 419 !$OMP PARALLEL DO schedule(static) private(jj, ji) 397 420 DO jj = 1, jpj 398 421 DO ji = 1, jpi … … 401 424 END DO 402 425 ELSE 426 !$OMP PARALLEL WORKSHARE 403 427 zwz(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) ! linear free surface + no isf 428 !$OMP END PARALLEL WORKSHARE 404 429 END IF 405 430 ENDIF 406 431 407 432 ! total advective trend 433 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 408 434 DO jk = 1, jpkm1 409 435 z2dtt = p2dt(jk) … … 427 453 IF( l_trd ) THEN 428 454 ! store intermediate advective trends 455 !$OMP PARALLEL WORKSHARE 429 456 ztrdx(:,:,:) = zwx(:,:,:) ; ztrdy(:,:,:) = zwy(:,:,:) ; ztrdz(:,:,:) = zwz(:,:,:) 457 !$OMP END PARALLEL WORKSHARE 430 458 END IF 431 459 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) … … 439 467 ! antidiffusive flux on i and j 440 468 441 469 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 442 470 DO jk = 1, jpkm1 443 471 … … 451 479 END DO 452 480 END DO 453 481 !$OMP PARALLEL DO schedule(static) private(jj, ji) 454 482 DO jj = 2, jpjm1 ! partial horizontal divergence 455 483 DO ji = fs_2, fs_jpim1 … … 458 486 END DO 459 487 END DO 460 488 !$OMP PARALLEL DO schedule(static) private(jj, ji) 461 489 DO jj = 1, jpjm1 462 490 DO ji = 1, fs_jpim1 ! vector opt. … … 468 496 469 497 ! antidiffusive flux on k 498 !$OMP PARALLEL WORKSHARE 470 499 zwz(:,:,1) = 0._wp ! Surface value 471 500 zwz_sav(:,:,:) = zwz(:,:,:) … … 473 502 ztrs(:,:,:,1) = ptb(:,:,:,jn) 474 503 zwzts(:,:,:) = 0._wp 475 504 !$OMP END PARALLEL WORKSHARE 476 505 DO jl = 1, jnzts ! Start of sub timestepping loop 477 506 … … 490 519 jta = MOD(jta,3) + 1 491 520 ENDIF 521 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 492 522 DO jk = 2, jpkm1 ! Interior value 493 523 DO jj = 2, jpjm1 … … 500 530 501 531 jtaken = MOD( jtaken + 1 , 2 ) 502 532 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 503 533 DO jk = 2, jpkm1 ! Interior value 504 534 DO jj = 2, jpjm1 … … 513 543 514 544 END DO 515 545 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 516 546 DO jk = 2, jpkm1 ! Anti-diffusive vertical flux using average flux from the sub-timestepping 517 547 DO jj = 2, jpjm1 … … 531 561 ! 5. final trend with corrected fluxes 532 562 ! ------------------------------------ 563 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 533 564 DO jk = 1, jpkm1 534 565 DO jj = 2, jpjm1 … … 547 578 ! ! trend diagnostics (contribution of upstream fluxes) 548 579 IF( l_trd ) THEN 580 !$OMP PARALLEL WORKSHARE 549 581 ztrdx(:,:,:) = ztrdx(:,:,:) + zwx(:,:,:) ! <<< Add to previously computed 550 582 ztrdy(:,:,:) = ztrdy(:,:,:) + zwy(:,:,:) ! <<< Add to previously computed 551 583 ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:) ! <<< Add to previously computed 552 584 !$OMP END PARALLEL WORKSHARE 553 585 CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) ) 554 586 CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) ) … … 602 634 zbig = 1.e+40_wp 603 635 zrtrn = 1.e-15_wp 636 !$OMP PARALLEL WORKSHARE 604 637 zbetup(:,:,:) = 0._wp ; zbetdo(:,:,:) = 0._wp 605 638 !$OMP END PARALLEL WORKSHARE 606 639 ! Search local extrema 607 640 ! -------------------- 608 641 ! max/min of pbef & paft with large negative/positive value (-/+zbig) inside land 609 zbup = MAX( pbef * tmask - zbig * ( 1._wp - tmask ), & 610 & paft * tmask - zbig * ( 1._wp - tmask ) ) 611 zbdo = MIN( pbef * tmask + zbig * ( 1._wp - tmask ), & 612 & paft * tmask + zbig * ( 1._wp - tmask ) ) 613 642 !zbup = MAX( pbef * tmask - zbig * ( 1._wp - tmask ), & 643 ! & paft * tmask - zbig * ( 1._wp - tmask ) ) 644 !zbdo = MIN( pbef * tmask + zbig * ( 1._wp - tmask ), & 645 ! & paft * tmask + zbig * ( 1._wp - tmask ) ) 646 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 647 DO jk = 1, jpk 648 DO jj = 1, jpj 649 !DIR$ IVDEP 650 DO ji = 1, jpi 651 zbup(ji,jj,jk) = MAX( pbef(ji,jj,jk) * tmask(ji,jj,jk) - zbig * ( 1._wp - tmask(ji,jj,jk) ), & 652 & paft(ji,jj,jk) * tmask(ji,jj,jk) - zbig * ( 1._wp - tmask(ji,jj,jk) ) ) 653 zbdo(ji,jj,jk) = MIN( pbef(ji,jj,jk) * tmask(ji,jj,jk) + zbig * ( 1._wp - tmask(ji,jj,jk) ), & 654 & paft(ji,jj,jk) * tmask(ji,jj,jk) + zbig * ( 1._wp - tmask(ji,jj,jk) ) ) 655 END DO 656 END DO 657 END DO 658 659 660 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zpos, zneg, zbt, ikm1, z2dtt, zup, zdo) 614 661 DO jk = 1, jpkm1 615 662 ikm1 = MAX(jk-1,1) … … 651 698 ! 3. monotonic flux in the i & j direction (paa & pbb) 652 699 ! ---------------------------------------- 700 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, za, zb, zc, zav, zbv, zcv, zau, zbu, zcu) 653 701 DO jk = 1, jpkm1 654 702 DO jj = 2, jpjm1 -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r5149 r6508 137 137 138 138 ! Horizontal tracer gradient 139 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 139 140 DO jk = 1, jpkm1 140 141 DO jj = 1, jpjm1 … … 173 174 ! 174 175 ! interior value 176 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 175 177 DO jk = 2, jpkm1 176 178 DO jj = 1, jpj … … 286 288 287 289 ! interior (2=<jk=<jpk-1) 290 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcoef0, zmsku, zmskv, zcoef3, zcoef4) 288 291 DO jk = 2, jpkm1 289 292 DO jj = 2, jpjm1 … … 310 313 ! I.5 Divergence of vertical fluxes added to the general tracer trend 311 314 ! ------------------------------------------------------------------- 315 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 312 316 DO jk = 1, jpkm1 313 317 DO jj = 2, jpjm1 -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r6204 r6508 138 138 139 139 IF( neuler == 0 .AND. kt == nit000 ) THEN ! Euler time-stepping at first time-step (only swap) 140 !$OMP PARALLEL DO schedule(static) private(jk) 140 141 DO jn = 1, jpts 141 142 DO jk = 1, jpkm1 … … 153 154 ! trends computation 154 155 IF( l_trdtra ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 156 !$OMP PARALLEL DO schedule(static) private(jk, zfact) 155 157 DO jk = 1, jpkm1 156 158 zfact = 1._wp / r2dtra(jk) … … 220 222 DO jn = 1, kjpt 221 223 ! 224 !$OMP PARALLEL DO private(jk,ji,jj, ztn,ztd) 222 225 DO jk = 1, jpkm1 223 226 DO jj = 1, jpj -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90
r5120 r6508 120 120 ELSE ; zwt(:,:,2:jpk) = fsavs(:,:,2:jpk) 121 121 ENDIF 122 !$OMP PARALLEL DO schedule(static) private(jj, ji) 122 123 DO jj=1, jpj 123 124 DO ji=1, jpi … … 129 130 ! isoneutral diffusion: add the contribution 130 131 IF( ln_traldf_grif ) THEN ! Griffies isoneutral diff 132 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 131 133 DO jk = 2, jpkm1 132 134 DO jj = 2, jpjm1 … … 137 139 END DO 138 140 ELSE IF( l_traldf_rot ) THEN ! standard isoneutral diff 141 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 139 142 DO jk = 2, jpkm1 140 143 DO jj = 2, jpjm1 … … 149 152 #endif 150 153 ! Diagonal, lower (i), upper (s) (including the bottom boundary condition since avt is masked) 154 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3ta, ze3tn) 151 155 DO jk = 1, jpkm1 152 156 DO jj = 2, jpjm1 … … 182 186 ! first recurrence: Tk = Dk - Ik Sk-1 / Tk-1 (increasing k) 183 187 ! done once for all passive tracers (so included in the IF instruction) 188 !$OMP PARALLEL DO schedule(static) private(jj, ji) 184 189 DO jj = 2, jpjm1 185 190 DO ji = fs_2, fs_jpim1 … … 188 193 END DO 189 194 DO jk = 2, jpkm1 195 !$OMP PARALLEL DO schedule(static) private(jj, ji) 190 196 DO jj = 2, jpjm1 191 197 DO ji = fs_2, fs_jpim1 … … 198 204 ! 199 205 ! second recurrence: Zk = Yk - Ik / Tk-1 Zk-1 206 !$OMP PARALLEL DO schedule(static) private(jj, ji) 200 207 DO jj = 2, jpjm1 201 208 DO ji = fs_2, fs_jpim1 … … 207 214 END DO 208 215 DO jk = 2, jpkm1 216 !$OMP PARALLEL DO schedule(static) private(jj, ji) 209 217 DO jj = 2, jpjm1 210 218 DO ji = fs_2, fs_jpim1 … … 218 226 219 227 ! third recurrence: Xk = (Zk - Sk Xk+1 ) / Tk (result is the after tracer) 228 !$OMP PARALLEL DO schedule(static) private(jj, ji) 220 229 DO jj = 2, jpjm1 221 230 DO ji = fs_2, fs_jpim1 … … 224 233 END DO 225 234 DO jk = jpk-2, 1, -1 235 !$OMP PARALLEL DO schedule(static) private(jj, ji) 226 236 DO jj = 2, jpjm1 227 237 DO ji = fs_2, fs_jpim1 -
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
r6314 r6508 175 175 ! 176 176 IF( kt /= nit000 ) THEN ! restore before value to compute tke 177 avt (:,:,:) = avt_k (:,:,:) 178 avm (:,:,:) = avm_k (:,:,:) 179 avmu(:,:,:) = avmu_k(:,:,:) 180 avmv(:,:,:) = avmv_k(:,:,:) 181 ENDIF 177 !$OMP PARALLEL DO private(jk,jj,ji) 178 DO jk = 1, jpk 179 DO jj = 1, jpj 180 $!DIR$ IVDEP 181 DO ji = 1, jpi 182 avt (ji,jj,jk) = avt_k(ji,jj,jk) 183 avm (ji,jj,jk) = avm_k(ji,jj,jk) 184 avmu(ji,jj,jk) = avmu_k(ji,jj,jk) 185 avmv(ji,jj,jk) = avmv_k(ji,jj,jk) 186 END DO 187 END DO 188 END DO 189 ENDIF 182 190 ! 183 191 CALL tke_tke ! now tke (en) … … 185 193 CALL tke_avn ! now avt, avm, avmu, avmv 186 194 ! 187 avt_k (:,:,:) = avt (:,:,:) 188 avm_k (:,:,:) = avm (:,:,:) 189 avmu_k(:,:,:) = avmu(:,:,:) 190 avmv_k(:,:,:) = avmv(:,:,:) 195 !$OMP PARALLEL DO private(jk,jj,ji) 196 DO jk = 1, jpk 197 DO jj = 1, jpj 198 !DIR$ IVDEP 199 DO ji = 1, jpi 200 avt_k (ji,ji,jk) = avt (ji,jj,jk) 201 avm_k (ji,ji,jk) = avm (ji,jj,jk) 202 avmu_k(ji,ji,jk) = avmu(ji,jj,jk) 203 avmv_k(ji,ji,jk) = avmv(ji,jj,jk) 204 END DO 205 END DO 206 END DO 191 207 ! 192 208 #if defined key_agrif … … 292 308 zpelc(:,:,1) = MAX( rn2b(:,:,1), 0._wp ) * fsdepw(:,:,1) * fse3w(:,:,1) 293 309 DO jk = 2, jpk 294 zpelc(:,:,jk) = zpelc(:,:,jk-1) + MAX( rn2b(:,:,jk), 0._wp ) * fsdepw(:,:,jk) * fse3w(:,:,jk) 295 END DO 310 !$OMP PARALLEL DO schedule(static) private(jj, ji) 311 DO jj =1, jpj 312 DO ji=1, jpi 313 zpelc(ji,jj,jk) = zpelc(ji,jj,jk-1) + MAX( rn2b(ji,jj,jk), 0._wp ) * fsdepw(ji,jj,jk) *fse3w(ji,jj,jk) 314 END DO 315 END DO 316 END DO 296 317 ! !* finite Langmuir Circulation depth 297 318 zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 298 319 imlc(:,:) = mbkt(:,:) + 1 ! Initialization to the number of w ocean point (=2 over land) 299 DO jk = jpkm1, 2, -1 320 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zus) 321 DO jk = jpkm1, 2, -1 300 322 DO jj = 1, jpj ! Last w-level at which zpelc>=0.5*us*us 301 323 DO ji = 1, jpi ! with us=0.016*wind(starting from jpk-1) … … 313 335 zcof = 0.016 / SQRT( zrhoa * zcdrag ) 314 336 !CDIR NOVERRCHK 337 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zus, zind, zwlc) 315 338 DO jk = 2, jpkm1 !* TKE Langmuir circulation source term added to en 316 339 !CDIR NOVERRCHK … … 338 361 ! ! zdiag : diagonal zd_up : upper diagonal zd_lw : lower diagonal 339 362 ! 363 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 340 364 DO jk = 2, jpkm1 !* Shear production at uw- and vw-points (energy conserving form) 341 365 DO jj = 1, jpj ! here avmu, avmv used as workspace … … 353 377 END DO 354 378 ! 379 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcof, zzd_up, zesh2, zzd_lw) 355 380 DO jk = 2, jpkm1 !* Matrix and right hand side in en 356 381 DO jj = 2, jpjm1 … … 385 410 END DO 386 411 ! !* Matrix inversion from level 2 (tke prescribed at level 1) 387 DO jk = 3, jpkm1 ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 388 DO jj = 2, jpjm1 389 DO ji = fs_2, fs_jpim1 ! vector opt. 412 DO jk = 3, jpkm1 ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 413 !$OMP PARALLEL DO schedule(static) private(jj, ji) 414 DO jj = 2, jpjm1 415 DO ji = fs_2, fs_jpim1 ! vector opt. 390 416 zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 391 417 END DO 392 418 END DO 419 393 420 END DO 394 421 ! 395 422 ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 396 DO jj = 2, jpjm1 423 !$OMP PARALLEL DO schedule(static) private(jj, ji) 424 DO jj = 2, jpjm1 397 425 DO ji = fs_2, fs_jpim1 ! vector opt. 398 426 zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1) ! Surface boudary conditions on tke … … 400 428 END DO 401 429 DO jk = 3, jpkm1 430 !$OMP PARALLEL DO schedule(static) private(jj, ji) 402 431 DO jj = 2, jpjm1 403 432 DO ji = fs_2, fs_jpim1 ! vector opt. … … 408 437 ! 409 438 ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 439 !$OMP PARALLEL DO schedule(static) private(jj, ji) 410 440 DO jj = 2, jpjm1 411 441 DO ji = fs_2, fs_jpim1 ! vector opt. … … 414 444 END DO 415 445 DO jk = jpk-2, 2, -1 446 !$OMP PARALLEL DO schedule(static) private(jj, ji) 416 447 DO jj = 2, jpjm1 417 448 DO ji = fs_2, fs_jpim1 ! vector opt. … … 420 451 END DO 421 452 END DO 453 !$OMP PARALLEL DO schedule(static) private(jk,jj, ji) 422 454 DO jk = 2, jpkm1 ! set the minimum value of tke 423 455 DO jj = 2, jpjm1 424 456 DO ji = fs_2, fs_jpim1 ! vector opt. 425 457 en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * wmask(ji,jj,jk) 426 458 END DO 427 459 END DO 460 428 461 END DO 429 462 … … 432 465 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 433 466 IF( nn_etau == 1 ) THEN !* penetration below the mixed layer (rn_efr fraction) 434 DO jk = 2, jpkm1 467 !$OMP PARALLEL DO schedule(static) private(jk,jj, ji) 468 DO jk = 2, jpkm1 435 469 DO jj = 2, jpjm1 436 470 DO ji = fs_2, fs_jpim1 ! vector opt. 437 471 en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -fsdepw(ji,jj,jk) / htau(ji,jj) ) & 438 & * ( 1._wp - fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1)439 END DO 440 END DO441 END DO 472 & * ( 1._wp - fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 473 END DO 474 END DO 475 END DO 442 476 ELSEIF( nn_etau == 2 ) THEN !* act only at the base of the mixed layer (jk=nmln) (rn_efr fraction) 443 477 DO jj = 2, jpjm1 … … 450 484 ELSEIF( nn_etau == 3 ) THEN !* penetration belox the mixed layer (HF variability) 451 485 !CDIR NOVERRCHK 486 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ztau, zdif, ztx2, zty2) 452 487 DO jk = 2, jpkm1 453 488 !CDIR NOVERRCHK … … 530 565 ! 531 566 ! initialisation of interior minimum value (avoid a 2d loop with mikt) 532 zmxlm(:,:,:) = rmxl_min 533 zmxld(:,:,:) = rmxl_min 534 ! 567 !$OMP PARALLEL DO schedule(static) private(jk,jj, ji) 568 DO jk = 1, jpk 569 DO jj = 1, jpj 570 DO ji = 1, jpi 571 zmxlm(ji,jj,jk) = rmxl_min 572 zmxld(ji,jj,jk) = rmxl_min 573 END DO 574 END DO 575 END DO 576 ! 535 577 IF( ln_mxl0 ) THEN ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 536 DO jj = 2, jpjm1 578 !$OMP PARALLEL DO schedule(static) private(jj, ji) 579 DO jj = 2, jpjm1 537 580 DO ji = fs_2, fs_jpim1 538 581 zraug = vkarmn * 2.e5_wp / ( rau0 * grav ) … … 541 584 END DO 542 585 ELSE 543 zmxlm(:,:,1) = rn_mxl0 586 !$OMP PARALLEL DO schedule(static) private(jj, ji) 587 DO jj = 1, jpj 588 DO ji = 1, jpi 589 zmxlm(ji,jj,1) = rn_mxl0 590 END DO 591 END DO 592 544 593 ENDIF 545 594 ! 546 595 !CDIR NOVERRCHK 596 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrn2) 547 597 DO jk = 2, jpkm1 ! interior value : l=sqrt(2*e/n^2) 548 598 !CDIR NOVERRCHK … … 565 615 ! where wmask = 0 set zmxlm == fse3w 566 616 CASE ( 0 ) ! bounded by the distance to surface and bottom 567 DO jk = 2, jpkm1 617 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl) 618 DO jk = 2, jpkm1 568 619 DO jj = 2, jpjm1 569 620 DO ji = fs_2, fs_jpim1 ! vector opt. … … 578 629 ! 579 630 CASE ( 1 ) ! bounded by the vertical scale factor 580 DO jk = 2, jpkm1 631 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl) 632 DO jk = 2, jpkm1 581 633 DO jj = 2, jpjm1 582 634 DO ji = fs_2, fs_jpim1 ! vector opt. … … 589 641 ! 590 642 CASE ( 2 ) ! |dk[xml]| bounded by e3t : 591 DO jk = 2, jpkm1 ! from the surface to the bottom : 592 DO jj = 2, jpjm1 643 DO jk = 2, jpkm1 ! from the surface to the bottom : 644 !$OMP PARALLEL DO schedule(static) private(jj, ji) 645 DO jj = 2, jpjm1 593 646 DO ji = fs_2, fs_jpim1 ! vector opt. 594 647 zmxlm(ji,jj,jk) = MIN( zmxlm(ji,jj,jk-1) + fse3t(ji,jj,jk-1), zmxlm(ji,jj,jk) ) 595 648 END DO 596 END DO649 END DO 597 650 END DO 598 651 DO jk = jpkm1, 2, -1 ! from the bottom to the surface : 652 !$OMP PARALLEL DO schedule(static) private(jj, ji) 599 653 DO jj = 2, jpjm1 600 654 DO ji = fs_2, fs_jpim1 ! vector opt. … … 605 659 END DO 606 660 END DO 607 ! 661 ! 608 662 CASE ( 3 ) ! lup and ldown, |dk[xml]| bounded by e3t : 609 663 DO jk = 2, jpkm1 ! from the surface to the bottom : lup 664 !$OMP PARALLEL DO schedule(static) private(jj, ji) 610 665 DO jj = 2, jpjm1 611 666 DO ji = fs_2, fs_jpim1 ! vector opt. … … 615 670 END DO 616 671 DO jk = jpkm1, 2, -1 ! from the bottom to the surface : ldown 672 !$OMP PARALLEL DO schedule(static) private(jj, ji) 617 673 DO jj = 2, jpjm1 618 674 DO ji = fs_2, fs_jpim1 ! vector opt. … … 622 678 END DO 623 679 !CDIR NOVERRCHK 680 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl, zemlp) 624 681 DO jk = 2, jpkm1 625 682 !CDIR NOVERRCHK … … 646 703 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 647 704 !CDIR NOVERRCHK 705 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zsqen, zav) 648 706 DO jk = 1, jpkm1 !* vertical eddy viscosity & diffivity at w-points 649 707 !CDIR NOVERRCHK … … 661 719 CALL lbc_lnk( avm, 'W', 1. ) ! Lateral boundary conditions (sign unchanged) 662 720 ! 721 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 663 722 DO jk = 2, jpkm1 !* vertical eddy viscosity at wu- and wv-points 664 723 DO jj = 2, jpjm1 … … 672 731 ! 673 732 IF( nn_pdl == 1 ) THEN !* Prandtl number case: update avt 733 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcoef, zdku, zdkv, zpdlr, zri) 674 734 DO jk = 2, jpkm1 675 735 DO jj = 2, jpjm1 … … 809 869 ENDIF 810 870 ! !* set vertical eddy coef. to the background value 811 DO jk = 1, jpk 871 !$OMP PARALLEL DO schedule(static) private(jk) 872 DO jk = 1, jpk 812 873 avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 813 874 avm (:,:,jk) = avmb(jk) * wmask (:,:,jk)
Note: See TracChangeset
for help on using the changeset viewer.