SURFEX v8.1
General documentation of Surfex
prep_hor_teb_garden_field.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 prep_hor_teb_garden_field (DTCO, UG, U, USS, GCP, IO, S, K, P, PEK, TG, TOP, &
7  HPROGRAM,HSURF,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,KPATCH,YDCTL)
8 ! #################################################################################
9 !
10 !!**** *PREP_HOR_TEB_GARDEN_FIELD* - reads, interpolates and prepares an ISBA field
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 !!** METHOD
16 !! ------
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !!
22 !! AUTHOR
23 !! ------
24 !! V. Masson
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 01/2004
29 !! P. Le Moigne 10/2005, Phasage Arome
30 !! P. Le Moigne 03/2007, Ajout initialisation par ascllv
31 !! B. Decharme 01/2009, Optional Arpege deep soil temperature initialization
32 !! B. Decharme 03/2014, external init with FA files
33 !! new vertical interpol
34 !! P. Marguinaud10/2014, Support for a 2-part PREP
35 !!------------------------------------------------------------------
36 !
39 USE modd_surf_atm_n, ONLY : surf_atm_t
40 USE modd_sso_n, ONLY : sso_t
42 !
45 !
46 USE modd_sfx_grid_n, ONLY : grid_t
48 !
51 USE modd_grid_grib, ONLY : cinmodel
52 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc
54 
55 USE modd_prep_teb_garden, ONLY : xgrid_soil, ngrid_level, &
56  xwsnow_gd, xrsnow_gd, xtsnow_gd, xlwcsnow_gd, &
57  xagesnow_gd, xasnow_gd, lsnow_ideal_gd
58 !
59 USE modd_isba_par, ONLY : xwgmin
60 USE modd_data_cover_par, ONLY : nvegtype
61 USE modd_surf_par, ONLY : xundef
62 !
64 !
65 USE modi_prep_grib_grid
66 USE modi_read_prep_teb_garden_conf
67 USE modi_read_prep_garden_snow
68 USE modi_prep_teb_garden_ascllv
69 USE modi_prep_teb_garden_grib
70 USE modi_prep_teb_garden_unif
71 USE modi_prep_teb_garden_buffer
72 USE modi_hor_interpol
73 USE modi_put_on_all_vegtypes
74 USE modi_vegtype_grid_to_patch_grid
75 USE modi_prep_hor_snow_fields
76 USE modi_get_luout
77 USE modi_prep_teb_garden_extern
78 USE modi_abor1_sfx
79 USE modi_allocate_gr_snow
80 !
81 USE yomhook ,ONLY : lhook, dr_hook
82 USE parkind1 ,ONLY : jprb
83 !
84 IMPLICIT NONE
85 !
86 #ifdef SFX_MPI
87 include "mpif.h"
88 #endif
89 !
90 !* 0.1 declarations of arguments
91 !
92 !
93 !
94 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
95 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
96 TYPE(surf_atm_t), INTENT(INOUT) :: U
97 TYPE(sso_t), INTENT(INOUT) :: USS
98 TYPE(grid_conf_proj_t),INTENT(INOUT) :: GCP
99 !
100 TYPE(isba_options_t), INTENT(INOUT) :: IO
101 TYPE(isba_s_t), INTENT(INOUT) :: S
102 TYPE(isba_k_t), INTENT(INOUT) :: K
103 TYPE(isba_p_t), INTENT(INOUT) :: P
104 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
105 TYPE(grid_t), INTENT(INOUT) :: TG
106 TYPE(teb_options_t), INTENT(INOUT) :: TOP
107 type(prep_ctl), INTENT(INOUT) :: ydctl
108 !
109  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
110  CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field
111  CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! name of the Atmospheric file
112  CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! type of the Atmospheric file
113  CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the Atmospheric file
114  CHARACTER(LEN=6), INTENT(IN) :: HPGDFILETYPE! type of the Atmospheric file
115 !
116 INTEGER, INTENT(IN) :: KPATCH
117 !
118 !* 0.2 declarations of local variables
119 !
120  CHARACTER(LEN=6) :: YFILETYPE ! type of input file
121  CHARACTER(LEN=28) :: YFILE ! name of file
122  CHARACTER(LEN=6) :: YFILEPGDTYPE ! type of input file
123  CHARACTER(LEN=28) :: YFILEPGD ! name of file
124  CHARACTER(LEN=6) :: YFILETYPE_SNOW ! type of input file
125  CHARACTER(LEN=28) :: YFILE_SNOW ! name of file
126  CHARACTER(LEN=6) :: YFILEPGDTYPE_SNOW ! type of input file
127  CHARACTER(LEN=28) :: YFILEPGD_SNOW ! name of file
128 REAL, POINTER, DIMENSION(:,:,:) :: ZFIELDIN=>null() ! field to interpolate horizontally
129 !
130 TYPE(nsurf_snow) :: TNPSNOW
131 !
132 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: ZFIELDOUTP ! field interpolated horizontally
133 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: ZFIELDOUTV !
134 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: ZVEGTYPE_PATCH ! vegtype for each patch
135 REAL, ALLOCATABLE, DIMENSION(:,:) :: ZW ! work array (x, fine soil grid)
136 REAL, ALLOCATABLE, DIMENSION(:) :: ZSUM
137 REAL, ALLOCATABLE, DIMENSION(:,:) :: ZF ! work array (x, output soil grid)
138 REAL, ALLOCATABLE, DIMENSION(:,:) :: ZDG ! out T grid (x, output soil grid)
139 REAL, ALLOCATABLE, DIMENSION(:,:) :: ZPATCH ! work array for patches
140 REAL, ALLOCATABLE, DIMENSION(:) :: ZSG1SNOW, ZSG2SNOW, ZHISTSNOW
141 INTEGER :: ILUOUT ! output listing logical unit
142 !
143 type(date_time) :: tztime_grib ! current date and time
144 LOGICAL :: GUNIF ! flag for prescribed uniform field
145 LOGICAL :: GUNIF_SNOW! flag for prescribed uniform field
146 INTEGER :: JVEGTYPE, JPATCH ! loop on vegtypes
147 INTEGER :: JLAYER ! loop on layers
148 INTEGER :: JI, INP, INL, INI
149 INTEGER :: IWORK ! Work integer
150 INTEGER :: INFOMPI
151 REAL(KIND=JPRB) :: ZHOOK_HANDLE
152 !-------------------------------------------------------------------------------------
153 !
154 !
155 !* 1. Reading of input file name and type
156 !
157 IF (lhook) CALL dr_hook('PREP_HOR_TEB_GARDEN_FIELD',0,zhook_handle)
158 !
159 IF (.NOT. prep_ctl_can(ydctl)) THEN
160  CALL abor1_sfx('PREP_HOR_TEB_GARDEN_FIELD: TWO STEP PREP NOT IMPLEMENTED')
161 ENDIF
162 !
163  CALL get_luout(hprogram,iluout)
164 !
165  CALL read_prep_teb_garden_conf(hprogram,hsurf,yfile,yfiletype,yfilepgd,yfilepgdtype,&
166  hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,iluout,gunif)
167 !
168 cmask = 'TOWN '
169 !
170 ini=SIZE(tg%XLAT)
171 !-------------------------------------------------------------------------------------
172 !
173 !* 2. Snow variables case?
174 !
175 IF (hsurf=='SN_VEG ') THEN
176  CALL read_prep_garden_snow(hprogram,pek%TSNOW%SCHEME,pek%TSNOW%NLAYER,yfile_snow,&
177  yfiletype_snow,yfilepgd_snow,yfilepgdtype_snow,gunif_snow)
178  !
179  IF(.NOT.gunif_snow.AND.len_trim(yfile_snow)==0.AND.len_trim(yfiletype_snow)==0)THEN
180  !IF(LEN_TRIM(YFILE)/=0.AND.LEN_TRIM(YFILETYPE)/=0)THEN
181  IF (yfiletype=='GRIB') THEN
182  yfile_snow = yfile
183  yfiletype_snow = yfiletype
184  yfilepgd_snow = yfilepgd
185  yfilepgdtype_snow = yfilepgdtype
186  ELSE
187  gunif_snow = .true.
188  IF(all(xwsnow_gd==xundef)) xwsnow_gd = 0.0
189  ENDIF
190  ENDIF
191  !
192  ALLOCATE(zsg1snow(SIZE(xwsnow_gd)))
193  ALLOCATE(zsg2snow(SIZE(xwsnow_gd)))
194  ALLOCATE(zhistsnow(SIZE(xwsnow_gd)))
195  !
196  ALLOCATE(tnpsnow%AL(1))
197  tnpsnow%AL(1)%SCHEME = pek%TSNOW%SCHEME
198  tnpsnow%AL(1)%NLAYER = pek%TSNOW%NLAYER
199  !
200  CALL prep_hor_snow_fields(dtco, tg, u, gcp, hprogram,hsurf, &
201  yfile,yfiletype, &
202  yfilepgd, yfilepgdtype, &
203  iluout,gunif_snow,1, kpatch, &
204  ini, tnpsnow, top%TTIME, &
205  xwsnow_gd, xrsnow_gd, xtsnow_gd,&
206  xlwcsnow_gd, xasnow_gd, &
207  lsnow_ideal_gd, zsg1snow, &
208  zsg2snow, zhistsnow, xagesnow_gd, ydctl, &
209  pvegtype_patch=s%XVEGTYPE_PATCH, ppatch=s%XPATCH )
210  !
211  CALL allocate_gr_snow(pek%TSNOW,ini)
212  pek%TSNOW%WSNOW = tnpsnow%AL(1)%WSNOW
213  pek%TSNOW%RHO = tnpsnow%AL(1)%RHO
214  pek%TSNOW%ALB = tnpsnow%AL(1)%ALB
215  IF (pek%TSNOW%SCHEME/='D95') pek%TSNOW%HEAT = tnpsnow%AL(1)%HEAT
216  IF (pek%TSNOW%SCHEME=='CRO'.OR.pek%TSNOW%SCHEME=='3-L') &
217  pek%TSNOW%AGE = tnpsnow%AL(1)%AGE
218  IF (pek%TSNOW%SCHEME=='CRO') THEN
219  pek%TSNOW%GRAN1 = tnpsnow%AL(1)%GRAN1
220  pek%TSNOW%GRAN2 = tnpsnow%AL(1)%GRAN2
221  pek%TSNOW%HIST = tnpsnow%AL(1)%HIST
222  ENDIF
223  !
224  CALL type_snow_init(tnpsnow%AL(1))
225  DEALLOCATE(tnpsnow%AL)
226  !
227  DEALLOCATE(zsg1snow)
228  DEALLOCATE(zsg2snow)
229  DEALLOCATE(zhistsnow)
230  IF (lhook) CALL dr_hook('PREP_HOR_TEB_GARDEN_FIELD',1,zhook_handle)
231  RETURN
232 END IF
233 !
234 !-------------------------------------------------------------------------------------
235 !
236 !* 3. Reading of input configuration (Grid and interpolation type)
237 !
238 IF (gunif) THEN
239  CALL prep_teb_garden_unif(iluout,hsurf,zfieldin)
240 ELSE IF (yfiletype=='ASCLLV') THEN
241  CALL prep_teb_garden_ascllv(dtco, ug, u, uss, hprogram,hsurf,iluout,zfieldin)
242 ELSE IF (yfiletype=='GRIB ') THEN
243  CALL prep_grib_grid(yfile,iluout,cinmodel,cingrid_type,cinterp_type,tztime_grib)
244  IF (nrank==npio) CALL prep_teb_garden_grib(hprogram,hsurf,yfile,iluout,zfieldin)
245 ELSE IF (yfiletype=='MESONH' .OR. yfiletype=='ASCII ' .OR. yfiletype=='LFI '&
246  .OR.yfiletype=='FA '.OR. yfiletype=='AROME '.OR.yfiletype=='NC ') THEN
247  CALL prep_teb_garden_extern(dtco, io, u, gcp, &
248  hprogram,hsurf,yfile,yfiletype,yfilepgd,yfilepgdtype,iluout,kpatch,zfieldin)
249 ELSE IF (yfiletype=='BUFFER') THEN
250  CALL prep_teb_garden_buffer(hprogram,hsurf,iluout,zfieldin)
251 ELSE
252  CALL abor1_sfx('PREP_HOR_TEB_GARDEN_FIELD: data file type not supported : '//yfiletype)
253 END IF
254 !
255 !-------------------------------------------------------------------------------------
256 !
257 !* 5. Horizontal interpolation
258 !
259 IF (nrank==npio) THEN
260  inl = SIZE(zfieldin,2)
261  inp = SIZE(zfieldin,3)
262 ELSE
263  IF (.NOT.ASSOCIATED(zfieldin)) ALLOCATE(zfieldin(0,0,0))
264 ENDIF
265 !
266 IF (nproc>1) THEN
267 #ifdef SFX_MPI
268  CALL mpi_bcast(inl,kind(inl)/4,mpi_integer,npio,ncomm,infompi)
269  CALL mpi_bcast(inp,kind(inp)/4,mpi_integer,npio,ncomm,infompi)
270 #endif
271 ENDIF
272 !
273 ALLOCATE(zfieldoutp(ini,inl,inp))
274 !
275 DO jpatch = 1, inp
276  IF (inp==nvegtype) linterp = (s%XVEGTYPE(:,jpatch) > 0.)
277  CALL hor_interpol(dtco, u, gcp, iluout,zfieldin(:,:,jpatch),zfieldoutp(:,:,jpatch))
278  linterp = .true.
279 END DO
280 !
281 DEALLOCATE(zfieldin )
282 !
283 ALLOCATE(zw(ini,inl))
284 zw = 0.
285 !
286 IF (1/=inp) THEN
287  !
288  ALLOCATE(zfieldoutv(ini,inl,nvegtype))
289  CALL put_on_all_vegtypes(ini,inl,inp,nvegtype,zfieldoutp,zfieldoutv)
290  !
291  ALLOCATE(zsum(ini))
292  DO jlayer=1,SIZE(zw,2)
293  zsum(:) = sum(s%XVEGTYPE(:,:),2,zfieldoutv(:,jlayer,:)/=xundef)
294  DO jvegtype=1,nvegtype
295  WHERE (zfieldoutv(:,jlayer,jvegtype)/=xundef)
296  zw(:,jlayer) = zw(:,jlayer) + s%XVEGTYPE(:,jvegtype) * zfieldoutv(:,jlayer,jvegtype) / zsum(:)
297  END WHERE
298  END DO
299  DO ji=1,SIZE(zw,1)
300  IF (all(zfieldoutv(ji,jlayer,:)==xundef)) zw(ji,jlayer) = xundef
301  ENDDO
302  END DO
303  DEALLOCATE(zfieldoutv)
304  DEALLOCATE(zsum)
305  !
306 ELSE
307  !
308  zw(:,:) = zfieldoutp(:,:,1)
309  !
310 ENDIF
311 !
312 DEALLOCATE(zfieldoutp)
313 !
314 !-------------------------------------------------------------------------------------
315 !
316 !* 7. Return to historical variable
317 !
318 !
319 SELECT CASE (hsurf)
320  !
321  !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
322  !
323  CASE('WG ')
324  ALLOCATE(zf(ini,io%NGROUND_LAYER))
325  !
326  !* interpolates on output levels
327  CALL init_from_ref_grid(xgrid_soil,zw,p%XDG(:,:),zf)
328  !
329  !* retrieves soil water content from soil relative humidity
330  ALLOCATE(pek%XWG(ini,io%NGROUND_LAYER))
331  pek%XWG(:,:) = k%XWWILT + zf(:,:) * (k%XWFC-k%XWWILT)
332  pek%XWG(:,:) = max(min(pek%XWG(:,:),k%XWSAT),xwgmin)
333  !
334  WHERE(zf(:,:)==xundef)pek%XWG(:,:)=xundef
335  !
336  DEALLOCATE(zf)
337  !
338  !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
339  !
340  CASE('WGI ')
341  ALLOCATE(zf(ini,io%NGROUND_LAYER))
342  !
343  !* interpolates on output levels
344  CALL init_from_ref_grid(xgrid_soil,zw,p%XDG(:,:),zf)
345  !
346  !* retrieves soil ice content from soil relative humidity
347  ALLOCATE(pek%XWGI(ini,io%NGROUND_LAYER))
348  pek%XWGI(:,:) = zf(:,:) * k%XWSAT
349  pek%XWGI(:,:) = max(min(pek%XWGI(:,:),k%XWSAT),0.)
350  !
351  WHERE(zf(:,:)==xundef)pek%XWGI(:,:)=xundef
352  !
353  DEALLOCATE(zf)
354  !
355  !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
356  !
357  CASE('TG ')
358  iwork=io%NGROUND_LAYER
359  ALLOCATE(pek%XTG(ini,iwork))
360  ALLOCATE(zdg(SIZE(p%XDG,1),iwork))
361  IF (io%CISBA=='2-L'.OR.io%CISBA=='3-L') THEN
362  zdg(:,1) = 0.01
363  zdg(:,2) = 0.40 ! deep temperature for force-restore taken at 20cm
364  IF(io%CISBA=='3-L') zdg(:,3) = 5.00 ! climatological temperature, usually not used
365  ELSE
366  !* diffusion method, the soil grid is the same as for humidity
367  zdg(:,:) = p%XDG(:,:)
368  END IF
369  CALL init_from_ref_grid(xgrid_soil,zw,zdg,pek%XTG(:,:))
370  DEALLOCATE(zdg)
371  !
372 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
373  !
374  CASE('WR ')
375  ALLOCATE(pek%XWR(ini))
376  pek%XWR(:) = zw(:,1)
377  !
378  !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
379  !
380  CASE('LAI ')
381  !* LAI is updated only if present and pertinent (evolutive LAI) in input file
382 
383  WHERE (zw(:,1)/=xundef) pek%XLAI(:) = zw(:,1)
384  !
385 END SELECT
386 !
387 DEALLOCATE(zw)
388 !-------------------------------------------------------------------------------------
389 !
390 !* 8. Deallocations
391 !
392 !
393 IF (lhook) CALL dr_hook('PREP_HOR_TEB_GARDEN_FIELD',1,zhook_handle)
394 !
395 !-------------------------------------------------------------------------------------
396 !-------------------------------------------------------------------------------------
397 !
398 CONTAINS
399 !
400 !-------------------------------------------------------------------------------------
401 !-------------------------------------------------------------------------------------
402 !
403 SUBROUTINE init_from_ref_grid(PGRID1,PT1,PD2,PT2)
404 !
406 !
407 REAL, DIMENSION(:,:), INTENT(IN) :: PT1 ! variable profile
408 REAL, DIMENSION(:), INTENT(IN) :: PGRID1 ! normalized grid
409 REAL, DIMENSION(:,:), INTENT(IN) :: PD2 ! output layer thickness
410 REAL, DIMENSION(:,:), INTENT(OUT) :: PT2 ! variable profile
411 !
412 INTEGER :: JI, JL ! loop counter
413 REAL, DIMENSION(SIZE(PT1),SIZE(PT1,2)) :: ZD1 ! input grid
414 !
415 INTEGER :: ILAYER1, ILAYER2
416 REAL(KIND=JPRB) :: ZHOOK_HANDLE
417 !
418 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
419 !
420 IF (lhook) CALL dr_hook('INIT_FROM_REF_GRID',0,zhook_handle)
421 !
422 IF (SIZE(pt1,2)==3) THEN
423 !
424 !* 1. case with only 3 input levels (typically coming from 'UNIF')
425 ! -----------------------------
426 !
427  IF (io%CISBA=='2-L' .OR. io%CISBA=='3-L') THEN
428  !* Possible LTEMP_ARP case
429  IF(SIZE(pt2,2)>3)THEN
430  ilayer1=3
431  ilayer2=SIZE(pt2,2)
432  ELSE
433  ilayer1=SIZE(pt2,2)
434  ilayer2=0
435  ENDIF
436  !* historical 2L or 3L ISBA version
437  pt2(:,1:ilayer1) = pt1(:,1:ilayer1)
438  !* Possible LTEMP_ARP case
439  IF(ilayer2>0)THEN
440  DO jl=ilayer1+1,ilayer2
441  pt2(:,jl) = pt2(:,ilayer1)
442  ENDDO
443  ENDIF
444 !
445  ELSEIF(io%CISBA=='DIF')THEN
446  !surface layer (generally 0.01m imposed)
447  pt2(:,1) = pt1(:,1)
448  !deep layers
449  DO jl=2,io%NGROUND_LAYER
450  pt2(:,jl) = pt1(:,3)
451  END DO
452  !if root layers
453  DO ji=1,SIZE(pt1,1)
454  DO jl=2,io%NGROUND_LAYER
455  IF(p%XROOTFRAC(ji,jl)<=1.0)THEN
456  pt2(ji,jl) = pt1(ji,2)
457  EXIT
458  ENDIF
459  END DO
460  END DO
461  END IF
462 !
463 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
464 ELSE
465 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
466 !
467 !* 2. case with fine grid as input (general case)
468 ! ----------------------------
469 !
470  DO jl=1,SIZE(pt1,2)
471  zd1(:,jl) = pgrid1(jl)
472  END DO
473 !
474  CALL interp_grid_nat(zd1,pt1(:,:),pd2,pt2(:,:))
475 !
476 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
477 ENDIF
478 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
479 !
480 IF (lhook) CALL dr_hook('INIT_FROM_REF_GRID',1,zhook_handle)
481 !
482 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
483 END SUBROUTINE init_from_ref_grid
484 !-------------------------------------------------------------------------------------
485 !
486 END SUBROUTINE prep_hor_teb_garden_field
subroutine prep_grib_grid(HGRIB, KLUOUT, HINMODEL, HGRIDTYPE, HINTERP_
character(len=10) cingrid_type
Definition: modd_prep.F90:39
subroutine prep_hor_teb_garden_field(DTCO, UG, U, USS, GCP, IO, S, K, P, PEK, TG, TOP, HPROGRAM, HSURF, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KPATCH, YDCTL)
subroutine prep_teb_garden_ascllv(DTCO, UG, U, USS, HPROGRAM, HSURF, KLUOUT, PFIELD)
subroutine prep_hor_snow_fields(DTCO, G, U, GCP, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, OUNIF, KPATCH, KTEB_PATCH, KL, TNPSNOW, TPTIME, PUNIF_WSNOW, PUNIF_RSNOW, PUNIF_TSNOW, PUNIF_LWCSNOW, PUNIF_ASNOW, OSNOW_IDEAL, PUNIF_SG1SNOW, PUNIF_SG2SNOW, PUNIF_HISTSNOW, PUNIF_AGESNOW, YDCTL, PVEGTYPE_PATCH, KSIZE_P, KR_P, PPATCH, OKEY)
subroutine init_from_ref_grid(PGRID1, PT1, PD2, PT2)
real, dimension(:), allocatable xzs_ls
Definition: modd_prep.F90:45
character(len=6) cmask
Definition: modd_prep.F90:41
subroutine prep_teb_garden_unif(KLUOUT, HSURF, PFIELD)
character(len=6) cinterp_type
Definition: modd_prep.F90:40
subroutine read_prep_garden_snow(HPROGRAM, HSNOW, KSNOW_LAYER, HFILE,
subroutine put_on_all_vegtypes(KNI, KLAYER, KPATCH, KVEGTYPE, PFIELD_P
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
character(len=6) cinmodel
subroutine prep_teb_garden_extern(DTCO, IO, U, GCP, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, KPATCH, PFIELD)
logical, dimension(:), allocatable linterp
Definition: modd_prep.F90:43
subroutine hor_interpol(DTCO, U, GCP, KLUOUT, PFIELDIN, PFIELDOUT)
Definition: hor_interpol.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
logical function prep_ctl_can(YDCTL)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
subroutine allocate_gr_snow(TPSNOW, KLU)
subroutine read_prep_teb_garden_conf(HPROGRAM, HVAR, HFILE, HFILETYPE
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
logical lhook
Definition: yomhook.F90:15
subroutine prep_teb_garden_buffer(HPROGRAM, HSURF, KLUOUT, PFIELD)
subroutine prep_teb_garden_grib(HPROGRAM, HSURF, HFILE, KLUOUT, PFIELD)
subroutine type_snow_init(YSURF_SNOW)