SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_prep_teb_snow.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 read_prep_teb_snow(HPROGRAM,HSNOW_ROOF,KSNOW_ROOF,HSNOW_ROAD,KSNOW_ROAD,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE)
7 ! #######################################################
8 !
9 !!**** *READ_PREP_TEB_SNOW* - routine to read the configuration for snow
10 !! in TEB fields preparation
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! A. Lemonsu *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 04/2007
36 !-------------------------------------------------------------------------------
37 !
38 !* 0. DECLARATIONS
39 ! ------------
40 !
42 USE modd_read_namelist, ONLY : lnam_read
43 !
44 USE modd_surf_par, ONLY : xundef
45 !
46 USE mode_pos_surf
48 USE modi_get_luout
49 USE modi_open_namelist
50 USE modi_close_namelist
51 !
52 USE modd_csts, ONLY : xtt
53 USE modd_snow_par, ONLY : xansmin, xrhosmax
54 USE modd_prep_teb, ONLY : xwsnow_roof_p=>xwsnow_roof, xtsnow_roof_p=>xtsnow_roof, xlwcsnow_roof_p=>xlwcsnow_roof, &
55  xrsnow_roof_p=>xrsnow_roof, xasnow_roof, &
56  xwsnow_road_p=>xwsnow_road, xtsnow_road_p=>xtsnow_road, xlwcsnow_road_p=>xlwcsnow_road,&
57  xrsnow_road_p=>xrsnow_road, xasnow_road, &
58  cfile_snow_teb, ctype_snow, cfilepgd_snow_teb, &
59  ctypepgd_snow, lsnow_ideal_teb
60 !
61 USE modd_prep_snow, ONLY : nsnow_layer_max
62 !
63 USE yomhook ,ONLY : lhook, dr_hook
64 USE parkind1 ,ONLY : jprb
65 !
66 IMPLICIT NONE
67 !
68 !* 0.1 Declarations of arguments
69 ! -------------------------
70 !
71  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling TEB
72  CHARACTER(LEN=3), INTENT(OUT) :: hsnow_roof ! snow scheme for roofs
73  CHARACTER(LEN=3), INTENT(OUT) :: hsnow_road ! snow scheme for roads
74 INTEGER, INTENT(OUT) :: ksnow_roof ! snow scheme layers for roofs
75 INTEGER, INTENT(OUT) :: ksnow_road ! snow scheme layers for roads
76  CHARACTER(LEN=28), OPTIONAL, INTENT(OUT) :: hfile ! file name
77  CHARACTER(LEN=6), OPTIONAL, INTENT(OUT) :: hfiletype ! file type
78  CHARACTER(LEN=28), OPTIONAL, INTENT(OUT) :: hfilepgd ! file name
79  CHARACTER(LEN=6), OPTIONAL, INTENT(OUT) :: hfilepgdtype ! file type
80 
81 !
82 !* 0.2 Declarations of local variables
83 ! -------------------------------
84 !
85 REAL, DIMENSION(NSNOW_LAYER_MAX) :: xwsnow_road, xrsnow_road, xtsnow_road, xlwcsnow_road, &
86  xwsnow_roof, xrsnow_roof, xtsnow_roof, xlwcsnow_roof
87 !
88 LOGICAL :: gfound ! Return code when searching namelist
89 INTEGER :: iluout ! output file logical unit
90 INTEGER :: ilunam ! namelist file logical unit
91 REAL(KIND=JPRB) :: zhook_handle
92 !-------------------------------------------------------------------------------
93 namelist/nam_prep_teb_snow/csnow_roof, csnow_road, cfile_snow_teb, ctype_snow, &
94  lsnow_ideal_teb, cfilepgd_snow_teb, ctypepgd_snow, &
95  xwsnow_roof, xtsnow_roof, xlwcsnow_roof, xrsnow_roof, xasnow_roof, &
96  xwsnow_road, xtsnow_road, xlwcsnow_road, xrsnow_road, xasnow_road
97 !-------------------------------------------------------------------------------
98 !
99 !* default
100 ! -------
101 !
102 
103 IF (lhook) CALL dr_hook('READ_PREP_TEB_SNOW',0,zhook_handle)
104 IF (lnam_read) THEN
105  !
106  csnow_roof = '1-L'
107  csnow_road = '1-L'
108  !
109  cfile_snow_teb = ' '
110  ctype_snow = ' '
111  cfilepgd_snow_teb = ' '
112  ctypepgd_snow = ' '
113  !
114  xwsnow_roof(:) = 0.
115  xtsnow_roof(:) = xtt
116  xlwcsnow_roof(:) = 0.
117  xrsnow_roof(:) = xrhosmax
118  xasnow_roof = xansmin
119  !
120  xwsnow_road(:) = 0.
121  xtsnow_road(:) = xtt
122  xlwcsnow_road(:) = 0.
123  xrsnow_road(:) = xrhosmax
124  xasnow_road = xansmin
125  !
126  CALL get_luout(hprogram,iluout)
127  CALL open_namelist(hprogram,ilunam)
128  !
129  !* reading of namelist
130  ! -------------------
131  !
132  !
133  CALL posnam(ilunam,'NAM_PREP_TEB_SNOW',gfound,iluout)
134  IF (gfound) READ(unit=ilunam,nml=nam_prep_teb_snow)
135  !
136  CALL test_nam_var_surf(iluout,'CSNOW_ROOF',csnow_roof,'1-L')
137  CALL test_nam_var_surf(iluout,'CSNOW_ROAD',csnow_road,'1-L')
138  !
139  ALLOCATE(xwsnow_roof_p(1))
140  ALLOCATE(xrsnow_roof_p(1))
141  ALLOCATE(xtsnow_roof_p(1))
142  ALLOCATE(xlwcsnow_roof_p(1))
143  !
144  xwsnow_roof_p=xwsnow_roof(1)
145  xrsnow_roof_p=xrsnow_roof(1)
146  xtsnow_roof_p=xtsnow_roof(1)
147  xlwcsnow_roof_p=xlwcsnow_roof(1)
148  !
149  ALLOCATE(xwsnow_road_p(1))
150  ALLOCATE(xrsnow_road_p(1))
151  ALLOCATE(xtsnow_road_p(1))
152  ALLOCATE(xlwcsnow_road_p(1))
153  !
154  xwsnow_road_p=xwsnow_road(1)
155  xrsnow_road_p=xrsnow_road(1)
156  xtsnow_road_p=xtsnow_road(1)
157  xlwcsnow_road_p=xlwcsnow_road(1)
158  !
159  CALL close_namelist(hprogram,ilunam)
160  !
161 ENDIF
162 !
163 hsnow_roof = csnow_roof
164 hsnow_road = csnow_road
165 ksnow_roof = 1
166 ksnow_road = 1
167 !
168 IF (len_trim(cfile_snow_teb)>0 .AND. len_trim(ctype_snow)>0 &
169  .AND.len_trim(cfilepgd_snow_teb)>0.AND.len_trim(ctypepgd_snow)>0) THEN
170  IF (present(hfile)) hfile = cfile_snow_teb
171  IF (present(hfiletype)) hfiletype = ctype_snow
172  IF (present(hfilepgd)) hfilepgd = cfilepgd_snow_teb
173  IF (present(hfilepgdtype)) hfilepgdtype = ctypepgd_snow
174 END IF
175 !
176 IF (lhook) CALL dr_hook('READ_PREP_TEB_SNOW',1,zhook_handle)
177 !-------------------------------------------------------------------------------
178 !-------------------------------------------------------------------------------
179 !
180 END SUBROUTINE read_prep_teb_snow
subroutine read_prep_teb_snow(HPROGRAM, HSNOW_ROOF, KSNOW_ROOF, HSNOW_ROAD, KSNOW_ROAD, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE)
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)