SURFEX v8.1
General documentation of Surfex
init_teb_garden_pgdn.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_garden_pgd_n (DTCO, U, OCH_BIO_FLUX, G, PGARDEN, TOP, IO, S, K, P, PEK, DTV, GB, &
7  HPROGRAM, HINIT, OPATCH1, KI, KVERSION, KBUGFIX, PCO2, PRHOA)
8 !#############################################################
9 !
10 !!**** *INIT_TEB_GARDEN_PGD_n* - routine to initialize ISBA
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !&
25 !
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! A. Lemonsu *Meteo France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 09/2009
37 !! 11/2013 (B. Decharme) No exp profile with DIF
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
45 USE modd_surf_atm_n, ONLY : surf_atm_t
46 USE modd_sso_n, ONLY : sso_t, sso_init
47 USE modd_sfx_grid_n, ONLY : grid_t
49 !
52 !
53 USE modd_data_isba_n, ONLY : data_isba_t
54 USE modd_gr_biog_n, ONLY : gr_biog_t
55 !
56 USE modd_agri_n, ONLY : agri_t
57 !
60 !
61 USE modd_data_cover_par, ONLY: nvegtype
62 USE modd_surf_par,ONLY: xundef, nundef
63 
64 USE modd_sgh_par, ONLY: xf_decay
65 !
66 USE modi_read_prep_garden_snow
67 USE modi_get_luout
68 USE modi_allocate_teb_veg_pgd
69 USE modi_read_pgd_teb_garden_n
70 USE modi_convert_patch_isba
71 USE modi_init_from_data_teb_veg_n
72 USE modi_init_veg_pgd_n
73 USE modi_exp_decay_soil_fr
74 USE modi_abor1_sfx
75 USE modi_av_pgd
76 !
77 USE mode_teb_veg
78 !
79 USE yomhook ,ONLY : lhook, dr_hook
80 USE parkind1 ,ONLY : jprb
81 !
82 IMPLICIT NONE
83 !
84 !* 0.1 Declarations of arguments
85 ! -------------------------
86 !
87 !
88 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
89 TYPE(surf_atm_t), INTENT(INOUT) :: U
90 LOGICAL, INTENT(IN) :: OCH_BIO_FLUX
91 TYPE(grid_t), INTENT(INOUT) :: G
92 REAL, DIMENSION(:), INTENT(IN) :: PGARDEN
93 TYPE(teb_options_t), INTENT(INOUT) :: TOP
94 !
95 TYPE(isba_options_t), INTENT(INOUT) :: IO
96 TYPE(isba_s_t), INTENT(INOUT) :: S
97 TYPE(isba_k_t), INTENT(INOUT) :: K
98 TYPE(isba_p_t), INTENT(INOUT) :: P
99 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
100 !
101 TYPE(data_isba_t), INTENT(INOUT) :: DTV
102 TYPE(gr_biog_t), INTENT(INOUT) :: GB
103 !
104  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
105  CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize
106 LOGICAL, INTENT(IN) :: OPATCH1 ! flag to read PGD fields in the file
107 INTEGER, INTENT(IN) :: KI! number of points
108 INTEGER, INTENT(IN) :: KVERSION ! version number of the file being read
109 INTEGER, INTENT(IN) :: KBUGFIX
110 REAL, DIMENSION(KI), INTENT(IN) :: PCO2! CO2 concentration (kg/m3)
111 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density
112 !
113 !
114 !
115 !* 0.2 Declarations of local variables
116 ! -------------------------------
117 !
118 TYPE(sso_t) :: YSS
119 TYPE(agri_t) :: YAG
120 !
121 INTEGER :: JILU ! loop increment
122 INTEGER :: ILUOUT ! unit of output listing file
123 !
124 INTEGER :: IDECADE ! decade of simulation
125 !
126 INTEGER :: JVEG, JI ! loop counter on vegtypes
127 !
128 REAL, DIMENSION(KI) :: ZF
129 REAL, DIMENSION(KI) :: ZWORK
130 !
131 REAL, DIMENSION(0) :: ZTDEEP_CLI, ZGAMMAT_CLI, ZTHRESHOLD
132 !
133 REAL(KIND=JPRB) :: ZHOOK_HANDLE
134 !
135 !-------------------------------------------------------------------------------
136 !
137 ! Initialisation for IO
138 !
139 IF (lhook) CALL dr_hook('INIT_TEB_GARDEN_PGD_n',0,zhook_handle)
140 !
141  CALL get_luout(hprogram,iluout)
142 !
143  CALL sso_init(yss)
144 !
145 !* 1. Reading of snow configuration:
146 ! ------------------------------
147 !
148 !* initialization of snow scheme (TSNOW defined in MODD_TEB_GARDEN_n)
149 !
150 IF (hinit=='PRE') THEN
151  CALL read_prep_garden_snow(hprogram,pek%TSNOW%SCHEME,pek%TSNOW%NLAYER)
152 !
153  IF (pek%TSNOW%SCHEME.NE.'3-L' .AND. pek%TSNOW%SCHEME.NE.'CRO' .AND. io%CISBA=='DIF') THEN
154  CALL abor1_sfx("INIT_TEB_GARDEN_n: WITH CISBA = DIF, CSNOW MUST BE 3-L OR CRO")
155  ENDIF
156 ENDIF
157 !
158 !-------------------------------------------------------------------------------
159 !
160 !* 2. Physiographic fields
161 ! --------------------
162 !
163 !* allocation of urban green area variables
164 !
165  CALL allocate_teb_veg_pgd(pek, s, k, p, opatch1, ki, nvegtype, io%NGROUND_LAYER )
166 !
167 !
168 !* 2.1 Cover, soil and orographic fields:
169 ! ---------------------------------
170 !
171 IF (top%TTIME%TDATE%MONTH /= nundef) THEN
172  idecade = 3 * ( top%TTIME%TDATE%MONTH - 1 ) + min(top%TTIME%TDATE%DAY-1,29) / 10 + 1
173 ELSE
174  idecade = 1
175 END IF
176 !
177 IF (opatch1) THEN
178  !
179  CALL read_pgd_teb_garden_n(och_bio_flux, dtco, dtv, gb, u, &
180  io, k, g%NDIM, top, hprogram,kversion,kbugfix)
181  !
182  ALLOCATE(s%XVEGTYPE(ki,nvegtype))
183  IF (io%LPAR) THEN
184  s%XVEGTYPE = dtv%XPAR_VEGTYPE
185  ELSE
186  !classical ecoclimap case
187  DO jveg=1,nvegtype
188  CALL av_pgd(dtco, s%XVEGTYPE(:,jveg),top%XCOVER ,dtco%XDATA_VEGTYPE(:,jveg),'GRD','ARI',top%LCOVER)
189  END DO
190  ENDIF
191  DO jveg=1,nvegtype
192  WHERE (pgarden==0)
193  s%XVEGTYPE(:,jveg) = 0.
194  s%XVEGTYPE(:,1) = 1.
195  END WHERE
196  ENDDO
197  !
198  ALLOCATE(s%XPATCH(ki,1),p%XPATCH(ki))
199  ALLOCATE(s%XVEGTYPE_PATCH(ki,nvegtype,1),p%XVEGTYPE_PATCH(ki,nvegtype))
200  s%XPATCH(:,1) = 1.
201  p%XPATCH(:) = s%XPATCH(:,1)
202  s%XVEGTYPE_PATCH(:,:,1) = s%XVEGTYPE
203  p%XVEGTYPE_PATCH(:,:) = s%XVEGTYPE_PATCH(:,:,1)
204  p%NSIZE_P = ki
205  ALLOCATE(p%NR_P(ki))
206  DO ji = 1,SIZE(p%NR_P)
207  p%NR_P(ji) = ji
208  ENDDO
209  !
210  IF (.NOT. io%LPAR) THEN
211  CALL convert_patch_isba(dtco, dtv, io, idecade, idecade, top%XCOVER, top%LCOVER,&
212  .false.,'GRD', 1, k, p, pek, &
213  .true., .false., .false., .false., .false., .false., &
214  psoilgrid=io%XSOILGRID )
215  ELSE
216  CALL init_from_data_teb_veg_n(dtv, k, p, pek, idecade, .false., .true., .false.,.false.)
217  ENDIF
218  !
219  ALLOCATE(s%XWSN_WR(0,0,1))
220  ALLOCATE(s%XRHO_WR(0,0,1))
221  ALLOCATE(s%XALB_WR(0,1))
222  ALLOCATE(s%XHEA_WR(0,0,1))
223  ALLOCATE(s%XAGE_WR(0,0,1))
224  ALLOCATE(s%XSG1_WR(0,0,1))
225  ALLOCATE(s%XSG2_WR(0,0,1))
226  ALLOCATE(s%XHIS_WR(0,0,1))
227  !
228 END IF
229 
230 !
231 !
232 !* 2.3 Physiographic data fields from land cover:
233 ! -----------------------------------------
234 !
235 !
236 !
237 !
238 IF (.NOT. io%LPAR) THEN
239  CALL convert_patch_isba(dtco, dtv, io, idecade, idecade, top%XCOVER, top%LCOVER,&
240  .false.,'GRD', 1, k, p, pek, &
241  .false., .true., .false., .false., .false., .false. )
242 ELSE
243 
244  CALL init_from_data_teb_veg_n(dtv, k, p, pek, idecade, .false., .false., .true.,.false.)
245 
246  IF (io%CISBA=='DIF') CALL init_if_dif(io%NGROUND_LAYER, pgarden, p)
247 
248 END IF
249 !
250  CALL init_if_noveg(pgarden, io, s, p, pek)
251 !
252 ALLOCATE(k%XVEGTYPE(ki,nvegtype))
253 k%XVEGTYPE = s%XVEGTYPE
254 !
255 ALLOCATE(yss%XAOSIP(0))
256 !
257  CALL init_veg_pgd_n(yss, dtv, io, s, k, k, p, pek, yag, ki, &
258  hprogram, 'TOWN ',iluout, ki, top%TTIME%TDATE%MONTH, &
259  .false., .false., ztdeep_cli, zgammat_cli, &
260  .false., zthreshold, hinit, pco2, prhoa )
261 !
262 !-------------------------------------------------------------------------------
263 !
264 IF(io%CISBA=='DIF'.AND.io%LSOC)THEN
265  CALL abor1_sfx('INIT_TEB_GARDEN_PGDn: SUBGRID Soil organic matter'//&
266  ' effect (LSOC) NOT YET IMPLEMENTED FOR GARDEN')
267 ELSEIF (io%CISBA=='3-L'.AND.io%CKSAT=='EXP') THEN
268  CALL abor1_sfx('INIT_TEB_GARDEN_PGDn: topmodel exponential decay not implemented for garden')
269 ENDIF
270 !
271 IF(io%CKSAT=='SGH' .AND. io%CISBA/='DIF' .AND. hinit/='PRE')THEN
272  zf(:)=min(4.0/p%XDG(:,2),xf_decay)
273  CALL exp_decay_soil_fr(io%CISBA, zf, p)
274 ENDIF
275 !
276 !-------------------------------------------------------------------------------
277 !
278 IF (lhook) CALL dr_hook('INIT_TEB_GARDEN_PGD_n',1,zhook_handle)
279 !
280 !-------------------------------------------------------------------------------
281 !
282 !
283 END SUBROUTINE init_teb_garden_pgd_n
real, parameter xf_decay
subroutine init_if_noveg(PMASK, IO, S, P, PEK)
subroutine convert_patch_isba(DTCO, DTV, IO, KDEC, KDEC2, PCOVER,
subroutine allocate_teb_veg_pgd(PEK, S, K, P, OALLOC, KLU, KVEGTYPE, KGROUND_LAYER)
subroutine read_prep_garden_snow(HPROGRAM, HSNOW, KSNOW_LAYER, HFILE,
subroutine sso_init(YSSO)
Definition: modd_sson.F90:103
subroutine init_veg_pgd_n(ISSK, DTI, IO, S, K, KK, PK, PEK, AGK, KI, HPROGRAM, HSURF, KLUOUT, KSIZE, KMONTH, ODEEPSOIL, OPHYSDOMC, PTDEEP_CLI, PGAMMAT_CLI, OAGRIP, PTHRESHOLD, HINIT, PCO2, PRHOA)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine read_pgd_teb_garden_n(OCH_BIO_FLUX, DTCO, DTV, GB, U,
integer, parameter nundef
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
subroutine exp_decay_soil_fr(HISBA, PF, PK, PC_DEPTH_RATIO)
logical lhook
Definition: yomhook.F90:15
subroutine init_from_data_teb_veg_n(DTV, K, P, PEK, KDECADE, OUPD
subroutine init_if_dif(KGROUND_LAYER, PMASK, P)
subroutine init_teb_garden_pgd_n(DTCO, U, OCH_BIO_FLUX, G, PGARDEN, TOP, IO, S, K, P, PEK, DTV, GB, HPROGRAM, HINIT, OPATCH1, KI, KVERSION, KBUGFIX, PCO2, PRHOA)