SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
prep_hor_snow_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_snow_field (DTCO, &
7  ig, u, &
8  hprogram, &
9  hfile,hfiletype, &
10  hfilepgd,hfilepgdtype, &
11  kluout,ounif,hsnsurf,kpatch, &
12  kteb_patch, &
13  kl,tpsnow, tptime, &
14  punif_wsnow, punif_rsnow, &
15  punif_tsnow, punif_lwcsnow, &
16  punif_asnow, osnow_ideal, &
17  punif_sg1snow, punif_sg2snow, &
18  punif_histsnow,punif_agesnow, &
19  pf,pdepth,pvegtype, &
20  pvegtype_patch,ppatch )
21 ! #######################################################
22 !
23 !!**** *PREP_HOR_SNOW_FIELD* - reads, interpolates and prepares a snow field
24 !!
25 !! PURPOSE
26 !! -------
27 !!
28 !!** METHOD
29 !! ------
30 !!
31 !! REFERENCE
32 !! ---------
33 !!
34 !!
35 !! AUTHOR
36 !! ------
37 !! V. Masson
38 !!
39 !! MODIFICATIONS
40 !! -------------
41 !! Original 01/2004
42 !! P. Le Moigne 10/2005, Phasage Arome
43 !! B. Decharme 10/2013, Phasage Arpège-Climat
44 !! M. Lafaysse 11/2012, snow liquid water content
45 !! B. Decharme 04/2014, external init with FA files
46 !! new init for ES
47 !!------------------------------------------------------------------
48 !
49 !
50 !
51 !
52 !
53 !
55 !
56 USE modd_isba_grid_n, ONLY : isba_grid_t
57 USE modd_surf_atm_n, ONLY : surf_atm_t
58 !
61 !
62 USE modd_csts, ONLY : xtt
63 USE modd_prep_snow, ONLY : xgrid_snow
64 USE modd_surf_par, ONLY : xundef
65 USE modd_data_cover_par, ONLY : nvegtype, nvt_snow
66 USE modd_prep, ONLY : linterp
67 !
68 USE modd_snow_par, ONLY : xansmax
69 !
70 USE modi_prep_snow_grib
71 USE modi_prep_snow_unif
72 USE modi_prep_snow_extern
73 USE modi_prep_snow_buffer
74 USE modi_hor_interpol
75 USE modi_vegtype_grid_to_patch_grid
77 USE modi_vegtype_to_patch
78 !
79 USE modi_abor1_sfx
80 !
81 USE yomhook ,ONLY : lhook, dr_hook
82 USE parkind1 ,ONLY : jprb
83 !
84 IMPLICIT NONE
85 !
86 !* 0.1 declarations of arguments
87 !
88 !
89 !
90 TYPE(data_cover_t), INTENT(INOUT) :: dtco
91 !
92 TYPE(isba_grid_t), INTENT(INOUT) :: ig
93 TYPE(surf_atm_t), INTENT(INOUT) :: u
94 !
95  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
96  CHARACTER(LEN=28), INTENT(IN) :: hfile ! file name
97  CHARACTER(LEN=6), INTENT(IN) :: hfiletype ! file type
98  CHARACTER(LEN=28), INTENT(IN) :: hfilepgd ! file name
99  CHARACTER(LEN=6), INTENT(IN) :: hfilepgdtype ! file type
100 INTEGER, INTENT(IN) :: kluout ! logical unit of output listing
101 LOGICAL, INTENT(IN) :: ounif ! flag for prescribed uniform field
102  CHARACTER(LEN=10) :: hsnsurf ! type of field
103 INTEGER, INTENT(IN) :: kpatch ! patch number for output scheme
104 INTEGER, INTENT(IN) :: kteb_patch
105 INTEGER, INTENT(IN) :: kl ! number of points
106 TYPE(surf_snow) :: tpsnow ! snow fields
107 TYPE(date_time), INTENT(IN) :: tptime ! date and time
108 REAL, DIMENSION(:), INTENT(IN) :: punif_wsnow ! prescribed snow content (kg/m2)
109 REAL, DIMENSION(:), INTENT(IN) :: punif_rsnow ! prescribed density (kg/m3)
110 REAL, DIMENSION(:), INTENT(IN) :: punif_tsnow ! prescribed temperature (K)
111 REAL, DIMENSION(:), INTENT(IN) :: punif_lwcsnow ! prescribed snow liquid water content (kg/m3)
112 REAL, INTENT(IN) :: punif_asnow ! prescribed albedo (-)
113 LOGICAL, INTENT(IN) :: osnow_ideal
114 REAL, DIMENSION(:), INTENT(IN) :: punif_sg1snow !
115 REAL, DIMENSION(:), INTENT(IN) :: punif_sg2snow !
116 REAL, DIMENSION(:), INTENT(IN) :: punif_histsnow !
117 REAL, DIMENSION(:), INTENT(IN) :: punif_agesnow !
118 
119 REAL,DIMENSION(:,:,:), INTENT(OUT),OPTIONAL :: pf ! output field (x,kpatch)
120 REAL,DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: pdepth ! thickness of each snow layer
121 REAL,DIMENSION(:,:), INTENT(IN), OPTIONAL :: pvegtype ! fraction of each vegtype
122 REAL,DIMENSION(:,:,:), INTENT(IN), OPTIONAL :: pvegtype_patch ! fraction of each vegtype per patch
123 REAL,DIMENSION(:,:), INTENT(IN), OPTIONAL :: ppatch ! fraction of each patch
124 !
125 !
126 !* 0.2 declarations of local variables
127 !
128 REAL, POINTER, DIMENSION(:,:,:) :: zfieldin ! field to interpolate horizontally
129 REAL, POINTER, DIMENSION(:,:) :: zfield ! field to interpolate horizontally
130 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: zfieldout ! field interpolated horizontally
131 REAL, ALLOCATABLE, DIMENSION(:,:) :: zd ! snow depth (x, kpatch)
132 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: zw ! work array (x, fine snow grid, kpatch)
133 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: zheat ! work array (x, output snow grid, kpatch)
134 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: zgrid ! grid array (x, output snow grid, kpatch)
135 !
136 LOGICAL :: gsnow_ideal
137 INTEGER :: jpatch ! loop on patches
138 INTEGER :: jvegtype ! loop on vegtypes
139 INTEGER :: jlayer ! loop on layers
140 REAL(KIND=JPRB) :: zhook_handle
141 !----------------------------------------------------------------------------
142 !
143 !* 1. Does the field exist?
144 !
145 !
146 IF (lhook) CALL dr_hook('PREP_HOR_SNOW_FIELD',0,zhook_handle)
147 !
148 gsnow_ideal = .false.
149 !
150 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
151 !
152 !* 2. Reading of input configuration (Grid and interpolation type)
153 !
154 IF (ounif) THEN
155  gsnow_ideal = osnow_ideal
156  CALL prep_snow_unif(kluout,hsnsurf,zfieldin, tptime, gsnow_ideal, &
157  punif_wsnow, punif_rsnow, punif_tsnow, &
158  punif_lwcsnow, punif_asnow, punif_sg1snow, &
159  punif_sg2snow, punif_histsnow, punif_agesnow, &
160  tpsnow%NLAYER )
161 ELSE IF (hfiletype=='GRIB ') THEN
162  CALL prep_snow_grib(hprogram,hsnsurf,hfile,kluout,tpsnow%NLAYER,zfieldin)
163 ELSE IF (hfiletype=='MESONH' .OR. hfiletype=='ASCII ' .OR. hfiletype=='LFI '.OR. hfiletype=='FA ') THEN
164  gsnow_ideal = osnow_ideal
165  CALL prep_snow_extern(&
166  hprogram,hsnsurf,hfile,hfiletype,hfilepgd,hfilepgdtype,&
167  kluout,zfieldin,gsnow_ideal,tpsnow%NLAYER,kteb_patch)
168 ELSE IF (hfiletype=='BUFFER') THEN
169  CALL prep_snow_buffer(ig, u, &
170  hprogram,hsnsurf,kluout,tpsnow%NLAYER,zfieldin)
171 ELSE
172  CALL abor1_sfx('PREP_HOR_SNOW_FIELD: data file type not supported : '//hfiletype)
173 END IF
174 !
175 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
176 !
177 !* 3. Horizontal interpolation
178 !
179 ALLOCATE(zfieldout(kl,SIZE(zfieldin,2),SIZE(zfieldin,3)))
180 ALLOCATE(zfield(SIZE(zfieldin,1),SIZE(zfieldin,2)))
181 !
182 DO jvegtype = 1, SIZE(zfieldin,3)
183  !* horizontal interpolation
184  zfield=zfieldin(:,:,jvegtype)
185  IF(present(pvegtype).AND.SIZE(zfieldin,3)==nvegtype) linterp(:) = (pvegtype(:,jvegtype) > 0.)
186  IF(present(pdepth)) THEN
187  jpatch = 1
188  IF (kpatch>1) jpatch = vegtype_to_patch(jvegtype,kpatch)
189  linterp(:) = (linterp(:).AND.pdepth(:,1,jpatch)>0..AND.pdepth(:,1,jpatch)<xundef)
190  ENDIF
191  !
192  CALL hor_interpol(dtco, u, &
193  kluout,zfield,zfieldout(:,:,jvegtype))
194  !
195  linterp(:) = .true.
196 END DO
197 !
198 DEALLOCATE(zfield)
199 !
200 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
201 !
202 !* 4. Transformation from vegtype grid to patch grid, if any
203 !
204 ALLOCATE(zw(SIZE(zfieldout,1),SIZE(zfieldout,2),kpatch))
205 !
206 zw = 0.
207 IF (SIZE(zfieldout,3)==nvegtype.AND.SIZE(pvegtype_patch,2)==nvegtype) THEN
208  CALL vegtype_grid_to_patch_grid(kpatch,pvegtype_patch,ppatch,zfieldout,zw)
209 ELSE
210  DO jpatch=1,kpatch
211  zw(:,:,jpatch) = zfieldout(:,:,1)
212  END DO
213 END IF
214 !
215 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
216 !
217 !* 5. Defines normalized output grid, if depths of snow layers are present
218 !
219 IF (present(pdepth) .AND. .NOT.gsnow_ideal) THEN
220 !
221 !* total snow depth
222 !
223  ALLOCATE(zd(SIZE(tpsnow%WSNOW,1),kpatch))
224  zd(:,:)=0.
225  DO jpatch=1,kpatch
226  DO jlayer=1,tpsnow%NLAYER
227  WHERE (pdepth(:,jlayer,jpatch)/=xundef) zd(:,jpatch) = zd(:,jpatch) + pdepth(:,jlayer,jpatch)
228  END DO
229  END DO
230 !
231 !* grid at center of layers
232 !
233  ALLOCATE(zgrid(SIZE(zw,1),tpsnow%NLAYER,kpatch))
234  zgrid(:,1,:) = pdepth(:,1,:)
235  IF(tpsnow%NLAYER>1)THEN
236  DO jpatch=1,kpatch
237  DO jlayer=2,tpsnow%NLAYER
238  zgrid(:,jlayer,jpatch) = zgrid(:,jlayer-1,jpatch) + pdepth(:,jlayer,jpatch)
239  ENDDO
240  ENDDO
241  ENDIF
242 !
243 !* normalized grid
244 !
245  DO jpatch=1,kpatch
246  DO jlayer=1,tpsnow%NLAYER
247  WHERE (zd(:,jpatch)/=0.)
248  zgrid(:,jlayer,jpatch) = zgrid(:,jlayer,jpatch) / zd(:,jpatch)
249  ELSEWHERE
250  zgrid(:,jlayer,jpatch) = 1.0
251  END WHERE
252  END DO
253  END DO
254 !
255  DEALLOCATE(zd)
256 !
257 ELSEIF (.NOT.gsnow_ideal) THEN
258  IF (hsnsurf(1:3)=='RHO' .OR. hsnsurf(1:3)=='HEA') THEN
259  WRITE(kluout,*) 'when interpolation profiles of snow pack quantities,'
260  WRITE(kluout,*) 'depth of snow layers must be given'
261  CALL abor1_sfx('PREP_HOR_SNOW_FIELD: DEPTH OF SNOW LAYERS NEEDED')
262  END IF
263 END IF
264 !
265 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
266 !
267 !* 6. Return to historical variable
268 !
269 SELECT CASE (hsnsurf(1:3))
270  !
271  CASE('WWW') ! total snow content
272  !
273  IF (gsnow_ideal) THEN
274  pf(:,:,:) = zw(:,:,:)
275  ELSE
276  DO jlayer=1,SIZE(pf,2)
277  pf(:,jlayer,:) = zw(:,1,:)
278  ENDDO
279  ENDIF
280  !
281  IF (present(ppatch)) THEN
282  DO jlayer = 1,tpsnow%NLAYER
283  WHERE(ppatch(:,:)==0.)
284  pf(:,jlayer,:) = xundef
285  END WHERE
286  ENDDO
287  ENDIF
288  !
289  CASE('DEP') ! snow thickness
290  !
291  IF (gsnow_ideal) THEN
292  pf(:,:,:) = zw(:,:,:)
293  ELSE
294  DO jlayer=1,SIZE(pf,2)
295  pf(:,jlayer,:) = zw(:,jlayer,:)
296  ENDDO
297  ENDIF
298  !
299  IF (present(ppatch)) THEN
300  DO jlayer = 1,tpsnow%NLAYER
301  WHERE(ppatch(:,:)==0.)
302  pf(:,jlayer,:) = xundef
303  END WHERE
304  ENDDO
305  ENDIF
306  !
307  !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
308  !
309  CASE('RHO')
310  !
311  IF (gsnow_ideal) THEN
312  tpsnow%RHO(:,:,:) = zw(:,:,:)
313  ELSEIF(SIZE(zw,2)==tpsnow%NLAYER)THEN
314  tpsnow%RHO(:,:,:) = zw(:,:,:)
315  ELSE
316  !* interpolation on snow levels
317  CALL init_from_ref_grid(xgrid_snow,zw,zgrid,tpsnow%RHO)
318  ENDIF
319  !
320  !* mask for areas where there is no snow
321  DO jpatch=1,kpatch
322  DO jlayer=1,tpsnow%NLAYER
323  WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%RHO(:,jlayer,jpatch) = xundef
324  END DO
325  END DO
326  !
327  !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
328  !
329  CASE('ALB')
330  !
331  DO jpatch=1,kpatch
332  tpsnow%ALB(:,jpatch) = zw(:,1,jpatch)
333  END DO
334  !
335  !* mask for areas where there is no snow
336  DO jpatch=1,kpatch
337  WHERE(pdepth(:,1,jpatch)==0. .OR. pdepth(:,1,jpatch)==xundef) tpsnow%ALB(:,jpatch) = xundef
338  END DO
339  !
340  !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
341  !
342  CASE('HEA')
343  !
344  IF (tpsnow%SCHEME=='3-L' .OR. tpsnow%SCHEME=='CRO') THEN
345  !
346  IF (gsnow_ideal) THEN
347  tpsnow%HEAT(:,:,:) = zw(:,:,:)
348  ELSEIF(SIZE(zw,2)==tpsnow%NLAYER)THEN
349  tpsnow%HEAT(:,:,:) = zw(:,:,:)
350  ELSE
351  !* interpolation of heat on snow levels
352  CALL init_from_ref_grid(xgrid_snow,zw,zgrid,tpsnow%HEAT)
353  ENDIF
354  !
355  !* mask for areas where there is no snow
356  DO jpatch=1,kpatch
357  DO jlayer=1,tpsnow%NLAYER
358  WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%HEAT(:,jlayer,jpatch) = xundef
359  END DO
360  END DO
361  !
362  ELSE IF (tpsnow%SCHEME=='1-L') THEN
363  !* interpolation of heat on snow levels
364  ALLOCATE(zheat(SIZE(zfieldout,1),tpsnow%NLAYER,kpatch))
365  !
366  IF (gsnow_ideal) THEN
367  zheat(:,:,:) = zw(:,:,:)
368  ELSEIF(SIZE(zw,2)==tpsnow%NLAYER)THEN
369  zheat(:,:,:) = zw(:,:,:)
370  ELSE
371  CALL init_from_ref_grid(xgrid_snow,zw,zgrid,zheat)
372  ENDIF
373  !
374  !* transformation from heat to temperature
375  CALL snow_heat_to_t_wliq(zheat,tpsnow%RHO,tpsnow%T)
376  WHERE (tpsnow%T>xtt) tpsnow%T = xtt
377  DEALLOCATE(zheat)
378  !
379  !* mask for areas where there is no snow
380  DO jpatch=1,kpatch
381  DO jlayer=1,tpsnow%NLAYER
382  WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%T(:,jlayer,jpatch) = xundef
383  END DO
384  END DO
385  !
386  END IF
387  !
388  !
389  CASE('SG1')
390  !
391  IF (gsnow_ideal) THEN
392  tpsnow%GRAN1(:,:,:) = zw(:,:,:)
393  ELSEIF(SIZE(zw,2)==tpsnow%NLAYER)THEN
394  tpsnow%GRAN1(:,:,:) = zw(:,:,:)
395  ELSE
396  !* interpolation of heat on snow levels
397  CALL init_from_ref_grid(xgrid_snow,zw,zgrid,tpsnow%GRAN1)
398  ENDIF
399  !
400  !* mask for areas where there is no snow
401  DO jpatch=1,kpatch
402  DO jlayer=1,tpsnow%NLAYER
403  WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%GRAN1(:,jlayer,jpatch) = xundef
404  END DO
405  END DO
406  !
407  CASE('SG2')
408  !
409  IF (gsnow_ideal) THEN
410  tpsnow%GRAN2(:,:,:) = zw(:,:,:)
411  ELSEIF(SIZE(zw,2)==tpsnow%NLAYER)THEN
412  tpsnow%GRAN2(:,:,:) = zw(:,:,:)
413  ELSE
414  !* interpolation of heat on snow levels
415  CALL init_from_ref_grid(xgrid_snow,zw,zgrid,tpsnow%GRAN2)
416  ENDIF
417  !
418  !* mask for areas where there is no snow
419  DO jpatch=1,kpatch
420  DO jlayer=1,tpsnow%NLAYER
421  WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%GRAN2(:,jlayer,jpatch) = xundef
422  END DO
423  END DO
424  !
425  CASE('HIS')
426  !
427  IF (gsnow_ideal) THEN
428  tpsnow%HIST(:,:,:) = zw(:,:,:)
429  ELSEIF(SIZE(zw,2)==tpsnow%NLAYER)THEN
430  tpsnow%HIST(:,:,:) = zw(:,:,:)
431  ELSE
432  !* interpolation of heat on snow levels
433  CALL init_from_ref_grid(xgrid_snow,zw,zgrid,tpsnow%HIST)
434  ENDIF
435  !
436  !* mask for areas where there is no snow
437  DO jpatch=1,kpatch
438  DO jlayer=1,tpsnow%NLAYER
439  WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%HIST(:,jlayer,jpatch) = xundef
440  END DO
441  END DO
442  !
443  CASE('AGE')
444  !
445  IF (tpsnow%SCHEME=='3-L'.AND.(.NOT.gsnow_ideal).AND.(.NOT.ounif))THEN
446  tpsnow%AGE(:,:,:) = 0.0
447  ELSE
448  IF (gsnow_ideal) THEN
449  tpsnow%AGE(:,:,:) = zw(:,:,:)
450  ELSEIF(SIZE(zw,2)==tpsnow%NLAYER)THEN
451  tpsnow%AGE(:,:,:) = zw(:,:,:)
452  ELSE
453  !* interpolation of heat on snow levels
454  CALL init_from_ref_grid(xgrid_snow,zw,zgrid,tpsnow%AGE)
455  ENDIF
456  ENDIF
457  !
458  !* mask for areas where there is no snow
459  DO jpatch=1,kpatch
460  DO jlayer=1,tpsnow%NLAYER
461  WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%AGE(:,jlayer,jpatch) = xundef
462  END DO
463  END DO
464  !
465 END SELECT
466 !
467 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
468 !
469 !* 7. Deallocations
470 !
471 DEALLOCATE(zfieldin )
472 DEALLOCATE(zfieldout)
473 IF (present(pdepth) .AND. .NOT.gsnow_ideal) DEALLOCATE(zgrid )
474 DEALLOCATE(zw )
475 IF (lhook) CALL dr_hook('PREP_HOR_SNOW_FIELD',1,zhook_handle)
476 !
477 !-------------------------------------------------------------------------------------
478 !
479  CONTAINS
480 !
481 !-------------------------------------------------------------------------------------
482 !
483 SUBROUTINE init_from_ref_grid(PGRID1,PT1,PD2,PT2)
484 !
486 !
487 REAL, DIMENSION(:,:,:), INTENT(IN) :: pt1 ! variable profile
488 REAL, DIMENSION(:), INTENT(IN) :: pgrid1 ! normalized grid
489 REAL, DIMENSION(:,:,:), INTENT(IN) :: pd2 ! output layer thickness
490 REAL, DIMENSION(:,:,:), INTENT(OUT) :: pt2 ! variable profile
491 !
492 INTEGER :: jl ! loop counter
493 REAL, DIMENSION(SIZE(PT1,1),SIZE(PT1,2)) :: zd1 ! input grid
494 REAL, DIMENSION(SIZE(PD2,1),SIZE(PD2,2)) :: zd2 ! output grid
495 INTEGER :: jpatch ! loop on patches
496 REAL(KIND=JPRB) :: zhook_handle
497 !
498 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
499 !
500 IF (lhook) CALL dr_hook('INIT_FROM_REF_GRID',0,zhook_handle)
501 DO jpatch=1,kpatch
502  zd2(:,:) = 0.
503  DO jl=1,SIZE(zd2,2)
504  zd2(:,jl) = pd2(:,jl,jpatch)
505  END DO
506  !
507  DO jl=1,SIZE(pt1,2)
508  zd1(:,jl) = pgrid1(jl)
509  END DO
510  !
511  CALL interp_grid_nat(zd1,pt1(:,:,jpatch),zd2,pt2(:,:,jpatch))
512 END DO
513 IF (lhook) CALL dr_hook('INIT_FROM_REF_GRID',1,zhook_handle)
514 !
515 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
516 END SUBROUTINE init_from_ref_grid
517 !-------------------------------------------------------------------------------------
518 !
519 END SUBROUTINE prep_hor_snow_field
subroutine prep_snow_buffer(IG, U, HPROGRAM, HSURF, KLUOUT, KLAYER, PFIELD)
subroutine prep_hor_snow_field(DTCO, IG, U, HPROGRAM, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, OUNIF, HSNSURF, KPATCH, KTEB_PATCH, KL, TPSNOW, TPTIME, PUNIF_WSNOW, PUNIF_RSNOW, PUNIF_TSNOW, PUNIF_LWCSNOW, PUNIF_ASNOW, OSNOW_IDEAL, PUNIF_SG1SNOW, PUNIF_SG2SNOW, PUNIF_HISTSNOW, PUNIF_AGESNOW, PF, PDEPTH, PVEGTYPE, PVEGTYPE_PATCH, PPATCH)
subroutine init_from_ref_grid(PGRID1, PT1, PD2, PT2)
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine prep_snow_grib(HPROGRAM, HSURF, HFILE, KLUOUT, KLAYER, PFIELD)
subroutine hor_interpol(DTCO, U, KLUOUT, PFIELDIN, PFIELDOUT)
Definition: hor_interpol.F90:6
subroutine vegtype_grid_to_patch_grid(KPATCH, PVEGTYPE_PATCH, PPATCH, PFIELDOUT, PW)
subroutine prep_snow_unif(KLUOUT, HSURF, PFIELD, TPTIME, OSNOW_IDEAL, PUNIF_WSNOW, PUNIF_RSNOW, PUNIF_TSNOW, PUNIF_LWCSNOW, PUNIF_ASNOW, PUNIF_SG1SNOW, PUNIF_SG2SNOW, PUNIF_HISTSNOW, PUNIF_AGESNOW, KLAYER)
subroutine prep_snow_extern(HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, PFIELD, OSNOW_IDEAL, KLAYER, KTEB_PATCH)