SURFEX v8.1
General documentation of Surfex
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 !! S.Senesi 08/2015 : Adapt to XIOS output mode
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 USE modd_surf_conf, ONLY : csoftware
43 !
44 #ifdef SFX_OL
45 USE modi_sum_on_all_procs_ol
46 #endif
47 #ifdef SFX_MNH
48 USE modi_sum_on_all_procs_mnh
49 USE modi_sum_on_all_procs_mnh_hal
50 #endif
51 !
52 !
53 USE yomhook ,ONLY : lhook, dr_hook
54 USE parkind1 ,ONLY : jprb
55 !
56 IMPLICIT NONE
57 !
58 !* 0.1 Declarations of arguments
59 ! -------------------------
60 !
61  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling SURFEX
62  CHARACTER(LEN=10), INTENT(IN) :: HGRID ! grid type
63 LOGICAL, DIMENSION(:), INTENT(IN) :: OIN
64  CHARACTER(LEN=3), INTENT(IN), OPTIONAL :: HNAME ! pour la maquette offline
65 INTEGER :: KOUT
66 !
67 !* 0.2 Declarations of local variables
68 ! -------------------------------
69 !
70 REAL(KIND=JPRB) :: ZHOOK_HANDLE
71 !
72 INTEGER :: ISIZE
73 INTEGER, DIMENSION(SIZE(OIN)) :: IIN ! 1 if OIN true, 0 otherwise
74 !
75  CHARACTER(LEN=3) :: YNAME
76 !-------------------------------------------------------------------------------
77 !
78 IF (lhook) CALL dr_hook('SUM_ON_ALL_PROCS',0,zhook_handle)
79 !
80 isize = SIZE(oin)
81 iin = 0
82 WHERE(oin) iin = 1
83 !
84 IF (hprogram=='MESONH') THEN
85 #ifdef SFX_MNH
86  yname = ' '
87  IF (PRESENT(hname)) yname = hname
88  IF (yname=="HAL") THEN
89  CALL sum_on_all_procs_mnh_hal(isize,iin,kout)
90  ELSE
91  CALL sum_on_all_procs_mnh(isize,iin,kout)
92  ENDIF
93 #endif
94 ELSE IF (hprogram=='AROME ' .OR. (hprogram=='XIOS '.AND.trim(csoftware)/="OFFLINE")) THEN
95 #ifdef SFX_ARO
96  kout = max(count(oin),1) ! to be coded properly in AROME
97 #endif
98 ELSE
99 #ifdef SFX_OL
100  ! to be coded properly once Offline version is parallelized
101  yname = ' '
102  IF (PRESENT(hname)) yname = hname
103  CALL sum_on_all_procs_ol(hgrid,isize,iin,kout,yname)
104 #endif
105 END IF
106 !
107 IF (lhook) CALL dr_hook('SUM_ON_ALL_PROCS',1,zhook_handle)
108 !
109 !-------------------------------------------------------------------------------
110 !
111 END FUNCTION sum_on_all_procs
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine sum_on_all_procs_ol(HGRID, KSIZE, KIN, KOUT, HNAME)
integer function sum_on_all_procs(HPROGRAM, HGRID, OIN, HNAME)
integer, parameter jprb
Definition: parkind1.F90:32
character(len=7) csoftware
logical lhook
Definition: yomhook.F90:15
static int count
Definition: memory_hook.c:21