SURFEX v8.1
General documentation of Surfex
init_teb_greenroof_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_greenroof_pgd_n (DTCO, U, OCH_BIO_FLUX, G, PGREENROOF, TOP, IO, S, K, P, PEK, DTV, GB, &
7  HPROGRAM, HINIT, OPATCH1, KI, KVERSION, PCO2, PRHOA)
8 !#############################################################
9 !
10 !!**** *INIT_TEB_GREENROOF_PGD_n* - routine to initialize ISBA
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 !! A. Lemonsu *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 09/2009
36 !! 11/2013 (B. Decharme) No exp profile with DIF
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
43 USE modd_surf_atm_n, ONLY : surf_atm_t
44 USE modd_sso_n, ONLY : sso_t, sso_init
45 USE modd_sfx_grid_n, ONLY : grid_t
47 !
50 !
51 USE modd_data_isba_n, ONLY : data_isba_t
52 USE modd_gr_biog_n, ONLY : gr_biog_t
53 !
54 USE modd_agri_n, ONLY : agri_t
55 !
58 !
59 USE modd_data_cover_par, ONLY: nvegtype
60 USE modd_surf_par, ONLY: xundef, nundef
61 
62 USE modd_sgh_par, ONLY: xf_decay
63 !
64 USE modi_read_prep_greenroof_snow
65 USE modi_get_luout
66 USE modi_allocate_teb_veg_pgd
67 USE modi_read_pgd_teb_greenroof_n
68 USE modi_convert_patch_isba
69 USE modi_init_from_data_teb_veg_n
70 USE modi_init_veg_pgd_n
71 USE modi_exp_decay_soil_fr
72 USE modi_abor1_sfx
73 USE modi_av_pgd
74 !
75 USE mode_teb_veg
76 !
77 USE yomhook ,ONLY : lhook, dr_hook
78 USE parkind1 ,ONLY : jprb
79 !
80 IMPLICIT NONE
81 !
82 !* 0.1 Declarations of arguments
83 ! -------------------------
84 !
85 !
86 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
87 TYPE(surf_atm_t), INTENT(INOUT) :: U
88 LOGICAL, INTENT(IN) :: OCH_BIO_FLUX
89 TYPE(grid_t), INTENT(INOUT) :: G
90 REAL, DIMENSION(:), INTENT(IN) :: PGREENROOF
91 TYPE(teb_options_t), INTENT(INOUT) :: TOP
92 !
93 TYPE(isba_options_t), INTENT(INOUT) :: IO
94 TYPE(isba_s_t), INTENT(INOUT) :: S
95 TYPE(isba_k_t), INTENT(INOUT) :: K
96 TYPE(isba_p_t), INTENT(INOUT) :: P
97 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
98 !
99 TYPE(data_isba_t), INTENT(INOUT) :: DTV
100 TYPE(gr_biog_t), INTENT(INOUT) :: GB
101 !
102  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
103  CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize
104 LOGICAL, INTENT(IN) :: OPATCH1 ! flag to read PGD fields in the file
105 INTEGER, INTENT(IN) :: KI ! number of points
106 INTEGER, INTENT(IN) :: KVERSION ! version number of the file being read
107 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration (kg/m3)
108 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density
109 !
110 !
111 !
112 !* 0.2 Declarations of local variables
113 ! -------------------------------
114 !
115 TYPE(sso_t) :: YSS
116 TYPE(agri_t) :: YAG
117 !
118 INTEGER :: JILU ! loop increment
119 INTEGER :: ILUOUT ! unit of output listing file
120 !
121 INTEGER :: IDECADE ! decade of simulation
122 !
123 INTEGER :: JVEG, JL, JI ! loop counter on layers
124 !
125 REAL, DIMENSION(KI) :: ZF
126 REAL, DIMENSION(KI) :: ZWORK
127 !
128 !* 0.3 Soil parameter values for organic matter - from Lawrence and Slater (2008):
129 ! ----------------------------------------------------------------------------------
130 !
131 REAL, PARAMETER :: ZWSAT_OM = 0.9 ! Porosity of OM (m3/m3)
132 REAL, PARAMETER :: ZCONDSAT_OM = 2.8e-4 ! Saturated hydraulic conductivity for OM (m/s)
133 REAL, PARAMETER :: ZMPOTSAT_OM = -10.3e-3 ! Saturated matric potential for OM (m)
134 REAL, PARAMETER :: ZBCOEF_OM = 2.7 ! CH78 b-parameter for OM (-)
135 !
136 REAL, PARAMETER :: ZCONDDRY_OM = 0.05 ! Dry thermal conductivity for OM (W/m/K)
137 REAL, PARAMETER :: ZCONDSLD_OM = 0.25 ! Soil solids thermal conductivity for OM (W/m/K)
138 REAL, PARAMETER :: ZHCAPSOIL_OM = 2.5e+6 ! Soil heat capacity for OM
139 !
140 REAL, PARAMETER :: ZMPOT_WWILT = -150. ! Matric potential at wilting point (m)
141 REAL, PARAMETER :: ZHYDCOND_WFC = 1.157e-9 ! Hydraulic conductivity at field capacity (m/s)
142 !
143 REAL, DIMENSION(0) :: ZTDEEP_CLI, ZGAMMAT_CLI, ZTHRESHOLD
144 !
145 REAL(KIND=JPRB) :: ZHOOK_HANDLE
146 !
147 !-------------------------------------------------------------------------------
148 !
149 ! Initialisation for IO
150 !
151 IF (lhook) CALL dr_hook('INIT_TEB_GREENROOF_PGD_n',0,zhook_handle)
152 !
153  CALL get_luout(hprogram,iluout)
154 !
155  CALL sso_init(yss)
156 !-------------------------------------------------------------------------------
157 !
158 !* 1. Reading of snow configuration:
159 ! ------------------------------
160 !
161 !* initialization of snow scheme (TSNOW defined in MODD_TEB_GREENROOF_n)
162 !
163 IF (hinit=='PRE') THEN
164  CALL read_prep_greenroof_snow(hprogram,pek%TSNOW%SCHEME,pek%TSNOW%NLAYER)
165 !
166  IF (pek%TSNOW%SCHEME.NE.'3-L' .AND. pek%TSNOW%SCHEME.NE.'CRO' .AND. io%CISBA=='DIF') THEN
167  CALL abor1_sfx("INIT_TEB_GREENROOF_n: WITH CISBA_GR = DIF, CSNOW MUST BE 3-L OR CRO")
168  ENDIF
169 ENDIF
170 !
171 !-------------------------------------------------------------------------------
172 !
173 !* 2. Physiographic fields
174 ! --------------------
175 !
176 !
177 !* 2.1 Cover, soil and orographic fields:
178 ! ---------------------------------
179 !
180  CALL allocate_teb_veg_pgd(pek, s, k, p, opatch1, ki, nvegtype, io%NGROUND_LAYER )
181 !
182 IF (top%TTIME%TDATE%MONTH /= nundef) THEN
183  idecade = 3 * ( top%TTIME%TDATE%MONTH - 1 ) + min(top%TTIME%TDATE%DAY-1,29) / 10 + 1
184 ELSE
185  idecade = 1
186 END IF
187 !
188 IF (opatch1) THEN
189 
190  CALL read_pgd_teb_greenroof_n(och_bio_flux, dtco, dtv, gb, u, &
191  io, s, k, g%NDIM, hprogram,kversion)
192  !
193  ALLOCATE(s%XVEGTYPE(ki,nvegtype))
194  IF (io%LPAR) THEN
195  s%XVEGTYPE = dtv%XPAR_VEGTYPE
196  ELSE
197  !classical ecoclimap case
198  DO jveg=1,nvegtype
199  CALL av_pgd(dtco, s%XVEGTYPE(:,jveg),top%XCOVER ,dtco%XDATA_VEGTYPE(:,jveg),'GRD','ARI',top%LCOVER)
200  END DO
201  ENDIF
202  DO jveg=1,nvegtype
203  WHERE (pgreenroof==0)
204  s%XVEGTYPE(:,jveg) = 0.
205  s%XVEGTYPE(:,1) = 1.
206  END WHERE
207  ENDDO
208  !
209  ALLOCATE(s%XPATCH(ki,1),p%XPATCH(ki))
210  ALLOCATE(s%XVEGTYPE_PATCH(ki,nvegtype,1),p%XVEGTYPE_PATCH(ki,nvegtype))
211  s%XPATCH(:,1) = 1.
212  p%XPATCH(:) = s%XPATCH(:,1)
213  s%XVEGTYPE_PATCH(:,:,1) = s%XVEGTYPE
214  p%XVEGTYPE_PATCH(:,:) = s%XVEGTYPE_PATCH(:,:,1)
215  p%NSIZE_P = ki
216  ALLOCATE(p%NR_P(ki))
217  DO ji = 1,SIZE(p%NR_P)
218  p%NR_P(ji) = ji
219  ENDDO
220  !
221  IF (.NOT. io%LPAR) THEN
222  CALL convert_patch_isba(dtco, dtv, io, idecade, idecade, top%XCOVER, top%LCOVER,&
223  .false.,'GRD', 1, k, p, pek, &
224  .true., .false., .false., .false., .false., .false., &
225  psoilgrid=io%XSOILGRID )
226  ELSE
227  CALL init_from_data_teb_veg_n(dtv, k, p, pek, idecade, .false., .true., .false.,.false.)
228  ENDIF
229  !
230  ALLOCATE(s%XWSN_WR(0,0,1))
231  ALLOCATE(s%XRHO_WR(0,0,1))
232  ALLOCATE(s%XALB_WR(0,1))
233  ALLOCATE(s%XHEA_WR(0,0,1))
234  ALLOCATE(s%XAGE_WR(0,0,1))
235  ALLOCATE(s%XSG1_WR(0,0,1))
236  ALLOCATE(s%XSG2_WR(0,0,1))
237  ALLOCATE(s%XHIS_WR(0,0,1))
238  !
239 END IF
240 !
241 !* 2.2 Physiographic data fields from land cover:
242 ! -----------------------------------------
243 !
244 IF (.NOT. io%LPAR) THEN
245  CALL convert_patch_isba(dtco, dtv, io, idecade, idecade, top%XCOVER, top%LCOVER,&
246  .false.,'GRD', 1, k, p, pek, &
247  .false., .true., .false., .false., .false., .false. )
248 ELSE
249 
250  CALL init_from_data_teb_veg_n(dtv, k, p, pek, idecade, .false., .false., .true.,.false.)
251 
252  IF (io%CISBA=='DIF') CALL init_if_dif(io%NGROUND_LAYER, pgreenroof, p)
253 
254 END IF
255 !
256  CALL init_if_noveg(pgreenroof, io, s, p, pek)
257 !
258 ALLOCATE(k%XVEGTYPE(ki,nvegtype))
259 k%XVEGTYPE = s%XVEGTYPE
260 !
261 ALLOCATE(yss%XAOSIP(0))
262 !
263  CALL init_veg_pgd_n(yss, dtv, io, s, k, k, p, pek, yag, ki, &
264  hprogram, 'TOWN ',iluout, ki, top%TTIME%TDATE%MONTH, &
265  .false., .false., ztdeep_cli, zgammat_cli, &
266  .false., zthreshold, hinit, pco2, prhoa )
267 !
268 !-------------------------------------------------------------------------------
269 !
270 IF (opatch1) THEN
271  !
272  !* 5.1 Soil thermal characteristics for greenroofs:
273  ! ----------------------------------------------
274  !
275  ! WARNING: must be done before soil hydraulic characteristics (because of WSAT)
276  ! Estimation of WSAT_MI for use in HEATCAPZ and THRMCONDZ for mineral fraction
277  ! and allow weighted combination with regard to OM & no-OM fractions:
278  !
279  IF (io%CSCOND=='PL98' .OR. io%CISBA=='DIF') THEN
280  DO jl=1,io%NGROUND_LAYER
281  k%XHCAPSOIL(:,jl) = s%XSOC(:,jl) * zhcapsoil_om + (1-s%XSOC(:,jl)) * k%XHCAPSOIL(:,jl)
282  k%XCONDDRY (:,jl) = (zconddry_om * k%XCONDDRY(:,jl)) / &
283  ( s%XSOC(:,jl) * k%XCONDDRY(:,jl) + (1-s%XSOC(:,jl)) * zconddry_om )
284  k%XCONDSLD (:,jl) = (zcondsld_om * k%XCONDSLD(:,jl)) / &
285  ( s%XSOC(:,jl) * k%XCONDSLD(:,jl) + (1-s%XSOC(:,jl)) * zcondsld_om )
286  ENDDO
287  END IF
288  !
289  ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
290  ! Validation case : experimental values for Nancy 2011 case
291  ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
292  ! Substrate layer
293  DO jl=1,4
294  k%XCONDDRY (:,jl) = 0.15
295  k%XHCAPSOIL(:,jl) = 1342000.
296  ENDDO
297  ! Drainage layer
298  DO jl=5,6
299  k%XCONDDRY (:,jl) = 0.09
300  k%XHCAPSOIL(:,jl) = 331500.
301  ENDDO
302  ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
303  !
304 ENDIF
305 !
306 !* 5.2 Soil thermal characteristics:
307 ! --------------------------------
308 !
309 DO jl=1,io%NGROUND_LAYER
310  p%XCONDSAT(:,jl) = s%XSOC(:,jl)* zcondsat_om + (1-s%XSOC(:,jl)) * p%XCONDSAT(:,jl)
311 END DO
312 !
313 !
314 IF (opatch1) THEN
315  !
316  ! Note that if ISBA/=DIF, always CDIF = 'BC' and CPEDOTF = 'CH78'
317  DO jl=1,io%NGROUND_LAYER
318  k%XBCOEF (:,jl) = s%XSOC(:,jl) * zbcoef_om + (1-s%XSOC(:,jl)) * k%XBCOEF(:,jl)
319  k%XMPOTSAT(:,jl) = s%XSOC(:,jl) * zmpotsat_om + (1-s%XSOC(:,jl)) * k%XMPOTSAT(:,jl)
320  END DO
321  !
322  DO jl=1,io%NGROUND_LAYER
323  k%XWSAT (:,jl) = s%XSOC(:,jl)* zwsat_om +(1-s%XSOC(:,jl))* k%XWSAT(:,jl)
324  k%XWWILT(:,jl) = exp(((log(-1*zmpot_wwilt)-log(-1*k%XMPOTSAT(:,jl))) &
325  / (-1*k%XBCOEF(:,jl)))+log(k%XWSAT(:,jl)))
326  k%XWFC (:,jl) = exp(((log(zhydcond_wfc)-log(p%XCONDSAT(:,jl))) &
327  / (2*k%XBCOEF(:,jl)+3))+log(k%XWSAT(:,jl)))
328  END DO
329  !
330  ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
331  ! Validation case : experimental values for Nancy 2011 case
332  ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
333  ! Substrate layer
334  DO jl=1,4
335  k%XWSAT (:,jl) = 0.674 ! Value tested
336  k%XMPOTSAT(:,jl) = -0.932 ! Value tested
337  k%XBCOEF (:,jl) = 3.9 ! Value tested
338  k%XWWILT (:,jl) = 0.15 ! from OBS-NANCY
339  k%XWFC (:,jl) = 0.37 ! from OBS-NANCY
340  ENDDO
341  ! Drainage layer
342  DO jl=5,6
343  k%XWSAT (:,jl) = 0.9 ! Value tested
344  k%XMPOTSAT(:,jl) = -0.121 ! Value tested
345  k%XBCOEF (:,jl) = 2.7 ! Value tested
346  k%XWWILT (:,jl) = 0.15 ! sert à initialiser le WG ds la couche
347  k%XWFC (:,jl) = 0.37 ! sert à initialiser le WG ds la couche
348  ENDDO
349  !
350 ENDIF
351 !
352 ! Substrate layer
353 DO jl=1,4
354  p%XCONDSAT(:,jl) = 2.162e-3 ! Value tested
355 ENDDO
356 ! Drainage layer
357 DO jl=5,6
358  p%XCONDSAT(:,jl) = 3.32e-3 ! Value tested
359 ENDDO
360 !
361 !-------------------------------------------------------------------------------
362 !
363 !* 6.1 Initialize of the SGH scheme:'
364 ! ------------------------------
365 !
366 IF(io%CKSAT=='SGH' .AND. io%CISBA/='DIF' .AND. hinit/='PRE')THEN
367  zf(:)=min(4.0/p%XDG(:,2),xf_decay)
368  CALL exp_decay_soil_fr(io%CISBA, zf, p)
369 ENDIF
370 !
371 !-------------------------------------------------------------------------------
372 !
373 IF (lhook) CALL dr_hook('INIT_TEB_GREENROOF_PGD_n',1,zhook_handle)
374 !
375 !-------------------------------------------------------------------------------
376 !
377 !
378 END SUBROUTINE init_teb_greenroof_pgd_n
real, parameter xf_decay
subroutine init_if_noveg(PMASK, IO, S, P, PEK)
subroutine convert_patch_isba(DTCO, DTV, IO, KDEC, KDEC2, PCOVER,
subroutine allocate_teb_veg_pgd(PEK, S, K, P, OALLOC, KLU, KVEGTYPE, KGROUND_LAYER)
subroutine init_teb_greenroof_pgd_n(DTCO, U, OCH_BIO_FLUX, G, PGREENROOF, TOP, IO, S, K, P, PEK, DTV, GB, HPROGRAM, HINIT, OPATCH1, KI, KVERSION, PCO2, PRHOA)
subroutine sso_init(YSSO)
Definition: modd_sson.F90:103
subroutine init_veg_pgd_n(ISSK, DTI, IO, S, K, KK, PK, PEK, AGK, KI, HPROGRAM, HSURF, KLUOUT, KSIZE, KMONTH, ODEEPSOIL, OPHYSDOMC, PTDEEP_CLI, PGAMMAT_CLI, OAGRIP, PTHRESHOLD, HINIT, PCO2, PRHOA)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
subroutine exp_decay_soil_fr(HISBA, PF, PK, PC_DEPTH_RATIO)
logical lhook
Definition: yomhook.F90:15
subroutine read_prep_greenroof_snow(HPROGRAM, HSNOW, KSNOW_LAYER, HFI
subroutine init_from_data_teb_veg_n(DTV, K, P, PEK, KDECADE, OUPD
subroutine init_if_dif(KGROUND_LAYER, PMASK, P)
subroutine read_pgd_teb_greenroof_n(OCH_BIO_FLUX, DTCO, DTV, GB,