SURFEX v8.1
General documentation of Surfex
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, GCP, TG, TOP, IO, S, K, P, PEK, &
7  HPROGRAM,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,KPATCH,YDCTL)
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 !! P. Marguinaud10/2014, Support for a 2-part PREP
31 !!------------------------------------------------------------------
32 !
35 USE modd_surf_atm_n, ONLY : surf_atm_t
36 USE modd_sso_n, ONLY : sso_t
38 !
41 !
42 USE modd_sfx_grid_n, ONLY : grid_t
44 !
45 USE modi_prep_hor_teb_greenroof_field
46 USE modi_prep_ver_teb_veg
47 !
48  ! A FAIRE :
49  ! IL FAUT RAJOUTER TSNOW
50  ! ----------------------
51 USE modd_surf_atm, ONLY : lvertshift
52 USE modd_csts, ONLY : xtt
53 USE modd_snow_par, ONLY : xz0sn
54 USE modd_isba_par, ONLY : xwgmin
55 USE modd_co2v_par, ONLY : xcc_nit, xca_nit, xanfminit
56 USE modd_surf_par, ONLY : xundef
57 !
58 USE mode_prep_ctl, ONLY : prep_ctl
59 !
61 USE mode_pos_surf
62 !
63 USE yomhook ,ONLY : lhook, dr_hook
64 USE parkind1 ,ONLY : jprb
65 !
66 IMPLICIT NONE
67 !
68 !* 0.1 declarations of arguments
69 !
70 !
71 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
72 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
73 TYPE(surf_atm_t), INTENT(INOUT) :: U
74 TYPE(sso_t), INTENT(INOUT) :: USS
75 TYPE(grid_conf_proj_t),INTENT(INOUT) :: GCP
76 !
77 TYPE(isba_options_t), INTENT(INOUT) :: IO
78 TYPE(isba_s_t), INTENT(INOUT) :: S
79 TYPE(isba_k_t), INTENT(INOUT) :: K
80 TYPE(isba_p_t), INTENT(INOUT) :: P
81 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
82 !
83 TYPE(grid_t), INTENT(INOUT) :: TG
84 TYPE(teb_options_t), INTENT(INOUT) :: TOP
85 type(prep_ctl), INTENT(INOUT) :: ydctl
86 !
87  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
88  CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! name of the Atmospheric file
89  CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! type of the Atmospheric file
90  CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the Atmospheric file
91  CHARACTER(LEN=6), INTENT(IN) :: HPGDFILETYPE! type of the Atmospheric file
92 !
93 INTEGER, INTENT(IN) :: KPATCH
94 !
95 !* 0.2 declarations of local variables
96 !
97 INTEGER :: JP
98 REAL(KIND=JPRB) :: ZHOOK_HANDLE
99 !
100 !-------------------------------------------------------------------------------------
101 !
102 !* 1. Default of configuration
103 !
104 !* 1.1 Default
105 !
106 !
107 !-------------------------------------------------------------------------------------
108 !
109 !* 2. Reading and horizontal interpolations
110 !
111 !
112 !* 2.1 Soil Water reservoirs
113 !
114 IF (lhook) CALL dr_hook('PREP_TEB_GREENROOF',0,zhook_handle)
115 !
116  CALL prep_hor_teb_greenroof_field(dtco, ug, u, uss, gcp, io, s, k, p, pek, tg, top, &
117  hprogram,'WG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch,ydctl)
118 !
119 !* 2.2 Soil ice reservoirs
120 !
121  CALL prep_hor_teb_greenroof_field(dtco, ug, u, uss, gcp, io, s, k, p, pek, tg, top, &
122  hprogram,'WGI ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch,ydctl)
123 !
124 !* 2.3 Leaves interception water reservoir
125 !
126  CALL prep_hor_teb_greenroof_field(dtco, ug, u, uss, gcp, io, s, k, p, pek, tg, top, &
127  hprogram,'WR ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch,ydctl)
128 !
129 !* 2.4 Temperature profile
130 !
131  CALL prep_hor_teb_greenroof_field(dtco, ug, u, uss, gcp, io, s, k, p, pek, tg, top, &
132  hprogram,'TG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch,ydctl)
133 !
134 !* 2.5 Snow variables
135 !
136  CALL prep_hor_teb_greenroof_field(dtco, ug, u, uss, gcp, io, s, k, p, pek, tg, top, &
137  hprogram,'SN_VEG ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch,ydctl)
138 !
139 !* 2.6 LAI
140 !
141  CALL prep_hor_teb_greenroof_field(dtco, ug, u, uss, gcp, io, s, k, p, pek, tg, top, &
142  hprogram,'LAI ',hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kpatch,ydctl)
143 !
144 !-------------------------------------------------------------------------------------
145 !
146 !* 3. Physical limitations:
147 !
148 ! 3.1 If whole ice reservoir is empty (grib from ecmwf case) and surface temperature is
149 ! lower than -10C, then ice content is maximum and water content minimum
150 !
151 IF (all(pek%XWGI(:,:)==0.)) THEN
152  WHERE(pek%XTG(:,1:SIZE(pek%XWG,2)) < xtt-10.)
153  pek%XWGI(:,:) = k%XWSAT(:,:)-xwgmin
154  pek%XWG (:,:) = xwgmin
155  END WHERE
156 ENDIF
157 !
158 !
159 ! 3.2. Total water content should not exceed saturation:
160 WHERE(pek%XWG(:,:) /= xundef .AND. (pek%XWG(:,:) + pek%XWGI(:,:)) > k%XWSAT(:,:) )
161  pek%XWGI(:,:) = k%XWSAT(:,:) - pek%XWG(:,:)
162 END WHERE
163 !
164 !-------------------------------------------------------------------------------------
165 !
166 !* 4. Vertical interpolations of all variables
167 !
168 IF(lvertshift)THEN
169  CALL prep_ver_teb_veg(p, pek, io, top%XZS)
170 ENDIF
171 !
172 !
173 !-------------------------------------------------------------------------------------
174 !
175 !* 5. Half prognostic fields
176 !
177 ALLOCATE(pek%XRESA(SIZE(pek%XLAI)))
178 pek%XRESA(:) = 100.
179 !
180 !-------------------------------------------------------------------------------------
181 !
182 !* 6. Isba-Ags prognostic fields
183 !
184 IF (io%CPHOTO /= 'NON') THEN
185 !
186  ALLOCATE(pek%XAN(SIZE(pek%XLAI)))
187  pek%XAN = 0.
188 !
189  ALLOCATE(pek%XANDAY(SIZE(pek%XLAI)))
190  pek%XANDAY = 0.
191 !
192  ALLOCATE(pek%XANFM(SIZE(pek%XLAI)))
193  pek%XANFM = xanfminit
194 !
195  ALLOCATE(pek%XLE(SIZE(pek%XLAI)))
196  pek%XLE = 0.
197 !
198 ENDIF
199 !
200 IF (io%CPHOTO == 'AST') THEN
201 !
202  ALLOCATE(pek%XBIOMASS(SIZE(pek%XLAI),io%NNBIOMASS))
203  pek%XBIOMASS(:,1) = 0.
204 !
205  ALLOCATE(pek%XRESP_BIOMASS(SIZE(pek%XLAI),io%NNBIOMASS))
206  pek%XRESP_BIOMASS(:,:) = 0.
207 !
208 ELSEIF (io%CPHOTO == 'NIT' .OR. io%CPHOTO == 'NCB') THEN
209 !
210  ALLOCATE(pek%XBIOMASS(SIZE(pek%XLAI),io%NNBIOMASS))
211  pek%XBIOMASS(:,1) = pek%XLAI(:) * p%XBSLAI_NITRO(:)
212  pek%XBIOMASS(:,2) = max( 0., (pek%XBIOMASS(:,1)/ (xcc_nit/10.**xca_nit)) &
213  **(1.0/(1.0-xca_nit)) - pek%XBIOMASS(:,1) )
214  pek%XBIOMASS(:,3:io%NNBIOMASS) = 0.
215 !
216  ALLOCATE(pek%XRESP_BIOMASS(SIZE(pek%XLAI),io%NNBIOMASS))
217  pek%XRESP_BIOMASS(:,:) = 0.
218 !
219 ENDIF
220 !
221 !-------------------------------------------------------------------------------------
222 !
223 IF (lhook) CALL dr_hook('PREP_TEB_GREENROOF',1,zhook_handle)
224 !
225 !-------------------------------------------------------------------------------------
226 !
227 END SUBROUTINE prep_teb_greenroof
real, parameter xundef
subroutine prep_teb_greenroof(DTCO, UG, U, USS, GCP, TG, TOP, IO, S, K, P, PEK, HPROGRAM, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KPATCH, YDCTL)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine prep_hor_teb_greenroof_field(DTCO, UG, U, USS, GCP, IO, S, K, P, PEK, TG, TOP, HPROGRAM, HSURF, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KPATCH, YDCTL)
logical lhook
Definition: yomhook.F90:15
subroutine prep_ver_teb_veg(P, PEK, IO, PZS)
logical lvertshift
real, save xtt
Definition: modd_csts.F90:66