SURFEX v8.1
General documentation of Surfex
surf_patch.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 !#####################
7 !#####################
8 !
9 INTERFACE surf_patch
10  SUBROUTINE surf_patch_2d(KNPATCH,PVEGTYPE,PPATCH,PVEGTYPE_PATCH)
11 
12 INTEGER , INTENT(IN) :: KNPATCH ! number of patches
13 REAL, DIMENSION(:,:), INTENT(IN) :: PVEGTYPE ! vegtype fractions
14 REAL, DIMENSION(:,:), INTENT(OUT) :: PPATCH ! patch weight in nature fraction
15 REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PVEGTYPE_PATCH ! vegtype fractions
16 ! ! for each patch
17 
18 END SUBROUTINE surf_patch_2d
19  SUBROUTINE surf_patch_1d(KPATCH,KNPATCH,PVEGTYPE,PPATCH,PVEGTYPE_PATCH)
20 
21 INTEGER , INTENT(IN) :: KPATCH !
22 INTEGER , INTENT(IN) :: KNPATCH ! number of patches
23 REAL, DIMENSION(:,:), INTENT(IN) :: PVEGTYPE ! vegtype fractions
24 REAL, DIMENSION(:), INTENT(OUT) :: PPATCH ! patch weight in nature fraction
25 REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PVEGTYPE_PATCH ! vegtype fractions
26 ! ! for each patch
27 
28 END SUBROUTINE surf_patch_1d
29 !
30 END INTERFACE surf_patch
31 !
32 END MODULE modi_surf_patch
33 !
34 ! #############################################
35  SUBROUTINE surf_patch_2d(KNPATCH,PVEGTYPE,PPATCH,PVEGTYPE_PATCH)
36 ! #############################################
37 !
38 !!**** *SURF_PATCH * - subroutine to compute the patch fractions in each grid
39 !! mesh with nature in it.
40 !!
41 !! PURPOSE
42 !! -------
43 !!
44 !!
45 !!** METHOD
46 !! ------
47 !!
48 !!
49 !!
50 !! EXTERNAL
51 !! --------
52 !!
53 !!
54 !!
55 !! IMPLICIT ARGUMENTS
56 !! ------------------
57 !!
58 !!
59 !! REFERENCE
60 !! ---------
61 !!
62 !!
63 !!
64 !! AUTHOR
65 !! ------
66 !!
67 !! V. Masson * METEO-FRANCE *
68 !!
69 !! MODIFICATIONS
70 !! -------------
71 !!
72 !! Original 15/03/99
73 ! F.solmon 06/00 adaptation for patch approach
74 !-------------------------------------------------------------------------------
75 !
76 !* 0. DECLARATIONS
77 ! ------------
78 !
79 USE modd_data_cover_par, ONLY : nvegtype
80 USE modd_surf_par, ONLY : xundef
81 !
82 USE modi_vegtype_to_patch
83 !
84 !
85 USE yomhook ,ONLY : lhook, dr_hook
86 USE parkind1 ,ONLY : jprb
87 !
88 IMPLICIT NONE
89 !
90 !* 0.1 Declarations of dummy arguments :
91 !
92 INTEGER , INTENT(IN) :: KNPATCH ! number of patches
93 REAL, DIMENSION(:,:), INTENT(IN) :: PVEGTYPE ! vegtype fractions
94 REAL, DIMENSION(:,:), INTENT(OUT) :: PPATCH ! patch weight in nature fraction
95 REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PVEGTYPE_PATCH ! vegtype fractions
96 ! ! for each patch
97 !
98 !
99 !* 0.2 Declarations of local variables for print on FM file
100 !
101 !
102 INTEGER ::JVEG, JPATCH ! loop on patches
103 REAL(KIND=JPRB) :: ZHOOK_HANDLE
104 !-------------------------------------------------------------------------------
105 !
106 IF (lhook) CALL dr_hook('MODI_SURF_PATCH:SURF_PATCH_2D',0,zhook_handle)
107 ppatch(:,:) =0.
108 IF (PRESENT(pvegtype_patch)) pvegtype_patch(:,:,:)=0.
109 DO jveg=1,nvegtype
110  jpatch=vegtype_to_patch(jveg, knpatch)
111  WHERE (pvegtype(:,jveg) /= xundef)
112  ppatch(:,jpatch) = ppatch(:,jpatch) + pvegtype(:,jveg)
113  END WHERE
114  IF (PRESENT(pvegtype_patch)) THEN
115  WHERE (pvegtype(:,jveg) /= xundef)
116  pvegtype_patch(:,jveg,jpatch)= pvegtype(:,jveg)
117  END WHERE
118  END IF
119 END DO
120 IF (PRESENT(pvegtype_patch)) THEN
121  DO jpatch=1,knpatch
122  DO jveg=1,nvegtype
123  WHERE (pvegtype(:,jveg) /= xundef .AND. ppatch(:,jpatch)/= 0.)
124  pvegtype_patch(:,jveg,jpatch) = pvegtype_patch(:,jveg,jpatch) / ppatch(:,jpatch)
125  END WHERE
126  END DO
127  END DO
128 END IF
129 IF (lhook) CALL dr_hook('MODI_SURF_PATCH:SURF_PATCH_2D',1,zhook_handle)
130 !
131 !
132 !-------------------------------------------------------------------------------
133 !
134 END SUBROUTINE surf_patch_2d
135 !-------------------------------------------------------------------------------
136 !
137 ! #############################################
138  SUBROUTINE surf_patch_1d(KPATCH,KNPATCH,PVEGTYPE,PPATCH,PVEGTYPE_PATCH)
139 ! #############################################
140 !
141 !!**** *SURF_PATCH * - subroutine to compute the patch fractions in each grid
142 !! mesh with nature in it.
143 !!
144 !! PURPOSE
145 !! -------
146 !!
147 !!
148 !!** METHOD
149 !! ------
150 !!
151 !!
152 !!
153 !! EXTERNAL
154 !! --------
155 !!
156 !!
157 !!
158 !! IMPLICIT ARGUMENTS
159 !! ------------------
160 !!
161 !!
162 !! REFERENCE
163 !! ---------
164 !!
165 !!
166 !!
167 !! AUTHOR
168 !! ------
169 !!
170 !! V. Masson * METEO-FRANCE *
171 !!
172 !! MODIFICATIONS
173 !! -------------
174 !!
175 !! Original 15/03/99
176 ! F.solmon 06/00 adaptation for patch approach
177 !-------------------------------------------------------------------------------
178 !
179 !* 0. DECLARATIONS
180 ! ------------
181 !
182 USE modd_data_cover_par, ONLY : nvegtype
183 USE modd_surf_par, ONLY : xundef
184 !
185 USE modi_vegtype_to_patch
186 !
187 !
188 USE yomhook ,ONLY : lhook, dr_hook
189 USE parkind1 ,ONLY : jprb
190 !
191 IMPLICIT NONE
192 !
193 !* 0.1 Declarations of dummy arguments :
194 !
195 INTEGER, INTENT(IN) :: KPATCH
196 INTEGER, INTENT(IN) :: KNPATCH ! number of patches
197 REAL, DIMENSION(:,:), INTENT(IN) :: PVEGTYPE ! vegtype fractions
198 REAL, DIMENSION(:), INTENT(OUT) :: PPATCH ! patch weight in nature fraction
199 REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PVEGTYPE_PATCH ! vegtype fractions
200 ! ! for each patch
201 !
202 !* 0.2 Declarations of local variables for print on FM file
203 !
204 !
205 INTEGER ::JVEG, JPATCH ! loop on patches
206 REAL(KIND=JPRB) :: ZHOOK_HANDLE
207 !-------------------------------------------------------------------------------
208 !
209 IF (lhook) CALL dr_hook('MODI_SURF_PATCH:SURF_PATCH_1D',0,zhook_handle)
210 ppatch(:) =0.
211 IF (PRESENT(pvegtype_patch)) pvegtype_patch(:,:)=0.
212 DO jveg=1,nvegtype
213  jpatch=vegtype_to_patch(jveg, knpatch)
214  IF (jpatch/=kpatch) cycle
215  WHERE (pvegtype(:,jveg) /= xundef)
216  ppatch(:) = ppatch(:) + pvegtype(:,jveg)
217  END WHERE
218  IF (PRESENT(pvegtype_patch)) THEN
219  WHERE (pvegtype(:,jveg) /= xundef)
220  pvegtype_patch(:,jveg) = pvegtype(:,jveg)
221  END WHERE
222  END IF
223 END DO
224 IF (PRESENT(pvegtype_patch)) THEN
225  DO jveg=1,nvegtype
226  WHERE (pvegtype(:,jveg) /= xundef .AND. ppatch(:)/= 0.)
227  pvegtype_patch(:,jveg) = pvegtype_patch(:,jveg) / ppatch(:)
228  END WHERE
229  END DO
230 END IF
231 IF (lhook) CALL dr_hook('MODI_SURF_PATCH:SURF_PATCH_1D',1,zhook_handle)
232 !
233 !
234 !-------------------------------------------------------------------------------
235 !
236 END SUBROUTINE surf_patch_1d
237 !
subroutine surf_patch_1d(KPATCH, KNPATCH, PVEGTYPE, PPATCH, PVEGTYPE_PATCH)
Definition: surf_patch.F90:139
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
real, parameter xundef
subroutine surf_patch_2d(KNPATCH, PVEGTYPE, PPATCH, PVEGTYPE_PATCH)
Definition: surf_patch.F90:36
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15