SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_teb_gardenn.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 read_teb_garden_n (DTCO, DGU, U, GDM, &
7  hprogram,hpatch)
8 ! ##################################
9 !
10 !!**** *READ_TEB_GARDEN_n* - routine to initialise ISBA variables
11 !!
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 !! V. Masson *Meteo France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/2003
37 !!
38 !! READ_SURF for general reading : 08/2003 (S.Malardel)
39 !! B. Decharme 2008 : Floodplains
40 !! B. Decharme 01/2009 : Optional Arpege deep soil temperature read
41 !! B. Decharme 09/2012 : suppress NWG_LAYER (parallelization problems)
42 !-------------------------------------------------------------------------------
43 !
44 !* 0. DECLARATIONS
45 ! ------------
46 !
47 !
48 !
51 USE modd_surf_atm_n, ONLY : surf_atm_t
53 !
54 USE modd_co2v_par, ONLY : xanfminit, xcondctmin
55 !
56 USE modd_surf_par, ONLY : xundef, nundef
57 USE modd_snow_par, ONLY : xz0sn
58 !
60 !
61 USE modi_init_io_surf_n
62 USE modi_set_surfex_filein
63 USE modi_end_io_surf_n
64 USE modi_town_presence
65 USE modi_allocate_gr_snow
66 USE modi_read_gr_snow
67 !
68 USE yomhook ,ONLY : lhook, dr_hook
69 USE parkind1 ,ONLY : jprb
70 !
71 USE modi_get_type_dim_n
72 !
73 IMPLICIT NONE
74 !
75 !* 0.1 Declarations of arguments
76 ! -------------------------
77 !
78 TYPE(data_cover_t), INTENT(INOUT) :: dtco
79 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
80 TYPE(surf_atm_t), INTENT(INOUT) :: u
81 TYPE(teb_garden_model_t), INTENT(INOUT) :: gdm
82 !
83  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
84  CHARACTER(LEN=3), INTENT(IN) :: hpatch ! current TEB patch identificator
85 !
86 !* 0.2 Declarations of local variables
87 ! -------------------------------
88 !
89 LOGICAL :: gtown ! town variables written in the file
90 INTEGER :: iversion, ibugfix
91 INTEGER :: ilu ! 1D physical dimension
92 INTEGER :: iresp ! Error code after redding
93  CHARACTER(LEN=12) :: yrecfm ! Name of the article to be read
94  CHARACTER(LEN=4) :: ylvl
95 REAL, DIMENSION(:),ALLOCATABLE :: zwork ! 2D array to write data in file
96 !
97 INTEGER :: iwork ! Work integer
98 !
99 INTEGER :: jlayer, jnbiomass ! loop counter on layers
100 REAL(KIND=JPRB) :: zhook_handle
101 !
102 !-------------------------------------------------------------------------------
103 !
104 !
105 !* 1D physical dimension
106 !
107 IF (lhook) CALL dr_hook('READ_TEB_GARDEN_N',0,zhook_handle)
108 yrecfm='SIZE_TOWN'
109  CALL get_type_dim_n(dtco, u, &
110  'TOWN ',ilu)
111 !
112 yrecfm='VERSION'
113  CALL read_surf(&
114  hprogram,yrecfm,iversion,iresp)
115 !
116 yrecfm='BUG'
117  CALL read_surf(&
118  hprogram,yrecfm,ibugfix,iresp)
119 !
120 !* 2. Prognostic fields:
121 ! -----------------
122 !
123 ALLOCATE(zwork(ilu))
124 !* soil temperatures
125 !
126 iwork=gdm%TGDO%NGROUND_LAYER
127 !
128 ALLOCATE(gdm%TGD%CUR%XTG(ilu,iwork))
129 DO jlayer=1,iwork
130  WRITE(ylvl,'(I2)') jlayer
131  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
132  yrecfm=hpatch//'GD_TG'//adjustl(ylvl(:len_trim(ylvl)))
133  ELSE
134  yrecfm='TWN_TG'//adjustl(ylvl(:len_trim(ylvl)))
135  ENDIF
136  yrecfm=adjustl(yrecfm)
137  CALL read_surf(&
138  hprogram,yrecfm,zwork(:),iresp)
139  gdm%TGD%CUR%XTG(:,jlayer)=zwork
140 END DO
141 !
142 !
143 !* soil liquid water content
144 !
145 ALLOCATE(gdm%TGD%CUR%XWG(ilu,iwork))
146 DO jlayer=1,gdm%TGDO%NGROUND_LAYER
147  WRITE(ylvl,'(I2)') jlayer
148  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
149  yrecfm=hpatch//'GD_WG'//adjustl(ylvl(:len_trim(ylvl)))
150  ELSE
151  yrecfm='TWN_WG'//adjustl(ylvl(:len_trim(ylvl)))
152  ENDIF
153  yrecfm=adjustl(yrecfm)
154  CALL read_surf(&
155  hprogram,yrecfm,zwork(:),iresp)
156  gdm%TGD%CUR%XWG(:,jlayer)=zwork
157 END DO
158 !
159 !* soil ice water content
160 !
161 ALLOCATE(gdm%TGD%CUR%XWGI(ilu,iwork))
162 DO jlayer=1,gdm%TGDO%NGROUND_LAYER
163  WRITE(ylvl,'(I2)') jlayer
164 ! ajouter ici un test pour lire les anciens fichiers
165  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
166  yrecfm=hpatch//'GD_WGI'//adjustl(ylvl(:len_trim(ylvl)))
167  ELSE
168  yrecfm='TWN_WGI'//adjustl(ylvl(:len_trim(ylvl)))
169  ENDIF
170  yrecfm=adjustl(yrecfm)
171  CALL read_surf(&
172  hprogram,yrecfm,zwork(:),iresp)
173  gdm%TGD%CUR%XWGI(:,jlayer)=zwork
174 END DO
175 !
176 !* water intercepted on leaves
177 !
178 ALLOCATE(gdm%TGD%CUR%XWR(ilu))
179 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
180  yrecfm=hpatch//'GD_WR'
181 ELSE
182  yrecfm='TWN_WR'
183 ENDIF
184 yrecfm=adjustl(yrecfm)
185  CALL read_surf(&
186  hprogram,yrecfm,gdm%TGD%CUR%XWR(:),iresp)
187 !
188 !* Leaf Area Index (if prognostic)
189 !
190 IF (gdm%TVG%CPHOTO=='LAI' .OR. gdm%TVG%CPHOTO=='LST' .OR. &
191  gdm%TVG%CPHOTO=='NIT' .OR. gdm%TVG%CPHOTO=='NCB') THEN
192  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
193  yrecfm=hpatch//'GD_LAI'
194  ELSE
195  yrecfm='TWN_LAI'
196  ENDIF
197  yrecfm=adjustl(yrecfm)
198  CALL read_surf(&
199  hprogram,yrecfm,gdm%TGDPE%CUR%XLAI(:),iresp)
200 END IF
201 !
202 !* snow mantel
203 !
204  CALL end_io_surf_n(hprogram)
205  CALL set_surfex_filein(hprogram,'PGD ')
206  CALL init_io_surf_n(dtco, dgu, u, &
207  hprogram,'TOWN ','TEB ','READ ')
208 !
209  CALL town_presence(&
210  hprogram,gtown)
211 !
212  CALL end_io_surf_n(hprogram)
213  CALL set_surfex_filein(hprogram,'PREP')
214  CALL init_io_surf_n(dtco, dgu, u, &
215  hprogram,'TOWN ','TEB ','READ ')
216 !
217 IF (.NOT. gtown) THEN
218  gdm%TGD%CUR%TSNOW%SCHEME='1-L'
219  CALL allocate_gr_snow(gdm%TGD%CUR%TSNOW,ilu,1)
220 ELSE
221  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
222  CALL read_gr_snow(&
223  hprogram,'GD',hpatch,ilu,1,gdm%TGD%CUR%TSNOW )
224  ELSE
225  CALL read_gr_snow(&
226  hprogram,'GARD',hpatch,ilu,1,gdm%TGD%CUR%TSNOW )
227  ENDIF
228 ENDIF
229 !
230 !-------------------------------------------------------------------------------
231 !
232 !* 4. Semi-prognostic variables
233 ! -------------------------
234 !
235 !* aerodynamical resistance
236 !
237 ALLOCATE(gdm%TGD%CUR%XRESA(ilu))
238 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
239  yrecfm=hpatch//'GD_RES'
240 ELSE
241  yrecfm='TWN_RESA'
242 ENDIF
243 yrecfm=adjustl(yrecfm)
244 gdm%TGD%CUR%XRESA(:) = 100.
245  CALL read_surf(&
246  hprogram,yrecfm,gdm%TGD%CUR%XRESA(:),iresp)
247 !
248 ALLOCATE(gdm%TGD%CUR%XLE(ilu))
249 gdm%TGD%CUR%XLE(:) = xundef
250 !
251 !* ISBA-AGS variables
252 !
253 IF (gdm%TVG%CPHOTO/='NON') THEN
254  ALLOCATE(gdm%TGD%CUR%XAN (ilu))
255  ALLOCATE(gdm%TGD%CUR%XANDAY(ilu))
256  ALLOCATE(gdm%TGD%CUR%XANFM (ilu))
257  ALLOCATE(gdm%TGDP%XANF (ilu))
258  gdm%TGD%CUR%XAN(:) = 0.
259  gdm%TGD%CUR%XANDAY(:) = 0.
260  gdm%TGD%CUR%XANFM(:) = xanfminit
261  gdm%TGD%CUR%XLE(:) = 0.
262 ELSE
263  ALLOCATE(gdm%TGD%CUR%XAN (0))
264  ALLOCATE(gdm%TGD%CUR%XANDAY(0))
265  ALLOCATE(gdm%TGD%CUR%XANFM (0))
266  ALLOCATE(gdm%TGDP%XANF (0))
267 ENDIF
268 !
269 IF(gdm%TVG%CPHOTO/='NON') THEN
270  ALLOCATE(gdm%TGD%CUR%XBIOMASS (ilu,gdm%TVG%NNBIOMASS))
271  ALLOCATE(gdm%TGD%CUR%XRESP_BIOMASS (ilu,gdm%TVG%NNBIOMASS))
272 ELSE
273  ALLOCATE(gdm%TGD%CUR%XBIOMASS (0,0))
274  ALLOCATE(gdm%TGD%CUR%XRESP_BIOMASS (0,0))
275 END IF
276 !
277 IF (gdm%TVG%CPHOTO=='AGS' .OR. gdm%TVG%CPHOTO=='AST') THEN
278  !
279  gdm%TGD%CUR%XBIOMASS(:,:) = 0.
280  gdm%TGD%CUR%XRESP_BIOMASS(:,:) = 0.
281 ELSEIF (gdm%TVG%CPHOTO=='LAI' .OR. gdm%TVG%CPHOTO=='LST') THEN
282  !
283  gdm%TGD%CUR%XBIOMASS(:,1) = gdm%TGDP%XBSLAI(:) * gdm%TGDPE%CUR%XLAI(:)
284  gdm%TGD%CUR%XRESP_BIOMASS(:,:) = 0.
285 ELSEIF (gdm%TVG%CPHOTO=='NIT' .OR. gdm%TVG%CPHOTO=='NCB') THEN
286  !
287  gdm%TGD%CUR%XBIOMASS(:,:) = 0.
288  DO jnbiomass=1,gdm%TVG%NNBIOMASS
289  WRITE(ylvl,'(I1)') jnbiomass
290  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
291  yrecfm=hpatch//'GD_BIOMA'//adjustl(ylvl(:len_trim(ylvl)))
292  ELSE
293  yrecfm='TWN_BIOMASS'//adjustl(ylvl(:len_trim(ylvl)))
294  ENDIF
295  yrecfm=adjustl(yrecfm)
296  CALL read_surf(&
297  hprogram,yrecfm,gdm%TGD%CUR%XBIOMASS(:,jnbiomass),iresp)
298  END DO
299 
300  gdm%TGD%CUR%XRESP_BIOMASS(:,:) = 0.
301  DO jnbiomass=2,gdm%TVG%NNBIOMASS
302  WRITE(ylvl,'(I1)') jnbiomass
303  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) THEN
304  yrecfm=hpatch//'GD_RESPI'//adjustl(ylvl(:len_trim(ylvl)))
305  ELSE
306  yrecfm='TWN_RESP_BIOM'//adjustl(ylvl(:len_trim(ylvl)))
307  ENDIF
308  yrecfm=adjustl(yrecfm)
309  CALL read_surf(&
310  hprogram,yrecfm,gdm%TGD%CUR%XRESP_BIOMASS(:,jnbiomass),iresp)
311  END DO
312  !
313 ENDIF
314 !
315 DEALLOCATE(zwork)
316 IF (lhook) CALL dr_hook('READ_TEB_GARDEN_N',1,zhook_handle)
317 !
318 !-------------------------------------------------------------------------------
319 !
320 END SUBROUTINE read_teb_garden_n
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine read_teb_garden_n(DTCO, DGU, U, GDM, HPROGRAM, HPATCH)
subroutine allocate_gr_snow(TPSNOW, KLU, KPATCH)
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:6
subroutine town_presence(HFILETYPE, OTEB)
subroutine read_gr_snow(HPROGRAM, HSURFTYPE, HPREFIX, KLU, KPATCH, TPSNOW, HDIR, KVERSION, KBUGFIX)
Definition: read_gr_snow.F90:6