Changeset 7698
- Timestamp:
- 2017-02-18T10:02:03+01:00 (7 years ago)
- Location:
- trunk/NEMOGCM
- Files:
-
- 122 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/LIM_SRC_3/limadv_umx.F90
r7646 r7698 75 75 ! upstream advection with initial mass fluxes & intermediate update 76 76 ! -------------------------------------------------------------------- 77 !$OMP PARALLEL 78 !$OMP DO schedule(static) private(jj,ji,zfp_ui,zfm_ui,zfp_vj,zfm_vj) 77 79 DO jj = 1, jpjm1 ! upstream tracer flux in the i and j direction 78 80 DO ji = 1, fs_jpim1 ! vector opt. … … 86 88 END DO 87 89 90 !$OMP DO schedule(static) private(jj,ji,ztra) 88 91 DO jj = 2, jpjm1 ! total intermediate advective trends 89 92 DO ji = fs_2, fs_jpim1 ! vector opt. … … 95 98 END DO 96 99 END DO 100 !$OMP END PARALLEL 97 101 CALL lbc_lnk( zt_ups, 'T', 1. ) ! Lateral boundary conditions (unchanged sign) 98 102 … … 101 105 SELECT CASE( nn_limadv_ord ) 102 106 CASE ( 20 ) ! centered second order 107 !$OMP PARALLEL DO schedule(static) private(jj,ji) 103 108 DO jj = 2, jpjm1 104 109 DO ji = fs_2, fs_jpim1 ! vector opt. … … 111 116 CALL macho( kt, nn_limadv_ord, pdt, ptc, puc, pvc, pubox, pvbox, zt_u, zt_v ) 112 117 ! 118 !$OMP PARALLEL DO schedule(static) private(jj,ji) 113 119 DO jj = 2, jpjm1 114 120 DO ji = fs_2, fs_jpim1 ! vector opt. … … 122 128 ! antidiffusive flux : high order minus low order 123 129 ! -------------------------------------------------- 130 !$OMP PARALLEL DO schedule(static) private(jj,ji) 124 131 DO jj = 2, jpjm1 125 132 DO ji = fs_2, fs_jpim1 ! vector opt. … … 136 143 ! final trend with corrected fluxes 137 144 ! ------------------------------------ 145 !$OMP PARALLEL DO schedule(static) private(jj,ji,ztra) 138 146 DO jj = 2, jpjm1 139 147 DO ji = fs_2, fs_jpim1 ! vector opt. … … 187 195 ! 188 196 ! !-- advective form update in zzt --! 197 !$OMP PARALLEL DO schedule(static) private(jj,ji) 189 198 DO jj = 2, jpjm1 190 199 DO ji = fs_2, fs_jpim1 ! vector opt. … … 205 214 ! 206 215 ! !-- advective form update in zzt --! 216 !$OMP PARALLEL DO schedule(static) private(jj,ji) 207 217 DO jj = 2, jpjm1 208 218 DO ji = fs_2, fs_jpim1 … … 253 263 ! 254 264 ! !-- Laplacian in i-direction --! 265 !$OMP PARALLEL DO schedule(static) private(jj,ji) 255 266 DO jj = 2, jpjm1 ! First derivative (gradient) 256 267 DO ji = 1, fs_jpim1 … … 265 276 ! 266 277 ! !-- BiLaplacian in i-direction --! 278 !$OMP PARALLEL DO schedule(static) private(jj,ji) 267 279 DO jj = 2, jpjm1 ! Third derivative 268 280 DO ji = 1, fs_jpim1 … … 281 293 CASE( 1 ) !== 1st order central TIM ==! (Eq. 21) 282 294 ! 295 !$OMP PARALLEL DO schedule(static) private(jj,ji) 283 296 DO jj = 1, jpj 284 297 DO ji = 1, fs_jpim1 ! vector opt. … … 290 303 CASE( 2 ) !== 2nd order central TIM ==! (Eq. 23) 291 304 ! 305 !$OMP PARALLEL DO schedule(static) private(jj,ji,zcu) 292 306 DO jj = 1, jpj 293 307 DO ji = 1, fs_jpim1 ! vector opt. … … 301 315 CASE( 3 ) !== 3rd order central TIM ==! (Eq. 24) 302 316 ! 317 !$OMP PARALLEL DO schedule(static) private(jj,ji,zcu,zdx2) 303 318 DO jj = 1, jpj 304 319 DO ji = 1, fs_jpim1 ! vector opt. … … 315 330 CASE( 4 ) !== 4th order central TIM ==! (Eq. 27) 316 331 ! 332 !$OMP PARALLEL DO schedule(static) private(jj,ji,zcu,zdx2) 317 333 DO jj = 1, jpj 318 334 DO ji = 1, fs_jpim1 ! vector opt. … … 329 345 CASE( 5 ) !== 5th order central TIM ==! (Eq. 29) 330 346 ! 347 !$OMP PARALLEL DO schedule(static) private(jj,ji,zcu,zdx2,zdx4) 331 348 DO jj = 1, jpj 332 349 DO ji = 1, fs_jpim1 ! vector opt. … … 380 397 ! 381 398 ! !-- Laplacian in j-direction --! 399 !$OMP PARALLEL 400 !$OMP DO schedule(static) private(jj,ji) 382 401 DO jj = 1, jpjm1 ! First derivative (gradient) 383 402 DO ji = fs_2, fs_jpim1 … … 385 404 END DO 386 405 END DO 406 !$OMP DO schedule(static) private(jj,ji) 387 407 DO jj = 2, jpjm1 ! Second derivative (Laplacian) 388 408 DO ji = fs_2, fs_jpim1 … … 390 410 END DO 391 411 END DO 412 !$OMP END PARALLEL 392 413 CALL lbc_lnk( ztv2, 'T', 1. ) 393 414 ! 394 415 ! !-- BiLaplacian in j-direction --! 416 !$OMP PARALLEL 417 !$OMP DO schedule(static) private(jj,ji) 395 418 DO jj = 1, jpjm1 ! First derivative 396 419 DO ji = fs_2, fs_jpim1 … … 398 421 END DO 399 422 END DO 423 !$OMP DO schedule(static) private(jj,ji) 400 424 DO jj = 2, jpjm1 ! Second derivative 401 425 DO ji = fs_2, fs_jpim1 … … 403 427 END DO 404 428 END DO 429 !$OMP END PARALLEL 405 430 CALL lbc_lnk( ztv4, 'T', 1. ) 406 431 ! … … 410 435 CASE( 1 ) !== 1st order central TIM ==! (Eq. 21) 411 436 ! 437 !$OMP PARALLEL DO schedule(static) private(jj,ji) 412 438 DO jj = 1, jpjm1 413 439 DO ji = 1, jpi … … 418 444 ! 419 445 CASE( 2 ) !== 2nd order central TIM ==! (Eq. 23) 446 !$OMP PARALLEL DO schedule(static) private(jj,ji,zcv) 420 447 DO jj = 1, jpjm1 421 448 DO ji = 1, jpi … … 429 456 CASE( 3 ) !== 3rd order central TIM ==! (Eq. 24) 430 457 ! 458 !$OMP PARALLEL DO schedule(static) private(jj,ji,zcv,zdy2) 431 459 DO jj = 1, jpjm1 432 460 DO ji = 1, jpi … … 443 471 CASE( 4 ) !== 4th order central TIM ==! (Eq. 27) 444 472 ! 473 !$OMP PARALLEL DO schedule(static) private(jj,ji,zcv,zdy2) 445 474 DO jj = 1, jpjm1 446 475 DO ji = 1, jpi … … 457 486 CASE( 5 ) !== 5th order central TIM ==! (Eq. 29) 458 487 ! 488 !$OMP PARALLEL DO schedule(static) private(jj,ji,zcv,zdy2,zdy4) 459 489 DO jj = 1, jpjm1 460 490 DO ji = 1, jpi … … 513 543 514 544 ! clem test 545 !$OMP PARALLEL DO schedule(static) private(jj,ji) 515 546 DO jj = 2, jpjm1 516 547 DO ji = fs_2, fs_jpim1 ! vector opt. … … 522 553 523 554 ! Determine ice masks for before and after tracers 524 WHERE( pbef(:,:) == 0._wp .AND. paft(:,:) == 0._wp .AND. zdiv(:,:) == 0._wp ) ; zmsk(:,:) = 0._wp 525 ELSEWHERE ; zmsk(:,:) = 1._wp * tmask(:,:,1) 526 END WHERE 555 !$OMP PARALLEL DO schedule(static) private(jj,ji) 556 DO jj = 1, jpj 557 DO ji = 1, jpi 558 IF( pbef(ji,jj) == 0._wp .AND. paft(ji,jj) == 0._wp .AND. zdiv(ji,jj) == 0._wp ) THEN 559 zmsk(ji,jj) = 0._wp 560 ELSE 561 zmsk(ji,jj) = 1._wp * tmask(ji,jj,1) 562 END IF 563 END DO 564 END DO 527 565 528 566 ! Search local extrema … … 533 571 ! zbdo(:,:) = MIN( pbef(:,:) * tmask(:,:,1) + zbig * ( 1.e0 - tmask(:,:,1) ), & 534 572 ! & paft(:,:) * tmask(:,:,1) + zbig * ( 1.e0 - tmask(:,:,1) ) ) 535 zbup(:,:) = MAX( pbef(:,:) * zmsk(:,:) - zbig * ( 1.e0 - zmsk(:,:) ), &536 & paft(:,:) * zmsk(:,:) - zbig * ( 1.e0 - zmsk(:,:) ) )537 zbdo(:,:) = MIN( pbef(:,:) * zmsk(:,:) + zbig * ( 1.e0 - zmsk(:,:) ), &538 & paft(:,:) * zmsk(:,:) + zbig * ( 1.e0 - zmsk(:,:) ) )539 573 540 574 z1_dt = 1._wp / pdt 575 576 !$OMP PARALLEL 577 !$OMP DO schedule(static) private(jj,ji) 578 DO jj = 1, jpj 579 DO ji = 1, jpi 580 zbup(ji,jj) = MAX( pbef(ji,jj) * zmsk(ji,jj) - zbig * ( 1.e0 - zmsk(ji,jj) ), & 581 & paft(ji,jj) * zmsk(ji,jj) - zbig * ( 1.e0 - zmsk(ji,jj) ) ) 582 zbdo(ji,jj) = MIN( pbef(ji,jj) * zmsk(ji,jj) + zbig * ( 1.e0 - zmsk(ji,jj) ), & 583 & paft(ji,jj) * zmsk(ji,jj) + zbig * ( 1.e0 - zmsk(ji,jj) ) ) 584 END DO 585 END DO 586 587 !$OMP DO schedule(static) private(jj,ji,zup,zdo,zpos,zneg,zbt) 541 588 DO jj = 2, jpjm1 542 589 DO ji = fs_2, fs_jpim1 ! vector opt. … … 557 604 END DO 558 605 END DO 606 !$OMP END PARALLEL 559 607 CALL lbc_lnk_multi( zbetup, 'T', 1., zbetdo, 'T', 1. ) ! lateral boundary cond. (unchanged sign) 560 608 561 609 ! monotonic flux in the i & j direction (paa & pbb) 562 610 ! ------------------------------------- 611 !$OMP PARALLEL DO schedule(static) private(jj,ji,zau,zbu,zcu,zav,zbv,zcv) 563 612 DO jj = 2, jpjm1 564 613 DO ji = fs_2, fs_jpim1 ! vector opt. -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r7646 r7698 58 58 INTEGER, INTENT(in) :: kt ! number of iteration 59 59 !! 60 INTEGER :: j l, jk ! dummy loop indices60 INTEGER :: ji, jj, jl, jk ! dummy loop indices 61 61 REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b 62 62 !!--------------------------------------------------------------------- … … 69 69 IF( ln_limdiachk ) CALL lim_cons_hsm(0, 'limdyn', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 70 70 71 ! ice velocities before rheology 72 u_ice_b(:,:) = u_ice(:,:) * umask(:,:,1) 73 v_ice_b(:,:) = v_ice(:,:) * vmask(:,:,1) 71 !$OMP PARALLEL DO schedule(static) private(jj,ji) 72 DO jj = 1, jpj 73 DO ji = 1, jpi 74 ! ice velocities before rheology 75 u_ice_b(ji,jj) = u_ice(ji,jj) * umask(ji,jj,1) 76 v_ice_b(ji,jj) = v_ice(ji,jj) * vmask(ji,jj,1) 74 77 75 ! Landfast ice parameterization: define max bottom friction 76 tau_icebfr(:,:) = 0._wp 78 ! Landfast ice parameterization: define max bottom friction 79 tau_icebfr(ji,jj) = 0._wp 80 END DO 81 END DO 77 82 IF( ln_landfast ) THEN 78 83 DO jl = 1, jpl 79 WHERE( ht_i(:,:,jl) > ht_n(:,:) * rn_gamma ) tau_icebfr(:,:) = tau_icebfr(:,:) + a_i(:,:,jl) * rn_icebfr 84 !$OMP PARALLEL DO schedule(static) private(jj,ji) 85 DO jj = 1, jpj 86 DO ji = 1, jpi 87 IF( ht_i(ji,jj,jl) > ht_n(ji,jj) * rn_gamma ) tau_icebfr(ji,jj) = tau_icebfr(ji,jj) + a_i(ji,jj,jl) * rn_icebfr 88 END DO 89 END DO 80 90 END DO 81 91 ENDIF -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limhdf.F90
r7646 r7698 254 254 255 255 CASE( 0 ) 256 ahiu(:,:) = rn_ahi0_ref 257 ahiv(:,:) = rn_ahi0_ref 256 !$OMP PARALLEL DO schedule(static) private(jj,ji) 257 DO jj = 1, jpj 258 DO ji = 1, jpi 259 ahiu(ji,jj) = rn_ahi0_ref 260 ahiv(ji,jj) = rn_ahi0_ref 261 END DO 262 END DO 258 263 259 264 IF(lwp) WRITE(numout,*) '' … … 265 270 IF( lk_mpp ) CALL mpp_max( zd_max ) ! max over the global domain 266 271 267 ahiu(:,:) = rn_ahi0_ref * zd_max * 1.e-05_wp ! 1.e05 = 100km = max grid space at 60deg latitude in orca2 272 !$OMP PARALLEL DO schedule(static) private(jj,ji) 273 DO jj = 1, jpj 274 DO ji = 1, jpi 275 ahiu(ji,jj) = rn_ahi0_ref * zd_max * 1.e-05_wp ! 1.e05 = 100km = max grid space at 60deg latitude in orca2 268 276 ! (60deg = min latitude for ice cover) 269 ahiv(:,:) = rn_ahi0_ref * zd_max * 1.e-05_wp 277 ahiv(ji,jj) = rn_ahi0_ref * zd_max * 1.e-05_wp 278 END DO 279 END DO 270 280 271 281 IF(lwp) WRITE(numout,*) '' … … 280 290 za00 = rn_ahi0_ref * 1.e-05_wp ! 1.e05 = 100km = max grid space at 60deg latitude in orca2 281 291 ! (60deg = min latitude for ice cover) 292 !$OMP PARALLEL DO schedule(static) private(jj,ji) 282 293 DO jj = 1, jpj 283 294 DO ji = 1, jpi -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r7646 r7698 86 86 REAL(wp), POINTER, DIMENSION(:,:) :: zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini !data from namelist or nc file 87 87 REAL(wp), POINTER, DIMENSION(:,:,:) :: zh_i_ini, za_i_ini !data by cattegories to fill 88 INTEGER , POINTER, DIMENSION(:) :: itest88 INTEGER , DIMENSION(4) :: itest 89 89 !-------------------------------------------------------------------- 90 90 … … 92 92 CALL wrk_alloc( jpi, jpj, zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 93 93 CALL wrk_alloc( jpi, jpj, zswitch ) 94 Call wrk_alloc( 4, itest )95 94 96 95 IF(lwp) WRITE(numout,*) … … 106 105 ! init surface temperature 107 106 DO jl = 1, jpl 108 t_su (:,:,jl) = rt0 * tmask(:,:,1) 109 tn_ice(:,:,jl) = rt0 * tmask(:,:,1) 107 !$OMP PARALLEL DO schedule(static) private(jj,ji) 108 DO jj = 1, jpj 109 DO ji = 1, jpi 110 t_su (ji,jj,jl) = rt0 * tmask(ji,jj,1) 111 tn_ice(ji,jj,jl) = rt0 * tmask(ji,jj,1) 112 END DO 113 END DO 110 114 END DO 111 115 112 116 ! init basal temperature (considered at freezing point) 113 117 CALL eos_fzp( sss_m(:,:), t_bo(:,:) ) 114 t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) 118 !$OMP PARALLEL DO schedule(static) private(jj,ji) 119 DO jj = 1, jpj 120 DO ji = 1, jpi 121 t_bo(ji,jj) = ( t_bo(ji,jj) + rt0 ) * tmask(ji,jj,1) 122 END DO 123 END DO 115 124 116 125 … … 122 131 IF( ln_limini_file )THEN 123 132 ! 124 zht_i_ini(:,:) = si(jp_hti)%fnow(:,:,1) 125 zht_s_ini(:,:) = si(jp_hts)%fnow(:,:,1) 126 zat_i_ini(:,:) = si(jp_ati)%fnow(:,:,1) 127 zts_u_ini(:,:) = si(jp_tsu)%fnow(:,:,1) 128 ztm_i_ini(:,:) = si(jp_tmi)%fnow(:,:,1) 129 zsm_i_ini(:,:) = si(jp_smi)%fnow(:,:,1) 130 ! 131 WHERE( zat_i_ini(:,:) > 0._wp ) ; zswitch(:,:) = tmask(:,:,1) 132 ELSEWHERE ; zswitch(:,:) = 0._wp 133 END WHERE 134 ! 133 !$OMP PARALLEL DO schedule(static) private(jj,ji) 134 DO jj = 1, jpj 135 DO ji = 1, jpi 136 zht_i_ini(ji,jj) = si(jp_hti)%fnow(ji,jj,1) 137 zht_s_ini(ji,jj) = si(jp_hts)%fnow(ji,jj,1) 138 zat_i_ini(ji,jj) = si(jp_ati)%fnow(ji,jj,1) 139 zts_u_ini(ji,jj) = si(jp_tsu)%fnow(ji,jj,1) 140 ztm_i_ini(ji,jj) = si(jp_tmi)%fnow(ji,jj,1) 141 zsm_i_ini(ji,jj) = si(jp_smi)%fnow(ji,jj,1) 142 ! 143 IF ( zat_i_ini(ji,jj) > 0._wp ) THEN ; zswitch(ji,jj) = tmask(ji,jj,1) 144 ELSE ; zswitch(ji,jj) = 0._wp 145 END IF 146 END DO 147 END DO 148 ! 135 149 ELSE ! ln_limini_file = F 136 150 … … 139 153 !-------------------------------------------------------------------- 140 154 ! no ice if sst <= t-freez + ttest 141 WHERE( ( sst_m(:,:) - (t_bo(:,:) - rt0) ) * tmask(:,:,1) >= rn_thres_sst ) ; zswitch(:,:) = 0._wp 142 ELSEWHERE ; zswitch(:,:) = tmask(:,:,1) 143 END WHERE 155 !$OMP PARALLEL 156 !$OMP DO schedule(static) private(jj,ji) 157 DO jj = 1, jpj 158 DO ji = 1, jpi 159 IF ( ( sst_m(ji,jj) - (t_bo(ji,jj) - rt0) ) * tmask(ji,jj,1) >= rn_thres_sst ) THEN 160 zswitch(ji,jj) = 0._wp 161 ELSE 162 zswitch(ji,jj) = tmask(ji,jj,1) 163 END IF 164 END DO 165 END DO 144 166 145 167 !----------------------------- … … 147 169 !----------------------------- 148 170 ! assign initial thickness, concentration, snow depth and salinity to an hemisphere-dependent array 171 !$OMP DO schedule(static) private(jj,ji) 149 172 DO jj = 1, jpj 150 173 DO ji = 1, jpi … … 166 189 END DO 167 190 END DO 191 !$OMP END PARALLEL 168 192 ! 169 193 ENDIF ! ln_limini_file 170 194 171 zvt_i_ini(:,:) = zht_i_ini(:,:) * zat_i_ini(:,:) ! ice volume 195 !$OMP PARALLEL 196 !$OMP DO schedule(static) private(jj,ji) 197 DO jj = 1, jpj 198 DO ji = 1, jpi 199 zvt_i_ini(ji,jj) = zht_i_ini(ji,jj) * zat_i_ini(ji,jj) ! ice volume 200 END DO 201 END DO 172 202 !--------------------------------------------------------------------- 173 203 ! 3.2) Distribute ice concentration and thickness into the categories … … 176 206 ! then we check whether the distribution fullfills 177 207 ! volume and area conservation, positivity and ice categories bounds 178 zh_i_ini(:,:,:) = 0._wp 179 za_i_ini(:,:,:) = 0._wp 208 DO jl = 1, jpl 209 !$OMP DO schedule(static) private(jj,ji) 210 DO jj = 1, jpj 211 DO ji = 1, jpi 212 zh_i_ini(ji,jj,jl) = 0._wp 213 za_i_ini(ji,jj,jl) = 0._wp 214 END DO 215 END DO 216 END DO 180 217 ! 218 !$OMP DO schedule(static) private(jj,ji,jl0,jl,i_fill,zarg,zV,zdv,zconv,itest) 181 219 DO jj = 1, jpj 182 220 DO ji = 1, jpi … … 289 327 END DO 290 328 END DO 329 !$OMP END PARALLEL 291 330 292 331 !--------------------------------------------------------------------- … … 296 335 ! Ice concentration, thickness and volume, ice salinity, ice age, surface temperature 297 336 DO jl = 1, jpl ! loop over categories 337 !$OMP PARALLEL DO schedule(static) private(jj,ji) 298 338 DO jj = 1, jpj 299 339 DO ji = 1, jpi … … 333 373 ENDIF 334 374 375 !$OMP PARALLEL 335 376 ! Snow temperature and heat content 336 377 DO jk = 1, nlay_s 337 378 DO jl = 1, jpl ! loop over categories 379 !$OMP DO schedule(static) private(jj,ji) 338 380 DO jj = 1, jpj 339 381 DO ji = 1, jpi … … 352 394 DO jk = 1, nlay_i 353 395 DO jl = 1, jpl ! loop over categories 396 !$OMP DO schedule(static) private(jj,ji) 354 397 DO jj = 1, jpj 355 398 DO ji = 1, jpi … … 370 413 END DO 371 414 372 tn_ice (:,:,:) = t_su (:,:,:) 415 DO jl = 1, jpl 416 !$OMP DO schedule(static) private(jj,ji) 417 DO jj = 1, jpj 418 DO ji = 1, jpi 419 tn_ice (ji,jj,jl) = t_su (ji,jj,jl) 420 END DO 421 END DO 422 END DO 423 !$OMP END PARALLEL 373 424 374 425 ELSE ! if ln_limini=false 375 a_i (:,:,:) = 0._wp 376 v_i (:,:,:) = 0._wp 377 v_s (:,:,:) = 0._wp 378 smv_i(:,:,:) = 0._wp 379 oa_i (:,:,:) = 0._wp 380 ht_i (:,:,:) = 0._wp 381 ht_s (:,:,:) = 0._wp 382 sm_i (:,:,:) = 0._wp 383 o_i (:,:,:) = 0._wp 384 385 e_i(:,:,:,:) = 0._wp 386 e_s(:,:,:,:) = 0._wp 426 !$OMP PARALLEL 427 DO jl = 1, jpl 428 !$OMP DO schedule(static) private(jj,ji) 429 DO jj = 1, jpj 430 DO ji = 1, jpi 431 a_i (ji,jj,jl) = 0._wp 432 v_i (ji,jj,jl) = 0._wp 433 v_s (ji,jj,jl) = 0._wp 434 smv_i(ji,jj,jl) = 0._wp 435 oa_i (ji,jj,jl) = 0._wp 436 ht_i (ji,jj,jl) = 0._wp 437 ht_s (ji,jj,jl) = 0._wp 438 sm_i (ji,jj,jl) = 0._wp 439 o_i (ji,jj,jl) = 0._wp 440 END DO 441 END DO 442 END DO 443 444 DO jk = 1, nlay_i 445 DO jl = 1, jpl 446 !$OMP DO schedule(static) private(jj,ji) 447 DO jj = 1, jpj 448 DO ji = 1, jpi 449 e_i(ji,jj,jl,jk) = 0._wp 450 END DO 451 END DO 452 END DO 453 END DO 454 DO jk = 1, nlay_s 455 DO jl = 1, jpl 456 !$OMP DO schedule(static) private(jj,ji) 457 DO jj = 1, jpj 458 DO ji = 1, jpi 459 e_s(ji,jj,jl,jk) = 0._wp 460 END DO 461 END DO 462 END DO 463 END DO 387 464 388 465 DO jl = 1, jpl 389 466 DO jk = 1, nlay_i 390 t_i(:,:,jk,jl) = rt0 * tmask(:,:,1) 467 !$OMP DO schedule(static) private(jj,ji) 468 DO jj = 1, jpj 469 DO ji = 1, jpi 470 t_i(ji,jj,jk,jl) = rt0 * tmask(ji,jj,1) 471 END DO 472 END DO 391 473 END DO 392 474 DO jk = 1, nlay_s 393 t_s(:,:,jk,jl) = rt0 * tmask(:,:,1) 394 END DO 395 END DO 475 !$OMP DO schedule(static) private(jj,ji) 476 DO jj = 1, jpj 477 DO ji = 1, jpi 478 t_s(ji,jj,jk,jl) = rt0 * tmask(ji,jj,1) 479 END DO 480 END DO 481 END DO 482 END DO 483 !$OMP END PARALLEL 396 484 397 485 ENDIF ! ln_limini 398 486 399 at_i (:,:) = 0.0_wp 487 !$OMP PARALLEL 488 !$OMP DO schedule(static) private(jj,ji) 489 DO jj = 1, jpj 490 DO ji = 1, jpi 491 at_i (ji,jj) = 0.0_wp 492 END DO 493 END DO 400 494 DO jl = 1, jpl 401 at_i (:,:) = at_i (:,:) + a_i (:,:,jl) 495 !$OMP DO schedule(static) private(jj,ji) 496 DO jj = 1, jpj 497 DO ji = 1, jpi 498 at_i (ji,jj) = at_i (ji,jj) + a_i (ji,jj,jl) 499 END DO 500 END DO 402 501 END DO 403 502 ! 404 !-------------------------------------------------------------------- 405 ! 4) Global ice variables for output diagnostics | 406 !-------------------------------------------------------------------- 407 u_ice (:,:) = 0._wp 408 v_ice (:,:) = 0._wp 409 stress1_i(:,:) = 0._wp 410 stress2_i(:,:) = 0._wp 411 stress12_i(:,:) = 0._wp 412 413 !-------------------------------------------------------------------- 414 ! 5) Moments for advection 415 !-------------------------------------------------------------------- 416 417 sxopw (:,:) = 0._wp 418 syopw (:,:) = 0._wp 419 sxxopw(:,:) = 0._wp 420 syyopw(:,:) = 0._wp 421 sxyopw(:,:) = 0._wp 422 423 sxice (:,:,:) = 0._wp ; sxsn (:,:,:) = 0._wp ; sxa (:,:,:) = 0._wp 424 syice (:,:,:) = 0._wp ; sysn (:,:,:) = 0._wp ; sya (:,:,:) = 0._wp 425 sxxice(:,:,:) = 0._wp ; sxxsn(:,:,:) = 0._wp ; sxxa (:,:,:) = 0._wp 426 syyice(:,:,:) = 0._wp ; syysn(:,:,:) = 0._wp ; syya (:,:,:) = 0._wp 427 sxyice(:,:,:) = 0._wp ; sxysn(:,:,:) = 0._wp ; sxya (:,:,:) = 0._wp 428 429 sxc0 (:,:,:) = 0._wp ; sxe (:,:,:,:)= 0._wp 430 syc0 (:,:,:) = 0._wp ; sye (:,:,:,:)= 0._wp 431 sxxc0 (:,:,:) = 0._wp ; sxxe (:,:,:,:)= 0._wp 432 syyc0 (:,:,:) = 0._wp ; syye (:,:,:,:)= 0._wp 433 sxyc0 (:,:,:) = 0._wp ; sxye (:,:,:,:)= 0._wp 434 435 sxsal (:,:,:) = 0._wp 436 sysal (:,:,:) = 0._wp 437 sxxsal (:,:,:) = 0._wp 438 syysal (:,:,:) = 0._wp 439 sxysal (:,:,:) = 0._wp 440 441 sxage (:,:,:) = 0._wp 442 syage (:,:,:) = 0._wp 443 sxxage (:,:,:) = 0._wp 444 syyage (:,:,:) = 0._wp 445 sxyage (:,:,:) = 0._wp 503 !$OMP DO schedule(static) private(jj,ji) 504 DO jj = 1, jpj 505 DO ji = 1, jpi 506 !-------------------------------------------------------------------- 507 ! 4) Global ice variables for output diagnostics | 508 !-------------------------------------------------------------------- 509 u_ice (ji,jj) = 0._wp 510 v_ice (ji,jj) = 0._wp 511 stress1_i(ji,jj) = 0._wp 512 stress2_i(ji,jj) = 0._wp 513 stress12_i(ji,jj) = 0._wp 514 515 !-------------------------------------------------------------------- 516 ! 5) Moments for advection 517 !-------------------------------------------------------------------- 518 519 sxopw (ji,jj) = 0._wp 520 syopw (ji,jj) = 0._wp 521 sxxopw(ji,jj) = 0._wp 522 syyopw(ji,jj) = 0._wp 523 sxyopw(ji,jj) = 0._wp 524 END DO 525 END DO 526 527 DO jl = 1, jpl 528 !$OMP DO schedule(static) private(jj,ji) 529 DO jj = 1, jpj 530 DO ji = 1, jpi 531 sxice (ji,jj,jl) = 0._wp ; sxsn (ji,jj,jl) = 0._wp ; sxa (ji,jj,jl) = 0._wp 532 syice (ji,jj,jl) = 0._wp ; sysn (ji,jj,jl) = 0._wp ; sya (ji,jj,jl) = 0._wp 533 sxxice(ji,jj,jl) = 0._wp ; sxxsn(ji,jj,jl) = 0._wp ; sxxa (ji,jj,jl) = 0._wp 534 syyice(ji,jj,jl) = 0._wp ; syysn(ji,jj,jl) = 0._wp ; syya (ji,jj,jl) = 0._wp 535 sxyice(ji,jj,jl) = 0._wp ; sxysn(ji,jj,jl) = 0._wp ; sxya (ji,jj,jl) = 0._wp 536 537 sxc0 (ji,jj,jl) = 0._wp 538 syc0 (ji,jj,jl) = 0._wp 539 sxxc0 (ji,jj,jl) = 0._wp 540 syyc0 (ji,jj,jl) = 0._wp 541 sxyc0 (ji,jj,jl) = 0._wp 542 543 sxsal (ji,jj,jl) = 0._wp 544 sysal (ji,jj,jl) = 0._wp 545 sxxsal (ji,jj,jl) = 0._wp 546 syysal (ji,jj,jl) = 0._wp 547 sxysal (ji,jj,jl) = 0._wp 548 549 sxage (ji,jj,jl) = 0._wp 550 syage (ji,jj,jl) = 0._wp 551 sxxage (ji,jj,jl) = 0._wp 552 syyage (ji,jj,jl) = 0._wp 553 sxyage (ji,jj,jl) = 0._wp 554 END DO 555 END DO 556 END DO 557 558 DO jl = 1, jpl 559 DO jk = 1, nlay_i 560 !$OMP DO schedule(static) private(jj,ji) 561 DO jj = 1, jpj 562 DO ji = 1, jpi 563 sxe (ji,jj,jk,jl)= 0._wp 564 sye (ji,jj,jk,jl)= 0._wp 565 sxxe (ji,jj,jk,jl)= 0._wp 566 syye (ji,jj,jk,jl)= 0._wp 567 sxye (ji,jj,jk,jl)= 0._wp 568 END DO 569 END DO 570 END DO 571 END DO 572 !$OMP END PARALLEL 573 446 574 447 575 !!!clem … … 453 581 CALL wrk_dealloc( jpi, jpj, zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 454 582 CALL wrk_dealloc( jpi, jpj, zswitch ) 455 Call wrk_dealloc( 4, itest )456 583 457 584 END SUBROUTINE lim_istate -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r7646 r7698 115 115 REAL(wp), POINTER, DIMENSION(:,:) :: opning ! rate of opening due to divergence/shear 116 116 REAL(wp), POINTER, DIMENSION(:,:) :: closing_gross ! rate at which area removed, not counting area of new ridges 117 REAL(wp), POINTER, DIMENSION(:,:) :: z_ai 117 118 ! 118 119 INTEGER, PARAMETER :: nitermax = 20 … … 122 123 IF( nn_timing == 1 ) CALL timing_start('limitd_me') 123 124 124 CALL wrk_alloc( jpi,jpj, closing_net, divu_adv, opning, closing_gross )125 CALL wrk_alloc( jpi,jpj, closing_net, divu_adv, opning, closing_gross, z_ai ) 125 126 126 127 ! conservation test … … 135 136 ! 136 137 138 !$OMP PARALLEL DO schedule(static) private(jj,ji) 137 139 DO jj = 1, jpj ! Initialize arrays. 138 140 DO ji = 1, jpi … … 192 194 ! closing rate to a gross closing rate. 193 195 ! NOTE: 0 < aksum <= 1 194 closing_gross(:,:) = closing_net(:,:) / aksum(:,:) 196 !$OMP PARALLEL 197 !$OMP DO schedule(static) private(jj,ji) 198 DO jj = 1, jpj 199 DO ji = 1, jpi 200 closing_gross(ji,jj) = closing_net(ji,jj) / aksum(ji,jj) 201 END DO 202 END DO 195 203 196 204 ! correction to closing rate and opening if closing rate is excessive … … 198 206 ! Reduce the closing rate if more than 100% of the open water 199 207 ! would be removed. Reduce the opening rate proportionately. 208 !$OMP DO schedule(static) private(jj,ji,za,zfac) 200 209 DO jj = 1, jpj 201 210 DO ji = 1, jpi … … 216 225 ! would be removed. Reduce the opening rate proportionately. 217 226 DO jl = 1, jpl 227 !$OMP DO schedule(static) private(jj,ji,za,zfac) 218 228 DO jj = 1, jpj 219 229 DO ji = 1, jpi … … 226 236 END DO 227 237 END DO 238 !$OMP END PARALLEL 228 239 229 240 ! 3.3 Redistribute area, volume, and energy. … … 236 247 !-----------------------------------------------------------------------------! 237 248 ! This is in general not equal to one because of divergence during transport 238 asum(:,:) = ato_i(:,:) + SUM( a_i, dim=3 ) 249 !$OMP PARALLEL 250 !$OMP DO schedule(static) private(jj,ji) 251 DO jj = 1, jpj 252 DO ji = 1, jpi 253 asum(ji,jj) = 0._wp 254 z_ai(ji,jj) = 0._wp 255 END DO 256 END DO 257 DO jl = 1, jpl 258 !$OMP DO schedule(static) private(jj,ji) 259 DO jj = 1, jpj 260 DO ji = 1, jpi 261 z_ai(ji,jj) = z_ai(ji,jj) + a_i(ji,jj,jl) 262 END DO 263 END DO 264 END DO 265 !$OMP DO schedule(static) private(jj,ji) 266 DO jj = 1, jpj 267 DO ji = 1, jpi 268 asum(ji,jj) = ato_i(ji,jj) + z_ai(ji,jj) 269 END DO 270 END DO 239 271 240 272 ! 3.5 Do we keep on iterating ??? … … 244 276 245 277 iterate_ridging = 0 278 !$OMP DO schedule(static) private(jj,ji) 246 279 DO jj = 1, jpj 247 280 DO ji = 1, jpi … … 258 291 END DO 259 292 END DO 293 !$OMP END PARALLEL 260 294 261 295 IF( lk_mpp ) CALL mpp_max( iterate_ridging ) … … 289 323 IF( ln_ctl ) CALL lim_prt3D( 'limitd_me' ) 290 324 291 CALL wrk_dealloc( jpi, jpj, closing_net, divu_adv, opning, closing_gross )325 CALL wrk_dealloc( jpi, jpj, closing_net, divu_adv, opning, closing_gross, z_ai ) 292 326 ! 293 327 IF( nn_timing == 1 ) CALL timing_stop('limitd_me') … … 306 340 REAL(wp) :: Gstari, astari, hrmean, zdummy ! local scalar 307 341 REAL(wp), POINTER, DIMENSION(:,:,:) :: Gsum ! Gsum(n) = sum of areas in categories 0 to n 342 REAL(wp), POINTER, DIMENSION(:,:) :: z_ai 308 343 !------------------------------------------------------------------------------! 309 344 310 345 CALL wrk_alloc( jpi,jpj,jpl+2, Gsum, kkstart = -1 ) 346 CALL wrk_alloc( jpi,jpj,z_ai ) 311 347 312 348 Gstari = 1.0/rn_gstar 313 349 astari = 1.0/rn_astar 314 aksum(:,:) = 0.0 315 athorn(:,:,:) = 0.0 316 aridge(:,:,:) = 0.0 317 araft (:,:,:) = 0.0 350 !$OMP PARALLEL 351 !$OMP DO schedule(static) private(jj,ji) 352 DO jj = 1, jpj 353 DO ji = 1, jpi 354 aksum(ji,jj) = 0.0 355 END DO 356 END DO 357 !$OMP END DO NOWAIT 358 DO jl = 1, jpl 359 !$OMP DO schedule(static) private(jj,ji) 360 DO jj = 1, jpj 361 DO ji = 1, jpi 362 athorn(ji,jj,jl) = 0.0 363 aridge(ji,jj,jl) = 0.0 364 araft (ji,jj,jl) = 0.0 365 END DO 366 END DO 367 END DO 368 !$OMP END PARALLEL 318 369 319 370 ! Zero out categories with very small areas 320 371 CALL lim_var_zapsmall 321 372 373 !$OMP PARALLEL 322 374 ! Ice thickness needed for rafting 323 375 DO jl = 1, jpl 376 !$OMP DO schedule(static) private(jj,ji,rswitch) 324 377 DO jj = 1, jpj 325 378 DO ji = 1, jpi … … 336 389 ! Compute total area of ice plus open water. 337 390 ! This is in general not equal to one because of divergence during transport 338 asum(:,:) = ato_i(:,:) + SUM( a_i, dim=3 ) 339 391 392 !$OMP DO schedule(static) private(jj,ji) 393 DO jj = 1, jpj 394 DO ji = 1, jpi 395 asum(ji,jj) = 0._wp 396 z_ai(ji,jj) = 0._wp 397 END DO 398 END DO 399 DO jl = 1, jpl 400 !$OMP DO schedule(static) private(jj,ji) 401 DO jj = 1, jpj 402 DO ji = 1, jpi 403 z_ai(ji,jj) = z_ai(ji,jj) + a_i(ji,jj,jl) 404 END DO 405 END DO 406 END DO 407 !$OMP DO schedule(static) private(jj,ji) 408 DO jj = 1, jpj 409 DO ji = 1, jpi 410 asum(ji,jj) = ato_i(ji,jj) + z_ai(ji,jj) 411 END DO 412 END DO 340 413 ! Compute cumulative thickness distribution function 341 414 ! Compute the cumulative thickness distribution function Gsum, 342 415 ! where Gsum(n) is the fractional area in categories 0 to n. 343 416 ! initial value (in h = 0) equals open water area 344 Gsum(:,:,-1) = 0._wp 345 Gsum(:,:,0 ) = ato_i(:,:) 417 !$OMP DO schedule(static) private(jj,ji) 418 DO jj = 1, jpj 419 DO ji = 1, jpi 420 Gsum(ji,jj,-1) = 0._wp 421 Gsum(ji,jj,0 ) = ato_i(ji,jj) 422 END DO 423 END DO 346 424 ! for each value of h, you have to add ice concentration then 347 425 DO jl = 1, jpl 348 Gsum(:,:,jl) = Gsum(:,:,jl-1) + a_i(:,:,jl) 426 !$OMP DO schedule(static) private(jj,ji) 427 DO jj = 1, jpj 428 DO ji = 1, jpi 429 Gsum(ji,jj,jl) = Gsum(ji,jj,jl-1) + a_i(ji,jj,jl) 430 END DO 431 END DO 349 432 END DO 350 433 351 434 ! Normalize the cumulative distribution to 1 352 435 DO jl = 0, jpl 353 Gsum(:,:,jl) = Gsum(:,:,jl) / asum(:,:) 436 !$OMP DO schedule(static) private(jj,ji) 437 DO jj = 1, jpj 438 DO ji = 1, jpi 439 Gsum(ji,jj,jl) = Gsum(ji,jj,jl) / asum(ji,jj) 440 END DO 441 END DO 354 442 END DO 443 !$OMP END PARALLEL 355 444 356 445 ! 1.3 Compute participation function a(h) = b(h).g(h) (athorn) … … 369 458 IF( nn_partfun == 0 ) THEN !--- Linear formulation (Thorndike et al., 1975) 370 459 DO jl = 0, jpl 460 !$OMP PARALLEL DO schedule(static) private(jj,ji) 371 461 DO jj = 1, jpj 372 462 DO ji = 1, jpi … … 387 477 ! 388 478 zdummy = 1._wp / ( 1._wp - EXP(-astari) ) ! precompute exponential terms using Gsum as a work array 479 !$OMP PARALLEL 389 480 DO jl = -1, jpl 390 Gsum(:,:,jl) = EXP( -Gsum(:,:,jl) * astari ) * zdummy 481 !$OMP DO schedule(static) private(jj,ji) 482 DO jj = 1, jpj 483 DO ji = 1, jpi 484 Gsum(ji,jj,jl) = EXP( -Gsum(ji,jj,jl) * astari ) * zdummy 485 END DO 486 END DO 391 487 END DO 392 488 DO jl = 0, jpl 393 athorn(:,:,jl) = Gsum(:,:,jl-1) - Gsum(:,:,jl) 394 END DO 489 !$OMP DO schedule(static) private(jj,ji) 490 DO jj = 1, jpj 491 DO ji = 1, jpi 492 athorn(ji,jj,jl) = Gsum(ji,jj,jl-1) - Gsum(ji,jj,jl) 493 END DO 494 END DO 495 END DO 496 !$OMP END PARALLEL 395 497 ! 396 498 ENDIF … … 400 502 ! 401 503 DO jl = 1, jpl 504 !$OMP PARALLEL DO schedule(static) private(jj,ji,zdummy) 402 505 DO jj = 1, jpj 403 506 DO ji = 1, jpi … … 412 515 ! 413 516 DO jl = 1, jpl 414 aridge(:,:,jl) = athorn(:,:,jl) 517 !$OMP PARALLEL DO schedule(static) private(jj,ji) 518 DO jj = 1, jpj 519 DO ji = 1, jpi 520 aridge(ji,jj,jl) = athorn(ji,jj,jl) 521 END DO 522 END DO 415 523 END DO 416 524 ! … … 418 526 ! 419 527 DO jl = 1, jpl 420 araft(:,:,jl) = athorn(:,:,jl) 528 !$OMP PARALLEL DO schedule(static) private(jj,ji) 529 DO jj = 1, jpj 530 DO ji = 1, jpi 531 araft(ji,jj,jl) = athorn(ji,jj,jl) 532 END DO 533 END DO 421 534 END DO 422 535 ! … … 449 562 !----------------------------------------------------------------- 450 563 451 aksum(:,:) = athorn(:,:,0) 564 !$OMP PARALLEL 565 !$OMP DO schedule(static) private(jj,ji) 566 DO jj = 1, jpj 567 DO ji = 1, jpi 568 aksum(ji,jj) = athorn(ji,jj,0) 569 END DO 570 END DO 452 571 ! Transfer function 453 572 DO jl = 1, jpl !all categories have a specific transfer function 573 !$OMP DO schedule(static) private(jj,ji,hrmean) 454 574 DO jj = 1, jpj 455 575 DO ji = 1, jpi … … 476 596 END DO 477 597 END DO 598 !$OMP END PARALLEL 478 599 ! 479 600 CALL wrk_dealloc( jpi,jpj,jpl+2, Gsum, kkstart = -1 ) 601 CALL wrk_dealloc( jpi,jpj,z_ai ) 480 602 ! 481 603 END SUBROUTINE lim_itd_me_ridgeprep … … 539 661 ! 1) Compute change in open water area due to closing and opening. 540 662 !------------------------------------------------------------------------------- 663 !$OMP PARALLEL DO schedule(static) private(jj,ji) 541 664 DO jj = 1, jpj 542 665 DO ji = 1, jpi … … 568 691 END DO 569 692 693 !$OMP PARALLEL 694 !$OMP DO schedule(static) private(ij,jj,ji) 570 695 DO ij = 1, icells 571 696 ji = indxi(ij) ; jj = indxj(ij) … … 660 785 !-------------------------------------------------------------------- 661 786 DO jk = 1, nlay_i 787 !$OMP DO schedule(static) private(ij,jj,ji) 662 788 DO ij = 1, icells 663 789 ji = indxi(ij) ; jj = indxj(ij) … … 687 813 DO jl2 = 1, jpl 688 814 ! over categories to which ridged/rafted ice is transferred 815 !$OMP DO schedule(static) private(ij,jj,ji,hL,hR,farea) 689 816 DO ij = 1, icells 690 817 ji = indxi(ij) ; jj = indxj(ij) … … 721 848 ! Transfer ice energy to category jl2 by ridging 722 849 DO jk = 1, nlay_i 850 !$OMP DO schedule(static) private(ij,jj,ji) 723 851 DO ij = 1, icells 724 852 ji = indxi(ij) ; jj = indxj(ij) … … 728 856 ! 729 857 END DO ! jl2 858 !$OMP END PARALLEL 730 859 731 860 END DO ! jl1 (deforming categories) 732 733 861 ! 734 862 CALL wrk_dealloc( jpij, indxi, indxj ) … … 769 897 ! 1) Initialize 770 898 !------------------------------------------------------------------------------! 771 strength(:,:) = 0._wp 899 !$OMP PARALLEL DO schedule(static) private(jj,ji) 900 DO jj = 1, jpj 901 DO ji = 1, jpi 902 strength(ji,jj) = 0._wp 903 END DO 904 END DO 772 905 773 906 !------------------------------------------------------------------------------! … … 781 914 IF( kstrngth == 1 ) THEN 782 915 z1_3 = 1._wp / 3._wp 916 !$OMP PARALLEL 783 917 DO jl = 1, jpl 918 !$OMP DO schedule(static) private(jj,ji) 784 919 DO jj= 1, jpj 785 920 DO ji = 1, jpi … … 810 945 END DO 811 946 812 strength(:,:) = rn_pe_rdg * Cp * strength(:,:) / aksum(:,:) * tmask(:,:,1) 947 !$OMP DO schedule(static) private(jj,ji) 948 DO jj= 1, jpj 949 DO ji = 1, jpi 950 strength(ji,jj) = rn_pe_rdg * Cp * strength(ji,jj) / aksum(ji,jj) * tmask(ji,jj,1) 951 END DO 952 END DO 953 !$OMP END PARALLEL 813 954 ! where Cp = (g/2)*(rhow-rhoi)*(rhoi/rhow) and rn_pe_rdg accounts for frictional dissipation 814 955 ksmooth = 1 … … 818 959 !------------------------------------------------------------------------------! 819 960 ELSE ! kstrngth ne 1: Hibler (1979) form 820 ! 821 strength(:,:) = rn_pstar * vt_i(:,:) * EXP( - rn_crhg * ( 1._wp - at_i(:,:) ) ) * tmask(:,:,1) 961 !$OMP PARALLEL DO schedule(static) private(jj,ji) 962 DO jj= 1, jpj 963 DO ji = 1, jpi 964 ! 965 strength(ji,jj) = rn_pstar * vt_i(ji,jj) * EXP( - rn_crhg * ( 1._wp - at_i(ji,jj) ) ) * tmask(ji,jj,1) 966 END DO 967 END DO 822 968 ! 823 969 ksmooth = 1 … … 830 976 ! CAN BE REMOVED 831 977 IF( ln_icestr_bvf ) THEN 978 !$OMP PARALLEL DO schedule(static) private(jj,ji) 832 979 DO jj = 1, jpj 833 980 DO ji = 1, jpi … … 846 993 IF ( ksmooth == 1 ) THEN 847 994 995 !$OMP PARALLEL 996 !$OMP DO schedule(static) private(jj,ji) 848 997 DO jj = 2, jpjm1 849 998 DO ji = 2, jpim1 … … 859 1008 END DO 860 1009 1010 !$OMP DO schedule(static) private(jj,ji) 861 1011 DO jj = 2, jpjm1 862 1012 DO ji = 2, jpim1 … … 864 1014 END DO 865 1015 END DO 1016 !$OMP END PARALLEL 866 1017 CALL lbc_lnk( strength, 'T', 1. ) 867 1018 … … 874 1025 875 1026 IF ( numit == nit000 + nn_fsbc - 1 ) THEN 876 zstrp1(:,:) = 0._wp 877 zstrp2(:,:) = 0._wp 1027 !$OMP PARALLEL DO schedule(static) private(jj,ji) 1028 DO jj = 1, jpj 1029 DO ji = 1, jpi 1030 zstrp1(ji,jj) = 0._wp 1031 zstrp2(ji,jj) = 0._wp 1032 END DO 1033 END DO 878 1034 ENDIF 879 1035 1036 !$OMP PARALLEL DO schedule(static) private(jj,ji,numts_rm,zp) 880 1037 DO jj = 2, jpjm1 881 1038 DO ji = 2, jpim1 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90
r7646 r7698 106 106 CALL lim_column_sum (jpl, v_s, vt_s_init) 107 107 CALL lim_column_sum_energy (jpl, nlay_i, e_i, et_i_init) 108 dummy_es(:,:,:) = e_s(:,:,1,:) 108 DO jl = 1, jpl 109 !$OMP PARALLEL DO schedule(static) private(jj,ji) 110 DO jj = 1, jpj 111 DO ji = 1, jpi 112 dummy_es(ji,jj,jl) = e_s(ji,jj,1,jl) 113 END DO 114 END DO 115 END DO 109 116 CALL lim_column_sum (jpl, dummy_es(:,:,:) , et_s_init) 110 117 ENDIF … … 121 128 ENDIF 122 129 123 zdhice(:,:,:) = 0._wp 130 !$OMP PARALLEL 131 DO jl = 1, jpl 132 !$OMP DO schedule(static) private(jj,ji) 133 DO jj = 1, jpj 134 DO ji = 1, jpi 135 zdhice(ji,jj,jl) = 0._wp 136 END DO 137 END DO 138 END DO 124 139 DO jl = klbnd, kubnd 140 !$OMP DO schedule(static) private(jj,ji,rswitch) 125 141 DO jj = 1, jpj 126 142 DO ji = 1, jpi … … 137 153 ! 2) Compute fractional ice area in each grid cell 138 154 !----------------------------------------------------------------------------------------------- 139 at_i(:,:) = 0._wp 155 !$OMP DO schedule(static) private(jj,ji) 156 DO jj = 1, jpj 157 DO ji = 1, jpi 158 at_i(ji,jj) = 0._wp 159 END DO 160 END DO 140 161 DO jl = klbnd, kubnd 141 at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 142 END DO 162 !$OMP DO schedule(static) private(jj,ji) 163 DO jj = 1, jpj 164 DO ji = 1, jpi 165 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 166 END DO 167 END DO 168 END DO 169 !$OMP END PARALLEL 143 170 144 171 !----------------------------------------------------------------------------------------------- … … 163 190 !----------------------------------------------------------------------------------------------- 164 191 !- 4.1 Compute category boundaries 165 zhbnew(:,:,:) = 0._wp 192 !$OMP PARALLEL 193 DO jl = 0, jpl 194 !$OMP DO schedule(static) private(jj,ji) 195 DO jj = 1, jpj 196 DO ji = 1, jpi 197 zhbnew(ji,jj,jl) = 0._wp 198 END DO 199 END DO 200 END DO 166 201 167 202 DO jl = klbnd, kubnd - 1 203 !$OMP DO schedule(static) private(ji,ii,ij,zslope) 168 204 DO ji = 1, nbrem 169 205 ii = nind_i(ji) … … 183 219 184 220 !- 4.2 Check that each zhbnew lies between adjacent values of ice thickness 221 !$OMP DO schedule(static) private(ji,ii,ij) 185 222 DO ji = 1, nbrem 186 223 ii = nind_i(ji) … … 205 242 206 243 END DO 244 !$OMP END PARALLEL 207 245 208 246 !----------------------------------------------------------------------------------------------- … … 223 261 ! 6) Fill arrays with lowermost / uppermost boundaries of 'new' categories 224 262 !----------------------------------------------------------------------------------------------- 263 !$OMP PARALLEL DO schedule(static) private(jj,ji) 225 264 DO jj = 1, jpj 226 265 DO ji = 1, jpi … … 254 293 255 294 !- 7.2 Area lost due to melting of thin ice (first category, klbnd) 295 !$OMP PARALLEL DO schedule(static) private(ji,ii,ij,zdh0,zetamax,zx1,zx2,zda0,zdamax) 256 296 DO ji = 1, nbrem 257 297 ii = nind_i(ji) … … 299 339 !----------------------------------------------------------------------------------------------- 300 340 341 !$OMP PARALLEL 301 342 DO jl = klbnd, kubnd - 1 343 !$OMP DO schedule(static) private(jj,ji) 302 344 DO jj = 1, jpj 303 345 DO ji = 1, jpi … … 308 350 END DO 309 351 352 !$OMP DO schedule(static) private(ji,ii,ij,zetamax,zetamin,zx1,zwk1,zwk2,zx2,zx3,nd) 310 353 DO ji = 1, nbrem 311 354 ii = nind_i(ji) … … 342 385 END DO 343 386 END DO 387 !$OMP END PARALLEL 344 388 345 389 !!---------------------------------------------------------------------------------------------- … … 352 396 !!---------------------------------------------------------------------------------------------- 353 397 398 !$OMP PARALLEL DO schedule(static) private(ji,ii,ij) 354 399 DO ji = 1, nbrem 355 400 ii = nind_i(ji) … … 377 422 CALL lim_cons_check (vt_s_init, vt_s_final, 1.0e-6, fieldid) 378 423 379 dummy_es(:,:,:) = e_s(:,:,1,:) 424 DO jl = 1, jpl 425 !$OMP PARALLEL DO schedule(static) private(jj,ji) 426 DO jj = 1, jpj 427 DO ji = 1, jpi 428 dummy_es(ji,jj,jl) = e_s(ji,jj,1,jl) 429 END DO 430 END DO 431 END DO 380 432 CALL lim_column_sum (jpl, dummy_es(:,:,:) , et_s_final) 381 433 fieldid = ' e_s : limitd_th ' … … 421 473 !!------------------------------------------------------------------ 422 474 ! 475 !$OMP PARALLEL DO schedule(static) private(jj,ji,zh13,zh23,zdhr,zwk1,zwk2) 423 476 DO jj = 1, jpj 424 477 DO ji = 1, jpi … … 500 553 501 554 DO jl = klbnd, kubnd 502 zaTsfn(:,:,jl) = a_i(:,:,jl) * t_su(:,:,jl) 555 !$OMP PARALLEL DO schedule(static) private(jj,ji) 556 DO jj = 1, jpj 557 DO ji = 1, jpi 558 zaTsfn(ji,jj,jl) = a_i(ji,jj,jl) * t_su(ji,jj,jl) 559 END DO 560 END DO 503 561 END DO 504 562 … … 519 577 END DO 520 578 579 !$OMP PARALLEL DO schedule(static) private(ji,ii,ij,jl1,jl2,rswitch,zdvsnow,zdesnow,zdo_aice,zdsm_vice,zdaTsf) 521 580 DO ji = 1, nbrem 522 581 ii = nind_i(ji) … … 584 643 585 644 DO jk = 1, nlay_i 645 !$OMP PARALLEL DO schedule(static) private(ji,ii,ij,jl1,jl2,zdeice) 586 646 DO ji = 1, nbrem 587 647 ii = nind_i(ji) … … 608 668 609 669 DO jl = klbnd, kubnd 670 !$OMP PARALLEL DO schedule(static) private(jj,ji) 610 671 DO jj = 1, jpj 611 672 DO ji = 1, jpi … … 663 724 ! 1) Compute ice thickness. 664 725 !------------------------------------------------------------------------------ 726 !$OMP PARALLEL 665 727 DO jl = klbnd, kubnd 728 !$OMP DO schedule(static) private(jj,ji,rswitch) 666 729 DO jj = 1, jpj 667 730 DO ji = 1, jpi … … 680 743 !------------------------- 681 744 DO jl = klbnd, kubnd 682 zdonor(:,:,jl) = 0 683 zdaice(:,:,jl) = 0._wp 684 zdvice(:,:,jl) = 0._wp 685 END DO 745 !$OMP DO schedule(static) private(jj,ji) 746 DO jj = 1, jpj 747 DO ji = 1, jpi 748 zdonor(ji,jj,jl) = 0 749 zdaice(ji,jj,jl) = 0._wp 750 zdvice(ji,jj,jl) = 0._wp 751 END DO 752 END DO 753 END DO 754 !$OMP END PARALLEL 686 755 687 756 !------------------------- … … 696 765 zshiftflag = 0 697 766 767 !$OMP PARALLEL DO schedule(static) private(jj,ji) REDUCTION(MAX:zshiftflag) 698 768 DO jj = 1, jpj 699 769 DO ji = 1, jpi … … 716 786 CALL lim_itd_shiftice( klbnd, kubnd, zdonor, zdaice, zdvice ) 717 787 ! Reset shift parameters 718 zdonor(:,:,jl) = 0 719 zdaice(:,:,jl) = 0._wp 720 zdvice(:,:,jl) = 0._wp 788 !$OMP PARALLEL DO schedule(static) private(jj,ji) 789 DO jj = 1, jpj 790 DO ji = 1, jpi 791 zdonor(ji,jj,jl) = 0 792 zdaice(ji,jj,jl) = 0._wp 793 zdvice(ji,jj,jl) = 0._wp 794 END DO 795 END DO 721 796 ENDIF 722 797 ! … … 734 809 zshiftflag = 0 735 810 811 !$OMP PARALLEL DO schedule(static) private(jj,ji) REDUCTION(MAX:zshiftflag) 736 812 DO jj = 1, jpj 737 813 DO ji = 1, jpi 738 814 IF( a_i(ji,jj,jl+1) > epsi10 .AND. ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 739 !740 815 zshiftflag = 1 741 816 zdonor(ji,jj,jl) = jl + 1 … … 751 826 CALL lim_itd_shiftice( klbnd, kubnd, zdonor, zdaice, zdvice ) 752 827 ! Reset shift parameters 753 zdonor(:,:,jl) = 0 754 zdaice(:,:,jl) = 0._wp 755 zdvice(:,:,jl) = 0._wp 828 !$OMP PARALLEL DO schedule(static) private(jj,ji) 829 DO jj = 1, jpj 830 DO ji = 1, jpi 831 zdonor(ji,jj,jl) = 0 832 zdaice(ji,jj,jl) = 0._wp 833 zdvice(ji,jj,jl) = 0._wp 834 END DO 835 END DO 756 836 ENDIF 757 837 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r7646 r7698 164 164 !------------------------------------------------------------------------------! 165 165 ! ocean/land mask 166 !$OMP PARALLEL DO schedule(static) private(jj, ji) 166 167 DO jj = 1, jpjm1 167 168 DO ji = 1, jpim1 ! NO vector opt. … … 172 173 173 174 ! Lateral boundary conditions on velocity (modify zfmask) 174 zwf(:,:) = zfmask(:,:) 175 !$OMP PARALLEL 176 !$OMP DO schedule(static) private(jj, ji) 177 DO jj = 1, jpj 178 DO ji = 1, jpi 179 zwf(ji,jj) = zfmask(ji,jj) 180 END DO 181 END DO 182 !$OMP DO schedule(static) private(jj, ji) 175 183 DO jj = 2, jpjm1 176 184 DO ji = fs_2, fs_jpim1 ! vector opt. … … 180 188 END DO 181 189 END DO 190 !$OMP DO schedule(static) private(jj) 182 191 DO jj = 2, jpjm1 183 192 IF( zfmask(1,jj) == 0._wp ) THEN … … 188 197 ENDIF 189 198 END DO 199 !$OMP DO schedule(static) private(ji) 190 200 DO ji = 2, jpim1 191 201 IF( zfmask(ji,1) == 0._wp ) THEN … … 196 206 ENDIF 197 207 END DO 208 !$OMP END PARALLEL 198 209 CALL lbc_lnk( zfmask, 'F', 1._wp ) 199 210 … … 225 236 226 237 ! Initialise stress tensor 227 zs1 (:,:) = stress1_i (:,:) 228 zs2 (:,:) = stress2_i (:,:) 229 zs12(:,:) = stress12_i(:,:) 238 !$OMP PARALLEL DO schedule(static) private(jj, ji) 239 DO jj = 1, jpj 240 DO ji = 1, jpi 241 zs1 (ji,jj) = stress1_i (ji,jj) 242 zs2 (ji,jj) = stress2_i (ji,jj) 243 zs12(ji,jj) = stress12_i(ji,jj) 244 END DO 245 END DO 230 246 231 247 ! Ice strength … … 233 249 234 250 ! scale factors 251 !$OMP PARALLEL DO schedule(static) private(jj, ji) 235 252 DO jj = 2, jpjm1 236 253 DO ji = fs_2, fs_jpim1 … … 255 272 zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 256 273 ! 257 zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_rau0 274 !$OMP PARALLEL DO schedule(static) private(jj, ji) 275 DO jj = 1, jpj 276 DO ji = 1, jpi 277 zpice(ji,jj) = ssh_m(ji,jj) + ( zintn * snwice_mass(ji,jj) + zintb * snwice_mass_b(ji,jj) ) * r1_rau0 278 END DO 279 END DO 258 280 ! 259 281 ELSE !== non-embedded sea ice: use ocean surface for slope calculation ==! 260 zpice(:,:) = ssh_m(:,:) 282 !$OMP PARALLEL DO schedule(static) private(jj, ji) 283 DO jj = 1, jpj 284 DO ji = 1, jpi 285 zpice(ji,jj) = ssh_m(ji,jj) 286 END DO 287 END DO 261 288 ENDIF 262 289 290 !$OMP PARALLEL DO schedule(static) private(jj,ji,zm1,zm2,zm3,zmassU,zmassV) 263 291 DO jj = 2, jpjm1 264 292 DO ji = fs_2, fs_jpim1 … … 317 345 ! !----------------------! 318 346 IF(ln_ctl) THEN ! Convergence test 347 !$OMP PARALLEL DO schedule(static) private(jj, ji) 319 348 DO jj = 1, jpjm1 320 zu_ice(:,jj) = u_ice(:,jj) ! velocity at previous time step 321 zv_ice(:,jj) = v_ice(:,jj) 349 DO ji = 1, jpi 350 zu_ice(ji,jj) = u_ice(ji,jj) ! velocity at previous time step 351 zv_ice(ji,jj) = v_ice(ji,jj) 352 END DO 322 353 END DO 323 354 ENDIF 324 355 325 356 ! --- divergence, tension & shear (Appendix B of Hunke & Dukowicz, 2002) --- ! 357 !$OMP PARALLEL DO schedule(static) private(jj, ji) 326 358 DO jj = 1, jpjm1 ! loops start at 1 since there is no boundary condition (lbc_lnk) at i=1 and j=1 for F points 327 359 DO ji = 1, jpim1 … … 336 368 CALL lbc_lnk( zds, 'F', 1. ) 337 369 370 !$OMP PARALLEL DO schedule(static) private(jj,ji,zds2,zdiv,zdiv2,zdt,zdt2,zdelta) 338 371 DO jj = 2, jpjm1 339 372 DO ji = 2, jpim1 ! no vector loop … … 370 403 CALL lbc_lnk( zp_delt, 'T', 1. ) 371 404 405 !$OMP PARALLEL DO schedule(static) private(jj,ji,zp_delf) 372 406 DO jj = 1, jpjm1 373 407 DO ji = 1, jpim1 … … 385 419 386 420 ! --- Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) --- ! 421 !$OMP PARALLEL DO schedule(static) private(jj,ji) 387 422 DO jj = 2, jpjm1 388 423 DO ji = fs_2, fs_jpim1 … … 420 455 IF( MOD(jter,2) .EQ. 0 ) THEN ! even iterations 421 456 457 !$OMP PARALLEL DO schedule(static) private(jj,ji,zTauO,zvel,zTauB,zCor,zTauE,rswitch) 422 458 DO jj = 2, jpjm1 423 459 DO ji = fs_2, fs_jpim1 … … 464 500 IF( ln_bdy ) CALL bdy_ice_lim_dyn( 'V' ) 465 501 502 !$OMP PARALLEL DO schedule(static) private(jj,ji,zTauO,zvel,zTauB,zCor,zTauE,rswitch) 466 503 DO jj = 2, jpjm1 467 504 DO ji = fs_2, fs_jpim1 … … 509 546 ELSE ! odd iterations 510 547 548 !$OMP PARALLEL DO schedule(static) private(jj,ji,zTauO,zvel,zTauB,zCor,zTauE,rswitch) 511 549 DO jj = 2, jpjm1 512 550 DO ji = fs_2, fs_jpim1 … … 552 590 IF( ln_bdy ) CALL bdy_ice_lim_dyn( 'U' ) 553 591 592 !$OMP PARALLEL DO schedule(static) private(jj,ji,zTauO,zvel,zTauB,zCor,zTauE,rswitch) 554 593 DO jj = 2, jpjm1 555 594 DO ji = fs_2, fs_jpim1 … … 598 637 599 638 IF(ln_ctl) THEN ! Convergence test 639 !$OMP PARALLEL DO schedule(static) private(jj, ji) 600 640 DO jj = 2 , jpjm1 601 zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ), ABS( v_ice(:,jj) - zv_ice(:,jj) ) ) 641 DO ji = 1, jpi 642 zresr(ji,jj) = MAX( ABS( u_ice(ji,jj) - zu_ice(ji,jj) ), ABS( v_ice(ji,jj) - zv_ice(ji,jj) ) ) 643 END DO 602 644 END DO 603 645 zresm = MAXVAL( zresr( 1:jpi, 2:jpjm1 ) ) … … 612 654 ! 4) Recompute delta, shear and div (inputs for mechanical redistribution) 613 655 !------------------------------------------------------------------------------! 656 !$OMP PARALLEL DO schedule(static) private(jj, ji) 614 657 DO jj = 1, jpjm1 615 658 DO ji = 1, jpim1 … … 624 667 CALL lbc_lnk( zds, 'F', 1. ) 625 668 669 !$OMP PARALLEL DO schedule(static) private(jj,ji,zdt,zdt2,zds2,zdelta,rswitch) 626 670 DO jj = 2, jpjm1 627 671 DO ji = 2, jpim1 ! no vector loop … … 656 700 657 701 ! --- Store the stress tensor for the next time step --- ! 658 stress1_i (:,:) = zs1 (:,:) 659 stress2_i (:,:) = zs2 (:,:) 660 stress12_i(:,:) = zs12(:,:) 702 !$OMP PARALLEL DO schedule(static) private(jj, ji) 703 DO jj = 1, jpj 704 DO ji = 1, jpi 705 stress1_i (ji,jj) = zs1 (ji,jj) 706 stress2_i (ji,jj) = zs2 (ji,jj) 707 stress12_i(ji,jj) = zs12(ji,jj) 708 END DO 709 END DO 661 710 ! 662 711 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90
r7646 r7698 130 130 WRITE(zchar,'(I2.2)') jl 131 131 znam = 'v_i'//'_htc'//zchar 132 z2d(:,:) = v_i(:,:,jl) 132 !$OMP PARALLEL DO schedule(static) private(jj,ji) 133 DO jj = 1, jpj 134 DO ji = 1, jpi 135 z2d(ji,jj) = v_i(ji,jj,jl) 136 END DO 137 END DO 133 138 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 134 139 znam = 'v_s'//'_htc'//zchar 135 z2d(:,:) = v_s(:,:,jl) 140 !$OMP PARALLEL DO schedule(static) private(jj,ji) 141 DO jj = 1, jpj 142 DO ji = 1, jpi 143 z2d(ji,jj) = v_s(ji,jj,jl) 144 END DO 145 END DO 136 146 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 137 147 znam = 'smv_i'//'_htc'//zchar 138 z2d(:,:) = smv_i(:,:,jl) 148 !$OMP PARALLEL DO schedule(static) private(jj,ji) 149 DO jj = 1, jpj 150 DO ji = 1, jpi 151 z2d(ji,jj) = smv_i(ji,jj,jl) 152 END DO 153 END DO 139 154 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 140 155 znam = 'oa_i'//'_htc'//zchar 141 z2d(:,:) = oa_i(:,:,jl) 156 !$OMP PARALLEL DO schedule(static) private(jj,ji) 157 DO jj = 1, jpj 158 DO ji = 1, jpi 159 z2d(ji,jj) = oa_i(ji,jj,jl) 160 END DO 161 END DO 142 162 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 143 163 znam = 'a_i'//'_htc'//zchar 144 z2d(:,:) = a_i(:,:,jl) 164 !$OMP PARALLEL DO schedule(static) private(jj,ji) 165 DO jj = 1, jpj 166 DO ji = 1, jpi 167 z2d(ji,jj) = a_i(ji,jj,jl) 168 END DO 169 END DO 145 170 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 146 171 znam = 't_su'//'_htc'//zchar 147 z2d(:,:) = t_su(:,:,jl) 172 !$OMP PARALLEL DO schedule(static) private(jj,ji) 173 DO jj = 1, jpj 174 DO ji = 1, jpi 175 z2d(ji,jj) = t_su(ji,jj,jl) 176 END DO 177 END DO 148 178 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 149 179 END DO … … 152 182 WRITE(zchar,'(I2.2)') jl 153 183 znam = 'tempt_sl1'//'_htc'//zchar 154 z2d(:,:) = e_s(:,:,1,jl) 184 !$OMP PARALLEL DO schedule(static) private(jj,ji) 185 DO jj = 1, jpj 186 DO ji = 1, jpi 187 z2d(ji,jj) = e_s(ji,jj,1,jl) 188 END DO 189 END DO 155 190 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 156 191 END DO … … 161 196 WRITE(zchar1,'(I2.2)') jk 162 197 znam = 'tempt'//'_il'//zchar1//'_htc'//zchar 163 z2d(:,:) = e_i(:,:,jk,jl) 198 !$OMP PARALLEL DO schedule(static) private(jj,ji) 199 DO jj = 1, jpj 200 DO ji = 1, jpi 201 z2d(ji,jj) = e_i(ji,jj,jk,jl) 202 END DO 203 END DO 164 204 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 165 205 END DO … … 181 221 WRITE(zchar,'(I2.2)') jl 182 222 znam = 'sxice'//'_htc'//zchar 183 z2d(:,:) = sxice(:,:,jl) 223 !$OMP PARALLEL DO schedule(static) private(jj,ji) 224 DO jj = 1, jpj 225 DO ji = 1, jpi 226 z2d(ji,jj) = sxice(ji,jj,jl) 227 END DO 228 END DO 184 229 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 185 230 znam = 'syice'//'_htc'//zchar 186 z2d(:,:) = syice(:,:,jl) 231 !$OMP PARALLEL DO schedule(static) private(jj,ji) 232 DO jj = 1, jpj 233 DO ji = 1, jpi 234 z2d(ji,jj) = syice(ji,jj,jl) 235 END DO 236 END DO 187 237 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 188 238 znam = 'sxxice'//'_htc'//zchar 189 z2d(:,:) = sxxice(:,:,jl) 239 !$OMP PARALLEL DO schedule(static) private(jj,ji) 240 DO jj = 1, jpj 241 DO ji = 1, jpi 242 z2d(ji,jj) = sxxice(ji,jj,jl) 243 END DO 244 END DO 190 245 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 191 246 znam = 'syyice'//'_htc'//zchar 192 z2d(:,:) = syyice(:,:,jl) 247 !$OMP PARALLEL DO schedule(static) private(jj,ji) 248 DO jj = 1, jpj 249 DO ji = 1, jpi 250 z2d(ji,jj) = syyice(ji,jj,jl) 251 END DO 252 END DO 193 253 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 194 254 znam = 'sxyice'//'_htc'//zchar 195 z2d(:,:) = sxyice(:,:,jl) 255 !$OMP PARALLEL DO schedule(static) private(jj,ji) 256 DO jj = 1, jpj 257 DO ji = 1, jpi 258 z2d(ji,jj) = sxyice(ji,jj,jl) 259 END DO 260 END DO 196 261 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 197 262 znam = 'sxsn'//'_htc'//zchar 198 z2d(:,:) = sxsn(:,:,jl) 263 !$OMP PARALLEL DO schedule(static) private(jj,ji) 264 DO jj = 1, jpj 265 DO ji = 1, jpi 266 z2d(ji,jj) = sxsn(ji,jj,jl) 267 END DO 268 END DO 199 269 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 200 270 znam = 'sysn'//'_htc'//zchar 201 z2d(:,:) = sysn(:,:,jl) 271 !$OMP PARALLEL DO schedule(static) private(jj,ji) 272 DO jj = 1, jpj 273 DO ji = 1, jpi 274 z2d(ji,jj) = sysn(ji,jj,jl) 275 END DO 276 END DO 202 277 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 203 278 znam = 'sxxsn'//'_htc'//zchar 204 z2d(:,:) = sxxsn(:,:,jl) 279 !$OMP PARALLEL DO schedule(static) private(jj,ji) 280 DO jj = 1, jpj 281 DO ji = 1, jpi 282 z2d(ji,jj) = sxxsn(ji,jj,jl) 283 END DO 284 END DO 205 285 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 206 286 znam = 'syysn'//'_htc'//zchar 207 z2d(:,:) = syysn(:,:,jl) 287 !$OMP PARALLEL DO schedule(static) private(jj,ji) 288 DO jj = 1, jpj 289 DO ji = 1, jpi 290 z2d(ji,jj) = syysn(ji,jj,jl) 291 END DO 292 END DO 208 293 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 209 294 znam = 'sxysn'//'_htc'//zchar 210 z2d(:,:) = sxysn(:,:,jl) 295 !$OMP PARALLEL DO schedule(static) private(jj,ji) 296 DO jj = 1, jpj 297 DO ji = 1, jpi 298 z2d(ji,jj) = sxysn(ji,jj,jl) 299 END DO 300 END DO 211 301 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 212 302 znam = 'sxa'//'_htc'//zchar 213 z2d(:,:) = sxa(:,:,jl) 303 !$OMP PARALLEL DO schedule(static) private(jj,ji) 304 DO jj = 1, jpj 305 DO ji = 1, jpi 306 z2d(ji,jj) = sxa(ji,jj,jl) 307 END DO 308 END DO 214 309 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 215 310 znam = 'sya'//'_htc'//zchar 216 z2d(:,:) = sya(:,:,jl) 311 !$OMP PARALLEL DO schedule(static) private(jj,ji) 312 DO jj = 1, jpj 313 DO ji = 1, jpi 314 z2d(ji,jj) = sya(ji,jj,jl) 315 END DO 316 END DO 217 317 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 218 318 znam = 'sxxa'//'_htc'//zchar 219 z2d(:,:) = sxxa(:,:,jl) 319 !$OMP PARALLEL DO schedule(static) private(jj,ji) 320 DO jj = 1, jpj 321 DO ji = 1, jpi 322 z2d(ji,jj) = sxxa(ji,jj,jl) 323 END DO 324 END DO 220 325 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 221 326 znam = 'syya'//'_htc'//zchar 222 z2d(:,:) = syya(:,:,jl) 327 !$OMP PARALLEL DO schedule(static) private(jj,ji) 328 DO jj = 1, jpj 329 DO ji = 1, jpi 330 z2d(ji,jj) = syya(ji,jj,jl) 331 END DO 332 END DO 223 333 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 224 334 znam = 'sxya'//'_htc'//zchar 225 z2d(:,:) = sxya(:,:,jl) 335 !$OMP PARALLEL DO schedule(static) private(jj,ji) 336 DO jj = 1, jpj 337 DO ji = 1, jpi 338 z2d(ji,jj) = sxya(ji,jj,jl) 339 END DO 340 END DO 226 341 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 227 342 znam = 'sxc0'//'_htc'//zchar 228 z2d(:,:) = sxc0(:,:,jl) 343 !$OMP PARALLEL DO schedule(static) private(jj,ji) 344 DO jj = 1, jpj 345 DO ji = 1, jpi 346 z2d(ji,jj) = sxc0(ji,jj,jl) 347 END DO 348 END DO 229 349 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 230 350 znam = 'syc0'//'_htc'//zchar 231 z2d(:,:) = syc0(:,:,jl) 351 !$OMP PARALLEL DO schedule(static) private(jj,ji) 352 DO jj = 1, jpj 353 DO ji = 1, jpi 354 z2d(ji,jj) = syc0(ji,jj,jl) 355 END DO 356 END DO 232 357 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 233 358 znam = 'sxxc0'//'_htc'//zchar 234 z2d(:,:) = sxxc0(:,:,jl) 359 !$OMP PARALLEL DO schedule(static) private(jj,ji) 360 DO jj = 1, jpj 361 DO ji = 1, jpi 362 z2d(ji,jj) = sxxc0(ji,jj,jl) 363 END DO 364 END DO 235 365 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 236 366 znam = 'syyc0'//'_htc'//zchar 237 z2d(:,:) = syyc0(:,:,jl) 367 !$OMP PARALLEL DO schedule(static) private(jj,ji) 368 DO jj = 1, jpj 369 DO ji = 1, jpi 370 z2d(ji,jj) = syyc0(ji,jj,jl) 371 END DO 372 END DO 238 373 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 239 374 znam = 'sxyc0'//'_htc'//zchar 240 z2d(:,:) = sxyc0(:,:,jl) 375 !$OMP PARALLEL DO schedule(static) private(jj,ji) 376 DO jj = 1, jpj 377 DO ji = 1, jpi 378 z2d(ji,jj) = sxyc0(ji,jj,jl) 379 END DO 380 END DO 241 381 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 242 382 znam = 'sxsal'//'_htc'//zchar 243 z2d(:,:) = sxsal(:,:,jl) 383 !$OMP PARALLEL DO schedule(static) private(jj,ji) 384 DO jj = 1, jpj 385 DO ji = 1, jpi 386 z2d(ji,jj) = sxsal(ji,jj,jl) 387 END DO 388 END DO 244 389 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 245 390 znam = 'sysal'//'_htc'//zchar 246 z2d(:,:) = sysal(:,:,jl) 391 !$OMP PARALLEL DO schedule(static) private(jj,ji) 392 DO jj = 1, jpj 393 DO ji = 1, jpi 394 z2d(ji,jj) = sysal(ji,jj,jl) 395 END DO 396 END DO 247 397 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 248 398 znam = 'sxxsal'//'_htc'//zchar 249 z2d(:,:) = sxxsal(:,:,jl) 399 !$OMP PARALLEL DO schedule(static) private(jj,ji) 400 DO jj = 1, jpj 401 DO ji = 1, jpi 402 z2d(ji,jj) = sxxsal(ji,jj,jl) 403 END DO 404 END DO 250 405 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 251 406 znam = 'syysal'//'_htc'//zchar 252 z2d(:,:) = syysal(:,:,jl) 407 !$OMP PARALLEL DO schedule(static) private(jj,ji) 408 DO jj = 1, jpj 409 DO ji = 1, jpi 410 z2d(ji,jj) = syysal(ji,jj,jl) 411 END DO 412 END DO 253 413 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 254 414 znam = 'sxysal'//'_htc'//zchar 255 z2d(:,:) = sxysal(:,:,jl) 415 !$OMP PARALLEL DO schedule(static) private(jj,ji) 416 DO jj = 1, jpj 417 DO ji = 1, jpi 418 z2d(ji,jj) = sxysal(ji,jj,jl) 419 END DO 420 END DO 256 421 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 257 422 znam = 'sxage'//'_htc'//zchar 258 z2d(:,:) = sxage(:,:,jl) 423 !$OMP PARALLEL DO schedule(static) private(jj,ji) 424 DO jj = 1, jpj 425 DO ji = 1, jpi 426 z2d(ji,jj) = sxage(ji,jj,jl) 427 END DO 428 END DO 259 429 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 260 430 znam = 'syage'//'_htc'//zchar 261 z2d(:,:) = syage(:,:,jl) 431 !$OMP PARALLEL DO schedule(static) private(jj,ji) 432 DO jj = 1, jpj 433 DO ji = 1, jpi 434 z2d(ji,jj) = syage(ji,jj,jl) 435 END DO 436 END DO 262 437 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 263 438 znam = 'sxxage'//'_htc'//zchar 264 z2d(:,:) = sxxage(:,:,jl) 439 !$OMP PARALLEL DO schedule(static) private(jj,ji) 440 DO jj = 1, jpj 441 DO ji = 1, jpi 442 z2d(ji,jj) = sxxage(ji,jj,jl) 443 END DO 444 END DO 265 445 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 266 446 znam = 'syyage'//'_htc'//zchar 267 z2d(:,:) = syyage(:,:,jl) 447 !$OMP PARALLEL DO schedule(static) private(jj,ji) 448 DO jj = 1, jpj 449 DO ji = 1, jpi 450 z2d(ji,jj) = syyage(ji,jj,jl) 451 END DO 452 END DO 268 453 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 269 454 znam = 'sxyage'//'_htc'//zchar 270 z2d(:,:) = sxyage(:,:,jl) 455 !$OMP PARALLEL DO schedule(static) private(jj,ji) 456 DO jj = 1, jpj 457 DO ji = 1, jpi 458 z2d(ji,jj) = sxyage(ji,jj,jl) 459 END DO 460 END DO 271 461 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 272 462 END DO … … 283 473 WRITE(zchar1,'(I2.2)') jk 284 474 znam = 'sxe'//'_il'//zchar1//'_htc'//zchar 285 z2d(:,:) = sxe(:,:,jk,jl) 475 !$OMP PARALLEL DO schedule(static) private(jj,ji) 476 DO jj = 1, jpj 477 DO ji = 1, jpi 478 z2d(ji,jj) = sxe(ji,jj,jk,jl) 479 END DO 480 END DO 286 481 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 287 482 znam = 'sye'//'_il'//zchar1//'_htc'//zchar 288 z2d(:,:) = sye(:,:,jk,jl) 483 !$OMP PARALLEL DO schedule(static) private(jj,ji) 484 DO jj = 1, jpj 485 DO ji = 1, jpi 486 z2d(ji,jj) = sye(ji,jj,jk,jl) 487 END DO 488 END DO 289 489 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 290 490 znam = 'sxxe'//'_il'//zchar1//'_htc'//zchar 291 z2d(:,:) = sxxe(:,:,jk,jl) 491 !$OMP PARALLEL DO schedule(static) private(jj,ji) 492 DO jj = 1, jpj 493 DO ji = 1, jpi 494 z2d(ji,jj) = sxxe(ji,jj,jk,jl) 495 END DO 496 END DO 292 497 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 293 498 znam = 'syye'//'_il'//zchar1//'_htc'//zchar 294 z2d(:,:) = syye(:,:,jk,jl) 499 !$OMP PARALLEL DO schedule(static) private(jj,ji) 500 DO jj = 1, jpj 501 DO ji = 1, jpi 502 z2d(ji,jj) = syye(ji,jj,jk,jl) 503 END DO 504 END DO 295 505 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 296 506 znam = 'sxye'//'_il'//zchar1//'_htc'//zchar 297 z2d(:,:) = sxye(:,:,jk,jl) 507 !$OMP PARALLEL DO schedule(static) private(jj,ji) 508 DO jj = 1, jpj 509 DO ji = 1, jpi 510 z2d(ji,jj) = sxye(ji,jj,jk,jl) 511 END DO 512 END DO 298 513 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) 299 514 END DO -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r7646 r7698 112 112 ! --- case we bypass ice thermodynamics --- ! 113 113 IF( .NOT. ln_limthd ) THEN ! we suppose ice is impermeable => ocean is isolated from atmosphere 114 hfx_in (:,:) = pfrld(:,:) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:) 115 hfx_out (:,:) = pfrld(:,:) * qns_oce(:,:) + qemp_oce(:,:) 116 ftr_ice (:,:,:) = 0._wp 117 emp_ice (:,:) = 0._wp 118 qemp_ice (:,:) = 0._wp 119 qevap_ice(:,:,:) = 0._wp 114 !$OMP PARALLEL 115 !$OMP DO schedule(static) private(jj,ji) 116 DO jj = 1, jpj 117 DO ji = 1, jpi 118 hfx_in (ji,jj) = pfrld(ji,jj) * ( qns_oce(ji,jj) + qsr_oce(ji,jj) ) + qemp_oce(ji,jj) 119 hfx_out (ji,jj) = pfrld(ji,jj) * qns_oce(ji,jj) + qemp_oce(ji,jj) 120 emp_ice (ji,jj) = 0._wp 121 qemp_ice (ji,jj) = 0._wp 122 END DO 123 END DO 124 DO jl = 1, jpl 125 !$OMP DO schedule(static) private(jj,ji) 126 DO jj = 1, jpj 127 DO ji = 1, jpi 128 ftr_ice (ji,jj,jl) = 0._wp 129 qevap_ice(ji,jj,jl) = 0._wp 130 END DO 131 END DO 132 END DO 133 !$OMP END PARALLEL 120 134 ENDIF 121 135 … … 123 137 CALL wrk_alloc( jpi,jpj, zalb ) 124 138 125 zalb(:,:) = 0._wp 126 WHERE ( at_i_b <= epsi06 ) ; zalb(:,:) = 0.066_wp 127 ELSEWHERE ; zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) / at_i_b 128 END WHERE 139 !$OMP PARALLEL 140 !$OMP DO schedule(static) private(jj,ji) 141 DO jj = 1, jpj 142 DO ji = 1, jpi 143 zalb(ji,jj) = 0._wp 144 END DO 145 END DO 146 !$OMP DO schedule(static) private(jj,ji,jl) 147 DO jj = 1, jpj 148 DO ji = 1, jpi 149 IF ( at_i_b(ji,jj) <= epsi06 ) THEN 150 zalb(ji,jj) = 0.066_wp 151 ELSE 152 DO jl = 1, jpl 153 zalb(ji,jj) = zalb(ji,jj) + ( alb_ice(ji,jj,jl) * a_i_b(ji,jj,jl) ) / at_i_b(ji,jj) 154 END DO 155 END IF 156 END DO 157 END DO 158 !$OMP END PARALLEL 129 159 IF( iom_use('alb_ice' ) ) CALL iom_put( "alb_ice" , zalb(:,:) ) ! ice albedo output 130 160 131 zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) + 0.066_wp * ( 1._wp - at_i_b ) 161 !$OMP PARALLEL 162 !$OMP DO schedule(static) private(jj,ji) 163 DO jj = 1, jpj 164 DO ji = 1, jpi 165 zalb(ji,jj) = 0._wp 166 END DO 167 END DO 168 DO jl = 1, jpl 169 !$OMP DO schedule(static) private(jj,ji) 170 DO jj = 1, jpj 171 DO ji = 1, jpi 172 zalb(ji,jj) = zalb(ji,jj) + ( alb_ice(ji,jj,jl) * a_i_b(ji,jj,jl) ) + 0.066_wp * ( 1._wp - at_i_b(ji,jj) ) 173 END DO 174 END DO 175 END DO 176 !$OMP END PARALLEL 132 177 IF( iom_use('albedo' ) ) CALL iom_put( "albedo" , zalb(:,:) ) ! ice albedo output 133 178 134 179 CALL wrk_dealloc( jpi,jpj, zalb ) 135 180 181 !$OMP PARALLEL 182 !$OMP DO schedule(static) private(jj,ji,jl,zqsr,zqmass) 136 183 DO jj = 1, jpj 137 184 DO ji = 1, jpi … … 186 233 ! salt flux at the ocean surface ! 187 234 !------------------------------------------! 188 sfx(:,:) = sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) & 189 & + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) + sfx_sub(:,:) + sfx_lam(:,:) 235 !$OMP DO schedule(static) private(jj,ji) 236 DO jj = 1, jpj 237 DO ji = 1, jpi 238 sfx(ji,jj) = sfx_bog(ji,jj) + sfx_bom(ji,jj) + sfx_sum(ji,jj) + sfx_sni(ji,jj) + sfx_opw(ji,jj) & 239 & + sfx_res(ji,jj) + sfx_dyn(ji,jj) + sfx_bri(ji,jj) + sfx_sub(ji,jj) + sfx_lam(ji,jj) 240 END DO 241 END DO 242 !$OMP END PARALLEL 190 243 191 244 !-------------------------------------------------------------! … … 193 246 !-------------------------------------------------------------! 194 247 IF( nn_ice_embd /= 0 ) THEN 195 ! save mass from the previous ice time step 196 snwice_mass_b(:,:) = snwice_mass(:,:) 197 ! new mass per unit area 198 snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) 199 ! time evolution of snow+ice mass 200 snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) * r1_rdtice 248 !$OMP PARALLEL DO schedule(static) private(jj,ji) 249 DO jj = 1, jpj 250 DO ji = 1, jpi 251 ! save mass from the previous ice time step 252 snwice_mass_b(ji,jj) = snwice_mass(ji,jj) 253 ! new mass per unit area 254 snwice_mass (ji,jj) = tmask(ji,jj,1) * ( rhosn * vt_s(ji,jj) + rhoic * vt_i(ji,jj) ) 255 ! time evolution of snow+ice mass 256 snwice_fmass (ji,jj) = ( snwice_mass(ji,jj) - snwice_mass_b(ji,jj) ) * r1_rdtice 257 END DO 258 END DO 201 259 ENDIF 202 260 … … 204 262 ! Storing the transmitted variables ! 205 263 !-----------------------------------------------! 206 fr_i (:,:) = at_i(:,:) ! Sea-ice fraction 207 tn_ice(:,:,:) = t_su(:,:,:) ! Ice surface temperature 264 !$OMP PARALLEL 265 !$OMP DO schedule(static) private(jj,ji) 266 DO jj = 1, jpj 267 DO ji = 1, jpi 268 fr_i (ji,jj) = at_i(ji,jj) ! Sea-ice fraction 269 END DO 270 END DO 271 DO jl = 1, jpl 272 !$OMP DO schedule(static) private(jj,ji) 273 DO jj = 1, jpj 274 DO ji = 1, jpi 275 tn_ice(ji,jj,jl) = t_su(ji,jj,jl) ! Ice surface temperature 276 END DO 277 END DO 278 END DO 279 !$OMP END PARALLEL 208 280 209 281 !------------------------------------------------------------------------! … … 212 284 CALL wrk_alloc( jpi,jpj,jpl, zalb_cs, zalb_os ) 213 285 CALL albedo_ice( t_su, ht_i, ht_s, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 214 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 286 DO jl = 1, jpl 287 !$OMP PARALLEL DO schedule(static) private(jj,ji) 288 DO jj = 1, jpj 289 DO ji = 1, jpi 290 alb_ice(ji,jj,jl) = ( 1. - cldf_ice ) * zalb_cs(ji,jj,jl) + cldf_ice * zalb_os(ji,jj,jl) 291 END DO 292 END DO 293 END DO 215 294 CALL wrk_dealloc( jpi,jpj,jpl, zalb_cs, zalb_os ) 216 295 … … 260 339 ! 261 340 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) 341 !$OMP PARALLEL DO schedule(static) private(jj,ji,zu_t,zv_t,zmodt) 262 342 DO jj = 2, jpjm1 !* update the modulus of stress at ocean surface (T-point) 263 343 DO ji = fs_2, fs_jpim1 … … 274 354 CALL lbc_lnk_multi( taum, 'T', 1., tmod_io, 'T', 1. ) 275 355 ! 276 utau_oce(:,:) = utau(:,:) !* save the air-ocean stresses at ice time-step 277 vtau_oce(:,:) = vtau(:,:) 356 !$OMP PARALLEL DO schedule(static) private(jj,ji) 357 DO jj = 1, jpj 358 DO ji = 1, jpi 359 utau_oce(ji,jj) = utau(ji,jj) !* save the air-ocean stresses at ice time-step 360 vtau_oce(ji,jj) = vtau(ji,jj) 361 END DO 362 END DO 278 363 ! 279 364 ENDIF … … 281 366 ! !== every ocean time-step ==! 282 367 ! 368 !$OMP PARALLEL DO schedule(static) private(jj,ji,zat_u,zat_v,zutau_ice,zvtau_ice) 283 369 DO jj = 2, jpjm1 !* update the stress WITHOUT a ice-ocean rotation angle 284 370 DO ji = fs_2, fs_jpim1 ! Vect. Opt. … … 319 405 IF( lim_sbc_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'lim_sbc_init : unable to allocate standard arrays' ) 320 406 ! 321 soce_0(:,:) = soce ! constant SSS and ice salinity used in levitating sea-ice case 322 sice_0(:,:) = sice 407 !$OMP PARALLEL 408 !$OMP DO schedule(static) private(jj,ji) 409 DO jj = 1, jpj 410 DO ji = 1, jpi 411 soce_0(ji,jj) = soce ! constant SSS and ice salinity used in levitating sea-ice case 412 sice_0(ji,jj) = sice 413 END DO 414 END DO 323 415 ! ! decrease ocean & ice reference salinities in the Baltic Sea area 324 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 325 & 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 326 soce_0(:,:) = 4._wp 327 sice_0(:,:) = 2._wp 328 END WHERE 416 !$OMP DO schedule(static) private(jj,ji) 417 DO jj = 1, jpj 418 DO ji = 1, jpi 419 IF ( 14._wp <= glamt(ji,jj) .AND. glamt(ji,jj) <= 32._wp .AND. & 420 & 54._wp <= gphit(ji,jj) .AND. gphit(ji,jj) <= 66._wp ) THEN 421 soce_0(ji,jj) = 4._wp 422 sice_0(ji,jj) = 2._wp 423 END IF 424 END DO 425 END DO 426 !$OMP END PARALLEL 329 427 ! 330 428 IF( .NOT. ln_rstart ) THEN 331 429 ! ! embedded sea ice 332 430 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 333 snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) 334 snwice_mass_b(:,:) = snwice_mass(:,:) 431 !$OMP PARALLEL DO schedule(static) private(jj,ji) 432 DO jj = 1, jpj 433 DO ji = 1, jpi 434 snwice_mass (ji,jj) = tmask(ji,jj,1) * ( rhosn * vt_s(ji,jj) + rhoic * vt_i(ji,jj) ) 435 snwice_mass_b(ji,jj) = snwice_mass(ji,jj) 436 END DO 437 END DO 335 438 ELSE 336 snwice_mass (:,:) = 0._wp ! no mass exchanges 337 snwice_mass_b(:,:) = 0._wp ! no mass exchanges 439 !$OMP PARALLEL DO schedule(static) private(jj,ji) 440 DO jj = 1, jpj 441 DO ji = 1, jpi 442 snwice_mass (ji,jj) = 0._wp ! no mass exchanges 443 snwice_mass_b(ji,jj) = 0._wp ! no mass exchanges 444 END DO 445 END DO 338 446 ENDIF 339 447 IF( nn_ice_embd == 2 ) THEN ! full embedment (case 2) deplete the initial ssh below sea-ice area 340 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 341 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 448 !$OMP PARALLEL DO schedule(static) private(jj,ji) 449 DO jj = 1, jpj 450 DO ji = 1, jpi 451 sshn(ji,jj) = sshn(ji,jj) - snwice_mass(ji,jj) * r1_rau0 452 sshb(ji,jj) = sshb(ji,jj) - snwice_mass(ji,jj) * r1_rau0 453 END DO 454 END DO 342 455 343 456 !!gm I really don't like this stuff here... Find a way to put that elsewhere or differently 344 457 !!gm 345 458 IF( .NOT.ln_linssh ) THEN 459 !$OMP PARALLEL 460 !$OMP DO schedule(static) private(jj,ji) 346 461 DO jk = 1,jpkm1 ! adjust initial vertical scale factors 347 e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 348 e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 349 END DO 350 e3t_a(:,:,:) = e3t_b(:,:,:) 462 DO jj = 1, jpj 463 DO ji = 1, jpi 464 e3t_n(ji,jj,jk) = e3t_0(ji,jj,jk)*( 1._wp + sshn(ji,jj)*tmask(ji,jj,1)/(ht_0(ji,jj) + 1.0 - tmask(ji,jj,1)) ) 465 e3t_b(ji,jj,jk) = e3t_0(ji,jj,jk)*( 1._wp + sshb(ji,jj)*tmask(ji,jj,1)/(ht_0(ji,jj) + 1.0 - tmask(ji,jj,1)) ) 466 END DO 467 END DO 468 END DO 469 !$OMP DO schedule(static) private(jj,ji) 470 DO jk = 1,jpk 471 DO jj = 1, jpj 472 DO ji = 1, jpi 473 e3t_a(ji,jj,jk) = e3t_b(ji,jj,jk) 474 END DO 475 END DO 476 END DO 477 !$OMP END PARALLEL 351 478 ! Reconstruction of all vertical scale factors at now and before time-steps 352 479 ! ========================================================================= … … 368 495 ! ---------------------- 369 496 !!gm not sure of that.... 370 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 371 gdepw_n(:,:,1) = 0.0_wp 372 gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 497 !$OMP PARALLEL 498 !$OMP DO schedule(static) private(jj,ji) 499 DO jj = 1, jpj 500 DO ji = 1, jpi 501 gdept_n(ji,jj,1) = 0.5_wp * e3w_n(ji,jj,1) 502 gdepw_n(ji,jj,1) = 0.0_wp 503 gde3w_n(ji,jj,1) = gdept_n(ji,jj,1) - sshn(ji,jj) 504 END DO 505 END DO 373 506 DO jk = 2, jpk 374 gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 375 gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 376 gde3w_n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:) 377 END DO 507 !$OMP DO schedule(static) private(jj,ji) 508 DO jj = 1, jpj 509 DO ji = 1, jpi 510 gdept_n(ji,jj,jk) = gdept_n(ji,jj,jk-1) + e3w_n(ji,jj,jk) 511 gdepw_n(ji,jj,jk) = gdepw_n(ji,jj,jk-1) + e3t_n(ji,jj,jk-1) 512 gde3w_n(ji,jj,jk) = gdept_n(ji,jj,jk ) - sshn (ji,jj) 513 END DO 514 END DO 515 END DO 516 !$OMP END PARALLEL 378 517 ENDIF 379 518 ENDIF -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r7646 r7698 110 110 !---------------------------------------------! 111 111 IF( ln_limdyn ) THEN 112 zu_io(:,:) = u_ice(:,:) - ssu_m(:,:) 113 zv_io(:,:) = v_ice(:,:) - ssv_m(:,:) 112 !$OMP PARALLEL 113 !$OMP DO schedule(static) private(jj,ji) 114 DO jj = 1, jpj 115 DO ji = 1, jpi 116 zu_io(ji,jj) = u_ice(ji,jj) - ssu_m(ji,jj) 117 zv_io(ji,jj) = v_ice(ji,jj) - ssv_m(ji,jj) 118 END DO 119 END DO 120 !$OMP DO schedule(static) private(jj,ji) 114 121 DO jj = 2, jpjm1 115 122 DO ji = fs_2, fs_jpim1 … … 119 126 END DO 120 127 END DO 128 !$OMP END PARALLEL 121 129 ELSE ! if no ice dynamics => transmit directly the atmospheric stress to the ocean 130 !$OMP PARALLEL DO schedule(static) private(jj,ji) 122 131 DO jj = 2, jpjm1 123 132 DO ji = fs_2, fs_jpim1 … … 133 142 ! Initialization and units change 134 143 !----------------------------------! 135 ftr_ice(:,:,:) = 0._wp ! part of solar radiation transmitted through the ice 144 !$OMP PARALLEL 145 DO jl = 1, jpl 146 !$OMP DO schedule(static) private(jj,ji) 147 DO jj = 1, jpj 148 DO ji = 1, jpi 149 ftr_ice(ji,jj,jl) = 0._wp ! part of solar radiation transmitted through the ice 150 END DO 151 END DO 152 END DO 136 153 137 154 ! Change the units of heat content; from J/m2 to J/m3 138 155 DO jl = 1, jpl 139 156 DO jk = 1, nlay_i 157 !$OMP DO schedule(static) private(jj,ji,rswitch) 140 158 DO jj = 1, jpj 141 159 DO ji = 1, jpi … … 147 165 END DO 148 166 DO jk = 1, nlay_s 167 !$OMP DO schedule(static) private(jj,ji,rswitch) 149 168 DO jj = 1, jpj 150 169 DO ji = 1, jpi … … 160 179 ! Partial computation of forcing for the thermodynamic sea ice model 161 180 !--------------------------------------------------------------------! 181 !$OMP DO schedule(static) private(jj,ji,rswitch,zqld,zqfr,zfric_u) 162 182 DO jj = 1, jpj 163 183 DO ji = 1, jpi … … 201 221 END DO 202 222 END DO 223 !$OMP END PARALLEL 203 224 204 225 ! In case we bypass open-water ice formation 205 IF( .NOT. ln_limdO ) qlead(:,:) = 0._wp 226 IF( .NOT. ln_limdO ) THEN 227 !$OMP PARALLEL DO schedule(static) private(jj,ji) 228 DO jj = 1, jpj 229 DO ji = 1, jpi 230 qlead(ji,jj) = 0._wp 231 END DO 232 END DO 233 END IF 206 234 ! In case we bypass growing/melting from top and bottom: we suppose ice is impermeable => ocean is isolated from atmosphere 207 IF( .NOT. ln_limdH ) hfx_in(:,:) = pfrld(:,:) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:) 208 IF( .NOT. ln_limdH ) fhtur (:,:) = 0._wp ; fhld (:,:) = 0._wp 235 IF( .NOT. ln_limdH ) THEN 236 !$OMP PARALLEL DO schedule(static) private(jj,ji) 237 DO jj = 1, jpj 238 DO ji = 1, jpi 239 hfx_in(ji,jj) = pfrld(ji,jj) * ( qns_oce(ji,jj) + qsr_oce(ji,jj) ) + qemp_oce(ji,jj) 240 fhtur (ji,jj) = 0._wp 241 END DO 242 END DO 243 END IF 244 !$OMP PARALLEL 245 !$OMP DO schedule(static) private(jj,ji) 246 DO jj = 1, jpj 247 DO ji = 1, jpi 248 fhld (ji,jj) = 0._wp 249 END DO 250 END DO 209 251 210 252 ! --------------------------------------------------------------------- … … 214 256 ! Second step in limthd_dh : heat remaining if total melt (zq_rema) 215 257 ! Third step in limsbc : heat from ice-ocean mass exchange (zf_mass) + solar 258 !$OMP DO schedule(static) private(jj,ji) 216 259 DO jj = 1, jpj 217 260 DO ji = 1, jpi … … 223 266 END DO 224 267 END DO 268 !$OMP END PARALLEL 225 269 226 270 !------------------------------------------------------------------------------! … … 288 332 289 333 ! Enthalpies are global variables we have to readjust the units (heat content in J/m2) 334 !$OMP PARALLEL 290 335 DO jl = 1, jpl 291 336 DO jk = 1, nlay_i 292 e_i(:,:,jk,jl) = e_i(:,:,jk,jl) * a_i(:,:,jl) * ht_i(:,:,jl) * r1_nlay_i 337 !$OMP DO schedule(static) private(jj,ji) 338 DO jj = 1, jpj 339 DO ji = 1, jpi 340 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * a_i(ji,jj,jl) * ht_i(ji,jj,jl) * r1_nlay_i 341 END DO 342 END DO 293 343 END DO 294 344 DO jk = 1, nlay_s 295 e_s(:,:,jk,jl) = e_s(:,:,jk,jl) * a_i(:,:,jl) * ht_s(:,:,jl) * r1_nlay_s 296 END DO 297 END DO 298 299 ! Change thickness to volume 300 v_i(:,:,:) = ht_i(:,:,:) * a_i(:,:,:) 301 v_s(:,:,:) = ht_s(:,:,:) * a_i(:,:,:) 302 smv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:) 345 !$OMP DO schedule(static) private(jj,ji) 346 DO jj = 1, jpj 347 DO ji = 1, jpi 348 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * a_i(ji,jj,jl) * ht_s(ji,jj,jl) * r1_nlay_s 349 END DO 350 END DO 351 END DO 352 END DO 353 354 ! Change thickness to volume 355 DO jl = 1, jpl 356 !$OMP DO schedule(static) private(jj,ji) 357 DO jj = 1, jpj 358 DO ji = 1, jpi 359 v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) 360 v_s(ji,jj,jl) = ht_s(ji,jj,jl) * a_i(ji,jj,jl) 361 smv_i(ji,jj,jl) = sm_i(ji,jj,jl) * v_i(ji,jj,jl) 362 END DO 363 END DO 364 END DO 303 365 304 366 ! update ice age (in case a_i changed, i.e. becomes 0 or lateral melting in monocat) 305 367 DO jl = 1, jpl 368 !$OMP DO schedule(static) private(jj,ji,rswitch) 306 369 DO jj = 1, jpj 307 370 DO ji = 1, jpi … … 311 374 END DO 312 375 END DO 376 !$OMP END PARALLEL 313 377 314 378 CALL lim_var_zapsmall -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_da.F90
r7646 r7698 113 113 zastar = 1._wp / ( 1._wp - (rn_dmin / zdmax)**(1._wp/rn_beta) ) 114 114 115 !$OMP PARALLEL 116 !$OMP DO schedule(static) private(jj,ji,zdfloe,zperi,zwlat) 115 117 DO jj = 1, jpj 116 118 DO ji = 1, jpi … … 135 137 !---------------------------------------------------------------------------------------------! 136 138 DO jl = jpl, 1, -1 139 !$OMP DO schedule(static) private(jj,ji,rswitch,zda) 137 140 DO jj = 1, jpj 138 141 DO ji = 1, jpi … … 163 166 164 167 ! total concentration 165 at_i(:,:) = SUM( a_i(:,:,:), dim=3 ) 166 168 !$OMP DO schedule(static) private(jj,ji) 169 DO jj = 1, jpj 170 DO ji = 1, jpi 171 at_i(ji,jj) = 0._wp 172 END DO 173 END DO 174 DO jl = 1, jpl 175 !$OMP DO schedule(static) private(jj,ji) 176 DO jj = 1, jpj 177 DO ji = 1, jpi 178 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 179 END DO 180 END DO 181 END DO 167 182 ! --- ensure that ht_i = 0 where a_i = 0 --- 168 WHERE( a_i == 0._wp ) ht_i = 0._wp 183 DO jl = 1, jpl 184 !$OMP DO schedule(static) private(jj,ji) 185 DO jj = 1, jpj 186 DO ji = 1, jpi 187 IF(a_i(ji,jj,jl) == 0._wp) ht_i(ji,jj,jl) = 0._wp 188 END DO 189 END DO 190 END DO 191 !$OMP END PARALLEL 192 169 193 ! 170 194 CALL wrk_dealloc( jpi,jpj, zda_tot ) -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r7646 r7698 125 125 ! 2) Convert units for ice internal energy 126 126 !------------------------------------------------------------------------------| 127 !$OMP PARALLEL 127 128 DO jl = 1, jpl 128 129 DO jk = 1, nlay_i 130 !$OMP DO schedule(static) private(jj,ji,rswitch) 129 131 DO jj = 1, jpj 130 132 DO ji = 1, jpi … … 150 152 ! 151 153 152 zvrel(:,:) = 0._wp 153 154 ! Default new ice thickness 155 WHERE( qlead(:,:) < 0._wp ) ; hicol(:,:) = rn_hnewice 156 ELSEWHERE ; hicol(:,:) = 0._wp 157 END WHERE 154 !$OMP DO schedule(static) private(jj,ji) 155 DO jj = 1, jpj 156 DO ji = 1, jpi 157 zvrel(ji,jj) = 0._wp 158 END DO 159 END DO 160 161 !$OMP DO schedule(static) private(jj,ji) 162 DO jj = 1, jpj 163 DO ji = 1, jpi 164 ! Default new ice thickness 165 IF( qlead(ji,jj) < 0._wp ) THEN ; hicol(ji,jj) = rn_hnewice 166 ELSE ; hicol(ji,jj) = 0._wp 167 END IF 168 END DO 169 END DO 170 !$OMP END PARALLEL 158 171 159 172 IF( ln_frazil ) THEN … … 162 175 ! Physical constants 163 176 !-------------------- 164 hicol(:,:) = 0._wp165 177 166 178 zhicrit = 0.04 ! frazil ice thickness … … 169 181 zgamafr = 0.03 170 182 183 !$OMP PARALLEL 184 !$OMP DO schedule(static) private(jj,ji) 185 DO jj = 1, jpj 186 DO ji = 1, jpi 187 hicol(ji,jj) = 0._wp 188 END DO 189 END DO 190 191 !$OMP DO schedule(static) private(jj,ji,ztaux,ztauy,ztenagm,rswitch,zvfrx,zvfry,zvgx,zvgy,zvrel2,iter,zf,zfp) 171 192 DO jj = 2, jpjm1 172 193 DO ji = 2, jpim1 … … 226 247 END DO 227 248 END DO 249 !$OMP END PARALLEL 228 250 ! 229 251 CALL lbc_lnk( zvrel, 'T', 1. ) … … 430 452 431 453 DO jk = 1, nlay_i 454 !$OMP PARALLEL DO schedule(static) private(ji,jl,rswitch) 432 455 DO ji = 1, nbpac 433 456 jl = jcat(ji) … … 448 471 qh_i_old(1:nbpac,0:nlay_i+1) = 0._wp 449 472 DO jk = 1, nlay_i 473 !$OMP PARALLEL DO schedule(static) private(ji) 450 474 DO ji = 1, nbpac 451 475 h_i_old (ji,jk) = zv_i_1d(ji,jl) * r1_nlay_i … … 455 479 456 480 ! new volumes including lateral/bottom accretion + residual 481 !$OMP PARALLEL DO schedule(static) private(ji,rswitch,zv_newfra) 457 482 DO ji = 1, nbpac 458 483 rswitch = MAX( 0._wp, SIGN( 1._wp , zat_i_1d(ji) - epsi20 ) ) … … 472 497 !----------------- 473 498 DO jl = 1, jpl 499 !$OMP PARALLEL DO schedule(static) private(ji,zdv) 474 500 DO ji = 1, nbpac 475 501 zdv = zv_i_1d(ji,jl) - zv_b(ji,jl) … … 502 528 DO jl = 1, jpl 503 529 DO jk = 1, nlay_i 530 !$OMP PARALLEL DO schedule(static) private(jj,ji) 504 531 DO jj = 1, jpj 505 532 DO ji = 1, jpi -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r7646 r7698 114 114 zviold = v_i 115 115 zvsold = v_s 116 zsmvold(:,:) = SUM( smv_i(:,:,:), dim=3 ) 117 zeiold (:,:) = et_i 118 zesold (:,:) = et_s 119 120 !--- Thickness correction init. --- ! 121 zatold(:,:) = at_i 116 !$OMP PARALLEL 117 !$OMP DO schedule(static) private(jj,ji) 118 DO jj = 1, jpj 119 DO ji = 1, jpi 120 zsmvold(ji,jj) = 0._wp 121 END DO 122 END DO 122 123 DO jl = 1, jpl 124 !$OMP DO schedule(static) private(jj,ji) 125 DO jj = 1, jpj 126 DO ji = 1, jpi 127 zsmvold(ji,jj) = zsmvold(ji,jj) + smv_i(ji,jj,jl) 128 END DO 129 END DO 130 END DO 131 !$OMP DO schedule(static) private(jj,ji) 132 DO jj = 1, jpj 133 DO ji = 1, jpi 134 zeiold (ji,jj) = et_i(ji,jj) 135 zesold (ji,jj) = et_s(ji,jj) 136 137 !--- Thickness correction init. --- ! 138 zatold (ji,jj) = at_i(ji,jj) 139 END DO 140 END DO 141 DO jl = 1, jpl 142 !$OMP DO schedule(static) private(jj,ji,rswitch) 123 143 DO jj = 1, jpj 124 144 DO ji = 1, jpi … … 130 150 END DO 131 151 ! --- Record max of the surrounding ice thicknesses for correction in case advection creates ice too thick --- ! 132 zhimax(:,:,:) = ht_i(:,:,:) + ht_s(:,:,:)133 152 DO jl = 1, jpl 153 !$OMP DO schedule(static) private(jj,ji) 154 DO jj = 1, jpj 155 DO ji = 1, jpi 156 zhimax(ji,jj,jl) = ht_i(ji,jj,jl) + ht_s(ji,jj,jl) 157 END DO 158 END DO 159 END DO 160 !$OMP END PARALLEL 161 DO jl = 1, jpl 162 !$OMP PARALLEL DO schedule(static) private(jj,ji) 134 163 DO jj = 2, jpjm1 135 164 DO ji = 2, jpim1 … … 173 202 zdt = rdt_ice / REAL(initad) 174 203 204 !$OMP PARALLEL 175 205 ! transport 176 zudy(:,:) = u_ice(:,:) * e2u(:,:) 177 zvdx(:,:) = v_ice(:,:) * e1v(:,:) 206 !$OMP DO schedule(static) private(jj,ji) 207 DO jj = 1, jpj 208 DO ji = 1, jpi 209 zudy(ji,jj) = u_ice(ji,jj) * e2u(ji,jj) 210 zvdx(ji,jj) = v_ice(ji,jj) * e1v(ji,jj) 211 END DO 212 END DO 178 213 179 214 ! define velocity for advection: u*grad(H) 215 !$OMP DO schedule(static) private(jj,ji) 180 216 DO jj = 2, jpjm1 181 217 DO ji = fs_2, fs_jpim1 … … 191 227 END DO 192 228 END DO 229 !$OMP END PARALLEL 193 230 194 231 ! advection … … 208 245 END DO 209 246 ! 210 at_i(:,:) = a_i(:,:,1) ! total ice fraction 247 !$OMP PARALLEL 248 !$OMP DO schedule(static) private(jj,ji) 249 DO jj = 1, jpj 250 DO ji = 1, jpi 251 at_i(ji,jj) = a_i(ji,jj,1) ! total ice fraction 252 END DO 253 END DO 211 254 DO jl = 2, jpl 212 at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 213 END DO 255 !$OMP DO schedule(static) private(jj,ji) 256 DO jj = 1, jpj 257 DO ji = 1, jpi 258 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 259 END DO 260 END DO 261 END DO 262 !$OMP END PARALLEL 214 263 ! 215 264 CALL wrk_dealloc( jpi,jpj, zudy, zvdx, zcu_box, zcv_box ) … … 230 279 ENDIF 231 280 232 zarea(:,:) = e1e2t(:,:) 233 234 !------------------------- 235 ! transported fields 236 !------------------------- 237 z0opw(:,:,1) = ato_i(:,:) * e1e2t(:,:) ! Open water area 281 !$OMP PARALLEL 282 !$OMP DO schedule(static) private(jj,ji) 283 DO jj = 1, jpj 284 DO ji = 1, jpi 285 zarea(ji,jj) = e1e2t(ji,jj) 286 287 !------------------------- 288 ! transported fields 289 !------------------------- 290 z0opw(ji,jj,1) = ato_i(ji,jj) * e1e2t(ji,jj) ! Open water area 291 END DO 292 END DO 238 293 DO jl = 1, jpl 239 z0snw (:,:,jl) = v_s (:,:, jl) * e1e2t(:,:) ! Snow volume 240 z0ice(:,:,jl) = v_i (:,:, jl) * e1e2t(:,:) ! Ice volume 241 z0ai (:,:,jl) = a_i (:,:, jl) * e1e2t(:,:) ! Ice area 242 z0smi (:,:,jl) = smv_i(:,:, jl) * e1e2t(:,:) ! Salt content 243 z0oi (:,:,jl) = oa_i (:,:, jl) * e1e2t(:,:) ! Age content 244 z0es (:,:,jl) = e_s (:,:,1,jl) * e1e2t(:,:) ! Snow heat content 294 !$OMP DO schedule(static) private(jj,ji) 295 DO jj = 1, jpj 296 DO ji = 1, jpi 297 z0snw (ji,jj,jl) = v_s (ji,jj, jl) * e1e2t(ji,jj) ! Snow volume 298 z0ice(ji,jj,jl) = v_i (ji,jj, jl) * e1e2t(ji,jj) ! Ice volume 299 z0ai (ji,jj,jl) = a_i (ji,jj, jl) * e1e2t(ji,jj) ! Ice area 300 z0smi (ji,jj,jl) = smv_i(ji,jj, jl) * e1e2t(ji,jj) ! Salt content 301 z0oi (ji,jj,jl) = oa_i (ji,jj, jl) * e1e2t(ji,jj) ! Age content 302 z0es (ji,jj,jl) = e_s (ji,jj,1,jl) * e1e2t(ji,jj) ! Snow heat content 303 END DO 304 END DO 245 305 DO jk = 1, nlay_i 246 z0ei (:,:,jk,jl) = e_i (:,:,jk,jl) * e1e2t(:,:) ! Ice heat content 247 END DO 248 END DO 306 !$OMP DO schedule(static) private(jj,ji) 307 DO jj = 1, jpj 308 DO ji = 1, jpi 309 z0ei (ji,jj,jk,jl) = e_i (ji,jj,jk,jl) * e1e2t(ji,jj) ! Ice heat content 310 END DO 311 END DO 312 END DO 313 END DO 314 !$OMP END PARALLEL 249 315 250 316 … … 336 402 ! Recover the properties from their contents 337 403 !------------------------------------------- 338 ato_i(:,:) = z0opw(:,:,1) * r1_e1e2t(:,:) 404 !$OMP PARALLEL 405 !$OMP DO schedule(static) private(jj,ji) 406 DO jj = 1, jpj 407 DO ji = 1, jpi 408 ato_i(ji,jj) = z0opw(ji,jj,1) * r1_e1e2t(ji,jj) 409 END DO 410 END DO 339 411 DO jl = 1, jpl 340 v_i (:,:, jl) = z0ice(:,:,jl) * r1_e1e2t(:,:) 341 v_s (:,:, jl) = z0snw(:,:,jl) * r1_e1e2t(:,:) 342 smv_i(:,:, jl) = z0smi(:,:,jl) * r1_e1e2t(:,:) 343 oa_i (:,:, jl) = z0oi (:,:,jl) * r1_e1e2t(:,:) 344 a_i (:,:, jl) = z0ai (:,:,jl) * r1_e1e2t(:,:) 345 e_s (:,:,1,jl) = z0es (:,:,jl) * r1_e1e2t(:,:) 412 !$OMP DO schedule(static) private(jj,ji) 413 DO jj = 1, jpj 414 DO ji = 1, jpi 415 v_i (ji,jj, jl) = z0ice(ji,jj,jl) * r1_e1e2t(ji,jj) 416 v_s (ji,jj, jl) = z0snw(ji,jj,jl) * r1_e1e2t(ji,jj) 417 smv_i(ji,jj, jl) = z0smi(ji,jj,jl) * r1_e1e2t(ji,jj) 418 oa_i (ji,jj, jl) = z0oi (ji,jj,jl) * r1_e1e2t(ji,jj) 419 a_i (ji,jj, jl) = z0ai (ji,jj,jl) * r1_e1e2t(ji,jj) 420 e_s (ji,jj,1,jl) = z0es (ji,jj,jl) * r1_e1e2t(ji,jj) 421 END DO 422 END DO 346 423 DO jk = 1, nlay_i 347 e_i(:,:,jk,jl) = z0ei(:,:,jk,jl) * r1_e1e2t(:,:) 348 END DO 349 END DO 350 351 at_i(:,:) = a_i(:,:,1) ! total ice fraction 424 !$OMP DO schedule(static) private(jj,ji) 425 DO jj = 1, jpj 426 DO ji = 1, jpi 427 e_i(ji,jj,jk,jl) = z0ei(ji,jj,jk,jl) * r1_e1e2t(ji,jj) 428 END DO 429 END DO 430 END DO 431 END DO 432 433 !$OMP DO schedule(static) private(jj,ji) 434 DO jj = 1, jpj 435 DO ji = 1, jpi 436 at_i(ji,jj) = a_i(ji,jj,1) ! total ice fraction 437 END DO 438 END DO 352 439 DO jl = 2, jpl 353 at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 354 END DO 440 !$OMP DO schedule(static) private(jj,ji) 441 DO jj = 1, jpj 442 DO ji = 1, jpi 443 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 444 END DO 445 END DO 446 END DO 447 !$OMP END PARALLEL 355 448 356 449 CALL wrk_dealloc( jpi,jpj, zarea ) … … 369 462 ! mask eddy diffusivity coefficient at ocean U- and V-points 370 463 jm=1 464 !$OMP PARALLEL 371 465 DO jl = 1, jpl 466 !$OMP DO schedule(static) private(jj,ji) 372 467 DO jj = 1, jpjm1 ! NB: has not to be defined on jpj line and jpi row 373 468 DO ji = 1 , fs_jpim1 … … 379 474 END DO 380 475 381 zhdfptab(:,:,jm)= a_i (:,:, jl); jm = jm + 1 382 zhdfptab(:,:,jm)= v_i (:,:, jl); jm = jm + 1 383 zhdfptab(:,:,jm)= v_s (:,:, jl); jm = jm + 1 384 zhdfptab(:,:,jm)= smv_i(:,:, jl); jm = jm + 1 385 zhdfptab(:,:,jm)= oa_i (:,:, jl); jm = jm + 1 386 zhdfptab(:,:,jm)= e_s (:,:,1,jl); jm = jm + 1 476 !$OMP DO schedule(static) private(jj,ji) 477 DO jj = 1, jpj 478 DO ji = 1, jpi 479 zhdfptab(ji,jj,jm)= a_i (ji,jj, jl) 480 END DO 481 END DO 482 jm = jm + 1 483 !$OMP DO schedule(static) private(jj,ji) 484 DO jj = 1, jpj 485 DO ji = 1, jpi 486 zhdfptab(ji,jj,jm)= v_i (ji,jj, jl) 487 END DO 488 END DO 489 jm = jm + 1 490 !$OMP DO schedule(static) private(jj,ji) 491 DO jj = 1, jpj 492 DO ji = 1, jpi 493 zhdfptab(ji,jj,jm)= v_s (ji,jj, jl) 494 END DO 495 END DO 496 jm = jm + 1 497 !$OMP DO schedule(static) private(jj,ji) 498 DO jj = 1, jpj 499 DO ji = 1, jpi 500 zhdfptab(ji,jj,jm)= smv_i(ji,jj, jl) 501 END DO 502 END DO 503 jm = jm + 1 504 !$OMP DO schedule(static) private(jj,ji) 505 DO jj = 1, jpj 506 DO ji = 1, jpi 507 zhdfptab(ji,jj,jm)= oa_i (ji,jj, jl) 508 END DO 509 END DO 510 jm = jm + 1 511 !$OMP DO schedule(static) private(jj,ji) 512 DO jj = 1, jpj 513 DO ji = 1, jpi 514 zhdfptab(ji,jj,jm)= e_s (ji,jj,1,jl) 515 END DO 516 END DO 517 jm = jm + 1 387 518 ! Sample of adding more variables to apply lim_hdf (ihdf_vars must be increased) 388 519 ! zhdfptab(:,:,jm) = variable_1 (:,:,1,jl); jm = jm + 1 389 520 ! zhdfptab(:,:,jm) = variable_2 (:,:,1,jl); jm = jm + 1 390 521 DO jk = 1, nlay_i 391 zhdfptab(:,:,jm)=e_i(:,:,jk,jl); jm= jm+1 522 !$OMP DO schedule(static) private(jj,ji) 523 DO jj = 1, jpj 524 DO ji = 1, jpi 525 zhdfptab(ji,jj,jm)=e_i(ji,jj,jk,jl) 526 END DO 527 END DO 528 jm= jm+1 392 529 END DO 393 530 END DO … … 395 532 ! --- Prepare diffusion for open water area --- ! 396 533 ! mask eddy diffusivity coefficient at ocean U- and V-points 534 !$OMP DO schedule(static) private(jj,ji) 397 535 DO jj = 1, jpjm1 ! NB: has not to be defined on jpj line and jpi row 398 536 DO ji = 1 , fs_jpim1 … … 404 542 END DO 405 543 ! 406 zhdfptab(:,:,jm)= ato_i (:,:); 544 !$OMP DO schedule(static) private(jj,ji) 545 DO jj = 1, jpj 546 DO ji = 1, jpi 547 zhdfptab(ji,jj,jm)= ato_i (ji,jj); 548 END DO 549 END DO 550 !$OMP END PARALLEL 407 551 408 552 ! --- Apply diffusion --- ! … … 411 555 ! --- Recover properties --- ! 412 556 jm=1 557 !$OMP PARALLEL 413 558 DO jl = 1, jpl 414 a_i (:,:, jl) = zhdfptab(:,:,jm); jm = jm + 1 415 v_i (:,:, jl) = zhdfptab(:,:,jm); jm = jm + 1 416 v_s (:,:, jl) = zhdfptab(:,:,jm); jm = jm + 1 417 smv_i(:,:, jl) = zhdfptab(:,:,jm); jm = jm + 1 418 oa_i (:,:, jl) = zhdfptab(:,:,jm); jm = jm + 1 419 e_s (:,:,1,jl) = zhdfptab(:,:,jm); jm = jm + 1 559 !$OMP DO schedule(static) private(jj,ji) 560 DO jj = 1, jpj 561 DO ji = 1, jpi 562 a_i (ji,jj, jl)=zhdfptab(ji,jj,jm) 563 END DO 564 END DO 565 jm = jm + 1 566 !$OMP DO schedule(static) private(jj,ji) 567 DO jj = 1, jpj 568 DO ji = 1, jpi 569 v_i (ji,jj, jl)=zhdfptab(ji,jj,jm) 570 END DO 571 END DO 572 jm = jm + 1 573 !$OMP DO schedule(static) private(jj,ji) 574 DO jj = 1, jpj 575 DO ji = 1, jpi 576 v_s (ji,jj, jl)=zhdfptab(ji,jj,jm) 577 END DO 578 END DO 579 jm = jm + 1 580 !$OMP DO schedule(static) private(jj,ji) 581 DO jj = 1, jpj 582 DO ji = 1, jpi 583 smv_i(ji,jj, jl)=zhdfptab(ji,jj,jm) 584 END DO 585 END DO 586 jm = jm + 1 587 !$OMP DO schedule(static) private(jj,ji) 588 DO jj = 1, jpj 589 DO ji = 1, jpi 590 oa_i (ji,jj, jl)=zhdfptab(ji,jj,jm) 591 END DO 592 END DO 593 jm = jm + 1 594 !$OMP DO schedule(static) private(jj,ji) 595 DO jj = 1, jpj 596 DO ji = 1, jpi 597 e_s (ji,jj,1,jl)=zhdfptab(ji,jj,jm) 598 END DO 599 END DO 600 jm = jm + 1 601 420 602 ! Sample of adding more variables to apply lim_hdf 421 603 ! variable_1 (:,:,1,jl) = zhdfptab(:,:, jm ) ; jm + 1 422 604 ! variable_2 (:,:,1,jl) = zhdfptab(:,:, jm ) ; jm + 1 423 605 DO jk = 1, nlay_i 424 e_i(:,:,jk,jl) = zhdfptab(:,:,jm);jm= jm + 1 425 END DO 426 END DO 427 ato_i (:,:) = zhdfptab(:,:,jm) 606 !$OMP DO schedule(static) private(jj,ji) 607 DO jj = 1, jpj 608 DO ji = 1, jpi 609 e_i(ji,jj,jk,jl) = zhdfptab(ji,jj,jm) 610 END DO 611 END DO 612 jm = jm + 1 613 END DO 614 END DO 615 !$OMP DO schedule(static) private(jj,ji) 616 DO jj = 1, jpj 617 DO ji = 1, jpi 618 ato_i (ji,jj) = zhdfptab(ji,jj,jm) 619 END DO 620 END DO 621 !$OMP END PARALLEL 428 622 429 623 ENDIF 430 624 431 625 ! --- diags --- 626 !$OMP PARALLEL DO schedule(static) private(jj,ji) 432 627 DO jj = 1, jpj 433 628 DO ji = 1, jpi … … 446 641 447 642 !--- Thickness correction in case too high --- ! 643 !$OMP PARALLEL 448 644 DO jl = 1, jpl 645 !$OMP DO schedule(static) private(jj,ji,rswitch,zdv) 449 646 DO jj = 1, jpj 450 647 DO ji = 1, jpi … … 481 678 482 679 ! Force the upper limit of ht_i to always be < hi_max (99 m). 680 !$OMP DO schedule(static) private(jj,ji,rswitch) 483 681 DO jj = 1, jpj 484 682 DO ji = 1, jpi … … 488 686 END DO 489 687 END DO 688 !$OMP END PARALLEL 490 689 491 690 ENDIF … … 495 694 !------------------------------------------------------------ 496 695 ! 497 at_i(:,:) = SUM( a_i(:,:,:), dim=3 ) 696 !$OMP PARALLEL 697 !$OMP DO schedule(static) private(jj,ji) 698 DO jj = 1, jpj 699 DO ji = 1, jpi 700 at_i(ji,jj) = 0._wp 701 END DO 702 END DO 703 DO jl = 1, jpl 704 !$OMP DO schedule(static) private(jj,ji) 705 DO jj = 1, jpj 706 DO ji = 1, jpi 707 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 708 END DO 709 END DO 710 END DO 711 !$OMP END PARALLEL 712 498 713 IF ( nn_limdyn == 1 .OR. ( ( nn_monocat == 2 ) .AND. ( jpl == 1 ) ) ) THEN ! simple conservative piling, comparable with LIM2 499 714 DO jl = 1, jpl 715 !$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,zda) 500 716 DO jj = 1, jpj 501 717 DO ji = 1, jpi … … 510 726 511 727 ! --- agglomerate variables ----------------- 512 vt_i(:,:) = SUM( v_i(:,:,:), dim=3 ) 513 vt_s(:,:) = SUM( v_s(:,:,:), dim=3 ) 514 at_i(:,:) = SUM( a_i(:,:,:), dim=3 ) 728 !$OMP PARALLEL 729 !$OMP DO schedule(static) private(jj,ji) 730 DO jj = 1, jpj 731 DO ji = 1, jpi 732 vt_i(ji,jj) = 0._wp 733 vt_s(ji,jj) = 0._wp 734 at_i(ji,jj) = 0._wp 735 END DO 736 END DO 737 DO jl = 1, jpl 738 !$OMP DO schedule(static) private(jj,ji) 739 DO jj = 1, jpj 740 DO ji = 1, jpi 741 vt_i(ji,jj) = vt_i(ji,jj) + v_i(ji,jj,jl) 742 vt_s(ji,jj) = vt_s(ji,jj) + v_s(ji,jj,jl) 743 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 744 END DO 745 END DO 746 END DO 515 747 516 748 ! --- open water = 1 if at_i=0 -------------------------------- 517 WHERE( at_i == 0._wp ) ato_i = 1._wp 749 !$OMP DO schedule(static) private(jj,ji) 750 DO jj = 1, jpj 751 DO ji = 1, jpi 752 IF( at_i(ji,jj) == 0._wp ) ato_i(ji,jj) = 1._wp 753 END DO 754 END DO 755 !$OMP END PARALLEL 518 756 519 757 ! conservation test -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90
r7646 r7698 70 70 ! ice concentration should not exceed amax 71 71 !----------------------------------------------------- 72 at_i(:,:) = 0._wp 72 !$OMP PARALLEL 73 !$OMP DO schedule(static) private(jj, ji) 74 DO jj = 1, jpj 75 DO ji = 1, jpi 76 at_i(ji,jj) = 0._wp 77 END DO 78 END DO 73 79 DO jl = 1, jpl 74 at_i(:,:) = a_i(:,:,jl) + at_i(:,:) 80 !$OMP DO schedule(static) private(jj, ji) 81 DO jj = 1, jpj 82 DO ji = 1, jpi 83 at_i(ji,jj) = a_i(ji,jj,jl) + at_i(ji,jj) 84 END DO 85 END DO 75 86 END DO 76 87 77 88 DO jl = 1, jpl 89 !$OMP DO schedule(static) private(jj, ji) 78 90 DO jj = 1, jpj 79 91 DO ji = 1, jpi … … 85 97 END DO 86 98 END DO 99 !$OMP END PARALLEL 87 100 88 101 !--------------------- … … 91 104 IF ( nn_icesal == 2 ) THEN 92 105 DO jl = 1, jpl 106 !$OMP PARALLEL DO schedule(static) private(jj,ji,zsal,rswitch) 93 107 DO jj = 1, jpj 94 108 DO ji = 1, jpi … … 118 132 ! ------------------------------------------------- 119 133 DO jl = 1, jpl 120 afx_dyn(:,:) = afx_dyn(:,:) + ( a_i(:,:,jl) - a_i_b(:,:,jl) ) * r1_rdtice 134 !$OMP PARALLEL DO schedule(static) private(jj, ji) 135 DO jj = 1, jpj 136 DO ji = 1, jpi 137 afx_dyn(ji,jj) = afx_dyn(ji,jj) + ( a_i(ji,jj,jl) - a_i_b(ji,jj,jl) ) * r1_rdtice 138 END DO 139 END DO 121 140 END DO 122 141 142 !$OMP PARALLEL DO schedule(static) private(jj, ji) 123 143 DO jj = 1, jpj 124 144 DO ji = 1, jpi -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90
r7646 r7698 71 71 ! Constrain the thickness of the smallest category above himin 72 72 !---------------------------------------------------------------------- 73 !$OMP PARALLEL 74 !$OMP DO schedule(static) private(jj,ji,rswitch) 73 75 DO jj = 1, jpj 74 76 DO ji = 1, jpi … … 85 87 ! ice concentration should not exceed amax 86 88 !----------------------------------------------------- 87 at_i(:,:) = 0._wp 89 !$OMP DO schedule(static) private(jj, ji) 90 DO jj = 1, jpj 91 DO ji = 1, jpi 92 at_i(ji,jj) = 0._wp 93 END DO 94 END DO 88 95 DO jl = 1, jpl 89 at_i(:,:) = a_i(:,:,jl) + at_i(:,:) 96 !$OMP DO schedule(static) private(jj, ji) 97 DO jj = 1, jpj 98 DO ji = 1, jpi 99 at_i(ji,jj) = a_i(ji,jj,jl) + at_i(ji,jj) 100 END DO 101 END DO 90 102 END DO 91 103 92 104 DO jl = 1, jpl 105 !$OMP DO schedule(static) private(jj, ji) 93 106 DO jj = 1, jpj 94 107 DO ji = 1, jpi … … 100 113 END DO 101 114 END DO 115 !$OMP END PARALLEL 102 116 103 117 !--------------------- … … 106 120 IF ( nn_icesal == 2 ) THEN 107 121 DO jl = 1, jpl 122 !$OMP PARALLEL DO schedule(static) private(jj,ji,zsal,rswitch) 108 123 DO jj = 1, jpj 109 124 DO ji = 1, jpi … … 134 149 ! Ice drift 135 150 !------------ 151 !$OMP PARALLEL DO schedule(static) private(jj, ji) 136 152 DO jj = 2, jpjm1 137 153 DO ji = 2, jpim1 … … 148 164 CALL lbc_lnk( v_ice(:,:), 'V', -1. ) 149 165 !mask velocities 150 u_ice(:,:) = u_ice(:,:) * umask(:,:,1) 151 v_ice(:,:) = v_ice(:,:) * vmask(:,:,1) 166 !$OMP PARALLEL 167 !$OMP DO schedule(static) private(jj, ji) 168 DO jj = 1, jpj 169 DO ji = 1, jpi 170 u_ice(ji,jj) = u_ice(ji,jj) * umask(ji,jj,1) 171 v_ice(ji,jj) = v_ice(ji,jj) * vmask(ji,jj,1) 172 END DO 173 END DO 152 174 153 175 ! ------------------------------------------------- … … 155 177 ! ------------------------------------------------- 156 178 DO jl = 1, jpl 157 oa_i(:,:,jl) = oa_i(:,:,jl) + a_i(:,:,jl) * rdt_ice / rday ! ice natural aging 158 afx_thd(:,:) = afx_thd(:,:) + ( a_i(:,:,jl) - a_i_b(:,:,jl) ) * r1_rdtice 179 !$OMP DO schedule(static) private(jj, ji) 180 DO jj = 1, jpj 181 DO ji = 1, jpi 182 oa_i(ji,jj,jl) = oa_i(ji,jj,jl) + a_i(ji,jj,jl) * rdt_ice / rday ! ice natural aging 183 afx_thd(ji,jj) = afx_thd(ji,jj) + ( a_i(ji,jj,jl) - a_i_b(ji,jj,jl) ) * r1_rdtice 184 END DO 185 END DO 159 186 END DO 160 187 afx_tot = afx_thd + afx_dyn 161 188 189 !$OMP DO schedule(static) private(jj, ji) 162 190 DO jj = 1, jpj 163 191 DO ji = 1, jpi … … 173 201 END DO 174 202 END DO 203 !$OMP END PARALLEL 175 204 176 205 ! conservation test -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r7646 r7698 80 80 !!------------------------------------------------------------------ 81 81 INTEGER, INTENT( in ) :: kn ! =1 at_i & vt only ; = what is needed 82 REAL(wp), POINTER, DIMENSION(:,:,:) :: ze_s, ze_i 82 83 ! 83 84 INTEGER :: ji, jj, jk, jl ! dummy loop indices 84 85 !!------------------------------------------------------------------ 85 86 87 CALL wrk_alloc( jpi, jpj, nlay_s, ze_s ) 88 CALL wrk_alloc( jpi, jpj, nlay_i, ze_i ) 86 89 ! integrated values 87 vt_i (:,:) = SUM( v_i, dim=3 ) 88 vt_s (:,:) = SUM( v_s, dim=3 ) 89 at_i (:,:) = SUM( a_i, dim=3 ) 90 et_s(:,:) = SUM( SUM( e_s(:,:,:,:), dim=4 ), dim=3 ) 91 et_i(:,:) = SUM( SUM( e_i(:,:,:,:), dim=4 ), dim=3 ) 90 !$OMP PARALLEL 91 !$OMP DO schedule(static) private(jj, ji) 92 DO jj = 1, jpj 93 DO ji = 1, jpi 94 vt_i (ji,jj) = 0._wp 95 vt_s (ji,jj) = 0._wp 96 at_i (ji,jj) = 0._wp 97 et_s(ji,jj) = 0._wp 98 et_i(ji,jj) = 0._wp 99 END DO 100 END DO 101 DO jl = 1, jpl 102 !$OMP DO schedule(static) private(jj, ji) 103 DO jj = 1, jpj 104 DO ji = 1, jpi 105 vt_i (ji,jj) = vt_i (ji,jj) + v_i (ji,jj,jl) 106 vt_s (ji,jj) = vt_s (ji,jj) + v_s (ji,jj,jl) 107 at_i (ji,jj) = at_i (ji,jj) + a_i (ji,jj,jl) 108 END DO 109 END DO 110 END DO 111 DO jk = 1, nlay_s 112 !$OMP DO schedule(static) private(jj, ji) 113 DO jj = 1, jpj 114 DO ji = 1, jpi 115 ze_s(ji,jj,jk) = 0._wp 116 END DO 117 END DO 118 END DO 119 DO jk = 1, nlay_i 120 !$OMP DO schedule(static) private(jj, ji) 121 DO jj = 1, jpj 122 DO ji = 1, jpi 123 ze_i(ji,jj,jk) = 0._wp 124 END DO 125 END DO 126 END DO 127 DO jl = 1, jpl 128 DO jk = 1, nlay_s 129 !$OMP DO schedule(static) private(jj, ji) 130 DO jj = 1, jpj 131 DO ji = 1, jpi 132 ze_s(ji,jj,jk) = ze_s(ji,jj,jk) + e_s(ji,jj,jk,jl) 133 END DO 134 END DO 135 END DO 136 END DO 137 DO jl = 1, jpl 138 DO jk = 1, nlay_i 139 !$OMP DO schedule(static) private(jj, ji) 140 DO jj = 1, jpj 141 DO ji = 1, jpi 142 ze_i(ji,jj,jk) = ze_i(ji,jj,jk) + e_i(ji,jj,jk,jl) 143 END DO 144 END DO 145 END DO 146 END DO 147 DO jk = 1, nlay_s 148 !$OMP DO schedule(static) private(jj, ji) 149 DO jj = 1, jpj 150 DO ji = 1, jpi 151 et_s(ji,jj) = et_s(ji,jj) + ze_s(ji,jj,jk) 152 END DO 153 END DO 154 END DO 155 DO jk = 1, nlay_i 156 !$OMP DO schedule(static) private(jj, ji) 157 DO jj = 1, jpj 158 DO ji = 1, jpi 159 et_i(ji,jj) = et_i(ji,jj) + ze_i(ji,jj,jk) 160 END DO 161 END DO 162 END DO 92 163 93 164 ! open water fraction 165 !$OMP DO schedule(static) private(jj, ji) 94 166 DO jj = 1, jpj 95 167 DO ji = 1, jpi … … 97 169 END DO 98 170 END DO 171 !$OMP END PARALLEL 99 172 100 173 IF( kn > 1 ) THEN 101 174 175 !$OMP PARALLEL 102 176 ! mean ice/snow thickness 177 !$OMP DO schedule(static) private(jj,ji,rswitch) 103 178 DO jj = 1, jpj 104 179 DO ji = 1, jpi … … 110 185 111 186 ! mean temperature (K), salinity and age 112 smt_i(:,:) = 0._wp 113 tm_i(:,:) = 0._wp 114 tm_su(:,:) = 0._wp 115 om_i (:,:) = 0._wp 187 !$OMP DO schedule(static) private(jj,ji) 188 DO jj = 1, jpj 189 DO ji = 1, jpi 190 smt_i(ji,jj) = 0._wp 191 tm_i(ji,jj) = 0._wp 192 tm_su(ji,jj) = 0._wp 193 om_i (ji,jj) = 0._wp 194 ENDDO 195 ENDDO 116 196 DO jl = 1, jpl 117 197 198 !$OMP DO schedule(static) private(jj,ji,rswitch) 118 199 DO jj = 1, jpj 119 200 DO ji = 1, jpi … … 125 206 126 207 DO jk = 1, nlay_i 208 !$OMP DO schedule(static) private(jj,ji,rswitch) 127 209 DO jj = 1, jpj 128 210 DO ji = 1, jpi … … 136 218 END DO 137 219 END DO 220 !$OMP END PARALLEL 138 221 tm_i = tm_i + rt0 139 222 tm_su = tm_su + rt0 140 223 ! 141 224 ENDIF 225 CALL wrk_dealloc( jpi, jpj, nlay_s, ze_s ) 226 CALL wrk_dealloc( jpi, jpj, nlay_i, ze_i ) 142 227 ! 143 228 END SUBROUTINE lim_var_agg … … 159 244 ! Ice thickness, snow thickness, ice salinity, ice age 160 245 !------------------------------------------------------- 161 DO jl = 1, jpl 246 !$OMP PARALLEL 247 DO jl = 1, jpl 248 !$OMP DO schedule(static) private(jj,ji,rswitch) 162 249 DO jj = 1, jpj 163 250 DO ji = 1, jpi … … 168 255 END DO 169 256 ! Force the upper limit of ht_i to always be < hi_max (99 m). 257 !$OMP DO schedule(static) private(jj,ji,rswitch) 170 258 DO jj = 1, jpj 171 259 DO ji = 1, jpi … … 177 265 178 266 DO jl = 1, jpl 267 !$OMP DO schedule(static) private(jj,ji,rswitch) 179 268 DO jj = 1, jpj 180 269 DO ji = 1, jpi … … 188 277 IF( nn_icesal == 2 )THEN 189 278 DO jl = 1, jpl 279 !$OMP DO schedule(static) private(jj,ji,rswitch) 190 280 DO jj = 1, jpj 191 281 DO ji = 1, jpi … … 198 288 END DO 199 289 ENDIF 290 !$OMP END PARALLEL 200 291 201 292 CALL lim_var_salprof ! salinity profile … … 204 295 ! Ice temperatures 205 296 !------------------- 297 !$OMP PARALLEL 206 298 DO jl = 1, jpl 207 299 DO jk = 1, nlay_i 300 !$OMP DO schedule(static) private(jj,ji,rswitch,zq_i,ztmelts,zaaa,zbbb,zccc,zdiscrim) 208 301 DO jj = 1, jpj 209 302 DO ji = 1, jpi … … 231 324 DO jl = 1, jpl 232 325 DO jk = 1, nlay_s 326 !$OMP DO schedule(static) private(jj,ji,rswitch,zq_s) 233 327 DO jj = 1, jpj 234 328 DO ji = 1, jpi … … 245 339 246 340 ! integrated values 247 vt_i (:,:) = SUM( v_i, dim=3 ) 248 vt_s (:,:) = SUM( v_s, dim=3 ) 249 at_i (:,:) = SUM( a_i, dim=3 ) 250 341 !$OMP DO schedule(static) private(jj, ji) 342 DO jj = 1, jpj 343 DO ji = 1, jpi 344 vt_i (ji,jj) = 0._wp 345 vt_s (ji,jj) = 0._wp 346 at_i (ji,jj) = 0._wp 347 END DO 348 END DO 349 DO jl = 1, jpl 350 !$OMP DO schedule(static) private(jj, ji) 351 DO jj = 1, jpj 352 DO ji = 1, jpi 353 vt_i (ji,jj) = vt_i (ji,jj) + v_i (ji,jj,jl) 354 vt_s (ji,jj) = vt_s (ji,jj) + v_s (ji,jj,jl) 355 at_i (ji,jj) = at_i (ji,jj) + a_i (ji,jj,jl) 356 END DO 357 END DO 358 END DO 359 !$OMP END PARALLEL 251 360 ! 252 361 END SUBROUTINE lim_var_glo2eqv … … 300 409 !--------------------------------------- 301 410 IF( nn_icesal == 1 ) THEN 302 s_i (:,:,:,:) = rn_icesal 303 sm_i(:,:,:) = rn_icesal 411 !$OMP PARALLEL 412 DO jl = 1, jpl 413 DO jk = 1, nlay_i 414 !$OMP DO schedule(static) private(jj, ji) 415 DO jj = 1, jpj 416 DO ji = 1, jpi 417 s_i (ji,jj,jk,jl) = rn_icesal 418 END DO 419 END DO 420 END DO 421 END DO 422 DO jl = 1, jpl 423 !$OMP DO schedule(static) private(jj, ji) 424 DO jj = 1, jpj 425 DO ji = 1, jpi 426 sm_i(ji,jj,jl) = rn_icesal 427 END DO 428 END DO 429 END DO 430 !$OMP END PARALLEL 304 431 ENDIF 305 432 … … 309 436 IF( nn_icesal == 2 ) THEN 310 437 ! 311 DO jk = 1, nlay_i 312 s_i(:,:,jk,:) = sm_i(:,:,:) 438 !$OMP PARALLEL 439 DO jl = 1, jpl 440 DO jk = 1, nlay_i 441 !$OMP DO schedule(static) private(jj, ji) 442 DO jj = 1, jpj 443 DO ji = 1, jpi 444 s_i(ji,jj,jk,jl) = sm_i(ji,jj,jl) 445 END DO 446 END DO 447 !$OMP END DO NOWAIT 448 END DO 313 449 END DO 314 450 ! 315 451 DO jl = 1, jpl ! Slope of the linear profile 452 !$OMP DO schedule(static) private(jj,ji,rswitch) 316 453 DO jj = 1, jpj 317 454 DO ji = 1, jpi … … 320 457 END DO 321 458 END DO 459 !$OMP END DO NOWAIT 322 460 END DO 323 461 ! … … 325 463 zfac1 = zsi1 / ( zsi1 - zsi0 ) 326 464 ! 327 zalpha(:,:,:) = 0._wp328 465 DO jl = 1, jpl 466 !$OMP DO schedule(static) private(jj, ji) 467 DO jj = 1, jpj 468 DO ji = 1, jpi 469 zalpha(ji,jj,jl) = 0._wp 470 END DO 471 END DO 472 END DO 473 DO jl = 1, jpl 474 !$OMP DO schedule(static) private(jj,ji,zswi0,zswi01,rswitch) 329 475 DO jj = 1, jpj 330 476 DO ji = 1, jpi … … 345 491 DO jl = 1, jpl 346 492 DO jk = 1, nlay_i 493 !$OMP DO schedule(static) private(jj,ji,zs_zero) 347 494 DO jj = 1, jpj 348 495 DO ji = 1, jpi … … 357 504 END DO 358 505 END DO 506 !$OMP END PARALLEL 359 507 ! 360 508 ENDIF ! nn_icesal … … 366 514 IF( nn_icesal == 3 ) THEN ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 367 515 ! 368 sm_i(:,:,:) = 2.30_wp 516 !$OMP PARALLEL 517 DO jl = 1, jpl 518 !$OMP DO schedule(static) private(jj,ji) 519 DO jj = 1, jpj 520 DO ji = 1, jpi 521 sm_i(ji,jj,jl) = 2.30_wp 522 END DO 523 END DO 524 !$OMP END DO NOWAIT 525 END DO 369 526 ! 370 527 DO jl = 1, jpl … … 372 529 zargtemp = ( REAL(jk,wp) - 0.5_wp ) * r1_nlay_i 373 530 zsal = 1.6_wp * ( 1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) ) ) 374 s_i(:,:,jk,jl) = zsal 375 END DO 376 END DO 531 !$OMP DO schedule(static) private(jj,ji) 532 DO jj = 1, jpj 533 DO ji = 1, jpi 534 s_i(ji,jj,jk,jl) = zsal 535 END DO 536 END DO 537 END DO 538 END DO 539 !$OMP END PARALLEL 377 540 ! 378 541 ENDIF ! nn_icesal … … 396 559 !!------------------------------------------------------------------ 397 560 ! 398 bvm_i(:,:) = 0._wp 399 bv_i (:,:,:) = 0._wp 561 !$OMP PARALLEL 562 !$OMP DO schedule(static) private(jj,ji) 563 DO jj = 1, jpj 564 DO ji = 1, jpi 565 bvm_i(ji,jj) = 0._wp 566 END DO 567 END DO 568 DO jl = 1, jpl 569 !$OMP DO schedule(static) private(jj,ji) 570 DO jj = 1, jpj 571 DO ji = 1, jpi 572 bv_i (ji,jj,jl) = 0._wp 573 END DO 574 END DO 575 END DO 400 576 DO jl = 1, jpl 401 577 DO jk = 1, nlay_i 578 !$OMP DO schedule(static) private(jj,ji,rswitch) 402 579 DO jj = 1, jpj 403 580 DO ji = 1, jpi … … 409 586 END DO 410 587 588 !$OMP DO schedule(static) private(jj,ji,rswitch) 411 589 DO jj = 1, jpj 412 590 DO ji = 1, jpi … … 416 594 END DO 417 595 END DO 596 !$OMP END PARALLEL 418 597 ! 419 598 END SUBROUTINE lim_var_bv … … 518 697 REAL(wp) :: zsal, zvi, zvs, zei, zes 519 698 !!------------------------------------------------------------------- 520 at_i (:,:) = 0._wp 521 DO jl = 1, jpl 522 at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 699 !$OMP PARALLEL 700 !$OMP DO schedule(static) private(jj,ji) 701 DO jj = 1, jpj 702 DO ji = 1, jpi 703 at_i (ji,jj) = 0._wp 704 END DO 705 END DO 706 DO jl = 1, jpl 707 !$OMP DO schedule(static) private(jj,ji) 708 DO jj = 1, jpj 709 DO ji = 1, jpi 710 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 711 END DO 712 END DO 523 713 END DO 524 714 … … 529 719 !----------------------------------------------------------------- 530 720 DO jk = 1, nlay_i 721 !$OMP DO schedule(static) private(jj,ji,rswitch,zei) 531 722 DO jj = 1 , jpj 532 723 DO ji = 1 , jpi … … 545 736 END DO 546 737 738 !$OMP DO schedule(static) private(jj,ji,rswitch,zsal,zvi,zvs,zes) 547 739 DO jj = 1 , jpj 548 740 DO ji = 1 , jpi … … 583 775 584 776 ! to be sure that at_i is the sum of a_i(jl) 585 at_i (:,:) = 0._wp 586 DO jl = 1, jpl 587 at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 777 !$OMP DO schedule(static) private(jj,ji) 778 DO jj = 1, jpj 779 DO ji = 1, jpi 780 at_i (ji,jj) = 0._wp 781 END DO 782 END DO 783 DO jl = 1, jpl 784 !$OMP DO schedule(static) private(jj,ji) 785 DO jj = 1, jpj 786 DO ji = 1, jpi 787 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) 788 END DO 789 END DO 588 790 END DO 589 791 590 792 ! open water = 1 if at_i=0 793 !$OMP DO schedule(static) private(jj,ji,rswitch) 591 794 DO jj = 1, jpj 592 795 DO ji = 1, jpi … … 595 798 END DO 596 799 END DO 800 !$OMP END PARALLEL 597 801 598 802 ! -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r7646 r7698 74 74 75 75 ! tresholds for outputs 76 !$OMP PARALLEL 77 !$OMP DO schedule(static) private(jj,ji) 76 78 DO jj = 1, jpj 77 79 DO ji = 1, jpi … … 80 82 END DO 81 83 DO jl = 1, jpl 84 !$OMP DO schedule(static) private(jj,ji) 82 85 DO jj = 1, jpj 83 86 DO ji = 1, jpi … … 86 89 END DO 87 90 END DO 91 !$OMP END PARALLEL 88 92 ! 89 93 ! fluxes … … 104 108 ! velocity 105 109 IF ( iom_use( "uice_ipa" ) .OR. iom_use( "vice_ipa" ) .OR. iom_use( "icevel" ) ) THEN 110 !$OMP PARALLEL DO schedule(static) private(jj,ji,z2da,z2db) 106 111 DO jj = 2 , jpjm1 107 112 DO ji = 2 , jpim1 … … 173 178 174 179 IF ( iom_use( "vfxthin" ) ) THEN ! ice production for open water + thin ice (<20cm) => comparable to observations 175 WHERE( htm_i(:,:) < 0.2 .AND. htm_i(:,:) > 0. ) ; z2d = wfx_bog 176 ELSEWHERE ; z2d = 0._wp 177 END WHERE 180 !$OMP PARALLEL DO schedule(static) private(jj,ji) 181 DO jj = 1, jpj 182 DO ji = 1, jpi 183 IF (htm_i(ji,jj) < 0.2 .AND. htm_i(ji,jj) > 0. ) THEN 184 z2d(ji,jj) = wfx_bog(ji,jj) 185 ELSE 186 z2d(ji,jj) = 0._wp 187 END IF 188 END DO 189 END DO 178 190 CALL iom_put( "vfxthin", ( wfx_opw + z2d ) * ztmp ) 179 191 ENDIF -
trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdy_oce.F90
r7646 r7698 156 156 USE lib_mpp, ONLY: ctl_warn, mpp_sum 157 157 ! 158 INTEGER :: ji, jj ! dummy loop indices 158 159 INTEGER :: bdy_oce_alloc 159 160 !!---------------------------------------------------------------------- … … 163 164 ! 164 165 ! Initialize masks 165 bdytmask(:,:) = 1._wp 166 bdyumask(:,:) = 1._wp 167 bdyvmask(:,:) = 1._wp 166 !$OMP PARALLEL DO schedule(static) private(jj,ji) 167 DO jj = 1, jpj 168 DO ji = 1, jpi 169 bdytmask(ji,jj) = 1._wp 170 bdyumask(ji,jj) = 1._wp 171 bdyvmask(ji,jj) = 1._wp 172 END DO 173 END DO 168 174 ! 169 175 IF( lk_mpp ) CALL mpp_sum ( bdy_oce_alloc ) -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/dia25h.F90
r6140 r7698 62 62 INTEGER :: ios ! Local integer output status for namelist read 63 63 INTEGER :: ierror ! Local integer for memory allocation 64 INTEGER :: ji, jj, jk 64 65 ! 65 66 NAMELIST/nam_dia25h/ ln_dia25h … … 134 135 ! ------------------------- ! 135 136 cnt_25h = 1 ! sets the first value of sum at timestep 1 (note - should strictly be at timestep zero so before values used where possible) 136 tn_25h(:,:,:) = tsb(:,:,:,jp_tem) 137 sn_25h(:,:,:) = tsb(:,:,:,jp_sal) 138 sshn_25h(:,:) = sshb(:,:) 139 un_25h(:,:,:) = ub(:,:,:) 140 vn_25h(:,:,:) = vb(:,:,:) 141 wn_25h(:,:,:) = wn(:,:,:) 142 avt_25h(:,:,:) = avt(:,:,:) 143 avm_25h(:,:,:) = avm(:,:,:) 137 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 138 DO jk = 1, jpk 139 DO jj = 1, jpj 140 DO ji = 1, jpi 141 tn_25h(ji,jj,jk) = tsb(ji,jj,jk,jp_tem) 142 sn_25h(ji,jj,jk) = tsb(ji,jj,jk,jp_sal) 143 sshn_25h(ji,jj) = sshb(ji,jj) 144 un_25h(ji,jj,jk) = ub(ji,jj,jk) 145 vn_25h(ji,jj,jk) = vb(ji,jj,jk) 146 wn_25h(ji,jj,jk) = wn(ji,jj,jk) 147 avt_25h(ji,jj,jk) = avt(ji,jj,jk) 148 avm_25h(ji,jj,jk) = avm(ji,jj,jk) 144 149 # if defined key_zdfgls || defined key_zdftke 145 en_25h(:,:,:) = en(:,:,:)150 en_25h(ji,jj,jk) = en(ji,jj,jk) 146 151 #endif 147 152 # if defined key_zdfgls 148 rmxln_25h(:,:,:) = mxln(:,:,:) 149 #endif 153 rmxln_25h(ji,jj,jk) = mxln(ji,jj,jk) 154 #endif 155 END DO 156 END DO 157 END DO 150 158 #if defined key_lim3 || defined key_lim2 151 159 CALL ctl_stop('STOP', 'dia_25h not setup yet to do tidemean ice') … … 223 231 ENDIF 224 232 225 tn_25h(:,:,:) = tn_25h(:,:,:) + tsn(:,:,:,jp_tem) 226 sn_25h(:,:,:) = sn_25h(:,:,:) + tsn(:,:,:,jp_sal) 227 sshn_25h(:,:) = sshn_25h(:,:) + sshn (:,:) 228 un_25h(:,:,:) = un_25h(:,:,:) + un(:,:,:) 229 vn_25h(:,:,:) = vn_25h(:,:,:) + vn(:,:,:) 230 wn_25h(:,:,:) = wn_25h(:,:,:) + wn(:,:,:) 231 avt_25h(:,:,:) = avt_25h(:,:,:) + avt(:,:,:) 232 avm_25h(:,:,:) = avm_25h(:,:,:) + avm(:,:,:) 233 !$OMP PARALLEL 234 !$OMP DO schedule(static) private(jj, ji) 235 DO jj = 1, jpj 236 DO ji = 1, jpi 237 sshn_25h(ji,jj) = sshn_25h(ji,jj) + sshn (ji,jj) 238 END DO 239 END DO 240 !$OMP END DO NOWAIT 241 !$OMP DO schedule(static) private(jk, jj, ji) 242 DO jk = 1, jpk 243 DO jj = 1, jpj 244 DO ji = 1, jpi 245 tn_25h(ji,jj,jk) = tn_25h(ji,jj,jk) + tsn(ji,jj,jk,jp_tem) 246 sn_25h(ji,jj,jk) = sn_25h(ji,jj,jk) + tsn(ji,jj,jk,jp_sal) 247 un_25h(ji,jj,jk) = un_25h(ji,jj,jk) + un(ji,jj,jk) 248 vn_25h(ji,jj,jk) = vn_25h(ji,jj,jk) + vn(ji,jj,jk) 249 wn_25h(ji,jj,jk) = wn_25h(ji,jj,jk) + wn(ji,jj,jk) 250 avt_25h(ji,jj,jk) = avt_25h(ji,jj,jk) + avt(ji,jj,jk) 251 avm_25h(ji,jj,jk) = avm_25h(ji,jj,jk) + avm(ji,jj,jk) 233 252 # if defined key_zdfgls || defined key_zdftke 234 en_25h(:,:,:) = en_25h(:,:,:) + en(:,:,:)253 en_25h(ji,jj,jk) = en_25h(ji,jj,jk) + en(ji,jj,jk) 235 254 #endif 236 255 # if defined key_zdfgls 237 rmxln_25h(:,:,:) = rmxln_25h(:,:,:) + mxln(:,:,:) 238 #endif 256 rmxln_25h(ji,jj,jk) = rmxln_25h(ji,jj,jk) + mxln(ji,jj,jk) 257 #endif 258 END DO 259 END DO 260 END DO 261 !$OMP END PARALLEL 239 262 cnt_25h = cnt_25h + 1 240 263 … … 253 276 ENDIF 254 277 255 tn_25h(:,:,:) = tn_25h(:,:,:) / 25.0_wp 256 sn_25h(:,:,:) = sn_25h(:,:,:) / 25.0_wp 257 sshn_25h(:,:) = sshn_25h(:,:) / 25.0_wp 258 un_25h(:,:,:) = un_25h(:,:,:) / 25.0_wp 259 vn_25h(:,:,:) = vn_25h(:,:,:) / 25.0_wp 260 wn_25h(:,:,:) = wn_25h(:,:,:) / 25.0_wp 261 avt_25h(:,:,:) = avt_25h(:,:,:) / 25.0_wp 262 avm_25h(:,:,:) = avm_25h(:,:,:) / 25.0_wp 278 !$OMP PARALLEL 279 !$OMP DO schedule(static) private(jj, ji) 280 DO jj = 1, jpj 281 DO ji = 1, jpi 282 sshn_25h(ji,jj) = sshn_25h(ji,jj) / 25.0_wp 283 END DO 284 END DO 285 !$OMP END DO NOWAIT 286 !$OMP DO schedule(static) private(jk, jj, ji) 287 DO jk = 1, jpk 288 DO jj = 1, jpj 289 DO ji = 1, jpi 290 tn_25h(ji,jj,jk) = tn_25h(ji,jj,jk) / 25.0_wp 291 sn_25h(ji,jj,jk) = sn_25h(ji,jj,jk) / 25.0_wp 292 un_25h(ji,jj,jk) = un_25h(ji,jj,jk) / 25.0_wp 293 vn_25h(ji,jj,jk) = vn_25h(ji,jj,jk) / 25.0_wp 294 wn_25h(ji,jj,jk) = wn_25h(ji,jj,jk) / 25.0_wp 295 avt_25h(ji,jj,jk) = avt_25h(ji,jj,jk) / 25.0_wp 296 avm_25h(ji,jj,jk) = avm_25h(ji,jj,jk) / 25.0_wp 263 297 # if defined key_zdfgls || defined key_zdftke 264 en_25h(:,:,:) = en_25h(:,:,:) / 25.0_wp298 en_25h(ji,jj,jk) = en_25h(ji,jj,jk) / 25.0_wp 265 299 #endif 266 300 # if defined key_zdfgls 267 rmxln_25h(:,:,:) = rmxln_25h(:,:,:) / 25.0_wp 268 #endif 301 rmxln_25h(ji,jj,jk) = rmxln_25h(ji,jj,jk) / 25.0_wp 302 #endif 303 END DO 304 END DO 305 END DO 306 !$OMP END PARALLEL 269 307 270 308 IF (lwp) WRITE(numout,*) 'dia_wri_tide : Mean calculated by dividing 25 hour sums and writing output' 271 309 zmdi=1.e+20 !missing data indicator for masking 272 310 ! write tracers (instantaneous) 273 zw3d(:,:,:) = tn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 311 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 312 DO jk = 1, jpk 313 DO jj = 1, jpj 314 DO ji = 1, jpi 315 zw3d(ji,jj,jk) = tn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 316 END DO 317 END DO 318 END DO 274 319 CALL iom_put("temper25h", zw3d) ! potential temperature 275 zw3d(:,:,:) = sn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 320 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 321 DO jk = 1, jpk 322 DO jj = 1, jpj 323 DO ji = 1, jpi 324 zw3d(ji,jj,jk) = sn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 325 END DO 326 END DO 327 END DO 276 328 CALL iom_put( "salin25h", zw3d ) ! salinity 277 zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1)) 329 !$OMP PARALLEL DO schedule(static) private(jj, ji) 330 DO jj = 1, jpj 331 DO ji = 1, jpi 332 zw2d(ji,jj) = sshn_25h(ji,jj)*tmask(ji,jj,1) + zmdi*(1.0-tmask(ji,jj,1)) 333 END DO 334 END DO 278 335 CALL iom_put( "ssh25h", zw2d ) ! sea surface 279 336 280 337 281 338 ! Write velocities (instantaneous) 282 zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) 339 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 340 DO jk = 1, jpk 341 DO jj = 1, jpj 342 DO ji = 1, jpi 343 zw3d(ji,jj,jk) = un_25h(ji,jj,jk)*umask(ji,jj,jk) + zmdi*(1.0-umask(ji,jj,jk)) 344 END DO 345 END DO 346 END DO 283 347 CALL iom_put("vozocrtx25h", zw3d) ! i-current 284 zw3d(:,:,:) = vn_25h(:,:,:)*vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:)) 348 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 349 DO jk = 1, jpk 350 DO jj = 1, jpj 351 DO ji = 1, jpi 352 zw3d(ji,jj,jk) = vn_25h(ji,jj,jk)*vmask(ji,jj,jk) + zmdi*(1.0-vmask(ji,jj,jk)) 353 END DO 354 END DO 355 END DO 285 356 CALL iom_put("vomecrty25h", zw3d ) ! j-current 286 287 zw3d(:,:,:) = wn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 357 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 358 DO jk = 1, jpk 359 DO jj = 1, jpj 360 DO ji = 1, jpi 361 zw3d(ji,jj,jk) = wn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 362 END DO 363 END DO 364 END DO 288 365 CALL iom_put("vomecrtz25h", zw3d ) ! k-current 289 zw3d(:,:,:) = avt_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 366 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 367 DO jk = 1, jpk 368 DO jj = 1, jpj 369 DO ji = 1, jpi 370 zw3d(ji,jj,jk) = avt_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 371 END DO 372 END DO 373 END DO 290 374 CALL iom_put("avt25h", zw3d ) ! diffusivity 291 zw3d(:,:,:) = avm_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 375 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 376 DO jk = 1, jpk 377 DO jj = 1, jpj 378 DO ji = 1, jpi 379 zw3d(ji,jj,jk) = avm_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 380 END DO 381 END DO 382 END DO 292 383 CALL iom_put("avm25h", zw3d) ! viscosity 293 384 #if defined key_zdftke || defined key_zdfgls 294 zw3d(:,:,:) = en_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 385 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 386 DO jk = 1, jpk 387 DO jj = 1, jpj 388 DO ji = 1, jpi 389 zw3d(ji,jj,jk) = en_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 390 END DO 391 END DO 392 END DO 295 393 CALL iom_put("tke25h", zw3d) ! tke 296 394 #endif 297 395 #if defined key_zdfgls 298 zw3d(:,:,:) = rmxln_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 396 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 397 DO jk = 1, jpk 398 DO jj = 1, jpj 399 DO ji = 1, jpi 400 zw3d(ji,jj,jk) = rmxln_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 401 END DO 402 END DO 403 END DO 299 404 CALL iom_put( "mxln25h",zw3d) 300 405 #endif 301 406 302 407 ! After the write reset the values to cnt=1 and sum values equal current value 303 tn_25h(:,:,:) = tsn(:,:,:,jp_tem) 304 sn_25h(:,:,:) = tsn(:,:,:,jp_sal) 305 sshn_25h(:,:) = sshn (:,:) 306 un_25h(:,:,:) = un(:,:,:) 307 vn_25h(:,:,:) = vn(:,:,:) 308 wn_25h(:,:,:) = wn(:,:,:) 309 avt_25h(:,:,:) = avt(:,:,:) 310 avm_25h(:,:,:) = avm(:,:,:) 408 !$OMP PARALLEL 409 !$OMP DO schedule(static) private(jj, ji) 410 DO jj = 1, jpj 411 DO ji = 1, jpi 412 sshn_25h(ji,jj) = sshn (ji,jj) 413 END DO 414 END DO 415 !$OMP END DO NOWAIT 416 !$OMP DO schedule(static) private(jk, jj, ji) 417 DO jk = 1, jpk 418 DO jj = 1, jpj 419 DO ji = 1, jpi 420 tn_25h(ji,jj,jk) = tsn(ji,jj,jk,jp_tem) 421 sn_25h(ji,jj,jk) = tsn(ji,jj,jk,jp_sal) 422 un_25h(ji,jj,jk) = un(ji,jj,jk) 423 vn_25h(ji,jj,jk) = vn(ji,jj,jk) 424 wn_25h(ji,jj,jk) = wn(ji,jj,jk) 425 avt_25h(ji,jj,jk) = avt(ji,jj,jk) 426 avm_25h(ji,jj,jk) = avm(ji,jj,jk) 311 427 # if defined key_zdfgls || defined key_zdftke 312 en_25h(:,:,:) = en(:,:,:)428 en_25h(ji,jj,jk) = en(ji,jj,jk) 313 429 #endif 314 430 # if defined key_zdfgls 315 rmxln_25h(:,:,:) = mxln(:,:,:) 316 #endif 431 rmxln_25h(ji,jj,jk) = mxln(ji,jj,jk) 432 #endif 433 END DO 434 END DO 435 END DO 436 !$OMP END PARALLEL 317 437 cnt_25h = 1 318 438 IF (lwp) WRITE(numout,*) 'dia_wri_tide : After 25hr mean write, reset sum to current value and cnt_25h to one for overlapping average',cnt_25h -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90
r7646 r7698 89 89 CALL wrk_alloc( jpi , jpj , jpk , zrhd , zrhop ) 90 90 CALL wrk_alloc( jpi , jpj , jpk , jpts , ztsn ) 91 zarea_ssh(:,:) = area(:,:) * sshn(:,:) 91 !$OMP PARALLEL DO schedule(static) private(jj, ji) 92 DO jj = 1, jpj 93 DO ji = 1, jpi 94 zarea_ssh(ji,jj) = area(ji,jj) * sshn(ji,jj) 95 END DO 96 END DO 92 97 ENDIF 93 98 ! … … 106 111 IF( iom_use( 'botpres' ) .OR. iom_use( 'sshthster' ) .OR. iom_use( 'sshsteric' ) ) THEN 107 112 ! 108 ztsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) ! thermosteric ssh 109 ztsn(:,:,:,jp_sal) = sn0(:,:,:) 113 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 114 DO jk = 1, jpk 115 DO jj = 1, jpj 116 DO ji = 1, jpi 117 ztsn(ji,jj,jk,jp_tem) = tsn(ji,jj,jk,jp_tem) ! thermosteric ssh 118 ztsn(ji,jj,jk,jp_sal) = sn0(ji,jj,jk) 119 END DO 120 END DO 121 END DO 110 122 CALL eos( ztsn, zrhd, gdept_n(:,:,:) ) ! now in situ density using initial salinity 111 123 ! 112 zbotpres(:,:) = 0._wp ! no atmospheric surface pressure, levitating sea-ice 124 !$OMP PARALLEL 125 !$OMP DO schedule(static) private(jj, ji) 126 DO jj = 1, jpj 127 DO ji = 1, jpi 128 zbotpres(ji,jj) = 0._wp ! no atmospheric surface pressure, levitating sea-ice 129 END DO 130 END DO 113 131 DO jk = 1, jpkm1 114 zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 115 END DO 132 !$OMP DO schedule(static) private(jj, ji) 133 DO jj = 1, jpj 134 DO ji = 1, jpi 135 zbotpres(ji,jj) = zbotpres(ji,jj) + e3t_n(ji,jj,jk) * zrhd(ji,jj,jk) 136 END DO 137 END DO 138 END DO 139 !$OMP END PARALLEL 116 140 IF( ln_linssh ) THEN 117 141 IF( ln_isfcav ) THEN 142 !$OMP PARALLEL DO schedule(static) private(jj, ji) 118 143 DO ji = 1, jpi 119 144 DO jj = 1, jpj … … 122 147 END DO 123 148 ELSE 124 zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 149 !$OMP PARALLEL DO schedule(static) private(jj, ji) 150 DO ji = 1, jpi 151 DO jj = 1, jpj 152 zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,1) 153 END DO 154 END DO 125 155 END IF 126 156 !!gm … … 128 158 !!gm 129 159 END IF 160 ! 161 zarho = SUM( area(:,:) * zbotpres(:,:) ) 130 162 ! 131 zarho = SUM( area(:,:) * zbotpres(:,:) )132 163 IF( lk_mpp ) CALL mpp_sum( zarho ) 133 164 zssh_steric = - zarho / area_tot … … 136 167 ! ! steric sea surface height 137 168 CALL eos( tsn, zrhd, zrhop, gdept_n(:,:,:) ) ! now in situ and potential density 138 zrhop(:,:,jpk) = 0._wp 169 !$OMP PARALLEL DO schedule(static) private(jj, ji) 170 DO jj = 1, jpj 171 DO ji = 1, jpi 172 zrhop(ji,jj,jpk) = 0._wp 173 END DO 174 END DO 139 175 CALL iom_put( 'rhop', zrhop ) 140 176 ! 141 zbotpres(:,:) = 0._wp ! no atmospheric surface pressure, levitating sea-ice 177 !$OMP PARALLEL 178 !$OMP DO schedule(static) private(jj, ji) 179 DO jj = 1, jpj 180 DO ji = 1, jpi 181 zbotpres(ji,jj) = 0._wp ! no atmospheric surface pressure, levitating sea-ice 182 END DO 183 END DO 142 184 DO jk = 1, jpkm1 143 zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 185 !$OMP DO schedule(static) private(jj, ji) 186 DO jj = 1, jpj 187 DO ji = 1, jpi 188 zbotpres(ji,jj) = zbotpres(ji,jj) + e3t_n(ji,jj,jk) * zrhd(ji,jj,jk) 189 END DO 190 END DO 144 191 END DO 145 192 IF( ln_linssh ) THEN 146 193 IF ( ln_isfcav ) THEN 194 !$OMP DO schedule(static) private(jj, ji) 147 195 DO ji = 1,jpi 148 196 DO jj = 1,jpj … … 151 199 END DO 152 200 ELSE 153 zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 201 !$OMP DO schedule(static) private(jj, ji) 202 DO jj = 1, jpj 203 DO ji = 1, jpi 204 zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,1) 205 END DO 206 END DO 154 207 END IF 155 208 END IF 209 !$OMP END PARALLEL 156 210 ! 157 zarho = SUM( area(:,:) * zbotpres(:,:) ) 211 zarho = SUM( area(:,:) * zbotpres(:,:) ) 158 212 IF( lk_mpp ) CALL mpp_sum( zarho ) 159 213 zssh_steric = - zarho / area_tot … … 162 216 ! ! ocean bottom pressure 163 217 zztmp = rau0 * grav * 1.e-4_wp ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 164 zbotpres(:,:) = zztmp * ( zbotpres(:,:) + sshn(:,:) + thick0(:,:) ) 218 !$OMP PARALLEL DO schedule(static) private(jj, ji) 219 DO jj = 1, jpj 220 DO ji = 1, jpi 221 zbotpres(ji,jj) = zztmp * ( zbotpres(ji,jj) + sshn(ji,jj) + thick0(ji,jj) ) 222 END DO 223 END DO 165 224 CALL iom_put( 'botpres', zbotpres ) 166 225 ! … … 213 272 ! work is not being done against stratification 214 273 CALL wrk_alloc( jpi, jpj, zpe ) 215 zpe(:,:) = 0._wp 274 !$OMP PARALLEL DO schedule(static) private(jj,ji) 275 DO jj = 1, jpj 276 DO ji = 1, jpi 277 zpe(ji,jj) = 0._wp 278 END DO 279 END DO 216 280 IF( lk_zdfddm ) THEN 281 !$OMP PARALLEL DO schedule(static) private(ji,jj,jk,zrw,zaw,zbw) 217 282 DO ji=1,jpi 218 283 DO jj=1,jpj … … 232 297 ENDDO 233 298 ELSE 299 !$OMP PARALLEL DO schedule(static) private(ji,jj,jk) 234 300 DO ji = 1, jpi 235 301 DO jj = 1, jpj … … 323 389 INTEGER :: ik 324 390 INTEGER :: ji, jj, jk ! dummy loop indices 325 REAL(wp) :: zztmp 391 REAL(wp) :: zztmp, zsum 326 392 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zsaldta ! Jan/Dec levitus salinity 327 393 ! … … 341 407 IF( dia_ar5_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'dia_ar5_init : unable to allocate arrays' ) 342 408 343 area(:,:) = e1e2t(:,:) * tmask_i(:,:) 409 !$OMP PARALLEL DO schedule(static) private(jj, ji) 410 DO jj = 1, jpj 411 DO ji = 1, jpi 412 area(ji,jj) = e1e2t(ji,jj) * tmask_i(ji,jj) 413 END DO 414 END DO 344 415 345 416 area_tot = SUM( area(:,:) ) ; IF( lk_mpp ) CALL mpp_sum( area_tot ) 346 417 347 418 vol0 = 0._wp 348 thick0(:,:) = 0._wp 419 !$OMP PARALLEL 420 !$OMP DO schedule(static) private(jj, ji) 421 DO jj = 1, jpj 422 DO ji = 1, jpi 423 thick0(ji,jj) = 0._wp 424 END DO 425 END DO 349 426 DO jk = 1, jpkm1 350 vol0 = vol0 + SUM( area (:,:) * tmask(:,:,jk) * e3t_0(:,:,jk) ) 351 thick0(:,:) = thick0(:,:) + tmask_i(:,:) * tmask(:,:,jk) * e3t_0(:,:,jk) 352 END DO 427 !$OMP DO schedule(static) private(jj, ji, zsum) 428 DO jj = 1, jpj 429 DO ji = 1, jpi 430 zsum = area (ji,jj) * tmask(ji,jj,jk) * e3t_0(ji,jj,jk) 431 END DO 432 END DO 433 vol0 = vol0 + zsum 434 !$OMP DO schedule(static) private(jj, ji) 435 DO jj = 1, jpj 436 DO ji = 1, jpi 437 thick0(ji,jj) = thick0(ji,jj) + tmask_i(ji,jj) * tmask(ji,jj,jk) * e3t_0(ji,jj,jk) 438 END DO 439 END DO 440 END DO 441 !$OMP END PARALLEL 353 442 IF( lk_mpp ) CALL mpp_sum( vol0 ) 354 443 … … 358 447 CALL iom_close( inum ) 359 448 360 sn0(:,:,:) = 0.5_wp * ( zsaldta(:,:,:,1) + zsaldta(:,:,:,2) ) 361 sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 449 !$OMP PARALLEL 450 !$OMP DO schedule(static) private(jk, jj, ji) 451 DO jk = 1, jpk 452 DO jj = 1, jpj 453 DO ji = 1, jpi 454 sn0(ji,jj,jk) = 0.5_wp * ( zsaldta(ji,jj,jk,1) + zsaldta(ji,jj,jk,2) ) 455 sn0(ji,jj,jk) = sn0(ji,jj,jk) * tmask(ji,jj,jk) 456 END DO 457 END DO 458 END DO 362 459 IF( ln_zps ) THEN ! z-coord. partial steps 460 !$OMP DO schedule(static) private(jj, ji, ik, zztmp) 363 461 DO jj = 1, jpj ! interpolation of salinity at the last ocean level (i.e. the partial step) 364 462 DO ji = 1, jpi … … 371 469 END DO 372 470 ENDIF 471 !$OMP END PARALLEL 373 472 ! 374 473 CALL wrk_dealloc( jpi , jpj , jpk, jpts, zsaldta ) -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diacfl.F90
r6140 r7698 71 71 72 72 ! calculate Courant numbers 73 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 73 74 DO jk = 1, jpk 74 75 DO jj = 1, jpj … … 172 173 !!---------------------------------------------------------------------- 173 174 175 INTEGER :: ji, jj, jk ! dummy loop indices 174 176 175 177 IF( nn_diacfl == 1 ) THEN … … 181 183 182 184 ALLOCATE( zcu_cfl(jpi, jpj, jpk), zcv_cfl(jpi, jpj, jpk), zcw_cfl(jpi, jpj, jpk) ) 183 184 zcu_cfl(:,:,:)=0.0 185 zcv_cfl(:,:,:)=0.0 186 zcw_cfl(:,:,:)=0.0 187 185 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 186 DO jk = 1, jpk 187 DO jj = 1, jpj 188 DO ji = 1, jpi 189 zcu_cfl(ji,jj,jk)=0.0 190 zcv_cfl(ji,jj,jk)=0.0 191 zcw_cfl(ji,jj,jk)=0.0 192 END DO 193 END DO 194 END DO 188 195 IF( lwp ) THEN 189 196 WRITE(numout,*) -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r7646 r7698 88 88 CALL wrk_alloc( jpi,jpj, z2d0, z2d1 ) 89 89 ! 90 tsn(:,:,:,1) = tsn(:,:,:,1) * tmask(:,:,:) ; tsb(:,:,:,1) = tsb(:,:,:,1) * tmask(:,:,:) ; 91 tsn(:,:,:,2) = tsn(:,:,:,2) * tmask(:,:,:) ; tsb(:,:,:,2) = tsb(:,:,:,2) * tmask(:,:,:) ; 90 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 91 DO jk = 1, jpk 92 DO jj = 1, jpj 93 DO ji = 1, jpi 94 tsn(ji,jj,jk,1) = tsn(ji,jj,jk,1) * tmask(ji,jj,jk) ; tsb(ji,jj,jk,1) = tsb(ji,jj,jk,1) * tmask(ji,jj,jk) 95 tsn(ji,jj,jk,2) = tsn(ji,jj,jk,2) * tmask(ji,jj,jk) ; tsb(ji,jj,jk,2) = tsb(ji,jj,jk,2) * tmask(ji,jj,jk) 96 END DO 97 END DO 98 END DO 92 99 ! ------------------------- ! 93 100 ! 1 - Trends due to forcing ! … … 108 115 IF( ln_linssh ) THEN 109 116 IF( ln_isfcav ) THEN 117 !$OMP PARALLEL DO schedule(static) private(jj,ji) 110 118 DO ji=1,jpi 111 119 DO jj=1,jpj … … 115 123 END DO 116 124 ELSE 117 z2d0(:,:) = surf(:,:) * wn(:,:,1) * tsb(:,:,1,jp_tem) 118 z2d1(:,:) = surf(:,:) * wn(:,:,1) * tsb(:,:,1,jp_sal) 125 !$OMP PARALLEL DO schedule(static) private(jj,ji) 126 DO ji=1,jpi 127 DO jj=1,jpj 128 z2d0(ji,jj) = surf(ji,jj) * wn(ji,jj,1) * tsb(ji,jj,1,jp_tem) 129 z2d1(ji,jj) = surf(ji,jj) * wn(ji,jj,1) * tsb(ji,jj,1,jp_sal) 130 END DO 131 END DO 119 132 END IF 120 133 z_wn_trd_t = - glob_sum( z2d0 ) … … 145 158 IF( ln_linssh ) THEN 146 159 IF( ln_isfcav ) THEN 160 !$OMP PARALLEL DO schedule(static) private(jj,ji) 147 161 DO ji = 1, jpi 148 162 DO jj = 1, jpj … … 152 166 END DO 153 167 ELSE 154 z2d0(:,:) = surf(:,:) * ( tsn(:,:,1,jp_tem) * sshn(:,:) - ssh_hc_loc_ini(:,:) ) 155 z2d1(:,:) = surf(:,:) * ( tsn(:,:,1,jp_sal) * sshn(:,:) - ssh_sc_loc_ini(:,:) ) 168 !$OMP PARALLEL DO schedule(static) private(jj,ji) 169 DO jj = 1, jpj 170 DO ji = 1, jpi 171 z2d0(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,1,jp_tem) * sshn(ji,jj) - ssh_hc_loc_ini(ji,jj) ) 172 z2d1(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,1,jp_sal) * sshn(ji,jj) - ssh_sc_loc_ini(ji,jj) ) 173 END DO 174 END DO 156 175 END IF 157 176 z_ssh_hc = glob_sum_full( z2d0 ) … … 275 294 IF(lwp) WRITE(numout,*) ' dia_hsb at initial state ' 276 295 IF(lwp) WRITE(numout,*) '~~~~~~~' 277 surf_ini(:,:) = e1e2t(:,:) * tmask_i(:,:) ! initial ocean surface 278 ssh_ini(:,:) = sshn(:,:) ! initial ssh 296 !$OMP PARALLEL 297 !$OMP DO schedule(static) private(jj,ji) 298 DO jj = 1, jpj 299 DO ji = 1, jpi 300 surf_ini(ji,jj) = e1e2t(ji,jj) * tmask_i(ji,jj) ! initial ocean surface 301 ssh_ini(ji,jj) = sshn(ji,jj) ! initial ssh 302 END DO 303 END DO 304 !$OMP DO schedule(static) private(jk,jj,ji) 279 305 DO jk = 1, jpk 280 ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance). 281 e3t_ini (:,:,jk) = e3t_n(:,:,jk) * tmask(:,:,jk) ! initial vertical scale factors 282 hc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_tem) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial heat content 283 sc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_sal) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial salt content 306 DO jj = 1, jpj 307 DO ji = 1, jpi 308 ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance). 309 e3t_ini (ji,jj,jk) = e3t_n(ji,jj,jk) * tmask(ji,jj,jk) ! initial vertical scale factors 310 hc_loc_ini(ji,jj,jk) = tsn(ji,jj,jk,jp_tem) * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) ! initial heat content 311 sc_loc_ini(ji,jj,jk) = tsn(ji,jj,jk,jp_sal) * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) ! initial salt content 312 END DO 313 END DO 284 314 END DO 315 !$OMP END PARALLEL 285 316 frc_v = 0._wp ! volume trend due to forcing 286 317 frc_t = 0._wp ! heat content - - - - … … 288 319 IF( ln_linssh ) THEN 289 320 IF ( ln_isfcav ) THEN 321 !$OMP PARALLEL DO schedule(static) private(jj,ji) 290 322 DO ji=1,jpi 291 323 DO jj=1,jpj … … 295 327 ENDDO 296 328 ELSE 297 ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) ! initial heat content in ssh 298 ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:) ! initial salt content in ssh 329 !$OMP PARALLEL DO schedule(static) private(jj,ji) 330 DO jj = 1, jpj 331 DO ji = 1, jpi 332 ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,1,jp_tem) * sshn(ji,jj) ! initial heat content in ssh 333 ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,1,jp_sal) * sshn(ji,jj) ! initial salt content in ssh 334 ENDDO 335 ENDDO 299 336 END IF 300 337 frc_wn_t = 0._wp ! initial heat content misfit due to free surface … … 345 382 INTEGER :: ierror ! local integer 346 383 INTEGER :: ios 384 INTEGER :: ji, jj, jk ! dummy loop indices 347 385 !! 348 386 NAMELIST/namhsb/ ln_diahsb … … 384 422 ! 2 - Time independant variables and file opening ! 385 423 ! ----------------------------------------------- ! 386 surf(:,:) = e1t(:,:) * e2t(:,:) * tmask_i(:,:) ! masked surface grid cell area 424 !$OMP PARALLEL DO schedule(static) private(jj,ji) 425 DO jj = 1, jpj 426 DO ji = 1, jpi 427 surf(ji,jj) = e1t(ji,jj) * e2t(ji,jj) * tmask_i(ji,jj) ! masked surface grid cell area 428 END DO 429 END DO 387 430 surf_tot = glob_sum( surf(:,:) ) ! total ocean surface area 388 431 -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90
r7646 r7698 66 66 !!---------------------------------------------------------------------- 67 67 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 68 !! $Id$ 68 !! $Id$ 69 69 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 70 70 !!---------------------------------------------------------------------- … … 384 384 !! ** Purpose : Initialization, namelist read 385 385 !!---------------------------------------------------------------------- 386 INTEGER :: jn 386 INTEGER :: jn, jj, ji ! local integers 387 387 INTEGER :: inum, ierr ! local integers 388 388 INTEGER :: ios ! Local integer output status for namelist read … … 434 434 CALL iom_get( inum, jpdom_data, 'indmsk', btmsk(:,:,4) ) ! Indian basin 435 435 CALL iom_close( inum ) 436 btmsk(:,:,5) = MAX ( btmsk(:,:,3), btmsk(:,:,4) ) ! Indo-Pacific basin 437 WHERE( gphit(:,:) < -30._wp) ; btm30(:,:) = 0._wp ! mask out Southern Ocean 438 ELSE WHERE ; btm30(:,:) = ssmask(:,:) 439 END WHERE 436 !$OMP PARALLEL DO schedule(static) private(jj,ji) 437 DO jj = 1, jpj 438 DO ji = 1, jpi 439 btmsk(ji,jj,5) = MAX ( btmsk(ji,jj,3), btmsk(ji,jj,4) ) ! Indo-Pacific basin 440 IF( gphit(ji,jj) < -30._wp) THEN ; btm30(ji,jj) = 0._wp ! mask out Southern Ocean 441 ELSE ; btm30(ji,jj) = ssmask(ji,jj) 442 END IF 443 END DO 444 END DO 440 445 ENDIF 441 446 442 btmsk(:,:,1) = tmask_i(:,:) ! global ocean 447 !$OMP PARALLEL 448 !$OMP DO schedule(static) private(jj,ji) 449 DO jj = 1, jpj 450 DO ji = 1, jpi 451 btmsk(ji,jj,1) = tmask_i(ji,jj) ! global ocean 452 END DO 453 END DO 443 454 444 455 DO jn = 1, nptr 445 btmsk(:,:,jn) = btmsk(:,:,jn) * tmask_i(:,:) ! interior domain only 456 !$OMP DO schedule(static) private(jj,ji) 457 DO jj = 1, jpj 458 DO ji = 1, jpi 459 btmsk(ji,jj,jn) = btmsk(ji,jj,jn) * tmask_i(ji,jj) ! interior domain only 460 END DO 461 END DO 446 462 END DO 447 463 448 464 ! Initialise arrays to zero because diatpr is called before they are first calculated 449 465 ! Note that this means diagnostics will not be exactly correct when model run is restarted. 450 htr_adv(:,:) = 0._wp ; str_adv(:,:) = 0._wp 451 htr_ldf(:,:) = 0._wp ; str_ldf(:,:) = 0._wp 452 htr_eiv(:,:) = 0._wp ; str_eiv(:,:) = 0._wp 453 htr_ove(:,:) = 0._wp ; str_ove(:,:) = 0._wp 454 htr_btr(:,:) = 0._wp ; str_btr(:,:) = 0._wp 455 ! 466 !$OMP DO schedule(static) private(jj,ji) 467 DO jj = 1, jpj 468 DO ji = 1, jpi 469 htr_adv(ji,jj) = 0._wp ; str_adv(ji,jj) = 0._wp 470 htr_ldf(ji,jj) = 0._wp ; str_ldf(ji,jj) = 0._wp 471 htr_eiv(ji,jj) = 0._wp ; str_eiv(ji,jj) = 0._wp 472 htr_ove(ji,jj) = 0._wp ; str_ove(ji,jj) = 0._wp 473 htr_btr(ji,jj) = 0._wp ; str_btr(ji,jj) = 0._wp 474 END DO 475 END DO 476 ! 477 !$OMP END PARALLEL 456 478 ENDIF 457 479 ! -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r7646 r7698 161 161 CALL iom_put( "sst", tsn(:,:,1,jp_tem) ) ! surface temperature 162 162 IF ( iom_use("sbt") ) THEN 163 !$OMP PARALLEL DO schedule(static) private(jj, ji, jkbot) 163 164 DO jj = 1, jpj 164 165 DO ji = 1, jpi … … 173 174 CALL iom_put( "sss", tsn(:,:,1,jp_sal) ) ! surface salinity 174 175 IF ( iom_use("sbs") ) THEN 176 !$OMP PARALLEL DO schedule(static) private(jj, ji, jkbot) 175 177 DO jj = 1, jpj 176 178 DO ji = 1, jpi … … 183 185 184 186 IF ( iom_use("taubot") ) THEN ! bottom stress 185 z2d(:,:) = 0._wp 187 !$OMP PARALLEL 188 !$OMP DO schedule(static) private(jj, ji) 189 DO jj = 1, jpj 190 DO ji = 1, jpi 191 z2d(ji,jj) = 0._wp 192 END DO 193 END DO 194 !$OMP DO schedule(static) private(jj, ji, zztmpx,zztmpy) 186 195 DO jj = 2, jpjm1 187 196 DO ji = fs_2, fs_jpim1 ! vector opt. … … 194 203 ENDDO 195 204 ENDDO 205 !$OMP END PARALLEL 196 206 CALL lbc_lnk( z2d, 'T', 1. ) 197 207 CALL iom_put( "taubot", z2d ) … … 201 211 CALL iom_put( "ssu", un(:,:,1) ) ! surface i-current 202 212 IF ( iom_use("sbu") ) THEN 213 !$OMP PARALLEL DO schedule(static) private(jj, ji, jkbot) 203 214 DO jj = 1, jpj 204 215 DO ji = 1, jpi … … 213 224 CALL iom_put( "ssv", vn(:,:,1) ) ! surface j-current 214 225 IF ( iom_use("sbv") ) THEN 226 !$OMP PARALLEL DO schedule(static) private(jj, ji,jkbot) 215 227 DO jj = 1, jpj 216 228 DO ji = 1, jpi … … 225 237 IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN ! vertical mass transport & its square value 226 238 ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 227 z2d(:,:) = rau0 * e1e2t(:,:) 239 !$OMP PARALLEL 240 !$OMP DO schedule(static) private(jj, ji) 241 DO jj = 1, jpj 242 DO ji = 1, jpi 243 z2d(ji,jj) = rau0 * e1e2t(ji,jj) 244 END DO 245 END DO 246 !$OMP DO schedule(static) private(jk,jj,ji) 228 247 DO jk = 1, jpk 229 z3d(:,:,jk) = wn(:,:,jk) * z2d(:,:) 230 END DO 248 DO jj = 1, jpj 249 DO ji = 1, jpi 250 z3d(ji,jj,jk) = wn(ji,jj,jk) * z2d(ji,jj) 251 END DO 252 END DO 253 END DO 254 !$OMP END PARALLEL 231 255 CALL iom_put( "w_masstr" , z3d ) 232 256 IF( iom_use('w_masstr2') ) CALL iom_put( "w_masstr2", z3d(:,:,:) * z3d(:,:,:) ) … … 241 265 242 266 IF ( iom_use("sstgrad") .OR. iom_use("sstgrad2") ) THEN 267 !$OMP PARALLEL DO schedule(static) private(jj, ji, zztmp, zztmpx, zztmpy) 243 268 DO jj = 2, jpjm1 ! sst gradient 244 269 DO ji = fs_2, fs_jpim1 ! vector opt. … … 252 277 CALL lbc_lnk( z2d, 'T', 1. ) 253 278 CALL iom_put( "sstgrad2", z2d ) ! square of module of sst gradient 254 z2d(:,:) = SQRT( z2d(:,:) ) 279 !$OMP PARALLEL DO schedule(static) private(jj, ji) 280 DO jj = 1, jpj 281 DO ji = 1, jpi 282 z2d(ji,jj) = SQRT( z2d(ji,jj) ) 283 END DO 284 END DO 255 285 CALL iom_put( "sstgrad" , z2d ) ! module of sst gradient 256 286 ENDIF … … 258 288 ! clem: heat and salt content 259 289 IF( iom_use("heatc") ) THEN 260 z2d(:,:) = 0._wp 290 !$OMP PARALLEL 291 !$OMP DO schedule(static) private(jj, ji) 292 DO jj = 1, jpj 293 DO ji = 1, jpi 294 z2d(ji,jj) = 0._wp 295 END DO 296 END DO 261 297 DO jk = 1, jpkm1 298 !$OMP DO schedule(static) private(jj, ji) 262 299 DO jj = 1, jpj 263 300 DO ji = 1, jpi … … 266 303 END DO 267 304 END DO 305 !$OMP END PARALLEL 268 306 CALL iom_put( "heatc", (rau0 * rcp) * z2d ) ! vertically integrated heat content (J/m2) 269 307 ENDIF 270 308 271 309 IF( iom_use("saltc") ) THEN 272 z2d(:,:) = 0._wp 310 !$OMP PARALLEL 311 !$OMP DO schedule(static) private(jj, ji) 312 DO jj = 1, jpj 313 DO ji = 1, jpi 314 z2d(ji,jj) = 0._wp 315 END DO 316 END DO 273 317 DO jk = 1, jpkm1 318 !$OMP DO schedule(static) private(jj, ji) 274 319 DO jj = 1, jpj 275 320 DO ji = 1, jpi … … 278 323 END DO 279 324 END DO 325 !$OMP END PARALLEL 280 326 CALL iom_put( "saltc", rau0 * z2d ) ! vertically integrated salt content (PSU*kg/m2) 281 327 ENDIF 282 328 ! 283 329 IF ( iom_use("eken") ) THEN 284 rke(:,:,jk) = 0._wp ! kinetic energy 330 !$OMP PARALLEL 331 !$OMP DO schedule(static) private(jj, ji) 332 DO jj = 1, jpj 333 DO ji = 1, jpi 334 rke(ji,jj,jk) = 0._wp ! kinetic energy 335 END DO 336 END DO 337 !$OMP DO schedule(static) private(jk, jj, ji, zztmp, zztmpx, zztmpy) 285 338 DO jk = 1, jpkm1 286 339 DO jj = 2, jpjm1 … … 300 353 ENDDO 301 354 ENDDO 355 !$OMP END PARALLEL 302 356 CALL lbc_lnk( rke, 'T', 1. ) 303 357 CALL iom_put( "eken", rke ) … … 307 361 ! 308 362 IF( iom_use("u_masstr") .OR. iom_use("u_masstr_vint") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 309 z3d(:,:,jpk) = 0.e0 310 z2d(:,:) = 0.e0 363 !$OMP PARALLEL 364 !$OMP DO schedule(static) private(jj, ji) 365 DO jj = 1, jpj 366 DO ji = 1, jpi 367 z3d(ji,jj,jpk) = 0.e0 368 z2d(ji,jj) = 0.e0 369 END DO 370 END DO 311 371 DO jk = 1, jpkm1 312 z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * e3u_n(:,:,jk) * umask(:,:,jk) 313 z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 314 END DO 372 !$OMP DO schedule(static) private(jj, ji) 373 DO jj = 1, jpj 374 DO ji = 1, jpi 375 z3d(ji,jj,jk) = rau0 * un(ji,jj,jk) * e2u(ji,jj) * e3u_n(ji,jj,jk) * umask(ji,jj,jk) 376 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) 377 END DO 378 END DO 379 END DO 380 !$OMP END PARALLEL 315 381 CALL iom_put( "u_masstr", z3d ) ! mass transport in i-direction 316 382 CALL iom_put( "u_masstr_vint", z2d ) ! mass transport in i-direction vertical sum … … 318 384 319 385 IF( iom_use("u_heattr") ) THEN 320 z2d(:,:) = 0.e0 386 !$OMP PARALLEL 387 !$OMP DO schedule(static) private(jj, ji) 388 DO jj = 1, jpj 389 DO ji = 1, jpi 390 z2d(ji,jj) = 0.e0 391 END DO 392 END DO 321 393 DO jk = 1, jpkm1 394 !$OMP DO schedule(static) private(jj, ji) 322 395 DO jj = 2, jpjm1 323 396 DO ji = fs_2, fs_jpim1 ! vector opt. … … 326 399 END DO 327 400 END DO 401 !$OMP END PARALLEL 328 402 CALL lbc_lnk( z2d, 'U', -1. ) 329 403 CALL iom_put( "u_heattr", (0.5 * rcp) * z2d ) ! heat transport in i-direction … … 331 405 332 406 IF( iom_use("u_salttr") ) THEN 333 z2d(:,:) = 0.e0 407 !$OMP PARALLEL 408 !$OMP DO schedule(static) private(jj, ji) 409 DO jj = 1, jpj 410 DO ji = 1, jpi 411 z2d(ji,jj) = 0.e0 412 END DO 413 END DO 334 414 DO jk = 1, jpkm1 415 !$OMP DO schedule(static) private(jj, ji) 335 416 DO jj = 2, jpjm1 336 417 DO ji = fs_2, fs_jpim1 ! vector opt. … … 339 420 END DO 340 421 END DO 422 !$OMP END PARALLEL 341 423 CALL lbc_lnk( z2d, 'U', -1. ) 342 424 CALL iom_put( "u_salttr", 0.5 * z2d ) ! heat transport in i-direction … … 345 427 346 428 IF( iom_use("v_masstr") .OR. iom_use("v_heattr") .OR. iom_use("v_salttr") ) THEN 347 z3d(:,:,jpk) = 0.e0 429 !$OMP PARALLEL 430 !$OMP DO schedule(static) private(jj, ji) 431 DO jj = 1, jpj 432 DO ji = 1, jpi 433 z3d(ji,jj,jpk) = 0.e0 434 END DO 435 END DO 436 !$OMP DO schedule(static) private(jk,jj,ji) 348 437 DO jk = 1, jpkm1 349 z3d(:,:,jk) = rau0 * vn(:,:,jk) * e1v(:,:) * e3v_n(:,:,jk) * vmask(:,:,jk) 350 END DO 438 DO jj = 1, jpj 439 DO ji = 1, jpi 440 z3d(ji,jj,jk) = rau0 * vn(ji,jj,jk) * e1v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) 441 END DO 442 END DO 443 END DO 444 !$OMP END PARALLEL 351 445 CALL iom_put( "v_masstr", z3d ) ! mass transport in j-direction 352 446 ENDIF 353 447 354 448 IF( iom_use("v_heattr") ) THEN 355 z2d(:,:) = 0.e0 449 !$OMP PARALLEL 450 !$OMP DO schedule(static) private(jj, ji) 451 DO jj = 1, jpj 452 DO ji = 1, jpi 453 z2d(ji,jj) = 0.e0 454 END DO 455 END DO 356 456 DO jk = 1, jpkm1 457 !$OMP DO schedule(static) private(jj, ji) 357 458 DO jj = 2, jpjm1 358 459 DO ji = fs_2, fs_jpim1 ! vector opt. … … 361 462 END DO 362 463 END DO 464 !$OMP END PARALLEL 363 465 CALL lbc_lnk( z2d, 'V', -1. ) 364 466 CALL iom_put( "v_heattr", (0.5 * rcp) * z2d ) ! heat transport in j-direction … … 366 468 367 469 IF( iom_use("v_salttr") ) THEN 368 z2d(:,:) = 0.e0 470 !$OMP PARALLEL 471 !$OMP DO schedule(static) private(jj, ji) 472 DO jj = 1, jpj 473 DO ji = 1, jpi 474 z2d(ji,jj) = 0.e0 475 END DO 476 END DO 369 477 DO jk = 1, jpkm1 478 !$OMP DO schedule(static) private(jj, ji) 370 479 DO jj = 2, jpjm1 371 480 DO ji = fs_2, fs_jpim1 ! vector opt. … … 374 483 END DO 375 484 END DO 485 !$OMP END PARALLEL 376 486 CALL lbc_lnk( z2d, 'V', -1. ) 377 487 CALL iom_put( "v_salttr", 0.5 * z2d ) ! heat transport in j-direction … … 380 490 ! Vertical integral of temperature 381 491 IF( iom_use("tosmint") ) THEN 382 z2d(:,:)=0._wp 492 !$OMP PARALLEL 493 !$OMP DO schedule(static) private(jj, ji) 494 DO jj = 1, jpj 495 DO ji = 1, jpi 496 z2d(ji,jj) = 0.e0 497 END DO 498 END DO 383 499 DO jk = 1, jpkm1 500 !$OMP DO schedule(static) private(jj, ji) 384 501 DO jj = 2, jpjm1 385 502 DO ji = fs_2, fs_jpim1 ! vector opt. … … 388 505 END DO 389 506 END DO 507