SURFEX v8.1
General documentation of Surfex
compute_isba_parameters.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 compute_isba_parameters (DTCO, OREAD_BUDGETC, UG, U, &
7  IO, DTI, SB, S, IG, K, NK, NIG, NP, NPE, &
8  NAG, NISS, ISS, NCHI, CHI, ID, GB, NGB, &
9  NDST, SLT, SV, HPROGRAM,HINIT,OLAND_USE, &
10  KI,KSV,KSW,HSV,PCO2,PRHOA, &
11  PZENITH,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
12  PEMIS,PTSRAD,PTSURF, HTEST )
13 !#############################################################
14 !
15 !!**** *COMPUTE_ISBA_PARAMETERS_n* - routine to initialize ISBA
16 !!
17 !! PURPOSE
18 !! -------
19 !!
20 !!** METHOD
21 !! ------
22 !!
23 !! EXTERNAL
24 !! --------
25 !!
26 !!
27 !! IMPLICIT ARGUMENTS
28 !! ------------------
29 !!
30 !! REFERENCE
31 !! ---------
32 !!
33 !!
34 !! AUTHOR
35 !! ------
36 !! V. Masson *Meteo France*
37 !!
38 !! MODIFICATIONS
39 !! -------------
40 !! Original 01/2004
41 !! Modified by P. Le Moigne (11/2004): miscellaneous diagnostics
42 !! Modified by P. Le Moigne (06/2006): seeding and irrigation
43 !! Modified by B. Decharme (2008) : SGH and Flooding scheme
44 !! Modified by B. Decharme (01/2009): optional deep soil temperature as in Arpege
45 !! Modified by R. Hamdi (01/2009): Cp and L
46 !! Modified by B. Decharme (06/2009): read topographic index statistics
47 !! Modified by P. Le Moigne (01/2009): Beljaars sso
48 !! Modified by B. Decharme (08/2009): Active Trip coupling variable if Earth System Model
49 !! A.L. Gibelin 04/09 : change BSLAI_NITRO initialisation
50 !! A.L. Gibelin 04/09 : modifications for CENTURY model
51 !! A.L. Gibelin 06/09 : soil carbon initialisation
52 !! Modified by B. Decharme (09/2012): Bug in exponential profile calculation with DIF
53 !! F. Bouttier 08/13 : apply random perturbation patterns for ensembles
54 !! B. Vincendon 03/14 : bug correction for CISBA=3L and CKSAT=EXP (TOPD coupling)
55 !! Modified by B. Decharme (04/2013): Subsurface runoff if SGH (DIF option only)
56 !! Delete CTOPREG (never used)
57 !! Delete NWG_LAYER_TOT, NWG_SIZE
58 !! water table / Surface coupling
59 !! P. Samuelsson 02/14 : MEB
60 !! B. Decharme 01/16 : Bug when vegetation veg, z0 and emis are imposed whith interactive vegetation
61 !! B. Decharme 10/2016 bug surface/groundwater coupling
62 !!
63 !-------------------------------------------------------------------------------
64 !
65 !* 0. DECLARATIONS
66 ! ------------
67 !
71 USE modd_data_isba_n, ONLY : data_isba_t
72 USE modd_sfx_grid_n, ONLY : grid_t, grid_np_t
73 USE modd_agri_n, ONLY : agri_t, agri_np_t
74 USE modd_sso_n, ONLY : sso_t, sso_np_t
76 USE modd_canopy_n, ONLY : canopy_t
78 USE modd_surfex_n, ONLY : isba_diag_t
79 !
82 USE modd_surf_atm_n, ONLY : surf_atm_t
83 USE modd_dst_n, ONLY : dst_np_t, dst_t
84 USE modd_slt_n, ONLY : slt_t
85 USE modd_sv_n, ONLY : sv_t
86 !
88 !
89 !
90 #ifdef TOPD
92 #endif
93 !
94 USE modd_assim, ONLY : cassim_isba, lassim
95 !
96 USE modd_deepsoil, ONLY : lphysdomc, ldeepsoil, xtdeep_cli, xgammat_cli
97 USE modd_agri, ONLY : lagrip, xthreshold
98 !
99 !
101 !
102 USE modd_data_cover_par, ONLY : nvegtype
103 USE modd_surf_par, ONLY : xundef, nundef
104 USE modd_snow_par, ONLY : xemissn
105 !
106 USE modd_topd_par, ONLY : nunit
107 USE modd_topodyn, ONLY : nncat, nmesht
108 !
109 USE mode_random
110 !
111 USE modi_get_1d_mask
112 USE modi_get_z0rel
113 USE modi_get_luout
114 USE modi_abor1_sfx
115 USE modi_init_io_surf_n
116 USE modi_allocate_physio
117 USE modi_init_isba_mixpar
118 USE modi_convert_patch_isba
119 USE modi_init_veg_pgd_n
120 USE modi_init_top
121 USE modi_exp_decay_soil_fr
122 USE modi_carbon_init
123 USE modi_soiltemp_arp_par
124 USE modi_end_io_surf_n
125 !
126 USE modi_make_choice_array
127 USE modi_read_surf
128 USE modi_read_isba_n
129 USE modi_init_isba_landuse
130 USE modi_read_sbl_n
131 USE modi_init_veg_n
132 USE modi_init_chemical_n
133 USE modi_open_namelist
134 USE modi_ch_init_dep_isba_n
135 USE modi_close_namelist
136 USE modi_init_dst
137 USE modi_init_slt
138 USE modi_averaged_albedo_emis_isba
139 USE modi_diag_isba_init_n
140 USE modi_init_surf_topd
141 USE modi_isba_soc_parameters
143 !
145 USE modi_isba_to_topd
146 USE modi_open_file
147 USE modi_close_file
148 USE modi_fix_meb_veg
149 USE modi_av_pgd
150 USE modi_surf_patch
151 !
152 USE yomhook ,ONLY : lhook, dr_hook
153 USE parkind1 ,ONLY : jprb
154 !
155 IMPLICIT NONE
156 !
157 !* 0.1 Declarations of arguments
158 ! -------------------------
159 !
160 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
161 LOGICAL, INTENT(IN) :: OREAD_BUDGETC
162 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
163 TYPE(surf_atm_t), INTENT(INOUT) :: U
164 !
165 TYPE(isba_options_t), INTENT(INOUT) :: IO
166 TYPE(data_isba_t), INTENT(INOUT) :: DTI
167 TYPE(canopy_t), INTENT(INOUT) :: SB
168 TYPE(isba_s_t), INTENT(INOUT) :: S
169 TYPE(grid_t), INTENT(INOUT) :: IG
170 TYPE(isba_k_t), INTENT(INOUT) :: K
171 TYPE(isba_nk_t), INTENT(INOUT) :: NK
172 TYPE(grid_np_t), INTENT(INOUT) :: NIG
173 TYPE(isba_np_t), INTENT(INOUT) :: NP
174 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
175 TYPE(agri_np_t), INTENT(INOUT) :: NAG
176 TYPE(sso_np_t), INTENT(INOUT) :: NISS
177 TYPE(sso_t), INTENT(INOUT) :: ISS
178 TYPE(ch_isba_np_t), INTENT(INOUT) :: NCHI
179 TYPE(ch_isba_t), INTENT(INOUT) :: CHI
180 TYPE(isba_diag_t), INTENT(INOUT) :: ID
181 TYPE(gr_biog_t), INTENT(INOUT) :: GB
182 TYPE(gr_biog_np_t), INTENT(INOUT) :: NGB
183 !
184 TYPE(dst_np_t), INTENT(INOUT) :: NDST
185 TYPE(slt_t), INTENT(INOUT) :: SLT
186 TYPE(sv_t), INTENT(INOUT) :: SV
187 !
188  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
189  CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize
190 LOGICAL, INTENT(IN) :: OLAND_USE !
191 INTEGER, INTENT(IN) :: KI ! number of points
192 INTEGER, INTENT(IN) :: KSV ! number of scalars
193 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
194  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN) :: HSV ! name of all scalar variables
195 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration (kg/m3)
196 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density
197 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle
198 REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band
199 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band
200 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band
201 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity
202 REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature
203 REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
204 !
205  CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
206 !
207 !
208 !* 0.2 Declarations of local variables
209 ! -------------------------------
210 !
211 TYPE(grid_t), POINTER :: GK
212 TYPE(isba_p_t), POINTER :: PK
213 TYPE(isba_k_t), POINTER :: KK
214 TYPE(isba_pe_t), POINTER :: PEK
215 TYPE(agri_t), POINTER :: AGK
216 TYPE(sso_t), POINTER :: ISSK
217 TYPE(dst_t), POINTER :: DSTK
218 !
219 REAL, DIMENSION(U%NDIM_FULL) :: ZF_PARAM, ZC_DEPTH_RATIO
220 !
221 REAL, DIMENSION(KI) :: ZTSRAD_NAT !radiative temperature
222 REAL, DIMENSION(KI) :: ZTSURF_NAT !effective temperature
223 REAL, DIMENSION(KI) :: ZM
224 !
225 REAL, DIMENSION(KI) :: ZWG1 ! work array for surface water content
226 REAL, DIMENSION(KI,IO%NPATCH) :: ZTG1 ! work array for surface temperature
227 REAL, DIMENSION(KI,IO%NPATCH) :: ZF
228 !
229 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK
230 REAL, DIMENSION(:,:), ALLOCATABLE :: ZDG_SOIL, ZDG_SOIL_P
231 REAL, DIMENSION(:), ALLOCATABLE :: ZSUM_PATCH
232 !
233 INTEGER :: ICH ! unit of input chemistry file
234 INTEGER :: JI, JL ! loop increment
235 INTEGER :: ILUOUT ! unit of output listing file
236 INTEGER :: IRESP ! return code
237 INTEGER :: IDECADE, IDECADE2 ! decade of simulation
238 INTEGER :: JP ! loop counter on tiles
239 INTEGER :: ISIZE_LMEB_PATCH ! Number of patches with MEB=true
240 !
241 LOGICAL :: GDIM, GCAS1, GCAS2, GCAS3
242 INTEGER :: JVEG, IVERSION, IBUGFIX, IMASK, JMAXLOC
243 !
244  CHARACTER(LEN=4) :: YLVL
245  CHARACTER(LEN=12) :: YRECFM
246 !
247 REAL(KIND=JPRB) :: ZHOOK_HANDLE
248 !
249 !-------------------------------------------------------------------------------
250 !
251 ! Initialisation for IO
252 !
253 IF (lhook) CALL dr_hook('COMPUTE_ISBA_PARAMETERS',0,zhook_handle)
254  CALL get_luout(hprogram,iluout)
255 !
256 IF (htest/='OK') THEN
257  CALL abor1_sfx('COMPUTE_ISBA_PARAMETERS: FATAL ERROR DURING ARGUMENT TRANSFER')
258 END IF
259 !
260 !----------------------------------------------------------------------------------
261 !----------------------------------------------------------------------------------
262 !
263 ! PART 1 : Arrays of vegtypes & patches
264 ! -------------------------------------
265 !
266 ! We need XVEGTYPE, XPATCH and XVEGTYPE_PATCH with dimension "PATCH" for some
267 ! cases: initialized here
268 !
269 ! Vegtypes first
270 ALLOCATE(s%XVEGTYPE(ki,nvegtype))
271 IF (dti%LDATA_VEGTYPE) THEN
272  s%XVEGTYPE = dti%XPAR_VEGTYPE
273 ELSE
274  !classical ecoclimap case
275  DO jveg=1,nvegtype
276  CALL av_pgd(dtco, s%XVEGTYPE(:,jveg),s%XCOVER ,dtco%XDATA_VEGTYPE(:,jveg),'NAT','ARI',s%LCOVER)
277  END DO
278 ENDIF
279 !
280 ! patches come from vegtypes
281 ALLOCATE(s%XPATCH(ki,io%NPATCH))
282 ALLOCATE(s%XVEGTYPE_PATCH(ki,nvegtype,io%NPATCH))
283  CALL surf_patch(io%NPATCH,s%XVEGTYPE,s%XPATCH,s%XVEGTYPE_PATCH)
284 !
285 ! removing little fractions of patches must be done of the XPATCH with dimension
286 ! "PATCH"
287 IF (io%XRM_PATCH/=0.) THEN
288  !
289  WRITE(iluout,*) " REMOVE PATCH below 5 % add to dominant patch "
290  ! remove small fraction of PATCHES and add to MAIN PATCH
291  DO ji = 1,ki
292  !1) find most present patch maximum value
293  jmaxloc = maxval(maxloc(s%XPATCH(ji,:)))
294  !2) FIND small value of cover
295  DO jp = 1,io%NPATCH
296  IF ( s%XPATCH(ji,jp)<io%XRM_PATCH ) THEN
297  s%XPATCH(ji,jmaxloc) = s%XPATCH(ji,jmaxloc) + s%XPATCH(ji,jp)
298  s%XPATCH(ji,jp) = 0.0
299  ENDIF
300  ENDDO
301  ENDDO
302  !
303 ENDIF
304 !
305 !----------------------------------------------------------------------------------
306 !----------------------------------------------------------------------------------
307 !
308 ! PART 2 : Things depending only on options and / or needed first
309 ! --------------------------------------------------------------
310 
311 !* Physiographic data fields from land cover:
312 ! -----------------------------------------
313 !
314 IF (s%TTIME%TDATE%MONTH /= nundef) THEN
315  idecade = 3 * ( s%TTIME%TDATE%MONTH - 1 ) + min(s%TTIME%TDATE%DAY-1,29) / 10 + 1
316 ELSE
317  idecade = 1
318 END IF
319 !
320 idecade2 = idecade
321 !
322 ! concern DATA_ISBA, so no dependence on patches
323  CALL init_isba_mixpar(dtco, dti, ig%NDIM, io, idecade, idecade2, s%XCOVER, s%LCOVER, 'NAT')
324 !
325 isize_lmeb_patch=count(io%LMEB_PATCH(:))
326 IF (isize_lmeb_patch>0) THEN
327  CALL fix_meb_veg(dti, ig%NDIM, io%LMEB_PATCH, io%NPATCH)
328 ENDIF
329 !
330 !
331 !* Soil carbon
332 ! -----------
333 !
334 IF (hinit == 'ALL' .AND. io%CRESPSL=='CNT' .AND. io%CPHOTO == 'NCB') CALL carbon_init
335 !
336 !----------------------------------------------------------------------------------
337 !----------------------------------------------------------------------------------
338 !
339 ! PART 3 : Loop on patches for general initialization
340 ! --------------------------------------------------
341 !
342 ! loop on patches
343 DO jp = 1, io%NPATCH
344  !
345  kk => nk%AL(jp)
346  pk => np%AL(jp)
347  pek => npe%AL(jp)
348  agk => nag%AL(jp)
349  issk => niss%AL(jp)
350  !
351  ! dimension of the patch
352  pk%NSIZE_P = count(s%XPATCH(:,jp) > 0.0)
353  !
354  ! mask of the patch in tile nature
355  ALLOCATE(pk%NR_P (pk%NSIZE_P))
356  CALL get_1d_mask(pk%NSIZE_P, ki, s%XPATCH(:,jp), pk%NR_P)
357  !
358  ! the array of vegtypes, patches and vegtypes by patches reduced on this patches
359  ALLOCATE(kk%XVEGTYPE(pk%NSIZE_P,nvegtype))
360  CALL pack_same_rank(pk%NR_P,s%XVEGTYPE,kk%XVEGTYPE)
361  !
362  ALLOCATE(pk%XPATCH(pk%NSIZE_P))
363  ALLOCATE(pk%XVEGTYPE_PATCH (pk%NSIZE_P,nvegtype))
364  CALL pack_same_rank(pk%NR_P,s%XPATCH(:,jp),pk%XPATCH)
365  CALL pack_same_rank(pk%NR_P,s%XVEGTYPE_PATCH(:,:,jp),pk%XVEGTYPE_PATCH)
366  !
367  !
368  ! soon needed packed fields
369  !
370  IF (io%LPERM) THEN
371  ALLOCATE(kk%XPERM(pk%NSIZE_P))
372  CALL pack_same_rank(pk%NR_P, k%XPERM, kk%XPERM)
373  ELSE
374  ALLOCATE(kk%XPERM(0))
375  ENDIF
376  !
377  !
378  ALLOCATE(kk%XSAND(pk%NSIZE_P,io%NGROUND_LAYER))
379  ALLOCATE(kk%XCLAY(pk%NSIZE_P,io%NGROUND_LAYER))
380  !
381  ALLOCATE(issk%XAOSIP(pk%NSIZE_P))
382  ALLOCATE(issk%XAOSIM(pk%NSIZE_P))
383  ALLOCATE(issk%XAOSJP(pk%NSIZE_P))
384  ALLOCATE(issk%XAOSJM(pk%NSIZE_P))
385  ALLOCATE(issk%XHO2IP(pk%NSIZE_P))
386  ALLOCATE(issk%XHO2IM(pk%NSIZE_P))
387  ALLOCATE(issk%XHO2JP(pk%NSIZE_P))
388  ALLOCATE(issk%XHO2JM(pk%NSIZE_P))
389  !
390  !
391  CALL pack_same_rank(pk%NR_P, k%XSAND, kk%XSAND)
392  CALL pack_same_rank(pk%NR_P, k%XCLAY, kk%XCLAY)
393  !
394  CALL pack_same_rank(pk%NR_P,iss%XAOSIP,issk%XAOSIP)
395  CALL pack_same_rank(pk%NR_P,iss%XAOSIM,issk%XAOSIM)
396  CALL pack_same_rank(pk%NR_P,iss%XAOSJP,issk%XAOSJP)
397  CALL pack_same_rank(pk%NR_P,iss%XAOSJM,issk%XAOSJM)
398  CALL pack_same_rank(pk%NR_P,iss%XHO2IP,issk%XHO2IP)
399  CALL pack_same_rank(pk%NR_P,iss%XHO2IM,issk%XHO2IM)
400  CALL pack_same_rank(pk%NR_P,iss%XHO2JP,issk%XHO2JP)
401  CALL pack_same_rank(pk%NR_P,iss%XHO2JM,issk%XHO2JM)
402  !
403  !
404  !* 2.5 Physiographic fields
405  ! --------------------
406  !
407  CALL allocate_physio(io, kk, pk, pek, nvegtype )
408  !
409  CALL convert_patch_isba(dtco, dti, io, idecade, idecade2, s%XCOVER, s%LCOVER, &
410  lagrip, 'NAT', jp, kk, pk, pek, &
411  .true., .true., .true., .true., .false., .false., &
412  psoilgrid=io%XSOILGRID, pperm=kk%XPERM )
413  !
414  !-------------------------------------------------------------------------------
415  !
416  ! in init_veg_pgd_n, things needed also by garden and greenroof
417  CALL init_veg_pgd_n(issk, dti, io, s, k, kk, pk, pek, agk, ki, &
418  hprogram, 'NATURE', iluout, pk%NSIZE_P, s%TTIME%TDATE%MONTH, &
419  ldeepsoil, lphysdomc, xtdeep_cli, xgammat_cli, &
420  lagrip, xthreshold, hinit, pco2, prhoa )
421  !
422  !-------------------------------------------------------------------------------
423  !
424  ! Other fields needed to be initialized for isba only
425  !
426  !Rainfall spatial distribution
427  !CRAIN used in HYDRO_VEG and HYDRO_SGH and VEG_SGH_UPDATE
428  IF(io%CRAIN=='SGH')THEN
429  ALLOCATE(kk%XMUF(pk%NSIZE_P))
430  kk%XMUF(:)=0.0
431  ELSE
432  ALLOCATE(kk%XMUF(0))
433  ENDIF
434  !
435  ALLOCATE(kk%XFSAT(pk%NSIZE_P))
436  kk%XFSAT(:) = 0.0
437  !
438  ! * Initialize flood scheme :
439  !
440  ALLOCATE(kk%XFFLOOD (pk%NSIZE_P))
441  ALLOCATE(kk%XPIFLOOD(pk%NSIZE_P))
442  ALLOCATE(kk%XFF (pk%NSIZE_P))
443  ALLOCATE(kk%XFFG (pk%NSIZE_P))
444  ALLOCATE(kk%XFFV (pk%NSIZE_P))
445  ALLOCATE(kk%XFFROZEN(pk%NSIZE_P))
446  ALLOCATE(kk%XALBF (pk%NSIZE_P))
447  ALLOCATE(kk%XEMISF (pk%NSIZE_P))
448  kk%XFFLOOD = 0.0
449  kk%XPIFLOOD = 0.0
450  kk%XFF = 0.0
451  kk%XFFG = 0.0
452  kk%XFFV = 0.0
453  kk%XFFROZEN = 0.0
454  kk%XALBF = 0.0
455  kk%XEMISF = 0.0
456  !
457 ENDDO
458 !
459 IF (dti%LDATA_CONDSAT) DEALLOCATE(dti%XPAR_CONDSAT)
460 !
461 !----------------------------------------------------------------------------------
462 !----------------------------------------------------------------------------------
463 !
464 ! PART 4 : Initialization not depending on patches
465 ! ------------------------------------------------
466 !
467 ! Fields needed also unpacked
468 !
469 IF(io%CRAIN=='SGH')THEN
470  ALLOCATE(k%XMUF(ki))
471  k%XMUF(:)=0.0
472 ENDIF
473 !
474 !
475 ALLOCATE(iss%XZ0REL(ki))
476  CALL get_z0rel(iss)
477 !
478 !-------------------------------------------------------------------------------
479 !
480 ! PART 5: Initialize Chemical Deposition
481 ! -----------------------------------
482 !
483 ! 3.1 Chemical gazes
484 ! --------------
485 !
486  !* for the time being, chemistry on vegetation works only for
487  ! ISBA on nature tile (not for gardens), because subroutine INIT_CHEMICAL_n
488  ! contains explicitely modules from ISBAn. It should be cleaned in a future
489  ! version.
490  CALL init_chemical_n(iluout, ksv, hsv, chi%SVI, chi%CCH_NAMES, chi%CAER_NAMES, &
491  hdstnames=chi%CDSTNAMES, hsltnames=chi%CSLTNAMES )
492 !
493 IF (ksv /= 0) THEN
494  !
495  IF (chi%SVI%NBEQ > 0) THEN
496  !* for the time being, chemistry deposition on vegetation works only for
497  ! ISBA on nature tile (not for gardens), because subroutine CH_INIT_DEP_ISBA_n
498  ! contains explicitely modules from ISBAn. It should be cleaned in a future
499  ! version.
500  CALL open_namelist(hprogram, ich, hfile=chi%CCHEM_SURF_FILE)
501  CALL ch_init_dep_isba_n(chi, nchi, np, dtco, io%NPATCH, s%LCOVER, s%XCOVER, ich, iluout, ki)
502  CALL close_namelist(hprogram, ich)
503  END IF
504  !
505  DO jp = 1,io%NPATCH
506  !
507  dstk => ndst%AL(jp)
508  !
509  IF (chi%SVI%NDSTEQ >=1) THEN
510  !
511  ALLOCATE (dstk%XSFDST (pk%NSIZE_P, chi%SVI%NDSTEQ)) !Output array
512  ALLOCATE (dstk%XSFDSTM(pk%NSIZE_P, chi%SVI%NDSTEQ)) !Output array
513  dstk%XSFDST (:,:) = 0.
514  dstk%XSFDSTM(:,:) = 0.
515  CALL init_dst(dstk, u, hprogram, pk%NSIZE_P, pk%NR_P, pk%XVEGTYPE_PATCH)
516  ELSE
517  ALLOCATE(dstk%XSFDST (0,0))
518  ALLOCATE(dstk%XSFDSTM(0,0))
519  END IF
520  !
521  ENDDO
522  !
523  IF (chi%SVI%NSLTEQ >=1) THEN
524  CALL init_slt(slt, hprogram)
525  END IF
526  !
527 ENDIF
528 !
529 !-------------------------------------------------------------------------------
530 !
531 ! PART 6: Specific options
532 ! --------------------------
533 
534 !6.A. DIF option :
535 !---------------
536 ! Anisotropy coeficient for hydraulic conductivity for topmodel drainage (Fan et al. 2006)
537 ! Soil organic matter effect and/or Exponential decay for DIF option
538 ! Must be call before INIT_TOP
539 !
540 !
541 IF(io%CISBA=='DIF' .AND. io%CKSAT=='SGH') THEN
542  !
543  WRITE(iluout,*)'THE KSAT EXP PROFILE WITH ISBA-DF IS NOT PHYSIC AND HAS BEEN REMOVED FOR NOW'
544  WRITE(iluout,*)'A NEW PHYSICAL APPROACH WILL BE DEVELLOPED ACCOUNTING FOR COMPACTION IN ALL '
545  WRITE(iluout,*)'HYDRODYNAMIC PARAMETERS (WSAT, PSISAT, KSAT, B) AND NOT ONLY IN KSAT '
546  CALL abor1_sfx('CKSAT=SGH is not physic with ISBA-DF and has been removed for now')
547  !
548 ENDIF
549 !
550 IF(io%CISBA=='DIF' .AND. io%LSOC)THEN
551  !
552  IF(.NOT.io%LSOCP)THEN
553  WRITE(iluout,*)'LSOC = T can be activated only if SOC data given in PGD fields'
554  CALL abor1_sfx('LSOC = T can be activated only if SOC data given in PGD fields')
555  ENDIF
556  !
557  ALLOCATE(s%XFRACSOC(ki,io%NGROUND_LAYER))
558  CALL isba_soc_parameters(io%CRUNOFF, s%XSOC, k, np, s%XFRACSOC, &
559  k%XWSAT, k%XWFC, k%XWWILT, io%NPATCH )
560  !
561 ELSE
562  ALLOCATE(s%XFRACSOC(0,0))
563 ENDIF
564 !
565 !
566 !6.B. Topmodel
567 !--------------
568 !
569 zf(:,:) = xundef
570 zm(:) = xundef
571 !
572 !CRUNOFF used in hydro_sgh and isba_sgh_update
573 IF( io%CRUNOFF=='SGH '.AND. hinit/='PRE' .AND. .NOT.lassim ) THEN
574  !
575  ! Subsurface flow by layer (m/s)
576  DO jp = 1,io%NPATCH
577  pk => np%AL(jp)
578  IF(io%CISBA=='DIF') THEN
579  ALLOCATE(pk%XTOPQS(pk%NSIZE_P,io%NGROUND_LAYER))
580  pk%XTOPQS(:,:) = 0.0
581  ELSE
582  ALLOCATE(pk%XTOPQS(0,0))
583  ENDIF
584  ENDDO
585  !
586  ALLOCATE(s%XTAB_FSAT(ki,ndimtab))
587  ALLOCATE(s%XTAB_WTOP(ki,ndimtab))
588  ALLOCATE(s%XTAB_QTOP(ki,ndimtab))
589  s%XTAB_FSAT(:,:) = 0.0
590  s%XTAB_WTOP(:,:) = 0.0
591  s%XTAB_QTOP(:,:) = 0.0
592  !
593  WHERE(k%XCLAY(:,1)==xundef.AND.s%XTI_MEAN(:)/=xundef) s%XTI_MEAN(:)=xundef
594  CALL init_top(io, s, k, nk, np, iluout, zm )
595  !
596 ELSE
597  !
598  DO jp = 1,io%NPATCH
599  pk => np%AL(jp)
600  ALLOCATE(pk%XTOPQS(0,0))
601  ENDDO
602  !
603  ALLOCATE(s%XTAB_FSAT(0,0))
604  ALLOCATE(s%XTAB_WTOP(0,0))
605  ALLOCATE(s%XTAB_QTOP(0,0))
606  !
607 ENDIF
608 !
609 !
610 !Exponential decay for ISBA-FR option
611 !CKSAT used in hydro_soil.F90 and soil.F90
612 IF ( io%CISBA/='DIF' .AND. hinit/='PRE' .AND. .NOT.lassim ) THEN
613  !
614  gcas1 = (io%CKSAT=='EXP' .AND. io%CISBA=='3-L')
615  gcas2 = (io%CKSAT=='SGH')
616  gcas3 = (hprogram/='AROME ' .AND. hprogram/='MESONH ')
617  !
618  IF ( gcas1 .OR. gcas2 ) THEN
619  !
620  ALLOCATE(s%XF_PARAM (ki))
621  s%XF_PARAM(:) = xundef
622  !
623  IF ( gcas1 .AND. gcas3 ) THEN
624  !
625  !reading of XF_PARAM in external file
626  CALL open_file('ASCII ',nunit,hfile='carte_f_dc.txt',hform='FORMATTED',haction='READ ')
627  DO ji = 1,u%NDIM_FULL
628  READ(nunit,*) zf_param(ji), zc_depth_ratio(ji)
629  ENDDO
630  CALL close_file('ASCII ',nunit)
631  CALL read_and_send_mpi(zf_param,s%XF_PARAM,u%NR_NATURE)
632 #ifdef TOPD
633  IF (.NOT.ALLOCATED(xc_depth_ratio)) ALLOCATE(xc_depth_ratio(ki))
635  CALL read_and_send_mpi(zc_depth_ratio,xc_depth_ratio,u%NR_NATURE)
636 #endif
637  !
638  ELSEIF ( gcas1 ) THEN
639  WRITE(iluout,*) "COMPUTE_ISBA_PARAMETERS: WITH CKSAT=EXP, IN NOT OFFLINE "//&
640  "MODE, TOPMODEL FILE FOR F_PARAM IS NOT READ "
641  ENDIF
642  !
643  ! definition of ZF functions of options
644  !
645  ! Exponential decay factor calculate using soil properties
646  ! (eq. 11, Decharme et al., J. Hydrometeor, 2006)
647  DO jp = 1,io%NPATCH
648  pk => np%AL(jp)
649  !
650  DO ji = 1,pk%NSIZE_P
651  imask = pk%NR_P(ji)
652 
653  IF ( gcas2 .AND. io%CRUNOFF=='SGH' .AND. zm(imask)/=xundef ) THEN
654  zf(ji,jp) = (k%XWSAT(imask,1)-k%XWD0(imask,1)) / zm(imask)
655  ELSEIF ( gcas1 ) THEN
656  zf(ji,jp) = s%XF_PARAM(imask)
657  ENDIF
658  ENDDO
659  ENDDO
660  !
661  DO jp = 1,io%NPATCH
662  pk => np%AL(jp)
663  !
664  WHERE ( zf(1:pk%NSIZE_P,jp)==xundef.AND.pk%XDG(:,2)/=xundef )
665  zf(1:pk%NSIZE_P,jp) = 4.0/pk%XDG(:,2)
666  ENDWHERE
667  zf(1:pk%NSIZE_P,jp) = min(zf(1:pk%NSIZE_P,jp),xf_decay)
668  !
669  zc_depth_ratio(1:pk%NSIZE_P) = 1.
670 #ifdef TOPD
671  IF (ALLOCATED(xc_depth_ratio)) THEN
672  CALL pack_same_rank(pk%NR_P,xc_depth_ratio,zc_depth_ratio(1:pk%NSIZE_P))
673  ENDIF
674 #endif
675  CALL exp_decay_soil_fr(io%CISBA, zf(1:pk%NSIZE_P,jp), pk, zc_depth_ratio(1:pk%NSIZE_P))
676  ENDDO
677  !
678  IF ( gcas2 ) THEN
679  !
680  DO ji = 1,np%AL(1)%NSIZE_P
681  imask = np%AL(1)%NR_P(ji)
682  s%XF_PARAM(imask) = zf(ji,1)
683  ENDDO
684  !
685  ENDIF
686  !
687  ENDIF
688  !
689 ENDIF
690 !
691 !
692 ! 6.C. Initialize required coupling fields :
693 !-------------------------------------------
694 !
695 io%LCPL_RRM = .false.
696 io%LFLOOD = .false.
697 io%LWTD = .false.
698 !
699 IF(lcpl_land)THEN
700 !
701  io%LCPL_RRM = .true.
702 !
703  IF(lcpl_gw)THEN
704  io%LWTD = .true.
705  ENDIF
706 !
707  ALLOCATE(s%XCPL_DRAIN (ki))
708  ALLOCATE(s%XCPL_RUNOFF(ki))
709  s%XCPL_DRAIN (:) = 0.0
710  s%XCPL_RUNOFF(:) = 0.0
711 !
712  IF(io%LGLACIER)THEN
713  ALLOCATE(s%XCPL_ICEFLUX(ki))
714  s%XCPL_ICEFLUX(:) = 0.0
715  ELSE
716  ALLOCATE(s%XCPL_ICEFLUX(0))
717  ENDIF
718 !
719  IF(lcpl_flood)THEN
720  io%LFLOOD = .true.
721  ALLOCATE(s%XCPL_EFLOOD(ki))
722  ALLOCATE(s%XCPL_PFLOOD(ki))
723  ALLOCATE(s%XCPL_IFLOOD(ki))
724  s%XCPL_EFLOOD(:)= 0.0
725  s%XCPL_PFLOOD(:)= 0.0
726  s%XCPL_IFLOOD(:)= 0.0
727  ELSE
728  ALLOCATE(s%XCPL_EFLOOD(0))
729  ALLOCATE(s%XCPL_PFLOOD(0))
730  ALLOCATE(s%XCPL_IFLOOD(0))
731  ENDIF
732 !
733 ELSE
734 !
735  ALLOCATE(s%XCPL_RUNOFF (0))
736  ALLOCATE(s%XCPL_DRAIN (0))
737  ALLOCATE(s%XCPL_ICEFLUX (0))
738  ALLOCATE(s%XCPL_EFLOOD (0))
739  ALLOCATE(s%XCPL_PFLOOD (0))
740  ALLOCATE(s%XCPL_IFLOOD (0))
741 !
742 ENDIF
743 !
744 !
745 IF (lcpl_land) THEN
746  !
747  ALLOCATE(k%XFWTD(ki))
748  ALLOCATE(k%XWTD (ki))
749  k%XFWTD(:) = 0.0
750  k%XWTD (:) = xundef
751  !
752  IF(lcpl_flood)THEN
753  ALLOCATE(k%XFFLOOD (ki))
754  ALLOCATE(k%XPIFLOOD(ki))
755  k%XFFLOOD (:) = 0.0
756  k%XPIFLOOD(:) = 0.0
757  !
758  ELSE
759  !
760  ALLOCATE(k%XFFLOOD (0))
761  ALLOCATE(k%XPIFLOOD(0))
762  !
763  ENDIF
764  !
765 ELSE
766  !
767  ALLOCATE(k%XFWTD(0))
768  ALLOCATE(k%XWTD (0))
769  ALLOCATE(k%XFFLOOD (0))
770  ALLOCATE(k%XPIFLOOD(0))
771  !
772 ENDIF
773 !
774 ! * Check some key :
775 !
776 IF(lcpl_calving)THEN
777  IF(.NOT.io%LGLACIER)THEN
778  CALL abor1_sfx('COMPUTE_ISBA_PARAMETERS: LGLACIER MUST BE ACTIVATED IF LCPL_CALVING')
779  ENDIF
780 ENDIF
781 !
782 !-------------------------------------------------------------------------------
783 !
784 !* 6.D. ISBA time-varying deep force-restore temperature initialization
785 ! --------------------------------------------------------------------
786 !
787  CALL soiltemp_arp_par(io, hprogram)
788 !
789 !-------------------------------------------------------------------------------
790 !-------------------------------------------------------------------------------
791 !
792 ! PART 7: We packed needed fields and free unless ones
793 ! -----------------------------------------------------
794 !
795 !
796 DO jp = 1,io%NPATCH
797  !
798  kk => nk%AL(jp)
799  pk => np%AL(jp)
800  issk => niss%AL(jp)
801  gk => nig%AL(jp)
802  !
803  ALLOCATE(kk%XMPOTSAT(pk%NSIZE_P,io%NGROUND_LAYER))
804  ALLOCATE(kk%XBCOEF (pk%NSIZE_P,io%NGROUND_LAYER))
805  ! needed to be written as diagnostics, so not free
806  ALLOCATE(kk%XWWILT (pk%NSIZE_P,io%NGROUND_LAYER))
807  ALLOCATE(kk%XWFC (pk%NSIZE_P,io%NGROUND_LAYER))
808  ALLOCATE(kk%XWSAT (pk%NSIZE_P,io%NGROUND_LAYER))
809  !
810  CALL pack_same_rank(pk%NR_P,k%XMPOTSAT,kk%XMPOTSAT)
811  CALL pack_same_rank(pk%NR_P,k%XBCOEF,kk%XBCOEF)
812  !
813  CALL pack_same_rank(pk%NR_P,k%XWWILT,kk%XWWILT)
814  CALL pack_same_rank(pk%NR_P,k%XWFC,kk%XWFC)
815  CALL pack_same_rank(pk%NR_P,k%XWSAT,kk%XWSAT)
816  !
817  IF (io%CISBA=='2-L' .OR. io%CISBA=='3-L') THEN
818  ALLOCATE(kk%XCGSAT(pk%NSIZE_P))
819  ALLOCATE(kk%XC4B (pk%NSIZE_P))
820  ALLOCATE(kk%XACOEF(pk%NSIZE_P))
821  ALLOCATE(kk%XPCOEF(pk%NSIZE_P))
822  CALL pack_same_rank(pk%NR_P,k%XCGSAT,kk%XCGSAT)
823  CALL pack_same_rank(pk%NR_P,k%XC4B, kk%XC4B)
824  CALL pack_same_rank(pk%NR_P,k%XACOEF,kk%XACOEF)
825  CALL pack_same_rank(pk%NR_P,k%XPCOEF,kk%XPCOEF)
826  ENDIF
827  !
828  IF (io%CSCOND=='PL98'.OR.io%CISBA=='DIF') THEN
829  ALLOCATE(kk%XHCAPSOIL(pk%NSIZE_P,io%NGROUND_LAYER))
830  ALLOCATE(kk%XCONDDRY (pk%NSIZE_P,io%NGROUND_LAYER))
831  ALLOCATE(kk%XCONDSLD (pk%NSIZE_P,io%NGROUND_LAYER))
832  CALL pack_same_rank(pk%NR_P,k%XHCAPSOIL,kk%XHCAPSOIL)
833  CALL pack_same_rank(pk%NR_P,k%XCONDDRY ,kk%XCONDDRY)
834  CALL pack_same_rank(pk%NR_P,k%XCONDSLD ,kk%XCONDSLD)
835  ENDIF
836  !
837  ALLOCATE(kk%XWDRAIN (pk%NSIZE_P))
838  ALLOCATE(kk%XRUNOFFB(pk%NSIZE_P))
839  CALL pack_same_rank(pk%NR_P,k%XWDRAIN,kk%XWDRAIN)
840  CALL pack_same_rank(pk%NR_P,k%XRUNOFFB,kk%XRUNOFFB)
841  !
842  ! needed to be written as diagnostics, so not free
843  ALLOCATE(issk%XZ0REL (pk%NSIZE_P))
844  ALLOCATE(issk%XSSO_SLOPE(pk%NSIZE_P))
845  !
846  CALL pack_same_rank(pk%NR_P,iss%XZ0REL,issk%XZ0REL)
847  CALL pack_same_rank(pk%NR_P,iss%XSSO_SLOPE,issk%XSSO_SLOPE)
848  !
849  ALLOCATE(gk%XLAT(pk%NSIZE_P))
850  ALLOCATE(gk%XLON(pk%NSIZE_P))
851  !
852  CALL pack_same_rank(pk%NR_P,ig%XLAT,gk%XLAT)
853  CALL pack_same_rank(pk%NR_P,ig%XLON,gk%XLON)
854  !
855 ENDDO
856 !
857 ! Useledd fields from now on
858 iss%XAOSIP => null()
859 iss%XAOSIM => null()
860 iss%XAOSJP => null()
861 iss%XAOSJM => null()
862 iss%XHO2IP => null()
863 iss%XHO2IM => null()
864 iss%XHO2JP => null()
865 iss%XHO2JM => null()
866 !
867 k%XMPOTSAT => null()
868 k%XBCOEF => null()
869 !
870 k%XCGSAT => null()
871 k%XC4B => null()
872 k%XACOEF => null()
873 k%XPCOEF => null()
874 !
875 k%XHCAPSOIL => null()
876 k%XCONDDRY => null()
877 k%XCONDSLD => null()
878 !
879 k%XWDRAIN => null()
880 k%XRUNOFFB => null()
881 !
882 !-------------------------------------------------------------------------------
883 !
884 !* if only physiographic fields are to be initialized, stop here.
885 !
886 IF (hinit/='ALL' .AND. hinit/='SOD') THEN
887  IF (lhook) CALL dr_hook('COMPUTE_ISBA_PARAMETERS',1,zhook_handle)
888  RETURN
889 END IF
890 !
891 !-------------------------------------------------------------------------------
892 !-------------------------------------------------------------------------------
893 !
894 ! PART 8: Reading of prognostic variables
895 ! ----------------------------------------
896 !
897 IF (cassim_isba=="ENKF ") CALL init_random_seed()
898 !
899 !
900  CALL init_io_surf_n(dtco, u, hprogram,'NATURE','ISBA ','READ ')
901 !
902 !* 10. Prognostic and semi-prognostic fields
903 ! -------------------------------------
904 !
905  CALL read_isba_n(dtco, io, s, np, npe, k%XCLAY, u, hprogram)
906 !
907 IF (hinit/='ALL') THEN
908  CALL end_io_surf_n(hprogram)
909  IF (lhook) CALL dr_hook('COMPUTE_ISBA_PARAMETERS',1,zhook_handle)
910  RETURN
911 END IF
912 !
913 IF (hinit=='PRE' .AND. npe%AL(1)%TSNOW%SCHEME.NE.'3-L' .AND. &
914  npe%AL(1)%TSNOW%SCHEME.NE.'CRO' .AND. io%CISBA=='DIF') &
915  CALL abor1_sfx("INIT_ISBAN: WITH CISBA = DIF, CSNOW MUST BE 3-L OR CRO")
916 !
917 !
918 !* Extrapolation of the prognostic and semi-prognostic fields
919 ! LAND USE case
920 ! -------------------------------------
921 !
922 IF (oland_use) THEN
923  !
924  CALL read_surf(hprogram,'VERSION',iversion,iresp)
925  CALL read_surf(hprogram,'BUG',ibugfix,iresp)
926  gdim = (iversion>8 .OR. iversion==8 .AND. ibugfix>0)
927  IF (gdim) CALL read_surf(hprogram,'SPLIT_PATCH',gdim,iresp)
928  !
929  ALLOCATE(zwork(ki,io%NPATCH))
930  !
931  !* read old patch fraction
932  !
933  DO jp = 1,io%NPATCH
934  ALLOCATE(np%AL(jp)%XPATCH_OLD(np%AL(jp)%NSIZE_P))
935  ENDDO
936  !
937  CALL make_choice_array(hprogram, io%NPATCH, gdim, 'PATCH', zwork)
938  DO jp = 1,io%NPATCH
939  CALL pack_same_rank(np%AL(jp)%NR_P,zwork(:,jp),np%AL(jp)%XPATCH_OLD(:))
940  ENDDO
941  !
942  !* read old soil layer thicknesses (m)
943  !
944  DO jp = 1,io%NPATCH
945  ALLOCATE(np%AL(jp)%XDG_OLD(np%AL(jp)%NSIZE_P,io%NGROUND_LAYER))
946  ENDDO
947  !
948  DO jl=1,io%NGROUND_LAYER
949  WRITE(ylvl,'(I4)') jl
950  yrecfm='OLD_DG'//adjustl(ylvl(:len_trim(ylvl)))
951  CALL make_choice_array(hprogram, io%NPATCH, gdim, yrecfm, zwork)
952  DO jp = 1,io%NPATCH
953  CALL pack_same_rank(np%AL(jp)%NR_P,zwork(:,jp),np%AL(jp)%XDG_OLD(:,jl))
954  ENDDO
955  END DO
956  DEALLOCATE(zwork)
957  !
958  CALL init_isba_landuse(dtco, ug, u, io, nk, np, npe, ig%XMESH_SIZE, &
959  hprogram)
960 END IF
961 !
962 !
963 !* 12. Canopy air fields:
964 ! -----------------
965 !
966  CALL read_sbl_n(dtco, u, sb, io%LCANOPY, hprogram, "NATURE")
967 !
968 !-------------------------------------------------------------------------------
969 !-------------------------------------------------------------------------------
970 !
971 ! PART 9: initialize radiative and physical properties
972 ! ----------------------------------------------------
973 !
974 DO jp=1,io%NPATCH
975  pk => np%AL(jp)
976  kk => nk%AL(jp)
977  pek => npe%AL(jp)
978  !
979  ALLOCATE(kk%XDIR_ALB_WITH_SNOW(pk%NSIZE_P,ksw))
980  ALLOCATE(kk%XSCA_ALB_WITH_SNOW(pk%NSIZE_P,ksw))
981  kk%XDIR_ALB_WITH_SNOW = 0.0
982  kk%XSCA_ALB_WITH_SNOW = 0.0
983  !
984  CALL init_veg_n(io, kk, pk, pek, dti, id%DM%LSURF_DIAG_ALBEDO, pdir_alb, psca_alb, pemis, ptsrad )
985  !
986  zwg1(1:pk%NSIZE_P) = pek%XWG(:,1)
987  ztg1(1:pk%NSIZE_P,jp) = pek%XTG(:,1)
988  !
989  CALL convert_patch_isba(dtco, dti, io, idecade, idecade2, s%XCOVER, s%LCOVER,&
990  lagrip, 'NAT', jp, kk, pk, pek, &
991  .false., .false., .false., .false., .true., .false., &
992  pwg1=zwg1(1:pk%NSIZE_P), pwsat=kk%XWSAT)
993  !
994 ENDDO
995 !
996 !
997 ! Load randomly perturbed fields. Perturbation ratios are saved in case fields are reset later.
998 IF(io%LPERTSURF) THEN
999  !
1000  CALL read_surf(hprogram,'VERSION',iversion,iresp)
1001  CALL read_surf(hprogram,'BUG',ibugfix,iresp)
1002  gdim = (iversion>8 .OR. iversion==8 .AND. ibugfix>0)
1003  !
1004  ALLOCATE(zwork(ki,io%NPATCH))
1005  !
1006  CALL make_choice_array(hprogram, io%NPATCH, gdim, 'VEG', zwork)
1007  ALLOCATE(s%XPERTVEG(ki))
1008  s%XPERTVEG(:)=zwork(:,1)
1009 !
1010  CALL make_choice_array(hprogram, io%NPATCH, gdim, 'LAI', zwork)
1011  ALLOCATE(s%XPERTLAI(ki))
1012  s%XPERTLAI(:)=zwork(:,1)
1013 !
1014  CALL make_choice_array(hprogram, io%NPATCH, gdim, 'CV', zwork)
1015  ALLOCATE(s%XPERTCV(ki))
1016  s%XPERTCV(:)=zwork(:,1)
1017 !
1018  CALL make_choice_array(hprogram, io%NPATCH, gdim, 'PERTALB', zwork)
1019  ALLOCATE(s%XPERTALB(ki))
1020  s%XPERTALB(:)=zwork(:,1)
1021 
1022  pek => npe%AL(1)
1023  issk => niss%AL(1)
1024 
1025  WHERE(pek%XALBNIR_VEG (:)/=xundef) pek%XALBNIR_VEG(:) = pek%XALBNIR_VEG (:) *( 1.+ s%XPERTALB(:) )
1026  WHERE(pek%XALBVIS_VEG (:)/=xundef) pek%XALBVIS_VEG(:) = pek%XALBVIS_VEG (:) *( 1.+ s%XPERTALB(:) )
1027  WHERE(pek%XALBUV_VEG (:)/=xundef) pek%XALBUV_VEG (:) = pek%XALBUV_VEG (:) *( 1.+ s%XPERTALB(:) )
1028  WHERE(pek%XALBNIR_SOIL(:)/=xundef) pek%XALBNIR_SOIL(:) = pek%XALBNIR_SOIL(:) *( 1.+ s%XPERTALB(:) )
1029  WHERE(pek%XALBVIS_SOIL(:)/=xundef) pek%XALBVIS_SOIL(:) = pek%XALBVIS_SOIL(:) *( 1.+ s%XPERTALB(:) )
1030  WHERE(pek%XALBUV_SOIL (:)/=xundef) pek%XALBUV_SOIL (:) = pek%XALBUV_SOIL (:) *( 1.+ s%XPERTALB(:) )
1031 !
1032  CALL make_choice_array(hprogram, io%NPATCH, gdim, 'PERTZ0LAND', zwork)
1033  ALLOCATE(s%XPERTZ0(ki))
1034  s%XPERTZ0(:)=zwork(:,1)
1035  WHERE(pek%XZ0(:)/=xundef) pek%XZ0(:) = pek%XZ0(:) *( 1.+ s%XPERTZ0(:) )
1036  WHERE(issk%XZ0EFFIP(:)/=xundef) issk%XZ0EFFIP(:) = issk%XZ0EFFIP(:)*( 1.+ s%XPERTZ0(:) )
1037  WHERE(issk%XZ0EFFIM(:)/=xundef) issk%XZ0EFFIM(:) = issk%XZ0EFFIM(:)*( 1.+ s%XPERTZ0(:) )
1038  WHERE(issk%XZ0EFFJP(:)/=xundef) issk%XZ0EFFJP(:) = issk%XZ0EFFJP(:)*( 1.+ s%XPERTZ0(:) )
1039  WHERE(issk%XZ0EFFJM(:)/=xundef) issk%XZ0EFFJM(:) = issk%XZ0EFFJM(:)*( 1.+ s%XPERTZ0(:) )
1040 !
1041 ENDIF
1042 !
1043 !-------------------------------------------------------------------------------
1044 !
1045 !* 14. Output radiative fields
1046 ! -----------------------
1047 !
1048 ALLOCATE(s%XEMIS_NAT (ki))
1049 s%XEMIS_NAT (:) = xundef
1050 !
1051  CALL averaged_albedo_emis_isba(io, s, nk, np, npe, &
1052  pzenith, ztg1, psw_bands, pdir_alb, psca_alb, &
1053  s%XEMIS_NAT, ztsrad_nat, ztsurf_nat )
1054 !
1055 pemis = s%XEMIS_NAT
1056 ptsrad = ztsrad_nat
1057 ptsurf = ztsurf_nat
1058 !
1059 !-------------------------------------------------------------------------------
1060 !
1061 !* 15. ISBA diagnostics initialization
1062 ! -------------------------------
1063 !
1064 IF(io%NPATCH<=1) id%O%LPATCH_BUDGET=.false.
1065 !
1066  CALL diag_isba_init_n(chi, id%DE, id%DEC, id%NDE, id%NDEC, id%O, &
1067  id%D, id%DC, id%ND, id%NDC, id%DM, id%NDM, &
1068  oread_budgetc, ngb, gb, io, np, npe%AL(1)%TSNOW%SCHEME, &
1069  npe%AL(1)%TSNOW%NLAYER, SIZE(s%XABC), hprogram,ki,ksw)
1070 !
1071 !-------------------------------------------------------------------------------
1072 !
1073  CALL init_surf_topd(id%DEC, io, s, k, np, npe, ug, u, hprogram, u%NDIM_FULL)
1074 !
1075 !-------------------------------------------------------------------------------
1076 !
1077 ! End of IO
1078 !
1079  CALL end_io_surf_n(hprogram)
1080 !
1081 IF (lhook) CALL dr_hook('COMPUTE_ISBA_PARAMETERS',1,zhook_handle)
1082 !
1083 END SUBROUTINE compute_isba_parameters
1084 
1085 
subroutine init_top(IO, S, K, NK, NP, KLUOUT, PM)
Definition: init_top.F90:7
subroutine init_chemical_n(KLUOUT, KSV, HSV, SV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES)
real, parameter xf_decay
integer, parameter ndimtab
subroutine read_isba_n(DTCO, IO, S, NP, NPE, PCLAY, U, HPROGRAM)
Definition: read_isban.F90:7
subroutine fix_meb_veg(DTV, KDIM, OMEB_PATCH, KPATCH)
Definition: fix_meb_veg.F90:7
subroutine init_veg_n(IO, KK, PK, PEK, DTV, OSURF_DIAG_ALBEDO, PDIR_ALB, PSCA_ALB, PEMIS_OUT, PTSRAD)
Definition: init_vegn.F90:8
subroutine make_choice_array(HPROGRAM, KNPATCH, ODIM, HRECFM, PWORK, HDIR, KPATCH)
subroutine init_isba_mixpar(DTCO, DTV, KDIM, IO, KDECADE, KDECADE2, PCOVER, OCOVER, HSFTYP
subroutine diag_isba_init_n(CHI, DE, DEC, NDE, NDEC, DGO, D, DC,
subroutine open_file(HPROGRAM, KUNIT, HFILE, HFORM, HACTION, HACCESS, KR
Definition: open_file.F90:7
real, parameter xice_deph_max
subroutine convert_patch_isba(DTCO, DTV, IO, KDEC, KDEC2, PCOVER,
subroutine init_surf_topd(DEC, IO, S, K, NP, NPE, UG, U, HPROGRAM
subroutine init_slt(SLT, HPROGRAM)
Definition: init_slt.F90:8
subroutine isba_soc_parameters(HRUNOFF, PSOC, K, NP, PFRACSOC, PWSAT, PWFC, PWWILT, KPATCH)
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 init_isba_landuse(DTCO, UG, U, IO, NK, NP, NPE, PMESH_SIZE, HPROGRAM)
subroutine init_dst(DSTK, U, HPROGRAM, KSIZE_P, KR_P, PVEGTYPE_PATCH)
Definition: init_dst.F90:10
subroutine read_sbl_n(DTCO, U, SB, OSBL, HPROGRAM, HSURF)
Definition: read_sbln.F90:7
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
subroutine compute_isba_parameters(DTCO, OREAD_BUDGETC, UG, U, IO, DTI, SB, S, IG, K, NK, NIG, NP, NPE, NAG, NISS, ISS, NCHI, CHI, ID, GB, NGB, NDST, SLT, SV, HPROGRAM, HINIT, OLAND_USE, KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, HTEST)
integer nmesht
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:), allocatable xc_depth_ratio
integer, parameter nundef
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine close_file(HPROGRAM, KUNIT)
Definition: close_file.F90:7
subroutine ch_init_dep_isba_n(CHI, NCHI, NP, DTCO, KPATCH, OCOVER
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:7
subroutine allocate_physio(IO, KK, PK, PEK, KVEGTYPE)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
subroutine get_1d_mask(KSIZE, KFRAC, PFRAC, KMASK)
Definition: get_1d_mask.F90:6
subroutine exp_decay_soil_fr(HISBA, PF, PK, PC_DEPTH_RATIO)
logical lhook
Definition: yomhook.F90:15
subroutine averaged_albedo_emis_isba(IO, S, NK, NP, NPE, PZENITH, PTG1, PSW_BANDS, PDIR_ALB, PSC
static ll_t maxloc
Definition: getcurheap.c:48
subroutine get_z0rel(ISS, OMASK)
Definition: get_z0rel.F90:7
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
subroutine soiltemp_arp_par(IO, HPROGRAM)
subroutine carbon_init
Definition: carbon_init.F90:7
static int count
Definition: memory_hook.c:21