SURFEX v8.1
General documentation of Surfex
read_pgd_teb_greenroof_parn.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 read_pgd_teb_greenroof_par_n (DTV, IO, S, K, KDIM, HPROGRAM)
7 ! ################################################
8 !
9 !!**** *READ_PGD_TEB_GREENROOF_PAR_n* - reads ISBA physiographic fields
10 !!
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! V. Masson *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 01/2003
36 !! P. Le Moigne 12/2004 : add type of photosynthesis
37 !! C. de Munck 02/2012 : added parameterisation for sedum species under NVT_TROG
38 !-------------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 !
45 !
46 !
47 USE modd_data_isba_n, ONLY : data_isba_t
49 USE modd_isba_n, ONLY : isba_s_t, isba_k_t
50 !
51 USE modd_csts, ONLY : xday
52 USE modd_surf_par, ONLY : xundef
53 USE modd_data_cover_par, ONLY : nvegtype, nvt_gras, nvt_trog
54 !paramètres ci-dessus à initialiser pour les GR (sauf XPAR_OM_GR, XPAR_SAND_GR, XPAR_CLAY_GR qui sont lues)
55 USE modd_prep_teb_greenroof, ONLY : ngrid_level, xgrid_soil
56 !
61 !
62 USE yomhook ,ONLY : lhook, dr_hook
63 USE parkind1 ,ONLY : jprb
64 !
65 IMPLICIT NONE
66 !
67 !* 0.1 Declarations of arguments
68 ! -------------------------
69 !
70 TYPE(data_isba_t), INTENT(INOUT) :: DTV
71 TYPE(isba_options_t), INTENT(INOUT) :: IO
72 TYPE(isba_s_t), INTENT(INOUT) :: S
73 TYPE(isba_k_t), INTENT(INOUT) :: K
74 INTEGER, INTENT(IN) :: KDIM
75 !
76  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling
77 !
78 !* 0.2 Declarations of local variables
79 ! -------------------------------
80 !
81 INTEGER :: IRESP ! IRESP : return-code if a problem appears
82  CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read
83  CHARACTER(LEN=100) :: YCOMMENT ! Comment string
84 INTEGER :: JI ! loop index
85 INTEGER :: JTIME ! loop index
86 INTEGER :: JLAYER ! loop index
87 !
88 LOGICAL :: GAGRI_TO_GRASS
89 !
90 REAL(KIND=JPRB) :: ZHOOK_HANDLE
91 !
92 !-------------------------------------------------------------------------------
93 !
94 !* 1. Reading of PGD file
95 ! --------------------
96 !
97 IF (lhook) CALL dr_hook('READ_PGD_TEB_GREENROOF_PAR_N',0,zhook_handle)
98 !
99 gagri_to_grass=.false.
100 !
101 yrecfm='GR_NTIME'
102  CALL read_surf(hprogram,yrecfm,dtv%NTIME,iresp)
103 !
104 ! Read type of green roof
105 yrecfm='D_TYPE_GR'
106  CALL read_surf(hprogram,yrecfm,io%CTYP_COV,iresp)
107 !
108 dtv%LIMP_VEG=.false.
109 dtv%LIMP_Z0=.false.
110 dtv%LIMP_EMIS=.false.
111 !
112 ! Read green roof OM fraction
113 DO jlayer=1,io%NGROUND_LAYER
114  !WRITE(YRECFM,FMT='(A8,I1.1)') 'D_OM_GR0',JLAYER
115  WRITE(yrecfm,fmt='(A7,I2.2)') 'D_OM_GR',jlayer
116  CALL read_surf(hprogram,yrecfm,s%XSOC(:,jlayer),iresp,hcomment=ycomment)
117 END DO
118 !
119 ! Read green roof SAND fraction
120 DO jlayer=1,io%NGROUND_LAYER
121  !WRITE(YRECFM,FMT='(A10,I1.1)') 'D_SAND_GR0',JLAYER
122  WRITE(yrecfm,fmt='(A9,I2.2)') 'D_SAND_GR',jlayer
123  CALL read_surf(hprogram,yrecfm,k%XSAND(:,jlayer),iresp,hcomment=ycomment)
124 END DO
125 !
126 ! Read green roof CLAY fraction
127 DO jlayer=1,io%NGROUND_LAYER
128  !WRITE(YRECFM,FMT='(A10,I1.1)') 'D_CLAY_GR0',JLAYER
129  WRITE(yrecfm,fmt='(A9,I2.2)') 'D_CLAY_GR',jlayer
130  CALL read_surf(hprogram,yrecfm,k%XCLAY(:,jlayer),iresp,hcomment=ycomment)
131 END DO
132 !
133 ! Read green roof LAI
134 ALLOCATE(dtv%XPAR_LAI (kdim,dtv%NTIME,1))
135 DO jtime=1,dtv%NTIME
136  WRITE(yrecfm,fmt='(A8,I2.2)') 'D_LAI_GR',jtime
137  CALL read_surf(hprogram,yrecfm,dtv%XPAR_LAI(:,jtime,1),iresp,hcomment=ycomment)
138 END DO
139 !
140 !
141 !-------------------------------------------------------------------------------
142 !
143 !* 2. Definition of ISBA parameters
144 ! -----------------------------
145 !
146 ALLOCATE(dtv%XPAR_VEG (kdim,dtv%NTIME,1))
147 ALLOCATE(dtv%XPAR_RSMIN (kdim,1))
148 ALLOCATE(dtv%XPAR_GAMMA (kdim,1))
149 ALLOCATE(dtv%XPAR_WRMAX_CF (kdim,1))
150 ALLOCATE(dtv%XPAR_RGL (kdim,1))
151 ALLOCATE(dtv%XPAR_CV (kdim,1))
152 ALLOCATE(dtv%XPAR_DG (kdim,io%NGROUND_LAYER,1))
153 ALLOCATE(dtv%XPAR_ROOTFRAC (kdim,io%NGROUND_LAYER,1))
154 ALLOCATE(dtv%XPAR_DICE (kdim,1))
155 ALLOCATE(dtv%XPAR_Z0 (kdim,dtv%NTIME,1))
156 ALLOCATE(dtv%XPAR_Z0_O_Z0H (kdim,1))
157 ALLOCATE(dtv%XPAR_ALBNIR_VEG (kdim,1,1))
158 ALLOCATE(dtv%XPAR_ALBVIS_VEG (kdim,1,1))
159 ALLOCATE(dtv%XPAR_ALBUV_VEG (kdim,1,1))
160 ALLOCATE(dtv%XPAR_ALBNIR_SOIL(kdim,1,1))
161 ALLOCATE(dtv%XPAR_ALBVIS_SOIL(kdim,1,1))
162 ALLOCATE(dtv%XPAR_ALBUV_SOIL (kdim,1,1))
163 ALLOCATE(dtv%XPAR_EMIS (kdim,dtv%NTIME,1))
164 ALLOCATE(dtv%XPAR_VEGTYPE (kdim,nvegtype))
165 ALLOCATE(dtv%XPAR_GMES (kdim,1))
166 ALLOCATE(dtv%XPAR_RE25 (kdim,1))
167 ALLOCATE(dtv%XPAR_BSLAI (kdim,1))
168 ALLOCATE(dtv%XPAR_LAIMIN (kdim,1))
169 ALLOCATE(dtv%XPAR_SEFOLD (kdim,1))
170 ALLOCATE(dtv%XPAR_GC (kdim,1))
171 ALLOCATE(dtv%XPAR_DMAX (kdim,1))
172 ALLOCATE(dtv%XPAR_F2I (kdim,1))
173 ALLOCATE(dtv%LPAR_STRESS (kdim,1))
174 ALLOCATE(dtv%XPAR_H_TREE (kdim,1))
175 ALLOCATE(dtv%XPAR_CE_NITRO (kdim,1))
176 ALLOCATE(dtv%XPAR_CF_NITRO (kdim,1))
177 ALLOCATE(dtv%XPAR_CNA_NITRO (kdim,1))
178 !
179 dtv%XPAR_VEG (:,:,:) = xundef
180 dtv%XPAR_RSMIN (:,:) = xundef
181 dtv%XPAR_GAMMA (:,:) = xundef
182 dtv%XPAR_WRMAX_CF (:,:) = xundef
183 dtv%XPAR_RGL (:,:) = xundef
184 dtv%XPAR_CV (:,:) = xundef
185 dtv%XPAR_DG (:,:,:) = xundef
186 dtv%XPAR_DICE (:,:) = xundef
187 dtv%XPAR_ROOTFRAC (:,:,:) = xundef
188 dtv%XPAR_Z0 (:,:,:) = xundef
189 dtv%XPAR_Z0_O_Z0H (:,:) = xundef
190 dtv%XPAR_ALBNIR_VEG (:,:,:) = xundef
191 dtv%XPAR_ALBVIS_VEG (:,:,:) = xundef
192 dtv%XPAR_ALBUV_VEG (:,:,:) = xundef
193 dtv%XPAR_ALBNIR_SOIL (:,:,:) = xundef
194 dtv%XPAR_ALBVIS_SOIL (:,:,:) = xundef
195 dtv%XPAR_ALBUV_SOIL (:,:,:) = xundef
196 dtv%XPAR_EMIS (:,:,:) = xundef
197 dtv%XPAR_VEGTYPE (:,:) = xundef
198 dtv%XPAR_GMES (:,:) = xundef
199 dtv%XPAR_RE25 (:,:) = xundef
200 dtv%XPAR_BSLAI (:,:) = xundef
201 dtv%XPAR_LAIMIN (:,:) = xundef
202 dtv%XPAR_SEFOLD (:,:) = xundef
203 dtv%XPAR_GC (:,:) = xundef
204 dtv%XPAR_DMAX (:,:) = xundef
205 dtv%XPAR_F2I (:,:) = xundef
206 dtv%LPAR_STRESS (:,:) = .false.
207 dtv%XPAR_H_TREE (:,:) = xundef
208 dtv%XPAR_CE_NITRO (:,:) = xundef
209 dtv%XPAR_CF_NITRO (:,:) = xundef
210 dtv%XPAR_CNA_NITRO (:,:) = xundef
211 !
212 !---------------------------------------------------------------------------
213 ! Vegtypes adapted to greenroofs:
214 !--------------------------------
215 ! NPATCH = 1
216 ! 2D cases : all greenroofs have same vegetation (defined by CTYP_GR)
217 ! (CTYP_GR == 'GRASS') <=> NVT_GRAS (10)
218 ! ** OR **
219 ! (CTYP_GR == 'SEDUM') <=> NVT_TROG (11)
220 ! NB1: => no aggregation of vegetype parameters needed
221 ! NB2: Functions existing for gardens are used for initial greenroofs
222 ! This will need to be refined specifically for greenroofs
223 !
224 dtv%XPAR_VEGTYPE(:,:) = 0.
225 IF (io%CTYP_COV == 'GRASS') dtv%XPAR_VEGTYPE(:, nvt_gras) = 1.
226 IF (io%CTYP_COV == 'SEDUM') dtv%XPAR_VEGTYPE(:, nvt_trog) = 1.
227 !--------------------------------------------------------------------------
228 !
229 ! Critical normilized soil water content for stress parameterisation
230 dtv%XPAR_F2I(:,:) = 0.3
231 !
232 ! Ratio between roughness length for momentum and heat
233 dtv%XPAR_Z0_O_Z0H(:,:) = 10.
234 !
235 ! Defensive/offensive strategy (1/0)
236 dtv%LPAR_STRESS(:,:) = .false.
237 !
238 DO ji=1,kdim
239 !
240 ! Vegetation albedo: near-IR, visible, and UV albedo
241 ! * Will need to be adapted to greenroof GRASS and SEDUM species *
242 ! * vérifier si/où l'abedo ds l'UV est utilisé *
243  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_ALBNIR_VEG(ji,:,:)= 0.3
244  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_ALBNIR_VEG(ji,:,:)= 0.154 ! mesures ONERA/Doya (2011)
245 
246  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_ALBVIS_VEG(ji,:,:)= 0.10
247  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_ALBVIS_VEG(ji,:,:)= 0.154 ! mesures ONERA/Doya (2011)
248 
249  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_ALBUV_VEG(ji,:,:) = 0.0800
250  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_ALBUV_VEG(ji,:,:) = 0.1250
251 !
252 ! Min stomatal resistance
253  !IF(XPAR_VEGTYPE(JI,NVT_GRAS)>0. ) XPAR_RSMIN(JI)= 40 (dans isba & garden)
254  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_RSMIN(ji,:)= 120 ! for GRASS
255  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_RSMIN(ji,:)= 150. ! for SEDUM
256  !IF(XPAR_VEGTYPE(JI,NVT_TROG)>0. ) XPAR_RSMIN(JI)= 120.
257 !
258 ! Gamma parameter
259 ! (* Check if values needs to be refined for GRASS and SEDUM *)
260  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_GAMMA(ji,:)= 0.
261  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_GAMMA(ji,:)= 0.
262 !
263 ! Wrmax_cf
264 ! (* Check if needs to be refined for GRASS and SEDUM greenroofs *)
265  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_WRMAX_CF(ji,:)= 0.2
266  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_WRMAX_CF(ji,:)= 0.2
267 !
268 ! Rgl
269 ! (* Check if needs to be refined for GRASS and SEDUM greenroofs *)
270  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_RGL(ji,:)= 100.
271  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_RGL(ji,:)= 100.
272 !
273 ! Cv
274 ! (* Check if needs to be refined for GRASS and SEDUM greenroofs *)
275  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_CV(ji,:)= 2.e-5
276  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_CV(ji,:)= 2.e-5
277 !
278 !! Mesophyll conductance (m s-1)
279 ! (* Check if needs to be refined for GRASS and SEDUM greenroofs *)
280  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_GMES(ji,:)= 0.020
281  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_GMES(ji,:)= 0.020
282  !IF(XPAR_VEGTYPE(JI,NVT_TROG)>0. ) XPAR_GMES(JI)= 0.003
283 !
284 ! Ecosystem Respiration (kg/kg.m.s-1)
285 ! (* Check if needs to be refined for GRASS and SEDUM greenroofs *)
286  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_RE25(ji,:)= 3.0e-7
287  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog )>0.) dtv%XPAR_RE25(ji,:)= 3.0e-7
288 !
289 ! Cuticular conductance (m s-1)
290  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_GC(ji,:)= 0.00025
291  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_GC(ji,:)= 0.00025
292 !
293 ! Ratio d(biomass)/d(lai) (kg/m2)
294  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_BSLAI(ji,:)= 0.36
295  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_BSLAI(ji,:)= 0.06
296 !
297 ! Maximum air saturation deficit tolerate by vegetation (kg/kg)
298  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_DMAX(ji,:)= 0.1
299  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_DMAX(ji,:)= 0.1
300 !
301 ! e-folding time for senescence (days)
302  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_SEFOLD(ji,:)= 90.* xday
303  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_SEFOLD(ji,:)= 60.* xday
304 !
305 ! Minimum LAI (m2/m2)
306  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_LAIMIN (ji,:) = 0.3
307  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_LAIMIN (ji,:) = 0.3
308 !
309 ! Leaf aera ratio sensitivity to nitrogen concentration
310  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_CE_NITRO(ji,:)= 5.56
311  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_CE_NITRO(ji,:)= 3.79
312 !
313 ! Lethal minimum value of leaf area ratio
314  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_CF_NITRO(ji,:)= 6.73
315  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_CF_NITRO(ji,:)= 9.84
316 !
317 ! Nitrogen concentration of active biomass
318  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_CNA_NITRO(ji,:)= 1.9
319  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog )>0.) dtv%XPAR_CNA_NITRO(ji,:)= 1.3
320 !
321 ! Depth of greenroof ground layers
322  dtv%XPAR_DG(ji, 1,:) = xgrid_soil(ngrid_level - 5)
323  dtv%XPAR_DG(ji, 2,:) = xgrid_soil(ngrid_level - 4)
324  dtv%XPAR_DG(ji, 3,:) = xgrid_soil(ngrid_level - 3)
325  dtv%XPAR_DG(ji, 4,:) = xgrid_soil(ngrid_level - 2)
326  dtv%XPAR_DG(ji, 5,:) = xgrid_soil(ngrid_level - 1)
327  dtv%XPAR_DG(ji, 6,:) = xgrid_soil(ngrid_level - 0)
328 !
329 ! Root fractions
330  dtv%XPAR_ROOTFRAC(ji, 1,:) = 0.04
331  dtv%XPAR_ROOTFRAC(ji, 2,:) = 0.36
332  dtv%XPAR_ROOTFRAC(ji, 3,:) = 0.68
333  dtv%XPAR_ROOTFRAC(ji, 4,:) = 1.
334  dtv%XPAR_ROOTFRAC(ji, 5,:) = 1.
335  dtv%XPAR_ROOTFRAC(ji, 6,:) = 1.
336 !
337 ! Depth of the soil column for the calculation of the frozen soil fraction (m)
338  dtv%XPAR_DICE(ji,:) = dtv%XPAR_DG(ji,1,:)
339 !
340 DO jtime=1,dtv%NTIME
341 ! Leaf Area Index
342 
343 ! Fraction of vegetation on greenroof
344 !* Will need to be refined for greenroofs *)
345  !XPAR_VEG (JI,1,JTIME) = VEG_FROM_LAI (XPAR_LAI_GR(JI,JTIME), &
346  ! XPAR_VEGTYPE(JI,:),GAGRI_TO_GRASS)
347  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_VEG (ji,jtime,:) = 0.9
348  !IF(XPAR_VEGTYPE(JI,NVT_TROG)>0. ) XPAR_VEG (JI,JTIME) = 1.0
349  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_VEG (ji,jtime,:) = 0.95
350 
351 ! Roughness length for momentum
352 !* Will need to be refined for greenroofs *)
353  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_Z0 (ji,jtime,:) = 0.01
354  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_Z0 (ji,jtime,:) = 0.01
355  !
356 ! Emissivity
357 !* Will need to be refined for greenroofs *)
358  !XPAR_EMIS (JI,1,JTIME) = EMIS_FROM_VEG (XPAR_VEG (JI,1,JTIME),&
359  ! XPAR_VEGTYPE(JI,:))
360  IF(dtv%XPAR_VEGTYPE(ji,nvt_gras)>0. ) dtv%XPAR_EMIS (ji,jtime,:) = 0.95
361  IF(dtv%XPAR_VEGTYPE(ji,nvt_trog)>0. ) dtv%XPAR_EMIS (ji,jtime,:) = 0.83 ! Feng. et al. (2010)
362 
363 END DO
364 !
365 ENDDO
366 !
367 IF (lhook) CALL dr_hook('READ_PGD_TEB_GREENROOF_PAR_N',1,zhook_handle)
368 !
369 !-------------------------------------------------------------------------------
370 !
371 END SUBROUTINE read_pgd_teb_greenroof_par_n
subroutine read_pgd_teb_greenroof_par_n(DTV, IO, S, K, KDIM, HPRO
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
real, save xday
Definition: modd_csts.F90:45
logical lhook
Definition: yomhook.F90:15