SURFEX v8.1
General documentation of Surfex
init_teb_veg_optionsn.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 init_teb_veg_options_n (CHT, OSURF_DIAG_ALBEDO, OGREENROOF, GDO, GRO, HPROGRAM)
7 !#############################################################
8 !
9 !!**** *INIT_TEB_TEB_VEG_n* - routine to initialize ISBA
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!** METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !! A. Lemonsu *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 09/2009
35 !! B. Decharme 07/2011 : read pgd+prep
36 !! B. Decharme 04/2013 : delete CTOPREG option (never used)
37 !! water table / surface coupling
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 !
45 !
46 USE modd_ch_teb_n, ONLY : ch_teb_t
48 !
49 USE modd_read_namelist, ONLY : lnam_read
50 !
53 !
54 !
55 
56 
57 USE modd_data_cover_par, ONLY: nvegtype
58 USE modd_surf_par, ONLY: xundef, nundef
59 !
60 USE modd_isba_par, ONLY : xoptimgrid
61 !
62 USE modn_teb_n, ONLY : xtstep
63 !
64 USE modi_read_nam_pgd_isba
65 USE modi_default_isba
66 USE modi_default_ch_dep
67 USE modi_default_ch_bio_flux
68 USE modi_default_crocus
69 USE modi_read_default_teb_veg_n
70 USE modi_read_teb_veg_conf_n
71 USE modi_get_luout
73 !
74 USE yomhook ,ONLY : lhook, dr_hook
75 USE parkind1 ,ONLY : jprb
76 !
77 IMPLICIT NONE
78 !
79 !* 0.1 Declarations of arguments
80 ! -------------------------
81 !
82 !
83 !
84 !
85 TYPE(ch_teb_t), INTENT(INOUT) :: CHT
86 LOGICAL, INTENT(OUT) :: OSURF_DIAG_ALBEDO
87 LOGICAL, INTENT(IN) :: OGREENROOF
88 TYPE(isba_options_t), INTENT(INOUT) :: GDO
89 TYPE(isba_options_t), INTENT(INOUT) :: GRO
90 !
91  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
92 !
93 !* 0.2 Declarations of local variables
94 ! -------------------------------
95 !
96 INTEGER :: IVERSION, IBUGFIX ! surface version
97 INTEGER :: ILUOUT ! unit of output listing file
98 INTEGER :: IRESP ! Error code after redding
99  CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read
100  CHARACTER(LEN=4 ) :: YLVL
101 !
102 INTEGER :: JLAYER ! loop counter on layers
103 !
104 REAL :: ZOUT_TSTEP
105  CHARACTER(LEN=3) :: YRAIN
106 LOGICAL :: GCANOPY_DRAG
107 LOGICAL :: GGLACIER
108 LOGICAL :: GFLOOD
109 LOGICAL :: GWTD
110 LOGICAL :: GVEGUPD
111 LOGICAL :: GSPINUPCARBS
112 LOGICAL :: GSPINUPCARBW
113 REAL :: ZSPINMAXS
114 REAL :: ZSPINMAXW
115 REAL :: ZCO2_START
116 REAL :: ZCO2_END
117 INTEGER :: INBYEARSPINS
118 INTEGER :: INBYEARSPINW
119 !
120 INTEGER :: IPATCH ! number of patches
121 INTEGER :: IGROUND_LAYER ! number of soil layers
122 INTEGER :: JVEGTYPE
123  CHARACTER(LEN=3) :: YISBA ! ISBA option
124  CHARACTER(LEN=4) :: YPEDOTF ! Pedo transfert function for DIF
125  CHARACTER(LEN=3) :: YPHOTO ! photosynthesis option
126 LOGICAL :: GTR_ML ! new radiative transfert
127  CHARACTER(LEN=4) :: YALBEDO
128 REAL :: ZRM_PATCH ! threshold to remove little fractions of patches
129  CHARACTER(LEN=28) :: YSAND ! file name for sand fraction
130  CHARACTER(LEN=28) :: YCLAY ! file name for clay fraction
131  CHARACTER(LEN=28) :: YSOC_TOP ! file name for organic carbon top soil
132  CHARACTER(LEN=28) :: YSOC_SUB ! file name for organic carbon sub soil
133  CHARACTER(LEN=28) :: YCTI ! file name for topographic index
134  CHARACTER(LEN=28) :: YRUNOFFB ! file name for runoffb parameter
135  CHARACTER(LEN=28) :: YWDRAIN ! file name for wdrain parameter
136  CHARACTER(LEN=28) :: YPERM ! file name for permafrost distribution
137  CHARACTER(LEN=6) :: YSANDFILETYPE ! sand data file type
138  CHARACTER(LEN=6) :: YCLAYFILETYPE ! clay data file type
139  CHARACTER(LEN=6) :: YSOCFILETYPE ! organic carbon data file type
140  CHARACTER(LEN=6) :: YCTIFILETYPE ! topographic index data file type
141  CHARACTER(LEN=6) :: YRUNOFFBFILETYPE ! subgrid runoff data file type
142  CHARACTER(LEN=6) :: YWDRAINFILETYPE ! subgrid drainage data file type
143  CHARACTER(LEN=6) :: YPERMFILETYPE ! permafrost distribution data file type
144 REAL :: XUNIF_SAND ! uniform value of sand fraction (-)
145 REAL :: XUNIF_CLAY ! uniform value of clay fraction (-)
146 REAL :: XUNIF_SOC_TOP ! uniform value of organic carbon top soil (kg/m2)
147 REAL :: XUNIF_SOC_SUB ! uniform value of organic carbon sub soil (kg/m2)
148 REAL :: XUNIF_RUNOFFB ! uniform value of subgrid runoff coefficient
149 REAL :: XUNIF_WDRAIN ! uniform subgrid drainage parameter
150 REAL :: XUNIF_PERM ! uniform permafrost distribution
151 LOGICAL :: LIMP_SAND ! Imposed maps of Sand
152 LOGICAL :: LIMP_CLAY ! Imposed maps of Clay
153 LOGICAL :: LIMP_SOC ! Imposed maps of organic carbon
154 LOGICAL :: LIMP_CTI ! Imposed maps of topographic index statistics
155 LOGICAL :: LIMP_PERM ! Imposed maps of permafrost distribution
156 REAL, DIMENSION(150) :: ZSOILGRID ! Soil grid reference for DIF
157  CHARACTER(LEN=28) :: YPH ! file name for pH
158  CHARACTER(LEN=28) :: YFERT ! file name for fertilisation rate
159  CHARACTER(LEN=6) :: YPHFILETYPE ! pH data file type
160  CHARACTER(LEN=6) :: YFERTFILETYPE ! fertilisation data file type
161 REAL :: XUNIF_PH ! uniform value of pH
162 REAL :: XUNIF_FERT ! uniform value of fertilisation rate
163 LOGICAL :: GMEB ! Multi-energy balance (MEB)
164 !
165 REAL(KIND=JPRB) :: ZHOOK_HANDLE
166 !
167 !-------------------------------------------------------------------------------
168 !
169 ! Initialisation for IO
170 !
171 IF (lhook) CALL dr_hook('INIT_TEB_VEG_OPTIONS_N',0,zhook_handle)
172  CALL get_luout(hprogram,iluout)
173 !
174 ! Other little things
175 !
176 osurf_diag_albedo = .false.
177 !
178 IF (lnam_read) THEN
179  !
180  !* 1. Defaults
181  ! --------
182  !
183  ! 1.1. Hard defaults
184  !
185  ! Definition of default options for ISBA (in MODD_TEB_VEG_n)
186  ! REM - TSTEP, OUT_TSTEP, CANOPY_DRAG are defined as local variables
187  ! because they are already in init_teb.f90 (these options are
188  ! forced to the same values for TEB and urban green areas)
189  !
190  CALL default_isba(gdo%XTSTEP, gdo%XOUT_TSTEP, gdo%CRUNOFF, &
191  gdo%CSCOND, gdo%CC1DRY, gdo%CSOILFRZ, &
192  gdo%CDIFSFCOND, gdo%CSNOWRES, gdo%CCPSURF, gdo%XCGMAX, &
193  gdo%XCDRAG, gdo%CKSAT, gdo%LSOC, gdo%CRAIN, gdo%CHORT, &
194  gdo%LGLACIER, gdo%LCANOPY_DRAG, gdo%LVEGUPD, gdo%LSPINUPCARBS, &
195  gdo%LSPINUPCARBW, gdo%XSPINMAXS, gdo%XSPINMAXW, gdo%XCO2_START,&
196  gdo%XCO2_END, gdo%NNBYEARSPINS, gdo%NNBYEARSPINW, gdo%LNITRO_DILU )
197  !
198  CALL default_ch_bio_flux(cht%LCH_BIO_FLUX)
199  !
200  CALL default_crocus(gdo%LSNOWDRIFT,gdo%LSNOWDRIFT_SUBLIM,gdo%LSNOW_ABS_ZENITH,&
201  gdo%CSNOWMETAMO,gdo%CSNOWRAD)
202  !
203 ENDIF
204 ! 1.2. Defaults from file header
205 !
206  CALL read_default_teb_veg_n(cht, gdo, hprogram)
207 !
208  CALL read_teb_veg_conf_n(cht, gdo, hprogram)
209 !
210 !-------------------------------------------------------------------------------
211 gdo%NPATCH = 1
212 gdo%CRESPSL = 'DEF'
213 gdo%LMEB_GNDRES = .false.
214 !-------------------------------------------------------------------------------
215 !
216 ! Initialisation for IO
217 !
218 !* 2. Definition of version
219 ! ---------------------
220 !
221 yrecfm='VERSION'
222  CALL read_surf(hprogram,yrecfm,iversion,iresp)
223 !
224 yrecfm='BUG'
225  CALL read_surf(hprogram,yrecfm,ibugfix,iresp)
226 !
227 !* 2. Initialisation of ISBA options
228 ! ------------------------------
229 !
230 !
231 yrecfm='TWN_ISBA'
232 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm='GD_ISBA'
233  CALL read_surf(hprogram,yrecfm,gdo%CISBA,iresp)
234 !
235 IF (iversion>=7) THEN
236  !
237  yrecfm='TWN_PEDOTF'
238  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm='GD_PEDOTF'
239  CALL read_surf(hprogram,yrecfm,gdo%CPEDOTF,iresp)
240  !
241 ELSE
242  gdo%CPEDOTF = 'CH78'
243 ENDIF
244 !
245 yrecfm='TWN_PHOTO'
246 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm='GD_PHOTO'
247  CALL read_surf(hprogram,yrecfm,gdo%CPHOTO,iresp)
248 !
249 yrecfm='TWN_LAYER'
250 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm='GD_LAYER'
251  CALL read_surf(hprogram,yrecfm,gdo%NGROUND_LAYER,iresp)
252 !
253 ALLOCATE(gdo%LMEB_PATCH(1))
254 gdo%LMEB_PATCH(:) = .false.
255 !
256 !* new radiative transfert
257 !
258 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=2) THEN
259  !
260  yrecfm='TWN_TR_ML'
261  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm='GD_TR_ML'
262  CALL read_surf(hprogram,yrecfm,gdo%LTR_ML,iresp)
263  !
264 ELSE
265  gdo%LTR_ML = .false.
266 ENDIF
267 !
268 IF (iversion>8 .OR. iversion==8 .AND. ibugfix>=1) THEN
269  !
270  yrecfm='GD_ALBEDO'
271  CALL read_surf(hprogram,yrecfm,gdo%CALBEDO,iresp)
272  !
273 ELSE
274  !
275  CALL read_nam_pgd_isba(hprogram, ipatch, iground_layer, &
276  yisba, ypedotf, yphoto, gtr_ml, yalbedo, zrm_patch, &
277  yclay, yclayfiletype, xunif_clay, limp_clay, &
278  ysand, ysandfiletype, xunif_sand, limp_sand, &
279  ysoc_top, ysoc_sub, ysocfiletype, xunif_soc_top, &
280  xunif_soc_sub, limp_soc, ycti, yctifiletype, limp_cti, &
281  yperm, ypermfiletype, xunif_perm, limp_perm, gmeb, &
282  yrunoffb, yrunoffbfiletype, xunif_runoffb, &
283  ywdrain, ywdrainfiletype , xunif_wdrain, zsoilgrid, &
284  yph, yphfiletype, xunif_ph, yfert, yfertfiletype, &
285  xunif_fert )
286  gdo%CALBEDO = yalbedo
287  !
288 ENDIF
289 !
290 !* Reference grid for DIF
291 !
292 IF(gdo%CISBA=='DIF') THEN
293  ALLOCATE(gdo%XSOILGRID(gdo%NGROUND_LAYER))
294  gdo%XSOILGRID=xundef
295  IF (iversion>=8) THEN
296  DO jlayer=1,gdo%NGROUND_LAYER
297  WRITE(ylvl,'(I4)') jlayer
298  yrecfm='GD_SGRID'//adjustl(ylvl(:len_trim(ylvl)))
299  CALL read_surf(hprogram,yrecfm,gdo%XSOILGRID(jlayer),iresp)
300  ENDDO
301  ELSEIF (iversion==7 .AND. ibugfix>=2) THEN
302  yrecfm='TWN_SOILGRID'
303  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm='GD_SOILGRID'
304  CALL read_surf(hprogram,yrecfm,gdo%XSOILGRID,iresp,hdir='-')
305  ELSE
306  gdo%XSOILGRID(1:gdo%NGROUND_LAYER)=xoptimgrid(1:gdo%NGROUND_LAYER)
307  ENDIF
308 ELSE
309  ALLOCATE(gdo%XSOILGRID(0))
310 ENDIF
311 !
312 !* number of biomass pools
313 !
314 gdo%NNBIOMASS=1
315 IF (gdo%CPHOTO=='NIT') gdo%NNBIOMASS=3
316 !
317 !-------------------------------------------------------------------------------
318 !
319 IF (ogreenroof) THEN
320  !
321  gro%NPATCH = 1
322  ALLOCATE(gro%LMEB_PATCH(1))
323  gro%LMEB_PATCH(:) = .false.
324  gro%CRESPSL = gdo%CRESPSL
325  !
326  yrecfm='GR_ISBA'
327  CALL read_surf(hprogram,yrecfm,gro%CISBA,iresp)
328  !
329  gro%CPEDOTF = gdo%CPEDOTF
330  gro%CPHOTO = gdo%CPHOTO
331  !
332  yrecfm='GR_LAYER'
333  CALL read_surf( hprogram,yrecfm,gro%NGROUND_LAYER,iresp)
334  !
335  gro%LTR_ML = .false.
336  !
337  gro%NNBIOMASS = gdo%NNBIOMASS
338  !
339  yrecfm='GR_SCOND'
340  CALL read_surf(hprogram,yrecfm,gro%CSCOND,iresp)
341  !
342  gro%XTSTEP = gdo%XTSTEP
343  gro%XOUT_TSTEP = gdo%XOUT_TSTEP
344  gro%CRUNOFF = gdo%CRUNOFF
345  gro%CALBEDO = gdo%CALBEDO
346  gro%CC1DRY = gdo%CC1DRY
347  gro%CSOILFRZ = gdo%CSOILFRZ
348  gro%CDIFSFCOND = gdo%CDIFSFCOND
349  gro%CSNOWRES = gdo%CSNOWRES
350  gro%CCPSURF = gdo%CCPSURF
351  gro%XCGMAX = gdo%XCGMAX
352  gro%XCDRAG = gdo%XCDRAG
353  gro%CKSAT = gdo%CKSAT
354  gro%LSOC = gdo%LSOC
355  gro%CRAIN = gdo%CRAIN
356  gro%CHORT = gdo%CHORT
357  gro%LGLACIER = gdo%LGLACIER
358  gro%LCANOPY_DRAG = gdo%LCANOPY_DRAG
359  gro%LVEGUPD = gdo%LVEGUPD
360  gro%LSPINUPCARBS = gdo%LSPINUPCARBS
361  gro%LSPINUPCARBW = gdo%LSPINUPCARBW
362  gro%XSPINMAXS = gdo%XSPINMAXS
363  gro%XSPINMAXW = gdo%XSPINMAXW
364  gro%XCO2_START = gdo%XCO2_START
365  gro%XCO2_END = gdo%XCO2_END
366  gro%NNBYEARSPINS = gdo%NNBYEARSPINS
367  gro%NNBYEARSPINW = gdo%NNBYEARSPINW
368  gro%LNITRO_DILU = gdo%LNITRO_DILU
369  !
370  gro%LSNOWDRIFT = gdo%LSNOWDRIFT
371  gro%LSNOWDRIFT_SUBLIM = gdo%LSNOWDRIFT_SUBLIM
372  gro%LSNOW_ABS_ZENITH = gdo%LSNOW_ABS_ZENITH
373  gro%CSNOWMETAMO = gdo%CSNOWMETAMO
374  gro%CSNOWRAD = gdo%CSNOWRAD
375  !
376  gro%LMEB_GNDRES = gdo%LMEB_GNDRES
377 ENDIF
378 !
379 !-------------------------------------------------------------------------------
380 !
381 !
382 IF (lhook) CALL dr_hook('INIT_TEB_VEG_OPTIONS_N',1,zhook_handle)
383 END SUBROUTINE init_teb_veg_options_n
real xtstep
Definition: modn_tebn.F90:64
subroutine default_isba(PTSTEP, POUT_TSTEP,
Definition: default_isba.F90:7
subroutine read_nam_pgd_isba(HPROGRAM, KPATCH, KGROUND_LAYER,
real, parameter xundef
subroutine read_teb_veg_conf_n(CHT, IO, HPROGRAM)
subroutine init_teb_veg_options_n(CHT, OSURF_DIAG_ALBEDO, OGREENROOF, GDO, GRO, HPROGRAM)
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
subroutine default_crocus(OSNOWDRIFT, OSNOWDRIFT_SUBLIM, OSNOW_ABS_Z
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine read_default_teb_veg_n(CHT, IO, HPROGRAM)
subroutine default_ch_bio_flux(OCH_BIO_FLUX)