SURFEX v8.1
General documentation of Surfex
average1_ldb.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 average1_ldb(UG,KLUOUT,KNBLINES,PLAT,PLON,PVALUE,HTYPE,PNODATA)
7 ! #######################################################
8 !
9 !!**** *AVERAGE1_LDB*
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !! METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !! IMPLICIT ARGUMENTS
21 !! ------------------
22 !!
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !! AUTHOR
28 !! ------
29 !!
30 !! S. Faroux Meteo-France
31 !!
32 !! MODIFICATION
33 !! ------------
34 !!
35 !! Original 17/02/11
36 !!
37 !----------------------------------------------------------------------------
38 !
39 !* 0. DECLARATION
40 ! -----------
41 !
43 !
44 USE modd_pgdwork, ONLY : xall, nsize_all
46 !
48 !
49 USE modi_get_mesh_index
50 USE modi_abor1_sfx
51 !
52 USE yomhook ,ONLY : lhook, dr_hook
53 USE parkind1 ,ONLY : jprb
54 !
55 IMPLICIT NONE
56 !
57 !* 0.1 Declaration of arguments
58 ! ------------------------
59 !
60 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
61 !
62 INTEGER, INTENT(IN) :: KLUOUT
63 INTEGER, INTENT(IN) :: KNBLINES
64 REAL, DIMENSION(:), INTENT(IN) :: PLAT ! latitude of the point to add
65 REAL, DIMENSION(:), INTENT(IN) :: PLON ! longitude of the point to add
66 REAL, DIMENSION(:), INTENT(IN) :: PVALUE ! value of the point to add
67  CHARACTER(LEN=1), INTENT(IN) :: HTYPE
68 REAL, OPTIONAL, INTENT(IN) :: PNODATA
69 !
70 !* 0.2 Declaration of other local variables
71 ! ------------------------------------
72 !
73 REAL, DIMENSION(:), ALLOCATABLE :: ZBOUND
74 !
75 INTEGER, DIMENSION(NOVMX,SIZE(PLAT)) :: IINDEX ! mesh index of all input points
76  ! 0 indicates the point is out of the domain
77 !
78 REAL, DIMENSION(SIZE(PLAT)) :: ZVALUE
79 REAL :: ZNODATA
80 !
81 REAL :: ZCUT
82 INTEGER :: JL, JGR, JOV ! loop index on input arrays
83 REAL(KIND=JPRB) :: ZHOOK_HANDLE
84 !----------------------------------------------------------------------------
85 !
86 !* 1. Get position
87 ! ------------
88 !
89 IF (lhook) CALL dr_hook('AVERAGE1_LDB',0,zhook_handle)
90 !
91 SELECT CASE (htype)
92 !
93  CASE('D')
94  ALLOCATE(zbound(SIZE(xboundgraddepth_ldb)))
95  zbound(:) = xboundgraddepth_ldb(:)
96 !
97  CASE('S')
98  ALLOCATE(zbound(SIZE(xboundgradstatus_ldb)))
99  zbound(:) = xboundgradstatus_ldb(:)
100 !
101  CASE DEFAULT
102  CALL abor1_sfx("AVERAGE1_LDB: HTYPE NOT SUPPORTED")
103 !
104 END SELECT
105 !
106 !
107 IF (PRESENT(pnodata)) THEN
108  zvalue(:) = pvalue(:)
109  znodata = pnodata
110  CALL get_mesh_index(ug,kluout,knblines,plat,plon,iindex,zvalue,znodata)
111 ELSE
112  zvalue(:) = 1.
113  znodata = 0.
114  CALL get_mesh_index(ug,kluout,knblines,plat,plon,iindex)
115 ENDIF
116 !
117 !* 2. Loop on all input data points
118 ! -----------------------------
119 !
120 bloop: &
121 DO jl = 1 , SIZE(plat)
122 !
123  DO jov = 1, novmx
124 !
125 !* 3. Tests on position
126 ! -----------------
127 !
128  IF (iindex(jov,jl)==0) cycle bloop
129 !
130 !* 4. Test on value meaning
131 ! ---------------------
132 !
133  zcut = pvalue(jl)
134 !
135  DO jgr = 1, SIZE(zbound)-1
136  IF (zcut.GT.zbound(jgr) .AND. zcut.LE.zbound(jgr+1)) THEN
137  xall(iindex(1,jl),jgr,1) = xall(iindex(1,jl),jgr,1) + 1
138  EXIT
139  ENDIF
140  ENDDO
141 !
142 !* 5. Summation
143 ! ---------
144 !
145  nsize_all(iindex(1,jl),1)=nsize_all(iindex(1,jl),1)+1
146 !
147  END DO
148 !
149 ENDDO bloop
150 !
151 DEALLOCATE(zbound)
152 !
153 IF (lhook) CALL dr_hook('AVERAGE1_LDB',1,zhook_handle)
154 !
155 !-------------------------------------------------------------------------------
156 !
157 END SUBROUTINE average1_ldb
integer, dimension(:,:), allocatable nsize_all
real, dimension(:,:,:), allocatable xall
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, dimension(ngradstatus_ldb+1), parameter xboundgradstatus_ldb
integer, parameter jprb
Definition: parkind1.F90:32
subroutine average1_ldb(UG, KLUOUT, KNBLINES, PLAT, PLON, PVALUE, HTYPE,
Definition: average1_ldb.F90:7
subroutine get_mesh_index(UG, KLUOUT, KNBLINES, PLAT, PLON, KINDEX, PVAL
logical lhook
Definition: yomhook.F90:15
real, dimension(ngraddepth_ldb+1), parameter xboundgraddepth_ldb