The TELEMAC-MASCARET system  trunk
p_dsumerr.F
Go to the documentation of this file.
1 ! ***********************************
2  DOUBLE PRECISION FUNCTION p_dsumerr
3 ! ***********************************
4 !
5  &(partial)
6 !
7 !***********************************************************************
8 ! PARALLEL V7P3 24/02/2016
9 !***********************************************************************
10 !
11 !brief SUM AND ERROR ROUNDING OF VALUES FROM ALL THE PROCESSORS.
12 !
13 !
14 !history R.NHEILI (Univerte de Perpignan, DALI)
15 !+ 24/02/2016
16 !+ V7P3
17 !
18 !
19 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20 !| PARTIAL |-->| SEND BUFFER (SUM_VALUE, ERROR VALUE)
21 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
22 !
25  IMPLICIT NONE
26 !
27 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28 !
29  DOUBLE PRECISION, INTENT(IN) :: PARTIAL(2)
30 !
31 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
32 !
33 #if defined (HAVE_MPI)
34  INTEGER IER,NUM_PROCS
35  DOUBLE PRECISION,ALLOCATABLE, DIMENSION(:)::ALL_PARTIAL_SUM
36 !
37 !-----------------------------------------------------------------------
38 !
39 # ifdef COMPAD
40  WRITE(lu,*) 'P_DSUMERR: NOT YET IMPLEMENTED'
41  CALL plante(1)
42  stop
43 # else
44  CALL mpi_comm_size (mpi_comm_world, num_procs, ier)
45  ALLOCATE(all_partial_sum(1:2*num_procs))
46  all_partial_sum=0.d0
47  CALL mpi_allgather (partial, 2, mpi_double_precision,
48  & all_partial_sum, 2, mpi_double_precision, mpi_comm_world, ier)
49 # endif
50 !
51  CALL sumtwo(2*num_procs, all_partial_sum, p_dsumerr)
52  DEALLOCATE(all_partial_sum)
53 !
54  IF(ier.NE.0) THEN
55  WRITE(lu,*) 'P_DSUMERR: ERROR IN MPI_ALLGATHER'
56  WRITE(lu,*) 'MPI ERROR: ',ier
57  CALL plante(1)
58  stop
59  ENDIF
60  RETURN
61 #else
62  WRITE(lu,*) 'CALL OF P_DSUM IN ITS VOID VERSION'
63 !
64  p_dsumerr=partial(1)
65 #endif
66 !
67 !-----------------------------------------------------------------------
68 !
69  RETURN
70  END
integer, parameter mpi_double_precision
double precision function p_dsumerr(PARTIAL)
Definition: p_dsumerr.F:7
integer, parameter mpi_comm_world