32
33
34
35 USE spmd_comm_world_mod, ONLY : spmd_comm_world
36#include "implicit_f.inc"
37#include "spmd.inc"
38
39
40
41#include "task_c.inc"
42
43
44
45 INTEGER , INTENT(IN) :: LEN,LENP0, NODGLOB(LEN)
47 . v(len),vp0(lenp0)
48
49
50
51 INTEGER J,K
52 real
53 . , DIMENSION(:), ALLOCATABLE :: v_tmp,vp0_tmp
54#ifdef MPI
55 INTEGER STATUS(MPI_STATUS_SIZE),IERROR,I
56
57 ALLOCATE(v_tmp(lenp0))
58 ALLOCATE(vp0_tmp(lenp0))
59
60 DO i=1,lenp0
61 vp0_tmp(i)=zero
62 v_tmp(i) = zero
63 ENDDO
64 DO k=1,len
65 i=nodglob(k)
66 vp0_tmp(i)=v(k)
67 ENDDO
68
69 IF (lenp0 > 0) THEN
71 . mpi_real,mpi_sum,it_spmd(1),
72 . spmd_comm_world,ierror)
73 ENDIF
74 IF (ispmd==0) THEN
75 DO i=1,lenp0
76 vp0(i) = v_tmp(i)
77 END DO
78 ENDIF
79
80 DEALLOCATE(v_tmp,vp0_tmp)
81#endif
82 RETURN
subroutine mpi_reduce(sendbuf, recvbuf, cnt, datatype, op, root, comm, ierr)