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