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