SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
vegetation_update_garden.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 vegetation_update_garden (DTCO, DTI, IG, I, T, TOP, DTGR, TGRO, GDM, &
7  tptime,ptstep,klu)
8 ! ##########################################################################
9 !
10 !!**** *GARDEN*
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 !
16 !!** METHOD
17 ! ------
18 !
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !!
24 !! IMPLICIT ARGUMENTS
25 !! ------------------
26 !!
27 !!
28 !! REFERENCE
29 !! ---------
30 !!
31 !!
32 !! AUTHOR
33 !! ------
34 !!
35 !! A. Lemonsu * Meteo-France *
36 !!
37 !! MODIFICATIONS
38 !! -------------
39 !! Original 05/2009
40 !! P. Samuelsson 10/2014 Introduced MEB dummy variables in call to VEGETATION_UPDATE
41 !-------------------------------------------------------------------------------
42 !
43 !* 0. DECLARATIONS
44 ! ------------
45 !
46 !
48 USE modd_data_isba_n, ONLY : data_isba_t
49 USE modd_isba_grid_n, ONLY : isba_grid_t
50 USE modd_isba_n, ONLY : isba_t
51 USE modd_teb_n, ONLY : teb_t
56 !
58 
59 
60 
61 !
62 USE modi_vegetation_update
63 !
64 !
65 USE yomhook ,ONLY : lhook, dr_hook
66 USE parkind1 ,ONLY : jprb
67 !
68 IMPLICIT NONE
69 !
70 !* 0.1 Declarations of arguments
71 !
72 !
73 !
74 TYPE(data_cover_t), INTENT(INOUT) :: dtco
75 TYPE(data_isba_t), INTENT(INOUT) :: dti
76 TYPE(isba_grid_t), INTENT(INOUT) :: ig
77 TYPE(isba_t), INTENT(INOUT) :: i
78 TYPE(teb_t), INTENT(INOUT) :: t
79 TYPE(teb_options_t), INTENT(INOUT) :: top
80 TYPE(data_teb_greenroof_t), INTENT(INOUT) :: dtgr
81 TYPE(teb_greenroof_options_t), INTENT(INOUT) :: tgro
82 TYPE(teb_garden_model_t), INTENT(INOUT) :: gdm
83 !
84 TYPE(date_time) , INTENT(IN) :: tptime ! current date and time from teb
85 REAL , INTENT(IN) :: ptstep ! time step
86 INTEGER, INTENT(IN) :: klu ! number of points
87 !
88 !
89 !* 0.2 Declarations of local variables
90 !
91 REAL, DIMENSION(KLU,1) :: zz0effip
92 REAL, DIMENSION(KLU,1) :: zz0effim
93 REAL, DIMENSION(KLU,1) :: zz0effjp
94 REAL, DIMENSION(KLU,1) :: zz0effjm
95 REAL, DIMENSION(KLU) :: zaosip
96 REAL, DIMENSION(KLU) :: zaosim
97 REAL, DIMENSION(KLU) :: zaosjp
98 REAL, DIMENSION(KLU) :: zaosjm
99 REAL, DIMENSION(KLU) :: zho2ip
100 REAL, DIMENSION(KLU) :: zho2im
101 REAL, DIMENSION(KLU) :: zho2jp
102 REAL, DIMENSION(KLU) :: zho2jm
103 REAL, DIMENSION(KLU,1) :: zlai
104 REAL, DIMENSION(KLU,1) :: zveg
105 REAL, DIMENSION(KLU,1) :: zz0
106 REAL, DIMENSION(KLU,1) :: zalbnir
107 REAL, DIMENSION(KLU,1) :: zalbvis
108 REAL, DIMENSION(KLU,1) :: zalbuv
109 REAL, DIMENSION(KLU,1) :: zemis
110 REAL, DIMENSION(KLU,1) :: zrsmin
111 REAL, DIMENSION(KLU,1) :: zgamma
112 REAL, DIMENSION(KLU,1) :: zwrmax_cf
113 REAL, DIMENSION(KLU,1) :: zrgl
114 REAL, DIMENSION(KLU,1) :: zcv
115 REAL, DIMENSION(KLU,1) :: zgmes
116 REAL, DIMENSION(KLU,1) :: zbslai
117 REAL, DIMENSION(KLU,1) :: zlaimin
118 REAL, DIMENSION(KLU,1) :: zsefold
119 REAL, DIMENSION(KLU,1) :: zgc
120 REAL, DIMENSION(KLU,1) :: zdmax
121 REAL, DIMENSION(KLU,1) :: zf2i
122 LOGICAL, DIMENSION(KLU,1) :: gstress
123 REAL, DIMENSION(KLU,1) :: zalbnir_veg
124 REAL, DIMENSION(KLU,1) :: zalbvis_veg
125 REAL, DIMENSION(KLU,1) :: zalbuv_veg
126 REAL, DIMENSION(KLU,1) :: zalbnir_soil
127 REAL, DIMENSION(KLU,1) :: zalbvis_soil
128 REAL, DIMENSION(KLU,1) :: zalbuv_soil
129 REAL, DIMENSION(KLU,1) :: zce_nitro
130 REAL, DIMENSION(KLU,1) :: zcf_nitro
131 REAL, DIMENSION(KLU,1) :: zcna_nitro
132 !
133 ! MEB stuff
134 REAL, DIMENSION(KLU,1) :: zgndlitter
135 REAL, DIMENSION(KLU,1) :: zrglgv
136 REAL, DIMENSION(KLU,1) :: zgammagv
137 REAL, DIMENSION(KLU,1) :: zrsmingv
138 REAL, DIMENSION(KLU,1) :: zwrmax_cfgv
139 REAL, DIMENSION(KLU,1) :: zh_veg
140 REAL, DIMENSION(KLU,1) :: zlaigv
141 REAL, DIMENSION(KLU,1) :: zz0litter
142 !
143 TYPE (date_time), DIMENSION(KLU,1) :: tzseed
144 TYPE (date_time), DIMENSION(KLU,1) :: tzreap
145 REAL, DIMENSION(KLU,1) :: zwatsup
146 REAL, DIMENSION(KLU,1) :: zirrig
147 LOGICAL :: gupdated ! T if VEGETATION_UPDATE has reset fields
148 !
149 REAL(KIND=JPRB) :: zhook_handle
150 !
151 !-------------------------------------------------------------------------------
152 !
153 !* 1. various initialisations
154 ! -----------------------
155 !
156 IF (lhook) CALL dr_hook('VEGETATION_UPDATE_GARDEN',0,zhook_handle)
157 !
158 !* orographic roughness not used
159 !
160 zaosip = 0.
161 zaosim = 0.
162 zaosjp = 0.
163 zaosjm = 0.
164 zho2ip = 0.
165 zho2im = 0.
166 zho2jp = 0.
167 zho2jm = 0.
168 !
169 !* vegetation parameters to update
170 !
171 zveg(:,1) = gdm%TGDPE%CUR%XVEG
172 zz0(:,1) = gdm%TGDPE%CUR%XZ0
173 zalbnir(:,1) = gdm%TGDPE%CUR%XALBNIR
174 zalbvis(:,1) = gdm%TGDPE%CUR%XALBVIS
175 zalbuv(:,1) = gdm%TGDPE%CUR%XALBUV
176 zemis(:,1) = gdm%TGDPE%CUR%XEMIS
177 zrsmin(:,1) = gdm%TGDP%XRSMIN
178 zgamma(:,1) = gdm%TGDP%XGAMMA
179 zwrmax_cf(:,1) = gdm%TGDP%XWRMAX_CF
180 zrgl(:,1) = gdm%TGDP%XRGL
181 zcv(:,1) = gdm%TGDP%XCV
182 zgmes(:,1) = gdm%TGDP%XGMES
183 zbslai(:,1) = gdm%TGDP%XBSLAI
184 zlaimin(:,1) = gdm%TGDP%XLAIMIN
185 zsefold(:,1) = gdm%TGDP%XSEFOLD
186 zgc(:,1) = gdm%TGDP%XGC
187 zdmax(:,1) = gdm%TGDP%XDMAX
188 zf2i(:,1) = gdm%TGDP%XF2I
189 gstress(:,1) = gdm%TGDP%LSTRESS
190 zalbnir_veg(:,1) = gdm%TGDP%XALBNIR_VEG
191 zalbvis_veg(:,1) = gdm%TGDP%XALBVIS_VEG
192 zalbuv_veg(:,1) = gdm%TGDP%XALBUV_VEG
193 zalbnir_soil(:,1) = gdm%TGDP%XALBNIR_SOIL
194 zalbvis_soil(:,1) = gdm%TGDP%XALBVIS_SOIL
195 zalbuv_soil(:,1) = gdm%TGDP%XALBUV_SOIL
196 zce_nitro(:,1) = gdm%TGDP%XCE_NITRO
197 zcf_nitro(:,1) = gdm%TGDP%XCF_NITRO
198 zcna_nitro(:,1) = gdm%TGDP%XCNA_NITRO
199 ! --------------------------------------------------------------------------------------
200 ! Vegetation update (in case of non-interactive vegetation):
201 ! --------------------------------------------------------------------------------------
202 !
203 gupdated=.false.
204 IF (gdm%TVG%CPHOTO=='NON' .OR. gdm%TVG%CPHOTO=='AGS' .OR. gdm%TVG%CPHOTO=='AST') THEN
205  CALL vegetation_update(dtco, dti, gdm%DTGD, dtgr, ig, i, tgro, &
206  ptstep,tptime,top%XCOVER,top%LCOVER, &
207  gdm%TVG%CISBA,(.NOT. gdm%TGDO%LPAR_GARDEN), &
208  gdm%TVG%CPHOTO, .false., &
209  gdm%TVG%LTR_ML, 'GRD', &
210  zlai,zveg,zz0, &
211  zalbnir,zalbvis,zalbuv,zemis, &
212  zrsmin,zgamma,zwrmax_cf, &
213  zrgl,zcv, &
214  zgmes,zbslai,zlaimin,zsefold,zgc,zdmax, &
215  zf2i, gstress, &
216  zaosip,zaosim,zaosjp,zaosjm, &
217  zho2ip,zho2im,zho2jp,zho2jm, &
218  zz0effip,zz0effim,zz0effjp,zz0effjm, &
219  gdm%TVG%CALBEDO, zalbnir_veg, zalbvis_veg, zalbuv_veg, &
220  zalbnir_soil, zalbvis_soil, zalbuv_soil, &
221  zce_nitro, zcf_nitro, zcna_nitro, &
222  tzseed, tzreap, zwatsup, zirrig, &
223  zgndlitter,zrglgv,zgammagv, &
224  zrsmingv, zwrmax_cfgv, &
225  zh_veg, zlaigv, zz0litter, &
226  gupdated, oabsent=(t%CUR%XGARDEN==0.) )
227 END IF
228 !
229 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
230 gdm%TGDPE%CUR%XVEG = zveg(:,1)
231 gdm%TGDPE%CUR%XZ0 = zz0(:,1)
232 gdm%TGDPE%CUR%XALBNIR = zalbnir(:,1)
233 gdm%TGDPE%CUR%XALBVIS = zalbvis(:,1)
234 gdm%TGDPE%CUR%XALBUV = zalbuv(:,1)
235 gdm%TGDPE%CUR%XEMIS = zemis(:,1)
236 gdm%TGDP%XRSMIN = zrsmin(:,1)
237 gdm%TGDP%XGAMMA = zgamma(:,1)
238 gdm%TGDP%XWRMAX_CF = zwrmax_cf(:,1)
239 gdm%TGDP%XRGL = zrgl(:,1)
240 gdm%TGDP%XCV = zcv(:,1)
241 gdm%TGDP%XGMES = zgmes(:,1)
242 gdm%TGDP%XBSLAI = zbslai(:,1)
243 gdm%TGDP%XLAIMIN = zlaimin(:,1)
244 gdm%TGDP%XSEFOLD = zsefold(:,1)
245 gdm%TGDP%XGC = zgc(:,1)
246 gdm%TGDP%XDMAX = zdmax(:,1)
247 gdm%TGDP%XF2I = zf2i(:,1)
248 gdm%TGDP%LSTRESS = gstress(:,1)
249 gdm%TGDP%XALBNIR_VEG = zalbnir_veg(:,1)
250 gdm%TGDP%XALBVIS_VEG = zalbvis_veg(:,1)
251 gdm%TGDP%XALBUV_VEG = zalbuv_veg(:,1)
252 gdm%TGDP%XALBNIR_SOIL = zalbnir_soil(:,1)
253 gdm%TGDP%XALBVIS_SOIL = zalbvis_soil(:,1)
254 gdm%TGDP%XALBUV_SOIL = zalbuv_soil(:,1)
255 gdm%TGDP%XCE_NITRO = zce_nitro(:,1)
256 gdm%TGDP%XCF_NITRO = zcf_nitro(:,1)
257 gdm%TGDP%XCNA_NITRO = zcna_nitro(:,1)
258 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
259 !
260 IF (lhook) CALL dr_hook('VEGETATION_UPDATE_GARDEN',1,zhook_handle)
261 !
262 !-------------------------------------------------------------------------------
263 !
264 !
265 END SUBROUTINE vegetation_update_garden
subroutine vegetation_update(DTCO, DTI, DTGD, DTGR, IG, I, TGRO, PTSTEP, TTIME, PCOVER, OCOVER, HISBA, OECOCLIMAP, HPHOTO, OAGRIP, OTR_ML, HSFTYPE, PLAI, PVEG, PZ0, PALBNIR, PALBVIS, PALBUV, PEMIS, PRSMIN, PGAMMA, PWRMAX_CF, PRGL, PCV, PGMES, PBSLAI, PLAIMIN, PSEFOLD, PGC, PDMAX, PF2I, OSTRESS, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, HALBEDO, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL, PCE_NITRO, PCF_NITRO, PCNA_NITRO, TPSEED, TPREAP, PWATSUP, PIRRIG, PGNDLITTER, PRGLGV, PGAMMAGV, PRSMINGV, PWRMAX_CFGV, PH_VEG, PLAIGV, PZ0LITTER, ODUPDATED, OABSENT)
subroutine vegetation_update_garden(DTCO, DTI, IG, I, T, TOP, DTGR, TGRO, GDM, TPTIME, PTSTEP, KLU)