SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
subscale_z0eff.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 INTERFACE subscale_z0eff
9  SUBROUTINE subscale_z0eff_1d_nveg(PAOSIP,PAOSIM,PAOSJP,PAOSJM, &
10  pho2ip,pho2im,pho2jp,pho2jm,pz0veg, &
11  pz0effip,pz0effim,pz0effjp,pz0effjm, &
12  pz0rel,omask )
13 !
14 REAL, DIMENSION(:), INTENT(IN) :: paosip ! A/S for increasing x
15 REAL, DIMENSION(:), INTENT(IN) :: paosim ! A/S for decreasing x
16 REAL, DIMENSION(:), INTENT(IN) :: paosjp ! A/S for increasing y
17 REAL, DIMENSION(:), INTENT(IN) :: paosjm ! A/S for decreasing y
18 REAL, DIMENSION(:), INTENT(IN) :: pho2ip ! h/2 for increasing x
19 REAL, DIMENSION(:), INTENT(IN) :: pho2im ! h/2 for decreasing x
20 REAL, DIMENSION(:), INTENT(IN) :: pho2jp ! h/2 for increasing y
21 REAL, DIMENSION(:), INTENT(IN) :: pho2jm ! h/2 for decreasing y
22 REAL, INTENT(IN) :: pz0veg ! vegetation roughness length
23 !
24 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effip! roughness length for increasing x
25 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effim! roughness length for decreasing x
26 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effjp! roughness length for increasing y
27 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effjm! roughness length for decreasing y
28 !
29 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: pz0rel ! roughness length
30 ! ! of SSO only
31 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations
32  ! are done
33 !
34 END SUBROUTINE subscale_z0eff_1d_nveg
35 !
36  SUBROUTINE subscale_z0eff_1d_bis(PAOSIP,PAOSIM,PAOSJP,PAOSJM, &
37  pho2ip,pho2im,pho2jp,pho2jm,pz0veg, &
38  pz0effip,pz0effim,pz0effjp,pz0effjm, &
39  pz0rel,omask )
40 !
41 REAL, DIMENSION(:), INTENT(IN) :: paosip ! A/S for increasing x
42 REAL, DIMENSION(:), INTENT(IN) :: paosim ! A/S for decreasing x
43 REAL, DIMENSION(:), INTENT(IN) :: paosjp ! A/S for increasing y
44 REAL, DIMENSION(:), INTENT(IN) :: paosjm ! A/S for decreasing y
45 REAL, DIMENSION(:), INTENT(IN) :: pho2ip ! h/2 for increasing x
46 REAL, DIMENSION(:), INTENT(IN) :: pho2im ! h/2 for decreasing x
47 REAL, DIMENSION(:), INTENT(IN) :: pho2jp ! h/2 for increasing y
48 REAL, DIMENSION(:), INTENT(IN) :: pho2jm ! h/2 for decreasing y
49 REAL, DIMENSION(:), INTENT(IN) :: pz0veg ! vegetation roughness length
50 !
51 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effip! roughness length for increasing x
52 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effim! roughness length for decreasing x
53 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effjp! roughness length for increasing y
54 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effjm! roughness length for decreasing y
55 !
56 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: pz0rel ! roughness length
57 ! ! of SSO only
58 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations
59  ! are done
60 !
61 END SUBROUTINE subscale_z0eff_1d_bis
62 
63 SUBROUTINE subscale_z0eff_1d_patch(PAOSIP,PAOSIM,PAOSJP,PAOSJM, &
64  pho2ip,pho2im,pho2jp,pho2jm,pz0veg, &
65  pz0effip,pz0effim,pz0effjp,pz0effjm, &
66  pz0rel,omask )
67 !
68 REAL, DIMENSION(:), INTENT(IN) :: paosip ! A/S for increasing x
69 REAL, DIMENSION(:), INTENT(IN) :: paosim ! A/S for decreasing x
70 REAL, DIMENSION(:), INTENT(IN) :: paosjp ! A/S for increasing y
71 REAL, DIMENSION(:), INTENT(IN) :: paosjm ! A/S for decreasing y
72 REAL, DIMENSION(:), INTENT(IN) :: pho2ip ! h/2 for increasing x
73 REAL, DIMENSION(:), INTENT(IN) :: pho2im ! h/2 for decreasing x
74 REAL, DIMENSION(:), INTENT(IN) :: pho2jp ! h/2 for increasing y
75 REAL, DIMENSION(:), INTENT(IN) :: pho2jm ! h/2 for decreasing y
76 REAL, DIMENSION(:,:), INTENT(IN) :: pz0veg ! vegetation roughness length
77 !
78 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0effip! roughness length for increasing x
79 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0effim! roughness length for decreasing x
80 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0effjp! roughness length for increasing y
81 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0effjm! roughness length for decreasing y
82 !
83 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: pz0rel ! roughness length
84 ! ! of SSO only
85 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations
86  ! are done
87 !
88 END SUBROUTINE subscale_z0eff_1d_patch
89 
90 END INTERFACE
91 !
92 END MODULE modi_subscale_z0eff
93 ! ######################################################################
94  SUBROUTINE subscale_z0eff_1d_nveg(PAOSIP,PAOSIM,PAOSJP,PAOSJM, &
95  pho2ip,pho2im,pho2jp,pho2jm,pz0veg, &
96  pz0effip,pz0effim,pz0effjp,pz0effjm, &
97  pz0rel,omask )
98 ! ######################################################################
99 !
100 !!*SUBSCALE_Z0EFF computes an effective roughness lenght deduced
101 !! from the subgrid-scale orography.
102 !!
103 !!
104 !! METHOD
105 !! ------
106 !! See M.Georgelin and al. July 1994, Monthly Weather Review.
107 !!
108 !! EXTERNAL
109 !! --------
110 !!
111 !! IMPLICIT ARGUMENTS
112 !! ------------------
113 !!
114 !!
115 !! REFERENCE
116 !! ---------
117 !!
118 !! AUTHOR
119 !! ------
120 !!
121 !! M. Georgelin Laboratoire d'Aerologie
122 !!
123 !! MODIFICATION
124 !! ------------
125 !!
126 !! Original 18/12/95
127 !! 22/12/97 (V Masson) call with dummy arguments
128 !!
129 !----------------------------------------------------------------------------
130 !
131 !* 0. DECLARATION
132 ! -----------
133 !
134 USE modd_surf_par, ONLY : xundef
135 !
136 USE modi_subscale_z0eff_1d
137 USE modi_z0rel_1d
138 !
139 USE yomhook ,ONLY : lhook, dr_hook
140 USE parkind1 ,ONLY : jprb
141 !
142 IMPLICIT NONE
143 !
144 !* 0.1 Declaration of dummy arguments
145 ! ------------------------------
146 !
147 REAL, DIMENSION(:), INTENT(IN) :: paosip ! A/S for increasing x
148 REAL, DIMENSION(:), INTENT(IN) :: paosim ! A/S for decreasing x
149 REAL, DIMENSION(:), INTENT(IN) :: paosjp ! A/S for increasing y
150 REAL, DIMENSION(:), INTENT(IN) :: paosjm ! A/S for decreasing y
151 REAL, DIMENSION(:), INTENT(IN) :: pho2ip ! h/2 for increasing x
152 REAL, DIMENSION(:), INTENT(IN) :: pho2im ! h/2 for decreasing x
153 REAL, DIMENSION(:), INTENT(IN) :: pho2jp ! h/2 for increasing y
154 REAL, DIMENSION(:), INTENT(IN) :: pho2jm ! h/2 for decreasing y
155 REAL, INTENT(IN) :: pz0veg ! vegetation roughness length
156 !
157 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effip! roughness length for increasing x
158 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effim! roughness length for decreasing x
159 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effjp! roughness length for increasing y
160 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effjm! roughness length for decreasing y
161 !
162 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: pz0rel ! roughness length
163 ! ! of SSO only
164 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations
165  ! are done
166 !
167 REAL, DIMENSION(SIZE(PZ0EFFIM)) :: zz0veg
168 LOGICAL, DIMENSION(SIZE(PZ0EFFIM)) :: gmask
169 REAL(KIND=JPRB) :: zhook_handle
170 !
171 !-------------------------------------------------------------------------------
172 IF (lhook) CALL dr_hook('MODI_SUBSCALE_Z0EFF:SUBSCALE_Z0EFF_1D_NVEG',0,zhook_handle)
173 !
174 IF (present(omask)) THEN
175  gmask=omask
176 ELSE
177  gmask=(paosip/=xundef) ! computations always performed where SSO data exist
178  pz0effip = xundef
179  pz0effim = xundef
180  pz0effjp = xundef
181  pz0effjm = xundef
182 END IF
183 !
184 zz0veg(:) = pz0veg
185 !
186  CALL subscale_z0eff_1d(paosip,paosim,paosjp,paosjm, &
187  pho2ip,pho2im,pho2jp,pho2jm,zz0veg, &
188  pz0effip,pz0effim,pz0effjp,pz0effjm, &
189  gmask )
190 !
191 IF (present(pz0rel)) CALL z0rel_1d(paosip,paosim,paosjp,paosjm, &
192  pho2ip,pho2im,pho2jp,pho2jm, &
193  pz0rel,gmask )
194 !
195 IF (lhook) CALL dr_hook('MODI_SUBSCALE_Z0EFF:SUBSCALE_Z0EFF_1D_NVEG',1,zhook_handle)
196 !
197 !-------------------------------------------------------------------------------
198 END SUBROUTINE subscale_z0eff_1d_nveg
199 !-------------------------------------------------------------------------------
200 !
201 ! ######################################################################
202  SUBROUTINE subscale_z0eff_1d_bis(PAOSIP,PAOSIM,PAOSJP,PAOSJM, &
203  pho2ip,pho2im,pho2jp,pho2jm,pz0veg, &
204  pz0effip,pz0effim,pz0effjp,pz0effjm, &
205  pz0rel,omask )
206 ! ######################################################################
207 !
208 !!*SUBSCALE_Z0EFF computes an effective roughness lenght deduced
209 !! from the subgrid-scale orography.
210 !!
211 !!
212 !! METHOD
213 !! ------
214 !! See M.Georgelin and al. July 1994, Monthly Weather Review.
215 !!
216 !! EXTERNAL
217 !! --------
218 !!
219 !! IMPLICIT ARGUMENTS
220 !! ------------------
221 !!
222 !!
223 !! REFERENCE
224 !! ---------
225 !!
226 !! AUTHOR
227 !! ------
228 !!
229 !! M. Georgelin Laboratoire d'Aerologie
230 !!
231 !! MODIFICATION
232 !! ------------
233 !!
234 !! Original 18/12/95
235 !! 22/12/97 (V Masson) call with dummy arguments
236 !!
237 !----------------------------------------------------------------------------
238 !
239 !* 0. DECLARATION
240 ! -----------
241 !
242 USE modd_surf_par, ONLY : xundef
243 !
244 USE modi_subscale_z0eff_1d
245 USE modi_z0rel_1d
246 !
247 USE yomhook ,ONLY : lhook, dr_hook
248 USE parkind1 ,ONLY : jprb
249 !
250 IMPLICIT NONE
251 !
252 !* 0.1 Declaration of dummy arguments
253 ! ------------------------------
254 !
255 REAL, DIMENSION(:), INTENT(IN) :: paosip ! A/S for increasing x
256 REAL, DIMENSION(:), INTENT(IN) :: paosim ! A/S for decreasing x
257 REAL, DIMENSION(:), INTENT(IN) :: paosjp ! A/S for increasing y
258 REAL, DIMENSION(:), INTENT(IN) :: paosjm ! A/S for decreasing y
259 REAL, DIMENSION(:), INTENT(IN) :: pho2ip ! h/2 for increasing x
260 REAL, DIMENSION(:), INTENT(IN) :: pho2im ! h/2 for decreasing x
261 REAL, DIMENSION(:), INTENT(IN) :: pho2jp ! h/2 for increasing y
262 REAL, DIMENSION(:), INTENT(IN) :: pho2jm ! h/2 for decreasing y
263 REAL, DIMENSION(:), INTENT(IN) :: pz0veg ! vegetation roughness length
264 !
265 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effip! roughness length for increasing x
266 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effim! roughness length for decreasing x
267 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effjp! roughness length for increasing y
268 REAL, DIMENSION(:), INTENT(INOUT) :: pz0effjm! roughness length for decreasing y
269 !
270 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: pz0rel ! roughness length
271 ! ! of SSO only
272 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations
273  ! are done
274 !
275 !* 0.2 Declaration of other local variables
276 ! ------------------------------------
277 !
278 LOGICAL, DIMENSION(SIZE(PZ0EFFIM)) :: gmask
279 !
280 INTEGER :: jj
281 REAL(KIND=JPRB) :: zhook_handle
282 !----------------------------------------------------------------------------
283 !
284 IF (lhook) CALL dr_hook('MODI_SUBSCALE_Z0EFF:SUBSCALE_Z0EFF_1D_BIS',0,zhook_handle)
285 !
286 IF (present(omask)) THEN
287  gmask=omask
288 ELSE
289  gmask=(paosip/=xundef) ! computations always performed where SSO data exist
290  pz0effip = xundef
291  pz0effim = xundef
292  pz0effjp = xundef
293  pz0effjm = xundef
294 END IF
295 !
296  CALL subscale_z0eff_1d(paosip,paosim,paosjp,paosjm, &
297  pho2ip,pho2im,pho2jp,pho2jm,pz0veg, &
298  pz0effip,pz0effim,pz0effjp,pz0effjm, &
299  gmask )
300 !
301 IF (present(pz0rel)) CALL z0rel_1d(paosip,paosim,paosjp,paosjm, &
302  pho2ip,pho2im,pho2jp,pho2jm, &
303  pz0rel,gmask )
304 !
305 IF (lhook) CALL dr_hook('MODI_SUBSCALE_Z0EFF:SUBSCALE_Z0EFF_1D_BIS',1,zhook_handle)
306 !-------------------------------------------------------------------------------
307 !
308 END SUBROUTINE subscale_z0eff_1d_bis
309 !
310 ! ######spl
311  SUBROUTINE subscale_z0eff_1d_patch(PAOSIP,PAOSIM,PAOSJP,PAOSJM, &
312  pho2ip,pho2im,pho2jp,pho2jm,pz0veg, &
313  pz0effip,pz0effim,pz0effjp,pz0effjm, &
314  pz0rel,omask )
315 ! ######################################################################
316 !
317 !!*SUBSCALE_Z0EFF computes an effective roughness lenght deduced
318 !! from the subgrid-scale orography.
319 !!
320 !!
321 !! METHOD
322 !! ------
323 !! See M.Georgelin and al. July 1994, Monthly Weather Review.
324 !!
325 !! EXTERNAL
326 !! --------
327 !!
328 !! IMPLICIT ARGUMENTS
329 !! ------------------
330 !!
331 !!
332 !! REFERENCE
333 !! ---------
334 !!
335 !! AUTHOR
336 !! ------
337 !!
338 !! M. Georgelin Laboratoire d'Aerologie
339 !!
340 !! MODIFICATION
341 !! ------------
342 !!
343 !! Original 18/12/95
344 !! 22/12/97 (V Masson) call with dummy arguments
345 !!
346 !----------------------------------------------------------------------------
347 !
348 !* 0. DECLARATION
349 ! -----------
350 !
351 USE modd_csts, ONLY : xkarman
352 USE modd_isba_par, ONLY : xcdz0eff
353 USE modd_surf_par, ONLY : xundef
354 !
355 USE modi_subscale_z0eff_1d
356 USE modi_z0rel_1d
357 !
358 USE yomhook ,ONLY : lhook, dr_hook
359 USE parkind1 ,ONLY : jprb
360 !
361 IMPLICIT NONE
362 !
363 !* 0.1 Declaration of dummy arguments
364 ! ------------------------------
365 !
366 REAL, DIMENSION(:), INTENT(IN) :: paosip ! A/S for increasing x
367 REAL, DIMENSION(:), INTENT(IN) :: paosim ! A/S for decreasing x
368 REAL, DIMENSION(:), INTENT(IN) :: paosjp ! A/S for increasing y
369 REAL, DIMENSION(:), INTENT(IN) :: paosjm ! A/S for decreasing y
370 REAL, DIMENSION(:), INTENT(IN) :: pho2ip ! h/2 for increasing x
371 REAL, DIMENSION(:), INTENT(IN) :: pho2im ! h/2 for decreasing x
372 REAL, DIMENSION(:), INTENT(IN) :: pho2jp ! h/2 for increasing y
373 REAL, DIMENSION(:), INTENT(IN) :: pho2jm ! h/2 for decreasing y
374 REAL, DIMENSION(:,:), INTENT(IN) :: pz0veg ! vegetation roughness length
375 !
376 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0effip! roughness length for increasing x
377 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0effim! roughness length for decreasing x
378 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0effjp! roughness length for increasing y
379 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0effjm! roughness length for decreasing y
380 !
381 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: pz0rel ! roughness length
382 ! ! of SSO only
383 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: omask ! mask where computations
384  ! are done
385 !
386 !* 0.2 Declaration of other local variables
387 ! ------------------------------------
388 !
389 LOGICAL, DIMENSION(SIZE(PZ0EFFIM,1)) :: gmask
390 !
391 INTEGER :: ipatch ! number of patches
392 INTEGER :: jpatch ! loop counter on number of patches
393 INTEGER :: jj ! loop counter on points
394 REAL(KIND=JPRB) :: zhook_handle
395 !----------------------------------------------------------------------------
396 !
397 IF (lhook) CALL dr_hook('MODI_SUBSCALE_Z0EFF:SUBSCALE_Z0EFF_1D_PATCH',0,zhook_handle)
398 pz0effip = xundef
399 pz0effim = xundef
400 pz0effjp = xundef
401 pz0effjm = xundef
402 !
403 ipatch = SIZE(pz0veg,2)
404 !----------------------------------------------------------------------------
405 DO jpatch=1,ipatch
406 !----------------------------------------------------------------------------
407 !
408  IF (present(omask)) THEN
409  gmask=omask
410  ELSE
411  gmask=pz0veg(:,jpatch) /= xundef ! computations always performed where defined
412  END IF
413 !
414  CALL subscale_z0eff_1d(paosip,paosim,paosjp,paosjm, &
415  pho2ip,pho2im,pho2jp,pho2jm,pz0veg(:,jpatch), &
416  pz0effip(:,jpatch),pz0effim(:,jpatch), &
417  pz0effjp(:,jpatch),pz0effjm(:,jpatch), &
418  gmask )
419 !
420 END DO
421 !
422 IF (present(omask)) THEN
423  gmask=omask
424 ELSE
425  gmask=(paosip/=xundef)
426 END IF
427 !
428 IF (present(pz0rel)) CALL z0rel_1d(paosip,paosim,paosjp,paosjm, &
429  pho2ip,pho2im,pho2jp,pho2jm, &
430  pz0rel,gmask )
431 !
432 IF (lhook) CALL dr_hook('MODI_SUBSCALE_Z0EFF:SUBSCALE_Z0EFF_1D_PATCH',1,zhook_handle)
433 !-------------------------------------------------------------------------------
434 !
435 END SUBROUTINE subscale_z0eff_1d_patch
subroutine subscale_z0eff_1d_bis(PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0VEG, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, PZ0REL, OMASK)
subroutine subscale_z0eff_1d_patch(PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0VEG, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, PZ0REL, OMASK)
subroutine z0rel_1d(PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0REL, OMASK)
Definition: z0rel_1d.F90:6
subroutine subscale_z0eff_1d_nveg(PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0VEG, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, PZ0REL, OMASK)
subroutine subscale_z0eff_1d(PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0VEG, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, OMASK)