SURFEX v8.1
General documentation of Surfex
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, HPROGRAM)
7 ! #########################
8 !
9 !!**** *AVERAGE2_COVER* computes the cover fractions
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !! METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !! IMPLICIT ARGUMENTS
21 !! ------------------
22 !!
23 !! REFERENCE
24 !! ---------
25 !!
26 !! AUTHOR
27 !! ------
28 !!
29 !! V. Masson Meteo-France
30 !!
31 !! MODIFICATION
32 !! ------------
33 !!
34 !! Original 10/12/97
35 !!
36 !----------------------------------------------------------------------------
37 !
38 !* 0. DECLARATION
39 ! -----------
40 !
41 !
42 USE modd_surfex_mpi, ONLY : nrank
43 USE modd_pgdwork, ONLY : nsize, xsumval, xprec
44 !
45 USE modd_surf_atm_n, ONLY : surf_atm_t
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 REAL :: ZINT
70 INTEGER :: JI, JJ
71 INTEGER :: JCOV ! loop counter on cover classes
72 REAL(KIND=JPRB) :: ZHOOK_HANDLE
73 !----------------------------------------------------------------------------
74 !
75 !* 1. Average values
76 ! --------------
77 !
78 IF (lhook) CALL dr_hook('AVERAGE2_COVER',0,zhook_handle)
79 ALLOCATE(zunity(SIZE(nsize)))
80 zunity(:) = 0.
81 !
82 ALLOCATE(u%XCOVER(SIZE(nsize,1),SIZE(xsumval,2)))
83 !
84 DO jcov=1,SIZE(xsumval,2)
85  WHERE (nsize(:,1)/=0)
86  u%XCOVER(:,jcov) = xsumval(:,jcov) /nsize(:,1)
87  zunity(:)=zunity(:) + u%XCOVER(:,jcov)
88  ELSEWHERE
89  u%XCOVER(:,jcov) = 0.
90  END WHERE
91 END DO
92 !
93 DO jcov=1,SIZE(u%XCOVER,2)
94  WHERE (nsize(:,1) /=0 )
95  u%XCOVER(:,jcov)=u%XCOVER(:,jcov) / zunity(:)
96  END WHERE
97 END DO
98 !
99 DO jj=1,SIZE(u%XCOVER,2)
100  DO ji = 1,SIZE(u%XCOVER,1)
101 
102  zint = aint(u%XCOVER(ji,jj))
103  IF (u%XCOVER(ji,jj)/=zint) THEN
104  u%XCOVER(ji,jj) = zint + anint((u%XCOVER(ji,jj)-zint)*xprec)/xprec
105  ENDIF
106 
107  ENDDO
108 ENDDO
109 !
110 !-------------------------------------------------------------------------------
111 DEALLOCATE(zunity)
112 IF (lhook) CALL dr_hook('AVERAGE2_COVER',1,zhook_handle)
113 !-------------------------------------------------------------------------------
114 !
115 END SUBROUTINE average2_cover
subroutine average2_cover(U, HPROGRAM)
real, parameter xprec
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:,:), allocatable xsumval
logical lhook
Definition: yomhook.F90:15
integer, dimension(:,:), allocatable nsize
character(len=10) cgrid