SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/sum_on_all_procs.F90
Go to the documentation of this file.
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