SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_teb_garden_pgdn.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_teb_garden_pgd_n (DTCO, U, CHI, DTI, I, DST, SLT, CHT, TG, T, TOP, GDM, &
7  hprogram,hinit, oread_pgd,ki, ksv, hsv, kversion, kbugfix, &
8  pco2, prhoa)
9  !#############################################################
10  !
11  !!**** *INIT_TEB_GARDEN_PGD_n* - routine to initialize ISBA
12  !!
13  !! PURPOSE
14  !! -------
15  !!
16  !!** METHOD
17  !! ------
18  !!
19  !! EXTERNAL
20  !! --------
21  !!
22  !!
23  !! IMPLICIT ARGUMENTS
24  !! ------------------
25  !!
26  !! REFERENCE
27  !! ---------
28  !!
29  !!
30  !! AUTHOR
31  !! ------
32  !! A. Lemonsu *Meteo France*
33  !!
34  !! MODIFICATIONS
35  !! -------------
36  !! Original 09/2009
37  !! 11/2013 (B. Decharme) No exp profile with DIF
38  !-------------------------------------------------------------------------------
39  !
40  !* 0. DECLARATIONS
41  ! ------------
42  !
43  !
45  USE modd_surf_atm_n, ONLY : surf_atm_t
46  USE modd_ch_isba_n, ONLY : ch_isba_t
47  USE modd_data_isba_n, ONLY : data_isba_t
48  USE modd_isba_n, ONLY : isba_t
49  USE modd_dst_n, ONLY : dst_t
50  USE modd_slt_n, ONLY : slt_t
51  USE modd_ch_teb_n, ONLY : ch_teb_t
52  USE modd_teb_grid_n, ONLY : teb_grid_t
53  USE modd_teb_n, ONLY : teb_t
56  !
58  USE modd_type_snow
59  !
60 
61  USE modd_data_cover_par, ONLY: nvegtype
62  USE modd_surf_par, ONLY: xundef, nundef
63 
64  USE modd_sgh_par, ONLY: ndimtab, xf_decay
65  !
66  USE modi_get_luout
67  USE modi_allocate_teb_garden_pgd
68  USE modi_read_pgd_teb_garden_n
69  USE modi_convert_patch_garden
70  USE modi_init_from_data_grdn_n
71  USE modi_init_veg_pgd_garden_n
72  USE modi_exp_decay_soil_fr
73  USE modi_abor1_sfx
74  !
75  USE yomhook ,ONLY : lhook, dr_hook
76  USE parkind1 ,ONLY : jprb
77  !
78  IMPLICIT NONE
79  !
80  !* 0.1 Declarations of arguments
81  ! -------------------------
82  !
83  !
84  TYPE(data_cover_t), INTENT(INOUT) :: dtco
85  TYPE(surf_atm_t), INTENT(INOUT) :: u
86  TYPE(ch_isba_t), INTENT(INOUT) :: chi
87  TYPE(data_isba_t), INTENT(INOUT) :: dti
88  TYPE(isba_t), INTENT(INOUT) :: i
89  TYPE(dst_t), INTENT(INOUT) :: dst
90  TYPE(slt_t), INTENT(INOUT) :: slt
91  TYPE(ch_teb_t), INTENT(INOUT) :: cht
92  TYPE(teb_grid_t), INTENT(INOUT) :: tg
93  TYPE(teb_t), INTENT(INOUT) :: t
94  TYPE(teb_options_t), INTENT(INOUT) :: top
95  TYPE(teb_garden_model_t), INTENT(INOUT) :: gdm
96  !
97  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
98  CHARACTER(LEN=3), INTENT(IN) :: hinit ! choice of fields to initialize
99  LOGICAL, INTENT(IN) :: oread_pgd ! flag to read PGD fields in the file
100  INTEGER, INTENT(IN) :: ki ! number of points
101  INTEGER, INTENT(IN) :: ksv ! number of scalars
102  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: hsv ! name of all scalar variables
103  INTEGER, INTENT(IN) :: kversion ! version number of the file being read
104  INTEGER, INTENT(IN) :: kbugfix
105  REAL, DIMENSION(KI), INTENT(IN) :: pco2 ! CO2 concentration (kg/m3)
106  REAL, DIMENSION(KI), INTENT(IN) :: prhoa ! air density
107  !
108  !
109  !
110  !* 0.2 Declarations of local variables
111  ! -------------------------------
112  !
113  INTEGER :: jilu ! loop increment
114  INTEGER :: iluout ! unit of output listing file
115  !
116  INTEGER :: idecade ! decade of simulation
117  !
118  INTEGER :: jvegtype, jlayer ! loop counter on vegtypes
119  !
120  REAL, DIMENSION(KI) :: zf
121  REAL, DIMENSION(KI) :: zwork
122  REAL(KIND=JPRB) :: zhook_handle
123  !
124  !-------------------------------------------------------------------------------
125  !
126  ! Initialisation for IO
127  !
128  IF (lhook) CALL dr_hook('INIT_TEB_GARDEN_PGD_n',0,zhook_handle)
129  CALL get_luout(hprogram,iluout)
130  !
131  !-------------------------------------------------------------------------------
132  !
133  !* 2. Physiographic fields
134  ! --------------------
135  !
136  !* allocation of urban green area variables
137  !
138  CALL allocate_teb_garden_pgd(gdm%TGDPE, gdm%TGDP, &
139  oread_pgd, ki, nvegtype, gdm%TGDO%NGROUND_LAYER, ndimtab)
140  !
141  !
142  !* 2.1 Cover, soil and orographic fields:
143  ! ---------------------------------
144  !
145  IF (oread_pgd) &
146  CALL read_pgd_teb_garden_n(cht, dtco, gdm%DTGD, gdm%GBGD, u, gdm%TGDO, gdm%TGDP, tg, top, &
147  hprogram,kversion,kbugfix)
148  !
149  !
150  !* 2.3 Physiographic data fields from land cover:
151  ! -----------------------------------------
152  !
153  IF (top%TTIME%TDATE%MONTH /= nundef) THEN
154  idecade = 3 * ( top%TTIME%TDATE%MONTH - 1 ) + min(top%TTIME%TDATE%DAY-1,29) / 10 + 1
155  ELSE
156  idecade = 1
157  END IF
158  !
159  !
160  IF (.NOT. gdm%TGDO%LPAR_GARDEN) THEN
161  CALL convert_patch_garden(dtco, dti, i, gdm%TGDO, gdm%TGDPE, gdm%TGDP, top, gdm%TVG, &
162  ki,idecade)
163  ELSE
164  CALL init_from_data_grdn_n(gdm%DTGD, &
165  idecade,gdm%TVG%CPHOTO, gdm%TGDPE%CUR%XVEG, &
166  gdm%TGDPE%CUR%XLAI,gdm%TGDP%XRSMIN,gdm%TGDP%XGAMMA,&
167  gdm%TGDP%XWRMAX_CF, gdm%TGDP%XRGL,gdm%TGDP%XCV,gdm%TGDP%XDG,&
168  gdm%TGDP%XD_ICE,gdm%TGDPE%CUR%XZ0,gdm%TGDP%XZ0_O_Z0H,&
169  gdm%TGDP%XALBNIR_VEG,gdm%TGDP%XALBVIS_VEG, &
170  gdm%TGDP%XALBUV_VEG,gdm%TGDPE%CUR%XEMIS, &
171  gdm%TGDP%XVEGTYPE,gdm%TGDP%XROOTFRAC,gdm%TGDP%XGMES,&
172  gdm%TGDP%XBSLAI,gdm%TGDP%XLAIMIN,gdm%TGDP%XSEFOLD,gdm%TGDP%XGC, &
173  gdm%TGDP%XDMAX, gdm%TGDP%XF2I, gdm%TGDP%LSTRESS, gdm%TGDP%XH_TREE,&
174  gdm%TGDP%XRE25,gdm%TGDP%XCE_NITRO,gdm%TGDP%XCF_NITRO,gdm%TGDP%XCNA_NITRO )
175 
176  IF (gdm%TVG%CISBA=='DIF') THEN
177  WHERE(t%CUR%XGARDEN(:)/=0.)
178  gdm%TGDP%NWG_LAYER(:)=gdm%TGDO%NGROUND_LAYER
179  gdm%TGDP%XDG2 (:)=0.0
180  gdm%TGDP%XDROOT(:)=0.0
181  ENDWHERE
182  DO jlayer=gdm%TGDO%NGROUND_LAYER,1,-1
183  DO jilu=1,ki
184  IF(t%CUR%XGARDEN(jilu)/=0..AND.gdm%TGDP%XROOTFRAC(jilu,jlayer)>=1.0)THEN
185  gdm%TGDP%XDG2 (jilu)=gdm%TGDP%XDG(jilu,jlayer)
186  gdm%TGDP%XDROOT(jilu)=gdm%TGDP%XDG(jilu,jlayer)
187  ENDIF
188  ENDDO
189  ENDDO
190  ENDIF
191 
192  END IF
193  !
194 
195  WHERE (t%CUR%XGARDEN(:)==0.)
196  gdm%TGDPE%CUR%XVEG(:)=0.
197  gdm%TGDPE%CUR%XLAI(:)=0.
198  gdm%TGDP%XRSMIN(:)=40.
199  gdm%TGDP%XGAMMA(:)=0.
200  gdm%TGDP%XWRMAX_CF(:)=0.2
201  gdm%TGDP%XRGL(:)=100.
202  gdm%TGDP%XCV(:)=2.e-5
203  gdm%TGDPE%CUR%XZ0(:)=0.013
204  gdm%TGDP%XZ0_O_Z0H(:)=10.
205  gdm%TGDP%XALBNIR_VEG(:)=0.30
206  gdm%TGDP%XALBVIS_VEG(:)=0.30
207  gdm%TGDP%XALBUV_VEG(:)=0.06
208  gdm%TGDPE%CUR%XEMIS(:)=0.94
209  ENDWHERE
210  IF (gdm%TVG%CPHOTO/='NON') THEN
211  WHERE (t%CUR%XGARDEN(:)==0.)
212  gdm%TGDP%XGMES(:)=0.020
213  gdm%TGDP%XBSLAI(:)=0.36
214  gdm%TGDP%XLAIMIN(:)=0.3
215  gdm%TGDP%XSEFOLD(:)=90*86400.
216  gdm%TGDP%XH_TREE(:)=0.
217  gdm%TGDP%XRE25(:)=3.6e-7
218  gdm%TGDP%XGC(:)=0.00025
219  END WHERE
220  IF (gdm%TVG%CPHOTO/='AGS' .AND. gdm%TVG%CPHOTO/='LAI') THEN
221  WHERE (t%CUR%XGARDEN(:)==0.)
222  gdm%TGDP%XDMAX(:)=0.1
223  gdm%TGDP%XF2I(:)=0.3
224  END WHERE
225  IF (gdm%TVG%CPHOTO=='NIT' .OR. gdm%TVG%CPHOTO=='NCB') THEN
226  WHERE (t%CUR%XGARDEN(:)==0.)
227  gdm%TGDP%XCE_NITRO(:)=7.68
228  gdm%TGDP%XCF_NITRO(:)=-4.33
229  gdm%TGDP%XCNA_NITRO(:)=1.3
230  END WHERE
231  ENDIF
232  ENDIF
233  ENDIF
234  IF(gdm%TVG%CISBA/='DIF')THEN
235  DO jlayer=1,gdm%TGDO%NGROUND_LAYER
236  WHERE (t%CUR%XGARDEN(:)==0.)
237  gdm%TGDP%XDG(:,jlayer)=0.2*jlayer
238  END WHERE
239  ENDDO
240  ELSE
241  WHERE (t%CUR%XGARDEN(:)==0.)
242  gdm%TGDP%XDG(:,1)=0.01
243  gdm%TGDP%XDG(:,2)=0.04
244  gdm%TGDP%XROOTFRAC(:,1)=0.
245  gdm%TGDP%XROOTFRAC(:,2)=0.
246  END WHERE
247  DO jlayer=3,gdm%TGDO%NGROUND_LAYER
248  WHERE (t%CUR%XGARDEN(:)==0.)
249  gdm%TGDP%XDG(:,jlayer)=0.1*(jlayer-2)
250  gdm%TGDP%XROOTFRAC(:,jlayer)=0.
251  END WHERE
252  ENDDO
253  WHERE (t%CUR%XGARDEN(:)==0.)
254  gdm%TGDP%NWG_LAYER(:)=gdm%TGDO%NGROUND_LAYER
255  gdm%TGDP%XDROOT (:)=0.0
256  gdm%TGDP%XDG2 (:)=gdm%TGDP%XDG(:,gdm%TGDO%NGROUND_LAYER-1)
257  ENDWHERE
258  ENDIF
259  WHERE (t%CUR%XGARDEN(:)==0.)
260  gdm%TGDP%XD_ICE(:)=0.8*gdm%TGDP%XDG(:,2)
261  END WHERE
262  DO jvegtype=1,nvegtype
263  WHERE (t%CUR%XGARDEN(:)==0.)
264  gdm%TGDP%XVEGTYPE(:,jvegtype)=0.
265  gdm%TGDP%XVEGTYPE(:,1)=1.
266  END WHERE
267  ENDDO
268  !
269  CALL init_veg_pgd_garden_n(chi, dtco, dst, i, slt, u, &
270  hprogram, iluout, ki, gdm%TGDO%NGROUND_LAYER, top%TTIME%TDATE%MONTH, &
271  gdm%TGDP%XVEGTYPE, gdm%TGDP%XTDEEP, gdm%TGDP%XGAMMAT, gdm%TVG%CPHOTO, hinit, &
272  gdm%TVG%LTR_ML, gdm%TVG%CRUNOFF, gdm%TVG%NNBIOMASS, pco2, prhoa, &
273  gdm%TGDP%XABC, gdm%TGDP%XPOI, gdm%TGDP%XGMES, gdm%TGDP%XGC, gdm%TGDP%XDMAX, &
274  gdm%TGDP%XANMAX, gdm%TGDP%XFZERO, gdm%TGDP%XEPSO, gdm%TGDP%XGAMM, gdm%TGDP%XQDGAMM, &
275  gdm%TGDP%XQDGMES, gdm%TGDP%XT1GMES, gdm%TGDP%XT2GMES, gdm%TGDP%XAMAX, gdm%TGDP%XQDAMAX, &
276  gdm%TGDP%XT1AMAX, gdm%TGDP%XT2AMAX,gdm%TGDP%XAH, gdm%TGDP%XBH, &
277  ksv, hsv, cht%SVT, cht%CCH_NAMES, cht%CAER_NAMES,cht%CDSTNAMES, cht%CSLTNAMES, &
278  cht%CCHEM_SURF_FILE, gdm%TGDP%XCLAY, gdm%TGDP%XSAND, gdm%TVG%CPEDOTF, &
279  gdm%TGDP%XCONDSAT, gdm%TGDP%XMPOTSAT, gdm%TGDP%XBCOEF, gdm%TGDP%XWWILT, &
280  gdm%TGDP%XWFC, gdm%TGDP%XWSAT, gdm%TGDP%XTAUICE, gdm%TGDP%XCGSAT, gdm%TGDP%XC1SAT, &
281  gdm%TGDP%XC2REF, gdm%TGDP%XC3, gdm%TGDP%XC4B, gdm%TGDP%XACOEF, gdm%TGDP%XPCOEF, &
282  gdm%TGDP%XC4REF, gdm%TGDP%XPCPS, gdm%TGDP%XPLVTT, gdm%TGDP%XPLSTT, &
283  gdm%TVG%CSCOND, gdm%TVG%CISBA, gdm%TGDP%XHCAPSOIL, gdm%TGDP%XCONDDRY, &
284  gdm%TGDP%XCONDSLD, gdm%TVG%CCPSURF, gdm%TGDP%XDG, gdm%TGDP%XDROOT, gdm%TGDP%XDG2, &
285  gdm%TGDP%XROOTFRAC, gdm%TGDP%XRUNOFFD, gdm%TGDP%XDZG, gdm%TGDP%XDZDIF, &
286  gdm%TGDP%XSOILWGHT, gdm%TGDP%NWG_LAYER, gdm%TGDO%NLAYER_HORT, &
287  gdm%TGDO%NLAYER_DUN, gdm%TGDP%XD_ICE, &
288  gdm%TGDP%XKSAT_ICE, gdm%TGDP%XALBNIR_DRY, gdm%TGDP%XALBVIS_DRY, gdm%TGDP%XALBUV_DRY, &
289  gdm%TGDP%XALBNIR_WET, gdm%TGDP%XALBVIS_WET, gdm%TGDP%XALBUV_WET, gdm%TGDP%XBSLAI_NITRO, &
290  gdm%TGDP%XCE_NITRO, gdm%TGDP%XCNA_NITRO, gdm%TGDP%XCF_NITRO )
291 !
292 !-------------------------------------------------------------------------------
293 !
294 IF(gdm%TVG%CISBA=='DIF'.AND.gdm%TVG%LSOC)THEN
295  CALL abor1_sfx('INIT_TEB_GARDEN_PGDn: SUBGRID Soil organic matter'//&
296  ' effect (LSOC) NOT YET IMPLEMENTED FOR GARDEN')
297 ELSEIF (gdm%TVG%CISBA=='3-L'.AND.gdm%TVG%CKSAT=='EXP') THEN
298  CALL abor1_sfx('INIT_TEB_GARDEN_PGDn: topmodel exponential decay not implemented for garden')
299 ENDIF
300 !
301 IF(gdm%TVG%CKSAT=='SGH' .AND. gdm%TVG%CISBA/='DIF' .AND. hinit/='PRE')THEN
302  zf(:)=min(4.0/gdm%TGDP%XDG(:,2),xf_decay)
303  CALL exp_decay_soil_fr(gdm%TVG%CISBA, zf(:),gdm%TGDP%XC1SAT(:),gdm%TGDP%XC2REF(:),&
304  gdm%TGDP%XDG(:,:),gdm%TGDP%XD_ICE(:),gdm%TGDP%XC4REF(:),&
305  gdm%TGDP%XC3(:,:),gdm%TGDP%XCONDSAT(:,:),gdm%TGDP%XKSAT_ICE(:))
306 ENDIF
307 !
308 !-------------------------------------------------------------------------------
309 !
310 IF (lhook) CALL dr_hook('INIT_TEB_GARDEN_PGD_n',1,zhook_handle)
311 !
312 !-------------------------------------------------------------------------------
313 !
314 !
315 END SUBROUTINE init_teb_garden_pgd_n
subroutine init_from_data_grdn_n(DTGD, KDECADE, HPHOTO, PVEG, PLAI, PRSMIN, PGAMMA, PWRMAX_CF, PRGL, PCV, PDG, PD_ICE, PZ0, PZ0_O_Z0H, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PEMIS, PVEGTYPE, PROOTFRAC, PGMES, PBSLAI, PLAIMIN, PSEFOLD, PGC, PDMAX, PF2I, OSTRESS, PH_TREE, PRE25, PCE_NITRO, PCF_NITRO, PCNA_NITRO, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL)
subroutine convert_patch_garden(DTCO, DTI, I, TGDO, TGDPE, TGDP, TOP, TVG, KLU, KDECADE)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine init_teb_garden_pgd_n(DTCO, U, CHI, DTI, I, DST, SLT, CHT, TG, T, TOP, GDM, HPROGRAM, HINIT, OREAD_PGD, KI, KSV, HSV, KVERSION, KBUGFIX, PCO2, PRHOA)
subroutine allocate_teb_garden_pgd(TGDPE, TGDP, OALLOC, KLU, KVEGTYPE, KGROUND_LAYER, KDIMTAB)
subroutine init_veg_pgd_garden_n(CHI, DTCO, DST, I, SLT, U, HPROGRAM, KLUOUT, KI, KGROUND_LAYER, KMONTH, PVEGTYPE, PTDEEP, PGAMMAT, HPHOTO, HINIT, OTR_ML, HRUNOFF, KNBIOMASS, PCO2, PRHOA, PABC, PPOI, PGMES, PGC, PDMAX, PANMAX, PFZERO, PEPSO, PGAMM, PQDGAMM, PQDGMES, PT1GMES, PT2GMES, PAMAX, PQDAMAX, PT1AMAX, PT2AMAX, PAH, PBH, KSV, HSV, YSV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES, HCHEM_SURF_FILE, PCLAY, PSAND, HPEDOTF, PCONDSAT, PMPOTSAT, PBCOEF, PWWILT, PWFC, PWSAT, PTAUICE, PCGSAT, PC1SAT, PC2REF, PC3, PC4B, PACOEF, PPCOEF, PC4REF, PPCPS, PPLVTT, PPLSTT, HSCOND, HISBA, PHCAPSOIL, PCONDDRY, PCONDSLD, HCPSURF, PDG, PDROOT, PDG2, PROOTFRAC, PRUNOFFD, PDZG, PDZDIF, PSOILWGHT, KWG_LAYER, KLAYER_HORT, KLAYER_DUN, PD_ICE, PKSAT_ICE, PALBNIR_DRY, PALBVIS_DRY, PALBUV_DRY, PALBNIR_WET, PALBVIS_WET, PALBUV_WET, PBSLAI_NITRO, PCE_NITRO, PCNA_NITRO, PCF_NITRO)
subroutine read_pgd_teb_garden_n(CHT, DTCO, DTGD, GBGD, U, TGDO, TGDP, TG, TOP, HPROGRAM, KVERSION, KBUGFIX)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine exp_decay_soil_fr(HISBA, PF, PC1SAT, PC2REF, PD_G, PD_ICE, PC4REF, PC3, PCONDSAT, PKSAT_ICE)