SURFEX v8.1
General documentation of Surfex
pgd_teb_garden_par.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 pgd_teb_garden_par (DTCO, UG, U, USS, KDIM, IO, DTV, HPROGRAM)
7 ! ##############################################################
8 !
9 !!**** *PGD_TEB_GARDEN_PAR* monitor for averaging and interpolations of cover fractions
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !! METHOD
15 !! ------
16 !!
17 !
18 !! EXTERNAL
19 !! --------
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !! AUTHOR
28 !! ------
29 !!
30 !! A. Lemonsu Meteo-France
31 !!
32 !! MODIFICATION
33 !! ------------
34 !!
35 !! Original 09/2009
36 !!
37 !----------------------------------------------------------------------------
38 !
39 !* 0. DECLARATION
40 ! -----------
41 !
42 !
43 !
46 USE modd_surf_atm_n, ONLY : surf_atm_t
47 USE modd_sso_n, ONLY : sso_t
48 !
50 USE modd_data_isba_n, ONLY : data_isba_t
51 !
52 USE modd_data_cover_par, ONLY : nvegtype
53 USE modd_surf_par, ONLY : xundef
54 !
55 USE modd_pgdwork, ONLY : catype
56 !
57 USE modi_get_luout
58 USE modi_open_namelist
59 USE modi_close_namelist
61 USE modi_abor1_sfx
62 !
63 USE mode_pos_surf
64 !
65 !
66 USE yomhook ,ONLY : lhook, dr_hook
67 USE parkind1 ,ONLY : jprb
68 !
69 IMPLICIT NONE
70 !
71 !* 0.1 Declaration of arguments
72 ! ------------------------
73 !
74 !
75 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
76 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
77 TYPE(surf_atm_t), INTENT(INOUT) :: U
78 TYPE(sso_t), INTENT(INOUT) :: USS
79 INTEGER, INTENT(IN) :: KDIM
80 TYPE(isba_options_t), INTENT(INOUT) :: IO
81 TYPE(data_isba_t), INTENT(INOUT) :: DTV
82 !
83  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program
84 !
85 !
86 !* 0.2 Declaration of local variables
87 ! ------------------------------
88 !
89 INTEGER :: ILUOUT ! output listing logical unit
90 INTEGER :: ILUNAM ! namelist file logical unit
91 LOGICAL :: GFOUND ! true if namelist is found
92 LOGICAL :: GNO_PAR_GARDEN ! true no fraction is prescribed
93 INTEGER :: JTIME ! loop counter on time
94 !
95 !* 0.3 Declaration of namelists
96 ! ------------------------
97 !
98 INTEGER :: NTIME_GD
99 INTEGER, PARAMETER :: NGROUND_MAX = 20
100 INTEGER, PARAMETER :: NVEGTYPE_MAX = 19
101 INTEGER, PARAMETER :: NTIME_MAX = 12
102 !
103 ! type of vegetation
104 !
105  CHARACTER(LEN=4) :: CTYP_GARDEN_HVEG ! type of high vegetation
106  CHARACTER(LEN=4) :: CTYP_GARDEN_LVEG ! type of low vegetation
107  CHARACTER(LEN=4) :: CTYP_GARDEN_NVEG ! type of bare soil
108 !
109 ! uniform value
110 !
111 REAL :: XUNIF_FRAC_HVEG ! fractions of high vegetation
112 REAL :: XUNIF_FRAC_LVEG ! fractions of low vegetation
113 REAL :: XUNIF_FRAC_NVEG ! fractions of bare soil
114 REAL,DIMENSION(NTIME_MAX) :: XUNIF_LAI_HVEG ! LAI of high vegetation
115 REAL,DIMENSION(NTIME_MAX) :: XUNIF_LAI_LVEG ! LAI of low vegetation
116 REAL :: XUNIF_H_HVEG ! height of trees
117 !
118 ! name of files containing data
119 !
120  CHARACTER(LEN=28) :: CFNAM_FRAC_HVEG ! fractions of high vegetation
121  CHARACTER(LEN=28) :: CFNAM_FRAC_LVEG ! fractions of low vegetation
122  CHARACTER(LEN=28) :: CFNAM_FRAC_NVEG ! fractions of bare soil
123  CHARACTER(LEN=28),DIMENSION(NTIME_MAX) :: CFNAM_LAI_HVEG ! LAI of high vegetation
124  CHARACTER(LEN=28),DIMENSION(NTIME_MAX) :: CFNAM_LAI_LVEG ! LAI of low vegetation
125  CHARACTER(LEN=28) :: CFNAM_H_HVEG ! height of trees
126 !
127 ! type of files containing data
128 !
129  CHARACTER(LEN=28) :: CFTYP_FRAC_HVEG ! fractions of high vegetation
130  CHARACTER(LEN=28) :: CFTYP_FRAC_LVEG ! fractions of low vegetation
131  CHARACTER(LEN=28) :: CFTYP_FRAC_NVEG ! fractions of bare soil
132  CHARACTER(LEN=28),DIMENSION(NTIME_MAX) :: CFTYP_LAI_HVEG ! LAI of high vegetation
133  CHARACTER(LEN=28),DIMENSION(NTIME_MAX) :: CFTYP_LAI_LVEG ! LAI of low vegetation
134  CHARACTER(LEN=28) :: CFTYP_H_HVEG ! height of trees
135 !
136 REAL(KIND=JPRB) :: ZHOOK_HANDLE
137 !
138 NAMELIST/nam_data_teb_garden/ ntime_gd, &
139  ctyp_garden_hveg, ctyp_garden_lveg, &
140  ctyp_garden_nveg, &
141  xunif_frac_hveg, xunif_frac_lveg, xunif_frac_nveg, &
142  xunif_lai_hveg , xunif_lai_lveg , &
143  xunif_h_hveg , &
144  cfnam_frac_hveg, cfnam_frac_lveg, cfnam_frac_nveg, &
145  cfnam_lai_hveg , cfnam_lai_lveg , &
146  cfnam_h_hveg , &
147  cftyp_frac_hveg, cftyp_frac_lveg, cftyp_frac_nveg, &
148  cftyp_lai_hveg , cftyp_lai_lveg , &
149  cftyp_h_hveg
150 
151 !-------------------------------------------------------------------------------
152 !
153 !* 1. Initializations
154 ! ---------------
155 !
156 IF (lhook) CALL dr_hook('PGD_TEB_GARDEN_PAR',0,zhook_handle)
157 
158 ntime_gd = 12
159 !
160 CTYP_GARDEN_HVEG = 'TEBD' ! Temperate broadleaf trees (forest)
161 CTYP_GARDEN_LVEG = 'PARK' ! Grassland
162 CTYP_GARDEN_NVEG = 'NO ' ! No vegetation
163 !
164 xunif_frac_hveg = xundef
165 xunif_frac_lveg = xundef
166 xunif_frac_nveg = xundef
167 xunif_lai_hveg = xundef
168 xunif_lai_lveg = xundef
169 xunif_h_hveg = xundef
170 !
171 CFNAM_FRAC_HVEG = ' '
172 CFNAM_FRAC_LVEG = ' '
173 CFNAM_FRAC_NVEG = ' '
174 CFNAM_LAI_HVEG = ' '
175 CFNAM_LAI_LVEG = ' '
176 CFNAM_H_HVEG = ' '
177 !
178 CFTYP_FRAC_HVEG = ' '
179 CFTYP_FRAC_LVEG = ' '
180 CFTYP_FRAC_NVEG = ' '
181 CFTYP_LAI_HVEG = ' '
182 CFTYP_LAI_LVEG = ' '
183 CFTYP_H_HVEG = ' '
184 !
185 !-------------------------------------------------------------------------------
186 dtv%NTIME = 12
187 !-------------------------------------------------------------------------------
188 !
189 !* 2. Input file for cover types
190 ! --------------------------
191 !
192  CALL get_luout(hprogram,iluout)
193  CALL open_namelist(hprogram,ilunam)
194 !
195  CALL posnam(ilunam,'NAM_DATA_TEB_GARDEN',gfound,iluout)
196 IF (gfound) READ(unit=ilunam,nml=nam_data_teb_garden)
197 !
198  CALL close_namelist(hprogram,ilunam)
199 !
200 IF (ntime_gd==1) THEN
201  xunif_lai_hveg(2:) = xunif_lai_hveg(1)
202  xunif_lai_lveg(2:) = xunif_lai_lveg(1)
203 ELSE IF (ntime_gd/=12) THEN
204  CALL abor1_sfx( 'Namelist NAM_DATA_TEB_GARDEN: NTIME_GD must be equal to 1 or 12')
205 END IF
206 !-------------------------------------------------------------------------------
207 !
208 !* 3. Coherence check
209 ! ---------------
210 !
211 io%LPAR = (xunif_frac_hveg /= xundef .OR. len_trim(cfnam_frac_hveg) >0 )&
212  .AND. (xunif_frac_lveg /= xundef .OR. len_trim(cfnam_frac_lveg) >0 )&
213  .AND. (xunif_frac_nveg /= xundef .OR. len_trim(cfnam_frac_nveg) >0 )
214 
215 gno_par_garden = (xunif_frac_hveg == xundef .AND. len_trim(cfnam_frac_hveg)==0)&
216  .AND. (xunif_frac_lveg == xundef .AND. len_trim(cfnam_frac_lveg)==0)&
217  .AND. (xunif_frac_nveg == xundef .AND. len_trim(cfnam_frac_nveg)==0)
218 
219 IF ( .NOT. io%LPAR .AND. .NOT. gno_par_garden ) THEN
220  WRITE(iluout,*) ' Error for fraction of high, low and no vegetation fractions in gardens '
221  WRITE(iluout,*) ' You need to specify the three of them ... or none. '
222  CALL abor1_sfx( 'Namelist NAM_DATA_TEB_GARDEN: you need to specify all of HVEG, LVEG, NVEG fractions or NONE of them')
223 END IF
224 !
225 IF (gno_par_garden) THEN
226  IF (lhook) CALL dr_hook('PGD_TEB_GARDEN_PAR',1,zhook_handle)
227  RETURN
228 END IF
229 !
230 !-------------------------------------------------------------------------------
231 !
232 dtv%NTIME = ntime_gd
233 !
234 ALLOCATE(dtv%XPAR_FRAC_HVEG (kdim ))
235 ALLOCATE(dtv%XPAR_FRAC_LVEG (kdim ))
236 ALLOCATE(dtv%XPAR_FRAC_NVEG (kdim ))
237 ALLOCATE(dtv%XPAR_LAI_HVEG (kdim,dtv%NTIME))
238 ALLOCATE(dtv%XPAR_LAI_LVEG (kdim,dtv%NTIME))
239 ALLOCATE(dtv%XPAR_H_HVEG (kdim ))
240 !
241 io%CTYPE_HVEG = ctyp_garden_hveg
242 io%CTYPE_LVEG = ctyp_garden_lveg
243 io%CTYPE_NVEG = ctyp_garden_nveg
244 !
245 !-------------------------------------------------------------------------------
246 !
247 !* 3. Uniform fields are prescribed
248 ! -----------------------------
249 !
250 CATYPE = 'ARI'
251 !
252  CALL pgd_field(dtco, ug, u, uss, &
253  hprogram,'FRAC_HVEG: fraction of high vegetation','TWN',cfnam_frac_hveg, &
254  cftyp_frac_hveg,xunif_frac_hveg,dtv%XPAR_FRAC_HVEG(:))
255 !
256  CALL pgd_field(dtco, ug, u, uss, &
257  hprogram,'FRAC_LVEG: fraction of low vegetation' ,'TWN',cfnam_frac_lveg, &
258  cftyp_frac_lveg,xunif_frac_lveg,dtv%XPAR_FRAC_LVEG(:))
259 !
260  CALL pgd_field(dtco, ug, u, uss, &
261  hprogram,'FRAC_NVEG: fraction of bare soil' ,'TWN',cfnam_frac_nveg, &
262  cftyp_frac_nveg,xunif_frac_nveg,dtv%XPAR_FRAC_NVEG(:))
263 !
264 !
265 DO jtime=1,dtv%NTIME
266 !
267  CALL pgd_field(dtco, ug, u, uss, &
268  hprogram,'LAI_HVEG: LAI of high vegetation','TWN',cfnam_lai_hveg(jtime), &
269  cftyp_lai_hveg(jtime),xunif_lai_hveg(jtime),dtv%XPAR_LAI_HVEG(:,jtime))
270 !
271  CALL pgd_field(dtco, ug, u, uss, &
272  hprogram,'LAI_LVEG: LAI of low vegetation','TWN',cfnam_lai_lveg(jtime), &
273  cftyp_lai_lveg(jtime),xunif_lai_lveg(jtime),dtv%XPAR_LAI_LVEG(:,jtime))
274 !
275 !
276 ENDDO
277 !
278 !
279  CALL pgd_field(dtco, ug, u, uss, &
280  hprogram,'H_HVEG: height of trees','TWN',cfnam_h_hveg, &
281  cftyp_h_hveg,xunif_h_hveg,dtv%XPAR_H_HVEG(:))
282 IF (lhook) CALL dr_hook('PGD_TEB_GARDEN_PAR',1,zhook_handle)
283 !
284 !-------------------------------------------------------------------------------
285 !
286 END SUBROUTINE pgd_teb_garden_par
character(len=3) catype
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine pgd_teb_garden_par(DTCO, UG, U, USS, KDIM, IO, DTV, HP
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)