1 | include(dom.inc)
2 |
3 | SUBROUTINE GATHER(vect, vect_cell, ndata)
4 |
5 | USE mod_pmm
6 | USE mod_slave
7 | #ifdef USEPALM
8 | USE palmlib
9 | #endif
10 |
11 | IMPLICIT NONE
12 |
13 | ! IN
14 | DOM_INT :: ndata
15 | DOM_REAL,DIMENSION(ndata,is_nnodes) :: vect
16 |
17 | ! LOCAL
18 | DOM_INT :: j, inode, k, ierr
19 | DOM_REAL, DIMENSION(ndata,is_ncells) :: local_vect_cell
20 |
21 | ! OUT
22 | DOM_REAL, DIMENSION(ndata,is_ncells) :: vect_cell
23 |
24 |
25 | vect_cell = 0.
26 |
27 | ! -----------------------------!
28 | ! Initializing local cell data !
29 | ! -----------------------------!
30 |
31 | local_vect_cell = 0.
32 |
33 | DO j= is_cellb, is_cellf
34 | DO inode=1,is_cnodes(j)
35 | k = is_cnnode(inode,j)
36 | local_vect_cell(:,j) = local_vect_cell(:,j) + vect(:,k)
37 | ENDDO
38 | local_vect_cell(:,j) = local_vect_cell(:,j)/ real(is_cnodes(j))
39 |
40 | ENDDO
41 |
42 | #ifdef USEPALM
43 | CALL MPI_ALLREDUCE(local_vect_cell, vect_cell, is_ncells*ndata, &
44 | & MPI_DOUBLE_PRECISION,MPI_SUM, PL_COMM_EXEC , &
45 | & ierr)
46 | #else
47 | CALL MPI_ALLREDUCE(local_vect_cell, vect_cell, is_ncells*ndata, &
48 | & MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD, &
49 | & ierr)
50 | #endif
51 |
52 | END SUBROUTINE GATHER
gather.F could be called by: