Changeset 7698 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
- Timestamp:
- 2017-02-18T10:02:03+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 !
Note: See TracChangeset
for help on using the changeset viewer.