SURFEX v8.1
General documentation of Surfex
make_lcover.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 ! #########
7  SUBROUTINE make_lcover(OCOVER)
8 ! ##############################################################
9 !
10 !!**** *PGD_COVER* monitor for averaging and interpolations of cover fractions
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !! METHOD
16 !! ------
17 !!
18 !
19 !! EXTERNAL
20 !! --------
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !!
32 !! MODIFICATION
33 !! ------------
34 !!
35 !! Original 10/12/97
36 !!
37 !----------------------------------------------------------------------------
38 !
39 !* 0. DECLARATION
40 ! -----------
41 !
42 USE modd_surfex_mpi, ONLY : nrank, npio, nproc, ncomm
43 !
44 USE yomhook ,ONLY : lhook, dr_hook
45 USE parkind1 ,ONLY : jprb
46 !
47 #ifdef SFX_MNH
48 USE mode_fd_ll, ONLY : getfd,fd_ll
49 USE modd_io_ll, ONLY : isp, isnproc
50 USE modd_var_ll, ONLY : nmnh_comm_world
51 #endif
52 !
53 IMPLICIT NONE
54 !
55 #if defined(SFX_MPI) || defined(SFX_MNH)
56 include "mpif.h"
57 #endif
58 !
59 !* 0.1 Declaration of arguments
60 ! ------------------------
61 !
62 LOGICAL, DIMENSION(:), INTENT(INOUT) :: OCOVER
63 !
64 !* 0.2 Declaration of local variables
65 ! ------------------------------
66 !
67 #ifdef SFX_MNH
68 TYPE(fd_ll), POINTER :: TZFD
69 #endif
70 !
71 INTEGER :: INFOMPI, JPROC, JCOVER
72 !
73 INTEGER :: IRANK_SAVE, IPROC_SAVE, IPIO_SAVE, ICOMM_SAVE
74 !
75 LOGICAL, DIMENSION(:,:), ALLOCATABLE :: GCOVER_ALL
76 !
77 REAL(KIND=JPRB) :: ZHOOK_HANDLE
78 !
79 !---------------------------------------------------------------
80 !
81 !* 1. Initializations
82 ! ---------------
83 !
84 IF (lhook) CALL dr_hook('MAKE_LCOVER',0,zhook_handle)
85 !
86 #ifdef SFX_MNH
87 tzfd=>getfd(nmnh_comm_world)
88 !
89 irank_save = nrank
90 iproc_save = nproc
91 ipio_save = npio
92 icomm_save = ncomm
93 !
94 ! on met les infos de mésonh
95 nrank = isp-1
96 nproc = isnproc
97 npio = tzfd%OWNER-1
98 ncomm = tzfd%COMM
99 #endif
100 !
101 ALLOCATE(gcover_all(SIZE(ocover),0:nproc-1))
102 !
103 !
104 IF (nproc>1) THEN
105 #if defined(SFX_MPI) || defined(SFX_MNH)
106  CALL mpi_allgather(ocover,SIZE(ocover),mpi_logical,gcover_all,SIZE(ocover),&
107  mpi_logical,ncomm,infompi)
108 #endif
109 ELSE
110  gcover_all(:,0) = ocover(:)
111 ENDIF
112 !
113 !
114 ocover(:) = .false.
115 DO jproc = 0,nproc-1
116  DO jcover=1,SIZE(ocover)
117  IF (gcover_all(jcover,jproc)) ocover(jcover) = .true.
118  ENDDO
119 ENDDO
120 !
121 DEALLOCATE(gcover_all)
122 !
123 !
124 IF (nproc>1) THEN
125 #if defined(SFX_MPI) || defined(SFX_MNH)
126  CALL mpi_bcast(ocover,SIZE(ocover),mpi_logical,npio,ncomm,infompi)
127 #endif
128 ENDIF
129 !
130 #ifdef SFX_MNH
131 nrank = irank_save
132 nproc = iproc_save
133 npio = ipio_save
134 ncomm = icomm_save
135 #endif
136 !
137 IF (lhook) CALL dr_hook('MAKE_LCOVER',1,zhook_handle)
138 !
139 END SUBROUTINE make_lcover
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine make_lcover(OCOVER)
Definition: make_lcover.F90:8