SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 FUNCTION SUM_ON_ALL_PROCS(HPROGRAM,HGRID,OIN,HNAME) RESULT(KOUT) 00003 ! ####################################################### 00004 ! 00005 ! 00006 !!**** *SUM_ON_ALL_PROCS* - 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 #ifdef OL 00038 USE MODI_SUM_ON_ALL_PROCS_OL 00039 #endif 00040 #ifdef MNH 00041 USE MODI_SUM_ON_ALL_PROCS_MNH 00042 #endif 00043 ! 00044 ! 00045 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00046 USE PARKIND1 ,ONLY : JPRB 00047 ! 00048 IMPLICIT NONE 00049 ! 00050 !* 0.1 Declarations of arguments 00051 ! ------------------------- 00052 ! 00053 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling SURFEX 00054 CHARACTER(LEN=10), INTENT(IN) :: HGRID ! grid type 00055 LOGICAL, DIMENSION(:), INTENT(IN) :: OIN 00056 CHARACTER(LEN=3), INTENT(IN), OPTIONAL :: HNAME ! pour la maquette offline 00057 INTEGER :: KOUT 00058 ! 00059 !* 0.2 Declarations of local variables 00060 ! ------------------------------- 00061 ! 00062 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00063 ! 00064 INTEGER :: ISIZE 00065 INTEGER, DIMENSION(SIZE(OIN)) :: IIN ! 1 if OIN true, 0 otherwise 00066 ! 00067 CHARACTER(LEN=3) :: YNAME 00068 !------------------------------------------------------------------------------- 00069 ! 00070 IF (LHOOK) CALL DR_HOOK('SUM_ON_ALL_PROCS',0,ZHOOK_HANDLE) 00071 ! 00072 ISIZE = SIZE(OIN) 00073 IIN = 0 00074 WHERE(OIN) IIN = 1 00075 ! 00076 IF (HPROGRAM=='MESONH') THEN 00077 #ifdef MNH 00078 CALL SUM_ON_ALL_PROCS_MNH(ISIZE,IIN,KOUT) 00079 #endif 00080 ELSE IF (HPROGRAM=='AROME ' ) THEN 00081 #ifdef ARO 00082 KOUT = MAX(COUNT(OIN),1) ! to be coded properly in AROME 00083 #endif 00084 ELSE 00085 #ifdef OL 00086 ! to be coded properly once Offline version is parallelized 00087 YNAME = ' ' 00088 IF (PRESENT(HNAME)) YNAME = HNAME 00089 CALL SUM_ON_ALL_PROCS_OL(HGRID,ISIZE,IIN,KOUT,YNAME) 00090 #endif 00091 END IF 00092 ! 00093 IF (LHOOK) CALL DR_HOOK('SUM_ON_ALL_PROCS',1,ZHOOK_HANDLE) 00094 ! 00095 !------------------------------------------------------------------------------- 00096 ! 00097 END FUNCTION SUM_ON_ALL_PROCS