SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
average1_cti.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_cti(KLUOUT,KNBLINES,PLAT,PLON,PVALUE,PNODATA)
7 ! ################################################
8 !
9 !!**** *AVERAGE1_CTI* computes the sum of cti, squared cti
10 !! and subgrid cti characteristics
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !! METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !! B. Decharme Meteo-France
32 !!
33 !! MODIFICATION
34 !! ------------
35 !!
36 !! Original 06/2009
37 !!
38 !----------------------------------------------------------------------------
39 !
40 !* 0. DECLARATION
41 ! -----------
42 !
43 USE modd_pgdwork, ONLY : xsumval, xsumval2, xsumval3, nsize, &
44  xmax_work, xmin_work
45 !
46 USE modi_get_mesh_index
48 !!
49 !
50 USE yomhook ,ONLY : lhook, dr_hook
51 USE parkind1 ,ONLY : jprb
52 !
53 IMPLICIT NONE
54 !
55 !* 0.1 Declaration of arguments
56 ! ------------------------
57 !
58 INTEGER, INTENT(IN) :: kluout
59 INTEGER, INTENT(IN) :: knblines
60 REAL, DIMENSION(:), INTENT(IN) :: plat ! latitude of the point to add
61 REAL, DIMENSION(:), INTENT(IN) :: plon ! longitude of the point to add
62 REAL, DIMENSION(:), INTENT(IN) :: pvalue ! value of the point to add
63 REAL, OPTIONAL, INTENT(IN) :: pnodata
64 !
65 !* 0.2 Declaration of other local variables
66 ! ------------------------------------
67 !
68 INTEGER, DIMENSION(NOVMX,SIZE(PLAT)) :: iindex ! mesh index of all input points
69  ! 0 indicates the point is out of the domain
70 !
71 REAL, DIMENSION(SIZE(PLAT)) :: zvalue
72 REAL :: znodata
73 !
74 INTEGER :: jloop, jover ! loop index on input arrays
75 REAL(KIND=JPRB) :: zhook_handle
76 !----------------------------------------------------------------------------
77 !
78 !
79 !* 1. Get position
80 ! ------------
81 !
82 IF (lhook) CALL dr_hook('AVERAGE1_CTI',0,zhook_handle)
83 !
84 IF (present(pnodata)) THEN
85  zvalue(:) = pvalue(:)
86  znodata = pnodata
87  CALL get_mesh_index(kluout,knblines,plat,plon,iindex,zvalue,znodata)
88 ELSE
89  zvalue(:) = 1.
90  znodata = 0.
91  CALL get_mesh_index(kluout,knblines,plat,plon,iindex)
92 ENDIF
93 !
94 !* 2. Loop on all input data points
95 ! -----------------------------
96 !
97 bloop: &
98 DO jloop = 1 , SIZE(plat)
99 !
100  DO jover = 1, novmx
101 !
102 !* 3. Tests on position
103 ! -----------------
104 !
105  IF (iindex(jover,jloop)==0) cycle bloop
106 !
107 !* 4. Summation
108 ! ---------
109 !
110  nsize(iindex(jover,jloop))=nsize(iindex(jover,jloop))+1
111 !
112 !* 5. CTI
113 ! ---
114 !
115  xsumval(iindex(jover,jloop))=xsumval(iindex(jover,jloop))+pvalue(jloop)
116 !
117 !* 6. Square of CTI
118 ! -------------
119 !
120  xsumval2(iindex(jover,jloop))=xsumval2(iindex(jover,jloop))+pvalue(jloop)**2
121 !
122 !
123 !* 7. Cube of CTI
124 ! -------------
125 !
126  xsumval3(iindex(jover,jloop))=xsumval3(iindex(jover,jloop))+pvalue(jloop)**3
127 !
128 !
129 !* 8. Maximum CTI in the mesh
130 ! -----------------------
131 !
132  xmax_work(iindex(jover,jloop))=max(xmax_work(iindex(jover,jloop)),pvalue(jloop))
133 !
134 !
135 !* 9. Minimum CTI in the mesh
136 ! -----------------------
137 !
138  xmin_work(iindex(jover,jloop))=min(xmin_work(iindex(jover,jloop)),pvalue(jloop))
139 !
140 !
141  ENDDO
142 !
143 ENDDO bloop
144 !
145 IF (lhook) CALL dr_hook('AVERAGE1_CTI',1,zhook_handle)
146 !
147 !-------------------------------------------------------------------------------
148 !
149 END SUBROUTINE average1_cti
subroutine get_mesh_index(KLUOUT, KNBLINES, PLAT, PLON, KINDEX, PVALUE, PNODATA, KSSO, KISSOX, KISSOY)
subroutine average1_cti(KLUOUT, KNBLINES, PLAT, PLON, PVALUE, PNODATA)
Definition: average1_cti.F90:6