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