7 KLU, KSIZE_P, KMASK_P, KPATCH, TPSNOW, HDIR, KVERSION, KBUGFIX, KNPATCH)
51 USE modi_allocate_gr_snow
64 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
65 CHARACTER (LEN=*),
INTENT(IN) :: HSURFTYPE
68 CHARACTER (LEN=3),
INTENT(IN) :: HPREFIX
70 INTEGER,
INTENT(IN) :: KLU
71 INTEGER,
INTENT(IN) :: KSIZE_P
72 INTEGER,
DIMENSION(:),
INTENT(IN) :: KMASK_P
73 INTEGER,
INTENT(IN) :: KPATCH
75 CHARACTER (LEN=1),
INTENT(IN),
OPTIONAL :: HDIR
79 INTEGER,
INTENT(IN),
OPTIONAL :: KVERSION
80 INTEGER,
INTENT(IN),
OPTIONAL :: KBUGFIX
81 INTEGER,
INTENT(IN),
OPTIONAL :: KNPATCH
85 CHARACTER (LEN=7) :: YFMT0
86 CHARACTER (LEN=100) :: YFMT
87 CHARACTER(LEN=16) :: YRECFM2
88 CHARACTER(LEN=12) :: YRECFM
89 CHARACTER(LEN=4) :: YNLAYER
90 CHARACTER(LEN=1) :: YDIR
91 CHARACTER(LEN=3) :: YPAT
93 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZWORK
95 INTEGER :: IRESP, JI, JP
96 INTEGER :: ISURFTYPE_LEN, IPAT_LEN
98 INTEGER :: IVERSION, IBUGFIX
101 LOGICAL :: GVERSION, GDIM, GDIM2
103 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
106 IF (
lhook)
CALL dr_hook(
'READ_GR_SNOW_1',0,zhook_handle)
109 IF (
PRESENT(hdir)) ydir = hdir
112 IF (
PRESENT(knpatch)) inpatch = knpatch
115 IF(
PRESENT(kversion))
THEN 118 CALL read_surf(hprogram,
'VERSION',iversion,iresp)
120 IF(
PRESENT(kbugfix))
THEN 123 CALL read_surf(hprogram,
'BUG',ibugfix,iresp)
126 gdim = (iversion>8 .OR. iversion==8 .AND. ibugfix>0)
128 IF (gdim)
CALL read_surf(hprogram,
'SPLIT_PATCH',gdim2,iresp)
132 gversion = (iversion>7 .OR. iversion==7 .AND. ibugfix>=3)
137 isurftype_len=len_trim(hsurftype)
141 IF (iversion <=2 .OR. (iversion==3 .AND. ibugfix<=4))
THEN 142 WRITE(yfmt,
'(A5,I1,A4)')
'(A5,A',isurftype_len,
',A5)' 143 WRITE(yrecfm2,yfmt)
'SNOW_',hsurftype,
'_TYPE' 145 IF (iversion<7 .OR. iversion==7 .AND. ibugfix<3)
THEN 146 WRITE(yfmt,
'(A5,I1,A4)')
'(A3,A',isurftype_len,
',A5)' 147 WRITE(yrecfm2,yfmt)
'SN_',hsurftype,
'_TYPE' 149 WRITE(yfmt,
'(A5,I1,A4)')
'(A3,A',isurftype_len,
',A4)' 150 WRITE(yrecfm2,yfmt)
'SN_',hsurftype,
'_TYP' 151 yrecfm2=adjustl(hprefix//yrecfm2)
155 CALL read_surf(hprogram,yrecfm2,tpsnow%SCHEME,iresp)
161 IF (iversion <=2 .OR. (iversion==3 .AND. ibugfix<=4))
THEN 162 WRITE(yfmt,
'(A5,I1,A4)')
'(A5,A',isurftype_len,
',A6)' 163 WRITE(yrecfm2,yfmt)
'SNOW_',hsurftype,
'_LAYER' 165 WRITE(yfmt,
'(A5,I1,A4)')
'(A3,A',isurftype_len,
',A2)' 166 WRITE(yrecfm2,yfmt)
'SN_',hsurftype,
'_N' 167 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm2=adjustl(hprefix
170 CALL read_surf(hprogram,yrecfm2,tpsnow%NLAYER,iresp)
177 IF (kpatch>0.AND.gdim2)
THEN 178 WRITE(ypat,
'(I2)') kpatch
179 ypat =
"P"//adjustl(ypat)
180 ipat_len = len_trim(adjustl(ypat))
186 IF (iversion >6 .OR. (iversion==6 .AND. ibugfix>=1))
THEN 187 WRITE(yfmt,
'(A5,I1,A2,I1,A1)')
'(A3,A',isurftype_len,
',A1,A',ipat_len,
')' 188 WRITE(yrecfm,yfmt)
'SN_',adjustl(hsurftype(:len_trim(hsurftype))),adjustl
189 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm=adjustl(hprefix
190 CALL read_surf(hprogram,yrecfm,gsnow,iresp)
192 IF (tpsnow%NLAYER==0)
THEN 194 IF (tpsnow%SCHEME==
'D95' .OR. tpsnow%SCHEME==
'1-L' .OR. tpsnow%SCHEME
'EBA' 195 IF (tpsnow%SCHEME==
'3-L' .OR. tpsnow%SCHEME==
'CRO' 213 IF (.NOT. gsnow)
THEN 214 IF (
lhook)
CALL dr_hook(
'READ_GR_SNOW_1',1,zhook_handle)
222 IF (iversion >= 7 .AND. hsurftype==
'VEG'.AND.kpatch==1) &
231 ALLOCATE(zwork(klu,inpatch))
233 IF (tpsnow%SCHEME==
'1-L' .OR. tpsnow%SCHEME==
'D95' .OR. tpsnow%SCHEME==
'EBA' 234 '3-L' .OR. tpsnow%SCHEME==
'CRO'THEN 236 WRITE(yfmt0,
'(A5,I1,A1)')
',A1,A',isurftype_len
239 yfmt =
'(A3'//yfmt0//
')' 241 yfmt =
'(A5'//yfmt0//
')' 243 CALL read_layers(gversion,tpsnow%NLAYER,ydir,hprefix,yfmt,
"WSNOW",hsurftype
244 CALL read_layers(gversion,tpsnow%NLAYER,ydir,hprefix,yfmt,
"RSNOW",hsurftype
249 IF (tpsnow%SCHEME==
'1-L')
THEN 251 CALL read_layers(gversion,tpsnow%NLAYER,ydir,hprefix,yfmt,
"TSNOW",hsurftype
258 IF (tpsnow%SCHEME==
'3-L' .OR. tpsnow%SCHEME==
'CRO')
THEN 260 CALL read_layers(gversion,tpsnow%NLAYER,ydir,hprefix,yfmt,
"HSNOW",hsurftype
262 IF (tpsnow%SCHEME==
'CRO')
THEN 264 CALL read_layers(gversion,tpsnow%NLAYER,ydir,hprefix,yfmt,
"SHIST",hsurftype
270 yfmt =
"(A2,A1"//yfmt0//
')' 272 yfmt =
"(A5"//yfmt0//
')' 274 yfmt = yfmt//ynlayer//
')' 275 CALL read_layers(gversion,tpsnow%NLAYER,ydir,hprefix,yfmt,
"SGRAN",hsurftype
"1" 276 CALL read_layers(gversion,tpsnow%NLAYER,ydir,hprefix,yfmt,
"SGRAN",hsurftype
"2" 280 IF ((tpsnow%SCHEME==
'3-L'.AND.iversion>=8) .OR. tpsnow%SCHEME==
'CRO'THEN 285 yfmt =
"(A3"//yfmt0//
')' 287 yfmt =
"(A4"//yfmt0//
')' 289 yfmt = yfmt//ynlayer//
')' 290 CALL read_layers(gversion,tpsnow%NLAYER,ydir,hprefix,yfmt,
"SAGE",hsurftype
294 DO jl = 1,tpsnow%NLAYER
295 WHERE (tpsnow%WSNOW(:,1) >= 0.0)
296 tpsnow%AGE(:,jl) = 0.0
306 WRITE(yfmt,
'(A5,I1,A2,I1,A1)')
'(A4,A',isurftype_len,
',A',ipat_len,
')' 307 WRITE(yrecfm,yfmt)
'ASN_',adjustl(hsurftype(:len_trim(hsurftype))),adjustl
308 IF (gversion) yrecfm=adjustl(hprefix//yrecfm)
310 CALL read_surf(hprogram,yrecfm,zwork(:,1),iresp,hdir=ydir)
313 CALL read_surf(hprogram,yrecfm,zwork,iresp,hdir=ydir)
321 IF (
lhook)
CALL dr_hook(
'READ_GR_SNOW_1',1,zhook_handle)
323 IF (tpsnow%SCHEME==
'1-L' .OR. tpsnow%SCHEME==
'D95' .OR. tpsnow%SCHEME==
'EBA' 324 '3-L' .OR. tpsnow%SCHEME==
'CRO'THEN 327 IF (
lhook)
CALL dr_hook(
'READ_GR_SNOW_2',0,zhook_handle_omp)
329 DO ji = 1,
SIZE(tpsnow%WSNOW,1)
331 IF (tpsnow%WSNOW(ji,1) == 0.0 )
THEN 335 DO jl = 1,tpsnow%NLAYER
338 IF (tpsnow%SCHEME==
'1-L')
THEN 340 ELSEIF (tpsnow%SCHEME==
'3-L' .OR. tpsnow%SCHEME==
'CRO')
THEN 341 tpsnow%HEAT(ji,jl) =
xundef 342 IF (tpsnow%SCHEME==
'CRO')
THEN 343 tpsnow%HIST (ji,jl) =
xundef 344 tpsnow%GRAN1(ji,jl) =
xundef 345 tpsnow%GRAN2(ji,jl) =
xundef 346 tpsnow%AGE (ji,jl) =
xundef 354 IF (
lhook)
CALL dr_hook(
'READ_GR_SNOW_2',1,zhook_handle_omp)
363 SUBROUTINE read_layers(OVERSION,KNL,HDIRIN,HPREF,HFMT,HREC,HSURF,PTAB,HREC2)
369 LOGICAL,
INTENT(IN) :: OVERSION
370 INTEGER,
INTENT(IN) :: KNL
371 CHARACTER(LEN=*),
INTENT(IN) :: HDIRIN
372 CHARACTER(LEN=*),
INTENT(IN) :: HPREF
373 CHARACTER(LEN=*),
INTENT(IN) :: HFMT
374 CHARACTER(LEN=*),
INTENT(IN) :: HREC
375 CHARACTER(LEN=*),
INTENT(IN) :: HSURF
376 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PTAB
377 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: HREC2
379 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZWORK3D
380 CHARACTER(LEN=1) :: YREC2
381 CHARACTER(LEN=12) :: YRECFM
384 IF (
PRESENT(hrec2))
THEN 391 WRITE(yrecfm,hfmt)
trim(hrec),
trim(yrec2),
'_',
trim(hsurf)
393 WRITE(yrecfm,hfmt)
trim(hrec),
'_',
trim(hsurf)
395 IF (oversion) yrecfm=adjustl(
trim(hpref)//yrecfm)
398 ALLOCATE(zwork3d(klu,
SIZE(ptab,2),1))
400 ALLOCATE(zwork3d(klu,
SIZE(ptab,2),inpatch))
409 CALL pack_same_rank(kmask_p,zwork3d(:,jl,max(1,kpatch)),ptab(:,jl))
static const char * trim(const char *name, int *n)
subroutine read_surf_layers(HPROGRAM, HREC, ODIM, PFIELD, KRESP, HCOMMENT, HDIR, KPATCH)
subroutine read_layers(OVERSION, KNL, HDIRIN, HPREF, HFMT, HREC, HSURF, PTAB, HR
subroutine allocate_gr_snow(TPSNOW, KLU)
subroutine read_gr_snow(HPROGRAM, HSURFTYPE, HPREFIX, KLU, KSIZE_P, KMASK_P, KPATCH, TPSNOW, HDI