Changeset 683 for palm/trunk/SOURCE/transpose.f90
- Timestamp:
- Feb 9, 2011 2:25:15 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/transpose.f90
r623 r683 4 4 ! Current revisions: 5 5 ! ----------------- 6 ! 6 ! openMP parallelization of transpositions for 2d-domain-decomposition 7 7 ! 8 8 ! Former revisions: … … 61 61 !-- Rearrange indices of input array in order to make data to be send 62 62 !-- by MPI contiguous 63 !$OMP PARALLEL PRIVATE ( i, j, k ) 64 !$OMP DO 63 65 DO i = 0, nxa 64 66 DO k = nzb_x, nzt_xa … … 68 70 ENDDO 69 71 ENDDO 72 !$OMP END PARALLEL 70 73 71 74 ! … … 80 83 ! 81 84 !-- Reorder transposed array 82 m = 0 85 !$OMP PARALLEL PRIVATE ( i, j, k, l, m, ys ) 86 !$OMP DO 83 87 DO l = 0, pdims(2) - 1 88 m = l * ( nxr_ya - nxl_y + 1 ) * ( nzt_ya - nzb_y + 1 ) * & 89 ( nyn_xa - nys_x + 1 ) 84 90 ys = 0 + l * ( nyn_xa - nys_x + 1 ) 85 91 DO i = nxl_y, nxr_ya … … 92 98 ENDDO 93 99 ENDDO 100 !$OMP END PARALLEL 94 101 95 102 #endif … … 131 138 ! 132 139 !-- Reorder input array for transposition 133 m = 0 140 !$OMP PARALLEL PRIVATE ( i, j, k, l, m, xs ) 141 !$OMP DO 134 142 DO l = 0, pdims(1) - 1 143 m = l * ( nzt_xa - nzb_x + 1 ) * nnx * ( nyn_xa - nys_x + 1 ) 135 144 xs = 0 + l * nnx 136 145 DO k = nzb_x, nzt_xa … … 143 152 ENDDO 144 153 ENDDO 154 !$OMP END PARALLEL 145 155 146 156 ! … … 155 165 ! 156 166 !-- Reorder transposed array in a way that the z index is in first position 167 !$OMP PARALLEL PRIVATE ( i, j, k ) 168 !$OMP DO 157 169 DO k = 1, nza 158 170 DO i = nxl, nxra … … 162 174 ENDDO 163 175 ENDDO 176 !$OMP END PARALLEL 164 177 ELSE 165 178 ! 166 179 !-- Reorder the array in a way that the z index is in first position 180 !$OMP PARALLEL PRIVATE ( i, j, k ) 181 !$OMP DO 167 182 DO i = nxl, nxra 168 183 DO j = nys, nyna … … 172 187 ENDDO 173 188 ENDDO 174 189 !$OMP END PARALLEL 190 191 !$OMP PARALLEL PRIVATE ( i, j, k ) 192 !$OMP DO 175 193 DO k = 1, nza 176 194 DO i = nxl, nxra … … 180 198 ENDDO 181 199 ENDDO 200 !$OMP END PARALLEL 182 201 183 202 ENDIF … … 218 237 ! 219 238 !-- Reorder input array for transposition 220 m = 0 239 !$OMP PARALLEL PRIVATE ( i, j, k, l, m, ys ) 240 !$OMP DO 221 241 DO l = 0, pdims(2) - 1 242 m = l * ( nxr_ya - nxl_y + 1 ) * ( nzt_ya - nzb_y + 1 ) * & 243 ( nyn_xa - nys_x + 1 ) 222 244 ys = 0 + l * ( nyn_xa - nys_x + 1 ) 223 245 DO i = nxl_y, nxr_ya … … 230 252 ENDDO 231 253 ENDDO 254 !$OMP END PARALLEL 232 255 233 256 ! … … 242 265 ! 243 266 !-- Reorder transposed array in a way that the x index is in first position 267 !$OMP PARALLEL PRIVATE ( i, j, k ) 268 !$OMP DO 244 269 DO i = 0, nxa 245 270 DO k = nzb_x, nzt_xa … … 249 274 ENDDO 250 275 ENDDO 276 !$OMP END PARALLEL 251 277 252 278 #endif … … 353 379 !-- Rearrange indices of input array in order to make data to be send 354 380 !-- by MPI contiguous 381 !$OMP PARALLEL PRIVATE ( i, j, k ) 382 !$OMP DO 355 383 DO j = 0, nya 356 384 DO k = nzb_y, nzt_ya … … 360 388 ENDDO 361 389 ENDDO 390 !$OMP END PARALLEL 362 391 363 392 ! … … 367 396 !-- of the data is necessary and no transposition has to be done. 368 397 IF ( pdims(1) == 1 ) THEN 398 !$OMP PARALLEL PRIVATE ( i, j, k ) 399 !$OMP DO 369 400 DO j = 0, nya 370 401 DO k = nzb_y, nzt_ya … … 374 405 ENDDO 375 406 ENDDO 407 !$OMP END PARALLEL 376 408 RETURN 377 409 ENDIF … … 388 420 ! 389 421 !-- Reorder transposed array 390 m = 0 422 !$OMP PARALLEL PRIVATE ( i, j, k, l, m, zs ) 423 !$OMP DO 391 424 DO l = 0, pdims(1) - 1 425 m = l * ( nyn_za - nys_z + 1 ) * ( nzt_ya - nzb_y + 1 ) * & 426 ( nxr_za - nxl_z + 1 ) 392 427 zs = 1 + l * ( nzt_ya - nzb_y + 1 ) 393 428 DO j = nys_z, nyn_za … … 400 435 ENDDO 401 436 ENDDO 437 !$OMP END PARALLEL 402 438 403 439 #endif … … 435 471 !-- Rearrange indices of input array in order to make data to be send 436 472 !-- by MPI contiguous 473 !$OMP PARALLEL PRIVATE ( i, j, k ) 474 !$OMP DO 437 475 DO k = 1,nza 438 476 DO i = nxl, nxra … … 442 480 ENDDO 443 481 ENDDO 482 !$OMP END PARALLEL 444 483 445 484 ! … … 449 488 !-- of the data is necessary and no transposition has to be done. 450 489 IF ( pdims(1) == 1 ) THEN 490 !$OMP PARALLEL PRIVATE ( i, j, k ) 491 !$OMP DO 451 492 DO k = 1, nza 452 493 DO i = nxl, nxra … … 456 497 ENDDO 457 498 ENDDO 499 !$OMP END PARALLEL 458 500 RETURN 459 501 ENDIF … … 470 512 ! 471 513 !-- Reorder transposed array 472 m = 0 514 !$OMP PARALLEL PRIVATE ( i, j, k, l, m, xs ) 515 !$OMP DO 473 516 DO l = 0, pdims(1) - 1 517 m = l * ( nzt_xa - nzb_x + 1 ) * nnx * ( nyn_xa - nys_x + 1 ) 474 518 xs = 0 + l * nnx 475 519 DO k = nzb_x, nzt_xa … … 482 526 ENDDO 483 527 ENDDO 528 !$OMP END PARALLEL 484 529 485 530 #endif … … 521 566 ! 522 567 !-- Reorder input array for transposition 523 m = 0 568 !$OMP PARALLEL PRIVATE ( i, j, k, l, m, zs ) 569 !$OMP DO 524 570 DO l = 0, pdims(1) - 1 571 m = l * ( nyn_za - nys_z + 1 ) * ( nzt_ya - nzb_y + 1 ) * & 572 ( nxr_za - nxl_z + 1 ) 525 573 zs = 1 + l * ( nzt_ya - nzb_y + 1 ) 526 574 DO j = nys_z, nyn_za … … 533 581 ENDDO 534 582 ENDDO 583 !$OMP END PARALLEL 535 584 536 585 ! … … 545 594 ! 546 595 !-- Reorder transposed array in a way that the y index is in first position 596 !$OMP PARALLEL PRIVATE ( i, j, k ) 597 !$OMP DO 547 598 DO j = 0, nya 548 599 DO k = nzb_y, nzt_ya … … 552 603 ENDDO 553 604 ENDDO 605 !$OMP END PARALLEL 554 606 ELSE 555 607 ! 556 608 !-- Reorder the array in a way that the y index is in first position 609 !$OMP PARALLEL PRIVATE ( i, j, k ) 610 !$OMP DO 557 611 DO k = nzb_y, nzt_ya 558 612 DO j = 0, nya … … 562 616 ENDDO 563 617 ENDDO 618 !$OMP END PARALLEL 564 619 ! 565 620 !-- Move data to output array 621 !$OMP PARALLEL PRIVATE ( i, j, k ) 622 !$OMP DO 566 623 DO k = nzb_y, nzt_ya 567 624 DO i = nxl_y, nxr_ya … … 571 628 ENDDO 572 629 ENDDO 630 !$OMP END PARALLEL 573 631 574 632 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.