SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_prep_teb_garden_conf.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_garden_conf(HPROGRAM,HVAR,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,&
7  hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kluout,ounif)
8 ! #######################################################
9 !
10 !!**** *READ_PREP_TEB_GARDEN_CONF* - routine to read the configuration for ISBA
11 !! fields preparation
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !!** METHOD
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !!
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! V. Masson *Meteo France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/2004
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 USE modi_read_prep_surf_atm_conf
43 !
45 USE modd_prep_teb_garden, ONLY : cfile_gd, ctype, cfilepgd_gd, ctypepgd, &
46  cfile_hug_gd, ctype_hug, &
47  cfile_hug_surf_gd, cfile_hug_root_gd, cfile_hug_deep_gd, &
48  xhug_surf_gd, xhug_root_gd, xhug_deep_gd, &
49  xhugi_surf_gd, xhugi_root_gd, xhugi_deep_gd, &
50  cfile_tg_gd, ctype_tg, &
51  cfile_tg_surf_gd, cfile_tg_root_gd, cfile_tg_deep_gd, &
52  xtg_surf_gd, xtg_root_gd, xtg_deep_gd
53 !
54 USE modd_surf_par, ONLY : xundef
55 !
56 !
57 USE yomhook ,ONLY : lhook, dr_hook
58 USE parkind1 ,ONLY : jprb
59 !
60 USE modi_abor1_sfx
61 !
62 IMPLICIT NONE
63 !
64 !* 0.1 Declarations of arguments
65 ! -------------------------
66 !
67  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling
68  CHARACTER(LEN=7), INTENT(IN) :: hvar ! variable treated
69  CHARACTER(LEN=28), INTENT(OUT) :: hfile ! file name
70  CHARACTER(LEN=6), INTENT(OUT) :: hfiletype ! file type
71  CHARACTER(LEN=28), INTENT(OUT) :: hfilepgd ! file name
72  CHARACTER(LEN=6), INTENT(OUT) :: hfilepgdtype! file type
73  CHARACTER(LEN=28), INTENT(IN) :: hatmfile ! atmospheric file name
74  CHARACTER(LEN=6), INTENT(IN) :: hatmfiletype! atmospheric file type
75  CHARACTER(LEN=28), INTENT(IN) :: hpgdfile ! atmospheric file name
76  CHARACTER(LEN=6), INTENT(IN) :: hpgdfiletype! atmospheric file type
77 INTEGER, INTENT(IN) :: kluout ! logical unit of output listing
78 LOGICAL, INTENT(OUT) :: ounif ! flag for prescribed uniform field
79 
80 !
81 !* 0.2 Declarations of local variables
82 ! -------------------------------
83 !
84 INTEGER :: iresp ! IRESP : return-code if a problem appears
85  ! at the open of the file in LFI routines
86 INTEGER :: ilunam ! Logical unit of namelist file
87 !
88  CHARACTER(LEN=28) :: ynamelist ! namelist file
89 !
90 LOGICAL :: gfound ! Return code when searching namelist
91 REAL(KIND=JPRB) :: zhook_handle
92 !-------------------------------------------------------------------------------
93 !
94 !
95 IF (lhook) CALL dr_hook('READ_PREP_TEB_GARDEN_CONF',0,zhook_handle)
96 hfile = ' '
97 hfiletype = ' '
98 !
99 hfilepgd = ' '
100 hfilepgdtype = ' '
101 !
102 ounif = .false.
103 !
104 !-------------------------------------------------------------------------------
105 !
106 !* choice of input file
107 ! --------------------
108 !
109 SELECT CASE (hvar)
110  CASE ('WG ','WGI ')
111  IF (len_trim(cfile_hug_gd)>0 .AND. len_trim(ctype_hug)>0 ) THEN
112  hfile = cfile_hug_gd
113  hfiletype = ctype_hug
114  END IF
115  CASE ('TG ')
116  IF (len_trim(cfile_tg_gd)>0 .AND. len_trim(ctype_tg)>0 ) THEN
117  hfile = cfile_tg_gd
118  hfiletype = ctype_tg
119  END IF
120 END SELECT
121 !
122 IF (len_trim(hfile)==0 .AND. len_trim(cfile_gd)>0 .AND. len_trim(ctype)>0) THEN
123  hfile = cfile_gd
124  hfiletype = ctype
125 END IF
126 !
127 IF (len_trim(hfilepgd)==0 .AND. len_trim(cfilepgd_gd)>0 .AND. len_trim(ctypepgd)>0) THEN
128  hfilepgd = cfilepgd_gd
129  hfilepgdtype = ctypepgd
130 END IF
131 !
132 !! If no file name in the scheme namelist,
133 !! try to find a name in NAM_SURF_ATM
134 !
135 IF (len_trim(hfile)==0) THEN
136 !
137  CALL read_prep_surf_atm_conf(hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype,&
138  hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kluout)
139 !
140 END IF
141 !
142 !! If no file name in the scheme namelist,
143 !! nor in NAM_SURF_ATM, look if ascii input files are present
144 !
145 SELECT CASE (hvar)
146  CASE ('WG ','WGI ')
147  IF ( len_trim(ctype_hug )>0 .AND. &
148  len_trim(cfile_hug_surf_gd)>0 .AND. &
149  len_trim(cfile_hug_root_gd)>0 .AND. &
150  len_trim(cfile_hug_deep_gd)>0 ) THEN
151  hfiletype = ctype_hug
152  END IF
153  IF (hvar=='WGI ' .AND. hfiletype=='ASCLLV') THEN
154  ounif = .true.
155  IF (lhook) CALL dr_hook('READ_PREP_TEB_GARDEN_CONF',1,zhook_handle)
156  RETURN
157  ENDIF
158  CASE ('TG ')
159  IF ( len_trim(ctype_tg )>0 .AND. &
160  len_trim(cfile_tg_surf_gd)>0 .AND. &
161  len_trim(cfile_tg_root_gd)>0 .AND. &
162  len_trim(cfile_tg_deep_gd)>0 ) THEN
163  hfiletype = ctype_tg
164  END IF
165 END SELECT
166 !
167 !-------------------------------------------------------------------------------
168 !
169 !* Is an uniform field prescribed?
170 ! ------------------------------
171 !
172 SELECT CASE (hvar)
173  CASE ('WG ')
174  ounif = (xhug_surf_gd/=xundef) .OR. (xhug_root_gd/=xundef) .OR. (xhug_deep_gd/=xundef)
175  IF (ounif .AND. (xhug_surf_gd==xundef)) THEN
176  WRITE(kluout,*)'ONE OF XHUG_SURF_GD, XHUG_ROOT_GD OR XHUG_DEEP_GD IS GIVEN'
177  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XHUG_SURF_GD MUST BE SET')
178  END IF
179  IF (ounif .AND. (xhug_root_gd==xundef)) THEN
180  WRITE(kluout,*)'ONE OF XHUG_SURF_GD, XHUG_ROOT_GD OR XHUG_DEEP_GD IS GIVEN'
181  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XHUG_ROOT_GD MUST BE SET')
182  END IF
183  IF (ounif .AND. (xhug_deep_gd==xundef)) THEN
184  WRITE(kluout,*)'ONE OF XHUG_SURF_GD, XHUG_ROOT_GD OR XHUG_DEEP_GD IS GIVEN'
185  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XHUG_DEEP_GD MUST BE SET')
186  END IF
187  !
188  CASE ('WGI ')
189  ounif = (xhugi_surf_gd/=xundef) .OR. (xhugi_root_gd/=xundef) .OR. (xhugi_deep_gd/=xundef)
190  IF (ounif .AND. (xhugi_surf_gd==xundef)) THEN
191  WRITE(kluout,*)'ONE OF XHUGI_SURF_GD, XHUGI_ROOT_GD OR XHUGI_DEEP_GD IS GIVEN'
192  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XHUGI_SURF_GD MUST BE SET')
193  END IF
194  IF (ounif .AND. (xhugi_root_gd==xundef)) THEN
195  WRITE(kluout,*)'ONE OF XHUGI_SURF_GD, XHUGI_ROOT_GD OR XHUGI_DEEP_GD IS GIVEN'
196  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XHUGI_ROOT_GD MUST BE SET')
197  END IF
198  IF (ounif .AND. (xhugi_deep_gd==xundef)) THEN
199  WRITE(kluout,*)'ONE OF XHUGI_SURF_GD, XHUGI_ROOT_GD OR XHUGI_DEEP_GD IS GIVEN'
200  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XHUGI_DEEP_GD MUST BE SET')
201  END IF
202  !
203  CASE ('TG ')
204  ounif = (xtg_surf_gd/=xundef) .OR. (xtg_root_gd/=xundef) .OR. (xtg_deep_gd/=xundef)
205  IF (ounif .AND. (xtg_surf_gd==xundef)) THEN
206  WRITE(kluout,*)'ONE OF XTG_SURF_GD, XTG_ROOT_GD OR XTG_DEEP_GD IS GIVEN'
207  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XTG_SURF_GD MUST BE SET')
208  END IF
209  IF (ounif .AND. (xtg_root_gd==xundef)) THEN
210  WRITE(kluout,*)'ONE OF XTG_SURF_GD, XTG_ROOT_GD OR XTG_DEEP_GD IS GIVEN'
211  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XTG_ROOT_GD MUST BE SET')
212  END IF
213  IF (ounif .AND. (xtg_deep_gd==xundef)) THEN
214  WRITE(kluout,*)'ONE OF XTG_SURF_GD, XTG_ROOT_GD OR XTG_DEEP_GD IS GIVEN'
215  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: XTG_DEEP_GD MUST BE SET')
216  END IF
217  !
218 
219 END SELECT
220 !
221 !-------------------------------------------------------------------------------
222 !
223 !* If no file and no uniform field is prescribed: default values used
224 ! ---------------------------------------------
225 !
226 IF (len_trim(hfiletype)==0 .AND. .NOT. ounif) THEN
227  IF (hvar(1:2)/='TG' .AND. hvar(1:2)/='WG' .OR. hvar(1:3)=='WGI') THEN
228  IF (hvar(1:2)/='ZS') WRITE(kluout,*) 'NO FILE FOR FIELD ',hvar, &
229  ': UNIFORM DEFAULT FIELD IS PRESCRIBED'
230  IF (hvar(1:3)=='WGI') THEN
231  xhugi_surf_gd = 0.
232  xhugi_root_gd = 0.
233  xhugi_deep_gd = 0.
234  ENDIF
235  ounif = .true.
236  IF (lhook) CALL dr_hook('READ_PREP_TEB_GARDEN_CONF',1,zhook_handle)
237  RETURN
238  ELSE
239  WRITE(kluout,*) 'AN INPUT FILE OR A UNIFORM VALUE IS REQUIRED FOR FIELD: ',hvar
240  WRITE(kluout,*) 'Please complete NAM_PREP_TEB_GARDEN'
241  CALL abor1_sfx('READ_PREP_TEB_GARDEN_CONF: AN INPUT FILE OR A UNIFORM VALUE IS REQUIRED FOR '//hvar)
242  END IF
243 END IF
244 IF (lhook) CALL dr_hook('READ_PREP_TEB_GARDEN_CONF',1,zhook_handle)
245 !-------------------------------------------------------------------------------
246 !
247 END SUBROUTINE read_prep_teb_garden_conf
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine read_prep_teb_garden_conf(HPROGRAM, HVAR, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KLUOUT, OUNIF)
subroutine read_prep_surf_atm_conf(HPROGRAM, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KLUOUT)