SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_prep_isba_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_isba_conf(HPROGRAM,HVAR,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,&
7  hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kluout,ounif)
8 ! #######################################################
9 !
10 !!**** *READ_PREP_ISBA_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 !! P. Samuelsson 02/2012 MEB
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 USE modi_read_prep_surf_atm_conf
44 !
46 USE modd_prep_isba, ONLY : cfile_isba, ctype, cfilepgd_isba, ctypepgd, &
47  cfile_hug, ctype_hug, &
48  cfile_hug_surf, cfile_hug_root, cfile_hug_deep, &
49  xhug_surf, xhug_root, xhug_deep, &
50  xhugi_surf, xhugi_root, xhugi_deep, &
51  cfile_tg, ctype_tg, &
52  cfile_tg_surf, cfile_tg_root, cfile_tg_deep, &
53  xtg_surf, xtg_root, xtg_deep, &
54  xwsnow, xtsnow, xrsnow, xasnow
55 !
56 USE modd_surf_par, ONLY : xundef
57 !
58 !
59 USE yomhook ,ONLY : lhook, dr_hook
60 USE parkind1 ,ONLY : jprb
61 !
62 USE modi_abor1_sfx
63 !
64 IMPLICIT NONE
65 !
66 !* 0.1 Declarations of arguments
67 ! -------------------------
68 !
69  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling ISBA
70  CHARACTER(LEN=7), INTENT(IN) :: hvar ! variable treated
71  CHARACTER(LEN=28), INTENT(OUT) :: hfile ! file name
72  CHARACTER(LEN=6), INTENT(OUT) :: hfiletype ! file type
73  CHARACTER(LEN=28), INTENT(OUT) :: hfilepgd ! file name
74  CHARACTER(LEN=6), INTENT(OUT) :: hfilepgdtype! file type
75  CHARACTER(LEN=28), INTENT(IN) :: hatmfile ! atmospheric file name
76  CHARACTER(LEN=6), INTENT(IN) :: hatmfiletype! atmospheric file type
77  CHARACTER(LEN=28), INTENT(IN) :: hpgdfile ! atmospheric file name
78  CHARACTER(LEN=6), INTENT(IN) :: hpgdfiletype! atmospheric file type
79 INTEGER, INTENT(IN) :: kluout ! logical unit of output listing
80 LOGICAL, INTENT(OUT) :: ounif ! flag for prescribed uniform field
81 
82 !
83 !* 0.2 Declarations of local variables
84 ! -------------------------------
85 !
86 REAL(KIND=JPRB) :: zhook_handle
87 !-------------------------------------------------------------------------------
88 !
89 !
90 IF (lhook) CALL dr_hook('READ_PREP_ISBA_CONF',0,zhook_handle)
91 hfile = ' '
92 hfiletype = ' '
93 !
94 hfilepgd = ' '
95 hfilepgdtype = ' '
96 !
97 ounif = .false.
98 !
99 !-------------------------------------------------------------------------------
100 !
101 !* choice of input file
102 ! --------------------
103 !
104 SELECT CASE (hvar)
105  CASE ('WG ','WGI ')
106  IF (len_trim(cfile_hug)>0 .AND. len_trim(ctype_hug)>0 ) THEN
107  hfile = cfile_hug
108  hfiletype = ctype_hug
109  END IF
110  CASE ('TG ','TV ','TC ')
111  IF (len_trim(cfile_tg)>0 .AND. len_trim(ctype_tg)>0 ) THEN
112  hfile = cfile_tg
113  hfiletype = ctype_tg
114  END IF
115 END SELECT
116 !
117 IF (len_trim(hfile)==0 .AND. len_trim(cfile_isba)>0 .AND. len_trim(ctype)>0) THEN
118  hfile = cfile_isba
119  hfiletype = ctype
120 END IF
121 !
122 IF (len_trim(hfilepgd)==0 .AND. len_trim(cfilepgd_isba)>0 .AND. len_trim(ctypepgd)>0) THEN
123  hfilepgd = cfilepgd_isba
124  hfilepgdtype = ctypepgd
125 END IF
126 !
127 !! If no file name in the scheme namelist,
128 !! try to find a name in NAM_SURF_ATM
129 !
130 IF (len_trim(hfile)==0) THEN
131 !
132  CALL read_prep_surf_atm_conf(hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype,&
133  hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,kluout)
134 !
135 END IF
136 !
137 !! If no file name in the scheme namelist,
138 !! nor in NAM_SURF_ATM, look if ascii input files are present
139 !
140 SELECT CASE (hvar)
141  CASE ('WG ','WGI ')
142  IF ( len_trim(ctype_hug )>0 .AND. &
143  len_trim(cfile_hug_surf)>0 .AND. &
144  len_trim(cfile_hug_root)>0 .AND. &
145  len_trim(cfile_hug_deep)>0 ) THEN
146  hfiletype = ctype_hug
147  END IF
148  IF (hvar=='WGI ' .AND. hfiletype=='ASCLLV') THEN
149  ounif = .true.
150  IF (xhugi_surf==xundef) xhugi_surf = 0.
151  IF (xhugi_root==xundef) xhugi_root = 0.
152  IF (xhugi_deep==xundef) xhugi_deep = 0.
153  IF (lhook) CALL dr_hook('READ_PREP_ISBA_CONF',1,zhook_handle)
154  RETURN
155  ENDIF
156  CASE ('TG ','TV ','TC ')
157  IF ( len_trim(ctype_tg )>0 .AND. &
158  len_trim(cfile_tg_surf)>0 .AND. &
159  len_trim(cfile_tg_root)>0 .AND. &
160  len_trim(cfile_tg_deep)>0 ) THEN
161  hfiletype = ctype_tg
162  END IF
163 END SELECT
164 !
165 !-------------------------------------------------------------------------------
166 !
167 !* Is an uniform field prescribed?
168 ! ------------------------------
169 !
170 SELECT CASE (hvar)
171  CASE ('WG ')
172  ounif = (xhug_surf/=xundef) .OR. (xhug_root/=xundef) .OR. (xhug_deep/=xundef)
173  IF (ounif .AND. (xhug_surf==xundef)) THEN
174  WRITE(kluout,*)'ONE OF XHUG_SURF, XHUG_ROOT OR XHUG_DEEP IS GIVEN'
175  CALL abor1_sfx('READ_PREP_ISBA_CONF: XHUG_SURF MUST BE SET')
176  END IF
177  IF (ounif .AND. (xhug_root==xundef)) THEN
178  WRITE(kluout,*)'ONE OF XHUG_SURF, XHUG_ROOT OR XHUG_DEEP IS GIVEN'
179  CALL abor1_sfx('READ_PREP_ISBA_CONF: XHUG_ROOT MUST BE SET')
180  END IF
181  IF (ounif .AND. (xhug_deep==xundef)) THEN
182  WRITE(kluout,*)'ONE OF XHUG_SURF, XHUG_ROOT OR XHUG_DEEP IS GIVEN'
183  CALL abor1_sfx('READ_PREP_ISBA_CONF: XHUG_DEEP MUST BE SET')
184  END IF
185  !
186  CASE ('WGI ')
187  ounif = (xhugi_surf/=xundef) .OR. (xhugi_root/=xundef) .OR. (xhugi_deep/=xundef)
188  IF (ounif .AND. (xhugi_surf==xundef)) THEN
189  WRITE(kluout,*)'ONE OF XHUGI_SURF, XHUGI_ROOT OR XHUGI_DEEP IS GIVEN'
190  CALL abor1_sfx('READ_PREP_ISBA_CONF: XHUGI_SURF MUST BE SET')
191  END IF
192  IF (ounif .AND. (xhugi_root==xundef)) THEN
193  WRITE(kluout,*)'ONE OF XHUGI_SURF, XHUGI_ROOT OR XHUGI_DEEP IS GIVEN'
194  CALL abor1_sfx('READ_PREP_ISBA_CONF: XHUGI_ROOT MUST BE SET')
195  END IF
196  IF (ounif .AND. (xhugi_deep==xundef)) THEN
197  WRITE(kluout,*)'ONE OF XHUGI_SURF, XHUGI_ROOT OR XHUGI_DEEP IS GIVEN'
198  CALL abor1_sfx('READ_PREP_ISBA_CONF: XHUGI_DEEP MUST BE SET')
199  END IF
200  !
201  CASE ('TG ','TV ','TC ')
202  ounif = (xtg_surf/=xundef) .OR. (xtg_root/=xundef) .OR. (xtg_deep/=xundef)
203  IF (ounif .AND. (xtg_surf==xundef)) THEN
204  WRITE(kluout,*)'ONE OF XTG_SURF, XTG_ROOT OR XTG_DEEP IS GIVEN'
205  CALL abor1_sfx('READ_PREP_ISBA_CONF: XTG_SURF MUST BE SET')
206  END IF
207  IF (ounif .AND. (xtg_root==xundef)) THEN
208  WRITE(kluout,*)'ONE OF XTG_SURF, XTG_ROOT OR XTG_DEEP IS GIVEN'
209  CALL abor1_sfx('READ_PREP_ISBA_CONF: XTG_ROOT MUST BE SET')
210  END IF
211  IF (ounif .AND. (xtg_deep==xundef)) THEN
212  WRITE(kluout,*)'ONE OF XTG_SURF, XTG_ROOT OR XTG_DEEP IS GIVEN'
213  CALL abor1_sfx('READ_PREP_ISBA_CONF: XTG_DEEP MUST BE SET')
214  END IF
215  !
216 END SELECT
217 !
218 !-------------------------------------------------------------------------------
219 !
220 !* no file given ? nor specific value in namelist? One takes the default value.
221 !
222 IF (hfiletype==' ' .AND. .NOT. ounif) THEN
223  IF (hvar(1:2)/='ZS') WRITE(kluout,*) 'NO FILE FOR FIELD ',hvar, &
224  ': UNIFORM DEFAULT FIELD IS PRESCRIBED'
225  IF (hvar(1:3)=='WGI') THEN
226  xhugi_surf = 0.
227  xhugi_root = 0.
228  xhugi_deep = 0.
229  ENDIF
230  ounif = .true.
231 END IF
232 IF (lhook) CALL dr_hook('READ_PREP_ISBA_CONF',1,zhook_handle)
233 !
234 !-------------------------------------------------------------------------------
235 !
236 END SUBROUTINE read_prep_isba_conf
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine read_prep_isba_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)