scatter.F [SRC] [CPP] [JOB] [SCAN]
SOURCES / FUNCTIONS



   1 | include(dom.inc)
   2 | 
   3 |       SUBROUTINE SCATTER(vect_cell, vect, 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_ncells) :: vect_cell
  16 | 
  17 | !     LOCAL
  18 |       DOM_INT :: j, i, k, inode, ierr
  19 |       DOM_REAL, DIMENSION(ndata,is_nnodes) :: local_vect
  20 |       DOM_INT,  DIMENSION(is_nnodes)       :: nodecount,total_nodecount
  21 | 
  22 | !     OUT
  23 |       DOM_REAL,DIMENSION(ndata,is_nnodes)  :: vect
  24 | 
  25 |       vect = 0.
  26 | 
  27 | !     -----------------------------!
  28 | !     Initializing local cell data !
  29 | !     -----------------------------!
  30 | 
  31 |       local_vect = 0.
  32 |       nodecount       = 0
  33 |       total_nodecount = 0
  34 | 
  35 |       DO j= is_cellb, is_cellf
  36 |          DO inode=1, is_cnodes(j)
  37 |           k = is_cnnode(inode,j)
  38 |           nodecount(k) = nodecount(k) + 1
  39 |           local_vect(:,k) = local_vect(:,k)  + vect_cell(:,j)
  40 |         ENDDO
  41 |       ENDDO
  42 | 
  43 | #ifdef USEPALM
  44 |       CALL MPI_ALLREDUCE(local_vect, vect, is_nnodes*ndata,             &
  45 |      &                   MPI_DOUBLE_PRECISION,MPI_SUM, PL_COMM_EXEC  ,  &
  46 |      &                   ierr)
  47 | 
  48 |       CALL MPI_ALLREDUCE(nodecount, total_nodecount, is_nnodes,         &
  49 |      &                   MPI_INTEGER, MPI_SUM, PL_COMM_EXEC  ,          &
  50 |      &                   ierr)
  51 | 
  52 | #else
  53 |       CALL MPI_ALLREDUCE(local_vect, vect, is_nnodes*ndata,             &
  54 |      &                   MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,  &
  55 |      &                   ierr)
  56 | 
  57 |       CALL MPI_ALLREDUCE(nodecount, total_nodecount, is_nnodes,         &
  58 |      &                   MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD,          &
  59 |      &                   ierr)
  60 | #endif
  61 | 
  62 |       DO i=1,ndata
  63 |         vect(i,:) = vect(i,:) / real(total_nodecount(:))
  64 |       ENDDO
  65 |       
  66 |       END SUBROUTINE SCATTER


scatter.F could be called by:
Makefile [SOURCES] - 170
slave.F [SOURCES/MAIN/SLAVE] - 474 - 475 - 476