SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
prep_teb_greenroof.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 prep_teb_greenroof (DTCO, UG, U, USS, IG, I, TG, T, TOP, TVG, GRM, &
7  hprogram,hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch)
8 ! #################################################################################
9 !
10 !!**** *PREP_TEB_GREENROOF* - Prepares ISBA fields for greenroofs
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 !!** METHOD
16 !! ------
17 !! Based on "prep_teb_garden"
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !!
23 !! AUTHOR
24 !! ------
25 !! A. Lemonsu & C. de Munck
26 !!
27 !! MODIFICATIONS
28 !! -------------
29 !! Original 07/2011
30 !!------------------------------------------------------------------
31 !
32 !
33 !
34 !
35 !
38 USE modd_surf_atm_n, ONLY : surf_atm_t
40 USE modd_isba_grid_n, ONLY : isba_grid_t
41 USE modd_isba_n, ONLY : isba_t
42 USE modd_teb_grid_n, ONLY : teb_grid_t
43 USE modd_teb_n, ONLY : teb_t
47 !
48 USE modi_prep_hor_teb_greenroof_field
49 USE modi_prep_ver_teb_greenroof
50 !
51  ! A FAIRE :
52  ! IL FAUT RAJOUTER TSNOW
53  ! ----------------------
54 USE modd_surf_atm, ONLY : lvertshift
55 USE modd_csts, ONLY : xtt
56 USE modd_snow_par, ONLY : xz0sn
57 USE modd_isba_par, ONLY : xwgmin
58 USE modd_co2v_par, ONLY : xcc_nit, xca_nit, xanfminit
59 USE modd_surf_par, ONLY : xundef
60 !
62 USE mode_pos_surf
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 TYPE(data_cover_t), INTENT(INOUT) :: dtco
74 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
75 TYPE(surf_atm_t), INTENT(INOUT) :: u
76 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
77 TYPE(isba_grid_t), INTENT(INOUT) :: ig
78 TYPE(isba_t), INTENT(INOUT) :: i
79 TYPE(teb_grid_t), INTENT(INOUT) :: tg
80 TYPE(teb_t), INTENT(INOUT) :: t
81 TYPE(teb_options_t), INTENT(INOUT) :: top
82 TYPE(teb_veg_options_t), INTENT(INOUT) :: tvg
83 TYPE(teb_greenroof_model_t), INTENT(INOUT) :: grm
84 !
85  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
86  CHARACTER(LEN=28), INTENT(IN) :: hatmfile ! name of the Atmospheric file
87  CHARACTER(LEN=6), INTENT(IN) :: hatmfiletype! type of the Atmospheric file
88  CHARACTER(LEN=28), INTENT(IN) :: hpgdfile ! name of the Atmospheric file
89  CHARACTER(LEN=6), INTENT(IN) :: hpgdfiletype! type of the Atmospheric file
90 !
91 INTEGER, INTENT(IN) :: kpatch
92 !
93 !* 0.2 declarations of local variables
94 !
95 INTEGER :: jp
96 REAL(KIND=JPRB) :: zhook_handle
97 !
98 !-------------------------------------------------------------------------------------
99 !
100 !* 1. Default of configuration
101 !
102 !* 1.1 Default
103 !
104 !
105 !-------------------------------------------------------------------------------------
106 !
107 !* 2. Reading and horizontal interpolations
108 !
109 !
110 !* 2.1 Soil Water reservoirs
111 !
112 IF (lhook) CALL dr_hook('PREP_TEB_GREENROOF',0,zhook_handle)
113 !
114  CALL prep_hor_teb_greenroof_field(dtco, ig, i, ug, u, uss, grm%TGR, grm%TGRO, grm%TGRPE, grm%TGRP, &
115  tg, top, &
116  hprogram,'WG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch)
117 !
118 !* 2.2 Soil ice reservoirs
119 !
120  CALL prep_hor_teb_greenroof_field(dtco, ig, i, ug, u, uss, grm%TGR, grm%TGRO, grm%TGRPE, grm%TGRP, &
121  tg, top, &
122  hprogram,'WGI ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch)
123 !
124 !* 2.3 Leaves interception water reservoir
125 !
126  CALL prep_hor_teb_greenroof_field(dtco, ig, i, ug, u, uss, grm%TGR, grm%TGRO, grm%TGRPE, grm%TGRP, &
127  tg, top, &
128  hprogram,'WR ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch)
129 !
130 !* 2.4 Temperature profile
131 !
132  CALL prep_hor_teb_greenroof_field(dtco, ig, i, ug, u, uss, grm%TGR, grm%TGRO, grm%TGRPE, grm%TGRP, &
133  tg, top, &
134  hprogram,'TG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch)
135 !
136 ! Initializing deep GR temp. with that of the outer layer of the structural roof
137 !
138 grm%TGRP%XTDEEP(:) = t%CUR%XT_ROOF(:,1)
139 !
140 !* 2.5 Snow variables
141 !
142  CALL prep_hor_teb_greenroof_field(dtco, ig, i, ug, u, uss, grm%TGR, grm%TGRO, grm%TGRPE, grm%TGRP, &
143  tg, top, &
144  hprogram,'SN_VEG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch)
145 !
146 !* 2.6 LAI
147 !
148  CALL prep_hor_teb_greenroof_field(dtco, ig, i, ug, u, uss, grm%TGR, grm%TGRO, grm%TGRPE, grm%TGRP, &
149  tg, top, &
150  hprogram,'LAI ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch)
151 !
152 !-------------------------------------------------------------------------------------
153 !
154 !* 3. Physical limitations:
155 !
156 ! 3.1 If whole ice reservoir is empty (grib from ecmwf case) and surface temperature is
157 ! lower than -10C, then ice content is maximum and water content minimum
158 !
159 IF (all(grm%TGR%CUR%XWGI(:,:)==0.)) THEN
160  WHERE(grm%TGR%CUR%XTG(:,1:SIZE(grm%TGR%CUR%XWG,2)) < xtt-10.)
161  grm%TGR%CUR%XWGI(:,:) = grm%TGRP%XWSAT(:,:)-xwgmin
162  grm%TGR%CUR%XWG (:,:) = xwgmin
163  END WHERE
164 ENDIF
165 !
166 !
167 ! 3.2. Total water content should not exceed saturation:
168 WHERE(grm%TGR%CUR%XWG(:,:) /= xundef .AND. (grm%TGR%CUR%XWG(:,:) + grm%TGR%CUR%XWGI(:,:)) > grm%TGRP%XWSAT(:,:) )
169  grm%TGR%CUR%XWGI(:,:) = grm%TGRP%XWSAT(:,:) - grm%TGR%CUR%XWG(:,:)
170 END WHERE
171 !
172 !-------------------------------------------------------------------------------------
173 !
174 !* 4. Vertical interpolations of all variables
175 !
176 IF(lvertshift)THEN
177  CALL prep_ver_teb_greenroof(grm%TGR, grm%TGRO, grm%TGRP, top)
178 ENDIF
179 !
180 !
181 !-------------------------------------------------------------------------------------
182 !
183 !* 5. Half prognostic fields
184 !
185 ALLOCATE(grm%TGR%CUR%XRESA(SIZE(grm%TGRPE%CUR%XLAI)))
186 grm%TGR%CUR%XRESA(:) = 100.
187 !
188 !-------------------------------------------------------------------------------------
189 !
190 !* 6. Isba-Ags prognostic fields
191 !
192 IF (tvg%CPHOTO /= 'NON') THEN
193 !
194  ALLOCATE(grm%TGR%CUR%XAN(SIZE(grm%TGRPE%CUR%XLAI)))
195  grm%TGR%CUR%XAN = 0.
196 !
197  ALLOCATE(grm%TGR%CUR%XANDAY(SIZE(grm%TGRPE%CUR%XLAI)))
198  grm%TGR%CUR%XANDAY = 0.
199 !
200  ALLOCATE(grm%TGR%CUR%XANFM(SIZE(grm%TGRPE%CUR%XLAI)))
201  grm%TGR%CUR%XANFM = xanfminit
202 !
203  ALLOCATE(grm%TGR%CUR%XLE(SIZE(grm%TGRPE%CUR%XLAI)))
204  grm%TGR%CUR%XLE = 0.
205 !
206 ENDIF
207 !
208 IF (tvg%CPHOTO == 'AGS' .OR. tvg%CPHOTO == 'AST') THEN
209 !
210  ALLOCATE(grm%TGR%CUR%XBIOMASS(SIZE(grm%TGRPE%CUR%XLAI),tvg%NNBIOMASS))
211  grm%TGR%CUR%XBIOMASS(:,1) = 0.
212 !
213  ALLOCATE(grm%TGR%CUR%XRESP_BIOMASS(SIZE(grm%TGRPE%CUR%XLAI),tvg%NNBIOMASS))
214  grm%TGR%CUR%XRESP_BIOMASS(:,:) = 0.
215 !
216 ELSEIF (tvg%CPHOTO == 'LAI' .OR. tvg%CPHOTO == 'LST') THEN
217 !
218  ALLOCATE(grm%TGR%CUR%XBIOMASS(SIZE(grm%TGRPE%CUR%XLAI),tvg%NNBIOMASS))
219  grm%TGR%CUR%XBIOMASS(:,1) = grm%TGRPE%CUR%XLAI(:) * grm%TGRP%XBSLAI(:)
220 !
221  ALLOCATE(grm%TGR%CUR%XRESP_BIOMASS(SIZE(grm%TGRPE%CUR%XLAI),tvg%NNBIOMASS))
222  grm%TGR%CUR%XRESP_BIOMASS(:,:) = 0.
223 !
224 ELSEIF (tvg%CPHOTO == 'NIT' .OR. tvg%CPHOTO == 'NCB') THEN
225 !
226  ALLOCATE(grm%TGR%CUR%XBIOMASS(SIZE(grm%TGRPE%CUR%XLAI),tvg%NNBIOMASS))
227  grm%TGR%CUR%XBIOMASS(:,1) = grm%TGRPE%CUR%XLAI(:) * grm%TGRP%XBSLAI_NITRO(:)
228  grm%TGR%CUR%XBIOMASS(:,2) = max( 0., (grm%TGR%CUR%XBIOMASS(:,1)/ (xcc_nit/10.**xca_nit)) &
229  **(1.0/(1.0-xca_nit)) - grm%TGR%CUR%XBIOMASS(:,1) )
230  grm%TGR%CUR%XBIOMASS(:,3:tvg%NNBIOMASS) = 0.
231 !
232  ALLOCATE(grm%TGR%CUR%XRESP_BIOMASS(SIZE(grm%TGRPE%CUR%XLAI),tvg%NNBIOMASS))
233  grm%TGR%CUR%XRESP_BIOMASS(:,:) = 0.
234 !
235 ENDIF
236 !
237 !-------------------------------------------------------------------------------------
238 !
239 IF (lhook) CALL dr_hook('PREP_TEB_GREENROOF',1,zhook_handle)
240 !
241 !-------------------------------------------------------------------------------------
242 !
243 END SUBROUTINE prep_teb_greenroof
subroutine prep_hor_teb_greenroof_field(DTCO, IG, I, UG, U, USS, TGR, TGRO, TGRPE, TGRP, TG, TOP, HPROGRAM, HSURF, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KPATCH)
subroutine prep_teb_greenroof(DTCO, UG, U, USS, IG, I, TG, T, TOP, TVG, GRM, HPROGRAM, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KPATCH)
subroutine prep_ver_teb_greenroof(TGR, TGRO, TGRP, TOP)