7 hprogram,hsurftype,hprefix, &
8 klu,kpatch,tpsnow,hdir,kversion,kbugfix)
55 USE modi_allocate_gr_snow
60 USE yomhook
,ONLY : lhook, dr_hook
61 USE parkind1
,ONLY : jprb
69 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
70 CHARACTER (LEN=*),
INTENT(IN) :: hsurftype
73 CHARACTER (LEN=3),
INTENT(IN) :: hprefix
75 INTEGER,
INTENT(IN) :: klu
76 INTEGER,
INTENT(IN) :: kpatch
78 CHARACTER (LEN=1),
INTENT(IN),
OPTIONAL :: hdir
82 INTEGER,
INTENT(IN),
OPTIONAL :: kversion
83 INTEGER,
INTENT(IN),
OPTIONAL :: kbugfix
88 CHARACTER(LEN=12) :: yrecfm
89 CHARACTER(LEN=16) :: yrecfm2
91 CHARACTER (LEN=100) :: yfmt
92 INTEGER :: isurftype_len
95 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zwork
96 CHARACTER(LEN=1) :: ydir
97 CHARACTER(LEN=4) :: ynlayer
98 INTEGER :: iversion, ibugfix
99 REAL(KIND=JPRB) :: zhook_handle
102 IF (lhook) CALL dr_hook(
'READ_GR_SNOW',0,zhook_handle)
104 IF (present(hdir)) ydir = hdir
107 IF(present(kversion))
THEN
111 hprogram,
'VERSION',iversion,iresp)
113 IF(present(kbugfix))
THEN
117 hprogram,
'BUG',ibugfix,iresp)
124 isurftype_len=len_trim(hsurftype)
125 IF (iversion <=2 .OR. (iversion==3 .AND. ibugfix<=4))
THEN
126 WRITE(yfmt,
'(A5,I1,A4)')
'(A5,A',isurftype_len,
',A5)'
127 WRITE(yrecfm2,yfmt)
'SNOW_',hsurftype,
'_TYPE'
129 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
130 WRITE(yfmt,
'(A5,I1,A4)')
'(A3,A',isurftype_len,
',A5)'
131 WRITE(yrecfm2,yfmt)
'SN_',hsurftype,
'_TYPE'
133 WRITE(yfmt,
'(A5,I1,A4)')
'(A3,A',isurftype_len,
',A4)'
134 WRITE(yrecfm2,yfmt)
'SN_',hsurftype,
'_TYP'
135 yrecfm2=adjustl(hprefix//yrecfm2)
140 hprogram,yrecfm2,tpsnow%SCHEME,iresp)
146 IF (iversion <=2 .OR. (iversion==3 .AND. ibugfix<=4))
THEN
147 WRITE(yfmt,
'(A5,I1,A4)')
'(A5,A',isurftype_len,
',A6)'
148 WRITE(yrecfm2,yfmt)
'SNOW_',hsurftype,
'_LAYER'
150 WRITE(yfmt,
'(A5,I1,A4)')
'(A3,A',isurftype_len,
',A2)'
151 WRITE(yrecfm2,yfmt)
'SN_',hsurftype,
'_N'
152 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm2=adjustl(hprefix//yrecfm2)
156 hprogram,yrecfm2,tpsnow%NLAYER,iresp)
161 IF (iversion >6 .OR. (iversion==6 .AND. ibugfix>=1))
THEN
162 WRITE(yfmt,
'(A5,I1,A1)')
'(A3,A',isurftype_len,
')'
163 WRITE(yrecfm,yfmt)
'SN_',hsurftype
164 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm=adjustl(hprefix//yrecfm)
166 hprogram,yrecfm,gsnow,iresp)
168 IF (tpsnow%NLAYER==0)
THEN
170 IF (tpsnow%SCHEME==
'D95' .OR. tpsnow%SCHEME==
'1-L' .OR. tpsnow%SCHEME==
'EBA') tpsnow%NLAYER=1
171 IF (tpsnow%SCHEME==
'3-L' .OR. tpsnow%SCHEME==
'CRO' ) tpsnow%NLAYER=3
184 IF (.NOT. gsnow)
THEN
185 IF (lhook) CALL dr_hook(
'READ_GR_SNOW',1,zhook_handle)
193 IF (iversion >= 7 .AND. hsurftype==
'VEG') CALL
read_surf(&
194 hprogram,
'LSNOW_FRAC_T',lsnow_frac_tot,iresp)
201 ALLOCATE(zwork(
SIZE(tpsnow%WSNOW,1),
SIZE(tpsnow%WSNOW,3)))
203 DO jlayer = 1,tpsnow%NLAYER
206 IF (jlayer>9) ynlayer=
'I2.2'
208 IF (tpsnow%SCHEME==
'1-L' .OR. tpsnow%SCHEME==
'D95' .OR. tpsnow%SCHEME==
'EBA' .OR. tpsnow%SCHEME==
'3-L' &
209 .OR. tpsnow%SCHEME==
'CRO')
THEN
211 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
212 WRITE(yfmt,
'(A5,I1,A6)')
'(A6,A',isurftype_len,
','//ynlayer//
')'
213 WRITE(yrecfm,yfmt)
'WSNOW_',hsurftype,jlayer
215 WRITE(yfmt,
'(A5,I1,A6)')
'(A4,A',isurftype_len,
','//ynlayer//
')'
216 WRITE(yrecfm,yfmt)
'WSN_',hsurftype,jlayer
217 yrecfm=adjustl(hprefix//yrecfm)
220 hprogram,yrecfm,zwork,iresp,hdir=ydir)
221 tpsnow%WSNOW(:,jlayer,:)=zwork
227 IF (tpsnow%SCHEME==
'1-L' .OR. tpsnow%SCHEME==
'D95' .OR. tpsnow%SCHEME==
'EBA' .OR. tpsnow%SCHEME==
'3-L' &
228 .OR. tpsnow%SCHEME==
'CRO')
THEN
229 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
230 WRITE(yfmt,
'(A5,I1,A6)')
'(A6,A',isurftype_len,
','//ynlayer//
')'
231 WRITE(yrecfm,yfmt)
'RSNOW_',hsurftype,jlayer
233 WRITE(yfmt,
'(A5,I1,A6)')
'(A4,A',isurftype_len,
','//ynlayer//
')'
234 WRITE(yrecfm,yfmt)
'RSN_',hsurftype,jlayer
235 yrecfm=adjustl(hprefix//yrecfm)
238 hprogram,yrecfm,zwork,iresp,hdir=ydir)
239 tpsnow%RHO(:,jlayer,:)=zwork
240 WHERE(tpsnow%WSNOW(:,jlayer,:)==0.0)tpsnow%RHO(:,jlayer,:)=xundef
246 IF (tpsnow%SCHEME==
'1-L')
THEN
247 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
248 WRITE(yfmt,
'(A5,I1,A6)')
'(A6,A',isurftype_len,
','//ynlayer//
')'
249 WRITE(yrecfm,yfmt)
'TSNOW_',hsurftype,jlayer
251 WRITE(yfmt,
'(A5,I1,A6)')
'(A4,A',isurftype_len,
','//ynlayer//
')'
252 WRITE(yrecfm,yfmt)
'TSN_',hsurftype,jlayer
253 yrecfm=adjustl(hprefix//yrecfm)
256 hprogram,yrecfm,zwork,iresp,hdir=ydir)
257 tpsnow%T(:,jlayer,:)=zwork
258 WHERE (tpsnow%WSNOW(:,1,:) == 0.0) tpsnow%T(:,jlayer,:) = xundef
264 IF (tpsnow%SCHEME==
'3-L' .OR. tpsnow%SCHEME==
'CRO')
THEN
265 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
266 WRITE(yfmt,
'(A5,I1,A6)')
'(A6,A',isurftype_len,
','//ynlayer//
')'
267 WRITE(yrecfm,yfmt)
'HSNOW_',hsurftype,jlayer
269 WRITE(yfmt,
'(A5,I1,A6)')
'(A4,A',isurftype_len,
','//ynlayer//
')'
270 WRITE(yrecfm,yfmt)
'HSN_',hsurftype,jlayer
271 yrecfm=adjustl(hprefix//yrecfm)
274 hprogram,yrecfm,zwork,iresp,hdir=ydir)
275 tpsnow%HEAT(:,jlayer,:)=zwork
276 WHERE (tpsnow%WSNOW(:,1,:) == 0.0) tpsnow%HEAT(:,jlayer,:) = xundef
282 IF (tpsnow%SCHEME==
'CRO')
THEN
283 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
284 WRITE(yfmt,
'(A5,I1,A6)')
'(A7,A',isurftype_len,
','//ynlayer//
')'
285 WRITE(yrecfm,yfmt)
'SGRAN1_',hsurftype,jlayer
287 WRITE(yfmt,
'(A5,I1,A6)')
'(A4,A',isurftype_len,
','//ynlayer//
')'
288 WRITE(yrecfm,yfmt)
'SG1_',hsurftype,jlayer
289 yrecfm=adjustl(hprefix//yrecfm)
292 hprogram,yrecfm,zwork,iresp,hdir=ydir)
293 tpsnow%GRAN1(:,jlayer,:)=zwork
294 WHERE (tpsnow%WSNOW(:,1,:) == 0.0) tpsnow%GRAN1(:,jlayer,:) = xundef
300 IF (tpsnow%SCHEME==
'CRO')
THEN
301 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
302 WRITE(yfmt,
'(A5,I1,A6)')
'(A7,A',isurftype_len,
','//ynlayer//
')'
303 WRITE(yrecfm,yfmt)
'SGRAN2_',hsurftype,jlayer
305 WRITE(yfmt,
'(A5,I1,A6)')
'(A4,A',isurftype_len,
','//ynlayer//
')'
306 WRITE(yrecfm,yfmt)
'SG2_',hsurftype,jlayer
307 yrecfm=adjustl(hprefix//yrecfm)
310 hprogram,yrecfm,zwork,iresp,hdir=ydir)
311 tpsnow%GRAN2(:,jlayer,:)=zwork
312 WHERE (tpsnow%WSNOW(:,1,:) == 0.0) tpsnow%GRAN2(:,jlayer,:) = xundef
318 IF (tpsnow%SCHEME==
'CRO')
THEN
319 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
320 WRITE(yfmt,
'(A5,I1,A6)')
'(A6,A',isurftype_len,
','//ynlayer//
')'
321 WRITE(yrecfm,yfmt)
'SHIST_',hsurftype,jlayer
323 WRITE(yfmt,
'(A5,I1,A6)')
'(A4,A',isurftype_len,
','//ynlayer//
')'
324 WRITE(yrecfm,yfmt)
'SHI_',hsurftype,jlayer
325 yrecfm=adjustl(hprefix//yrecfm)
328 hprogram,yrecfm,zwork,iresp,hdir=ydir)
329 tpsnow%HIST(:,jlayer,:)=zwork
330 WHERE (tpsnow%WSNOW(:,1,:) == 0.0) tpsnow%HIST(:,jlayer,:) = xundef
336 IF ((tpsnow%SCHEME==
'3-L'.AND.iversion>=8) .OR. tpsnow%SCHEME==
'CRO')
THEN
337 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
338 WRITE(yfmt,
'(A5,I1,A6)')
'(A5,A',isurftype_len,
','//ynlayer//
')'
339 WRITE(yrecfm,yfmt)
'SAGE_',hsurftype,jlayer
341 WRITE(yfmt,
'(A5,I1,A6)')
'(A4,A',isurftype_len,
','//ynlayer//
')'
342 WRITE(yrecfm,yfmt)
'SAG_',hsurftype,jlayer
343 yrecfm=adjustl(hprefix//yrecfm)
346 hprogram,yrecfm,zwork,iresp,hdir=ydir)
347 tpsnow%AGE(:,jlayer,:)=zwork
348 WHERE (tpsnow%WSNOW(:,1,:) == 0.0) tpsnow%AGE(:,jlayer,:) = xundef
349 ELSEIF(tpsnow%SCHEME==
'3-L'.AND.iversion<8)
THEN
350 WHERE (tpsnow%WSNOW(:,1,:) >= 0.0)
351 tpsnow%AGE(:,jlayer,:) = 0.0
353 tpsnow%AGE(:,jlayer,:) = xundef
366 IF (tpsnow%SCHEME==
'D95' .OR. tpsnow%SCHEME==
'EBA' .OR. tpsnow%SCHEME==
'1-L' .OR. tpsnow%SCHEME==
'3-L' &
367 .OR. tpsnow%SCHEME==
'CRO')
THEN
368 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN
369 WRITE(yfmt,
'(A5,I1,A1)')
'(A6,A',isurftype_len,
')'
370 WRITE(yrecfm,yfmt)
'ASNOW_',hsurftype
372 WRITE(yfmt,
'(A5,I1,A1)')
'(A4,A',isurftype_len,
')'
373 WRITE(yrecfm,yfmt)
'ASN_',hsurftype
374 yrecfm=adjustl(hprefix//yrecfm)
377 hprogram,yrecfm,tpsnow%ALB(:,:),iresp,hdir=ydir)
378 WHERE (tpsnow%WSNOW(:,1,:) == 0.0) tpsnow%ALB(:,:) = xundef
380 IF (lhook) CALL dr_hook(
'READ_GR_SNOW',1,zhook_handle)
subroutine allocate_gr_snow(TPSNOW, KLU, KPATCH)
subroutine read_gr_snow(HPROGRAM, HSURFTYPE, HPREFIX, KLU, KPATCH, TPSNOW, HDIR, KVERSION, KBUGFIX)