SURFEX v7.3
General documentation of Surfex
|
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