SURFEX v8.1
General documentation of Surfex
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 (ISSK, DTI, IO, S, K, KK, PK, PEK, AGK, KI, &
7  HPROGRAM, HSURF, KLUOUT, KSIZE, KMONTH, &
8  ODEEPSOIL, OPHYSDOMC, PTDEEP_CLI, PGAMMAT_CLI, &
9  OAGRIP, PTHRESHOLD, HINIT, PCO2, PRHOA )
10 !#############################################################
11 !
12 !!**** *INIT_VEG_PGD_n_n* - routine to initialize ISBA
13 !!
14 !! PURPOSE
15 !! -------
16 !!
17 !!** METHOD
18 !! ------
19 !!
20 !! EXTERNAL
21 !! --------
22 !!
23 !!
24 !! IMPLICIT ARGUMENTS
25 !! ------------------
26 !!
27 !! REFERENCE
28 !! ---------
29 !!
30 !!
31 !! AUTHOR
32 !! ------
33 !! V. Masson *Meteo France*
34 !!
35 !! MODIFICATIONS
36 !! -------------
37 !! 23/07/13 (Decharme) Surface / Water table depth coupling
38 !!
39 !-------------------------------------------------------------------------------
40 !
41 !* 0. DECLARATIONS
42 ! ------------
43 !
44 USE modd_surfex_mpi, ONLY : nrank
45 !
46 USE modd_sso_n, ONLY : sso_t
47 !
48 USE modd_data_isba_n, ONLY : data_isba_t
49 !
52 USE modd_agri_n, ONLY : agri_t
53 !
54 USE modd_surf_atm, ONLY : lcpl_arp
55 USE modd_data_cover_par, ONLY : nvegtype
56 USE modd_surf_par, ONLY : xundef, nundef
57 USE modd_csts, ONLY : xcpd, xlvtt, xlstt
58 USE modd_snow_par, ONLY : xemissn
59 USE modd_isba_par, ONLY : xtau_ice
60 !
61 USE modd_sgh_par, ONLY : xice_deph_max
62 !
63 USE mode_cotwo, ONLY : gauleg
64 !
66 USE modi_get_1d_mask
67 USE modi_co2_init_n
68 USE modi_subscale_z0eff
69 !
70 USE mode_soil
71 !
72 USE modi_heatcapz
73 USE modi_thrmcondz
74 USE modi_abor1_sfx
75 USE modi_dif_layer
76 USE modi_dry_wet_soil_albedos
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(sso_t), INTENT(INOUT) :: ISSK
89 TYPE(data_isba_t), INTENT(INOUT) :: DTI
90 !
91 TYPE(isba_options_t), INTENT(INOUT) :: IO
92 TYPE(isba_s_t), INTENT(INOUT) :: S
93 TYPE(isba_k_t), INTENT(INOUT) :: K
94 TYPE(isba_k_t), INTENT(INOUT) :: KK
95 TYPE(isba_p_t), INTENT(INOUT) :: PK
96 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
97 TYPE(agri_t), INTENT(INOUT) :: AGK
98 !
99 INTEGER, INTENT(IN) :: KI
100 !
101  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
102  CHARACTER(LEN=6), INTENT(IN) :: HSURF ! Type of surface
103 INTEGER, INTENT(IN) :: KLUOUT
104 !
105 INTEGER, INTENT(IN) :: KSIZE
106 !
107 INTEGER, INTENT(IN) :: KMONTH
108 !
109 LOGICAL, INTENT(IN) :: ODEEPSOIL
110 LOGICAL, INTENT(IN) :: OPHYSDOMC
111 REAL, DIMENSION(:), INTENT(IN) :: PTDEEP_CLI
112 REAL, DIMENSION(:), INTENT(IN) :: PGAMMAT_CLI
113 !
114 LOGICAL, INTENT(IN) :: OAGRIP
115 REAL, DIMENSION(:), INTENT(IN) :: PTHRESHOLD
116 !
117  CHARACTER(LEN=3), INTENT(IN) :: HINIT
118  !
119 REAL, DIMENSION(:), INTENT(IN) :: PCO2
120 REAL, DIMENSION(:), INTENT(IN) :: PRHOA
121 !
122 !* 0.2 Declarations of local variables
123 ! -------------------------------
124 !
125 INTEGER :: JPATCH ! loop counter on tiles
126 INTEGER :: JILU,JP, JMAXLOC ! loop increment
127 INTEGER :: JL ! loop counter on layers
128 !
129 INTEGER :: IABC
130 !
131 REAL, DIMENSION(SIZE(PCO2)) :: ZCO2 ! CO2 concentration (kg/kg)
132 !
133 INTEGER, DIMENSION(:), ALLOCATABLE :: IR_NATURE_P
134 !
135 REAL(KIND=JPRB) :: ZHOOK_HANDLE
136 !
137 !-------------------------------------------------------------------------------
138 !
139 ! Initialisation for IO
140 !
141 IF (lhook) CALL dr_hook('INIT_VEG_PGD_n',0,zhook_handle)
142 !
143 !------------------------------------------------------------------------------------
144 !------------------------------------------------------------------------------------
145 !
146 ! PART 1: fields that are needed unpacked and packed: defined unpacked
147 ! -------------------------------------------------------------------
148 !
149 !* Soil hydraulic characteristics:
150 ! -------------------------------
151 !
152 IF (.NOT.ASSOCIATED(k%XMPOTSAT)) THEN
153  !
154  ALLOCATE(k%XMPOTSAT (ki,io%NGROUND_LAYER))
155  ALLOCATE(k%XBCOEF (ki,io%NGROUND_LAYER))
156  ALLOCATE(k%XWWILT (ki,io%NGROUND_LAYER)) ! wilting point
157  ALLOCATE(k%XWFC (ki,io%NGROUND_LAYER)) ! field capacity
158  ALLOCATE(k%XWSAT (ki,io%NGROUND_LAYER)) ! saturation
159  !
160  DO jl=1,io%NGROUND_LAYER
161  IF (dti%LDATA_BCOEF) THEN
162  k%XBCOEF (:,jl) = dti%XPAR_BCOEF (:,jl)
163  ELSE
164  k%XBCOEF (:,jl) = bcoef_func(k%XCLAY(:,jl),k%XSAND(:,jl),io%CPEDOTF)
165  ENDIF
166  IF (dti%LDATA_MPOTSAT) THEN
167  k%XMPOTSAT(:,jl) = dti%XPAR_MPOTSAT(:,jl)
168  ELSE
169  k%XMPOTSAT(:,jl) = matpotsat_func(k%XCLAY(:,jl),k%XSAND(:,jl),io%CPEDOTF)
170  ENDIF
171  IF (dti%LDATA_WSAT) THEN
172  k%XWSAT (:,jl) = dti%XPAR_WSAT (:,jl)
173  ELSE
174  k%XWSAT (:,jl) = wsat_func(k%XCLAY(:,jl),k%XSAND(:,jl),io%CPEDOTF)
175  ENDIF
176  IF (dti%LDATA_WWILT) THEN
177  k%XWWILT (:,jl) = dti%XPAR_WWILT (:,jl)
178  ELSE
179  k%XWWILT (:,jl) = wwilt_func(k%XCLAY(:,jl),k%XSAND(:,jl),io%CPEDOTF)
180  ENDIF
181  END DO
182  IF (dti%LDATA_BCOEF ) DEALLOCATE(dti%XPAR_BCOEF)
183  IF (dti%LDATA_MPOTSAT) DEALLOCATE(dti%XPAR_MPOTSAT)
184  IF (dti%LDATA_WSAT ) DEALLOCATE(dti%XPAR_WSAT)
185  IF (dti%LDATA_WWILT ) DEALLOCATE(dti%XPAR_WWILT)
186  !
187  IF (dti%LDATA_WFC) THEN
188  k%XWFC(:,:) = dti%XPAR_WFC(:,:)
189  DEALLOCATE(dti%XPAR_WFC)
190  ELSEIF (io%CISBA=='2-L' .OR. io%CISBA=='3-L') THEN
191  ! field capacity at hydraulic conductivity = 0.1mm/day
192  k%XWFC(:,:) = wfc_func(k%XCLAY(:,:),k%XSAND(:,:),io%CPEDOTF)
193  ELSE IF (io%CISBA=='DIF') THEN
194  ! field capacity at water potential = 0.33bar
195  k%XWFC(:,:) = w33_func(k%XCLAY(:,:),k%XSAND(:,:),io%CPEDOTF)
196  END IF
197  !
198  IF (io%CISBA=='2-L' .OR. io%CISBA=='3-L') THEN
199  ALLOCATE(k%XCGSAT (ki))
200  ALLOCATE(k%XC4B (ki))
201  ALLOCATE(k%XACOEF (ki))
202  ALLOCATE(k%XPCOEF (ki))
203  k%XCGSAT(:) = cgsat_func(k%XCLAY(:,1),k%XSAND(:,1))
204  k%XC4B (:) = c4b_func(k%XCLAY(:,1))
205  k%XACOEF(:) = acoef_func(k%XCLAY(:,1))
206  k%XPCOEF(:) = pcoef_func(k%XCLAY(:,1))
207  ELSE IF (io%CISBA=='DIF') THEN
208  ALLOCATE(k%XCGSAT (0))
209  ALLOCATE(k%XC4B (0))
210  ALLOCATE(k%XACOEF (0))
211  ALLOCATE(k%XPCOEF (0))
212  ENDIF
213  !
214  IF(io%CRUNOFF=='SGH')THEN
215  !
216  ALLOCATE(k%XWD0 (ki,io%NGROUND_LAYER))
217  ALLOCATE(k%XKANISO(ki,io%NGROUND_LAYER))
218  !
219  IF(io%CISBA=='DIF')THEN
220  k%XWD0(:,:) = wfc_func(k%XCLAY(:,:),k%XSAND(:,:),io%CPEDOTF)
221  ELSE
222  k%XWD0(:,:) = k%XWWILT(:,:)
223  ENDIF
224  k%XKANISO(:,:) = aniso_func(k%XCLAY(:,:))
225  !
226  ELSE
227  !
228  ALLOCATE(k%XWD0 (0,0))
229  ALLOCATE(k%XKANISO(0,0))
230  !
231  ENDIF
232  !
233  IF (io%CSCOND=='PL98'.OR.io%CISBA=='DIF') THEN
234  ALLOCATE(k%XHCAPSOIL(ki,io%NGROUND_LAYER))
235  ALLOCATE(k%XCONDDRY (ki,io%NGROUND_LAYER))
236  ALLOCATE(k%XCONDSLD (ki,io%NGROUND_LAYER))
237  !
238  CALL heatcapz(k%XSAND,k%XHCAPSOIL)
239  CALL thrmcondz(k%XSAND,k%XWSAT,k%XCONDDRY,k%XCONDSLD)
240  ELSE
241  ALLOCATE(k%XHCAPSOIL(0,0))
242  ALLOCATE(k%XCONDDRY (0,0))
243  ALLOCATE(k%XCONDSLD (0,0))
244  END IF
245  !
246 ENDIF
247 !
248 !CSCOND used in soil.F90 and soildif.F90
249 !
250 IF (io%CSCOND=='NP89'.AND.io%CISBA=='DIF') THEN
251  WRITE(kluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
252  WRITE(kluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
253  WRITE(kluout,*)'IF CISBA=DIF, CSCOND=NP89 is not available'
254  WRITE(kluout,*)'because not physic. CSCOND is put to PL98 '
255  WRITE(kluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
256  WRITE(kluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
257 ENDIF
258 !
259 !CPSURF used in drag.F90
260 !CPL_ARP used in drag.F90 and e_budget.F90
261 IF(io%CCPSURF=='DRY'.AND.lcpl_arp) THEN
262  CALL abor1_sfx('CCPSURF=DRY must not be used with LCPL_ARP')
263 ENDIF
264 !
265 !------------------------------------------------------------------------------------
266 !------------------------------------------------------------------------------------
267 !
268 ! PART 2: fields that are needed only packed: defined packed directly
269 ! -------------------------------------------------------------------
270 !
271 ! PART 2: A: fields that don't depend on patches: KK, AGK, ISSK
272 ! -------------------------------------------------------------
273 !
274 !* 2.A.1. Miscellaneous fields for ISBA:
275 ! ----------------------------------------
276 !
277 !* default value for:
278 ! lateral water flux, deep soil temperature climatology and its relaxation time-scale
279 !
280 !these arrays are used only packed: we define them directly packed
281 ALLOCATE(kk%XTDEEP (ksize))
282 ALLOCATE(kk%XGAMMAT(ksize))
283 kk%XTDEEP (:) = xundef
284 kk%XGAMMAT(:) = xundef
285 !
286 IF (odeepsoil) THEN
287  DO jilu = 1, ksize
288  kk%XTDEEP (jilu) = ptdeep_cli(kmonth)
289  kk%XGAMMAT(jilu) = 1. / pgammat_cli(kmonth)
290  END DO
291  !
292  WRITE(kluout,*)' LDEEPSOIL = ',odeepsoil,' LPHYSDOMC = ',ophysdomc
293  WRITE(kluout,*)' XTDEEP = ',minval(kk%XTDEEP(:)) ,maxval(kk%XTDEEP(:))
294  WRITE(kluout,*)' XGAMMAT = ',minval(kk%XGAMMAT(:)),maxval(kk%XGAMMAT(:))
295 ENDIF
296 !
297 !
298 !* 2.A.2. Initialize hydrology
299 ! ---------------------------
300 !
301 IF (io%CISBA == 'DIF') THEN
302  !
303  ALLOCATE(kk%XFWTD(ksize))
304  ALLOCATE(kk%XWTD (ksize))
305  kk%XFWTD(:) = 0.0
306  kk%XWTD (:) = xundef
307  !
308 ELSE
309  !
310  ALLOCATE(kk%XFWTD(0))
311  ALLOCATE(kk%XWTD (0))
312  !
313 ENDIF
314 !
315 !
316 !* Physiographic Radiative fields:
317 ! ------------------------------
318 !
319 !
320 !* 2.A.3. dry and wet bare soil albedos
321 ! ------------------------------------
322 !
323 ALLOCATE(kk%XALBNIR_DRY (ksize))
324 ALLOCATE(kk%XALBVIS_DRY (ksize))
325 ALLOCATE(kk%XALBUV_DRY (ksize))
326 ALLOCATE(kk%XALBNIR_WET (ksize))
327 ALLOCATE(kk%XALBVIS_WET (ksize))
328 ALLOCATE(kk%XALBUV_WET (ksize))
329 !
330  CALL dry_wet_soil_albedos(kk )
331 !
332 
333 !
334 !* 2.A.4. Irrigation
335 ! -----------------
336 !
337 IF (oagrip) THEN
338  !
339  ALLOCATE(agk%NIRRINUM (ksize))
340  ALLOCATE(agk%LIRRIDAY (ksize))
341  ALLOCATE(agk%LIRRIGATE (ksize))
342  ALLOCATE(agk%XTHRESHOLDSPT(ksize))
343  !
344  agk%NIRRINUM (:) = 1
345  agk%LIRRIDAY (:) = .false.
346  agk%LIRRIGATE(:) = .false.
347  !
348  DO jilu = 1, ksize
349  agk%XTHRESHOLDSPT(jilu) = pthreshold(agk%NIRRINUM(jilu))
350  END DO
351 ELSE
352  ALLOCATE(agk%NIRRINUM (0))
353  ALLOCATE(agk%LIRRIDAY (0))
354  ALLOCATE(agk%LIRRIGATE (0))
355  ALLOCATE(agk%XTHRESHOLDSPT(0))
356 ENDIF
357 !
358 !* 2.A.5. Orographic roughness length
359 ! ----------------------------------
360 !
361 ALLOCATE(issk%XZ0EFFIP(ksize))
362 ALLOCATE(issk%XZ0EFFIM(ksize))
363 ALLOCATE(issk%XZ0EFFJP(ksize))
364 ALLOCATE(issk%XZ0EFFJM(ksize))
365 !
366 issk%XZ0EFFIP(:) = xundef
367 issk%XZ0EFFIM(:) = xundef
368 issk%XZ0EFFJP(:) = xundef
369 issk%XZ0EFFJM(:) = xundef
370 !
371 IF (SIZE(issk%XAOSIP)>0) CALL subscale_z0eff(issk,pek%XZ0,.false.)
372 !
373 !-----------------------------------------------------------------------
374 !
375 ! PART 2: B: fields that depend on patches: PK, PEK
376 ! -------------------------------------------------
377 !
378 !
379 !* 2.B.1. Additional fields for ISBA-AGS:
380 ! --------------------------------------
381 !
382 IF(io%CPHOTO /= 'NON' .AND. hinit == 'ALL') THEN
383  !
384  IF (.NOT.ASSOCIATED(s%XABC)) THEN
385  IF (io%LTR_ML) THEN
386  iabc = 10
387  ELSE
388  iabc = 3
389  ENDIF
390  ALLOCATE(s%XABC(iabc))
391  ALLOCATE(s%XPOI(iabc))
392  s%XABC(:) = 0.
393  s%XPOI(:) = 0.
394  CALL gauleg(0.0,1.0,s%XABC,s%XPOI,iabc)
395  ENDIF
396  !
397  zco2(:) = pco2(:) / prhoa(:)
398  ALLOCATE(pk%XANMAX (ksize))
399  ALLOCATE(pk%XFZERO (ksize))
400  ALLOCATE(pk%XEPSO (ksize))
401  ALLOCATE(pk%XGAMM (ksize))
402  ALLOCATE(pk%XQDGAMM (ksize))
403  ALLOCATE(pk%XQDGMES (ksize))
404  ALLOCATE(pk%XT1GMES (ksize))
405  ALLOCATE(pk%XT2GMES (ksize))
406  ALLOCATE(pk%XAMAX (ksize))
407  ALLOCATE(pk%XQDAMAX (ksize))
408  ALLOCATE(pk%XT1AMAX (ksize))
409  ALLOCATE(pk%XT2AMAX (ksize))
410  ALLOCATE(pk%XAH (ksize))
411  ALLOCATE(pk%XBH (ksize))
412  ALLOCATE(pk%XTAU_WOOD (ksize))
413  ALLOCATE(pk%XINCREASE (ksize,io%NNBIOMASS))
414  ALLOCATE(pk%XTURNOVER (ksize,io%NNBIOMASS))
415  CALL co2_init_n(io, s, pk, pek, ksize, zco2 )
416  !
417 ELSEIF(io%CPHOTO == 'NON' .AND. io%LTR_ML) THEN ! Case for MEB
418  !
419  IF (.NOT.ASSOCIATED(s%XABC)) THEN
420  iabc = 10
421  ALLOCATE (s%XABC(iabc))
422  ALLOCATE (s%XPOI(iabc)) ! Working
423  s%XABC(:) = 0.
424  s%XPOI(:) = 0.
425  CALL gauleg(0.0,1.0,s%XABC,s%XPOI,iabc)
426  DEALLOCATE (s%XPOI)
427  ALLOCATE (s%XPOI(0))
428  ENDIF
429  !
430 ELSE
431  !
432  IF (.NOT.ASSOCIATED(s%XABC)) THEN
433  ALLOCATE(s%XABC(0))
434  ALLOCATE(s%XPOI(0))
435  ENDIF
436  !
437  ALLOCATE(pk%XANMAX (0))
438  ALLOCATE(pk%XFZERO (0))
439  ALLOCATE(pk%XEPSO (0))
440  ALLOCATE(pk%XGAMM (0))
441  ALLOCATE(pk%XQDGAMM (0))
442  ALLOCATE(pk%XQDGMES (0))
443  ALLOCATE(pk%XT1GMES (0))
444  ALLOCATE(pk%XT2GMES (0))
445  ALLOCATE(pk%XAMAX (0))
446  ALLOCATE(pk%XQDAMAX (0))
447  ALLOCATE(pk%XT1AMAX (0))
448  ALLOCATE(pk%XT2AMAX (0))
449  ALLOCATE(pk%XAH (0))
450  ALLOCATE(pk%XBH (0))
451  ALLOCATE(pk%XTAU_WOOD (0))
452  ALLOCATE(pk%XINCREASE (0,0))
453  ALLOCATE(pk%XTURNOVER (0,0))
454  !
455 END IF
456 !
457 !
458 !* 2.B.2. Soil hydraulic characteristics (rest) :
459 ! --------------------------------------------
460 !
461 !
462 ALLOCATE(pk%XCONDSAT (ksize,io%NGROUND_LAYER))
463 ALLOCATE(pk%XTAUICE (ksize))
464 !
465 IF (dti%LDATA_CONDSAT) THEN
466  CALL pack_same_rank(pk%NR_P,dti%XPAR_CONDSAT(:,:),pk%XCONDSAT(:,:))
467 ELSE
468  DO jl=1,io%NGROUND_LAYER
469  pk%XCONDSAT(:,jl) = hydcondsat_func(kk%XCLAY(:,jl),kk%XSAND(:,jl),io%CPEDOTF)
470  END DO
471 ENDIF
472 pk%XTAUICE(:) = xtau_ice
473 !
474 IF (io%CISBA=='2-L' .OR. io%CISBA=='3-L') THEN
475  !
476  ALLOCATE(pk%XC1SAT (ksize))
477  ALLOCATE(pk%XC2REF (ksize))
478  ALLOCATE(pk%XC3 (ksize,2))
479  ALLOCATE(pk%XC4REF (ksize))
480  pk%XC1SAT(:) = c1sat_func(kk%XCLAY(:,1))
481  pk%XC2REF(:) = c2ref_func(kk%XCLAY(:,1))
482  pk%XC3 (:,1) = c3_func(kk%XCLAY(:,1))
483  pk%XC3 (:,2) = c3_func(kk%XCLAY(:,2))
484  !
485  pk%XC4REF(:) = c4ref_func(kk%XCLAY(:,1),kk%XSAND(:,1),pk%XDG(:,2), &
486  pk%XDG(:,io%NGROUND_LAYER) )
487  !
488 ELSE IF (io%CISBA=='DIF') THEN
489  !
490  ALLOCATE(pk%XC1SAT (0))
491  ALLOCATE(pk%XC2REF (0))
492  ALLOCATE(pk%XC3 (0,0))
493  ALLOCATE(pk%XC4REF (0))
494  !
495 END IF
496 !
497 ALLOCATE(pk%XCPS (ksize))
498 ALLOCATE(pk%XLVTT(ksize))
499 ALLOCATE(pk%XLSTT(ksize))
500 pk%XCPS (:) = xcpd
501 pk%XLVTT(:) = xlvtt
502 pk%XLSTT(:) = xlstt
503 !
504 !
505 !* 2.B.3. Initialize hydrology
506 ! ----------------------------
507 !
508 ALLOCATE(pk%XRUNOFFD (ksize))
509 pk%XRUNOFFD(:)=xundef
510 !
511 IF (io%CISBA == 'DIF') THEN
512 !
513  ALLOCATE(pk%XDZG (ksize,io%NGROUND_LAYER))
514  ALLOCATE(pk%XDZDIF (ksize,io%NGROUND_LAYER))
515  ALLOCATE(pk%XSOILWGHT (ksize,io%NGROUND_LAYER))
516  CALL dif_layer(ksize, io, pk )
517 !
518 ELSEIF (count(io%LMEB_PATCH(:))/=0) THEN
519 !
520  ALLOCATE(pk%XDZG (ksize,io%NGROUND_LAYER))
521  CALL dif_layer(ksize, io, pk, omeb_3l = .true.)
522 !
523 ELSE
524 !
525  ALLOCATE(pk%XDZG (0,0))
526  ALLOCATE(pk%XDZDIF (0,0))
527  ALLOCATE(pk%XSOILWGHT (0,0))
528  !
529  WHERE(pk%XPATCH(:)>0.0)
530  pk%XRUNOFFD(:) = pk%XDG(:,2)
531  ENDWHERE
532 !
533 ENDIF
534 !
535 !Horton (also used by the flooding sheme)
536 !
537 ALLOCATE(pk%XKSAT_ICE(ksize))
538 !
539 IF(io%CISBA/='DIF')THEN
540  pk%XD_ICE (:) = min(pk%XDG(:,2),pk%XD_ICE(:))
541  pk%XD_ICE (:) = max(xice_deph_max,pk%XD_ICE(:))
542  pk%XKSAT_ICE(:) = pk%XCONDSAT(:,1)
543 ELSE
544  pk%XD_ICE (:) = 0.0
545  pk%XKSAT_ICE(:) = 0.0
546 ENDIF
547 !
548 !-------------------------------------------------------------------------------
549 !
550 !* Physiographic Radiative fields:
551 ! ------------------------------
552 !
553 
554 !
555 !* 2.B.4. Nitrogen version for isbaAgs
556 ! ------------------------------------
557 !
558 IF (io%CPHOTO=='NIT' .OR. io%CPHOTO=='NCB') THEN
559  ALLOCATE(pk%XBSLAI_NITRO (ksize ))
560  WHERE ((pek%XCE_NITRO(:) * pek%XCNA_NITRO(:) + pek%XCF_NITRO (:)) /= 0. )
561  pk%XBSLAI_NITRO(:) = 1. / (pek%XCE_NITRO (:)*pek%XCNA_NITRO(:)+pek%XCF_NITRO (:))
562  ELSEWHERE
563  pk%XBSLAI_NITRO(:) = xundef
564  ENDWHERE
565 ELSE
566  ALLOCATE(pk%XBSLAI_NITRO (0))
567 ENDIF
568 !
569 IF (lhook) CALL dr_hook('INIT_VEG_PGD_n',1,zhook_handle)
570 !
571 END SUBROUTINE init_veg_pgd_n
real, parameter xice_deph_max
subroutine thrmcondz(PSANDZ, PWSATZ, PCONDDRY, PCONDSLD)
Definition: thrmcondz.F90:7
real, save xcpd
Definition: modd_csts.F90:63
real, save xlvtt
Definition: modd_csts.F90:70
real, save xlstt
Definition: modd_csts.F90:71
subroutine subscale_z0eff(ISSK, PZ0VEG, OZ0REL, OMASK)
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
integer, parameter nundef
logical lhook
Definition: yomhook.F90:15
subroutine co2_init_n(IO, S, PK, PEK, KSIZE, PCO2)
Definition: co2_initn.F90:7
subroutine heatcapz(PSANDZ, PHCAPSOIL)
Definition: heatcapz.F90:7
subroutine dif_layer(KLU, IO, PK, OMEB_3L)
Definition: dif_layer.F90:7
subroutine dry_wet_soil_albedos(KK)
static int count
Definition: memory_hook.c:21