SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
get_vegtype_2_patch_mask.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.
6  kluout, &! output listing logical unit
7  ksize_veg, &!I Size of a vegetation vector within a patch vector
8  ksize_patch, &!I Size of a patch within a nature vector
9  ksize_nat, &!I Size of nature vector
10  kmask_patch_nature, &!I Mask to transform from patch vector to nature vector
11  pvegtype_patch, &!I Fraction of a nature point #i with vegetation #j which is packed to patch #k
12  kmask, &!O Mask from vegtype vector to patch vector
13  kpatch_max, &!I Number of possible patches
14  kpatch, &!I Index of patch in question
15  kvegtype &!I Index of vegtype in question
16  )
17 !
18 !
19 !! PURPOSE
20 !! -------
21 ! Create a patch-->vegtype mask
22 ! So that later, a patch can be packed into vegtype vectors
23 !!
24 !! AUTHOR
25 !! ------
26 !! Alf Grini <alf.grini@cnrm.meteo.fr>
27 !!
28 !! MODIFICATIONS
29 !! -------------
30 !! Original 01/2005
31 USE modd_data_cover_par, ONLY : nvegtype ! Number of possible vegtypes
32 !!------------------------------------------------------------------
33 !
34 !
35 USE yomhook ,ONLY : lhook, dr_hook
36 USE parkind1 ,ONLY : jprb
37 !
38 USE modi_abor1_sfx
39 !
40 IMPLICIT NONE
41 !* 0.1 declarations of arguments
42 !
43 INTEGER, INTENT(IN) :: kluout !Output listing logical unit
44 INTEGER, INTENT(IN) :: ksize_veg !Size of vegetation vector in question
45 INTEGER, INTENT(IN) :: ksize_patch !Size of patch vector in question
46 INTEGER, INTENT(IN) :: ksize_nat !Size of nature vector
47 INTEGER, INTENT(IN),DIMENSION(KSIZE_PATCH) :: kmask_patch_nature !PATCH -->NATURE mask
48 INTEGER, INTENT(IN) :: kpatch_max !Number of possible patches
49 !
50 INTEGER, INTENT(IN) :: kpatch !Patch in question
51 INTEGER, INTENT(IN) :: kvegtype !Vegtype in quesition
52 
53 REAL, DIMENSION(KSIZE_NAT,NVEGTYPE,KPATCH_MAX), INTENT(IN) :: pvegtype_patch !Fraction of nature point in npatch with nveg vegetation
54 !
55 !OUTPUT
56 INTEGER, DIMENSION(KSIZE_VEG), INTENT(OUT) :: kmask !vegetation type to patch
57 
58 !
59 !LOCAL
60 !
61 INTEGER :: kk ! Counter for points in vegetation vector
62 INTEGER :: jj ! Counter for points in patch vector
63 INTEGER :: ii ! Point in nature vector corresponding to JJ
64 REAL(KIND=JPRB) :: zhook_handle
65 !
66 !-------------------------------------------------------------------------------
67 !
68 IF (lhook) CALL dr_hook('GET_VEGTYPE_2_PATCH_MASK',0,zhook_handle)
69 kmask(:) = 0
70 
71 kk=1 !First point of vegetation-vector
72 DO jj=1,ksize_patch !Number of points in the patch in question
73  ii=kmask_patch_nature(jj) !Nature-index corresponding to the point in question
74  IF(pvegtype_patch(ii,kvegtype,kpatch)>0.)THEN
75  kmask(kk)=jj
76  kk=kk+1
77  ENDIF
78 ENDDO !Loop on points in patch vector
79 
80 IF(kk-1.ne.ksize_veg) THEN
81  WRITE(kluout,*) "ERROR in routine GET_VEGTYPE_2_PATCH_MASK"
82  WRITE(kluout,*) "problem in number of vegetation types"
83  WRITE(kluout,*) "KK-1 =", kk-1
84  WRITE(kluout,*) "KSIZE_VEG=", ksize_veg
85  CALL abor1_sfx('GET_VEGTYPE_2_PATCH_MASK: WRONG NUMBER OF VEGETATION TYPES')
86 END IF
87 IF (lhook) CALL dr_hook('GET_VEGTYPE_2_PATCH_MASK',1,zhook_handle)
88 
89 END SUBROUTINE get_vegtype_2_patch_mask
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine get_vegtype_2_patch_mask(KLUOUT, KSIZE_VEG, KSIZE_PATCH, KSIZE_NAT, KMASK_PATCH_NATURE, PVEGTYPE_PATCH, KMASK, KPATCH_MAX, KPATCH, KVEGTYPE)