SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
sum_on_all_procs.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  FUNCTION sum_on_all_procs(HPROGRAM,HGRID,OIN,HNAME) RESULT(KOUT)
7 ! #######################################################
8 !
9 !
10 !!**** *SUM_ON_ALL_PROCS* - sums the values of the integers provided on each processor
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! V. Masson *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 07/2011
36 !-------------------------------------------------------------------------------
37 !
38 !* 0. DECLARATIONS
39 ! ------------
40 !
41 #ifdef SFX_OL
42 USE modi_sum_on_all_procs_ol
43 #endif
44 #ifdef SFX_MNH
45 USE modi_sum_on_all_procs_mnh
46 USE modi_sum_on_all_procs_mnh_hal
47 #endif
48 !
49 !
50 USE yomhook ,ONLY : lhook, dr_hook
51 USE parkind1 ,ONLY : jprb
52 !
53 IMPLICIT NONE
54 !
55 !* 0.1 Declarations of arguments
56 ! -------------------------
57 !
58  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling SURFEX
59  CHARACTER(LEN=10), INTENT(IN) :: hgrid ! grid type
60 LOGICAL, DIMENSION(:), INTENT(IN) :: oin
61  CHARACTER(LEN=3), INTENT(IN), OPTIONAL :: hname ! pour la maquette offline
62 INTEGER :: kout
63 !
64 !* 0.2 Declarations of local variables
65 ! -------------------------------
66 !
67 REAL(KIND=JPRB) :: zhook_handle
68 !
69 INTEGER :: isize
70 INTEGER, DIMENSION(SIZE(OIN)) :: iin ! 1 if OIN true, 0 otherwise
71 !
72  CHARACTER(LEN=3) :: yname
73 !-------------------------------------------------------------------------------
74 !
75 IF (lhook) CALL dr_hook('SUM_ON_ALL_PROCS',0,zhook_handle)
76 !
77 isize = SIZE(oin)
78 iin = 0
79 WHERE(oin) iin = 1
80 !
81 IF (hprogram=='MESONH') THEN
82 #ifdef SFX_MNH
83  yname = ' '
84  IF (present(hname)) yname = hname
85  IF (yname=="HAL") THEN
86  CALL sum_on_all_procs_mnh_hal(isize,iin,kout)
87  ELSE
88  CALL sum_on_all_procs_mnh(isize,iin,kout)
89  ENDIF
90 #endif
91 ELSE IF (hprogram=='AROME ' ) THEN
92 #ifdef SFX_ARO
93  kout = max(count(oin),1) ! to be coded properly in AROME
94 #endif
95 ELSE
96 #ifdef SFX_OL
97  ! to be coded properly once Offline version is parallelized
98  yname = ' '
99  IF (present(hname)) yname = hname
100  CALL sum_on_all_procs_ol(hgrid,isize,iin,kout,yname)
101 #endif
102 END IF
103 !
104 IF (lhook) CALL dr_hook('SUM_ON_ALL_PROCS',1,zhook_handle)
105 !
106 !-------------------------------------------------------------------------------
107 !
108 END FUNCTION sum_on_all_procs
subroutine sum_on_all_procs_ol(HGRID, KSIZE, KIN, KOUT, HNAME)
integer function sum_on_all_procs(HPROGRAM, HGRID, OIN, HNAME)