SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
pgd_teb_veg.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 pgd_teb_veg (DTCO, UG, U, USS, GDM, GRM, TOP, TG, &
7  hprogram)
8 ! ##############################################################
9 !
10 !!**** *PGD_TEB_VEG* monitor for averaging and interpolations of physiographic fields
11 !! for natural covers of TEB
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !! METHOD
17 !! ------
18 !!
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !! AUTHOR
30 !! ------
31 !!
32 !! V. Masson Meteo-France
33 !!
34 !! MODIFICATION
35 !! ------------
36 !!
37 !! Original 03/2010
38 !!
39 !! J.Escobar 11/2013 Add USE MODI_PGD_TEB_GREENROOF
40 !! V. Masson 04/2014 Adds Irrigation
41 !! P. Samuelsson 02/2014 Introduced dummy variable in call to READ_NAM_PGD_ISBA for MEB
42 !!
43 !----------------------------------------------------------------------------
44 !
45 !* 0. DECLARATION
46 ! -----------
47 !
48 !
51 USE modd_surf_atm_n, ONLY : surf_atm_t
53 !
56 !
58 USE modd_teb_grid_n, ONLY : teb_grid_t
59 !
60 USE modd_pgd_grid, ONLY : nl
61 USE modd_data_cover_par, ONLY : nvegtype
62 !
63 USE modd_surf_par, ONLY : xundef, nundef
64 USE modd_isba_par, ONLY : noptimlayer, xoptimgrid
65 !
66 USE modi_get_luout
67 USE modi_read_nam_pgd_isba
68 USE modi_pgd_field
70 !
71 USE modi_pgd_teb_greenroof
72 USE modi_pgd_teb_garden_par
73 USE modi_pgd_teb_irrig
74 !
75 USE yomhook ,ONLY : lhook, dr_hook
76 USE parkind1 ,ONLY : jprb
77 !
78 USE modi_abor1_sfx
79 !
80 IMPLICIT NONE
81 !
82 !* 0.1 Declaration of arguments
83 ! ------------------------
84 !
85 !
86 TYPE(data_cover_t), INTENT(INOUT) :: dtco
87 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
88 TYPE(surf_atm_t), INTENT(INOUT) :: u
89 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
90 TYPE(teb_garden_model_t), INTENT(INOUT) :: gdm
91 TYPE(teb_greenroof_model_t), INTENT(INOUT) :: grm
92 TYPE(teb_options_t), INTENT(INOUT) :: top
93 TYPE(teb_grid_t), INTENT(INOUT) :: tg
94 !
95  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! Type of program
96 ! ! F if all parameters must be specified
97 !
98 !
99 !* 0.2 Declaration of local variables
100 ! ------------------------------
101 !
102 INTEGER :: iluout ! output listing logical unit
103 INTEGER :: jlayer ! loop counter
104 !
105 !* 0.3 Declaration of namelists
106 ! ------------------------
107 !
108 INTEGER :: ipatch ! number of patches
109 INTEGER :: iground_layer ! number of soil layers
110  CHARACTER(LEN=3) :: yisba ! ISBA option
111  CHARACTER(LEN=4) :: ypedotf ! Pedo-transfert function for DIF
112  CHARACTER(LEN=3) :: yphoto ! photosynthesis option
113 LOGICAL :: gtr_ml ! new radiative transfert
114 REAL :: zrm_patch ! threshold to remove little fractions of patches
115  CHARACTER(LEN=28) :: ysand ! file name for sand fraction
116  CHARACTER(LEN=28) :: yclay ! file name for clay fraction
117  CHARACTER(LEN=28) :: ycti ! file name for topographic index
118  CHARACTER(LEN=28) :: yrunoffb ! file name for runoffb parameter
119  CHARACTER(LEN=28) :: ywdrain ! file name for wdrain parameter
120  CHARACTER(LEN=6) :: ysandfiletype ! sand data file type
121  CHARACTER(LEN=6) :: yclayfiletype ! clay data file type
122  CHARACTER(LEN=6) :: yctifiletype ! topographic index data file type
123  CHARACTER(LEN=6) :: yrunoffbfiletype ! subgrid runoff data file type
124  CHARACTER(LEN=6) :: ywdrainfiletype ! subgrid drainage data file type
125 REAL :: xunif_sand ! uniform value of sand fraction
126 REAL :: xunif_clay ! uniform value of clay fraction
127 REAL :: xunif_runoffb ! uniform value of subgrid runoff coefficient
128 REAL :: xunif_wdrain ! uniform subgrid drainage parameter
129 LOGICAL :: limp_sand ! Imposed maps of Sand
130 LOGICAL :: limp_clay ! Imposed maps of Clay
131 LOGICAL :: limp_cti ! Imposed maps of topographic index statistics
132 REAL, DIMENSION(150) :: zsoilgrid ! Soil layer thickness for DIF
133 !
134 ! Not used in TEB garden
135 !
136  CHARACTER(LEN=28) :: ysoc_top ! file name for organic carbon
137  CHARACTER(LEN=28) :: ysoc_sub ! file name for organic carbon
138  CHARACTER(LEN=28) :: yperm ! file name for permafrost distribution
139  CHARACTER(LEN=28) :: ygw ! file name for groundwater map
140  CHARACTER(LEN=6) :: ysocfiletype ! organic carbon data file type
141  CHARACTER(LEN=6) :: ypermfiletype ! permafrost distribution data file type
142  CHARACTER(LEN=6) :: ygwfiletype ! groundwater distribution data file type
143 REAL :: xunif_soc_top ! uniform value of organic carbon top soil (kg/m2)
144 REAL :: xunif_soc_sub ! uniform value of organic carbon sub soil (kg/m2)
145 REAL :: xunif_perm ! uniform permafrost distribution
146 REAL :: xunif_gw ! uniform groundwater distribution
147 LOGICAL :: limp_soc ! Imposed maps of organic carbon
148 LOGICAL :: limp_perm ! Imposed maps of permafrost distribution
149 LOGICAL :: gmeb ! Multi-energy balance (MEB)
150 LOGICAL :: limp_gw ! Imposed maps of groundwater distribution
151  CHARACTER(LEN=28) :: yph ! file name for pH
152  CHARACTER(LEN=28) :: yfert ! file name for fertilisation rate
153  CHARACTER(LEN=6) :: yphfiletype ! pH data file type
154  CHARACTER(LEN=6) :: yfertfiletype ! fertilisation data file type
155 REAL :: xunif_ph ! uniform value of pH
156 REAL :: xunif_fert ! uniform value of fertilisation rate
157 !
158 REAL(KIND=JPRB) :: zhook_handle
159 !-------------------------------------------------------------------------------
160 !
161 IF (lhook) CALL dr_hook('PGD_TEB_VEG',0,zhook_handle)
162  CALL get_luout(hprogram,iluout)
163 !
164 !-------------------------------------------------------------------------------
165 !
166 !* 1. Reading of namelist NAM_ISBA for general options of vegetation
167 ! --------------------------------------------------------------
168 !
169 gdm%TGDO%NGROUND_LAYER = 0
170 gdm%TVG%CISBA = ' '
171 gdm%TVG%CPEDOTF = ' '
172 gdm%TVG%CPHOTO = ' '
173 !
174  CALL read_nam_pgd_isba(hprogram, ipatch, iground_layer, &
175  yisba, ypedotf, yphoto, gtr_ml, zrm_patch, &
176  yclay, yclayfiletype, xunif_clay, limp_clay, &
177  ysand, ysandfiletype, xunif_sand, limp_sand, &
178  ysoc_top, ysoc_sub, ysocfiletype, xunif_soc_top, &
179  xunif_soc_sub, limp_soc, ycti, yctifiletype, limp_cti, &
180  yperm, ypermfiletype, xunif_perm, limp_perm, gmeb, &
181  ygw, ygwfiletype, xunif_gw, limp_gw, &
182  yrunoffb, yrunoffbfiletype, xunif_runoffb, &
183  ywdrain, ywdrainfiletype , xunif_wdrain, zsoilgrid, &
184  yph, yphfiletype, xunif_ph, yfert, yfertfiletype, &
185  xunif_fert )
186 !
187 gdm%TGDO%NGROUND_LAYER = iground_layer
188 gdm%TVG%CISBA = yisba
189 gdm%TVG%CPEDOTF = ypedotf
190 gdm%TVG%CPHOTO = yphoto
191 gdm%TVG%LTR_ML = gtr_ml
192 !
193 !-------------------------------------------------------------------------------
194 !
195 !* 2. Coherence of options
196 ! --------------------
197 !
198  CALL test_nam_var_surf(iluout,'CISBA',gdm%TVG%CISBA,'2-L','3-L','DIF')
199  CALL test_nam_var_surf(iluout,'CPEDOTF',gdm%TVG%CPEDOTF,'CH78','CO84')
200  CALL test_nam_var_surf(iluout,'CPHOTO',gdm%TVG%CPHOTO,'NON','AGS','LAI','AST','LST','NIT','NCB')
201  !
202  IF (gdm%TVG%CPHOTO=='NCB') THEN
203  gdm%TVG%CPHOTO = 'NIT'
204  WRITE(iluout,*) '****************************************************************'
205  WRITE(iluout,*) '* FOR GARDENS, AGS OPTION HAS BEEN CHANGED FROM "NCB" TO "NIT" *'
206  WRITE(iluout,*) '****************************************************************'
207  END IF
208 !
209  SELECT CASE (gdm%TVG%CISBA)
210  CASE ('2-L')
211  gdm%TGDO%NGROUND_LAYER = 2
212  gdm%TVG%CPEDOTF ='CH78'
213  WRITE(iluout,*) '*****************************************'
214  WRITE(iluout,*) '* With option CISBA = ',gdm%TVG%CISBA,' *'
215  WRITE(iluout,*) '* the number of soil layers is set to 2 *'
216  WRITE(iluout,*) '* theta(psi) function = Brook and Corey *'
217  WRITE(iluout,*) '* Pedo transfert function = CH78 *'
218  WRITE(iluout,*) '*****************************************'
219  CASE ('3-L')
220  gdm%TGDO%NGROUND_LAYER = 3
221  gdm%TVG%CPEDOTF ='CH78'
222  WRITE(iluout,*) '*****************************************'
223  WRITE(iluout,*) '* With option CISBA = ',gdm%TVG%CISBA,' *'
224  WRITE(iluout,*) '* the number of soil layers is set to 3 *'
225  WRITE(iluout,*) '* theta(psi) function = Brook and Corey *'
226  WRITE(iluout,*) '* Pedo transfert function = CH78 *'
227  WRITE(iluout,*) '*****************************************'
228  CASE ('DIF')
229  IF(gdm%TGDO%NGROUND_LAYER==nundef)THEN
230  IF(top%LECOCLIMAP)THEN
231  gdm%TGDO%NGROUND_LAYER=noptimlayer
232  ELSE
233  WRITE(iluout,*) '****************************************'
234  WRITE(iluout,*) '* Number of ground layer not specified *'
235  WRITE(iluout,*) '****************************************'
236  CALL abor1_sfx('PGD_TEB_GARDEN: NGROUND_LAYER MUST BE DONE IN NAM_ISBA')
237  ENDIF
238  ENDIF
239 !
240  ALLOCATE(gdm%TGDO%XSOILGRID(gdm%TGDO%NGROUND_LAYER))
241  gdm%TGDO%XSOILGRID(:)=xundef
242  gdm%TGDO%XSOILGRID(:)=zsoilgrid(1:gdm%TGDO%NGROUND_LAYER)
243  IF(all(zsoilgrid(:)==xundef))THEN
244  IF(top%LECOCLIMAP) &
245  gdm%TGDO%XSOILGRID(1:gdm%TGDO%NGROUND_LAYER)=xoptimgrid(1:gdm%TGDO%NGROUND_LAYER)
246  ELSEIF(count(gdm%TGDO%XSOILGRID/=xundef)/=gdm%TGDO%NGROUND_LAYER)THEN
247  WRITE(iluout,*) '********************************************************'
248  WRITE(iluout,*) '* Soil grid reference values /= number of ground layer *'
249  WRITE(iluout,*) '********************************************************'
250  CALL abor1_sfx('PGD_TEB_GARDEN: XSOILGRID must be coherent with NGROUND_LAYER in NAM_ISBA')
251  ENDIF
252 !
253  WRITE(iluout,*) '*****************************************'
254  WRITE(iluout,*) '* Option CISBA = ',gdm%TVG%CISBA
255  WRITE(iluout,*) '* Pedo transfert function = ',gdm%TVG%CPEDOTF
256  WRITE(iluout,*) '* Number of soil layers = ',gdm%TGDO%NGROUND_LAYER
257  IF(top%LECOCLIMAP)THEN
258  WRITE(iluout,*) '* Soil layers grid (m) = ',gdm%TGDO%XSOILGRID(1:gdm%TGDO%NGROUND_LAYER)
259  ENDIF
260  WRITE(iluout,*) '*****************************************'
261 
262  END SELECT
263 !
264  SELECT CASE (gdm%TVG%CPHOTO)
265  CASE ('AGS','LAI','AST','LST')
266  gdm%TVG%NNBIOMASS = 1
267  CASE ('NIT')
268  gdm%TVG%NNBIOMASS = 3
269  END SELECT
270  WRITE(iluout,*) '*****************************************'
271  WRITE(iluout,*) '* With option CPHOTO = ',gdm%TVG%CPHOTO,' *'
272  WRITE(iluout,*) '* the number of biomass pools is set to ', gdm%TVG%NNBIOMASS
273  WRITE(iluout,*) '*****************************************'
274 !
275 !-------------------------------------------------------------------------------
276 !
277 !* 3. Sand fraction
278 ! -------------
279 !
280 ALLOCATE(gdm%TGDP%XSAND(tg%NDIM,gdm%TGDO%NGROUND_LAYER))
281 !
282 IF(limp_sand)THEN
283 !
284  CALL abor1_sfx('PGD_TEB_VEG: LIMP_SAND IS NOT CONSISTENT WITH TEB_GARDEN')
285 !
286 ELSE
287 !
288  CALL pgd_field(dtco, ug, u, uss, &
289  hprogram,'sand fraction','TWN',ysand,ysandfiletype,xunif_sand,gdm%TGDP%XSAND(:,1))
290 ENDIF
291 !
292 DO jlayer=1,gdm%TGDO%NGROUND_LAYER
293  gdm%TGDP%XSAND(:,jlayer) = gdm%TGDP%XSAND(:,1)
294 END DO
295 !-------------------------------------------------------------------------------
296 !
297 !* 4. Clay fraction
298 ! -------------
299 !
300 ALLOCATE(gdm%TGDP%XCLAY(tg%NDIM,gdm%TGDO%NGROUND_LAYER))
301 !
302 IF(limp_clay)THEN
303 !
304  CALL abor1_sfx('PGD_TEB_VEG: LIMP_SAND IS NOT CONSISTENT WITH TEB_GARDEN')
305 !
306 ELSE
307  CALL pgd_field(dtco, ug, u, uss, &
308  hprogram,'clay fraction','TWN',yclay,yclayfiletype,xunif_clay,gdm%TGDP%XCLAY(:,1))
309 ENDIF
310 !
311 DO jlayer=1,gdm%TGDO%NGROUND_LAYER
312  gdm%TGDP%XCLAY(:,jlayer) = gdm%TGDP%XCLAY(:,1)
313 END DO
314 !-------------------------------------------------------------------------------
315 !
316 !* 5. Subgrid runoff
317 ! --------------
318 !
319 ALLOCATE(gdm%TGDP%XRUNOFFB(tg%NDIM))
320  CALL pgd_field(dtco, ug, u, uss, &
321  hprogram,'subgrid runoff','TWN',yrunoffb,yrunoffbfiletype,xunif_runoffb,gdm%TGDP%XRUNOFFB(:))
322 !
323 !-------------------------------------------------------------------------------
324 !
325 !* 6. Drainage coefficient
326 ! --------------------
327 !
328 ALLOCATE(gdm%TGDP%XWDRAIN(tg%NDIM))
329  CALL pgd_field(dtco, ug, u, uss, &
330  hprogram,'subgrid drainage','TWN',ywdrain,ywdrainfiletype,xunif_wdrain,gdm%TGDP%XWDRAIN(:))
331 !
332 !-------------------------------------------------------------------------------
333 !
334 !* 7. Interpolation of GARDEN physiographic fields
335 ! --------------------------------------------
336 !
337 gdm%DTGD%NTIME = 12
338  CALL pgd_teb_garden_par(dtco, ug, u, uss, tg, gdm, &
339  hprogram)
340 !
341 !-------------------------------------------------------------------------------
342 !
343 !* 8. Case of greenroofs
344 ! ------------------
345 !
346 IF (top%LGREENROOF) CALL pgd_teb_greenroof(dtco, ug, u, uss, grm, tg, &
347  hprogram)
348 !
349 !-------------------------------------------------------------------------------
350 !
351 !* 9. Irrigation of gardens and greenroofs
352 ! ------------------------------------
353 !
354  CALL pgd_teb_irrig(dtco, ug, u, uss, tg, gdm%TIR, &
355  hprogram)
356 !
357 !-------------------------------------------------------------------------------
358 !
359 !* 9. Case of urban hydrology
360 ! -----------------------
361 !
362 IF (top%LHYDRO) print*," CALL PGD_TEB_URBHYDRO(HPROGRAM,LECOCLIMAP)"
363 !
364 !-------------------------------------------------------------------------------
365 !
366 IF (lhook) CALL dr_hook('PGD_TEB_GARDEN',1,zhook_handle)
367 !
368 !
369 !-------------------------------------------------------------------------------
370 !
371 !
372 END SUBROUTINE pgd_teb_veg
subroutine read_nam_pgd_isba(HPROGRAM, KPATCH, KGROUND_LAYER, HISBA, HPEDOTF, HPHOTO, OTR_ML, PRM_PATCH, HCLAY, HCLAYFILETYPE, PUNIF_CLAY, OIMP_CLAY, HSAND, HSANDFILETYPE, PUNIF_SAND, OIMP_SAND, HSOC_TOP, HSOC_SUB, HSOCFILETYPE, PUNIF_SOC_TOP, PUNIF_SOC_SUB, OIMP_SOC, HCTI, HCTIFILETYPE, OIMP_CTI, HPERM, HPERMFILETYPE, PUNIF_PERM, OIMP_PERM, OMEB, HGW, HGWFILETYPE, PUNIF_GW, OIMP_GW, HRUNOFFB, HRUNOFFBFILETYPE, PUNIF_RUNOFFB, HWDRAIN, HWDRAINFILETYPE, PUNIF_WDRAIN, PSOILGRID, HPH, HPHFILETYPE, PUNIF_PH, HFERT, HFERTFILETYPE, PUNIF_FERT)
subroutine pgd_field(DTCO, UG, U, USS, HPROGRAM, HFIELD, HAREA, HFILE, HFILETYPE, PUNIF, PFIELD, OPRESENT)
Definition: pgd_field.F90:6
subroutine pgd_teb_greenroof(DTCO, UG, U, USS, GRM, TG, HPROGRAM)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine pgd_teb_irrig(DTCO, UG, U, USS, TG, TIR, HPROGRAM)
subroutine pgd_teb_veg(DTCO, UG, U, USS, GDM, GRM, TOP, TG, HPROGRAM)
Definition: pgd_teb_veg.F90:6
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine pgd_teb_garden_par(DTCO, UG, U, USS, TG, GDM, HPROGRAM)