6 SUBROUTINE read_prep_isba_snow(HPROGRAM,HSNOW,KSNOW_LAYER,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,OUNIF)
54 USE modd_snow_par
, ONLY : xansmin, xrhosmax
60 USE modi_open_namelist
61 USE modi_close_namelist
64 USE modd_prep_isba
, ONLY : cfile_snow, ctype_snow, cfilepgd_snow, &
65 ctypepgd_snow, lsnow_ideal, &
66 xwsnow_p=>xwsnow, xtsnow_p=>xtsnow, &
67 xlwcsnow_p=>xlwcsnow, &
68 xrsnow_p=>xrsnow, xasnow, &
69 xsg1snow_p=>xsg1snow, xsg2snow_p=>xsg2snow, &
70 xhistsnow_p=>xhistsnow, xagesnow_p=>xagesnow
83 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
84 CHARACTER(LEN=3),
INTENT(OUT) :: HSNOW
85 INTEGER,
INTENT(OUT) :: KSNOW_LAYER
86 CHARACTER(LEN=28),
OPTIONAL,
INTENT(OUT) :: HFILE
87 CHARACTER(LEN=6),
OPTIONAL,
INTENT(OUT) :: HFILETYPE
88 CHARACTER(LEN=28),
OPTIONAL,
INTENT(OUT) :: HFILEPGD
89 CHARACTER(LEN=6),
OPTIONAL,
INTENT(OUT) :: HFILEPGDTYPE
90 LOGICAL,
OPTIONAL,
INTENT(OUT) :: OUNIF
95 REAL,
DIMENSION(NSNOW_LAYER_MAX) :: XWSNOW, XZSNOW, XRSNOW, XTSNOW, XLWCSNOW
104 REAL(KIND=JPRB) :: ZHOOK_HANDLE
116 IF (
lhook)
CALL dr_hook(
'READ_PREP_ISBA_SNOW',0,zhook_handle)
127 lsnow_ideal = .false.
151 CALL posnam(ilunam,
'NAM_PREP_ISBA_SNOW',gfound,iluout)
152 IF (gfound)
READ(unit=ilunam,nml=nam_prep_isba_snow)
163 WRITE(iluout,*)
'------------------------------------' 164 WRITE(iluout,*)
'Please update modd_prep_snow.f90 routine : ' 165 WRITE(iluout,*)
'The maximum number of snow layers ' 166 WRITE(iluout,*)
'in the declaration of the namelist variables ' 168 WRITE(iluout,*)
'------------------------------------' 169 CALL abor1_sfx(
'READ_PREP_ISBA_SNOW: NUMBER OF SNOW LAYERS MUST BE INCREASED IN NAMELIST DECLARATION' 174 IF (xzsnow(jlayer)/=
xundef)
THEN 175 IF (xwsnow(jlayer)/=
xundef)
THEN 176 WRITE(iluout,*)
'----------------------------' 177 WRITE(iluout,*)
'layer ',jlayer,
':' 178 WRITE(iluout,*)
'XWSNOW and XZSNOW are both defined.' 179 WRITE(iluout,*)
'You must define only one of them.' 180 WRITE(iluout,*)
' PLEASE CORRECT THAT ' 181 WRITE(iluout,*)
'----------------------------' 182 CALL abor1_sfx(
'READ_PREP_ISBA_SNOW: ERROR IN INITIALISATION OF SNOW PARAMETERS' 183 ELSEIF (xrsnow(jlayer)==
xundef)
THEN 184 WRITE(iluout,*)
'----------------------------' 185 WRITE(iluout,*)
'layer ',jlayer,
':' 186 WRITE(iluout,*)
'XZSNOW is defined ' 187 WRITE(iluout,*)
'but XRSNOW is not. ' 188 WRITE(iluout,*)
' PLEASE CORRECT THAT ' 189 WRITE(iluout,*)
'----------------------------' 190 CALL abor1_sfx(
'READ_PREP_ISBA_SNOW: ERROR IN INITIALISATION OF SNOW PARAMETERS' 192 xwsnow(jlayer)=xzsnow(jlayer)*xrsnow(jlayer)
221 IF ((xlwcsnow_p(jlayer)>0.).AND.(xtsnow_p(jlayer)<
xtt))
THEN 222 WRITE(iluout,*)
'----------------------------' 223 WRITE(iluout,*)
'layer ',jlayer,
':' 224 WRITE(iluout,*)
'Incoherence between ' 225 WRITE(iluout,*)
'snow liquid water content ' 226 WRITE(iluout,*)
'and snow temperature. ' 227 WRITE(iluout,*)
' PLEASE CORRECT THAT ' 228 WRITE(iluout,*)
'----------------------------' 229 CALL abor1_sfx(
'READ_PREP_ISBA_SNOW: ERROR IN INITIALISATION OF SNOW PARAMETERS' 233 IF (
csnow==
'CRO')
THEN 244 IF ((xsg1snow_p(jlayer)==
xundef .OR. xsg2snow_p(jlayer)==
xundef .OR.
247 WRITE(iluout,*)
'----------------------------' 248 WRITE(iluout,*)
'WSNOW/=0 AND ONE OF SG1SNOW,' 249 WRITE(iluout,*)
'SG2SNOW, HISTSNOW OR AGESNOW' 250 WRITE(iluout,*)
' ==XUNDEF ' 251 WRITE(iluout,*)
' PLEASE CORRECT THAT ' 252 WRITE(iluout,*)
'----------------------------' 253 CALL abor1_sfx(
'READ_PREP_ISBA_SNOW: ERROR IN INITIALISATION OF SNOW PARAMETERS' 259 ALLOCATE(xsg1snow_p(0))
260 ALLOCATE(xsg2snow_p(0))
261 ALLOCATE(xhistsnow_p(0))
273 IF(all(xwsnow_p(:)==
xundef).AND.
PRESENT(ounif))
THEN 275 ELSEIF(
PRESENT(ounif))
THEN 279 lfile=(len_trim(cfile_snow)>0.AND.len_trim(ctype_snow)>0 &
280 .AND.len_trim(cfilepgd_snow)>0.AND.len_trim(ctypepgd_snow)>0)
282 IF(
PRESENT(hfile))
THEN 289 IF(
PRESENT(hfiletype))
THEN 291 hfiletype = ctype_snow
296 IF(
PRESENT(hfilepgdtype))
THEN 298 hfilepgdtype = ctypepgd_snow
303 IF(
PRESENT(hfilepgd))
THEN 305 hfilepgd = cfilepgd_snow
310 IF (lfile.AND.
PRESENT(ounif)) ounif=.false.
312 IF (
lhook)
CALL dr_hook(
'READ_PREP_ISBA_SNOW',1,zhook_handle)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine abor1_sfx(YTEXT)
subroutine read_prep_isba_snow(HPROGRAM, HSNOW, KSNOW_LAYER, HFILE, HF
integer, parameter nsnow_layer_max
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)