The TELEMAC-MASCARET system  trunk
p_lsum.F
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE p_lsum
3 ! *****************
4 !
5  &(buffer_length,lbuffer)
6 !
7 !***********************************************************************
8 ! PARALLEL V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief REDUCTION OF A VECTOR OF LOGICALS WITH DIFFUSION OF
12 !+ THE RESULT TO ALL THE PROCESSORS.
13 !
14 !history O.BOITEAU (SINETICS)
15 !+ 01/07/2006
16 !+ V5P9
17 !+
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32 !| BUFFER_LENGTH |-->| BUFFER SIZE
33 !| LBUFFER |<->| SEND BUFFER
34 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 !
38  IMPLICIT NONE
39 !
40 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41 !
42  INTEGER, INTENT(IN) :: BUFFER_LENGTH
43  LOGICAL, DIMENSION(BUFFER_LENGTH), INTENT(INOUT) :: LBUFFER
44 !
45 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46 !
47 #if defined HAVE_MPI
48  LOGICAL, DIMENSION(:), ALLOCATABLE :: LAUX
49  INTEGER IER,I
50 !
51 !-----------------------------------------------------------------------
52 !
53  ALLOCATE(laux(buffer_length),stat=ier)
54  CALL check_allocate(ier, 'LAUX')
55 !
56  DO i=1,buffer_length
57  laux(i)=lbuffer(i)
58  ENDDO
59 !
60  CALL mpi_allreduce(laux,lbuffer,buffer_length,mpi_logical,
61  & mpi_lor,comm,ier)
62 !
63  IF(ier.NE.0) THEN
64  WRITE(lu,*) 'P_LSUM: ERROR IN MPI_ALLREDUCE'
65  WRITE(lu,*) 'MPI ERROR: ',ier
66 ! CALL PLANTE(1)
67  stop
68  ENDIF
69 !
70  DEALLOCATE(laux)
71 #else
72  WRITE(lu,*) 'CALL OF P_LSUM IN ITS VOID VERSION'
73 !
74  lbuffer = .false.
75 !
76 #endif
77 !
78 !-----------------------------------------------------------------------
79 !
80  RETURN
81  END
subroutine p_lsum(BUFFER_LENGTH, LBUFFER)
Definition: p_lsum.F:7