Changeset 7753 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
- Timestamp:
- 2017-03-03T12:46:59+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r7698 r7753 80 80 !!------------------------------------------------------------------ 81 81 INTEGER, INTENT( in ) :: kn ! =1 at_i & vt only ; = what is needed 82 REAL(wp), POINTER, DIMENSION(:,:,:) :: ze_s, ze_i83 82 ! 84 83 INTEGER :: ji, jj, jk, jl ! dummy loop indices 85 84 !!------------------------------------------------------------------ 86 85 87 CALL wrk_alloc( jpi, jpj, nlay_s, ze_s )88 CALL wrk_alloc( jpi, jpj, nlay_i, ze_i )89 86 ! integrated values 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 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 ) 163 92 164 93 ! open water fraction 165 !$OMP DO schedule(static) private(jj, ji)166 94 DO jj = 1, jpj 167 95 DO ji = 1, jpi … … 169 97 END DO 170 98 END DO 171 !$OMP END PARALLEL172 99 173 100 IF( kn > 1 ) THEN 174 101 175 !$OMP PARALLEL176 102 ! mean ice/snow thickness 177 !$OMP DO schedule(static) private(jj,ji,rswitch)178 103 DO jj = 1, jpj 179 104 DO ji = 1, jpi … … 185 110 186 111 ! mean temperature (K), salinity and age 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 112 smt_i(:,:) = 0._wp 113 tm_i(:,:) = 0._wp 114 tm_su(:,:) = 0._wp 115 om_i (:,:) = 0._wp 196 116 DO jl = 1, jpl 197 117 198 !$OMP DO schedule(static) private(jj,ji,rswitch)199 118 DO jj = 1, jpj 200 119 DO ji = 1, jpi … … 206 125 207 126 DO jk = 1, nlay_i 208 !$OMP DO schedule(static) private(jj,ji,rswitch)209 127 DO jj = 1, jpj 210 128 DO ji = 1, jpi … … 218 136 END DO 219 137 END DO 220 !$OMP END PARALLEL221 138 tm_i = tm_i + rt0 222 139 tm_su = tm_su + rt0 223 140 ! 224 141 ENDIF 225 CALL wrk_dealloc( jpi, jpj, nlay_s, ze_s )226 CALL wrk_dealloc( jpi, jpj, nlay_i, ze_i )227 142 ! 228 143 END SUBROUTINE lim_var_agg … … 244 159 ! Ice thickness, snow thickness, ice salinity, ice age 245 160 !------------------------------------------------------- 246 !$OMP PARALLEL 247 DO jl = 1, jpl 248 !$OMP DO schedule(static) private(jj,ji,rswitch) 161 DO jl = 1, jpl 249 162 DO jj = 1, jpj 250 163 DO ji = 1, jpi … … 255 168 END DO 256 169 ! Force the upper limit of ht_i to always be < hi_max (99 m). 257 !$OMP DO schedule(static) private(jj,ji,rswitch)258 170 DO jj = 1, jpj 259 171 DO ji = 1, jpi … … 265 177 266 178 DO jl = 1, jpl 267 !$OMP DO schedule(static) private(jj,ji,rswitch)268 179 DO jj = 1, jpj 269 180 DO ji = 1, jpi … … 277 188 IF( nn_icesal == 2 )THEN 278 189 DO jl = 1, jpl 279 !$OMP DO schedule(static) private(jj,ji,rswitch)280 190 DO jj = 1, jpj 281 191 DO ji = 1, jpi … … 288 198 END DO 289 199 ENDIF 290 !$OMP END PARALLEL291 200 292 201 CALL lim_var_salprof ! salinity profile … … 295 204 ! Ice temperatures 296 205 !------------------- 297 !$OMP PARALLEL298 206 DO jl = 1, jpl 299 207 DO jk = 1, nlay_i 300 !$OMP DO schedule(static) private(jj,ji,rswitch,zq_i,ztmelts,zaaa,zbbb,zccc,zdiscrim)301 208 DO jj = 1, jpj 302 209 DO ji = 1, jpi … … 324 231 DO jl = 1, jpl 325 232 DO jk = 1, nlay_s 326 !$OMP DO schedule(static) private(jj,ji,rswitch,zq_s)327 233 DO jj = 1, jpj 328 234 DO ji = 1, jpi … … 339 245 340 246 ! integrated values 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 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 360 251 ! 361 252 END SUBROUTINE lim_var_glo2eqv … … 409 300 !--------------------------------------- 410 301 IF( nn_icesal == 1 ) THEN 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 302 s_i (:,:,:,:) = rn_icesal 303 sm_i(:,:,:) = rn_icesal 431 304 ENDIF 432 305 … … 436 309 IF( nn_icesal == 2 ) THEN 437 310 ! 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 311 DO jk = 1, nlay_i 312 s_i(:,:,jk,:) = sm_i(:,:,:) 449 313 END DO 450 314 ! 451 315 DO jl = 1, jpl ! Slope of the linear profile 452 !$OMP DO schedule(static) private(jj,ji,rswitch)453 316 DO jj = 1, jpj 454 317 DO ji = 1, jpi … … 457 320 END DO 458 321 END DO 459 !$OMP END DO NOWAIT460 322 END DO 461 323 ! … … 463 325 zfac1 = zsi1 / ( zsi1 - zsi0 ) 464 326 ! 327 zalpha(:,:,:) = 0._wp 465 328 DO jl = 1, jpl 466 !$OMP DO schedule(static) private(jj, ji)467 DO jj = 1, jpj468 DO ji = 1, jpi469 zalpha(ji,jj,jl) = 0._wp470 END DO471 END DO472 END DO473 DO jl = 1, jpl474 !$OMP DO schedule(static) private(jj,ji,zswi0,zswi01,rswitch)475 329 DO jj = 1, jpj 476 330 DO ji = 1, jpi … … 491 345 DO jl = 1, jpl 492 346 DO jk = 1, nlay_i 493 !$OMP DO schedule(static) private(jj,ji,zs_zero)494 347 DO jj = 1, jpj 495 348 DO ji = 1, jpi … … 504 357 END DO 505 358 END DO 506 !$OMP END PARALLEL507 359 ! 508 360 ENDIF ! nn_icesal … … 514 366 IF( nn_icesal == 3 ) THEN ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 515 367 ! 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 368 sm_i(:,:,:) = 2.30_wp 526 369 ! 527 370 DO jl = 1, jpl … … 529 372 zargtemp = ( REAL(jk,wp) - 0.5_wp ) * r1_nlay_i 530 373 zsal = 1.6_wp * ( 1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) ) ) 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 374 s_i(:,:,jk,jl) = zsal 375 END DO 376 END DO 540 377 ! 541 378 ENDIF ! nn_icesal … … 559 396 !!------------------------------------------------------------------ 560 397 ! 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 398 bvm_i(:,:) = 0._wp 399 bv_i (:,:,:) = 0._wp 576 400 DO jl = 1, jpl 577 401 DO jk = 1, nlay_i 578 !$OMP DO schedule(static) private(jj,ji,rswitch)579 402 DO jj = 1, jpj 580 403 DO ji = 1, jpi … … 586 409 END DO 587 410 588 !$OMP DO schedule(static) private(jj,ji,rswitch)589 411 DO jj = 1, jpj 590 412 DO ji = 1, jpi … … 594 416 END DO 595 417 END DO 596 !$OMP END PARALLEL597 418 ! 598 419 END SUBROUTINE lim_var_bv … … 697 518 REAL(wp) :: zsal, zvi, zvs, zei, zes 698 519 !!------------------------------------------------------------------- 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 520 at_i (:,:) = 0._wp 521 DO jl = 1, jpl 522 at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 713 523 END DO 714 524 … … 719 529 !----------------------------------------------------------------- 720 530 DO jk = 1, nlay_i 721 !$OMP DO schedule(static) private(jj,ji,rswitch,zei)722 531 DO jj = 1 , jpj 723 532 DO ji = 1 , jpi … … 736 545 END DO 737 546 738 !$OMP DO schedule(static) private(jj,ji,rswitch,zsal,zvi,zvs,zes)739 547 DO jj = 1 , jpj 740 548 DO ji = 1 , jpi … … 775 583 776 584 ! to be sure that at_i is the sum of 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 585 at_i (:,:) = 0._wp 586 DO jl = 1, jpl 587 at_i(:,:) = at_i(:,:) + a_i(:,:,jl) 790 588 END DO 791 589 792 590 ! open water = 1 if at_i=0 793 !$OMP DO schedule(static) private(jj,ji,rswitch)794 591 DO jj = 1, jpj 795 592 DO ji = 1, jpi … … 798 595 END DO 799 596 END DO 800 !$OMP END PARALLEL801 597 802 598 !
Note: See TracChangeset
for help on using the changeset viewer.