SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
set_vegtypes_fractions.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 set_vegtypes_fractions (DTCO, DGU, DTI, IG, I, UG, U, &
7  hprogram)
8 ! ##############################################################
9 !
10 !!**** *SET_VEGTYPES_FRACTIONS* monitor for averaging and interpolations of cover fractions
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !! METHOD
16 !! ------
17 !!
18 !
19 !! EXTERNAL
20 !! --------
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !! V. Masson Meteo-France
32 !!
33 !! MODIFICATION
34 !! ------------
35 !!
36 !! Original 10/12/97
37 !!
38 !! Modified 08/12/05, P. Le Moigne: user defined fields
39 !! Modified 07/11, R. Alkama : 'netcdf' => 'offlin'
40 !! removes very small values due to computation precision
41 !! 03/13, R. Alkama : from 12 to 19 vegtypes
42 !!
43 !----------------------------------------------------------------------------
44 !
45 !* 0. DECLARATION
46 ! -----------
47 !
48 !
49 !
52 USE modd_data_isba_n, ONLY : data_isba_t
53 USE modd_isba_grid_n, ONLY : isba_grid_t
54 USE modd_isba_n, ONLY : isba_t
56 USE modd_surf_atm_n, ONLY : surf_atm_t
57 !
58 !
59 USE modd_ol_fileid, ONLY : xvar_to_filein
60 !
61 USE modd_data_cover_par, ONLY : nvegtype
62 USE modd_surf_par, ONLY : xundef
63 !
64 #ifdef SFX_ASC
65 USE modi_set_surfex_file_name_asc
66 #endif
67 #ifdef SFX_FA
68 USE modi_set_surfex_file_name_fa
69 #endif
70 #ifdef SFX_LFI
71 USE modi_set_surfex_file_name_lfi
72 #endif
73 #ifdef SFX_NC
74 USE modi_set_surfex_file_name_nc
75 #endif
76 !
77 USE modi_get_luout
78 USE modi_open_namelist
79 USE modi_close_namelist
80 !
81 USE modi_open_filein_ol
82 USE modi_close_filein_ol
83 !
84 USE modi_read_from_surfex_file
85 !
86 USE mode_pos_surf
87 !
88 !
89 USE yomhook ,ONLY : lhook, dr_hook
90 USE parkind1 ,ONLY : jprb
91 !
92 USE modi_abor1_sfx
93 !
94 USE modi_extrapol_fields
95 !
96 IMPLICIT NONE
97 !
98 !* 0.1 Declaration of arguments
99 ! ------------------------
100 !
101 !
102 !
103 TYPE(data_cover_t), INTENT(INOUT) :: dtco
104 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
105 TYPE(data_isba_t), INTENT(INOUT) :: dti
106 TYPE(isba_grid_t), INTENT(INOUT) :: ig
107 TYPE(isba_t), INTENT(INOUT) :: i
108 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
109 TYPE(surf_atm_t), INTENT(INOUT) :: u
110 !
111 !
112  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! Type of program
113 !
114 !
115 !* 0.2 Declaration of local variables
116 ! ------------------------------
117 !
118 INTEGER :: iluout ! output listing logical unit
119 INTEGER :: ilunam ! namelist file logical unit
120 LOGICAL :: gfound ! true if namelist is found
121 !
122 INTEGER :: jvegtype ! loop counter on patch
123 !
124 !* 0.3 Declaration of namelists
125 ! ------------------------
126 !
127 ! name of files containing data
128 !
129  CHARACTER(LEN=28) :: cfnam_vegtype ! fractions of each vegtypes
130 !
131 ! types of file containing data
132 !
133  CHARACTER(LEN=6) :: cftyp_vegtype ! fractions of each vegtypes
134 !
135  CHARACTER(LEN=28) :: hfilein
136 !
137 LOGICAL :: gopen
138 REAL(KIND=JPRB) :: zhook_handle
139 !
140 namelist/nam_land_use/cfnam_vegtype,cftyp_vegtype
141 
142 !-------------------------------------------------------------------------------
143 !
144 !* 1. Initializations
145 ! ---------------
146 !
147 IF (lhook) CALL dr_hook('SET_VEGTYPES_FRACTIONS',0,zhook_handle)
148  cfnam_vegtype = ' '
149  cftyp_vegtype = ' '
150 !
151 !-------------------------------------------------------------------------------
152 !
153 !* 2. Input file for cover types
154 ! --------------------------
155 !
156  CALL get_luout(hprogram,iluout)
157  CALL open_namelist(hprogram,ilunam)
158 !
159  CALL posnam(ilunam,'NAM_LAND_USE',gfound,iluout)
160 IF (gfound) READ(unit=ilunam,nml=nam_land_use)
161 !
162  CALL close_namelist(hprogram,ilunam)
163 !
164 !-------------------------------------------------------------------------------
165 !
166 !* 3. Uniform fields are prescribed
167 ! -----------------------------
168 !
169 IF(cftyp_vegtype=='NETCDF') cftyp_vegtype='OFFLIN'
170 !
171 IF (cftyp_vegtype=='ASCII ') THEN
172 #ifdef SFX_ASC
173  CALL set_surfex_file_name_asc(hname_out=hfilein)
174 #endif
175 ELSEIF (cftyp_vegtype=='FA ') THEN
176 #ifdef SFX_FA
177  CALL set_surfex_file_name_fa(hname_out=hfilein)
178 #endif
179 ELSEIF (cftyp_vegtype=='LFI ') THEN
180 #ifdef SFX_LFI
181  CALL set_surfex_file_name_lfi(hname_out=hfilein)
182 #endif
183 ELSEIF (cftyp_vegtype=='NC ') THEN
184 #ifdef SFX_NC
185  CALL set_surfex_file_name_nc(hname_out=hfilein)
186 #endif
187 ENDIF
188 !
189 gopen = .false.
190 IF(cftyp_vegtype=='OFFLIN' .AND. .NOT.ALLOCATED(xvar_to_filein)) THEN
191  gopen = .true.
192  CALL open_filein_ol
193 ENDIF
194 !
195 IF (cftyp_vegtype=='FA '.OR.cftyp_vegtype=='ASCII '.OR.cftyp_vegtype=='LFI ' &
196  .OR.cftyp_vegtype=='OFFLIN' .OR.cftyp_vegtype=='NC ') THEN
197 !
198  dti%LDATA_VEGTYPE=.true.
199 !
200  CALL read_from_surfex_file(dtco, dgu, u, &
201  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,1),hnam='VEGTYPE1')
202  CALL read_from_surfex_file(dtco, dgu, u, &
203  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,2),hnam='VEGTYPE2')
204  CALL read_from_surfex_file(dtco, dgu, u, &
205  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,3),hnam='VEGTYPE3')
206  CALL read_from_surfex_file(dtco, dgu, u, &
207  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,4),hnam='VEGTYPE4')
208  CALL read_from_surfex_file(dtco, dgu, u, &
209  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,5),hnam='VEGTYPE5')
210  CALL read_from_surfex_file(dtco, dgu, u, &
211  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,6),hnam='VEGTYPE6')
212  CALL read_from_surfex_file(dtco, dgu, u, &
213  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,7),hnam='VEGTYPE7')
214  CALL read_from_surfex_file(dtco, dgu, u, &
215  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,8),hnam='VEGTYPE8')
216  CALL read_from_surfex_file(dtco, dgu, u, &
217  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,9),hnam='VEGTYPE9')
218  CALL read_from_surfex_file(dtco, dgu, u, &
219  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,10),hnam='VEGTYPE10')
220  CALL read_from_surfex_file(dtco, dgu, u, &
221  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,11),hnam='VEGTYPE11')
222  CALL read_from_surfex_file(dtco, dgu, u, &
223  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,12),hnam='VEGTYPE12')
224  CALL read_from_surfex_file(dtco, dgu, u, &
225  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,13),hnam='VEGTYPE13')
226  CALL read_from_surfex_file(dtco, dgu, u, &
227  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,14),hnam='VEGTYPE14')
228  CALL read_from_surfex_file(dtco, dgu, u, &
229  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,18),hnam='VEGTYPE15')
230  CALL read_from_surfex_file(dtco, dgu, u, &
231  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,15),hnam='VEGTYPE16')
232  CALL read_from_surfex_file(dtco, dgu, u, &
233  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,16),hnam='VEGTYPE17')
234  CALL read_from_surfex_file(dtco, dgu, u, &
235  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,17),hnam='VEGTYPE18')
236  CALL read_from_surfex_file(dtco, dgu, u, &
237  cftyp_vegtype,cfnam_vegtype,'NATURE',' ',dti%XPAR_VEGTYPE(:,19),hnam='VEGTYPE19')
238 !
239 ENDIF
240 !
241 IF (gopen) CALL close_filein_ol
242 !
243 ! removes very small values due to computation precision
244 !
245 WHERE(dti%XPAR_VEGTYPE < 1.e-8)dti%XPAR_VEGTYPE(:,:)=0.0
246 !
247 IF (cftyp_vegtype=='ASCII ') THEN
248 #ifdef SFX_ASC
249  CALL set_surfex_file_name_asc(hname_in=hfilein)
250 #endif
251 ELSEIF (cftyp_vegtype=='FA ') THEN
252 #ifdef SFX_FA
253  CALL set_surfex_file_name_fa(hname_in=hfilein)
254 #endif
255 ELSEIF (cftyp_vegtype=='LFI ') THEN
256 #ifdef SFX_LFI
257  CALL set_surfex_file_name_lfi(hname_in=hfilein)
258 #endif
259 ELSEIF (cftyp_vegtype=='NC ') THEN
260 #ifdef SFX_NC
261  CALL set_surfex_file_name_nc(hname_in=hfilein)
262 #endif
263 ENDIF
264 !
265 IF (dti%LDATA_VEGTYPE) THEN
266  IF (maxval(abs(sum(dti%XPAR_VEGTYPE,2)-1.))>1.e-6) THEN
267  jvegtype=count(sum(dti%XPAR_VEGTYPE,2) .GT. 1.e19)
268  WRITE(iluout,*) ' '
269  WRITE(iluout,*) '******************************************************************************'
270  WRITE(iluout,*) '* Error in ISBA data field preparation *'
271  WRITE(iluout,*) '* Sum of XPAR_VEGTYPE on all vegtypes is not equal to 1. for all grid point *'
272  WRITE(iluout,*) '* nbr of indef VEGTYPE =',jvegtype, ' / total nbr =', SIZE(dti%XPAR_VEGTYPE(:,1))
273  WRITE(iluout,*) '* MAXVAL of SUM(XPAR_VEGTYPE,2) =', maxval(sum(dti%XPAR_VEGTYPE,2))
274  WRITE(iluout,*) '* MAXLOC of SUM(XPAR_VEGTYPE,2) =', maxloc(sum(dti%XPAR_VEGTYPE,2))
275  WRITE(iluout,*) '******************************************************************************'
276  WRITE(iluout,*) ' '
277  CALL abor1_sfx('SET_VEGTYPES_FRACTIONS: SUM OF ALL XPAR_VEGTYPE MUST BE 1.')
278  ENDIF
279 ENDIF
280 !
281 IF (dti%LDATA_VEGTYPE) CALL extrapol_fields(dtco, dti, ig, i, ug, u, &
282  hprogram,iluout)
283 !
284 IF (lhook) CALL dr_hook('SET_VEGTYPES_FRACTIONS',1,zhook_handle)
285 !
286 !-------------------------------------------------------------------------------
287 !
288 END SUBROUTINE set_vegtypes_fractions
subroutine set_surfex_file_name_asc(HNAME_IN, HNAME_OUT)
subroutine set_surfex_file_name_lfi(HNAME_IN, HNAME_OUT)
subroutine set_surfex_file_name_fa(HNAME_IN, HNAME_OUT)
subroutine set_surfex_file_name_nc(HNAME_IN, HNAME_OUT)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine close_filein_ol
subroutine set_vegtypes_fractions(DTCO, DGU, DTI, IG, I, UG, U, HPROGRAM)
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine extrapol_fields(DTCO, DTI, IG, I, UG, U, HPROGRAM, KLUOUT)
subroutine read_from_surfex_file(DTCO, DGU, U, HFTYP, HFNAM, HMASK, HSCHEME, PFIELD, HNAM)
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)
subroutine open_filein_ol