SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_veg_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_veg_pgd_n (CHI, DTCO, DST, I, SLT, U, &
7  hprogram, hsurf, kluout, ki, kpatch, kground_layer, kmonth, &
8  pvegtype, ppatch, pvegtype_patch, ksize_nature_p, &
9  kr_nature_p, prm_patch, &
10  odeepsoil, ophysdomc, ptdeep_cli, pgammat_cli, ptdeep, &
11  pgammat, oagrip, pthreshold, kirrinum, oirriday, oirrigate, &
12  pthresholdspt, &
13  hphoto, hinit, otr_ml, knbiomass, pco2, prhoa, pabc, ppoi, &
14  pgmes, pgc, pdmax, panmax, pfzero, pepso, pgamm, pqdgamm, &
15  pqdgmes, pt1gmes, pt2gmes, pamax, pqdamax, pt1amax, pt2amax,&
16  pah, pbh, ptau_wood, pincrease, pturnover, &
17  ksv, hsv, ysv, hch_names, haer_names, hdstnames, hsltnames, &
18  hchem_surf_file, &
19  psfdst, psfdstm, psfslt, &
20  paosip, paosim, paosjp, paosjm, pho2ip, pho2im, pho2jp, &
21  pho2jm, pz0, pz0effip, pz0effim, pz0effjp, pz0effjm, pz0rel,&
22  pclay, psand, hpedotf, &
23  pcondsat, pmpotsat, pbcoef, pwwilt, pwfc, pwsat, pwd0, &
24  pkaniso, hrunoff, &
25  ptauice, pcgsat, pc1sat, pc2ref, pc3, pc4b, pacoef, ppcoef, &
26  pc4ref, ppcps, pplvtt, pplstt, &
27  hscond, hisba, phcapsoil, pconddry, pcondsld, hcpsurf, &
28  pdg, pdroot, pdg2, prootfrac, prunoffd, pdzg, pdzdif, &
29  psoilwght, kwg_layer, klayer_hort, klayer_dun, pd_ice, &
30  pksat_ice, palbnir_dry, palbvis_dry, palbuv_dry, &
31  palbnir_wet, palbvis_wet, palbuv_wet, pbslai_nitro, &
32  pce_nitro, pcna_nitro, pcf_nitro, pfwtd, pwtd )
33 !#############################################################
34 !
35 !!**** *INIT_VEG_PGD_n_n* - routine to initialize ISBA
36 !!
37 !! PURPOSE
38 !! -------
39 !!
40 !!** METHOD
41 !! ------
42 !!
43 !! EXTERNAL
44 !! --------
45 !!
46 !!
47 !! IMPLICIT ARGUMENTS
48 !! ------------------
49 !!
50 !! REFERENCE
51 !! ---------
52 !!
53 !!
54 !! AUTHOR
55 !! ------
56 !! V. Masson *Meteo France*
57 !!
58 !! MODIFICATIONS
59 !! -------------
60 !! 23/07/13 (Decharme) Surface / Water table depth coupling
61 !!
62 !-------------------------------------------------------------------------------
63 !
64 !* 0. DECLARATIONS
65 ! ------------
66 !
67 !
68 !
69 !
70 USE modd_sv_n, ONLY : sv_t
71 !
72 !
73 USE modd_ch_isba_n, ONLY : ch_isba_t
75 USE modd_dst_n, ONLY : dst_t
76 USE modd_isba_n, ONLY : isba_t
77 USE modd_slt_n, ONLY : slt_t
78 USE modd_surf_atm_n, ONLY : surf_atm_t
79 !
80 USE modd_surf_atm, ONLY : lcpl_arp
81 USE modd_data_cover_par, ONLY : nvegtype
82 USE modd_surf_par, ONLY : xundef, nundef
83 USE modd_csts, ONLY : xcpd, xlvtt, xlstt
84 USE modd_snow_par, ONLY : xemissn
85 USE modd_isba_par, ONLY : xtau_ice
86 !
87 USE modd_sgh_par, ONLY : xice_deph_max
88 !
89 USE mode_cotwo, ONLY : gauleg
90 !
92 USE modi_get_1d_mask
93 USE modi_co2_init_n
94 USE modi_init_chemical_n
95 USE modi_open_namelist
96 USE modi_ch_init_dep_isba_n
97 USE modi_close_namelist
98 USE modi_init_dst
99 USE modi_init_slt
101 !
102 USE mode_soil
103 !
104 USE modi_heatcapz
105 USE modi_thrmcondz
106 USE modi_abor1_sfx
107 USE modi_dif_layer
109 !
110 USE yomhook ,ONLY : lhook, dr_hook
111 USE parkind1 ,ONLY : jprb
112 !
113 IMPLICIT NONE
114 !
115 !* 0.1 Declarations of arguments
116 ! -------------------------
117 !
118 !
119 TYPE(ch_isba_t), INTENT(INOUT) :: chi
120 TYPE(data_cover_t), INTENT(INOUT) :: dtco
121 TYPE(dst_t), INTENT(INOUT) :: dst
122 TYPE(isba_t), INTENT(INOUT) :: i
123 TYPE(slt_t), INTENT(INOUT) :: slt
124 TYPE(surf_atm_t), INTENT(INOUT) :: u
125 !
126  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
127  CHARACTER(LEN=6), INTENT(IN) :: hsurf ! Type of surface
128 INTEGER, INTENT(IN) :: kluout
129 !
130 INTEGER, INTENT(IN) :: ki
131 INTEGER, INTENT(IN) :: kpatch
132 INTEGER, INTENT(IN) :: kground_layer
133 INTEGER, INTENT(IN) :: kmonth
134 !
135 REAL, DIMENSION(:,:), POINTER :: pvegtype
136 REAL, DIMENSION(:,:), POINTER :: ppatch
137 REAL, DIMENSION(:,:,:), POINTER :: pvegtype_patch
138 INTEGER, DIMENSION(:), POINTER :: ksize_nature_p
139 INTEGER, DIMENSION(:,:), POINTER :: kr_nature_p
140 !
141 REAL, INTENT(IN) :: prm_patch
142 !
143 LOGICAL, INTENT(IN) :: odeepsoil
144 LOGICAL, INTENT(IN) :: ophysdomc
145 REAL, DIMENSION(:), INTENT(IN) :: ptdeep_cli
146 REAL, DIMENSION(:), INTENT(IN) :: pgammat_cli
147 REAL, DIMENSION(:), POINTER :: ptdeep
148 REAL, DIMENSION(:), POINTER :: pgammat
149 !
150 LOGICAL, INTENT(IN) :: oagrip
151 REAL, DIMENSION(:), INTENT(IN) :: pthreshold
152 INTEGER, DIMENSION(:,:), POINTER :: kirrinum
153 LOGICAL, DIMENSION(:,:), POINTER :: oirriday
154 LOGICAL, DIMENSION(:,:), POINTER :: oirrigate
155 REAL, DIMENSION(:,:), POINTER :: pthresholdspt
156 !
157  CHARACTER(LEN=3), INTENT(IN) :: hphoto
158  CHARACTER(LEN=3), INTENT(IN) :: hinit
159 LOGICAL, INTENT(IN) :: otr_ml
160 INTEGER, INTENT(IN) :: knbiomass
161 REAL, DIMENSION(:), INTENT(IN) :: pco2
162 REAL, DIMENSION(:), INTENT(IN) :: prhoa
163 REAL, DIMENSION(:), POINTER :: pabc
164 REAL, DIMENSION(:), POINTER :: ppoi
165 REAL, DIMENSION(:,:), INTENT(IN) :: pgmes
166 REAL, DIMENSION(:,:), INTENT(IN) :: pgc
167 REAL, DIMENSION(:,:), INTENT(IN):: pdmax
168 REAL, DIMENSION(:,:), POINTER :: panmax
169 REAL, DIMENSION(:,:), POINTER :: pfzero
170 REAL, DIMENSION(:,:), POINTER :: pepso
171 REAL, DIMENSION(:,:), POINTER :: pgamm
172 REAL, DIMENSION(:,:), POINTER :: pqdgamm
173 REAL, DIMENSION(:,:), POINTER :: pqdgmes
174 REAL, DIMENSION(:,:), POINTER :: pt1gmes
175 REAL, DIMENSION(:,:), POINTER :: pt2gmes
176 REAL, DIMENSION(:,:), POINTER :: pamax
177 REAL, DIMENSION(:,:), POINTER :: pqdamax
178 REAL, DIMENSION(:,:), POINTER :: pt1amax
179 REAL, DIMENSION(:,:), POINTER :: pt2amax
180 REAL, DIMENSION(:,:), POINTER :: pah
181 REAL, DIMENSION(:,:), POINTER :: pbh
182 REAL, DIMENSION(:,:), POINTER :: ptau_wood
183 REAL, DIMENSION(:,:,:), POINTER :: pincrease
184 REAL, DIMENSION(:,:,:), POINTER :: pturnover
185 !
186 INTEGER, INTENT(IN) :: ksv ! number of scalars
187  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: hsv ! name of all scalar variables
188 TYPE(sv_t), INTENT(INOUT) :: ysv
189  CHARACTER(LEN=6), DIMENSION(:), POINTER :: hch_names
190  CHARACTER(LEN=6), DIMENSION(:), POINTER :: haer_names
191  CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: hdstnames
192  CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: hsltnames
193 !
194  CHARACTER(LEN=28), INTENT(OUT) :: hchem_surf_file
195 !
196 REAL, DIMENSION(:,:,:), POINTER :: psfdst
197 REAL, DIMENSION(:,:,:), POINTER :: psfdstm
198 REAL, DIMENSION(:,:,:), POINTER :: psfslt
199 !
200 REAL, DIMENSION(:), INTENT(IN) :: paosip
201 REAL, DIMENSION(:), INTENT(IN) :: paosim
202 REAL, DIMENSION(:), INTENT(IN) :: paosjp
203 REAL, DIMENSION(:), INTENT(IN) :: paosjm
204 REAL, DIMENSION(:), INTENT(IN) :: pho2ip
205 REAL, DIMENSION(:), INTENT(IN) :: pho2im
206 REAL, DIMENSION(:), INTENT(IN) :: pho2jp
207 REAL, DIMENSION(:), INTENT(IN) :: pho2jm
208 REAL, DIMENSION(:,:), INTENT(IN) :: pz0
209 REAL, DIMENSION(:,:), POINTER :: pz0effip
210 REAL, DIMENSION(:,:), POINTER :: pz0effim
211 REAL, DIMENSION(:,:), POINTER :: pz0effjp
212 REAL, DIMENSION(:,:), POINTER :: pz0effjm
213 REAL, DIMENSION(:), POINTER :: pz0rel
214 !
215 REAL, DIMENSION(:,:), INTENT(IN) :: pclay
216 REAL, DIMENSION(:,:), INTENT(IN) :: psand
217  CHARACTER(LEN=4), INTENT(IN) :: hpedotf
218 REAL, DIMENSION(:,:,:), POINTER :: pcondsat
219 REAL, DIMENSION(:,:), POINTER :: pmpotsat
220 REAL, DIMENSION(:,:), POINTER :: pbcoef
221 REAL, DIMENSION(:,:), POINTER :: pwwilt
222 REAL, DIMENSION(:,:), POINTER :: pwfc
223 REAL, DIMENSION(:,:), POINTER :: pwsat
224 REAL, DIMENSION(:,:), POINTER :: pwd0
225 REAL, DIMENSION(:,:), POINTER :: pkaniso
226 !
227 REAL, DIMENSION(:), POINTER :: ptauice
228 REAL, DIMENSION(:), POINTER :: pcgsat
229 REAL, DIMENSION(:,:), POINTER :: pc1sat
230 REAL, DIMENSION(:,:), POINTER :: pc2ref
231 REAL, DIMENSION(:,:,:), POINTER :: pc3
232 REAL, DIMENSION(:), POINTER :: pc4b
233 REAL, DIMENSION(:), POINTER :: pacoef
234 REAL, DIMENSION(:), POINTER :: ppcoef
235 REAL, DIMENSION(:,:), POINTER :: pc4ref
236 !
237 REAL, DIMENSION(:,:), POINTER :: ppcps
238 REAL, DIMENSION(:,:), POINTER :: pplvtt
239 REAL, DIMENSION(:,:), POINTER :: pplstt
240 !
241  CHARACTER(LEN=4), INTENT(IN) :: hscond
242  CHARACTER(LEN=3), INTENT(IN) :: hisba
243  CHARACTER(LEN=4), INTENT(IN) :: hrunoff
244 REAL, DIMENSION(:,:), POINTER :: phcapsoil
245 REAL, DIMENSION(:,:), POINTER :: pconddry
246 REAL, DIMENSION(:,:), POINTER :: pcondsld
247  CHARACTER(LEN=3), INTENT(IN) :: hcpsurf
248 !
249 REAL, DIMENSION(:,:,:), INTENT(IN) :: pdg
250 REAL, DIMENSION(:,:), INTENT(IN) :: pdroot
251 REAL, DIMENSION(:,:), INTENT(IN) :: pdg2
252 REAL, DIMENSION(:,:,:), INTENT(IN) :: prootfrac
253 REAL, DIMENSION(:,:), POINTER :: prunoffd
254 REAL, DIMENSION(:,:,:), POINTER :: pdzg
255 REAL, DIMENSION(:,:,:), POINTER :: pdzdif
256 REAL, DIMENSION(:,:,:), POINTER :: psoilwght
257 INTEGER, DIMENSION(:,:), INTENT(IN) :: kwg_layer
258 INTEGER, INTENT(OUT) :: klayer_hort
259 INTEGER, INTENT(OUT) :: klayer_dun
260 !
261 REAL, DIMENSION(:,:), INTENT(INOUT) :: pd_ice
262 REAL, DIMENSION(:,:), POINTER :: pksat_ice
263 !
264 REAL, DIMENSION(:), POINTER :: palbnir_dry
265 REAL, DIMENSION(:), POINTER :: palbvis_dry
266 REAL, DIMENSION(:), POINTER :: palbuv_dry
267 REAL, DIMENSION(:), POINTER :: palbnir_wet
268 REAL, DIMENSION(:), POINTER :: palbvis_wet
269 REAL, DIMENSION(:), POINTER :: palbuv_wet
270 !
271 REAL, DIMENSION(:,:), POINTER :: pbslai_nitro
272 REAL, DIMENSION(:,:), INTENT(IN) :: pce_nitro
273 REAL, DIMENSION(:,:), INTENT(IN) :: pcna_nitro
274 REAL, DIMENSION(:,:), INTENT(IN) :: pcf_nitro
275 !
276 REAL, DIMENSION(:), POINTER :: pfwtd
277 REAL, DIMENSION(:), POINTER :: pwtd
278 !
279 !* 0.2 Declarations of local variables
280 ! -------------------------------
281 !
282 INTEGER :: jpatch ! loop counter on tiles
283 INTEGER :: jilu,jp, jmaxloc ! loop increment
284 INTEGER :: jlayer ! loop counter on layers
285 !
286 INTEGER :: ich ! unit of input chemistry file
287 INTEGER :: isize
288 !
289 REAL, DIMENSION(SIZE(PCO2)) :: zco2 ! CO2 concentration (kg/kg)
290 !
291 INTEGER, DIMENSION(:), ALLOCATABLE :: ir_nature_p
292 !
293 REAL(KIND=JPRB) :: zhook_handle
294 !
295 !-------------------------------------------------------------------------------
296 !
297 ! Initialisation for IO
298 !
299 IF (lhook) CALL dr_hook('INIT_VEG_PGD_n',0,zhook_handle)
300 !
301 !* 2.4 Fraction of each tile
302 ! ---------------------
303 !
304 ALLOCATE(ppatch(ki,kpatch))
305 ALLOCATE(pvegtype_patch(ki,nvegtype,kpatch))
306 ALLOCATE(ksize_nature_p(kpatch))
307 ALLOCATE(kr_nature_p(ki,kpatch))
308 !
309  CALL surf_patch(kpatch,pvegtype,ppatch,pvegtype_patch)
310 !
311 !* 2.5 Masks for tiles
312 ! ---------------
313 !
314 IF (prm_patch/=0.) THEN
315  !
316  WRITE(kluout,*) " REMOVE PATCH below 5 % add to dominant patch "
317  ! remove small fraction of PATCHES and add to MAIN PATCH
318  DO jp = 1,ki
319  !1) find most present patch maximum value
320  jmaxloc = maxval(maxloc(ppatch(jp,:)))
321  !2) FIND small value of cover
322  DO jpatch = 1,kpatch
323  IF ( ppatch(jp,jpatch)<prm_patch ) THEN
324  ppatch(jp,jmaxloc) = ppatch(jp,jmaxloc) + ppatch(jp,jpatch)
325  ppatch(jp,jpatch) = 0.0
326  ENDIF
327  ENDDO
328  ENDDO
329  !
330 ENDIF
331 !
332 DO jpatch=1,kpatch
333  ksize_nature_p(jpatch) = count(ppatch(:,jpatch) > 0.0)
334 ENDDO
335 !
336 kr_nature_p(:,:) = 0
337 DO jpatch=1,kpatch
338  ALLOCATE(ir_nature_p(ksize_nature_p(jpatch)))
339  CALL get_1d_mask(ksize_nature_p(jpatch),ki,ppatch(:,jpatch),ir_nature_p)
340  kr_nature_p(:ksize_nature_p(jpatch),jpatch) = ir_nature_p(:)
341  DEALLOCATE(ir_nature_p)
342 ENDDO
343 !
344 !
345 !* 2.6 Miscellaneous fields for ISBA:
346 ! -----------------------------
347 !
348 !* default value for:
349 ! lateral water flux, deep soil temperature climatology and its relaxation time-scale
350 !
351 ALLOCATE(ptdeep(ki))
352 ALLOCATE(pgammat(ki))
353 ptdeep(:) = xundef
354 pgammat(:) = xundef
355 !
356 IF (odeepsoil) THEN
357  DO jilu = 1, ki
358  ptdeep(jilu) = ptdeep_cli(kmonth)
359  pgammat(jilu) = 1. / pgammat_cli(kmonth)
360  END DO
361  !
362  WRITE(kluout,*)' LDEEPSOIL = ',odeepsoil,' LPHYSDOMC = ',ophysdomc
363  WRITE(kluout,*)' XTDEEP = ',minval(ptdeep(:)),maxval(ptdeep(:))
364  WRITE(kluout,*)' XGAMMAT = ',minval(pgammat(:)),maxval(pgammat(:))
365 ENDIF
366 !
367 !
368 !* 2.7 Irrigation
369 ! ----------
370 !
371 IF (oagrip) THEN
372  ALLOCATE(kirrinum(ki,kpatch))
373  ALLOCATE(oirriday(ki,kpatch))
374  ALLOCATE(oirrigate(ki,kpatch))
375  ALLOCATE(pthresholdspt(ki,kpatch))
376  !
377  kirrinum(:,:) = 1
378  oirriday(:,:) = .false.
379  oirrigate(:,:) = .false.
380  !
381  DO jilu = 1, ki
382  DO jpatch = 1, kpatch
383  pthresholdspt(jilu,jpatch) = pthreshold(kirrinum(jilu,jpatch))
384  END DO
385  END DO
386 ELSE
387  ALLOCATE(kirrinum(0,0))
388  ALLOCATE(oirriday(0,0))
389  ALLOCATE(oirrigate(0,0))
390  ALLOCATE(pthresholdspt(0,0))
391 ENDIF
392 !
393 !
394 !* 2.8 Additional fields for ISBA-AGS:
395 ! ------------------------------
396 !
397 IF(hphoto /= 'NON' .AND. hinit == 'ALL') THEN
398  IF (otr_ml) THEN
399  isize = 10
400  ELSE
401  isize = 3
402  ENDIF
403  ALLOCATE(pabc(isize))
404  ALLOCATE(ppoi(isize))
405  pabc(:) = 0.
406  ppoi(:) = 0.
407  zco2(:) = pco2(:) / prhoa(:)
408  ALLOCATE(panmax(ki,kpatch))
409  ALLOCATE(pfzero(ki,kpatch))
410  ALLOCATE(pepso(ki,kpatch))
411  ALLOCATE(pgamm(ki,kpatch))
412  ALLOCATE(pqdgamm(ki,kpatch))
413  ALLOCATE(pqdgmes(ki,kpatch))
414  ALLOCATE(pt1gmes(ki,kpatch))
415  ALLOCATE(pt2gmes(ki,kpatch))
416  ALLOCATE(pamax(ki,kpatch))
417  ALLOCATE(pqdamax(ki,kpatch))
418  ALLOCATE(pt1amax(ki,kpatch))
419  ALLOCATE(pt2amax(ki,kpatch))
420  ALLOCATE(pah(ki,kpatch))
421  ALLOCATE(pbh(ki,kpatch))
422  ALLOCATE(ptau_wood(ki,kpatch))
423  ALLOCATE(pincrease(ki,knbiomass,kpatch))
424  ALLOCATE(pturnover(ki,knbiomass,kpatch))
425  CALL co2_init_n(i, &
426  hphoto, ksize_nature_p, kr_nature_p, pvegtype_patch, &
427  zco2, pgmes, pgc, pdmax, pabc, ppoi, panmax, &
428  pfzero, pepso, pgamm, pqdgamm, pqdgmes, &
429  pt1gmes, pt2gmes, pamax, pqdamax, &
430  pt1amax, pt2amax, pah, pbh, ptau_wood, &
431  pincrease, pturnover )
432 
433 ELSEIF(hphoto == 'NON' .AND. otr_ml)THEN ! Case for MEB
434  isize = 10
435  ALLOCATE (pabc(isize))
436  ALLOCATE (ppoi(isize)) ! Working
437  pabc(:) = 0.
438  ppoi(:) = 0.
439  CALL gauleg(0.0,1.0,pabc,ppoi,SIZE(pabc))
440  DEALLOCATE (ppoi)
441  ALLOCATE (ppoi(0))
442 ELSE
443  ALLOCATE(pabc(0))
444  ALLOCATE(ppoi(0))
445  ALLOCATE(panmax(0,0))
446  ALLOCATE(pfzero(0,0))
447  ALLOCATE(pepso(0,0))
448  ALLOCATE(pgamm(0,0))
449  ALLOCATE(pqdgamm(0,0))
450  ALLOCATE(pqdgmes(0,0))
451  ALLOCATE(pt1gmes(0,0))
452  ALLOCATE(pt2gmes(0,0))
453  ALLOCATE(pamax(0,0))
454  ALLOCATE(pqdamax(0,0))
455  ALLOCATE(pt1amax(0,0))
456  ALLOCATE(pt2amax(0,0))
457  ALLOCATE(pah(0,0))
458  ALLOCATE(pbh(0,0))
459  ALLOCATE(ptau_wood(0,0))
460  ALLOCATE(pincrease(0,0,0))
461  ALLOCATE(pturnover(0,0,0))
462 END IF
463 !
464 !-------------------------------------------------------------------------------
465 !
466 ! 3. Initialize Chemical Deposition
467 ! ------------------------------
468 !
469 ! 3.1 Chemical gazes
470 ! --------------
471 !
472  !* for the time being, chemistry on vegetation works only for
473  ! ISBA on nature tile (not for gardens), because subroutine INIT_CHEMICAL_n
474  ! contains explicitely modules from ISBAn. It should be cleaned in a future
475  ! version.
476 IF (hsurf=='NATURE') THEN
477  CALL init_chemical_n(kluout, ksv, hsv, ysv, hch_names, haer_names, &
478  hdstnames=hdstnames, hsltnames=hsltnames )
479 END IF
480 !
481 IF (ksv /= 0) THEN
482  !
483  IF (hsurf=='NATURE' .AND. ysv%NBEQ > 0) THEN
484  !* for the time being, chemistry deposition on vegetation works only for
485  ! ISBA on nature tile (not for gardens), because subroutine CH_INIT_DEP_ISBA_n
486  ! contains explicitely modules from ISBAn. It should be cleaned in a future
487  ! version.
488  CALL open_namelist(hprogram, ich, hfile=hchem_surf_file)
489  CALL ch_init_dep_isba_n(chi, dtco, i, &
490  ich, kluout, ki)
491  CALL close_namelist(hprogram, ich)
492  END IF
493  !
494  IF (ysv%NDSTEQ >=1) THEN
495  ALLOCATE (psfdst(ki, ysv%NDSTEQ, kpatch)) !Output array
496  ALLOCATE (psfdstm(ki, ysv%NDSTEQ, kpatch)) !Output array
497  psfdst(:,:,:) = 0.
498  psfdstm(:,:,:) = 0.
499  CALL init_dst(dst, u, &
500  hprogram,ksize_nature_p,kr_nature_p, &
501  kpatch,pvegtype_patch)
502  ELSE
503  ALLOCATE(psfdst(0,0,0))
504  ALLOCATE(psfdstm(0,0,0))
505  END IF
506  !
507  IF (ysv%NSLTEQ >=1) THEN
508  ALLOCATE (psfslt(ki,ysv%NSLTEQ,kpatch)) !Output array
509  CALL init_slt(slt, &
510  hprogram)
511  ELSE
512  ALLOCATE(psfslt(0,0,0))
513  END IF
514  !
515 ENDIF
516 !
517 !-------------------------------------------------------------------------------
518 !
519 !* 4. Orographic roughness length
520 ! ---------------------------
521 !
522 ALLOCATE(pz0effip(ki,kpatch))
523 ALLOCATE(pz0effim(ki,kpatch))
524 ALLOCATE(pz0effjp(ki,kpatch))
525 ALLOCATE(pz0effjm(ki,kpatch))
526 ALLOCATE(pz0rel(ki))
527 !
528 IF (SIZE(paosip)>0) &
529  CALL subscale_z0eff(paosip,paosim,paosjp,paosjm, &
530  pho2ip,pho2im,pho2jp,pho2jm,pz0, &
531  pz0effip,pz0effim,pz0effjp,pz0effjm, &
532  pz0rel )
533 !
534 !-------------------------------------------------------------------------------
535 !
536 !* 5.1 Soil hydraulic characteristics:
537 ! -------------------------------
538 !
539 ALLOCATE(pcondsat(ki,kground_layer,kpatch))
540 ALLOCATE(pmpotsat(ki,kground_layer))
541 ALLOCATE(pbcoef(ki,kground_layer))
542 ALLOCATE(pwwilt(ki,kground_layer)) ! wilting point
543 ALLOCATE(pwfc(ki,kground_layer)) ! field capacity
544 ALLOCATE(pwsat(ki,kground_layer)) ! saturation
545 ALLOCATE(ptauice(ki))
546 !
547 DO jlayer=1,kground_layer
548  pbcoef(:,jlayer) = bcoef_func(pclay(:,jlayer),psand(:,jlayer),hpedotf)
549  pmpotsat(:,jlayer) = matpotsat_func(pclay(:,jlayer),psand(:,jlayer),hpedotf)
550  DO jpatch=1,kpatch
551  pcondsat(:,jlayer,jpatch) = hydcondsat_func(pclay(:,jlayer),psand(:,jlayer),hpedotf)
552  ENDDO
553  pwsat(:,jlayer) = wsat_func(pclay(:,jlayer),psand(:,jlayer),hpedotf)
554  pwwilt(:,jlayer) = wwilt_func(pclay(:,jlayer),psand(:,jlayer),hpedotf)
555 END DO
556 !
557 IF (hisba=='2-L' .OR. hisba=='3-L') THEN
558  ! field capacity at hydraulic conductivity = 0.1mm/day
559  pwfc(:,:) = wfc_func(pclay(:,:),psand(:,:),hpedotf)
560 ELSE IF (hisba=='DIF') THEN
561  ! field capacity at water potential = 0.33bar
562  pwfc(:,:) = w33_func(pclay(:,:),psand(:,:),hpedotf)
563 END IF
564 !
565 ptauice(:) = xtau_ice
566 !
567 IF (hisba=='2-L' .OR. hisba=='3-L') THEN
568  ALLOCATE(pcgsat(ki))
569  ALLOCATE(pc1sat(ki,kpatch))
570  ALLOCATE(pc2ref(ki,kpatch))
571  ALLOCATE(pc3(ki,2,kpatch))
572  ALLOCATE(pc4b(ki))
573  ALLOCATE(pacoef(ki))
574  ALLOCATE(ppcoef(ki))
575  ALLOCATE(pc4ref(ki,kpatch))
576  pcgsat(:) = cgsat_func(pclay(:,1),psand(:,1))
577  pc4b(:) = c4b_func(pclay(:,1))
578  !
579  pacoef(:) = acoef_func(pclay(:,1))
580  ppcoef(:) = pcoef_func(pclay(:,1))
581  !
582  DO jpatch=1,kpatch
583  pc1sat(:,jpatch) = c1sat_func(pclay(:,1))
584  pc2ref(:,jpatch) = c2ref_func(pclay(:,1))
585  pc4ref(:,jpatch) = c4ref_func(pclay(:,1),psand(:,1), &
586  pdg(:,2, jpatch), &
587  pdg(:,kground_layer,jpatch) )
588  pc3(:,1,jpatch) = c3_func(pclay(:,1))
589  pc3(:,2,jpatch) = c3_func(pclay(:,2))
590 
591  END DO
592  !
593 ELSE IF (hisba=='DIF') THEN
594  !
595  ALLOCATE(pcgsat(0))
596  ALLOCATE(pc1sat(0,0))
597  ALLOCATE(pc2ref(0,0))
598  ALLOCATE(pc3(0,0,0))
599  ALLOCATE(pc4b(0))
600  ALLOCATE(pc4ref(0,0))
601  ALLOCATE(pacoef(0))
602  ALLOCATE(ppcoef(0))
603  !
604 END IF
605 !
606 IF(hrunoff=='SGH')THEN
607 !
608  ALLOCATE(pwd0(ki,kground_layer))
609  ALLOCATE(pkaniso(ki,kground_layer))
610 !
611  IF(hisba=='DIF')THEN
612  pwd0(:,:) = wfc_func(pclay(:,:),psand(:,:),hpedotf)
613  ELSE
614  pwd0(:,:) = pwwilt(:,:)
615  ENDIF
616  pkaniso(:,:) = aniso_func(pclay(:,:))
617 !
618 ELSE
619 !
620  ALLOCATE(pwd0(0,0))
621  ALLOCATE(pkaniso(0,0))
622 !
623 ENDIF
624 !
625 !* 5.2 Soil thermal characteristics:
626 ! --------------------------------
627 !
628 ALLOCATE(ppcps(ki,kpatch))
629 ALLOCATE(pplvtt(ki,kpatch))
630 ALLOCATE(pplstt(ki,kpatch))
631 ppcps(:,:) = xcpd
632 pplvtt(:,:) = xlvtt
633 pplstt(:,:) = xlstt
634 !
635 !CSCOND used in soil.F90 and soildif.F90
636 !
637 IF (hscond=='NP89'.AND.hisba=='DIF') THEN
638  WRITE(kluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
639  WRITE(kluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
640  WRITE(kluout,*)'IF CISBA=DIF, CSCOND=NP89 is not available'
641  WRITE(kluout,*)'because not physic. CSCOND is put to PL98 '
642  WRITE(kluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
643  WRITE(kluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
644 ENDIF
645 !
646 IF (hscond=='PL98'.OR.hisba=='DIF') THEN
647  ALLOCATE(phcapsoil(ki,kground_layer))
648  ALLOCATE(pconddry(ki,kground_layer))
649  ALLOCATE(pcondsld(ki,kground_layer))
650  !
651  CALL heatcapz(psand,phcapsoil)
652  CALL thrmcondz(psand,pwsat,pconddry,pcondsld)
653  !
654 ELSE
655  ALLOCATE(phcapsoil(0,0))
656  ALLOCATE(pconddry(0,0))
657  ALLOCATE(pcondsld(0,0))
658 END IF
659 !
660 !-------------------------------------------------------------------------------
661 !CPSURF used in drag.F90
662 !CPL_ARP used in drag.F90 and e_budget.F90
663 IF(hcpsurf=='DRY'.AND.lcpl_arp) THEN
664  CALL abor1_sfx('CCPSURF=DRY must not be used with LCPL_ARP')
665 ENDIF
666 !
667 !* 6.1 Initialize hydrology
668 ! --------------------
669 !
670 ALLOCATE(prunoffd(ki,kpatch))
671 prunoffd(:,:)=xundef
672 !
673 IF (hisba == 'DIF') THEN
674 !
675  ALLOCATE(pdzg(ki,kground_layer,kpatch))
676  ALLOCATE(pdzdif(ki,kground_layer,kpatch))
677  ALLOCATE(psoilwght(ki,kground_layer,kpatch))
678  CALL dif_layer(ki, kground_layer, kpatch, ksize_nature_p, &
679  ppatch, pdg, pdroot, pdg2, prootfrac, &
680  kwg_layer, pdzg, pdzdif, psoilwght, &
681  prunoffd, klayer_hort, klayer_dun )
682 !
683  ALLOCATE(pfwtd(ki))
684  ALLOCATE(pwtd(ki))
685  pfwtd(:) = 0.0
686  pwtd(:) = xundef
687 !
688 ELSE
689 !
690  ALLOCATE(pdzg(0,0,0))
691  ALLOCATE(pdzdif(0,0,0))
692  ALLOCATE(psoilwght(0,0,0))
693  DO jpatch=1,kpatch
694  WHERE(ppatch(:,jpatch)>0.0)
695  prunoffd(:,jpatch) = pdg(:,2,jpatch)
696  ENDWHERE
697  END DO
698 !
699  klayer_dun=2
700  klayer_hort=2
701 !
702  ALLOCATE(pfwtd(0))
703  ALLOCATE(pwtd(0))
704 !
705 ENDIF
706 !
707 !Horton (also used by the flooding sheme)
708 !
709 ALLOCATE(pksat_ice(ki,kpatch))
710 !
711 IF(hisba/='DIF')THEN
712  pd_ice(:,:)=min(pdg(:,2,:),pd_ice(:,:))
713  pd_ice(:,:)=max(xice_deph_max,pd_ice(:,:))
714  pksat_ice(:,:)=pcondsat(:,1,:)
715 ELSE
716  pd_ice(:,:)=0.0
717  pksat_ice(:,:)=0.0
718 ENDIF
719 !
720 !-------------------------------------------------------------------------------
721 !
722 !* 8. Physiographic Radiative fields:
723 ! ------------------------------
724 !
725 !
726 !* dry and wet bare soil albedos
727 !
728 ALLOCATE(palbnir_dry(ki))
729 ALLOCATE(palbvis_dry(ki))
730 ALLOCATE(palbuv_dry(ki))
731 ALLOCATE(palbnir_wet(ki))
732 ALLOCATE(palbvis_wet(ki))
733 ALLOCATE(palbuv_wet(ki))
734 !
735  CALL dry_wet_soil_albedos(psand(:,1),pclay(:,1), &
736  pvegtype, &
737  palbnir_dry,palbvis_dry,palbuv_dry, &
738  palbnir_wet,palbvis_wet,palbuv_wet )
739 !
740 !
741 !
742 !* 2.9 Nitrogen version for isbaAgs
743 ! ------------------------------
744 !
745 IF (hphoto=='NIT' .OR. hphoto=='NCB') THEN
746  ALLOCATE(pbslai_nitro(ki,kpatch ))
747  WHERE ((pce_nitro(:,:)*pcna_nitro(:,:)+pcf_nitro(:,:)) /= 0. )
748  pbslai_nitro(:,:) = 1. / (pce_nitro(:,:)*pcna_nitro(:,:)+pcf_nitro(:,:))
749  ELSEWHERE
750  pbslai_nitro(:,:) = xundef
751  ENDWHERE
752 ELSE
753  ALLOCATE(pbslai_nitro(0,0))
754 ENDIF
755 !
756 IF (lhook) CALL dr_hook('INIT_VEG_PGD_n',1,zhook_handle)
757 !
758 END SUBROUTINE init_veg_pgd_n
subroutine thrmcondz(PSANDZ, PWSATZ, PCONDDRY, PCONDSLD)
Definition: thrmcondz.F90:6
subroutine ch_init_dep_isba_n(CHI, DTCO, I, KCH, KLUOUT, KLU)
subroutine init_slt(SLT, HPROGRAM)
Definition: init_slt.F90:5
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine get_1d_mask(KSIZE, KFRAC, PFRAC, KMASK)
Definition: get_1d_mask.F90:5
subroutine init_veg_pgd_n(CHI, DTCO, DST, I, SLT, U, HPROGRAM, HSURF, KLUOUT, KI, KPATCH, KGROUND_LAYER, KMONTH, PVEGTYPE, PPATCH, PVEGTYPE_PATCH, KSIZE_NATURE_P, KR_NATURE_P, PRM_PATCH, ODEEPSOIL, OPHYSDOMC, PTDEEP_CLI, PGAMMAT_CLI, PTDEEP, PGAMMAT, OAGRIP, PTHRESHOLD, KIRRINUM, OIRRIDAY, OIRRIGATE, PTHRESHOLDSPT, HPHOTO, HINIT, OTR_ML, KNBIOMASS, PCO2, PRHOA, PABC, PPOI, PGMES, PGC, PDMAX, PANMAX, PFZERO, PEPSO, PGAMM, PQDGAMM, PQDGMES, PT1GMES, PT2GMES, PAMAX, PQDAMAX, PT1AMAX, PT2AMAX, PAH, PBH, PTAU_WOOD, PINCREASE, PTURNOVER, KSV, HSV, YSV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES, HCHEM_SURF_FILE, PSFDST, PSFDSTM, PSFSLT, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, PZ0REL, PCLAY, PSAND, HPEDOTF, PCONDSAT, PMPOTSAT, PBCOEF, PWWILT, PWFC, PWSAT, PWD0, PKANISO, HRUNOFF, PTAUICE, PCGSAT, PC1SAT, PC2REF, PC3, PC4B, PACOEF, PPCOEF, PC4REF, PPCPS, PPLVTT, PPLSTT, HSCOND, HISBA, PHCAPSOIL, PCONDDRY, PCONDSLD, HCPSURF, PDG, PDROOT, PDG2, PROOTFRAC, PRUNOFFD, PDZG, PDZDIF, PSOILWGHT, KWG_LAYER, KLAYER_HORT, KLAYER_DUN, PD_ICE, PKSAT_ICE, PALBNIR_DRY, PALBVIS_DRY, PALBUV_DRY, PALBNIR_WET, PALBVIS_WET, PALBUV_WET, PBSLAI_NITRO, PCE_NITRO, PCNA_NITRO, PCF_NITRO, PFWTD, PWTD)
subroutine init_dst(DST, U, HPROGRAM, KSIZE_NATURE_P, KR_NATURE_P, KPATCH, PVEGTYPE_PATCH)
Definition: init_dst.F90:5
subroutine heatcapz(PSANDZ, PHCAPSOIL)
Definition: heatcapz.F90:6
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)
subroutine dif_layer(KLU, KGROUND_LAYER, KPATCH, KSIZE_NATURE_P, PPATCH, PDG, PDROOT, PDG2, PROOTFRAC, KWG_LAYER, PDZG, PDZDIF, PSOILWGHT, PRUNOFFD, KLAYER_HORT, KLAYER_DUN)
Definition: dif_layer.F90:6
subroutine co2_init_n(I, HPHOTO, KSIZE_NATURE_P, KR_NATURE_P, PVEGTYPE_PATCH, PCO2, PGMES, PGC, PDMAX, PABC, PPOI, PANMAX, PFZERO, PEPSO, PGAMM, PQDGAMM, PQDGMES, PT1GMES, PT2GMES, PAMAX, PQDAMAX, PT1AMAX, PT2AMAX, PAH, PBH, PTAU_WOOD, PINCREASE, PTURNOVER)
Definition: co2_initn.F90:6
subroutine init_chemical_n(KLUOUT, KSV, HSV, YSV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES)