SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
average2_cover.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  SUBROUTINE average2_cover (U, &
7  hprogram)
8 ! #########################
9 !
10 !!**** *AVERAGE2_COVER* computes the cover fractions
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !! METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !! AUTHOR
28 !! ------
29 !!
30 !! V. Masson Meteo-France
31 !!
32 !! MODIFICATION
33 !! ------------
34 !!
35 !! Original 10/12/97
36 !!
37 !----------------------------------------------------------------------------
38 !
39 !* 0. DECLARATION
40 ! -----------
41 !
42 !
43 USE modd_surf_atm_n, ONLY : surf_atm_t
44 !
45 USE modd_pgdwork, ONLY : nsize, xsumcover
46 !
47 USE modd_pgd_grid, ONLY : cgrid
48 !
49 USE modi_sum_on_all_procs
50 !
51 USE yomhook ,ONLY : lhook, dr_hook
52 USE parkind1 ,ONLY : jprb
53 !
54 IMPLICIT NONE
55 !
56 !* 0.1 Declaration of arguments
57 ! ------------------------
58 !
59 !
60 TYPE(surf_atm_t), INTENT(INOUT) :: u
61 !
62  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! Type of program
63 !
64 !* 0.2 Declaration of other local variables
65 ! ------------------------------------
66 !
67 REAL, DIMENSION(:), ALLOCATABLE :: zunity
68 !
69 INTEGER :: jcover, icpt ! loop counter on cover classes
70 REAL(KIND=JPRB) :: zhook_handle
71 !----------------------------------------------------------------------------
72 !
73 !* 1. Average values
74 ! --------------
75 !
76 IF (lhook) CALL dr_hook('AVERAGE2_COVER',0,zhook_handle)
77 ALLOCATE(zunity(SIZE(nsize)))
78 zunity(:) = 0.
79 !
80 DO jcover=1,SIZE(xsumcover,2)
81  icpt = sum_on_all_procs(hprogram,cgrid,xsumcover(:,jcover)/=0., 'HAL')
82  IF (icpt>0) u%LCOVER(jcover) = .true.
83 ENDDO
84 !
85 ALLOCATE(u%XCOVER(SIZE(nsize),count(u%LCOVER)))
86 !
87 icpt = 0
88 DO jcover=1,SIZE(xsumcover,2)
89  IF (u%LCOVER(jcover)) THEN
90  icpt = icpt+1
91  WHERE (nsize(:)/=0)
92  u%XCOVER(:,icpt)=xsumcover(:,jcover) /nsize(:)
93  zunity(:)=zunity(:) + u%XCOVER(:,icpt)
94  ENDWHERE
95  ENDIF
96 END DO
97 !
98 DO jcover=1,SIZE(u%XCOVER,2)
99  WHERE (nsize(:) /=0 )
100  u%XCOVER(:,jcover)=u%XCOVER(:,jcover) / zunity(:)
101  END WHERE
102 END DO
103 !
104 !-------------------------------------------------------------------------------
105 DEALLOCATE(zunity)
106 IF (lhook) CALL dr_hook('AVERAGE2_COVER',1,zhook_handle)
107 !-------------------------------------------------------------------------------
108 !
109 END SUBROUTINE average2_cover
subroutine average2_cover(U, HPROGRAM)
integer function sum_on_all_procs(HPROGRAM, HGRID, OIN, HNAME)