SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/OFFLIN/sum_on_all_procs_ol.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE SUM_ON_ALL_PROCS_OL(HGRID,KSIZE,KIN,KOUT,HNAME)
00003 !     #######################################################
00004 !
00005 !
00006 !!****  *SUM_ON_ALL_PROCS_OL* - sums the values of the integers provided on each processor
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !!
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    EXTERNAL
00015 !!    --------
00016 !!
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!
00024 !!
00025 !!    AUTHOR
00026 !!    ------
00027 !!      V. Masson    *Meteo France*     
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!      Original    07/2011 
00032 !-------------------------------------------------------------------------------
00033 !
00034 !*       0.    DECLARATIONS
00035 !              ------------
00036 !
00037 USE MODD_SURFEX_MPI, ONLY : NINDEX, NRANK, NPIO, NCOMM, NPROC
00038 !
00039 USE MODI_GATHER_AND_WRITE_MPI
00040 !
00041 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00042 USE PARKIND1  ,ONLY : JPRB
00043 !
00044 IMPLICIT NONE
00045 !
00046 #ifndef NOMPI
00047 INCLUDE "mpif.h"
00048 #endif
00049 !
00050 !*       0.1   Declarations of arguments
00051 !              -------------------------
00052 !
00053  CHARACTER(LEN=10),         INTENT(IN)    :: HGRID ! grid type
00054 INTEGER,                   INTENT(IN)    :: KSIZE ! size of integer array
00055 INTEGER, DIMENSION(KSIZE), INTENT(IN)    :: KIN   ! integer array to sum
00056 INTEGER,                   INTENT(INOUT) :: KOUT  ! sum of all integers
00057  CHARACTER(LEN=3),          INTENT(IN)    :: HNAME ! name of type of field
00058 !
00059 !*       0.2   Declarations of local variables
00060 !              -------------------------------
00061 !
00062 INTEGER, DIMENSION(SIZE(NINDEX)) :: IIN
00063 INTEGER :: INFOMPI
00064 REAL(KIND=JPRB)           :: ZHOOK_HANDLE
00065 !-------------------------------------------------------------------------------
00066 !
00067 IF (LHOOK) CALL DR_HOOK('SUM_ON_ALL_PROCS_OL',0,ZHOOK_HANDLE)
00068 !
00069 !* sum of field
00070 !
00071  CALL GATHER_AND_WRITE_MPI(KIN,IIN)
00072 IF (NRANK==NPIO) KOUT = SUM(IIN)
00073 !
00074 IF (NPROC>1) THEN
00075 !$OMP SINGLE    
00076 #ifndef NOMPI
00077   CALL MPI_BCAST(KOUT,KIND(KOUT)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
00078 #endif
00079 !$OMP END SINGLE COPYPRIVATE(KOUT)
00080 ENDIF
00081 !
00082 IF (LHOOK) CALL DR_HOOK('SUM_ON_ALL_PROCS_OL',1,ZHOOK_HANDLE)
00083 !
00084 !-------------------------------------------------------------------------------
00085 !
00086 END SUBROUTINE SUM_ON_ALL_PROCS_OL