SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_vegn.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 init_veg_n(KPATCH, KI, OCANOPY, HROUGH, OAGRI_TO_GRASS, TPSNOW, &
7  hphoto, oimp_veg, oimp_z0, oimp_emis, &
8  plaimin, ph_tree, pvegtype_patch, plai, pz0, pveg, pemis, &
9  otr_ml, pfaparc, pfapirc, plai_effc, pmus, &
10  palbnir_soil, palbvis_soil, palbuv_soil, palbnir, palbvis, palbuv, &
11  osurf_diag_albedo, ppsn, ppsng, ppsnv, ppsnv_a, &
12  pdir_alb, psca_alb, pemis_out, ptsrad )
13 !#############################################################
14 !
15 !!**** *INIT_VEG_n* - routine to initialize ISBA
16 !!
17 !! PURPOSE
18 !! -------
19 !!
20 !!** METHOD
21 !! ------
22 !!
23 !! EXTERNAL
24 !! --------
25 !!
26 !!
27 !! IMPLICIT ARGUMENTS
28 !! ------------------
29 !!
30 !! REFERENCE
31 !! ---------
32 !!
33 !!
34 !! AUTHOR
35 !! ------
36 !! V. Masson *Meteo France*
37 !!
38 !! MODIFICATIONS
39 !!
40 !! B. Decharme 01/16 : Bug when vegetation veg, z0 and emis are imposed whith interactive vegetation
41 !!
42 !-------------------------------------------------------------------------------
43 !
44 !* 0. DECLARATIONS
45 ! ------------
46 !
48 USE modd_snow_par, ONLY : xemissn
49 USE modd_surf_par, ONLY : xundef, nundef
50 !
51 USE modi_set_rough
52 USE modi_init_snow_lw
56 !
57 USE yomhook ,ONLY : lhook, dr_hook
58 USE parkind1 ,ONLY : jprb
59 !
60 IMPLICIT NONE
61 !
62 !* 0.1 Declarations of arguments
63 ! -------------------------
64 !
65 INTEGER, INTENT(IN) :: kpatch
66 INTEGER, INTENT(IN) :: ki
67 LOGICAL, INTENT(IN) :: ocanopy
68  CHARACTER(LEN=4), INTENT(INOUT) :: hrough
69 LOGICAL, INTENT(IN) :: oagri_to_grass
70 TYPE(surf_snow), INTENT(INOUT) :: tpsnow ! snow characteristics
71 !
72  CHARACTER(LEN=3), INTENT(IN) :: hphoto
73 !
74 LOGICAL, INTENT(IN) :: oimp_veg
75 LOGICAL, INTENT(IN) :: oimp_z0
76 LOGICAL, INTENT(IN) :: oimp_emis
77 !
78 REAL, DIMENSION(:,:), INTENT(IN) :: plaimin
79 REAL, DIMENSION(:,:), INTENT(IN) :: ph_tree
80 REAL, DIMENSION(:,:,:), INTENT(IN) :: pvegtype_patch
81 REAL, DIMENSION(:,:), INTENT(INOUT) :: plai
82 REAL, DIMENSION(:,:), INTENT(INOUT) :: pz0
83 REAL, DIMENSION(:,:), INTENT(INOUT) :: pveg
84 REAL, DIMENSION(:,:), INTENT(INOUT) :: pemis
85 !
86 LOGICAL, INTENT(IN) :: otr_ml
87 REAL, DIMENSION(:,:), POINTER :: pfaparc
88 REAL, DIMENSION(:,:), POINTER :: pfapirc
89 REAL, DIMENSION(:,:), POINTER :: plai_effc
90 REAL, DIMENSION(:,:), POINTER :: pmus
91 !
92 REAL, DIMENSION(:,:), POINTER :: palbnir_soil
93 REAL, DIMENSION(:,:), POINTER :: palbvis_soil
94 REAL, DIMENSION(:,:), POINTER :: palbuv_soil
95 REAL, DIMENSION(:,:), POINTER :: palbnir
96 REAL, DIMENSION(:,:), POINTER :: palbvis
97 REAL, DIMENSION(:,:), POINTER :: palbuv
98 !
99 LOGICAL, INTENT(OUT) :: osurf_diag_albedo
100 !
101 REAL, DIMENSION(:,:), POINTER :: ppsn
102 REAL, DIMENSION(:,:), POINTER :: ppsng
103 REAL, DIMENSION(:,:), POINTER :: ppsnv
104 REAL, DIMENSION(:,:), POINTER :: ppsnv_a
105 !
106 REAL, DIMENSION(:,:), INTENT(OUT) :: pdir_alb
107 REAL, DIMENSION(:,:), INTENT(OUT) :: psca_alb
108 REAL, DIMENSION(:), INTENT(OUT) :: pemis_out
109 REAL, DIMENSION(:), INTENT(OUT) :: ptsrad
110 !
111 !* 0.2 Declarations of local variables
112 ! -------------------------------
113 !
114 INTEGER :: jpatch ! loop counter on tiles
115 INTEGER :: jilu ! loop increment
116 !
117 REAL(KIND=JPRB) :: zhook_handle
118 !
119 !-------------------------------------------------------------------------------
120 !
121 ! Initialisation for IO
122 !
123 IF (lhook) CALL dr_hook('INIT_VEG_n',0,zhook_handle)
124 !
125 !-------------------------------------------------------------------------------
126 !
127 !* 1. Roughness length option
128 ! -----------------------
129 !
130  CALL set_rough(ocanopy,hrough)
131 !
132 !-------------------------------------------------------------------------------
133 !
134 !* 2. Radiative fields and snow/flood fracion initialization:
135 ! -------------------------------------------------------
136 !
137 !* snow long-wave properties (not initialized in read_gr_snow)
138 !
139  CALL init_snow_lw(xemissn,tpsnow)
140 !
141 !-------------------------------------------------------------------------------
142 !
143 !* z0 and vegetation fraction estimated from LAI if not imposed
144 IF (hphoto=='LAI' .OR. hphoto=='LST' .OR. hphoto=='NIT' .OR. hphoto=='NCB') THEN
145  DO jpatch=1,kpatch
146  DO jilu=1,ki
147  IF(plai(jilu,jpatch)/=xundef) THEN
148  plai(jilu,jpatch) = max(plaimin(jilu,jpatch),plai(jilu,jpatch))
149  END IF
150  IF(.NOT.oimp_z0.AND.plai(jilu,jpatch)/=xundef) THEN
151  pz0(jilu,jpatch) = z0v_from_lai(plai(jilu,jpatch),ph_tree(jilu,jpatch),pvegtype_patch(jilu,:,jpatch),oagri_to_grass)
152  END IF
153  IF(.NOT.oimp_veg.AND.plai(jilu,jpatch)/=xundef) THEN
154  pveg(jilu,jpatch) = veg_from_lai(plai(jilu,jpatch),pvegtype_patch(jilu,:,jpatch),oagri_to_grass)
155  END IF
156  IF(.NOT.oimp_emis.AND.plai(jilu,jpatch)/=xundef) THEN
157  pemis(jilu,jpatch) = emis_from_veg(pveg(jilu,jpatch),pvegtype_patch(jilu,:,jpatch))
158  END IF
159  END DO
160  END DO
161 END IF
162 !
163 !-------------------------------------------------------------------------------
164 !
165 IF (otr_ml) THEN
166  ALLOCATE(pfaparc(ki, kpatch))
167  ALLOCATE(pfapirc(ki, kpatch))
168  ALLOCATE(plai_effc(ki, kpatch))
169  ALLOCATE(pmus(ki, kpatch))
170  pfaparc(:,:) = 0.
171  pfapirc(:,:) = 0.
172  plai_effc(:,:) = 0.
173  pmus(:,:) = 0.
174 ELSE
175  ALLOCATE(pfaparc(0,0))
176  ALLOCATE(pfapirc(0,0))
177  ALLOCATE(plai_effc(0,0))
178  ALLOCATE(pmus(0,0))
179 ENDIF
180 !
181 !-------------------------------------------------------------------------------
182 !
183 !* albedo per tile and averaged albedo, emissivity and radiative temperature
184 !
185 ALLOCATE(palbnir_soil(ki,kpatch))
186 ALLOCATE(palbvis_soil(ki,kpatch))
187 ALLOCATE(palbuv_soil(ki,kpatch))
188 ALLOCATE(palbnir(ki,kpatch))
189 ALLOCATE(palbvis(ki,kpatch))
190 ALLOCATE(palbuv(ki,kpatch))
191 palbnir_soil(:,:) = xundef
192 palbvis_soil(:,:) = xundef
193 palbuv_soil(:,:) = xundef
194 palbnir(:,:) = xundef
195 palbvis(:,:) = xundef
196 palbuv(:,:) = xundef
197 !
198 osurf_diag_albedo = .true.
199 !
200 !* Initialization of total albedo, emissivity and snow/flood fractions
201 !
202 ALLOCATE(ppsn(ki,kpatch))
203 ALLOCATE(ppsng(ki,kpatch))
204 ALLOCATE(ppsnv(ki,kpatch))
205 ppsn = 0.0
206 ppsng = 0.0
207 ppsnv = 0.0
208 !
209 IF(tpsnow%SCHEME=='EBA')THEN
210  ALLOCATE(ppsnv_a(ki,kpatch))
211  ppsnv_a = 0.0
212 ELSE
213  ALLOCATE(ppsnv_a(0,0))
214 ENDIF
215 !
216 pdir_alb = xundef
217 psca_alb = xundef
218 pemis_out= xundef
219 ptsrad = xundef
220 !
221 IF (lhook) CALL dr_hook('INIT_VEG_n',1,zhook_handle)
222 !
223 END SUBROUTINE init_veg_n
subroutine init_veg_n(KPATCH, KI, OCANOPY, HROUGH, OAGRI_TO_GRASS, TPSNOW, HPHOTO, OIMP_VEG, OIMP_Z0, OIMP_EMIS, PLAIMIN, PH_TREE, PVEGTYPE_PATCH, PLAI, PZ0, PVEG, PEMIS, OTR_ML, PFAPARC, PFAPIRC, PLAI_EFFC, PMUS, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL, PALBNIR, PALBVIS, PALBUV, OSURF_DIAG_ALBEDO, PPSN, PPSNG, PPSNV, PPSNV_A, PDIR_ALB, PSCA_ALB, PEMIS_OUT, PTSRAD)
Definition: init_vegn.F90:6
subroutine set_rough(OCANOPY, HROUGH)
Definition: set_rough.F90:6
subroutine init_snow_lw(PEMISSN, TPSNOW)
Definition: init_snow_lw.F90:6